gitextract_jejzfg73/ ├── .dockerignore ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.yml │ │ ├── config.yml │ │ ├── feature_request.yml │ │ └── rfc.yml │ └── workflows/ │ ├── beta.yml │ ├── build.yml │ ├── issues.yml │ └── pylint.yml ├── .gitignore ├── .pylintrc ├── LICENSE ├── README.md ├── app/ │ ├── __init__.py │ ├── agent/ │ │ ├── __init__.py │ │ ├── callback/ │ │ │ └── __init__.py │ │ ├── memory/ │ │ │ └── __init__.py │ │ ├── prompt/ │ │ │ ├── Agent Prompt.txt │ │ │ └── __init__.py │ │ └── tools/ │ │ ├── __init__.py │ │ ├── base.py │ │ ├── factory.py │ │ ├── impl/ │ │ │ ├── __init__.py │ │ │ ├── _torrent_search_utils.py │ │ │ ├── add_download.py │ │ │ ├── add_subscribe.py │ │ │ ├── delete_download.py │ │ │ ├── delete_subscribe.py │ │ │ ├── execute_command.py │ │ │ ├── get_recommendations.py │ │ │ ├── get_search_results.py │ │ │ ├── list_directory.py │ │ │ ├── query_directory_settings.py │ │ │ ├── query_download_tasks.py │ │ │ ├── query_downloaders.py │ │ │ ├── query_episode_schedule.py │ │ │ ├── query_library_exists.py │ │ │ ├── query_library_latest.py │ │ │ ├── query_media_detail.py │ │ │ ├── query_popular_subscribes.py │ │ │ ├── query_rule_groups.py │ │ │ ├── query_schedulers.py │ │ │ ├── query_site_userdata.py │ │ │ ├── query_sites.py │ │ │ ├── query_subscribe_history.py │ │ │ ├── query_subscribe_shares.py │ │ │ ├── query_subscribes.py │ │ │ ├── query_transfer_history.py │ │ │ ├── query_workflows.py │ │ │ ├── recognize_media.py │ │ │ ├── run_scheduler.py │ │ │ ├── run_workflow.py │ │ │ ├── scrape_metadata.py │ │ │ ├── search_media.py │ │ │ ├── search_person.py │ │ │ ├── search_person_credits.py │ │ │ ├── search_subscribe.py │ │ │ ├── search_torrents.py │ │ │ ├── search_web.py │ │ │ ├── send_message.py │ │ │ ├── test_site.py │ │ │ ├── transfer_file.py │ │ │ ├── update_site.py │ │ │ ├── update_site_cookie.py │ │ │ └── update_subscribe.py │ │ └── manager.py │ ├── api/ │ │ ├── __init__.py │ │ ├── apiv1.py │ │ ├── endpoints/ │ │ │ ├── __init__.py │ │ │ ├── bangumi.py │ │ │ ├── dashboard.py │ │ │ ├── discover.py │ │ │ ├── douban.py │ │ │ ├── download.py │ │ │ ├── history.py │ │ │ ├── login.py │ │ │ ├── mcp.py │ │ │ ├── media.py │ │ │ ├── mediaserver.py │ │ │ ├── message.py │ │ │ ├── mfa.py │ │ │ ├── plugin.py │ │ │ ├── recommend.py │ │ │ ├── search.py │ │ │ ├── site.py │ │ │ ├── storage.py │ │ │ ├── subscribe.py │ │ │ ├── system.py │ │ │ ├── tmdb.py │ │ │ ├── torrent.py │ │ │ ├── transfer.py │ │ │ ├── user.py │ │ │ ├── webhook.py │ │ │ └── workflow.py │ │ ├── servarr.py │ │ └── servcookie.py │ ├── chain/ │ │ ├── __init__.py │ │ ├── ai_recommend.py │ │ ├── bangumi.py │ │ ├── dashboard.py │ │ ├── douban.py │ │ ├── download.py │ │ ├── media.py │ │ ├── mediaserver.py │ │ ├── message.py │ │ ├── recommend.py │ │ ├── search.py │ │ ├── site.py │ │ ├── storage.py │ │ ├── subscribe.py │ │ ├── system.py │ │ ├── tmdb.py │ │ ├── torrents.py │ │ ├── transfer.py │ │ ├── tvdb.py │ │ ├── user.py │ │ ├── webhook.py │ │ └── workflow.py │ ├── command.py │ ├── core/ │ │ ├── __init__.py │ │ ├── cache.py │ │ ├── config.py │ │ ├── context.py │ │ ├── event.py │ │ ├── meta/ │ │ │ ├── __init__.py │ │ │ ├── customization.py │ │ │ ├── metaanime.py │ │ │ ├── metabase.py │ │ │ ├── metavideo.py │ │ │ ├── releasegroup.py │ │ │ ├── streamingplatform.py │ │ │ └── words.py │ │ ├── metainfo.py │ │ ├── module.py │ │ ├── plugin.py │ │ └── security.py │ ├── db/ │ │ ├── __init__.py │ │ ├── downloadhistory_oper.py │ │ ├── init.py │ │ ├── mediaserver_oper.py │ │ ├── message_oper.py │ │ ├── models/ │ │ │ ├── __init__.py │ │ │ ├── downloadhistory.py │ │ │ ├── mediaserver.py │ │ │ ├── message.py │ │ │ ├── passkey.py │ │ │ ├── plugindata.py │ │ │ ├── site.py │ │ │ ├── siteicon.py │ │ │ ├── sitestatistic.py │ │ │ ├── siteuserdata.py │ │ │ ├── subscribe.py │ │ │ ├── subscribehistory.py │ │ │ ├── systemconfig.py │ │ │ ├── transferhistory.py │ │ │ ├── user.py │ │ │ ├── userconfig.py │ │ │ └── workflow.py │ │ ├── plugindata_oper.py │ │ ├── site_oper.py │ │ ├── subscribe_oper.py │ │ ├── systemconfig_oper.py │ │ ├── transferhistory_oper.py │ │ ├── user_oper.py │ │ ├── userconfig_oper.py │ │ └── workflow_oper.py │ ├── factory.py │ ├── helper/ │ │ ├── __init__.py │ │ ├── browser.py │ │ ├── cloudflare.py │ │ ├── cookie.py │ │ ├── cookiecloud.py │ │ ├── directory.py │ │ ├── display.py │ │ ├── doh.py │ │ ├── downloader.py │ │ ├── format.py │ │ ├── image.py │ │ ├── llm.py │ │ ├── mediaserver.py │ │ ├── message.py │ │ ├── module.py │ │ ├── nfo.py │ │ ├── notification.py │ │ ├── ocr.py │ │ ├── passkey.py │ │ ├── plugin.py │ │ ├── progress.py │ │ ├── redis.py │ │ ├── resource.py │ │ ├── rss.py │ │ ├── rule.py │ │ ├── service.py │ │ ├── storage.py │ │ ├── subscribe.py │ │ ├── system.py │ │ ├── thread.py │ │ ├── torrent.py │ │ ├── twofa.py │ │ └── workflow.py │ ├── log.py │ ├── main.py │ ├── modules/ │ │ ├── __init__.py │ │ ├── bangumi/ │ │ │ ├── __init__.py │ │ │ └── bangumi.py │ │ ├── discord/ │ │ │ ├── __init__.py │ │ │ └── discord.py │ │ ├── douban/ │ │ │ ├── __init__.py │ │ │ ├── apiv2.py │ │ │ ├── douban_cache.py │ │ │ └── scraper.py │ │ ├── emby/ │ │ │ ├── __init__.py │ │ │ └── emby.py │ │ ├── fanart/ │ │ │ └── __init__.py │ │ ├── filemanager/ │ │ │ ├── __init__.py │ │ │ ├── storages/ │ │ │ │ ├── __init__.py │ │ │ │ ├── alipan.py │ │ │ │ ├── alist.py │ │ │ │ ├── local.py │ │ │ │ ├── rclone.py │ │ │ │ ├── smb.py │ │ │ │ └── u115.py │ │ │ └── transhandler.py │ │ ├── filter/ │ │ │ ├── RuleParser.py │ │ │ └── __init__.py │ │ ├── indexer/ │ │ │ ├── __init__.py │ │ │ ├── parser/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bitpt.py │ │ │ │ ├── discuz.py │ │ │ │ ├── file_list.py │ │ │ │ ├── gazelle.py │ │ │ │ ├── hddolby.py │ │ │ │ ├── ipt_project.py │ │ │ │ ├── mtorrent.py │ │ │ │ ├── nexus_audiences.py │ │ │ │ ├── nexus_hhanclub.py │ │ │ │ ├── nexus_php.py │ │ │ │ ├── nexus_project.py │ │ │ │ ├── nexus_rabbit.py │ │ │ │ ├── rousi.py │ │ │ │ ├── small_horse.py │ │ │ │ ├── tnode.py │ │ │ │ ├── torrent_leech.py │ │ │ │ ├── unit3d.py │ │ │ │ ├── yema.py │ │ │ │ └── zhixing.py │ │ │ └── spider/ │ │ │ ├── __init__.py │ │ │ ├── haidan.py │ │ │ ├── hddolby.py │ │ │ ├── mtorrent.py │ │ │ ├── rousi.py │ │ │ ├── tnode.py │ │ │ ├── torrentleech.py │ │ │ └── yema.py │ │ ├── jellyfin/ │ │ │ ├── __init__.py │ │ │ └── jellyfin.py │ │ ├── plex/ │ │ │ ├── __init__.py │ │ │ └── plex.py │ │ ├── postgresql/ │ │ │ └── __init__.py │ │ ├── qbittorrent/ │ │ │ ├── __init__.py │ │ │ └── qbittorrent.py │ │ ├── qqbot/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ ├── gateway.py │ │ │ └── qqbot.py │ │ ├── redis/ │ │ │ └── __init__.py │ │ ├── rtorrent/ │ │ │ ├── __init__.py │ │ │ └── rtorrent.py │ │ ├── slack/ │ │ │ ├── __init__.py │ │ │ └── slack.py │ │ ├── subtitle/ │ │ │ └── __init__.py │ │ ├── synologychat/ │ │ │ ├── __init__.py │ │ │ └── synologychat.py │ │ ├── telegram/ │ │ │ ├── __init__.py │ │ │ └── telegram.py │ │ ├── themoviedb/ │ │ │ ├── __init__.py │ │ │ ├── category.py │ │ │ ├── scraper.py │ │ │ ├── tmdb_cache.py │ │ │ ├── tmdbapi.py │ │ │ └── tmdbv3api/ │ │ │ ├── __init__.py │ │ │ ├── as_obj.py │ │ │ ├── exceptions.py │ │ │ ├── objs/ │ │ │ │ ├── __init__.py │ │ │ │ ├── account.py │ │ │ │ ├── auth.py │ │ │ │ ├── certification.py │ │ │ │ ├── change.py │ │ │ │ ├── collection.py │ │ │ │ ├── company.py │ │ │ │ ├── configuration.py │ │ │ │ ├── credit.py │ │ │ │ ├── discover.py │ │ │ │ ├── episode.py │ │ │ │ ├── find.py │ │ │ │ ├── genre.py │ │ │ │ ├── group.py │ │ │ │ ├── keyword.py │ │ │ │ ├── list.py │ │ │ │ ├── movie.py │ │ │ │ ├── network.py │ │ │ │ ├── person.py │ │ │ │ ├── provider.py │ │ │ │ ├── review.py │ │ │ │ ├── search.py │ │ │ │ ├── season.py │ │ │ │ ├── trending.py │ │ │ │ └── tv.py │ │ │ └── tmdb.py │ │ ├── thetvdb/ │ │ │ ├── __init__.py │ │ │ └── tvdb_v4_official.py │ │ ├── transmission/ │ │ │ ├── __init__.py │ │ │ └── transmission.py │ │ ├── trimemedia/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── trimemedia.py │ │ ├── ugreen/ │ │ │ ├── __init__.py │ │ │ ├── api.py │ │ │ └── ugreen.py │ │ ├── vocechat/ │ │ │ ├── __init__.py │ │ │ └── vocechat.py │ │ ├── webpush/ │ │ │ └── __init__.py │ │ └── wechat/ │ │ ├── WXBizMsgCrypt3.py │ │ ├── __init__.py │ │ ├── wechat.py │ │ └── wechatbot.py │ ├── monitor.py │ ├── plugins/ │ │ └── __init__.py │ ├── scheduler.py │ ├── schemas/ │ │ ├── __init__.py │ │ ├── agent.py │ │ ├── category.py │ │ ├── context.py │ │ ├── dashboard.py │ │ ├── download.py │ │ ├── event.py │ │ ├── exception.py │ │ ├── file.py │ │ ├── history.py │ │ ├── mcp.py │ │ ├── mediaserver.py │ │ ├── message.py │ │ ├── monitoring.py │ │ ├── plugin.py │ │ ├── response.py │ │ ├── rule.py │ │ ├── servarr.py │ │ ├── servcookie.py │ │ ├── site.py │ │ ├── subscribe.py │ │ ├── system.py │ │ ├── tmdb.py │ │ ├── token.py │ │ ├── transfer.py │ │ ├── types.py │ │ ├── user.py │ │ └── workflow.py │ ├── startup/ │ │ ├── __init__.py │ │ ├── agent_initializer.py │ │ ├── command_initializer.py │ │ ├── lifecycle.py │ │ ├── modules_initializer.py │ │ ├── monitor_initializer.py │ │ ├── plugins_initializer.py │ │ ├── routers_initializer.py │ │ ├── scheduler_initializer.py │ │ └── workflow_initializer.py │ ├── utils/ │ │ ├── __init__.py │ │ ├── common.py │ │ ├── crypto.py │ │ ├── debounce.py │ │ ├── dom.py │ │ ├── gc.py │ │ ├── http.py │ │ ├── ip.py │ │ ├── limit.py │ │ ├── mixins.py │ │ ├── object.py │ │ ├── otp.py │ │ ├── security.py │ │ ├── singleton.py │ │ ├── site.py │ │ ├── string.py │ │ ├── structures.py │ │ ├── system.py │ │ ├── timer.py │ │ ├── tokens.py │ │ ├── ugreen_crypto.py │ │ ├── url.py │ │ └── web.py │ └── workflow/ │ ├── __init__.py │ └── actions/ │ ├── __init__.py │ ├── add_download.py │ ├── add_subscribe.py │ ├── fetch_downloads.py │ ├── fetch_medias.py │ ├── fetch_rss.py │ ├── fetch_torrents.py │ ├── filter_medias.py │ ├── filter_torrents.py │ ├── invoke_plugin.py │ ├── note.py │ ├── scan_file.py │ ├── scrape_file.py │ ├── send_event.py │ ├── send_message.py │ └── transfer_file.py ├── config/ │ └── category.yaml ├── database/ │ ├── env.py │ ├── gen.py │ ├── script.py.mako │ └── versions/ │ ├── 0fb94bf69b38_2_0_2.py │ ├── 262735d025da_2_0_1.py │ ├── 279a949d81b6_2_1_1.py │ ├── 294b007932ef_2_0_0.py │ ├── 3891a5e722a1_2_1_7.py │ ├── 3df653756eec_2_1_6.py │ ├── 41ef1dd7467c_2_2_2.py │ ├── 4666ce24a443_2_1_8.py │ ├── 486e56a62dcb_2_1_5.py │ ├── 4b544f5d3b07_2_1_3.py │ ├── 55390f1f77c1_2_0_9.py │ ├── 58edfac72c32_2_2_3.py │ ├── 5b3355c964bb_2_2_0.py │ ├── 610bb05ddeef_2_1_2.py │ ├── 89d24811e894_2_1_4.py │ ├── a295e41830a6_2_0_6.py │ ├── a73f2dbf5c09_2_0_4.py │ ├── a946dae52526_2_2_1.py │ ├── bf28a012734c_2_0_8.py │ ├── ca5461f314f2_2_1_0.py │ ├── d58298a0879f_2_1_9.py │ ├── e2dbe1421fa4_2_0_3.py │ ├── eaf9cbc49027_2_0_7.py │ └── ecf3c693fdf3_2_0_5.py ├── docker/ │ ├── Dockerfile │ ├── cert.sh │ ├── docker_http_proxy.conf │ ├── entrypoint.sh │ ├── nginx.common.conf │ ├── nginx.template.conf │ └── update.sh ├── docs/ │ ├── development-setup.md │ ├── mcp-api.md │ └── postgresql-setup.md ├── frozen.spec ├── requirements.in ├── requirements.txt ├── safety.policy.yml ├── setup.py ├── skills/ │ └── moviepilot-cli/ │ ├── SKILL.md │ └── scripts/ │ └── mp-cli.js ├── tests/ │ ├── __init__.py │ ├── cases/ │ │ ├── __init__.py │ │ ├── files.py │ │ ├── groups.py │ │ └── meta.py │ ├── manual/ │ │ └── ugreen_media_cli.py │ ├── run.py │ ├── test_bluray.py │ ├── test_mediascrape.py │ ├── test_metainfo.py │ ├── test_object.py │ ├── test_release_group.py │ ├── test_string.py │ ├── test_telegram.py │ ├── test_transfer_history_retransfer.py │ ├── test_ugreen_api.py │ ├── test_ugreen_crypto.py │ └── test_ugreen_mediaserver.py └── version.py