Feat: support action cable (#665)

* upgrade deps

* may connect server via cable
This commit is contained in:
an-lee
2024-06-09 14:07:30 +08:00
committed by GitHub
parent bfcd0be80f
commit 14a44752b1
12 changed files with 306 additions and 113 deletions

View File

@@ -9,7 +9,7 @@
"markdown-it-sup": "^2.0.0",
"mermaid": "^10.9.1",
"sass": "^1.77.4",
"vitepress": "^1.2.2",
"vitepress": "^1.2.3",
"vitepress-plugin-mermaid": "^2.0.16",
"vue": "^3.4.27"
},

View File

@@ -9,7 +9,7 @@
"types": "./src/types.d.ts",
"scripts": {
"predev": "yarn run download",
"dev": "rimraf .vite && yarn run download && WEB_API_URL=http://localhost:3000 SETTINGS_PATH=${PWD}/enjoy/tmp LIBRARY_PATH=${PWD}/enjoy/tmp electron-forge start",
"dev": "rimraf .vite && yarn run download && WEB_API_URL=http://localhost:3000 WS_URL=ws://localhost:3000 SETTINGS_PATH=${PWD}/enjoy/tmp LIBRARY_PATH=${PWD}/enjoy/tmp electron-forge start",
"start": "rimraf .vite && yarn run download && electron-forge start",
"package": "rimraf .vite && yarn run download && electron-forge package",
"make": "rimraf .vite && yarn run download && electron-forge make",
@@ -43,6 +43,7 @@
"@electron/fuses": "^1.8.0",
"@playwright/test": "^1.44.1",
"@tailwindcss/typography": "^0.5.13",
"@types/ahoy.js": "^0.4.2",
"@types/autosize": "^4.0.3",
"@types/command-exists": "^1.2.3",
"@types/electron-squirrel-startup": "^1.0.2",
@@ -51,7 +52,8 @@
"@types/intl-tel-input": "^18.1.4",
"@types/lodash": "^4.17.4",
"@types/mark.js": "^8.11.12",
"@types/node": "^20.14.1",
"@types/node": "^20.14.2",
"@types/rails__actioncable": "^6.1.10",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"@types/validator": "^13.11.10",
@@ -60,7 +62,7 @@
"@typescript-eslint/parser": "^7.12.0",
"@vitejs/plugin-react": "^4.3.0",
"autoprefixer": "^10.4.19",
"electron": "^30.0.9",
"electron": "^30.1.0",
"electron-playwright-helpers": "^1.7.1",
"eslint": "^9.4.0",
"eslint-import-resolver-typescript": "^3.6.1",
@@ -70,21 +72,21 @@
"progress": "^2.0.3",
"tailwind-merge": "^2.3.0",
"tailwind-scrollbar": "^3.1.0",
"tailwindcss": "^3.4.3",
"tailwindcss": "^3.4.4",
"tailwindcss-animate": "^1.0.7",
"ts-node": "^10.9.2",
"tslib": "^2.6.2",
"tslib": "^2.6.3",
"typescript": "^5.4.5",
"vite": "^5.2.12",
"vite": "^5.2.13",
"vite-plugin-static-copy": "^1.0.5",
"zx": "^8.1.2"
},
"dependencies": {
"@andrkrn/ffprobe-static": "^5.2.0",
"@electron-forge/publisher-s3": "^7.4.0",
"@hookform/resolvers": "^3.4.2",
"@langchain/community": "^0.2.5",
"@langchain/google-genai": "^0.0.16",
"@hookform/resolvers": "^3.6.0",
"@langchain/community": "^0.2.9",
"@langchain/google-genai": "^0.0.17",
"@mozilla/readability": "^0.5.0",
"@radix-ui/react-accordion": "^1.1.2",
"@radix-ui/react-alert-dialog": "^1.0.5",
@@ -108,8 +110,8 @@
"@radix-ui/react-toast": "^1.1.5",
"@radix-ui/react-toggle": "^1.0.3",
"@radix-ui/react-tooltip": "^1.0.7",
"@rails/actioncable": "7.1.3-4",
"@sentry/electron": "^5.0.0",
"@types/ahoy.js": "^0.4.2",
"@uidotdev/usehooks": "^2.4.1",
"@vidstack/react": "^1.11.21",
"ahoy.js": "^0.4.4",
@@ -140,20 +142,20 @@
"html-to-text": "^9.0.5",
"https-proxy-agent": "^7.0.4",
"i18next": "^23.11.5",
"intl-tel-input": "^23.0.10",
"intl-tel-input": "^23.0.11",
"js-md5": "^0.8.3",
"langchain": "^0.2.4",
"langchain": "^0.2.5",
"lodash": "^4.17.21",
"lucide-react": "^0.383.0",
"lucide-react": "^0.390.0",
"mark.js": "^8.11.1",
"microsoft-cognitiveservices-speech-sdk": "^1.36.0",
"next-themes": "^0.3.0",
"openai": "^4.47.3",
"openai": "^4.49.1",
"pitchfinder": "^2.3.2",
"postcss": "^8.4.38",
"proxy-agent": "^6.4.0",
"react": "^18.3.1",
"react-activity-calendar": "^2.2.8",
"react-activity-calendar": "^2.2.10",
"react-dom": "^18.3.1",
"react-hook-form": "^7.51.5",
"react-hotkeys-hook": "^4.5.0",
@@ -168,7 +170,7 @@
"sonner": "^1.4.41",
"sqlite3": "^5.1.7",
"tailwind-scrollbar-hide": "^1.1.7",
"umzug": "^3.8.0",
"umzug": "^3.8.1",
"update-electron-app": "^3.0.0",
"wavesurfer.js": "^7.7.15",
"zod": "^3.23.8",

View File

@@ -20,6 +20,7 @@ export const STORAGE_WORKER_ENDPOINTS = [
export const AI_WORKER_ENDPOINT = "https://ai-worker.enjoy.bot";
export const WEB_API_URL = "https://enjoy.bot";
export const WS_URL = "wss://enjoy.bot";
export const REPO_URL = "https://github.com/xiaolai/everyone-can-use-english";

View File

@@ -16,7 +16,7 @@ import whisper from "@main/whisper";
import fs from "fs-extra";
import "@main/i18n";
import log from "@main/logger";
import { WEB_API_URL, REPO_URL } from "@/constants";
import { WEB_API_URL, REPO_URL, WS_URL } from "@/constants";
import { AudibleProvider, TedProvider, YoutubeProvider } from "@main/providers";
import Ffmpeg from "@main/ffmpeg";
import { Waveform } from "./waveform";
@@ -318,6 +318,10 @@ main.init = () => {
return process.env.WEB_API_URL || WEB_API_URL;
});
ipcMain.handle("app-ws-url", () => {
return process.env.WS_URL || WS_URL;
});
ipcMain.handle("app-quit", () => {
app.quit();
});

View File

@@ -23,6 +23,9 @@ contextBridge.exposeInMainWorld("__ENJOY_APP__", {
apiUrl: () => {
return ipcRenderer.invoke("app-api-url");
},
wsUrl: () => {
return ipcRenderer.invoke("app-ws-url");
},
quit: () => {
ipcRenderer.invoke("app-quit");
},

View File

@@ -0,0 +1 @@
export * from "./notifications_channel";

View File

@@ -0,0 +1,49 @@
import { toast } from "@/renderer/components/ui";
import { type Consumer } from "@rails/actioncable";
export class NoticiationsChannel {
private consumer: Consumer;
constructor(consumer: Consumer) {
this.consumer = consumer;
}
subscribe() {
this.consumer.subscriptions.create(
{ channel: "NotificationsChannel" },
{
received(data) {
if (typeof data === "string") {
toast.info(data);
} else {
switch (data?.type) {
case "success":
toast.success(data.message);
break;
case "error":
toast.error(data.message);
break;
case "info":
toast.info(data.message);
break;
case "warning":
toast.warning(data.message);
break;
default:
toast.message(data.message);
break;
}
}
if (data.id) {
this.markAsSeen([data.id]);
}
},
markAsSeen(ids: number[]) {
this.consumer.perform("mark_as_seen", { ids });
},
}
);
}
}

View File

@@ -0,0 +1 @@
export * from './channels';

View File

@@ -14,6 +14,7 @@ import {
DropdownMenuSubTrigger,
DropdownMenuItem,
Separator,
toast,
} from "@renderer/components/ui";
import {
SettingsIcon,
@@ -34,12 +35,19 @@ import { useLocation, Link } from "react-router-dom";
import { t } from "i18next";
import { Preferences } from "@renderer/components";
import { AppSettingsProviderContext } from "@renderer/context";
import { useContext } from "react";
import { useContext, useEffect } from "react";
import { NoticiationsChannel } from "@/renderer/cables";
export const Sidebar = () => {
const location = useLocation();
const activeTab = location.pathname;
const { EnjoyApp } = useContext(AppSettingsProviderContext);
const { EnjoyApp, cable } = useContext(AppSettingsProviderContext);
useEffect(() => {
console.log("Subscrbing ->");
const channel = new NoticiationsChannel(cable);
channel.subscribe();
}, []);
return (
<div
@@ -170,7 +178,9 @@ export const Sidebar = () => {
className="w-full xl:justify-start px-2 xl:px-4"
>
<HelpCircleIcon className="h-5 w-5" />
<span className="ml-2 hidden xl:block">{t("sidebar.help")}</span>
<span className="ml-2 hidden xl:block">
{t("sidebar.help")}
</span>
</Button>
</DropdownMenuTrigger>

View File

@@ -3,6 +3,7 @@ import { WEB_API_URL, LANGUAGES } from "@/constants";
import { Client } from "@/api";
import i18n from "@renderer/i18n";
import ahoy from "ahoy.js";
import { type Consumer, createConsumer } from "@rails/actioncable";
type AppSettingsProviderState = {
webApi: Client;
@@ -23,6 +24,7 @@ type AppSettingsProviderState = {
switchLearningLanguage?: (lang: string) => void;
proxy?: ProxyConfigType;
setProxy?: (config: ProxyConfigType) => Promise<void>;
cable?: Consumer;
ahoy?: typeof ahoy;
};
@@ -43,6 +45,7 @@ export const AppSettingsProvider = ({
const [version, setVersion] = useState<string>("");
const [apiUrl, setApiUrl] = useState<string>(WEB_API_URL);
const [webApi, setWebApi] = useState<Client>(null);
const [cable, setCable] = useState<Consumer>();
const [user, setUser] = useState<UserType | null>(null);
const [libraryPath, setLibraryPath] = useState("");
const [language, setLanguage] = useState<"en" | "zh-CN">();
@@ -145,6 +148,7 @@ export const AppSettingsProvider = ({
const login = (user: UserType) => {
setUser(user);
EnjoyApp.settings.setUser(user);
createCable(user.accessToken);
};
const logout = () => {
@@ -173,6 +177,12 @@ export const AppSettingsProvider = ({
});
};
const createCable = async (token: string) => {
const wsUrl = await EnjoyApp.app.wsUrl();
const consumer = createConsumer(wsUrl + "/cable?token=" + token);
setCable(consumer);
};
return (
<AppSettingsProviderContext.Provider
value={{
@@ -195,6 +205,7 @@ export const AppSettingsProvider = ({
setProxy: setProxyConfigHandler,
initialized: Boolean(user && libraryPath),
ahoy,
cable,
}}
>
{children}

View File

@@ -6,6 +6,7 @@ type EnjoyAppType = {
reload: () => Promise<void>;
isPackaged: () => Promise<boolean>;
apiUrl: () => Promise<string>;
wsUrl: () => Promise<string>;
quit: () => Promise<void>;
openDevTools: () => Promise<void>;
createIssue: (title: string, body: string) => Promise<void>;

294
yarn.lock
View File

@@ -17,7 +17,7 @@ __metadata:
markdown-it-sup: "npm:^2.0.0"
mermaid: "npm:^10.9.1"
sass: "npm:^1.77.4"
vitepress: "npm:^1.2.2"
vitepress: "npm:^1.2.3"
vitepress-plugin-mermaid: "npm:^2.0.16"
vue: "npm:^3.4.27"
languageName: unknown
@@ -2383,12 +2383,12 @@ __metadata:
languageName: node
linkType: hard
"@hookform/resolvers@npm:^3.4.2":
version: 3.4.2
resolution: "@hookform/resolvers@npm:3.4.2"
"@hookform/resolvers@npm:^3.6.0":
version: 3.6.0
resolution: "@hookform/resolvers@npm:3.6.0"
peerDependencies:
react-hook-form: ^7.0.0
checksum: 10c0/cb8a3e0cc1c9aeaf2adad585f29badf342a96da9cfdf4efa1168aadb7ef52f440cac5cc6fedf0fda6a52effd27a5c859692c89bb99ed5c76d03064aea1f0d684
checksum: 10c0/3577949a82b02b823b81592ec44630d28dc8748e9c42e57d8a19046670bb6d270d5e2c4780d65193c206bc18abb5575a0a5e261fa7aac17198faee1823208be6
languageName: node
linkType: hard
@@ -2495,11 +2495,11 @@ __metadata:
languageName: node
linkType: hard
"@langchain/community@npm:^0.2.5":
version: 0.2.5
resolution: "@langchain/community@npm:0.2.5"
"@langchain/community@npm:^0.2.9":
version: 0.2.9
resolution: "@langchain/community@npm:0.2.9"
dependencies:
"@langchain/core": "npm:~0.2.0"
"@langchain/core": "npm:~0.2.6"
"@langchain/openai": "npm:~0.1.0"
binary-extensions: "npm:^2.2.0"
expr-eval: "npm:^2.0.2"
@@ -2539,7 +2539,7 @@ __metadata:
"@huggingface/inference": ^2.6.4
"@layerup/layerup-security": ^1.5.12
"@mendable/firecrawl-js": ^0.0.13
"@mlc-ai/web-llm": ^0.2.35
"@mlc-ai/web-llm": ^0.2.40
"@mozilla/readability": "*"
"@neondatabase/serverless": "*"
"@notionhq/client": ^2.2.10
@@ -2571,7 +2571,7 @@ __metadata:
"@zilliz/milvus2-sdk-node": ">=2.2.7"
apify-client: ^2.7.1
assemblyai: ^4.0.0
better-sqlite3: ^9.4.0
better-sqlite3: ">=9.4.0 <12.0.0"
cassandra-driver: ^4.7.2
cborg: ^4.1.1
cheerio: ^1.0.0-rc.12
@@ -2621,7 +2621,7 @@ __metadata:
replicate: ^0.29.4
sonix-speech-recognition: ^2.1.1
srt-parser-2: ^1.2.3
typeorm: ^0.3.12
typeorm: ^0.3.20
typesense: ^1.5.3
usearch: ^1.1.1
vectordb: ^0.1.4
@@ -2872,7 +2872,7 @@ __metadata:
optional: true
youtubei.js:
optional: true
checksum: 10c0/6004c30048b9a1a0648772f72c563781ca00a73145e842232da06360d722e155ba90540d9aed5f093d8b8ebe519c77a7f9c917f02b01962b7bc690e4f2ebad8c
checksum: 10c0/a45b7547966582914612a0659ba83fec050dbc0fb6cbae349a23e37d6d4494477a03c505c18ddc68cb402f8654a5a5e895bef7814618db9f936cc9d620aa43c9
languageName: node
linkType: hard
@@ -2896,14 +2896,34 @@ __metadata:
languageName: node
linkType: hard
"@langchain/google-genai@npm:^0.0.16":
version: 0.0.16
resolution: "@langchain/google-genai@npm:0.0.16"
"@langchain/core@npm:~0.2.6":
version: 0.2.6
resolution: "@langchain/core@npm:0.2.6"
dependencies:
ansi-styles: "npm:^5.0.0"
camelcase: "npm:6"
decamelize: "npm:1.2.0"
js-tiktoken: "npm:^1.0.12"
langsmith: "npm:~0.1.30"
ml-distance: "npm:^4.0.0"
mustache: "npm:^4.2.0"
p-queue: "npm:^6.6.2"
p-retry: "npm:4"
uuid: "npm:^9.0.0"
zod: "npm:^3.22.4"
zod-to-json-schema: "npm:^3.22.3"
checksum: 10c0/4ae46528854f9dfc9e6e91c9351275cecc5cb4d246c8a2ae1326fbe046bb8637e5e26743e1ebd86f06f2ef12dc1741ea3f4480701be1e89ceecc5146b8c873b1
languageName: node
linkType: hard
"@langchain/google-genai@npm:^0.0.17":
version: 0.0.17
resolution: "@langchain/google-genai@npm:0.0.17"
dependencies:
"@google/generative-ai": "npm:^0.7.0"
"@langchain/core": "npm:>0.1.5 <0.3.0"
zod-to-json-schema: "npm:^3.22.4"
checksum: 10c0/2d6c9f8a31316f55ce5e73345eb14f418af73c45f8a27276bef79dca509d96b241f1494656b6989097f80d1d189eec2fe5d7333cc9b886f910283c8c2e24e1ca
checksum: 10c0/1e03935ba2e27b37351a60f9c94e42d07bc06420cfbcbe3afa94c6e25fec46a58ae3494d865cfad91d59f78f23c69dc6ab1bdaf29a53d15b5d50b01ee0aa7100
languageName: node
linkType: hard
@@ -5000,6 +5020,13 @@ __metadata:
languageName: node
linkType: hard
"@rails/actioncable@npm:7.1.3-4":
version: 7.1.3-4
resolution: "@rails/actioncable@npm:7.1.3-4"
checksum: 10c0/1675a2dad20fabee553d538682e3ec8baba75b88df6a5c7219419459d54489ebc80f42860380633dced5746db1333ff533b06d22ea481d350313be066bb2097a
languageName: node
linkType: hard
"@remix-run/router@npm:1.16.1":
version: 1.16.1
resolution: "@remix-run/router@npm:1.16.1"
@@ -5333,19 +5360,19 @@ __metadata:
languageName: node
linkType: hard
"@shikijs/core@npm:1.6.2, @shikijs/core@npm:^1.5.2":
version: 1.6.2
resolution: "@shikijs/core@npm:1.6.2"
checksum: 10c0/011068de5299c3f8508ccb6cb0432b573bedd521a9d66e4ba1b8ed28960d7a7a7c813a566452ca0959aab159793bec658c2c1f06cb0b4eff2885794dea72cfb6
"@shikijs/core@npm:1.6.3, @shikijs/core@npm:^1.6.2":
version: 1.6.3
resolution: "@shikijs/core@npm:1.6.3"
checksum: 10c0/5c0e989311592c377ca07f300ca820083bab7a835755a2f501375fd0f61d4fd6d6e9eb5450fd2102f1cc2f17835ef636a4dd516526171c949e9d5d95d5e6444e
languageName: node
linkType: hard
"@shikijs/transformers@npm:^1.5.2":
version: 1.6.2
resolution: "@shikijs/transformers@npm:1.6.2"
"@shikijs/transformers@npm:^1.6.2":
version: 1.6.3
resolution: "@shikijs/transformers@npm:1.6.3"
dependencies:
shiki: "npm:1.6.2"
checksum: 10c0/77c8268e1681d9e6c64780965e207c697f06ae0f489b3d8d4fcc0b893caa8d76972ff2126acc9777278d8e0b335ad773a9c6034c1e5a04adc42b0660699ca59b
shiki: "npm:1.6.3"
checksum: 10c0/57bbb030a98d53329f8e025dc248d07a81ecd1f09bae1d21729a8156ff5dfda70c56e0d1ff38c331e993c0bf5cd39a63ff38ee2ab77784c8c1feaf48ab92d21d
languageName: node
linkType: hard
@@ -6518,7 +6545,7 @@ __metadata:
languageName: node
linkType: hard
"@types/node@npm:*, @types/node@npm:>=20.12.12, @types/node@npm:^20.14.1, @types/node@npm:^20.9.0":
"@types/node@npm:*, @types/node@npm:>=20.12.12, @types/node@npm:^20.9.0":
version: 20.14.1
resolution: "@types/node@npm:20.14.1"
dependencies:
@@ -6543,6 +6570,15 @@ __metadata:
languageName: node
linkType: hard
"@types/node@npm:^20.14.2":
version: 20.14.2
resolution: "@types/node@npm:20.14.2"
dependencies:
undici-types: "npm:~5.26.4"
checksum: 10c0/2d86e5f2227aaa42212e82ea0affe72799111b888ff900916376450b02b09b963ca888b20d9c332d8d2b833ed4781987867a38eaa2e4863fa8439071468b0a6f
languageName: node
linkType: hard
"@types/normalize-package-data@npm:^2.4.0":
version: 2.4.4
resolution: "@types/normalize-package-data@npm:2.4.4"
@@ -6595,6 +6631,13 @@ __metadata:
languageName: node
linkType: hard
"@types/rails__actioncable@npm:^6.1.10":
version: 6.1.10
resolution: "@types/rails__actioncable@npm:6.1.10"
checksum: 10c0/7f877b4974a6afd4b08e402f116e828aeb6dc171a36897bb306c3d232b0f9fd29e1954c4493ab82b2e269de27de8d23200fbc1b7a8cedb3f165e9dbb25a34e4b
languageName: node
linkType: hard
"@types/range-parser@npm:*":
version: 1.2.7
resolution: "@types/range-parser@npm:1.2.7"
@@ -6894,7 +6937,7 @@ __metadata:
languageName: node
linkType: hard
"@vitejs/plugin-vue@npm:^5.0.4":
"@vitejs/plugin-vue@npm:^5.0.5":
version: 5.0.5
resolution: "@vitejs/plugin-vue@npm:5.0.5"
peerDependencies:
@@ -6954,7 +6997,7 @@ __metadata:
languageName: node
linkType: hard
"@vue/devtools-api@npm:^7.2.0":
"@vue/devtools-api@npm:^7.2.1":
version: 7.2.1
resolution: "@vue/devtools-api@npm:7.2.1"
dependencies:
@@ -7036,7 +7079,7 @@ __metadata:
languageName: node
linkType: hard
"@vueuse/core@npm:10.10.0, @vueuse/core@npm:^10.9.0":
"@vueuse/core@npm:10.10.0, @vueuse/core@npm:^10.10.0":
version: 10.10.0
resolution: "@vueuse/core@npm:10.10.0"
dependencies:
@@ -7048,7 +7091,7 @@ __metadata:
languageName: node
linkType: hard
"@vueuse/integrations@npm:^10.9.0":
"@vueuse/integrations@npm:^10.10.0":
version: 10.10.0
resolution: "@vueuse/integrations@npm:10.10.0"
dependencies:
@@ -9981,16 +10024,16 @@ __metadata:
languageName: node
linkType: hard
"electron@npm:^30.0.9":
version: 30.0.9
resolution: "electron@npm:30.0.9"
"electron@npm:^30.1.0":
version: 30.1.0
resolution: "electron@npm:30.1.0"
dependencies:
"@electron/get": "npm:^2.0.0"
"@types/node": "npm:^20.9.0"
extract-zip: "npm:^2.0.1"
bin:
electron: cli.js
checksum: 10c0/98f28e9f905a4734af708e156bab85b924ab196439e383ea5b7c83b884106a1e5684dfb175fb4fd518c91b9276f955aef6e0e06ba9b1f5fe6c8a555bcff46749
checksum: 10c0/e17c5fdf275f8cd457086adfa05db7507d08dd9264024d80eae8e55eb01927d062b63223a1a15b3ac024ebe2c34cc4b3ceb5cc0ac3ded4721c4ac9be4e5fe33c
languageName: node
linkType: hard
@@ -10088,9 +10131,9 @@ __metadata:
"@electron-forge/publisher-github": "npm:^7.4.0"
"@electron-forge/publisher-s3": "npm:^7.4.0"
"@electron/fuses": "npm:^1.8.0"
"@hookform/resolvers": "npm:^3.4.2"
"@langchain/community": "npm:^0.2.5"
"@langchain/google-genai": "npm:^0.0.16"
"@hookform/resolvers": "npm:^3.6.0"
"@langchain/community": "npm:^0.2.9"
"@langchain/google-genai": "npm:^0.0.17"
"@mozilla/readability": "npm:^0.5.0"
"@playwright/test": "npm:^1.44.1"
"@radix-ui/react-accordion": "npm:^1.1.2"
@@ -10115,6 +10158,7 @@ __metadata:
"@radix-ui/react-toast": "npm:^1.1.5"
"@radix-ui/react-toggle": "npm:^1.0.3"
"@radix-ui/react-tooltip": "npm:^1.0.7"
"@rails/actioncable": "npm:7.1.3-4"
"@sentry/electron": "npm:^5.0.0"
"@tailwindcss/typography": "npm:^0.5.13"
"@types/ahoy.js": "npm:^0.4.2"
@@ -10126,7 +10170,8 @@ __metadata:
"@types/intl-tel-input": "npm:^18.1.4"
"@types/lodash": "npm:^4.17.4"
"@types/mark.js": "npm:^8.11.12"
"@types/node": "npm:^20.14.1"
"@types/node": "npm:^20.14.2"
"@types/rails__actioncable": "npm:^6.1.10"
"@types/react": "npm:^18.3.3"
"@types/react-dom": "npm:^18.3.0"
"@types/validator": "npm:^13.11.10"
@@ -10155,7 +10200,7 @@ __metadata:
decamelize: "npm:^6.0.0"
decamelize-keys: "npm:^2.0.1"
echogarden: "npm:^1.5.0"
electron: "npm:^30.0.9"
electron: "npm:^30.1.0"
electron-context-menu: "npm:^4.0.0"
electron-log: "npm:^5.1.5"
electron-playwright-helpers: "npm:^1.7.1"
@@ -10171,22 +10216,22 @@ __metadata:
html-to-text: "npm:^9.0.5"
https-proxy-agent: "npm:^7.0.4"
i18next: "npm:^23.11.5"
intl-tel-input: "npm:^23.0.10"
intl-tel-input: "npm:^23.0.11"
js-md5: "npm:^0.8.3"
langchain: "npm:^0.2.4"
langchain: "npm:^0.2.5"
lodash: "npm:^4.17.21"
lucide-react: "npm:^0.383.0"
lucide-react: "npm:^0.390.0"
mark.js: "npm:^8.11.1"
microsoft-cognitiveservices-speech-sdk: "npm:^1.36.0"
next-themes: "npm:^0.3.0"
octokit: "npm:^4.0.2"
openai: "npm:^4.47.3"
openai: "npm:^4.49.1"
pitchfinder: "npm:^2.3.2"
postcss: "npm:^8.4.38"
progress: "npm:^2.0.3"
proxy-agent: "npm:^6.4.0"
react: "npm:^18.3.1"
react-activity-calendar: "npm:^2.2.8"
react-activity-calendar: "npm:^2.2.10"
react-dom: "npm:^18.3.1"
react-hook-form: "npm:^7.51.5"
react-hotkeys-hook: "npm:^4.5.0"
@@ -10203,14 +10248,14 @@ __metadata:
tailwind-merge: "npm:^2.3.0"
tailwind-scrollbar: "npm:^3.1.0"
tailwind-scrollbar-hide: "npm:^1.1.7"
tailwindcss: "npm:^3.4.3"
tailwindcss: "npm:^3.4.4"
tailwindcss-animate: "npm:^1.0.7"
ts-node: "npm:^10.9.2"
tslib: "npm:^2.6.2"
tslib: "npm:^2.6.3"
typescript: "npm:^5.4.5"
umzug: "npm:^3.8.0"
umzug: "npm:^3.8.1"
update-electron-app: "npm:^3.0.0"
vite: "npm:^5.2.12"
vite: "npm:^5.2.13"
vite-plugin-static-copy: "npm:^1.0.5"
wavesurfer.js: "npm:^7.7.15"
zod: "npm:^3.23.8"
@@ -12355,10 +12400,10 @@ __metadata:
languageName: node
linkType: hard
"intl-tel-input@npm:^23.0.10":
version: 23.0.10
resolution: "intl-tel-input@npm:23.0.10"
checksum: 10c0/a8b7c9b0fa953b04add2b6ab90cb5e56422c1f719cb6da9933cfa6a0187a837987b69f5521a569c0fb3b2573ddc89b14cc56bcc5383aa66e0ac70f81c012eb7a
"intl-tel-input@npm:^23.0.11":
version: 23.0.11
resolution: "intl-tel-input@npm:23.0.11"
checksum: 10c0/90a3d0b2d712ba346b88887060855bb71f3824a82913996443641d77ed9ebe63c36c41eac8f0a19b25be90a0da1768e2c4bd9bf954e396d69d993380c380e801
languageName: node
linkType: hard
@@ -13239,9 +13284,9 @@ __metadata:
languageName: node
linkType: hard
"langchain@npm:^0.2.4":
version: 0.2.4
resolution: "langchain@npm:0.2.4"
"langchain@npm:^0.2.5":
version: 0.2.5
resolution: "langchain@npm:0.2.5"
dependencies:
"@langchain/core": "npm:~0.2.0"
"@langchain/openai": "npm:~0.1.0"
@@ -13410,7 +13455,7 @@ __metadata:
optional: true
youtubei.js:
optional: true
checksum: 10c0/ad3c017649438f910de6f7d01be2a7b071bd08683bde184ff071d99cbc0173093afc0b5277db65d1bc7b9a1c68fe56546510474161ab6defee1943a995da9f64
checksum: 10c0/4e19637b91fe95d1b4f9b35ada425802ee32d9d14f7de0e739f6bbfe6d4cfb00d42fd7095b2a120a2f90a102b949ea344a95996034f41960f1f143c8af615e63
languageName: node
linkType: hard
@@ -13673,12 +13718,12 @@ __metadata:
languageName: node
linkType: hard
"lucide-react@npm:^0.383.0":
version: 0.383.0
resolution: "lucide-react@npm:0.383.0"
"lucide-react@npm:^0.390.0":
version: 0.390.0
resolution: "lucide-react@npm:0.390.0"
peerDependencies:
react: ^16.5.1 || ^17.0.0 || ^18.0.0
checksum: 10c0/241814c4a12b7f1e946a18d60fff4d35ab25ece77dcd6eb99dd7cf3a31d1578b2263aa5339a67c0a84646fdcd16cee47f9f53f0c5aff8cfc6601f2e001052cde
checksum: 10c0/d8062c311e703c592c0704d624855b965ba2caa3260f7158f65eb6a63c0826150ac67d35df210d58830bc6d85f8ad0e98e62c7e02e6f9e37690909aa046f64d0
languageName: node
linkType: hard
@@ -15531,7 +15576,7 @@ __metadata:
languageName: node
linkType: hard
"openai@npm:^4.41.1, openai@npm:^4.47.1, openai@npm:^4.47.3":
"openai@npm:^4.41.1, openai@npm:^4.47.1":
version: 4.47.3
resolution: "openai@npm:4.47.3"
dependencies:
@@ -15549,6 +15594,24 @@ __metadata:
languageName: node
linkType: hard
"openai@npm:^4.49.1":
version: 4.49.1
resolution: "openai@npm:4.49.1"
dependencies:
"@types/node": "npm:^18.11.18"
"@types/node-fetch": "npm:^2.6.4"
abort-controller: "npm:^3.0.0"
agentkeepalive: "npm:^4.2.1"
form-data-encoder: "npm:1.7.2"
formdata-node: "npm:^4.3.2"
node-fetch: "npm:^2.6.7"
web-streams-polyfill: "npm:^3.2.1"
bin:
openai: bin/cli
checksum: 10c0/486e46b8806866336ec3e934405acba5c8bce7b88b54c4b725d3dc0866c9800a85fc04d70e4b8482aeecfdf63bb5f6ae2649c8365b0613794da91126d4801309
languageName: node
linkType: hard
"openapi-types@npm:^12.1.3":
version: 12.1.3
resolution: "openapi-types@npm:12.1.3"
@@ -16555,9 +16618,9 @@ __metadata:
languageName: node
linkType: hard
"react-activity-calendar@npm:^2.2.8":
version: 2.2.8
resolution: "react-activity-calendar@npm:2.2.8"
"react-activity-calendar@npm:^2.2.10":
version: 2.2.10
resolution: "react-activity-calendar@npm:2.2.10"
dependencies:
"@types/chroma-js": "npm:^2.4.3"
chroma-js: "npm:^2.4.2"
@@ -16565,7 +16628,7 @@ __metadata:
peerDependencies:
react: ^17.0.0 || ^18.0.0
react-dom: ^17.0.0 || ^18.0.0
checksum: 10c0/a19af502299e7ada4220b00ec6cf6055fb2b984dbe66ab97872a379119a3f2111c4879f43fd6d5405612771545806d51c46a308e4e37088bf285df7947de6ced
checksum: 10c0/ef13062856b01d5a5a27dbbe9f6a8a1fb5fadf6e1f9331b3edf300c6b5efcd2ae7b01ef4157576fe63ffbbad23232176ee3caf41d95015e4c48ddc95087c9f30
languageName: node
linkType: hard
@@ -17545,12 +17608,12 @@ __metadata:
languageName: node
linkType: hard
"shiki@npm:1.6.2, shiki@npm:^1.5.2":
version: 1.6.2
resolution: "shiki@npm:1.6.2"
"shiki@npm:1.6.3, shiki@npm:^1.6.2":
version: 1.6.3
resolution: "shiki@npm:1.6.3"
dependencies:
"@shikijs/core": "npm:1.6.2"
checksum: 10c0/c563a22f47890d46626822b50635217f95ce5d4a28f4a62cabe689c3786602a41f0bba58f13ae36399ff24525cd9eadc034022a4be57226ffd8ed4a9aeec946d
"@shikijs/core": "npm:1.6.3"
checksum: 10c0/3a5f421536b2d77f2973fa4459dc58ec154f8831acd177ec1b21bf33d876895b501263c7bcf58f6ad65541262ece485acd38e29ad271796dbf7f5743c8615485
languageName: node
linkType: hard
@@ -18181,9 +18244,9 @@ __metadata:
languageName: node
linkType: hard
"tailwindcss@npm:^3.4.3":
version: 3.4.3
resolution: "tailwindcss@npm:3.4.3"
"tailwindcss@npm:^3.4.4":
version: 3.4.4
resolution: "tailwindcss@npm:3.4.4"
dependencies:
"@alloc/quick-lru": "npm:^5.2.0"
arg: "npm:^5.0.2"
@@ -18210,7 +18273,7 @@ __metadata:
bin:
tailwind: lib/cli.js
tailwindcss: lib/cli.js
checksum: 10c0/11e5546494f2888f693ebaa271b218b3a8e52fe59d7b629e54f2dffd6eaafd5ded2e9f0c37ad04e6a866dffb2b116d91becebad77e1441beee8bf016bb2392f9
checksum: 10c0/e4f7e1a2e1897871a4744f421ccb5639e8d51012e3644b0c35cf723527fdc8f9cddd3fa3b0fc28c198b0ea6ce44ead21c89cfec549d80bad9b1f3dd9d8bf2d54
languageName: node
linkType: hard
@@ -18541,6 +18604,13 @@ __metadata:
languageName: node
linkType: hard
"tslib@npm:^2.6.3":
version: 2.6.3
resolution: "tslib@npm:2.6.3"
checksum: 10c0/2598aef53d9dbe711af75522464b2104724d6467b26a60f2bdac8297d2b5f1f6b86a71f61717384aa8fd897240467aaa7bcc36a0700a0faf751293d1331db39a
languageName: node
linkType: hard
"tunnel-agent@npm:^0.6.0":
version: 0.6.0
resolution: "tunnel-agent@npm:0.6.0"
@@ -18685,16 +18755,16 @@ __metadata:
languageName: node
linkType: hard
"umzug@npm:^3.8.0":
version: 3.8.0
resolution: "umzug@npm:3.8.0"
"umzug@npm:^3.8.1":
version: 3.8.1
resolution: "umzug@npm:3.8.1"
dependencies:
"@rushstack/ts-command-line": "npm:^4.12.2"
emittery: "npm:^0.13.0"
fast-glob: "npm:^3.3.2"
pony-cause: "npm:^2.1.4"
type-fest: "npm:^4.0.0"
checksum: 10c0/5d886f1620deba18d9da80110e254bd78d9c02a74766214bb33f01f4e3d192bafd09a410c18dce124f556475646412127e99e018bfed2a66d5725830f291835f
checksum: 10c0/5e0472e170aabd249885e9a2e3539036b50f707a6401af72a176ab2edfd24c5c05e4acb98049e5097ce24a987f7e835f5887d62ba528cba4ed76b97e801a66fc
languageName: node
linkType: hard
@@ -19137,7 +19207,7 @@ __metadata:
languageName: node
linkType: hard
"vite@npm:^5.2.11, vite@npm:^5.2.12":
"vite@npm:^5.2.12":
version: 5.2.12
resolution: "vite@npm:5.2.12"
dependencies:
@@ -19177,6 +19247,46 @@ __metadata:
languageName: node
linkType: hard
"vite@npm:^5.2.13":
version: 5.2.13
resolution: "vite@npm:5.2.13"
dependencies:
esbuild: "npm:^0.20.1"
fsevents: "npm:~2.3.3"
postcss: "npm:^8.4.38"
rollup: "npm:^4.13.0"
peerDependencies:
"@types/node": ^18.0.0 || >=20.0.0
less: "*"
lightningcss: ^1.21.0
sass: "*"
stylus: "*"
sugarss: "*"
terser: ^5.4.0
dependenciesMeta:
fsevents:
optional: true
peerDependenciesMeta:
"@types/node":
optional: true
less:
optional: true
lightningcss:
optional: true
sass:
optional: true
stylus:
optional: true
sugarss:
optional: true
terser:
optional: true
bin:
vite: bin/vite.js
checksum: 10c0/f7a99da71884e69cc581dcfb43d73c8d56d73b9668d6980131603c544d6323c6003a20f376531dc0cfcf36bf5009bc465f89e6c5f8bd9d22868987aba4e4af1b
languageName: node
linkType: hard
"vitepress-plugin-mermaid@npm:^2.0.16":
version: 2.0.16
resolution: "vitepress-plugin-mermaid@npm:2.0.16"
@@ -19192,25 +19302,25 @@ __metadata:
languageName: node
linkType: hard
"vitepress@npm:^1.2.2":
version: 1.2.2
resolution: "vitepress@npm:1.2.2"
"vitepress@npm:^1.2.3":
version: 1.2.3
resolution: "vitepress@npm:1.2.3"
dependencies:
"@docsearch/css": "npm:^3.6.0"
"@docsearch/js": "npm:^3.6.0"
"@shikijs/core": "npm:^1.5.2"
"@shikijs/transformers": "npm:^1.5.2"
"@shikijs/core": "npm:^1.6.2"
"@shikijs/transformers": "npm:^1.6.2"
"@types/markdown-it": "npm:^14.1.1"
"@vitejs/plugin-vue": "npm:^5.0.4"
"@vue/devtools-api": "npm:^7.2.0"
"@vitejs/plugin-vue": "npm:^5.0.5"
"@vue/devtools-api": "npm:^7.2.1"
"@vue/shared": "npm:^3.4.27"
"@vueuse/core": "npm:^10.9.0"
"@vueuse/integrations": "npm:^10.9.0"
"@vueuse/core": "npm:^10.10.0"
"@vueuse/integrations": "npm:^10.10.0"
focus-trap: "npm:^7.5.4"
mark.js: "npm:8.11.1"
minisearch: "npm:^6.3.0"
shiki: "npm:^1.5.2"
vite: "npm:^5.2.11"
shiki: "npm:^1.6.2"
vite: "npm:^5.2.12"
vue: "npm:^3.4.27"
peerDependencies:
markdown-it-mathjax3: ^4
@@ -19222,7 +19332,7 @@ __metadata:
optional: true
bin:
vitepress: bin/vitepress.js
checksum: 10c0/2ecdf85d1b32136c34078b30877e07c2f7ab2a664bac0fbc4b5ef339d91a184ef0d5b27014f2d578b47c12ee0256f0f003dab2fb2310655b7466e4e47dcb9c21
checksum: 10c0/f6479a696024611d01650a3ff8889ad682c119b757cd6c9ce48633b99cd768e483faa0e1fd193d2849d8961eec5f0994cbc940b1457bc48fb8438cc8e250349b
languageName: node
linkType: hard