NAS媒体库自动化管理工具
This report presents the forensic synthetic code analysis of jxxghp/MoviePilot, a Python project with 11,350 GitHub stars. SynthScan v2.0 examined 272,697 lines of code across 855 source files, recording 5080 pattern matches distributed across 18 syntactic categories. The overall adjusted score of 20.5 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 5080 distinct pattern matches across 18 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | database/versions/d5e6f7a8b9c0_2_2_8.py | 24 | def _fix_episode_priority_type(bind, table_name: str) -> None: | CODE |
| LOW | database/versions/7c1a2b3d4e5f_2_2_9.py | 25 | def _add_json_column_if_missing(table_name: str, column_name: str) -> None: | CODE |
| LOW | database/versions/a946dae52526_2_2_1.py | 39 | def migrate_postgresql_userid(connection): | CODE |
| LOW | app/command.py | 31 | def _finish_command_processing_status(status: Optional[dict], user_id: Optional[str] = None) -> None: | CODE |
| LOW | app/command.py | 163 | def __init_commands_background(self, pid: Optional[str] = None) -> None: | CODE |
| LOW | app/command.py | 232 | def __trigger_register_commands_event(self) -> tuple[Optional[Event], dict]: | CODE |
| LOW⚡ | app/monitor.py | 542 | def get_system_optimization_tips() -> List[str]: | CODE |
| LOW | app/monitor.py | 448 | def __is_transfer_candidate_path(self, file_path: Path) -> bool: | CODE |
| LOW | app/monitor.py | 457 | def __build_transfer_src_path(event_path: Path, is_bluray_folder: bool) -> str: | CODE |
| LOW | app/__init__.py | 4 | def _filter_third_party_startup_warnings() -> None: | CODE |
| LOW | app/factory.py | 12 | async def localized_http_exception_handler( | CODE |
| LOW | app/factory.py | 55 | async def locale_context_middleware( | CODE |
| LOW | app/cli.py | 281 | def _resolve_auto_update_targets(mode: str) -> Optional[str]: | CODE |
| LOW | app/cli.py | 362 | def _ensure_frontend_not_running_alone(timeout: int) -> None: | CODE |
| LOW | app/cli.py | 693 | def _wait_until_backend_ready(runtime: Dict[str, Any], timeout: int) -> Dict[str, Any]: | CODE |
| LOW | app/cli.py | 711 | def _wait_until_frontend_ready(runtime: Dict[str, Any], timeout: int) -> Dict[str, Any]: | CODE |
| LOW | app/cli.py | 828 | def _installed_frontend_version() -> Optional[str]: | CODE |
| LOW | app/scheduler.py | 156 | def _normalize_retention_days(retention_days: Any) -> int: | CODE |
| LOW | app/scheduler.py | 843 | def __build_progress_callback(self, job_id: str, job: dict) -> Callable[..., None]: | CODE |
| LOW | app/scheduler.py | 874 | def __supports_progress_callback(func: Callable[..., Any]) -> bool: | CODE |
| LOW | app/core/metainfo.py | 77 | def _rust_parse_options_cache_key(options: dict) -> str: | CODE |
| LOW | app/core/metainfo.py | 225 | def _rust_default_parse_options() -> dict: | CODE |
| LOW | app/core/metainfo.py | 253 | def _rust_custom_parse_options(custom_words: Tuple[str, ...]) -> dict: | CODE |
| LOW | app/core/metainfo.py | 272 | def clear_rust_parse_options_cache() -> None: | CODE |
| LOW | app/core/event.py | 309 | def __get_class_from_callable(cls, handler: Callable) -> Optional[str]: | CODE |
| LOW | app/core/event.py | 359 | async def __trigger_chain_event_async(self, event: Event) -> Optional[Event]: | CODE |
| LOW | app/core/event.py | 367 | def __trigger_broadcast_event(self, event: Event): | CODE |
| LOW | app/core/event.py | 404 | async def __dispatch_chain_event_async(self, event: Event) -> bool: | CODE |
| LOW | app/core/event.py | 433 | def __dispatch_broadcast_event(self, event: Event): | CODE |
| LOW | app/core/event.py | 471 | def __should_dispatch_to_target_plugin( | CODE |
| LOW | app/core/event.py | 510 | async def __safe_invoke_handler_async(self, handler: Callable, event: Event): | CODE |
| LOW | app/core/event.py | 522 | def __invoke_handler_by_type_sync(self, handler: Callable, event: Event): | CODE |
| LOW | app/core/event.py | 583 | async def __invoke_handler_by_type_async(self, handler: Callable, event: Event): | CODE |
| LOW | app/core/event.py | 626 | async def __invoke_plugin_method_async(self, handler: Any, class_name: str, method_name: str, event: Event): | CODE |
| LOW | app/core/event.py | 646 | async def __invoke_module_method_async(self, handler: Any, class_name: str, method_name: str, event: Event): | CODE |
| LOW | app/core/event.py | 665 | async def __invoke_global_method_async(self, class_name: str, method_name: str, event: Event): | CODE |
| LOW | app/core/event.py | 727 | def __broadcast_consumer_loop(self): | CODE |
| LOW | app/core/auth_bridge.py | 96 | def create_plugin_auth_ticket(user_id: int, provider_id: str, metadata: Optional[dict[str, Any]] = None) -> str: | CODE |
| LOW | app/core/auth_bridge.py | 108 | def consume_plugin_auth_ticket(ticket: str) -> Optional[dict[str, Any]]: | CODE |
| LOW | app/core/security.py | 77 | def __create_superuser_token_payload() -> schemas.TokenPayload: | CODE |
| LOW | app/core/security.py | 151 | def set_or_refresh_resource_token_cookie( | CODE |
| LOW | app/core/cache.py | 1128 | async def async_is_valid_cache_value(_cache_key: str, _cached_value: Any, _cache_region: str) -> bool: | CODE |
| LOW⚡ | app/core/plugin.py | 2193 | def _rename_federation_assets(dist_dir: Path, original_class_name: str, clone_class_name: str): | CODE |
| LOW | app/core/plugin.py | 140 | def clear_plugin_agent_tools_cache(self) -> None: | CODE |
| LOW | app/core/plugin.py | 421 | def _get_federated_plugin_change( | CODE |
| LOW | app/core/plugin.py | 534 | def _get_local_plugin_candidate_from_path(event_path: Path) -> Optional[dict]: | CODE |
| LOW | app/core/plugin.py | 573 | def _sync_local_plugin_if_installed(pid: str, candidate: Optional[dict] = None) -> bool: | CODE |
| LOW | app/core/plugin.py | 746 | def install_plugin_missing_dependencies() -> List[str]: | CODE |
| LOW | app/core/plugin.py | 1076 | def get_plugin_auth_providers(self) -> List[Dict[str, Any]]: | CODE |
| LOW | app/core/plugin.py | 1175 | def get_plugin_dashboard_meta(self) -> List[Dict[str, str]]: | CODE |
| LOW | app/core/plugin.py | 1804 | async def async_get_plugins_from_market(self, market: str, | CODE |
| LOW | app/core/plugin.py | 1836 | def __set_and_check_auth_level(plugin: Union[schemas.Plugin, Type[Any]], | CODE |
| LOW | app/core/module.py | 141 | def get_running_subtype_module(self, module_subtype: SubType) -> Generator: | CODE |
| LOW | app/core/meta/metavideo.py | 220 | def __get_title_from_description(description: str) -> Optional[str]: | CODE |
| LOW | app/core/meta/infopath.py | 15 | def should_use_parent_title_for_file_stem( | CODE |
| LOW | app/core/meta/infopath.py | 41 | def clear_parsed_title_for_parent_merge(meta: MetaBase) -> None: | CODE |
| LOW | app/core/meta/streamingplatform.py | 306 | def get_streaming_platform_name(self, platform_code: str) -> Optional[str]: | CODE |
| LOW | app/core/meta/words.py | 34 | def _compile_custom_word_regex(pattern: str): | CODE |
| LOW | app/core/meta/words.py | 41 | def _calculate_episode_offset(offset: str, episode: int) -> int: | CODE |
| LOW | app/core/meta/words.py | 54 | def _evaluate_episode_offset_node(node: ast.AST): | CODE |
| 2806 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | database/versions/e2dbe1421fa4_2_0_3.py | 72 | except Exception as e: | CODE |
| LOW | database/versions/ecf3c693fdf3_2_0_5.py | 42 | except Exception as e: | CODE |
| LOW | database/versions/5b3355c964bb_2_2_0.py | 85 | except Exception as e: | STRING |
| LOW | database/versions/5b3355c964bb_2_2_0.py | 112 | except Exception as e: | STRING |
| LOW | database/versions/a946dae52526_2_2_1.py | 73 | except Exception as e: | STRING |
| LOW | app/command.py | 226 | except Exception as e: | CODE |
| LOW | app/command.py | 426 | except Exception as err: | CODE |
| LOW⚡ | app/monitor.py | 516 | except Exception as e: | CODE |
| LOW⚡ | app/monitor.py | 523 | except Exception as e: | CODE |
| LOW⚡ | app/monitor.py | 533 | except Exception as e: | CODE |
| LOW⚡ | app/monitor.py | 536 | except Exception as e: | CODE |
| LOW | app/monitor.py | 122 | except Exception as err: | CODE |
| LOW | app/monitor.py | 132 | except Exception as fallback_err: | CODE |
| LOW | app/monitor.py | 180 | except Exception as err: | CODE |
| LOW | app/monitor.py | 281 | except Exception as e: | CODE |
| LOW | app/monitor.py | 298 | except Exception as e: | CODE |
| LOW | app/monitor.py | 335 | except Exception as e: | CODE |
| LOW | app/monitor.py | 346 | except Exception as e: | CODE |
| LOW | app/monitor.py | 365 | except Exception as e: | CODE |
| LOW | app/monitor.py | 472 | except Exception as err: | CODE |
| LOW | app/monitor.py | 492 | except Exception as err: | CODE |
| LOW | app/monitor.py | 679 | except Exception as e: | CODE |
| LOW | app/monitor.py | 823 | except Exception as e: | CODE |
| LOW | app/monitor.py | 895 | except Exception as e: | CODE |
| LOW | app/monitor.py | 913 | except Exception as e: | CODE |
| LOW | app/monitor.py | 923 | except Exception as e: | CODE |
| LOW | app/log.py | 239 | except Exception as e: | CODE |
| LOW | app/log.py | 271 | except Exception as e: | CODE |
| LOW | app/log.py | 304 | except Exception as e: | CODE |
| LOW | app/log.py | 467 | except Exception as e: | CODE |
| LOW | app/cli.py | 857 | except Exception: | CODE |
| MEDIUM | app/cli.py | 262 | def _git_current_branch() -> Optional[str]: | CODE |
| LOW | app/scheduler.py | 128 | except Exception as err: | CODE |
| LOW | app/scheduler.py | 908 | except Exception as err: | CODE |
| LOW | app/scheduler.py | 974 | except Exception as e: | CODE |
| LOW | app/scheduler.py | 1021 | except Exception as e: | CODE |
| LOW | app/scheduler.py | 1073 | except Exception as e: | CODE |
| LOW | app/scheduler.py | 1108 | except Exception as e: | CODE |
| LOW | app/scheduler.py | 1129 | except Exception as e: | CODE |
| LOW | app/scheduler.py | 1162 | except Exception as e: | CODE |
| LOW | app/scheduler.py | 1251 | except Exception as e: | CODE |
| LOW | app/core/event.py | 117 | except Exception as e: | CODE |
| LOW | app/core/event.py | 546 | except Exception as e: | CODE |
| LOW | app/core/event.py | 559 | except Exception as e: | CODE |
| LOW | app/core/event.py | 567 | except Exception as e: | CODE |
| LOW | app/core/event.py | 579 | except Exception as e: | CODE |
| LOW | app/core/event.py | 608 | except Exception as e: | CODE |
| LOW | app/core/event.py | 642 | except Exception as e: | CODE |
| LOW | app/core/event.py | 661 | except Exception as e: | CODE |
| LOW | app/core/event.py | 680 | except Exception as e: | CODE |
| LOW | app/core/event.py | 696 | except Exception as e: | CODE |
| LOW | app/core/event.py | 723 | except Exception as e: | CODE |
| LOW | app/core/config.py | 894 | except Exception as e: | CODE |
| LOW | app/core/config.py | 1083 | except Exception as err: | CODE |
| LOW | app/core/config.py | 1127 | except Exception as e: | CODE |
| LOW | app/core/security.py | 183 | except Exception as e: | CODE |
| LOW | app/core/security.py | 363 | except Exception as e: | CODE |
| LOW | app/core/context.py | 143 | except Exception as e: | CODE |
| LOW | app/core/context.py | 215 | except Exception: | CODE |
| LOW⚡ | app/core/plugin.py | 2179 | except Exception as e: | CODE |
| 1126 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/chain/media.py | 0 | 获取nfo文件内容文本 :param meta: 元数据 :param mediainfo: 媒体信息 :param season: 季号 :param episode: 集号 | STRING |
| HIGH | app/modules/themoviedb/scraper.py | 0 | 获取nfo文件内容文本 :param meta: 元数据 :param mediainfo: 媒体信息 :param season: 季号 :param episode: 集号 | STRING |
| HIGH | app/modules/themoviedb/__init__.py | 0 | 获取nfo文件内容文本 :param meta: 元数据 :param mediainfo: 媒体信息 :param season: 季号 :param episode: 集号 | STRING |
| HIGH | app/chain/__init__.py | 0 | 补充抓取媒体信息图片 :param mediainfo: 识别的媒体信息 :return: 更新后的媒体信息 | STRING |
| HIGH | app/modules/themoviedb/__init__.py | 0 | 补充抓取媒体信息图片 :param mediainfo: 识别的媒体信息 :return: 更新后的媒体信息 | STRING |
| HIGH | app/modules/douban/__init__.py | 0 | 补充抓取媒体信息图片 :param mediainfo: 识别的媒体信息 :return: 更新后的媒体信息 | STRING |
| HIGH | app/chain/__init__.py | 0 | 补充抓取媒体信息图片(异步版本) :param mediainfo: 识别的媒体信息 :return: 更新后的媒体信息 | STRING |
| HIGH | app/modules/themoviedb/__init__.py | 0 | 补充抓取媒体信息图片(异步版本) :param mediainfo: 识别的媒体信息 :return: 更新后的媒体信息 | STRING |
| HIGH | app/modules/douban/__init__.py | 0 | 补充抓取媒体信息图片(异步版本) :param mediainfo: 识别的媒体信息 :return: 更新后的媒体信息 | STRING |
| HIGH | app/chain/__init__.py | 0 | 解析webhook报文体 :param body: 请求体 :param form: 请求表单 :param args: 请求参数 :return: 字典,解析为消息时需要包含:title、text、image | STRING |
| HIGH | app/modules/jellyfin/__init__.py | 0 | 解析webhook报文体 :param body: 请求体 :param form: 请求表单 :param args: 请求参数 :return: 字典,解析为消息时需要包含:title、text、image | STRING |
| HIGH | app/modules/trimemedia/__init__.py | 0 | 解析webhook报文体 :param body: 请求体 :param form: 请求表单 :param args: 请求参数 :return: 字典,解析为消息时需要包含:title、text、image | STRING |
| HIGH | app/modules/emby/__init__.py | 0 | 解析webhook报文体 :param body: 请求体 :param form: 请求表单 :param args: 请求参数 :return: 字典,解析为消息时需要包含:title、text、image | STRING |
| HIGH | app/modules/plex/__init__.py | 0 | 解析webhook报文体 :param body: 请求体 :param form: 请求表单 :param args: 请求参数 :return: 字典,解析为消息时需要包含:title、text、image | STRING |
| HIGH | app/modules/zspace/__init__.py | 0 | 解析webhook报文体 :param body: 请求体 :param form: 请求表单 :param args: 请求参数 :return: 字典,解析为消息时需要包含:title、text、image | STRING |
| HIGH | app/chain/__init__.py | 0 | 获取下载器种子列表 :param status: 种子状态 :param hashs: 种子hash :param downloader: 下载器 :param include_all_tags: 是否包含未打内置标签的下载任务 :retu | STRING |
| HIGH | app/modules/qbittorrent/__init__.py | 0 | 获取下载器种子列表 :param status: 种子状态 :param hashs: 种子hash :param downloader: 下载器 :param include_all_tags: 是否包含未打内置标签的下载任务 :retu | STRING |
| HIGH | app/modules/rtorrent/__init__.py | 0 | 获取下载器种子列表 :param status: 种子状态 :param hashs: 种子hash :param downloader: 下载器 :param include_all_tags: 是否包含未打内置标签的下载任务 :retu | STRING |
| HIGH | app/modules/transmission/__init__.py | 0 | 获取下载器种子列表 :param status: 种子状态 :param hashs: 种子hash :param downloader: 下载器 :param include_all_tags: 是否包含未打内置标签的下载任务 :retu | STRING |
| HIGH | app/chain/__init__.py | 0 | 删除下载器种子 :param hashs: 种子hash :param delete_file: 是否删除文件 :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/qbittorrent/__init__.py | 0 | 删除下载器种子 :param hashs: 种子hash :param delete_file: 是否删除文件 :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/rtorrent/__init__.py | 0 | 删除下载器种子 :param hashs: 种子hash :param delete_file: 是否删除文件 :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/transmission/__init__.py | 0 | 删除下载器种子 :param hashs: 种子hash :param delete_file: 是否删除文件 :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/chain/__init__.py | 0 | 开始下载 :param hashs: 种子hash :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/qbittorrent/__init__.py | 0 | 开始下载 :param hashs: 种子hash :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/rtorrent/__init__.py | 0 | 开始下载 :param hashs: 种子hash :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/transmission/__init__.py | 0 | 开始下载 :param hashs: 种子hash :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/chain/__init__.py | 0 | 停止下载 :param hashs: 种子hash :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/qbittorrent/__init__.py | 0 | 停止下载 :param hashs: 种子hash :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/rtorrent/__init__.py | 0 | 停止下载 :param hashs: 种子hash :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/transmission/__init__.py | 0 | 停止下载 :param hashs: 种子hash :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/chain/__init__.py | 0 | 设置种子标签 :param hashs: 种子hash :param tags: 标签列表 :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/qbittorrent/__init__.py | 0 | 设置种子标签 :param hashs: 种子hash :param tags: 标签列表 :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/rtorrent/__init__.py | 0 | 设置种子标签 :param hashs: 种子hash :param tags: 标签列表 :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/modules/transmission/__init__.py | 0 | 设置种子标签 :param hashs: 种子hash :param tags: 标签列表 :param downloader: 下载器 :return: bool | STRING |
| HIGH | app/chain/__init__.py | 0 | 修改下载任务属性。 :param hash_string: 种子hash :param downloader: 下载器 :param download_limit: 下载限速,单位 kb/s :param upload_limit: 上传限 | STRING |
| HIGH | app/modules/qbittorrent/__init__.py | 0 | 修改下载任务属性。 :param hash_string: 种子hash :param downloader: 下载器 :param download_limit: 下载限速,单位 kb/s :param upload_limit: 上传限 | STRING |
| HIGH | app/modules/transmission/__init__.py | 0 | 修改下载任务属性。 :param hash_string: 种子hash :param downloader: 下载器 :param download_limit: 下载限速,单位 kb/s :param upload_limit: 上传限 | STRING |
| HIGH | app/chain/__init__.py | 0 | 查询下载任务tracker列表。 :param hash_string: 种子hash :param downloader: 下载器 :return: 下载器名称到tracker列表的映射 | STRING |
| HIGH | app/modules/qbittorrent/__init__.py | 0 | 查询下载任务tracker列表。 :param hash_string: 种子hash :param downloader: 下载器 :return: 下载器名称到tracker列表的映射 | STRING |
| HIGH | app/modules/transmission/__init__.py | 0 | 查询下载任务tracker列表。 :param hash_string: 种子hash :param downloader: 下载器 :return: 下载器名称到tracker列表的映射 | STRING |
| HIGH | app/chain/__init__.py | 0 | 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 :param itemid: 媒体服务器itemid :param server: 媒体服务器名称 :return: 如不存在返回none,存在时返回信息,包括每季已 | STRING |
| HIGH | app/modules/jellyfin/__init__.py | 0 | 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 :param itemid: 媒体服务器itemid :param server: 媒体服务器名称 :return: 如不存在返回none,存在时返回信息,包括每季已 | STRING |
| HIGH | app/modules/trimemedia/__init__.py | 0 | 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 :param itemid: 媒体服务器itemid :param server: 媒体服务器名称 :return: 如不存在返回none,存在时返回信息,包括每季已 | STRING |
| HIGH | app/modules/emby/__init__.py | 0 | 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 :param itemid: 媒体服务器itemid :param server: 媒体服务器名称 :return: 如不存在返回none,存在时返回信息,包括每季已 | STRING |
| HIGH | app/modules/plex/__init__.py | 0 | 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 :param itemid: 媒体服务器itemid :param server: 媒体服务器名称 :return: 如不存在返回none,存在时返回信息,包括每季已 | STRING |
| HIGH | app/modules/zspace/__init__.py | 0 | 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 :param itemid: 媒体服务器itemid :param server: 媒体服务器名称 :return: 如不存在返回none,存在时返回信息,包括每季已 | STRING |
| HIGH | app/chain/__init__.py | 0 | 发送媒体信息选择列表 :param message: 消息体 :param medias: 媒体列表 :return: 成功或失败 | STRING |
| HIGH | app/modules/telegram/__init__.py | 0 | 发送媒体信息选择列表 :param message: 消息体 :param medias: 媒体列表 :return: 成功或失败 | STRING |
| HIGH | app/modules/synologychat/__init__.py | 0 | 发送媒体信息选择列表 :param message: 消息体 :param medias: 媒体列表 :return: 成功或失败 | STRING |
| HIGH | app/chain/__init__.py | 0 | 发送种子信息选择列表 :param message: 消息体 :param torrents: 种子列表 :return: 成功或失败 | STRING |
| HIGH | app/modules/telegram/__init__.py | 0 | 发送种子信息选择列表 :param message: 消息体 :param torrents: 种子列表 :return: 成功或失败 | STRING |
| HIGH | app/modules/synologychat/__init__.py | 0 | 发送种子信息选择列表 :param message: 消息体 :param torrents: 种子列表 :return: 成功或失败 | STRING |
| HIGH | app/chain/__init__.py | 0 | 获取图片名称和url :param mediainfo: 媒体信息 :param season: 季号 :param episode: 集号 | STRING |
| HIGH | app/modules/fanart/__init__.py | 0 | 获取图片名称和url :param mediainfo: 媒体信息 :param season: 季号 :param episode: 集号 | STRING |
| HIGH | app/modules/themoviedb/scraper.py | 0 | 获取图片名称和url :param mediainfo: 媒体信息 :param season: 季号 :param episode: 集号 | STRING |
| HIGH | app/modules/themoviedb/__init__.py | 0 | 获取图片名称和url :param mediainfo: 媒体信息 :param season: 季号 :param episode: 集号 | STRING |
| HIGH | app/modules/douban/__init__.py | 0 | 获取图片名称和url :param mediainfo: 媒体信息 :param season: 季号 :param episode: 集号 | STRING |
| HIGH | app/modules/discord/__init__.py | 0 | 解析消息内容,返回字典,注意以下约定值: userid: 用户id username: 用户名 text: 内容 :param source: 消息来源 :param body: 请求体 :param form: 表单 :param arg | STRING |
| HIGH | app/modules/vocechat/__init__.py | 0 | 解析消息内容,返回字典,注意以下约定值: userid: 用户id username: 用户名 text: 内容 :param source: 消息来源 :param body: 请求体 :param form: 表单 :param arg | STRING |
| 57 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | database/versions/e2dbe1421fa4_2_0_3.py | 24 | CODE | |
| LOW | app/command.py | 163 | CODE | |
| LOW | app/command.py | 291 | CODE | |
| LOW | app/monitor.py | 302 | CODE | |
| LOW | app/monitor.py | 497 | CODE | |
| LOW | app/monitor.py | 599 | CODE | |
| LOW | app/monitor.py | 737 | CODE | |
| LOW | app/monitor.py | 899 | CODE | |
| LOW | app/log.py | 244 | CODE | |
| LOW | app/log.py | 364 | CODE | |
| LOW | app/scheduler.py | 60 | CODE | |
| LOW | app/scheduler.py | 338 | CODE | |
| LOW | app/scheduler.py | 997 | CODE | |
| LOW | app/scheduler.py | 1029 | CODE | |
| LOW | app/scheduler.py | 1170 | CODE | |
| LOW | app/scheduler.py | 1237 | CODE | |
| LOW | app/core/metainfo.py | 99 | CODE | |
| LOW | app/core/event.py | 522 | CODE | |
| LOW | app/core/event.py | 583 | CODE | |
| LOW | app/core/event.py | 685 | CODE | |
| LOW | app/core/event.py | 776 | CODE | |
| LOW | app/core/event.py | 787 | CODE | |
| LOW | app/core/config.py | 682 | CODE | |
| LOW | app/core/config.py | 861 | CODE | |
| LOW | app/core/security.py | 151 | CODE | |
| LOW | app/core/cache.py | 814 | CODE | |
| LOW | app/core/context.py | 410 | CODE | |
| LOW | app/core/context.py | 583 | CODE | |
| LOW | app/core/context.py | 724 | CODE | |
| LOW | app/core/plugin.py | 71 | CODE | |
| LOW | app/core/plugin.py | 186 | CODE | |
| LOW | app/core/plugin.py | 326 | CODE | |
| LOW | app/core/plugin.py | 487 | CODE | |
| LOW | app/core/plugin.py | 534 | CODE | |
| LOW | app/core/plugin.py | 835 | CODE | |
| LOW | app/core/plugin.py | 864 | CODE | |
| LOW | app/core/plugin.py | 896 | CODE | |
| LOW | app/core/plugin.py | 924 | CODE | |
| LOW | app/core/plugin.py | 949 | CODE | |
| LOW | app/core/plugin.py | 995 | CODE | |
| LOW | app/core/plugin.py | 1117 | CODE | |
| LOW | app/core/plugin.py | 1175 | CODE | |
| LOW | app/core/plugin.py | 1316 | CODE | |
| LOW | app/core/plugin.py | 1709 | CODE | |
| LOW | app/core/plugin.py | 2123 | CODE | |
| LOW | app/core/plugin.py | 2193 | CODE | |
| LOW | app/core/meta/metavideo.py | 266 | CODE | |
| LOW | app/core/meta/metavideo.py | 413 | CODE | |
| LOW | app/core/meta/metavideo.py | 452 | CODE | |
| LOW | app/core/meta/metavideo.py | 504 | CODE | |
| LOW | app/core/meta/metavideo.py | 633 | CODE | |
| LOW | app/core/meta/metavideo.py | 684 | CODE | |
| LOW | app/core/meta/metavideo.py | 753 | CODE | |
| LOW | app/core/meta/metabase.py | 145 | CODE | |
| LOW | app/core/meta/metabase.py | 449 | CODE | |
| LOW | app/core/meta/metaanime.py | 41 | CODE | |
| LOW | app/core/meta/metaanime.py | 224 | CODE | |
| LOW | app/core/meta/words.py | 93 | CODE | |
| LOW | app/core/meta/words.py | 169 | CODE | |
| LOW | app/utils/system.py | 206 | CODE | |
| 443 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL⚡ | app/modules/feishu/feishu.py | 1263 | response = self._api_client.cardkit.v1.card_element.content( | CODE |
| CRITICAL⚡ | app/modules/feishu/feishu.py | 1485 | response = self._api_client.im.v1.file.get( | CODE |
| CRITICAL⚡ | app/modules/feishu/feishu.py | 1499 | response = self._api_client.im.v1.message_resource.get( | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1147 | response = self._api_client.cardkit.v1.card.create( | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1293 | response = self._api_client.cardkit.v1.card.settings( | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1335 | response = self._api_client.im.v1.message.create(request) | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1381 | response = self._api_client.im.v1.message.reply(request) | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1421 | response = self._api_client.im.v1.image.create( | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1455 | response = self._api_client.im.v1.file.create( | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1472 | response = self._api_client.im.v1.image.get( | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1816 | response = self._api_client.im.v1.message.patch( | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1848 | response = self._api_client.im.v1.message_reaction.create( | CODE |
| CRITICAL | app/modules/feishu/feishu.py | 1882 | response = self._api_client.im.v1.message_reaction.delete( | CODE |
| CRITICAL⚡ | app/modules/rtorrent/rtorrent.py | 558 | self._proxy.throttle.down.max.set( | CODE |
| CRITICAL⚡ | app/modules/rtorrent/rtorrent.py | 563 | self._proxy.throttle.up.max.set( | CODE |
| CRITICAL | tests/test_feishu.py | 362 | client._api_client.im.v1.image.create.assert_called_once() | CODE |
| CRITICAL | tests/test_feishu.py | 677 | client._api_client.cardkit.v1.card_element.content.assert_called_once() | CODE |
| CRITICAL | tests/test_feishu.py | 736 | client._api_client.im.v1.image.create.assert_not_called() | CODE |
| CRITICAL | tests/test_feishu.py | 768 | client._api_client.im.v1.image.create.assert_not_called() | CODE |
| CRITICAL | tests/test_feishu.py | 797 | client._api_client.im.v1.image.create.assert_not_called() | CODE |
| CRITICAL | tests/test_feishu.py | 883 | client._api_client.im.v1.image.create.assert_not_called() | CODE |
| CRITICAL | tests/test_feishu.py | 1023 | client._api_client.im.v1.image.create.assert_called_once() | CODE |
| CRITICAL | tests/test_feishu.py | 1060 | client._api_client.im.v1.file.create.assert_called_once() | CODE |
| CRITICAL⚡ | tests/test_metainfo.py | 269 | r"Ha.Ha.Ha.Ha.Ha.2026.S06E([0-1][0-9]).Part1 => 哈哈哈哈哈 (2020){[tmdbid=112732;type=tv]} S06E\1.Part1 && S06 <> .Pa | CODE |
| CRITICAL⚡ | tests/test_rtorrent_compat.py | 81 | fake_proxy.throttle.down.max.set.assert_called_once_with( | CODE |
| CRITICAL⚡ | tests/test_rtorrent_compat.py | 85 | fake_proxy.throttle.up.max.set.assert_called_once_with( | CODE |
| CRITICAL⚡ | tests/test_rtorrent_compat.py | 108 | fake_proxy.throttle.down.max.set.assert_called_once_with( | CODE |
| CRITICAL⚡ | tests/test_rtorrent_compat.py | 112 | fake_proxy.throttle.up.max.set.assert_not_called() | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/agent/tools/impl/update_custom_identifiers.py | 54 | "4) Combined: '被替换词 => 替换词 && 前定位词 <> 后定位词 >> EP±N'; " | CODE |
| HIGH | app/modules/themoviedb/tmdbapi.py | 1031 | "logo_path": null, | STRING |
| HIGH | app/modules/themoviedb/tmdbapi.py | 1037 | "logo_path": null, | STRING |
| HIGH | app/modules/themoviedb/tmdbapi.py | 1441 | "deathday": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 403 | "last_episode_number": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 404 | "interest_control_info": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 412 | "head_info": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 418 | "forum_info": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 419 | "webisode": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 465 | "user": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 478 | "interest": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 551 | "raw": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 590 | "release_date": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 593 | "pre_playable_date": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 608 | "user": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 624 | "video": null, | STRING |
| HIGH | app/modules/vocechat/__init__.py | 150 | "expires_in": null, //消息过期时长,如果有大于0数字,说明该消息是个限时消息 | STRING |
| HIGH | app/modules/vocechat/__init__.py | 151 | "properties": null, //一些有关消息的元数据,比如at信息,文件消息的具体类型信息,如果是个图片消息,还会有一些宽高,图片名称等元信息 | STRING |
| HIGH | app/modules/filemanager/storages/alist.py | 436 | "hash_info": null, | STRING |
| HIGH | app/modules/filemanager/storages/alist.py | 604 | "hash_info": null, | STRING |
| HIGH | app/modules/indexer/spider/hddolby.py | 134 | "imdb_id": null, | STRING |
| HIGH | app/helper/browser.py | 806 | return style && style.visibility !== 'hidden' | CODE |
| HIGH⚡ | tests/test_metainfo.py | 259 | custom_words = ["旧名 => 新名 && 第 <> 集 >> EP+1"] | CODE |
| HIGH⚡ | tests/test_metainfo.py | 269 | r"Ha.Ha.Ha.Ha.Ha.2026.S06E([0-1][0-9]).Part1 => 哈哈哈哈哈 (2020){[tmdbid=112732;type=tv]} S06E\1.Part1 && S06 <> .Pa | CODE |
| HIGH⚡ | tests/test_metainfo.py | 287 | custom_words = ["旧名 => 新名 && 第 <> 集 >> EP+EP-1"] | CODE |
| HIGH⚡ | tests/test_metainfo.py | 299 | custom_words = ["旧名 => 新名 && 第 <> 集 >> 2EP"] | CODE |
| HIGH⚡ | tests/test_docker_entrypoint_permissions.py | 225 | MOVIEPILOT_BACKEND_READY_TIMEOUT=invalid wait_backend_ready 1 2 999999 || true | CODE |
| HIGH⚡ | tests/test_execute_command_tool.py | 136 | result = self._run_command("echo ok && rm -rf /") | CODE |
| HIGH⚡ | tests/test_execute_command_tool.py | 148 | tool.run(action="run", command="echo ok && shutdown now", timeout=1) | CODE |
| HIGH⚡ | tests/test_media_recognize_modules.py | 108 | self.assertEqual(result, "zh,en,null,ja") | CODE |
| HIGH | tests/test_publish_moviepilot_plugin_skill.py | 137 | payload = module.push( | CODE |
| HIGH⚡ | tests/test_rust_accel.py | 309 | meta = metainfo_module.MetaInfo("旧名 第03集", custom_words=["旧名 => 新名 && 第 <> 集 >> EP+1"]) | STRING |
| HIGH⚡ | tests/test_rust_accel.py | 314 | assert meta.apply_words == ["旧名 => 新名 && 第 <> 集 >> EP+1"] | STRING |
| HIGH⚡ | scripts/local_setup.py | 159 | const backendPort = Number(process.env.PORT || 3001) | STRING |
| HIGH⚡ | scripts/local_setup.py | 160 | const frontendPort = Number(process.env.NGINX_PORT || 3000) | STRING |
| HIGH⚡ | scripts/local_setup.py | 162 | const backendHealthTimeoutMs = Number(process.env.MOVIEPILOT_FRONTEND_HEALTH_TIMEOUT_MS || 3000) | STRING |
| HIGH⚡ | scripts/local_setup.py | 163 | const backendHealthIntervalMs = Number(process.env.MOVIEPILOT_FRONTEND_HEALTH_INTERVAL_MS || 15000) | STRING |
| HIGH⚡ | scripts/local_setup.py | 165 | Number(process.env.MOVIEPILOT_FRONTEND_MAX_FAILURES || 4), | STRING |
| HIGH | scripts/local_setup.py | 219 | return true | STRING |
| HIGH | scripts/local_setup.py | 226 | return false | STRING |
| HIGH | scripts/local_setup.py | 322 | console.error(`Failed to start frontend service: ${error?.message || error}`) | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | database/versions/610bb05ddeef_2_1_2.py | 8 | CODE | |
| LOW | database/versions/610bb05ddeef_2_1_2.py | 12 | CODE | |
| LOW | database/versions/e2dbe1421fa4_2_0_3.py | 8 | CODE | |
| LOW | database/versions/ca5461f314f2_2_1_0.py | 8 | CODE | |
| LOW | database/versions/ecf3c693fdf3_2_0_5.py | 8 | CODE | |
| LOW | database/versions/3df653756eec_2_1_6.py | 8 | CODE | |
| LOW | database/versions/0fb94bf69b38_2_0_2.py | 8 | CODE | |
| LOW | database/versions/3891a5e722a1_2_1_7.py | 8 | CODE | |
| LOW | database/versions/3891a5e722a1_2_1_7.py | 9 | CODE | |
| LOW | database/versions/3891a5e722a1_2_1_7.py | 10 | CODE | |
| LOW | database/versions/294b007932ef_2_0_0.py | 14 | CODE | |
| LOW | database/versions/4666ce24a443_2_1_8.py | 8 | CODE | |
| LOW | database/versions/55390f1f77c1_2_0_9.py | 8 | CODE | |
| LOW | database/versions/4b544f5d3b07_2_1_3.py | 8 | CODE | |
| LOW | database/versions/4b544f5d3b07_2_1_3.py | 12 | CODE | |
| LOW | database/versions/eaf9cbc49027_2_0_7.py | 8 | CODE | |
| LOW | database/versions/bf28a012734c_2_0_8.py | 8 | CODE | |
| LOW | app/core/meta/__init__.py | 1 | CODE | |
| LOW | app/core/meta/__init__.py | 2 | CODE | |
| LOW | app/core/meta/__init__.py | 3 | CODE | |
| LOW | app/doctor/runner.py | 1 | CODE | |
| LOW | app/doctor/formatters.py | 1 | CODE | |
| LOW | app/doctor/models.py | 1 | CODE | |
| LOW | app/doctor/checks.py | 1 | CODE | |
| LOW | app/doctor/__init__.py | 1 | CODE | |
| LOW | app/utils/stdio.py | 1 | CODE | |
| LOW | app/chain/message.py | 28 | CODE | |
| LOW | app/chain/message.py | 41 | CODE | |
| LOW | app/chain/recommend.py | 3 | CODE | |
| LOW | app/agent/runtime.py | 3 | CODE | |
| LOW | app/agent/mcp.py | 3 | CODE | |
| LOW | app/agent/tools/impl/_terminal_session.py | 3 | CODE | |
| LOW | app/agent/tools/impl/list_slash_commands.py | 6 | CODE | |
| LOW | app/agent/tools/impl/query_schedulers.py | 6 | CODE | |
| LOW | app/agent/tools/impl/query_downloaders.py | 6 | CODE | |
| LOW | app/agent/tools/impl/_command_safety.py | 3 | CODE | |
| LOW | app/agent/tools/impl/switch_persona.py | 4 | CODE | |
| LOW | app/agent/tools/impl/query_custom_identifiers.py | 6 | CODE | |
| LOW | app/agent/tools/impl/execute_command.py | 3 | CODE | |
| LOW | app/agent/llm/provider.py | 3 | CODE | |
| LOW | app/agent/llm/__init__.py | 3 | CODE | |
| LOW | app/agent/llm/__init__.py | 3 | CODE | |
| LOW | app/agent/llm/__init__.py | 3 | CODE | |
| LOW | app/agent/llm/__init__.py | 4 | CODE | |
| LOW | app/agent/llm/__init__.py | 4 | CODE | |
| LOW | app/agent/llm/__init__.py | 4 | CODE | |
| LOW | app/agent/llm/__init__.py | 4 | CODE | |
| LOW | app/agent/llm/__init__.py | 4 | CODE | |
| LOW | app/agent/llm/__init__.py | 4 | CODE | |
| LOW | app/agent/llm/__init__.py | 12 | CODE | |
| LOW | app/agent/llm/__init__.py | 12 | CODE | |
| LOW | app/agent/llm/__init__.py | 12 | CODE | |
| LOW | app/agent/llm/__init__.py | 12 | CODE | |
| LOW | app/agent/llm/capability.py | 3 | CODE | |
| LOW | app/schemas/__init__.py | 1 | CODE | |
| LOW | app/schemas/__init__.py | 2 | CODE | |
| LOW | app/schemas/__init__.py | 3 | CODE | |
| LOW | app/schemas/__init__.py | 4 | CODE | |
| LOW | app/schemas/__init__.py | 5 | CODE | |
| LOW | app/schemas/__init__.py | 6 | CODE | |
| 106 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/modules/filemanager/storages/alipan.py | 447 | # Step 4: 转换为无符号int64 | COMMENT |
| LOW | app/modules/filemanager/storages/alipan.py | 462 | # Step 8: 读取文件范围数据并编码 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 575 | # Step 1: 初始化上传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 601 | # Step 2: 处理二次认证 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 638 | # Step 3: 秒传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 674 | # Step 4: 获取上传凭证 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 686 | # Step 5: 断点续传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 703 | # Step 6: 对象存储上传 | COMMENT |
| LOW⚡ | skills/create-moviepilot-skill/SKILL.md | 43 | ### Step 1: Understand the Request | COMMENT |
| LOW⚡ | skills/create-moviepilot-skill/SKILL.md | 52 | ### Step 2: Check Existing Skills First | COMMENT |
| LOW⚡ | skills/create-moviepilot-skill/SKILL.md | 60 | ### Step 3: Choose the Skill ID and Path | COMMENT |
| LOW⚡ | skills/create-moviepilot-skill/SKILL.md | 67 | ### Step 4: Write Frontmatter Correctly | COMMENT |
| LOW | skills/create-moviepilot-skill/SKILL.md | 91 | ### Step 5: Write the Body | COMMENT |
| LOW | skills/create-moviepilot-skill/SKILL.md | 113 | ### Step 6: Add Supporting Files Only When They Help | COMMENT |
| LOW | skills/create-moviepilot-skill/SKILL.md | 121 | ### Step 7: Implement the Skill | COMMENT |
| LOW | skills/create-moviepilot-skill/SKILL.md | 135 | ### Step 8: Validate Before Finishing | COMMENT |
| LOW | skills/command-dispatch/SKILL.md | 39 | ### Step 1: Identify User Intent | COMMENT |
| LOW | skills/command-dispatch/SKILL.md | 46 | ### Step 2: Find Matching Command | COMMENT |
| LOW | skills/command-dispatch/SKILL.md | 57 | ### Step 3: Extract Parameters and Execute | COMMENT |
| LOW | skills/command-dispatch/SKILL.md | 66 | ### Step 4: Report Result | COMMENT |
| LOW⚡ | skills/generate-identifiers/SKILL.md | 132 | ### Step 1: Analyze the Problem | COMMENT |
| LOW⚡ | skills/generate-identifiers/SKILL.md | 140 | ### Step 2: Generate the Identifier Rule(s) | COMMENT |
| LOW⚡ | skills/generate-identifiers/SKILL.md | 148 | ### Step 3: Query Existing Identifiers | COMMENT |
| LOW⚡ | skills/generate-identifiers/SKILL.md | 156 | ### Step 4: Check for Duplicates | COMMENT |
| LOW⚡ | skills/generate-identifiers/SKILL.md | 163 | ### Step 5: Save the Updated Identifiers | COMMENT |
| LOW | skills/generate-identifiers/SKILL.md | 175 | ### Step 6: Verify (Optional) | COMMENT |
| LOW | skills/generate-identifiers/SKILL.md | 183 | ### Step 7: Report | COMMENT |
| LOW | skills/anysearch/README.md | 70 | ### Step 1: Detect available runtime | COMMENT |
| LOW | skills/anysearch/README.md | 88 | ### Step 2: Run entry test (probe all available runtimes) | COMMENT |
| LOW | skills/anysearch/README.md | 111 | ### Step 3: Persist recommended runtime to configuration file | COMMENT |
| LOW | skills/transfer-failed-retry/SKILL.md | 23 | ### Step 1: Query the Failed Transfer History | COMMENT |
| LOW | skills/transfer-failed-retry/SKILL.md | 44 | ### Step 2: Analyze the Failure Reason | COMMENT |
| LOW | skills/transfer-failed-retry/SKILL.md | 57 | ### Step 3: Delete the Failed History Record(s) | COMMENT |
| LOW | skills/transfer-failed-retry/SKILL.md | 65 | ### Step 4: Re-identify and Re-organize | COMMENT |
| LOW | skills/transfer-failed-retry/SKILL.md | 102 | ### Step 5: Report Result | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/plugins/__init__.py | 300 | CODE | |
| LOW | app/utils/http.py | 262 | CODE | |
| LOW | app/utils/http.py | 924 | CODE | |
| LOW | app/chain/subscribe.py | 749 | CODE | |
| LOW | app/chain/subscribe.py | 936 | CODE | |
| LOW | app/chain/download.py | 673 | CODE | |
| LOW | app/chain/download.py | 960 | CODE | |
| LOW | app/chain/__init__.py | 563 | CODE | |
| LOW | app/chain/__init__.py | 647 | CODE | |
| LOW | app/chain/__init__.py | 1248 | CODE | |
| LOW | app/chain/__init__.py | 1363 | CODE | |
| LOW | app/chain/message.py | 279 | CODE | |
| LOW | app/chain/transfer.py | 2541 | CODE | |
| LOW | app/chain/transfer.py | 3441 | CODE | |
| LOW | app/chain/recommend.py | 153 | CODE | |
| LOW | app/chain/recommend.py | 179 | CODE | |
| LOW | app/chain/recommend.py | 308 | CODE | |
| LOW | app/chain/recommend.py | 334 | CODE | |
| LOW | app/chain/search.py | 213 | CODE | |
| LOW | app/chain/search.py | 245 | CODE | |
| LOW | app/agent/__init__.py | 267 | CODE | |
| LOW | app/agent/__init__.py | 1818 | CODE | |
| LOW | app/agent/middleware/subagents.py | 979 | CODE | |
| LOW | app/agent/tools/impl/update_subscribe.py | 129 | CODE | |
| LOW | app/agent/tools/impl/update_download_tasks.py | 124 | CODE | |
| LOW | app/agent/tools/impl/update_download_tasks.py | 258 | CODE | |
| LOW | app/agent/tools/impl/update_site.py | 102 | CODE | |
| LOW | app/agent/tools/impl/browse_webpage.py | 167 | CODE | |
| LOW | app/agent/tools/impl/add_subscribe.py | 139 | CODE | |
| LOW | app/agent/tools/impl/transfer_file.py | 104 | CODE | |
| LOW | app/agent/tools/impl/transfer_file.py | 172 | CODE | |
| LOW | app/agent/tools/impl/get_search_results.py | 59 | CODE | |
| LOW | app/agent/tools/impl/execute_command.py | 446 | CODE | |
| LOW | app/agent/llm/provider.py | 1663 | CODE | |
| LOW | app/agent/llm/helper.py | 945 | CODE | |
| LOW | app/agent/llm/helper.py | 1174 | CODE | |
| LOW | app/db/agentchat_oper.py | 199 | CODE | |
| LOW | app/db/message_oper.py | 20 | CODE | |
| LOW | app/db/message_oper.py | 66 | CODE | |
| LOW | app/api/servcookie.py | 114 | CODE | |
| LOW | app/api/endpoints/subscribe.py | 604 | CODE | |
| LOW | app/api/endpoints/subscribe.py | 794 | CODE | |
| LOW | app/api/endpoints/notification.py | 89 | CODE | |
| LOW | app/api/endpoints/discover.py | 99 | CODE | |
| LOW | app/api/endpoints/discover.py | 130 | CODE | |
| LOW | app/api/endpoints/recommend.py | 192 | CODE | |
| LOW | app/api/endpoints/recommend.py | 221 | CODE | |
| LOW | app/api/endpoints/mcp.py | 50 | CODE | |
| LOW | app/modules/discord/discord.py | 406 | CODE | |
| LOW | app/modules/qbittorrent/__init__.py | 496 | CODE | |
| LOW | app/modules/qbittorrent/qbittorrent.py | 21 | CODE | |
| LOW | app/modules/feishu/feishu.py | 71 | CODE | |
| LOW | app/modules/rtorrent/__init__.py | 529 | CODE | |
| LOW | app/modules/telegram/telegram.py | 584 | CODE | |
| LOW | app/modules/telegram/telegram.py | 862 | CODE | |
| LOW | app/modules/telegram/telegram.py | 950 | CODE | |
| LOW | app/modules/filemanager/__init__.py | 415 | CODE | |
| LOW | app/modules/transmission/__init__.py | 506 | CODE | |
| LOW | app/modules/ugreen/ugreen.py | 35 | CODE | |
| LOW | app/modules/ugreen/ugreen.py | 223 | CODE | |
| 3 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/doctor/__init__.py | 12 | __all__ = [ | CODE |
| LOW | app/chain/workflow.py | 278 | def update_runtime_state(self) -> None: | CODE |
| LOW | app/chain/workflow.py | 291 | def set_node_state(self, action_id: str, state: str, message: Optional[str] = None) -> None: | CODE |
| LOW | app/chain/workflow.py | 600 | def update_progress(self) -> None: | CODE |
| LOW | app/agent/__init__.py | 692 | def _set_event_value(event_data: Any, key: str, value: Any) -> None: | CODE |
| LOW | app/agent/middleware/runtime_config.py | 42 | __all__ = ["RuntimeConfigMiddleware"] | CODE |
| LOW | app/agent/middleware/subagents.py | 1142 | __all__ = [ | CODE |
| LOW | app/agent/middleware/skills.py | 690 | __all__ = ["SKILL_TOOL_NAME", "SkillMetadata", "SkillsMiddleware"] | CODE |
| LOW | app/agent/middleware/jobs.py | 303 | __all__ = [ | CODE |
| LOW | app/agent/middleware/activity_log.py | 748 | __all__ = [ | CODE |
| LOW | app/agent/middleware/usage.py | 184 | __all__ = ["UsageMiddleware"] | CODE |
| LOW | app/agent/tools/tags.py | 40 | __all__ = ["ToolTag"] | CODE |
| LOW | app/agent/tools/impl/_terminal_session.py | 177 | def _set_nonblocking(fd: int) -> None: | CODE |
| LOW | app/agent/llm/__init__.py | 19 | __all__ = [ | CODE |
| LOW⚡ | app/agent/llm/helper.py | 888 | def _set_metadata_attr(name: str, value: Any) -> None: | CODE |
| LOW | app/testing/__init__.py | 14 | __all__ = ["stub_modules"] | CODE |
| LOW | app/api/endpoints/agent.py | 141 | def set_emit_callback(self, on_emit: Callable[[str], None]) -> None: | CODE |
| LOW | app/api/endpoints/agent.py | 236 | def set_output_callback(self, output_callback: Optional[Callable[[str], None]]) -> None: | CODE |
| LOW⚡ | app/modules/discord/discord.py | 1234 | def _update_user_chat_mapping(self, userid: str, chat_id: str) -> None: | CODE |
| LOW | app/modules/themoviedb/tmdbv3api/tmdb.py | 17 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/modules/wechatclawbot/wechatclawbot.py | 1536 | def _update_state(self, **kwargs) -> None: | CODE |
| LOW⚡ | app/modules/telegram/telegram.py | 386 | def _update_user_chat_mapping(self, userid: int, chat_id: int) -> None: | CODE |
| LOW | app/modules/filemanager/storages/__init__.py | 22 | def update_progress(percent: Union[int, float]) -> None: | CODE |
| LOW | app/helper/message.py | 368 | def set_cache_context(self, cuntent: Union[str, dict], context: dict) -> None: | CODE |
| LOW | app/helper/browser.py | 59 | def set_extra_http_headers(self, headers: dict[str, str]) -> None: | CODE |
| LOW | app/helper/browser.py | 63 | def set_default_timeout(self, timeout: int) -> None: | CODE |
| LOW | tests/test_browser_helper.py | 52 | def set_extra_http_headers(self, headers: dict[str, str]) -> None: | CODE |
| LOW | tests/test_browser_helper.py | 56 | def set_default_timeout(self, timeout: int) -> None: | CODE |
| LOW | tests/test_message_notifications.py | 37 | def _set_message_time(title: str, reg_time: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/modules/wechat/WXBizMsgCrypt3.py | 10 | # ------------------------------------------------------------------------ | COMMENT |
| MEDIUM | skills/moviepilot-api/scripts/mp-api.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/moviepilot-api/scripts/mp-api.py | 43 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/moviepilot-api/scripts/mp-api.py | 119 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/moviepilot-api/scripts/mp-api.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/moviepilot-api/scripts/mp-api.py | 159 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/moviepilot-api/scripts/mp-api.py | 161 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/moviepilot-api/scripts/mp-api.py | 224 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | skills/moviepilot-api/scripts/mp-api.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/core/config.py | 321 | # ==================== 订阅配置 ==================== | COMMENT |
| LOW | app/core/config.py | 361 | # ==================== 下载配置 ==================== | COMMENT |
| LOW | config/category.yaml | 1 | ####### 配置说明 ####### | COMMENT |
| LOW | config/category.yaml | 61 | # 12 Adventure | COMMENT |
| LOW | config/category.yaml | 81 | # 16 动画 | COMMENT |
| LOW | config/category.yaml | 101 | # ar 阿拉伯语 | COMMENT |
| LOW | config/category.yaml | 121 | # gl 加里西亚语 | COMMENT |
| LOW | config/category.yaml | 141 | # mk 马其顿语 | COMMENT |
| LOW | config/category.yaml | 161 | # sw 斯瓦希里语 | COMMENT |
| LOW | config/category.yaml | 181 | # AR 阿根廷 | COMMENT |
| LOW | config/category.yaml | 201 | # IT 意大利 | COMMENT |
| LOW | config/category.yaml | 221 | # TW 中国台湾 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/modules/filemanager/storages/alipan.py | 447 | # Step 4: 转换为无符号int64 | COMMENT |
| LOW | app/modules/filemanager/storages/alipan.py | 462 | # Step 8: 读取文件范围数据并编码 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 575 | # Step 1: 初始化上传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 601 | # Step 2: 处理二次认证 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 638 | # Step 3: 秒传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 674 | # Step 4: 获取上传凭证 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 686 | # Step 5: 断点续传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 703 | # Step 6: 对象存储上传 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/helper/browser.py | 823 | || el.getAttribute('placeholder') | CODE |
| LOW | app/helper/browser.py | 834 | placeholder: el.getAttribute('placeholder') || '', | CODE |
| LOW | tests/test_telegram.py | 40 | telegram = Telegram(TELEGRAM_TOKEN="fake_token", TELEGRAM_CHAT_ID="fake_chat_id") | CODE |
| LOW | tests/test_browser_helper.py | 116 | "placeholder": "", | CODE |
| LOW | tests/test_feedback_issue_scripts.py | 155 | "hunter2", "user@example.com", "/Users/alice/"): | CODE |
| LOW | scripts/local_setup.py | 2114 | "placeholder": str(param_conf.get("placeholder") or "").strip(), | CODE |
| LOW | scripts/local_setup.py | 2180 | placeholder = str(param_meta.get("placeholder") or "").strip() | CODE |
| LOW | skills/feedback-issue/scripts/feedback_issue_common.py | 75 | "lorem ipsum", "dolor sit amet", | CODE |
| LOW | skills/feedback-issue/scripts/feedback_issue_common.py | 75 | "lorem ipsum", "dolor sit amet", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | skills/anysearch/scripts/shared/doc_spec.md | 210 | {{LANG_INVOKE}} search "climate change policy 2025" --api_key <your_api_key> --max_results 3 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_agent_background_output.py | 58 | CODE | |
| MEDIUM | tests/test_agent_background_output.py | 65 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/agent/middleware/subagents.py | 414 | async def run_task( | CODE |
| LOW | app/startup/plugins_initializer.py | 35 | async def execute_task(loop, task_func, task_name): | CODE |
| LOW | tests/test_scheduler_progress.py | 127 | async def run_task(): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/modules/wechat/wechat.py | 422 | # Read file content into memory to avoid file handle issues | COMMENT |
| LOW | app/modules/telegram/telegram.py | 154 | # Check if we should process this message | COMMENT |