Upgrade dep (#1116)
* update renderer spec * fix renderer.spec * upgrade yarn * upgrade electron & echogarden * upgrade langchain * upgrade deps * remove sentry * remove unused deps
This commit is contained in:
5
.github/workflows/test-enjoy-app.yml
vendored
5
.github/workflows/test-enjoy-app.yml
vendored
@@ -59,15 +59,16 @@ jobs:
|
||||
|
||||
- name: Run renderer tests with xvfb-run on Ubuntu
|
||||
if: contains(matrix.os, 'ubuntu')
|
||||
continue-on-error: true
|
||||
run: |
|
||||
xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn enjoy:test:renderer
|
||||
|
||||
- name: Run renderer tests on macOS or Windows
|
||||
if: contains(matrix.os, 'macos') || contains(matrix.os, 'windows')
|
||||
continue-on-error: true
|
||||
run: yarn enjoy:test:renderer
|
||||
|
||||
- name: Make App
|
||||
run: yarn enjoy:make
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -4,4 +4,4 @@ nmHoistingLimits: workspaces
|
||||
|
||||
nodeLinker: node-modules
|
||||
|
||||
yarnPath: .yarn/releases/yarn-4.4.1.cjs
|
||||
yarnPath: .yarn/releases/yarn-4.5.0.cjs
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
"markdown-it-sup": "^2.0.0",
|
||||
"mermaid": "^11.3.0",
|
||||
"sass": "^1.79.4",
|
||||
"vitepress": "^1.3.4",
|
||||
"vitepress": "^1.4.0",
|
||||
"vitepress-plugin-mermaid": "^2.0.17",
|
||||
"vue": "^3.5.11"
|
||||
},
|
||||
|
||||
@@ -76,9 +76,9 @@ test.describe("with login", async () => {
|
||||
});
|
||||
});
|
||||
|
||||
await page.evaluate(() => {
|
||||
return (window as any).__ENJOY_APP__.app.reload();
|
||||
});
|
||||
// await page.evaluate(() => {
|
||||
// return (window as any).__ENJOY_APP__.app.reload();
|
||||
// });
|
||||
});
|
||||
|
||||
test("should enter homepage after login", async () => {
|
||||
@@ -91,125 +91,4 @@ test.describe("with login", async () => {
|
||||
expect(await page.getByTestId("layout-home").isVisible()).toBeTruthy();
|
||||
expect(await page.getByTestId("sidebar").isVisible()).toBeTruthy();
|
||||
});
|
||||
|
||||
test.describe("with conversation", async () => {
|
||||
test.beforeAll(async () => {
|
||||
const file = fs.readFileSync(
|
||||
path.join(process.cwd(), "samples", "speech.mp3")
|
||||
);
|
||||
|
||||
page = await electronApp.firstWindow();
|
||||
|
||||
await page.route("**/api/ai/audio/speech", (route) => {
|
||||
route.fulfill({
|
||||
body: file,
|
||||
});
|
||||
});
|
||||
await page.route("**/api/ai/chat/completions", (route) => {
|
||||
route.fulfill({
|
||||
json: {
|
||||
id: "1",
|
||||
choices: [
|
||||
{
|
||||
index: 1,
|
||||
message: {
|
||||
role: "assistant",
|
||||
content: "I'm fine, thank you.",
|
||||
},
|
||||
finish_reason: "stop",
|
||||
},
|
||||
],
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
* steps:
|
||||
* 1. create a tts conversation
|
||||
* 2. submit a message to the conversation
|
||||
* 3. the speech should auto create
|
||||
*/
|
||||
test("tts conversation", async () => {
|
||||
// navigate to the conversations page
|
||||
await page.getByTestId("sidebar-conversations").click();
|
||||
|
||||
// trigger new conversation modal
|
||||
await page.getByTestId("conversation-new-button").click();
|
||||
|
||||
// create a tts conversation
|
||||
await page.click("[data-testid=conversation-preset-tts]");
|
||||
await page.getByTestId("conversation-form").waitFor();
|
||||
await page.click("[data-testid=conversation-form-submit]");
|
||||
|
||||
// wait for the conversation to be created
|
||||
await page.getByTestId("conversation-page").waitFor();
|
||||
|
||||
// submit a message to the conversation
|
||||
await page.getByTestId("conversation-page-input").fill("How are you?");
|
||||
await page.getByTestId("conversation-page-submit").click();
|
||||
await page.locator(".ai-message").waitFor();
|
||||
const player = page
|
||||
.locator(".ai-message")
|
||||
.getByTestId("wavesurfer-container");
|
||||
await player.waitFor();
|
||||
|
||||
expect(await player.isVisible()).toBeTruthy();
|
||||
});
|
||||
|
||||
/*
|
||||
* steps:
|
||||
* 1. create a gpt conversation
|
||||
* 2. submit a message to the conversation, AI should reply
|
||||
* 3. create a speech from the AI message
|
||||
* 4. add the speech to the library
|
||||
* 5. audio waveform player should be visible and transcription should be generated
|
||||
*/
|
||||
test("gpt conversation", async () => {
|
||||
// navigate to the conversations page
|
||||
await page.getByTestId("sidebar-conversations").click();
|
||||
|
||||
// trigger new conversation modal
|
||||
await page.getByTestId("conversation-new-button").click();
|
||||
|
||||
// create a gpt conversation
|
||||
await page.getByTestId("conversation-preset-english-coach").click();
|
||||
await page.getByTestId("conversation-form").waitFor();
|
||||
await page.click("[data-testid=conversation-form-submit]");
|
||||
|
||||
// wait for the conversation to be created
|
||||
await page.getByTestId("conversation-page").waitFor();
|
||||
|
||||
// submit a message to the conversation
|
||||
await page.getByTestId("conversation-page-input").fill("How are you?");
|
||||
await page.getByTestId("conversation-page-submit").click();
|
||||
await page.locator(".ai-message").waitFor();
|
||||
const message = page.locator(".ai-message").first();
|
||||
expect(await message.isVisible()).toBeTruthy();
|
||||
|
||||
// create a speech
|
||||
await page.getByTestId("message-create-speech").click();
|
||||
|
||||
// wait for the speech player
|
||||
const player = page
|
||||
.locator(".ai-message")
|
||||
.getByTestId("wavesurfer-container");
|
||||
await player.waitFor({ timeout: 60000 });
|
||||
expect(await player.isVisible()).toBeTruthy();
|
||||
|
||||
// add to library
|
||||
await page.getByTestId("message-start-shadow").click();
|
||||
await page.getByTestId("transcribe-continue-button").click();
|
||||
await page.getByTestId("audio-player").waitFor();
|
||||
await page
|
||||
.getByTestId("media-player-container")
|
||||
.waitFor({ timeout: 60000 });
|
||||
await page
|
||||
.getByTestId("media-transcription-result")
|
||||
.waitFor({ timeout: 60000 });
|
||||
expect(
|
||||
await page.getByTestId("media-transcription-result").isVisible()
|
||||
).toBeTruthy();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
"@electron-forge/plugin-vite": "^7.5.0",
|
||||
"@electron-forge/publisher-github": "^7.5.0",
|
||||
"@electron/fuses": "^1.8.0",
|
||||
"@playwright/test": "^1.47.2",
|
||||
"@playwright/test": "^1.48.0",
|
||||
"@tailwindcss/typography": "^0.5.15",
|
||||
"@types/ahoy.js": "^0.4.2",
|
||||
"@types/autosize": "^4.0.3",
|
||||
@@ -53,7 +53,7 @@
|
||||
"@types/lodash": "^4.17.10",
|
||||
"@types/mark.js": "^8.11.12",
|
||||
"@types/mustache": "^4.2.5",
|
||||
"@types/node": "^22.7.4",
|
||||
"@types/node": "^22.7.5",
|
||||
"@types/prop-types": "^15.7.13",
|
||||
"@types/rails__actioncable": "^6.1.11",
|
||||
"@types/react": "^18.3.11",
|
||||
@@ -62,11 +62,11 @@
|
||||
"@types/unzipper": "^0.10.10",
|
||||
"@types/validator": "^13.12.2",
|
||||
"@types/wavesurfer.js": "^6.0.12",
|
||||
"@typescript-eslint/eslint-plugin": "^8.8.0",
|
||||
"@typescript-eslint/parser": "^8.8.0",
|
||||
"@typescript-eslint/eslint-plugin": "^8.8.1",
|
||||
"@typescript-eslint/parser": "^8.8.1",
|
||||
"@vitejs/plugin-react": "^4.3.2",
|
||||
"autoprefixer": "^10.4.20",
|
||||
"electron": "^32.1.2",
|
||||
"electron": "^32.2.0",
|
||||
"electron-devtools-installer": "^3.2.0",
|
||||
"electron-playwright-helpers": "^1.7.1",
|
||||
"eslint": "^9.12.0",
|
||||
@@ -82,9 +82,9 @@
|
||||
"tailwindcss-animate": "^1.0.7",
|
||||
"ts-node": "^10.9.2",
|
||||
"tslib": "^2.7.0",
|
||||
"typescript": "^5.6.2",
|
||||
"typescript": "^5.6.3",
|
||||
"vite": "^5.4.8",
|
||||
"vite-plugin-static-copy": "^1.0.6",
|
||||
"vite-plugin-static-copy": "^2.0.0",
|
||||
"zx": "^8.1.9"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -93,7 +93,7 @@
|
||||
"@electron-forge/publisher-s3": "^7.5.0",
|
||||
"@hookform/resolvers": "^3.9.0",
|
||||
"@langchain/community": "^0.3.4",
|
||||
"@langchain/core": "^0.3.7",
|
||||
"@langchain/core": "^0.3.8",
|
||||
"@langchain/ollama": "^0.1.0",
|
||||
"@mozilla/readability": "^0.5.0",
|
||||
"@radix-ui/react-accordion": "^1.2.1",
|
||||
@@ -121,9 +121,6 @@
|
||||
"@radix-ui/react-toggle": "^1.1.0",
|
||||
"@radix-ui/react-tooltip": "^1.1.3",
|
||||
"@rails/actioncable": "7.2.100",
|
||||
"@ricky0123/vad-react": "^0.0.24",
|
||||
"@ricky0123/vad-web": "^0.0.18",
|
||||
"@sentry/electron": "^5.4.0",
|
||||
"@uidotdev/usehooks": "^2.4.1",
|
||||
"@vidstack/react": "^1.12.11",
|
||||
"ahoy.js": "^0.4.4",
|
||||
@@ -143,7 +140,7 @@
|
||||
"dayjs": "^1.11.13",
|
||||
"decamelize": "^6.0.0",
|
||||
"decamelize-keys": "^2.0.1",
|
||||
"echogarden": "^1.5.0",
|
||||
"echogarden": "^1.7.0",
|
||||
"electron-context-menu": "^4.0.4",
|
||||
"electron-log": "^5.2.0",
|
||||
"electron-settings": "^4.0.4",
|
||||
@@ -159,12 +156,12 @@
|
||||
"langchain": "^0.3.2",
|
||||
"lodash": "^4.17.21",
|
||||
"lru-cache": "^11.0.1",
|
||||
"lucide-react": "^0.447.0",
|
||||
"lucide-react": "^0.451.0",
|
||||
"mark.js": "^8.11.1",
|
||||
"microsoft-cognitiveservices-speech-sdk": "^1.40.0",
|
||||
"mustache": "^4.2.0",
|
||||
"next-themes": "^0.3.0",
|
||||
"openai": "^4.67.1",
|
||||
"openai": "^4.67.3",
|
||||
"pitchfinder": "^2.3.2",
|
||||
"postcss": "^8.4.47",
|
||||
"proxy-agent": "^6.4.0",
|
||||
|
||||
@@ -27,9 +27,6 @@ export const DOWNLOAD_URL = "https://1000h.org/enjoy-app/download.html";
|
||||
export const REPO_URL =
|
||||
"https://github.com/zuodaotech/everyone-can-use-english";
|
||||
|
||||
export const SENTRY_DSN =
|
||||
"https://d51056d7af7d14eae446c0c15b4f3d31@o1168905.ingest.us.sentry.io/4506969353289728";
|
||||
|
||||
export const MAGIC_TOKEN_REGEX =
|
||||
/\b(Mrs|Ms|Mr|Dr|Prof|St|[a-zA-Z]{1,2}|\d{1,2})\.\b/g;
|
||||
export const END_OF_SENTENCE_REGEX = /[^\.!,\?][\.!\?]/g;
|
||||
|
||||
@@ -7,18 +7,10 @@ import mainWindow from "@main/window";
|
||||
import ElectronSquirrelStartup from "electron-squirrel-startup";
|
||||
import contextMenu from "electron-context-menu";
|
||||
import { t } from "i18next";
|
||||
import * as Sentry from "@sentry/electron/main";
|
||||
import { SENTRY_DSN } from "@/constants";
|
||||
import { updateElectronApp, UpdateSourceType } from "update-electron-app";
|
||||
|
||||
const logger = log.scope("main");
|
||||
|
||||
if (app.isPackaged) {
|
||||
Sentry.init({
|
||||
dsn: SENTRY_DSN,
|
||||
});
|
||||
}
|
||||
|
||||
app.commandLine.appendSwitch("enable-features", "SharedArrayBuffer");
|
||||
|
||||
// config auto updater
|
||||
|
||||
@@ -4,8 +4,6 @@ import { Client } from "@/api";
|
||||
import i18n from "@renderer/i18n";
|
||||
import ahoy from "ahoy.js";
|
||||
import { type Consumer, createConsumer } from "@rails/actioncable";
|
||||
import * as Sentry from "@sentry/electron/renderer";
|
||||
import { SENTRY_DSN } from "@/constants";
|
||||
import { DbProviderContext } from "@renderer/context";
|
||||
import { UserSettingKeyEnum } from "@/types/enums";
|
||||
|
||||
@@ -75,16 +73,6 @@ export const AppSettingsProvider = ({
|
||||
);
|
||||
const db = useContext(DbProviderContext);
|
||||
|
||||
const initSentry = () => {
|
||||
EnjoyApp.app.isPackaged().then((isPackaged) => {
|
||||
if (isPackaged) {
|
||||
Sentry.init({
|
||||
dsn: SENTRY_DSN,
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
const fetchLanguages = async () => {
|
||||
const language = await EnjoyApp.userSettings.get(
|
||||
UserSettingKeyEnum.LANGUAGE
|
||||
@@ -240,7 +228,6 @@ export const AppSettingsProvider = ({
|
||||
if (db.state === "connected") {
|
||||
fetchLanguages();
|
||||
fetchVocabularyConfig();
|
||||
initSentry();
|
||||
fetchRecorderConfig();
|
||||
}
|
||||
}, [db.state]);
|
||||
|
||||
@@ -27,18 +27,6 @@ export default defineConfig((env) => {
|
||||
src: "assets/*",
|
||||
dest: "assets",
|
||||
},
|
||||
{
|
||||
src: "node_modules/@ricky0123/vad-web/dist/vad.worklet.bundle.min.js",
|
||||
dest: "./",
|
||||
},
|
||||
{
|
||||
src: "node_modules/@ricky0123/vad-web/dist/silero_vad.onnx",
|
||||
dest: "./",
|
||||
},
|
||||
{
|
||||
src: "node_modules/onnxruntime-web/dist/*.wasm",
|
||||
dest: "./",
|
||||
},
|
||||
],
|
||||
}),
|
||||
],
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
"docs:preview": "yarn workspace 1000-hours preview",
|
||||
"portal:generate": "yarn workspace 1000h-portal generate"
|
||||
},
|
||||
"packageManager": "yarn@4.4.1",
|
||||
"packageManager": "yarn@4.5.0",
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user