From 14a44752b13f4b75780becfda75049f12e5d3eba Mon Sep 17 00:00:00 2001 From: an-lee Date: Sun, 9 Jun 2024 14:07:30 +0800 Subject: [PATCH] Feat: support action cable (#665) * upgrade deps * may connect server via cable --- 1000-hours/package.json | 2 +- enjoy/package.json | 34 +- enjoy/src/constants/index.ts | 1 + enjoy/src/main/window.ts | 6 +- enjoy/src/preload.ts | 3 + enjoy/src/renderer/cables/channels/index.ts | 1 + .../cables/channels/notifications_channel.ts | 49 +++ enjoy/src/renderer/cables/index.ts | 1 + .../src/renderer/components/misc/sidebar.tsx | 16 +- .../context/app-settings-provider.tsx | 11 + enjoy/src/types/enjoy-app.d.ts | 1 + yarn.lock | 294 ++++++++++++------ 12 files changed, 306 insertions(+), 113 deletions(-) create mode 100644 enjoy/src/renderer/cables/channels/index.ts create mode 100644 enjoy/src/renderer/cables/channels/notifications_channel.ts create mode 100644 enjoy/src/renderer/cables/index.ts diff --git a/1000-hours/package.json b/1000-hours/package.json index b87c9c22..81b53294 100644 --- a/1000-hours/package.json +++ b/1000-hours/package.json @@ -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" }, diff --git a/enjoy/package.json b/enjoy/package.json index a65575fc..90b95df6 100644 --- a/enjoy/package.json +++ b/enjoy/package.json @@ -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", diff --git a/enjoy/src/constants/index.ts b/enjoy/src/constants/index.ts index 21230db8..7ab55085 100644 --- a/enjoy/src/constants/index.ts +++ b/enjoy/src/constants/index.ts @@ -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"; diff --git a/enjoy/src/main/window.ts b/enjoy/src/main/window.ts index 31f77364..59fb88da 100644 --- a/enjoy/src/main/window.ts +++ b/enjoy/src/main/window.ts @@ -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(); }); diff --git a/enjoy/src/preload.ts b/enjoy/src/preload.ts index 785ce462..207a9ff7 100644 --- a/enjoy/src/preload.ts +++ b/enjoy/src/preload.ts @@ -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"); }, diff --git a/enjoy/src/renderer/cables/channels/index.ts b/enjoy/src/renderer/cables/channels/index.ts new file mode 100644 index 00000000..01736294 --- /dev/null +++ b/enjoy/src/renderer/cables/channels/index.ts @@ -0,0 +1 @@ +export * from "./notifications_channel"; diff --git a/enjoy/src/renderer/cables/channels/notifications_channel.ts b/enjoy/src/renderer/cables/channels/notifications_channel.ts new file mode 100644 index 00000000..79143704 --- /dev/null +++ b/enjoy/src/renderer/cables/channels/notifications_channel.ts @@ -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 }); + }, + } + ); + } +} diff --git a/enjoy/src/renderer/cables/index.ts b/enjoy/src/renderer/cables/index.ts new file mode 100644 index 00000000..d15e506a --- /dev/null +++ b/enjoy/src/renderer/cables/index.ts @@ -0,0 +1 @@ +export * from './channels'; \ No newline at end of file diff --git a/enjoy/src/renderer/components/misc/sidebar.tsx b/enjoy/src/renderer/components/misc/sidebar.tsx index 1f98de5e..370f0431 100644 --- a/enjoy/src/renderer/components/misc/sidebar.tsx +++ b/enjoy/src/renderer/components/misc/sidebar.tsx @@ -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 (
{ className="w-full xl:justify-start px-2 xl:px-4" > - {t("sidebar.help")} + + {t("sidebar.help")} + diff --git a/enjoy/src/renderer/context/app-settings-provider.tsx b/enjoy/src/renderer/context/app-settings-provider.tsx index 97379540..1b40ff3e 100644 --- a/enjoy/src/renderer/context/app-settings-provider.tsx +++ b/enjoy/src/renderer/context/app-settings-provider.tsx @@ -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; + cable?: Consumer; ahoy?: typeof ahoy; }; @@ -43,6 +45,7 @@ export const AppSettingsProvider = ({ const [version, setVersion] = useState(""); const [apiUrl, setApiUrl] = useState(WEB_API_URL); const [webApi, setWebApi] = useState(null); + const [cable, setCable] = useState(); const [user, setUser] = useState(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 ( {children} diff --git a/enjoy/src/types/enjoy-app.d.ts b/enjoy/src/types/enjoy-app.d.ts index bc79b5d7..be9e66ca 100644 --- a/enjoy/src/types/enjoy-app.d.ts +++ b/enjoy/src/types/enjoy-app.d.ts @@ -6,6 +6,7 @@ type EnjoyAppType = { reload: () => Promise; isPackaged: () => Promise; apiUrl: () => Promise; + wsUrl: () => Promise; quit: () => Promise; openDevTools: () => Promise; createIssue: (title: string, body: string) => Promise; diff --git a/yarn.lock b/yarn.lock index a29a0bf1..23489ea6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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