{ "private": true, "name": "smartsub", "description": "视频转字幕,字幕翻译软件, 支持多种转写引擎 whisper.cpp, faster-whisper, FunASR, Qwen3-ASR, FireRedASR, NVIDIA Parakeet, Whisper CLI, 多种翻译服务, 支持硬件加速", "version": "3.11.0", "author": "buxuku ", "main": "app/background.js", "scripts": { "prepare": "husky", "predev": "node scripts/ensure-native.mjs", "dev": "nextron", "dev:cuda-sim": "DEV_SIMULATE_CUDA=true DEV_SIMULATE_PLATFORM=win32 nextron", "dev:cuda-sim:toolkit": "DEV_SIMULATE_CUDA=true DEV_SIMULATE_PLATFORM=win32 DEV_SIMULATE_HAS_TOOLKIT=true nextron", "dev:cuda-sim:cuda13": "DEV_SIMULATE_CUDA=true DEV_SIMULATE_PLATFORM=win32 DEV_SIMULATE_GPU_CUDA_VERSION=13.0 nextron", "build": "nextron build --no-pack && node scripts/build-automation.mjs", "build:local": "npm run build && electron-builder", "postinstall": "electron-builder install-app-deps && node scripts/ensure-native.mjs", "format": "prettier --write .", "check:i18n": "node scripts/check-i18n.mjs", "check:jassub-guard": "node scripts/check-jassub-worker-guard.mjs", "test:launchpad-import": "node scripts/test-launchpad-import.cjs", "test:pro-baseline": "node scripts/test-pro-baseline.mjs", "test:proofread-reliability": "tsx --tsconfig renderer/tsconfig.json scripts/test-proofread-reliability.tsx", "test:proofread-load": "tsx scripts/test-proofread-load.ts", "test:proofread-cue-timing": "node scripts/test-proofread-cue-timing.cjs", "test:proofread-storage": "node scripts/test-proofread-storage.cjs", "test:proofread-waveform": "tsx scripts/test-proofread-waveform.ts", "test:inline-ai": "tsx --tsconfig renderer/tsconfig.json scripts/test-inline-ai.tsx && node scripts/test-inline-ai-backend.cjs", "test:context-glossary": "tsx --tsconfig renderer/tsconfig.json scripts/test-context-glossary.tsx && node scripts/test-context-glossary-backend.cjs", "test:e2e:context-glossary": "node scripts/e2e/proofread-context-glossary.mjs", "test:e2e:inline-ai": "node scripts/e2e/proofread-inline-ai.mjs", "test:e2e:waveform": "node scripts/e2e/proofread-waveform.mjs", "test:e2e:proofread-keyboard": "node scripts/e2e/proofread-keyboard-performance.mjs", "test:compositor-trace": "node --test scripts/e2e/compositor-trace.test.mjs", "test:e2e:download-live": "node scripts/e2e/download-live.mjs", "test:e2e:proofread-load": "node scripts/e2e/proofread-load-recovery.mjs", "test:e2e:proofread-preview": "node scripts/e2e/proofread-preview-tracks.mjs", "test:e2e:proofread-batch-load": "node scripts/e2e/proofread-batch-load.mjs", "test:e2e:settings": "node scripts/e2e/settings-reliability.mjs", "test:e2e:provider-persistence": "node scripts/e2e/provider-persistence.mjs", "test:e2e:task-config": "node scripts/e2e/task-config-load.mjs", "test:e2e:engine-settings": "node scripts/e2e/engine-settings.mjs", "test:e2e:local-preview": "node scripts/e2e/dubbing-local-preview.mjs", "test:e2e:mimo-voice-library": "node scripts/e2e/dubbing-voice-library.mjs --mimo", "test:e2e:ergonomics": "node scripts/e2e/ergonomics.mjs", "test:navigation-save": "tsx scripts/test-navigation-save.ts", "test:work-item-durability": "node scripts/test-work-item-durability.cjs", "test:provider-health": "tsx scripts/test-provider-health.ts", "test:task-runs": "node --import tsx --test scripts/task-runs/*.test.ts", "test:task-draft": "tsx --tsconfig renderer/tsconfig.json scripts/test-unified-task-draft.ts", "test:task-project": "tsx --tsconfig renderer/tsconfig.json scripts/test-task-project-persistence.tsx", "test:e2e:task-project": "node scripts/e2e/task-project-persistence.mjs", "test:e2e:task-defaults": "node scripts/e2e/task-defaults.mjs", "test:e2e:embedded-subtitle-prompt": "node scripts/e2e/embedded-subtitle-prompt.mjs", "test:e2e:timeline": "node scripts/e2e/long-timeline.mjs", "test:task-readiness": "tsx --tsconfig renderer/tsconfig.json scripts/test-task-readiness.ts", "test:task-submission": "node scripts/test-task-submission.cjs && tsx --tsconfig renderer/tsconfig.json scripts/test-task-submission-ui.tsx", "test:task-defaults": "node scripts/test-task-defaults.cjs", "test:translate-content": "node scripts/test-translate-content.cjs", "test:scenario-presets": "tsx --tsconfig renderer/tsconfig.json scripts/test-scenario-presets.ts && node scripts/test-scenario-adapters.cjs && node scripts/test-scenario-language.cjs", "test:subtitle-output": "tsc types/subtitleOutput.ts main/helpers/subtitleDeliverables.ts --outDir node_modules/.cache/subtitle-output-tests --module commonjs --moduleResolution node --target es2020 --esModuleInterop --skipLibCheck && node scripts/test-subtitle-output.cjs && node scripts/test-subtitle-output-ui.cjs", "sherpa:fetch": "node scripts/fetch-sherpa-native.mjs", "addon:fetch": "node scripts/fetch-whisper-addon.mjs", "native:fetch": "node scripts/fetch-sherpa-native.mjs && node scripts/fetch-whisper-addon.mjs", "size:check": "node scripts/check-bundle-size.mjs", "test:release-checksum": "node --test scripts/test-refresh-update-checksum.mjs", "test:task-activity": "node scripts/test-task-activity.cjs && node scripts/test-translation-activity.cjs && jest --runInBand renderer/components/__tests__/TaskActivity.test.tsx", "test:e2e:task-activity": "node scripts/e2e/task-activity.mjs", "test:e2e:task-list-layout": "node scripts/e2e/task-list-layout.mjs", "test:engines": "tsc scripts/test-engine-units.ts --outDir node_modules/.cache/engine-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/engine-tests/scripts/test-engine-units.js && node scripts/test-sherpa-worker.cjs && node scripts/test-sherpa-runtime-failures.cjs && node scripts/test-wav-io.cjs && node scripts/test-qwen-scaffold.cjs", "test:gpu-enumeration": "tsx scripts/gpu/test-gpu-enumeration.ts && tsx scripts/gpu/test-single-flight.ts && tsx scripts/gpu/test-cuda-wiring.ts && tsx scripts/gpu/test-addon-candidates.ts && tsx scripts/test-python-engine-stdin.ts", "test:gpu-probe": "tsx scripts/gpu/probe-gpu.ts", "test:audio-cache": "node scripts/test-audio-cache.cjs", "test:embedded-subtitle-scan": "node scripts/test-embedded-subtitle-scan.cjs", "test:speech-review": "python3 -m unittest discover -s scripts/asr-review -p 'test_*.py' && node scripts/asr-review/test-adapter.cjs", "test:missed-speech": "tsc scripts/test-missed-speech-diagnostics.ts --outDir node_modules/.cache/missed-speech-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/missed-speech-tests/scripts/test-missed-speech-diagnostics.js && node scripts/test-missed-speech-data.cjs", "test:ass-builder": "tsc scripts/test-ass-builder.ts --outDir node_modules/.cache/ass-builder-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/ass-builder-tests/scripts/test-ass-builder.js", "test:compose-canvas": "tsx scripts/test-compose-canvas.ts", "test:subtitle-appearance": "tsx scripts/test-subtitle-appearance.ts", "test:e2e:compose-fonts": "node scripts/e2e/compose-fonts.mjs", "test:e2e:compose-font-menu": "node scripts/e2e/compose-font-menu.mjs", "test:e2e:embedded-fonts": "node scripts/e2e/compose-embedded-fonts.mjs", "test:e2e:compose-canvas": "node scripts/e2e/compose-canvas.mjs", "test:e2e:compose-sync-canvas": "node scripts/e2e/compose-sync-canvas.mjs", "test:e2e:compose-document": "node scripts/e2e/compose-document.mjs", "test:e2e:compose-multiwindow": "node scripts/e2e/compose-multiwindow.mjs", "test:e2e:compose-reconnect": "node scripts/e2e/compose-reconnect.mjs", "test:compose": "tsc scripts/compose/test-compose-builder.ts --outDir node_modules/.cache/compose-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/compose-tests/scripts/compose/test-compose-builder.js", "test:compose-output": "tsx scripts/compose/test-compose-output.ts && tsx scripts/compose/test-publication-recovery.ts && tsx scripts/compose/test-compose-container.ts && node scripts/compose/test-compose-runner.cjs", "test:ffmpeg-compatibility": "node scripts/compose/test-stream-compatibility.cjs && node scripts/toolbox/test-ffmpeg-compatibility.cjs && node scripts/test-audio-stream-selection.cjs", "test:compose-presets": "node scripts/compose/test-compose-presets.cjs", "test:compose-queue": "node scripts/compose/test-compose-queue.cjs", "test:embedded-fonts": "tsx scripts/compose/test-font-fallback.ts && tsx scripts/compose/test-embedded-fonts.ts && node scripts/compose/test-installed-fonts.cjs", "test:e2e:compose-output": "node scripts/e2e/compose-output.mjs", "test:e2e:compose-retry": "node scripts/e2e/compose-retry.mjs", "test:e2e:compose-ass": "node scripts/e2e/compose-ass.mjs", "test:e2e:compose-collisions": "node scripts/e2e/compose-collisions.mjs", "test:dubbing-speakers": "node scripts/dubbing/test-speaker-settings.cjs", "test:dubbing-ownership": "tsx scripts/dubbing/test-session-ownership.ts && tsx scripts/dubbing/test-session-deletion.ts", "test:dubbing-config-draft": "tsx scripts/dubbing/test-config-draft.ts", "test:dubbing-operations": "tsx scripts/dubbing/test-operation-store.ts", "test:dubbing-auto-fit": "node scripts/dubbing/test-auto-fit.cjs", "test:e2e:dubbing-recovery": "node scripts/e2e/dubbing-pipeline-recovery.mjs", "test:e2e:dubbing-auto-fit": "node scripts/e2e/dubbing-auto-fit.mjs", "test:voice-preview": "tsx scripts/dubbing/test-voice-preview.ts && node scripts/dubbing/test-edge-preview.cjs && tsx scripts/dubbing/test-volc-preview.ts", "test:e2e:voice-library": "node scripts/e2e/dubbing-voice-library.mjs", "test:e2e:volc-voice-library": "node scripts/e2e/dubbing-voice-library.mjs --volc", "test:e2e:dubbing-cast": "node scripts/e2e/dubbing-cast.mjs", "test:e2e:dubbing-config": "node scripts/e2e/dubbing-config.mjs", "test:e2e:dubbing-cue-drafts": "node scripts/e2e/dubbing-cue-drafts.mjs", "test:e2e:dubbing-multiwindow": "node scripts/e2e/dubbing-multiwindow.mjs", "test:e2e:dubbing-deletion": "node scripts/e2e/dubbing-deletion.mjs", "test:e2e:dubbing-operations": "node scripts/e2e/dubbing-operation-recovery.mjs", "smoke:compose": "tsc scripts/compose/smoke-compose.ts --outDir node_modules/.cache/compose-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/compose-tests/scripts/compose/smoke-compose.js", "test:pipeline": "tsc scripts/pipeline/test-pipeline-units.ts --outDir node_modules/.cache/pipeline-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/pipeline-tests/scripts/pipeline/test-pipeline-units.js", "test:recipes": "tsc scripts/recipes/test-recipe-units.ts --outDir node_modules/.cache/recipe-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/recipe-tests/scripts/recipes/test-recipe-units.js", "test:toolbox": "npx tsx scripts/toolbox/test-toolbox-units.ts", "test:toolbox-queue": "tsx scripts/toolbox/test-queue.ts", "test:e2e:toolbox": "node scripts/e2e/toolbox-batch.mjs", "test:e2e:proofread": "node scripts/e2e/proofread-reliability.mjs", "test:e2e:batch-save": "node scripts/e2e/proofread-batch-save.mjs", "test:e2e:storage": "node scripts/e2e/storage-durability.mjs", "test:e2e:health": "node scripts/e2e/provider-health.mjs", "test:e2e:wizard": "node scripts/e2e/wizard-recovery.mjs", "test:e2e:presets": "node scripts/e2e/scenario-presets.mjs", "test:e2e:scenario-language": "node scripts/e2e/scenario-language.mjs", "test:e2e:speakers": "node scripts/e2e/speaker-pipeline.mjs", "test:e2e:launchpad": "node scripts/e2e/launchpad-install.mjs", "test:e2e:readiness": "node scripts/e2e/task-readiness.mjs", "test:e2e:gates": "node scripts/e2e/pipeline-gates.mjs", "test:e2e:recipes": "node scripts/e2e/builtin-recipes.mjs", "test:translate-parser": "tsc scripts/test-ai-response-parser.ts --outDir node_modules/.cache/translate-parser-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/translate-parser-tests/scripts/test-ai-response-parser.js", "test:alignment-e2e": "tsc scripts/test-alignment-e2e.ts --outDir node_modules/.cache/alignment-e2e-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/alignment-e2e-tests/scripts/test-alignment-e2e.js", "test:untranslated-flow": "node scripts/test-ai-untranslated-flow.cjs", "test:translation-proxy": "node scripts/test-translation-proxy.cjs", "test:provider-test-flow": "node scripts/test-provider-test-flow.cjs", "test:structured-output": "tsc scripts/test-structured-output-fallback.ts --outDir node_modules/.cache/so-fallback-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/so-fallback-tests/scripts/test-structured-output-fallback.js", "test:thinking-control": "tsc scripts/test-thinking-control.ts --outDir node_modules/.cache/thinking-control-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/thinking-control-tests/scripts/test-thinking-control.js", "test:custom-parameters": "tsc renderer/lib/parameterValueUtils.ts main/helpers/parameterProcessor.ts --outDir node_modules/.cache/custom-parameter-tests --module commonjs --moduleResolution node --target es2020 --esModuleInterop --skipLibCheck && node scripts/test-custom-parameters.cjs", "test:renderer": "jest --runInBand", "test:parameter-persistence": "node scripts/test-parameter-persistence.cjs", "test:crash": "tsx scripts/crash/test-crash-units.ts", "test:crash:probe-cpu": "tsx scripts/crash/probe-cpu.ts", "test:crash:smoke": "node scripts/crash/smoke.mjs", "test:e2e:parameters": "node scripts/e2e/parameter-persistence.mjs", "typecheck": "tsc --noEmit -p renderer/tsconfig.json && tsc --noEmit -p main/tsconfig.json && tsc --noEmit -p automation/tsconfig.json && tsc --noEmit -p scripts/crash/tsconfig.json", "test:storage-paths": "tsc scripts/test-storage-paths.ts --outDir node_modules/.cache/storage-paths-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/storage-paths-tests/scripts/test-storage-paths.js", "test:ct2-cache-layout": "node scripts/test-ct2-cache-layout.cjs", "test:video-download": "tsc scripts/test-video-download.ts --outDir node_modules/.cache/video-download-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/video-download-tests/scripts/test-video-download.js", "test:download-pipeline": "node scripts/test-download-pipeline.cjs && node scripts/test-download-adapter.cjs", "test:e2e:download-pipeline": "node scripts/e2e/download-pipeline.mjs", "test:glossary": "tsc scripts/test-glossary.ts --outDir node_modules/.cache/glossary-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/glossary-tests/scripts/test-glossary.js", "test:summary": "tsc scripts/test-summary.ts --outDir node_modules/.cache/summary-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/summary-tests/scripts/test-summary.js", "test:custom-languages": "tsc scripts/test-custom-languages.ts --outDir node_modules/.cache/custom-language-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck && node node_modules/.cache/custom-language-tests/scripts/test-custom-languages.js", "test:refine": "tsc scripts/test-refine-units.ts --outDir node_modules/.cache/refine-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/refine-tests/scripts/test-refine-units.js && npm run test:refine-validation && node scripts/test-ai-segmentation-runner.cjs", "test:refine-validation": "tsc scripts/test-refine-validation.ts --outDir node_modules/.cache/refine-val-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/refine-val-tests/scripts/test-refine-validation.js", "test:speaker-diarization": "node scripts/test-speaker-diarization-config.cjs && node scripts/test-speaker-stage.cjs && tsc scripts/test-speaker-diarization.ts --outDir node_modules/.cache/speaker-diarization-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck && node node_modules/.cache/speaker-diarization-tests/scripts/test-speaker-diarization.js", "test:sherpa-json": "node scripts/test-sherpa-json-result.cjs", "test:proofread-speakers": "tsc scripts/test-proofread-speakers.ts --outDir node_modules/.cache/proofread-speaker-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck && node node_modules/.cache/proofread-speaker-tests/scripts/test-proofread-speakers.js", "test:proofread-data": "tsc scripts/test-proofread-data.ts --outDir node_modules/.cache/proofread-data-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/proofread-data-tests/scripts/test-proofread-data.js", "test:manuscript": "tsc scripts/test-manuscript-matching.ts --outDir node_modules/.cache/manuscript-tests --module commonjs --moduleResolution node --target es2022 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/manuscript-tests/scripts/test-manuscript-matching.js", "longgap:gen": "tsc scripts/longgap/gen-audio.ts --outDir node_modules/.cache/longgap --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/longgap/scripts/longgap/gen-audio.js", "test:longgap": "tsc scripts/longgap/run.ts --outDir node_modules/.cache/longgap --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/longgap/scripts/longgap/run.js", "test:longgap:outcomes": "tsc scripts/longgap/run-outcomes.ts --outDir node_modules/.cache/longgap --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/longgap/scripts/longgap/run-outcomes.js", "sync:addon": "bash scripts/sync-gitcode.sh --target addon", "sync:engine": "bash scripts/sync-gitcode.sh --target engine", "sync:downloaders": "bash scripts/sync-gitcode.sh --target downloaders", "test:translation-cancel": "tsc scripts/test-translation-cancel.ts --outDir node_modules/.cache/translation-cancel-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/translation-cancel-tests/scripts/test-translation-cancel.js", "test:provider-fallback": "tsc scripts/test-provider-fallback.ts --outDir node_modules/.cache/provider-fallback-tests --module commonjs --moduleResolution node --target es2020 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/provider-fallback-tests/scripts/test-provider-fallback.js && node scripts/test-provider-fallback-flow.cjs", "test:free-translators": "node scripts/test-free-translators.cjs && node scripts/test-youdao-free.cjs && node scripts/test-google-free.cjs", "test:qwen-mt": "tsc scripts/test-qwen-mt.ts --outDir node_modules/.cache/qwen-mt-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/qwen-mt-tests/scripts/test-qwen-mt.js", "poc:dubbing-audio": "tsc scripts/dubbing/audio-poc.ts --outDir node_modules/.cache/dubbing-poc-build --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/dubbing-poc-build/scripts/dubbing/audio-poc.js", "poc:dubbing-e2e": "tsc scripts/dubbing/e2e-poc.ts --outDir node_modules/.cache/dubbing-poc-build --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/dubbing-poc-build/scripts/dubbing/e2e-poc.js", "test:dubbing": "tsc scripts/dubbing/test-dubbing-units.ts --outDir node_modules/.cache/dubbing-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/dubbing-tests/scripts/dubbing/test-dubbing-units.js && node scripts/dubbing/test-language-flow.cjs", "test:mimo-audio": "tsc scripts/test-xiaomi-mimo-audio.ts --outDir node_modules/.cache/mimo-audio-tests --module commonjs --moduleResolution node --target es2022 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/mimo-audio-tests/scripts/test-xiaomi-mimo-audio.js", "poc:zipvoice": "node scripts/voice-clone/zipvoice-poc.mjs", "smoke:voice-clone": "tsc scripts/voice-clone/pipeline-smoke.ts --outDir node_modules/.cache/voice-clone-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/voice-clone-tests/scripts/voice-clone/pipeline-smoke.js", "smoke:utility": "electron scripts/voice-clone/utility-smoke-main.js", "test:voice-clone": "tsc scripts/voice-clone/test-voice-clone-units.ts --outDir node_modules/.cache/voice-clone-tests --module commonjs --moduleResolution node --target es2019 --esModuleInterop --skipLibCheck --resolveJsonModule && node node_modules/.cache/voice-clone-tests/scripts/voice-clone/test-voice-clone-units.js", "test:quality-review": "tsx --tsconfig renderer/tsconfig.json scripts/test-quality-review.ts && tsx --tsconfig renderer/tsconfig.json scripts/test-quality-review-state.tsx && tsx --tsconfig renderer/tsconfig.json scripts/test-quality-review-controller.tsx", "test:e2e:quality-review": "node scripts/e2e/quality-review.mjs", "test:e2e:quality-media": "node scripts/e2e/quality-review-media.mjs", "test:e2e:quality-performance": "node scripts/e2e/quality-review-performance.mjs", "test:e2e:quality-translation": "node scripts/e2e/quality-review-translation.mjs", "build:automation": "node scripts/build-automation.mjs", "smartsub": "node scripts/smartsub.mjs", "build:automation:dev": "node scripts/build-automation.mjs && node scripts/build-automation-backend.cjs", "test:automation:ai": "node scripts/automation-ai-acceptance.mjs", "test:automation": "npm run test:automation:regressions && node scripts/test-automation.mjs", "test:automation:desktop": "node scripts/test-automation-desktop.mjs", "docs:automation": "tsx scripts/generate-automation-reference.ts", "test:automation:regressions": "node scripts/test-automation-regressions.cjs && node scripts/test-mcp-config.cjs", "test:assistant": "tsx scripts/test-assistant.ts", "test:e2e:assistant": "node scripts/e2e/assistant.mjs", "test:stage-artifacts": "node --import tsx --test scripts/stage-artifacts/*.test.ts", "test:stage-cache": "node --import tsx --test scripts/stage-cache/*.test.ts", "test:e2e:task-runs": "node scripts/e2e/task-runs.mjs" }, "dependencies": { "@alicloud/alimt20181012": "^1.3.0", "@alicloud/credentials": "^2.4.3", "@alicloud/openapi-client": "^0.4.14", "@alicloud/tea-typescript": "^1.8.0", "@alicloud/tea-util": "^1.4.10", "@hookform/resolvers": "^3.4.0", "@modelcontextprotocol/sdk": "^1.30.0", "@radix-ui/react-alert-dialog": "^1.0.5", "@radix-ui/react-collapsible": "^1.1.11", "@radix-ui/react-dialog": "^1.1.6", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-hover-card": "^1.0.7", "@radix-ui/react-label": "^2.0.2", "@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-progress": "^1.1.6", "@radix-ui/react-scroll-area": "^1.0.5", "@radix-ui/react-select": "^2.0.0", "@radix-ui/react-separator": "^1.1.0", "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.0.2", "@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-tabs": "^1.1.4", "@radix-ui/react-tooltip": "^1.0.7", "@tanstack/react-virtual": "^3.14.2", "@volcengine/openapi": "^1.18.3", "axios": "^1.6.8", "class-variance-authority": "^0.7.0", "clsx": "^2.1.1", "cmdk": "^1.1.1", "crypto": "^1.0.1", "decompress": "^4.2.1", "diff": "8.0.2", "electron-serve": "^1.3.0", "electron-store": "^8.2.0", "electron-updater": "^6.6.2", "ffmpeg-static": "^5.2.0", "fluent-ffmpeg": "^2.1.2", "fontkit": "2.0.4", "fs-extra": "^11.3.0", "http-proxy-agent": "^9.1.0", "https-proxy-agent": "^9.1.0", "i18next": "^23.15.2", "iconv-lite": "^0.6.3", "isomorphic-git": "^1.25.10", "jassub": "^2.5.6", "jsonrepair": "^3.12.0", "lodash": "^4.17.21", "lucide-react": "^0.378.0", "msedge-tts": "^2.0.6", "next-i18next": "^15.3.1", "next-themes": "^0.3.0", "node-addon-api": "^8.3.1", "node-loader": "^2.1.0", "openai": "^4.0.0", "opencc-js": "^1.3.1", "react-hook-form": "^7.51.4", "react-i18next": "^15.0.2", "react-markdown": "^10.1.0", "react-player": "^2.16.0", "really-relaxed-json": "^0.3.2", "regenerator-runtime": "^0.14.1", "remark-gfm": "^4.0.1", "sonner": "^1.4.41", "srt-webvtt": "^2.0.0", "systeminformation": "^5.27.7", "tailwind-merge": "^2.3.0", "tailwindcss-animate": "^1.0.7", "tiny-pinyin": "^1.3.2", "tinyld": "1.3.4", "uuid": "^11.1.0", "vaul": "^0.9.1", "wavesurfer.js": "7.12.8", "yazl": "^3.3.1", "zod": "^3.25.76", "zod-to-json-schema": "^3.25.2" }, "devDependencies": { "@ffmpeg-installer/ffmpeg": "^1.1.0", "@playwright/test": "^1.63.0", "@testing-library/dom": "^10.4.2", "@testing-library/jest-dom": "^6.10.0", "@testing-library/react": "^16.3.3", "@types/fs-extra": "^11.0.4", "@types/jest": "^29.5.14", "@types/node": "^20.11.16", "@types/plist": "^3.0.5", "@types/react": "^18.2.52", "@types/react-test-renderer": "^18.3.1", "@types/uuid": "^10.0.0", "@types/yazl": "^3.3.1", "autoprefixer": "^10.4.19", "dotenv": "^17.2.3", "electron": "^30.1.0", "electron-builder": "^24.13.3", "esbuild": "^0.28.2", "husky": "^9.1.7", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "lint-staged": "^15.5.2", "next": "^14.2.4", "nextron": "^9.1.0", "postcss": "^8.4.38", "prettier": "^3.5.3", "react": "^18.2.0", "react-dom": "^18.2.0", "react-test-renderer": "^18.3.1", "tailwindcss": "^3.4.3", "tsx": "^4.23.13", "typescript": "^5.4.5" }, "lint-staged": { "*.{js,jsx,ts,tsx,css,md,json,yml,yaml}": [ "prettier --write" ] } }