diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/FileDownloadCard/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/FileDownloadCard/index.jsx new file mode 100644 index 000000000..f43c3b585 --- /dev/null +++ b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/FileDownloadCard/index.jsx @@ -0,0 +1,126 @@ +import { memo, useState } from "react"; +import { saveAs } from "file-saver"; +import { DownloadSimple, CircleNotch } from "@phosphor-icons/react"; +import { humanFileSize } from "@/utils/numbers"; +import StorageFiles from "@/models/files"; + +/** + * @param {{content: {filename: string, storageFilename?: string, fileSize?: number}}} props + */ +function FileDownloadCard({ props }) { + const { filename, storageFilename, fileSize } = props.content || {}; + const { badge, badgeBg, badgeText, fileType } = getFileDisplayInfo(filename); + const [downloading, setDownloading] = useState(false); + + const handleDownload = async () => { + if (downloading) return; + if (!storageFilename) return; + + setDownloading(true); + try { + const blob = await StorageFiles.download(storageFilename); + if (!blob) throw new Error("Failed to download file"); + saveAs(blob, filename || storageFilename); + } catch { + console.error("Failed to download file"); + } finally { + setDownloading(false); + } + }; + + return ( +
+
+
+
+
+ {badge} +
+
+

+ {filename || "Unknown file"} +

+

+ {humanFileSize(fileSize, true, 1)} + {fileSize && fileType ? " · " : ""} + {fileType} +

+
+
+ +
+
+
+ ); +} + +/** + * Get display info for a file based on its extension + * @param {string} filename + * @returns {{badge: string, badgeBg: string, badgeText: string, fileType: string}} + */ +function getFileDisplayInfo(filename) { + const extension = filename?.split(".")?.pop()?.toLowerCase() ?? "txt"; + switch (extension) { + case "pptx": + case "ppt": + return { + badge: "PPT", + badgeBg: "bg-orange-100", + badgeText: "text-orange-700", + fileType: "PowerPoint", + }; + case "pdf": + return { + badge: "PDF", + badgeBg: "bg-red-100", + badgeText: "text-red-700", + fileType: "PDF Document", + }; + case "doc": + case "docx": + return { + badge: "DOC", + badgeBg: "bg-blue-100", + badgeText: "text-blue-700", + fileType: "Word Document", + }; + case "xls": + case "xlsx": + return { + badge: "XLS", + badgeBg: "bg-green-100", + badgeText: "text-green-700", + fileType: "Spreadsheet", + }; + case "csv": + return { + badge: "CSV", + badgeBg: "bg-green-100", + badgeText: "text-green-700", + fileType: "Spreadsheet", + }; + default: + return { + badge: extension.toUpperCase().slice(0, 4), + badgeBg: "bg-slate-200", + badgeText: "text-slate-700", + fileType: "File", + }; + } +} + +export default memo(FileDownloadCard); diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/HistoricalOutputs/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/HistoricalOutputs/index.jsx new file mode 100644 index 000000000..b5ea62d5a --- /dev/null +++ b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/HistoricalOutputs/index.jsx @@ -0,0 +1,19 @@ +import { memo } from "react"; +import FileDownloadCard from "../../FileDownloadCard"; + +function HistoricalOutputs({ outputs = [] }) { + if (!outputs || outputs.length === 0) return null; + + return ( +
+ {outputs.map((output, index) => ( + + ))} +
+ ); +} + +export default memo(HistoricalOutputs); diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/index.jsx index c01eef854..c6c581753 100644 --- a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/index.jsx +++ b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/HistoricalMessage/index.jsx @@ -18,6 +18,7 @@ import paths from "@/utils/paths"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import { chatQueryRefusalResponse } from "@/utils/chat"; +import HistoricalOutputs from "./HistoricalOutputs"; const HistoricalMessage = ({ uuid = v4(), @@ -34,6 +35,7 @@ const HistoricalMessage = ({ saveEditedMessage, forkThread, metrics = {}, + outputs = [], }) => { const { t } = useTranslation(); const { isEditing } = useEditMessage({ chatId, role }); @@ -156,6 +158,7 @@ const HistoricalMessage = ({ )} + )}
diff --git a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/index.jsx b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/index.jsx index aa615559b..5f60fd3ed 100644 --- a/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/index.jsx +++ b/frontend/src/components/WorkspaceChat/ChatContainer/ChatHistory/index.jsx @@ -10,6 +10,7 @@ import HistoricalMessage from "./HistoricalMessage"; import PromptReply from "./PromptReply"; import StatusResponse from "./StatusResponse"; import ToolApprovalRequest from "./ToolApprovalRequest"; +import FileDownloadCard from "./FileDownloadCard"; import { useManageWorkspaceModal } from "../../../Modals/ManageWorkspace"; import ManageWorkspace from "../../../Modals/ManageWorkspace"; import { ArrowDown } from "@phosphor-icons/react"; @@ -307,6 +308,8 @@ function buildMessages({ if (props.type === "rechartVisualize" && !!props.content) { acc.push(); + } else if (props.type === "fileDownloadCard" && !!props.content) { + acc.push(); } else if (isLastBotReply && props.animate) { acc.push( ); } diff --git a/frontend/src/locales/ar/common.js b/frontend/src/locales/ar/common.js index f276c92a2..540e258ea 100644 --- a/frontend/src/locales/ar/common.js +++ b/frontend/src/locales/ar/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "مرحبا في", getStarted: "بسم الله", welcome: "أهلاً وسهلاً", }, @@ -308,11 +307,6 @@ const TRANSLATIONS = { description: "تمكين الوكيل الافتراضي لإنشاء أنواع مختلفة من المخططات من البيانات المقدمة أو المعطاة في المحادثة.", }, - save: { - title: "إنشاء الملفات وحفظها في المتصفح", - description: - "تمكين الوكيل الافتراضي من إنشاء الملفات والكتابة عليها وحفظها و تنزيلها في متصفحك.", - }, web: { title: "البحث والتصفح المباشر على الويب", description: @@ -357,10 +351,6 @@ const TRANSLATIONS = { title: "الحصول على معلومات الملف", description: "احصل على بيانات وصف تفصيلية حول الملفات.", }, - "write-file": { - title: "إنشاء ملف", - description: "إنشاء ملفات جديدة أو استبدال الملفات الموجودة.", - }, "edit-file": { title: "تحرير الملف", description: @@ -378,6 +368,43 @@ const TRANSLATIONS = { title: "نسخ الملف", description: "نسخ الملفات والمجلدات", }, + "write-text-file": { + title: "إنشاء ملف نصي", + description: + "إنشاء ملفات نصية جديدة أو استبدال الملفات النصية الموجودة.", + }, + }, + }, + createFiles: { + title: "إنشاء المستندات", + description: + "اسمح لمسؤولك بإنشاء ملفات بتنسيقات ثنائية مثل عروض PowerPoint وجداول Excel ووثائق Word وملفات PDF. يمكن تنزيل الملفات مباشرة من نافذة الدردشة.", + configuration: "أنواع المستندات المتاحة", + skills: { + "create-text-file": { + title: "ملفات النصوص", + description: + "إنشاء ملفات نصية تحتوي على أي محتوى وتنسيق (مثل .txt، .md، .json، .csv، إلخ).", + }, + "create-pptx": { + title: "عروض تقديمية باستخدام برنامج باوربوينت", + description: + "إنشاء عروض تقديمية جديدة باستخدام برنامج باوربوينت، تتضمن الشرائح والعناوين والنقاط.", + }, + "create-pdf": { + title: "ملفات PDF", + description: + "إنشاء مستندات PDF من ملفات Markdown أو النصوص البسيطة مع تنسيق أساسي.", + }, + "create-xlsx": { + title: "جداول بيانات في برنامج إكسل", + description: + "إنشاء مستندات Excel للبيانات الجدولية مع الأوراق والتصميم.", + }, + "create-docx": { + title: "ملفات مستندات مايكروسوفت", + description: "إنشاء مستندات Word مع تنسيق وتصميم أساسي.", + }, }, }, }, @@ -694,7 +721,6 @@ const TRANSLATIONS = { select_all: "حدد الكل", deselect_all: "إلغاء التحديد الكل", remove_selected: "حذف المحدد", - costs: "*تكلفة ثابتة لإنشاء التمثيلات", save_embed: "حفظ و تضمين", "total-documents_one": "{{count}}", "total-documents_other": "{{count}} المستندات", diff --git a/frontend/src/locales/cs/common.js b/frontend/src/locales/cs/common.js index b5e962993..222a532b1 100644 --- a/frontend/src/locales/cs/common.js +++ b/frontend/src/locales/cs/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Vítejte v", getStarted: "Začít", welcome: "Vítejte", }, @@ -324,11 +323,6 @@ const TRANSLATIONS = { description: "Umožněte výchozímu agentovi generovat různé typy grafů z dat poskytnutých nebo uvedených v chatu.", }, - save: { - title: "Generovat a ukládat soubory", - description: - "Umožněte výchozímu agentovi generovat a zapisovat do souborů, které lze uložit do počítače.", - }, web: { title: "Živé webové vyhledávání a prohlížení", description: @@ -373,11 +367,6 @@ const TRANSLATIONS = { title: "Získejte informace o souboru", description: "Získejte podrobné metadatumy o souborech.", }, - "write-file": { - title: "Vytvoř soubor", - description: - "Vytvořte nové soubory nebo přepsat stávající soubory.", - }, "edit-file": { title: "Upravit soubor", description: @@ -395,6 +384,44 @@ const TRANSLATIONS = { title: "Zkopírovat soubor", description: "Zkopírujte soubory a adresáře", }, + "write-text-file": { + title: "Vytvořte soubor s textem", + description: + "Vytvořte nové textové soubory nebo přepsáním existujících textových souborů.", + }, + }, + }, + createFiles: { + title: "Vytváření dokumentů", + description: + "Umožněte svému zástupci vytvářet soubory ve formátech jako PowerPoint prezentace, tabulky v Excelu, dokumenty ve formátu Word a soubory ve formátu PDF. Soubory lze stahovat přímo z chatu.", + configuration: "Dostupné typy dokumentů", + skills: { + "create-text-file": { + title: "Soubory v textovém formátu", + description: + "Vytvořte textové soubory s libovolným obsahem a příponou (např. .txt, .md, .json, .csv atd.)", + }, + "create-pptx": { + title: "Prezentace v PowerPointu", + description: + "Vytvořte nové prezentace v programu PowerPoint, včetně slidů, nadpisů a odrážek.", + }, + "create-pdf": { + title: "Dokumenty ve formátu PDF", + description: + "Vytvořte PDF dokumenty z Markdownu nebo jednoduchého textu s základním formátováním.", + }, + "create-xlsx": { + title: "Tabulky v programu Excel", + description: + "Vytvořte tabulkové dokumenty v programu Excel, které budou obsahovat listy a stylování.", + }, + "create-docx": { + title: "Dokumenty ve formátu Word", + description: + "Vytvořte dokumenty ve formátu Word s základním formátováním a stylováním.", + }, }, }, }, @@ -833,7 +860,6 @@ const TRANSLATIONS = { select_all: "Vybrat vše", deselect_all: "Zrušit výběr všeho", remove_selected: "Odebrat vybrané", - costs: "*Jednorázové náklady pro embeddingy", save_embed: "Uložit a vložit", "total-documents_one": "{{count}} dokument", "total-documents_other": "{{count}} dokumenty", diff --git a/frontend/src/locales/da/common.js b/frontend/src/locales/da/common.js index a6b2e3d2d..d51599e5c 100644 --- a/frontend/src/locales/da/common.js +++ b/frontend/src/locales/da/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Velkommen til", getStarted: "Kom godt i gang", welcome: "Velkommen", }, @@ -312,11 +311,6 @@ const TRANSLATIONS = { description: "Gør det muligt for standardagenten at generere forskellige typer diagrammer fra data, der leveres eller gives i chat.", }, - save: { - title: "Generer og gem filer i browseren", - description: - "Gør det muligt for standardagenten at generere og skrive til filer, der gemmes og kan downloades i din browser.", - }, web: { title: "Live web-søgning og browsing", description: @@ -361,10 +355,6 @@ const TRANSLATIONS = { title: "Få filinformation", description: "Få detaljerede metadata om filer", }, - "write-file": { - title: "Opret fil", - description: "Opret nye filer eller skriv over eksisterende filer.", - }, "edit-file": { title: "Rediger fil", description: "Rediger tekstfiler baseret på linjer", @@ -381,6 +371,44 @@ const TRANSLATIONS = { title: "Kopier fil", description: "Kopier filer og mapper", }, + "write-text-file": { + title: "Opret tekstfil", + description: + "Opret nye tekstfiler eller overskriv eksisterende tekstfiler.", + }, + }, + }, + createFiles: { + title: "Dokumentoprettelse", + description: + "Giv din agent mulighed for at oprette binære dokumentformater som PowerPoint-præsentationer, Excel-regneark, Word-dokumenter og PDF-filer. Filerne kan downloades direkte fra chatvinduet.", + configuration: "Tilgængelige dokumenttyper", + skills: { + "create-text-file": { + title: "Tekstfiler", + description: + "Opret tekstfiler med enhver indhold og filtype (.txt, .md, .json, .csv osv.)", + }, + "create-pptx": { + title: "PowerPoint-præsentationer", + description: + "Opret nye PowerPoint-præsentationer med slides, overskrifter og punktlister.", + }, + "create-pdf": { + title: "PDF-dokumenter", + description: + "Opret PDF-dokumenter fra Markdown eller almindelig tekst med grundlæggende formatering.", + }, + "create-xlsx": { + title: "Excel-regneark", + description: + "Opret Excel-dokumenter med tabellerede data, inklusive ark og formatering.", + }, + "create-docx": { + title: "Ord-dokumenter", + description: + "Opret Word-dokumenter med grundlæggende formatering og stil.", + }, }, }, }, @@ -700,7 +728,6 @@ const TRANSLATIONS = { select_all: "Vælg alle", deselect_all: "Fravælg alle", remove_selected: "Fjern valgte", - costs: "*Engangsomkostning for indlejringer", save_embed: "Gem og indlejr", "total-documents_one": "{{count}} dokument", "total-documents_other": "{{count}} dokumenter", diff --git a/frontend/src/locales/de/common.js b/frontend/src/locales/de/common.js index 7bd574c48..518f90d80 100644 --- a/frontend/src/locales/de/common.js +++ b/frontend/src/locales/de/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Willkommen bei", getStarted: "Jetzt starten", welcome: "Herzlich willkommen", }, @@ -315,11 +314,6 @@ const TRANSLATIONS = { description: "Aktivieren Sie den Standard-Agenten, um verschiedene Arten von Diagrammen aus bereitgestellten oder im Chat gegebenen Daten zu generieren.", }, - save: { - title: "Dateien generieren & im Browser speichern", - description: - "Aktivieren Sie den Standard-Agenten, um Dateien zu generieren und zu schreiben, die gespeichert und in Ihrem Browser heruntergeladen werden können.", - }, web: { title: "Live-Websuche und -Browsing", description: @@ -365,11 +359,6 @@ const TRANSLATIONS = { title: "Dateieninformationen abrufen", description: "Erhalten Sie detaillierte Metadaten über Dateien.", }, - "write-file": { - title: "Datei erstellen", - description: - "Neue Dateien erstellen oder vorhandene Dateien überschreiben.", - }, "edit-file": { title: "Datei bearbeiten", description: @@ -388,6 +377,44 @@ const TRANSLATIONS = { title: "Datei kopieren", description: "Dateien und Verzeichnisse kopieren", }, + "write-text-file": { + title: "Textdatei erstellen", + description: + "Erstellen Sie neue Textdateien oder überschreiben Sie vorhandene Textdateien.", + }, + }, + }, + createFiles: { + title: "Dokumentenerstellung", + description: + "Ermöglichen Sie Ihrem Agenten, binäre Dokumentformate wie PowerPoint-Präsentationen, Excel-Tabellen, Word-Dokumente und PDFs zu erstellen. Die Dateien können direkt aus dem Chat-Fenster heruntergeladen werden.", + configuration: "Verfügbare Dokumenttypen", + skills: { + "create-text-file": { + title: "Textdateien", + description: + "Erstellen Sie Textdateien mit beliebigen Inhalten und Dateiendungen (.txt, .md, .json, .csv usw.)", + }, + "create-pptx": { + title: "Präsentationen mit PowerPoint", + description: + "Erstellen Sie neue PowerPoint-Präsentationen mit Folien, Überschriften und Stichpunkten.", + }, + "create-pdf": { + title: "PDF-Dokumente", + description: + "Erstellen Sie PDF-Dokumente aus Markdown- oder reinen Textdateien mit grundlegender Formatierung.", + }, + "create-xlsx": { + title: "Excel-Tabellen", + description: + "Erstellen Sie Excel-Dokumente für tabellarische Daten mit Tabellen und Formatierungen.", + }, + "create-docx": { + title: "Word-Dokumente", + description: + "Erstellen Sie Word-Dokumente mit grundlegender Formatierung und Gestaltung.", + }, }, }, }, @@ -813,7 +840,6 @@ const TRANSLATIONS = { deselect_all: "Auswahl abbrechen", no_docs: "Keine Dokumente vorhanden.", remove_selected: "Ausgewähltes entfernen", - costs: "*Einmalige Kosten für das Einbetten", save_embed: "Speichern und Einbetten", "total-documents_one": "{{count}} Dokument", "total-documents_other": "{{count}} Dokumente", diff --git a/frontend/src/locales/en/common.js b/frontend/src/locales/en/common.js index 0750f52c7..fd5e8bcac 100644 --- a/frontend/src/locales/en/common.js +++ b/frontend/src/locales/en/common.js @@ -1,7 +1,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Welcome to", welcome: "Welcome", getStarted: "Get Started", }, @@ -323,11 +322,6 @@ const TRANSLATIONS = { description: "Enable the default agent to generate various types of charts from data provided or given in chat.", }, - save: { - title: "Generate & save files", - description: - "Enable the default agent to generate and write to files that can be saved to your computer.", - }, web: { title: "Web Search", description: @@ -370,9 +364,10 @@ const TRANSLATIONS = { title: "Get File Info", description: "Get detailed metadata about files", }, - "write-file": { - title: "Write File", - description: "Create new files or overwrite existing files", + "write-text-file": { + title: "Write Text File", + description: + "Create new text files or overwrite existing text files", }, "edit-file": { title: "Edit File", @@ -392,6 +387,39 @@ const TRANSLATIONS = { }, }, }, + createFiles: { + title: "Document Creation", + description: + "Enable your agent to create binary document formats like PowerPoint presentations, Excel spreadsheets, Word documents, and PDFs. Files can be downloaded directly from the chat window.", + configuration: "Available Document Types", + skills: { + "create-text-file": { + title: "Text Files", + description: + "Create text files with any content and extension (.txt, .md, .json, .csv, etc.)", + }, + "create-pptx": { + title: "PowerPoint Presentations", + description: + "Create new PowerPoint presentations with slides, titles, and bullet points", + }, + "create-pdf": { + title: "PDF Documents", + description: + "Create PDF documents from markdown or plain text with basic styling", + }, + "create-xlsx": { + title: "Excel Spreadsheets", + description: + "Create Excel documents for tabular data with sheets and styling", + }, + "create-docx": { + title: "Word Documents", + description: + "Create Word documents with basic styling and formatting", + }, + }, + }, default_skill: "By default, this skill is enabled, but you can disable it if you don't want it to be available to the agent.", }, @@ -909,7 +937,6 @@ const TRANSLATIONS = { select_all: "Select All", deselect_all: "Deselect All", remove_selected: "Remove Selected", - costs: "*One time cost for embeddings", save_embed: "Save and Embed", }, upload: { diff --git a/frontend/src/locales/es/common.js b/frontend/src/locales/es/common.js index d1de55314..0e7c83f7d 100644 --- a/frontend/src/locales/es/common.js +++ b/frontend/src/locales/es/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Bienvenido a", getStarted: "Comenzar", welcome: "Bienvenido", }, @@ -321,11 +320,6 @@ const TRANSLATIONS = { description: "Habilita al agente predeterminado para generar varios tipos de gráficos a partir de datos proporcionados o dados en el chat.", }, - save: { - title: "Generar y guardar archivos en el navegador", - description: - "Habilita al agente predeterminado para generar y escribir en archivos que se guardan y se pueden descargar en tu navegador.", - }, web: { title: "Búsqueda y navegación web en vivo", description: @@ -372,11 +366,6 @@ const TRANSLATIONS = { description: "Obtenga información detallada sobre los metadatos de los archivos.", }, - "write-file": { - title: "Crear archivo", - description: - "Crear nuevos archivos o sobrescribir archivos existentes.", - }, "edit-file": { title: "Editar archivo", description: @@ -394,6 +383,44 @@ const TRANSLATIONS = { title: "Copiar archivo", description: "Copiar archivos y directorios", }, + "write-text-file": { + title: "Crear un archivo de texto", + description: + "Cree nuevos archivos de texto o sobrescriba archivos de texto existentes.", + }, + }, + }, + createFiles: { + title: "Creación de documentos", + description: + "Permita que su agente cree formatos de documentos binarios como presentaciones de PowerPoint, hojas de cálculo de Excel, documentos de Word y archivos PDF. Los archivos se pueden descargar directamente desde la ventana de chat.", + configuration: "Tipos de documentos disponibles", + skills: { + "create-text-file": { + title: "Archivos de texto", + description: + "Cree archivos de texto con cualquier contenido y extensión (por ejemplo, .txt, .md, .json, .csv, etc.).", + }, + "create-pptx": { + title: "Presentaciones en PowerPoint", + description: + "Crea nuevas presentaciones de PowerPoint con diapositivas, títulos y viñetas.", + }, + "create-pdf": { + title: "Documentos en formato PDF", + description: + "Cree documentos PDF a partir de archivos Markdown o texto plano, con un estilo básico.", + }, + "create-xlsx": { + title: "Hojas de cálculo de Excel", + description: + "Cree documentos de Excel para datos tabulares, con hojas y opciones de formato.", + }, + "create-docx": { + title: "Documentos de Microsoft Word", + description: + "Crea documentos de Word con un estilo y formato básicos.", + }, }, }, }, @@ -822,7 +849,6 @@ const TRANSLATIONS = { select_all: "Seleccionar todo", deselect_all: "Deseleccionar todo", remove_selected: "Eliminar seleccionados", - costs: "*Costo único por incrustaciones", save_embed: "Guardar e incrustar", "total-documents_one": "{{count}} documento", "total-documents_other": "{{count}} documentos", diff --git a/frontend/src/locales/et/common.js b/frontend/src/locales/et/common.js index c41c561c2..5ebf36664 100644 --- a/frontend/src/locales/et/common.js +++ b/frontend/src/locales/et/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Tere tulemast", getStarted: "Alusta", welcome: "Tere tulemast", }, @@ -307,11 +306,6 @@ const TRANSLATIONS = { title: "Loo diagramme", description: "Lubab agendil luua erinevaid diagramme antud andmetest.", }, - save: { - title: "Loo ja salvesta faile brauserisse", - description: - "Lubab agendil luua faile, mis salvestatakse ja allalaaditakse brauseris.", - }, web: { title: "Reaalajas veebihaku tugi", description: @@ -356,10 +350,6 @@ const TRANSLATIONS = { title: "Hankige faili teave", description: "Hankige üksikasjalik teavet failide kohta", }, - "write-file": { - title: "Faili loomine", - description: "Loo uusi faili või asenda olemasoleva faili", - }, "edit-file": { title: "Faili redigeerimine", description: "Muuda teksti failide sisu rida- järgselt.", @@ -376,6 +366,44 @@ const TRANSLATIONS = { title: "Kopeeri fail", description: "Kopeeri failid ja kaardi", }, + "write-text-file": { + title: "Loo teksti fail", + description: + "Loo uusi teksti faili või asenda olemasolevaid teksti faile", + }, + }, + }, + createFiles: { + title: "Dokumendi koostamine", + description: + "Laske oma esindajal luua binaarsed dokumendiformaadid, näiteks PowerPointi esitlused, Exceli lehed, Wordi dokumendid ja PDF-failid. Failid saab alla laadida otse vestlusaknast.", + configuration: "Saadaval olevad dokumendi tüübid", + skills: { + "create-text-file": { + title: "Tekstifailid", + description: + "Loo teksti failid, milles on mis tahes sisu ja laiendus (esimärkid .txt, .md, .json, .csv jne).", + }, + "create-pptx": { + title: "PowerPointi esitlused", + description: + "Loo uusi PowerPointi esitlusi, mis sisaldavad slaidide, pealkirjade ja punktide.", + }, + "create-pdf": { + title: "PDF-failid", + description: + "Loo PDF-failid Markdown- või tavaline tekstist, kasutades lihtsaid stiilid", + }, + "create-xlsx": { + title: "Excel-i lehed", + description: + "Loo Excel-failid, mis sisaldavad tabeli andmeid, lehtede ja stiilidega.", + }, + "create-docx": { + title: "Microsoft Word-failid", + description: + "Loo Microsoft Wordi dokumende, kasutades põhise stiili ja vormistuse", + }, }, }, }, @@ -778,7 +806,6 @@ const TRANSLATIONS = { select_all: "Vali kõik", deselect_all: "Tühista valik", remove_selected: "Eemalda valitud", - costs: "*Ühekordne embeddingu kulu", save_embed: "Salvesta ja põimi", "total-documents_one": "{{count}} dokument", "total-documents_other": "{{count}} dokumendid", diff --git a/frontend/src/locales/fa/common.js b/frontend/src/locales/fa/common.js index 22e4cdd3b..94f0de03a 100644 --- a/frontend/src/locales/fa/common.js +++ b/frontend/src/locales/fa/common.js @@ -17,7 +17,6 @@ const TRANSLATIONS = { "ما را در ساخت مدل AnythingLLM متناسب با نیازهای شما یاری دهید. (این بخش اختیاری است)", }, home: { - title: "به", getStarted: "شروع کنید", welcome: "به شما خوش آمد می‌گوییم", }, @@ -310,11 +309,6 @@ const TRANSLATIONS = { description: "به عامل پیش‌فرض امکان تولید انواع مختلف نمودار از داده‌های ارائه شده یا داده شده در گفتگو را بدهید.", }, - save: { - title: "تولید و ذخیره فایل‌ها در مرورگر", - description: - "به عامل پیش‌فرض امکان تولید و نوشتن در فایل‌هایی که ذخیره می‌شوند و می‌توانند در مرورگر شما دانلود شوند را بدهید.", - }, web: { title: "جستجو و مرور زنده وب", description: @@ -358,10 +352,6 @@ const TRANSLATIONS = { title: "اطلاعات فایل را دریافت کنید", description: "اطلاعات دقیق در مورد فایل‌ها را دریافت کنید.", }, - "write-file": { - title: "ایجاد فایل", - description: "ایجاد فایل‌های جدید یا جایگزینی فایل‌های موجود", - }, "edit-file": { title: "ویرایش فایل", description: "امکان ویرایش متون از طریق ویرایش خط به خط", @@ -378,6 +368,44 @@ const TRANSLATIONS = { title: "کپی فایل", description: "فایل‌ها و دایرکتوری‌ها را کپی کنید.", }, + "write-text-file": { + title: "ایجاد یک فایل متنی", + description: + "ایجاد فایل‌های متنی جدید یا جایگزینی فایل‌های متنی موجود", + }, + }, + }, + createFiles: { + title: "ایجاد مستند", + description: + "به کارگزار خود اجازه دهید فرمت‌های اسناد دودویی مانند ارائه پاورپوینت، صفحات گسترده اکسل، اسناد ورد و فایل‌های PDF را ایجاد کند. کاربران می‌توانند فایل‌ها را مستقیماً از پنجره چت دانلود کنند.", + configuration: "انواع اسناد موجود", + skills: { + "create-text-file": { + title: "فایل‌های متنی", + description: + "ایجاد فایل‌های متنی با هر نوع محتوا و پسوند (مانند .txt، .md، .json، .csv و غیره)", + }, + "create-pptx": { + title: "ارائه های پاورپوینت", + description: + "ایجاد اسلایدها، عناوین و فهرست‌های بولت برای ارائه پاورپوینت‌های جدید", + }, + "create-pdf": { + title: "اسناد به فرمت PDF", + description: + "ایجاد اسناد PDF از متن ساده یا فرمت‌های Markdown با استفاده از استایل‌های پایه", + }, + "create-xlsx": { + title: "برگه های اکسل", + description: + "ایجاد فایل‌های اکسل حاوی داده‌های جدولی با جداول و استایل‌های مختلف", + }, + "create-docx": { + title: "اسناد و فایل‌های وورد", + description: + "ایجاد فایل‌های Word با استفاده از قالب‌بندی و استایل‌های ساده", + }, }, }, }, @@ -696,7 +724,6 @@ const TRANSLATIONS = { select_all: "انتخاب همه", deselect_all: "انتخاب همه را لغو کنید", remove_selected: "حذف انتخاب‌شده", - costs: "*هزینه یکباره برای ایجاد مدل‌های برداری", save_embed: "ذخیره و وارد کردن", "total-documents_one": "{{count}} سند", "total-documents_other": "{{count}} اسناد", diff --git a/frontend/src/locales/fr/common.js b/frontend/src/locales/fr/common.js index 2bf80082c..6ac9611eb 100644 --- a/frontend/src/locales/fr/common.js +++ b/frontend/src/locales/fr/common.js @@ -16,7 +16,6 @@ const TRANSLATIONS = { "Aidez-nous à améliorer AnythingLLM en répondant à quelques questions.", }, home: { - title: "Bienvenue", getStarted: "Commencer", welcome: "Bienvenue", }, @@ -311,11 +310,6 @@ const TRANSLATIONS = { description: "Activez l'agent par défaut pour générer différents types de graphiques à partir des données fournies ou données dans le chat.", }, - save: { - title: "Générer et sauvegarder des fichiers dans le navigateur", - description: - "Activez l'agent par défaut pour générer et écrire des fichiers qui peuvent être sauvegardés et téléchargés dans votre navigateur.", - }, web: { title: "Recherche web en direct et navigation", description: @@ -361,11 +355,6 @@ const TRANSLATIONS = { title: "Obtenir des informations sur le fichier", description: "Obtenez des métadonnées détaillées sur les fichiers.", }, - "write-file": { - title: "Créer un fichier", - description: - "Créer de nouveaux fichiers ou remplacer des fichiers existants.", - }, "edit-file": { title: "Modifier le fichier", description: @@ -384,6 +373,44 @@ const TRANSLATIONS = { title: "Copier le fichier", description: "Copier des fichiers et des répertoires", }, + "write-text-file": { + title: "Créer un fichier texte", + description: + "Créer de nouveaux fichiers texte ou remplacer des fichiers texte existants.", + }, + }, + }, + createFiles: { + title: "Création de documents", + description: + "Permettez à votre agent de créer des documents au format binaire, tels que des présentations PowerPoint, des feuilles de calcul Excel, des documents Word et des fichiers PDF. Les fichiers peuvent être téléchargés directement depuis la fenêtre de chat.", + configuration: "Types de documents disponibles", + skills: { + "create-text-file": { + title: "Fichiers de texte", + description: + "Créez des fichiers texte avec n'importe quel contenu et extension (par exemple, .txt, .md, .json, .csv, etc.)", + }, + "create-pptx": { + title: "Présentations PowerPoint", + description: + "Créez de nouvelles présentations PowerPoint avec des diapositives, des titres et des puces.", + }, + "create-pdf": { + title: "Documents au format PDF", + description: + "Créez des documents PDF à partir de fichiers Markdown ou de texte brut, avec un style de base.", + }, + "create-xlsx": { + title: "Feuilles de calcul Excel", + description: + "Créez des documents Excel pour les données tabulaires, avec des feuilles et un style.", + }, + "create-docx": { + title: "Documents au format Word", + description: + "Créez des documents Word avec un style et une mise en page de base.", + }, }, }, }, @@ -703,7 +730,6 @@ const TRANSLATIONS = { select_all: "Tout sélectionner", deselect_all: "Tout désélectionner", remove_selected: "Supprimer la sélection", - costs: "Coûts", save_embed: "Sauvegarder et intégrer", "total-documents_one": "{{count}}", "total-documents_other": "{{count}} documents", diff --git a/frontend/src/locales/he/common.js b/frontend/src/locales/he/common.js index 41c68e9a8..83c7a9022 100644 --- a/frontend/src/locales/he/common.js +++ b/frontend/src/locales/he/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "ברוכים הבאים ל", getStarted: "להתחלה", welcome: "ברוכים הבאים", }, @@ -309,11 +308,6 @@ const TRANSLATIONS = { description: "אפשר לסוכן ברירת המחדל ליצור סוגים שונים של תרשימים מנתונים שסופקו או ניתנו בצ'אט.", }, - save: { - title: "יצירה ושמירה של קבצים לדפדפן", - description: - "אפשר לסוכן ברירת המחדל ליצור ולכתוב לקבצים שנשמרים וניתנים להורדה בדפדפן שלך.", - }, web: { title: "חיפוש וגלישה באינטרנט בזמן אמת", description: @@ -357,10 +351,6 @@ const TRANSLATIONS = { title: "קבל מידע על הקובץ", description: "קבל מידע מפורט על קבצים", }, - "write-file": { - title: "יצירת קובץ", - description: "יצירת קבצים חדשים או החלפת קבצים קיימים", - }, "edit-file": { title: "ערוך קובץ", description: "בצעו עריכה של קבצי טקסט על בסיס שורות.", @@ -377,6 +367,42 @@ const TRANSLATIONS = { title: "העתק קובץ", description: "העתקת קבצים וספריות", }, + "write-text-file": { + title: "יצירת קובץ טקסט", + description: "יצירת קבצי טקסט חדשים או החלפת קבצי טקסט קיימים", + }, + }, + }, + createFiles: { + title: "יצירת מסמכים", + description: + "אפשרו למתווך שלכם ליצור פורמטים של מסמכים בינאריים, כמו מצגות של פאוורPoint, גיליונות אלקטרוניים של Excel, מסמכי Word ו-PDF. ניתן להוריד את הקבצים ישירות מהחלון של השיחה.", + configuration: "סוגי המסמכים הזמינים", + skills: { + "create-text-file": { + title: "קבצי טקסט", + description: + "צרו קבצי טקסט עם כל תוכן ותוספת (כגון .txt, .md, .json, .csv וכו').", + }, + "create-pptx": { + title: "מצגות של פאוור פוינט", + description: + "צרו מצגות חדשות בפורמט PowerPoint, הכוללות שקופיות, כותרות ונקודות עיקריות.", + }, + "create-pdf": { + title: "מסמכים בפורמט PDF", + description: + "יצירת מסמכים בפורמט PDF ממחרוזות markdown או טקסט פשוט, עם עיצוב בסיסי.", + }, + "create-xlsx": { + title: "גיליונות אקסל", + description: + "צור מסמכי Excel עבור נתונים טבלאיים, הכוללים גיליונות ועריכת עיצוב.", + }, + "create-docx": { + title: "מסמכים בפורמט Word", + description: "צור מסמכים בפורמט Word עם עיצוב ועיצוב בסיסיים.", + }, }, }, }, @@ -781,7 +807,6 @@ const TRANSLATIONS = { select_all: "בחר הכל", deselect_all: "בטל בחירת הכל", remove_selected: "הסר נבחרים", - costs: "*עלות חד פעמית להטמעות", save_embed: "שמור והטמע", "total-documents_one": "{{count}} מסמך", "total-documents_other": "מסמכים {{count}}", diff --git a/frontend/src/locales/it/common.js b/frontend/src/locales/it/common.js index 1c520332a..76f25f05f 100644 --- a/frontend/src/locales/it/common.js +++ b/frontend/src/locales/it/common.js @@ -17,7 +17,6 @@ const TRANSLATIONS = { "Aiutaci a sviluppare AnythingLLM in base alle tue esigenze. Facoltativo.", }, home: { - title: "Benvenuti a", getStarted: "Inizia", welcome: "Benvenuti", }, @@ -314,11 +313,6 @@ const TRANSLATIONS = { description: "Consenti all'agente predefinito di generare vari tipi di grafici dai dati forniti o forniti nella chat.", }, - save: { - title: "Genera e salva file nel browser", - description: - "Abilita l'agente predefinito per generare e scrivere su file che possono essere salvati e scaricati nel tuo browser.", - }, web: { title: "Ricerca e navigazione web in tempo reale", description: @@ -364,10 +358,6 @@ const TRANSLATIONS = { title: "Ottieni informazioni sul file", description: "Ottenere metadati dettagliati sui file.", }, - "write-file": { - title: "Creare file", - description: "Creare nuovi file o sovrascrivere i file esistenti.", - }, "edit-file": { title: "Modifica file", description: "Applica modifiche basate su righe ai file di testo.", @@ -384,6 +374,44 @@ const TRANSLATIONS = { title: "Copia file", description: "Copia file e directory", }, + "write-text-file": { + title: "Crea un file di testo", + description: + "Creare nuovi file di testo o sovrascrivere file di testo esistenti.", + }, + }, + }, + createFiles: { + title: "Creazione di documenti", + description: + "Permetti al tuo agente di creare file in formati binari come presentazioni PowerPoint, fogli di calcolo Excel, documenti Word e file PDF. I file possono essere scaricati direttamente dalla finestra di chat.", + configuration: "Tipi di documenti disponibili", + skills: { + "create-text-file": { + title: "File di testo", + description: + "Creare file di testo con qualsiasi contenuto ed estensione (ad esempio, .txt, .md, .json, .csv, ecc.)", + }, + "create-pptx": { + title: "Presentazioni PowerPoint", + description: + "Crea nuove presentazioni PowerPoint con diapositive, titoli e punti elenco.", + }, + "create-pdf": { + title: "Documenti in formato PDF", + description: + "Creare documenti PDF da file Markdown o testo semplice, con un'applicazione di formattazione di base.", + }, + "create-xlsx": { + title: "Fogli di calcolo Excel", + description: + "Crea documenti Excel per dati tabulari, con fogli e stili.", + }, + "create-docx": { + title: "Documenti in formato Word", + description: + "Creare documenti Word con un'impaginazione e formattazione di base.", + }, }, }, }, @@ -705,7 +733,6 @@ const TRANSLATIONS = { select_all: "Seleziona tutto", deselect_all: "Deselect All", remove_selected: "Elimina gli elementi selezionati", - costs: "*Costo una tantum per le embedding", save_embed: "Salva e incorpora", "total-documents_one": "{{count}} documento", "total-documents_other": "{{count}} documenti", diff --git a/frontend/src/locales/ja/common.js b/frontend/src/locales/ja/common.js index cdd5fea92..8a812af36 100644 --- a/frontend/src/locales/ja/common.js +++ b/frontend/src/locales/ja/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "ようこそ", getStarted: "はじめる", welcome: "ようこそ", }, @@ -306,11 +305,6 @@ const TRANSLATIONS = { description: "デフォルトエージェントがチャットやデータからさまざまなチャートを作成できるようにします。", }, - save: { - title: "ファイルの生成と保存", - description: - "デフォルトエージェントがファイルを生成し、ブラウザからダウンロードできるようにします。", - }, web: { title: "ウェブ検索と閲覧", description: @@ -355,11 +349,6 @@ const TRANSLATIONS = { title: "ファイルの情報を取得する", description: "ファイルに関する詳細なメタデータを取得する", }, - "write-file": { - title: "ファイルを作成", - description: - "新しいファイルを作成するか、既存のファイルを上書きする", - }, "edit-file": { title: "ファイル編集", description: "テキストファイルの行単位での編集を行う", @@ -376,6 +365,43 @@ const TRANSLATIONS = { title: "ファイルのコピー", description: "ファイルとディレクトリをコピーする", }, + "write-text-file": { + title: "テキストファイルを作成する", + description: + "新しいテキストファイルを作成するか、既存のテキストファイルを上書きする。", + }, + }, + }, + createFiles: { + title: "ドキュメント作成", + description: + "エージェントが、パワーポイント、Excel、Word、PDFなどのバイナリ形式のドキュメントを作成できるようにします。ファイルはチャットウィンドウから直接ダウンロードできます。", + configuration: "利用可能なドキュメントの種類", + skills: { + "create-text-file": { + title: "テキストファイル", + description: + ".txt、.md、.json、.csvなどの拡張子を持つ、任意のコンテンツのテキストファイルを作成する。", + }, + "create-pptx": { + title: "パワーポイント形式のプレゼンテーション", + description: + "スライド、タイトル、箇条書きを含む、新しいPowerPointプレゼンテーションを作成する。", + }, + "create-pdf": { + title: "PDFドキュメント", + description: + "マークダウンまたはプレーンテキストから、基本的な書式設定を使用してPDFドキュメントを作成する。", + }, + "create-xlsx": { + title: "エクセル スプレッドシート", + description: + "表形式のデータをスプレッドシート形式で作成し、シートとスタイルを設定する。", + }, + "create-docx": { + title: "Wordドキュメント", + description: "基本的なスタイルと書式でWordドキュメントを作成する", + }, }, }, }, @@ -690,7 +716,6 @@ const TRANSLATIONS = { select_all: "すべて選択", deselect_all: "すべて選択解除", remove_selected: "選択したものを削除", - costs: "※埋め込みには一度だけ費用がかかります", save_embed: "保存して埋め込む", "total-documents_one": "{{count}} のドキュメント", "total-documents_other": "{{count}} に関する書類", diff --git a/frontend/src/locales/ko/common.js b/frontend/src/locales/ko/common.js index 5aa3fb6e7..4ea4b7766 100644 --- a/frontend/src/locales/ko/common.js +++ b/frontend/src/locales/ko/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "방문을 환영합니다", getStarted: "시작하기", welcome: "환영합니다", }, @@ -310,11 +309,6 @@ const TRANSLATIONS = { description: "기본 에이전트가 채팅에서 제공된 데이터를 이용하여 다양한 유형의 차트를 생성할 수 있도록 합니다.", }, - save: { - title: "브라우저에서 파일 생성과 저장", - description: - "기본 에이전트가 브라우저에서 파일을 생성하고 다운로드할 수 있도록 합니다.", - }, web: { title: "실시간 웹 검색 및 탐색", description: @@ -359,10 +353,6 @@ const TRANSLATIONS = { title: "파일 정보 확인", description: "파일에 대한 자세한 메타데이터를 얻으세요.", }, - "write-file": { - title: "파일 작성", - description: "새로운 파일을 생성하거나 기존 파일을 덮어쓰기", - }, "edit-file": { title: "파일 편집", description: "텍스트 파일에 줄 단위로 편집", @@ -379,6 +369,44 @@ const TRANSLATIONS = { title: "파일 복사", description: "파일 및 디렉터리를 복사", }, + "write-text-file": { + title: "텍스트 파일 작성", + description: + "새로운 텍스트 파일을 생성하거나 기존 텍스트 파일을 덮어쓰기", + }, + }, + }, + createFiles: { + title: "문서 생성", + description: + "에이전트가 파워포인트 프레젠테이션, 엑셀 스프레드시트, 워드 문서, PDF 등 이진 파일 형식의 문서를 생성할 수 있도록 지원합니다. 파일은 채팅 창에서 직접 다운로드할 수 있습니다.", + configuration: "사용 가능한 문서 유형", + skills: { + "create-text-file": { + title: "텍스트 파일", + description: + "원하는 내용과 확장자(.txt, .md, .json, .csv 등)를 사용하여 텍스트 파일을 생성합니다.", + }, + "create-pptx": { + title: "파워포인트 프레젠테이션", + description: + "슬라이드, 제목, 마크다운 등을 포함하여 새로운 파워포인트 프레젠테이션을 만드세요.", + }, + "create-pdf": { + title: "PDF 문서", + description: + "기본 스타일을 적용하여 마크다운 또는 일반 텍스트에서 PDF 문서를 생성합니다.", + }, + "create-xlsx": { + title: "엑셀 스프레드시트", + description: + "표와 스타일을 포함한 표 형태의 데이터를 위한 엑셀 문서를 만드세요.", + }, + "create-docx": { + title: "워드 문서", + description: + "기본적인 스타일과 서식을 사용하여 워드 문서를 만드세요.", + }, }, }, }, @@ -790,7 +818,6 @@ const TRANSLATIONS = { select_all: "전체 선택", deselect_all: "전체 선택 해제", remove_selected: "선택 항목 삭제", - costs: "*임베딩 1회 비용", save_embed: "저장 및 임베딩", "total-documents_one": "{{count}} 문서", "total-documents_other": "{{count}} 관련 문서", diff --git a/frontend/src/locales/lt/common.js b/frontend/src/locales/lt/common.js index 06a15e9c9..5c87cb648 100644 --- a/frontend/src/locales/lt/common.js +++ b/frontend/src/locales/lt/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Sveiki atvykę į", getStarted: "Pradėti", welcome: "Sveiki", }, @@ -323,11 +322,6 @@ const TRANSLATIONS = { description: "Leidžia numatytajam agentui generuoti įvairių tipų diagramas pagal pateiktus arba pokalbio metu gautus duomenis.", }, - save: { - title: "Generuoti ir išsaugoti failus", - description: - "Leidžia numatytajam agentui generuoti ir rašyti failus, kuriuos galima išsaugoti jūsų kompiuteryje.", - }, web: { title: "Paieška internete", description: @@ -372,10 +366,6 @@ const TRANSLATIONS = { title: "Gaukite failo informaciją", description: "Gaukite išsamią informaciją apie failus.", }, - "write-file": { - title: "Sukurti failą", - description: "Sukurti naujus failus arba pakeisti esamus", - }, "edit-file": { title: "Redaguoti failą", description: "Atlikite teksto failų redakciją, remdamiesi eilėmis.", @@ -392,6 +382,44 @@ const TRANSLATIONS = { title: "Kopijuoti failą", description: "Kopijuoti failus ir katalogus", }, + "write-text-file": { + title: "Sukurti teksto failą", + description: + "Sukurkite naujus tekstinius failus arba pakeiskite esamus tekstinius failus.", + }, + }, + }, + createFiles: { + title: "Dokumento sukūrimas", + description: + "Įgalinkite savo agentą kurti dvigubos formos dokumentų formatus, tokius kaip „PowerPoint“ prezentacijos, „Excel“ lentelės, „Word“ dokumentai ir PDF failus. Failus galima atsisiųsti tiesiai iš pokalbio lango.", + configuration: "Galimi dokumentų tipai", + skills: { + "create-text-file": { + title: "Tekstiniai failai", + description: + "Sukurkite teksto failus su bet kokiu turiniu ir failų sąlypa (.txt, .md, .json, .csv ir kt.)", + }, + "create-pptx": { + title: "„PowerPoint“ pristatymai", + description: + "Sukurkite naujas PowerPoint prezentacijas, naudodami slaidus, pavadinimus ir punktų sąrašus.", + }, + "create-pdf": { + title: "PDF dokumentai", + description: + "Sukurkite PDF dokumentus iš Markdown ar paprastos teksto formato, naudodami pagrindinius stiliaus elementus.", + }, + "create-xlsx": { + title: "„Excel“ lentelės", + description: + "Sukurkite Excel dokumentus, skirtus lentelių duomenims, su lapais ir stiliaus parametrais.", + }, + "create-docx": { + title: "Skelbimo dokumentai", + description: + "Sukurkite Word dokumentus su pagrindine stiliavimo ir formavimo funkcija.", + }, }, }, }, @@ -834,7 +862,6 @@ const TRANSLATIONS = { select_all: "Žymėti viską", deselect_all: "Atžymėti viską", remove_selected: "Šalinti pažymėtus", - costs: "*Vienkartinis mokestis už vektorių kūrimą", save_embed: "Išsaugoti ir kurti vektorius", }, upload: { diff --git a/frontend/src/locales/lv/common.js b/frontend/src/locales/lv/common.js index 9288a5977..c7aebd705 100644 --- a/frontend/src/locales/lv/common.js +++ b/frontend/src/locales/lv/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Laipni lūgti", getStarted: "Sākt darbu", welcome: "Laipni lūdzam", }, @@ -315,11 +314,6 @@ const TRANSLATIONS = { description: "Iespējot noklusējuma aģentam ģenerēt dažāda veida diagrammas no sarunā sniegtajiem vai dotajiem datiem.", }, - save: { - title: "Ģenerēt un saglabāt failus pārlūkā", - description: - "Iespējot noklusējuma aģentam ģenerēt un rakstīt failus, kas saglabājas un var tikt lejupielādēti jūsu pārlūkā.", - }, web: { title: "Tiešsaistes tīmekļa meklēšana un pārlūkošana", description: @@ -365,10 +359,6 @@ const TRANSLATIONS = { title: "Iegūst faila informāciju", description: "Iesaļojiet detalizētus failu metadatus", }, - "write-file": { - title: "Izveidot failu", - description: "Izveidot jaunas failus vai pārrakstīt esošus failus", - }, "edit-file": { title: "Rediģēt failu", description: @@ -386,6 +376,44 @@ const TRANSLATIONS = { title: "Kopēt failu", description: "Kopēt failus un direktorus", }, + "write-text-file": { + title: "Izveidot teksta failu", + description: + "Izveidot jaunas teksta failus vai pārrakstīt esošos teksta failus.", + }, + }, + }, + createFiles: { + title: "Dokumentu izveide", + description: + "Ļauj savam pārstāvim izveidot binārus dokumentu formātus, piemēram, PowerPoint prezentācijas, Excel tabulas, Word dokumentus un PDF failus. Failus var lejupielādēt tieši no čata.", + configuration: "Pieejamās dokumentu veidas", + skills: { + "create-text-file": { + title: "Teksta faili", + description: + "Izveidot teksta failus ar jebkuru saturu un izplejumu (.txt, .md, .json, .csv utt.)", + }, + "create-pptx": { + title: "PowerPoint prezentācijas", + description: + "Izveidot jaunas PowerPoint prezentācijas ar slaidiem, nosaukumiem un punktiem.", + }, + "create-pdf": { + title: "PDF dokumenti", + description: + "Izveidot PDF dokumentus no Markdown vai vienkāršas teksta, izmantojot pamata formāciju.", + }, + "create-xlsx": { + title: "Excel tabulas", + description: + "Izveidot Excel dokumentus ar tabulas datiem, kas ietver lapas un stila iespējas.", + }, + "create-docx": { + title: "Vārdu dokumenti", + description: + "Izveidot Word dokumentus ar pamata stils un formātēšanu", + }, }, }, }, @@ -805,7 +833,6 @@ const TRANSLATIONS = { select_all: "Atlasīt visu", deselect_all: "Atcelt visu atlasi", remove_selected: "Noņemt atlasītos", - costs: "*Vienreizējas izmaksas iegulšanai", save_embed: "Saglabāt un iegult", "total-documents_one": "{{count}} dokumenta", "total-documents_other": "{{count}} dokumenti", diff --git a/frontend/src/locales/nl/common.js b/frontend/src/locales/nl/common.js index d8b05f7b9..536b341d2 100644 --- a/frontend/src/locales/nl/common.js +++ b/frontend/src/locales/nl/common.js @@ -17,7 +17,6 @@ const TRANSLATIONS = { "Help ons AnythingLLM af te stemmen op jouw behoeften. (Optioneel)", }, home: { - title: "Welkom bij", getStarted: "Aan de slag", welcome: "Welkom", }, @@ -310,11 +309,6 @@ const TRANSLATIONS = { description: "Sta de standaardagent toe om verschillende soorten grafieken te genereren uit verstrekte of in de chat gegeven gegevens.", }, - save: { - title: "Genereren & opslaan van bestanden naar browser", - description: - "Sta de standaardagent toe om te genereren en te schrijven naar bestanden die worden opgeslagen en kunnen worden gedownload in je browser.", - }, web: { title: "Live web zoeken en browsen", description: @@ -361,11 +355,6 @@ const TRANSLATIONS = { title: "Fijlsinformatie bekijken", description: "Verkrijg gedetailleerde metadata over bestanden.", }, - "write-file": { - title: "Schrijf bestand", - description: - "Maak nieuwe bestanden aan of vervang bestaande bestanden.", - }, "edit-file": { title: "Bestand bewerken", description: "Voer wijzigingen uit op tekstbestanden, per regel.", @@ -382,6 +371,43 @@ const TRANSLATIONS = { title: "Kopieer bestand", description: "Kopieer bestanden en mappen", }, + "write-text-file": { + title: "Maak een tekstbestand", + description: + "Maak nieuwe tekstbestanden aan of vervang bestaande tekstbestanden.", + }, + }, + }, + createFiles: { + title: "Documentcreatie", + description: + "Laat uw agent documenten in binair formaat aanmaken, zoals PowerPoint-presentaties, Excel-tabellen, Word-documenten en PDF-bestanden. Bestanden kunnen direct worden gedownload vanuit het chatvenster.", + configuration: "Beschikbare documenttypen", + skills: { + "create-text-file": { + title: "Tekstbestanden", + description: + "Maak tekstbestanden met elk gewenst inhoud en bestandsextensie (bijvoorbeeld .txt, .md, .json, .csv, enz.).", + }, + "create-pptx": { + title: "Presentaties met PowerPoint", + description: + "Maak nieuwe PowerPoint-presentaties met dia's, titels en opsommingstekens.", + }, + "create-pdf": { + title: "PDF-documenten", + description: + "Maak PDF-documenten aan vanuit Markdown of gewone tekst, met basisstijling.", + }, + "create-xlsx": { + title: "Excel-tabellen", + description: + "Maak Excel-documenten voor tabelgegevens, met tabbladen en opmaak.", + }, + "create-docx": { + title: "Word-documenten", + description: "Maak Word-documenten met basisstijlen en -opmaak.", + }, }, }, }, @@ -702,7 +728,6 @@ const TRANSLATIONS = { select_all: "Alles selecteren", deselect_all: "Alles deselecteren", remove_selected: "Verwijderen Geselecteerd", - costs: "*Eenmalige kosten voor embedden", save_embed: "Opslaan en embedden", "total-documents_one": "{{count}} document", "total-documents_other": "{{count}} documenten", diff --git a/frontend/src/locales/pl/common.js b/frontend/src/locales/pl/common.js index fd81273d6..c0aad7832 100644 --- a/frontend/src/locales/pl/common.js +++ b/frontend/src/locales/pl/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Witamy w", getStarted: "Rozpocznij", welcome: "Witaj", }, @@ -316,11 +315,6 @@ const TRANSLATIONS = { description: "Pozwól domyślnemu agentowi generować różne typy wykresów na podstawie danych dostarczonych lub podanych na czacie.", }, - save: { - title: "Generowanie i zapisywanie plików w przeglądarce", - description: - "Pozwól domyślnemu agentowi generować i zapisywać pliki, które można zapisać i pobrać w przeglądarce.", - }, web: { title: "Wyszukiwanie i przeglądanie stron internetowych na żywo", description: @@ -366,10 +360,6 @@ const TRANSLATIONS = { title: "Pobierz informacje o pliku", description: "Uzyskaj szczegółowe metadane dotyczące plików.", }, - "write-file": { - title: "Utwórz plik", - description: "Utwórz nowe pliki lub nadpisz istniejące", - }, "edit-file": { title: "Edytuj plik", description: @@ -387,6 +377,44 @@ const TRANSLATIONS = { title: "Skopiuj plik", description: "Kopiuj pliki i katalogi", }, + "write-text-file": { + title: "Utwórz plik tekstowy", + description: + "Utwórz nowe pliki tekstowe lub nadpisz istniejące pliki tekstowe.", + }, + }, + }, + createFiles: { + title: "Tworzenie dokumentów", + description: + "Pozwól swojemu agentowi tworzyć pliki w formatach binarnych, takich jak prezentacje PowerPoint, arkusze kalkulacyjne Excel, dokumenty Word i pliki PDF. Pliki można pobrać bezpośrednio z okna czatu.", + configuration: "Dostępne typy dokumentów", + skills: { + "create-text-file": { + title: "Pliki tekstowe", + description: + "Utwórz pliki tekstowe z dowolnym zawartością i rozszerzeniem (np. .txt, .md, .json, .csv).", + }, + "create-pptx": { + title: "Prezentacje w formacie PowerPoint", + description: + "Stwórz nowe prezentacje w formacie PowerPoint, zawierające slajdy, nagłówki i punkty.", + }, + "create-pdf": { + title: "Dokumenty w formacie PDF", + description: + "Tworzenie dokumentów PDF z plików w formacie Markdown lub zwykłego tekstu, z podstawowymi możliwościami stylizacji.", + }, + "create-xlsx": { + title: "Arkusze kalkulacyjne w programie Excel", + description: + "Stwórz arkusze kalkulacyjne w programie Excel, zawierające dane w formie tabel, z różnymi arkuszami i stylami.", + }, + "create-docx": { + title: "Dokumenty w formacie Word", + description: + "Stwórz dokumenty Word z podstawowymi stylami i formatowaniem.", + }, }, }, }, @@ -806,7 +834,6 @@ const TRANSLATIONS = { select_all: "Wybierz wszystko", deselect_all: "Odznacz wszystko", remove_selected: "Usuń wybrane", - costs: "*Jednorazowy koszt dodania danych", save_embed: "Zapisz", "total-documents_one": "{{count}} dokument", "total-documents_other": "{{count}} dokumenty", diff --git a/frontend/src/locales/pt_BR/common.js b/frontend/src/locales/pt_BR/common.js index 35054992b..7a5367496 100644 --- a/frontend/src/locales/pt_BR/common.js +++ b/frontend/src/locales/pt_BR/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Bem-vindo ao", getStarted: "Começar", welcome: "Bem-vindo", }, @@ -315,10 +314,6 @@ const TRANSLATIONS = { description: "Permite ao agente padrão gerar diversos tipos de gráficos a partir de dados armazenados ou informados no chat.", }, - save: { - title: "Gerar & salvar arquivos", - description: "Permite ao agente gerar e salvar arquivos no navegador.", - }, web: { title: "Busca na web", description: @@ -363,11 +358,6 @@ const TRANSLATIONS = { title: "Obter informações do arquivo", description: "Obtenha metadados detalhados sobre os arquivos.", }, - "write-file": { - title: "Criar arquivo", - description: - "Criar novos arquivos ou substituir arquivos existentes.", - }, "edit-file": { title: "Editar arquivo", description: @@ -385,6 +375,44 @@ const TRANSLATIONS = { title: "Copiar arquivo", description: "Copie arquivos e diretórios", }, + "write-text-file": { + title: "Criar um arquivo de texto", + description: + "Crie novos arquivos de texto ou sobrescreva arquivos de texto existentes.", + }, + }, + }, + createFiles: { + title: "Criação de documentos", + description: + "Permita que seu agente crie formatos de documentos binários, como apresentações do PowerPoint, planilhas do Excel, documentos do Word e arquivos PDF. Os arquivos podem ser baixados diretamente da janela de chat.", + configuration: "Tipos de documentos disponíveis", + skills: { + "create-text-file": { + title: "Arquivos de texto", + description: + "Crie arquivos de texto com qualquer conteúdo e extensão (por exemplo, .txt, .md, .json, .csv, etc.)", + }, + "create-pptx": { + title: "Apresentações em PowerPoint", + description: + "Crie novas apresentações do PowerPoint com slides, títulos e marcadores.", + }, + "create-pdf": { + title: "Documentos em formato PDF", + description: + "Crie documentos em PDF a partir de arquivos Markdown ou texto simples, com formatação básica.", + }, + "create-xlsx": { + title: "Planilhas do Excel", + description: + "Crie documentos do Excel para dados tabulares, incluindo planilhas e estilos.", + }, + "create-docx": { + title: "Documentos do tipo Word", + description: + "Crie documentos do Word com formatação e estilo básicos.", + }, }, }, }, @@ -791,7 +819,6 @@ const TRANSLATIONS = { select_all: "Selecionar Tudo", deselect_all: "Desmarcar Tudo", remove_selected: "Remover Selecionados", - costs: "*Custo único para vínculos", save_embed: "Salvar e Inserir", "total-documents_one": "{{count}} documento", "total-documents_other": "{{count}} documentos", diff --git a/frontend/src/locales/ro/common.js b/frontend/src/locales/ro/common.js index 79fb30436..d10d998ea 100644 --- a/frontend/src/locales/ro/common.js +++ b/frontend/src/locales/ro/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Bine ai venit la", getStarted: "Începe", welcome: "Bine ați venit", }, @@ -457,7 +456,6 @@ const TRANSLATIONS = { select_all: "Selectează tot", deselect_all: "Deselectează tot", remove_selected: "Elimină selectate", - costs: "*Cost unic pentru embeddings", save_embed: "Salvează și încorporează", "total-documents_one": "{{count}}", "total-documents_other": "{{count}} documente", @@ -767,11 +765,6 @@ const TRANSLATIONS = { description: "Permite agentului implicit să genereze diverse tipuri de grafice din datele furnizate sau date în chat.", }, - save: { - title: "Generează & salvează fișiere în browser", - description: - "Permite agentului implicit să genereze și să scrie fișiere care se salvează și pot fi descărcate în browserul tău.", - }, web: { title: "Căutare și navigare web live", description: @@ -817,11 +810,6 @@ const TRANSLATIONS = { title: "Obține informații despre fișier", description: "Obțineți metadate detaliate despre fișiere.", }, - "write-file": { - title: "Creați fișier", - description: - "Creați fișiere noi sau suprascrieți fișierele existente.", - }, "edit-file": { title: "Modifică fișierul", description: "Realizați modificări pe linii în fișierele de text.", @@ -838,6 +826,44 @@ const TRANSLATIONS = { title: "Copiază fișier", description: "Copiați fișiere și directoare", }, + "write-text-file": { + title: "Creați un fișier de text", + description: + "Creați fișiere de text noi sau suprascrieți fișierele de text existente.", + }, + }, + }, + createFiles: { + title: "Crearea de documente", + description: + "Permite-ți agentului să creeze formate de documente binare, cum ar fi prezentări PowerPoint, fișe Excel, documente Word și fișiere PDF. Fișierele pot fi descărcate direct din fereastra de chat.", + configuration: "Tipuri de documente disponibile", + skills: { + "create-text-file": { + title: "Fișiere text", + description: + "Creați fișiere text cu orice conținut și extensie (de exemplu, .txt, .md, .json, .csv, etc.)", + }, + "create-pptx": { + title: "Prezentări PowerPoint", + description: + "Creați prezentări noi în PowerPoint, cu diapozitive, titluri și puncte.", + }, + "create-pdf": { + title: "Documente în format PDF", + description: + "Creați documente PDF din fișiere Markdown sau text simplu, cu un stil de formatare de bază.", + }, + "create-xlsx": { + title: "Fișe Excel", + description: + "Creați fișiere Excel pentru date tabulare, cu foi și stilizare.", + }, + "create-docx": { + title: "Fișiere în format Word", + description: + "Creați documente Word cu un stil și formatare de bază.", + }, }, }, }, diff --git a/frontend/src/locales/ru/common.js b/frontend/src/locales/ru/common.js index 05f7a9f58..af1100dd1 100644 --- a/frontend/src/locales/ru/common.js +++ b/frontend/src/locales/ru/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "Добро пожаловать в", getStarted: "Начать", welcome: "Добро пожаловать", }, @@ -309,11 +308,6 @@ const TRANSLATIONS = { description: "Включите возможность создания различных типов диаграмм из предоставленных данных или данных, указанных в чате.", }, - save: { - title: "Создание и сохранение файлов в браузер", - description: - "Включите возможность создания и записи файлов, которые можно сохранить и загрузить в вашем браузере.", - }, web: { title: "Поиск в Интернете и просмотр в реальном времени", description: @@ -358,10 +352,6 @@ const TRANSLATIONS = { title: "Получить информацию о файле", description: "Получите подробную информацию о метаданных файлов.", }, - "write-file": { - title: "Создать файл", - description: "Создать новые файлы или перезаписать существующие", - }, "edit-file": { title: "Редактировать файл", description: @@ -379,6 +369,44 @@ const TRANSLATIONS = { title: "Скопировать файл", description: "Копировать файлы и каталоги", }, + "write-text-file": { + title: "Создать текстовый файл", + description: + "Создайте новые текстовые файлы или перезапишите существующие текстовые файлы.", + }, + }, + }, + createFiles: { + title: "Создание документа", + description: + "Предоставьте своему агенту возможность создавать файлы в двоичном формате, такие как презентации PowerPoint, электронные таблицы Excel, документы Word и PDF. Файлы можно загружать непосредственно из окна чата.", + configuration: "Доступные типы документов", + skills: { + "create-text-file": { + title: "Текстовые файлы", + description: + "Создавайте текстовые файлы с любым содержимым и расширением (.txt, .md, .json, .csv и т. д.)", + }, + "create-pptx": { + title: "Презентации в формате PowerPoint", + description: + "Создайте новые презентации в формате PowerPoint, включая слайды, заголовки и списки с маркерами.", + }, + "create-pdf": { + title: "Документы в формате PDF", + description: + "Создавайте документы в формате PDF из Markdown или простого текста с использованием базового оформления.", + }, + "create-xlsx": { + title: "Электронные таблицы в программе Excel", + description: + "Создайте документы Excel для табличных данных, включающие листы и оформление.", + }, + "create-docx": { + title: "Документы в формате Word", + description: + "Создавайте документы в формате Word с использованием базовых стилей и форматирования.", + }, }, }, }, @@ -698,7 +726,6 @@ const TRANSLATIONS = { select_all: "Выбрать всё", deselect_all: "Снять выбор со всех", remove_selected: "Удалить выбранные", - costs: "*Единоразовая стоимость за внедрение", save_embed: "Сохранить и внедрить", "total-documents_one": "{{count}} документ", "total-documents_other": "{{count}} документы", diff --git a/frontend/src/locales/tr/common.js b/frontend/src/locales/tr/common.js index b3ab1c184..c84a76e8e 100644 --- a/frontend/src/locales/tr/common.js +++ b/frontend/src/locales/tr/common.js @@ -17,7 +17,6 @@ const TRANSLATIONS = { "AnythingLLM'yi ihtiyaçlarınıza göre oluşturmamıza yardımcı olun. İsteğe bağlı.", }, home: { - title: "Hoş Geldiniz", getStarted: "Başla", welcome: "Hoş geldiniz", }, @@ -309,11 +308,6 @@ const TRANSLATIONS = { description: "Varsayılan ajanın, sağlanan veya sohbette yer alan verilere göre çeşitli grafik türleri oluşturmasına izin verin.", }, - save: { - title: "Tarayıcıya dosya oluştur & kaydet", - description: - "Varsayılan ajanın, oluşturduğu dosyaları kaydetmesine ve tarayıcıda indirilebilir hale getirmesine izin verin.", - }, web: { title: "Canlı web araması ve gezinme", description: @@ -359,11 +353,6 @@ const TRANSLATIONS = { title: "Dosya Hakkında Bilgi Al", description: "Dosyalara ilişkin ayrıntılı meta verileri elde edin.", }, - "write-file": { - title: "Dosya Oluştur", - description: - "Yeni dosyalar oluşturun veya mevcut dosyaları üzerine yazın.", - }, "edit-file": { title: "Dosya Düzenle", description: "Metin dosyalarında satır bazlı değişiklikler yapın.", @@ -381,6 +370,44 @@ const TRANSLATIONS = { title: "Dosyayı Kopyala", description: "Dosyaları ve dizinleri kopyala", }, + "write-text-file": { + title: "Metin dosyası oluştur", + description: + "Yeni metin dosyaları oluşturun veya mevcut metin dosyalarını üzerine yazın.", + }, + }, + }, + createFiles: { + title: "Belge Oluşturma", + description: + "Temsilcinizin, PowerPoint sunumları, Excel tabloları, Word belgeleri ve PDF dosyaları gibi ikili belge formatları oluşturmasına olanak tanıyın. Dosyalar doğrudan sohbet penceresinden indirilebilir.", + configuration: "Mevcut Belgeler Türleri", + skills: { + "create-text-file": { + title: "Metin dosyaları", + description: + "Herhangi bir içerik ve uzantıyla (örneğin .txt, .md, .json, .csv vb.) metin dosyaları oluşturun.", + }, + "create-pptx": { + title: "PowerPoint sunumları", + description: + "Yeni PowerPoint sunumları oluşturun, slaytlar, başlıklar ve madde işaretleri ekleyin.", + }, + "create-pdf": { + title: "PDF belgeleri", + description: + "Temel stillerle markdown veya düz metinlerden PDF belgeleri oluşturun.", + }, + "create-xlsx": { + title: "Excel elektronik tabloları", + description: + "Tablo formatındaki veriler için, sayfalar ve stil özellikleriyle Excel belgeleri oluşturun.", + }, + "create-docx": { + title: "Kelime belgeleri", + description: + "Temel stil ve biçimlendirme ile Word belgeleri oluşturun.", + }, }, }, }, @@ -700,7 +727,6 @@ const TRANSLATIONS = { select_all: "Tümünü Seç", deselect_all: "Tümünün Seçimini Kaldır", remove_selected: "Seçilenleri Kaldır", - costs: "*Gömmeler için tek seferlik maliyet", save_embed: "Kaydet ve Göm", "total-documents_one": "{{count}} belgesi", "total-documents_other": "{{count}} belgeleri", diff --git a/frontend/src/locales/vn/common.js b/frontend/src/locales/vn/common.js index 9d3d0c12e..d70853f69 100644 --- a/frontend/src/locales/vn/common.js +++ b/frontend/src/locales/vn/common.js @@ -17,7 +17,6 @@ const TRANSLATIONS = { "Giúp chúng tôi xây dựng AnythingLLM phù hợp với nhu cầu của bạn. Tùy chọn.", }, home: { - title: "Chào mừng đến", getStarted: "Bắt đầu", welcome: "Chào mừng", }, @@ -308,11 +307,6 @@ const TRANSLATIONS = { description: "Cho phép agent mặc định tạo các loại biểu đồ khác nhau từ dữ liệu được cung cấp hoặc đưa ra trong trò chuyện.", }, - save: { - title: "Tạo & lưu tệp", - description: - "Cho phép agent mặc định tạo và ghi vào các tệp có thể lưu vào máy tính của bạn.", - }, web: { title: "Tìm kiếm web trực tiếp và duyệt web", description: @@ -357,10 +351,6 @@ const TRANSLATIONS = { title: "Lấy thông tin tệp", description: "Lấy thông tin chi tiết về các tệp tin.", }, - "write-file": { - title: "Tạo tệp", - description: "Tạo các tệp mới hoặc ghi đè các tệp hiện có", - }, "edit-file": { title: "Chỉnh sửa tệp", description: @@ -378,6 +368,44 @@ const TRANSLATIONS = { title: "Sao chép tệp", description: "Sao chép các tệp tin và thư mục", }, + "write-text-file": { + title: "Tạo tệp văn bản", + description: + "Tạo các tệp văn bản mới hoặc ghi đè các tệp văn bản hiện có.", + }, + }, + }, + createFiles: { + title: "Tạo tài liệu", + description: + "Cho phép đại lý của bạn tạo các định dạng tài liệu nhị phân như bài thuyết trình PowerPoint, bảng tính Excel, tài liệu Word và PDF. Các tệp có thể tải xuống trực tiếp từ cửa sổ trò chuyện.", + configuration: "Các loại tài liệu có sẵn", + skills: { + "create-text-file": { + title: "Tệp văn bản", + description: + "Tạo các tệp văn bản với bất kỳ nội dung và định dạng nào (ví dụ: .txt, .md, .json, .csv, v.v.)", + }, + "create-pptx": { + title: "Bài trình bày bằng PowerPoint", + description: + "Tạo các bài trình chiếu PowerPoint mới với các slide, tiêu đề và dấu đầu dòng.", + }, + "create-pdf": { + title: "Tài liệu PDF", + description: + "Tạo tài liệu PDF từ Markdown hoặc văn bản thuần túy với các định dạng cơ bản.", + }, + "create-xlsx": { + title: "Bảng tính Excel", + description: + "Tạo các tài liệu Excel cho dữ liệu dạng bảng, bao gồm các sheet và định dạng.", + }, + "create-docx": { + title: "Tệp Word", + description: + "Tạo các tài liệu Word với định dạng và kiểu dáng cơ bản.", + }, }, }, }, @@ -695,7 +723,6 @@ const TRANSLATIONS = { select_all: "Chọn Tất cả", deselect_all: "Bỏ chọn Tất cả", remove_selected: "Xóa Đã chọn", - costs: "*Chi phí một lần cho việc nhúng", save_embed: "Lưu và Nhúng", "total-documents_one": "{{count}}", "total-documents_other": "{{count}}", diff --git a/frontend/src/locales/zh/common.js b/frontend/src/locales/zh/common.js index 5b8859e3f..088821b44 100644 --- a/frontend/src/locales/zh/common.js +++ b/frontend/src/locales/zh/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "欢迎使用", getStarted: "开始", welcome: "欢迎", }, @@ -300,11 +299,6 @@ const TRANSLATIONS = { title: "生成图表", description: "使默认代理能够从提供的数据或聊天中生成各种类型的图表。", }, - save: { - title: "生成并保存文件到浏览器", - description: - "使默认代理能够生成并写入文件,这些文件可以保存并在你的浏览器中下载。", - }, web: { title: "实时网络搜索和浏览", description: @@ -348,10 +342,6 @@ const TRANSLATIONS = { title: "获取文件信息", description: "获取有关文件的详细元数据", }, - "write-file": { - title: "创建文件", - description: "创建新的文件或覆盖现有文件", - }, "edit-file": { title: "编辑文件", description: "对文本文件进行基于行的编辑。", @@ -368,6 +358,40 @@ const TRANSLATIONS = { title: "复制文件", description: "复制文件和目录", }, + "write-text-file": { + title: "创建文本文件", + description: "创建新的文本文件,或覆盖现有的文本文件。", + }, + }, + }, + createFiles: { + title: "文档创建", + description: + "允许您的代理创建二进制文档格式,例如PowerPoint演示文稿、Excel电子表格、Word文档和PDF文件。文件可以直接从聊天窗口下载。", + configuration: "可用的文件类型", + skills: { + "create-text-file": { + title: "文本文件", + description: + "创建包含任何内容和扩展名的文本文件(如 .txt、.md、.json、.csv 等)。", + }, + "create-pptx": { + title: "PowerPoint 演示文稿", + description: "创建新的幻灯片演示文稿,包括幻灯片、标题和项目符号。", + }, + "create-pdf": { + title: "PDF 文档", + description: + "使用 Markdown 或纯文本,并进行基本的排版,创建 PDF 文档。", + }, + "create-xlsx": { + title: "Excel电子表格", + description: "创建包含表格数据、工作表和样式的 Excel 文档。", + }, + "create-docx": { + title: "Word 文档", + description: "创建包含基本样式和格式的 Word 文档", + }, }, }, }, @@ -744,7 +768,6 @@ const TRANSLATIONS = { select_all: "全选", deselect_all: "取消全选", remove_selected: "移除所选", - costs: "*嵌入时一次性费用", save_embed: "保存并嵌入", "total-documents_one": "{{count}} 文件", "total-documents_other": "{{count}} 类型的文件", diff --git a/frontend/src/locales/zh_TW/common.js b/frontend/src/locales/zh_TW/common.js index 955ce2ae3..f070e3a01 100644 --- a/frontend/src/locales/zh_TW/common.js +++ b/frontend/src/locales/zh_TW/common.js @@ -2,7 +2,6 @@ const TRANSLATIONS = { onboarding: { home: { - title: "歡迎使用", getStarted: "開始使用", welcome: "歡迎", }, @@ -291,10 +290,6 @@ const TRANSLATIONS = { description: "讓預設智慧代理人能夠根據提供的資料或對話中給定的資料來產生各種圖表。", }, - save: { - title: "產生並儲存檔案", - description: "讓預設智慧代理人產生並寫入檔案,之後可儲存到電腦。", - }, web: { title: "網頁搜尋", description: @@ -337,10 +332,6 @@ const TRANSLATIONS = { title: "取得檔案資訊", description: "獲取關於檔案的詳細元數據", }, - "write-file": { - title: "儲存檔案", - description: "建立新的檔案或覆蓋現有檔案", - }, "edit-file": { title: "編輯檔案", description: "能夠對文字檔案進行行別編輯。", @@ -357,6 +348,40 @@ const TRANSLATIONS = { title: "複製檔案", description: "複製檔案和目錄", }, + "write-text-file": { + title: "撰寫文字檔案", + description: "建立新的文字檔,或覆蓋現有的文字檔。", + }, + }, + }, + createFiles: { + title: "文件建立", + description: + "允許您的代理創建二元文件格式,例如PowerPoint簡報、Excel電子表格、Word文件和PDF文件。 文件可以直接從聊天窗口下載。", + configuration: "可用的文件類型", + skills: { + "create-text-file": { + title: "文字檔", + description: + "能夠創建包含任何內容和檔案擴展名(例如:.txt、.md、.json、.csv 等)的文字檔案。", + }, + "create-pptx": { + title: "PowerPoint 簡報", + description: "創建新的 PowerPoint 簡報,包含幻燈片、標題和要點", + }, + "create-pdf": { + title: "PDF 文件", + description: + "能夠從 Markdown 或純文字檔案中,使用基本的格式設定,創建 PDF 文件。", + }, + "create-xlsx": { + title: "Excel 試算表", + description: "建立包含表格資料、工作表和樣式的 Excel 文件", + }, + "create-docx": { + title: "Word 格式的文件", + description: "建立包含基本樣式和格式的 Word 文件", + }, }, }, }, @@ -654,7 +679,6 @@ const TRANSLATIONS = { select_all: "全選", deselect_all: "取消全選", remove_selected: "移除選擇的項目", - costs: "*嵌入僅會計費一次", save_embed: "儲存並嵌入", "total-documents_one": "{{count}} 文件", "total-documents_other": "{{count}} 文件", diff --git a/frontend/src/models/files.js b/frontend/src/models/files.js new file mode 100644 index 000000000..c3001531c --- /dev/null +++ b/frontend/src/models/files.js @@ -0,0 +1,26 @@ +import { API_BASE } from "@/utils/constants"; +import { baseHeaders } from "@/utils/request"; + +const StorageFiles = { + /** + * Download a file from the server + * @param {string} filename - The filename to download + * @returns {Promise} + */ + download: async function (storageFilename) { + return await fetch( + `${API_BASE}/agent-skills/generated-files/${encodeURIComponent(storageFilename)}`, + { headers: baseHeaders() } + ) + .then((res) => { + if (!res.ok) throw new Error("Failed to download file"); + return res.blob(); + }) + .catch((e) => { + console.error("Download failed:", e); + return null; + }); + }, +}; + +export default StorageFiles; diff --git a/frontend/src/models/system.js b/frontend/src/models/system.js index 7ac0bc9f7..115dbd6dd 100644 --- a/frontend/src/models/system.js +++ b/frontend/src/models/system.js @@ -848,6 +848,21 @@ const System = { .catch(() => false); }, + /** + * Checks if the create-files-agent skill is available. + * The create-files-agent skill is only available when running in a Docker container. + * @returns {Promise} + */ + isCreateFilesAgentAvailable: async function () { + return fetch(`${API_BASE}/agent-skills/create-files-agent/is-available`, { + method: "GET", + headers: baseHeaders(), + }) + .then((res) => res.json()) + .then((res) => res?.available ?? false) + .catch(() => false); + }, + experimentalFeatures: { liveSync: LiveDocumentSync, agentPlugins: AgentPlugins, diff --git a/frontend/src/pages/Admin/Agents/CreateFileSkillPanel/index.jsx b/frontend/src/pages/Admin/Agents/CreateFileSkillPanel/index.jsx new file mode 100644 index 000000000..6b5eab367 --- /dev/null +++ b/frontend/src/pages/Admin/Agents/CreateFileSkillPanel/index.jsx @@ -0,0 +1,187 @@ +import React, { useEffect, useState, useRef } from "react"; +import Toggle, { SimpleToggleSwitch } from "@/components/lib/Toggle"; +import { useTranslation } from "react-i18next"; +import { + FilePpt, + FileXls, + FileDoc, + FilePdf, + FileText, + CircleNotch, +} from "@phosphor-icons/react"; +import Admin from "@/models/admin"; + +const getCreateFileSkills = (t) => [ + { + name: "create-text-file", + title: t("agent.skill.createFiles.skills.create-text-file.title"), + description: t( + "agent.skill.createFiles.skills.create-text-file.description" + ), + icon: FileText, + }, + { + name: "create-pptx-presentation", + title: t("agent.skill.createFiles.skills.create-pptx.title"), + description: t("agent.skill.createFiles.skills.create-pptx.description"), + icon: FilePpt, + }, + { + name: "create-pdf-file", + title: t("agent.skill.createFiles.skills.create-pdf.title"), + description: t("agent.skill.createFiles.skills.create-pdf.description"), + icon: FilePdf, + }, + { + name: "create-excel-file", + title: t("agent.skill.createFiles.skills.create-xlsx.title"), + description: t("agent.skill.createFiles.skills.create-xlsx.description"), + icon: FileXls, + }, + { + name: "create-docx-file", + title: t("agent.skill.createFiles.skills.create-docx.title"), + description: t("agent.skill.createFiles.skills.create-docx.description"), + icon: FileDoc, + }, +]; + +export default function CreateFileSkillPanel({ + title, + skill, + toggleSkill, + enabled = false, + disabled = false, + image, + icon, + setHasChanges, + hasChanges = false, +}) { + const { t } = useTranslation(); + const [disabledSkills, setDisabledSkills] = useState([]); + const [loading, setLoading] = useState(true); + const prevHasChanges = useRef(hasChanges); + const skills = getCreateFileSkills(t); + + useEffect(() => { + setLoading(true); + Admin.systemPreferencesByFields(["disabled_create_files_skills"]) + .then((res) => + setDisabledSkills(res?.settings?.disabled_create_files_skills ?? []) + ) + .catch(() => setDisabledSkills([])) + .finally(() => setLoading(false)); + }, []); + + useEffect(() => { + if (prevHasChanges.current === true && hasChanges === false) { + Admin.systemPreferencesByFields(["disabled_create_files_skills"]) + .then((res) => + setDisabledSkills(res?.settings?.disabled_create_files_skills ?? []) + ) + .catch(() => {}); + } + prevHasChanges.current = hasChanges; + }, [hasChanges]); + + function toggleFileSkill(skillName) { + setHasChanges(true); + setDisabledSkills((prev) => + prev.includes(skillName) + ? prev.filter((s) => s !== skillName) + : [...prev, skillName] + ); + } + + return ( +
+
+
+
+ {icon && + React.createElement(icon, { + size: 24, + color: "var(--theme-text-primary)", + weight: "bold", + })} + +
+ toggleSkill(skill)} + /> +
+ + {title} +

+ {t("agent.skill.createFiles.description")} +

+ + {enabled && ( + <> + +
+

+ {t("agent.skill.createFiles.configuration")} +

+ {loading ? ( +
+ +
+ ) : ( +
+ {skills.map((fileSkill) => ( + toggleFileSkill(fileSkill.name)} + /> + ))} +
+ )} +
+ + )} +
+
+ ); +} + +function SkillRow({ skill, disabled, onToggle }) { + const Icon = skill.icon; + return ( +
+
+ +
+ + {skill.title} + + {skill.description} +
+
+ +
+ ); +} diff --git a/frontend/src/pages/Admin/Agents/FileSystemSkillPanel/index.jsx b/frontend/src/pages/Admin/Agents/FileSystemSkillPanel/index.jsx index 474846ba6..20a99135e 100644 --- a/frontend/src/pages/Admin/Agents/FileSystemSkillPanel/index.jsx +++ b/frontend/src/pages/Admin/Agents/FileSystemSkillPanel/index.jsx @@ -62,9 +62,11 @@ const getFileSystemSubSkills = (t) => { category: "read", }, { - name: "filesystem-write-file", - title: t("agent.skill.filesystem.skills.write-file.title"), - description: t("agent.skill.filesystem.skills.write-file.description"), + name: "filesystem-write-text-file", + title: t("agent.skill.filesystem.skills.write-text-file.title"), + description: t( + "agent.skill.filesystem.skills.write-text-file.description" + ), icon: FloppyDisk, category: "write", }, diff --git a/frontend/src/pages/Admin/Agents/index.jsx b/frontend/src/pages/Admin/Agents/index.jsx index 2bb8617de..a598e1eb1 100644 --- a/frontend/src/pages/Admin/Agents/index.jsx +++ b/frontend/src/pages/Admin/Agents/index.jsx @@ -60,10 +60,13 @@ export default function AdminAgents() { const [fileSystemAgentAvailable, setFileSystemAgentAvailable] = useState(false); + const [createFilesAgentAvailable, setCreateFilesAgentAvailable] = + useState(false); const defaultSkills = getDefaultSkills(t); const configurableSkills = getConfigurableSkills(t, { fileSystemAgentAvailable, + createFilesAgentAvailable, }); // Alert user if they try to leave the page with unsaved changes @@ -82,18 +85,24 @@ export default function AdminAgents() { useEffect(() => { async function fetchSettings() { - const [_settings, _preferences, flowsRes, fsAgentAvailable] = - await Promise.all([ - System.keys(), - Admin.systemPreferencesByFields([ - "disabled_agent_skills", - "default_agent_skills", - "imported_agent_skills", - "active_agent_flows", - ]), - AgentFlows.listFlows(), - System.isFileSystemAgentAvailable(), - ]); + const [ + _settings, + _preferences, + flowsRes, + fsAgentAvailable, + createFilesAvailable, + ] = await Promise.all([ + System.keys(), + Admin.systemPreferencesByFields([ + "disabled_agent_skills", + "default_agent_skills", + "imported_agent_skills", + "active_agent_flows", + ]), + AgentFlows.listFlows(), + System.isFileSystemAgentAvailable(), + System.isCreateFilesAgentAvailable(), + ]); const { flows = [] } = flowsRes; setSettings({ ..._settings, preferences: _preferences.settings } ?? {}); @@ -105,6 +114,7 @@ export default function AdminAgents() { setActiveFlowIds(_preferences.settings?.active_agent_flows ?? []); setAgentFlows(flows); setFileSystemAgentAvailable(fsAgentAvailable); + setCreateFilesAgentAvailable(createFilesAvailable); setLoading(false); } fetchSettings(); diff --git a/frontend/src/pages/Admin/Agents/skills.js b/frontend/src/pages/Admin/Agents/skills.js index 555c51dc6..8c0aabed2 100644 --- a/frontend/src/pages/Admin/Agents/skills.js +++ b/frontend/src/pages/Admin/Agents/skills.js @@ -3,13 +3,14 @@ import AgentSQLConnectorSelection from "./SQLConnectorSelection"; import GenericSkillPanel from "./GenericSkillPanel"; import DefaultSkillPanel from "./DefaultSkillPanel"; import FileSystemSkillPanel from "./FileSystemSkillPanel"; +import CreateFileSkillPanel from "./CreateFileSkillPanel"; import { Brain, File, Browser, ChartBar, - FileMagnifyingGlass, FolderOpen, + FilePlus, } from "@phosphor-icons/react"; import RAGImage from "@/media/agents/rag-memory.png"; import SummarizeImage from "@/media/agents/view-summarize.png"; @@ -47,7 +48,7 @@ export const getDefaultSkills = (t) => ({ export const getConfigurableSkills = ( t, - { fileSystemAgentAvailable = true } = {} + { fileSystemAgentAvailable = true, createFilesAgentAvailable = true } = {} ) => ({ ...(fileSystemAgentAvailable && { "filesystem-agent": { @@ -59,14 +60,16 @@ export const getConfigurableSkills = ( image: FileSystemImage, }, }), - "save-file-to-browser": { - title: t("agent.skill.save.title"), - description: t("agent.skill.save.description"), - component: GenericSkillPanel, - skill: "save-file-to-browser", - icon: FileMagnifyingGlass, - image: GenerateSaveImages, - }, + ...(createFilesAgentAvailable && { + "create-files-agent": { + title: t("agent.skill.createFiles.title"), + description: t("agent.skill.createFiles.description"), + component: CreateFileSkillPanel, + skill: "create-files-agent", + icon: FilePlus, + image: GenerateSaveImages, + }, + }), "create-chart": { title: t("agent.skill.generate.title"), description: t("agent.skill.generate.description"), diff --git a/frontend/src/utils/chat/agent.js b/frontend/src/utils/chat/agent.js index 858bd1f5d..4c1ae9e9b 100644 --- a/frontend/src/utils/chat/agent.js +++ b/frontend/src/utils/chat/agent.js @@ -1,6 +1,5 @@ import { v4 } from "uuid"; import { safeJsonParse } from "../request"; -import { saveAs } from "file-saver"; import { API_BASE } from "../constants"; import { useEffect, useState } from "react"; @@ -8,7 +7,7 @@ export const AGENT_SESSION_START = "agentSessionStart"; export const AGENT_SESSION_END = "agentSessionEnd"; const handledEvents = [ "statusResponse", - "fileDownload", + "fileDownloadCard", "awaitingFeedback", "wssFailure", "rechartVisualize", @@ -91,6 +90,9 @@ export default function handleSocketResponse(socket, event, setChatHistory) { // Providers like Gemini send large chunks and can complete in a single chunk before the update logic can convert it. // Other providers send many small chunks so the second chunk triggers the update logic to fix the type. if (data.content.type === "textResponseChunk") { + // If this first chunk is just a non-text char (like \n, \t, etc.) then we need to ignore it. + // Some providers like LMStudio will do this and it depends on the chat template as well. + if (data.content.content.trim() === "") return prev; return [ ...prev.filter((msg) => !!msg.content), { @@ -157,6 +159,7 @@ export default function handleSocketResponse(socket, event, setChatHistory) { } if (type === "textResponseChunk") { + console.log("textResponseChunk", data.content); return prev .map((msg) => msg.uuid === uuid @@ -182,9 +185,24 @@ export default function handleSocketResponse(socket, event, setChatHistory) { }); } - if (data.type === "fileDownload") { - saveAs(data.content.b64Content, data.content.filename ?? "unknown.txt"); - return; + if (data.type === "fileDownloadCard") { + return setChatHistory((prev) => { + return [ + ...prev.filter((msg) => !!msg.content), + { + type: "fileDownloadCard", + uuid: v4(), + content: data.content, + role: "assistant", + sources: [], + closed: true, + error: null, + animate: false, + pending: false, + metrics: data.metrics || {}, + }, + ]; + }); } if (data.type === "rechartVisualize") { diff --git a/server/.gitignore b/server/.gitignore index c4147a0a1..51930d38e 100644 --- a/server/.gitignore +++ b/server/.gitignore @@ -4,6 +4,7 @@ server/.env storage/assets/* !storage/assets/anything-llm.png +!storage/assets/anything-llm-invert.png storage/documents/* storage/comkey/* storage/tmp/* @@ -11,6 +12,7 @@ storage/vector-cache/*.json storage/exports storage/imports storage/anythingllm-fs/* +storage/generated-files/* storage/plugins/agent-skills/* storage/plugins/agent-flows/* storage/plugins/office-extensions/* diff --git a/server/endpoints/admin.js b/server/endpoints/admin.js index 4315d03e3..430a3e320 100644 --- a/server/endpoints/admin.js +++ b/server/endpoints/admin.js @@ -406,6 +406,9 @@ function adminEndpoints(app) { case "disabled_filesystem_skills": requestedSettings[label] = safeJsonParse(setting?.value, []); break; + case "disabled_create_files_skills": + requestedSettings[label] = safeJsonParse(setting?.value, []); + break; case "imported_agent_skills": requestedSettings[label] = ImportedPlugin.listImportedPlugins(); break; diff --git a/server/endpoints/agentFileServer.js b/server/endpoints/agentFileServer.js new file mode 100644 index 000000000..daaf5002a --- /dev/null +++ b/server/endpoints/agentFileServer.js @@ -0,0 +1,142 @@ +const { + userFromSession, + multiUserMode, + safeJsonParse, +} = require("../utils/http"); +const { validatedRequest } = require("../utils/middleware/validatedRequest"); +const { + flexUserRoleValid, + ROLES, +} = require("../utils/middleware/multiUserProtected"); +const { WorkspaceChats } = require("../models/workspaceChats"); +const { Workspace } = require("../models/workspace"); +const createFilesLib = require("../utils/agents/aibitat/plugins/create-files/lib"); + +/** + * Endpoints for serving agent-generated files (PPTX, etc.) with authentication + * and ownership validation. + */ +function agentFileServerEndpoints(app) { + if (!app) return; + + /** + * Download a generated file by its storage filename. + * Validates that the requesting user has access to the workspace + * where the file was generated. + */ + app.get( + "/agent-skills/generated-files/:filename", + [validatedRequest, flexUserRoleValid([ROLES.all])], + async (request, response) => { + try { + const user = await userFromSession(request, response); + const { filename } = request.params; + if (!filename) + return response.status(400).json({ error: "Filename is required" }); + + // Validate filename format + const parsed = createFilesLib.parseFilename(filename); + if (!parsed) { + return response + .status(400) + .json({ error: "Invalid filename format" }); + } + + // Find a chat record that references this file and that the user can access + const validChat = await findValidChatForFile( + filename, + user, + multiUserMode(response) + ); + + if (!validChat) { + return response.status(404).json({ + error: "File not found or access denied", + }); + } + + // Retrieve the file from storage + const fileData = await createFilesLib.getGeneratedFile(filename); + if (!fileData) { + return response + .status(404) + .json({ error: "File not found in storage" }); + } + + // Get mime type and set headers for download + const mimeType = createFilesLib.getMimeType(`.${parsed.extension}`); + const safeFilename = createFilesLib.sanitizeFilenameForHeader( + validChat.displayFilename || filename + ); + response.setHeader("Content-Type", mimeType); + response.setHeader( + "Content-Disposition", + `attachment; filename="${safeFilename}"` + ); + response.setHeader("Content-Length", fileData.buffer.length); + return response.send(fileData.buffer); + } catch (error) { + console.error("[agentFileServer] Download error:", error.message); + return response.status(500).json({ error: "Failed to download file" }); + } + } + ); +} + +/** + * Finds a valid chat record that references the given storage filename + * and that the user has access to. + * @param {string} storageFilename - The storage filename to search for + * @param {object|null} user - The user object (null in single-user mode) + * @param {boolean} isMultiUser - Whether multi-user mode is enabled + * @returns {Promise<{workspaceId: number, displayFilename: string}|null>} + */ +async function findValidChatForFile(storageFilename, user, isMultiUser) { + try { + // Get all workspaces the user has access to. + // In single-user mode, all workspaces are accessible. + // In multi-user mode, only workspaces assigned to the user are accessible. + let workspaceIds; + if (isMultiUser && user) { + const workspaces = await Workspace.whereWithUser(user); + workspaceIds = workspaces.map((w) => w.id); + } else { + const workspaces = await Workspace.where(); + workspaceIds = workspaces.map((w) => w.id); + } + + if (workspaceIds.length === 0) return null; + + // Use database-level filtering to only fetch chats that contain the filename + // This avoids loading all chats into memory + const chats = await WorkspaceChats.where({ + workspaceId: { in: workspaceIds }, + include: true, + response: { contains: storageFilename }, + }); + + for (const chat of chats) { + try { + const response = safeJsonParse(chat.response, { outputs: [] }); + const output = response.outputs.find( + (o) => o?.payload?.storageFilename === storageFilename + ); + if (!output) continue; + return { + workspaceId: chat.workspaceId, + displayFilename: + output.payload.filename || output.payload.displayFilename, + }; + } catch { + continue; + } + } + + return null; + } catch (error) { + console.error("[findValidChatForFile] Error:", error.message); + return null; + } +} + +module.exports = { agentFileServerEndpoints }; diff --git a/server/endpoints/agentSkillWhitelist.js b/server/endpoints/agentSkillWhitelist.js index 116fb9ec2..c54dcefc7 100644 --- a/server/endpoints/agentSkillWhitelist.js +++ b/server/endpoints/agentSkillWhitelist.js @@ -27,6 +27,24 @@ function agentSkillWhitelistEndpoints(app) { } ); + app.get( + "/agent-skills/create-files-agent/is-available", + [validatedRequest], + async (_request, response) => { + try { + const createFilesTool = require("../utils/agents/aibitat/plugins/create-files/lib"); + return response + .status(200) + .json({ available: createFilesTool.isToolAvailable() }); + } catch (e) { + console.error(e); + return response + .status(500) + .json({ available: false, error: e.message }); + } + } + ); + app.post( "/agent-skills/whitelist/add", [validatedRequest, flexUserRoleValid(ROLES.all)], diff --git a/server/endpoints/utils.js b/server/endpoints/utils.js index e9e2f7ffc..b9331c0ab 100644 --- a/server/endpoints/utils.js +++ b/server/endpoints/utils.js @@ -210,4 +210,5 @@ module.exports = { getGitVersion, getModelTag, getAnythingLLMUserAgent, + getDeploymentVersion, }; diff --git a/server/index.js b/server/index.js index 8924d1e61..5d6b94da6 100644 --- a/server/index.js +++ b/server/index.js @@ -26,6 +26,7 @@ const { agentWebsocket } = require("./endpoints/agentWebsocket"); const { agentSkillWhitelistEndpoints, } = require("./endpoints/agentSkillWhitelist"); +const { agentFileServerEndpoints } = require("./endpoints/agentFileServer"); const { experimentalEndpoints } = require("./endpoints/experimental"); const { browserExtensionEndpoints } = require("./endpoints/browserExtension"); const { communityHubEndpoints } = require("./endpoints/communityHub"); @@ -79,6 +80,7 @@ utilEndpoints(apiRouter); documentEndpoints(apiRouter); agentWebsocket(apiRouter); agentSkillWhitelistEndpoints(apiRouter); +agentFileServerEndpoints(apiRouter); experimentalEndpoints(apiRouter); developerEndpoints(app, apiRouter); communityHubEndpoints(apiRouter); diff --git a/server/jobs/cleanup-generated-files.js b/server/jobs/cleanup-generated-files.js new file mode 100644 index 000000000..c8c6ee466 --- /dev/null +++ b/server/jobs/cleanup-generated-files.js @@ -0,0 +1,108 @@ +const { log, conclude } = require("./helpers/index.js"); +const { WorkspaceChats } = require("../models/workspaceChats.js"); +const createFilesLib = require("../utils/agents/aibitat/plugins/create-files/lib.js"); +const { safeJsonParse } = require("../utils/http/index.js"); + +(async () => { + try { + const fs = require("fs"); + const path = require("path"); + const storageDirectory = await createFilesLib.getOutputDirectory(); + if (!fs.existsSync(storageDirectory)) return; + + const files = fs.readdirSync(storageDirectory); + if (files.length === 0) return; + + // Get all storage filenames referenced in active (include: true) chats + const activeFileRefs = await getActiveStorageFilenames(); + const filesToDelete = []; + for (const filename of files) { + const fullPath = path.join(storageDirectory, filename); + const stat = fs.statSync(fullPath); + + // Skip files/folders that don't match our naming pattern and add to deletion list + if (!filename.match(/^[a-z]+-[a-f0-9-]{36}(\.\w+)?$/i)) { + filesToDelete.push({ path: fullPath, isDirectory: stat.isDirectory() }); + continue; + } + + // If file/folder is not referenced in any active chat, add to deletion list + if (!activeFileRefs.has(filename)) + filesToDelete.push({ path: fullPath, isDirectory: stat.isDirectory() }); + } + + if (filesToDelete.length === 0) return; + + log(`Found ${filesToDelete.length} orphaned files/folders to delete.`); + let deletedCount = 0; + let failedCount = 0; + for (const { path: itemPath, isDirectory } of filesToDelete) { + try { + if (isDirectory) fs.rmSync(itemPath, { recursive: true }); + else fs.unlinkSync(itemPath); + deletedCount++; + } catch (error) { + failedCount++; + log(`Failed to delete ${itemPath}: ${error.message}`); + } + } + + log( + `Cleanup complete: deleted ${deletedCount} items, ${failedCount} failures.` + ); + } catch (error) { + console.error(error); + log(`Error during cleanup: ${error.message}`); + } finally { + conclude(); + } +})(); + +/** + * Retrieves all storage filenames referenced in active (include: true) workspace chats. + * Searches through the outputs array in chat responses. + * Uses pagination to avoid loading all chats into memory at once. + * @param {number} batchSize - Number of chats to process per batch (default: 50) + * @returns {Promise>} + */ +async function getActiveStorageFilenames(batchSize = 50) { + const storageFilenames = new Set(); + + try { + let offset = 0; + let hasMore = true; + + while (hasMore) { + const chats = await WorkspaceChats.where( + { include: true }, + batchSize, + { id: "asc" }, + offset + ); + + if (chats.length === 0) { + hasMore = false; + break; + } + + for (const chat of chats) { + try { + const response = safeJsonParse(chat.response, { outputs: [] }); + for (const output of response.outputs) { + if (output?.payload?.storageFilename) + storageFilenames.add(output.payload.storageFilename); + } + } catch { + continue; + } + } + + offset += chats.length; + hasMore = chats.length === batchSize; + } + } catch (error) { + console.error("[getActiveStorageFilenames] Error:", error.message); + } + + return storageFilenames; +} diff --git a/server/models/systemSettings.js b/server/models/systemSettings.js index c9c8197d0..13ccb5cd0 100644 --- a/server/models/systemSettings.js +++ b/server/models/systemSettings.js @@ -34,6 +34,7 @@ const SystemSettings = { "default_agent_skills", "disabled_agent_skills", "disabled_filesystem_skills", + "disabled_create_files_skills", "imported_agent_skills", "custom_app_name", "feature_flags", @@ -52,6 +53,7 @@ const SystemSettings = { "default_agent_skills", "disabled_agent_skills", "disabled_filesystem_skills", + "disabled_create_files_skills", "agent_sql_connections", "custom_app_name", "default_system_prompt", @@ -163,6 +165,15 @@ const SystemSettings = { return JSON.stringify([]); } }, + disabled_create_files_skills: (updates) => { + try { + const skills = updates.split(",").filter((skill) => !!skill); + return JSON.stringify(skills); + } catch { + console.error(`Could not validate disabled create files skills.`); + return JSON.stringify([]); + } + }, agent_sql_connections: async (updates) => { const existingConnections = safeJsonParse( (await SystemSettings.get({ label: "agent_sql_connections" }))?.value, diff --git a/server/package.json b/server/package.json index 4c9a07bfc..f99339621 100644 --- a/server/package.json +++ b/server/package.json @@ -32,6 +32,7 @@ "@langchain/core": "0.1.61", "@langchain/openai": "0.0.28", "@langchain/textsplitters": "0.0.0", + "@mdpdf/mdpdf": "0.1.4", "@mintplex-labs/bree": "^9.2.5", "@mintplex-labs/express-ws": "^5.0.7", "@modelcontextprotocol/sdk": "^1.24.3", @@ -54,8 +55,11 @@ "cohere-ai": "^7.19.0", "cors": "^2.8.5", "diff": "7.0.0", + "docx": "9.6.1", + "dompurify": "3.3.3", "dotenv": "^16.0.3", "elevenlabs": "^0.5.0", + "exceljs": "4.4.0", "express": "^4.21.2", "extract-json-from-string": "^1.0.1", "fast-levenshtein": "^3.0.0", @@ -67,7 +71,9 @@ "js-tiktoken": "^1.0.8", "jsonrepair": "^3.7.0", "jsonwebtoken": "^9.0.0", + "jsdom": "26.1.0", "langchain": "0.1.36", + "marked": "15.0.12", "mime": "^3.0.0", "moment": "^2.29.4", "mssql": "^10.0.2", @@ -76,10 +82,12 @@ "node-telegram-bot-api": "^0.67.0", "ollama": "^0.6.3", "openai": "4.95.1", + "pdf-lib": "1.17.1", "pg": "^8.11.5", "pinecone-client": "^1.1.0", "pluralize": "^8.0.0", "posthog-node": "^3.1.1", + "pptxgenjs": "4.0.1", "prisma": "5.3.1", "slugify": "^1.6.6", "strip-ansi": "^7.1.2", diff --git a/server/storage/assets/anything-llm-invert.png b/server/storage/assets/anything-llm-invert.png new file mode 100644 index 000000000..ec14d175d Binary files /dev/null and b/server/storage/assets/anything-llm-invert.png differ diff --git a/server/utils/BackgroundWorkers/index.js b/server/utils/BackgroundWorkers/index.js index 12535a52d..85062b2b8 100644 --- a/server/utils/BackgroundWorkers/index.js +++ b/server/utils/BackgroundWorkers/index.js @@ -15,6 +15,11 @@ class BackgroundService { timeout: "1m", interval: "12hr", }, + { + name: "cleanup-generated-files", + timeout: "5m", + interval: "8hr", + }, ]; #documentSyncJobs = [ diff --git a/server/utils/agents/aibitat/plugins/chat-history.js b/server/utils/agents/aibitat/plugins/chat-history.js index 9058d51d4..99b0ca641 100644 --- a/server/utils/agents/aibitat/plugins/chat-history.js +++ b/server/utils/agents/aibitat/plugins/chat-history.js @@ -53,6 +53,7 @@ const chatHistory = { const invocation = aibitat.handlerProps.invocation; const metrics = aibitat.provider?.getUsage?.() ?? {}; const citations = aibitat._pendingCitations ?? []; + const outputs = aibitat._pendingOutputs ?? []; await WorkspaceChats.new({ workspaceId: Number(invocation.workspace_id), prompt, @@ -62,11 +63,13 @@ const chatHistory = { type: "chat", attachments, metrics, + ...(outputs.length > 0 ? { outputs } : {}), }, user: { id: invocation?.user_id || null }, threadId: invocation?.thread_id || null, }); aibitat.clearCitations?.(); + aibitat._pendingOutputs = []; }, _storeSpecial: async function ( aibitat, @@ -75,6 +78,7 @@ const chatHistory = { const invocation = aibitat.handlerProps.invocation; const metrics = aibitat.provider?.getUsage?.() ?? {}; const citations = aibitat._pendingCitations ?? []; + const outputs = aibitat._pendingOutputs ?? []; const existingSources = options?.sources ?? []; await WorkspaceChats.new({ workspaceId: Number(invocation.workspace_id), @@ -89,11 +93,13 @@ const chatHistory = { type: options?.saveAsType ?? "chat", attachments, metrics, + ...(outputs.length > 0 ? { outputs } : {}), }, user: { id: invocation?.user_id || null }, threadId: invocation?.thread_id || null, }); aibitat.clearCitations?.(); + aibitat._pendingOutputs = []; options?.postSave(); }, }; diff --git a/server/utils/agents/aibitat/plugins/create-files/docx/create-docx-file.js b/server/utils/agents/aibitat/plugins/create-files/docx/create-docx-file.js new file mode 100644 index 000000000..dc3521762 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/docx/create-docx-file.js @@ -0,0 +1,301 @@ +const { + getDeploymentVersion, +} = require("../../../../../../endpoints/utils.js"); +const createFilesLib = require("../lib.js"); +const { + getTheme, + getMargins, + loadLibraries, + htmlToDocxElements, + createCoverPageSection, + createRunningHeader, + createRunningFooter, + DEFAULT_NUMBERING_CONFIG, +} = require("./utils.js"); + +module.exports.CreateDocxFile = { + name: "create-docx-file", + plugin: function () { + return { + name: "create-docx-file", + setup(aibitat) { + aibitat.function({ + super: aibitat, + name: this.name, + description: + "Create a Microsoft Word document (.docx) from markdown or plain text content. Supports professional styling with color themes, title pages, and running headers/footers.", + examples: [ + { + prompt: "Create a Word document with meeting notes", + call: JSON.stringify({ + filename: "meeting-notes.docx", + content: + "# Meeting Notes - Q1 Planning\n\n## Attendees\n- John Smith\n- Sarah Johnson\n- Mike Chen\n\n## Agenda\n1. Review Q4 results\n2. Set Q1 goals\n3. Assign tasks\n\n## Action Items\n| Person | Task | Due Date |\n|--------|------|----------|\n| John | Prepare budget report | Jan 15 |\n| Sarah | Draft marketing plan | Jan 20 |\n| Mike | Schedule follow-up | Jan 10 |", + }), + }, + { + prompt: + "Create a professional project proposal with a title page", + call: JSON.stringify({ + filename: "project-proposal.docx", + title: "Project Alpha Proposal", + subtitle: "Strategic Initiative for Q2 2024", + author: "Product Team", + theme: "blue", + includeTitlePage: true, + content: + "## Executive Summary\nThis proposal outlines the development of **Project Alpha**, a next-generation platform.\n\n## Objectives\n- Increase efficiency by 40%\n- Reduce costs by $50,000 annually\n- Improve user satisfaction\n\n## Timeline\n| Phase | Duration | Deliverables |\n|-------|----------|-------------|\n| Phase 1 | 4 weeks | Requirements |\n| Phase 2 | 8 weeks | Development |\n| Phase 3 | 2 weeks | Testing |\n\n## Budget\nTotal estimated budget: **$150,000**", + }), + }, + { + prompt: "Create technical documentation with warm theme", + call: JSON.stringify({ + filename: "api-documentation.docx", + title: "API Documentation", + theme: "warm", + margins: "narrow", + content: + "# API Documentation\n\n## Authentication\nAll API requests require a Bearer token in the Authorization header.\n\n```javascript\nconst headers = {\n 'Authorization': 'Bearer YOUR_TOKEN',\n 'Content-Type': 'application/json'\n};\n```\n\n## Endpoints\n\n### GET /users\nReturns a list of all users.\n\n### POST /users\nCreates a new user.\n\n> **Note:** Rate limiting applies to all endpoints.", + }), + }, + ], + parameters: { + $schema: "http://json-schema.org/draft-07/schema#", + type: "object", + properties: { + filename: { + type: "string", + description: + "The filename for the Word document. Will automatically add .docx extension if not present.", + }, + title: { + type: "string", + description: + "Document title for metadata and title page. If not provided, will be extracted from content or use filename.", + }, + subtitle: { + type: "string", + description: + "Optional subtitle displayed on the title page below the main title.", + }, + author: { + type: "string", + description: + "Optional author name displayed on the title page.", + }, + content: { + type: "string", + description: + "The content to convert to a Word document. Fully supports markdown formatting.", + }, + theme: { + type: "string", + enum: ["neutral", "blue", "warm"], + description: + "Color theme for the document. 'neutral' (slate/grey), 'blue' (corporate blue), or 'warm' (earthy tones). Defaults to neutral.", + }, + margins: { + type: "string", + enum: ["normal", "narrow", "wide"], + description: + "Page margin preset. 'normal' (standard), 'narrow' (data-heavy docs), or 'wide' (letters/memos). Defaults to normal.", + }, + includeTitlePage: { + type: "boolean", + description: + "Include a professional title page with centered title, subtitle, author, and date. Content starts on page 2 with running headers/footers.", + }, + }, + required: ["filename", "content"], + additionalProperties: false, + }, + handler: async function ({ + filename = "document.docx", + title = null, + subtitle = null, + author = null, + content = "", + theme = "neutral", + margins = "normal", + includeTitlePage = false, + }) { + try { + this.super.handlerProps.log(`Using the create-docx-file tool.`); + + const hasExtension = /\.docx$/i.test(filename); + if (!hasExtension) filename = `${filename}.docx`; + const displayFilename = filename.split("/").pop(); + + const documentTitle = + title || + content.match(/^#\s+(.+)$/m)?.[1] || + displayFilename.replace(/\.docx$/i, ""); + + if (this.super.requestToolApproval) { + const approval = await this.super.requestToolApproval({ + skillName: this.name, + payload: { filename: displayFilename, title: documentTitle }, + description: `Create Word document "${displayFilename}"`, + }); + if (!approval.approved) { + this.super.introspect( + `${this.caller}: User rejected the ${this.name} request.` + ); + return approval.message; + } + } + + this.super.introspect( + `${this.caller}: Creating Word document "${displayFilename}"${includeTitlePage ? " with title page" : ""}` + ); + + const libs = await loadLibraries(); + const { marked, docx } = libs; + const { Document, Packer, Paragraph, TextRun } = docx; + marked.setOptions({ + gfm: true, + breaks: true, + }); + + const themeColors = getTheme(theme); + const marginConfig = getMargins(margins); + + const html = marked.parse(content); + this.super.handlerProps.log( + `create-docx-file: Parsed markdown to HTML (${html.length} chars), theme: ${theme}, margins: ${margins}` + ); + + const logoBuffer = createFilesLib.getLogo({ + forDarkBackground: false, + format: "buffer", + }); + + const docElements = await htmlToDocxElements( + html, + libs, + this.super.handlerProps.log, + themeColors + ); + + if (docElements.length === 0) { + docElements.push( + new Paragraph({ + children: [new TextRun({ text: content })], + }) + ); + } + + const sections = []; + + if (includeTitlePage) { + const currentDate = new Date().toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + }); + + sections.push( + createCoverPageSection(docx, { + title: documentTitle, + subtitle, + author, + date: currentDate, + theme: themeColors, + margins: marginConfig, + logoBuffer, + }) + ); + + sections.push({ + properties: { + page: { + margin: marginConfig, + }, + }, + children: docElements, + headers: { + default: createRunningHeader( + docx, + documentTitle, + themeColors + ), + }, + footers: { + default: createRunningFooter(docx, logoBuffer, themeColors), + }, + }); + } else { + sections.push({ + properties: { + page: { + margin: marginConfig, + }, + }, + children: docElements, + footers: { + default: createRunningFooter(docx, logoBuffer, themeColors), + }, + }); + } + + const doc = new Document({ + title: documentTitle, + creator: `AnythingLLM ${getDeploymentVersion()}`, + description: `Word Document generated by AnythingLLM ${getDeploymentVersion()}`, + numbering: DEFAULT_NUMBERING_CONFIG, + sections, + }); + + const buffer = await Packer.toBuffer(doc); + const bufferSizeKB = (buffer.length / 1024).toFixed(2); + + this.super.handlerProps.log( + `create-docx-file: Generated buffer - size: ${bufferSizeKB}KB, title: "${documentTitle}", theme: ${theme}` + ); + + const savedFile = await createFilesLib.saveGeneratedFile({ + fileType: "docx", + extension: "docx", + buffer, + displayFilename, + }); + + this.super.socket.send("fileDownloadCard", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + createFilesLib.registerOutput(this.super, "DocxFileDownload", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + this.super.introspect( + `${this.caller}: Successfully created Word document "${displayFilename}"` + ); + + const styleInfo = [ + theme !== "neutral" ? `${theme} theme` : null, + margins !== "normal" ? `${margins} margins` : null, + includeTitlePage ? "title page" : null, + ].filter(Boolean); + + const styleDesc = + styleInfo.length > 0 ? ` with ${styleInfo.join(", ")}` : ""; + + return `Successfully created Word document "${displayFilename}" (${bufferSizeKB}KB)${styleDesc}. The document includes formatted content with tables, images, Page X of Y footer, and professional styling.`; + } catch (e) { + this.super.handlerProps.log( + `create-docx-file error: ${e.message}` + ); + this.super.introspect(`Error: ${e.message}`); + return `Error creating Word document: ${e.message}`; + } + }, + }); + }, + }; + }, +}; diff --git a/server/utils/agents/aibitat/plugins/create-files/docx/test-themes.js b/server/utils/agents/aibitat/plugins/create-files/docx/test-themes.js new file mode 100755 index 000000000..ec06ec51c --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/docx/test-themes.js @@ -0,0 +1,298 @@ +#!/usr/bin/env node +/** + * Test utility to generate sample Word documents for all themes and configurations. + * Run from the server directory: node utils/agents/aibitat/plugins/create-files/docx/test-themes.js + * + * Output goes to: storage/generated-files/docx-theme-previews/ + */ + +const path = require("path"); +const fs = require("fs/promises"); +const { + DOCUMENT_STYLES, + getTheme, + getMargins, + loadLibraries, + htmlToDocxElements, + createCoverPageSection, + createRunningHeader, + createRunningFooter, + DEFAULT_NUMBERING_CONFIG, +} = require("./utils.js"); + +const OUTPUT_DIR = path.resolve( + __dirname, + "../../../../../../storage/generated-files/docx-theme-previews" +); + +const SAMPLE_CONTENT = `# Sample Document + +## Executive Summary + +This document demonstrates the **styling capabilities** of the Word document generator. It includes various content types to showcase how themes affect the visual appearance. + +## Key Features + +- Professional title pages with centered content +- Running headers with document title +- Page X of Y footer numbering +- Color-coordinated themes throughout + +## Data Overview + +| Metric | Q1 | Q2 | Q3 | Q4 | +|--------|-----|-----|-----|-----| +| Revenue | $1.2M | $1.5M | $1.8M | $2.1M | +| Growth | +15% | +25% | +20% | +17% | +| Users | 10K | 15K | 22K | 30K | + +## Technical Details + +Here is an example code block: + +\`\`\`javascript +const config = { + theme: "blue", + margins: "normal", + includeTitlePage: true +}; +\`\`\` + +> **Note:** This blockquote demonstrates how accent colors are applied to the left border. Blockquotes are useful for callouts and important notes. + +## Conclusion + +The themed document system provides a consistent, professional look across all generated documents. Each theme cascades colors through: + +1. Heading text colors +2. Table header backgrounds +3. Blockquote borders +4. Footer text styling + +--- + +Thank you for reviewing this sample document. +`; + +const MINIMAL_CONTENT = `# Quick Report + +## Summary + +A brief document to test minimal content rendering. + +- Point one +- Point two +- Point three + +| Item | Value | +|------|-------| +| A | 100 | +| B | 200 | +`; + +async function generateThemePreview(themeName, themeConfig, options = {}) { + const libs = await loadLibraries(); + const { marked, docx } = libs; + const { Document, Packer, Paragraph, TextRun } = docx; + + marked.setOptions({ gfm: true, breaks: true }); + + const { + margins = "normal", + includeTitlePage = false, + content = SAMPLE_CONTENT, + subtitle = null, + author = null, + } = options; + + const marginConfig = getMargins(margins); + const title = `${themeConfig.name || themeName} Theme Preview`; + + const html = marked.parse(content); + const docElements = await htmlToDocxElements( + html, + libs, + console.log, + themeConfig + ); + + if (docElements.length === 0) { + docElements.push( + new Paragraph({ + children: [new TextRun({ text: content })], + }) + ); + } + + const sections = []; + + if (includeTitlePage) { + const currentDate = new Date().toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + }); + + sections.push( + createCoverPageSection(docx, { + title, + subtitle: subtitle || `Demonstrating the ${themeName} color scheme`, + author: author || "AnythingLLM Theme Tester", + date: currentDate, + theme: themeConfig, + margins: marginConfig, + logoBuffer: null, + }) + ); + + sections.push({ + properties: { + page: { margin: marginConfig }, + titlePage: true, + }, + children: docElements, + headers: { + default: createRunningHeader(docx, title, themeConfig), + }, + footers: { + default: createRunningFooter(docx, null, themeConfig), + }, + }); + } else { + sections.push({ + properties: { + page: { margin: marginConfig }, + }, + children: docElements, + footers: { + default: createRunningFooter(docx, null, themeConfig), + }, + }); + } + + const doc = new Document({ + title, + creator: "AnythingLLM Theme Tester", + description: `Theme preview for ${themeName}`, + numbering: DEFAULT_NUMBERING_CONFIG, + sections, + }); + + return Packer.toBuffer(doc); +} + +async function main() { + console.log("DOCX Theme Preview Generator"); + console.log("============================\n"); + + await fs.mkdir(OUTPUT_DIR, { recursive: true }); + + const themes = Object.keys(DOCUMENT_STYLES.themes); + const marginPresets = Object.keys(DOCUMENT_STYLES.margins); + + console.log(`Themes: ${themes.join(", ")}`); + console.log(`Margins: ${marginPresets.join(", ")}\n`); + + const configs = []; + + for (const themeName of themes) { + configs.push({ + name: `theme-${themeName}-simple`, + theme: themeName, + margins: "normal", + includeTitlePage: false, + content: SAMPLE_CONTENT, + }); + + configs.push({ + name: `theme-${themeName}-with-title-page`, + theme: themeName, + margins: "normal", + includeTitlePage: true, + content: SAMPLE_CONTENT, + }); + } + + for (const marginName of marginPresets) { + configs.push({ + name: `margins-${marginName}`, + theme: "neutral", + margins: marginName, + includeTitlePage: true, + content: SAMPLE_CONTENT, + }); + } + + configs.push({ + name: `full-featured-blue`, + theme: "blue", + margins: "normal", + includeTitlePage: true, + content: SAMPLE_CONTENT, + subtitle: "A Complete Feature Demonstration", + author: "Documentation Team", + }); + + configs.push({ + name: `minimal-warm`, + theme: "warm", + margins: "narrow", + includeTitlePage: false, + content: MINIMAL_CONTENT, + }); + + console.log(`Generating ${configs.length} preview documents...\n`); + + for (const config of configs) { + const themeConfig = getTheme(config.theme); + try { + const buffer = await generateThemePreview(config.theme, themeConfig, { + margins: config.margins, + includeTitlePage: config.includeTitlePage, + content: config.content, + subtitle: config.subtitle, + author: config.author, + }); + + const filename = `${config.name}.docx`; + const filepath = path.join(OUTPUT_DIR, filename); + await fs.writeFile(filepath, buffer); + + const sizeKB = (buffer.length / 1024).toFixed(1); + const titlePage = config.includeTitlePage ? "✓ title" : " - "; + console.log( + `✓ ${config.name.padEnd(30)} [${config.theme.padEnd(7)}] [${config.margins.padEnd(6)}] ${titlePage} (${sizeKB}KB)` + ); + } catch (error) { + console.error(`✗ ${config.name.padEnd(30)} → Error: ${error.message}`); + console.error(error.stack); + } + } + + console.log(`\n✅ Done! Files saved to: ${OUTPUT_DIR}`); + console.log( + "\nOpen the .docx files in Microsoft Word or LibreOffice to preview each configuration." + ); + + console.log("\n--- Theme Color Reference ---"); + for (const [name, colors] of Object.entries(DOCUMENT_STYLES.themes)) { + console.log(`\n${name.toUpperCase()}:`); + console.log(` Heading: #${colors.heading}`); + console.log(` Accent: #${colors.accent}`); + console.log(` Table Header: #${colors.tableHeader}`); + console.log(` Border: #${colors.border}`); + console.log(` Cover BG: #${colors.coverBg}`); + console.log(` Footer Text: #${colors.footerText}`); + } + + console.log("\n--- Margin Presets (twips) ---"); + for (const [name, margins] of Object.entries(DOCUMENT_STYLES.margins)) { + const inchTop = (margins.top / 1440).toFixed(2); + const inchLeft = (margins.left / 1440).toFixed(2); + console.log( + `${name.padEnd(8)}: top/bottom=${inchTop}" left/right=${inchLeft}"` + ); + } +} + +main().catch(console.error); diff --git a/server/utils/agents/aibitat/plugins/create-files/docx/utils.js b/server/utils/agents/aibitat/plugins/create-files/docx/utils.js new file mode 100644 index 000000000..daebecf68 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/docx/utils.js @@ -0,0 +1,1095 @@ +/** + * Utilities for converting markdown to DOCX format. + * Uses marked for parsing, jsdom for HTML traversal, and docx for document generation. + */ + +/** + * Document style presets for professional-looking documents. + */ +const DOCUMENT_STYLES = { + margins: { + normal: { top: 1440, bottom: 1440, left: 1800, right: 1800 }, + narrow: { top: 720, bottom: 720, left: 720, right: 720 }, + wide: { top: 1440, bottom: 1440, left: 2880, right: 2880 }, + }, + themes: { + neutral: { + heading: "2E4057", + accent: "048A81", + tableHeader: "E7E6E6", + border: "CCCCCC", + coverBg: "2E4057", + coverText: "FFFFFF", + footerText: "666666", + }, + blue: { + heading: "1B3A6B", + accent: "2E86AB", + tableHeader: "D6E8F5", + border: "A8C8E8", + coverBg: "1B3A6B", + coverText: "FFFFFF", + footerText: "2E86AB", + }, + warm: { + heading: "5C3317", + accent: "C1440E", + tableHeader: "F5ECD7", + border: "D4B896", + coverBg: "5C3317", + coverText: "FFFFFF", + footerText: "8B6914", + }, + }, + fonts: { + body: "Calibri", + heading: "Calibri", + mono: "Consolas", + }, + borders: { + none: { + top: { style: "none" }, + bottom: { style: "none" }, + left: { style: "none" }, + right: { style: "none" }, + }, + }, +}; + +/** + * Gets the theme colors, falling back to neutral if not found. + * @param {string} themeName - The theme name + * @returns {Object} Theme color configuration + */ +function getTheme(themeName) { + return DOCUMENT_STYLES.themes[themeName] || DOCUMENT_STYLES.themes.neutral; +} + +/** + * Gets the margin configuration, falling back to normal if not found. + * @param {string} marginName - The margin preset name + * @returns {Object} Margin configuration + */ +function getMargins(marginName) { + return DOCUMENT_STYLES.margins[marginName] || DOCUMENT_STYLES.margins.normal; +} + +/** + * Lazy-loads the required libraries for docx generation. + * @returns {Promise} The loaded libraries + */ +async function loadLibraries() { + const { marked } = await import("marked"); + const { JSDOM } = await import("jsdom"); + const docx = await import("docx"); + + return { + marked, + JSDOM, + docx, + }; +} + +const MAX_IMAGE_SIZE = 10 * 1024 * 1024; // 10MB +const IMAGE_FETCH_TIMEOUT_MS = 2000; + +/** + * Image magic bytes and their corresponding types. + * This is hardcoded and there might be a better way to do this but this is for simple image validation. + * @type {Object} + */ +const IMAGE_MAGIC_BYTES = { + png: { bytes: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a], type: "png" }, + jpg: { bytes: [0xff, 0xd8, 0xff], type: "jpg" }, + gif87a: { bytes: [0x47, 0x49, 0x46, 0x38, 0x37, 0x61], type: "gif" }, + gif89a: { bytes: [0x47, 0x49, 0x46, 0x38, 0x39, 0x61], type: "gif" }, + bmp: { bytes: [0x42, 0x4d], type: "bmp" }, + webp: { + bytes: [0x52, 0x49, 0x46, 0x46], + type: "webp", + offset4: [0x57, 0x45, 0x42, 0x50], + }, +}; + +/** + * Validates image buffer by checking magic bytes to determine actual image type. + * @param {Buffer} buffer - The image buffer to validate + * @returns {{valid: boolean, type: string|null}} Validation result with detected type + */ +function validateImageMagicBytes(buffer) { + if (!buffer || buffer.length < 12) { + return { valid: false, type: null }; + } + + for (const [, signature] of Object.entries(IMAGE_MAGIC_BYTES)) { + const matches = signature.bytes.every((byte, i) => buffer[i] === byte); + if (matches) { + if (signature.offset4) { + const offset4Matches = signature.offset4.every( + (byte, i) => buffer[8 + i] === byte + ); + if (!offset4Matches) continue; + } + return { valid: true, type: signature.type }; + } + } + + return { valid: false, type: null }; +} + +/** + * Fetches an image from a URL or processes a base64 data string. + * @param {string} src - Image source (URL or base64) + * @param {Function} log - Logging function + * @returns {Promise<{buffer: Buffer, type: string, width: number, height: number} | null>} + */ +async function fetchImage(src, log) { + try { + let imageBuffer; + let imageType = "png"; + + if (src.startsWith("data:")) { + const match = src.match(/^data:image\/(\w+);base64,(.+)$/); + if (match) { + imageBuffer = Buffer.from(match[2], "base64"); + + if (imageBuffer.length > MAX_IMAGE_SIZE) { + log( + `create-docx-file: Base64 image too large (${(imageBuffer.length / 1024 / 1024).toFixed(2)}MB), max ${MAX_IMAGE_SIZE / 1024 / 1024}MB` + ); + return null; + } + + const validation = validateImageMagicBytes(imageBuffer); + if (!validation.valid) { + log( + `create-docx-file: Base64 data is not a valid image (magic bytes check failed)` + ); + return null; + } + imageType = validation.type; + + log( + `create-docx-file: Processed base64 image, type: ${imageType}, size: ${imageBuffer.length} bytes` + ); + } else { + log(`create-docx-file: Invalid base64 image format, skipping`); + return null; + } + } else if (src.startsWith("http://") || src.startsWith("https://")) { + let parsedUrl; + try { + parsedUrl = new URL(src); + } catch { + log(`create-docx-file: Invalid URL: ${src}`); + return null; + } + + if (!["http:", "https:"].includes(parsedUrl.protocol)) { + log(`create-docx-file: Invalid URL protocol: ${parsedUrl.protocol}`); + return null; + } + + const controller = new AbortController(); + const timeoutId = setTimeout( + () => controller.abort(), + IMAGE_FETCH_TIMEOUT_MS + ); + + try { + const response = await fetch(src, { + signal: controller.signal, + }); + clearTimeout(timeoutId); + + if (!response.ok) { + log( + `create-docx-file: Failed to fetch image from ${src}: ${response.status}` + ); + return null; + } + + const contentLength = response.headers.get("content-length"); + if (contentLength && parseInt(contentLength, 10) > MAX_IMAGE_SIZE) { + log( + `create-docx-file: Image too large (${(parseInt(contentLength, 10) / 1024 / 1024).toFixed(2)}MB), max ${MAX_IMAGE_SIZE / 1024 / 1024}MB` + ); + return null; + } + + const arrayBuffer = await response.arrayBuffer(); + imageBuffer = Buffer.from(arrayBuffer); + + if (imageBuffer.length > MAX_IMAGE_SIZE) { + log( + `create-docx-file: Downloaded image too large (${(imageBuffer.length / 1024 / 1024).toFixed(2)}MB), max ${MAX_IMAGE_SIZE / 1024 / 1024}MB` + ); + return null; + } + + const validation = validateImageMagicBytes(imageBuffer); + if (!validation.valid) { + log( + `create-docx-file: Fetched content is not a valid image (magic bytes check failed)` + ); + return null; + } + imageType = validation.type; + + log( + `create-docx-file: Fetched remote image from ${src}, type: ${imageType}, size: ${imageBuffer.length} bytes` + ); + } catch (fetchError) { + clearTimeout(timeoutId); + if (fetchError.name === "AbortError") { + log( + `create-docx-file: Image fetch timed out after ${IMAGE_FETCH_TIMEOUT_MS}ms: ${src}` + ); + } else { + log( + `create-docx-file: Error fetching image from ${src}: ${fetchError.message}` + ); + } + return null; + } + } else { + log(`create-docx-file: Unsupported image source: ${src}`); + return null; + } + + const { imageSize: getImageSize } = await import("image-size"); + let width = 400; + let height = 300; + + try { + const dimensions = getImageSize(imageBuffer); + if (dimensions.width && dimensions.height) { + width = dimensions.width; + height = dimensions.height; + + const maxWidth = 600; + const maxHeight = 400; + + if (width > maxWidth) { + const scale = maxWidth / width; + width = maxWidth; + height = Math.round(height * scale); + } + + if (height > maxHeight) { + const scale = maxHeight / height; + height = maxHeight; + width = Math.round(width * scale); + } + } + } catch (sizeError) { + log( + `create-docx-file: Could not determine image size: ${sizeError.message}, using defaults` + ); + } + + return { buffer: imageBuffer, type: imageType, width, height }; + } catch (error) { + log(`create-docx-file: Image processing error: ${error.message}`); + return null; + } +} + +/** + * Converts HTML to docx paragraph children (TextRun, etc.) + * @param {Element} element - DOM element to process + * @param {Object} docx - The docx library + * @param {Object} styles - Current text styles + * @param {Function} log - Logging function + * @returns {Promise} Array of docx elements + */ +async function processInlineElements(element, docx, styles = {}, log) { + const { TextRun, ExternalHyperlink, ImageRun } = docx; + const children = []; + + for (const node of element.childNodes) { + if (node.nodeType === 3) { + const text = node.textContent; + if (text && text.trim()) { + children.push( + new TextRun({ + text, + bold: styles.bold || false, + italics: styles.italics || false, + strike: styles.strike || false, + font: styles.font || "Calibri", + size: styles.size || 24, + color: styles.color, + }) + ); + } else if (text && text.includes(" ")) { + children.push(new TextRun({ text: " " })); + } + } else if (node.nodeType === 1) { + const tagName = node.tagName.toLowerCase(); + + switch (tagName) { + case "strong": + case "b": + children.push( + ...(await processInlineElements( + node, + docx, + { ...styles, bold: true }, + log + )) + ); + break; + case "em": + case "i": + children.push( + ...(await processInlineElements( + node, + docx, + { ...styles, italics: true }, + log + )) + ); + break; + case "del": + case "s": + children.push( + ...(await processInlineElements( + node, + docx, + { ...styles, strike: true }, + log + )) + ); + break; + case "code": + children.push( + new TextRun({ + text: node.textContent, + font: "Consolas", + size: 20, + shading: { fill: "E8E8E8" }, + }) + ); + break; + case "a": { + const href = node.getAttribute("href"); + const isValidHref = href && /^https?:\/\//i.test(href); + if (isValidHref) { + children.push( + new ExternalHyperlink({ + children: [ + new TextRun({ + text: node.textContent, + style: "Hyperlink", + color: "0563C1", + underline: { type: "single" }, + }), + ], + link: href, + }) + ); + } else { + children.push(new TextRun({ text: node.textContent })); + } + break; + } + case "img": { + const src = node.getAttribute("src"); + if (src) { + const imageData = await fetchImage(src, log); + if (imageData) { + children.push( + new ImageRun({ + data: imageData.buffer, + transformation: { + width: imageData.width, + height: imageData.height, + }, + type: imageData.type, + }) + ); + } + } + break; + } + case "br": + children.push(new TextRun({ break: 1 })); + break; + default: + children.push( + ...(await processInlineElements(node, docx, styles, log)) + ); + } + } + } + + return children; +} + +/** + * Converts an HTML table to docx Table. + * @param {Element} tableElement - The table DOM element + * @param {Object} docx - The docx library + * @param {Function} log - Logging function + * @param {Object} theme - Theme color configuration + * @returns {Promise} A docx Table + */ +async function processTable(tableElement, docx, log, theme = null) { + const { + Table, + TableRow, + TableCell, + Paragraph, + WidthType, + BorderStyle, + AlignmentType, + TextRun, + TableLayoutType, + } = docx; + + const colors = theme || DOCUMENT_STYLES.themes.neutral; + const rows = []; + const tableRows = tableElement.querySelectorAll("tr"); + + const firstRow = tableRows[0]; + const columnCount = firstRow ? firstRow.querySelectorAll("th, td").length : 1; + const columnWidthPercent = Math.floor(100 / columnCount); + + let dataRowIndex = 0; + for (const tr of tableRows) { + const cells = []; + const cellElements = tr.querySelectorAll("th, td"); + const isHeader = tr.querySelector("th") !== null; + + let shadingFill; + if (isHeader) { + shadingFill = colors.tableHeader; + } else if (dataRowIndex % 2 === 1) { + shadingFill = "F9F9F9"; + } + + for (const cell of cellElements) { + const cellChildren = await processInlineElements(cell, docx, {}, log); + cells.push( + new TableCell({ + children: [ + new Paragraph({ + children: + cellChildren.length > 0 + ? cellChildren + : [new TextRun({ text: "" })], + alignment: AlignmentType.LEFT, + }), + ], + width: { size: columnWidthPercent, type: WidthType.PERCENTAGE }, + shading: shadingFill ? { fill: shadingFill } : undefined, + }) + ); + } + + if (cells.length > 0) { + rows.push(new TableRow({ children: cells })); + } + + if (!isHeader) { + dataRowIndex++; + } + } + + return new Table({ + rows, + width: { size: 100, type: WidthType.PERCENTAGE }, + layout: TableLayoutType.FIXED, + borders: { + top: { style: BorderStyle.SINGLE, size: 1, color: colors.border }, + bottom: { style: BorderStyle.SINGLE, size: 1, color: colors.border }, + left: { style: BorderStyle.SINGLE, size: 1, color: colors.border }, + right: { style: BorderStyle.SINGLE, size: 1, color: colors.border }, + insideHorizontal: { + style: BorderStyle.SINGLE, + size: 1, + color: colors.border, + }, + insideVertical: { + style: BorderStyle.SINGLE, + size: 1, + color: colors.border, + }, + }, + }); +} + +/** + * Processes a list element (ul/ol) into docx paragraphs. + * @param {Element} listElement - The list DOM element + * @param {Object} docx - The docx library + * @param {boolean} isOrdered - Whether the list is ordered + * @param {number} level - Nesting level + * @param {Function} log - Logging function + * @returns {Promise} Array of docx Paragraphs + */ +async function processList(listElement, docx, isOrdered, level = 0, log) { + const { Paragraph } = docx; + const paragraphs = []; + const items = listElement.querySelectorAll(":scope > li"); + + for (const li of items) { + const inlineChildren = []; + const nestedLists = []; + + for (const child of li.childNodes) { + if (child.nodeType === 1) { + const tagName = child.tagName.toLowerCase(); + if (tagName === "ul" || tagName === "ol") { + nestedLists.push({ element: child, ordered: tagName === "ol" }); + } else { + const wrapper = li.ownerDocument.createElement("span"); + wrapper.appendChild(child.cloneNode(true)); + inlineChildren.push( + ...(await processInlineElements(wrapper, docx, {}, log)) + ); + } + } else if (child.nodeType === 3 && child.textContent.trim()) { + const wrapper = li.ownerDocument.createElement("span"); + wrapper.textContent = child.textContent; + inlineChildren.push( + ...(await processInlineElements(wrapper, docx, {}, log)) + ); + } + } + + if (inlineChildren.length > 0) { + paragraphs.push( + new Paragraph({ + children: inlineChildren, + bullet: isOrdered ? undefined : { level }, + numbering: isOrdered + ? { reference: "default-numbering", level } + : undefined, + }) + ); + } + + for (const nested of nestedLists) { + paragraphs.push( + ...(await processList( + nested.element, + docx, + nested.ordered, + level + 1, + log + )) + ); + } + } + + return paragraphs; +} + +/** + * Converts HTML content to an array of docx elements. + * @param {string} html - The HTML content + * @param {Object} libs - The loaded libraries + * @param {Function} log - Logging function + * @param {Object} theme - Theme color configuration + * @returns {Promise} Array of docx elements for sections + */ +async function htmlToDocxElements(html, libs, log, theme = null) { + const { JSDOM, docx } = libs; + const { Paragraph, TextRun, HeadingLevel, AlignmentType, ImageRun } = docx; + + const colors = theme || DOCUMENT_STYLES.themes.neutral; + const dom = new JSDOM(html); + const body = dom.window.document.body; + const elements = []; + + const headingSizes = { + h1: { level: HeadingLevel.HEADING_1, size: 48 }, + h2: { level: HeadingLevel.HEADING_2, size: 40 }, + h3: { level: HeadingLevel.HEADING_3, size: 32 }, + h4: { level: HeadingLevel.HEADING_4, size: 28 }, + h5: { level: HeadingLevel.HEADING_5, size: 24 }, + h6: { level: HeadingLevel.HEADING_6, size: 22 }, + }; + + for (const child of body.children) { + const tagName = child.tagName.toLowerCase(); + + try { + if (headingSizes[tagName]) { + const { level, size } = headingSizes[tagName]; + const inlineChildren = await processInlineElements( + child, + docx, + { size, bold: true, color: colors.heading }, + log + ); + elements.push( + new Paragraph({ + children: + inlineChildren.length > 0 + ? inlineChildren + : [ + new TextRun({ + text: child.textContent, + bold: true, + size, + color: colors.heading, + }), + ], + heading: level, + spacing: { before: 240, after: 120 }, + }) + ); + } else if (tagName === "p") { + const inlineChildren = await processInlineElements( + child, + docx, + {}, + log + ); + if (inlineChildren.length > 0) { + elements.push( + new Paragraph({ + children: inlineChildren, + spacing: { after: 200 }, + }) + ); + } + } else if (tagName === "ul") { + elements.push(...(await processList(child, docx, false, 0, log))); + } else if (tagName === "ol") { + elements.push(...(await processList(child, docx, true, 0, log))); + } else if (tagName === "table") { + elements.push(await processTable(child, docx, log, colors)); + elements.push(new Paragraph({ children: [] })); + } else if (tagName === "blockquote") { + const inlineChildren = await processInlineElements( + child, + docx, + { italics: true, color: "666666" }, + log + ); + elements.push( + new Paragraph({ + children: inlineChildren, + indent: { left: 720 }, + border: { + left: { style: "single", size: 24, color: colors.accent }, + }, + spacing: { before: 200, after: 200 }, + }) + ); + } else if (tagName === "pre") { + const codeElement = child.querySelector("code"); + const codeText = codeElement + ? codeElement.textContent + : child.textContent; + const lines = codeText.split("\n"); + + for (const line of lines) { + elements.push( + new Paragraph({ + children: [ + new TextRun({ + text: line || " ", + font: DOCUMENT_STYLES.fonts.mono, + size: 20, + }), + ], + shading: { fill: "F5F5F5" }, + spacing: { before: 0, after: 0 }, + }) + ); + } + elements.push(new Paragraph({ children: [], spacing: { after: 200 } })); + } else if (tagName === "hr") { + elements.push( + new Paragraph({ + children: [], + border: { + bottom: { style: "single", size: 6, color: colors.border }, + }, + spacing: { before: 200, after: 200 }, + }) + ); + } else if (tagName === "img") { + const src = child.getAttribute("src"); + if (src) { + const imageData = await fetchImage(src, log); + if (imageData) { + elements.push( + new Paragraph({ + children: [ + new ImageRun({ + data: imageData.buffer, + transformation: { + width: imageData.width, + height: imageData.height, + }, + type: imageData.type, + }), + ], + alignment: AlignmentType.CENTER, + spacing: { before: 200, after: 200 }, + }) + ); + } + } + } else { + const inlineChildren = await processInlineElements( + child, + docx, + {}, + log + ); + if (inlineChildren.length > 0) { + elements.push(new Paragraph({ children: inlineChildren })); + } + } + } catch (err) { + log( + `create-docx-file: Error processing element ${tagName}: ${err.message}` + ); + } + } + + return elements; +} + +/** + * Creates a cover/title page section with colored background and centered title block. + * @param {Object} docx - The docx library + * @param {Object} options - Cover page options + * @param {string} options.title - Document title + * @param {string} options.subtitle - Optional subtitle + * @param {string} options.author - Optional author name + * @param {string} options.date - Optional date string + * @param {Object} options.theme - Theme color configuration + * @param {Object} options.margins - Margin configuration + * @param {Buffer|null} options.logoBuffer - Logo buffer for footer + * @returns {Object} Section configuration for cover page + */ +function createCoverPageSection(docx, options) { + const { Paragraph, TextRun, AlignmentType, Footer, ImageRun, SectionType } = + docx; + + const { title, subtitle, author, date, theme, margins, logoBuffer } = options; + + const coverChildren = []; + + coverChildren.push( + new Paragraph({ + children: [], + spacing: { before: 2400 }, + }) + ); + + coverChildren.push( + new Paragraph({ + children: [ + new TextRun({ + text: title, + bold: true, + size: 72, + color: theme.heading, + font: DOCUMENT_STYLES.fonts.heading, + }), + ], + alignment: AlignmentType.CENTER, + spacing: { after: 400 }, + }) + ); + + if (subtitle) { + coverChildren.push( + new Paragraph({ + children: [ + new TextRun({ + text: subtitle, + size: 32, + color: theme.accent, + font: DOCUMENT_STYLES.fonts.body, + }), + ], + alignment: AlignmentType.CENTER, + spacing: { after: 800 }, + }) + ); + } + + coverChildren.push( + new Paragraph({ + children: [], + spacing: { before: 4800 }, + }) + ); + + if (author) { + coverChildren.push( + new Paragraph({ + children: [ + new TextRun({ + text: author, + size: 24, + color: "666666", + font: DOCUMENT_STYLES.fonts.body, + }), + ], + alignment: AlignmentType.CENTER, + spacing: { after: 200 }, + }) + ); + } + + if (date) { + coverChildren.push( + new Paragraph({ + children: [ + new TextRun({ + text: date, + size: 22, + color: "888888", + font: DOCUMENT_STYLES.fonts.body, + }), + ], + alignment: AlignmentType.CENTER, + spacing: { after: 200 }, + }) + ); + } + + const coverFooterChildren = []; + if (logoBuffer) { + coverFooterChildren.push( + new Paragraph({ + alignment: AlignmentType.CENTER, + children: [ + new ImageRun({ + data: logoBuffer, + transformation: { width: 100, height: 16 }, + type: "png", + }), + ], + }) + ); + } + + return { + properties: { + page: { + margin: margins, + }, + type: SectionType.NEXT_PAGE, + }, + children: coverChildren, + footers: { + default: new Footer({ children: coverFooterChildren }), + }, + }; +} + +/** + * Creates a running header for content pages (pages 2+). + * @param {Object} docx - The docx library + * @param {string} documentTitle - The document title to display + * @param {Object} theme - Theme color configuration + * @returns {Object} Header configuration + */ +function createRunningHeader(docx, documentTitle, theme) { + const { + Header, + Paragraph, + TextRun, + AlignmentType, + Table, + TableRow, + TableCell, + WidthType, + BorderStyle, + } = docx; + + const noBorders = DOCUMENT_STYLES.borders.none; + + return new Header({ + children: [ + new Table({ + width: { size: 100, type: WidthType.PERCENTAGE }, + borders: { + ...noBorders, + insideHorizontal: { style: "none" }, + insideVertical: { style: "none" }, + bottom: { style: BorderStyle.SINGLE, size: 6, color: theme.border }, + }, + rows: [ + new TableRow({ + children: [ + new TableCell({ + width: { size: 70, type: WidthType.PERCENTAGE }, + borders: noBorders, + children: [ + new Paragraph({ + children: [ + new TextRun({ + text: documentTitle, + size: 18, + color: theme.footerText, + font: DOCUMENT_STYLES.fonts.body, + }), + ], + }), + ], + }), + new TableCell({ + width: { size: 30, type: WidthType.PERCENTAGE }, + borders: noBorders, + children: [ + new Paragraph({ + alignment: AlignmentType.RIGHT, + children: [], + }), + ], + }), + ], + }), + ], + }), + new Paragraph({ children: [], spacing: { after: 200 } }), + ], + }); +} + +/** + * Creates a running footer with Page X of Y and branding. + * @param {Object} docx - The docx library + * @param {Buffer|null} logoBuffer - Logo buffer or null + * @param {Object} theme - Theme color configuration + * @returns {Object} Footer configuration + */ +function createRunningFooter(docx, logoBuffer, theme) { + const { + Footer, + Paragraph, + TextRun, + AlignmentType, + Table, + TableRow, + TableCell, + WidthType, + ImageRun, + PageNumber, + } = docx; + + const noBorders = DOCUMENT_STYLES.borders.none; + + const pageNumberParagraph = new Paragraph({ + alignment: AlignmentType.LEFT, + children: [ + new TextRun({ + children: ["Page ", PageNumber.CURRENT, " of ", PageNumber.TOTAL_PAGES], + size: 18, + color: theme.footerText, + font: DOCUMENT_STYLES.fonts.body, + }), + ], + }); + + const brandingCell = logoBuffer + ? new Paragraph({ + alignment: AlignmentType.RIGHT, + children: [ + new ImageRun({ + data: logoBuffer, + transformation: { width: 80, height: 13 }, + type: "png", + }), + ], + }) + : new Paragraph({ + alignment: AlignmentType.RIGHT, + children: [ + new TextRun({ + text: "Generated by AnythingLLM", + size: 16, + color: theme.footerText, + font: DOCUMENT_STYLES.fonts.body, + }), + ], + }); + + return new Footer({ + children: [ + new Table({ + width: { size: 100, type: WidthType.PERCENTAGE }, + borders: { + ...noBorders, + insideHorizontal: { style: "none" }, + insideVertical: { style: "none" }, + }, + rows: [ + new TableRow({ + children: [ + new TableCell({ + width: { size: 50, type: WidthType.PERCENTAGE }, + borders: noBorders, + children: [pageNumberParagraph], + }), + new TableCell({ + width: { size: 50, type: WidthType.PERCENTAGE }, + borders: noBorders, + children: [brandingCell], + }), + ], + }), + ], + }), + ], + }); +} + +/** + * Default numbering configuration for ordered lists. + */ +const DEFAULT_NUMBERING_CONFIG = { + config: [ + { + reference: "default-numbering", + levels: [ + { + level: 0, + format: "decimal", + text: "%1.", + alignment: "start", + style: { paragraph: { indent: { left: 720, hanging: 360 } } }, + }, + { + level: 1, + format: "lowerLetter", + text: "%2.", + alignment: "start", + style: { paragraph: { indent: { left: 1440, hanging: 360 } } }, + }, + { + level: 2, + format: "lowerRoman", + text: "%3.", + alignment: "start", + style: { paragraph: { indent: { left: 2160, hanging: 360 } } }, + }, + ], + }, + ], +}; + +module.exports = { + DOCUMENT_STYLES, + getTheme, + getMargins, + loadLibraries, + htmlToDocxElements, + createCoverPageSection, + createRunningHeader, + createRunningFooter, + DEFAULT_NUMBERING_CONFIG, +}; diff --git a/server/utils/agents/aibitat/plugins/create-files/index.js b/server/utils/agents/aibitat/plugins/create-files/index.js new file mode 100644 index 000000000..5833bab9f --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/index.js @@ -0,0 +1,23 @@ +const { CreatePptxPresentation } = require("./pptx/create-presentation.js"); +const { CreateTextFile } = require("./text/create-text-file.js"); +const { CreatePdfFile } = require("./pdf/create-pdf-file.js"); +const { CreateExcelFile } = require("./xlsx/create-excel-file.js"); +const { CreateDocxFile } = require("./docx/create-docx-file.js"); + +const createFilesAgent = { + name: "create-files-agent", + startupConfig: { + params: {}, + }, + plugin: [ + CreatePptxPresentation, + CreateTextFile, + CreatePdfFile, + CreateExcelFile, + CreateDocxFile, + ], +}; + +module.exports = { + createFilesAgent, +}; diff --git a/server/utils/agents/aibitat/plugins/create-files/lib.js b/server/utils/agents/aibitat/plugins/create-files/lib.js new file mode 100644 index 000000000..e0b1068dd --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/lib.js @@ -0,0 +1,298 @@ +const path = require("path"); +const fs = require("fs/promises"); +const fsSync = require("fs"); +const { v4: uuidv4 } = require("uuid"); + +/** + * Manages file creation operations for binary document formats. + * Handles both browser download and filesystem write modes. + * All generated files are saved to storage/generated-files directory. + */ +class CreateFilesManager { + #outputDirectory = null; + #isInitialized = false; + + /** + * Gets the output directory for generated files. + * @returns {string} The output directory path (storage/generated-files) + */ + #getOutputDirectory() { + const storageRoot = + process.env.STORAGE_DIR || + path.resolve(__dirname, "../../../../../storage"); + return path.join(storageRoot, "generated-files"); + } + + /** + * Initializes the create-files manager and ensures output directory exists. + * @returns {Promise} The output directory path + */ + async #initialize() { + this.#outputDirectory = this.#getOutputDirectory(); + + try { + await fs.mkdir(this.#outputDirectory, { recursive: true }); + } catch (error) { + console.error( + `Warning: Could not create output directory ${this.#outputDirectory}: ${error.message}` + ); + } + + this.#isInitialized = true; + return this.#outputDirectory; + } + + /** + * Ensures the create-files manager is initialized before use. + * @returns {Promise} + */ + async ensureInitialized() { + if (!this.#isInitialized) await this.#initialize(); + } + + /** + * Checks if file creation tools are available. + * @returns {boolean} True if tools are available + */ + isToolAvailable() { + if (process.env.NODE_ENV === "development") return true; + return process.env.ANYTHING_LLM_RUNTIME === "docker"; + } + + /** + * Gets the output directory path. + * @returns {Promise} The output directory path + */ + async getOutputDirectory() { + await this.ensureInitialized(); + return this.#outputDirectory; + } + + /** + * Writes binary content (Buffer) to a file. + * @param {string} filePath - Validated absolute path to write to + * @param {Buffer} buffer - Binary content to write + * @returns {Promise} + */ + async writeBinaryFile(filePath, buffer) { + const parentDir = path.dirname(filePath); + const fileSizeBytes = buffer.length; + const fileSizeKB = (fileSizeBytes / 1024).toFixed(2); + const fileSizeMB = (fileSizeBytes / (1024 * 1024)).toFixed(2); + + console.log( + `[CreateFilesManager] writeBinaryFile starting - path: ${filePath}, size: ${fileSizeKB}KB (${fileSizeMB}MB)` + ); + + await fs.mkdir(parentDir, { recursive: true }); + await fs.writeFile(filePath, buffer); + + console.log( + `[CreateFilesManager] writeBinaryFile completed - file saved to: ${filePath}` + ); + } + + /** + * Gets the MIME type for a file extension. + * @param {string} extension - File extension (with or without dot) + * @returns {string} MIME type + */ + getMimeType(extension) { + const ext = extension.startsWith(".") ? extension : `.${extension}`; + const mimeTypes = { + ".pptx": + "application/vnd.openxmlformats-officedocument.presentationml.presentation", + ".xlsx": + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + ".docx": + "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + ".pdf": "application/pdf", + ".txt": "text/plain", + ".csv": "text/csv", + ".json": "application/json", + ".html": "text/html", + ".xml": "application/xml", + ".zip": "application/zip", + ".png": "image/png", + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + ".gif": "image/gif", + ".svg": "image/svg+xml", + ".mp3": "audio/mpeg", + ".mp4": "video/mp4", + ".webm": "video/webm", + }; + return mimeTypes[ext.toLowerCase()] || "application/octet-stream"; + } + + /** + * Checks if a file exists. + * @param {string} filePath - Path to check + * @returns {Promise} True if file exists + */ + async fileExists(filePath) { + try { + await fs.access(filePath); + return true; + } catch { + return false; + } + } + + /** + * Reads a file as a Buffer. + * @param {string} filePath - Path to the file + * @returns {Promise} File content as Buffer + */ + async readBinaryFile(filePath) { + return await fs.readFile(filePath); + } + + /** + * Registers an output to be persisted in the chat history. + * This allows files and other outputs to be re-rendered when viewing historical messages. + * @param {object} aibitat - The aibitat instance to register the output on + * @param {string} type - The type of output (e.g., "PptxFileDownload") + * @param {object} payload - The output payload data + */ + registerOutput(aibitat, type, payload) { + if (!aibitat) { + console.warn( + "[CreateFilesManager] Cannot register output - aibitat instance not provided" + ); + return; + } + + if (!aibitat._pendingOutputs) { + aibitat._pendingOutputs = []; + } + + aibitat._pendingOutputs.push({ type, payload }); + console.log( + `[CreateFilesManager] Registered output: type=${type}, total pending=${aibitat._pendingOutputs.length}` + ); + } + + /** + * Generates a standardized filename for generated files. + * Format: {fileType}-{fileUUID}.{extension} + * @param {string} fileType - Type identifier (e.g., 'pptx', 'xlsx') + * @param {string} extension - File extension (without dot) + * @returns {string} The generated filename + */ + generateFilename(fileType, extension) { + const fileUUID = uuidv4(); + return `${fileType}-${fileUUID}.${extension}`; + } + + /** + * Parses a generated filename to extract its components. + * @param {string} filename - The filename to parse + * @returns {{fileType: string, fileUUID: string, extension: string} | null} + */ + parseFilename(filename) { + const match = filename.match(/^([a-z]+)-([a-f0-9-]{36})\.(\w+)$/i); + if (!match) return null; + return { + fileType: match[1], + fileUUID: match[2], + extension: match[3], + }; + } + + /** + * Saves a generated file to storage and returns metadata for WebSocket/DB storage. + * This is the primary method for persisting agent-generated files. + * @param {object} params + * @param {string} params.fileType - Type identifier (e.g., 'pptx', 'xlsx') + * @param {string} params.extension - File extension (without dot) + * @param {Buffer} params.buffer - The file content as a Buffer + * @param {string} params.displayFilename - The user-friendly filename for display + * @returns {Promise<{filename: string, displayFilename: string, fileSize: number, storagePath: string}>} + */ + async saveGeneratedFile({ fileType, extension, buffer, displayFilename }) { + await this.ensureInitialized(); + + const filename = this.generateFilename(fileType, extension); + const storagePath = path.join(this.#outputDirectory, filename); + + await this.writeBinaryFile(storagePath, buffer); + + console.log( + `[CreateFilesManager] saveGeneratedFile - saved ${filename} (${(buffer.length / 1024).toFixed(2)}KB)` + ); + + return { + filename, + displayFilename, + fileSize: buffer.length, + storagePath, + }; + } + + /** + * Retrieves a generated file by its storage filename. + * @param {string} filename - The storage filename (must match {fileType}-{uuid}.{ext} format) + * @returns {Promise<{buffer: Buffer, storagePath: string} | null>} + */ + async getGeneratedFile(filename) { + await this.ensureInitialized(); + + // Defense-in-depth: validate filename format to prevent path traversal + if (!this.parseFilename(filename)) { + console.warn( + `[CreateFilesManager] getGeneratedFile - rejected invalid filename format: ${filename}` + ); + return null; + } + + const storagePath = path.join(this.#outputDirectory, filename); + const exists = await this.fileExists(storagePath); + if (!exists) return null; + + const buffer = await this.readBinaryFile(storagePath); + return { buffer, storagePath }; + } + + /** + * Sanitizes a filename for use in Content-Disposition header to prevent header injection. + * Removes/replaces characters that could be used for header manipulation. + * @param {string} filename - The filename to sanitize + * @returns {string} Sanitized filename safe for Content-Disposition header + */ + sanitizeFilenameForHeader(filename) { + if (!filename || typeof filename !== "string") return "download"; + return filename + .replace(/[\r\n"\\]/g, "_") + .replace(/[^\x20-\x7E]/g, "_") + .substring(0, 255); + } + + /** + * Gets the AnythingLLM logo for branding. + * @param {Object} options + * @param {boolean} [options.forDarkBackground=false] - True to get light logo (for dark backgrounds), false for dark logo (for light backgrounds) + * @param {"buffer"|"dataUri"} [options.format="buffer"] - Return format: "buffer" for raw Buffer, "dataUri" for base64 data URI + * @returns {Buffer|string|null} Logo as Buffer, data URI string, or null if file not found + */ + getLogo({ forDarkBackground = false, format = "buffer" } = {}) { + const assetsPath = path.join(__dirname, "../../../../../storage/assets"); + const filename = forDarkBackground + ? "anything-llm.png" + : "anything-llm-invert.png"; + try { + if (format === "dataUri") { + const base64 = fsSync.readFileSync( + path.join(assetsPath, filename), + "base64" + ); + return `image/png;base64,${base64}`; + } + return fsSync.readFileSync(path.join(assetsPath, filename)); + } catch { + return null; + } + } +} + +module.exports = new CreateFilesManager(); diff --git a/server/utils/agents/aibitat/plugins/create-files/pdf/create-pdf-file.js b/server/utils/agents/aibitat/plugins/create-files/pdf/create-pdf-file.js new file mode 100644 index 000000000..4ead34e36 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/pdf/create-pdf-file.js @@ -0,0 +1,138 @@ +const createFilesLib = require("../lib.js"); +const { applyBranding } = require("./utils.js"); + +module.exports.CreatePdfFile = { + name: "create-pdf-file", + plugin: function () { + return { + name: "create-pdf-file", + setup(aibitat) { + aibitat.function({ + super: aibitat, + name: this.name, + description: + "Create a PDF document from markdown or plain text content. " + + "The content will be styled and converted to a professional PDF document. " + + "Supports markdown formatting including headers, lists, code blocks, tables, and more.", + examples: [ + { + prompt: "Create a PDF report about quarterly sales", + call: JSON.stringify({ + filename: "quarterly-sales-report.pdf", + content: + "# Quarterly Sales Report\n\n## Q1 2024 Summary\n\n### Key Metrics\n- Total Revenue: $1.2M\n- Growth: 15% YoY\n- New Customers: 234\n\n### Top Products\n1. Product A - $400K\n2. Product B - $350K\n3. Product C - $250K\n\n## Recommendations\n\nBased on the analysis, we recommend focusing on...", + }), + }, + { + prompt: "Create a PDF document with meeting minutes", + call: JSON.stringify({ + filename: "meeting-minutes.pdf", + content: + "# Team Meeting Minutes\n\n**Date:** January 15, 2024\n**Attendees:** John, Sarah, Mike, Lisa\n\n## Agenda Items\n\n### 1. Project Status Update\nThe project is on track for Q2 delivery. Key milestones:\n- [ ] Phase 1 complete\n- [x] Phase 2 in progress\n- [ ] Phase 3 pending\n\n### 2. Budget Review\n| Category | Allocated | Spent |\n|----------|-----------|-------|\n| Development | $50,000 | $35,000 |\n| Marketing | $20,000 | $12,000 |\n\n### Action Items\n- John: Complete technical review by Friday\n- Sarah: Schedule stakeholder meeting", + }), + }, + { + prompt: "Create a PDF with code documentation", + call: JSON.stringify({ + filename: "api-documentation.pdf", + content: + "# API Documentation\n\n## Authentication\n\nAll API requests require a Bearer token:\n\n```javascript\nfetch('/api/data', {\n headers: {\n 'Authorization': 'Bearer YOUR_TOKEN'\n }\n});\n```\n\n## Endpoints\n\n### GET /api/users\n\nReturns a list of all users.\n\n**Response:**\n```json\n{\n \"users\": [...],\n \"total\": 100\n}\n```", + }), + }, + ], + parameters: { + $schema: "http://json-schema.org/draft-07/schema#", + type: "object", + properties: { + filename: { + type: "string", + description: + "The filename for the PDF document. The .pdf extension will be added automatically if not provided.", + }, + content: { + type: "string", + description: + "The markdown or plain text content to convert to PDF. Supports full markdown syntax including headers (#, ##, ###), bold (**text**), italic (*text*), lists, code blocks, tables, and more.", + }, + }, + required: ["filename", "content"], + additionalProperties: false, + }, + handler: async function ({ + filename = "document.pdf", + content = "", + }) { + try { + this.super.handlerProps.log(`Using the create-pdf-file tool.`); + + const hasExtension = /\.pdf$/i.test(filename); + if (!hasExtension) filename = `${filename}.pdf`; + + if (this.super.requestToolApproval) { + const approval = await this.super.requestToolApproval({ + skillName: this.name, + payload: { filename }, + description: `Create PDF document "${filename}"`, + }); + if (!approval.approved) { + this.super.introspect( + `${this.caller}: User rejected the ${this.name} request.` + ); + return approval.message; + } + } + + this.super.introspect( + `${this.caller}: Creating PDF document "${filename}"` + ); + + const { markdownToPdf } = await import("@mdpdf/mdpdf"); + const { PDFDocument, rgb, StandardFonts } = await import( + "pdf-lib" + ); + + const rawBuffer = await markdownToPdf(content); + const pdfDoc = await PDFDocument.load(rawBuffer); + await applyBranding(pdfDoc, { rgb, StandardFonts }); + + const buffer = await pdfDoc.save(); + const bufferSizeKB = (buffer.length / 1024).toFixed(2); + const displayFilename = filename.split("/").pop(); + + const savedFile = await createFilesLib.saveGeneratedFile({ + fileType: "pdf", + extension: "pdf", + buffer, + displayFilename, + }); + + this.super.socket.send("fileDownloadCard", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + createFilesLib.registerOutput(this.super, "PdfFileDownload", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + this.super.introspect( + `${this.caller}: Successfully created PDF document "${displayFilename}"` + ); + + return `Successfully created PDF document "${displayFilename}" (${bufferSizeKB}KB).`; + } catch (e) { + this.super.handlerProps.log( + `create-pdf-file error: ${e.message}` + ); + this.super.introspect(`Error: ${e.message}`); + return `Error creating PDF document: ${e.message}`; + } + }, + }); + }, + }; + }, +}; diff --git a/server/utils/agents/aibitat/plugins/create-files/pdf/utils.js b/server/utils/agents/aibitat/plugins/create-files/pdf/utils.js new file mode 100644 index 000000000..d434d4a2e --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/pdf/utils.js @@ -0,0 +1,70 @@ +const createFilesLib = require("../lib.js"); + +/** + * Applies AnythingLLM branding to a PDF document. + * Adds a logo watermark or fallback text to the bottom-right of each page. + * @param {PDFDocument} pdfDoc - The pdf-lib PDFDocument instance + * @param {Object} pdfLib - The pdf-lib module exports (rgb, StandardFonts) + * @returns {Promise} + */ +async function applyBranding(pdfDoc, { rgb, StandardFonts }) { + const font = await pdfDoc.embedFont(StandardFonts.HelveticaOblique); + const pages = pdfDoc.getPages(); + + const logoPng = createFilesLib.getLogo({ + forDarkBackground: false, + format: "buffer", + }); + const logoImage = logoPng ? await pdfDoc.embedPng(logoPng) : null; + + const logoWidth = 80; + const logoHeight = logoImage + ? (logoImage.height / logoImage.width) * logoWidth + : 0; + + const marginRight = 20; + const marginBottom = 20; + + for (const page of pages) { + const { width } = page.getSize(); + + if (logoImage) { + const createdWithText = "created with"; + const fontSize = 7; + const textWidth = font.widthOfTextAtSize(createdWithText, fontSize); + const logoX = width - marginRight - logoWidth; + + page.drawText(createdWithText, { + x: logoX + (logoWidth - textWidth) / 2, + y: marginBottom + logoHeight + 2, + size: fontSize, + font, + color: rgb(0.6, 0.6, 0.6), + opacity: 0.6, + }); + + page.drawImage(logoImage, { + x: logoX, + y: marginBottom, + width: logoWidth, + height: logoHeight, + opacity: 0.6, + }); + } else { + const fallbackText = "Created with AnythingLLM"; + const fontSize = 9; + const textWidth = font.widthOfTextAtSize(fallbackText, fontSize); + page.drawText(fallbackText, { + x: width - marginRight - textWidth, + y: marginBottom, + size: fontSize, + font, + color: rgb(0.6, 0.6, 0.6), + }); + } + } +} + +module.exports = { + applyBranding, +}; diff --git a/server/utils/agents/aibitat/plugins/create-files/pptx/create-presentation.js b/server/utils/agents/aibitat/plugins/create-files/pptx/create-presentation.js new file mode 100644 index 000000000..bfdc3ea59 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/pptx/create-presentation.js @@ -0,0 +1,342 @@ +const createFilesLib = require("../lib.js"); +const { getTheme, getAvailableThemes } = require("./themes.js"); +const { + renderTitleSlide, + renderSectionSlide, + renderContentSlide, + renderBlankSlide, +} = require("./utils.js"); +const { runSectionAgent } = require("./section-agent.js"); + +/** + * Extracts recent conversation history from the parent AIbitat's chat log + * to provide context to each section sub-agent. + * @param {Array} chats - The parent AIbitat's _chats array + * @param {number} [maxMessages=10] - Maximum messages to include + * @returns {string} Formatted conversation context + */ +function extractConversationContext(chats, maxMessages = 10) { + if (!Array.isArray(chats) || chats.length === 0) return ""; + + const recent = chats + .filter((c) => c.state === "success" && c.content) + .slice(-maxMessages); + + if (recent.length === 0) return ""; + + return recent + .map((c) => { + const content = + typeof c.content === "string" ? c.content.substring(0, 500) : ""; + return `${c.from}: ${content}`; + }) + .join("\n"); +} + +module.exports.CreatePptxPresentation = { + name: "create-pptx-presentation", + plugin: function () { + return { + name: "create-pptx-presentation", + setup(aibitat) { + aibitat.function({ + super: aibitat, + name: this.name, + description: + "Create a professional PowerPoint presentation (PPTX). " + + "Provide a title, theme, and section outlines with key points. " + + "Each section is independently researched and built by a focused sub-agent " + + "that can use web search and web scraping to gather data.", + examples: [ + { + prompt: "Create a presentation about project updates", + call: JSON.stringify({ + filename: "project-updates.pptx", + title: "Q1 Project Updates", + theme: "corporate", + sections: [ + { + title: "Overview", + keyPoints: [ + "Project on track for Q1 delivery", + "Team expanded by 2 new members", + "Budget within expectations", + ], + }, + { + title: "Key Achievements", + keyPoints: [ + "Launched new feature X", + "Reduced bug count by 40%", + "Improved performance by 25%", + ], + instructions: + "Include specific metrics and quarter-over-quarter comparisons", + }, + ], + }), + }, + { + prompt: "Create a dark themed presentation about AI trends", + call: JSON.stringify({ + filename: "ai-trends.pptx", + title: "AI Trends 2025", + theme: "dark", + sections: [ + { + title: "Large Language Models", + keyPoints: [ + "Model scaling trends", + "Open vs closed source landscape", + ], + instructions: + "Research the latest developments and include recent data", + }, + { + title: "AI in Enterprise", + keyPoints: ["Adoption rates", "Top use cases", "ROI data"], + }, + ], + }), + }, + ], + parameters: { + $schema: "http://json-schema.org/draft-07/schema#", + type: "object", + properties: { + filename: { + type: "string", + description: + "The filename for the presentation (should end with .pptx).", + }, + title: { + type: "string", + description: + "The title of the presentation (shown on title slide).", + }, + author: { + type: "string", + description: + "Optional author name for the presentation metadata.", + }, + theme: { + type: "string", + enum: getAvailableThemes(), + description: + "Color theme for the presentation. Options: " + + getAvailableThemes().join(", "), + }, + sections: { + type: "array", + description: + "Section outlines for the presentation. Each section is independently researched and built by a focused sub-agent.", + items: { + type: "object", + properties: { + title: { + type: "string", + description: "The section title.", + }, + keyPoints: { + type: "array", + items: { type: "string" }, + description: + "Key points this section should cover. The sub-agent will expand these into detailed slides.", + }, + instructions: { + type: "string", + description: + "Optional guidance for the section builder (e.g. 'research recent statistics', 'compare with competitors', 'include a data table').", + }, + }, + required: ["title"], + }, + }, + }, + required: ["filename", "title", "sections"], + additionalProperties: false, + }, + + handler: async function ({ + filename = "presentation.pptx", + title = "Untitled Presentation", + author = "", + theme: themeName = "default", + sections = [], + }) { + try { + this.super.handlerProps.log( + `Using the create-pptx-presentation tool.` + ); + + if (!filename.toLowerCase().endsWith(".pptx")) + filename += ".pptx"; + + const theme = getTheme(themeName); + const totalSections = sections.length; + + this.super.introspect( + `${this.caller}: Planning presentation "${title}" — ${totalSections} section${totalSections !== 1 ? "s" : ""}, ${theme.name} theme` + ); + + // Ask for approval BEFORE kicking off the expensive sub-agent work + if (this.super.requestToolApproval) { + const approval = await this.super.requestToolApproval({ + skillName: this.name, + payload: { + filename, + title, + sectionCount: totalSections, + sectionTitles: sections.map((s) => s.title), + }, + description: `Create PowerPoint presentation "${title}" with ${totalSections} sections`, + }); + if (!approval.approved) { + this.super.introspect( + `${this.caller}: User rejected the ${this.name} request.` + ); + return approval.message; + } + } + + const conversationContext = extractConversationContext( + this.super._chats + ); + + // Run a focused sub-agent for each section sequentially. + // Sequential execution is intentional — local models typically serve + // one request at a time, and it keeps introspection events ordered. + const allSlides = []; + const allCitations = []; + for (let i = 0; i < sections.length; i++) { + const section = sections[i]; + this.super.introspect( + `${this.caller}: [${i + 1}/${totalSections}] Building section "${section.title}"…` + ); + + const sectionResult = await runSectionAgent({ + parentAibitat: this.super, + section, + presentationTitle: title, + conversationContext, + sectionPrefix: `${i + 1}/${totalSections}`, + }); + + const slideCount = sectionResult.slides?.length || 0; + allSlides.push(...(sectionResult.slides || [])); + if (sectionResult.citations?.length > 0) + allCitations.push(...sectionResult.citations); + + this.super.introspect( + `${this.caller}: [${i + 1}/${totalSections}] Section "${section.title}" complete — ${slideCount} slide${slideCount !== 1 ? "s" : ""}` + ); + } + + // Roll up all citations from sub-agents to the parent so they + // appear as sources on the final assistant message. + if (allCitations.length > 0) this.super.addCitation(allCitations); + + // Assemble the final PPTX from all section outputs + this.super.introspect( + `${this.caller}: Assembling final deck — ${allSlides.length} slides total` + ); + + const PptxGenJS = require("pptxgenjs"); + const pptx = new PptxGenJS(); + + pptx.title = title; + if (author) pptx.author = author; + pptx.company = "AnythingLLM"; + + const totalSlideCount = allSlides.length; + + // Title slide + const titleSlide = pptx.addSlide(); + renderTitleSlide(titleSlide, pptx, { title, author }, theme); + + // Render every slide produced by the section agents + allSlides.forEach((slideData, index) => { + const slide = pptx.addSlide(); + const slideNumber = index + 1; + const layout = slideData.layout || "content"; + + switch (layout) { + case "title": + case "section": + renderSectionSlide( + slide, + pptx, + slideData, + theme, + slideNumber, + totalSlideCount + ); + break; + case "blank": + renderBlankSlide( + slide, + pptx, + theme, + slideNumber, + totalSlideCount + ); + break; + default: + renderContentSlide( + slide, + pptx, + slideData, + theme, + slideNumber, + totalSlideCount + ); + break; + } + }); + + const buffer = await pptx.write({ outputType: "nodebuffer" }); + const bufferSizeKB = (buffer.length / 1024).toFixed(2); + const bufferSizeMB = (buffer.length / (1024 * 1024)).toFixed(2); + this.super.handlerProps.log( + `create-pptx-presentation: Generated buffer - size: ${bufferSizeKB}KB (${bufferSizeMB}MB), slides: ${totalSlideCount}, theme: ${theme.name}` + ); + + const displayFilename = filename.split("/").pop(); + + const savedFile = await createFilesLib.saveGeneratedFile({ + fileType: "pptx", + extension: "pptx", + buffer, + displayFilename, + }); + + this.super.socket.send("fileDownloadCard", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + createFilesLib.registerOutput(this.super, "PptxFileDownload", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + this.super.introspect( + `${this.caller}: Successfully created presentation "${title}"` + ); + + return `Successfully created presentation "${title}" with ${totalSlideCount} slides across ${totalSections} sections using the ${theme.name} theme.`; + } catch (e) { + this.super.handlerProps.log( + `create-pptx-presentation error: ${e.message}` + ); + this.super.introspect(`Error: ${e.message}`); + return `Error creating presentation: ${e.message}`; + } + }, + }); + }, + }; + }, +}; diff --git a/server/utils/agents/aibitat/plugins/create-files/pptx/section-agent.js b/server/utils/agents/aibitat/plugins/create-files/pptx/section-agent.js new file mode 100644 index 000000000..3ea76ee45 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/pptx/section-agent.js @@ -0,0 +1,257 @@ +const AIbitat = require("../../../index.js"); + +const SECTION_BUILDER_PROMPT = `You are a focused presentation section builder. Your ONLY task is to create detailed slides for ONE section of a PowerPoint presentation. + +You have access to web search and web scraping tools, but only use them when the topic genuinely requires up-to-date information you don't already know (e.g., current statistics, recent events, specific company data). For general knowledge topics, create slides directly from your existing knowledge. + +RULES: +- Create 2-5 slides for this section (no more) +- Each content slide should have 3-6 concise bullet points +- Be specific and data-driven when possible +- Include speaker notes with key talking points +- Do NOT add a title slide - only section content + +When finished, you MUST call the submit-section-slides tool with your slides. Do not respond with raw JSON - always use the tool. + +Available slide layouts: +- "section": Divider slide with title + optional subtitle +- "content": Bullet points with title + content array + optional notes + - May include "table": { "headers": ["Col1", "Col2"], "rows": [["a", "b"]] } +- "blank": Empty slide`; + +/** + * Spawns a focused child AIbitat agent to build slides for a single presentation section. + * The child reuses the parent's provider/model/socket so introspection events (tool calls, + * research progress) flow to the frontend in real-time. + * + * @param {Object} options + * @param {AIbitat} options.parentAibitat - The parent AIbitat instance (provides provider, socket, introspect) + * @param {Object} options.section - Section definition { title, keyPoints?, instructions? } + * @param {string} options.presentationTitle - Overall presentation title for context + * @param {string} [options.conversationContext] - Recent conversation history for context + * @param {string} [options.sectionPrefix] - Progress indicator like "1/5" for UI display + * @returns {Promise<{slides: Object[], citations: Object[]}>} Parsed section slides and accumulated citations + */ +async function runSectionAgent({ + parentAibitat, + section, + presentationTitle, + conversationContext = "", + sectionPrefix = "", +}) { + const log = parentAibitat.handlerProps?.log || console.log; + + const childAibitat = new AIbitat({ + provider: parentAibitat.defaultProvider.provider, + model: parentAibitat.defaultProvider.model, + chats: [], + handlerProps: parentAibitat.handlerProps, + maxToolCalls: 5, + }); + + // Share introspect so tool activity (web-search status, etc.) streams to the frontend + childAibitat.introspect = parentAibitat.introspect; + + // Filtered socket: pass through introspection but suppress reportStreamEvent + // so sub-agent chatter doesn't render in the UI as a chat message. + childAibitat.socket = { + send: (type, content) => { + if (type === "reportStreamEvent") return; + parentAibitat.socket?.send(type, content); + }, + }; + + // Only load the research tools this sub-agent needs + const { webBrowsing } = require("../../web-browsing.js"); + const { webScraping } = require("../../web-scraping.js"); + childAibitat.use(webBrowsing.plugin()); + childAibitat.use(webScraping.plugin()); + + // Internal tool for structured slide submission - not exposed as a public plugin + childAibitat.function({ + super: childAibitat, + name: "submit-section-slides", + description: + "Submit the completed slides for this presentation section. Call this tool when you have finished creating all slides.", + parameters: { + $schema: "http://json-schema.org/draft-07/schema#", + type: "object", + properties: { + slides: { + type: "array", + description: "Array of slide objects for this section", + items: { + type: "object", + properties: { + layout: { + type: "string", + enum: ["section", "content", "blank"], + description: "The slide layout type", + }, + title: { + type: "string", + description: "The slide title", + }, + subtitle: { + type: "string", + description: "Optional subtitle (for section layout)", + }, + content: { + type: "array", + items: { type: "string" }, + description: "Bullet points (for content layout)", + }, + notes: { + type: "string", + description: "Speaker notes for this slide", + }, + table: { + type: "object", + description: "Optional table data", + properties: { + headers: { + type: "array", + items: { type: "string" }, + }, + rows: { + type: "array", + items: { + type: "array", + items: { type: "string" }, + }, + }, + }, + }, + }, + required: ["layout", "title"], + }, + }, + }, + required: ["slides"], + additionalProperties: false, + }, + handler: function ({ slides }) { + this.super._submittedSlides = slides; + return "Slides submitted successfully. Section complete."; + }, + }); + + const functions = Array.from(childAibitat.functions.values()); + const messages = [ + { role: "system", content: SECTION_BUILDER_PROMPT }, + { + role: "user", + content: buildSectionPrompt({ + section, + presentationTitle, + conversationContext, + }), + }, + ]; + + const provider = childAibitat.getProviderForConfig( + childAibitat.defaultProvider + ); + provider.attachHandlerProps(childAibitat.handlerProps); + + log( + `[SectionAgent] Running sub-agent for section: "${section.title}" with ${functions.length} tools` + ); + + let agentName = `@section-builder`; + if (sectionPrefix) agentName = `[${sectionPrefix}] ${agentName}`; + try { + if (provider.supportsAgentStreaming) { + await childAibitat.handleAsyncExecution( + provider, + messages, + functions, + agentName + ); + } else { + await childAibitat.handleExecution( + provider, + messages, + functions, + agentName + ); + } + } catch (error) { + log(`[SectionAgent] Error in section "${section.title}": ${error.message}`); + return { ...buildFallbackSlides(section), citations: [] }; + } + + // Collect any citations the child accumulated (from web-search, web-scrape, etc.) + const citations = childAibitat._pendingCitations || []; + + // Retrieve slides from the tool call (structured data, no parsing needed) + const slides = childAibitat._submittedSlides; + if (!Array.isArray(slides) || slides.length === 0) { + log( + `[SectionAgent] No slides submitted for "${section.title}", using fallback` + ); + return { ...buildFallbackSlides(section), citations }; + } + + log( + `[SectionAgent] Section "${section.title}" produced ${slides.length} slides, ${citations.length} citations` + ); + return { slides, citations }; +} + +function buildSectionPrompt({ + section, + presentationTitle, + conversationContext, +}) { + const parts = [ + `Build slides for this section of the presentation "${presentationTitle}":`, + `\nSection Title: ${section.title}`, + ]; + + if (section.keyPoints?.length > 0) { + parts.push( + `\nKey Points to Cover:\n${section.keyPoints.map((p) => `- ${p}`).join("\n")}` + ); + } + + if (section.instructions) { + parts.push(`\nSpecial Instructions: ${section.instructions}`); + } + + if (conversationContext) { + parts.push(`\nContext from the conversation:\n${conversationContext}`); + } + + parts.push( + `\nCreate 2-5 detailed slides and submit them using the submit-section-slides tool. Only use web search/scraping if you genuinely lack the information needed.` + ); + + return parts.join("\n"); +} + +/** + * Generates basic slides from the section definition when the sub-agent fails. + */ +function buildFallbackSlides(section) { + const slides = [ + { + layout: "section", + title: section.title, + subtitle: section.subtitle || "", + }, + ]; + + if (section.keyPoints?.length > 0) { + slides.push({ + layout: "content", + title: section.title, + content: section.keyPoints, + notes: `Key points for ${section.title}`, + }); + } + + return { slides }; +} + +module.exports = { runSectionAgent }; diff --git a/server/utils/agents/aibitat/plugins/create-files/pptx/test-themes.js b/server/utils/agents/aibitat/plugins/create-files/pptx/test-themes.js new file mode 100644 index 000000000..e5e01ab66 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/pptx/test-themes.js @@ -0,0 +1,143 @@ +/** + * Generate a preview presentation for every theme using the same rendering + * pipeline as the production tool. Run from repo root: + * + * node server/utils/agents/aibitat/plugins/create-files/pptx/test-themes.js + * + * Output → storage/generated-files/theme-previews/ + */ + +const path = require("path"); +const fs = require("fs"); +const PptxGenJS = require("pptxgenjs"); +const createFilesLib = require("../lib.js"); +const { getTheme, getAvailableThemes } = require("./themes.js"); +const { + renderTitleSlide, + renderSectionSlide, + renderContentSlide, + renderBlankSlide, +} = require("./utils.js"); + +const SAMPLE_SLIDES = [ + { + title: "Executive Summary", + content: [ + "Revenue grew 23% year-over-year to $4.2B", + "Operating margin expanded 180bps to 28.4%", + "Customer retention rate improved to 94.7%", + "Three strategic acquisitions completed in Q3", + ], + notes: "Emphasize the margin expansion story", + }, + { + layout: "section", + title: "Strategic Priorities", + subtitle: "Key initiatives for the next fiscal year", + }, + { + title: "Market Opportunity", + subtitle: "Total addressable market analysis", + content: [ + "Global TAM estimated at $180B by 2027", + "Our serviceable market represents $42B opportunity", + "Current market share: 8.3% with clear path to 15%", + "Three adjacent markets identified for expansion", + "Competitive moat strengthening through R&D investment", + ], + }, + { + title: "Financial Performance", + table: { + headers: ["Metric", "FY2024", "FY2025", "Growth"], + rows: [ + ["Revenue", "$3.4B", "$4.2B", "+23%"], + ["Gross Margin", "62.1%", "64.8%", "+270bps"], + ["Operating Income", "$910M", "$1.19B", "+31%"], + ["Free Cash Flow", "$780M", "$1.02B", "+31%"], + ], + }, + }, + { + title: "Next Steps & Timeline", + content: [ + "Q1: Launch Phase 2 of platform modernization", + "Q2: Complete integration of acquired entities", + "Q3: Enter two new geographic markets", + "Q4: Achieve $5B annual revenue run-rate", + ], + }, +]; + +async function generateThemePreview(themeName, outputDir) { + const theme = getTheme(themeName); + const pptx = new PptxGenJS(); + pptx.title = `${theme.name} Theme Preview`; + pptx.author = "AnythingLLM"; + pptx.company = "AnythingLLM"; + + const totalSlides = SAMPLE_SLIDES.length; + + const titleSlide = pptx.addSlide(); + renderTitleSlide( + titleSlide, + pptx, + { title: `${theme.name} Theme`, author: "AnythingLLM Theme Preview" }, + theme + ); + + SAMPLE_SLIDES.forEach((slideData, index) => { + const slide = pptx.addSlide(); + const slideNumber = index + 1; + const layout = slideData.layout || "content"; + + switch (layout) { + case "title": + case "section": + renderSectionSlide( + slide, + pptx, + slideData, + theme, + slideNumber, + totalSlides + ); + break; + case "blank": + renderBlankSlide(slide, pptx, theme, slideNumber, totalSlides); + break; + default: + renderContentSlide( + slide, + pptx, + slideData, + theme, + slideNumber, + totalSlides + ); + break; + } + }); + + const filename = `theme-preview-${themeName}.pptx`; + const filepath = path.join(outputDir, filename); + await pptx.writeFile({ fileName: filepath }); + console.log(` ✓ ${theme.name} → ${filename}`); +} + +async function main() { + const baseDir = await createFilesLib.getOutputDirectory(); + const outputDir = path.join(baseDir, "theme-previews"); + if (!fs.existsSync(outputDir)) { + fs.mkdirSync(outputDir, { recursive: true }); + } + + console.log("Generating theme previews…\n"); + const themes = getAvailableThemes(); + for (const themeName of themes) { + await generateThemePreview(themeName, outputDir); + } + console.log(`\nDone! ${themes.length} previews saved to:\n ${outputDir}`); +} + +main().catch(console.error); diff --git a/server/utils/agents/aibitat/plugins/create-files/pptx/themes.js b/server/utils/agents/aibitat/plugins/create-files/pptx/themes.js new file mode 100644 index 000000000..7557e56e4 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/pptx/themes.js @@ -0,0 +1,181 @@ +/** + * Curated presentation themes for pptxgenjs. + * + * Each theme is a complete design system: title-slide palette, content-slide + * palette, table styling, footer colors, and typography. The rendering code + * in utils.js consumes these tokens to produce consistent, professional slides. + * + * Themes: default · corporate · dark · minimal · creative + */ + +const THEMES = { + default: { + name: "Professional", + description: "Clean and versatile — works for any presentation", + + titleSlideBackground: "1E293B", + titleSlideTitleColor: "FFFFFF", + titleSlideSubtitleColor: "94A3B8", + titleSlideAccentColor: "3B82F6", + + background: "FFFFFF", + titleColor: "0F172A", + subtitleColor: "64748B", + bodyColor: "334155", + accentColor: "2563EB", + bulletColor: "2563EB", + + tableHeaderBg: "1E293B", + tableHeaderColor: "FFFFFF", + tableAltRowBg: "F8FAFC", + tableBorderColor: "E2E8F0", + + footerColor: "94A3B8", + footerLineColor: "E2E8F0", + + fontTitle: "Calibri", + fontBody: "Calibri", + }, + + corporate: { + name: "Corporate", + description: "Refined and authoritative — ideal for business and finance", + + titleSlideBackground: "0C1929", + titleSlideTitleColor: "FFFFFF", + titleSlideSubtitleColor: "7B96B5", + titleSlideAccentColor: "C9943E", + + background: "FFFFFF", + titleColor: "0C1929", + subtitleColor: "5A6D82", + bodyColor: "2C3E50", + accentColor: "1A5276", + bulletColor: "1A5276", + + tableHeaderBg: "0C1929", + tableHeaderColor: "FFFFFF", + tableAltRowBg: "F4F7FA", + tableBorderColor: "D5DBE2", + + footerColor: "8B9DB3", + footerLineColor: "D5DBE2", + + fontTitle: "Calibri", + fontBody: "Calibri", + }, + + dark: { + name: "Dark", + description: "Sleek dark theme — great for tech and product presentations", + + titleSlideBackground: "0F0F1A", + titleSlideTitleColor: "F8FAFC", + titleSlideSubtitleColor: "7C8DB5", + titleSlideAccentColor: "818CF8", + + background: "18181B", + titleColor: "F4F4F5", + subtitleColor: "A1A1AA", + bodyColor: "D4D4D8", + accentColor: "6366F1", + bulletColor: "818CF8", + + tableHeaderBg: "6366F1", + tableHeaderColor: "FFFFFF", + tableAltRowBg: "1F1F24", + tableBorderColor: "3F3F46", + + footerColor: "71717A", + footerLineColor: "3F3F46", + + fontTitle: "Calibri", + fontBody: "Calibri", + }, + + minimal: { + name: "Minimal", + description: "Ultra-clean with maximum whitespace — lets content speak", + + titleSlideBackground: "F5F5F5", + titleSlideTitleColor: "171717", + titleSlideSubtitleColor: "737373", + titleSlideAccentColor: "A3A3A3", + + background: "FFFFFF", + titleColor: "171717", + subtitleColor: "737373", + bodyColor: "404040", + accentColor: "525252", + bulletColor: "A3A3A3", + + tableHeaderBg: "262626", + tableHeaderColor: "FFFFFF", + tableAltRowBg: "FAFAFA", + tableBorderColor: "E5E5E5", + + footerColor: "A3A3A3", + footerLineColor: "E5E5E5", + + fontTitle: "Calibri", + fontBody: "Calibri Light", + }, + + creative: { + name: "Creative", + description: "Bold and expressive — perfect for pitches and creative work", + + titleSlideBackground: "2E1065", + titleSlideTitleColor: "FFFFFF", + titleSlideSubtitleColor: "C4B5FD", + titleSlideAccentColor: "A78BFA", + + background: "FFFFFF", + titleColor: "3B0764", + subtitleColor: "7C3AED", + bodyColor: "374151", + accentColor: "7C3AED", + bulletColor: "7C3AED", + + tableHeaderBg: "5B21B6", + tableHeaderColor: "FFFFFF", + tableAltRowBg: "FAF5FF", + tableBorderColor: "E9D5FF", + + footerColor: "A78BFA", + footerLineColor: "E9D5FF", + + fontTitle: "Calibri", + fontBody: "Calibri", + }, +}; + +/** + * Get a theme by name, falling back to default if not found. + * @param {string} themeName + * @returns {object} Theme configuration + */ +function getTheme(themeName) { + const key = (themeName || "default").toLowerCase().trim(); + return THEMES[key] || THEMES.default; +} + +/** + * @returns {string[]} Available theme identifiers + */ +function getAvailableThemes() { + return Object.keys(THEMES); +} + +/** + * @returns {object[]} Array of { id, name, description } for documentation + */ +function getThemeDescriptions() { + return Object.entries(THEMES).map(([id, t]) => ({ + id, + name: t.name, + description: t.description, + })); +} + +module.exports = { THEMES, getTheme, getAvailableThemes, getThemeDescriptions }; diff --git a/server/utils/agents/aibitat/plugins/create-files/pptx/utils.js b/server/utils/agents/aibitat/plugins/create-files/pptx/utils.js new file mode 100644 index 000000000..330608682 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/pptx/utils.js @@ -0,0 +1,378 @@ +const createFilesLib = require("../lib.js"); + +// All positioning assumes LAYOUT_16x9: 10 × 5.625 in. +const MARGIN_X = 0.7; +const CONTENT_W = 8.6; // 10 - 2 × MARGIN_X +const SLIDE_H = 5.625; + +function isDarkColor(hexColor) { + const hex = (hexColor || "FFFFFF").replace("#", ""); + const r = parseInt(hex.substr(0, 2), 16); + const g = parseInt(hex.substr(2, 2), 16); + const b = parseInt(hex.substr(4, 2), 16); + return (0.299 * r + 0.587 * g + 0.114 * b) / 255 < 0.5; +} + +function addBranding(slide, bgColor) { + const isDark = isDarkColor(bgColor); + const textColor = isDark ? "FFFFFF" : "000000"; + const logo = createFilesLib.getLogo({ + forDarkBackground: isDark, + format: "dataUri", + }); + + slide.addText("Created with", { + x: 7.85, + y: 5.06, + w: 1.85, + h: 0.12, + fontSize: 5.5, + color: textColor, + transparency: 78, + fontFace: "Calibri", + align: "center", + italic: true, + }); + + if (logo) { + slide.addImage({ + data: logo, + x: 8.025, + y: 5.17, + w: 1.5, + h: 0.24, + transparency: 78, + }); + } else { + slide.addText("AnythingLLM", { + x: 7.85, + y: 5.17, + w: 1.85, + h: 0.24, + fontSize: 8, + color: textColor, + transparency: 78, + fontFace: "Calibri", + align: "center", + }); + } +} + +function addTopAccentBar(slide, pptx, theme) { + slide.addShape(pptx.ShapeType.rect, { + x: 0, + y: 0, + w: "100%", + h: 0.05, + fill: { color: theme.accentColor }, + line: { color: theme.accentColor }, + }); +} + +function addAccentUnderline(slide, pptx, x, y, color) { + slide.addShape(pptx.ShapeType.rect, { + x, + y, + w: 1.5, + h: 0.035, + fill: { color }, + line: { color }, + }); +} + +function addSlideFooter(slide, pptx, theme, slideNumber, totalSlides) { + slide.addShape(pptx.ShapeType.rect, { + x: MARGIN_X, + y: 5.0, + w: CONTENT_W, + h: 0.007, + fill: { color: theme.footerLineColor }, + line: { color: theme.footerLineColor }, + }); + + slide.addText(`${slideNumber} / ${totalSlides}`, { + x: MARGIN_X, + y: 5.07, + w: 1.2, + h: 0.25, + fontSize: 8, + color: theme.footerColor, + fontFace: theme.fontBody, + align: "left", + }); +} + +function renderTitleSlide(slide, pptx, { title, author }, theme) { + slide.background = { color: theme.titleSlideBackground }; + + slide.addText(title || "Untitled", { + x: 1.0, + y: 1.3, + w: 8.0, + h: 1.4, + fontSize: 36, + bold: true, + color: theme.titleSlideTitleColor, + fontFace: theme.fontTitle, + align: "center", + valign: "bottom", + }); + + addAccentUnderline(slide, pptx, 4.25, 2.9, theme.titleSlideAccentColor); + + if (author) { + slide.addText(author, { + x: 1.5, + y: 3.15, + w: 7.0, + h: 0.45, + fontSize: 14, + color: theme.titleSlideSubtitleColor, + fontFace: theme.fontBody, + align: "center", + italic: true, + }); + } + + // Bottom accent strip + slide.addShape(pptx.ShapeType.rect, { + x: 0, + y: SLIDE_H - 0.1, + w: "100%", + h: 0.1, + fill: { color: theme.titleSlideAccentColor }, + line: { color: theme.titleSlideAccentColor }, + }); + + addBranding(slide, theme.titleSlideBackground); +} + +function renderSectionSlide( + slide, + pptx, + slideData, + theme, + slideNumber, + totalSlides +) { + slide.background = { color: theme.titleSlideBackground }; + + slide.addText(slideData.title || "", { + x: 1.0, + y: 1.5, + w: 8.0, + h: 1.2, + fontSize: 32, + bold: true, + color: theme.titleSlideTitleColor, + fontFace: theme.fontTitle, + align: "center", + valign: "bottom", + }); + + addAccentUnderline(slide, pptx, 4.25, 2.9, theme.titleSlideAccentColor); + + if (slideData.subtitle) { + slide.addText(slideData.subtitle, { + x: 1.5, + y: 3.1, + w: 7.0, + h: 0.5, + fontSize: 16, + color: theme.titleSlideSubtitleColor, + fontFace: theme.fontBody, + align: "center", + }); + } + + const numColor = isDarkColor(theme.titleSlideBackground) + ? "FFFFFF" + : "000000"; + slide.addText(`${slideNumber} / ${totalSlides}`, { + x: MARGIN_X, + y: 5.1, + w: 1.2, + h: 0.25, + fontSize: 8, + color: numColor, + transparency: 65, + fontFace: theme.fontBody, + align: "left", + }); + + addBranding(slide, theme.titleSlideBackground); + + if (slideData.notes) slide.addNotes(slideData.notes); +} + +function renderContentSlide( + slide, + pptx, + slideData, + theme, + slideNumber, + totalSlides +) { + slide.background = { color: theme.background }; + + addTopAccentBar(slide, pptx, theme); + + let contentStartY = 0.4; + + if (slideData.title) { + slide.addText(slideData.title, { + x: MARGIN_X, + y: 0.3, + w: CONTENT_W, + h: 0.65, + fontSize: 24, + bold: true, + color: theme.titleColor, + fontFace: theme.fontTitle, + valign: "bottom", + }); + contentStartY = 1.0; + + if (slideData.subtitle) { + slide.addText(slideData.subtitle, { + x: MARGIN_X, + y: 1.0, + w: CONTENT_W, + h: 0.3, + fontSize: 13, + color: theme.subtitleColor, + fontFace: theme.fontBody, + }); + contentStartY = 1.35; + } + + addAccentUnderline( + slide, + pptx, + MARGIN_X, + contentStartY + 0.05, + theme.accentColor + ); + contentStartY += 0.25; + } + + const footerY = 5.0; + const contentHeight = footerY - contentStartY - 0.15; + + if (slideData.table) { + addTableContent(slide, pptx, slideData.table, theme, contentStartY); + } else { + addBulletContent( + slide, + slideData.content, + theme, + contentStartY, + contentHeight + ); + } + + addSlideFooter(slide, pptx, theme, slideNumber, totalSlides); + addBranding(slide, theme.background); + + if (slideData.notes) slide.addNotes(slideData.notes); +} + +function renderBlankSlide(slide, pptx, theme, slideNumber, totalSlides) { + slide.background = { color: theme.background }; + addSlideFooter(slide, pptx, theme, slideNumber, totalSlides); + addBranding(slide, theme.background); +} + +function addBulletContent(slide, content, theme, startY, maxHeight) { + if (!Array.isArray(content) || content.length === 0) return; + + const bulletPoints = content.map((text) => ({ + text, + options: { + fontSize: 15, + color: theme.bodyColor, + fontFace: theme.fontBody, + bullet: { code: "25AA", color: theme.bulletColor }, + paraSpaceAfter: 10, + }, + })); + + slide.addText(bulletPoints, { + x: MARGIN_X, + y: startY, + w: CONTENT_W, + h: maxHeight, + valign: "top", + }); +} + +function addTableContent(slide, pptx, tableData, theme, startY) { + if (!tableData) return; + + const rows = []; + + if (tableData.headers?.length > 0) { + rows.push( + tableData.headers.map((header) => ({ + text: header, + options: { + bold: true, + fontSize: 12, + fontFace: theme.fontBody, + color: theme.tableHeaderColor, + fill: { color: theme.tableHeaderBg }, + align: "left", + valign: "middle", + margin: [4, 8, 4, 8], + }, + })) + ); + } + + if (tableData.rows?.length > 0) { + tableData.rows.forEach((row, idx) => { + rows.push( + row.map((cell) => ({ + text: cell, + options: { + fontSize: 11, + fontFace: theme.fontBody, + color: theme.bodyColor, + fill: { + color: idx % 2 === 1 ? theme.tableAltRowBg : theme.background, + }, + align: "left", + valign: "middle", + margin: [4, 8, 4, 8], + }, + })) + ); + }); + } + + if (rows.length === 0) return; + + const colCount = rows[0].length; + slide.addTable(rows, { + x: MARGIN_X, + y: startY, + w: CONTENT_W, + colW: CONTENT_W / colCount, + rowH: 0.4, + border: { type: "solid", pt: 0.5, color: theme.tableBorderColor }, + }); +} + +module.exports = { + isDarkColor, + addBranding, + addTopAccentBar, + addAccentUnderline, + addSlideFooter, + renderTitleSlide, + renderSectionSlide, + renderContentSlide, + renderBlankSlide, + addBulletContent, + addTableContent, +}; diff --git a/server/utils/agents/aibitat/plugins/create-files/text/create-text-file.js b/server/utils/agents/aibitat/plugins/create-files/text/create-text-file.js new file mode 100644 index 000000000..4d85cd538 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/text/create-text-file.js @@ -0,0 +1,158 @@ +const createFilesLib = require("../lib.js"); + +module.exports.CreateTextFile = { + name: "create-text-file", + plugin: function () { + return { + name: "create-text-file", + setup(aibitat) { + aibitat.function({ + super: aibitat, + name: this.name, + description: + "Create a text file with arbitrary content. " + + "Provide the content and an optional file extension (defaults to .txt). " + + "Common extensions include .txt, .md, .json, .csv, .html, .xml, .yaml, .log, etc.", + examples: [ + { + prompt: "Create a text file with meeting notes", + call: JSON.stringify({ + filename: "meeting-notes.txt", + content: + "Meeting Notes - Q1 Planning\n\nAttendees: John, Sarah, Mike\n\nAgenda:\n1. Review Q4 results\n2. Set Q1 goals\n3. Assign tasks\n\nAction Items:\n- John: Prepare budget report\n- Sarah: Draft marketing plan\n- Mike: Schedule follow-up meeting", + }), + }, + { + prompt: "Create a markdown file with project documentation", + call: JSON.stringify({ + filename: "README.md", + extension: "md", + content: + "# Project Name\n\n## Overview\nThis project provides...\n\n## Installation\n```bash\nnpm install\n```\n\n## Usage\nRun the application with...", + }), + }, + { + prompt: "Create a JSON configuration file", + call: JSON.stringify({ + filename: "config.json", + extension: "json", + content: JSON.stringify( + { + appName: "MyApp", + version: "1.0.0", + settings: { + debug: false, + maxConnections: 100, + }, + }, + null, + 2 + ), + }), + }, + ], + parameters: { + $schema: "http://json-schema.org/draft-07/schema#", + type: "object", + properties: { + filename: { + type: "string", + description: + "The filename for the text file. If no extension is provided, the extension parameter will be used (defaults to .txt).", + }, + extension: { + type: "string", + description: + "The file extension to use (without the dot). Defaults to 'txt'. Common options: txt, md, json, csv, html, xml, yaml, log, etc.", + default: "txt", + }, + content: { + type: "string", + description: + "The text content to write to the file. Can be any arbitrary text including multi-line content.", + }, + }, + required: ["filename", "content"], + additionalProperties: false, + }, + handler: async function ({ + filename = "document.txt", + extension = "txt", + content = "", + }) { + try { + this.super.handlerProps.log(`Using the create-text-file tool.`); + + const normalizedExt = extension.toLowerCase().replace(/^\./, ""); + const hasExtension = /\.\w+$/.test(filename); + + if (!hasExtension) { + filename = `${filename}.${normalizedExt}`; + } + + const finalExtension = filename.split(".").pop().toLowerCase(); + + this.super.introspect( + `${this.caller}: Creating text file "${filename}"` + ); + + const buffer = Buffer.from(content, "utf-8"); + const bufferSizeKB = (buffer.length / 1024).toFixed(2); + + this.super.handlerProps.log( + `create-text-file: Generated buffer - size: ${bufferSizeKB}KB, extension: ${finalExtension}` + ); + + if (this.super.requestToolApproval) { + const approval = await this.super.requestToolApproval({ + skillName: this.name, + payload: { filename, extension: finalExtension }, + description: `Create text file "${filename}"`, + }); + if (!approval.approved) { + this.super.introspect( + `${this.caller}: User rejected the ${this.name} request.` + ); + return approval.message; + } + } + + const displayFilename = filename.split("/").pop(); + + const savedFile = await createFilesLib.saveGeneratedFile({ + fileType: "text", + extension: finalExtension, + buffer, + displayFilename, + }); + + this.super.socket.send("fileDownloadCard", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + createFilesLib.registerOutput(this.super, "TextFileDownload", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + this.super.introspect( + `${this.caller}: Successfully created text file "${displayFilename}"` + ); + + return `Successfully created text file "${displayFilename}" (${bufferSizeKB}KB).`; + } catch (e) { + this.super.handlerProps.log( + `create-text-file error: ${e.message}` + ); + this.super.introspect(`Error: ${e.message}`); + return `Error creating text file: ${e.message}`; + } + }, + }); + }, + }; + }, +}; diff --git a/server/utils/agents/aibitat/plugins/create-files/xlsx/create-excel-file.js b/server/utils/agents/aibitat/plugins/create-files/xlsx/create-excel-file.js new file mode 100644 index 000000000..10ad0b339 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/xlsx/create-excel-file.js @@ -0,0 +1,362 @@ +const createFilesLib = require("../lib.js"); +const { + parseCSV, + validateCSVData, + detectDelimiter, + inferCellType, + applyBranding, + autoFitColumns, + applyHeaderStyle, + applyZebraStriping, + freezePanes, +} = require("./utils.js"); + +module.exports.CreateExcelFile = { + name: "create-excel-file", + plugin: function () { + return { + name: "create-excel-file", + setup(aibitat) { + aibitat.function({ + super: aibitat, + name: this.name, + description: + "Create an Excel spreadsheet (.xlsx) from CSV data. " + + "Supports multiple sheets, automatic type detection (numbers, dates, booleans), " + + "header styling, column auto-fit, zebra striping, and frozen panes. " + + "Provide data in CSV format with comma, semicolon, tab, or pipe delimiters.", + examples: [ + { + prompt: "Create an Excel file with sales data", + call: JSON.stringify({ + filename: "sales-report.xlsx", + sheets: [ + { + name: "Q1 Sales", + csvData: + "Product,Region,Sales,Date\nWidget A,North,1250.50,2024-01-15\nWidget B,South,980.00,2024-01-20\nWidget C,East,1100.25,2024-02-01", + options: { + headerStyle: true, + autoFit: true, + freezeHeader: true, + }, + }, + ], + }), + }, + { + prompt: "Create a multi-sheet Excel workbook with employee data", + call: JSON.stringify({ + filename: "employee-directory.xlsx", + sheets: [ + { + name: "Employees", + csvData: + "ID,Name,Department,Salary,Start Date\n1,John Smith,Engineering,85000,2022-03-15\n2,Jane Doe,Marketing,72000,2021-08-01\n3,Bob Wilson,Sales,68000,2023-01-10", + options: { + headerStyle: true, + zebraStripes: true, + freezeHeader: true, + }, + }, + { + name: "Departments", + csvData: + "Department,Head,Budget\nEngineering,Alice Brown,500000\nMarketing,Carol White,250000\nSales,Dan Green,300000", + options: { headerStyle: true, autoFit: true }, + }, + ], + }), + }, + { + prompt: "Create a simple spreadsheet from CSV data", + call: JSON.stringify({ + filename: "data-export.xlsx", + csvData: + "Name,Email,Status\nAlice,alice@example.com,Active\nBob,bob@example.com,Pending\nCharlie,charlie@example.com,Active", + }), + }, + ], + parameters: { + $schema: "http://json-schema.org/draft-07/schema#", + type: "object", + properties: { + filename: { + type: "string", + description: + "The filename for the Excel file. The .xlsx extension will be added automatically if not provided.", + }, + csvData: { + type: "string", + description: + "CSV data for a single-sheet workbook. Use comma, semicolon, tab, or pipe as delimiter. " + + "For multiple sheets, use the 'sheets' parameter instead.", + }, + sheets: { + type: "array", + description: + "Array of sheet definitions for multi-sheet workbooks. Each sheet has a name, csvData, and optional styling options.", + items: { + type: "object", + properties: { + name: { + type: "string", + description: + "The name of the worksheet (max 31 characters).", + }, + csvData: { + type: "string", + description: "The CSV data for this sheet.", + }, + options: { + type: "object", + description: "Optional styling options for this sheet.", + properties: { + headerStyle: { + type: "boolean", + description: + "Apply styling to the header row (bold, colored background).", + }, + autoFit: { + type: "boolean", + description: + "Auto-fit column widths based on content.", + }, + freezeHeader: { + type: "boolean", + description: + "Freeze the header row so it stays visible when scrolling.", + }, + zebraStripes: { + type: "boolean", + description: + "Apply alternating row colors for better readability.", + }, + delimiter: { + type: "string", + description: + "Override auto-detected delimiter. One of: comma, semicolon, tab, pipe.", + }, + }, + }, + }, + required: ["name", "csvData"], + }, + }, + options: { + type: "object", + description: + "Default styling options applied to all sheets (can be overridden per-sheet).", + properties: { + headerStyle: { type: "boolean" }, + autoFit: { type: "boolean" }, + freezeHeader: { type: "boolean" }, + zebraStripes: { type: "boolean" }, + }, + }, + }, + required: ["filename"], + additionalProperties: false, + }, + handler: async function ({ + filename = "spreadsheet.xlsx", + csvData = null, + sheets = null, + options = {}, + }) { + try { + this.super.handlerProps.log(`Using the create-excel-file tool.`); + + const hasExtension = /\.xlsx$/i.test(filename); + if (!hasExtension) filename = `${filename}.xlsx`; + + if (!csvData && (!sheets || sheets.length === 0)) { + return "Error: You must provide either 'csvData' for a single sheet or 'sheets' array for multiple sheets."; + } + + const sheetDefinitions = sheets + ? sheets + : [ + { + name: "Sheet1", + csvData, + options: {}, + }, + ]; + + for (const sheet of sheetDefinitions) { + if (!sheet.csvData || sheet.csvData.trim() === "") { + return `Error: Sheet "${sheet.name || "unnamed"}" has no CSV data.`; + } + } + + const sheetCount = sheetDefinitions.length; + this.super.introspect( + `${this.caller}: Creating Excel file "${filename}" with ${sheetCount} sheet(s)` + ); + + if (this.super.requestToolApproval) { + const approval = await this.super.requestToolApproval({ + skillName: this.name, + payload: { + filename, + sheetCount, + sheetNames: sheetDefinitions.map((s) => s.name), + }, + description: `Create Excel spreadsheet "${filename}" with ${sheetCount} sheet(s)`, + }); + if (!approval.approved) { + this.super.introspect( + `${this.caller}: User rejected the ${this.name} request.` + ); + return approval.message; + } + } + + const ExcelJS = await import("exceljs"); + const workbook = new ExcelJS.default.Workbook(); + + workbook.creator = "AnythingLLM"; + workbook.created = new Date(); + workbook.modified = new Date(); + + const allWarnings = []; + + for (const sheetDef of sheetDefinitions) { + let sheetName = (sheetDef.name || "Sheet").substring(0, 31); + sheetName = sheetName.replace(/[*?:\\/[\]]/g, "_"); + + const sheetOptions = { + ...options, + ...(sheetDef.options || {}), + }; + + const delimiterMap = { + comma: ",", + semicolon: ";", + tab: "\t", + pipe: "|", + }; + const delimiter = sheetOptions.delimiter + ? delimiterMap[sheetOptions.delimiter] || + sheetOptions.delimiter + : detectDelimiter(sheetDef.csvData); + + const parsedData = parseCSV(sheetDef.csvData, delimiter); + const validation = validateCSVData(parsedData); + + if (!validation.valid) { + return `Error in sheet "${sheetName}": ${validation.error}`; + } + + if (validation.warnings) { + allWarnings.push( + ...validation.warnings.map((w) => `${sheetName}: ${w}`) + ); + } + + const worksheet = workbook.addWorksheet(sheetName); + + for ( + let rowIndex = 0; + rowIndex < parsedData.length; + rowIndex++ + ) { + const rowData = parsedData[rowIndex]; + const row = worksheet.getRow(rowIndex + 1); + + for ( + let colIndex = 0; + colIndex < rowData.length; + colIndex++ + ) { + const cellValue = rowData[colIndex]; + const cell = row.getCell(colIndex + 1); + const typedValue = + rowIndex === 0 ? cellValue : inferCellType(cellValue); + + cell.value = typedValue; + + if (typedValue instanceof Date) { + cell.numFmt = "yyyy-mm-dd"; + } else if ( + typeof typedValue === "number" && + cellValue.includes("%") + ) { + cell.numFmt = "0.00%"; + } + } + + row.commit(); + } + + if (sheetOptions.autoFit !== false) { + autoFitColumns(worksheet); + } + + if (sheetOptions.headerStyle !== false) { + applyHeaderStyle(worksheet); + } + + if (sheetOptions.zebraStripes) { + applyZebraStriping(worksheet); + } + + if (sheetOptions.freezeHeader !== false) { + freezePanes(worksheet, 1, 0); + } + } + + applyBranding(workbook); + + const buffer = await workbook.xlsx.writeBuffer(); + const bufferSizeKB = (buffer.length / 1024).toFixed(2); + const displayFilename = filename.split("/").pop(); + + this.super.handlerProps.log( + `create-excel-file: Generated buffer - size: ${bufferSizeKB}KB, sheets: ${sheetDefinitions.length}` + ); + + const savedFile = await createFilesLib.saveGeneratedFile({ + fileType: "xlsx", + extension: "xlsx", + buffer: Buffer.from(buffer), + displayFilename, + }); + + this.super.socket.send("fileDownloadCard", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + createFilesLib.registerOutput(this.super, "ExcelFileDownload", { + filename: savedFile.displayFilename, + storageFilename: savedFile.filename, + fileSize: savedFile.fileSize, + }); + + this.super.introspect( + `${this.caller}: Successfully created Excel file "${displayFilename}"` + ); + + let result = `Successfully created Excel spreadsheet "${displayFilename}" (${bufferSizeKB}KB) with ${sheetDefinitions.length} sheet(s).`; + + if (allWarnings.length > 0) { + result += `\n\nWarnings:\n${allWarnings.map((w) => `- ${w}`).join("\n")}`; + } + + return result; + } catch (e) { + this.super.handlerProps.log( + `create-excel-file error: ${e.message}` + ); + this.super.introspect(`Error: ${e.message}`); + return `Error creating Excel file: ${e.message}`; + } + }, + }); + }, + }; + }, +}; diff --git a/server/utils/agents/aibitat/plugins/create-files/xlsx/utils.js b/server/utils/agents/aibitat/plugins/create-files/xlsx/utils.js new file mode 100644 index 000000000..cf7432d56 --- /dev/null +++ b/server/utils/agents/aibitat/plugins/create-files/xlsx/utils.js @@ -0,0 +1,333 @@ +/** + * Parses CSV string into a 2D array of values. + * Handles quoted fields, embedded commas, and newlines within quotes. + * @param {string} csvString - The CSV content to parse + * @param {string} [delimiter=","] - The field delimiter + * @returns {string[][]} 2D array of parsed values + */ +function parseCSV(csvString, delimiter = ",") { + const rows = []; + let currentRow = []; + let currentField = ""; + let inQuotes = false; + + for (let i = 0; i < csvString.length; i++) { + const char = csvString[i]; + const nextChar = csvString[i + 1]; + + if (inQuotes) { + if (char === '"' && nextChar === '"') { + currentField += '"'; + i++; + } else if (char === '"') { + inQuotes = false; + } else { + currentField += char; + } + } else { + if (char === '"') { + inQuotes = true; + } else if (char === delimiter) { + currentRow.push(currentField.trim()); + currentField = ""; + } else if (char === "\r" && nextChar === "\n") { + currentRow.push(currentField.trim()); + rows.push(currentRow); + currentRow = []; + currentField = ""; + i++; + } else if (char === "\n" || char === "\r") { + currentRow.push(currentField.trim()); + rows.push(currentRow); + currentRow = []; + currentField = ""; + } else { + currentField += char; + } + } + } + + if (currentField || currentRow.length > 0) { + currentRow.push(currentField.trim()); + rows.push(currentRow); + } + + return rows.filter((row) => row.some((cell) => cell !== "")); +} + +/** + * Validates CSV data structure. + * @param {string[][]} data - Parsed CSV data + * @returns {{valid: boolean, error?: string, warnings?: string[]}} + */ +function validateCSVData(data) { + const warnings = []; + + if (!data || data.length === 0) { + return { valid: false, error: "CSV data is empty" }; + } + + if (data.length === 1 && data[0].length === 1 && !data[0][0]) { + return { valid: false, error: "CSV data contains no meaningful content" }; + } + + const columnCounts = data.map((row) => row.length); + const maxColumns = Math.max(...columnCounts); + const minColumns = Math.min(...columnCounts); + + if (maxColumns !== minColumns) { + warnings.push( + `Inconsistent column count: rows have between ${minColumns} and ${maxColumns} columns. Missing cells will be empty.` + ); + } + + if (maxColumns > 16384) { + return { + valid: false, + error: `CSV has ${maxColumns} columns, exceeding Excel's limit of 16,384 columns`, + }; + } + + if (data.length > 1048576) { + return { + valid: false, + error: `CSV has ${data.length} rows, exceeding Excel's limit of 1,048,576 rows`, + }; + } + + return { valid: true, warnings: warnings.length > 0 ? warnings : undefined }; +} + +/** + * Attempts to detect the delimiter used in a CSV string. + * @param {string} csvString - The CSV content + * @returns {string} Detected delimiter (comma, semicolon, tab, or pipe) + */ +function detectDelimiter(csvString) { + const firstLine = csvString.split(/\r?\n/)[0] || ""; + const delimiters = [",", ";", "\t", "|"]; + let bestDelimiter = ","; + let maxCount = 0; + + for (const delimiter of delimiters) { + const count = (firstLine.match(new RegExp(`\\${delimiter}`, "g")) || []) + .length; + if (count > maxCount) { + maxCount = count; + bestDelimiter = delimiter; + } + } + + return bestDelimiter; +} + +/** + * Attempts to convert a string value to an appropriate type (number, date, boolean, or string). + * @param {string} value - The string value to convert + * @returns {string|number|Date|boolean} The converted value + */ +function inferCellType(value) { + if (value === "" || value === null || value === undefined) { + return ""; + } + + const trimmed = value.trim(); + const lowerTrimmed = trimmed.toLowerCase(); + + if (lowerTrimmed === "true") return true; + if (lowerTrimmed === "false") return false; + + if (/^-?\d+(\.\d+)?$/.test(trimmed)) { + const num = parseFloat(trimmed); + if (!isNaN(num) && isFinite(num)) { + return num; + } + } + + if (/^-?\d{1,3}(,\d{3})*(\.\d+)?$/.test(trimmed)) { + const num = parseFloat(trimmed.replace(/,/g, "")); + if (!isNaN(num) && isFinite(num)) { + return num; + } + } + + const currencyMatch = trimmed.match(/^[$€£¥₹]?\s*(-?\d+(?:[,.\d]*\d)?)\s*$/); + if (currencyMatch) { + const num = parseFloat(currencyMatch[1].replace(/,/g, "")); + if (!isNaN(num) && isFinite(num)) { + return num; + } + } + + if (/^\d+(\.\d+)?%$/.test(trimmed)) { + const num = parseFloat(trimmed) / 100; + if (!isNaN(num) && isFinite(num)) { + return num; + } + } + + const datePatterns = [ + /^\d{4}-\d{2}-\d{2}$/, + /^\d{2}\/\d{2}\/\d{4}$/, + /^\d{2}-\d{2}-\d{4}$/, + /^\d{4}\/\d{2}\/\d{2}$/, + ]; + + for (const pattern of datePatterns) { + if (pattern.test(trimmed)) { + const date = new Date(trimmed); + if (!isNaN(date.getTime())) { + return date; + } + } + } + + return value; +} + +/** + * Applies AnythingLLM branding to an Excel workbook. + * Adds a subtle "Created with AnythingLLM" text row below the data on each sheet. + * @param {import('exceljs').Workbook} workbook - The ExcelJS workbook instance + */ +function applyBranding(workbook) { + for (const worksheet of workbook.worksheets) { + const lastRow = worksheet.rowCount || 1; + const lastCol = worksheet.columnCount || 1; + + const brandingRowNum = lastRow + 2; + + if (lastCol > 1) { + worksheet.mergeCells(brandingRowNum, 1, brandingRowNum, lastCol); + } + + const brandingCell = worksheet.getCell(brandingRowNum, 1); + brandingCell.value = "Created with AnythingLLM"; + brandingCell.font = { + italic: true, + size: 9, + color: { argb: "FF999999" }, + }; + brandingCell.alignment = { + horizontal: "right", + vertical: "middle", + }; + } +} + +/** + * Auto-fits column widths based on content. + * @param {import('exceljs').Worksheet} worksheet - The worksheet to auto-fit + * @param {number} [minWidth=8] - Minimum column width + * @param {number} [maxWidth=50] - Maximum column width + */ +function autoFitColumns(worksheet, minWidth = 8, maxWidth = 50) { + worksheet.columns.forEach((column, colIndex) => { + let maxLength = minWidth; + + worksheet.eachRow({ includeEmpty: false }, (row) => { + const cell = row.getCell(colIndex + 1); + const cellValue = cell.value; + let cellLength = minWidth; + + if (cellValue !== null && cellValue !== undefined) { + if (typeof cellValue === "string") { + cellLength = cellValue.length; + } else if (cellValue instanceof Date) { + cellLength = 12; + } else if (typeof cellValue === "number") { + cellLength = cellValue.toString().length; + } else if (typeof cellValue === "object" && cellValue.richText) { + cellLength = cellValue.richText.reduce( + (acc, rt) => acc + (rt.text?.length || 0), + 0 + ); + } else { + cellLength = String(cellValue).length; + } + } + + maxLength = Math.max(maxLength, cellLength); + }); + + column.width = Math.min(maxLength + 2, maxWidth); + }); +} + +/** + * Applies header styling to the first row of a worksheet. + * @param {import('exceljs').Worksheet} worksheet - The worksheet to style + * @param {Object} [options] - Styling options + * @param {boolean} [options.bold=true] - Make headers bold + * @param {string} [options.fill] - Background color (ARGB format, e.g., 'FF4472C4') + * @param {string} [options.fontColor] - Font color (ARGB format, e.g., 'FFFFFFFF') + */ +function applyHeaderStyle( + worksheet, + { bold = true, fill = "FF4472C4", fontColor = "FFFFFFFF" } = {} +) { + const headerRow = worksheet.getRow(1); + if (!headerRow || headerRow.cellCount === 0) return; + + headerRow.eachCell((cell) => { + cell.font = { + bold, + color: { argb: fontColor }, + }; + cell.fill = { + type: "pattern", + pattern: "solid", + fgColor: { argb: fill }, + }; + cell.alignment = { + vertical: "middle", + horizontal: "center", + }; + }); + + headerRow.height = 20; +} + +/** + * Applies alternating row colors (zebra striping) to a worksheet. + * @param {import('exceljs').Worksheet} worksheet - The worksheet to style + * @param {string} [evenColor='FFF2F2F2'] - Color for even rows (ARGB format) + * @param {number} [startRow=2] - Row to start alternating from (skips header) + */ +function applyZebraStriping(worksheet, evenColor = "FFF2F2F2", startRow = 2) { + worksheet.eachRow({ includeEmpty: false }, (row, rowNumber) => { + if (rowNumber >= startRow && rowNumber % 2 === 0) { + row.eachCell((cell) => { + if (!cell.fill || cell.fill.type !== "pattern") { + cell.fill = { + type: "pattern", + pattern: "solid", + fgColor: { argb: evenColor }, + }; + } + }); + } + }); +} + +/** + * Freezes the header row and optionally first columns. + * @param {import('exceljs').Worksheet} worksheet - The worksheet to modify + * @param {number} [rows=1] - Number of rows to freeze + * @param {number} [columns=0] - Number of columns to freeze + */ +function freezePanes(worksheet, rows = 1, columns = 0) { + worksheet.views = [{ state: "frozen", xSplit: columns, ySplit: rows }]; +} + +module.exports = { + parseCSV, + validateCSVData, + detectDelimiter, + inferCellType, + applyBranding, + autoFitColumns, + applyHeaderStyle, + applyZebraStriping, + freezePanes, +}; diff --git a/server/utils/agents/aibitat/plugins/filesystem/index.js b/server/utils/agents/aibitat/plugins/filesystem/index.js index 86b8304f5..7a5363859 100644 --- a/server/utils/agents/aibitat/plugins/filesystem/index.js +++ b/server/utils/agents/aibitat/plugins/filesystem/index.js @@ -1,6 +1,6 @@ const { FilesystemReadTextFile } = require("./read-text-file.js"); const { FilesystemReadMultipleFiles } = require("./read-multiple-files.js"); -const { FilesystemWriteFile } = require("./write-file.js"); +const { FilesystemWriteTextFile } = require("./write-text-file.js"); const { FilesystemEditFile } = require("./edit-file.js"); const { FilesystemCreateDirectory } = require("./create-directory.js"); const { FilesystemListDirectory } = require("./list-directory.js"); @@ -17,7 +17,7 @@ const filesystemAgent = { plugin: [ FilesystemReadTextFile, FilesystemReadMultipleFiles, - FilesystemWriteFile, + FilesystemWriteTextFile, FilesystemEditFile, FilesystemCreateDirectory, FilesystemListDirectory, diff --git a/server/utils/agents/aibitat/plugins/filesystem/write-file.js b/server/utils/agents/aibitat/plugins/filesystem/write-text-file.js similarity index 82% rename from server/utils/agents/aibitat/plugins/filesystem/write-file.js rename to server/utils/agents/aibitat/plugins/filesystem/write-text-file.js index 42fc9be5f..5de693be7 100644 --- a/server/utils/agents/aibitat/plugins/filesystem/write-file.js +++ b/server/utils/agents/aibitat/plugins/filesystem/write-text-file.js @@ -1,18 +1,19 @@ const filesystem = require("./lib.js"); -module.exports.FilesystemWriteFile = { - name: "filesystem-write-file", +module.exports.FilesystemWriteTextFile = { + name: "filesystem-write-text-file", plugin: function () { return { - name: "filesystem-write-file", + name: "filesystem-write-text-file", setup(aibitat) { aibitat.function({ super: aibitat, name: this.name, description: - "Create a new file or completely overwrite an existing file with new content. " + + "Create a new text file or completely overwrite an existing text file with new content. " + "Use with caution as it will overwrite existing files without warning. " + - "Handles text content with proper encoding. Only works within allowed directories.", + "Only handles text/plaintext content with proper encoding. Only works within allowed directories. " + + "For binary formats (PDF, DOCX, XLSX, PPTX), use the appropriate document creation tools instead.", examples: [ { prompt: "Create a new config file with these settings", @@ -49,7 +50,7 @@ module.exports.FilesystemWriteFile = { handler: async function ({ path: filePath = "", content = "" }) { try { this.super.handlerProps.log( - `Using the filesystem-write-file tool.` + `Using the filesystem-write-text-file tool.` ); const validPath = await filesystem.validatePath(filePath); @@ -76,7 +77,7 @@ module.exports.FilesystemWriteFile = { return `Successfully wrote to ${filePath}`; } catch (e) { this.super.handlerProps.log( - `filesystem-write-file error: ${e.message}` + `filesystem-write-text-file error: ${e.message}` ); this.super.introspect(`Error: ${e.message}`); return `Error writing file: ${e.message}`; diff --git a/server/utils/agents/aibitat/plugins/index.js b/server/utils/agents/aibitat/plugins/index.js index 13524bf48..22c0c0df2 100644 --- a/server/utils/agents/aibitat/plugins/index.js +++ b/server/utils/agents/aibitat/plugins/index.js @@ -2,34 +2,34 @@ const { webBrowsing } = require("./web-browsing.js"); const { webScraping } = require("./web-scraping.js"); const { websocket } = require("./websocket.js"); const { docSummarizer } = require("./summarize.js"); -const { saveFileInBrowser } = require("./save-file-browser.js"); const { chatHistory } = require("./chat-history.js"); const { memory } = require("./memory.js"); const { rechart } = require("./rechart.js"); const { sqlAgent } = require("./sql-agent/index.js"); const { filesystemAgent } = require("./filesystem/index.js"); +const { createFilesAgent } = require("./create-files/index.js"); module.exports = { webScraping, webBrowsing, websocket, docSummarizer, - saveFileInBrowser, chatHistory, memory, rechart, sqlAgent, filesystemAgent, + createFilesAgent, // Plugin name aliases so they can be pulled by slug as well. [webScraping.name]: webScraping, [webBrowsing.name]: webBrowsing, [websocket.name]: websocket, [docSummarizer.name]: docSummarizer, - [saveFileInBrowser.name]: saveFileInBrowser, [chatHistory.name]: chatHistory, [memory.name]: memory, [rechart.name]: rechart, [sqlAgent.name]: sqlAgent, [filesystemAgent.name]: filesystemAgent, + [createFilesAgent.name]: createFilesAgent, }; diff --git a/server/utils/agents/aibitat/plugins/save-file-browser.js b/server/utils/agents/aibitat/plugins/save-file-browser.js deleted file mode 100644 index b85befeb9..000000000 --- a/server/utils/agents/aibitat/plugins/save-file-browser.js +++ /dev/null @@ -1,95 +0,0 @@ -const { Deduplicator } = require("../utils/dedupe"); - -const saveFileInBrowser = { - name: "save-file-to-browser", - startupConfig: { - params: {}, - }, - plugin: function () { - return { - name: this.name, - setup(aibitat) { - // List and summarize the contents of files that are embedded in the workspace - aibitat.function({ - super: aibitat, - tracker: new Deduplicator(), - name: this.name, - description: - "Download or export content as a file. Save text, code, data, or conversation content to a downloadable file. Use when the user wants to save, download, or export something as a file.", - examples: [ - { - prompt: "Download that as a file", - call: JSON.stringify({ - file_content: "", - filename: "download.txt", - }), - }, - { - prompt: "Save that code to a file", - call: JSON.stringify({ - file_content: "", - filename: "code.js", - }), - }, - { - prompt: "Save me that to a file named 'output'", - call: JSON.stringify({ - file_content: "", - filename: "output.txt", - }), - }, - ], - parameters: { - $schema: "http://json-schema.org/draft-07/schema#", - type: "object", - properties: { - file_content: { - type: "string", - description: "The content of the file that will be saved.", - }, - filename: { - type: "string", - description: - "filename to save the file as with extension. Extension should be plaintext file extension.", - }, - }, - additionalProperties: false, - }, - handler: async function ({ file_content = "", filename }) { - try { - const { isDuplicate, reason } = this.tracker.isDuplicate( - this.name, - { file_content, filename } - ); - if (isDuplicate) { - this.super.handlerProps.log( - `${this.name} was called, but exited early because ${reason}.` - ); - return `${filename} file has been saved successfully!`; - } - - this.super.socket.send("fileDownload", { - filename, - b64Content: - "data:text/plain;base64," + - Buffer.from(file_content, "utf8").toString("base64"), - }); - this.super.introspect(`${this.caller}: Saving file ${filename}.`); - this.tracker.trackRun(this.name, { file_content, filename }); - return `${filename} file has been saved successfully and will be downloaded automatically to the users browser.`; - } catch (error) { - this.super.handlerProps.log( - `save-file-to-browser raised an error. ${error.message}` - ); - return `Let the user know this action was not successful. An error was raised while saving a file to the browser. ${error.message}`; - } - }, - }); - }, - }; - }, -}; - -module.exports = { - saveFileInBrowser, -}; diff --git a/server/utils/agents/defaults.js b/server/utils/agents/defaults.js index 41b58008b..c51bfc845 100644 --- a/server/utils/agents/defaults.js +++ b/server/utils/agents/defaults.js @@ -81,6 +81,15 @@ async function agentSkillsFromSystemSettings() { [] ); + // Load disabled create-files sub-skills + const _disabledCreateFilesSkills = safeJsonParse( + await SystemSettings.getValueOrFallback( + { label: "disabled_create_files_skills" }, + "[]" + ), + [] + ); + // Load non-imported built-in skills that are configurable. const _setting = safeJsonParse( await SystemSettings.getValueOrFallback( @@ -106,6 +115,16 @@ async function agentSkillsFromSystemSettings() { if (_disabledFilesystemSkills.includes(subPlugin.name)) continue; } + /** + * If the create-files tool is not available, or the sub-skill is explicitly disabled, skip it + * This is a docker specific skill so it cannot be used in other environments. + */ + if (skillName === "create-files-agent") { + const createFilesTool = require("./aibitat/plugins/create-files/lib"); + if (!createFilesTool.isToolAvailable()) continue; + if (_disabledCreateFilesSkills.includes(subPlugin.name)) continue; + } + systemFunctions.push( `${AgentPlugins[skillName].name}#${subPlugin.name}` ); diff --git a/server/utils/helpers/chat/responses.js b/server/utils/helpers/chat/responses.js index 465d56fd2..07604820b 100644 --- a/server/utils/helpers/chat/responses.js +++ b/server/utils/helpers/chat/responses.js @@ -157,6 +157,7 @@ function convertToChatHistory(history = []) { sentAt: moment(createdAt).unix(), feedbackScore, metrics: data?.metrics || {}, + ...(data?.outputs?.length > 0 ? { outputs: data.outputs } : {}), }, ]); } diff --git a/server/utils/telegramBot/chat/agent.js b/server/utils/telegramBot/chat/agent.js index 550b61cf5..c27e812d3 100644 --- a/server/utils/telegramBot/chat/agent.js +++ b/server/utils/telegramBot/chat/agent.js @@ -42,7 +42,7 @@ async function handleAgentResponse( const sources = []; const thoughts = []; const charts = []; - const files = []; + const _files = []; let thoughtMsgId = null; let lastThoughtText = ""; @@ -130,8 +130,8 @@ async function handleAgentResponse( case "rechartVisualize": if (parsed.content) charts.push(parsed.content); return; - case "fileDownload": - if (parsed.content) files.push(parsed.content); + case "fileDownloadCard": + if (parsed.content) _files.push(parsed.content); return; case "reportStreamEvent": const inner = parsed.content; @@ -170,8 +170,16 @@ async function handleAgentResponse( ? "✓ Agent completed:" : "🤔 Agent is thinking:"; const icon = done ? "✓" : "⏳"; + const maxThoughtLen = 100; const content = thoughtList - .map((t) => `${icon} ${escapeHTML(t)}`) + .map((t) => { + const escaped = escapeHTML(t); + const truncated = + escaped.length > maxThoughtLen + ? escaped.slice(0, maxThoughtLen) + "..." + : escaped; + return `${icon} ${truncated}`; + }) .join("\n"); const fullContent = `${header}\n${content}`; const tag = @@ -223,8 +231,9 @@ async function handleAgentResponse( ctx.bot.sendChatAction(chatId, "typing").catch(() => {}); }, 4000); + let agentHandler = null; try { - const agentHandler = await new EphemeralAgentHandler({ + agentHandler = await new EphemeralAgentHandler({ uuid: uuidv4(), workspace, prompt: message, @@ -239,101 +248,140 @@ async function handleAgentResponse( agentHandler.aibitat.maxRounds = 2; await agentHandler.startAgentCluster(); + + // Extract pending outputs from aibitat for persistence + const outputs = agentHandler?.aibitat?._pendingOutputs ?? []; + + // Final thought update, mark as completed + if (thoughtMsgId && thoughts.length > 0) { + const doneText = formatThoughtsAsBlockquote(thoughts, true); + await editMessage(ctx.bot, chatId, thoughtMsgId, doneText, ctx.log, { + html: true, + disableLinkPreview: true, + }); + } + + // Send charts as locally rendered images + for (const chart of charts) { + try { + const buffer = await renderChartToBuffer(chart); + await ctx.bot.sendPhoto( + chatId, + buffer, + { caption: chart.title }, + { + filename: "chart.png", + contentType: "image/png", + knownLength: buffer.length, + } + ); + } catch { + await ctx.bot.sendMessage( + chatId, + `${chart.title}: failed to render chart.` + ); + } + } + + // Ensure the initial sendMessage has resolved before deciding how to deliver + if (responsePending) await responsePending; + + // Fall back to the accumulated streamed text when no explicit + // fullTextResponse event was received (e.g. audio/voice messages). + const responseText = finalResponse || streamingText; + + if (responseText) { + await WorkspaceChats.new({ + workspaceId: workspace.id, + prompt: message, + response: { + text: responseText, + sources, + type: "chat", + metrics, + attachments, + ...(outputs.length > 0 ? { outputs } : {}), + }, + threadId: thread?.id || null, + }); + + // Always deliver text response first + if (responseMsgId) { + await editMessage( + ctx.bot, + chatId, + responseMsgId, + finalResponse || currentResponseText(), + ctx.log, + { + format: true, + } + ).catch(() => {}); + } else { + await sendFormattedMessage(ctx.bot, chatId, responseText); + } + + // Send voice as an additional attachment if requested + if (voiceResponse) { + ctx.log?.info?.(`Generating voice response for ${chatId}`); + await sendVoiceResponse(ctx.bot, chatId, responseText); + } + } + + // Send files as Telegram documents (after response is delivered) + if (_files.length > 0) { + ctx.log?.info?.(`Sending ${_files.length} file(s) to Telegram`); + await sendFilesAsTelegramDocuments(ctx, chatId, _files); + } } finally { clearInterval(typingInterval); clearTimeout(thoughtFlushTimeout); clearTimeout(editTimer); } +} - // Final thought update, mark as completed - if (thoughtMsgId && thoughts.length > 0) { - const doneText = formatThoughtsAsBlockquote(thoughts, true); - await editMessage(ctx.bot, chatId, thoughtMsgId, doneText, ctx.log, { - html: true, - disableLinkPreview: true, - }); - } - - // Send charts as locally rendered images - for (const chart of charts) { - try { - const buffer = await renderChartToBuffer(chart); - await ctx.bot.sendPhoto( - chatId, - buffer, - { caption: chart.title }, - { - filename: "chart.png", - contentType: "image/png", - knownLength: buffer.length, - } - ); - } catch { - await ctx.bot.sendMessage( - chatId, - `${chart.title}: failed to render chart.` - ); - } - } - - // Send files as Telegram documents +/** + * Send generated files as Telegram documents without blocking the main response. + * @param {import("../commands").BotContext} ctx + * @param {number} chatId + * @param {Array<{filename: string, storageFilename: string, fileSize: number}>} files + */ +async function sendFilesAsTelegramDocuments(ctx, chatId, files) { + const createFilesLib = require("../../agents/aibitat/plugins/create-files/lib"); for (const file of files) { try { - const base64Data = file.b64Content.split(",")[1]; - const buffer = Buffer.from(base64Data, "base64"); + ctx.log?.info?.(`Retrieving file: ${file.storageFilename}`); + const result = await createFilesLib.getGeneratedFile( + file.storageFilename + ); + if (!result?.buffer) { + ctx.log?.warn?.( + `Could not retrieve generated file: ${file.storageFilename}` + ); + continue; + } + + const extension = file.storageFilename.split(".").pop() || ""; + const mimeType = createFilesLib.getMimeType(extension); + + ctx.log?.info?.( + `Sending document: ${file.filename} (${result.buffer.length} bytes, ${mimeType})` + ); await ctx.bot.sendDocument( chatId, - buffer, - {}, + result.buffer, + { caption: file.filename }, { filename: file.filename, - contentType: "application/octet-stream", + contentType: mimeType, } ); - } catch {} - } - - // Ensure the initial sendMessage has resolved before deciding how to deliver - if (responsePending) await responsePending; - - // Fall back to the accumulated streamed text when no explicit - // fullTextResponse event was received (e.g. audio/voice messages). - const responseText = finalResponse || streamingText; - - if (responseText) { - await WorkspaceChats.new({ - workspaceId: workspace.id, - prompt: message, - response: { - text: responseText, - sources, - type: "chat", - metrics, - attachments, - }, - threadId: thread?.id || null, - }); - - // Always deliver text response first - if (responseMsgId) { - await editMessage( - ctx.bot, - chatId, - responseMsgId, - finalResponse || currentResponseText(), - ctx.log, - { - format: true, - } - ).catch(() => {}); - } else { - await sendFormattedMessage(ctx.bot, chatId, responseText); - } - - // Send voice as an additional attachment if requested - if (voiceResponse) { - ctx.log?.info?.(`Generating voice response for ${chatId}`); - await sendVoiceResponse(ctx.bot, chatId, responseText); + ctx.log?.info?.(`Successfully sent document: ${file.filename}`); + } catch (err) { + ctx.log?.error?.( + `Failed to send document ${file.filename}:`, + err.message + ); } } } diff --git a/server/yarn.lock b/server/yarn.lock index 597387c10..dd50878a6 100644 --- a/server/yarn.lock +++ b/server/yarn.lock @@ -4,7 +4,7 @@ "@75lb/deep-merge@^1.1.1": version "1.1.2" - resolved "https://registry.yarnpkg.com/@75lb/deep-merge/-/deep-merge-1.1.2.tgz#6aa53d9730e64a159075da65d3bd057abfe1dde0" + resolved "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.2.tgz" integrity sha512-08K9ou5VNbheZFxM5tDWoqjA3ImC50DiuuJ2tj1yEPRfkp8lLLg6XAaJ4On+a0yAXor/8ay5gHnAIshRM44Kpw== dependencies: lodash "^4.17.21" @@ -52,6 +52,17 @@ node-fetch "^2.6.7" web-streams-polyfill "^3.2.1" +"@asamuzakjp/css-color@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@asamuzakjp/css-color/-/css-color-3.2.0.tgz#cc42f5b85c593f79f1fa4f25d2b9b321e61d1794" + integrity sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw== + dependencies: + "@csstools/css-calc" "^2.1.3" + "@csstools/css-color-parser" "^3.0.9" + "@csstools/css-parser-algorithms" "^3.0.4" + "@csstools/css-tokenizer" "^3.0.3" + lru-cache "^10.4.3" + "@aws-crypto/crc32@5.2.0": version "5.2.0" resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz" @@ -202,7 +213,7 @@ "@aws-sdk/client-bedrock-runtime@^3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.775.0.tgz#df3ba82e6d53258433cf4d701c958924ff88fde2" + resolved "https://registry.npmjs.org/@aws-sdk/client-bedrock-runtime/-/client-bedrock-runtime-3.775.0.tgz" integrity sha512-EsPYYZl8B0mD6DPeyiyyCkg+2BNQfOrwwBzYnmWFBibRFHFPLDY5xvwTsmnJj4j4hUsBgB+fA0LKoGVYFZZlkg== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -253,7 +264,7 @@ "@aws-sdk/client-cognito-identity@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.901.0.tgz#25ba9219d32201d70567261abc37bcc064691f5f" + resolved "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.901.0.tgz" integrity sha512-cDJ+npYeAiS9u/52RwR0AHgneEF+rnyxiYm4d/c4FTI6xTQId3hSD0zdK0EgZ1wfoMk0/+5Ft6mYk0V6JN+cbQ== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -346,7 +357,7 @@ "@aws-sdk/client-sagemaker@^3.583.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sagemaker/-/client-sagemaker-3.901.0.tgz#a436c44ed06d996b32d27fc16317f6ae11a12e2e" + resolved "https://registry.npmjs.org/@aws-sdk/client-sagemaker/-/client-sagemaker-3.901.0.tgz" integrity sha512-flCntAsWQvBLgKUsBRnYQZRGgUH2bsK0eEn+bDEuP8RrBmC0FH4M1b6lOIx8iaOJirACGSjjyuIiwMMiZN0bUQ== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -482,7 +493,7 @@ "@aws-sdk/client-sso@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.775.0.tgz#3b2af9433f4f9925d0031bf213525dc11a8263c7" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.775.0.tgz" integrity sha512-vqG1S2ap77WP4D5qt4bEPE0duQ4myN+cDr1NeP8QpSTajetbkDGVo7h1VViYMcUoFUVWBj6Qf1X1VfOq+uaxbA== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -526,7 +537,7 @@ "@aws-sdk/client-sso@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.901.0.tgz#bad08910097ffa0458c2fe662dd4f8439c6e7eeb" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.901.0.tgz" integrity sha512-sGyDjjkJ7ppaE+bAKL/Q5IvVCxtoyBIzN+7+hWTS/mUxWJ9EOq9238IqmVIIK6sYNIzEf9yhobfMARasPYVTNg== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -629,7 +640,7 @@ "@aws-sdk/core@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.775.0.tgz#5d22ba78f07c07b48fb4d5b18172b9a896c0cbd0" + resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.775.0.tgz" integrity sha512-8vpW4WihVfz0DX+7WnnLGm3GuQER++b0IwQG35JlQMlgqnc44M//KbJPsIHA0aJUJVwJAEShgfr5dUbY8WUzaA== dependencies: "@aws-sdk/types" "3.775.0" @@ -646,7 +657,7 @@ "@aws-sdk/core@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.901.0.tgz#054341ff9ddede525a7bc3881872a97598fe757f" + resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.901.0.tgz" integrity sha512-brKAc3y64tdhyuEf+OPIUln86bRTqkLgb9xkd6kUdIeA5+qmp/N6amItQz+RN4k4O3kqkCPYnAd3LonTKluobw== dependencies: "@aws-sdk/types" "3.901.0" @@ -665,7 +676,7 @@ "@aws-sdk/credential-provider-cognito-identity@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.901.0.tgz#07d729c2846756b0516f22e0eeee7d8c7593cd3a" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.901.0.tgz" integrity sha512-irVFwiiEC+JRFQTZwI7264LOGXRjqdp3AvmqiEmmZS0+sJsEaF65prCs+nzw6J1WqQ6IZKClKKQsH7x8FfOPrQ== dependencies: "@aws-sdk/client-cognito-identity" "3.901.0" @@ -686,7 +697,7 @@ "@aws-sdk/credential-provider-env@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.775.0.tgz#b8c81818f4c62d89b5f04dc410ab9b48e954f22c" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.775.0.tgz" integrity sha512-6ESVxwCbGm7WZ17kY1fjmxQud43vzJFoLd4bmlR+idQSWdqlzGDYdcfzpjDKTcivdtNrVYmFvcH1JBUwCRAZhw== dependencies: "@aws-sdk/core" "3.775.0" @@ -697,7 +708,7 @@ "@aws-sdk/credential-provider-env@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.901.0.tgz#d3192a091a94931b2fbc2ef82a278d8daea06f43" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.901.0.tgz" integrity sha512-5hAdVl3tBuARh3zX5MLJ1P/d+Kr5kXtDU3xm1pxUEF4xt2XkEEpwiX5fbkNkz2rbh3BCt2gOHsAbh6b3M7n+DA== dependencies: "@aws-sdk/core" "3.901.0" @@ -723,7 +734,7 @@ "@aws-sdk/credential-provider-http@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.775.0.tgz#0fbc7f4e6cada37fc9b647de0d7c12a42a44bcc6" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.775.0.tgz" integrity sha512-PjDQeDH/J1S0yWV32wCj2k5liRo0ssXMseCBEkCsD3SqsU8o5cU82b0hMX4sAib/RkglCSZqGO0xMiN0/7ndww== dependencies: "@aws-sdk/core" "3.775.0" @@ -739,7 +750,7 @@ "@aws-sdk/credential-provider-http@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.901.0.tgz#40bbaa9e62431741d8ea7ed31c8e10de75a9ecde" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.901.0.tgz" integrity sha512-Ggr7+0M6QZEsrqRkK7iyJLf4LkIAacAxHz9c4dm9hnDdU7vqrlJm6g73IxMJXWN1bIV7IxfpzB11DsRrB/oNjQ== dependencies: "@aws-sdk/core" "3.901.0" @@ -772,7 +783,7 @@ "@aws-sdk/credential-provider-ini@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.775.0.tgz#64be57d4ef2a2ca9a685255969a5989759042f55" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.775.0.tgz" integrity sha512-0gJc6cALsgrjeC5U3qDjbz4myIC/j49+gPz9nkvY+C0OYWt1KH1tyfiZUuCRGfuFHhQ+3KMMDSL229TkBP3E7g== dependencies: "@aws-sdk/core" "3.775.0" @@ -791,7 +802,7 @@ "@aws-sdk/credential-provider-ini@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.901.0.tgz#83ada385ae94fed0a362f3be4689cf0a0284847d" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.901.0.tgz" integrity sha512-zxadcDS0hNJgv8n4hFYJNOXyfjaNE1vvqIiF/JzZSQpSSYXzCd+WxXef5bQh+W3giDtRUmkvP5JLbamEFjZKyw== dependencies: "@aws-sdk/core" "3.901.0" @@ -828,7 +839,7 @@ "@aws-sdk/credential-provider-node@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.775.0.tgz#cfa9e4135d8480a38aa1e7590fac809fe6030703" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.775.0.tgz" integrity sha512-D8Zre5W2sXC/ANPqCWPqwYpU1cKY9DF6ckFZyDrqlcBC0gANgpY6fLrBtYo2fwJsbj+1A24iIpBINV7erdprgA== dependencies: "@aws-sdk/credential-provider-env" "3.775.0" @@ -846,7 +857,7 @@ "@aws-sdk/credential-provider-node@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.901.0.tgz#b48ddc78998e6a96ad14ecec22d81714c59ff6d1" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.901.0.tgz" integrity sha512-dPuFzMF7L1s/lQyT3wDxqLe82PyTH+5o1jdfseTEln64LJMl0ZMWaKX/C1UFNDxaTd35Cgt1bDbjjAWHMiKSFQ== dependencies: "@aws-sdk/credential-provider-env" "3.901.0" @@ -875,7 +886,7 @@ "@aws-sdk/credential-provider-process@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.775.0.tgz#7ab90383f12461c5d20546e933924e654660542b" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.775.0.tgz" integrity sha512-A6k68H9rQp+2+7P7SGO90Csw6nrUEm0Qfjpn9Etc4EboZhhCLs9b66umUsTsSBHus4FDIe5JQxfCUyt1wgNogg== dependencies: "@aws-sdk/core" "3.775.0" @@ -887,7 +898,7 @@ "@aws-sdk/credential-provider-process@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.901.0.tgz#0e388fe22f357adb9c07b5f4a055eff6ba99dcff" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.901.0.tgz" integrity sha512-/IWgmgM3Cl1wTdJA5HqKMAojxLkYchh5kDuphApxKhupLu6Pu0JBOHU8A5GGeFvOycyaVwosod6zDduINZxe+A== dependencies: "@aws-sdk/core" "3.901.0" @@ -912,7 +923,7 @@ "@aws-sdk/credential-provider-sso@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.775.0.tgz#fb0267025981b8d0b7ba55fdfb18742759708d64" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.775.0.tgz" integrity sha512-du06V7u9HDmRuwZnRjf85shO3dffeKOkQplV5/2vf3LgTPNEI9caNomi/cCGyxKGOeSUHAKrQ1HvpPfOaI6t5Q== dependencies: "@aws-sdk/client-sso" "3.775.0" @@ -926,7 +937,7 @@ "@aws-sdk/credential-provider-sso@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.901.0.tgz#b60d8619edeb6b45c79a3f7cc0392a899de44886" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.901.0.tgz" integrity sha512-SjmqZQHmqFSET7+6xcZgtH7yEyh5q53LN87GqwYlJZ6KJ5oNw11acUNEhUOL1xTSJEvaWqwTIkS2zqrzLcM9bw== dependencies: "@aws-sdk/client-sso" "3.901.0" @@ -950,7 +961,7 @@ "@aws-sdk/credential-provider-web-identity@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.775.0.tgz#d0db1b0bc37c95c99d3728c71bbe76b734704e12" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.775.0.tgz" integrity sha512-z4XLYui5aHsr78mbd5BtZfm55OM5V55qK/X17OPrEqjYDDk3GlI8Oe2ZjTmOVrKwMpmzXKhsakeFHKfDyOvv1A== dependencies: "@aws-sdk/core" "3.775.0" @@ -962,7 +973,7 @@ "@aws-sdk/credential-provider-web-identity@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.901.0.tgz#512ad0d35e59bc669b41e18479e6b92d62a2d42a" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.901.0.tgz" integrity sha512-NYjy/6NLxH9m01+pfpB4ql8QgAorJcu8tw69kzHwUd/ql6wUDTbC7HcXqtKlIwWjzjgj2BKL7j6SyFapgCuafA== dependencies: "@aws-sdk/core" "3.901.0" @@ -975,7 +986,7 @@ "@aws-sdk/credential-providers@^3.583.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-providers/-/credential-providers-3.901.0.tgz#1eca04b0b634416e3579ddd91c737b9f050d0f11" + resolved "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.901.0.tgz" integrity sha512-jaJ+sVF9xuBwYiQznjrbDkw2W8/aQijGGdzroDL1mJfwyZA0hj3zfYUion+iWwjYhb0vS0bAyrIHtjtTfA2Qpw== dependencies: "@aws-sdk/client-cognito-identity" "3.901.0" @@ -1010,7 +1021,7 @@ "@aws-sdk/middleware-host-header@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.775.0.tgz#1bf8160b8f4f96ba30c19f9baa030a6c9bd5f94d" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.775.0.tgz" integrity sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w== dependencies: "@aws-sdk/types" "3.775.0" @@ -1020,7 +1031,7 @@ "@aws-sdk/middleware-host-header@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.901.0.tgz#e6b3a6706601d93949ca25167ecec50c40e3d9de" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.901.0.tgz" integrity sha512-yWX7GvRmqBtbNnUW7qbre3GvZmyYwU0WHefpZzDTYDoNgatuYq6LgUIQ+z5C04/kCRoFkAFrHag8a3BXqFzq5A== dependencies: "@aws-sdk/types" "3.901.0" @@ -1039,7 +1050,7 @@ "@aws-sdk/middleware-logger@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.775.0.tgz#df1909d441cd4bade8d6c7d24c41532808db0e81" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.775.0.tgz" integrity sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw== dependencies: "@aws-sdk/types" "3.775.0" @@ -1048,7 +1059,7 @@ "@aws-sdk/middleware-logger@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.901.0.tgz#30562184bd0b6a90d30f2d6d58ef5054300f2652" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.901.0.tgz" integrity sha512-UoHebjE7el/tfRo8/CQTj91oNUm+5Heus5/a4ECdmWaSCHCS/hXTsU3PTTHAY67oAQR8wBLFPfp3mMvXjB+L2A== dependencies: "@aws-sdk/types" "3.901.0" @@ -1067,7 +1078,7 @@ "@aws-sdk/middleware-recursion-detection@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.775.0.tgz#36a40f467754d7c86424d12ef45c05e96ce3475b" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.775.0.tgz" integrity sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA== dependencies: "@aws-sdk/types" "3.775.0" @@ -1077,7 +1088,7 @@ "@aws-sdk/middleware-recursion-detection@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.901.0.tgz#8492bd83aeee52f4e1b4194a81d044f46acf8c5b" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.901.0.tgz" integrity sha512-Wd2t8qa/4OL0v/oDpCHHYkgsXJr8/ttCxrvCKAt0H1zZe2LlRhY9gpDVKqdertfHrHDj786fOvEQA28G1L75Dg== dependencies: "@aws-sdk/types" "3.901.0" @@ -1099,7 +1110,7 @@ "@aws-sdk/middleware-user-agent@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.775.0.tgz#66950672df55ddb32062baa4d92c67b3b67dfa65" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.775.0.tgz" integrity sha512-7Lffpr1ptOEDE1ZYH1T78pheEY1YmeXWBfFt/amZ6AGsKSLG+JPXvof3ltporTGR2bhH/eJPo7UHCglIuXfzYg== dependencies: "@aws-sdk/core" "3.775.0" @@ -1112,7 +1123,7 @@ "@aws-sdk/middleware-user-agent@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.901.0.tgz#ff6ff86115e1c580f369d33a25213e336896c548" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.901.0.tgz" integrity sha512-Zby4F03fvD9xAgXGPywyk4bC1jCbnyubMEYChLYohD+x20ULQCf+AimF/Btn7YL+hBpzh1+RmqmvZcx+RgwgNQ== dependencies: "@aws-sdk/core" "3.901.0" @@ -1125,7 +1136,7 @@ "@aws-sdk/nested-clients@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.775.0.tgz#abf064391a0b967ad44a4657d6ffcea729f9014d" + resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.775.0.tgz" integrity sha512-f37jmAzkuIhKyhtA6s0LGpqQvm218vq+RNMUDkGm1Zz2fxJ5pBIUTDtygiI3vXTcmt9DTIB8S6JQhjrgtboktw== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -1169,7 +1180,7 @@ "@aws-sdk/nested-clients@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.901.0.tgz#8fcd2c48a0132ef1623b243ec88b6aff3164e76a" + resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.901.0.tgz" integrity sha512-feAAAMsVwctk2Tms40ONybvpfJPLCmSdI+G+OTrNpizkGLNl6ik2Ng2RzxY6UqOfN8abqKP/DOUj1qYDRDG8ag== dependencies: "@aws-crypto/sha256-browser" "5.2.0" @@ -1225,7 +1236,7 @@ "@aws-sdk/region-config-resolver@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.775.0.tgz#592b52498e68501fe46480be3dfb185e949d1eab" + resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.775.0.tgz" integrity sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ== dependencies: "@aws-sdk/types" "3.775.0" @@ -1237,7 +1248,7 @@ "@aws-sdk/region-config-resolver@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.901.0.tgz#6673eeda4ecc0747f93a084e876cab71431a97ca" + resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.901.0.tgz" integrity sha512-7F0N888qVLHo4CSQOsnkZ4QAp8uHLKJ4v3u09Ly5k4AEStrSlFpckTPyUx6elwGL+fxGjNE2aakK8vEgzzCV0A== dependencies: "@aws-sdk/types" "3.901.0" @@ -1260,7 +1271,7 @@ "@aws-sdk/token-providers@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.775.0.tgz#0d2128b2c8985731dcf592c5b9334654ddd0556b" + resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.775.0.tgz" integrity sha512-Q6MtbEhkOggVSz/dN89rIY/ry80U3v89o0Lrrc+Rpvaiaaz8pEN0DsfEcg0IjpzBQ8Owoa6lNWyglHbzPhaJpA== dependencies: "@aws-sdk/nested-clients" "3.775.0" @@ -1272,7 +1283,7 @@ "@aws-sdk/token-providers@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.901.0.tgz#1f506f169cde6342c8bad75c068a719453ebcf54" + resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.901.0.tgz" integrity sha512-pJEr1Ggbc/uVTDqp9IbNu9hdr0eQf3yZix3s4Nnyvmg4xmJSGAlbPC9LrNr5u3CDZoc8Z9CuLrvbP4MwYquNpQ== dependencies: "@aws-sdk/core" "3.901.0" @@ -1293,7 +1304,7 @@ "@aws-sdk/types@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.775.0.tgz#09863a9e68c080947db7c3d226d1c56b8f0f5150" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.775.0.tgz" integrity sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA== dependencies: "@smithy/types" "^4.2.0" @@ -1301,7 +1312,7 @@ "@aws-sdk/types@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.901.0.tgz#b5a2e26c7b3fb3bbfe4c7fc24873646992a1c56c" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.901.0.tgz" integrity sha512-FfEM25hLEs4LoXsLXQ/q6X6L4JmKkKkbVFpKD4mwfVHtRVQG6QxJiCPcrkcPISquiy6esbwK2eh64TWbiD60cg== dependencies: "@smithy/types" "^4.6.0" @@ -1319,7 +1330,7 @@ "@aws-sdk/util-endpoints@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.775.0.tgz#2f6fd728c86aeb1fba38506161b2eb024de17c19" + resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.775.0.tgz" integrity sha512-yjWmUgZC9tUxAo8Uaplqmq0eUh0zrbZJdwxGRKdYxfm4RG6fMw1tj52+KkatH7o+mNZvg1GDcVp/INktxonJLw== dependencies: "@aws-sdk/types" "3.775.0" @@ -1329,7 +1340,7 @@ "@aws-sdk/util-endpoints@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.901.0.tgz#be6296739d0f446b89a3f497c3a85afeb6cddd92" + resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.901.0.tgz" integrity sha512-5nZP3hGA8FHEtKvEQf4Aww5QZOkjLW1Z+NixSd+0XKfHvA39Ah5sZboScjLx0C9kti/K3OGW1RCx5K9Zc3bZqg== dependencies: "@aws-sdk/types" "3.901.0" @@ -1357,7 +1368,7 @@ "@aws-sdk/util-user-agent-browser@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.775.0.tgz#b69a1a5548ccc6db1acb3ec115967593ece927a1" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.775.0.tgz" integrity sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A== dependencies: "@aws-sdk/types" "3.775.0" @@ -1367,7 +1378,7 @@ "@aws-sdk/util-user-agent-browser@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.901.0.tgz#2c0e71e9019f054fb6a6061f99f55c13fb92830f" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.901.0.tgz" integrity sha512-Ntb6V/WFI21Ed4PDgL/8NSfoZQQf9xzrwNgiwvnxgAl/KvAvRBgQtqj5gHsDX8Nj2YmJuVoHfH9BGjL9VQ4WNg== dependencies: "@aws-sdk/types" "3.901.0" @@ -1387,7 +1398,7 @@ "@aws-sdk/util-user-agent-node@3.775.0": version "3.775.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.775.0.tgz#dbc34ff2d84e2c3d10466081cad005d49c3d9740" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.775.0.tgz" integrity sha512-N9yhTevbizTOMo3drH7Eoy6OkJ3iVPxhV7dwb6CMAObbLneS36CSfA6xQXupmHWcRvZPTz8rd1JGG3HzFOau+g== dependencies: "@aws-sdk/middleware-user-agent" "3.775.0" @@ -1398,7 +1409,7 @@ "@aws-sdk/util-user-agent-node@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.901.0.tgz#3a0a59a93229016f011e7ee0533d36275e3063bd" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.901.0.tgz" integrity sha512-l59KQP5TY7vPVUfEURc7P5BJKuNg1RSsAKBQW7LHLECXjLqDUbo2SMLrexLBEoArSt6E8QOrIN0C8z/0Xk0jYw== dependencies: "@aws-sdk/middleware-user-agent" "3.901.0" @@ -1409,7 +1420,7 @@ "@aws-sdk/xml-builder@3.901.0": version "3.901.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.901.0.tgz#3cd2e3929cefafd771c8bd790ec6965faa1be49d" + resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.901.0.tgz" integrity sha512-pxFCkuAP7Q94wMTNPAwi6hEtNrp/BdFf+HOrIEeFQsk4EoOmpKY3I6S+u6A9Wg295J80Kh74LqDWM22ux3z6Aw== dependencies: "@smithy/types" "^4.6.0" @@ -1418,7 +1429,7 @@ "@aws/lambda-invoke-store@^0.0.1": version "0.0.1" - resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz#92d792a7dda250dfcb902e13228f37a81be57c8f" + resolved "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz" integrity sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw== "@azure/abort-controller@^1.0.0": @@ -1594,9 +1605,37 @@ resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== +"@csstools/color-helpers@^5.1.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-5.1.0.tgz#106c54c808cabfd1ab4c602d8505ee584c2996ef" + integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== + +"@csstools/css-calc@^2.1.3", "@csstools/css-calc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-2.1.4.tgz#8473f63e2fcd6e459838dd412401d5948f224c65" + integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== + +"@csstools/css-color-parser@^3.0.9": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz#4e386af3a99dd36c46fef013cfe4c1c341eed6f0" + integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== + dependencies: + "@csstools/color-helpers" "^5.1.0" + "@csstools/css-calc" "^2.1.4" + +"@csstools/css-parser-algorithms@^3.0.4": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz#5755370a9a29abaec5515b43c8b3f2cf9c2e3076" + integrity sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ== + +"@csstools/css-tokenizer@^3.0.3": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3" + integrity sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw== + "@cypress/request-promise@^5.0.0": version "5.0.0" - resolved "https://registry.yarnpkg.com/@cypress/request-promise/-/request-promise-5.0.0.tgz#86899e097dba5123c546f1cadb9bff70e2654ebe" + resolved "https://registry.npmjs.org/@cypress/request-promise/-/request-promise-5.0.0.tgz" integrity sha512-eKdYVpa9cBEw2kTBlHeu1PP16Blwtum6QHg/u9s/MoHkZfuo1pRGka1VlUHXF5kdew82BvOJVVGk0x8X0nbp+w== dependencies: bluebird "^3.5.0" @@ -1606,7 +1645,7 @@ "@cypress/request@^3.0.8": version "3.0.10" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.10.tgz#e09c695e8460a82acafe6cfaf089cf2ca06dc054" + resolved "https://registry.npmjs.org/@cypress/request/-/request-3.0.10.tgz" integrity sha512-hauBrOdvu08vOsagkZ/Aju5XuiZx6ldsLfByg1htFeldhex+PeMrYauANzFsMJeAA0+dyPLbDoX2OYuvVoLDkQ== dependencies: aws-sign2 "~0.7.0" @@ -1648,19 +1687,19 @@ "@eslint-community/eslint-utils@^4.8.0": version "4.9.1" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz" integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== dependencies: eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.12.1": version "4.12.2" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz" integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== "@eslint/config-array@^0.21.1": version "0.21.1" - resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + resolved "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz" integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== dependencies: "@eslint/object-schema" "^2.1.7" @@ -1669,21 +1708,21 @@ "@eslint/config-helpers@^0.4.2": version "0.4.2" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + resolved "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz" integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== dependencies: "@eslint/core" "^0.17.0" "@eslint/core@^0.17.0": version "0.17.0" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + resolved "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz" integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== dependencies: "@types/json-schema" "^7.0.15" "@eslint/eslintrc@^3.3.1": version "3.3.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.4.tgz#e402b1920f7c1f5a15342caa432b1348cacbb641" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.4.tgz" integrity sha512-4h4MVF8pmBsncB60r0wSJiIeUKTSD4m7FmTFThG8RHlsg9ajqckLm9OraguFGZE4vVdpiI1Q4+hFnisopmG6gQ== dependencies: ajv "^6.14.0" @@ -1698,22 +1737,47 @@ "@eslint/js@9", "@eslint/js@9.39.3": version "9.39.3" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.3.tgz#c6168736c7e0c43ead49654ed06a4bcb3833363d" + resolved "https://registry.npmjs.org/@eslint/js/-/js-9.39.3.tgz" integrity sha512-1B1VkCq6FuUNlQvlBYb+1jDu/gV297TIs/OeiaSR9l1H27SVW55ONE1e1Vp16NqP683+xEGzxYtv4XCiDPaQiw== "@eslint/object-schema@^2.1.7": version "2.1.7" - resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + resolved "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz" integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== "@eslint/plugin-kit@^0.4.1": version "0.4.1" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + resolved "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz" integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== dependencies: "@eslint/core" "^0.17.0" levn "^0.4.1" +"@fast-csv/format@4.3.5": + version "4.3.5" + resolved "https://registry.yarnpkg.com/@fast-csv/format/-/format-4.3.5.tgz#90d83d1b47b6aaf67be70d6118f84f3e12ee1ff3" + integrity sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A== + dependencies: + "@types/node" "^14.0.1" + lodash.escaperegexp "^4.1.2" + lodash.isboolean "^3.0.3" + lodash.isequal "^4.5.0" + lodash.isfunction "^3.0.9" + lodash.isnil "^4.0.0" + +"@fast-csv/parse@4.3.6": + version "4.3.6" + resolved "https://registry.yarnpkg.com/@fast-csv/parse/-/parse-4.3.6.tgz#ee47d0640ca0291034c7aa94039a744cfb019264" + integrity sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA== + dependencies: + "@types/node" "^14.0.1" + lodash.escaperegexp "^4.1.2" + lodash.groupby "^4.6.0" + lodash.isfunction "^3.0.9" + lodash.isnil "^4.0.0" + lodash.isundefined "^3.0.1" + lodash.uniq "^4.5.0" + "@fastify/busboy@^2.0.0": version "2.1.1" resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" @@ -1771,12 +1835,12 @@ "@humanfs/core@^0.19.1": version "0.19.1" - resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + resolved "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz" integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== "@humanfs/node@^0.16.6": version "0.16.7" - resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + resolved "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz" integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== dependencies: "@humanfs/core" "^0.19.1" @@ -1789,7 +1853,7 @@ "@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": version "0.4.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + resolved "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz" integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== "@inquirer/checkbox@^2.2.3": @@ -1941,7 +2005,7 @@ "@kurkle/color@^0.3.0": version "0.3.4" - resolved "https://registry.yarnpkg.com/@kurkle/color/-/color-0.3.4.tgz#4d4ff677e1609214fc71c580125ddddd86abcabf" + resolved "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz" integrity sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w== "@ladjs/graceful@^3.2.2": @@ -1954,7 +2018,7 @@ "@lancedb/lancedb-darwin-arm64@0.15.0": version "0.15.0" - resolved "https://registry.yarnpkg.com/@lancedb/lancedb-darwin-arm64/-/lancedb-darwin-arm64-0.15.0.tgz#62b82d3ba76b489d9beab8db966b606b670371df" + resolved "https://registry.npmjs.org/@lancedb/lancedb-darwin-arm64/-/lancedb-darwin-arm64-0.15.0.tgz" integrity sha512-e6eiS1dUdSx3G3JXFEn5bk6I26GR7UM2QwQ1YMrTsg7IvGDqKmXc/s5j4jpJH0mzm7rwqh+OAILPIjr7DoUCDA== "@lancedb/lancedb-darwin-x64@0.15.0": @@ -1994,7 +2058,7 @@ "@lancedb/lancedb@0.15.0": version "0.15.0" - resolved "https://registry.yarnpkg.com/@lancedb/lancedb/-/lancedb-0.15.0.tgz#1c544b1e6a8eee10d5783c8a3a5d0ce04f76c29c" + resolved "https://registry.npmjs.org/@lancedb/lancedb/-/lancedb-0.15.0.tgz" integrity sha512-qm3GXLA17/nFGUwrOEuFNW0Qg2gvCtp+yAs6qoCM6vftIreqzp8d4Hio6eG/YojS9XqPnR2q+zIeIFy12Ywvxg== dependencies: reflect-metadata "^0.2.2" @@ -2033,7 +2097,7 @@ "@langchain/cohere@0.0.11": version "0.0.11" - resolved "https://registry.yarnpkg.com/@langchain/cohere/-/cohere-0.0.11.tgz#ba34117d589186c33fba4d677784132f6768958c" + resolved "https://registry.npmjs.org/@langchain/cohere/-/cohere-0.0.11.tgz" integrity sha512-BFLXXyJzomWRIINja43IOckuaaz+FkQY1njaoBQRqUxy+yCIQv2SUTo20AWwUPczsxhspFbu7NEp5qxCjvWqEg== dependencies: "@langchain/core" ">0.1.58 <0.3.0" @@ -2073,7 +2137,7 @@ "@langchain/core@>0.1.58 <0.3.0": version "0.2.36" - resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.2.36.tgz#75754c33aa5b9310dcf117047374a1ae011005a4" + resolved "https://registry.npmjs.org/@langchain/core/-/core-0.2.36.tgz" integrity sha512-qHLvScqERDeH7y2cLuJaSAlMwg3f/3Oc9nayRSXRU2UuaK/SOhI42cxiPLj1FnuHJSmN0rBQFkrLx02gI4mcVg== dependencies: ansi-styles "^5.0.0" @@ -2125,6 +2189,48 @@ "@langchain/core" "~0.1" js-tiktoken "^1.0.11" +"@mdpdf/mdpdf-darwin-arm64@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@mdpdf/mdpdf-darwin-arm64/-/mdpdf-darwin-arm64-0.1.4.tgz#06e10d368512bcc19a77d702e1fbf32f00aba49d" + integrity sha512-WVfKlZgboAvudJHCr7PTdGgKNEUIUWwW/Md4MTzXamKfcfvJ6ORm8vQ6wx0jmfjBH1UwjqnINlxxYEUt1Jf7dw== + +"@mdpdf/mdpdf-darwin-x64@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@mdpdf/mdpdf-darwin-x64/-/mdpdf-darwin-x64-0.1.4.tgz#709e3cb191249f0b41785a01fb7aa2e9936badc7" + integrity sha512-tDaEuVhuFagWmSJuS44HeG4S2VzsMCV30JaF+1zMGKxnGYtuXEL+q+Lklvt1T6JkaHaZjHVEA5klz1XXTNDDHA== + +"@mdpdf/mdpdf-linux-arm64-gnu@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@mdpdf/mdpdf-linux-arm64-gnu/-/mdpdf-linux-arm64-gnu-0.1.4.tgz#fa4b4a319e47263df336c2a4620688cda242bfa5" + integrity sha512-Rhy5DI3uwKNjeS+JW33CZdguFYZ0uRmc5iOLDdHl2bvmDPUzfAQSD1g6KJtqrqyDXbTe2N9jP+NOCVtkOSpw3Q== + +"@mdpdf/mdpdf-linux-x64-gnu@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@mdpdf/mdpdf-linux-x64-gnu/-/mdpdf-linux-x64-gnu-0.1.4.tgz#bc4014b1da3bb6769665e002be162c993be99ddb" + integrity sha512-NWpMYDBr1z59H9GlQdBizI8H8ODygui7j9NHpn2qiMrcnMvPBtmkH84YaXSHSYmUQ41UafRA/bnY5h5tkQb+Bw== + +"@mdpdf/mdpdf-linux-x64-musl@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@mdpdf/mdpdf-linux-x64-musl/-/mdpdf-linux-x64-musl-0.1.4.tgz#f88fabab2ffd33a49b2213210d96c3d607cdd43f" + integrity sha512-dwwVfZpNONyYUFkFjrgRq5igEVqCMetkYR+cCmH0fD6b0mq2gsa7/mrSUPZGX5sz/dJ5hePmJb2hRBIL9Fu3yQ== + +"@mdpdf/mdpdf-win32-x64-msvc@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@mdpdf/mdpdf-win32-x64-msvc/-/mdpdf-win32-x64-msvc-0.1.4.tgz#75caba7ccc20d59f87bc7fa26e7597f803f13b2b" + integrity sha512-NQBTbhbe+i1HjC4F4WXDiYiItBm0j3LFVpz3uaZgz88umF656j0n4YgOeJKRRx6S4k+l3nzvu19GFoR3ocHLdg== + +"@mdpdf/mdpdf@0.1.4": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@mdpdf/mdpdf/-/mdpdf-0.1.4.tgz#5b244cccde9af845806deb949cd2530552e6cd1a" + integrity sha512-xGaqXEsuIylP0lQiA17BLb7ERMvcY3VRuyBOGbTRu6TjgrX4BZHPdoi6oUCUOi8sV/vZJYnjy7Xo/b/cX9lzsQ== + optionalDependencies: + "@mdpdf/mdpdf-darwin-arm64" "0.1.4" + "@mdpdf/mdpdf-darwin-x64" "0.1.4" + "@mdpdf/mdpdf-linux-arm64-gnu" "0.1.4" + "@mdpdf/mdpdf-linux-x64-gnu" "0.1.4" + "@mdpdf/mdpdf-linux-x64-musl" "0.1.4" + "@mdpdf/mdpdf-win32-x64-msvc" "0.1.4" + "@mintplex-labs/bree@^9.2.5": version "9.2.5" resolved "https://registry.npmjs.org/@mintplex-labs/bree/-/bree-9.2.5.tgz" @@ -2150,7 +2256,7 @@ "@modelcontextprotocol/sdk@^1.24.3": version "1.24.3" - resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.24.3.tgz#81a3fcc919cb4ce8630e2bcecf59759176eb331a" + resolved "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.24.3.tgz" integrity sha512-YgSHW29fuzKKAHTGe9zjNoo+yF8KaQPzDC2W9Pv41E7/57IfY+AMGJ/aDFlgTLcVVELoggKE4syABCE75u3NCw== dependencies: ajv "^8.17.1" @@ -2168,6 +2274,20 @@ zod "^3.25 || ^4.0" zod-to-json-schema "^3.25.0" +"@pdf-lib/standard-fonts@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz#8ba691c4421f71662ed07c9a0294b44528af2d7f" + integrity sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA== + dependencies: + pako "^1.0.6" + +"@pdf-lib/upng@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@pdf-lib/upng/-/upng-1.0.1.tgz#7dc9c636271aca007a9df4deaf2dd7e7960280cb" + integrity sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ== + dependencies: + pako "^1.0.10" + "@petamoriken/float16@^3.8.6": version "3.8.6" resolved "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.6.tgz" @@ -2309,7 +2429,7 @@ "@smithy/abort-controller@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.0.2.tgz#36a23e8cc65fc03cacb6afa35dfbfd319c560c6b" + resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.2.tgz" integrity sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw== dependencies: "@smithy/types" "^4.2.0" @@ -2317,7 +2437,7 @@ "@smithy/abort-controller@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.2.0.tgz#ced549ad5e74232bdcb3eec990b02b1c6d81003d" + resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.0.tgz" integrity sha512-PLUYa+SUKOEZtXFURBu/CNxlsxfaFGxSBPcStL13KpVeVWIfdezWyDqkz7iDLmwnxojXD0s5KzuB5HGHvt4Aeg== dependencies: "@smithy/types" "^4.6.0" @@ -2336,7 +2456,7 @@ "@smithy/config-resolver@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.1.0.tgz#de1043cbd75f05d99798b0fbcfdaf4b89b0f2f41" + resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.0.tgz" integrity sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A== dependencies: "@smithy/node-config-provider" "^4.0.2" @@ -2347,7 +2467,7 @@ "@smithy/config-resolver@^4.3.0": version "4.3.0" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.3.0.tgz#a8bb72a21ff99ac91183a62fcae94f200762c256" + resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.3.0.tgz" integrity sha512-9oH+n8AVNiLPK/iK/agOsoWfrKZ3FGP3502tkksd6SRsKMYiu7AFX0YXo6YBADdsAj7C+G/aLKdsafIJHxuCkQ== dependencies: "@smithy/node-config-provider" "^4.3.0" @@ -2372,7 +2492,7 @@ "@smithy/core@^3.14.0": version "3.14.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.14.0.tgz#22bdb346b171c76b629c4f59dc496c27e10f1c82" + resolved "https://registry.npmjs.org/@smithy/core/-/core-3.14.0.tgz" integrity sha512-XJ4z5FxvY/t0Dibms/+gLJrI5niRoY0BCmE02fwmPcRYFPI4KI876xaE79YGWIKnEslMbuQPsIEsoU/DXa0DoA== dependencies: "@smithy/middleware-serde" "^4.2.0" @@ -2388,7 +2508,7 @@ "@smithy/core@^3.2.0": version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.2.0.tgz#613b15f76eab9a6be396b1d5453b6bc8f22ba99c" + resolved "https://registry.npmjs.org/@smithy/core/-/core-3.2.0.tgz" integrity sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q== dependencies: "@smithy/middleware-serde" "^4.0.3" @@ -2413,7 +2533,7 @@ "@smithy/credential-provider-imds@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz#1ec34a04842fa69996b151a695b027f0486c69a8" + resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.2.tgz" integrity sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w== dependencies: "@smithy/node-config-provider" "^4.0.2" @@ -2424,7 +2544,7 @@ "@smithy/credential-provider-imds@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.0.tgz#21855ceb157afeea60d74c61fe7316e90d8ec545" + resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.0.tgz" integrity sha512-SOhFVvFH4D5HJZytb0bLKxCrSnwcqPiNlrw+S4ZXjMnsC+o9JcUQzbZOEQcA8yv9wJFNhfsUiIUKiEnYL68Big== dependencies: "@smithy/node-config-provider" "^4.3.0" @@ -2445,7 +2565,7 @@ "@smithy/eventstream-codec@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-codec/-/eventstream-codec-4.0.2.tgz#d4d77699308a3dfeea1b2e87683845f5d8440bdb" + resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.2.tgz" integrity sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ== dependencies: "@aws-crypto/crc32" "5.2.0" @@ -2464,7 +2584,7 @@ "@smithy/eventstream-serde-browser@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.2.tgz#876f05491373ab217801c47b802601b8c09388d4" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.2.tgz" integrity sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug== dependencies: "@smithy/eventstream-serde-universal" "^4.0.2" @@ -2481,7 +2601,7 @@ "@smithy/eventstream-serde-config-resolver@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.0.tgz#4ab7a2575e9041a2df2179bce64619a4e632e4d3" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.0.tgz" integrity sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A== dependencies: "@smithy/types" "^4.2.0" @@ -2498,7 +2618,7 @@ "@smithy/eventstream-serde-node@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.2.tgz#390306ff79edb0c607705f639d8c5a76caad4bf7" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.2.tgz" integrity sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw== dependencies: "@smithy/eventstream-serde-universal" "^4.0.2" @@ -2516,7 +2636,7 @@ "@smithy/eventstream-serde-universal@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.2.tgz#9f45472fc4fe5fe5f7c22c33d90ec6fc0230d0ae" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.2.tgz" integrity sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng== dependencies: "@smithy/eventstream-codec" "^4.0.2" @@ -2536,7 +2656,7 @@ "@smithy/fetch-http-handler@^5.0.2": version "5.0.2" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz#9d3cacf044aa9573ab933f445ab95cddb284813d" + resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.0.2.tgz" integrity sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ== dependencies: "@smithy/protocol-http" "^5.1.0" @@ -2547,7 +2667,7 @@ "@smithy/fetch-http-handler@^5.3.0": version "5.3.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.0.tgz#1c5205642a9295f44441d8763e7c3a51a747fc95" + resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.0.tgz" integrity sha512-BG3KSmsx9A//KyIfw+sqNmWFr1YBUr+TwpxFT7yPqAk0yyDh7oSNgzfNH7pS6OC099EGx2ltOULvumCFe8bcgw== dependencies: "@smithy/protocol-http" "^5.3.0" @@ -2568,7 +2688,7 @@ "@smithy/hash-node@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.0.2.tgz#a34fe5a33b067d754ca63302b9791778f003e437" + resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.2.tgz" integrity sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg== dependencies: "@smithy/types" "^4.2.0" @@ -2578,7 +2698,7 @@ "@smithy/hash-node@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.2.0.tgz#d2de380cb88a3665d5e3f5bbe901cfb46867c74f" + resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.0.tgz" integrity sha512-ugv93gOhZGysTctZh9qdgng8B+xO0cj+zN0qAZ+Sgh7qTQGPOJbMdIuyP89KNfUyfAqFSNh5tMvC+h2uCpmTtA== dependencies: "@smithy/types" "^4.6.0" @@ -2596,7 +2716,7 @@ "@smithy/invalid-dependency@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz#e9b1c5e407d795f10a03afba90e37bccdc3e38f7" + resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.2.tgz" integrity sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ== dependencies: "@smithy/types" "^4.2.0" @@ -2604,7 +2724,7 @@ "@smithy/invalid-dependency@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.2.0.tgz#749c741c1b01bcdb12c0ec24701db655102f6ea7" + resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.0.tgz" integrity sha512-ZmK5X5fUPAbtvRcUPtk28aqIClVhbfcmfoS4M7UQBTnDdrNxhsrxYVv0ZEl5NaPSyExsPWqL4GsPlRvtlwg+2A== dependencies: "@smithy/types" "^4.6.0" @@ -2626,14 +2746,14 @@ "@smithy/is-array-buffer@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz#55a939029321fec462bcc574890075cd63e94206" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz" integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== dependencies: tslib "^2.6.2" "@smithy/is-array-buffer@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz#b0f874c43887d3ad44f472a0f3f961bcce0550c2" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz" integrity sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ== dependencies: tslib "^2.6.2" @@ -2649,7 +2769,7 @@ "@smithy/middleware-content-length@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz#ff78658e8047ad7038f58478cf8713ee2f6ef647" + resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.2.tgz" integrity sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A== dependencies: "@smithy/protocol-http" "^5.1.0" @@ -2658,7 +2778,7 @@ "@smithy/middleware-content-length@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.2.0.tgz#bf1bea6e7c0e35e8c6d4825880e4cfa903cbd501" + resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.0.tgz" integrity sha512-6ZAnwrXFecrA4kIDOcz6aLBhU5ih2is2NdcZtobBDSdSHtE9a+MThB5uqyK4XXesdOCvOcbCm2IGB95birTSOQ== dependencies: "@smithy/protocol-http" "^5.3.0" @@ -2680,7 +2800,7 @@ "@smithy/middleware-endpoint@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.0.tgz#cbfe47c5632942c960dbcf71fb02fd0d9985444d" + resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.0.tgz" integrity sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA== dependencies: "@smithy/core" "^3.2.0" @@ -2694,7 +2814,7 @@ "@smithy/middleware-endpoint@^4.3.0": version "4.3.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.0.tgz#407ce4051be2f1855259a02900a957e9b347fdfd" + resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.0.tgz" integrity sha512-jFVjuQeV8TkxaRlcCNg0GFVgg98tscsmIrIwRFeC74TIUyLE3jmY9xgc1WXrPQYRjQNK3aRoaIk6fhFRGOIoGw== dependencies: "@smithy/core" "^3.14.0" @@ -2723,7 +2843,7 @@ "@smithy/middleware-retry@^4.1.0": version "4.1.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.1.0.tgz#338ac1e025bbc6fd7b008152c4efa8bc0591acc9" + resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.0.tgz" integrity sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg== dependencies: "@smithy/node-config-provider" "^4.0.2" @@ -2738,7 +2858,7 @@ "@smithy/middleware-retry@^4.4.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.4.0.tgz#7f4b313a808aa8ac1a5922aff355e12c5a270de1" + resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.0.tgz" integrity sha512-yaVBR0vQnOnzex45zZ8ZrPzUnX73eUC8kVFaAAbn04+6V7lPtxn56vZEBBAhgS/eqD6Zm86o6sJs6FuQVoX5qg== dependencies: "@smithy/node-config-provider" "^4.3.0" @@ -2761,7 +2881,7 @@ "@smithy/middleware-serde@^4.0.3": version "4.0.3" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz#b90ef1065ad9dc0b54c561fae73c8a5792d145e3" + resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.3.tgz" integrity sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A== dependencies: "@smithy/types" "^4.2.0" @@ -2769,7 +2889,7 @@ "@smithy/middleware-serde@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.2.0.tgz#1b7fcaa699d1c48f2c3cbbce325aa756895ddf0f" + resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.0.tgz" integrity sha512-rpTQ7D65/EAbC6VydXlxjvbifTf4IH+sADKg6JmAvhkflJO2NvDeyU9qsWUNBelJiQFcXKejUHWRSdmpJmEmiw== dependencies: "@smithy/protocol-http" "^5.3.0" @@ -2786,7 +2906,7 @@ "@smithy/middleware-stack@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz#ca7bc3eedc7c1349e2cf94e0dc92a68d681bef18" + resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.2.tgz" integrity sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ== dependencies: "@smithy/types" "^4.2.0" @@ -2794,7 +2914,7 @@ "@smithy/middleware-stack@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.2.0.tgz#fa2f7dcdb0f3a1649d1d2ec3dc4841d9c2f70e67" + resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.0.tgz" integrity sha512-G5CJ//eqRd9OARrQu9MK1H8fNm2sMtqFh6j8/rPozhEL+Dokpvi1Og+aCixTuwDAGZUkJPk6hJT5jchbk/WCyg== dependencies: "@smithy/types" "^4.6.0" @@ -2812,7 +2932,7 @@ "@smithy/node-config-provider@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz#017ba626828bced0fa588e795246e5468632f3ef" + resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.0.2.tgz" integrity sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw== dependencies: "@smithy/property-provider" "^4.0.2" @@ -2822,7 +2942,7 @@ "@smithy/node-config-provider@^4.3.0": version "4.3.0" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.3.0.tgz#619ba522d683081d06f112a581b9009988cb38eb" + resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.0.tgz" integrity sha512-5QgHNuWdT9j9GwMPPJCKxy2KDxZ3E5l4M3/5TatSZrqYVoEiqQrDfAq8I6KWZw7RZOHtVtCzEPdYz7rHZixwcA== dependencies: "@smithy/property-provider" "^4.2.0" @@ -2843,7 +2963,7 @@ "@smithy/node-http-handler@^4.0.4": version "4.0.4" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz#aa583d201c1ee968170b65a07f06d633c214b7a1" + resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.0.4.tgz" integrity sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g== dependencies: "@smithy/abort-controller" "^4.0.2" @@ -2854,7 +2974,7 @@ "@smithy/node-http-handler@^4.3.0": version "4.3.0" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.3.0.tgz#783d3dbdf5b90b9e0ca1e56070a3be38b3836b7d" + resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.3.0.tgz" integrity sha512-RHZ/uWCmSNZ8cneoWEVsVwMZBKy/8123hEpm57vgGXA3Irf/Ja4v9TVshHK2ML5/IqzAZn0WhINHOP9xl+Qy6Q== dependencies: "@smithy/abort-controller" "^4.2.0" @@ -2873,7 +2993,7 @@ "@smithy/property-provider@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.0.2.tgz#4572c10415c9d4215f3df1530ba61b0319b17b55" + resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.2.tgz" integrity sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A== dependencies: "@smithy/types" "^4.2.0" @@ -2881,7 +3001,7 @@ "@smithy/property-provider@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.2.0.tgz#431c573326f572ae9063d58c21690f28251f9dce" + resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.0.tgz" integrity sha512-rV6wFre0BU6n/tx2Ztn5LdvEdNZ2FasQbPQmDOPfV9QQyDmsCkOAB0osQjotRCQg+nSKFmINhyda0D3AnjSBJw== dependencies: "@smithy/types" "^4.6.0" @@ -2897,7 +3017,7 @@ "@smithy/protocol-http@^5.1.0": version "5.1.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.1.0.tgz#ad34e336a95944785185234bebe2ec8dbe266936" + resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.0.tgz" integrity sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g== dependencies: "@smithy/types" "^4.2.0" @@ -2905,7 +3025,7 @@ "@smithy/protocol-http@^5.1.2", "@smithy/protocol-http@^5.3.0": version "5.3.0" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.3.0.tgz#2a2834386b706b959d20e7841099b1780ae62ace" + resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.0.tgz" integrity sha512-6POSYlmDnsLKb7r1D3SVm7RaYW6H1vcNcTWGWrF7s9+2noNYvUsm7E4tz5ZQ9HXPmKn6Hb67pBDRIjrT4w/d7Q== dependencies: "@smithy/types" "^4.6.0" @@ -2922,7 +3042,7 @@ "@smithy/querystring-builder@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz#834cea95bf413ab417bf9c166d60fd80d2cb3016" + resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.2.tgz" integrity sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q== dependencies: "@smithy/types" "^4.2.0" @@ -2931,7 +3051,7 @@ "@smithy/querystring-builder@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.2.0.tgz#a6191d2eccc14ffce821a559ec26c94c636a39c6" + resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.0.tgz" integrity sha512-Q4oFD0ZmI8yJkiPPeGUITZj++4HHYCW3pYBYfIobUCkYpI6mbkzmG1MAQQ3lJYYWj3iNqfzOenUZu+jqdPQ16A== dependencies: "@smithy/types" "^4.6.0" @@ -2948,7 +3068,7 @@ "@smithy/querystring-parser@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz#d80c5afb740e12ad8b4d4f58415e402c69712479" + resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.2.tgz" integrity sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q== dependencies: "@smithy/types" "^4.2.0" @@ -2956,7 +3076,7 @@ "@smithy/querystring-parser@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.2.0.tgz#4c4ebe257e951dff91f9db65f9558752641185e8" + resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.0.tgz" integrity sha512-BjATSNNyvVbQxOOlKse0b0pSezTWGMvA87SvoFoFlkRsKXVsN3bEtjCxvsNXJXfnAzlWFPaT9DmhWy1vn0sNEA== dependencies: "@smithy/types" "^4.6.0" @@ -2971,14 +3091,14 @@ "@smithy/service-error-classification@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz#96740ed8be7ac5ad7d6f296d4ddf3f66444b8dcc" + resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.2.tgz" integrity sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ== dependencies: "@smithy/types" "^4.2.0" "@smithy/service-error-classification@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.2.0.tgz#d98d9b351d05c21b83c5a012194480a8c2eae5b7" + resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.0.tgz" integrity sha512-Ylv1ttUeKatpR0wEOMnHf1hXMktPUMObDClSWl2TpCVT4DwtJhCeighLzSLbgH3jr5pBNM0LDXT5yYxUvZ9WpA== dependencies: "@smithy/types" "^4.6.0" @@ -2993,7 +3113,7 @@ "@smithy/shared-ini-file-loader@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz#15043f0516fe09ff4b22982bc5f644dc701ebae5" + resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.2.tgz" integrity sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw== dependencies: "@smithy/types" "^4.2.0" @@ -3001,7 +3121,7 @@ "@smithy/shared-ini-file-loader@^4.3.0": version "4.3.0" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.0.tgz#241a493ea7fa7faeaefccf6a5fa81af521d91cfa" + resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.3.0.tgz" integrity sha512-VCUPPtNs+rKWlqqntX0CbVvWyjhmX30JCtzO+s5dlzzxrvSfRh5SY0yxnkirvc1c80vdKQttahL71a9EsdolSQ== dependencies: "@smithy/types" "^4.6.0" @@ -3022,7 +3142,7 @@ "@smithy/signature-v4@^5.0.2": version "5.0.2" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.0.2.tgz#363854e946fbc5bc206ff82e79ada5d5c14be640" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.0.2.tgz" integrity sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw== dependencies: "@smithy/is-array-buffer" "^4.0.0" @@ -3036,7 +3156,7 @@ "@smithy/signature-v4@^5.1.2", "@smithy/signature-v4@^5.3.0": version "5.3.0" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.3.0.tgz#05d459cc4ec8f9d7300bb6b488cccedf2b73b7fb" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.0.tgz" integrity sha512-MKNyhXEs99xAZaFhm88h+3/V+tCRDQ+PrDzRqL0xdDpq4gjxcMmf5rBA3YXgqZqMZ/XwemZEurCBQMfxZOWq/g== dependencies: "@smithy/is-array-buffer" "^4.2.0" @@ -3062,7 +3182,7 @@ "@smithy/smithy-client@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.2.0.tgz#0c64cae4fb5bb4f26386e9b2c33fc9a3c24c9df3" + resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.2.0.tgz" integrity sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw== dependencies: "@smithy/core" "^3.2.0" @@ -3075,7 +3195,7 @@ "@smithy/smithy-client@^4.7.0": version "4.7.0" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.7.0.tgz#1b0b74a3f58bdf7a77024473b6fe6ec1aa9556c2" + resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.7.0.tgz" integrity sha512-3BDx/aCCPf+kkinYf5QQhdQ9UAGihgOVqI3QO5xQfSaIWvUE4KYLtiGRWsNe1SR7ijXC0QEPqofVp5Sb0zC8xQ== dependencies: "@smithy/core" "^3.14.0" @@ -3095,14 +3215,14 @@ "@smithy/types@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.2.0.tgz#e7998984cc54b1acbc32e6d4cf982c712e3d26b6" + resolved "https://registry.npmjs.org/@smithy/types/-/types-4.2.0.tgz" integrity sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg== dependencies: tslib "^2.6.2" "@smithy/types@^4.6.0": version "4.6.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.6.0.tgz#8ea8b15fedee3cdc555e8f947ce35fb1e973bb7a" + resolved "https://registry.npmjs.org/@smithy/types/-/types-4.6.0.tgz" integrity sha512-4lI9C8NzRPOv66FaY1LL1O/0v0aLVrq/mXP/keUa9mJOApEeae43LsLd2kZRUJw91gxOQfLIrV3OvqPgWz1YsA== dependencies: tslib "^2.6.2" @@ -3118,7 +3238,7 @@ "@smithy/url-parser@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.0.2.tgz#a316f7d8593ffab796348bc5df96237833880713" + resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.2.tgz" integrity sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ== dependencies: "@smithy/querystring-parser" "^4.0.2" @@ -3127,7 +3247,7 @@ "@smithy/url-parser@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.2.0.tgz#b6d6e739233ae120e4d6725b04375cb87791491f" + resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.0.tgz" integrity sha512-AlBmD6Idav2ugmoAL6UtR6ItS7jU5h5RNqLMZC7QrLCoITA9NzIN3nx9GWi8g4z1pfWh2r9r96SX/jHiNwPJ9A== dependencies: "@smithy/querystring-parser" "^4.2.0" @@ -3145,7 +3265,7 @@ "@smithy/util-base64@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.0.0.tgz#8345f1b837e5f636e5f8470c4d1706ae0c6d0358" + resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz" integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== dependencies: "@smithy/util-buffer-from" "^4.0.0" @@ -3154,7 +3274,7 @@ "@smithy/util-base64@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.2.0.tgz#677f616772389adbad278b05d84835abbfe63bbc" + resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.2.0.tgz" integrity sha512-+erInz8WDv5KPe7xCsJCp+1WCjSbah9gWcmUXc9NqmhyPx59tf7jqFz+za1tRG1Y5KM1Cy1rWCcGypylFp4mvA== dependencies: "@smithy/util-buffer-from" "^4.2.0" @@ -3170,14 +3290,14 @@ "@smithy/util-body-length-browser@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz#965d19109a4b1e5fe7a43f813522cce718036ded" + resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz" integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== dependencies: tslib "^2.6.2" "@smithy/util-body-length-browser@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz#04e9fc51ee7a3e7f648a4b4bcdf96c350cfa4d61" + resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz" integrity sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg== dependencies: tslib "^2.6.2" @@ -3191,14 +3311,14 @@ "@smithy/util-body-length-node@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz#3db245f6844a9b1e218e30c93305bfe2ffa473b3" + resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz" integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== dependencies: tslib "^2.6.2" "@smithy/util-body-length-node@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.2.0.tgz#ea6a0fdabb48dd0b212e17e42b1f07bb7373147b" + resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.0.tgz" integrity sha512-U8q1WsSZFjXijlD7a4wsDQOvOwV+72iHSfq1q7VD+V75xP/pdtm0WIGuaFJ3gcADDOKj2MIBn4+zisi140HEnQ== dependencies: tslib "^2.6.2" @@ -3221,7 +3341,7 @@ "@smithy/util-buffer-from@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz#b23b7deb4f3923e84ef50c8b2c5863d0dbf6c0b9" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz" integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== dependencies: "@smithy/is-array-buffer" "^4.0.0" @@ -3229,7 +3349,7 @@ "@smithy/util-buffer-from@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz#7abd12c4991b546e7cee24d1e8b4bfaa35c68a9d" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz" integrity sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew== dependencies: "@smithy/is-array-buffer" "^4.2.0" @@ -3244,14 +3364,14 @@ "@smithy/util-config-provider@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz#e0c7c8124c7fba0b696f78f0bd0ccb060997d45e" + resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz" integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== dependencies: tslib "^2.6.2" "@smithy/util-config-provider@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz#2e4722937f8feda4dcb09672c59925a4e6286cfc" + resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz" integrity sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q== dependencies: tslib "^2.6.2" @@ -3269,7 +3389,7 @@ "@smithy/util-defaults-mode-browser@^4.0.8": version "4.0.8" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.8.tgz#77bc4590cdc928901b80f3482e79607a2cbcb150" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.8.tgz" integrity sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ== dependencies: "@smithy/property-provider" "^4.0.2" @@ -3280,7 +3400,7 @@ "@smithy/util-defaults-mode-browser@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.2.0.tgz#7b9f0299203aaa48953c4997c1630bdeffd80ec0" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.2.0.tgz" integrity sha512-qzHp7ZDk1Ba4LDwQVCNp90xPGqSu7kmL7y5toBpccuhi3AH7dcVBIT/pUxYcInK4jOy6FikrcTGq5wxcka8UaQ== dependencies: "@smithy/property-provider" "^4.2.0" @@ -3304,7 +3424,7 @@ "@smithy/util-defaults-mode-node@^4.0.8": version "4.0.8" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.8.tgz#123b517efe6434977139b341d1f64b5f1e743aac" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.8.tgz" integrity sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA== dependencies: "@smithy/config-resolver" "^4.1.0" @@ -3317,7 +3437,7 @@ "@smithy/util-defaults-mode-node@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.0.tgz#efe5a6be134755317a0edf9595582bd6732e493a" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.0.tgz" integrity sha512-FxUHS3WXgx3bTWR6yQHNHHkQHZm/XKIi/CchTnKvBulN6obWpcbzJ6lDToXn+Wp0QlVKd7uYAz2/CTw1j7m+Kg== dependencies: "@smithy/config-resolver" "^4.3.0" @@ -3339,7 +3459,7 @@ "@smithy/util-endpoints@^3.0.2": version "3.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz#6933a0d6d4a349523ef71ca9540c9c0b222b559e" + resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.2.tgz" integrity sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ== dependencies: "@smithy/node-config-provider" "^4.0.2" @@ -3348,7 +3468,7 @@ "@smithy/util-endpoints@^3.2.0": version "3.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.2.0.tgz#4bdc4820ceab5d66365ee72cfb14226e10bb0e24" + resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.0.tgz" integrity sha512-TXeCn22D56vvWr/5xPqALc9oO+LN+QpFjrSM7peG/ckqEPoI3zaKZFp+bFwfmiHhn5MGWPaLCqDOJPPIixk9Wg== dependencies: "@smithy/node-config-provider" "^4.3.0" @@ -3364,14 +3484,14 @@ "@smithy/util-hex-encoding@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz#dd449a6452cffb37c5b1807ec2525bb4be551e8d" + resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz" integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== dependencies: tslib "^2.6.2" "@smithy/util-hex-encoding@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz#1c22ea3d1e2c3a81ff81c0a4f9c056a175068a7b" + resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz" integrity sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw== dependencies: tslib "^2.6.2" @@ -3386,7 +3506,7 @@ "@smithy/util-middleware@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.0.2.tgz#272f1249664e27068ef0d5f967a233bf7b77962c" + resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.2.tgz" integrity sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ== dependencies: "@smithy/types" "^4.2.0" @@ -3394,7 +3514,7 @@ "@smithy/util-middleware@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.2.0.tgz#85973ae0db65af4ab4bedf12f31487a4105d1158" + resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.0.tgz" integrity sha512-u9OOfDa43MjagtJZ8AapJcmimP+K2Z7szXn8xbty4aza+7P1wjFmy2ewjSbhEiYQoW1unTlOAIV165weYAaowA== dependencies: "@smithy/types" "^4.6.0" @@ -3411,7 +3531,7 @@ "@smithy/util-retry@^4.0.2": version "4.0.2" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.0.2.tgz#9b64cf460d63555884e641721d19e3c0abff8ee6" + resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.2.tgz" integrity sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg== dependencies: "@smithy/service-error-classification" "^4.0.2" @@ -3420,7 +3540,7 @@ "@smithy/util-retry@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.2.0.tgz#1fa58e277b62df98d834e6c8b7d57f4c62ff1baf" + resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.0.tgz" integrity sha512-BWSiuGbwRnEE2SFfaAZEX0TqaxtvtSYPM/J73PFVm+A29Fg1HTPiYFb8TmX1DXp4hgcdyJcNQmprfd5foeORsg== dependencies: "@smithy/service-error-classification" "^4.2.0" @@ -3443,7 +3563,7 @@ "@smithy/util-stream@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.2.0.tgz#85f85516b0042726162bf619caa3358332195652" + resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.0.tgz" integrity sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ== dependencies: "@smithy/fetch-http-handler" "^5.0.2" @@ -3457,7 +3577,7 @@ "@smithy/util-stream@^4.4.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.4.0.tgz#e203c74b8664d0e3f537185de5da960655333a45" + resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.4.0.tgz" integrity sha512-vtO7ktbixEcrVzMRmpQDnw/Ehr9UWjBvSJ9fyAbadKkC4w5Cm/4lMO8cHz8Ysb8uflvQUNRcuux/oNHKPXkffg== dependencies: "@smithy/fetch-http-handler" "^5.3.0" @@ -3478,14 +3598,14 @@ "@smithy/util-uri-escape@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz#a96c160c76f3552458a44d8081fade519d214737" + resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz" integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== dependencies: tslib "^2.6.2" "@smithy/util-uri-escape@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz#096a4cec537d108ac24a68a9c60bee73fc7e3a9e" + resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz" integrity sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA== dependencies: tslib "^2.6.2" @@ -3508,7 +3628,7 @@ "@smithy/util-utf8@^4.0.0": version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.0.0.tgz#09ca2d9965e5849e72e347c130f2a29d5c0c863c" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz" integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== dependencies: "@smithy/util-buffer-from" "^4.0.0" @@ -3516,7 +3636,7 @@ "@smithy/util-utf8@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.2.0.tgz#8b19d1514f621c44a3a68151f3d43e51087fed9d" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz" integrity sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw== dependencies: "@smithy/util-buffer-from" "^4.2.0" @@ -3524,7 +3644,7 @@ "@smithy/util-waiter@^4.2.0": version "4.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-waiter/-/util-waiter-4.2.0.tgz#fcf5609143fa745d45424b0463560425b39c34eb" + resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.0.tgz" integrity sha512-0Z+nxUU4/4T+SL8BCNN4ztKdQjToNvUYmkF1kXO5T7Yz3Gafzh0HeIG6mrkN8Fz3gn9hSyxuAT+6h4vM+iQSBQ== dependencies: "@smithy/abort-controller" "^4.2.0" @@ -3533,14 +3653,14 @@ "@smithy/uuid@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.1.0.tgz#9fd09d3f91375eab94f478858123387df1cda987" + resolved "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz" integrity sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw== dependencies: tslib "^2.6.2" "@swc/helpers@^0.5.11": version "0.5.15" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.15.tgz#79efab344c5819ecf83a43f3f9f811fc84b516d7" + resolved "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz" integrity sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g== dependencies: tslib "^2.8.0" @@ -3562,12 +3682,12 @@ "@types/estree@^1.0.6": version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/json-schema@^7.0.15": version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/lodash@^4.14.165": @@ -3602,6 +3722,11 @@ dependencies: undici-types "~5.26.4" +"@types/node@^14.0.1": + version "14.18.63" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.63.tgz#1788fa8da838dbb5f9ea994b834278205db6ca2b" + integrity sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ== + "@types/node@^18.11.18": version "18.19.31" resolved "https://registry.npmjs.org/@types/node/-/node-18.19.31.tgz" @@ -3611,11 +3736,25 @@ "@types/node@^20.13.0": version "20.17.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.16.tgz#b33b0edc1bf925b27349e494b871ca4451fabab4" + resolved "https://registry.npmjs.org/@types/node/-/node-20.17.16.tgz" integrity sha512-vOTpLduLkZXePLxHiHsBLp98mHGnl8RptV4YAO3HfKO5UHjDvySGbxKtpYfy8Sx5+WKcgc45qNreJJRVM3L6mw== dependencies: undici-types "~6.19.2" +"@types/node@^22.8.1": + version "22.19.15" + resolved "https://registry.npmjs.org/@types/node/-/node-22.19.15.tgz" + integrity sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg== + dependencies: + undici-types "~6.21.0" + +"@types/node@^25.2.3": + version "25.5.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.5.0.tgz#5c99f37c443d9ccc4985866913f1ed364217da31" + integrity sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw== + dependencies: + undici-types "~7.18.0" + "@types/readable-stream@^4.0.0": version "4.0.14" resolved "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.14.tgz" @@ -3634,9 +3773,14 @@ resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== +"@types/trusted-types@^2.0.7": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + "@types/uuid@^10.0.0": version "10.0.0" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-10.0.0.tgz#e9c07fe50da0f53dc24970cca94d619ff03f6f6d" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz" integrity sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ== "@types/uuid@^9.0.1": @@ -3651,7 +3795,7 @@ "@vscode/ripgrep@1.17.1": version "1.17.1" - resolved "https://registry.yarnpkg.com/@vscode/ripgrep/-/ripgrep-1.17.1.tgz#7d29cdd80e343da8d973927ac91fcc9788aea484" + resolved "https://registry.npmjs.org/@vscode/ripgrep/-/ripgrep-1.17.1.tgz" integrity sha512-xTs7DGyAO3IsJYOCTBP8LnTvPiYVKEuyv8s0xyJDBXfs8rhBfqnZPvb6xDT+RnwWzcXqW27xLS/aGrkjX7lNWw== dependencies: https-proxy-agent "^7.0.2" @@ -3697,7 +3841,7 @@ abort-controller@^3.0.0: accepts@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" + resolved "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz" integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== dependencies: mime-types "^3.0.0" @@ -3723,7 +3867,7 @@ acorn@^7.4.1: acorn@^8.15.0: version "8.16.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.16.0.tgz#4ce79c89be40afe7afe8f3adb902a1f1ce9ac08a" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz" integrity sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw== adm-zip@^0.5.16: @@ -3740,7 +3884,7 @@ agent-base@^7.0.2, agent-base@^7.1.0: agent-base@^7.1.2: version "7.1.4" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz" integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== agentkeepalive@^4.2.1: @@ -3752,14 +3896,14 @@ agentkeepalive@^4.2.1: ajv-formats@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== dependencies: ajv "^8.0.0" ajv@^6.12.4, ajv@^6.14.0: version "6.14.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.14.0.tgz#fd067713e228210636ebb08c60bd3765d6dbe73a" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz" integrity sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw== dependencies: fast-deep-equal "^3.1.1" @@ -3769,7 +3913,7 @@ ajv@^6.12.4, ajv@^6.14.0: ajv@^8.0.0, ajv@^8.17.1: version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== dependencies: fast-deep-equal "^3.1.3" @@ -3801,7 +3945,7 @@ ansi-regex@^5.0.1: ansi-regex@^6.0.1: version "6.2.2" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.2.2.tgz#60216eea464d864597ce2832000738a0589650c1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz" integrity sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg== ansi-styles@^4.0.0, ansi-styles@^4.1.0: @@ -3826,7 +3970,7 @@ anymatch@~3.1.2: apache-arrow@19.0.0: version "19.0.0" - resolved "https://registry.yarnpkg.com/apache-arrow/-/apache-arrow-19.0.0.tgz#631f1104f0504959987e25c9b4f425a61c985a48" + resolved "https://registry.npmjs.org/apache-arrow/-/apache-arrow-19.0.0.tgz" integrity sha512-xifuq9x7tYriK64p7xwtpe9JFBxiQxs0OXBnKv36OwQmkjpNhZN7aKXFa0mV5vaOxf0uKHmjlnxUNw/2fl5FRw== dependencies: "@swc/helpers" "^0.5.11" @@ -3844,6 +3988,51 @@ append-field@^1.0.0: resolved "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== +archiver-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-2.1.0.tgz#e8a460e94b693c3e3da182a098ca6285ba9249e2" + integrity sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw== + dependencies: + glob "^7.1.4" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^2.0.0" + +archiver-utils@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/archiver-utils/-/archiver-utils-3.0.4.tgz#a0d201f1cf8fce7af3b5a05aea0a337329e96ec7" + integrity sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw== + dependencies: + glob "^7.2.3" + graceful-fs "^4.2.0" + lazystream "^1.0.0" + lodash.defaults "^4.2.0" + lodash.difference "^4.5.0" + lodash.flatten "^4.4.0" + lodash.isplainobject "^4.0.6" + lodash.union "^4.6.0" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + +archiver@^5.0.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/archiver/-/archiver-5.3.2.tgz#99991d5957e53bd0303a392979276ac4ddccf3b0" + integrity sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw== + dependencies: + archiver-utils "^2.1.0" + async "^3.2.4" + buffer-crc32 "^0.2.1" + readable-stream "^3.6.0" + readdir-glob "^1.1.2" + tar-stream "^2.2.0" + zip-stream "^4.1.0" + argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" @@ -3851,7 +4040,7 @@ argparse@^2.0.1: array-back@^3.0.1, array-back@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + resolved "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz" integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== array-back@^6.2.2: @@ -3869,7 +4058,7 @@ array-buffer-byte-length@^1.0.1: array-buffer-byte-length@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz" integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: call-bound "^1.0.3" @@ -3894,7 +4083,7 @@ array-includes@^3.1.6, array-includes@^3.1.7: array.prototype.findindex@^2.0.2: version "2.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findindex/-/array.prototype.findindex-2.2.4.tgz#63aff05df18effa990c367bfad06b71f7bd113f9" + resolved "https://registry.npmjs.org/array.prototype.findindex/-/array.prototype.findindex-2.2.4.tgz" integrity sha512-LLm4mhxa9v8j0A/RPnpQAP4svXToJFh+Hp1pNYl5ZD5qpB4zdx/D4YjpVcETkhFbUKWO3iGMVLvrOnnmkAJT6A== dependencies: call-bind "^1.0.8" @@ -3973,7 +4162,7 @@ arraybuffer.prototype.slice@^1.0.3: arraybuffer.prototype.slice@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz" integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: array-buffer-byte-length "^1.0.1" @@ -3986,7 +4175,7 @@ arraybuffer.prototype.slice@^1.0.4: asn1.js@^5.3.0: version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" @@ -3996,14 +4185,14 @@ asn1.js@^5.3.0: asn1@~0.2.3: version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz" integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz" integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== async@^3.2.3: @@ -4011,6 +4200,11 @@ async@^3.2.3: resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== +async@^3.2.4: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -4025,7 +4219,7 @@ available-typed-arrays@^1.0.7: aws-sign2@~0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz" integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws-ssl-profiles@^1.1.1: @@ -4035,7 +4229,7 @@ aws-ssl-profiles@^1.1.1: aws4@^1.8.0: version "1.13.2" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + resolved "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz" integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== axios@^1.4.0, axios@^1.6.2: @@ -4102,16 +4296,21 @@ base64-js@^1.3.1, base64-js@^1.5.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz" integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== dependencies: tweetnacl "^0.14.3" bcryptjs@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-3.0.3.tgz#4b93d6a398c48bfc9f32ee65d301174a8a8ea56f" + resolved "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.3.tgz" integrity sha512-GlF5wPWnSa/X5LKM1o0wz0suXIINz1iHRLvTS+sLyi7XPbe5ycmYI3DlZqVGZZtDgl4DmasFg7gOB3JYbphV5g== +big-integer@^1.6.17: + version "1.6.52" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.52.tgz#60a887f3047614a8e1bffe5d7173490a97dc8c85" + integrity sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg== + binary-extensions@^2.0.0, binary-extensions@^2.2.0: version "2.3.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" @@ -4122,9 +4321,17 @@ binary-search@^1.3.5: resolved "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz" integrity sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA== +binary@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg== + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + bl@^1.2.3: version "1.2.3" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + resolved "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz" integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: readable-stream "^2.3.5" @@ -4151,17 +4358,22 @@ bl@^6.0.3: bluebird@^3.5.0: version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== +bluebird@~3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3" + integrity sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA== + bn.js@^4.0.0: version "4.12.2" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.2.tgz#3d8fed6796c24e177737f7cc5172ee04ef39ec99" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz" integrity sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw== body-parser@^1.20.3, body-parser@~1.20.3: version "1.20.4" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.4.tgz#f8e20f4d06ca8a50a71ed329c15dccad1cdc547f" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz" integrity sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA== dependencies: bytes "~3.1.2" @@ -4179,7 +4391,7 @@ body-parser@^1.20.3, body-parser@~1.20.3: body-parser@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.1.tgz#6df606b0eb0a6e3f783dde91dde182c24c82438c" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz" integrity sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw== dependencies: bytes "^3.1.2" @@ -4215,6 +4427,13 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +brace-expansion@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.3.tgz#0493338bdd58e319b1039c67cf7ee439892c01d9" + integrity sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA== + dependencies: + balanced-match "^1.0.0" + braces@~3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" @@ -4227,9 +4446,9 @@ bson@^6.2.0: resolved "https://registry.npmjs.org/bson/-/bson-6.6.0.tgz" integrity sha512-BVINv2SgcMjL4oYbBuCQTpE3/VKOSxrOA8Cj/wQP7izSzlBGVomdm+TcUd0Pzy0ytLSSDweCKQ6X3f5veM5LQA== -buffer-crc32@~0.2.3: +buffer-crc32@^0.2.1, buffer-crc32@^0.2.13, buffer-crc32@~0.2.3: version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + resolved "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== buffer-equal-constant-time@1.0.1: @@ -4242,6 +4461,11 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer-indexof-polyfill@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz#d2732135c5999c64b277fcf9b1abe3498254729c" + integrity sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A== + buffer@^5.5.0: version "5.7.1" resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" @@ -4258,6 +4482,11 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ== + busboy@^1.0.0: version "1.6.0" resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" @@ -4272,7 +4501,7 @@ bytes@^3.1.2, bytes@~3.1.2: call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: es-errors "^1.3.0" @@ -4291,7 +4520,7 @@ call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6: call-bind@^1.0.7, call-bind@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== dependencies: call-bind-apply-helpers "^1.0.0" @@ -4301,7 +4530,7 @@ call-bind@^1.0.7, call-bind@^1.0.8: call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== dependencies: call-bind-apply-helpers "^1.0.2" @@ -4309,7 +4538,7 @@ call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@6: @@ -4319,7 +4548,7 @@ camelcase@6: canvas@^3.1.0: version "3.2.1" - resolved "https://registry.yarnpkg.com/canvas/-/canvas-3.2.1.tgz#8f0390569f36b94bffba9c0e7aed6948875aec7b" + resolved "https://registry.npmjs.org/canvas/-/canvas-3.2.1.tgz" integrity sha512-ej1sPFR5+0YWtaVp6S1N1FVz69TQCqmrkGeRvQxZeAB1nAIcjNTHVwrZtYtWFFBmQsF40/uDLehsW5KuYC99mg== dependencies: node-addon-api "^7.0.0" @@ -4327,9 +4556,16 @@ canvas@^3.1.0: caseless@~0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ== + dependencies: + traverse ">=0.3.0 <0.4" + chalk-template@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz" @@ -4357,14 +4593,14 @@ charenc@0.0.2: chart.js@^4.5.1: version "4.5.1" - resolved "https://registry.yarnpkg.com/chart.js/-/chart.js-4.5.1.tgz#19dd1a9a386a3f6397691672231cb5fc9c052c35" + resolved "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz" integrity sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw== dependencies: "@kurkle/color" "^0.3.0" chartjs-node-canvas@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/chartjs-node-canvas/-/chartjs-node-canvas-5.0.0.tgz#cf44df02088ec316585b83580c7696541560729d" + resolved "https://registry.npmjs.org/chartjs-node-canvas/-/chartjs-node-canvas-5.0.0.tgz" integrity sha512-+Lc5phRWjb+UxAIiQpKgvOaG6Mw276YQx2jl2BrxoUtI3A4RYTZuGM5Dq+s4ReYmCY42WEPSR6viF3lDSTxpvw== dependencies: canvas "^3.1.0" @@ -4482,7 +4718,7 @@ cohere-ai@^7.0.0: cohere-ai@^7.19.0: version "7.19.0" - resolved "https://registry.yarnpkg.com/cohere-ai/-/cohere-ai-7.19.0.tgz#bd27353c86b29da00705a3e2cbeaf4eef7e78d9c" + resolved "https://registry.npmjs.org/cohere-ai/-/cohere-ai-7.19.0.tgz" integrity sha512-TV8tYFUBB38GvcFHmS165+OAYmpMm8cqDk44LianFNxJMjUWbJf91hEs69PIDl8ghvI4r098GjolUlsiO1uR1A== dependencies: "@aws-sdk/client-sagemaker" "^3.583.0" @@ -4501,7 +4737,7 @@ cohere-ai@^7.19.0: cohere-ai@^7.9.3: version "7.20.0" - resolved "https://registry.yarnpkg.com/cohere-ai/-/cohere-ai-7.20.0.tgz#5d350747b4a24e8855b66475f1f4908c4908240e" + resolved "https://registry.npmjs.org/cohere-ai/-/cohere-ai-7.20.0.tgz" integrity sha512-h/3h3pcLXRUmkzp/W+/FWViEMcAFtSZ8YayCTFQXpib112uNSj3feApOtJg7v9lreWR1t7gznhE6N9KNCX5FOA== dependencies: "@aws-crypto/sha256-js" "^5.2.0" @@ -4598,7 +4834,7 @@ command-exists@^1.2.9: command-line-args@^5.2.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz" integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== dependencies: array-back "^3.1.0" @@ -4608,7 +4844,7 @@ command-line-args@^5.2.1: command-line-args@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-6.0.1.tgz#cbd1efb4f72b285dbd54bde9a8585c2d9694b070" + resolved "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz" integrity sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg== dependencies: array-back "^6.2.2" @@ -4618,7 +4854,7 @@ command-line-args@^6.0.1: command-line-usage@^7.0.0: version "7.0.3" - resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-7.0.3.tgz#6bce992354f6af10ecea2b631bfdf0c8b3bfaea3" + resolved "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz" integrity sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q== dependencies: array-back "^6.2.2" @@ -4651,6 +4887,16 @@ commander@^8.0.0: resolved "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== +compress-commons@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/compress-commons/-/compress-commons-4.1.2.tgz#6542e59cb63e1f46a8b21b0e06f9a32e4c8b06df" + integrity sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg== + dependencies: + buffer-crc32 "^0.2.13" + crc32-stream "^4.0.2" + normalize-path "^3.0.0" + readable-stream "^3.6.0" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" @@ -4668,12 +4914,12 @@ concat-stream@^1.5.2: content-disposition@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.1.tgz#a8b7bbeb2904befdfb6787e5c0c086959f605f9b" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz" integrity sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q== content-disposition@~0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz" integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: safe-buffer "5.2.1" @@ -4685,7 +4931,7 @@ content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5: convict@^6.2.4: version "6.2.4" - resolved "https://registry.yarnpkg.com/convict/-/convict-6.2.4.tgz#be290672bf6397eec808d3b11fc5f71785b02a4b" + resolved "https://registry.npmjs.org/convict/-/convict-6.2.4.tgz" integrity sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ== dependencies: lodash.clonedeep "^4.5.0" @@ -4693,22 +4939,22 @@ convict@^6.2.4: cookie-signature@^1.2.1: version "1.2.2" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz" integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== cookie-signature@~1.0.6: version "1.0.7" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.7.tgz#ab5dd7ab757c54e60f37ef6550f481c426d10454" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz" integrity sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA== cookie@^0.7.1, cookie@~0.7.1: version "0.7.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz" integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== core-util-is@1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== core-util-is@~1.0.0: @@ -4724,6 +4970,19 @@ cors@^2.8.5: object-assign "^4" vary "^1" +crc-32@^1.2.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +crc32-stream@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/crc32-stream/-/crc32-stream-4.0.3.tgz#85dd677eb78fa7cad1ba17cc506a597d41fc6f33" + integrity sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw== + dependencies: + crc-32 "^1.2.0" + readable-stream "^3.4.0" + cron-validate@^1.4.5: version "1.4.5" resolved "https://registry.npmjs.org/cron-validate/-/cron-validate-1.4.5.tgz" @@ -4747,7 +5006,7 @@ cross-fetch@^3.1.5: cross-spawn@^7.0.1, cross-spawn@^7.0.3, cross-spawn@^7.0.5, cross-spawn@^7.0.6: version "7.0.6" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== dependencies: path-key "^3.1.0" @@ -4775,6 +5034,14 @@ css-what@^6.1.0: resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== +cssstyle@^4.2.1: + version "4.6.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-4.6.0.tgz#ea18007024e3167f4f105315f3ec2d982bf48ed9" + integrity sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg== + dependencies: + "@asamuzakjp/css-color" "^3.2.0" + rrweb-cssom "^0.8.0" + custom-error-instance@2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/custom-error-instance/-/custom-error-instance-2.1.1.tgz" @@ -4782,11 +5049,19 @@ custom-error-instance@2.1.1: dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz" integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== dependencies: assert-plus "^1.0.0" +data-urls@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-5.0.0.tgz#2f76906bce1824429ffecb6920f45a0b30f00dde" + integrity sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg== + dependencies: + whatwg-mimetype "^4.0.0" + whatwg-url "^14.0.0" + data-view-buffer@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz" @@ -4798,7 +5073,7 @@ data-view-buffer@^1.0.1: data-view-buffer@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz" integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== dependencies: call-bound "^1.0.3" @@ -4816,7 +5091,7 @@ data-view-byte-length@^1.0.1: data-view-byte-length@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz" integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== dependencies: call-bound "^1.0.3" @@ -4834,7 +5109,7 @@ data-view-byte-offset@^1.0.0: data-view-byte-offset@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz" integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== dependencies: call-bound "^1.0.2" @@ -4846,6 +5121,11 @@ dayjs@^1.11.7: resolved "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz" integrity sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg== +dayjs@^1.8.34: + version "1.11.20" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.20.tgz#88d919fd639dc991415da5f4cb6f1b6650811938" + integrity sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ== + debug@2.6.9: version "2.6.9" resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" @@ -4869,7 +5149,7 @@ debug@^3.2.7: debug@^4.3.5, debug@^4.4.0, debug@^4.4.3: version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== dependencies: ms "^2.1.3" @@ -4879,6 +5159,11 @@ decamelize@1.2.0: resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== +decimal.js@^10.5.0: + version "10.6.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.6.0.tgz#e649a43e3ab953a72192ff5983865e509f37ed9a" + integrity sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg== + decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" @@ -4903,12 +5188,12 @@ deepmerge@^4.2.2: default-shell@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/default-shell/-/default-shell-2.2.0.tgz#31481c19747bfe59319b486591643eaf115a1864" + resolved "https://registry.npmjs.org/default-shell/-/default-shell-2.2.0.tgz" integrity sha512-sPpMZcVhRQ0nEMDtuMJ+RtCxt7iHPAMBU+I4tAlo5dU1sjRpNax0crj6nR3qKpvVnckaQ9U38enXcwW9nZJeCw== define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: es-define-property "^1.0.0" @@ -4956,7 +5241,7 @@ detect-libc@^2.0.0, detect-libc@^2.0.2: diff@7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-7.0.0.tgz#3fb34d387cd76d803f6eebea67b921dab0182a9a" + resolved "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz" integrity sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw== digest-fetch@^1.3.0: @@ -4974,6 +5259,18 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +docx@9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/docx/-/docx-9.6.1.tgz#c3f173b46be5de455bc5a8eb108923e2e46224e3" + integrity sha512-ZJja9/KBUuFC109sCMzovoq2GR2wCG/AuxivjA+OHj/q0TEgJIm3S7yrlUxIy3B+bV8YDj/BiHfWyrRFmyWpDQ== + dependencies: + "@types/node" "^25.2.3" + hash.js "^1.1.7" + jszip "^3.10.1" + nanoid "^5.1.3" + xml "^1.0.1" + xml-js "^1.6.8" + dom-serializer@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz" @@ -4995,6 +5292,13 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" +dompurify@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.3.3.tgz#680cae8af3e61320ddf3666a3bc843f7b291b2b6" + integrity sha512-Oj6pzI2+RqBfFG+qOaOLbFXLQ90ARpcGG6UePL82bJLtdsa6CYJD7nmiU8MW9nQNOtCHV3lZ/Bzq1X0QYbBZCA== + optionalDependencies: + "@types/trusted-types" "^2.0.7" + domutils@^3.0.1: version "3.1.0" resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz" @@ -5020,16 +5324,23 @@ dotenv@^16.0.3: dunder-proto@^1.0.0, dunder-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== dependencies: call-bind-apply-helpers "^1.0.1" es-errors "^1.3.0" gopd "^1.2.0" +duplexer2@~0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== + dependencies: + readable-stream "^2.0.2" + ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz" integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== dependencies: jsbn "~0.1.0" @@ -5044,7 +5355,7 @@ ecdsa-sig-formatter@1.0.11: ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== elevenlabs@^0.5.0: @@ -5076,7 +5387,7 @@ encode32@^1.1.0: encodeurl@^2.0.0, encodeurl@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz" integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== encodeurl@~1.0.2: @@ -5111,6 +5422,11 @@ entities@^4.2.0, entities@^4.5.0: resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== +entities@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.1.tgz#c28c34a43379ca7f61d074130b2f5f7020a30694" + integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== + es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.1, es-abstract@^1.23.2, es-abstract@^1.23.3: version "1.23.3" resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz" @@ -5165,7 +5481,7 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23 es-abstract@^1.23.5, es-abstract@^1.23.6, es-abstract@^1.23.9: version "1.24.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.1.tgz#f0c131ed5ea1bb2411134a8dd94def09c46c7899" + resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz" integrity sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw== dependencies: array-buffer-byte-length "^1.0.2" @@ -5239,12 +5555,12 @@ es-aggregate-error@^1.0.9: es-define-property@^1.0.0, es-define-property@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== es-iterator-helpers@^1.0.17: @@ -5269,7 +5585,7 @@ es-iterator-helpers@^1.0.17: es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" @@ -5285,7 +5601,7 @@ es-set-tostringtag@^2.0.3: es-set-tostringtag@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz" integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: es-errors "^1.3.0" @@ -5311,7 +5627,7 @@ es-to-primitive@^1.2.1: es-to-primitive@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + resolved "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz" integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: is-callable "^1.2.7" @@ -5325,7 +5641,7 @@ escalade@^3.1.1: escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== escape-string-regexp@^4.0.0: @@ -5390,12 +5706,12 @@ eslint-plugin-react@^7.33.2: eslint-plugin-unused-imports@^4.4.1: version "4.4.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz#a831f0a2937d7631eba30cb87091ab7d3a5da0e1" + resolved "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz" integrity sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ== eslint-scope@^8.4.0: version "8.4.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz" integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== dependencies: esrecurse "^4.3.0" @@ -5408,12 +5724,12 @@ eslint-visitor-keys@^3.4.3: eslint-visitor-keys@^4.2.1: version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== eslint@9: version "9.39.3" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.3.tgz#08d63df1533d7743c0907b32a79a7e134e63ee2f" + resolved "https://registry.npmjs.org/eslint/-/eslint-9.39.3.tgz" integrity sha512-VmQ+sifHUbI/IcSopBCF/HO3YiHQx/AVd3UVyYL6weuwW+HvON9VYn5l6Zl1WZzPWXPNZrSQpxwkkZ/VuvJZzg== dependencies: "@eslint-community/eslint-utils" "^4.8.0" @@ -5453,7 +5769,7 @@ eslint@9: espree@^10.0.1, espree@^10.4.0: version "10.4.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + resolved "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz" integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== dependencies: acorn "^8.15.0" @@ -5462,7 +5778,7 @@ espree@^10.0.1, espree@^10.4.0: esquery@^1.5.0: version "1.7.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz" integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== dependencies: estraverse "^5.1.0" @@ -5486,7 +5802,7 @@ esutils@^2.0.2: etag@^1.8.1, etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== event-target-shim@^5.0.0: @@ -5496,7 +5812,7 @@ event-target-shim@^5.0.0: eventemitter3@^3.0.0: version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" + resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz" integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== eventemitter3@^4.0.4: @@ -5511,19 +5827,34 @@ events@^3.0.0, events@^3.3.0: eventsource-parser@^3.0.0, eventsource-parser@^3.0.1: version "3.0.6" - resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.6.tgz#292e165e34cacbc936c3c92719ef326d4aeb4e90" + resolved "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz" integrity sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg== eventsource@^3.0.2: version "3.0.7" - resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-3.0.7.tgz#1157622e2f5377bb6aef2114372728ba0c156989" + resolved "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz" integrity sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA== dependencies: eventsource-parser "^3.0.1" +exceljs@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/exceljs/-/exceljs-4.4.0.tgz#cfb1cb8dcc82c760a9fc9faa9e52dadab66b0156" + integrity sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg== + dependencies: + archiver "^5.0.0" + dayjs "^1.8.34" + fast-csv "^4.3.1" + jszip "^3.10.1" + readable-stream "^3.6.0" + saxes "^5.0.1" + tmp "^0.2.0" + unzipper "^0.10.11" + uuid "^8.3.0" + execa@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: cross-spawn "^7.0.3" @@ -5548,12 +5879,12 @@ expr-eval@^2.0.2: express-rate-limit@^7.5.0: version "7.5.1" - resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.1.tgz#8c3a42f69209a3a1c969890070ece9e20a879dec" + resolved "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.1.tgz" integrity sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw== express@^4.21.2: version "4.22.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.22.1.tgz#1de23a09745a4fffdb39247b344bb5eaff382069" + resolved "https://registry.npmjs.org/express/-/express-4.22.1.tgz" integrity sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g== dependencies: accepts "~1.3.8" @@ -5590,7 +5921,7 @@ express@^4.21.2: express@^5.0.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/express/-/express-5.2.1.tgz#8f21d15b6d327f92b4794ecf8cb08a72f956ac04" + resolved "https://registry.npmjs.org/express/-/express-5.2.1.tgz" integrity sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw== dependencies: accepts "^2.0.0" @@ -5624,7 +5955,7 @@ express@^5.0.1: extend@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.1.0: @@ -5648,14 +5979,22 @@ extract-json-from-string@^1.0.1: extsprintf@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz" integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== extsprintf@^1.2.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + resolved "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz" integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== +fast-csv@^4.3.1: + version "4.3.6" + resolved "https://registry.yarnpkg.com/fast-csv/-/fast-csv-4.3.6.tgz#70349bdd8fe4d66b1130d8c91820b64a21bc4a63" + integrity sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw== + dependencies: + "@fast-csv/format" "4.3.5" + "@fast-csv/parse" "4.3.6" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" @@ -5683,14 +6022,14 @@ fast-levenshtein@^2.0.6: fast-levenshtein@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz#37b899ae47e1090e40e3fd2318e4d5f0142ca912" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz" integrity sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ== dependencies: fastest-levenshtein "^1.0.7" fast-uri@^3.0.1: version "3.1.0" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz" integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== fast-xml-parser@4.2.5: @@ -5702,14 +6041,14 @@ fast-xml-parser@4.2.5: fast-xml-parser@4.4.1: version "4.4.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz" integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== dependencies: strnum "^1.0.5" fast-xml-parser@5.2.5: version "5.2.5" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz#4809fdfb1310494e341098c25cb1341a01a9144a" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz" integrity sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ== dependencies: strnum "^2.1.0" @@ -5723,12 +6062,12 @@ fast-xml-parser@^4.3.5: fastest-levenshtein@^1.0.7: version "1.0.16" - resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" + resolved "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz" integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fd-slicer@~1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + resolved "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz" integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== dependencies: pend "~1.2.0" @@ -5740,14 +6079,14 @@ fecha@^4.2.0: file-entry-cache@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz" integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== dependencies: flat-cache "^4.0.0" file-type@^3.9.0: version "3.9.0" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" + resolved "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz" integrity sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA== fill-range@^7.0.1: @@ -5759,7 +6098,7 @@ fill-range@^7.0.1: finalhandler@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.1.tgz#a2c517a6559852bcdb06d1f8bd7f51b68fad8099" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz" integrity sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA== dependencies: debug "^4.4.0" @@ -5771,7 +6110,7 @@ finalhandler@^2.1.0: finalhandler@~1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.2.tgz#1ebc2228fc7673aac4a472c310cc05b77d852b88" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz" integrity sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg== dependencies: debug "2.6.9" @@ -5784,14 +6123,14 @@ finalhandler@~1.3.1: find-replace@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + resolved "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz" integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== dependencies: array-back "^3.0.1" find-replace@^5.0.2: version "5.0.2" - resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-5.0.2.tgz#fe27ff0be05975aef6fc679c1139bbabea564e26" + resolved "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz" integrity sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q== find-up@^5.0.0: @@ -5804,14 +6143,14 @@ find-up@^5.0.0: fix-path@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/fix-path/-/fix-path-4.0.0.tgz#bc1d14f038edb734ac46944a45454106952ca429" + resolved "https://registry.npmjs.org/fix-path/-/fix-path-4.0.0.tgz" integrity sha512-g31GX207Tt+psI53ZSaB1egprYbEN0ZYl90aKcO22A2LmCNnFsSq3b5YpoKp3E/QEiWByTXGJOkFQG4S07Bc1A== dependencies: shell-path "^3.0.0" flat-cache@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz" integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== dependencies: flatted "^3.2.9" @@ -5829,7 +6168,7 @@ flatbuffers@^1.12.0: flatbuffers@^24.3.25: version "24.12.23" - resolved "https://registry.yarnpkg.com/flatbuffers/-/flatbuffers-24.12.23.tgz#6eea59d2bcda0c5d59bcacefd6216348b3086883" + resolved "https://registry.npmjs.org/flatbuffers/-/flatbuffers-24.12.23.tgz" integrity sha512-dLVCAISd5mhls514keQzmEG6QHmUUsNuWsb4tFafIUwvvgDjXhtfAYSKOzt5SWOy+qByV5pbsDZ+Vb7HUOBEdA== flatted@^3.2.9: @@ -5870,14 +6209,14 @@ for-each@^0.3.3: for-each@^0.3.5: version "0.3.5" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz" integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: is-callable "^1.2.7" forever-agent@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz" integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== form-data-encoder@1.7.2: @@ -5887,7 +6226,7 @@ form-data-encoder@1.7.2: form-data-encoder@^4.0.2, form-data-encoder@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-4.1.0.tgz#497cedc94810bd5d53b99b5d4f6c152d5cbc9db2" + resolved "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.1.0.tgz" integrity sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw== form-data@3.0.4, form-data@^3.0.0: @@ -5927,7 +6266,7 @@ formdata-node@^6.0.3: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2, fresh@~0.5.2: @@ -5937,7 +6276,7 @@ fresh@0.5.2, fresh@~0.5.2: fresh@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" + resolved "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz" integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== fs-constants@^1.0.0: @@ -5955,9 +6294,19 @@ fsevents@~2.3.2: resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== +fstream@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + function-bind@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: @@ -5972,7 +6321,7 @@ function.prototype.name@^1.1.5, function.prototype.name@^1.1.6: function.prototype.name@^1.1.8: version "1.1.8" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz" integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: call-bind "^1.0.8" @@ -6017,7 +6366,7 @@ get-intrinsic@^1.2.1, get-intrinsic@^1.2.3: get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: call-bind-apply-helpers "^1.0.2" @@ -6033,7 +6382,7 @@ get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@ get-proto@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== dependencies: dunder-proto "^1.0.1" @@ -6041,7 +6390,7 @@ get-proto@^1.0.1: get-stream@^6.0.0: version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== get-symbol-description@^1.0.2: @@ -6055,7 +6404,7 @@ get-symbol-description@^1.0.2: get-symbol-description@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz" integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: call-bound "^1.0.3" @@ -6064,7 +6413,7 @@ get-symbol-description@^1.1.0: getpass@^0.1.1: version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz" integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== dependencies: assert-plus "^1.0.0" @@ -6088,7 +6437,7 @@ glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" -glob@^7.1.7: +glob@^7.1.3, glob@^7.1.4, glob@^7.1.7, glob@^7.2.3: version "7.2.3" resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -6102,12 +6451,12 @@ glob@^7.1.7: globals@^14.0.0: version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + resolved "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz" integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== globals@^17.4.0: version "17.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-17.4.0.tgz#33d7d297ed1536b388a0e2f4bcd0ff19c8ff91b5" + resolved "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz" integrity sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw== globalthis@^1.0.3, globalthis@^1.0.4: @@ -6120,9 +6469,14 @@ globalthis@^1.0.3, globalthis@^1.0.4: gopd@^1.0.1, gopd@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== +graceful-fs@^4.1.2, graceful-fs@^4.2.0, graceful-fs@^4.2.2: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + graphql-request@^5.2.0: version "5.2.0" resolved "https://registry.npmjs.org/graphql-request/-/graphql-request-5.2.0.tgz" @@ -6160,14 +6514,14 @@ has-flag@^4.0.0: has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" has-proto@^1.0.1, has-proto@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz" integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== dependencies: dunder-proto "^1.0.0" @@ -6184,7 +6538,7 @@ has-symbols@^1.0.2: has-symbols@^1.0.3, has-symbols@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: @@ -6194,9 +6548,17 @@ has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: dependencies: has-symbols "^1.0.3" +hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: function-bind "^1.1.2" @@ -6239,6 +6601,13 @@ hermes-parser@0.20.1: dependencies: hermes-estree "0.20.1" +html-encoding-sniffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz#696df529a7cfd82446369dc5193e590a3735b448" + integrity sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ== + dependencies: + whatwg-encoding "^3.1.1" + htmlparser2@^9.1.0: version "9.1.0" resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz" @@ -6251,7 +6620,7 @@ htmlparser2@^9.1.0: http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -6262,7 +6631,7 @@ http-errors@2.0.0: http-errors@^2.0.0, http-errors@~2.0.0, http-errors@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.1.tgz#36d2f65bc909c8790018dd36fb4d93da6caae06b" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz" integrity sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ== dependencies: depd "~2.0.0" @@ -6271,9 +6640,9 @@ http-errors@^2.0.0, http-errors@~2.0.0, http-errors@~2.0.1: statuses "~2.0.2" toidentifier "~1.0.1" -http-proxy-agent@^7.0.0: +http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.2: version "7.0.2" - resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== dependencies: agent-base "^7.1.0" @@ -6281,7 +6650,7 @@ http-proxy-agent@^7.0.0: http-signature@~1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" + resolved "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz" integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== dependencies: assert-plus "^1.0.0" @@ -6290,7 +6659,7 @@ http-signature@~1.4.0: http_ece@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/http_ece/-/http_ece-1.2.0.tgz#84d5885f052eae8c9b075eee4d2eb5105f114479" + resolved "https://registry.npmjs.org/http_ece/-/http_ece-1.2.0.tgz" integrity sha512-JrF8SSLVmcvc5NducxgyOrKXe3EsyHMgBFgSaIUGmArKe+rwr0uphRkRXvwiom3I+fpIfoItveHrfudL8/rxuA== https-proxy-agent@^7.0.0: @@ -6301,14 +6670,19 @@ https-proxy-agent@^7.0.0: agent-base "^7.0.2" debug "4" -https-proxy-agent@^7.0.2: +https-proxy-agent@^7.0.2, https-proxy-agent@^7.0.6: version "7.0.6" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz" integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== dependencies: agent-base "^7.1.2" debug "4" +https@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/https/-/https-1.0.0.tgz" + integrity sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg== + human-interval@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/human-interval/-/human-interval-2.0.1.tgz" @@ -6318,7 +6692,7 @@ human-interval@^2.0.1: human-signals@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== humanize-ms@^1.2.1: @@ -6337,14 +6711,14 @@ iconv-lite@0.6.3, iconv-lite@^0.6.2, iconv-lite@^0.6.3: iconv-lite@^0.4.24, iconv-lite@~0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iconv-lite@^0.7.0, iconv-lite@~0.7.0: version "0.7.1" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.1.tgz#d4af1d2092f2bb05aab6296e5e7cd286d2f15432" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz" integrity sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" @@ -6364,9 +6738,21 @@ ignore@^5.2.0: resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== +image-size@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz" + integrity sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw== + dependencies: + queue "6.0.2" + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + import-fresh@^3.2.1: version "3.3.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" @@ -6385,7 +6771,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -6406,7 +6792,7 @@ internal-slot@^1.0.7: internal-slot@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz" integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: es-errors "^1.3.0" @@ -6415,12 +6801,12 @@ internal-slot@^1.1.0: ip@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" + resolved "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz" integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-any-array@^2.0.0: @@ -6438,7 +6824,7 @@ is-array-buffer@^3.0.4: is-array-buffer@^3.0.5: version "3.0.5" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz" integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: call-bind "^1.0.8" @@ -6466,7 +6852,7 @@ is-bigint@^1.0.1: is-bigint@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + resolved "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz" integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: has-bigints "^1.0.2" @@ -6488,7 +6874,7 @@ is-boolean-object@^1.1.0: is-boolean-object@^1.2.1: version "1.2.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + resolved "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz" integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: call-bound "^1.0.3" @@ -6520,7 +6906,7 @@ is-data-view@^1.0.1: is-data-view@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz" integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== dependencies: call-bound "^1.0.2" @@ -6536,7 +6922,7 @@ is-date-object@^1.0.1, is-date-object@^1.0.5: is-date-object@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + resolved "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz" integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: call-bound "^1.0.2" @@ -6566,7 +6952,7 @@ is-finalizationregistry@^1.0.2: is-finalizationregistry@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + resolved "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz" integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== dependencies: call-bound "^1.0.3" @@ -6623,7 +7009,7 @@ is-number-object@^1.0.4: is-number-object@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz" integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: call-bound "^1.0.3" @@ -6634,9 +7020,14 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-promise@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== is-property@^1.0.2: @@ -6654,7 +7045,7 @@ is-regex@^1.1.4: is-regex@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + resolved "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz" integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: call-bound "^1.0.2" @@ -6676,7 +7067,7 @@ is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: is-shared-array-buffer@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz" integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: call-bound "^1.0.3" @@ -6707,7 +7098,7 @@ is-string@^1.0.5, is-string@^1.0.7: is-string@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + resolved "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz" integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: call-bound "^1.0.3" @@ -6722,7 +7113,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: is-symbol@^1.0.4, is-symbol@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + resolved "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz" integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: call-bound "^1.0.2" @@ -6738,14 +7129,14 @@ is-typed-array@^1.1.13: is-typed-array@^1.1.14, is-typed-array@^1.1.15: version "1.1.15" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz" integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: which-typed-array "^1.1.16" is-typedarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== is-valid-path@^0.1.1: @@ -6769,7 +7160,7 @@ is-weakref@^1.0.2: is-weakref@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + resolved "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz" integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: call-bound "^1.0.3" @@ -6801,7 +7192,7 @@ isarray@~1.0.0: isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== isomorphic-fetch@^3.0.0: @@ -6814,7 +7205,7 @@ isomorphic-fetch@^3.0.0: isstream@~0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== iterator.prototype@^1.1.2: @@ -6846,7 +7237,7 @@ joi@^17.11.0: jose@^6.1.1: version "6.1.3" - resolved "https://registry.yarnpkg.com/jose/-/jose-6.1.3.tgz#8453d7be88af7bb7d64a0481d6a35a0145ba3ea5" + resolved "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz" integrity sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ== js-base64@3.7.2: @@ -6856,7 +7247,7 @@ js-base64@3.7.2: js-base64@3.7.7: version "3.7.7" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.7.tgz#e51b84bf78fbf5702b9541e2cb7bfcb893b43e79" + resolved "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz" integrity sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw== js-md4@^0.3.2: @@ -6892,7 +7283,7 @@ js-yaml@^4.1.0: js-yaml@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz" integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== dependencies: argparse "^2.0.1" @@ -6904,9 +7295,35 @@ jsbi@^4.3.0: jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== +jsdom@26.1.0: + version "26.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-26.1.0.tgz#ab5f1c1cafc04bd878725490974ea5e8bf0c72b3" + integrity sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg== + dependencies: + cssstyle "^4.2.1" + data-urls "^5.0.0" + decimal.js "^10.5.0" + html-encoding-sniffer "^4.0.0" + http-proxy-agent "^7.0.2" + https-proxy-agent "^7.0.6" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.16" + parse5 "^7.2.1" + rrweb-cssom "^0.8.0" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^5.1.1" + w3c-xmlserializer "^5.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^3.1.1" + whatwg-mimetype "^4.0.0" + whatwg-url "^14.1.1" + ws "^8.18.0" + xml-name-validator "^5.0.0" + json-bignum@^0.0.3: version "0.0.3" resolved "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz" @@ -6929,7 +7346,7 @@ json-schema-traverse@^1.0.0: json-schema@0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz" integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: @@ -6939,7 +7356,7 @@ json-stable-stringify-without-jsonify@^1.0.1: json-stringify-safe@~5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz" integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== json5@^2.2.3: @@ -6975,7 +7392,7 @@ jsonwebtoken@^9.0.0: jsprim@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + resolved "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz" integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== dependencies: assert-plus "1.0.0" @@ -6993,6 +7410,16 @@ jsprim@^2.0.2: object.assign "^4.1.4" object.values "^1.1.6" +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + jwa@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz" @@ -7029,7 +7456,7 @@ jws@^4.0.0: keyv@^4.5.4: version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" @@ -7075,7 +7502,7 @@ langchainhub@~0.0.8: langsmith@^0.1.56-rc.1: version "0.1.68" - resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.1.68.tgz#848332e822fe5e6734a07f1c36b6530cc1798afb" + resolved "https://registry.npmjs.org/langsmith/-/langsmith-0.1.68.tgz" integrity sha512-otmiysWtVAqzMx3CJ4PrtUBhWRG5Co8Z4o7hSZENPjlit9/j3/vm3TSvbaxpDYakZxtMjhkcJTqrdYFipISEiQ== dependencies: "@types/uuid" "^10.0.0" @@ -7107,6 +7534,13 @@ langsmith@~0.1.39: p-retry "4" uuid "^9.0.0" +lazystream@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.1.tgz#494c831062f1f9408251ec44db1cba29242a2638" + integrity sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw== + dependencies: + readable-stream "^2.0.5" + levn@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" @@ -7115,11 +7549,23 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + lil-http-terminator@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/lil-http-terminator/-/lil-http-terminator-1.2.3.tgz" integrity sha512-vQcHSwAFq/kTR2cG6peOVS7SjgksGgSPeH0G2lkw+buue33thE/FCHdn10wJXXshc5RswFy0Iaz48qA2Busw5Q== +listenercount@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" + integrity sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ== + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" @@ -7176,9 +7622,34 @@ lodash.camelcase@^4.3.0: lodash.clonedeep@^4.5.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== +lodash.defaults@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ== + +lodash.difference@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" + integrity sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA== + +lodash.escaperegexp@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" + integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.groupby@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz#0b08a1dcf68397c397855c3239783832df7403d1" + integrity sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw== + lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz" @@ -7189,11 +7660,26 @@ lodash.isboolean@^3.0.3: resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz" integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + lodash.isinteger@^4.0.4: version "4.0.4" resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz" integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== +lodash.isnil@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" + integrity sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng== + lodash.isnumber@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz" @@ -7209,9 +7695,14 @@ lodash.isstring@^4.0.1: resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz" integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== +lodash.isundefined@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz#23ef3d9535565203a66cefd5b830f848911afb48" + integrity sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA== + lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.once@^4.0.0: @@ -7219,6 +7710,16 @@ lodash.once@^4.0.0: resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== +lodash.union@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" + integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + lodash.uniqby@4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.5.0.tgz" @@ -7229,7 +7730,7 @@ lodash.uniqby@4.5.0: lodash@^4.17.15: version "4.17.23" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz" integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w== lodash@^4.17.20, lodash@^4.17.21: @@ -7266,6 +7767,11 @@ loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" +lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" @@ -7288,9 +7794,14 @@ lru-cache@^9.1.2: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz" integrity sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ== +marked@15.0.12: + version "15.0.12" + resolved "https://registry.yarnpkg.com/marked/-/marked-15.0.12.tgz#30722c7346e12d0a2d0207ab9b0c4f0102d86c4e" + integrity sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA== + math-intrinsics@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== md5@^2.3.0: @@ -7309,49 +7820,49 @@ media-typer@0.3.0: media-typer@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz" integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== merge-descriptors@1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz" integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge-descriptors@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz" integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.npmjs.org/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.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-db@^1.54.0: version "1.54.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz" integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mime-types@^3.0.0, mime-types@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.2.tgz#39002d4182575d5af036ffa118100f2524b2e2ab" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz" integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== dependencies: mime-db "^1.54.0" @@ -7368,7 +7879,7 @@ mime@^3.0.0: mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^3.1.0: @@ -7376,9 +7887,9 @@ mimic-response@^3.1.0: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimalistic-assert@^1.0.0: +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimatch@^3.1.1, minimatch@^3.1.2: @@ -7390,11 +7901,18 @@ minimatch@^3.1.1, minimatch@^3.1.2: minimatch@^3.1.3: version "3.1.5" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz" integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== dependencies: brace-expansion "^1.1.7" +minimatch@^5.1.0: + version "5.1.9" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.9.tgz#1293ef15db0098b394540e8f9f744f9fda8dee4b" + integrity sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6: version "1.2.8" resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" @@ -7405,7 +7923,7 @@ mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== -mkdirp@^0.5.4: +"mkdirp@>=0.5 0", mkdirp@^0.5.4: version "0.5.6" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -7460,7 +7978,7 @@ ms@2.0.0: ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3, ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: @@ -7482,7 +8000,7 @@ mssql@^10.0.2: multer@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/multer/-/multer-2.0.0.tgz#47076aa0f7c2c2fd273715e767c6962bf7f94326" + resolved "https://registry.npmjs.org/multer/-/multer-2.0.0.tgz" integrity sha512-bS8rPZurbAuHGAnApbM9d4h1wSoYqrOqkE+6a64KLMK9yWU7gJXBDDVklKQ3TPi9DRb85cRs6yXaC0+cjxRtRg== dependencies: append-field "^1.0.0" @@ -7530,6 +8048,11 @@ nanoclone@^0.2.1: resolved "https://registry.npmjs.org/nanoclone/-/nanoclone-0.2.1.tgz" integrity sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA== +nanoid@^5.1.3: + version "5.1.7" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-5.1.7.tgz#a9f09a4ce73ba0b88830af36ee49666bad7827b6" + integrity sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ== + napi-build-utils@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" @@ -7537,7 +8060,7 @@ napi-build-utils@^1.0.1: napi-build-utils@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz" integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== native-duplexpair@^1.0.0: @@ -7557,7 +8080,7 @@ negotiator@0.6.3: negotiator@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz" integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== node-abi@^3.3.0: @@ -7579,7 +8102,7 @@ node-addon-api@^6.1.0: node-addon-api@^7.0.0: version "7.1.1" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz" integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== node-domexception@1.0.0: @@ -7616,7 +8139,7 @@ node-modules-regexp@^1.0.0: node-telegram-bot-api@^0.67.0: version "0.67.0" - resolved "https://registry.yarnpkg.com/node-telegram-bot-api/-/node-telegram-bot-api-0.67.0.tgz#dc2caf02adcbf2408ecf5ea099ea25a800b30104" + resolved "https://registry.npmjs.org/node-telegram-bot-api/-/node-telegram-bot-api-0.67.0.tgz" integrity sha512-gO7o/dPcdFSUuFuPiAYBxV7bcN+vQL3pfaHN8P4z8fPtFstN05xVmhMFOth57DANGDKBpzW3rMRo7debOlUI1w== dependencies: "@cypress/request" "^3.0.8" @@ -7659,7 +8182,7 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: npm-run-path@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" @@ -7681,6 +8204,11 @@ numbered@^1.1.0: resolved "https://registry.npmjs.org/numbered/-/numbered-1.1.0.tgz" integrity sha512-pv/ue2Odr7IfYOO0byC1KgBI10wo5YDauLhxY6/saNzAdAs0r1SotGCPzzCLNPL0xtrAwWRialLu23AAu9xO1g== +nwsapi@^2.2.16: + version "2.2.23" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.23.tgz#59712c3a88e6de2bb0b6ccc1070397267019cf6c" + integrity sha512-7wfH4sLbt4M0gCDzGE6vzQBo0bfTKjU7Sfpqy/7gs1qBfYz2vEJH6vXcBKpO3+6Yu1telwd0t9HpyOoLEQQbIQ== + object-assign@^4, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" @@ -7688,7 +8216,7 @@ object-assign@^4, object-assign@^4.1.1: object-inspect@^1.13.1, object-inspect@^1.13.3, object-inspect@^1.13.4: version "1.13.4" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: @@ -7708,7 +8236,7 @@ object.assign@^4.1.4, object.assign@^4.1.5: object.assign@^4.1.7: version "4.1.7" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz" integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: call-bind "^1.0.8" @@ -7764,7 +8292,7 @@ ollama@^0.5.0: ollama@^0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/ollama/-/ollama-0.6.3.tgz#b188573dd0ccb3b4759c1f8fa85067cb17f6673c" + resolved "https://registry.npmjs.org/ollama/-/ollama-0.6.3.tgz" integrity sha512-KEWEhIqE5wtfzEIZbDCLH51VFZ6Z3ZSa6sIOg/E/tBV8S51flyqBOXi+bRxlOYKDf8i327zG9eSTb8IJxvm3Zg== dependencies: whatwg-fetch "^3.6.20" @@ -7792,7 +8320,7 @@ one-time@^1.0.0: onetime@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" @@ -7839,7 +8367,7 @@ open@^8.0.0: openai@4.95.1: version "4.95.1" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.95.1.tgz#7157697c2b150a546b13eb860180c4a6058051da" + resolved "https://registry.npmjs.org/openai/-/openai-4.95.1.tgz" integrity sha512-IqJy+ymeW+k/Wq+2YVN3693OQMMcODRtHEYOlz263MdUwnN/Dwdl9c2EXSxLLtGEHkSHAfvzpDMHI5MaWJKXjQ== dependencies: "@types/node" "^18.11.18" @@ -7902,7 +8430,7 @@ os-tmpdir@~1.0.2: own-keys@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + resolved "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz" integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== dependencies: get-intrinsic "^1.2.6" @@ -7963,9 +8491,14 @@ p-wait-for@3: dependencies: p-timeout "^3.0.0" +pako@^1.0.10, pako@^1.0.11, pako@^1.0.6, pako@~1.0.2: + version "1.0.11" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" @@ -7992,9 +8525,16 @@ parse5@^7.0.0, parse5@^7.1.2: dependencies: entities "^4.5.0" +parse5@^7.2.1: + version "7.3.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== + dependencies: + entities "^6.0.0" + parseurl@^1.3.3, parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-exists@^4.0.0: @@ -8019,22 +8559,32 @@ path-parse@^1.0.7: path-to-regexp@^8.0.0: version "8.3.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz" integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== path-to-regexp@~0.1.12: version "0.1.12" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz" integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== +pdf-lib@1.17.1: + version "1.17.1" + resolved "https://registry.yarnpkg.com/pdf-lib/-/pdf-lib-1.17.1.tgz#9e7dd21261a0c1fb17992580885b39e7d08f451f" + integrity sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw== + dependencies: + "@pdf-lib/standard-fonts" "^1.0.0" + "@pdf-lib/upng" "^1.0.1" + pako "^1.0.11" + tslib "^1.11.1" + pend@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + resolved "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz" integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== pg-cloudflare@^1.1.1: @@ -8114,7 +8664,7 @@ pirates@^3.0.2: pkce-challenge@^5.0.0: version "5.0.1" - resolved "https://registry.yarnpkg.com/pkce-challenge/-/pkce-challenge-5.0.1.tgz#3b4446865b17b1745e9ace2016a31f48ddf6230d" + resolved "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz" integrity sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ== platform@^1.3.6: @@ -8162,6 +8712,16 @@ posthog-node@^3.1.1: axios "^1.6.2" rusha "^0.8.14" +pptxgenjs@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pptxgenjs/-/pptxgenjs-4.0.1.tgz#cd0f202f62f74d950bcd217e90b766da8f73742e" + integrity sha512-TeJISr8wouAuXw4C1F/mC33xbZs/FuEG6nH9FG1Zj+nuPcGMP5YRHl6X+j3HSUnS1f3at6k75ZZXPMZlA5Lj9A== + dependencies: + "@types/node" "^22.8.1" + https "^1.0.0" + image-size "^1.2.1" + jszip "^3.10.1" + prebuild-install@^7.1.1: version "7.1.2" resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz" @@ -8182,7 +8742,7 @@ prebuild-install@^7.1.1: prebuild-install@^7.1.3: version "7.1.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz" integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== dependencies: detect-libc "^2.0.0" @@ -8285,7 +8845,7 @@ protobufjs@^7.2.4, protobufjs@^7.2.6: proxy-addr@^2.0.7, proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -8298,7 +8858,7 @@ proxy-from-env@^1.1.0: psl@^1.1.33: version "1.15.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + resolved "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz" integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== dependencies: punycode "^2.3.1" @@ -8310,7 +8870,7 @@ pstree.remy@^1.1.8: pump@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + resolved "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz" integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" @@ -8338,21 +8898,21 @@ qs@6.11.2: qs@^6.13.1, qs@^6.14.0, qs@~6.14.0: version "6.14.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + resolved "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz" integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: side-channel "^1.1.0" qs@~6.14.1: version "6.14.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.2.tgz#b5634cf9d9ad9898e31fba3504e866e8efb6798c" + resolved "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz" integrity sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q== dependencies: side-channel "^1.1.0" querystringify@^2.1.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz" integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== queue-tick@^1.0.1: @@ -8360,14 +8920,21 @@ queue-tick@^1.0.1: resolved "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz" integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== +queue@6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@^3.0.0, raw-body@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.2.tgz#3e3ada5ae5568f9095d84376fd3a49b8fb000a51" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz" integrity sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA== dependencies: bytes "~3.1.2" @@ -8377,7 +8944,7 @@ raw-body@^3.0.0, raw-body@^3.0.1: raw-body@~2.5.3: version "2.5.3" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.3.tgz#11c6650ee770a7de1b494f197927de0c923822e2" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz" integrity sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA== dependencies: bytes "~3.1.2" @@ -8400,7 +8967,7 @@ react-is@^16.13.1: resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== -readable-stream@^2.2.2, readable-stream@^2.3.5: +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.8" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== @@ -8444,6 +9011,13 @@ readable-stream@^4.5.2, readable-stream@^4.7.0: process "^0.11.10" string_decoder "^1.3.0" +readdir-glob@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584" + integrity sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA== + dependencies: + minimatch "^5.1.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -8471,7 +9045,7 @@ reflect.getprototypeof@^1.0.4: reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: version "1.0.10" - resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + resolved "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz" integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== dependencies: call-bind "^1.0.8" @@ -8500,7 +9074,7 @@ regexp.prototype.flags@^1.5.2: regexp.prototype.flags@^1.5.4: version "1.5.4" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz" integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: call-bind "^1.0.8" @@ -8512,7 +9086,7 @@ regexp.prototype.flags@^1.5.4: request-promise-core@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + resolved "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.3.tgz" integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: lodash "^4.17.15" @@ -8529,12 +9103,12 @@ require-from-string@^2.0.2: requires-port@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve@^2.0.0-next.5: @@ -8556,9 +9130,16 @@ rfdc@^1.3.0: resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz" integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== +rimraf@2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + router@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" + resolved "https://registry.npmjs.org/router/-/router-2.2.0.tgz" integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== dependencies: debug "^4.4.0" @@ -8567,6 +9148,11 @@ router@^2.2.0: parseurl "^1.3.3" path-to-regexp "^8.0.0" +rrweb-cssom@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz#3021d1b4352fbf3b614aaeed0bc0d5739abe0bc2" + integrity sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw== + rusha@^0.8.14: version "0.8.14" resolved "https://registry.npmjs.org/rusha/-/rusha-0.8.14.tgz" @@ -8584,7 +9170,7 @@ safe-array-concat@^1.1.2: safe-array-concat@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz" integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: call-bind "^1.0.8" @@ -8605,7 +9191,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: safe-push-apply@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + resolved "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz" integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== dependencies: es-errors "^1.3.0" @@ -8622,7 +9208,7 @@ safe-regex-test@^1.0.3: safe-regex-test@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz" integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== dependencies: call-bound "^1.0.2" @@ -8641,9 +9227,28 @@ safe-timers@^1.1.0: "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sax@^1.2.4: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.0.tgz#da59637629307b97e7c4cb28e080a7bc38560d5b" + integrity sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA== + +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + semver@^5.7.1: version "5.7.2" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" @@ -8663,7 +9268,7 @@ semver@^7.3.5, semver@^7.5.4: semver@^7.6.3: version "7.7.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + resolved "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz" integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== semver@~7.0.0: @@ -8673,7 +9278,7 @@ semver@~7.0.0: send@0.19.0: version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + resolved "https://registry.npmjs.org/send/-/send-0.19.0.tgz" integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" @@ -8692,7 +9297,7 @@ send@0.19.0: send@^1.1.0, send@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212" + resolved "https://registry.npmjs.org/send/-/send-1.2.0.tgz" integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw== dependencies: debug "^4.3.5" @@ -8709,7 +9314,7 @@ send@^1.1.0, send@^1.2.0: send@~0.19.0: version "0.19.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.1.tgz#1c2563b2ee4fe510b806b21ec46f355005a369f9" + resolved "https://registry.npmjs.org/send/-/send-0.19.1.tgz" integrity sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg== dependencies: debug "2.6.9" @@ -8733,7 +9338,7 @@ seq-queue@^0.0.5: serve-static@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz" integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ== dependencies: encodeurl "^2.0.0" @@ -8743,7 +9348,7 @@ serve-static@^2.2.0: serve-static@~1.16.2: version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz" integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: encodeurl "~2.0.0" @@ -8753,7 +9358,7 @@ serve-static@~1.16.2: set-function-length@^1.2.1, set-function-length@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: define-data-property "^1.1.4" @@ -8775,13 +9380,18 @@ set-function-name@^2.0.1, set-function-name@^2.0.2: set-proto@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + resolved "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz" integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== dependencies: dunder-proto "^1.0.1" es-errors "^1.3.0" es-object-atoms "^1.0.0" +setimmediate@^1.0.5, setimmediate@~1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + setprototypeof@1.2.0, setprototypeof@~1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" @@ -8803,19 +9413,19 @@ sharp@^0.32.0: shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/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.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-env@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/shell-env/-/shell-env-4.0.1.tgz#883302d9426095d398a39b102a851adb306b8cb8" + resolved "https://registry.npmjs.org/shell-env/-/shell-env-4.0.1.tgz" integrity sha512-w3oeZ9qg/P6Lu6qqwavvMnB/bwfsz67gPB3WXmLd/n6zuh7TWQZtGa3iMEdmua0kj8rivkwl+vUjgLWlqZOMPw== dependencies: default-shell "^2.0.0" @@ -8824,14 +9434,14 @@ shell-env@^4.0.1: shell-path@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/shell-path/-/shell-path-3.1.0.tgz#950671fe15de70fb4d984b886d55e8a2f10bfe33" + resolved "https://registry.npmjs.org/shell-path/-/shell-path-3.1.0.tgz" integrity sha512-s/9q9PEtcRmDTz69+cJ3yYBAe9yGrL7e46gm2bU4pQ9N48ecPK9QrGFnLwYgb4smOHskx4PL7wCNMktW2AoD+g== dependencies: shell-env "^4.0.1" side-channel-list@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: es-errors "^1.3.0" @@ -8839,7 +9449,7 @@ side-channel-list@^1.0.0: side-channel-map@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== dependencies: call-bound "^1.0.2" @@ -8849,7 +9459,7 @@ side-channel-map@^1.0.1: side-channel-weakmap@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== dependencies: call-bound "^1.0.2" @@ -8870,7 +9480,7 @@ side-channel@^1.0.4: side-channel@^1.0.6, side-channel@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== dependencies: es-errors "^1.3.0" @@ -8881,7 +9491,7 @@ side-channel@^1.0.6, side-channel@^1.1.0: signal-exit@^3.0.3: version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== signal-exit@^4.1.0: @@ -8939,7 +9549,7 @@ sqlstring@^2.3.2: sshpk@^1.18.0: version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz" integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" @@ -8959,22 +9569,22 @@ stack-trace@0.0.x: statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== statuses@^2.0.1, statuses@~2.0.1, statuses@~2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz" integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== stealthy-require@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + resolved "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz" integrity sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g== stop-iteration-iterator@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + resolved "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz" integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== dependencies: es-errors "^1.3.0" @@ -8987,7 +9597,7 @@ stoppable@^1.1.0: stream-read-all@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/stream-read-all/-/stream-read-all-3.0.1.tgz#60762ae45e61d93ba0978cda7f3913790052ad96" + resolved "https://registry.npmjs.org/stream-read-all/-/stream-read-all-3.0.1.tgz" integrity sha512-EWZT9XOceBPlVJRrYcykW8jyRSZYbkb/0ZK36uLEmoWVO5gxBOnntNTseNzfREsqxqdfEGQrD8SXQ3QWbBmq8A== streamsearch@^1.1.0: @@ -9039,7 +9649,7 @@ string.prototype.matchall@^4.0.10: string.prototype.trim@^1.2.10: version "1.2.10" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz" integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== dependencies: call-bind "^1.0.8" @@ -9071,7 +9681,7 @@ string.prototype.trimend@^1.0.8: string.prototype.trimend@^1.0.9: version "1.0.9" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz" integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: call-bind "^1.0.8" @@ -9111,19 +9721,19 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: strip-ansi@^7.0.1, strip-ansi@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.2.tgz#132875abde678c7ea8d691533f2e7e22bb744dba" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz" integrity sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA== dependencies: ansi-regex "^6.0.1" strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strip-json-comments@~2.0.1: @@ -9138,7 +9748,7 @@ strnum@^1.0.5: strnum@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.1.1.tgz#cf2a6e0cf903728b8b2c4b971b7e36b4e82d46ab" + resolved "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz" integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw== supports-color@^5.5.0: @@ -9182,6 +9792,11 @@ swagger-ui-express@^5.0.0: dependencies: swagger-ui-dist ">=5.0.0" +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + synckit@^0.8.6: version "0.8.8" resolved "https://registry.npmjs.org/synckit/-/synckit-0.8.8.tgz" @@ -9192,7 +9807,7 @@ synckit@^0.8.6: table-layout@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-3.0.2.tgz#69c2be44388a5139b48c59cf21e73b488021769a" + resolved "https://registry.npmjs.org/table-layout/-/table-layout-3.0.2.tgz" integrity sha512-rpyNZYRw+/C+dYkcQ3Pr+rLxW4CfHpXjPDnG7lYhdRoUcZTUt+KEsX+94RGp/aVp/MQU35JCITv2T/beY4m+hw== dependencies: "@75lb/deep-merge" "^1.1.1" @@ -9205,7 +9820,7 @@ table-layout@^3.0.0: table-layout@^4.1.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-4.1.1.tgz#0f72965de1a5c0c1419c9ba21cae4e73a2f73a42" + resolved "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz" integrity sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA== dependencies: array-back "^6.2.2" @@ -9232,7 +9847,7 @@ tar-fs@^3.0.4: bare-fs "^2.1.1" bare-path "^2.1.0" -tar-stream@^2.1.4: +tar-stream@^2.1.4, tar-stream@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== @@ -9281,12 +9896,12 @@ text-hex@1.0.x: tldts-core@^6.1.86: version "6.1.86" - resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8" + resolved "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz" integrity sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA== tldts@^6.1.32: version "6.1.86" - resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.86.tgz#087e0555b31b9725ee48ca7e77edc56115cd82f7" + resolved "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz" integrity sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ== dependencies: tldts-core "^6.1.86" @@ -9298,6 +9913,11 @@ tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +tmp@^0.2.0: + version "0.2.5" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8" + integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow== + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -9324,7 +9944,7 @@ touch@^3.1.0: tough-cookie@^4.1.3: version "4.1.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz" integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" @@ -9332,18 +9952,30 @@ tough-cookie@^4.1.3: universalify "^0.2.0" url-parse "^1.5.3" -tough-cookie@^5.0.0: +tough-cookie@^5.0.0, tough-cookie@^5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A== dependencies: tldts "^6.1.32" +tr46@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-5.1.1.tgz#96ae867cddb8fdb64a49cc3059a8d428bcf238ca" + integrity sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw== + dependencies: + punycode "^2.3.1" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ== + triple-beam@^1.3.0: version "1.4.1" resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" @@ -9354,6 +9986,11 @@ truncate@^3.0.0: resolved "https://registry.npmjs.org/truncate/-/truncate-3.0.0.tgz" integrity sha512-C+0Xojw7wZPl6MDq5UjMTuxZvBPK04mtdFet7k+GSZPINcvLZFCXg+15kWIL4wAqDB7CksIsKiRLbQ1wa7rKdw== +tslib@^1.11.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tslib@^2.2.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" @@ -9361,7 +9998,7 @@ tslib@^2.2.0, tslib@^2.6.2: tslib@^2.8.0, tslib@^2.8.1: version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz" integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tunnel-agent@^0.6.0: @@ -9373,7 +10010,7 @@ tunnel-agent@^0.6.0: tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== type-check@^0.4.0, type-check@~0.4.0: @@ -9398,7 +10035,7 @@ type-is@^1.6.4, type-is@~1.6.18: type-is@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" + resolved "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz" integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== dependencies: content-type "^1.0.5" @@ -9416,7 +10053,7 @@ typed-array-buffer@^1.0.2: typed-array-buffer@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz" integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: call-bound "^1.0.3" @@ -9436,7 +10073,7 @@ typed-array-byte-length@^1.0.1: typed-array-byte-length@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz" integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: call-bind "^1.0.8" @@ -9459,7 +10096,7 @@ typed-array-byte-offset@^1.0.2: typed-array-byte-offset@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz" integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: available-typed-arrays "^1.0.7" @@ -9484,7 +10121,7 @@ typed-array-length@^1.0.6: typed-array-length@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz" integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: call-bind "^1.0.7" @@ -9501,7 +10138,7 @@ typedarray@^0.0.6: typical@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + resolved "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz" integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== typical@^7.1.1: @@ -9511,7 +10148,7 @@ typical@^7.1.1: typical@^7.2.0: version "7.3.0" - resolved "https://registry.yarnpkg.com/typical/-/typical-7.3.0.tgz#930376be344228709f134613911fa22aa09617a4" + resolved "https://registry.npmjs.org/typical/-/typical-7.3.0.tgz" integrity sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw== unbox-primitive@^1.0.2: @@ -9526,7 +10163,7 @@ unbox-primitive@^1.0.2: unbox-primitive@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + resolved "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz" integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: call-bound "^1.0.3" @@ -9546,9 +10183,19 @@ undici-types@~5.26.4: undici-types@~6.19.2: version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz" integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +undici-types@~7.18.0: + version "7.18.2" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.18.2.tgz#29357a89e7b7ca4aef3bf0fd3fd0cd73884229e9" + integrity sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w== + undici@^6.19.5: version "6.21.1" resolved "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz" @@ -9563,7 +10210,7 @@ undici@~5.28.4: universalify@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz" integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== unpipe@~1.0.0: @@ -9571,6 +10218,22 @@ unpipe@~1.0.0: resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== +unzipper@^0.10.11: + version "0.10.14" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.10.14.tgz#d2b33c977714da0fbc0f82774ad35470a7c962b1" + integrity sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g== + dependencies: + big-integer "^1.6.17" + binary "~0.3.0" + bluebird "~3.4.1" + buffer-indexof-polyfill "~1.0.0" + duplexer2 "~0.1.4" + fstream "^1.0.12" + graceful-fs "^4.2.2" + listenercount "~1.0.1" + readable-stream "~2.3.6" + setimmediate "~1.0.4" + uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" @@ -9585,7 +10248,7 @@ url-join@4.0.1: url-parse@^1.5.3: version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz" integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== dependencies: querystringify "^2.1.1" @@ -9603,7 +10266,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== uuid-apikey@^1.5.3: @@ -9638,7 +10301,7 @@ vary@^1, vary@^1.1.2, vary@~1.1.2: verror@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz" integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== dependencies: assert-plus "^1.0.0" @@ -9663,6 +10326,13 @@ voyageai@^0.0.3-1: readable-stream "^4.5.2" url-join "4.0.1" +w3c-xmlserializer@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz#f925ba26855158594d907313cedd1476c5967f6c" + integrity sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA== + dependencies: + xml-name-validator "^5.0.0" + weaviate-ts-client@^1.4.0: version "1.6.0" resolved "https://registry.npmjs.org/weaviate-ts-client/-/weaviate-ts-client-1.6.0.tgz" @@ -9674,7 +10344,7 @@ weaviate-ts-client@^1.4.0: web-push@^3.6.7: version "3.6.7" - resolved "https://registry.yarnpkg.com/web-push/-/web-push-3.6.7.tgz#5f5e645951153e37ef90a6ddea5c150ea0f709e1" + resolved "https://registry.npmjs.org/web-push/-/web-push-3.6.7.tgz" integrity sha512-OpiIUe8cuGjrj3mMBFWY+e4MMIkW3SVT+7vEIjvD9kejGUypv8GPDf84JdPWskK8zMRIJ6xYGm+Kxr8YkPyA0A== dependencies: asn1.js "^5.3.0" @@ -9698,6 +10368,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + whatwg-encoding@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz" @@ -9715,6 +10390,14 @@ whatwg-mimetype@^4.0.0: resolved "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz" integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== +whatwg-url@^14.0.0, whatwg-url@^14.1.1: + version "14.2.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-14.2.0.tgz#4ee02d5d725155dae004f6ae95c73e7ef5d95663" + integrity sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw== + dependencies: + tr46 "^5.1.0" + webidl-conversions "^7.0.0" + whatwg-url@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" @@ -9736,7 +10419,7 @@ which-boxed-primitive@^1.0.2: which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + resolved "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz" integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== dependencies: is-bigint "^1.1.0" @@ -9765,7 +10448,7 @@ which-builtin-type@^1.1.3: which-builtin-type@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + resolved "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz" integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== dependencies: call-bound "^1.0.2" @@ -9805,7 +10488,7 @@ which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: which-typed-array@^1.1.16, which-typed-array@^1.1.19: version "1.1.20" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz" integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== dependencies: available-typed-arrays "^1.0.7" @@ -9818,7 +10501,7 @@ which-typed-array@^1.1.16, which-typed-array@^1.1.19: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" @@ -9879,7 +10562,7 @@ wrap-ansi@^7.0.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== ws@^7.5.10: @@ -9887,6 +10570,33 @@ ws@^7.5.10: resolved "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz" integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== +ws@^8.18.0: + version "8.20.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.0.tgz#4cd9532358eba60bc863aad1623dfb045a4d4af8" + integrity sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA== + +xml-js@^1.6.8: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xml-name-validator@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-5.0.0.tgz#82be9b957f7afdacf961e5980f1bf227c0bf7673" + integrity sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg== + +xml@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/xml/-/xml-1.0.1.tgz#78ba72020029c5bc87b8a81a3cfcd74b4a2fc1e5" + integrity sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + xtend@^4.0.0: version "4.0.2" resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" @@ -9909,7 +10619,7 @@ yaml@^2.2.1: yargs-parser@^20.2.7: version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== yargs-parser@^21.1.1: @@ -9932,7 +10642,7 @@ yargs@^17.7.2: yauzl@^2.9.2: version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + resolved "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz" integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== dependencies: buffer-crc32 "~0.2.3" @@ -9956,6 +10666,15 @@ yup@0.32.9: property-expr "^2.0.4" toposort "^2.0.2" +zip-stream@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/zip-stream/-/zip-stream-4.1.1.tgz#1337fe974dbaffd2fa9a1ba09662a66932bd7135" + integrity sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ== + dependencies: + archiver-utils "^3.0.4" + compress-commons "^4.1.2" + readable-stream "^3.6.0" + zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.22.4, zod-to-json-schema@^3.22.5: version "3.23.0" resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.0.tgz" @@ -9963,7 +10682,7 @@ zod-to-json-schema@^3.22.3, zod-to-json-schema@^3.22.4, zod-to-json-schema@^3.22 zod-to-json-schema@^3.25.0: version "3.25.0" - resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz#df504c957c4fb0feff467c74d03e6aab0b013e1c" + resolved "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz" integrity sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ== zod@^3.22.3, zod@^3.22.4: @@ -9973,5 +10692,5 @@ zod@^3.22.3, zod@^3.22.4: "zod@^3.25 || ^4.0": version "4.1.13" - resolved "https://registry.yarnpkg.com/zod/-/zod-4.1.13.tgz#93699a8afe937ba96badbb0ce8be6033c0a4b6b1" + resolved "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz" integrity sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==