gitextract_plngy_re/ ├── .agents/ │ └── skills/ │ ├── orpc-contract-first/ │ │ └── SKILL.md │ └── release-skills/ │ └── SKILL.md ├── .claude/ │ └── CLAUDE.md ├── .cursor/ │ └── hooks.json ├── .dockerignore ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ └── feature_request.yml │ └── workflows/ │ ├── build.yml │ ├── ci.yml │ ├── docker-publish.yml │ ├── extension-build.yml │ ├── extension-publish.yml │ ├── release.yml │ ├── translator.yaml │ └── ytdlp-auto-release.yml ├── .gitignore ├── .husky/ │ └── pre-commit ├── .npmrc ├── .vscode/ │ ├── extensions.json │ └── settings.json ├── AGENTS.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── apps/ │ ├── api/ │ │ ├── Dockerfile │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── lib/ │ │ │ │ ├── database-migrate.ts │ │ │ │ ├── downloader.ts │ │ │ │ ├── history-record-mapper.ts │ │ │ │ ├── history-store.ts │ │ │ │ ├── rpc-router.ts │ │ │ │ ├── sse.ts │ │ │ │ └── web-settings-store.ts │ │ │ └── server.ts │ │ └── tsconfig.json │ ├── desktop/ │ │ ├── build/ │ │ │ ├── after-pack.cjs │ │ │ ├── entitlements.mac.plist │ │ │ └── icon.icns │ │ ├── changelogs/ │ │ │ ├── CHANGELOG.fr.md │ │ │ ├── CHANGELOG.md │ │ │ ├── CHANGELOG.ru.md │ │ │ └── CHANGELOG.zh.md │ │ ├── components.json │ │ ├── dev-app-update.yml │ │ ├── drizzle.config.ts │ │ ├── electron-builder.yml │ │ ├── electron.vite.config.ts │ │ ├── package.json │ │ ├── release-metadata.json │ │ ├── resources/ │ │ │ ├── .gitignore │ │ │ ├── README.md │ │ │ └── drizzle/ │ │ │ ├── 0000_swift_aaron_stack.sql │ │ │ ├── 0001_smiling_agent_zero.sql │ │ │ ├── 0002_smooth_impossible_man.sql │ │ │ └── meta/ │ │ │ ├── 0000_snapshot.json │ │ │ ├── 0001_snapshot.json │ │ │ ├── 0002_snapshot.json │ │ │ └── _journal.json │ │ ├── scripts/ │ │ │ ├── check-locales.js │ │ │ ├── check-ytdlp.js │ │ │ ├── ensure-native-deps.mjs │ │ │ ├── postinstall.mjs │ │ │ ├── set-console-encoding.js │ │ │ ├── setup-dev-binaries.js │ │ │ └── ytdlp-auto-release.mjs │ │ ├── src/ │ │ │ ├── main/ │ │ │ │ ├── assets.d.ts │ │ │ │ ├── config/ │ │ │ │ │ └── logger-config.ts │ │ │ │ ├── download-engine/ │ │ │ │ │ ├── args-builder.ts │ │ │ │ │ └── format-utils.ts │ │ │ │ ├── index.ts │ │ │ │ ├── ipc/ │ │ │ │ │ ├── index.ts │ │ │ │ │ └── services/ │ │ │ │ │ ├── app-service.ts │ │ │ │ │ ├── browser-cookies-service.ts │ │ │ │ │ ├── download-service.ts │ │ │ │ │ ├── file-system-service.ts │ │ │ │ │ ├── history-service.ts │ │ │ │ │ ├── settings-service.ts │ │ │ │ │ ├── subscription-service.ts │ │ │ │ │ ├── thumbnail-service.ts │ │ │ │ │ ├── update-service.ts │ │ │ │ │ └── window-service.ts │ │ │ │ ├── lib/ │ │ │ │ │ ├── command-utils.ts │ │ │ │ │ ├── database/ │ │ │ │ │ │ ├── migrate.ts │ │ │ │ │ │ └── schema.ts │ │ │ │ │ ├── database-path.ts │ │ │ │ │ ├── database.ts │ │ │ │ │ ├── download-engine.ts │ │ │ │ │ ├── download-queue.ts │ │ │ │ │ ├── download-session-store.ts │ │ │ │ │ ├── ffmpeg-manager.ts │ │ │ │ │ ├── history-manager.ts │ │ │ │ │ ├── path-resolver.ts │ │ │ │ │ ├── progress-utils.ts │ │ │ │ │ ├── subscription-manager.ts │ │ │ │ │ ├── subscription-scheduler.ts │ │ │ │ │ ├── thumbnail-cache.ts │ │ │ │ │ ├── watermark-utils.ts │ │ │ │ │ ├── youtube-extractor-args.ts │ │ │ │ │ └── ytdlp-manager.ts │ │ │ │ ├── local-api.ts │ │ │ │ ├── settings.ts │ │ │ │ ├── tray.ts │ │ │ │ └── utils/ │ │ │ │ ├── auto-launch.ts │ │ │ │ ├── dock.ts │ │ │ │ ├── logger.ts │ │ │ │ └── path-helpers.ts │ │ │ ├── preload/ │ │ │ │ ├── index.d.ts │ │ │ │ └── index.ts │ │ │ ├── renderer/ │ │ │ │ ├── index.html │ │ │ │ └── src/ │ │ │ │ ├── App.tsx │ │ │ │ ├── assets/ │ │ │ │ │ ├── global.css │ │ │ │ │ ├── main.css │ │ │ │ │ ├── theme.css │ │ │ │ │ └── title-bar.css │ │ │ │ ├── components/ │ │ │ │ │ ├── download/ │ │ │ │ │ │ ├── DownloadDialog.tsx │ │ │ │ │ │ ├── DownloadItem.tsx │ │ │ │ │ │ ├── PlaylistDownload.tsx │ │ │ │ │ │ ├── PlaylistDownloadGroup.tsx │ │ │ │ │ │ ├── SingleVideoDownload.tsx │ │ │ │ │ │ └── UnifiedDownloadHistory.tsx │ │ │ │ │ ├── error/ │ │ │ │ │ │ ├── ErrorBoundary.tsx │ │ │ │ │ │ └── ErrorPage.tsx │ │ │ │ │ ├── feedback/ │ │ │ │ │ │ └── FeedbackLinks.tsx │ │ │ │ │ ├── playlist/ │ │ │ │ │ │ └── PlaylistPreviewCard.tsx │ │ │ │ │ ├── subscription/ │ │ │ │ │ │ └── SubscriptionFormDialog.tsx │ │ │ │ │ ├── ui/ │ │ │ │ │ │ ├── accordion.tsx │ │ │ │ │ │ ├── add-url-popover.tsx │ │ │ │ │ │ ├── badge.tsx │ │ │ │ │ │ ├── button.tsx │ │ │ │ │ │ ├── card.tsx │ │ │ │ │ │ ├── checkbox.tsx │ │ │ │ │ │ ├── context-menu.tsx │ │ │ │ │ │ ├── dialog.tsx │ │ │ │ │ │ ├── download-dialog-layout.tsx │ │ │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ │ │ ├── hover-card.tsx │ │ │ │ │ │ ├── image-with-placeholder.tsx │ │ │ │ │ │ ├── input.tsx │ │ │ │ │ │ ├── item.tsx │ │ │ │ │ │ ├── label.tsx │ │ │ │ │ │ ├── popover.tsx │ │ │ │ │ │ ├── progress.tsx │ │ │ │ │ │ ├── radio-group.tsx │ │ │ │ │ │ ├── remote-image.tsx │ │ │ │ │ │ ├── scroll-area.tsx │ │ │ │ │ │ ├── select.tsx │ │ │ │ │ │ ├── separator.tsx │ │ │ │ │ │ ├── sheet.tsx │ │ │ │ │ │ ├── sidebar.tsx │ │ │ │ │ │ ├── sonner.tsx │ │ │ │ │ │ ├── switch.tsx │ │ │ │ │ │ ├── table.tsx │ │ │ │ │ │ ├── tabs.tsx │ │ │ │ │ │ ├── textarea.tsx │ │ │ │ │ │ ├── title-bar.tsx │ │ │ │ │ │ └── tooltip.tsx │ │ │ │ │ └── video/ │ │ │ │ │ └── AdvancedOptions.tsx │ │ │ │ ├── data/ │ │ │ │ │ └── popularSites.ts │ │ │ │ ├── env.d.ts │ │ │ │ ├── hooks/ │ │ │ │ │ ├── use-cached-thumbnail.ts │ │ │ │ │ ├── use-download-events.ts │ │ │ │ │ ├── use-history-sync.ts │ │ │ │ │ └── use-ipc-example.ts │ │ │ │ ├── i18n.ts │ │ │ │ ├── lib/ │ │ │ │ │ ├── ipc.ts │ │ │ │ │ ├── logger.ts │ │ │ │ │ └── utils.ts │ │ │ │ ├── main.tsx │ │ │ │ ├── pages/ │ │ │ │ │ ├── About.tsx │ │ │ │ │ ├── Home.tsx │ │ │ │ │ ├── Settings.tsx │ │ │ │ │ └── Subscriptions.tsx │ │ │ │ └── store/ │ │ │ │ ├── downloads.ts │ │ │ │ ├── settings.ts │ │ │ │ ├── subscriptions.ts │ │ │ │ ├── update.ts │ │ │ │ └── video.ts │ │ │ └── shared/ │ │ │ ├── constants.ts │ │ │ ├── types/ │ │ │ │ ├── index.ts │ │ │ │ └── ipc.ts │ │ │ └── utils/ │ │ │ ├── download-file.ts │ │ │ └── format-preferences.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ └── tsconfig.web.json │ ├── docs/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── biome.config.json │ │ ├── content/ │ │ │ ├── cookies.mdx │ │ │ ├── faq.mdx │ │ │ ├── fr/ │ │ │ │ ├── cookies.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── index.mdx │ │ │ │ ├── meta.json │ │ │ │ ├── protocol.mdx │ │ │ │ └── rss.mdx │ │ │ ├── index.mdx │ │ │ ├── meta.json │ │ │ ├── protocol.mdx │ │ │ ├── rss.mdx │ │ │ ├── ru/ │ │ │ │ ├── cookies.mdx │ │ │ │ ├── faq.mdx │ │ │ │ ├── index.mdx │ │ │ │ ├── meta.json │ │ │ │ ├── protocol.mdx │ │ │ │ └── rss.mdx │ │ │ └── zh/ │ │ │ ├── cookies.mdx │ │ │ ├── faq.mdx │ │ │ ├── index.mdx │ │ │ ├── meta.json │ │ │ ├── protocol.mdx │ │ │ └── rss.mdx │ │ ├── next.config.mjs │ │ ├── package.json │ │ ├── postcss.config.mjs │ │ ├── public/ │ │ │ └── ICONS.md │ │ ├── scripts/ │ │ │ └── post-export.js │ │ ├── source.config.ts │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── (docs)/ │ │ │ │ │ ├── [[...slug]]/ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ └── layout.tsx │ │ │ │ ├── [lang]/ │ │ │ │ │ ├── (docs)/ │ │ │ │ │ │ ├── [[...slug]]/ │ │ │ │ │ │ │ └── page.tsx │ │ │ │ │ │ └── layout.tsx │ │ │ │ │ └── layout.tsx │ │ │ │ ├── api/ │ │ │ │ │ └── search/ │ │ │ │ │ └── route.ts │ │ │ │ ├── global.css │ │ │ │ ├── layout.tsx │ │ │ │ └── sitemap.ts │ │ │ ├── components/ │ │ │ │ └── ai/ │ │ │ │ └── page-actions.tsx │ │ │ ├── lib/ │ │ │ │ ├── cn.ts │ │ │ │ ├── i18n.ts │ │ │ │ ├── layout.shared.tsx │ │ │ │ └── source.ts │ │ │ ├── mdx-components.tsx │ │ │ └── middleware.ts │ │ └── tsconfig.json │ ├── extension/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── assets/ │ │ │ └── content.css │ │ ├── entrypoints/ │ │ │ ├── background.ts │ │ │ └── popup/ │ │ │ ├── App.css │ │ │ ├── App.tsx │ │ │ ├── index.html │ │ │ └── main.tsx │ │ ├── package.json │ │ ├── public/ │ │ │ └── _locales/ │ │ │ └── en/ │ │ │ └── messages.json │ │ ├── tsconfig.json │ │ └── wxt.config.ts │ └── web/ │ ├── Dockerfile │ ├── README.md │ ├── biome.json │ ├── package.json │ ├── public/ │ │ ├── manifest.json │ │ └── robots.txt │ ├── src/ │ │ ├── components/ │ │ │ ├── download/ │ │ │ │ ├── download-dialog.tsx │ │ │ │ ├── download-item.tsx │ │ │ │ ├── playlist-download-group.tsx │ │ │ │ ├── playlist-download.tsx │ │ │ │ ├── single-video-download.tsx │ │ │ │ └── types.ts │ │ │ ├── layout/ │ │ │ │ └── app-shell.tsx │ │ │ └── pages/ │ │ │ ├── about-page.tsx │ │ │ ├── download-page.tsx │ │ │ └── settings-page.tsx │ │ ├── env.d.ts │ │ ├── hooks/ │ │ │ ├── use-web-download-settings.ts │ │ │ └── use-web-settings.ts │ │ ├── lib/ │ │ │ ├── download-format-preferences.ts │ │ │ ├── i18n.ts │ │ │ ├── orpc-client.ts │ │ │ ├── orpc-download-settings.ts │ │ │ ├── remote-image-proxy.ts │ │ │ └── web-settings.ts │ │ ├── routeTree.gen.ts │ │ ├── router.tsx │ │ ├── routes/ │ │ │ ├── __root.tsx │ │ │ ├── about.tsx │ │ │ ├── index.tsx │ │ │ └── settings.tsx │ │ └── styles.css │ ├── tsconfig.json │ └── vite.config.ts ├── biome.json ├── conductor.json ├── docker-compose.yml ├── package.json ├── packages/ │ ├── db/ │ │ ├── package.json │ │ ├── src/ │ │ │ └── history.ts │ │ └── tsconfig.json │ ├── downloader-core/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── browser-cookies-setting.ts │ │ │ ├── contract.ts │ │ │ ├── download-file.ts │ │ │ ├── downloader-core.ts │ │ │ ├── format-preferences.ts │ │ │ ├── index.ts │ │ │ ├── schemas.ts │ │ │ ├── types.ts │ │ │ └── yt-dlp-args.ts │ │ └── tsconfig.json │ ├── i18n/ │ │ ├── package.json │ │ ├── src/ │ │ │ ├── index.ts │ │ │ ├── init.ts │ │ │ ├── languages.ts │ │ │ ├── locales/ │ │ │ │ ├── ar.json │ │ │ │ ├── de.json │ │ │ │ ├── en.json │ │ │ │ ├── es.json │ │ │ │ ├── fr.json │ │ │ │ ├── id.json │ │ │ │ ├── it.json │ │ │ │ ├── ja.json │ │ │ │ ├── ko.json │ │ │ │ ├── pt.json │ │ │ │ ├── ru.json │ │ │ │ ├── tr.json │ │ │ │ ├── zh-TW.json │ │ │ │ └── zh.json │ │ │ └── resources.ts │ │ └── tsconfig.json │ └── ui/ │ ├── package.json │ ├── src/ │ │ ├── base.css │ │ ├── components/ │ │ │ └── ui/ │ │ │ ├── accordion.tsx │ │ │ ├── add-url-popover.tsx │ │ │ ├── app-sidebar-icons.tsx │ │ │ ├── app-sidebar.tsx │ │ │ ├── badge.tsx │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── checkbox.tsx │ │ │ ├── context-menu.tsx │ │ │ ├── dialog.tsx │ │ │ ├── download-dialog-layout.tsx │ │ │ ├── download-empty-state.tsx │ │ │ ├── download-filter-bar.tsx │ │ │ ├── dropdown-menu.tsx │ │ │ ├── feedback-link-buttons.tsx │ │ │ ├── hover-card.tsx │ │ │ ├── image-with-placeholder.tsx │ │ │ ├── input.tsx │ │ │ ├── item.tsx │ │ │ ├── label.tsx │ │ │ ├── popover.tsx │ │ │ ├── progress.tsx │ │ │ ├── radio-group.tsx │ │ │ ├── remote-image.tsx │ │ │ ├── scroll-area.tsx │ │ │ ├── select.tsx │ │ │ ├── separator.tsx │ │ │ ├── sheet.tsx │ │ │ ├── sidebar.tsx │ │ │ ├── sonner.tsx │ │ │ ├── switch.tsx │ │ │ ├── table.tsx │ │ │ ├── tabs.tsx │ │ │ ├── textarea.tsx │ │ │ ├── title-bar.tsx │ │ │ └── tooltip.tsx │ │ ├── lib/ │ │ │ ├── cn.ts │ │ │ └── use-add-url-interaction.ts │ │ └── theme.css │ └── tsconfig.json ├── pnpm-workspace.yaml └── skills-lock.json