From 04facd6a18527044fa094d35440a97c245480cba Mon Sep 17 00:00:00 2001 From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com> Date: Sun, 11 May 2025 12:39:13 +0530 Subject: [PATCH 01/26] feat: basic ai assistant setup and ui --- src/ace/commands.js | 8 + src/lib/commands.js | 5 + src/pages/aiAssistant/assistant.js | 204 ++++ src/pages/aiAssistant/assistant.module.scss | 1079 +++++++++++++++++++ src/pages/aiAssistant/index.js | 8 + 5 files changed, 1304 insertions(+) create mode 100644 src/pages/aiAssistant/assistant.js create mode 100644 src/pages/aiAssistant/assistant.module.scss create mode 100644 src/pages/aiAssistant/index.js diff --git a/src/ace/commands.js b/src/ace/commands.js index 516253d19..fd661c465 100644 --- a/src/ace/commands.js +++ b/src/ace/commands.js @@ -309,6 +309,14 @@ const commands = [ }, readOnly: true, }, + { + name: "openAiAssistant", + description: "AI Assistant", + exec() { + acode.exec("open", "ai_assistant"); + }, + readOnly: true, + }, { name: "openFileExplorer", description: "File Explorer", diff --git a/src/lib/commands.js b/src/lib/commands.js index 305eb35fc..a9d57b2e2 100644 --- a/src/lib/commands.js +++ b/src/lib/commands.js @@ -6,6 +6,7 @@ import select from "dialogs/select"; import fsOperation from "fileSystem"; import actions from "handlers/quickTools"; import recents from "lib/recents"; +import AiAssistant from "pages/aiAssistant"; import FileBrowser from "pages/fileBrowser"; import plugins from "pages/plugins"; import Problems from "pages/problems/problems"; @@ -187,6 +188,10 @@ export default { FileBrowser(); break; + case "ai_assistant": + AiAssistant(); + break; + default: return; } diff --git a/src/pages/aiAssistant/assistant.js b/src/pages/aiAssistant/assistant.js new file mode 100644 index 000000000..9c7465577 --- /dev/null +++ b/src/pages/aiAssistant/assistant.js @@ -0,0 +1,204 @@ +import EditorFile from "lib/editorFile"; +import styles from "./assistant.module.scss"; + +export default function openAIAssistantPage() { + const aiAssistantContainer = ( +
([\s\S]*?)<\/code><\/pre>/g,
+ (match, language, code) => {
+ language = language || "plaintext";
+
+ return `
+
+
+
+
+ ${language}
+
+
+
+
+
+
+
+
+ ${code}
+
+
+
+ Show more
+
+
+ `;
+ },
+ );
+
+ // Process all code blocks
+ const codeBlocks = messageContent.querySelectorAll(".code-block");
+ codeBlocks.forEach((codeBlock) => {
+ const codeContent = codeBlock.querySelector(".code-content");
+ const codeElement = codeBlock.querySelector("code");
+ const copyButton = codeBlock.querySelector(".code-copy");
+ const expandButton = codeBlock.querySelector(".code-expand");
+
+ // Apply Ace highlighting
if (codeElement) {
- const langMatch = codeElement.className.match(
- /language-(\w+)|(javascript)/,
- );
+ const langMatch = codeElement.className.match(/language-(\w+)/);
if (langMatch) {
const langMap = {
bash: "sh",
shell: "sh",
};
- const lang = langMatch[1] || langMatch[2];
+ const lang = langMatch[1];
const mappedLang = langMap[lang] || lang;
const highlight = ace.require("ace/ext/static_highlight");
- highlight(codeElement, {
- mode: `ace/mode/${mappedLang}`,
- theme: settings.value.editorTheme.startsWith("ace/theme/")
+ highlight.render(
+ codeElement.textContent,
+ `ace/mode/${mappedLang}`,
+ settings.value.editorTheme.startsWith("ace/theme/")
? settings.value.editorTheme
: "ace/theme/" + settings.value.editorTheme,
- });
+ 1,
+ true,
+ (highlighted) => {
+ aiTabInstance?.addStyle(highlighted.css);
+ codeElement.innerHTML = highlighted.html;
+ },
+ );
}
}
+ // copy functionality
copyButton.addEventListener("click", async () => {
- const code =
- pre.querySelector("code")?.textContent || pre.textContent;
+ const code = codeElement?.textContent || "";
try {
cordova.plugins.clipboard.copy(code);
- copyButton.textContent = "Copied!";
+ copyButton.querySelector("i").className = "icon check";
setTimeout(() => {
- copyButton.textContent = "Copy";
+ copyButton.querySelector("i").className = "icon copy";
}, 2000);
} catch (err) {
- copyButton.textContent = "Failed to copy";
+ copyButton.querySelector("i").className =
+ "icon warningreport_problem";
setTimeout(() => {
- copyButton.textContent = "Copy";
+ copyButton.querySelector("i").className = "icon copy";
}, 2000);
}
});
- pre.appendChild(copyButton);
+ // expand/collapse functionality
+ expandButton.addEventListener("click", () => {
+ const isExpanded = codeContent.classList.contains("expanded");
+ codeContent.classList.toggle("expanded", !isExpanded);
+ expandButton.innerHTML = isExpanded
+ ? ` Show more`
+ : ` Show less`;
+ });
+
+ // Only show expand button if content overflows
+ if (codeContent.scrollHeight <= codeContent.clientHeight) {
+ expandButton.style.display = "none";
+ }
});
+
currentController = null;
sendBtnRef.el.style.display = "block";
stopBtnRef.el.style.display = "none";
@@ -491,7 +546,7 @@ export default function openAIAssistantPage() {
}
// Create a new EditorFile instance for the AI Assistant tab
- new EditorFile("AI Assistant", {
+ aiTabInstance = new EditorFile("AI Assistant", {
uri: uri,
type: "page",
tabIcon: "file file_type_assistant",
diff --git a/src/pages/aiAssistant/assistant.module.scss b/src/pages/aiAssistant/assistant.module.scss
index 409e1e15d..de3322af3 100644
--- a/src/pages/aiAssistant/assistant.module.scss
+++ b/src/pages/aiAssistant/assistant.module.scss
@@ -380,6 +380,9 @@
margin: 0;
padding: 0.75rem;
}
+ .code-content pre code div {
+ background-color: inherit !important;
+ }
.code-expand {
display: flex;
From 375812258a99e2c8b0c20681aed751a4e8c9d8bc Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Fri, 30 May 2025 13:55:43 +0530
Subject: [PATCH 06/26] feat: show loader before ai response stream
---
src/pages/aiAssistant/assistant.js | 44 ++++++++++++---------
src/pages/aiAssistant/assistant.module.scss | 12 +++---
2 files changed, 33 insertions(+), 23 deletions(-)
diff --git a/src/pages/aiAssistant/assistant.js b/src/pages/aiAssistant/assistant.js
index 13cf6fd52..91d865ad6 100644
--- a/src/pages/aiAssistant/assistant.js
+++ b/src/pages/aiAssistant/assistant.js
@@ -77,7 +77,7 @@ export default function openAIAssistantPage() {
const showLoading = () => {
const loadingEl = tag("div", {
- className: "loading",
+ className: "ai_loading",
id: "loading-indicator",
});
const loadingDots = tag("div", {
@@ -91,14 +91,14 @@ export default function openAIAssistantPage() {
loadingDots.appendChild(dot);
}
- const text = tag("div", {
+ const text = tag("span", {
textContent: "AI is thinking...",
});
loadingEl.appendChild(loadingDots);
loadingEl.appendChild(text);
- messageContainerRef.append(loadingEl);
+ messageContainerRef.el.appendChild(loadingEl);
scrollToBottom();
};
@@ -175,7 +175,7 @@ export default function openAIAssistantPage() {
messageEl.appendChild(messageHeader);
messageEl.appendChild(messageContent);
- messageContainerRef.append(messageEl);
+ messageContainerRef.el.appendChild(messageEl);
scrollToBottom();
};
@@ -211,15 +211,8 @@ export default function openAIAssistantPage() {
chatInputRef.value = "";
chatInputRef.style.height = "auto";
- // Add assistant message placeholder to UI
- const assistantMsgId = generateMessageId();
- const assistantMessage = {
- id: assistantMsgId,
- role: "assistant",
- content: "",
- timestamp: Date.now(),
- };
- addMessage(assistantMessage);
+ // Show loading indicator
+ showLoading();
// Prepare inputs for agent
let inputs = { messages: [...chatHistory] };
@@ -228,17 +221,31 @@ export default function openAIAssistantPage() {
sendBtnRef.el.style.display = "none";
stopBtnRef.el.style.display = "block";
- try {
- const messageEl = messageContainerRef.el.querySelector(
- `#message-${assistantMsgId} .message-content`,
- );
- let streamedContent = "";
+ const assistantMsgId = generateMessageId();
+ try {
const stream = await agent.stream(inputs, {
streamMode: "messages",
signal: currentController.signal,
});
+ // Remove loading indicator
+ removeLoading();
+
+ // Add assistant message placeholder
+ const assistantMessage = {
+ id: assistantMsgId,
+ role: "assistant",
+ content: "",
+ timestamp: Date.now(),
+ };
+ addMessage(assistantMessage);
+
+ const messageEl = messageContainerRef.el.querySelector(
+ `#message-${assistantMsgId} .message-content`,
+ );
+ let streamedContent = "";
+
for await (const [message, _metadata] of stream) {
if (isAIMessageChunk(message) && message.tool_call_chunks?.length) {
streamedContent += message.tool_call_chunks[0].args;
@@ -262,6 +269,7 @@ export default function openAIAssistantPage() {
timeEl.textContent = formatTime(Date.now());
}
} catch (err) {
+ removeLoading();
if (/abort/i.test(err.message)) {
const messageEl = messageContainerRef.el.querySelector(
`#message-${assistantMsgId} .message-content`,
diff --git a/src/pages/aiAssistant/assistant.module.scss b/src/pages/aiAssistant/assistant.module.scss
index de3322af3..c732137b9 100644
--- a/src/pages/aiAssistant/assistant.module.scss
+++ b/src/pages/aiAssistant/assistant.module.scss
@@ -780,11 +780,13 @@
}
/* Loading indicator */
- .loading {
+ .ai_loading {
display: flex;
align-items: center;
+ justify-content: flex-start;
gap: 0.75rem;
padding: 1rem 1.5rem;
+ min-height: auto;
color: var(--secondary-text-color);
font-size: 0.875rem;
border-bottom: 1px solid var(--border-color);
@@ -805,18 +807,18 @@
}
.loading-dot:nth-child(1) {
- animation: pulse 1.5s infinite;
+ animation: bounce_dot_loading 1.5s infinite;
}
.loading-dot:nth-child(2) {
- animation: pulse 1.5s infinite 0.3s;
+ animation: bounce_dot_loading 1.5s infinite 0.3s;
}
.loading-dot:nth-child(3) {
- animation: pulse 1.5s infinite 0.6s;
+ animation: bounce_dot_loading 1.5s infinite 0.6s;
}
- @keyframes pulse {
+ @keyframes bounce_dot_loading {
0%,
100% {
opacity: 0.4;
From 6ae8ceaf6133cf4e1fe08664e89e93f1424ee27a Mon Sep 17 00:00:00 2001
From: vizzyfreezy <36118637+vizzyfreezy@users.noreply.github.com>
Date: Sun, 1 Jun 2025 05:13:12 +0100
Subject: [PATCH 07/26] feat: AI assistant with streaming chat,in memory
context with agentcheckpoint and sqlite db for storing chat history (#1)
---
package-lock.json | 1898 +++++++++++++++++++++++++++-
package.json | 7 +-
src/pages/aiAssistant/assistant.js | 1224 ++++++++++--------
src/pages/aiAssistant/db.js | 215 ++++
4 files changed, 2753 insertions(+), 591 deletions(-)
create mode 100644 src/pages/aiAssistant/db.js
diff --git a/package-lock.json b/package-lock.json
index 3b29d793a..76ab99d2a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -10,6 +10,10 @@
"license": "MIT",
"dependencies": {
"@deadlyjack/ajax": "^1.2.6",
+ "@langchain/core": "^0.3.57",
+ "@langchain/google-genai": "^0.2.10",
+ "@langchain/langgraph": "^0.2.74",
+ "@langchain/langgraph-swarm": "^0.0.3",
"@ungap/custom-elements": "^1.3.0",
"autosize": "^6.0.1",
"cordova": "12.0.0",
@@ -22,6 +26,7 @@
"html-tag-js": "^1.5.1",
"js-base64": "^3.7.7",
"jszip": "^3.10.1",
+ "langchain": "^0.3.27",
"markdown-it": "^14.1.0",
"markdown-it-anchor": "^9.2.0",
"markdown-it-github-alerts": "^0.3.0",
@@ -58,6 +63,7 @@
"cordova-plugin-server": "file:src/plugins/server",
"cordova-plugin-sftp": "file:src/plugins/sftp",
"cordova-plugin-system": "file:src/plugins/system",
+ "cordova-sqlite-storage": "^7.0.0",
"css-loader": "^7.1.2",
"mini-css-extract-plugin": "^2.9.0",
"path-browserify": "^1.0.1",
@@ -641,6 +647,8 @@
},
"node_modules/@babel/plugin-proposal-private-property-in-object": {
"version": "7.21.0-placeholder-for-preset-env.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
+ "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -882,6 +890,8 @@
},
"node_modules/@babel/plugin-syntax-unicode-sets-regex": {
"version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
+ "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1833,6 +1843,8 @@
},
"node_modules/@babel/preset-modules": {
"version": "0.1.6-no-external-plugins",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+ "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2083,6 +2095,12 @@
"node": ">=14.21.3"
}
},
+ "node_modules/@cfworker/json-schema": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.1.1.tgz",
+ "integrity": "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==",
+ "license": "MIT"
+ },
"node_modules/@chevrotain/cst-dts-gen": {
"version": "11.0.3",
"resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz",
@@ -2124,18 +2142,33 @@
},
"node_modules/@deadlyjack/ajax": {
"version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/@deadlyjack/ajax/-/ajax-1.2.6.tgz",
+ "integrity": "sha512-VwZU8YUflO2/V/dl3dluu+3jg8Ghz/W5fwxD5Z21OZXKeV73d+vStKVBe4wi+Av2KbTR35K7Z+5Q3iIpjB41MA==",
"license": "MIT"
},
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz",
+ "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=10.0.0"
}
},
+ "node_modules/@google/generative-ai": {
+ "version": "0.24.1",
+ "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.1.tgz",
+ "integrity": "sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
+ "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
"license": "ISC",
"dependencies": {
"string-width": "^5.1.2",
@@ -2161,6 +2194,8 @@
},
"node_modules/@isaacs/cliui/node_modules/ansi-styles": {
"version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -2171,10 +2206,14 @@
},
"node_modules/@isaacs/cliui/node_modules/emoji-regex": {
"version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"license": "MIT"
},
"node_modules/@isaacs/cliui/node_modules/string-width": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
"license": "MIT",
"dependencies": {
"eastasianwidth": "^0.2.0",
@@ -2190,6 +2229,8 @@
},
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
"version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
+ "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^6.0.1"
@@ -2203,6 +2244,8 @@
},
"node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
"version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^6.1.0",
@@ -2218,6 +2261,8 @@
},
"node_modules/@isaacs/string-locale-compare": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz",
+ "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==",
"license": "ISC"
},
"node_modules/@jridgewell/gen-mapping": {
@@ -2288,8 +2333,239 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@langchain/core": {
+ "version": "0.3.57",
+ "resolved": "https://registry.npmjs.org/@langchain/core/-/core-0.3.57.tgz",
+ "integrity": "sha512-jz28qCTKJmi47b6jqhQ6vYRTG5jRpqhtPQjriRTB5wR8mgvzo6xKs0fG/kExS3ZvM79ytD1npBvgf8i19xOo9Q==",
+ "license": "MIT",
+ "dependencies": {
+ "@cfworker/json-schema": "^4.0.2",
+ "ansi-styles": "^5.0.0",
+ "camelcase": "6",
+ "decamelize": "1.2.0",
+ "js-tiktoken": "^1.0.12",
+ "langsmith": "^0.3.29",
+ "mustache": "^4.2.0",
+ "p-queue": "^6.6.2",
+ "p-retry": "4",
+ "uuid": "^10.0.0",
+ "zod": "^3.22.4",
+ "zod-to-json-schema": "^3.22.3"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/@langchain/core/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/@langchain/core/node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@langchain/google-genai": {
+ "version": "0.2.10",
+ "resolved": "https://registry.npmjs.org/@langchain/google-genai/-/google-genai-0.2.10.tgz",
+ "integrity": "sha512-kIy0qhu7FAsShNTvuOx8uV+hf7mWk8OzJP5W9mjs1ovAIT1C9WqG1epkhexBfj4DAQfQ6E+m/oGtJ+CVsalspw==",
+ "license": "MIT",
+ "dependencies": {
+ "@google/generative-ai": "^0.24.0",
+ "uuid": "^11.1.0",
+ "zod-to-json-schema": "^3.22.4"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@langchain/core": ">=0.3.55 <0.4.0"
+ }
+ },
+ "node_modules/@langchain/google-genai/node_modules/uuid": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
+ "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/esm/bin/uuid"
+ }
+ },
+ "node_modules/@langchain/langgraph": {
+ "version": "0.2.74",
+ "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-0.2.74.tgz",
+ "integrity": "sha512-oHpEi5sTZTPaeZX1UnzfM2OAJ21QGQrwReTV6+QnX7h8nDCBzhtipAw1cK616S+X8zpcVOjgOtJuaJhXa4mN8w==",
+ "license": "MIT",
+ "dependencies": {
+ "@langchain/langgraph-checkpoint": "~0.0.17",
+ "@langchain/langgraph-sdk": "~0.0.32",
+ "uuid": "^10.0.0",
+ "zod": "^3.23.8"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@langchain/core": ">=0.2.36 <0.3.0 || >=0.3.40 < 0.4.0",
+ "zod-to-json-schema": "^3.x"
+ },
+ "peerDependenciesMeta": {
+ "zod-to-json-schema": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@langchain/langgraph-checkpoint": {
+ "version": "0.0.17",
+ "resolved": "https://registry.npmjs.org/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.0.17.tgz",
+ "integrity": "sha512-6b3CuVVYx+7x0uWLG+7YXz9j2iBa+tn2AXvkLxzEvaAsLE6Sij++8PPbS2BZzC+S/FPJdWsz6I5bsrqL0BYrCA==",
+ "license": "MIT",
+ "dependencies": {
+ "uuid": "^10.0.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@langchain/core": ">=0.2.31 <0.4.0"
+ }
+ },
+ "node_modules/@langchain/langgraph-checkpoint/node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@langchain/langgraph-sdk": {
+ "version": "0.0.78",
+ "resolved": "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.78.tgz",
+ "integrity": "sha512-skkUDmEhClWzlsr8jRaS1VpXVBISm5OFd0MUtS1jKRL5pn08K+IJRvHnlzgum9x7Dste9KXGcIGVoR7cNKJQrw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/json-schema": "^7.0.15",
+ "p-queue": "^6.6.2",
+ "p-retry": "4",
+ "uuid": "^9.0.0"
+ },
+ "peerDependencies": {
+ "@langchain/core": ">=0.2.31 <0.4.0",
+ "react": "^18 || ^19"
+ },
+ "peerDependenciesMeta": {
+ "@langchain/core": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@langchain/langgraph-sdk/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@langchain/langgraph-swarm": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@langchain/langgraph-swarm/-/langgraph-swarm-0.0.3.tgz",
+ "integrity": "sha512-6ctP1KGj344KXeY5c08LzvfayCWPA2I52pw7a6t4tcaQ3Y39h3aDvYl94wEqxv20KXIccdzvtAFX1ndxRBrP2Q==",
+ "license": "MIT",
+ "dependencies": {
+ "zod": "^3.23.8"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@langchain/core": "^0.3.40",
+ "@langchain/langgraph": "^0.2.53"
+ }
+ },
+ "node_modules/@langchain/langgraph/node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@langchain/openai": {
+ "version": "0.5.11",
+ "resolved": "https://registry.npmjs.org/@langchain/openai/-/openai-0.5.11.tgz",
+ "integrity": "sha512-DAp7x+NfjSqDvKVMle8yb85nzz+3ctP7zGJaeRS0vLmvkY9qf/jRkowsM0mcsIiEUKhG/AHzWqvxbhktb/jJ6Q==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tiktoken": "^1.0.12",
+ "openai": "^4.96.0",
+ "zod": "^3.22.4",
+ "zod-to-json-schema": "^3.22.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@langchain/core": ">=0.3.48 <0.4.0"
+ }
+ },
+ "node_modules/@langchain/textsplitters": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@langchain/textsplitters/-/textsplitters-0.1.0.tgz",
+ "integrity": "sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==",
+ "license": "MIT",
+ "dependencies": {
+ "js-tiktoken": "^1.0.12"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@langchain/core": ">=0.2.21 <0.4.0"
+ }
+ },
"node_modules/@netflix/nerror": {
"version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@netflix/nerror/-/nerror-1.1.3.tgz",
+ "integrity": "sha512-b+MGNyP9/LXkapreJzNUzcvuzZslj/RGgdVVJ16P2wSlYatfLycPObImqVJSmNAdyeShvNeM/pl3sVZsObFueg==",
"license": "MIT",
"dependencies": {
"assert-plus": "^1.0.0",
@@ -2299,12 +2575,16 @@
},
"node_modules/@nicolo-ribaudo/chokidar-2": {
"version": "2.1.8-no-fsevents.3",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
+ "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
"dev": true,
"license": "MIT",
"optional": true
},
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
@@ -2316,6 +2596,8 @@
},
"node_modules/@nodelib/fs.stat": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"license": "MIT",
"engines": {
"node": ">= 8"
@@ -2323,6 +2605,8 @@
},
"node_modules/@nodelib/fs.walk": {
"version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
@@ -2409,6 +2693,8 @@
},
"node_modules/@npmcli/arborist/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/@npmcli/fs": {
@@ -2446,10 +2732,14 @@
},
"node_modules/@npmcli/fs/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/@npmcli/git": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz",
+ "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==",
"license": "ISC",
"dependencies": {
"@npmcli/promise-spawn": "^6.0.0",
@@ -2467,6 +2757,8 @@
},
"node_modules/@npmcli/git/node_modules/lru-cache": {
"version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -2497,6 +2789,8 @@
},
"node_modules/@npmcli/git/node_modules/which": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
+ "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -2510,6 +2804,8 @@
},
"node_modules/@npmcli/git/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/@npmcli/installed-package-contents": {
@@ -2561,6 +2857,8 @@
},
"node_modules/@npmcli/metavuln-calculator": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-5.0.1.tgz",
+ "integrity": "sha512-qb8Q9wIIlEPj3WeA1Lba91R4ZboPL0uspzV0F9uwP+9AYMVB2zOoa7Pbk12g6D2NHAinSbHh6QYmGuRyHZ874Q==",
"license": "ISC",
"dependencies": {
"cacache": "^17.0.0",
@@ -2604,10 +2902,14 @@
},
"node_modules/@npmcli/metavuln-calculator/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/@npmcli/name-from-folder": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz",
+ "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==",
"license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
@@ -2615,6 +2917,8 @@
},
"node_modules/@npmcli/node-gyp": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz",
+ "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==",
"license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
@@ -2664,6 +2968,8 @@
},
"node_modules/@npmcli/promise-spawn": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz",
+ "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==",
"license": "ISC",
"dependencies": {
"which": "^3.0.0"
@@ -2674,6 +2980,8 @@
},
"node_modules/@npmcli/promise-spawn/node_modules/which": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
+ "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -2697,6 +3005,8 @@
},
"node_modules/@npmcli/run-script": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz",
+ "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==",
"license": "ISC",
"dependencies": {
"@npmcli/node-gyp": "^3.0.0",
@@ -2711,6 +3021,8 @@
},
"node_modules/@npmcli/run-script/node_modules/which": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
+ "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -2724,6 +3036,8 @@
},
"node_modules/@pkgjs/parseargs": {
"version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
+ "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
"license": "MIT",
"optional": true,
"engines": {
@@ -2751,10 +3065,14 @@
},
"node_modules/@sphinxxxx/color-conversion": {
"version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz",
+ "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw==",
"license": "ISC"
},
"node_modules/@tootallnate/once": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz",
+ "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==",
"license": "MIT",
"engines": {
"node": ">= 10"
@@ -2762,6 +3080,8 @@
},
"node_modules/@tufjs/canonical-json": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz",
+ "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==",
"license": "MIT",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
@@ -2769,6 +3089,8 @@
},
"node_modules/@tufjs/models": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz",
+ "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==",
"license": "MIT",
"dependencies": {
"@tufjs/canonical-json": "1.0.0",
@@ -2791,8 +3113,9 @@
"dev": true
},
"node_modules/@types/json-schema": {
- "version": "7.0.11",
- "dev": true,
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
"license": "MIT"
},
"node_modules/@types/linkify-it": {
@@ -2824,11 +3147,41 @@
"version": "20.11.13",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.13.tgz",
"integrity": "sha512-5G4zQwdiQBSWYTDAH1ctw2eidqdhMJaNsiIDKHFr55ihz5Trl2qqR8fdrT732yPBho5gkNxXm67OxWFBqX9aPg==",
- "dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
+ "node_modules/@types/node-fetch": {
+ "version": "2.6.12",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz",
+ "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "form-data": "^4.0.0"
+ }
+ },
+ "node_modules/@types/node-fetch/node_modules/form-data": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
+ "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@types/retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==",
+ "license": "MIT"
+ },
"node_modules/@types/trusted-types": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
@@ -2842,8 +3195,16 @@
"integrity": "sha512-FKvKIqRaykZtd4n47LbK/W/5fhQQ1X7cxxzG9A48h0BGN+S04NH7ervcCjM8tyR0lyGru83FAHSmw2ObgKoESg==",
"dev": true
},
+ "node_modules/@types/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
+ "license": "MIT"
+ },
"node_modules/@ungap/custom-elements": {
"version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@ungap/custom-elements/-/custom-elements-1.3.0.tgz",
+ "integrity": "sha512-f4q/s76+8nOy+fhrNHyetuoPDR01lmlZB5czfCG+OOnBw/Wf+x48DcCDPmMQY7oL8xYFL8qfenMoiS8DUkKBUw==",
"license": "ISC"
},
"node_modules/@webassemblyjs/ast": {
@@ -3009,6 +3370,8 @@
},
"node_modules/@webpack-cli/configtest": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
+ "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3021,6 +3384,8 @@
},
"node_modules/@webpack-cli/info": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
+ "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3033,6 +3398,8 @@
},
"node_modules/@webpack-cli/serve": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
+ "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3073,10 +3440,14 @@
},
"node_modules/abbrev": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"license": "ISC"
},
"node_modules/abort-controller": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
"license": "MIT",
"dependencies": {
"event-target-shim": "^5.0.0"
@@ -3087,6 +3458,8 @@
},
"node_modules/accepts": {
"version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
"license": "MIT",
"dependencies": {
"mime-types": "~2.1.34",
@@ -3119,6 +3492,8 @@
},
"node_modules/agent-base": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
"license": "MIT",
"dependencies": {
"debug": "4"
@@ -3141,6 +3516,8 @@
},
"node_modules/aggregate-error": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"license": "MIT",
"dependencies": {
"clean-stack": "^2.0.0",
@@ -3166,6 +3543,8 @@
},
"node_modules/ajv-formats": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
+ "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"license": "MIT",
"dependencies": {
"ajv": "^8.0.0"
@@ -3215,10 +3594,14 @@
},
"node_modules/ansi": {
"version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz",
+ "integrity": "sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==",
"license": "MIT"
},
"node_modules/ansi-escapes": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -3226,6 +3609,8 @@
},
"node_modules/ansi-regex": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3233,6 +3618,8 @@
},
"node_modules/ansi-styles": {
"version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"license": "MIT",
"dependencies": {
"color-convert": "^1.9.0"
@@ -3243,6 +3630,8 @@
},
"node_modules/anymatch": {
"version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -3255,6 +3644,8 @@
},
"node_modules/aproba": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==",
"license": "ISC"
},
"node_modules/are-we-there-yet": {
@@ -3288,6 +3679,8 @@
},
"node_modules/array-find-index": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -3295,10 +3688,14 @@
},
"node_modules/array-flatten": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"license": "MIT"
},
"node_modules/array-union": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -3306,6 +3703,8 @@
},
"node_modules/asn1": {
"version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"license": "MIT",
"dependencies": {
"safer-buffer": "~2.1.0"
@@ -3313,6 +3712,8 @@
},
"node_modules/assert-plus": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
"license": "MIT",
"engines": {
"node": ">=0.8"
@@ -3320,6 +3721,8 @@
},
"node_modules/async": {
"version": "2.6.4",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz",
+ "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==",
"license": "MIT",
"dependencies": {
"lodash": "^4.17.14"
@@ -3327,10 +3730,14 @@
},
"node_modules/asynckit": {
"version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
"license": "MIT"
},
"node_modules/atomically": {
"version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz",
+ "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==",
"license": "MIT",
"engines": {
"node": ">=10.12.0"
@@ -3376,10 +3783,14 @@
},
"node_modules/autosize": {
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/autosize/-/autosize-6.0.1.tgz",
+ "integrity": "sha512-f86EjiUKE6Xvczc4ioP1JBlWG7FKrE13qe/DxBCpe8GCipCq2nFw73aO8QEBKHfSbYGDN5eB9jXWKen7tspDqQ==",
"license": "MIT"
},
"node_modules/aws-sign2": {
"version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
"license": "Apache-2.0",
"engines": {
"node": "*"
@@ -3450,10 +3861,14 @@
},
"node_modules/balanced-match": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
@@ -3472,6 +3887,8 @@
},
"node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
"license": "BSD-3-Clause",
"dependencies": {
"tweetnacl": "^0.14.3"
@@ -3486,6 +3903,8 @@
},
"node_modules/big.js": {
"version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -3517,6 +3936,8 @@
},
"node_modules/bin-links/node_modules/write-file-atomic": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
@@ -3591,6 +4012,8 @@
},
"node_modules/bplist-parser": {
"version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz",
+ "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==",
"license": "MIT",
"dependencies": {
"big-integer": "1.6.x"
@@ -3601,6 +4024,8 @@
},
"node_modules/brace-expansion": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0"
@@ -3709,6 +4134,8 @@
},
"node_modules/builtins/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/bytes": {
@@ -3761,6 +4188,8 @@
},
"node_modules/cacache/node_modules/lru-cache": {
"version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -3784,13 +4213,40 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/callsites": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
+ "node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/caniuse-lite": {
"version": "1.0.30001621",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001621.tgz",
@@ -3814,10 +4270,14 @@
},
"node_modules/caseless": {
"version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
"license": "Apache-2.0"
},
"node_modules/chalk": {
"version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^3.2.1",
@@ -3830,6 +4290,8 @@
},
"node_modules/chalk/node_modules/escape-string-regexp": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"license": "MIT",
"engines": {
"node": ">=0.8.0"
@@ -3837,6 +4299,8 @@
},
"node_modules/chardet": {
"version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
"license": "MIT"
},
"node_modules/chevrotain": {
@@ -3893,6 +4357,8 @@
},
"node_modules/chownr": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
"license": "ISC",
"engines": {
"node": ">=10"
@@ -3908,6 +4374,8 @@
},
"node_modules/clean-stack": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -3915,6 +4383,8 @@
},
"node_modules/cli-cursor": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==",
"license": "MIT",
"dependencies": {
"restore-cursor": "^2.0.0"
@@ -3925,10 +4395,14 @@
},
"node_modules/cli-width": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz",
+ "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==",
"license": "ISC"
},
"node_modules/cliui": {
"version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"license": "ISC",
"dependencies": {
"string-width": "^4.2.0",
@@ -3941,6 +4415,8 @@
},
"node_modules/clone-deep": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3961,6 +4437,8 @@
},
"node_modules/color-convert": {
"version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"license": "MIT",
"dependencies": {
"color-name": "1.1.3"
@@ -3968,10 +4446,14 @@
},
"node_modules/color-name": {
"version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
"license": "MIT"
},
"node_modules/color-support": {
"version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
"license": "ISC",
"bin": {
"color-support": "bin.js"
@@ -3984,6 +4466,8 @@
},
"node_modules/combined-stream": {
"version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
"license": "MIT",
"dependencies": {
"delayed-stream": "~1.0.0"
@@ -4004,6 +4488,8 @@
},
"node_modules/common-ancestor-path": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz",
+ "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==",
"license": "ISC"
},
"node_modules/common-path-prefix": {
@@ -4040,6 +4526,8 @@
},
"node_modules/compression/node_modules/debug": {
"version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
@@ -4047,14 +4535,20 @@
},
"node_modules/compression/node_modules/ms": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
"node_modules/concat-map": {
"version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
"license": "MIT"
},
"node_modules/conf": {
"version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz",
+ "integrity": "sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==",
"license": "MIT",
"dependencies": {
"ajv": "^8.6.3",
@@ -4077,6 +4571,8 @@
},
"node_modules/conf/node_modules/dot-prop": {
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
+ "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
"license": "MIT",
"dependencies": {
"is-obj": "^2.0.0"
@@ -4113,10 +4609,14 @@
},
"node_modules/conf/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/configstore": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
+ "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
"license": "BSD-2-Clause",
"dependencies": {
"dot-prop": "^5.2.0",
@@ -4132,6 +4632,8 @@
},
"node_modules/configstore/node_modules/make-dir": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"license": "MIT",
"dependencies": {
"semver": "^6.0.0"
@@ -4145,10 +4647,23 @@
},
"node_modules/console-control-strings": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
"license": "ISC"
},
+ "node_modules/console-table-printer": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/console-table-printer/-/console-table-printer-2.14.0.tgz",
+ "integrity": "sha512-zrY29NkhSoY9SxEynJVWk6zuuI2tGnlS00+Jx+EWkp6QTsyj8W/Zc20awiqVvPj73oP5kX6w5uDW9rle5IznYw==",
+ "license": "MIT",
+ "dependencies": {
+ "simple-wcswidth": "^1.0.1"
+ }
+ },
"node_modules/content-disposition": {
"version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
"license": "MIT",
"dependencies": {
"safe-buffer": "5.2.1"
@@ -4159,6 +4674,8 @@
},
"node_modules/content-disposition/node_modules/safe-buffer": {
"version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
@@ -4199,10 +4716,14 @@
},
"node_modules/cookie-signature": {
"version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
"license": "MIT"
},
"node_modules/cordova": {
"version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/cordova/-/cordova-12.0.0.tgz",
+ "integrity": "sha512-D0gGDsaXlmafWxVZExJo6jO8AEVLYBe12Qghjx4zz8XfNhSUe3cInm4TyDZoxB2hFom73eLxIbomYOb0J6tutw==",
"license": "Apache-2.0",
"dependencies": {
"configstore": "^5.0.1",
@@ -4306,10 +4827,14 @@
},
"node_modules/cordova-app-hello-world": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-app-hello-world/-/cordova-app-hello-world-6.0.0.tgz",
+ "integrity": "sha512-wPZsm+fzNUwdiTRODT+fQuPV410RNmd3Buiw63vT8BPxjC+cn6Bu8emrgwrDM4pbmU5sa5Unwu3xPcbQGQ3G3g==",
"license": "Apache-2.0"
},
"node_modules/cordova-clipboard": {
"version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/cordova-clipboard/-/cordova-clipboard-1.3.0.tgz",
+ "integrity": "sha512-IGk4LZm/DJ0Xk/jgakHm4wa+A/lrRP3QfzMAHDG7oWLJS4ISOpfI32Wez4ndnENItRslGyBVyJyKD83CxELCAw==",
"dev": true,
"license": "MIT"
},
@@ -4338,6 +4863,8 @@
},
"node_modules/cordova-create": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-create/-/cordova-create-5.0.0.tgz",
+ "integrity": "sha512-jFc+vbh6Xx2DciI0/RFzLOB0X7YOiiDv9kjDfoq+jqh+TRZDYOuES19F1ZkwgDTJGnwUO0HoMIswiiTy45Royw==",
"license": "Apache-2.0",
"dependencies": {
"cordova-app-hello-world": "^6.0.0",
@@ -4358,6 +4885,8 @@
},
"node_modules/cordova-create/node_modules/isobject": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
+ "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -4365,6 +4894,8 @@
},
"node_modules/cordova-fetch": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-fetch/-/cordova-fetch-4.0.0.tgz",
+ "integrity": "sha512-aymq5lEwv6Y1n+FYoeRK/fCsyrMP2CBh5lo2o8NUO4MG68ws2QC+C5Xwju9kezQzEatg+9Gg2wrw5kGI+nmhXA==",
"license": "Apache-2.0",
"dependencies": {
"@npmcli/arborist": "^6.2.5",
@@ -4395,6 +4926,8 @@
},
"node_modules/cordova-fetch/node_modules/pify": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz",
+ "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -4418,6 +4951,8 @@
},
"node_modules/cordova-fetch/node_modules/which": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz",
+ "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==",
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -4431,6 +4966,8 @@
},
"node_modules/cordova-fetch/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/cordova-lib": {
@@ -4470,6 +5007,8 @@
},
"node_modules/cordova-lib/node_modules/pify": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz",
+ "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -4503,6 +5042,8 @@
},
"node_modules/cordova-lib/node_modules/write-file-atomic": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
+ "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
@@ -4514,6 +5055,8 @@
},
"node_modules/cordova-lib/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/cordova-plugin-advanced-http": {
@@ -4535,6 +5078,8 @@
},
"node_modules/cordova-plugin-buildinfo": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-buildinfo/-/cordova-plugin-buildinfo-4.0.0.tgz",
+ "integrity": "sha512-2Sl4sgr9L0vXryd6ZTWecs0+w3SlYM5iQPUPMwpkryaEo9MIbYvQoiVTosKpzHAyKSho4uTSQT9d2acosVVnFw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -4573,6 +5118,8 @@
},
"node_modules/cordova-plugin-device": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.1.0.tgz",
+ "integrity": "sha512-FU0Lw1jZpuKOgG4v80LrfMAOIMCGfAVPumn7AwaX9S1iU/X3OPZUyoKUgP09q4bxL35IeNPkqNWVKYduAXZ1sg==",
"dev": true,
"license": "Apache-2.0",
"engines": {
@@ -4632,6 +5179,8 @@
},
"node_modules/cordova-serve": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/cordova-serve/-/cordova-serve-4.0.1.tgz",
+ "integrity": "sha512-YbfXaZ60yr5dkqmDFQgrU7TSKnzCqYsxHgIUzDeX8RggZb6mz1F9jMfUBbaYyaU7JjcuJ0aoRPYLvwSGQVhGkw==",
"license": "Apache-2.0",
"dependencies": {
"chalk": "^3.0.0",
@@ -4647,6 +5196,8 @@
},
"node_modules/cordova-serve/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -4660,6 +5211,8 @@
},
"node_modules/cordova-serve/node_modules/chalk": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
+ "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -4671,6 +5224,8 @@
},
"node_modules/cordova-serve/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -4681,10 +5236,14 @@
},
"node_modules/cordova-serve/node_modules/color-name": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT"
},
"node_modules/cordova-serve/node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -4692,6 +5251,8 @@
},
"node_modules/cordova-serve/node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -4700,6 +5261,23 @@
"node": ">=8"
}
},
+ "node_modules/cordova-sqlite-storage": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-sqlite-storage/-/cordova-sqlite-storage-7.0.0.tgz",
+ "integrity": "sha512-BV1KCNtHnFD37ZQmhztStKsaNxniGlLcUSiQ9wieWH2PpZ0gH/tuWeINrrXGKIt9teTukYRnxFyerQ/Lc9x41A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "cordova-sqlite-storage-dependencies": "5.0.0"
+ }
+ },
+ "node_modules/cordova-sqlite-storage-dependencies": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cordova-sqlite-storage-dependencies/-/cordova-sqlite-storage-dependencies-5.0.0.tgz",
+ "integrity": "sha512-WjWm1QX+2JyLxjaNmYX2kNzmhrRk8q6n4GQ1PkUc79xR2bmJeO/m3koSuPemnWJdLdlsqDz8dCEHmgQSxhYjcg==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/cordova/node_modules/lru-cache": {
"version": "6.0.0",
"license": "ISC",
@@ -4725,6 +5303,8 @@
},
"node_modules/cordova/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/core-js": {
@@ -4764,6 +5344,8 @@
},
"node_modules/core-util-is": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
"license": "MIT"
},
"node_modules/cosmiconfig": {
@@ -4812,6 +5394,8 @@
},
"node_modules/crypto-random-string": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
+ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -4880,11 +5464,15 @@
},
"node_modules/css-loader/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true,
"license": "ISC"
},
"node_modules/cssesc": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"license": "MIT",
"bin": {
"cssesc": "bin/cssesc"
@@ -4895,6 +5483,8 @@
},
"node_modules/currently-unhandled": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==",
"license": "MIT",
"dependencies": {
"array-find-index": "^1.0.1"
@@ -4905,6 +5495,8 @@
},
"node_modules/dashdash": {
"version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
"license": "MIT",
"dependencies": {
"assert-plus": "^1.0.0"
@@ -4915,6 +5507,8 @@
},
"node_modules/debounce-fn": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz",
+ "integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==",
"license": "MIT",
"dependencies": {
"mimic-fn": "^3.0.0"
@@ -4928,6 +5522,8 @@
},
"node_modules/debounce-fn/node_modules/mimic-fn": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
+ "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -4948,8 +5544,19 @@
}
}
},
+ "node_modules/decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/dedent": {
"version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==",
"license": "MIT"
},
"node_modules/define-data-property": {
@@ -4970,6 +5577,8 @@
},
"node_modules/delayed-stream": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
"license": "MIT",
"engines": {
"node": ">=0.4.0"
@@ -4977,19 +5586,27 @@
},
"node_modules/delegates": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==",
"license": "MIT"
},
"node_modules/dep-graph": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/dep-graph/-/dep-graph-1.1.0.tgz",
+ "integrity": "sha512-/6yUWlSH0Uevjj6HWvO86rDeFzuYfzbaKDqifTEemwfwEPyBrODTb3ox/jFzqmc2+UmgJ3IDMS88BKEBh1Nm2Q==",
"dependencies": {
"underscore": "1.2.1"
}
},
"node_modules/dep-graph/node_modules/underscore": {
- "version": "1.2.1"
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz",
+ "integrity": "sha512-HRhh6FYh5I5/zTt7L9MnHRA/nlSFPiwymMCXEremmzT7tHR+8CNP0FXHPaUpafAPwvAlNrvZiH91kQwoo/CqUA=="
},
"node_modules/depd": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -5006,6 +5623,8 @@
},
"node_modules/detect-indent": {
"version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -5013,6 +5632,8 @@
},
"node_modules/detect-newline": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -5020,6 +5641,8 @@
},
"node_modules/dir-glob": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"license": "MIT",
"dependencies": {
"path-type": "^4.0.0"
@@ -5039,6 +5662,8 @@
},
"node_modules/dot-prop": {
"version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
"license": "MIT",
"dependencies": {
"is-obj": "^2.0.0"
@@ -5047,12 +5672,30 @@
"node": ">=8"
}
},
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/eastasianwidth": {
"version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
"license": "MIT"
},
"node_modules/ecc-jsbn": {
"version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
"license": "MIT",
"dependencies": {
"jsbn": "~0.1.0",
@@ -5061,6 +5704,8 @@
},
"node_modules/editor": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/editor/-/editor-1.0.0.tgz",
+ "integrity": "sha512-SoRmbGStwNYHgKfjOrX2L0mUvp9bUVv0uPppZSOMAntEbcFtoC3MKF5b3T6HQPXKIV+QGY3xPO3JK5it5lVkuw==",
"license": "MIT"
},
"node_modules/ee-first": {
@@ -5076,6 +5721,8 @@
},
"node_modules/elementtree": {
"version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
+ "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==",
"license": "Apache-2.0",
"dependencies": {
"sax": "1.1.4"
@@ -5086,10 +5733,14 @@
},
"node_modules/emoji-regex": {
"version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"license": "MIT"
},
"node_modules/emojis-list": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5106,6 +5757,8 @@
},
"node_modules/encoding": {
"version": "0.1.13",
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -5114,6 +5767,8 @@
},
"node_modules/end-of-stream": {
"version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"license": "MIT",
"dependencies": {
"once": "^1.4.0"
@@ -5121,6 +5776,8 @@
},
"node_modules/endent": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz",
+ "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==",
"license": "MIT",
"dependencies": {
"dedent": "^0.7.0",
@@ -5154,6 +5811,8 @@
},
"node_modules/env-paths": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -5172,6 +5831,8 @@
},
"node_modules/err-code": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
"license": "MIT"
},
"node_modules/error-ex": {
@@ -5184,12 +5845,10 @@
}
},
"node_modules/es-define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
- "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
- "dependencies": {
- "get-intrinsic": "^1.2.4"
- },
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
}
@@ -5207,6 +5866,33 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/escalade": {
"version": "3.1.1",
"license": "MIT",
@@ -5221,6 +5907,8 @@
},
"node_modules/escape-string-regexp": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
"license": "MIT",
"engines": {
"node": ">=12"
@@ -5231,6 +5919,8 @@
},
"node_modules/eslint-scope": {
"version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -5243,6 +5933,8 @@
},
"node_modules/esprima": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"license": "BSD-2-Clause",
"bin": {
"esparse": "bin/esparse.js",
@@ -5254,6 +5946,8 @@
},
"node_modules/esrecurse": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
@@ -5265,6 +5959,8 @@
},
"node_modules/esrecurse/node_modules/estraverse": {
"version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -5273,6 +5969,8 @@
},
"node_modules/estraverse": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -5281,6 +5979,8 @@
},
"node_modules/esutils": {
"version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
@@ -5297,13 +5997,23 @@
},
"node_modules/event-target-shim": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
+ "node_modules/eventemitter3": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "license": "MIT"
+ },
"node_modules/events": {
"version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"license": "MIT",
"engines": {
"node": ">=0.8.x"
@@ -5311,6 +6021,8 @@
},
"node_modules/execa": {
"version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.3",
@@ -5381,6 +6093,8 @@
},
"node_modules/express/node_modules/debug": {
"version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"license": "MIT",
"dependencies": {
"ms": "2.0.0"
@@ -5388,10 +6102,14 @@
},
"node_modules/express/node_modules/ms": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
"node_modules/express/node_modules/safe-buffer": {
"version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
"funding": [
{
"type": "github",
@@ -5410,10 +6128,14 @@
},
"node_modules/extend": {
"version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"license": "MIT"
},
"node_modules/external-editor": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
+ "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
"license": "MIT",
"dependencies": {
"chardet": "^0.7.0",
@@ -5426,6 +6148,8 @@
},
"node_modules/external-editor/node_modules/iconv-lite": {
"version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
@@ -5436,6 +6160,8 @@
},
"node_modules/external-editor/node_modules/tmp": {
"version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
"license": "MIT",
"dependencies": {
"os-tmpdir": "~1.0.2"
@@ -5446,6 +6172,8 @@
},
"node_modules/extsprintf": {
"version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.4.1.tgz",
+ "integrity": "sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==",
"engines": [
"node >=0.6.0"
],
@@ -5453,6 +6181,8 @@
},
"node_modules/fast-deep-equal": {
"version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"license": "MIT"
},
"node_modules/fast-glob": {
@@ -5473,14 +6203,20 @@
},
"node_modules/fast-json-parse": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz",
+ "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==",
"license": "MIT"
},
"node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
"license": "MIT"
},
"node_modules/fastest-levenshtein": {
"version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
+ "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5496,6 +6232,8 @@
},
"node_modules/figures": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==",
"license": "MIT",
"dependencies": {
"escape-string-regexp": "^1.0.5"
@@ -5506,6 +6244,8 @@
},
"node_modules/figures/node_modules/escape-string-regexp": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"license": "MIT",
"engines": {
"node": ">=0.8.0"
@@ -5664,6 +6404,8 @@
},
"node_modules/find-up": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -5700,6 +6442,8 @@
},
"node_modules/forever-agent": {
"version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
"license": "Apache-2.0",
"engines": {
"node": "*"
@@ -5707,6 +6451,8 @@
},
"node_modules/form-data": {
"version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
"license": "MIT",
"dependencies": {
"asynckit": "^0.4.0",
@@ -5717,8 +6463,29 @@
"node": ">= 0.12"
}
},
+ "node_modules/form-data-encoder": {
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
+ "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==",
+ "license": "MIT"
+ },
+ "node_modules/formdata-node": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
+ "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
+ "license": "MIT",
+ "dependencies": {
+ "node-domexception": "1.0.0",
+ "web-streams-polyfill": "4.0.0-beta.3"
+ },
+ "engines": {
+ "node": ">= 12.20"
+ }
+ },
"node_modules/forwarded": {
"version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -5771,11 +6538,15 @@
},
"node_modules/fs-readdir-recursive": {
"version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
+ "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
"dev": true,
"license": "MIT"
},
"node_modules/fs.realpath": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
"license": "ISC"
},
"node_modules/fsevents": {
@@ -5827,6 +6598,8 @@
},
"node_modules/gensync": {
"version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -5835,21 +6608,29 @@
},
"node_modules/get-caller-file": {
"version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"license": "ISC",
"engines": {
"node": "6.* || 8.* || >= 10.*"
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
- "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
"dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
"es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
"function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
},
"engines": {
"node": ">= 0.4"
@@ -5858,8 +6639,23 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/get-stream": {
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"license": "MIT",
"engines": {
"node": ">=10"
@@ -5870,6 +6666,8 @@
},
"node_modules/getpass": {
"version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
"license": "MIT",
"dependencies": {
"assert-plus": "^1.0.0"
@@ -5877,6 +6675,8 @@
},
"node_modules/glob": {
"version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -5895,6 +6695,8 @@
},
"node_modules/glob-parent": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
@@ -5912,6 +6714,8 @@
},
"node_modules/glob/node_modules/brace-expansion": {
"version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
@@ -5920,6 +6724,8 @@
},
"node_modules/glob/node_modules/minimatch": {
"version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
@@ -5940,6 +6746,8 @@
},
"node_modules/globby": {
"version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"license": "MIT",
"dependencies": {
"array-union": "^2.1.0",
@@ -5958,17 +6766,20 @@
},
"node_modules/globby/node_modules/slash": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/gopd": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
- "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
- "dependencies": {
- "get-intrinsic": "^1.1.3"
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -5982,6 +6793,8 @@
},
"node_modules/har-schema": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
"license": "ISC",
"engines": {
"node": ">=4"
@@ -5989,6 +6802,8 @@
},
"node_modules/har-validator": {
"version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
"license": "MIT",
"dependencies": {
"ajv": "^6.12.3",
@@ -6000,6 +6815,8 @@
},
"node_modules/har-validator/node_modules/ajv": {
"version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
@@ -6014,6 +6831,8 @@
},
"node_modules/har-validator/node_modules/json-schema-traverse": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"license": "MIT"
},
"node_modules/has": {
@@ -6028,6 +6847,8 @@
},
"node_modules/has-flag": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -6044,10 +6865,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-proto": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
- "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -6055,10 +6877,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/has-symbols": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
- "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -6068,6 +6894,8 @@
},
"node_modules/has-unicode": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==",
"license": "ISC"
},
"node_modules/hasown": {
@@ -6093,6 +6921,8 @@
},
"node_modules/hosted-git-info/node_modules/lru-cache": {
"version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -6125,6 +6955,8 @@
},
"node_modules/http-proxy-agent": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz",
+ "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==",
"license": "MIT",
"dependencies": {
"@tootallnate/once": "2",
@@ -6137,6 +6969,8 @@
},
"node_modules/http-signature": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
"license": "MIT",
"dependencies": {
"assert-plus": "^1.0.0",
@@ -6150,6 +6984,8 @@
},
"node_modules/https-proxy-agent": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
"license": "MIT",
"dependencies": {
"agent-base": "6",
@@ -6161,6 +6997,8 @@
},
"node_modules/human-signals": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"license": "Apache-2.0",
"engines": {
"node": ">=10.17.0"
@@ -6168,6 +7006,8 @@
},
"node_modules/humanize-ms": {
"version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
"license": "MIT",
"dependencies": {
"ms": "^2.0.0"
@@ -6175,6 +7015,8 @@
},
"node_modules/iconv-lite": {
"version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
"license": "MIT",
"optional": true,
"dependencies": {
@@ -6186,6 +7028,8 @@
},
"node_modules/icss-utils": {
"version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+ "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"dev": true,
"license": "ISC",
"engines": {
@@ -6232,6 +7076,8 @@
},
"node_modules/immediate": {
"version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
+ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==",
"license": "MIT"
},
"node_modules/immutable": {
@@ -6273,6 +7119,8 @@
},
"node_modules/imurmurhash": {
"version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"license": "MIT",
"engines": {
"node": ">=0.8.19"
@@ -6280,6 +7128,8 @@
},
"node_modules/indent-string": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -6287,6 +7137,8 @@
},
"node_modules/inflight": {
"version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"license": "ISC",
"dependencies": {
"once": "^1.3.0",
@@ -6295,6 +7147,8 @@
},
"node_modules/inherits": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"license": "ISC"
},
"node_modules/init-package-json": {
@@ -6338,10 +7192,14 @@
},
"node_modules/init-package-json/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/inquirer": {
"version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.2.tgz",
+ "integrity": "sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==",
"license": "MIT",
"dependencies": {
"ansi-escapes": "^3.2.0",
@@ -6364,6 +7222,8 @@
},
"node_modules/inquirer/node_modules/ansi-regex": {
"version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
+ "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -6371,6 +7231,8 @@
},
"node_modules/inquirer/node_modules/is-fullwidth-code-point": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -6378,6 +7240,8 @@
},
"node_modules/inquirer/node_modules/string-width": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
"license": "MIT",
"dependencies": {
"is-fullwidth-code-point": "^2.0.0",
@@ -6389,6 +7253,8 @@
},
"node_modules/inquirer/node_modules/string-width/node_modules/ansi-regex": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -6396,6 +7262,8 @@
},
"node_modules/inquirer/node_modules/string-width/node_modules/strip-ansi": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^3.0.0"
@@ -6406,6 +7274,8 @@
},
"node_modules/inquirer/node_modules/strip-ansi": {
"version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^4.1.0"
@@ -6416,6 +7286,8 @@
},
"node_modules/insight": {
"version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/insight/-/insight-0.11.1.tgz",
+ "integrity": "sha512-TBcZ0qC9dgdmcxL93OoqkY/RZXJtIi0i07phX/QyYk2ysmJtZex59dgTj4Doq50N9CG9dLRe/RIudc/5CCoFNw==",
"license": "BSD-2-Clause",
"dependencies": {
"async": "^2.6.2",
@@ -6434,6 +7306,8 @@
},
"node_modules/insight/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -6447,6 +7321,8 @@
},
"node_modules/insight/node_modules/chalk": {
"version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -6461,6 +7337,8 @@
},
"node_modules/insight/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -6471,10 +7349,14 @@
},
"node_modules/insight/node_modules/color-name": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT"
},
"node_modules/insight/node_modules/has-flag": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -6482,6 +7364,8 @@
},
"node_modules/insight/node_modules/supports-color": {
"version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
"license": "MIT",
"dependencies": {
"has-flag": "^4.0.0"
@@ -6492,6 +7376,8 @@
},
"node_modules/interpret": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
+ "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6505,6 +7391,8 @@
},
"node_modules/ipaddr.js": {
"version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"license": "MIT",
"engines": {
"node": ">= 0.10"
@@ -6518,6 +7406,8 @@
},
"node_modules/is-binary-path": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6539,6 +7429,8 @@
},
"node_modules/is-docker": {
"version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
+ "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
"license": "MIT",
"bin": {
"is-docker": "cli.js"
@@ -6552,6 +7444,8 @@
},
"node_modules/is-extglob": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -6559,6 +7453,8 @@
},
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -6566,6 +7462,8 @@
},
"node_modules/is-glob": {
"version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
@@ -6576,6 +7474,8 @@
},
"node_modules/is-lambda": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
"license": "MIT"
},
"node_modules/is-number": {
@@ -6588,6 +7488,8 @@
},
"node_modules/is-obj": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -6605,6 +7507,8 @@
},
"node_modules/is-plain-object": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6616,6 +7520,8 @@
},
"node_modules/is-stream": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -6626,10 +7532,14 @@
},
"node_modules/is-typedarray": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
"license": "MIT"
},
"node_modules/is-wsl": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
+ "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
"license": "MIT",
"dependencies": {
"is-docker": "^2.0.0"
@@ -6640,14 +7550,20 @@
},
"node_modules/isarray": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
"license": "ISC"
},
"node_modules/isobject": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6656,6 +7572,8 @@
},
"node_modules/isstream": {
"version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
"license": "MIT"
},
"node_modules/jackspeak": {
@@ -6737,6 +7655,15 @@
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz",
"integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw=="
},
+ "node_modules/js-tiktoken": {
+ "version": "1.0.20",
+ "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.20.tgz",
+ "integrity": "sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==",
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.5.1"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -6748,7 +7675,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
"integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
"dependencies": {
"argparse": "^2.0.1"
},
@@ -6758,6 +7684,8 @@
},
"node_modules/jsbn": {
"version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
"license": "MIT"
},
"node_modules/jsesc": {
@@ -6775,23 +7703,33 @@
},
"node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
"dev": true,
"license": "MIT"
},
"node_modules/json-schema": {
"version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
"license": "(AFL-2.1 OR BSD-3-Clause)"
},
"node_modules/json-schema-traverse": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"license": "MIT"
},
"node_modules/json-schema-typed": {
"version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz",
+ "integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==",
"license": "BSD-2-Clause"
},
"node_modules/json-stringify-nice": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz",
+ "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==",
"license": "ISC",
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -6799,10 +7737,14 @@
},
"node_modules/json-stringify-safe": {
"version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
"license": "ISC"
},
"node_modules/json5": {
"version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
"license": "MIT",
"bin": {
@@ -6814,6 +7756,8 @@
},
"node_modules/jsonfile": {
"version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
+ "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
@@ -6824,13 +7768,26 @@
},
"node_modules/jsonparse": {
"version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz",
+ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==",
"engines": [
"node >= 0.2.0"
],
"license": "MIT"
},
+ "node_modules/jsonpointer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz",
+ "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/jsprim": {
"version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
"license": "MIT",
"dependencies": {
"assert-plus": "1.0.0",
@@ -6844,6 +7801,8 @@
},
"node_modules/jsprim/node_modules/extsprintf": {
"version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
"engines": [
"node >=0.6.0"
],
@@ -6851,6 +7810,8 @@
},
"node_modules/jszip": {
"version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
+ "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
"license": "(MIT OR GPL-3.0-or-later)",
"dependencies": {
"lie": "~3.3.0",
@@ -6861,22 +7822,257 @@
},
"node_modules/just-diff": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz",
+ "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==",
"license": "MIT"
},
"node_modules/just-diff-apply": {
"version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz",
+ "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==",
"license": "MIT"
},
"node_modules/kind-of": {
"version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
+ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
+ "node_modules/langchain": {
+ "version": "0.3.27",
+ "resolved": "https://registry.npmjs.org/langchain/-/langchain-0.3.27.tgz",
+ "integrity": "sha512-XfOuXetMSpkS11Mt6YJkDmvuSGTMPUsks5DJz4RCZ3y2dcbLkOe5kecjx2SWVJYqQIqcMMwsjsve3/ZjnRe7rQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@langchain/openai": ">=0.1.0 <0.6.0",
+ "@langchain/textsplitters": ">=0.0.0 <0.2.0",
+ "js-tiktoken": "^1.0.12",
+ "js-yaml": "^4.1.0",
+ "jsonpointer": "^5.0.1",
+ "langsmith": "^0.3.29",
+ "openapi-types": "^12.1.3",
+ "p-retry": "4",
+ "uuid": "^10.0.0",
+ "yaml": "^2.2.1",
+ "zod": "^3.22.4",
+ "zod-to-json-schema": "^3.22.3"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "@langchain/anthropic": "*",
+ "@langchain/aws": "*",
+ "@langchain/cerebras": "*",
+ "@langchain/cohere": "*",
+ "@langchain/core": ">=0.2.21 <0.4.0",
+ "@langchain/deepseek": "*",
+ "@langchain/google-genai": "*",
+ "@langchain/google-vertexai": "*",
+ "@langchain/google-vertexai-web": "*",
+ "@langchain/groq": "*",
+ "@langchain/mistralai": "*",
+ "@langchain/ollama": "*",
+ "@langchain/xai": "*",
+ "axios": "*",
+ "cheerio": "*",
+ "handlebars": "^4.7.8",
+ "peggy": "^3.0.2",
+ "typeorm": "*"
+ },
+ "peerDependenciesMeta": {
+ "@langchain/anthropic": {
+ "optional": true
+ },
+ "@langchain/aws": {
+ "optional": true
+ },
+ "@langchain/cerebras": {
+ "optional": true
+ },
+ "@langchain/cohere": {
+ "optional": true
+ },
+ "@langchain/deepseek": {
+ "optional": true
+ },
+ "@langchain/google-genai": {
+ "optional": true
+ },
+ "@langchain/google-vertexai": {
+ "optional": true
+ },
+ "@langchain/google-vertexai-web": {
+ "optional": true
+ },
+ "@langchain/groq": {
+ "optional": true
+ },
+ "@langchain/mistralai": {
+ "optional": true
+ },
+ "@langchain/ollama": {
+ "optional": true
+ },
+ "@langchain/xai": {
+ "optional": true
+ },
+ "axios": {
+ "optional": true
+ },
+ "cheerio": {
+ "optional": true
+ },
+ "handlebars": {
+ "optional": true
+ },
+ "peggy": {
+ "optional": true
+ },
+ "typeorm": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/langchain/node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/langsmith": {
+ "version": "0.3.29",
+ "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.3.29.tgz",
+ "integrity": "sha512-JPF2B339qpYy9FyuY4Yz1aWYtgPlFc/a+VTj3L/JcFLHCiMP7+Ig8I9jO+o1QwVa+JU3iugL1RS0wwc+Glw0zA==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/uuid": "^10.0.0",
+ "chalk": "^4.1.2",
+ "console-table-printer": "^2.12.1",
+ "p-queue": "^6.6.2",
+ "p-retry": "4",
+ "semver": "^7.6.3",
+ "uuid": "^10.0.0"
+ },
+ "peerDependencies": {
+ "openai": "*"
+ },
+ "peerDependenciesMeta": {
+ "openai": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/langsmith/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/langsmith/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/langsmith/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/langsmith/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/langsmith/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/langsmith/node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/langsmith/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/langsmith/node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/lie": {
"version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz",
+ "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==",
"license": "MIT",
"dependencies": {
"immediate": "~3.0.5"
@@ -6898,6 +8094,8 @@
},
"node_modules/loader-runner": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6906,6 +8104,8 @@
},
"node_modules/loader-utils": {
"version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6919,6 +8119,8 @@
},
"node_modules/locate-path": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6930,6 +8132,8 @@
},
"node_modules/lodash": {
"version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
"node_modules/lodash-es": {
@@ -6940,14 +8144,20 @@
},
"node_modules/lodash.debounce": {
"version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"license": "MIT"
},
"node_modules/lodash.zip": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/lodash.zip/-/lodash.zip-4.2.0.tgz",
+ "integrity": "sha512-C7IOaBBK/0gMORRBd8OETNx3kmOkgIWIPvyDpZSCTwUrpYmgZwJkjZeOD8ww4xbOUOs4/attY+pciKvadNfFbg==",
"license": "MIT"
},
"node_modules/loud-rejection": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-2.2.0.tgz",
+ "integrity": "sha512-S0FayMXku80toa5sZ6Ro4C+s+EtFDCsyJNG/AzFMfX3AxD5Si4dZsgzm/kKnbOxHl5Cv8jBlno8+3XYIh2pNjQ==",
"license": "MIT",
"dependencies": {
"currently-unhandled": "^0.4.1",
@@ -6969,6 +8179,8 @@
},
"node_modules/macos-release": {
"version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.1.tgz",
+ "integrity": "sha512-DXqXhEM7gW59OjZO8NIjBCz9AQ1BEMrfiOAl4AYByHCtVHRF4KoGNO8mqQeM8lRCtQe/UnJ4imO/d2HdkKsd+A==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -6979,6 +8191,8 @@
},
"node_modules/make-dir": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
+ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6991,6 +8205,8 @@
},
"node_modules/make-dir/node_modules/semver": {
"version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
"license": "ISC",
"bin": {
@@ -6999,6 +8215,8 @@
},
"node_modules/make-fetch-happen": {
"version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz",
+ "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==",
"license": "ISC",
"dependencies": {
"agentkeepalive": "^4.2.1",
@@ -7023,6 +8241,8 @@
},
"node_modules/make-fetch-happen/node_modules/lru-cache": {
"version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -7073,8 +8293,19 @@
"integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==",
"license": "ISC"
},
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/md5-file": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-5.0.0.tgz",
+ "integrity": "sha512-xbEFXCYVWrSx/gEKS1VPlg84h/4L20znVIulKw6kMfmBUAZNAnF00eczz9ICMl+/hjQGo5KSXRxbL/47X3rmMw==",
"license": "MIT",
"bin": {
"md5-file": "cli.js"
@@ -7106,10 +8337,14 @@
},
"node_modules/merge-stream": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"license": "MIT",
"engines": {
"node": ">= 8"
@@ -7117,6 +8352,8 @@
},
"node_modules/methods": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -7148,6 +8385,8 @@
},
"node_modules/mime-db": {
"version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -7155,6 +8394,8 @@
},
"node_modules/mime-types": {
"version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
"license": "MIT",
"dependencies": {
"mime-db": "1.52.0"
@@ -7165,6 +8406,8 @@
},
"node_modules/mimic-fn": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -7208,6 +8451,8 @@
},
"node_modules/minipass": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
"license": "ISC",
"engines": {
"node": ">=8"
@@ -7215,6 +8460,8 @@
},
"node_modules/minipass-collect": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
"license": "ISC",
"dependencies": {
"minipass": "^3.0.0"
@@ -7225,6 +8472,8 @@
},
"node_modules/minipass-collect/node_modules/minipass": {
"version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
@@ -7235,6 +8484,8 @@
},
"node_modules/minipass-collect/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/minipass-fetch": {
@@ -7254,6 +8505,8 @@
},
"node_modules/minipass-flush": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
"license": "ISC",
"dependencies": {
"minipass": "^3.0.0"
@@ -7264,6 +8517,8 @@
},
"node_modules/minipass-flush/node_modules/minipass": {
"version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
@@ -7274,6 +8529,8 @@
},
"node_modules/minipass-flush/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/minipass-json-stream": {
@@ -7286,6 +8543,8 @@
},
"node_modules/minipass-json-stream/node_modules/minipass": {
"version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
@@ -7296,10 +8555,14 @@
},
"node_modules/minipass-json-stream/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/minipass-pipeline": {
"version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
"license": "ISC",
"dependencies": {
"minipass": "^3.0.0"
@@ -7310,6 +8573,8 @@
},
"node_modules/minipass-pipeline/node_modules/minipass": {
"version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
@@ -7320,10 +8585,14 @@
},
"node_modules/minipass-pipeline/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/minipass-sized": {
"version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
"license": "ISC",
"dependencies": {
"minipass": "^3.0.0"
@@ -7334,6 +8603,8 @@
},
"node_modules/minipass-sized/node_modules/minipass": {
"version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
@@ -7344,10 +8615,14 @@
},
"node_modules/minipass-sized/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/minizlib": {
"version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
"license": "MIT",
"dependencies": {
"minipass": "^3.0.0",
@@ -7359,6 +8634,8 @@
},
"node_modules/minizlib/node_modules/minipass": {
"version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
@@ -7369,10 +8646,14 @@
},
"node_modules/minizlib/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/mkdirp": {
"version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"license": "MIT",
"bin": {
"mkdirp": "bin/cmd.js"
@@ -7387,6 +8668,8 @@
},
"node_modules/mustache": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz",
+ "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==",
"license": "MIT",
"bin": {
"mustache": "bin/mustache"
@@ -7394,6 +8677,8 @@
},
"node_modules/mute-stream": {
"version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==",
"license": "ISC"
},
"node_modules/nanoid": {
@@ -7416,6 +8701,8 @@
},
"node_modules/negotiator": {
"version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
@@ -7423,9 +8710,51 @@
},
"node_modules/neo-async": {
"version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true,
"license": "MIT"
},
+ "node_modules/node-domexception": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
+ "deprecated": "Use your platform's native DOMException instead",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/jimmywarting"
+ },
+ {
+ "type": "github",
+ "url": "https://paypal.me/jimmywarting"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=10.5.0"
+ }
+ },
+ "node_modules/node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "license": "MIT",
+ "dependencies": {
+ "whatwg-url": "^5.0.0"
+ },
+ "engines": {
+ "node": "4.x || >=6.0.0"
+ },
+ "peerDependencies": {
+ "encoding": "^0.1.0"
+ },
+ "peerDependenciesMeta": {
+ "encoding": {
+ "optional": true
+ }
+ }
+ },
"node_modules/node-gyp": {
"version": "9.4.0",
"license": "MIT",
@@ -7451,6 +8780,8 @@
},
"node_modules/node-gyp/node_modules/are-we-there-yet": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
+ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
"license": "ISC",
"dependencies": {
"delegates": "^1.0.0",
@@ -7462,6 +8793,8 @@
},
"node_modules/node-gyp/node_modules/gauge": {
"version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
"license": "ISC",
"dependencies": {
"aproba": "^1.0.3 || ^2.0.0",
@@ -7489,6 +8822,8 @@
},
"node_modules/node-gyp/node_modules/nopt": {
"version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
+ "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
"license": "ISC",
"dependencies": {
"abbrev": "^1.0.0"
@@ -7502,6 +8837,8 @@
},
"node_modules/node-gyp/node_modules/npmlog": {
"version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
"license": "ISC",
"dependencies": {
"are-we-there-yet": "^3.0.0",
@@ -7515,6 +8852,8 @@
},
"node_modules/node-gyp/node_modules/readable-stream": {
"version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
"license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
@@ -7540,6 +8879,8 @@
},
"node_modules/node-gyp/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/node-releases": {
@@ -7565,6 +8906,8 @@
},
"node_modules/nopt/node_modules/abbrev": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
"license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
@@ -7572,6 +8915,8 @@
},
"node_modules/normalize-package-data": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz",
+ "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==",
"license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^6.0.0",
@@ -7608,10 +8953,14 @@
},
"node_modules/normalize-package-data/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/normalize-path": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7620,6 +8969,8 @@
},
"node_modules/normalize-range": {
"version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
+ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -7671,10 +9022,14 @@
},
"node_modules/npm-install-checks/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/npm-normalize-package-bin": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz",
+ "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==",
"license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
@@ -7682,6 +9037,8 @@
},
"node_modules/npm-package-arg": {
"version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz",
+ "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==",
"license": "ISC",
"dependencies": {
"hosted-git-info": "^6.0.0",
@@ -7718,10 +9075,14 @@
},
"node_modules/npm-package-arg/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/npm-packlist": {
"version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz",
+ "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==",
"license": "ISC",
"dependencies": {
"ignore-walk": "^6.0.0"
@@ -7768,10 +9129,14 @@
},
"node_modules/npm-pick-manifest/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/npm-registry-fetch": {
"version": "14.0.5",
+ "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz",
+ "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==",
"license": "ISC",
"dependencies": {
"make-fetch-happen": "^11.0.0",
@@ -7788,6 +9153,8 @@
},
"node_modules/npm-run-path": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"license": "MIT",
"dependencies": {
"path-key": "^3.0.0"
@@ -7798,6 +9165,8 @@
},
"node_modules/npmlog": {
"version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz",
+ "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==",
"license": "ISC",
"dependencies": {
"are-we-there-yet": "^4.0.0",
@@ -7811,6 +9180,8 @@
},
"node_modules/oauth-sign": {
"version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
"license": "Apache-2.0",
"engines": {
"node": "*"
@@ -7829,6 +9200,8 @@
},
"node_modules/objectorarray": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz",
+ "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==",
"license": "ISC"
},
"node_modules/on-finished": {
@@ -7844,6 +9217,8 @@
},
"node_modules/on-headers": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -7851,6 +9226,8 @@
},
"node_modules/once": {
"version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"license": "ISC",
"dependencies": {
"wrappy": "1"
@@ -7858,6 +9235,8 @@
},
"node_modules/onetime": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
+ "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"license": "MIT",
"dependencies": {
"mimic-fn": "^2.1.0"
@@ -7871,6 +9250,8 @@
},
"node_modules/open": {
"version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
+ "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
"license": "MIT",
"dependencies": {
"is-docker": "^2.0.0",
@@ -7883,8 +9264,55 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/openai": {
+ "version": "4.104.0",
+ "resolved": "https://registry.npmjs.org/openai/-/openai-4.104.0.tgz",
+ "integrity": "sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@types/node": "^18.11.18",
+ "@types/node-fetch": "^2.6.4",
+ "abort-controller": "^3.0.0",
+ "agentkeepalive": "^4.2.1",
+ "form-data-encoder": "1.7.2",
+ "formdata-node": "^4.3.2",
+ "node-fetch": "^2.6.7"
+ },
+ "bin": {
+ "openai": "bin/cli"
+ },
+ "peerDependencies": {
+ "ws": "^8.18.0",
+ "zod": "^3.23.8"
+ },
+ "peerDependenciesMeta": {
+ "ws": {
+ "optional": true
+ },
+ "zod": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/openai/node_modules/@types/node": {
+ "version": "18.19.108",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.108.tgz",
+ "integrity": "sha512-JZv9uwGYYtfcsO7B99KszTlNhvrIWqsRy7Xjp5Hr7ZFj7DSlsxIi0zJfibe/1xtPn6kEEbfMjH2lbsubwa81pQ==",
+ "license": "MIT",
+ "dependencies": {
+ "undici-types": "~5.26.4"
+ }
+ },
+ "node_modules/openapi-types": {
+ "version": "12.1.3",
+ "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
+ "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==",
+ "license": "MIT"
+ },
"node_modules/os-name": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/os-name/-/os-name-4.0.1.tgz",
+ "integrity": "sha512-xl9MAoU97MH1Xt5K9ERft2YfCAoaO6msy1OBA0ozxEC0x0TmIoE6K3QvgJMMZA9yKGLmHXNY/YZoDbiGDj4zYw==",
"license": "MIT",
"dependencies": {
"macos-release": "^2.5.0",
@@ -7899,6 +9327,8 @@
},
"node_modules/os-tmpdir": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -7906,6 +9336,8 @@
},
"node_modules/p-finally": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -7913,6 +9345,8 @@
},
"node_modules/p-limit": {
"version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"license": "MIT",
"dependencies": {
"p-try": "^2.0.0"
@@ -7926,6 +9360,8 @@
},
"node_modules/p-locate": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -7937,6 +9373,8 @@
},
"node_modules/p-map": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
"license": "MIT",
"dependencies": {
"aggregate-error": "^3.0.0"
@@ -7948,8 +9386,60 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/p-queue": {
+ "version": "6.6.2",
+ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz",
+ "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==",
+ "license": "MIT",
+ "dependencies": {
+ "eventemitter3": "^4.0.4",
+ "p-timeout": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/p-retry": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz",
+ "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/retry": "0.12.0",
+ "retry": "^0.13.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/p-retry/node_modules/retry": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz",
+ "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/p-timeout": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
+ "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
+ "license": "MIT",
+ "dependencies": {
+ "p-finally": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/p-try": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -7957,6 +9447,8 @@
},
"node_modules/pacote": {
"version": "15.2.0",
+ "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz",
+ "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==",
"license": "ISC",
"dependencies": {
"@npmcli/git": "^4.0.0",
@@ -7987,10 +9479,14 @@
},
"node_modules/pako": {
"version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"license": "(MIT AND Zlib)"
},
"node_modules/parent-module": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
"license": "MIT",
"dependencies": {
"callsites": "^3.0.0"
@@ -8001,6 +9497,8 @@
},
"node_modules/parse-conflict-json": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz",
+ "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==",
"license": "ISC",
"dependencies": {
"json-parse-even-better-errors": "^3.0.0",
@@ -8046,11 +9544,15 @@
},
"node_modules/path-browserify": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
+ "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
"dev": true,
"license": "MIT"
},
"node_modules/path-exists": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8059,6 +9561,8 @@
},
"node_modules/path-is-absolute": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -8066,10 +9570,14 @@
},
"node_modules/path-is-inside": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==",
"license": "(WTFPL OR MIT)"
},
"node_modules/path-key": {
"version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -8077,6 +9585,8 @@
},
"node_modules/path-parse": {
"version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"license": "MIT"
},
"node_modules/path-scurry": {
@@ -8107,6 +9617,8 @@
},
"node_modules/path-type": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -8114,6 +9626,8 @@
},
"node_modules/performance-now": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
"license": "MIT"
},
"node_modules/picocolors": {
@@ -8123,6 +9637,8 @@
},
"node_modules/picomatch": {
"version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"license": "MIT",
"engines": {
"node": ">=8.6"
@@ -8133,6 +9649,8 @@
},
"node_modules/pify": {
"version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -8140,6 +9658,8 @@
},
"node_modules/pkg-dir": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8151,6 +9671,8 @@
},
"node_modules/pkg-up": {
"version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
+ "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
"license": "MIT",
"dependencies": {
"find-up": "^3.0.0"
@@ -8161,6 +9683,8 @@
},
"node_modules/pkg-up/node_modules/find-up": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"license": "MIT",
"dependencies": {
"locate-path": "^3.0.0"
@@ -8171,6 +9695,8 @@
},
"node_modules/pkg-up/node_modules/locate-path": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"license": "MIT",
"dependencies": {
"p-locate": "^3.0.0",
@@ -8182,6 +9708,8 @@
},
"node_modules/pkg-up/node_modules/p-locate": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"license": "MIT",
"dependencies": {
"p-limit": "^2.0.0"
@@ -8192,6 +9720,8 @@
},
"node_modules/pkg-up/node_modules/path-exists": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -8297,6 +9827,8 @@
},
"node_modules/postcss-loader/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true,
"license": "ISC"
},
@@ -8349,6 +9881,8 @@
},
"node_modules/postcss-modules-values": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
+ "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -8374,6 +9908,8 @@
},
"node_modules/postcss-value-parser": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
"dev": true,
"license": "MIT"
},
@@ -8405,6 +9941,8 @@
},
"node_modules/proc-log": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz",
+ "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==",
"license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
@@ -8419,10 +9957,14 @@
},
"node_modules/process-nextick-args": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"license": "MIT"
},
"node_modules/promise-all-reject-late": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz",
+ "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==",
"license": "ISC",
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -8430,6 +9972,8 @@
},
"node_modules/promise-call-limit": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz",
+ "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==",
"license": "ISC",
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -8437,10 +9981,14 @@
},
"node_modules/promise-inflight": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
+ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
"license": "ISC"
},
"node_modules/promise-retry": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
"license": "MIT",
"dependencies": {
"err-code": "^2.0.2",
@@ -8472,6 +10020,8 @@
},
"node_modules/proxy-addr": {
"version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
"license": "MIT",
"dependencies": {
"forwarded": "0.2.0",
@@ -8510,6 +10060,8 @@
},
"node_modules/q": {
"version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==",
"license": "MIT",
"engines": {
"node": ">=0.6.0",
@@ -8532,10 +10084,14 @@
},
"node_modules/querystringify": {
"version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
+ "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
"license": "MIT"
},
"node_modules/queue-microtask": {
"version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"funding": [
{
"type": "github",
@@ -8604,6 +10160,8 @@
},
"node_modules/raw-loader": {
"version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz",
+ "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8623,6 +10181,8 @@
},
"node_modules/raw-loader/node_modules/ajv": {
"version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8638,6 +10198,8 @@
},
"node_modules/raw-loader/node_modules/ajv-keywords": {
"version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -8646,6 +10208,8 @@
},
"node_modules/raw-loader/node_modules/json-schema-traverse": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"license": "MIT"
},
@@ -8678,6 +10242,8 @@
},
"node_modules/read-chunk": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz",
+ "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==",
"license": "MIT",
"dependencies": {
"pify": "^4.0.1",
@@ -8689,6 +10255,8 @@
},
"node_modules/read-cmd-shim": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz",
+ "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==",
"license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
@@ -8696,6 +10264,8 @@
},
"node_modules/read-package-json": {
"version": "6.0.4",
+ "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz",
+ "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==",
"license": "ISC",
"dependencies": {
"glob": "^10.2.2",
@@ -8709,6 +10279,8 @@
},
"node_modules/read-package-json-fast": {
"version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz",
+ "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==",
"license": "ISC",
"dependencies": {
"json-parse-even-better-errors": "^3.0.0",
@@ -8774,6 +10346,8 @@
},
"node_modules/readdirp": {
"version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8785,6 +10359,8 @@
},
"node_modules/rechoir": {
"version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
+ "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8796,6 +10372,8 @@
},
"node_modules/regenerate": {
"version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
"dev": true,
"license": "MIT"
},
@@ -8861,6 +10439,8 @@
},
"node_modules/request": {
"version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
"license": "Apache-2.0",
"dependencies": {
"aws-sign2": "~0.7.0",
@@ -8890,6 +10470,8 @@
},
"node_modules/request/node_modules/qs": {
"version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.6"
@@ -8897,6 +10479,8 @@
},
"node_modules/request/node_modules/tough-cookie": {
"version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
+ "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
"license": "BSD-3-Clause",
"dependencies": {
"psl": "^1.1.28",
@@ -8908,6 +10492,8 @@
},
"node_modules/request/node_modules/uuid": {
"version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
"license": "MIT",
"bin": {
"uuid": "bin/uuid"
@@ -8915,6 +10501,8 @@
},
"node_modules/require-directory": {
"version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -8922,6 +10510,8 @@
},
"node_modules/require-from-string": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -8929,6 +10519,8 @@
},
"node_modules/requires-port": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
"license": "MIT"
},
"node_modules/resolve": {
@@ -8948,6 +10540,8 @@
},
"node_modules/resolve-cwd": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
+ "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -8959,6 +10553,8 @@
},
"node_modules/resolve-cwd/node_modules/resolve-from": {
"version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -8967,6 +10563,8 @@
},
"node_modules/resolve-from": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -8974,6 +10572,8 @@
},
"node_modules/restore-cursor": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==",
"license": "MIT",
"dependencies": {
"onetime": "^2.0.0",
@@ -8985,6 +10585,8 @@
},
"node_modules/restore-cursor/node_modules/mimic-fn": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
"license": "MIT",
"engines": {
"node": ">=4"
@@ -8992,6 +10594,8 @@
},
"node_modules/restore-cursor/node_modules/onetime": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==",
"license": "MIT",
"dependencies": {
"mimic-fn": "^1.0.0"
@@ -9002,6 +10606,8 @@
},
"node_modules/retry": {
"version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
"license": "MIT",
"engines": {
"node": ">= 4"
@@ -9017,6 +10623,8 @@
},
"node_modules/rimraf": {
"version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"license": "ISC",
"dependencies": {
"glob": "^7.1.3"
@@ -9030,6 +10638,8 @@
},
"node_modules/run-async": {
"version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
+ "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
"license": "MIT",
"engines": {
"node": ">=0.12.0"
@@ -9037,6 +10647,8 @@
},
"node_modules/run-parallel": {
"version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"funding": [
{
"type": "github",
@@ -9058,6 +10670,8 @@
},
"node_modules/rxjs": {
"version": "6.6.7",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz",
+ "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==",
"license": "Apache-2.0",
"dependencies": {
"tslib": "^1.9.0"
@@ -9068,10 +10682,14 @@
},
"node_modules/safe-buffer": {
"version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
"license": "MIT"
},
"node_modules/safer-buffer": {
"version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"license": "MIT"
},
"node_modules/sass": {
@@ -9135,6 +10753,8 @@
},
"node_modules/sax": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
+ "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==",
"license": "ISC"
},
"node_modules/schema-utils": {
@@ -9157,6 +10777,8 @@
},
"node_modules/semver": {
"version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
@@ -9236,6 +10858,8 @@
},
"node_modules/set-blocking": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"license": "ISC"
},
"node_modules/set-function-length": {
@@ -9256,6 +10880,8 @@
},
"node_modules/setimmediate": {
"version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
+ "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
"license": "MIT"
},
"node_modules/setprototypeof": {
@@ -9265,6 +10891,8 @@
},
"node_modules/shallow-clone": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9276,6 +10904,8 @@
},
"node_modules/shebang-command": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"license": "MIT",
"dependencies": {
"shebang-regex": "^3.0.0"
@@ -9286,6 +10916,8 @@
},
"node_modules/shebang-regex": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -9310,6 +10942,8 @@
},
"node_modules/signal-exit": {
"version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
"license": "ISC"
},
"node_modules/sigstore": {
@@ -9328,8 +10962,16 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/simple-wcswidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/simple-wcswidth/-/simple-wcswidth-1.0.1.tgz",
+ "integrity": "sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==",
+ "license": "MIT"
+ },
"node_modules/slash": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9338,6 +10980,8 @@
},
"node_modules/smart-buffer": {
"version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
"license": "MIT",
"engines": {
"node": ">= 6.0.0",
@@ -9358,6 +11002,8 @@
},
"node_modules/socks-proxy-agent": {
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz",
+ "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==",
"license": "MIT",
"dependencies": {
"agent-base": "^6.0.2",
@@ -9397,6 +11043,8 @@
},
"node_modules/spdx-correct": {
"version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
+ "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
"license": "Apache-2.0",
"dependencies": {
"spdx-expression-parse": "^3.0.0",
@@ -9409,6 +11057,8 @@
},
"node_modules/spdx-expression-parse": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"license": "MIT",
"dependencies": {
"spdx-exceptions": "^2.1.0",
@@ -9462,6 +11112,8 @@
},
"node_modules/string_decoder": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
@@ -9479,6 +11131,8 @@
},
"node_modules/string-width": {
"version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -9492,6 +11146,8 @@
"node_modules/string-width-cjs": {
"name": "string-width",
"version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"license": "MIT",
"dependencies": {
"emoji-regex": "^8.0.0",
@@ -9504,10 +11160,14 @@
},
"node_modules/stringify-package": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/stringify-package/-/stringify-package-1.0.1.tgz",
+ "integrity": "sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg==",
"license": "ISC"
},
"node_modules/strip-ansi": {
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -9519,6 +11179,8 @@
"node_modules/strip-ansi-cjs": {
"name": "strip-ansi",
"version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
@@ -9529,6 +11191,8 @@
},
"node_modules/strip-bom": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -9536,6 +11200,8 @@
},
"node_modules/strip-final-newline": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
+ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"license": "MIT",
"engines": {
"node": ">=6"
@@ -9560,6 +11226,8 @@
},
"node_modules/supports-color": {
"version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"license": "MIT",
"dependencies": {
"has-flag": "^3.0.0"
@@ -9570,6 +11238,8 @@
},
"node_modules/supports-preserve-symlinks-flag": {
"version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"license": "MIT",
"engines": {
"node": ">= 0.4"
@@ -9629,6 +11299,8 @@
},
"node_modules/tar/node_modules/fs-minipass": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
"license": "ISC",
"dependencies": {
"minipass": "^3.0.0"
@@ -9639,6 +11311,8 @@
},
"node_modules/tar/node_modules/fs-minipass/node_modules/minipass": {
"version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"license": "ISC",
"dependencies": {
"yallist": "^4.0.0"
@@ -9649,6 +11323,8 @@
},
"node_modules/tar/node_modules/yallist": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"license": "ISC"
},
"node_modules/terser": {
@@ -9760,6 +11436,8 @@
},
"node_modules/through": {
"version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==",
"license": "MIT"
},
"node_modules/tmp": {
@@ -9814,13 +11492,23 @@
},
"node_modules/tough-cookie/node_modules/universalify": {
"version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
+ "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
"license": "MIT",
"engines": {
"node": ">= 4.0.0"
}
},
+ "node_modules/tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
+ "license": "MIT"
+ },
"node_modules/treeverse": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz",
+ "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==",
"license": "ISC",
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
@@ -9828,6 +11516,8 @@
},
"node_modules/tslib": {
"version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
"license": "0BSD"
},
"node_modules/tuf-js": {
@@ -9844,6 +11534,8 @@
},
"node_modules/tunnel-agent": {
"version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
"license": "Apache-2.0",
"dependencies": {
"safe-buffer": "^5.0.1"
@@ -9854,6 +11546,8 @@
},
"node_modules/tweetnacl": {
"version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
"license": "Unlicense"
},
"node_modules/type-is": {
@@ -9870,6 +11564,8 @@
},
"node_modules/typedarray-to-buffer": {
"version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"license": "MIT",
"dependencies": {
"is-typedarray": "^1.0.0"
@@ -9883,8 +11579,7 @@
"node_modules/undici-types": {
"version": "5.26.5",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="
},
"node_modules/unicode-canonical-property-names-ecmascript": {
"version": "2.0.0",
@@ -9896,6 +11591,8 @@
},
"node_modules/unicode-match-property-ecmascript": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -9916,6 +11613,8 @@
},
"node_modules/unicode-property-aliases-ecmascript": {
"version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
"dev": true,
"license": "MIT",
"engines": {
@@ -9924,6 +11623,8 @@
},
"node_modules/unique-filename": {
"version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz",
+ "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==",
"license": "ISC",
"dependencies": {
"unique-slug": "^4.0.0"
@@ -9934,6 +11635,8 @@
},
"node_modules/unique-slug": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz",
+ "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==",
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4"
@@ -9944,6 +11647,8 @@
},
"node_modules/unique-string": {
"version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
+ "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
"license": "MIT",
"dependencies": {
"crypto-random-string": "^2.0.0"
@@ -10008,6 +11713,8 @@
},
"node_modules/uri-js": {
"version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
"license": "BSD-2-Clause",
"dependencies": {
"punycode": "^2.1.0"
@@ -10015,6 +11722,8 @@
},
"node_modules/url-parse": {
"version": "1.5.10",
+ "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
+ "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
"license": "MIT",
"dependencies": {
"querystringify": "^2.1.1",
@@ -10023,10 +11732,14 @@
},
"node_modules/util-deprecate": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"license": "MIT"
},
"node_modules/utils-merge": {
"version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
"license": "MIT",
"engines": {
"node": ">= 0.4.0"
@@ -10034,6 +11747,8 @@
},
"node_modules/uuid": {
"version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
@@ -10041,10 +11756,14 @@
},
"node_modules/valid-identifier": {
"version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/valid-identifier/-/valid-identifier-0.0.2.tgz",
+ "integrity": "sha512-zaSmOW6ykXwrkX0YTuFUSoALNEKGaQHpxBJQLb3TXspRNDpBwbfrIQCZqAQ0LKBlKuyn2YOq7NNd6415hvZ33g==",
"license": "Apache-2.0"
},
"node_modules/validate-npm-package-license": {
"version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"license": "Apache-2.0",
"dependencies": {
"spdx-correct": "^3.0.0",
@@ -10072,6 +11791,8 @@
},
"node_modules/vary": {
"version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"license": "MIT",
"engines": {
"node": ">= 0.8"
@@ -10079,6 +11800,8 @@
},
"node_modules/verror": {
"version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
"engines": [
"node >=0.6.0"
],
@@ -10091,10 +11814,14 @@
},
"node_modules/verror/node_modules/core-util-is": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
"license": "MIT"
},
"node_modules/walk-up-path": {
"version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz",
+ "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==",
"license": "ISC"
},
"node_modules/watchpack": {
@@ -10111,6 +11838,21 @@
"node": ">=10.13.0"
}
},
+ "node_modules/web-streams-polyfill": {
+ "version": "4.0.0-beta.3",
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
+ "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14"
+ }
+ },
+ "node_modules/webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
+ "license": "BSD-2-Clause"
+ },
"node_modules/webpack": {
"version": "5.94.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz",
@@ -10159,6 +11901,8 @@
},
"node_modules/webpack-cli": {
"version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
+ "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10203,6 +11947,8 @@
},
"node_modules/webpack-cli/node_modules/commander": {
"version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10231,6 +11977,8 @@
},
"node_modules/webpack/node_modules/ajv": {
"version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -10246,6 +11994,8 @@
},
"node_modules/webpack/node_modules/ajv-keywords": {
"version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true,
"license": "MIT",
"peerDependencies": {
@@ -10254,6 +12004,8 @@
},
"node_modules/webpack/node_modules/json-schema-traverse": {
"version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true,
"license": "MIT"
},
@@ -10274,8 +12026,20 @@
"url": "https://opencollective.com/webpack"
}
},
+ "node_modules/whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "license": "MIT",
+ "dependencies": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
"node_modules/which": {
"version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
@@ -10289,6 +12053,8 @@
},
"node_modules/wide-align": {
"version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
"license": "ISC",
"dependencies": {
"string-width": "^1.0.2 || 2 || 3 || 4"
@@ -10301,6 +12067,8 @@
},
"node_modules/windows-release": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz",
+ "integrity": "sha512-OxmV4wzDKB1x7AZaZgXMVsdJ1qER1ed83ZrTYd5Bwq2HfJVg3DJS8nqlAG4sMoJ7mu8cuRmLEYyU13BKwctRAg==",
"license": "MIT",
"dependencies": {
"execa": "^4.0.2"
@@ -10314,6 +12082,8 @@
},
"node_modules/windows-release/node_modules/execa": {
"version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
+ "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
"license": "MIT",
"dependencies": {
"cross-spawn": "^7.0.0",
@@ -10335,6 +12105,8 @@
},
"node_modules/windows-release/node_modules/get-stream": {
"version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"license": "MIT",
"dependencies": {
"pump": "^3.0.0"
@@ -10348,6 +12120,8 @@
},
"node_modules/windows-release/node_modules/human-signals": {
"version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
+ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
"license": "Apache-2.0",
"engines": {
"node": ">=8.12.0"
@@ -10355,6 +12129,8 @@
},
"node_modules/with-open-file": {
"version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz",
+ "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==",
"license": "MIT",
"dependencies": {
"p-finally": "^1.0.0",
@@ -10367,6 +12143,8 @@
},
"node_modules/wrap-ansi": {
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -10383,6 +12161,8 @@
"node_modules/wrap-ansi-cjs": {
"name": "wrap-ansi",
"version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"license": "MIT",
"dependencies": {
"ansi-styles": "^4.0.0",
@@ -10398,6 +12178,8 @@
},
"node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -10411,6 +12193,8 @@
},
"node_modules/wrap-ansi-cjs/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -10421,10 +12205,14 @@
},
"node_modules/wrap-ansi-cjs/node_modules/color-name": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT"
},
"node_modules/wrap-ansi/node_modules/ansi-styles": {
"version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"license": "MIT",
"dependencies": {
"color-convert": "^2.0.1"
@@ -10438,6 +12226,8 @@
},
"node_modules/wrap-ansi/node_modules/color-convert": {
"version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"license": "MIT",
"dependencies": {
"color-name": "~1.1.4"
@@ -10448,14 +12238,20 @@
},
"node_modules/wrap-ansi/node_modules/color-name": {
"version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"license": "MIT"
},
"node_modules/wrappy": {
"version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
"license": "ISC"
},
"node_modules/write-file-atomic": {
"version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
"license": "ISC",
"dependencies": {
"imurmurhash": "^0.1.4",
@@ -10466,6 +12262,8 @@
},
"node_modules/xdg-basedir": {
"version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
+ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
"license": "MIT",
"engines": {
"node": ">=8"
@@ -10482,6 +12280,8 @@
},
"node_modules/y18n": {
"version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"license": "ISC",
"engines": {
"node": ">=10"
@@ -10494,8 +12294,22 @@
"dev": true,
"license": "ISC"
},
+ "node_modules/yaml": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
+ "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ }
+ },
"node_modules/yargs": {
"version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"license": "MIT",
"dependencies": {
"cliui": "^8.0.1",
@@ -10512,6 +12326,8 @@
},
"node_modules/yargs-parser": {
"version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"license": "ISC",
"engines": {
"node": ">=12"
@@ -10529,6 +12345,24 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/zod": {
+ "version": "3.25.42",
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.42.tgz",
+ "integrity": "sha512-PcALTLskaucbeHc41tU/xfjfhcz8z0GdhhDcSgrCTmSazUuqnYqiXO63M0QUBVwpBlsLsNVn5qHSC5Dw3KZvaQ==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/colinhacks"
+ }
+ },
+ "node_modules/zod-to-json-schema": {
+ "version": "3.24.5",
+ "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz",
+ "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==",
+ "license": "ISC",
+ "peerDependencies": {
+ "zod": "^3.24.1"
+ }
+ },
"src/plugins/browser": {
"name": "cordova-plugin-browser",
"version": "1.0.0",
diff --git a/package.json b/package.json
index 9be678a28..0786713d9 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,8 @@
"cordova-plugin-system": {},
"cordova-plugin-advanced-http": {
"ANDROIDBLACKLISTSECURESOCKETPROTOCOLS": "SSLv3,TLSv1"
- }
+ },
+ "cordova-sqlite-storage": {}
},
"platforms": [
"android"
@@ -74,6 +75,7 @@
"cordova-plugin-server": "file:src/plugins/server",
"cordova-plugin-sftp": "file:src/plugins/sftp",
"cordova-plugin-system": "file:src/plugins/system",
+ "cordova-sqlite-storage": "^7.0.0",
"css-loader": "^7.1.2",
"mini-css-extract-plugin": "^2.9.0",
"path-browserify": "^1.0.1",
@@ -92,6 +94,7 @@
"@langchain/core": "^0.3.57",
"@langchain/google-genai": "^0.2.10",
"@langchain/langgraph": "^0.2.74",
+ "@langchain/langgraph-swarm": "^0.0.3",
"@ungap/custom-elements": "^1.3.0",
"autosize": "^6.0.1",
"cordova": "12.0.0",
@@ -101,9 +104,11 @@
"escape-string-regexp": "^5.0.0",
"esprima": "^4.0.1",
"filesize": "^10.1.2",
+ "he": "^1.2.0",
"html-tag-js": "^1.5.1",
"js-base64": "^3.7.7",
"jszip": "^3.10.1",
+ "langchain": "^0.3.27",
"markdown-it": "^14.1.0",
"markdown-it-anchor": "^9.2.0",
"markdown-it-github-alerts": "^0.3.0",
diff --git a/src/pages/aiAssistant/assistant.js b/src/pages/aiAssistant/assistant.js
index 91d865ad6..8ad818bd6 100644
--- a/src/pages/aiAssistant/assistant.js
+++ b/src/pages/aiAssistant/assistant.js
@@ -1,566 +1,674 @@
-import { isAIMessageChunk } from "@langchain/core/messages";
-import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
-import { createReactAgent } from "@langchain/langgraph/prebuilt";
+import {
+ isAIMessageChunk
+} from "@langchain/core/messages";
+import {
+ ChatGoogleGenerativeAI
+} from "@langchain/google-genai";
+import {
+ createReactAgent
+} from "@langchain/langgraph/prebuilt";
import select from "dialogs/select";
import Ref from "html-tag-js/ref";
import EditorFile from "lib/editorFile";
import settings from "lib/settings";
import markdownIt from "markdown-it";
import styles from "./assistant.module.scss";
-
-let aiTabInstance;
+import {
+ addConversation,
+ getConversation,
+ getAllConversations,
+ updateConversation,
+ deleteConversation,
+ addMessageToDB,
+ getMessagesForConversation
+} from './db';
+import {
+ MemorySaver
+} from "@langchain/langgraph-checkpoint";
+import he from 'he';
export default function openAIAssistantPage() {
- // References
- const profileBtnRef = new Ref();
- const historySidebarRef = new Ref();
- const chatInputRef = new Ref();
- const sendBtnRef = new Ref();
- const messageContainerRef = new Ref();
- const stopBtnRef = new Ref();
-
- // States
- let currentProfile = "ask"; // Default to ask profile
-
- const model = new ChatGoogleGenerativeAI({
- model: "gemini-2.0-flash",
- apiKey: "",
- });
- const agent = createReactAgent({ llm: model, tools: [] });
-
- /**
- * Updates the profile button appearance and state
- * @param {string} profile - Profile type ("ask" or "write")
- */
- const handleProfileSwitch = (profile) => {
- const iconEl = profileBtnRef.el.querySelector("i:first-child");
- const textEl = profileBtnRef.el.querySelector("span");
-
- currentProfile = profile;
-
- // Update button appearance based on selected profile
- if (profile === "ask") {
- iconEl.className = "icon help";
- textEl.textContent = "Ask";
- } else {
- iconEl.className = "icon edit";
- textEl.textContent = "Write";
- }
- };
-
- /**
- * Shows profile selection menu
- */
- const showProfileMenu = async (e) => {
- e.preventDefault();
- const profile = await select("Select Profile", [
- { value: "ask", text: "Ask", icon: "help" },
- { value: "write", text: "Write", icon: "edit" },
- ]);
- handleProfileSwitch(profile);
- };
-
- const toggleHistorySidebar = () => {
- historySidebarRef.classList.toggle("hidden");
- };
-
- const handleChatInput = () => {
- sendBtnRef.el.disabled = chatInputRef.value.trim().length === 0;
- chatInputRef.el.style.height = "auto";
- chatInputRef.el.style.height =
- Math.min(chatInputRef.el.scrollHeight, 120) + `px`;
- };
-
- const scrollToBottom = () => {
- messageContainerRef.el.scrollTop = messageContainerRef.el.scrollHeight;
- };
-
- const showLoading = () => {
- const loadingEl = tag("div", {
- className: "ai_loading",
- id: "loading-indicator",
- });
- const loadingDots = tag("div", {
- className: "loading-dots",
- });
-
- for (let i = 0; i < 3; i++) {
- const dot = tag("div", {
- className: "loading-dot",
- });
- loadingDots.appendChild(dot);
- }
-
- const text = tag("span", {
- textContent: "AI is thinking...",
- });
-
- loadingEl.appendChild(loadingDots);
- loadingEl.appendChild(text);
-
- messageContainerRef.el.appendChild(loadingEl);
- scrollToBottom();
- };
-
- const removeLoading = () => {
- const loadingEl =
- messageContainerRef.el.querySelector("#loading-indicator");
- if (loadingEl) {
- messageContainerRef.el.removeChild(loadingEl);
- }
- };
-
- const formatTime = (timestamp) => {
- const date = new Date(timestamp);
- return date.toLocaleTimeString([], { hour: "2-digit", minute: "2-digit" });
- };
-
- const copyToClipboard = (text) => {
- const { clipboard } = cordova.plugins;
- clipboard.copy(text || "");
- };
-
- const addMessage = (message) => {
- const messageEl = tag("div", {
- className: `message ${message.role === "user" ? "user" : ""}`,
- id: `message-${message.id}`,
- });
- const messageHeader = tag("div", { className: "message-header" });
- const messageSender = tag("div", {
- className: `message-sender ${message.role === "user" ? "user" : "ai"}`,
- textContent: message.role === "user" ? "You" : "AI",
- });
- const messageActions = tag("div", {
- className: "message-actions",
- });
- const messageTime = tag("div", {
- className: "message-time",
- textContent: formatTime(message.timestamp),
- });
- messageActions.appendChild(messageTime);
-
- if (message.role === "assistant") {
- const copyBtn = tag("button", {
- className: "btn btn-icon",
- title: "Copy message",
- child: tag("i", { className: "icon copy" }),
- onclick: () => copyToClipboard(message.content),
- });
- messageActions.appendChild(copyBtn);
- }
-
- if (message.role === "user") {
- const editBtn = tag("button", {
- className: "btn btn-icon",
- title: "Edit message",
- child: tag("i", { className: "icon edit" }),
- // TODO: Implement edit functionality
- //onclick: () => editMessage(message.id),
- });
- messageActions.appendChild(editBtn);
- }
-
- messageHeader.appendChild(messageSender);
- messageHeader.appendChild(messageActions);
-
- const messageContent = tag("div", {
- className: "message-content md",
- });
-
- if (message.role === "user") {
- messageContent.textContent = message.content;
- } else {
- messageContent.innerHTML = markdownIt().render(message.content);
- }
-
- messageEl.appendChild(messageHeader);
- messageEl.appendChild(messageContent);
- messageContainerRef.el.appendChild(messageEl);
- scrollToBottom();
- };
-
- // Generate a unique id for each message
- const generateMessageId = (() => {
- let counter = 0;
- return () => {
- counter += 1;
- return `msg_${Date.now()}_${counter}`;
- };
- })();
-
- // Store chat history in memory for this session
- let chatHistory = [];
- let currentController = null;
-
- const handleSendBtn = async () => {
- const userInput = chatInputRef.value.trim();
- if (!userInput) return;
-
- // Add user message to UI and history
- const userMsgId = generateMessageId();
- const userMessage = {
- id: userMsgId,
- role: "user",
- content: userInput,
- timestamp: Date.now(),
- };
- addMessage(userMessage);
- chatHistory.push({ role: "user", content: userInput });
-
- // Clear input
- chatInputRef.value = "";
- chatInputRef.style.height = "auto";
-
- // Show loading indicator
- showLoading();
-
- // Prepare inputs for agent
- let inputs = { messages: [...chatHistory] };
- currentController = new AbortController();
-
- sendBtnRef.el.style.display = "none";
- stopBtnRef.el.style.display = "block";
-
- const assistantMsgId = generateMessageId();
-
- try {
- const stream = await agent.stream(inputs, {
- streamMode: "messages",
- signal: currentController.signal,
- });
-
- // Remove loading indicator
- removeLoading();
-
- // Add assistant message placeholder
- const assistantMessage = {
- id: assistantMsgId,
- role: "assistant",
- content: "",
- timestamp: Date.now(),
- };
- addMessage(assistantMessage);
-
- const messageEl = messageContainerRef.el.querySelector(
- `#message-${assistantMsgId} .message-content`,
- );
- let streamedContent = "";
-
- for await (const [message, _metadata] of stream) {
- if (isAIMessageChunk(message) && message.tool_call_chunks?.length) {
- streamedContent += message.tool_call_chunks[0].args;
- } else {
- streamedContent += message.content;
- }
-
- if (messageEl) {
- messageEl.innerHTML = markdownIt().render(streamedContent);
- scrollToBottom();
- }
- }
-
- // After streaming, update chat history with assistant message
- chatHistory.push({ role: "assistant", content: streamedContent });
-
- const timeEl = messageContainerRef.el.querySelector(
- `#message-${assistantMsgId} .message-actions > div`,
- );
- if (timeEl) {
- timeEl.textContent = formatTime(Date.now());
- }
- } catch (err) {
- removeLoading();
- if (/abort/i.test(err.message)) {
- const messageEl = messageContainerRef.el.querySelector(
- `#message-${assistantMsgId} .message-content`,
- );
- if (messageEl) {
- messageEl.innerHTML += `Cancelled by user.`;
- }
- } else {
- const messageEl = messageContainerRef.el.querySelector(
- `#message-${assistantMsgId} .message-content`,
- );
- if (messageEl) {
- messageEl.innerHTML += markdownIt().render(`Error: ${err.message}`);
- }
- }
- } finally {
- // add custom code blocks with syntax highlighting
- const messageContent = messageContainerRef.el.querySelector(
- `#message-${assistantMsgId} .message-content`,
- );
-
- // Replace markdown code blocks with custom components
- messageContent.innerHTML = messageContent.innerHTML.replace(
- /([\s\S]*?)<\/code><\/pre>/g,
- (match, language, code) => {
- language = language || "plaintext";
-
- return `
-
-
-
-
- ${language}
-
-
-
-
-
-
-
-
- ${code}
-
-
-
- Show more
-
-
- `;
- },
- );
-
- // Process all code blocks
- const codeBlocks = messageContent.querySelectorAll(".code-block");
- codeBlocks.forEach((codeBlock) => {
- const codeContent = codeBlock.querySelector(".code-content");
- const codeElement = codeBlock.querySelector("code");
- const copyButton = codeBlock.querySelector(".code-copy");
- const expandButton = codeBlock.querySelector(".code-expand");
-
- // Apply Ace highlighting
- if (codeElement) {
- const langMatch = codeElement.className.match(/language-(\w+)/);
- if (langMatch) {
- const langMap = {
- bash: "sh",
- shell: "sh",
- };
- const lang = langMatch[1];
- const mappedLang = langMap[lang] || lang;
- const highlight = ace.require("ace/ext/static_highlight");
- highlight.render(
- codeElement.textContent,
- `ace/mode/${mappedLang}`,
- settings.value.editorTheme.startsWith("ace/theme/")
- ? settings.value.editorTheme
- : "ace/theme/" + settings.value.editorTheme,
- 1,
- true,
- (highlighted) => {
- aiTabInstance?.addStyle(highlighted.css);
- codeElement.innerHTML = highlighted.html;
- },
- );
- }
- }
-
- // copy functionality
- copyButton.addEventListener("click", async () => {
- const code = codeElement?.textContent || "";
- try {
- cordova.plugins.clipboard.copy(code);
- copyButton.querySelector("i").className = "icon check";
- setTimeout(() => {
- copyButton.querySelector("i").className = "icon copy";
- }, 2000);
- } catch (err) {
- copyButton.querySelector("i").className =
- "icon warningreport_problem";
- setTimeout(() => {
- copyButton.querySelector("i").className = "icon copy";
- }, 2000);
- }
- });
-
- // expand/collapse functionality
- expandButton.addEventListener("click", () => {
- const isExpanded = codeContent.classList.contains("expanded");
- codeContent.classList.toggle("expanded", !isExpanded);
- expandButton.innerHTML = isExpanded
- ? ` Show more`
- : ` Show less`;
- });
-
- // Only show expand button if content overflows
- if (codeContent.scrollHeight <= codeContent.clientHeight) {
- expandButton.style.display = "none";
- }
- });
-
- currentController = null;
- sendBtnRef.el.style.display = "block";
- stopBtnRef.el.style.display = "none";
- }
- };
-
- const handleStopBtn = () => {
- if (currentController) {
- currentController?.abort();
- currentController = null;
- stopBtnRef.el.style.display = "none";
- sendBtnRef.el.style.display = "block";
- }
- };
-
- const aiAssistantContainer = (
-
- {/* Header */}
-
-
-
-
- New Chat
-
-
-
-
- History
-
-
-
-
-
- Ask
-
-
-
-
-
-
-
-
-
-
-
- {/* Main content */}
-
- {/* Chat history sidebar */}
-
-
- CHAT HISTORY
-
-
-
-
-
-
-
-
-
- File upload component
-
-
-
-
-
- Authentication implementation
-
-
-
-
-
- React state management
-
-
-
-
- {/* Messages area */}
-
-
- {/* Messages will be added here dynamically */}
-
-
-
-
- {/* Input area */}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
-
- chatInputRef.el.addEventListener("input", handleChatInput);
-
- const uri = "ai://assistant";
-
- // Check if the tab is already open
- const existingFile = editorManager.getFile(uri, "uri");
-
- if (existingFile) {
- existingFile.makeActive();
- return;
- }
-
- // Create a new EditorFile instance for the AI Assistant tab
- aiTabInstance = new EditorFile("AI Assistant", {
- uri: uri,
- type: "page",
- tabIcon: "file file_type_assistant",
- content: aiAssistantContainer,
- render: true,
- stylesheets: styles,
- hideQuickTools: true,
- });
-}
+ // References
+ const profileBtnRef = new Ref();
+ const historySidebarRef = new Ref();
+ const chatInputRef = new Ref();
+ const sendBtnRef = new Ref();
+ const messageContainerRef = new Ref();
+ const stopBtnRef = new Ref();
+
+ let currentProfile = "ask";
+ let currentConversationId = null;
+ let currentConversation = null;
+ let chatHistory = [];
+ let currentController = null;
+ let aiTabInstance;
+
+ const GEMINI_API_KEY = ""; // Replace
+ const agentCheckpointer = new MemorySaver();
+ const model = new ChatGoogleGenerativeAI( {
+ model: "gemini-2.0-flash",
+ apiKey: GEMINI_API_KEY,
+ });
+ const agent = createReactAgent( {
+ llm: model,
+ tools: [],
+ checkpointSaver: agentCheckpointer
+ });
+
+ const generateConversationId = () => `conv_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;
+ const generateMessageId = (() => {
+ let counter = 0;
+ return () => `msg_${Date.now()}_${++counter}`;
+ })();
+
+ const formatTime = (timestamp) => new Date(timestamp).toLocaleTimeString([], {
+ hour: "2-digit", minute: "2-digit"
+ });
+
+ const copyToClipboard = (text) => {
+ cordova.plugins.clipboard.copy(text || "");
+ };
+
+ const scrollToBottom = () => {
+ messageContainerRef.el.scrollTop = messageContainerRef.el.scrollHeight;
+ };
+
+ const addMessage = (message) => {
+ const messageEl = tag("div", {
+ className: `message ${message.role === "user" ? "user": ""}`,
+ id: `message-${message.id}`,
+ });
+ const messageHeader = tag("div", {
+ className: "message-header"
+ });
+ const messageSender = tag("div", {
+ className: `message-sender ${message.role === "user" ? "user": "ai"}`,
+ textContent: message.role === "user" ? "You": "AI",
+ });
+ const messageActions = tag("div", {
+ className: "message-actions",
+ });
+ const messageTime = tag("div", {
+ className: "message-time",
+ textContent: formatTime(message.timestamp),
+ });
+ messageActions.appendChild(messageTime);
+
+ if (message.role === "assistant") {
+ const copyBtn = tag("button", {
+ className: "btn btn-icon",
+ title: "Copy message",
+ child: tag("i", {
+ className: "icon copy"
+ }),
+ onclick: () => copyToClipboard(message.content),
+ });
+ messageActions.appendChild(copyBtn);
+ }
+
+ if (message.role === "user") {
+ const editBtn = tag("button", {
+ className: "btn btn-icon",
+ title: "Edit message",
+ child: tag("i", {
+ className: "icon edit"
+ }),
+ // TODO: Implement edit functionality
+ //onclick: () => editMessage(message.id),
+ });
+ messageActions.appendChild(editBtn);
+ }
+
+ messageHeader.appendChild(messageSender);
+ messageHeader.appendChild(messageActions);
+
+ const messageContent = tag("div", {
+ className: "message-content md",
+ });
+
+ if (message.role === "user") {
+ messageContent.textContent = message.content;
+ } else {
+ messageContent.innerHTML = markdownIt().render(message.content);
+ }
+
+ messageEl.appendChild(messageHeader);
+ messageEl.appendChild(messageContent);
+ messageContainerRef.el.appendChild(messageEl);
+ scrollToBottom();
+ };
+
+ /**
+ * Updates the profile button appearance and state
+ * @param {string} profile - Profile type ("ask" or "write")
+ */
+ const handleProfileSwitch = (profile) => {
+ const iconEl = profileBtnRef.el.querySelector("i:first-child");
+ const textEl = profileBtnRef.el.querySelector("span");
+
+ currentProfile = profile;
+
+ // Update button appearance based on selected profile
+ if (profile === "ask") {
+ iconEl.className = "icon help";
+ textEl.textContent = "Ask";
+ } else {
+ iconEl.className = "icon edit";
+ textEl.textContent = "Write";
+ }
+ };
+
+ /**
+ * Shows profile selection menu
+ */
+ const showProfileMenu = async (e) => {
+ e.preventDefault();
+ const profile = await select("Select Profile", [{
+ value: "ask", text: "Ask", icon: "help"
+ },
+ {
+ value: "write", text: "Write", icon: "edit"
+ },
+ ]);
+ handleProfileSwitch(profile);
+ };
+ const toggleHistorySidebar = () => {
+ historySidebarRef.classList.toggle("hidden");
+ };
+
+ const showLoading = () => {
+ const loadingEl = tag("div", {
+ className: "ai_loading",
+ id: "loading-indicator",
+ });
+ const loadingDots = tag("div", {
+ className: "loading-dots",
+ });
+
+ for (let i = 0; i < 3; i++) {
+ const dot = tag("div", {
+ className: "loading-dot",
+ });
+ loadingDots.appendChild(dot);
+ }
+
+ const text = tag("span", {
+ textContent: "AI is thinking...",
+ });
+
+ loadingEl.appendChild(loadingDots);
+ loadingEl.appendChild(text);
+
+ messageContainerRef.el.appendChild(loadingEl);
+ scrollToBottom();
+ };
+
+ const removeLoading = () => {
+ const loadingEl =
+ messageContainerRef.el.querySelector("#loading-indicator");
+ if (loadingEl) {
+ messageContainerRef.el.removeChild(loadingEl);
+ }
+ };
+
+ const handleChatInput = () => {
+ sendBtnRef.el.disabled = chatInputRef.value.trim().length === 0;
+ chatInputRef.el.style.height = "auto";
+ chatInputRef.el.style.height =
+ Math.min(chatInputRef.el.scrollHeight, 120) + `px`;
+ };
+
+ async function updateHistorySidebar() {
+ if (!historySidebarRef.el) return;
+ const conversations = await getAllConversations();
+ const historyItemsContainer = historySidebarRef.el.querySelector(".chat-history");
+ if (!historyItemsContainer) return;
+ historyItemsContainer.innerHTML = '';
+ conversations.forEach(conv => {
+ const item = document.createElement('div');
+ item.className = `history-item ${conv.id === currentConversationId ? 'active': ''}`;
+ item.onclick = () => {
+ if (conv.id !== currentConversationId) loadOrCreateConversation(conv.id);
+ };
+
+ const iconWrapper = document.createElement('div');
+ iconWrapper.className = "history-icon";
+ const icon = document.createElement('i');
+ icon.className = `icon ${conv.profile === 'write' ? 'edit': 'chat_bubble'}`;
+ iconWrapper.appendChild(icon);
+
+ const text = document.createElement('div');
+ text.className = 'history-text';
+ text.textContent = conv.title || "Untitled Chat";
+
+ item.append(iconWrapper, text);
+ historyItemsContainer.appendChild(item);
+ });
+ }
+
+ async function loadOrCreateConversation(conversationIdToLoad) {
+ if (currentController) currentController.abort();
+ currentController = null;
+
+ if (conversationIdToLoad) {
+ const conversation = await getConversation(conversationIdToLoad);
+ if (conversation) {
+ currentConversation = conversation;
+ currentConversationId = conversation.id;
+ handleProfileSwitch(currentConversation.profile || "ask");
+ const messagesFromDB = await getMessagesForConversation(currentConversationId);
+ if (messageContainerRef.el) messageContainerRef.el.innerHTML = '';
+ chatHistory = [];
+ messagesFromDB.forEach(msg => {
+ addMessage(msg);
+ chatHistory.push({
+ role: msg.role, content: msg.content
+ });
+ });
+ } else {
+ console.warn(`Conversation ${conversationIdToLoad} not found. Starting new one.`);
+ conversationIdToLoad = null;
+ }
+ }
+
+ if (!conversationIdToLoad) {
+ currentConversationId = generateConversationId();
+ const now = Date.now();
+ currentConversation = {
+ id: currentConversationId,
+ title: "New Chat",
+ createdAt: now,
+ lastModifiedAt: now,
+ profile: currentProfile,
+ };
+ await addConversation(currentConversation);
+ chatHistory = [];
+ if (messageContainerRef.el) messageContainerRef.el.innerHTML = '';
+ }
+ updateHistorySidebar();
+ if (chatInputRef.el) chatInputRef.el.focus();
+ }
+
+ async function saveUserMessageAndUpdateConversation(userMessage, currentConv, isFirstUIMessage) {
+ if (isFirstUIMessage && currentConv && currentConv.title === "New Chat") {
+ currentConv.title = userMessage.content.substring(0, 30) + (userMessage.content.length > 30 ? "...": "");
+ }
+ if (currentConv) {
+ currentConv.lastModifiedAt = Date.now();
+ await updateConversation(currentConv);
+ }
+ await addMessageToDB(userMessage);
+ }
+
+ const handleSendBtn = async () => {
+ const userInput = chatInputRef.value.trim();
+
+ if (!userInput)
+ return;
+ if (!currentConversationId) {
+ alert("Error: No active conversation. Please start a new chat.");
+ return;
+ }
+
+ const userMsgId = {
+ id: generateMessageId(),
+ conversationId: currentConversationId,
+ role: "user",
+ content: userInput,
+ timestamp: Date.now(),
+ };
+ addMessage(userMsgId);
+
+ const userMessageForAgent = {
+ role: "user",
+ content: userInput
+ };
+ chatHistory.push(userMessageForAgent);
+
+ chatInputRef.el.value = "";
+ handleChatInput();
+ saveUserMessageAndUpdateConversation(userMsgId, currentConversation, chatHistory.filter(msg => msg.role === 'user').length === 1);
+
+ showLoading();
+
+ let messagesForAgentTurn;
+ const systemPrompt = {
+ role: "system",
+ content: `You are an AI assistant in Acode code editor. Profile: ${currentProfile}. Be helpful and concise.`
+ };
+ //Gemini Api expects system prompt as first message
+ if (chatHistory.filter(msg => msg.role === 'user').length === 1) {
+ messagesForAgentTurn = [systemPrompt,
+ userMessageForAgent];
+ } else {
+ messagesForAgentTurn = [userMessageForAgent];
+ }
+
+ currentController = new AbortController();
+ sendBtnRef.el.style.display = "none";
+ stopBtnRef.el.style.display = "block";
+
+ const assistantMsgId = generateMessageId();
+ let streamedContent = "";
+ let wasError = false;
+ let finalTimestamp = Date.now();
+ const md = markdownIt( {
+ html: true, linkify: true, typographer: true
+ });
+
+ try {
+ const assistantPlaceholderMsg = {
+ id: assistantMsgId,
+ conversationId: currentConversationId,
+ role: "assistant",
+ content: "▌",
+ timestamp: Date.now(),
+ };
+ addMessage(assistantPlaceholderMsg);
+
+ const messageElContent = messageContainerRef.el.querySelector(`#message-${assistantMsgId} .message-content`);
+ removeLoading();
+
+
+ //Chat history not passed anymore, memory saver and checkpoint will handle context
+ const inputsForAgent = {
+ messages: messagesForAgentTurn
+ };
+
+ const stream = await agent.stream(inputsForAgent, {
+ streamMode: "messages", signal: currentController.signal,
+ //thread_id is the checkpoint marker
+ configurable: {
+ thread_id: currentConversationId
+ }
+ });
+
+ for await (const eventData of stream) {
+ let messageChunkPayload = null;
+ if (Array.isArray(eventData) && eventData.length > 0 && eventData[0] && typeof eventData[0].content !== 'undefined') {
+ messageChunkPayload = eventData[0];
+ } else if (eventData && typeof eventData.content !== 'undefined') {
+ messageChunkPayload = eventData;
+ }
+
+ let chunkText = "";
+ if (messageChunkPayload) {
+ if (isAIMessageChunk(messageChunkPayload) && messageChunkPayload.tool_call_chunks?.length) {
+ chunkText = messageChunkPayload.tool_call_chunks.map(tc => tc.args ? JSON.stringify(tc.args): "").join("\n");
+ } else if (typeof messageChunkPayload.content === 'string') {
+ chunkText = messageChunkPayload.content;
+ } else if (typeof messageChunkPayload === 'string') {
+ chunkText = messageChunkPayload;
+ }
+ }
+
+ if (chunkText) {
+ streamedContent += chunkText;
+ if (messageElContent) {
+ messageElContent.innerHTML = md.render(streamedContent + " ▌");
+ scrollToBottom();
+ }
+ }
+ }
+ finalTimestamp = Date.now();
+ if (messageElContent) {
+ messageElContent.innerHTML = md.render(streamedContent);
+ }
+ } catch (err) {
+ removeLoading();
+ wasError = true;
+ finalTimestamp = Date.now();
+ const isAbort = err.name === 'AbortError' || (err.message && /abort/i.test(err.message));
+ streamedContent = isAbort ? "Streaming cancelled by user.": `Error: ${err.message || 'Unknown error.'}`;
+
+ const targetMessageElContent = messageContainerRef.el.querySelector(`#message-${assistantMsgId} .message-content`);
+ if (targetMessageElContent) {
+ const errorColor = isAbort ? 'var(--warning-text-color)': 'var(--error-text-color)';
+ targetMessageElContent.innerHTML = `${isAbort ? streamedContent: md.render(streamedContent)}`;
+ }
+ } finally {
+ currentController = null;
+ if (sendBtnRef.el) sendBtnRef.el.style.display = "block";
+ if (stopBtnRef.el) stopBtnRef.el.style.display = "none";
+ handleChatInput();
+
+ const assistantFinalData = {
+ id: assistantMsgId,
+ conversationId: currentConversationId,
+ role: "assistant",
+ content: streamedContent,
+ timestamp: finalTimestamp,
+ };
+ await addMessageToDB(assistantFinalData);
+ if (currentConversation && !wasError) {
+ currentConversation.lastModifiedAt = finalTimestamp;
+ await updateConversation(currentConversation);
+ }
+
+ if (!wasError) {
+ chatHistory.push({
+ role: "assistant", content: streamedContent
+ });
+ }
+ updateHistorySidebar();
+
+ const messageContentElToFinalize = messageContainerRef.el?.querySelector(`#message-${assistantMsgId} .message-content`);
+ if (messageContentElToFinalize && !wasError) {
+ const timeEl = messageContainerRef.el.querySelector(`#message-${assistantMsgId} .message-actions .message-time`);
+ if (timeEl) timeEl.textContent = formatTime(finalTimestamp);
+
+ messageContentElToFinalize.innerHTML = messageContentElToFinalize.innerHTML.replace(
+ /([\s\S]*?)<\/code><\/pre>/g,
+ (match, language, code) => {
+ language = language || "plaintext";
+ code = he.decode(code);
+ return `
+
+
+ ${language}
+
+
+ ${code}
+ Show more
+ `;
+ }
+ );
+
+ messageContentElToFinalize.querySelectorAll(".code-block").forEach(codeBlock => {
+ const codeContent = codeBlock.querySelector(".code-content");
+ const codeElement = codeBlock.querySelector("pre code");
+ const copyButton = codeBlock.querySelector(".code-copy");
+ const expandButton = codeBlock.querySelector(".code-expand");
+ // expand/collapse functionality
+ expandButton.addEventListener("click", () => {
+ const isExpanded = codeContent.classList.contains("expanded");
+ codeContent.classList.toggle("expanded", !isExpanded);
+ expandButton.innerHTML = isExpanded
+ ? ` Show more`: ` Show less`;
+ });
+
+ // Only show expand button if content overflows
+ if (codeContent.scrollHeight <= codeContent.clientHeight) {
+ expandButton.style.display = "none";
+ }
+
+ });
+ }
+ }
+ };
+
+ const handleStopBtn = () => {
+ if (currentController) {
+ currentController?.abort();
+ currentController = null;
+ stopBtnRef.el.style.display = "none";
+ sendBtnRef.el.style.display = "block";
+ }
+ };
+
+
+ const aiAssistantContainer = (
+
+ {/* Header */}
+
+
+ loadOrCreateConversation(null)}>
+
+ New Chat
+
+
+
+
+ History
+
+
+
+
+
+ Ask
+
+
+
+
+
+
+
+ {/* onclick for settings TODO: e.g. onclick={openSettingsPage} */}
+
+
+
+
+ {/* Main content */}
+
+
+
+ CHAT HISTORY
+
+
+ {/* onclick={() => loadOrCreateConversation(null)} */}
+
+
+
+ {/* Populated by updateHistorySidebar */}
+
+
+
+
+
+ {/* Messages are added by addMessage function */}
+
+
+
+
+ {/* Input area */}
+
+
+
+
+ {/* onclick for attach file: e.g. onclick={handleAttachFile} */}
+
+
+
+
+ {/* Upstream icon */}
+
+
+
+
+
+
+
+
+ );
+
+ (async () => {
+ try {
+ const conversations = await getAllConversations();
+ if (conversations.length > 0) {
+ await loadOrCreateConversation(conversations[0].id);
+ } else {
+ await loadOrCreateConversation(null);
+ }
+ } catch (error) {
+ console.error("Failed to initialize AI Assistant page or database:", error);
+ const errDiv = `Failed to initialize AI Assistant: ${error.message}. Ensure SQLite plugin is functional.`;
+ if (messageContainerRef.el) {
+ // Check after potential rendering by EditorFile
+ messageContainerRef.el.innerHTML = errDiv;
+ } else {
+
+ alert(`Critical Error: AI Assistant failed to initialize. ${error.message}`);
+ }
+ }
+ })();
+
+ const uri = "ai://assistant";
+ const existingFile = window.editorManager.getFile(uri,
+ "uri");
+ if (existingFile) {
+ existingFile.makeActive();
+ return;
+ }
+
+ aiTabInstance = new EditorFile("AI Assistant", {
+ uri: uri, type: "page", tabIcon: "file file_type_assistant",
+ content: aiAssistantContainer,
+ render: true,
+ stylesheets: [styles],
+ hideQuickTools: true,
+ });
+}
\ No newline at end of file
diff --git a/src/pages/aiAssistant/db.js b/src/pages/aiAssistant/db.js
new file mode 100644
index 000000000..bb96a3447
--- /dev/null
+++ b/src/pages/aiAssistant/db.js
@@ -0,0 +1,215 @@
+// src/pages/aiAssistant/db.js (or a more general lib folder)
+
+const DB_NAME = "AIAssistant.db"; // SQLite convention for .db extension
+const DB_LOCATION = "default"; // Standard location
+
+let db = null;
+
+// Function to open or create the database
+function openDB() {
+ return new Promise((resolve, reject) => {
+ if (db) {
+ return resolve(db);
+ }
+ if (!window.sqlitePlugin) {
+ const msg = "SQLite plugin is not available. Make sure cordova-sqlite-storage is installed and deviceready has fired.";
+ console.error(msg);
+ // TODO: Maybe want to queue DB operations or show an error to the user
+ return reject(new Error(msg));
+ }
+
+ db = window.sqlitePlugin.openDatabase(
+ { name: DB_NAME, location: DB_LOCATION },
+ (openedDb) => {
+ console.log("SQLite DB opened successfully");
+ db = openedDb; // Assign the opened DB instance
+ initializeTables().then(() => resolve(db)).catch(reject);
+ },
+ (error) => {
+ console.error("Error opening SQLite DB:", JSON.stringify(error));
+ reject(error);
+ }
+ );
+ });
+}
+
+// Function to initialize tables if they don't exist
+function initializeTables() {
+ return new Promise((resolve, reject) => {
+ if (!db) return reject(new Error("DB not open for table initialization"));
+ db.transaction((tx) => {
+ tx.executeSql(`
+ CREATE TABLE IF NOT EXISTS conversations (
+ id TEXT PRIMARY KEY,
+ title TEXT,
+ createdAt INTEGER,
+ lastModifiedAt INTEGER,
+ profile TEXT
+ )
+ `);
+ tx.executeSql(`
+ CREATE TABLE IF NOT EXISTS messages (
+ id TEXT PRIMARY KEY,
+ conversationId TEXT,
+ role TEXT,
+ content TEXT,
+ timestamp INTEGER,
+ FOREIGN KEY (conversationId) REFERENCES conversations(id) ON DELETE CASCADE
+ )
+ `);
+ // Index for faster querying of messages by conversationId and sorting
+ tx.executeSql(`CREATE INDEX IF NOT EXISTS idx_messages_conversationId_timestamp ON messages (conversationId, timestamp)`);
+ tx.executeSql(`CREATE INDEX IF NOT EXISTS idx_conversations_lastModifiedAt ON conversations (lastModifiedAt)`);
+
+ }, (error) => {
+ console.error("Transaction error during table initialization:", JSON.stringify(error));
+ reject(error);
+ }, () => {
+ console.log("Tables initialized (or already exist).");
+ resolve();
+ });
+ });
+}
+
+// --- Helper for executing SQL ---
+function executeSqlAsync(transaction, sql, params = []) {
+ return new Promise((resolve, reject) => {
+ transaction.executeSql(sql, params,
+ (tx, resultSet) => resolve(resultSet),
+ (tx, error) => {
+ console.error("SQL Error:", error.message, "Query:", sql, "Params:", params);
+ reject(error);
+ }
+ );
+ });
+}
+
+
+// --- Conversation Functions ---
+export async function addConversation(conversation) {
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.transaction(async (tx) => {
+ try {
+ await executeSqlAsync(tx,
+ "INSERT INTO conversations (id, title, createdAt, lastModifiedAt, profile) VALUES (?, ?, ?, ?, ?)",
+ [conversation.id, conversation.title, conversation.createdAt, conversation.lastModifiedAt, conversation.profile]
+ );
+ resolve(conversation.id);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
+}
+
+export async function getConversation(id) {
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.readTransaction(async (tx) => { // Use readTransaction for reads
+ try {
+ const resultSet = await executeSqlAsync(tx, "SELECT * FROM conversations WHERE id = ?", [id]);
+ if (resultSet.rows.length > 0) {
+ resolve(resultSet.rows.item(0));
+ } else {
+ resolve(null); // Or undefined, consistent with IndexedDB version
+ }
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
+}
+
+export async function getAllConversations() {
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.readTransaction(async (tx) => {
+ try {
+ const resultSet = await executeSqlAsync(tx, "SELECT * FROM conversations ORDER BY lastModifiedAt DESC");
+ const conversations = [];
+ for (let i = 0; i < resultSet.rows.length; i++) {
+ conversations.push(resultSet.rows.item(i));
+ }
+ resolve(conversations);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
+}
+
+export async function updateConversation(conversation) {
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.transaction(async (tx) => {
+ try {
+ await executeSqlAsync(tx,
+ "UPDATE conversations SET title = ?, lastModifiedAt = ?, profile = ? WHERE id = ?",
+ [conversation.title, conversation.lastModifiedAt, conversation.profile, conversation.id]
+ );
+ resolve(conversation.id);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
+}
+
+// --- Message Functions ---
+export async function addMessageToDB(message) {
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.transaction(async (tx) => {
+ try {
+ await executeSqlAsync(tx,
+ "INSERT INTO messages (id, conversationId, role, content, timestamp) VALUES (?, ?, ?, ?, ?)",
+ [message.id, message.conversationId, message.role, message.content, message.timestamp]
+ );
+ resolve(message.id);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
+}
+
+export async function getMessagesForConversation(conversationId) {
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.readTransaction(async (tx) => {
+ try {
+ const resultSet = await executeSqlAsync(tx,
+ "SELECT * FROM messages WHERE conversationId = ? ORDER BY timestamp ASC",
+ [conversationId]
+ );
+ const messages = [];
+ for (let i = 0; i < resultSet.rows.length; i++) {
+ messages.push(resultSet.rows.item(i));
+ }
+ resolve(messages);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
+}
+
+// --- Deletion functions (example) ---
+export async function deleteConversation(conversationId) {
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.transaction(async (tx) => {
+ try {
+ // CASCADE DELETE on messages table should handle associated messages
+ await executeSqlAsync(tx, "DELETE FROM conversations WHERE id = ?", [conversationId]);
+ console.log(`Conversation ${conversationId} and its messages deleted.`);
+ resolve();
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
+}
+
+// Ensure DB is opened and tables initialized when module loads or on first call
\ No newline at end of file
From 2d536be86cd4d67f190f591e9be93619175792a9 Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Sun, 1 Jun 2025 09:45:39 +0530
Subject: [PATCH 08/26] fix: formatting
---
src/pages/aiAssistant/assistant.js | 1376 +++++++++++++++-------------
src/pages/aiAssistant/db.js | 360 ++++----
2 files changed, 925 insertions(+), 811 deletions(-)
diff --git a/src/pages/aiAssistant/assistant.js b/src/pages/aiAssistant/assistant.js
index 8ad818bd6..6f04f1d02 100644
--- a/src/pages/aiAssistant/assistant.js
+++ b/src/pages/aiAssistant/assistant.js
@@ -1,468 +1,511 @@
-import {
- isAIMessageChunk
-} from "@langchain/core/messages";
-import {
- ChatGoogleGenerativeAI
-} from "@langchain/google-genai";
-import {
- createReactAgent
-} from "@langchain/langgraph/prebuilt";
+import { isAIMessageChunk } from "@langchain/core/messages";
+import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
+import { MemorySaver } from "@langchain/langgraph-checkpoint";
+import { createReactAgent } from "@langchain/langgraph/prebuilt";
import select from "dialogs/select";
+import he from "he";
import Ref from "html-tag-js/ref";
import EditorFile from "lib/editorFile";
import settings from "lib/settings";
import markdownIt from "markdown-it";
import styles from "./assistant.module.scss";
import {
- addConversation,
- getConversation,
- getAllConversations,
- updateConversation,
- deleteConversation,
- addMessageToDB,
- getMessagesForConversation
-} from './db';
-import {
- MemorySaver
-} from "@langchain/langgraph-checkpoint";
-import he from 'he';
+ addConversation,
+ addMessageToDB,
+ deleteConversation,
+ getAllConversations,
+ getConversation,
+ getMessagesForConversation,
+ updateConversation,
+} from "./db";
export default function openAIAssistantPage() {
- // References
- const profileBtnRef = new Ref();
- const historySidebarRef = new Ref();
- const chatInputRef = new Ref();
- const sendBtnRef = new Ref();
- const messageContainerRef = new Ref();
- const stopBtnRef = new Ref();
-
- let currentProfile = "ask";
- let currentConversationId = null;
- let currentConversation = null;
- let chatHistory = [];
- let currentController = null;
- let aiTabInstance;
-
- const GEMINI_API_KEY = ""; // Replace
- const agentCheckpointer = new MemorySaver();
- const model = new ChatGoogleGenerativeAI( {
- model: "gemini-2.0-flash",
- apiKey: GEMINI_API_KEY,
- });
- const agent = createReactAgent( {
- llm: model,
- tools: [],
- checkpointSaver: agentCheckpointer
- });
-
- const generateConversationId = () => `conv_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;
- const generateMessageId = (() => {
- let counter = 0;
- return () => `msg_${Date.now()}_${++counter}`;
- })();
-
- const formatTime = (timestamp) => new Date(timestamp).toLocaleTimeString([], {
- hour: "2-digit", minute: "2-digit"
- });
-
- const copyToClipboard = (text) => {
- cordova.plugins.clipboard.copy(text || "");
- };
-
- const scrollToBottom = () => {
- messageContainerRef.el.scrollTop = messageContainerRef.el.scrollHeight;
- };
-
- const addMessage = (message) => {
- const messageEl = tag("div", {
- className: `message ${message.role === "user" ? "user": ""}`,
- id: `message-${message.id}`,
- });
- const messageHeader = tag("div", {
- className: "message-header"
- });
- const messageSender = tag("div", {
- className: `message-sender ${message.role === "user" ? "user": "ai"}`,
- textContent: message.role === "user" ? "You": "AI",
- });
- const messageActions = tag("div", {
- className: "message-actions",
- });
- const messageTime = tag("div", {
- className: "message-time",
- textContent: formatTime(message.timestamp),
- });
- messageActions.appendChild(messageTime);
-
- if (message.role === "assistant") {
- const copyBtn = tag("button", {
- className: "btn btn-icon",
- title: "Copy message",
- child: tag("i", {
- className: "icon copy"
- }),
- onclick: () => copyToClipboard(message.content),
- });
- messageActions.appendChild(copyBtn);
- }
-
- if (message.role === "user") {
- const editBtn = tag("button", {
- className: "btn btn-icon",
- title: "Edit message",
- child: tag("i", {
- className: "icon edit"
- }),
- // TODO: Implement edit functionality
- //onclick: () => editMessage(message.id),
- });
- messageActions.appendChild(editBtn);
- }
-
- messageHeader.appendChild(messageSender);
- messageHeader.appendChild(messageActions);
-
- const messageContent = tag("div", {
- className: "message-content md",
- });
-
- if (message.role === "user") {
- messageContent.textContent = message.content;
- } else {
- messageContent.innerHTML = markdownIt().render(message.content);
- }
-
- messageEl.appendChild(messageHeader);
- messageEl.appendChild(messageContent);
- messageContainerRef.el.appendChild(messageEl);
- scrollToBottom();
- };
-
- /**
- * Updates the profile button appearance and state
- * @param {string} profile - Profile type ("ask" or "write")
- */
- const handleProfileSwitch = (profile) => {
- const iconEl = profileBtnRef.el.querySelector("i:first-child");
- const textEl = profileBtnRef.el.querySelector("span");
-
- currentProfile = profile;
-
- // Update button appearance based on selected profile
- if (profile === "ask") {
- iconEl.className = "icon help";
- textEl.textContent = "Ask";
- } else {
- iconEl.className = "icon edit";
- textEl.textContent = "Write";
- }
- };
-
- /**
- * Shows profile selection menu
- */
- const showProfileMenu = async (e) => {
- e.preventDefault();
- const profile = await select("Select Profile", [{
- value: "ask", text: "Ask", icon: "help"
- },
- {
- value: "write", text: "Write", icon: "edit"
- },
- ]);
- handleProfileSwitch(profile);
- };
- const toggleHistorySidebar = () => {
- historySidebarRef.classList.toggle("hidden");
- };
-
- const showLoading = () => {
- const loadingEl = tag("div", {
- className: "ai_loading",
- id: "loading-indicator",
- });
- const loadingDots = tag("div", {
- className: "loading-dots",
- });
-
- for (let i = 0; i < 3; i++) {
- const dot = tag("div", {
- className: "loading-dot",
- });
- loadingDots.appendChild(dot);
- }
-
- const text = tag("span", {
- textContent: "AI is thinking...",
- });
-
- loadingEl.appendChild(loadingDots);
- loadingEl.appendChild(text);
-
- messageContainerRef.el.appendChild(loadingEl);
- scrollToBottom();
- };
-
- const removeLoading = () => {
- const loadingEl =
- messageContainerRef.el.querySelector("#loading-indicator");
- if (loadingEl) {
- messageContainerRef.el.removeChild(loadingEl);
- }
- };
-
- const handleChatInput = () => {
- sendBtnRef.el.disabled = chatInputRef.value.trim().length === 0;
- chatInputRef.el.style.height = "auto";
- chatInputRef.el.style.height =
- Math.min(chatInputRef.el.scrollHeight, 120) + `px`;
- };
-
- async function updateHistorySidebar() {
- if (!historySidebarRef.el) return;
- const conversations = await getAllConversations();
- const historyItemsContainer = historySidebarRef.el.querySelector(".chat-history");
- if (!historyItemsContainer) return;
- historyItemsContainer.innerHTML = '';
- conversations.forEach(conv => {
- const item = document.createElement('div');
- item.className = `history-item ${conv.id === currentConversationId ? 'active': ''}`;
- item.onclick = () => {
- if (conv.id !== currentConversationId) loadOrCreateConversation(conv.id);
- };
-
- const iconWrapper = document.createElement('div');
- iconWrapper.className = "history-icon";
- const icon = document.createElement('i');
- icon.className = `icon ${conv.profile === 'write' ? 'edit': 'chat_bubble'}`;
- iconWrapper.appendChild(icon);
-
- const text = document.createElement('div');
- text.className = 'history-text';
- text.textContent = conv.title || "Untitled Chat";
-
- item.append(iconWrapper, text);
- historyItemsContainer.appendChild(item);
- });
- }
-
- async function loadOrCreateConversation(conversationIdToLoad) {
- if (currentController) currentController.abort();
- currentController = null;
-
- if (conversationIdToLoad) {
- const conversation = await getConversation(conversationIdToLoad);
- if (conversation) {
- currentConversation = conversation;
- currentConversationId = conversation.id;
- handleProfileSwitch(currentConversation.profile || "ask");
- const messagesFromDB = await getMessagesForConversation(currentConversationId);
- if (messageContainerRef.el) messageContainerRef.el.innerHTML = '';
- chatHistory = [];
- messagesFromDB.forEach(msg => {
- addMessage(msg);
- chatHistory.push({
- role: msg.role, content: msg.content
- });
- });
- } else {
- console.warn(`Conversation ${conversationIdToLoad} not found. Starting new one.`);
- conversationIdToLoad = null;
- }
- }
-
- if (!conversationIdToLoad) {
- currentConversationId = generateConversationId();
- const now = Date.now();
- currentConversation = {
- id: currentConversationId,
- title: "New Chat",
- createdAt: now,
- lastModifiedAt: now,
- profile: currentProfile,
- };
- await addConversation(currentConversation);
- chatHistory = [];
- if (messageContainerRef.el) messageContainerRef.el.innerHTML = '';
- }
- updateHistorySidebar();
- if (chatInputRef.el) chatInputRef.el.focus();
- }
-
- async function saveUserMessageAndUpdateConversation(userMessage, currentConv, isFirstUIMessage) {
- if (isFirstUIMessage && currentConv && currentConv.title === "New Chat") {
- currentConv.title = userMessage.content.substring(0, 30) + (userMessage.content.length > 30 ? "...": "");
- }
- if (currentConv) {
- currentConv.lastModifiedAt = Date.now();
- await updateConversation(currentConv);
- }
- await addMessageToDB(userMessage);
- }
-
- const handleSendBtn = async () => {
- const userInput = chatInputRef.value.trim();
-
- if (!userInput)
- return;
- if (!currentConversationId) {
- alert("Error: No active conversation. Please start a new chat.");
- return;
- }
-
- const userMsgId = {
- id: generateMessageId(),
- conversationId: currentConversationId,
- role: "user",
- content: userInput,
- timestamp: Date.now(),
- };
- addMessage(userMsgId);
-
- const userMessageForAgent = {
- role: "user",
- content: userInput
- };
- chatHistory.push(userMessageForAgent);
-
- chatInputRef.el.value = "";
- handleChatInput();
- saveUserMessageAndUpdateConversation(userMsgId, currentConversation, chatHistory.filter(msg => msg.role === 'user').length === 1);
-
- showLoading();
-
- let messagesForAgentTurn;
- const systemPrompt = {
- role: "system",
- content: `You are an AI assistant in Acode code editor. Profile: ${currentProfile}. Be helpful and concise.`
- };
- //Gemini Api expects system prompt as first message
- if (chatHistory.filter(msg => msg.role === 'user').length === 1) {
- messagesForAgentTurn = [systemPrompt,
- userMessageForAgent];
- } else {
- messagesForAgentTurn = [userMessageForAgent];
- }
-
- currentController = new AbortController();
- sendBtnRef.el.style.display = "none";
- stopBtnRef.el.style.display = "block";
-
- const assistantMsgId = generateMessageId();
- let streamedContent = "";
- let wasError = false;
- let finalTimestamp = Date.now();
- const md = markdownIt( {
- html: true, linkify: true, typographer: true
- });
-
- try {
- const assistantPlaceholderMsg = {
- id: assistantMsgId,
- conversationId: currentConversationId,
- role: "assistant",
- content: "▌",
- timestamp: Date.now(),
- };
- addMessage(assistantPlaceholderMsg);
-
- const messageElContent = messageContainerRef.el.querySelector(`#message-${assistantMsgId} .message-content`);
- removeLoading();
-
-
- //Chat history not passed anymore, memory saver and checkpoint will handle context
- const inputsForAgent = {
- messages: messagesForAgentTurn
- };
-
- const stream = await agent.stream(inputsForAgent, {
- streamMode: "messages", signal: currentController.signal,
- //thread_id is the checkpoint marker
- configurable: {
- thread_id: currentConversationId
- }
- });
-
- for await (const eventData of stream) {
- let messageChunkPayload = null;
- if (Array.isArray(eventData) && eventData.length > 0 && eventData[0] && typeof eventData[0].content !== 'undefined') {
- messageChunkPayload = eventData[0];
- } else if (eventData && typeof eventData.content !== 'undefined') {
- messageChunkPayload = eventData;
- }
-
- let chunkText = "";
- if (messageChunkPayload) {
- if (isAIMessageChunk(messageChunkPayload) && messageChunkPayload.tool_call_chunks?.length) {
- chunkText = messageChunkPayload.tool_call_chunks.map(tc => tc.args ? JSON.stringify(tc.args): "").join("\n");
- } else if (typeof messageChunkPayload.content === 'string') {
- chunkText = messageChunkPayload.content;
- } else if (typeof messageChunkPayload === 'string') {
- chunkText = messageChunkPayload;
- }
- }
-
- if (chunkText) {
- streamedContent += chunkText;
- if (messageElContent) {
- messageElContent.innerHTML = md.render(streamedContent + " ▌");
- scrollToBottom();
- }
- }
- }
- finalTimestamp = Date.now();
- if (messageElContent) {
- messageElContent.innerHTML = md.render(streamedContent);
- }
- } catch (err) {
- removeLoading();
- wasError = true;
- finalTimestamp = Date.now();
- const isAbort = err.name === 'AbortError' || (err.message && /abort/i.test(err.message));
- streamedContent = isAbort ? "Streaming cancelled by user.": `Error: ${err.message || 'Unknown error.'}`;
-
- const targetMessageElContent = messageContainerRef.el.querySelector(`#message-${assistantMsgId} .message-content`);
- if (targetMessageElContent) {
- const errorColor = isAbort ? 'var(--warning-text-color)': 'var(--error-text-color)';
- targetMessageElContent.innerHTML = `${isAbort ? streamedContent: md.render(streamedContent)}`;
- }
- } finally {
- currentController = null;
- if (sendBtnRef.el) sendBtnRef.el.style.display = "block";
- if (stopBtnRef.el) stopBtnRef.el.style.display = "none";
- handleChatInput();
-
- const assistantFinalData = {
- id: assistantMsgId,
- conversationId: currentConversationId,
- role: "assistant",
- content: streamedContent,
- timestamp: finalTimestamp,
- };
- await addMessageToDB(assistantFinalData);
- if (currentConversation && !wasError) {
- currentConversation.lastModifiedAt = finalTimestamp;
- await updateConversation(currentConversation);
- }
-
- if (!wasError) {
- chatHistory.push({
- role: "assistant", content: streamedContent
- });
- }
- updateHistorySidebar();
-
- const messageContentElToFinalize = messageContainerRef.el?.querySelector(`#message-${assistantMsgId} .message-content`);
- if (messageContentElToFinalize && !wasError) {
- const timeEl = messageContainerRef.el.querySelector(`#message-${assistantMsgId} .message-actions .message-time`);
- if (timeEl) timeEl.textContent = formatTime(finalTimestamp);
-
- messageContentElToFinalize.innerHTML = messageContentElToFinalize.innerHTML.replace(
- /([\s\S]*?)<\/code><\/pre>/g,
- (match, language, code) => {
- language = language || "plaintext";
- code = he.decode(code);
- return `
+ // References
+ const profileBtnRef = new Ref();
+ const historySidebarRef = new Ref();
+ const chatInputRef = new Ref();
+ const sendBtnRef = new Ref();
+ const messageContainerRef = new Ref();
+ const stopBtnRef = new Ref();
+
+ let currentProfile = "ask";
+ let currentConversationId = null;
+ let currentConversation = null;
+ let chatHistory = [];
+ let currentController = null;
+ let aiTabInstance;
+
+ const GEMINI_API_KEY = ""; // Replace
+ const agentCheckpointer = new MemorySaver();
+ const model = new ChatGoogleGenerativeAI({
+ model: "gemini-2.0-flash",
+ apiKey: GEMINI_API_KEY,
+ });
+ const agent = createReactAgent({
+ llm: model,
+ tools: [],
+ checkpointSaver: agentCheckpointer,
+ });
+
+ const generateConversationId = () =>
+ `conv_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;
+ const generateMessageId = (() => {
+ let counter = 0;
+ return () => `msg_${Date.now()}_${++counter}`;
+ })();
+
+ const formatTime = (timestamp) =>
+ new Date(timestamp).toLocaleTimeString([], {
+ hour: "2-digit",
+ minute: "2-digit",
+ });
+
+ const copyToClipboard = (text) => {
+ cordova.plugins.clipboard.copy(text || "");
+ };
+
+ const scrollToBottom = () => {
+ messageContainerRef.el.scrollTop = messageContainerRef.el.scrollHeight;
+ };
+
+ const addMessage = (message) => {
+ const messageEl = tag("div", {
+ className: `message ${message.role === "user" ? "user" : ""}`,
+ id: `message-${message.id}`,
+ });
+ const messageHeader = tag("div", {
+ className: "message-header",
+ });
+ const messageSender = tag("div", {
+ className: `message-sender ${message.role === "user" ? "user" : "ai"}`,
+ textContent: message.role === "user" ? "You" : "AI",
+ });
+ const messageActions = tag("div", {
+ className: "message-actions",
+ });
+ const messageTime = tag("div", {
+ className: "message-time",
+ textContent: formatTime(message.timestamp),
+ });
+ messageActions.appendChild(messageTime);
+
+ if (message.role === "assistant") {
+ const copyBtn = tag("button", {
+ className: "btn btn-icon",
+ title: "Copy message",
+ child: tag("i", {
+ className: "icon copy",
+ }),
+ onclick: () => copyToClipboard(message.content),
+ });
+ messageActions.appendChild(copyBtn);
+ }
+
+ if (message.role === "user") {
+ const editBtn = tag("button", {
+ className: "btn btn-icon",
+ title: "Edit message",
+ child: tag("i", {
+ className: "icon edit",
+ }),
+ // TODO: Implement edit functionality
+ //onclick: () => editMessage(message.id),
+ });
+ messageActions.appendChild(editBtn);
+ }
+
+ messageHeader.appendChild(messageSender);
+ messageHeader.appendChild(messageActions);
+
+ const messageContent = tag("div", {
+ className: "message-content md",
+ });
+
+ if (message.role === "user") {
+ messageContent.textContent = message.content;
+ } else {
+ messageContent.innerHTML = markdownIt().render(message.content);
+ }
+
+ messageEl.appendChild(messageHeader);
+ messageEl.appendChild(messageContent);
+ messageContainerRef.el.appendChild(messageEl);
+ scrollToBottom();
+ };
+
+ /**
+ * Updates the profile button appearance and state
+ * @param {string} profile - Profile type ("ask" or "write")
+ */
+ const handleProfileSwitch = (profile) => {
+ const iconEl = profileBtnRef.el.querySelector("i:first-child");
+ const textEl = profileBtnRef.el.querySelector("span");
+
+ currentProfile = profile;
+
+ // Update button appearance based on selected profile
+ if (profile === "ask") {
+ iconEl.className = "icon help";
+ textEl.textContent = "Ask";
+ } else {
+ iconEl.className = "icon edit";
+ textEl.textContent = "Write";
+ }
+ };
+
+ /**
+ * Shows profile selection menu
+ */
+ const showProfileMenu = async (e) => {
+ e.preventDefault();
+ const profile = await select("Select Profile", [
+ {
+ value: "ask",
+ text: "Ask",
+ icon: "help",
+ },
+ {
+ value: "write",
+ text: "Write",
+ icon: "edit",
+ },
+ ]);
+ handleProfileSwitch(profile);
+ };
+ const toggleHistorySidebar = () => {
+ historySidebarRef.classList.toggle("hidden");
+ };
+
+ const showLoading = () => {
+ const loadingEl = tag("div", {
+ className: "ai_loading",
+ id: "loading-indicator",
+ });
+ const loadingDots = tag("div", {
+ className: "loading-dots",
+ });
+
+ for (let i = 0; i < 3; i++) {
+ const dot = tag("div", {
+ className: "loading-dot",
+ });
+ loadingDots.appendChild(dot);
+ }
+
+ const text = tag("span", {
+ textContent: "AI is thinking...",
+ });
+
+ loadingEl.appendChild(loadingDots);
+ loadingEl.appendChild(text);
+
+ messageContainerRef.el.appendChild(loadingEl);
+ scrollToBottom();
+ };
+
+ const removeLoading = () => {
+ const loadingEl =
+ messageContainerRef.el.querySelector("#loading-indicator");
+ if (loadingEl) {
+ messageContainerRef.el.removeChild(loadingEl);
+ }
+ };
+
+ const handleChatInput = () => {
+ sendBtnRef.el.disabled = chatInputRef.value.trim().length === 0;
+ chatInputRef.el.style.height = "auto";
+ chatInputRef.el.style.height =
+ Math.min(chatInputRef.el.scrollHeight, 120) + `px`;
+ };
+
+ async function updateHistorySidebar() {
+ if (!historySidebarRef.el) return;
+ const conversations = await getAllConversations();
+ const historyItemsContainer =
+ historySidebarRef.el.querySelector(".chat-history");
+ if (!historyItemsContainer) return;
+ historyItemsContainer.innerHTML = "";
+ conversations.forEach((conv) => {
+ const item = document.createElement("div");
+ item.className = `history-item ${conv.id === currentConversationId ? "active" : ""}`;
+ item.onclick = () => {
+ if (conv.id !== currentConversationId)
+ loadOrCreateConversation(conv.id);
+ };
+
+ const iconWrapper = document.createElement("div");
+ iconWrapper.className = "history-icon";
+ const icon = document.createElement("i");
+ icon.className = `icon ${conv.profile === "write" ? "edit" : "chat_bubble"}`;
+ iconWrapper.appendChild(icon);
+
+ const text = document.createElement("div");
+ text.className = "history-text";
+ text.textContent = conv.title || "Untitled Chat";
+
+ item.append(iconWrapper, text);
+ historyItemsContainer.appendChild(item);
+ });
+ }
+
+ async function loadOrCreateConversation(conversationIdToLoad) {
+ if (currentController) currentController.abort();
+ currentController = null;
+
+ if (conversationIdToLoad) {
+ const conversation = await getConversation(conversationIdToLoad);
+ if (conversation) {
+ currentConversation = conversation;
+ currentConversationId = conversation.id;
+ handleProfileSwitch(currentConversation.profile || "ask");
+ const messagesFromDB = await getMessagesForConversation(
+ currentConversationId,
+ );
+ if (messageContainerRef.el) messageContainerRef.el.innerHTML = "";
+ chatHistory = [];
+ messagesFromDB.forEach((msg) => {
+ addMessage(msg);
+ chatHistory.push({
+ role: msg.role,
+ content: msg.content,
+ });
+ });
+ } else {
+ console.warn(
+ `Conversation ${conversationIdToLoad} not found. Starting new one.`,
+ );
+ conversationIdToLoad = null;
+ }
+ }
+
+ if (!conversationIdToLoad) {
+ currentConversationId = generateConversationId();
+ const now = Date.now();
+ currentConversation = {
+ id: currentConversationId,
+ title: "New Chat",
+ createdAt: now,
+ lastModifiedAt: now,
+ profile: currentProfile,
+ };
+ await addConversation(currentConversation);
+ chatHistory = [];
+ if (messageContainerRef.el) messageContainerRef.el.innerHTML = "";
+ }
+ updateHistorySidebar();
+ if (chatInputRef.el) chatInputRef.el.focus();
+ }
+
+ async function saveUserMessageAndUpdateConversation(
+ userMessage,
+ currentConv,
+ isFirstUIMessage,
+ ) {
+ if (isFirstUIMessage && currentConv && currentConv.title === "New Chat") {
+ currentConv.title =
+ userMessage.content.substring(0, 30) +
+ (userMessage.content.length > 30 ? "..." : "");
+ }
+ if (currentConv) {
+ currentConv.lastModifiedAt = Date.now();
+ await updateConversation(currentConv);
+ }
+ await addMessageToDB(userMessage);
+ }
+
+ const handleSendBtn = async () => {
+ const userInput = chatInputRef.value.trim();
+
+ if (!userInput) return;
+ if (!currentConversationId) {
+ alert("Error: No active conversation. Please start a new chat.");
+ return;
+ }
+
+ const userMsgId = {
+ id: generateMessageId(),
+ conversationId: currentConversationId,
+ role: "user",
+ content: userInput,
+ timestamp: Date.now(),
+ };
+ addMessage(userMsgId);
+
+ const userMessageForAgent = {
+ role: "user",
+ content: userInput,
+ };
+ chatHistory.push(userMessageForAgent);
+
+ chatInputRef.el.value = "";
+ handleChatInput();
+ saveUserMessageAndUpdateConversation(
+ userMsgId,
+ currentConversation,
+ chatHistory.filter((msg) => msg.role === "user").length === 1,
+ );
+
+ showLoading();
+
+ let messagesForAgentTurn;
+ const systemPrompt = {
+ role: "system",
+ content: `You are an AI assistant in Acode code editor. Profile: ${currentProfile}. Be helpful and concise.`,
+ };
+ //Gemini Api expects system prompt as first message
+ if (chatHistory.filter((msg) => msg.role === "user").length === 1) {
+ messagesForAgentTurn = [systemPrompt, userMessageForAgent];
+ } else {
+ messagesForAgentTurn = [userMessageForAgent];
+ }
+
+ currentController = new AbortController();
+ sendBtnRef.el.style.display = "none";
+ stopBtnRef.el.style.display = "block";
+
+ const assistantMsgId = generateMessageId();
+ let streamedContent = "";
+ let wasError = false;
+ let finalTimestamp = Date.now();
+ const md = markdownIt({
+ html: true,
+ linkify: true,
+ typographer: true,
+ });
+
+ try {
+ const assistantPlaceholderMsg = {
+ id: assistantMsgId,
+ conversationId: currentConversationId,
+ role: "assistant",
+ content: "▌",
+ timestamp: Date.now(),
+ };
+ addMessage(assistantPlaceholderMsg);
+
+ const messageElContent = messageContainerRef.el.querySelector(
+ `#message-${assistantMsgId} .message-content`,
+ );
+ removeLoading();
+
+ //Chat history not passed anymore, memory saver and checkpoint will handle context
+ const inputsForAgent = {
+ messages: messagesForAgentTurn,
+ };
+
+ const stream = await agent.stream(inputsForAgent, {
+ streamMode: "messages",
+ signal: currentController.signal,
+ //thread_id is the checkpoint marker
+ configurable: {
+ thread_id: currentConversationId,
+ },
+ });
+
+ for await (const eventData of stream) {
+ let messageChunkPayload = null;
+ if (
+ Array.isArray(eventData) &&
+ eventData.length > 0 &&
+ eventData[0] &&
+ typeof eventData[0].content !== "undefined"
+ ) {
+ messageChunkPayload = eventData[0];
+ } else if (eventData && typeof eventData.content !== "undefined") {
+ messageChunkPayload = eventData;
+ }
+
+ let chunkText = "";
+ if (messageChunkPayload) {
+ if (
+ isAIMessageChunk(messageChunkPayload) &&
+ messageChunkPayload.tool_call_chunks?.length
+ ) {
+ chunkText = messageChunkPayload.tool_call_chunks
+ .map((tc) => (tc.args ? JSON.stringify(tc.args) : ""))
+ .join("\n");
+ } else if (typeof messageChunkPayload.content === "string") {
+ chunkText = messageChunkPayload.content;
+ } else if (typeof messageChunkPayload === "string") {
+ chunkText = messageChunkPayload;
+ }
+ }
+
+ if (chunkText) {
+ streamedContent += chunkText;
+ if (messageElContent) {
+ messageElContent.innerHTML = md.render(streamedContent + " ▌");
+ scrollToBottom();
+ }
+ }
+ }
+ finalTimestamp = Date.now();
+ if (messageElContent) {
+ messageElContent.innerHTML = md.render(streamedContent);
+ }
+ } catch (err) {
+ removeLoading();
+ wasError = true;
+ finalTimestamp = Date.now();
+ const isAbort =
+ err.name === "AbortError" ||
+ (err.message && /abort/i.test(err.message));
+ streamedContent = isAbort
+ ? "Streaming cancelled by user."
+ : `Error: ${err.message || "Unknown error."}`;
+
+ const targetMessageElContent = messageContainerRef.el.querySelector(
+ `#message-${assistantMsgId} .message-content`,
+ );
+ if (targetMessageElContent) {
+ const errorColor = isAbort
+ ? "var(--warning-text-color)"
+ : "var(--error-text-color)";
+ targetMessageElContent.innerHTML = `${isAbort ? streamedContent : md.render(streamedContent)}`;
+ }
+ } finally {
+ currentController = null;
+ if (sendBtnRef.el) sendBtnRef.el.style.display = "block";
+ if (stopBtnRef.el) stopBtnRef.el.style.display = "none";
+ handleChatInput();
+
+ const assistantFinalData = {
+ id: assistantMsgId,
+ conversationId: currentConversationId,
+ role: "assistant",
+ content: streamedContent,
+ timestamp: finalTimestamp,
+ };
+ await addMessageToDB(assistantFinalData);
+ if (currentConversation && !wasError) {
+ currentConversation.lastModifiedAt = finalTimestamp;
+ await updateConversation(currentConversation);
+ }
+
+ if (!wasError) {
+ chatHistory.push({
+ role: "assistant",
+ content: streamedContent,
+ });
+ }
+ updateHistorySidebar();
+
+ const messageContentElToFinalize = messageContainerRef.el?.querySelector(
+ `#message-${assistantMsgId} .message-content`,
+ );
+ if (messageContentElToFinalize && !wasError) {
+ const timeEl = messageContainerRef.el.querySelector(
+ `#message-${assistantMsgId} .message-actions .message-time`,
+ );
+ if (timeEl) timeEl.textContent = formatTime(finalTimestamp);
+
+ messageContentElToFinalize.innerHTML =
+ messageContentElToFinalize.innerHTML.replace(
+ /([\s\S]*?)<\/code><\/pre>/g,
+ (match, language, code) => {
+ language = language || "plaintext";
+ code = he.decode(code);
+ return `
${language}
@@ -471,204 +514,223 @@ export default function openAIAssistantPage() {
${code}
Show more
`;
- }
- );
-
- messageContentElToFinalize.querySelectorAll(".code-block").forEach(codeBlock => {
- const codeContent = codeBlock.querySelector(".code-content");
- const codeElement = codeBlock.querySelector("pre code");
- const copyButton = codeBlock.querySelector(".code-copy");
- const expandButton = codeBlock.querySelector(".code-expand");
- // expand/collapse functionality
- expandButton.addEventListener("click", () => {
- const isExpanded = codeContent.classList.contains("expanded");
- codeContent.classList.toggle("expanded", !isExpanded);
- expandButton.innerHTML = isExpanded
- ? ` Show more`: ` Show less`;
- });
-
- // Only show expand button if content overflows
- if (codeContent.scrollHeight <= codeContent.clientHeight) {
- expandButton.style.display = "none";
- }
-
- });
- }
- }
- };
-
- const handleStopBtn = () => {
- if (currentController) {
- currentController?.abort();
- currentController = null;
- stopBtnRef.el.style.display = "none";
- sendBtnRef.el.style.display = "block";
- }
- };
-
-
- const aiAssistantContainer = (
-
- {/* Header */}
-
-
- loadOrCreateConversation(null)}>
-
- New Chat
-
-
-
-
- History
-
-
-
-
-
- Ask
-
-
-
-
-
-
-
- {/* onclick for settings TODO: e.g. onclick={openSettingsPage} */}
-
-
-
-
- {/* Main content */}
-
-
-
- CHAT HISTORY
-
-
- {/* onclick={() => loadOrCreateConversation(null)} */}
-
-
-
- {/* Populated by updateHistorySidebar */}
-
-
-
-
-
- {/* Messages are added by addMessage function */}
-
-
-
-
- {/* Input area */}
-
-
-
-
- {/* onclick for attach file: e.g. onclick={handleAttachFile} */}
-
-
-
-
- {/* Upstream icon */}
-
-
-
-
-
-
-
-
- );
-
- (async () => {
- try {
- const conversations = await getAllConversations();
- if (conversations.length > 0) {
- await loadOrCreateConversation(conversations[0].id);
- } else {
- await loadOrCreateConversation(null);
- }
- } catch (error) {
- console.error("Failed to initialize AI Assistant page or database:", error);
- const errDiv = `Failed to initialize AI Assistant: ${error.message}. Ensure SQLite plugin is functional.`;
- if (messageContainerRef.el) {
- // Check after potential rendering by EditorFile
- messageContainerRef.el.innerHTML = errDiv;
- } else {
-
- alert(`Critical Error: AI Assistant failed to initialize. ${error.message}`);
- }
- }
- })();
-
- const uri = "ai://assistant";
- const existingFile = window.editorManager.getFile(uri,
- "uri");
- if (existingFile) {
- existingFile.makeActive();
- return;
- }
-
- aiTabInstance = new EditorFile("AI Assistant", {
- uri: uri, type: "page", tabIcon: "file file_type_assistant",
- content: aiAssistantContainer,
- render: true,
- stylesheets: [styles],
- hideQuickTools: true,
- });
-}
\ No newline at end of file
+ },
+ );
+
+ messageContentElToFinalize
+ .querySelectorAll(".code-block")
+ .forEach((codeBlock) => {
+ const codeContent = codeBlock.querySelector(".code-content");
+ const codeElement = codeBlock.querySelector("pre code");
+ const copyButton = codeBlock.querySelector(".code-copy");
+ const expandButton = codeBlock.querySelector(".code-expand");
+ // expand/collapse functionality
+ expandButton.addEventListener("click", () => {
+ const isExpanded = codeContent.classList.contains("expanded");
+ codeContent.classList.toggle("expanded", !isExpanded);
+ expandButton.innerHTML = isExpanded
+ ? ` Show more`
+ : ` Show less`;
+ });
+
+ // Only show expand button if content overflows
+ if (codeContent.scrollHeight <= codeContent.clientHeight) {
+ expandButton.style.display = "none";
+ }
+ });
+ }
+ }
+ };
+
+ const handleStopBtn = () => {
+ if (currentController) {
+ currentController?.abort();
+ currentController = null;
+ stopBtnRef.el.style.display = "none";
+ sendBtnRef.el.style.display = "block";
+ }
+ };
+
+ const aiAssistantContainer = (
+
+ {/* Header */}
+
+
+ loadOrCreateConversation(null)}
+ >
+
+ New Chat
+
+
+
+
+ History
+
+
+
+
+
+ Ask
+
+
+
+
+
+
+
+ {/* onclick for settings TODO: e.g. onclick={openSettingsPage} */}
+
+
+
+
+ {/* Main content */}
+
+
+
+ CHAT HISTORY
+
+
+ {/* onclick={() => loadOrCreateConversation(null)} */}
+
+
+
+ {/* Populated by updateHistorySidebar */}
+
+
+
+
+
+ {/* Messages are added by addMessage function */}
+
+
+
+
+ {/* Input area */}
+
+
+
+
+ {/* onclick for attach file: e.g. onclick={handleAttachFile} */}
+
+
+
+
+ {/* Upstream icon */}
+
+
+
+
+
+
+
+
+ );
+
+ (async () => {
+ try {
+ const conversations = await getAllConversations();
+ if (conversations.length > 0) {
+ await loadOrCreateConversation(conversations[0].id);
+ } else {
+ await loadOrCreateConversation(null);
+ }
+ } catch (error) {
+ console.error(
+ "Failed to initialize AI Assistant page or database:",
+ error,
+ );
+ const errDiv = `Failed to initialize AI Assistant: ${error.message}. Ensure SQLite plugin is functional.`;
+ if (messageContainerRef.el) {
+ // Check after potential rendering by EditorFile
+ messageContainerRef.el.innerHTML = errDiv;
+ } else {
+ alert(
+ `Critical Error: AI Assistant failed to initialize. ${error.message}`,
+ );
+ }
+ }
+ })();
+
+ const uri = "ai://assistant";
+ const existingFile = window.editorManager.getFile(uri, "uri");
+ if (existingFile) {
+ existingFile.makeActive();
+ return;
+ }
+
+ aiTabInstance = new EditorFile("AI Assistant", {
+ uri: uri,
+ type: "page",
+ tabIcon: "file file_type_assistant",
+ content: aiAssistantContainer,
+ render: true,
+ stylesheets: [styles],
+ hideQuickTools: true,
+ });
+}
diff --git a/src/pages/aiAssistant/db.js b/src/pages/aiAssistant/db.js
index bb96a3447..32e69f98f 100644
--- a/src/pages/aiAssistant/db.js
+++ b/src/pages/aiAssistant/db.js
@@ -7,38 +7,42 @@ let db = null;
// Function to open or create the database
function openDB() {
- return new Promise((resolve, reject) => {
- if (db) {
- return resolve(db);
- }
- if (!window.sqlitePlugin) {
- const msg = "SQLite plugin is not available. Make sure cordova-sqlite-storage is installed and deviceready has fired.";
- console.error(msg);
- // TODO: Maybe want to queue DB operations or show an error to the user
- return reject(new Error(msg));
- }
+ return new Promise((resolve, reject) => {
+ if (db) {
+ return resolve(db);
+ }
+ if (!window.sqlitePlugin) {
+ const msg =
+ "SQLite plugin is not available. Make sure cordova-sqlite-storage is installed and deviceready has fired.";
+ console.error(msg);
+ // TODO: Maybe want to queue DB operations or show an error to the user
+ return reject(new Error(msg));
+ }
- db = window.sqlitePlugin.openDatabase(
- { name: DB_NAME, location: DB_LOCATION },
- (openedDb) => {
- console.log("SQLite DB opened successfully");
- db = openedDb; // Assign the opened DB instance
- initializeTables().then(() => resolve(db)).catch(reject);
- },
- (error) => {
- console.error("Error opening SQLite DB:", JSON.stringify(error));
- reject(error);
- }
- );
- });
+ db = window.sqlitePlugin.openDatabase(
+ { name: DB_NAME, location: DB_LOCATION },
+ (openedDb) => {
+ console.log("SQLite DB opened successfully");
+ db = openedDb; // Assign the opened DB instance
+ initializeTables()
+ .then(() => resolve(db))
+ .catch(reject);
+ },
+ (error) => {
+ console.error("Error opening SQLite DB:", JSON.stringify(error));
+ reject(error);
+ },
+ );
+ });
}
// Function to initialize tables if they don't exist
function initializeTables() {
- return new Promise((resolve, reject) => {
- if (!db) return reject(new Error("DB not open for table initialization"));
- db.transaction((tx) => {
- tx.executeSql(`
+ return new Promise((resolve, reject) => {
+ if (!db) return reject(new Error("DB not open for table initialization"));
+ db.transaction(
+ (tx) => {
+ tx.executeSql(`
CREATE TABLE IF NOT EXISTS conversations (
id TEXT PRIMARY KEY,
title TEXT,
@@ -47,7 +51,7 @@ function initializeTables() {
profile TEXT
)
`);
- tx.executeSql(`
+ tx.executeSql(`
CREATE TABLE IF NOT EXISTS messages (
id TEXT PRIMARY KEY,
conversationId TEXT,
@@ -57,159 +61,207 @@ function initializeTables() {
FOREIGN KEY (conversationId) REFERENCES conversations(id) ON DELETE CASCADE
)
`);
- // Index for faster querying of messages by conversationId and sorting
- tx.executeSql(`CREATE INDEX IF NOT EXISTS idx_messages_conversationId_timestamp ON messages (conversationId, timestamp)`);
- tx.executeSql(`CREATE INDEX IF NOT EXISTS idx_conversations_lastModifiedAt ON conversations (lastModifiedAt)`);
-
- }, (error) => {
- console.error("Transaction error during table initialization:", JSON.stringify(error));
- reject(error);
- }, () => {
- console.log("Tables initialized (or already exist).");
- resolve();
- });
- });
+ // Index for faster querying of messages by conversationId and sorting
+ tx.executeSql(
+ `CREATE INDEX IF NOT EXISTS idx_messages_conversationId_timestamp ON messages (conversationId, timestamp)`,
+ );
+ tx.executeSql(
+ `CREATE INDEX IF NOT EXISTS idx_conversations_lastModifiedAt ON conversations (lastModifiedAt)`,
+ );
+ },
+ (error) => {
+ console.error(
+ "Transaction error during table initialization:",
+ JSON.stringify(error),
+ );
+ reject(error);
+ },
+ () => {
+ console.log("Tables initialized (or already exist).");
+ resolve();
+ },
+ );
+ });
}
// --- Helper for executing SQL ---
function executeSqlAsync(transaction, sql, params = []) {
- return new Promise((resolve, reject) => {
- transaction.executeSql(sql, params,
- (tx, resultSet) => resolve(resultSet),
- (tx, error) => {
- console.error("SQL Error:", error.message, "Query:", sql, "Params:", params);
- reject(error);
- }
- );
- });
+ return new Promise((resolve, reject) => {
+ transaction.executeSql(
+ sql,
+ params,
+ (tx, resultSet) => resolve(resultSet),
+ (tx, error) => {
+ console.error(
+ "SQL Error:",
+ error.message,
+ "Query:",
+ sql,
+ "Params:",
+ params,
+ );
+ reject(error);
+ },
+ );
+ });
}
-
// --- Conversation Functions ---
export async function addConversation(conversation) {
- await openDB();
- return new Promise((resolve, reject) => {
- db.transaction(async (tx) => {
- try {
- await executeSqlAsync(tx,
- "INSERT INTO conversations (id, title, createdAt, lastModifiedAt, profile) VALUES (?, ?, ?, ?, ?)",
- [conversation.id, conversation.title, conversation.createdAt, conversation.lastModifiedAt, conversation.profile]
- );
- resolve(conversation.id);
- } catch (error) {
- reject(error);
- }
- });
- });
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.transaction(async (tx) => {
+ try {
+ await executeSqlAsync(
+ tx,
+ "INSERT INTO conversations (id, title, createdAt, lastModifiedAt, profile) VALUES (?, ?, ?, ?, ?)",
+ [
+ conversation.id,
+ conversation.title,
+ conversation.createdAt,
+ conversation.lastModifiedAt,
+ conversation.profile,
+ ],
+ );
+ resolve(conversation.id);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
}
export async function getConversation(id) {
- await openDB();
- return new Promise((resolve, reject) => {
- db.readTransaction(async (tx) => { // Use readTransaction for reads
- try {
- const resultSet = await executeSqlAsync(tx, "SELECT * FROM conversations WHERE id = ?", [id]);
- if (resultSet.rows.length > 0) {
- resolve(resultSet.rows.item(0));
- } else {
- resolve(null); // Or undefined, consistent with IndexedDB version
- }
- } catch (error) {
- reject(error);
- }
- });
- });
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.readTransaction(async (tx) => {
+ // Use readTransaction for reads
+ try {
+ const resultSet = await executeSqlAsync(
+ tx,
+ "SELECT * FROM conversations WHERE id = ?",
+ [id],
+ );
+ if (resultSet.rows.length > 0) {
+ resolve(resultSet.rows.item(0));
+ } else {
+ resolve(null); // Or undefined, consistent with IndexedDB version
+ }
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
}
export async function getAllConversations() {
- await openDB();
- return new Promise((resolve, reject) => {
- db.readTransaction(async (tx) => {
- try {
- const resultSet = await executeSqlAsync(tx, "SELECT * FROM conversations ORDER BY lastModifiedAt DESC");
- const conversations = [];
- for (let i = 0; i < resultSet.rows.length; i++) {
- conversations.push(resultSet.rows.item(i));
- }
- resolve(conversations);
- } catch (error) {
- reject(error);
- }
- });
- });
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.readTransaction(async (tx) => {
+ try {
+ const resultSet = await executeSqlAsync(
+ tx,
+ "SELECT * FROM conversations ORDER BY lastModifiedAt DESC",
+ );
+ const conversations = [];
+ for (let i = 0; i < resultSet.rows.length; i++) {
+ conversations.push(resultSet.rows.item(i));
+ }
+ resolve(conversations);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
}
export async function updateConversation(conversation) {
- await openDB();
- return new Promise((resolve, reject) => {
- db.transaction(async (tx) => {
- try {
- await executeSqlAsync(tx,
- "UPDATE conversations SET title = ?, lastModifiedAt = ?, profile = ? WHERE id = ?",
- [conversation.title, conversation.lastModifiedAt, conversation.profile, conversation.id]
- );
- resolve(conversation.id);
- } catch (error) {
- reject(error);
- }
- });
- });
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.transaction(async (tx) => {
+ try {
+ await executeSqlAsync(
+ tx,
+ "UPDATE conversations SET title = ?, lastModifiedAt = ?, profile = ? WHERE id = ?",
+ [
+ conversation.title,
+ conversation.lastModifiedAt,
+ conversation.profile,
+ conversation.id,
+ ],
+ );
+ resolve(conversation.id);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
}
// --- Message Functions ---
export async function addMessageToDB(message) {
- await openDB();
- return new Promise((resolve, reject) => {
- db.transaction(async (tx) => {
- try {
- await executeSqlAsync(tx,
- "INSERT INTO messages (id, conversationId, role, content, timestamp) VALUES (?, ?, ?, ?, ?)",
- [message.id, message.conversationId, message.role, message.content, message.timestamp]
- );
- resolve(message.id);
- } catch (error) {
- reject(error);
- }
- });
- });
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.transaction(async (tx) => {
+ try {
+ await executeSqlAsync(
+ tx,
+ "INSERT INTO messages (id, conversationId, role, content, timestamp) VALUES (?, ?, ?, ?, ?)",
+ [
+ message.id,
+ message.conversationId,
+ message.role,
+ message.content,
+ message.timestamp,
+ ],
+ );
+ resolve(message.id);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
}
export async function getMessagesForConversation(conversationId) {
- await openDB();
- return new Promise((resolve, reject) => {
- db.readTransaction(async (tx) => {
- try {
- const resultSet = await executeSqlAsync(tx,
- "SELECT * FROM messages WHERE conversationId = ? ORDER BY timestamp ASC",
- [conversationId]
- );
- const messages = [];
- for (let i = 0; i < resultSet.rows.length; i++) {
- messages.push(resultSet.rows.item(i));
- }
- resolve(messages);
- } catch (error) {
- reject(error);
- }
- });
- });
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.readTransaction(async (tx) => {
+ try {
+ const resultSet = await executeSqlAsync(
+ tx,
+ "SELECT * FROM messages WHERE conversationId = ? ORDER BY timestamp ASC",
+ [conversationId],
+ );
+ const messages = [];
+ for (let i = 0; i < resultSet.rows.length; i++) {
+ messages.push(resultSet.rows.item(i));
+ }
+ resolve(messages);
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
}
// --- Deletion functions (example) ---
export async function deleteConversation(conversationId) {
- await openDB();
- return new Promise((resolve, reject) => {
- db.transaction(async (tx) => {
- try {
- // CASCADE DELETE on messages table should handle associated messages
- await executeSqlAsync(tx, "DELETE FROM conversations WHERE id = ?", [conversationId]);
- console.log(`Conversation ${conversationId} and its messages deleted.`);
- resolve();
- } catch (error) {
- reject(error);
- }
- });
- });
+ await openDB();
+ return new Promise((resolve, reject) => {
+ db.transaction(async (tx) => {
+ try {
+ // CASCADE DELETE on messages table should handle associated messages
+ await executeSqlAsync(tx, "DELETE FROM conversations WHERE id = ?", [
+ conversationId,
+ ]);
+ console.log(`Conversation ${conversationId} and its messages deleted.`);
+ resolve();
+ } catch (error) {
+ reject(error);
+ }
+ });
+ });
}
-// Ensure DB is opened and tables initialized when module loads or on first call
\ No newline at end of file
+// Ensure DB is opened and tables initialized when module loads or on first call
From b8310482d098e29ef5b301af79f98531102d25bd Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Sun, 1 Jun 2025 13:34:03 +0530
Subject: [PATCH 09/26] fix: highlighting, message sync, searchTool
---
src/pages/aiAssistant/assistant.js | 214 ++++++++++++++------
src/pages/aiAssistant/assistant.module.scss | 3 +
2 files changed, 154 insertions(+), 63 deletions(-)
diff --git a/src/pages/aiAssistant/assistant.js b/src/pages/aiAssistant/assistant.js
index 6f04f1d02..4aafb185d 100644
--- a/src/pages/aiAssistant/assistant.js
+++ b/src/pages/aiAssistant/assistant.js
@@ -36,6 +36,10 @@ export default function openAIAssistantPage() {
let aiTabInstance;
const GEMINI_API_KEY = ""; // Replace
+
+ const searchTool = {
+ googleSearch: {},
+ };
const agentCheckpointer = new MemorySaver();
const model = new ChatGoogleGenerativeAI({
model: "gemini-2.0-flash",
@@ -43,7 +47,7 @@ export default function openAIAssistantPage() {
});
const agent = createReactAgent({
llm: model,
- tools: [],
+ tools: [searchTool],
checkpointSaver: agentCheckpointer,
});
@@ -68,6 +72,115 @@ export default function openAIAssistantPage() {
messageContainerRef.el.scrollTop = messageContainerRef.el.scrollHeight;
};
+ // Format code blocks with custom UI elements
+ const formatCodeBlocks = (contentElement, content) => {
+ if (!contentElement) return;
+
+ const md = markdownIt({
+ html: true,
+ linkify: true,
+ typographer: true,
+ });
+
+ contentElement.innerHTML = md.render(content);
+
+ contentElement.innerHTML = contentElement.innerHTML.replace(
+ /([\s\S]*?)<\/code><\/pre>/g,
+ (match, language, code) => {
+ language = language || "plaintext";
+ code = he.decode(code);
+ return `
+
+
+
+
+ ${language}
+
+
+
+
+
+
+
+
+ ${code}
+
+
+
+ Show more
+
+
+ `;
+ },
+ );
+
+ contentElement.querySelectorAll(".code-block").forEach((codeBlock) => {
+ const codeContent = codeBlock.querySelector(".code-content");
+ const codeElement = codeBlock.querySelector("pre code");
+ const copyButton = codeBlock.querySelector(".code-copy");
+ const expandButton = codeBlock.querySelector(".code-expand");
+
+ // Apply Ace highlighting
+ if (codeElement) {
+ const langMatch = codeElement.className.match(/language-(\w+)/);
+ if (langMatch) {
+ const langMap = {
+ bash: "sh",
+ shell: "sh",
+ };
+ const lang = langMatch[1];
+ const mappedLang = langMap[lang] || lang;
+ const highlight = ace.require("ace/ext/static_highlight");
+ highlight.render(
+ codeElement.textContent,
+ `ace/mode/${mappedLang}`,
+ settings.value.editorTheme.startsWith("ace/theme/")
+ ? settings.value.editorTheme
+ : "ace/theme/" + settings.value.editorTheme,
+ 1,
+ true,
+ (highlighted) => {
+ aiTabInstance?.addStyle(highlighted.css);
+ codeElement.innerHTML = highlighted.html;
+ },
+ );
+ }
+ }
+
+ // copy functionality
+ copyButton.addEventListener("click", async () => {
+ const code = codeElement?.textContent || "";
+ try {
+ cordova.plugins.clipboard.copy(code);
+ copyButton.querySelector("i").className = "icon check";
+ setTimeout(() => {
+ copyButton.querySelector("i").className = "icon copy";
+ }, 2000);
+ } catch (err) {
+ copyButton.querySelector("i").className =
+ "icon warningreport_problem";
+ setTimeout(() => {
+ copyButton.querySelector("i").className = "icon copy";
+ }, 2000);
+ }
+ });
+
+ // expand/collapse functionality
+ expandButton.addEventListener("click", () => {
+ const isExpanded = codeContent.classList.contains("expanded");
+ codeContent.classList.toggle("expanded", !isExpanded);
+ expandButton.innerHTML = isExpanded
+ ? ` Show more`
+ : ` Show less`;
+ });
+
+ // Only show expand button if content overflows
+ if (codeContent.scrollHeight <= codeContent.clientHeight) {
+ expandButton.style.display = "none";
+ }
+ });
+ };
+
const addMessage = (message) => {
const messageEl = tag("div", {
className: `message ${message.role === "user" ? "user" : ""}`,
@@ -124,7 +237,8 @@ export default function openAIAssistantPage() {
if (message.role === "user") {
messageContent.textContent = message.content;
} else {
- messageContent.innerHTML = markdownIt().render(message.content);
+ const md = markdownIt();
+ messageContent.innerHTML = md.render(message.content);
}
messageEl.appendChild(messageHeader);
@@ -229,8 +343,10 @@ export default function openAIAssistantPage() {
const item = document.createElement("div");
item.className = `history-item ${conv.id === currentConversationId ? "active" : ""}`;
item.onclick = () => {
- if (conv.id !== currentConversationId)
+ if (conv.id !== currentConversationId) {
loadOrCreateConversation(conv.id);
+ toggleHistorySidebar();
+ }
};
const iconWrapper = document.createElement("div");
@@ -265,6 +381,14 @@ export default function openAIAssistantPage() {
chatHistory = [];
messagesFromDB.forEach((msg) => {
addMessage(msg);
+ if (msg.role === "assistant") {
+ formatCodeBlocks(
+ messageContainerRef.el.querySelector(
+ `#message-${msg.id} .message-content`,
+ ),
+ msg.content,
+ );
+ }
chatHistory.push({
role: msg.role,
content: msg.content,
@@ -374,20 +498,6 @@ export default function openAIAssistantPage() {
});
try {
- const assistantPlaceholderMsg = {
- id: assistantMsgId,
- conversationId: currentConversationId,
- role: "assistant",
- content: "▌",
- timestamp: Date.now(),
- };
- addMessage(assistantPlaceholderMsg);
-
- const messageElContent = messageContainerRef.el.querySelector(
- `#message-${assistantMsgId} .message-content`,
- );
- removeLoading();
-
//Chat history not passed anymore, memory saver and checkpoint will handle context
const inputsForAgent = {
messages: messagesForAgentTurn,
@@ -402,6 +512,22 @@ export default function openAIAssistantPage() {
},
});
+ // Remove loading indicator
+ removeLoading();
+
+ const assistantPlaceholderMsg = {
+ id: assistantMsgId,
+ conversationId: currentConversationId,
+ role: "assistant",
+ content: "▌",
+ timestamp: Date.now(),
+ };
+ addMessage(assistantPlaceholderMsg);
+
+ const messageElContent = messageContainerRef.el.querySelector(
+ `#message-${assistantMsgId} .message-content`,
+ );
+
for await (const eventData of stream) {
let messageChunkPayload = null;
if (
@@ -450,18 +576,18 @@ export default function openAIAssistantPage() {
const isAbort =
err.name === "AbortError" ||
(err.message && /abort/i.test(err.message));
- streamedContent = isAbort
- ? "Streaming cancelled by user."
- : `Error: ${err.message || "Unknown error."}`;
+
+ const errorContent = isAbort
+ ? `Streaming cancelled by user.`
+ : `Error: ${err.message || "Unknown error."}`;
+
+ streamedContent += errorContent;
const targetMessageElContent = messageContainerRef.el.querySelector(
`#message-${assistantMsgId} .message-content`,
);
if (targetMessageElContent) {
- const errorColor = isAbort
- ? "var(--warning-text-color)"
- : "var(--error-text-color)";
- targetMessageElContent.innerHTML = `${isAbort ? streamedContent : md.render(streamedContent)}`;
+ targetMessageElContent.innerHTML += errorContent;
}
} finally {
currentController = null;
@@ -499,45 +625,7 @@ export default function openAIAssistantPage() {
);
if (timeEl) timeEl.textContent = formatTime(finalTimestamp);
- messageContentElToFinalize.innerHTML =
- messageContentElToFinalize.innerHTML.replace(
- /([\s\S]*?)<\/code><\/pre>/g,
- (match, language, code) => {
- language = language || "plaintext";
- code = he.decode(code);
- return `
-
-
- ${language}
-
-
- ${code}
- Show more
- `;
- },
- );
-
- messageContentElToFinalize
- .querySelectorAll(".code-block")
- .forEach((codeBlock) => {
- const codeContent = codeBlock.querySelector(".code-content");
- const codeElement = codeBlock.querySelector("pre code");
- const copyButton = codeBlock.querySelector(".code-copy");
- const expandButton = codeBlock.querySelector(".code-expand");
- // expand/collapse functionality
- expandButton.addEventListener("click", () => {
- const isExpanded = codeContent.classList.contains("expanded");
- codeContent.classList.toggle("expanded", !isExpanded);
- expandButton.innerHTML = isExpanded
- ? ` Show more`
- : ` Show less`;
- });
-
- // Only show expand button if content overflows
- if (codeContent.scrollHeight <= codeContent.clientHeight) {
- expandButton.style.display = "none";
- }
- });
+ formatCodeBlocks(messageContentElToFinalize, streamedContent);
}
}
};
diff --git a/src/pages/aiAssistant/assistant.module.scss b/src/pages/aiAssistant/assistant.module.scss
index c732137b9..a0a354afb 100644
--- a/src/pages/aiAssistant/assistant.module.scss
+++ b/src/pages/aiAssistant/assistant.module.scss
@@ -413,6 +413,9 @@
font-size: 0.625rem;
font-weight: 500;
margin-right: 0.25rem;
+ word-break: break-word;
+ overflow-wrap: break-word;
+ white-space: normal;
}
.badge-blue {
From 863382bc1003fe97625bdb9ea382e3bea50e75ff Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Sun, 1 Jun 2025 23:08:00 +0530
Subject: [PATCH 10/26] feat: add delete history button and improved few ui
styling
---
src/pages/aiAssistant/assistant.js | 67 ++++++++++++-----
src/pages/aiAssistant/assistant.module.scss | 80 +++++++++++++++++++--
2 files changed, 124 insertions(+), 23 deletions(-)
diff --git a/src/pages/aiAssistant/assistant.js b/src/pages/aiAssistant/assistant.js
index 4aafb185d..3b4cb21e5 100644
--- a/src/pages/aiAssistant/assistant.js
+++ b/src/pages/aiAssistant/assistant.js
@@ -2,6 +2,7 @@ import { isAIMessageChunk } from "@langchain/core/messages";
import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
import { MemorySaver } from "@langchain/langgraph-checkpoint";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
+import confirm from "dialogs/confirm";
import select from "dialogs/select";
import he from "he";
import Ref from "html-tag-js/ref";
@@ -340,26 +341,51 @@ export default function openAIAssistantPage() {
if (!historyItemsContainer) return;
historyItemsContainer.innerHTML = "";
conversations.forEach((conv) => {
- const item = document.createElement("div");
- item.className = `history-item ${conv.id === currentConversationId ? "active" : ""}`;
- item.onclick = () => {
- if (conv.id !== currentConversationId) {
- loadOrCreateConversation(conv.id);
- toggleHistorySidebar();
- }
- };
+ const item = (
+ {
+ if (conv.id !== currentConversationId) {
+ loadOrCreateConversation(conv.id);
+ toggleHistorySidebar();
+ }
+ }}
+ />
+ );
+
+ const iconWrapper = (
+
+
+
+ );
- const iconWrapper = document.createElement("div");
- iconWrapper.className = "history-icon";
- const icon = document.createElement("i");
- icon.className = `icon ${conv.profile === "write" ? "edit" : "chat_bubble"}`;
- iconWrapper.appendChild(icon);
+ const text = (
+ {conv.title || "Untitled Chat"}
+ );
- const text = document.createElement("div");
- text.className = "history-text";
- text.textContent = conv.title || "Untitled Chat";
+ const deleteBtn = (
+
+
+
+ );
+ deleteBtn.onclick = async (e) => {
+ e.stopPropagation();
+ const confirmation = await confirm(
+ "Delete Chat",
+ `Are you sure you want to delete "${conv.title || "Untitled Chat"}"? This action cannot be undone.`,
+ true,
+ );
+ if (!confirmation) return;
+ await deleteConversation(conv.id);
+ if (conv.id === currentConversationId) {
+ await loadOrCreateConversation(null);
+ }
+ await updateHistorySidebar();
+ };
- item.append(iconWrapper, text);
+ item.append(iconWrapper, text, deleteBtn);
historyItemsContainer.appendChild(item);
});
}
@@ -696,9 +722,12 @@ export default function openAIAssistantPage() {
>
CHAT HISTORY
-
+ loadOrCreateConversation(null)}
+ >
- {/* onclick={() => loadOrCreateConversation(null)} */}
diff --git a/src/pages/aiAssistant/assistant.module.scss b/src/pages/aiAssistant/assistant.module.scss
index a0a354afb..548c37c85 100644
--- a/src/pages/aiAssistant/assistant.module.scss
+++ b/src/pages/aiAssistant/assistant.module.scss
@@ -92,20 +92,24 @@
cursor: pointer;
margin-bottom: 0.25rem;
transition: all 0.2s ease;
+ position: relative;
&:hover {
background-color: color-mix(
in srgb,
- var(--popup-background-color) 20%,
- transparent
+ var(--popup-background-color) 70%,
+ white
);
}
+ &:hover .history-delete {
+ opacity: 1;
+ }
&.active {
background-color: color-mix(
in srgb,
- var(--popup-background-color) 20%,
- transparent
+ var(--popup-background-color) 70%,
+ white
);
}
@@ -123,6 +127,25 @@
overflow: hidden;
text-overflow: ellipsis;
}
+
+ .history-delete {
+ opacity: 0;
+ transition: all 0.2s ease;
+ margin-left: auto;
+ width: 1.25rem;
+ height: 1.25rem;
+ padding: 0;
+ color: color-mix(
+ in srgb,
+ var(--secondary-text-color) 70%,
+ transparent
+ );
+
+ &:hover {
+ color: var(--error-text-color);
+ background-color: rgba(229, 62, 62, 0.1);
+ }
+ }
}
}
@@ -138,6 +161,55 @@
width: calc(100% - 240px);
}
+ .edit-container {
+ margin-top: 0.75rem;
+ padding: 0.75rem;
+ background-color: color-mix(
+ in srgb,
+ var(--popup-background-color) 20%,
+ transparent
+ );
+ border-radius: 0.375rem;
+ border: 1px solid var(--border-color);
+ }
+
+ .edit-textarea {
+ width: 100%;
+ min-height: 100px;
+ padding: 0.75rem;
+ background-color: var(--primary-color);
+ border: 1px solid var(--border-color);
+ border-radius: 0.375rem;
+ color: var(--primary-text-color);
+ font-size: 0.875rem;
+ resize: vertical;
+ transition: all 0.2s ease;
+ }
+
+ .edit-textarea:focus {
+ outline: none;
+ border-color: var(--active-color);
+ box-shadow: 0 0 0 2px rgba(35, 116, 225, 0.1);
+ }
+
+ .edit-actions {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: 0.75rem;
+ gap: 0.5rem;
+ }
+
+ .edit-info {
+ font-size: 0.75rem;
+ color: color-mix(in srgb, var(--secondary-text-color) 70%, transparent);
+ }
+
+ .edit-buttons {
+ display: flex;
+ gap: 0.5rem;
+ }
+
.messages-container {
height: 100%;
overflow-y: auto;
From 4dbb288ec31e5da74a2087275cbcfd7f4296d850 Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Sun, 1 Jun 2025 23:38:36 +0530
Subject: [PATCH 11/26] feat: system prompt and fix html rendering in codeblock
---
src/pages/aiAssistant/assistant.js | 11 +++-------
src/pages/aiAssistant/system_prompt.js | 29 ++++++++++++++++++++++++++
2 files changed, 32 insertions(+), 8 deletions(-)
create mode 100644 src/pages/aiAssistant/system_prompt.js
diff --git a/src/pages/aiAssistant/assistant.js b/src/pages/aiAssistant/assistant.js
index 3b4cb21e5..1fd9b802d 100644
--- a/src/pages/aiAssistant/assistant.js
+++ b/src/pages/aiAssistant/assistant.js
@@ -4,7 +4,6 @@ import { MemorySaver } from "@langchain/langgraph-checkpoint";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import confirm from "dialogs/confirm";
import select from "dialogs/select";
-import he from "he";
import Ref from "html-tag-js/ref";
import EditorFile from "lib/editorFile";
import settings from "lib/settings";
@@ -19,6 +18,7 @@ import {
getMessagesForConversation,
updateConversation,
} from "./db";
+import { SYSTEM_PROMPT } from "./system_prompt";
export default function openAIAssistantPage() {
// References
@@ -50,6 +50,7 @@ export default function openAIAssistantPage() {
llm: model,
tools: [searchTool],
checkpointSaver: agentCheckpointer,
+ stateModifier: SYSTEM_PROMPT,
});
const generateConversationId = () =>
@@ -89,7 +90,6 @@ export default function openAIAssistantPage() {
/([\s\S]*?)<\/code><\/pre>/g,
(match, language, code) => {
language = language || "plaintext";
- code = he.decode(code);
return `
@@ -498,13 +498,8 @@ export default function openAIAssistantPage() {
showLoading();
let messagesForAgentTurn;
- const systemPrompt = {
- role: "system",
- content: `You are an AI assistant in Acode code editor. Profile: ${currentProfile}. Be helpful and concise.`,
- };
- //Gemini Api expects system prompt as first message
if (chatHistory.filter((msg) => msg.role === "user").length === 1) {
- messagesForAgentTurn = [systemPrompt, userMessageForAgent];
+ messagesForAgentTurn = [userMessageForAgent];
} else {
messagesForAgentTurn = [userMessageForAgent];
}
diff --git a/src/pages/aiAssistant/system_prompt.js b/src/pages/aiAssistant/system_prompt.js
new file mode 100644
index 000000000..9bec4bab5
--- /dev/null
+++ b/src/pages/aiAssistant/system_prompt.js
@@ -0,0 +1,29 @@
+export const SYSTEM_PROMPT = `You are a highly skilled software engineer with extensive knowledge in many programming languages, frameworks, design patterns, and best practices.
+
+## Communication
+
+1. Be conversational but professional.
+2. Refer to the user in the second person and yourself in the first person.
+3. Format your responses in markdown. Use backticks to format file, directory, function, and class names.
+4. NEVER lie or make things up.
+5. Refrain from apologizing all the time when results are unexpected. Instead, just try your best to proceed or explain the circumstances to the user without apologizing.
+
+## Fixing Diagnostics
+
+1. Make 1-2 attempts at fixing diagnostics, then defer to the user.
+2. Never simplify code you've written just to solve diagnostics. Complete, mostly correct code is more valuable than perfect code that doesn't solve the problem.
+
+## Debugging Guidelines
+
+When debugging, only make code changes if you are certain that you can solve the problem.
+Otherwise, follow debugging best practices:
+1. Address the root cause instead of the symptoms.
+2. Add descriptive logging statements and error messages to track variable and code state.
+3. Add test functions and statements to isolate the problem.
+
+## Calling External APIs
+
+1. Unless explicitly requested by the user, use the best suited external APIs and packages to solve the task. There is no need to ask the user for permission.
+2. When selecting which version of an API or package to use, choose one that is compatible with the user's dependency management file(s). If no such file exists or if the package is not present, use the latest version that is in your training data.
+3. If an external API requires an API Key, be sure to point this out to the user. Adhere to best security practices (e.g. DO NOT hardcode an API key in a place where it can be exposed)
+`;
From a1d34ce4068c6d39b9d6495ff6f01ea94737e117 Mon Sep 17 00:00:00 2001
From: Raunak Raj <71929976+bajrangCoder@users.noreply.github.com>
Date: Mon, 2 Jun 2025 11:28:21 +0530
Subject: [PATCH 12/26] add edit ui(not the edit functionality)
---
src/pages/aiAssistant/assistant.js | 78 ++++++++++++++++++++-
src/pages/aiAssistant/assistant.module.scss | 13 ++--
2 files changed, 82 insertions(+), 9 deletions(-)
diff --git a/src/pages/aiAssistant/assistant.js b/src/pages/aiAssistant/assistant.js
index 1fd9b802d..2d72e4381 100644
--- a/src/pages/aiAssistant/assistant.js
+++ b/src/pages/aiAssistant/assistant.js
@@ -222,8 +222,7 @@ export default function openAIAssistantPage() {
child: tag("i", {
className: "icon edit",
}),
- // TODO: Implement edit functionality
- //onclick: () => editMessage(message.id),
+ onclick: () => editMessage(message.id),
});
messageActions.appendChild(editBtn);
}
@@ -248,6 +247,74 @@ export default function openAIAssistantPage() {
scrollToBottom();
};
+ const editMessage = (messageId) => {
+ const message = chatHistory.find((msg) => msg.id === messageId);
+ if (!message) return;
+
+ const messageEl = messageContainerRef.el.querySelector(
+ `#message-${message.id}`,
+ );
+ const messageContent = messageEl.querySelector(".message-content");
+
+ const editContainer = ;
+
+ const textarea = (
+