NAS媒体库自动化管理工具
This report summarizes scanner evidence for jxxghp/MoviePilot, a Python project with 11,862 GitHub stars. SynthScan examined 787,390 lines of code across 2422 source files, recording 16672 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 22.1 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 13747 finding(s).
Are imports declared and package/API names verified? 841 finding(s).
Are wrappers, guards, and repeated structures necessary? 15021 finding(s).
Which changes need focused human review? 16672 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 16672 distinct pattern matches across 19 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| 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/f6d8b0c2e4a7_3_0_17.py | 308 | def _normalize_legacy_planning_states() -> None: | CODE |
| LOW | database/versions/f6d8b0c2e4a7_3_0_17.py | 441 | def _checkpoint_steps_complete(row: dict[str, Any]) -> bool: | CODE |
| LOW | database/versions/f6d8b0c2e4a7_3_0_17.py | 634 | def _reconcile_execution_states() -> None: | CODE |
| LOW | database/versions/5f2a9c1e7b4d_3_0_12.py | 58 | def _backfill_declared_metadata() -> None: | CODE |
| LOW | database/versions/7f5c1d2e3a4b_3_0_3.py | 92 | def _make_src_storage_required(inspector: sa.Inspector) -> None: | CODE |
| LOW | database/versions/a9d4f2c7e6b1_3_0_18.py | 147 | def _repair_user_config_unique() -> None: | CODE |
| LOW | database/versions/a9d4f2c7e6b1_3_0_18.py | 243 | def _drop_user_config_foreign_key() -> None: | CODE |
| LOW | database/versions/a9d4f2c7e6b1_3_0_18.py | 297 | def _normalize_duplicate_names() -> None: | CODE |
| LOW | database/versions/8a4c7e1d2f90_3_0_2.py | 120 | def _normalize_existing_sources(table_name: str) -> None: | CODE |
| LOW | database/versions/8a4c7e1d2f90_3_0_2.py | 140 | def _clear_invalid_or_partial_identity(table_name: str) -> None: | CODE |
| LOW | database/versions/8a4c7e1d2f90_3_0_2.py | 169 | def _backfill_prefixed_media_id(table_name: str, columns: set[str]) -> None: | CODE |
| LOW | database/versions/8a4c7e1d2f90_3_0_2.py | 331 | def _ensure_identity_constraints() -> None: | CODE |
| LOW | database/versions/8a4c7e1d2f90_3_0_2.py | 350 | def _drop_identity_constraints() -> None: | CODE |
| LOW | database/versions/e5c7a9b1d3f6_3_0_16.py | 182 | def _repair_unique_constraints( | CODE |
| LOW | database/versions/e5c7a9b1d3f6_3_0_16.py | 295 | def _validate_or_recreate_empty_table( | CODE |
| LOW | database/versions/e5c7a9b1d3f6_3_0_16.py | 532 | def _create_or_repair_step_table() -> None: | CODE |
| LOW | database/versions/e5c7a9b1d3f6_3_0_16.py | 608 | def _create_or_repair_receipt_table() -> None: | CODE |
| LOW | database/versions/e5c7a9b1d3f6_3_0_16.py | 650 | def _backfill_legacy_review_steps() -> None: | CODE |
| LOW | database/versions/e5c7a9b1d3f6_3_0_16.py | 792 | def _mark_downgrade_uncertain() -> None: | CODE |
| LOW | database/versions/b1e7d3f5a9c2_3_0_13.py | 36 | def _repair_task_id_constraint() -> None: | CODE |
| LOW | database/versions/b1e7d3f5a9c2_3_0_13.py | 58 | def _repair_state_created_index() -> None: | CODE |
| LOW | database/versions/b1e7d3f5a9c2_3_0_13.py | 81 | def _backfill_admission_state() -> None: | CODE |
| LOW | database/versions/e3d9f4b7c806_3_0_4.py | 50 | def _is_current_schema_precreated() -> bool: | CODE |
| LOW | database/versions/e3d9f4b7c806_3_0_4.py | 67 | def _validate_or_recreate_table() -> None: | CODE |
| LOW | database/versions/e3d9f4b7c806_3_0_4.py | 110 | def _repair_storage_path_index() -> None: | CODE |
| LOW | database/versions/d8f2b6a4c1e7_3_0_28.py | 162 | def _optional_library_category(value: object) -> tuple[Optional[str], bool]: | CODE |
| LOW | database/versions/d8f2b6a4c1e7_3_0_28.py | 199 | def _empty_classification_snapshot() -> dict[str, object]: | CODE |
| LOW | database/versions/a946dae52526_2_2_1.py | 39 | def migrate_postgresql_userid(connection): | CODE |
| LOW | app/command.py | 34 | def _finish_command_processing_status(status: Optional[dict], user_id: Optional[str] = None) -> None: | CODE |
| LOW | app/command.py | 171 | def __init_commands_background(self, pid: Optional[str] = None) -> None: | CODE |
| LOW | app/command.py | 240 | def __trigger_register_commands_event(self) -> tuple[Optional[Event], dict]: | CODE |
| LOW | app/__init__.py | 14 | def _configure_free_threaded_windows_native_dependencies() -> None: | CODE |
| LOW | app/__init__.py | 29 | def _filter_third_party_startup_warnings() -> None: | CODE |
| LOW | app/factory.py | 48 | def _get_http_exception_message(detail: Any) -> str: | CODE |
| LOW | app/factory.py | 60 | def _localize_exception_message(request: Request, message: str) -> str: | CODE |
| LOW | app/factory.py | 84 | def _native_ai_error_response( | CODE |
| LOW | app/factory.py | 127 | def _mcp_jsonrpc_error_response( | CODE |
| LOW | app/factory.py | 145 | def _protocol_validation_error_response( | CODE |
| LOW | app/factory.py | 195 | async def localized_http_exception_handler( | CODE |
| LOW | app/factory.py | 241 | async def persistence_unavailable_handler( | CODE |
| LOW | app/factory.py | 256 | async def localized_validation_exception_handler( | CODE |
| LOW | app/factory.py | 289 | async def localized_unhandled_exception_handler( | CODE |
| LOW | app/factory.py | 395 | async def locale_context_middleware( | CODE |
| LOW | app/cli.py | 260 | def _mark_prepared_update_failed(message: str) -> None: | CODE |
| LOW | app/cli.py | 296 | def _validate_prepared_resource_files(manifest: Dict[str, Any]) -> Path: | CODE |
| LOW | app/cli.py | 383 | def _apply_prepared_release_update() -> bool: | CODE |
| LOW | app/cli.py | 481 | def _resolve_dev_update_target(mode: str) -> Optional[str]: | CODE |
| LOW | app/cli.py | 549 | def _ensure_frontend_not_running_alone(timeout: int) -> None: | CODE |
| LOW | app/cli.py | 787 | def _parse_tool_argument_value(value: str) -> Any: | CODE |
| LOW | app/cli.py | 921 | def _wait_until_backend_ready(runtime: Dict[str, Any], timeout: int) -> Dict[str, Any]: | CODE |
| LOW | app/cli.py | 941 | def _wait_until_frontend_ready(runtime: Dict[str, Any], timeout: int) -> Dict[str, Any]: | CODE |
| LOW | app/cli.py | 1066 | def _installed_frontend_version() -> Optional[str]: | CODE |
| LOW | app/main.py | 14 | def _prepare_direct_execution_import_path() -> None: | CODE |
| LOW | app/monitor/dispatcher.py | 106 | def is_transfer_candidate_path(self, file_path: Path) -> bool: | CODE |
| LOW | app/monitor/monitor.py | 364 | def __abort_interrupted_startup(self) -> None: | CODE |
| LOW | app/monitor/monitor.py | 805 | def __collect_compensation_files(self, mon_path: Path) -> Optional[List[Tuple[Path, float, int]]]: | CODE |
| LOW | app/monitor/monitor.py | 874 | def __dispatcher_retry_abandoned(storage: str, event_path: Path, reason: str) -> None: | CODE |
| LOW | app/monitor/watcher.py | 359 | def _process_pending_stability(self) -> None: | CODE |
| 12771 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | database/versions/e2dbe1421fa4_2_0_3.py | 68 | 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 | 234 | except Exception as e: | CODE |
| LOW | app/command.py | 434 | except Exception as err: | CODE |
| LOW | app/cli.py | 1098 | except Exception as error: | CODE |
| LOW | app/cli.py | 1109 | except Exception as error: | CODE |
| LOW | app/cli.py | 1125 | except Exception as error: | CODE |
| LOW | app/cli.py | 1146 | except Exception as error: | CODE |
| LOW | app/cli.py | 1161 | except Exception: | CODE |
| MEDIUM | app/cli.py | 233 | def _git_current_branch() -> Optional[str]: | CODE |
| LOW | app/monitor/dispatcher.py | 143 | except Exception as err: | CODE |
| LOW | app/monitor/dispatcher.py | 269 | except Exception as err: | CODE |
| LOW | app/monitor/dispatcher.py | 468 | except Exception as e: | CODE |
| LOW | app/monitor/dispatcher.py | 495 | except Exception as err: | CODE |
| LOW | app/monitor/monitor.py | 433 | except Exception as e: | CODE |
| LOW | app/monitor/monitor.py | 490 | except Exception as e: | CODE |
| LOW | app/monitor/monitor.py | 678 | except Exception as e: | CODE |
| LOW | app/monitor/monitor.py | 751 | except Exception: | CODE |
| LOW | app/monitor/monitor.py | 931 | except Exception as e: | CODE |
| LOW | app/monitor/monitor.py | 1045 | except Exception as err: | CODE |
| LOW | app/monitor/monitor.py | 1058 | except Exception as err: | CODE |
| LOW | app/monitor/monitor.py | 1153 | except Exception as err: | CODE |
| LOW | app/monitor/monitor.py | 1166 | except Exception as err: | CODE |
| LOW | app/monitor/recovery.py | 194 | except Exception as err: | CODE |
| LOW | app/monitor/recovery.py | 215 | except Exception as err: | CODE |
| LOW | app/monitor/recovery.py | 231 | except Exception as err: | CODE |
| LOW | app/monitor/poller.py | 159 | except Exception as e: | CODE |
| LOW | app/monitor/poller.py | 261 | except Exception as e: | CODE |
| LOW | app/monitor/poller.py | 282 | except Exception as e: | CODE |
| LOW | app/monitor/watcher.py | 218 | except Exception as err: | CODE |
| LOW | app/monitor/watcher.py | 316 | except Exception as err: | CODE |
| LOW | app/monitor/watcher.py | 417 | except Exception as err: | CODE |
| LOW | app/monitor/watcher.py | 617 | except Exception as err: | CODE |
| LOW | app/monitor/syslimits.py | 25 | except Exception as err: | CODE |
| LOW⚡ | app/monitor/syslimits.py | 58 | except Exception as e: | CODE |
| LOW⚡ | app/monitor/syslimits.py | 65 | except Exception as e: | CODE |
| LOW⚡ | app/monitor/syslimits.py | 67 | except Exception as e: | CODE |
| LOW | app/monitor/snapshot.py | 74 | except Exception as e: | CODE |
| LOW | app/monitor/snapshot.py | 98 | except Exception as e: | CODE |
| LOW | app/monitor/snapshot.py | 126 | except Exception as e: | CODE |
| LOW | app/monitor/snapshot.py | 146 | except Exception as err: | CODE |
| LOW | app/doctor/runner.py | 48 | except Exception as err: | CODE |
| LOW | app/runtime/execution.py | 218 | except Exception as error: | CODE |
| LOW | app/runtime/tasks.py | 133 | except Exception as caught: | CODE |
| LOW | app/runtime/config.py | 1165 | except Exception as e: | CODE |
| LOW | app/runtime/config.py | 1401 | except Exception as err: | CODE |
| LOW | app/runtime/config.py | 1445 | except Exception: | CODE |
| LOW | app/runtime/gc.py | 84 | except Exception as e: | CODE |
| LOW | app/runtime/log.py | 479 | except Exception as err: | CODE |
| LOW | app/runtime/log.py | 533 | except Exception as err: | CODE |
| LOW | app/runtime/log.py | 547 | except Exception as err: | CODE |
| LOW | app/runtime/log.py | 937 | except Exception: | CODE |
| LOW | app/runtime/events.py | 249 | except Exception as e: | CODE |
| LOW | app/runtime/events.py | 294 | except Exception as e: | CODE |
| LOW | app/runtime/events.py | 440 | except Exception as err: | CODE |
| LOW | app/runtime/coalesce.py | 209 | except Exception as exc: # noqa: BLE001 - 基础设施不能因消费者异常崩溃 | CODE |
| LOW | app/runtime/state.py | 239 | except Exception as error: | CODE |
| 1553 more matches not shown… | ||||
| 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/ca5461f314f2_2_1_0.py | 8 | CODE | |
| LOW | database/versions/ecf3c693fdf3_2_0_5.py | 8 | CODE | |
| LOW | database/versions/0fb94bf69b38_2_0_2.py | 8 | CODE | |
| LOW | database/versions/3891a5e722a1_2_1_7.py | 11 | 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/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/runtime/tasks.py | 3 | CODE | |
| LOW | app/runtime/log.py | 3 | CODE | |
| LOW | app/runtime/events.py | 32 | CODE | |
| LOW | app/runtime/stop.py | 3 | CODE | |
| LOW | app/runtime/webpush.py | 3 | CODE | |
| LOW | app/runtime/loop.py | 3 | CODE | |
| LOW | app/runtime/settings.py | 3 | CODE | |
| LOW | app/runtime/resources.py | 3 | CODE | |
| LOW | app/runtime/correlation.py | 3 | CODE | |
| LOW | app/runtime/compat/resources.py | 3 | CODE | |
| LOW | app/runtime/capabilities/registry.py | 1 | CODE | |
| LOW | app/runtime/capabilities/__init__.py | 3 | CODE | |
| LOW | app/runtime/capabilities/runtime.py | 1 | CODE | |
| LOW | app/runtime/capabilities/model.py | 1 | CODE | |
| LOW | app/runtime/dependencies/profile.py | 3 | CODE | |
| LOW | app/runtime/dependencies/native.py | 3 | CODE | |
| LOW | app/runtime/observability/__init__.py | 3 | CODE | |
| LOW | app/runtime/extensions/resource.py | 3 | CODE | |
| LOW | app/runtime/extensions/module/dispatcher.py | 3 | CODE | |
| LOW | app/runtime/extensions/module/adapter.py | 1 | CODE | |
| LOW | app/runtime/extensions/module/contracts.py | 3 | CODE | |
| LOW | app/runtime/extensions/module/quality.py | 3 | CODE | |
| LOW | app/runtime/extensions/module/manager.py | 1 | CODE | |
| LOW | app/runtime/extensions/plugin/catalog.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/sync.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/gil.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/system.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/metadata.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/monitor.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/paths.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/classification.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/loglevel.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/database.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/tools.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/datadir.py | 8 | CODE | |
| LOW | app/runtime/extensions/plugin/runtime.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/loader.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/lifecycle.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/storage.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/target.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/admission.py | 3 | CODE | |
| LOW | app/runtime/extensions/plugin/clone.py | 3 | CODE | |
| LOW | app/runtime/event/registry.py | 3 | CODE | |
| LOW | app/runtime/event/dispatch.py | 3 | CODE | |
| 666 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | app/cli.py | 1165 | except click.ClickException: | CODE |
| HIGH | app/runtime/tasks.py | 146 | except concurrent.futures.InvalidStateError: | CODE |
| HIGH | app/runtime/tasks.py | 182 | except RuntimeError: | CODE |
| HIGH | app/runtime/log.py | 621 | except queue.Full: | CODE |
| HIGH | app/runtime/log.py | 724 | except ValueError: | CODE |
| HIGH | app/runtime/cache.py | 465 | except KeyError: | CODE |
| HIGH | app/runtime/debounce.py | 254 | except asyncio.CancelledError: | CODE |
| HIGH | app/runtime/capabilities/runtime.py | 236 | except Exception: | CODE |
| HIGH | app/runtime/extensions/plugin/loader.py | 410 | except AttributeError: | CODE |
| HIGH | app/scheduler/oncejob.py | 107 | except JobLookupError: | CODE |
| HIGH | app/scheduler/reconcile.py | 177 | except JobLookupError: | CODE |
| HIGH | app/scheduler/reconcile.py | 200 | except JobLookupError: | CODE |
| HIGH | app/scheduler/reconcile.py | 306 | except JobLookupError: | CODE |
| HIGH | app/scheduler/reconcile.py | 355 | except JobLookupError: | CODE |
| HIGH | app/chain/media/album.py | 312 | except Exception: # pylint: disable=broad-except | CODE |
| HIGH | app/agent/tasks.py | 201 | except asyncio.CancelledError: | CODE |
| HIGH | app/agent/session.py | 975 | except BaseException: | CODE |
| HIGH | app/agent/session.py | 785 | except Exception: | CODE |
| HIGH | app/agent/lifecycle.py | 60 | except asyncio.CancelledError: | CODE |
| HIGH | app/agent/middleware/selection.py | 624 | except json.JSONDecodeError: | CODE |
| HIGH | app/agent/tools/base.py | 400 | except Exception: | CODE |
| HIGH | app/agent/tools/base.py | 404 | except RuntimeError: | CODE |
| HIGH | app/agent/tools/impl/edit_file.py | 162 | except (OSError, ValueError): | CODE |
| HIGH | app/agent/tools/impl/browse_webpage.py | 741 | except Exception: | CODE |
| HIGH | app/agent/tools/impl/execute_command.py | 429 | except ProcessLookupError: | CODE |
| HIGH | app/agent/tools/impl/execute_command.py | 448 | except asyncio.TimeoutError: | CODE |
| HIGH | app/agent/memory/__init__.py | 100 | except asyncio.CancelledError: | CODE |
| HIGH | app/agent/terminal/session.py | 148 | except OSError: | CODE |
| HIGH | app/agent/terminal/manager.py | 771 | except ProcessLookupError: | CODE |
| HIGH | app/agent/terminal/manager.py | 555 | except ProcessLookupError: | CODE |
| HIGH | app/agent/callback/__init__.py | 869 | except asyncio.CancelledError: | CODE |
| HIGH | app/agent/callback/__init__.py | 886 | except asyncio.CancelledError: | CODE |
| HIGH | app/agent/policy/sanitizer.py | 765 | except (TypeError, ValueError, json.JSONDecodeError): | CODE |
| HIGH | app/agent/policy/orchestrator.py | 50 | except Exception: | CODE |
| HIGH | app/schemas/types.py | 153 | except ValueError: | CODE |
| HIGH | app/testing/bootstrap.py | 157 | except ImportError: | CODE |
| HIGH | app/testing/bootstrap.py | 107 | except Exception: | CODE |
| HIGH | app/adapters/cache/redis.py | 410 | except Exception: | CODE |
| HIGH | app/adapters/cache/redis.py | 421 | except Exception: | CODE |
| HIGH | app/adapters/cache/redis.py | 488 | except Exception: | CODE |
| HIGH | app/adapters/network/browser.py | 744 | except Exception: | CODE |
| HIGH | app/adapters/network/browser.py | 1226 | except Exception: | CODE |
| HIGH | app/adapters/network/http.py | 301 | except Exception: # pragma: no cover - 防御性 | CODE |
| HIGH | app/adapters/network/http.py | 1084 | except Exception: | CODE |
| HIGH | app/adapters/network/http.py | 389 | except ValueError: | CODE |
| HIGH | app/adapters/network/http.py | 544 | except Exception: | CODE |
| HIGH | app/adapters/network/http.py | 876 | except Exception: | CODE |
| HIGH | app/adapters/network/http.py | 1297 | except Exception: | CODE |
| HIGH | app/adapters/system/update.py | 172 | except (OSError, json.JSONDecodeError): | CODE |
| HIGH | app/adapters/system/update.py | 1132 | except (OSError, json.JSONDecodeError): | CODE |
| HIGH | app/adapters/system/host.py | 206 | except (asyncio.TimeoutError, asyncio.CancelledError): | CODE |
| HIGH | app/adapters/system/host.py | 218 | except (ProcessLookupError, OSError): | CODE |
| HIGH | app/adapters/system/host.py | 247 | except (ProcessLookupError, OSError): | CODE |
| HIGH | app/adapters/system/host.py | 728 | except OSError: | CODE |
| HIGH | app/adapters/system/host.py | 198 | except (ProcessLookupError, OSError): | CODE |
| HIGH | app/adapters/system/host.py | 569 | except (OSError, PermissionError): | CODE |
| HIGH | app/adapters/system/host.py | 698 | except (OSError, PermissionError): | CODE |
| HIGH | app/adapters/system/host.py | 800 | except OSError: | CODE |
| HIGH | app/adapters/system/host.py | 934 | except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): | CODE |
| HIGH | app/adapters/system/host.py | 227 | except (ProcessLookupError, OSError): | CODE |
| 67 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | database/versions/e2dbe1421fa4_2_0_3.py | 20 | CODE | |
| LOW | database/versions/3891a5e722a1_2_1_7.py | 21 | CODE | |
| LOW | database/versions/e5c7a9b1d3f6_3_0_16.py | 863 | CODE | |
| LOW | app/command.py | 171 | CODE | |
| LOW | app/command.py | 299 | CODE | |
| LOW | app/monitor/dispatcher.py | 124 | CODE | |
| LOW | app/monitor/monitor.py | 372 | CODE | |
| LOW | app/monitor/monitor.py | 437 | CODE | |
| LOW | app/monitor/monitor.py | 493 | CODE | |
| LOW | app/monitor/monitor.py | 606 | CODE | |
| LOW | app/monitor/monitor.py | 805 | CODE | |
| LOW | app/monitor/poller.py | 82 | CODE | |
| LOW | app/monitor/poller.py | 220 | CODE | |
| LOW | app/monitor/watcher.py | 492 | CODE | |
| LOW | app/monitor/syslimits.py | 41 | CODE | |
| LOW | app/runtime/config.py | 938 | CODE | |
| LOW | app/runtime/config.py | 1132 | CODE | |
| LOW | app/runtime/log.py | 927 | CODE | |
| LOW | app/runtime/log.py | 501 | CODE | |
| LOW | app/runtime/log.py | 600 | CODE | |
| LOW | app/runtime/log.py | 685 | CODE | |
| LOW | app/runtime/log.py | 785 | CODE | |
| LOW | app/runtime/events.py | 485 | CODE | |
| LOW | app/runtime/events.py | 804 | CODE | |
| LOW | app/runtime/events.py | 853 | CODE | |
| LOW | app/runtime/events.py | 867 | CODE | |
| LOW | app/runtime/localization.py | 45 | CODE | |
| LOW | app/runtime/compat/diagnostics.py | 143 | CODE | |
| LOW | app/runtime/compat/imports.py | 152 | CODE | |
| LOW | app/runtime/compat/resources.py | 61 | CODE | |
| LOW | app/runtime/compat/resources.py | 104 | CODE | |
| LOW | app/runtime/capabilities/runtime.py | 1303 | CODE | |
| LOW | app/runtime/capabilities/runtime.py | 1391 | CODE | |
| LOW | app/runtime/observability/__init__.py | 96 | CODE | |
| LOW | app/runtime/observability/__init__.py | 99 | CODE | |
| LOW | app/runtime/extensions/module/manager.py | 164 | CODE | |
| LOW | app/runtime/extensions/plugin/sync.py | 40 | CODE | |
| LOW | app/runtime/extensions/plugin/monitor.py | 163 | CODE | |
| LOW | app/runtime/extensions/plugin/paths.py | 118 | CODE | |
| LOW | app/runtime/extensions/plugin/tools.py | 33 | CODE | |
| LOW | app/runtime/extensions/plugin/loader.py | 362 | CODE | |
| LOW | app/runtime/extensions/plugin/lifecycle.py | 119 | CODE | |
| LOW | app/runtime/extensions/plugin/lifecycle.py | 378 | CODE | |
| LOW | app/runtime/extensions/plugin/storage.py | 439 | CODE | |
| LOW | app/runtime/extensions/plugin/admission.py | 60 | CODE | |
| LOW | app/runtime/extensions/plugin/projection.py | 68 | CODE | |
| LOW | app/runtime/extensions/plugin/projection.py | 101 | CODE | |
| LOW | app/runtime/extensions/plugin/projection.py | 123 | CODE | |
| LOW | app/runtime/extensions/plugin/projection.py | 256 | CODE | |
| LOW | app/runtime/extensions/plugin/projection.py | 497 | CODE | |
| LOW | app/runtime/extensions/plugin/manager.py | 274 | CODE | |
| LOW | app/runtime/extensions/plugin/manager.py | 367 | CODE | |
| LOW | app/runtime/extensions/plugin/manager.py | 397 | CODE | |
| LOW | app/runtime/extensions/plugin/manager.py | 584 | CODE | |
| LOW | app/runtime/extensions/plugin/manager.py | 636 | CODE | |
| LOW | app/runtime/extensions/plugin/manager.py | 660 | CODE | |
| LOW | app/runtime/event/dispatch.py | 303 | CODE | |
| LOW | app/runtime/event/dispatch.py | 331 | CODE | |
| LOW | app/scheduler/execution.py | 350 | CODE | |
| LOW | app/scheduler/bridge.py | 24 | CODE | |
| 680 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | database/versions/e8b1c4d7a2f9_2_2_18.py | 0 | { 'title': '{{ title_year }}' '{% if season_episode %} {{ season_episode }}{% endif %} 已入库', 'text': '{% if vote_average | STRING |
| HIGH | database/versions/89d24811e894_2_1_4.py | 0 | { 'title': '{{ title_year }}' '{% if season_episode %} {{ season_episode }}{% endif %} 已入库', 'text': '{% if vote_average | STRING |
| HIGH | tests/test_database_migration_startup.py | 0 | { 'title': '{{ title_year }}' '{% if season_episode %} {{ season_episode }}{% endif %} 已入库', 'text': '{% if vote_average | STRING |
| HIGH | database/versions/e8b1c4d7a2f9_2_2_18.py | 0 | { 'title': '{{ title_year }}' '{% if download_episodes %} {{ season_fmt }} {{ download_episodes }}{% else %}{{ season_ep | STRING |
| HIGH | database/versions/89d24811e894_2_1_4.py | 0 | { 'title': '{{ title_year }}' '{% if download_episodes %} {{ season_fmt }} {{ download_episodes }}{% else %}{{ season_ep | STRING |
| HIGH | tests/test_database_migration_startup.py | 0 | { 'title': '{{ title_year }}' '{% if download_episodes %} {{ season_fmt }} {{ download_episodes }}{% else %}{{ season_ep | STRING |
| HIGH | database/versions/e8b1c4d7a2f9_2_2_18.py | 0 | { 'title': '{{ title_year }}{% if track_number %} #{{ track_number }}{% endif %}' '{% if season_episode %} {{ season_epi | STRING |
| HIGH | database/versions/4dadad1d161a_3_0_0.py | 0 | { 'title': '{{ title_year }}{% if track_number %} #{{ track_number }}{% endif %}' '{% if season_episode %} {{ season_epi | STRING |
| HIGH | tests/test_notification_template_render.py | 0 | { 'title': '{{ title_year }}{% if track_number %} #{{ track_number }}{% endif %}' '{% if season_episode %} {{ season_epi | STRING |
| HIGH | app/chain/_messaging.py | 0 | 发送媒体信息选择列表 :param message: 消息体 :param medias: 媒体列表 :return: 成功或失败 | STRING |
| HIGH | app/modules/telegram/module.py | 0 | 发送媒体信息选择列表 :param message: 消息体 :param medias: 媒体列表 :return: 成功或失败 | STRING |
| HIGH | app/modules/synologychat/__init__.py | 0 | 发送媒体信息选择列表 :param message: 消息体 :param medias: 媒体列表 :return: 成功或失败 | STRING |
| HIGH | app/chain/_messaging.py | 0 | 发送种子信息选择列表 :param message: 消息体 :param torrents: 种子列表 :return: 成功或失败 | STRING |
| HIGH | app/modules/telegram/module.py | 0 | 发送种子信息选择列表 :param message: 消息体 :param torrents: 种子列表 :return: 成功或失败 | STRING |
| HIGH | app/modules/synologychat/__init__.py | 0 | 发送种子信息选择列表 :param message: 消息体 :param torrents: 种子列表 :return: 成功或失败 | STRING |
| HIGH | app/chain/scraping.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/base.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/base.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/base.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/module.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/base.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/base.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/base.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/base.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/base.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/base.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/base.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/base.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/_base/mediaserver.py | 0 | 判断媒体文件是否存在 :param mediainfo: 识别的媒体信息 :param itemid: 媒体服务器itemid :param server: 媒体服务器名称 :return: 如不存在返回none,存在时返回信息,包括每季已 | STRING |
| HIGH | app/chain/base.py | 0 | 获取图片名称和url :param mediainfo: 媒体信息 :param season: 季号 :param episode: 集号 | STRING |
| 59 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | app/agent/guardrails/controller.py | 609 | "For terminal failures, run a small diagnostic such as `pwd && ls -la` " | CODE |
| HIGH | app/agent/learning/matching.py | 353 | # (upstream report: cline/cline#13970 — Kimi K3 looped on old_text: null). | COMMENT |
| HIGH | app/adapters/network/browser.py | 988 | return style && style.visibility !== 'hidden' | CODE |
| HIGH⚡ | app/application/security/cookie.py | 351 | xpath, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null | STRING |
| HIGH | app/modules/themoviedb/tmdbapi.py | 1295 | "logo_path": null, | STRING |
| HIGH | app/modules/themoviedb/tmdbapi.py | 1301 | "logo_path": null, | STRING |
| HIGH | app/modules/themoviedb/tmdbapi.py | 1710 | "deathday": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 1159 | "last_episode_number": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 1160 | "interest_control_info": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 1168 | "head_info": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 1174 | "forum_info": null, | STRING |
| HIGH⚡ | app/modules/douban/__init__.py | 1175 | "webisode": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 1221 | "user": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 1234 | "interest": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 1307 | "raw": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 1346 | "release_date": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 1349 | "pre_playable_date": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 1364 | "user": null, | STRING |
| HIGH | app/modules/douban/__init__.py | 1380 | "video": null, | STRING |
| HIGH | app/modules/vocechat/__init__.py | 128 | "expires_in": null, //消息过期时长,如果有大于0数字,说明该消息是个限时消息 | STRING |
| HIGH | app/modules/vocechat/__init__.py | 129 | "properties": null, //一些有关消息的元数据,比如at信息,文件消息的具体类型信息,如果是个图片消息,还会有一些宽高,图片名称等元信息 | STRING |
| HIGH | app/modules/filemanager/storages/alist.py | 452 | "hash_info": null, | STRING |
| HIGH | app/modules/filemanager/storages/alist.py | 660 | "hash_info": null, | STRING |
| HIGH | app/modules/indexer/spider/hddolby.py | 139 | "imdb_id": null, | STRING |
| HIGH⚡ | tests/test_metainfo.py | 508 | custom_words = ["旧名 => 新名 && 第 <> 集 >> EP+1"] | CODE |
| HIGH⚡ | tests/test_metainfo.py | 518 | "BLEACH Thousand-Year Blood War S04 => BLEACH 2004 S02 && S02 <> 1080p >> EP+40" | CODE |
| HIGH⚡ | tests/test_metainfo.py | 552 | 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 | 571 | custom_words = ["旧名 => 新名 && 第 <> 集 >> EP+EP-1"] | CODE |
| HIGH⚡ | tests/test_metainfo.py | 583 | custom_words = ["旧名 => 新名 && 第 <> 集 >> 2EP"] | CODE |
| HIGH⚡ | tests/test_command_safety.py | 8 | command = "cd /tmp && rm -f qbcookiejar; printf '{}' | jq -r ." | CODE |
| HIGH⚡ | tests/test_command_safety.py | 15 | assert detect_dangerous_command("cd /tmp && rm -rf /tmp") | CODE |
| HIGH⚡ | tests/test_docker_entrypoint_permissions.py | 184 | resolve_browser_cache_dir || printf 'rejected\\n' | STRING |
| HIGH⚡ | tests/test_docker_entrypoint_permissions.py | 208 | resolve_browser_cache_dir || printf 'rejected\\n' | STRING |
| HIGH | tests/test_architecture_ci.py | 233 | assert "--output-format=json > pylint-report.json || true" in commands | CODE |
| HIGH⚡ | tests/test_docker_bootstrap.py | 1505 | restore_previous_payload || true | CODE |
| HIGH⚡ | tests/test_docker_bootstrap.py | 1507 | "$([[ -f "${{APP_DIR}}/app/new.py" ]] && printf current || printf missing)" \\ | CODE |
| HIGH⚡ | tests/test_docker_bootstrap.py | 1508 | "$([[ -f "${{APP_DIR}}/app/old.py" ]] && printf restored || printf absent)" \\ | CODE |
| HIGH⚡ | tests/test_docker_bootstrap.py | 1509 | "$([[ -d "${{UPDATE_PREVIOUS_APP}}" ]] && printf retained || printf moved)" \\ | CODE |
| HIGH⚡ | tests/test_docker_bootstrap.py | 1603 | swap_staged_payload || rollback_update_transaction | CODE |
| HIGH⚡ | tests/test_docker_bootstrap.py | 1605 | "$([[ -f "${{APP_DIR}}/app/old.py" ]] && printf old || printf missing)" \\ | CODE |
| HIGH⚡ | tests/test_docker_bootstrap.py | 1607 | "$([[ -f "${{UPDATE_PENDING_FILE}}" ]] && printf present || printf cleared)" | CODE |
| HIGH | tests/test_docker_bootstrap.py | 237 | 'source "$1"; source_bundle_is_trusted() { control_bundle_generation "$1" >/dev/null; }; launcher_main', | CODE |
| HIGH | tests/test_docker_bootstrap.py | 533 | source_bundle_is_trusted() {{ control_bundle_generation "$1" >/dev/null; }} | CODE |
| HIGH | tests/test_docker_bootstrap.py | 743 | source_bundle_is_trusted() {{ control_bundle_generation "$1" >/dev/null; }} | CODE |
| HIGH | tests/test_docker_bootstrap.py | 984 | "cd /app || exit", 0, supervisor_start | CODE |
| HIGH | tests/test_docker_bootstrap.py | 1299 | "$([[ -f "${{APP_DIR}}/app/old.py" ]] && printf old || printf missing)" \\ | CODE |
| HIGH | tests/test_docker_bootstrap.py | 1301 | "$([[ -f "${{CONFIG_DIR}}/temp/__update_pending__" ]] && printf present || printf cleared)" \\ | CODE |
| HIGH | tests/test_docker_bootstrap.py | 1362 | "$([[ -f "${{APP_DIR}}/app/new.py" ]] && printf new || printf missing)" \ | CODE |
| HIGH | tests/test_docker_bootstrap.py | 1367 | "$([[ -f "${{UPDATE_PREVIOUS_APP}}/app/old.py" ]] && printf retained || printf absent)" | CODE |
| HIGH | tests/test_docker_bootstrap.py | 1412 | source_bundle_is_trusted() {{ control_bundle_generation "$1" > /dev/null; }} | CODE |
| HIGH | tests/test_docker_bootstrap.py | 1454 | finalize_update_transaction || true | CODE |
| HIGH | tests/test_docker_bootstrap.py | 1455 | printf '%s\n' "$([[ -f "${{UPDATE_PENDING_FILE}}" ]] && printf present || printf missing)" | CODE |
| HIGH | tests/test_docker_bootstrap.py | 1641 | test_connectivity_package 0 || true | CODE |
| HIGH | tests/test_docker_bootstrap.py | 1142 | "count=$(cat \"${count_file}\" 2>/dev/null || printf '0')\n" | STRING |
| HIGH | tests/test_subscription_query_service.py | 155 | 'Subscribe|{"type":"电影","season":null,' | CODE |
| HIGH⚡ | tests/test_execute_command_tool.py | 174 | result = await command_tool.run(action="run", command="echo ok && rm -rf /", timeout=60) | CODE |
| HIGH⚡ | tests/test_execute_command_tool.py | 182 | rejected = await command_tool.run(action="run", command="echo ok && shutdown now", timeout=1) | CODE |
| HIGH⚡ | tests/test_media_recognize_modules.py | 118 | self.assertEqual(result, "zh,en,null,ja") | CODE |
| HIGH⚡ | tests/test_agent_shell.py | 589 | result = subprocess.run(shell.build_argv('printf "%s" "$TASK_VALUE"; shopt -q login_shell && exit 9; exit 0'), | CODE |
| HIGH | tests/test_publish_moviepilot_plugin_skill.py | 137 | payload = module.push( | CODE |
| 11 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | app/agent/learning/matching.py | 44 | # ── Position helpers ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/agent/learning/matching.py | 172 | # ── Strategies ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/agent/learning/matching.py | 309 | # ── Orchestrator ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/agent/learning/matching.py | 405 | # ── Escape-drift guards ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/agent/learning/matching.py | 509 | # ── Replacement shaping ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/agent/learning/matching.py | 583 | # ── "Did you mean?" diagnostics ────────────────────────────────────────── | COMMENT |
| MEDIUM | app/agent/learning/threats.py | 27 | # ── Classic prompt injection (applies everywhere) ──────────────── | COMMENT |
| MEDIUM | app/agent/learning/threats.py | 50 | # ── C2 / Brainworm-style promptware (context scope) ────────────── | COMMENT |
| MEDIUM | app/agent/learning/threats.py | 65 | # ── Known C2 / red-team framework names (warn-only) ───────────── | COMMENT |
| MEDIUM | app/agent/learning/threats.py | 95 | # ── Hardcoded secrets ──────────────────────────────────────────── | COMMENT |
| MEDIUM | app/adapters/system/code/client.py | 19 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/adapters/system/code/client.py | 21 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | app/adapters/external/wechat.py | 11 | # ------------------------------------------------------------------------ | COMMENT |
| MEDIUM | app/modules/vyo/vyo.py | 58 | # ── 连接状态 ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/modules/vyo/vyo.py | 103 | # ── 媒体库 ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/modules/vyo/vyo.py | 270 | # ── 条目 ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/modules/vyo/vyo.py | 477 | # ── 统计与展示 ────────────────────────────────────────────── | COMMENT |
| MEDIUM | app/modules/vyo/vyo.py | 591 | # ── 入库刷新 ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_plugin_instance_log_context_entrypoints.py | 28 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_instance_log_context_entrypoints.py | 30 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_instance_log_context_entrypoints.py | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_instance_log_context_entrypoints.py | 113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_instance_log_context_entrypoints.py | 250 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_instance_log_context_entrypoints.py | 252 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_instance_log_context_entrypoints.py | 294 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_instance_log_context_entrypoints.py | 296 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_overwrite_declined.py | 58 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_overwrite_declined.py | 60 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_transfer_overwrite_declined.py | 208 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_transfer_overwrite_declined.py | 210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_vyo_module.py | 225 | # ── 存在性判断 ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_vyo_module.py | 323 | # ── 条目转换 ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_vyo_module.py | 351 | # ── 展示与图片 ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_vyo_module.py | 384 | # ── 入库刷新 ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_vyo_module.py | 442 | # ── 连接与认证 ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_vyo_module.py | 486 | # ── PR-Agent 审查修复的回归 ────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_vyo_module.py | 115 | # ── 分页 ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/test_vyo_module.py | 168 | # ── 媒体库与统计 ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | tests/test_tmdb_retry_and_errors.py | 49 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tmdb_retry_and_errors.py | 51 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tmdb_retry_and_errors.py | 168 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_tmdb_retry_and_errors.py | 170 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 54 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 152 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 154 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 373 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 375 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 432 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 434 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 450 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 452 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 475 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 477 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 546 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_transfer_history_gate.py | 548 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_transfer_history_gate.py | 346 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_transfer_history_gate.py | 348 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | database/versions/b6e1f8a3c9d2_3_0_26.py | 81 | def _set_key_nullable(nullable: bool) -> None: | CODE |
| LOW | app/monitor/__init__.py | 28 | __all__ = ["DirectoryChangeEvent", "LocalDirectoryWatcher", "Monitor"] | CODE |
| LOW | app/doctor/__init__.py | 29 | __all__ = [ | CODE |
| LOW | app/runtime/gc.py | 15 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/runtime/log.py | 785 | def update_loggers(self) -> None: | CODE |
| LOW⚡ | app/runtime/events.py | 202 | def set_error_notifier(self, notifier: Optional[EventErrorNotifier]) -> None: | CODE |
| LOW | app/runtime/cache.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/runtime/extensions/plugin/registry.py | 117 | def set_settling(self, settling: bool) -> None: | CODE |
| LOW⚡ | app/runtime/extensions/plugin/manager.py | 737 | def set_plugin_settling(self, settling: bool) -> None: | CODE |
| LOW | app/runtime/event/snapshot.py | 116 | __all__ = ["EventPayloadSnapshot", "snapshot_event_data"] | CODE |
| LOW | app/scheduler/__init__.py | 28 | __all__ = ["Scheduler", "SchedulerChain"] | CODE |
| LOW | app/scheduler/reconcile.py | 367 | def update_workflow_job(self, workflow: WorkflowSnapshot) -> None: | CODE |
| LOW | app/scheduler/reconcile.py | 405 | def update_plugin_job(self, pid: str) -> None: | CODE |
| LOW | app/foundation/version.py | 6 | __all__ = ["compare_version"] | CODE |
| LOW | app/chain/listenbrainz.py | 13 | __all__ = [ | CODE |
| LOW | app/chain/workflow.py | 400 | def update_runtime_state(self) -> None: | CODE |
| LOW | app/chain/workflow.py | 413 | def set_node_state(self, action_id: str, state: str, message: Optional[str] = None) -> None: | CODE |
| LOW | app/chain/workflow.py | 733 | def update_progress(self) -> None: | CODE |
| LOW | app/chain/transfer/__init__.py | 28 | __all__ = ["TransferChain", "task_lock"] | CODE |
| LOW | app/chain/search/__init__.py | 30 | __all__ = ["SearchChain"] | CODE |
| LOW | app/chain/subscribe/__init__.py | 27 | __all__ = ["SubscribeChain"] | CODE |
| LOW | app/chain/download/__init__.py | 30 | __all__ = ["DownloadChain"] | CODE |
| LOW | app/chain/media/__init__.py | 30 | __all__ = ["MediaChain"] | CODE |
| LOW | app/agent/web.py | 36 | def set_emit_callback(self, on_emit: Callable[[str], None]) -> None: | CODE |
| LOW | app/agent/web.py | 300 | def set_output_callback(self, output_callback: Optional[Callable[[str], None]]) -> None: | CODE |
| LOW | app/agent/steering.py | 186 | __all__ = [ | CODE |
| LOW | app/agent/orchestrator.py | 1286 | def _set_event_value(event_data: Any, key: str, value: Any) -> None: | CODE |
| LOW | app/agent/contracts.py | 35 | __all__ = ["ReplyMode", "build_display_message"] | CODE |
| LOW | app/agent/middleware/subagents.py | 1432 | __all__ = [ | CODE |
| LOW | app/agent/middleware/config.py | 42 | __all__ = ["RuntimeConfigMiddleware"] | CODE |
| LOW | app/agent/middleware/skills.py | 642 | __all__ = [ | CODE |
| LOW | app/agent/middleware/steering.py | 102 | __all__ = ["STEERING_MESSAGE_ID_KEY", "SteeringMiddleware"] | CODE |
| LOW | app/agent/middleware/policy.py | 285 | __all__ = [ | CODE |
| LOW | app/agent/middleware/jobs.py | 289 | __all__ = [ | CODE |
| LOW | app/agent/middleware/usage.py | 603 | __all__ = ["UsageMiddleware"] | CODE |
| LOW | app/agent/tools/catalog.py | 206 | __all__ = [ | CODE |
| LOW | app/agent/tools/tags.py | 41 | __all__ = ["ToolTag"] | CODE |
| LOW | app/agent/tools/manager.py | 78 | def set_data_context(self, data: AgentDataContext) -> None: | CODE |
| LOW | app/agent/tools/impl/service.py | 566 | __all__ = [ | CODE |
| LOW | app/agent/tools/impl/api.py | 407 | __all__ = ["MoviePilotApiInput", "MoviePilotApiTool"] | CODE |
| LOW | app/agent/llm/provider.py | 26 | __all__ = [ | CODE |
| LOW⚡ | app/agent/llm/helper.py | 1389 | def _set_metadata_attr(name: str, value: Any) -> None: | CODE |
| LOW | app/agent/learning/threats.py | 164 | __all__ = ["INVISIBLE_CHARS", "MAX_SCAN_CHARS", "scan_for_threats", "first_threat_message"] | CODE |
| LOW | app/agent/terminal/manager.py | 91 | def _set_nonblocking(fd: int) -> None: | CODE |
| LOW | app/agent/api/executor.py | 230 | __all__ = ["ApiExecutionContext", "ApiExecutionError", "MoviePilotApiExecutor"] | CODE |
| LOW | app/agent/skills/metadata.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | app/agent/callback/__init__.py | 161 | def set_dispatch_policy(self, allow_dispatch_without_context: bool = False) -> None: | CODE |
| LOW | app/agent/policy/sanitizer.py | 1034 | __all__ = [ | CODE |
| LOW | app/agent/policy/registry.py | 199 | __all__ = [ | CODE |
| LOW | app/agent/policy/api.py | 878 | __all__ = [ | CODE |
| LOW | app/agent/policy/mcp.py | 1307 | __all__ = ["build_api_mcp_input_schema"] | CODE |
| LOW | app/agent/policy/orchestrator.py | 229 | __all__ = [ | CODE |
| LOW | app/agent/policy/contracts.py | 242 | __all__ = [ | CODE |
| LOW | app/schemas/query.py | 390 | __all__ = [ | CODE |
| LOW | app/schemas/message.py | 283 | def set_notification_route_scope(self, scope: Optional[str]) -> None: | CODE |
| LOW | app/testing/__init__.py | 14 | __all__ = ["stub_modules"] | CODE |
| LOW⚡ | app/adapters/web/security/access.py | 78 | def set_token_identity_validator(validator: TokenIdentityValidator) -> None: | CODE |
| LOW | app/adapters/network/browser.py | 64 | def set_extra_http_headers(self, headers: dict[str, str]) -> None: | CODE |
| LOW | app/adapters/network/browser.py | 68 | def set_default_timeout(self, timeout: int) -> None: | CODE |
| LOW | app/adapters/network/http.py | 467 | def update_headers(self, headers: dict[str, Any]) -> None: | CODE |
| 107 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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_metainfo.py | 552 | 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 |
|---|---|---|---|---|
| LOW | app/runtime/cache.py | 872 | CODE | |
| LOW | app/runtime/extensions/plugin/storage.py | 92 | CODE | |
| LOW | app/chain/_recognition.py | 656 | CODE | |
| LOW | app/chain/_recognition.py | 694 | CODE | |
| LOW | app/chain/message.py | 253 | CODE | |
| LOW | app/chain/message.py | 452 | CODE | |
| LOW | app/chain/recommend.py | 388 | CODE | |
| LOW | app/chain/recommend.py | 437 | CODE | |
| LOW | app/chain/recommend.py | 564 | CODE | |
| LOW | app/chain/recommend.py | 589 | CODE | |
| LOW | app/chain/scraping.py | 999 | CODE | |
| LOW | app/chain/scraping.py | 1341 | CODE | |
| LOW | app/chain/base.py | 862 | CODE | |
| LOW | app/chain/base.py | 916 | CODE | |
| LOW | app/chain/base.py | 1035 | CODE | |
| LOW | app/chain/transfer/plan.py | 866 | CODE | |
| LOW | app/chain/transfer/workflow.py | 389 | CODE | |
| LOW | app/chain/transfer/workflow.py | 462 | CODE | |
| LOW | app/chain/transfer/history.py | 175 | CODE | |
| LOW | app/chain/search/facade.py | 422 | CODE | |
| LOW | app/chain/search/facade.py | 450 | CODE | |
| LOW | app/chain/search/facade.py | 478 | CODE | |
| LOW | app/chain/search/media.py | 357 | CODE | |
| LOW | app/chain/search/media.py | 375 | CODE | |
| LOW | app/chain/search/media.py | 395 | CODE | |
| LOW | app/chain/search/cache.py | 48 | CODE | |
| LOW | app/chain/search/cache.py | 84 | CODE | |
| LOW | app/chain/search/result.py | 358 | CODE | |
| LOW | app/chain/subscribe/create.py | 592 | CODE | |
| LOW | app/chain/subscribe/create.py | 640 | CODE | |
| LOW | app/chain/subscribe/create.py | 726 | CODE | |
| LOW | app/chain/subscribe/notify.py | 99 | CODE | |
| LOW | app/chain/download/batch.py | 35 | CODE | |
| LOW | app/chain/download/batch.py | 71 | CODE | |
| LOW | app/chain/download/submission.py | 392 | CODE | |
| LOW | app/chain/download/submission.py | 429 | CODE | |
| LOW | app/chain/media/contract.py | 112 | CODE | |
| LOW | app/chain/media/contract.py | 126 | CODE | |
| LOW | app/agent/session.py | 285 | CODE | |
| LOW | app/agent/orchestrator.py | 422 | CODE | |
| LOW | app/agent/middleware/subagents.py | 1224 | CODE | |
| LOW | app/agent/middleware/usage.py | 172 | CODE | |
| LOW | app/agent/tools/factory.py | 157 | CODE | |
| LOW | app/agent/tools/impl/browse_webpage.py | 250 | CODE | |
| LOW | app/agent/tools/impl/persona.py | 102 | CODE | |
| LOW | app/agent/tools/impl/execute_command.py | 665 | CODE | |
| LOW | app/agent/llm/catalog.py | 1485 | CODE | |
| LOW | app/agent/llm/helper.py | 1478 | CODE | |
| LOW | app/agent/llm/helper.py | 1829 | CODE | |
| LOW | app/agent/terminal/manager.py | 112 | CODE | |
| LOW | app/adapters/network/http.py | 407 | CODE | |
| LOW | app/adapters/network/http.py | 1133 | CODE | |
| LOW | app/sdk/plugin/base.py | 420 | CODE | |
| LOW | app/db/models/transferhistory.py | 619 | CODE | |
| LOW | app/db/oper/message.py | 22 | CODE | |
| LOW | app/db/oper/message.py | 69 | CODE | |
| LOW | app/db/oper/agentchat.py | 209 | CODE | |
| LOW | app/db/oper/transferhistory.py | 373 | CODE | |
| LOW | app/api/endpoints/subscribe.py | 597 | CODE | |
| LOW | app/api/endpoints/subscribe.py | 795 | CODE | |
| 46 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/modules/filemanager/storages/alipan.py | 466 | # Step 4: 转换为无符号int64 | COMMENT |
| LOW | app/modules/filemanager/storages/alipan.py | 481 | # Step 8: 读取文件范围数据并编码 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 622 | # Step 1: 初始化上传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 648 | # Step 2: 处理二次认证 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 685 | # Step 3: 秒传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 721 | # Step 4: 获取上传凭证 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 733 | # Step 5: 断点续传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 750 | # 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/generate-identifiers/SKILL.md | 137 | ### Step 1: Analyze the Problem | COMMENT |
| LOW⚡ | skills/generate-identifiers/SKILL.md | 145 | ### Step 2: Generate the Identifier Rule(s) | COMMENT |
| LOW⚡ | skills/generate-identifiers/SKILL.md | 153 | ### Step 3: Query Existing Identifiers | COMMENT |
| LOW⚡ | skills/generate-identifiers/SKILL.md | 161 | ### Step 4: Check for Duplicates | COMMENT |
| LOW⚡ | skills/generate-identifiers/SKILL.md | 168 | ### Step 5: Save the Updated Identifiers | COMMENT |
| LOW | skills/generate-identifiers/SKILL.md | 182 | ### Step 6: Verify (Optional) | COMMENT |
| LOW | skills/generate-identifiers/SKILL.md | 190 | ### 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 |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/adapters/network/browser.py | 1005 | || el.getAttribute('placeholder') | CODE |
| LOW | app/adapters/network/browser.py | 1016 | placeholder: el.getAttribute('placeholder') || '', | CODE |
| LOW | tests/test_telegram.py | 39 | telegram = Telegram(TELEGRAM_TOKEN="fake_token", TELEGRAM_CHAT_ID="fake_chat_id") | CODE |
| LOW | tests/test_browser_helper.py | 127 | "placeholder": "", | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 72 | fake_name = "tests._fake_unloaded_plugin" | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 73 | fake_module = types.ModuleType(fake_name) | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 74 | sys.modules[fake_name] = fake_module | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 85 | del sys.modules[fake_name] | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 93 | f"{fake_name}._ResidualPlugin.reload", | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 96 | sys.modules.pop(fake_name, None) | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 101 | fake_name = "tests._fake_quiesced_plugin" | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 102 | fake_module = types.ModuleType(fake_name) | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 103 | sys.modules[fake_name] = fake_module | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 124 | del sys.modules[fake_name] | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 127 | f"{fake_name}._QuiescedPlugin.reload" | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 130 | f"{fake_name}._QuiescedPlugin" | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 152 | sys.modules.pop(fake_name, None) | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 157 | fake_name = "tests._fake_unloaded_decorated_plugin" | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 158 | fake_module = types.ModuleType(fake_name) | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 159 | sys.modules[fake_name] = fake_module | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 175 | del sys.modules[fake_name] | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 183 | f"{fake_name}._deco.<locals>.wrapper", | CODE |
| LOW⚡ | tests/test_event_runtime_components.py | 186 | sys.modules.pop(fake_name, None) | CODE |
| LOW | tests/test_local_setup_installer_wizard.py | 147 | "placeholder": "填写 Cookie", | CODE |
| LOW | tests/test_local_setup_installer_wizard.py | 168 | "placeholder": "填写 Cookie", | CODE |
| LOW⚡ | tests/test_api_authorization.py | 459 | fake_user = SimpleNamespace() | CODE |
| LOW⚡ | tests/test_api_authorization.py | 469 | return fake_user | CODE |
| LOW⚡ | tests/test_api_authorization.py | 474 | fake_user.values = values | CODE |
| LOW⚡ | tests/test_api_authorization.py | 475 | return fake_user | CODE |
| LOW | tests/test_api_authorization.py | 491 | assert fake_user.values == {"avatar": "data:image/ico;base64,b'YXZhdGFy'"} | CODE |
| LOW | tests/test_agent_tool_result_policy.py | 477 | alias = AliasPath("placeholder") | CODE |
| LOW | tests/test_feedback_issue_scripts.py | 156 | "hunter2", "user@example.com", "/Users/alice/"): | CODE |
| LOW | scripts/local_setup.py | 2265 | "placeholder": str(param_conf.get("placeholder") or "").strip(), | CODE |
| LOW | scripts/local_setup.py | 2331 | placeholder = str(param_meta.get("placeholder") or "").strip() | CODE |
| LOW | skills/feedback-issue/scripts/feedback_issue_common.py | 104 | "lorem ipsum", "dolor sit amet", | CODE |
| LOW | skills/feedback-issue/scripts/feedback_issue_common.py | 104 | "lorem ipsum", "dolor sit amet", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/monitor/dispatcher.py | 401 | # 这一步的原子性。 | COMMENT |
| LOW | app/monitor/monitor.py | 81 | # 启动失败待重试的本地监控配置 | COMMENT |
| LOW | app/monitor/watcher.py | 41 | _HANDLE_CHANGES = {Change.added, Change.modified} | COMMENT |
| LOW | app/runtime/config.py | 261 | # PostgreSQL 密码 | COMMENT |
| LOW | app/runtime/config.py | 281 | # 实测常驻的 feishu/discord 循环不访问数据库,走此路径的只有插件与调度器 | COMMENT |
| LOW | app/runtime/config.py | 301 | # ==================== 数据清理配置 ==================== | COMMENT |
| LOW | app/runtime/config.py | 541 | # ==================== 订阅配置 ==================== | COMMENT |
| LOW | app/runtime/config.py | 581 | # ==================== 下载配置 ==================== | COMMENT |
| LOW | app/runtime/config.py | 621 | # 文件整理线程数 | COMMENT |
| LOW | app/runtime/log.py | 161 | expires_at: Optional[float] | COMMENT |
| LOW | app/agent/guardrails/controller.py | 41 | # 2–4 call batch each iteration ran to the budget unflagged (port of can1357/oh-my-pi#10521, | COMMENT |
| LOW | app/agent/learning/threats.py | 81 | COMMENT | |
| LOW | app/schemas/context.py | 341 | # 别名和译名 | COMMENT |
| LOW | app/db/session.py | 81 | return _scoped_session | COMMENT |
| LOW | app/db/session.py | 121 | """ | COMMENT |
| LOW | app/db/engine.py | 281 | return async_engine | 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 | 466 | # Step 4: 转换为无符号int64 | COMMENT |
| LOW | app/modules/filemanager/storages/alipan.py | 481 | # Step 8: 读取文件范围数据并编码 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 622 | # Step 1: 初始化上传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 648 | # Step 2: 处理二次认证 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 685 | # Step 3: 秒传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 721 | # Step 4: 获取上传凭证 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 733 | # Step 5: 断点续传 | COMMENT |
| LOW | app/modules/filemanager/storages/u115.py | 750 | # Step 6: 对象存储上传 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/agent/middleware/subagents.py | 495 | async def run_task( | CODE |
| LOW | app/startup/initializers/plugins.py | 1037 | async def execute_task(loop, task_func, task_name): | CODE |
| LOW | tests/test_architecture_egress.py | 549 | def helper(client): | STRING |
| LOW | tests/test_architecture_baseline_cli.py | 382 | "def helper():\n" | CODE |
| LOW | tests/test_plugin_settlement_lifecycle.py | 25 | async def execute_task(_loop, task_func, _task_name): | CODE |
| LOW | tests/test_scheduler_progress.py | 147 | async def run_task(): | CODE |
| LOW | tests/test_scheduler_progress.py | 184 | async def run_task(): | CODE |
| LOW | tests/test_scheduler_progress.py | 216 | async def run_task(): | 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 | app/agent/guardrails/controller.py | 232 | # A harness REFUSAL of a redundant call (repeated identical read/search) carries | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | app/modules/wechat/wechat.py | 423 | # Read file content into memory to avoid file handle issues | COMMENT |