将 Antigravity 转换为 OpenAI 、GEMINI 和 Claude API 接口
This report summarizes scanner evidence for su-kaka/agy2api, a Python project with 5,287 GitHub stars. SynthScan examined 23,925 lines of code across 75 source files, recording 365 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 21.5 (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.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 181 finding(s).
Are imports declared and package/API names verified? 10 finding(s).
Are wrappers, guards, and repeated structures necessary? 275 finding(s).
Which changes need focused human review? 365 finding(s).
Run additional scans to build a history of the legacy pattern signal. Score changes are not a measure of AI adoption or code quality.
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 365 distinct pattern matches across 10 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 | web.py | 37 | except Exception as e: | CODE |
| LOW | web.py | 45 | except Exception as e: | CODE |
| LOW | web.py | 58 | except Exception as e: | CODE |
| LOW | web.py | 73 | except Exception as e: | CODE |
| LOW | web.py | 80 | except Exception as e: | CODE |
| LOW | web.py | 106 | except Exception as e: | CODE |
| LOW | config.py | 73 | except Exception: | CODE |
| LOW | config.py | 93 | except Exception: | CODE |
| LOW | src/usage_log.py | 48 | except Exception: | CODE |
| LOW | src/usage_log.py | 123 | except Exception as e: | CODE |
| MEDIUM | src/auth.py | 83 | def patched_validate(params): | CODE |
| MEDIUM | src/auth.py | 626 | def shutdown_server_async(): | CODE |
| LOW⚡ | src/auth.py | 72 | except Exception as e: | CODE |
| LOW⚡ | src/auth.py | 565 | except Exception as e: | CODE |
| LOW⚡ | src/auth.py | 569 | except Exception as e: | CODE |
| LOW | src/auth.py | 122 | except Exception: | CODE |
| LOW | src/auth.py | 155 | except Exception as e: | CODE |
| LOW | src/auth.py | 267 | except Exception as e: | CODE |
| LOW | src/auth.py | 302 | except Exception as e: | CODE |
| LOW | src/auth.py | 339 | except Exception as e: | CODE |
| LOW | src/auth.py | 359 | except Exception as e: | CODE |
| LOW | src/auth.py | 405 | except Exception as e: | CODE |
| LOW | src/auth.py | 614 | except Exception as e: | CODE |
| LOW | src/auth.py | 618 | except Exception as e: | CODE |
| LOW | src/auth.py | 635 | except Exception: | CODE |
| LOW | src/auth.py | 651 | except Exception: | CODE |
| LOW | src/auth.py | 656 | except Exception as e: | CODE |
| LOW | src/credential_manager.py | 133 | except Exception as e: | CODE |
| LOW | src/credential_manager.py | 153 | except Exception as e: | CODE |
| LOW | src/credential_manager.py | 166 | except Exception as e: | CODE |
| LOW | src/credential_manager.py | 214 | except Exception as e: | CODE |
| LOW | src/credential_manager.py | 246 | except Exception as e: | CODE |
| LOW | src/credential_manager.py | 278 | except Exception as e: | CODE |
| LOW | src/request_body_log.py | 82 | except Exception as e: | CODE |
| LOW | src/request_body_log.py | 108 | except Exception: | CODE |
| LOW | src/request_body_log.py | 130 | except Exception as e: | CODE |
| LOW | src/google_oauth_api.py | 111 | except Exception as e: | CODE |
| LOW | src/google_oauth_api.py | 241 | except Exception as e: | CODE |
| LOW | src/google_oauth_api.py | 313 | except Exception as e: | CODE |
| LOW | src/google_oauth_api.py | 342 | except Exception as e: | CODE |
| LOW | src/google_oauth_api.py | 367 | except Exception as e: | CODE |
| LOW | src/google_oauth_api.py | 384 | except Exception as e: | CODE |
| LOW | src/google_oauth_api.py | 398 | except Exception as e: | CODE |
| LOW | src/google_oauth_api.py | 459 | except Exception as e: | CODE |
| LOW | src/httpx_client.py | 58 | except Exception as e: | CODE |
| LOW | src/session_cache.py | 67 | except Exception as e: | CODE |
| LOW | src/session_cache.py | 79 | except Exception: | CODE |
| LOW | src/session_cache.py | 153 | except Exception as e: | CODE |
| LOW | src/session_cache.py | 171 | except Exception as e: | CODE |
| LOW | src/session_cache.py | 186 | except Exception as e: | CODE |
| LOW | src/panel/usage_logs.py | 63 | except Exception as e: | CODE |
| LOW | src/panel/usage_logs.py | 88 | except Exception as e: | CODE |
| LOW | src/panel/usage_logs.py | 123 | except Exception as e: | CODE |
| LOW | src/panel/usage_logs.py | 151 | except Exception as e: | CODE |
| LOW | src/panel/usage_logs.py | 169 | except Exception as e: | CODE |
| LOW | src/panel/auth.py | 40 | except Exception as e: | CODE |
| LOW | src/panel/auth.py | 74 | except Exception as e: | CODE |
| LOW | src/panel/auth.py | 127 | except Exception as e: | CODE |
| LOW | src/panel/auth.py | 177 | except Exception as e: | CODE |
| LOW | src/panel/auth.py | 192 | except Exception as e: | CODE |
| 67 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | config.py | 93 | except Exception: | CODE |
| HIGH | config.py | 162 | except ValueError: | CODE |
| HIGH | config.py | 177 | except ValueError: | CODE |
| HIGH | config.py | 198 | except ValueError: | CODE |
| HIGH | config.py | 216 | except ValueError: | CODE |
| HIGH | config.py | 246 | except ValueError: | CODE |
| HIGH | config.py | 707 | except ValueError: | CODE |
| HIGH | config.py | 592 | except (json.JSONDecodeError, ValueError): | CODE |
| HIGH | src/auth.py | 86 | except Warning: | CODE |
| HIGH | src/auth.py | 122 | except Exception: | CODE |
| HIGH | src/auth.py | 635 | except Exception: | CODE |
| HIGH | src/auth.py | 651 | except Exception: | CODE |
| HIGH | src/request_body_log.py | 146 | except OSError: | CODE |
| HIGH | src/session_cache.py | 79 | except Exception: | CODE |
| HIGH | src/converter/anti_truncation.py | 259 | except (json.JSONDecodeError, TypeError): | CODE |
| HIGH | src/converter/anti_truncation.py | 787 | except ValueError: | CODE |
| HIGH | src/storage/database.py | 551 | except ValueError: | CODE |
| HIGH | src/api/antigravity.py | 834 | except Exception: | CODE |
| HIGH | src/api/antigravity.py | 1125 | except Exception: | CODE |
| HIGH | src/api/antigravity.py | 846 | except Exception: | CODE |
| HIGH | src/api/antigravity.py | 481 | except Exception: | CODE |
| HIGH | src/router/base_router.py | 61 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | config.py | 204 | async def get_anti_truncation_max_attempts() -> int: | CODE |
| LOW | config.py | 284 | async def get_return_thoughts_to_frontend() -> bool: | CODE |
| LOW | config.py | 308 | async def get_sensitive_words_enabled() -> bool: | CODE |
| LOW | config.py | 373 | def apply_sensitive_word_filter(text: str, patterns) -> str: | CODE |
| LOW | config.py | 382 | async def get_sensitive_word_filter(): | CODE |
| LOW | config.py | 537 | async def get_model_rewrite_enabled() -> bool: | CODE |
| LOW | config.py | 552 | async def get_model_rewrite_rules_config() -> list: | CODE |
| LOW | config.py | 573 | def _parse_model_rewrite_rules_value(value: Any) -> Optional[list]: | CODE |
| LOW | config.py | 605 | def compile_model_rewrite_rules(rules: list): | CODE |
| LOW | config.py | 695 | async def get_request_log_error_codes() -> list: | CODE |
| LOW | config.py | 722 | async def get_credential_select_mode() -> str: | CODE |
| LOW⚡ | src/auth.py | 63 | def _cleanup_auth_flow_server(state: str): | CODE |
| LOW⚡ | src/auth.py | 78 | def _patch_oauthlib_validation(): | CODE |
| LOW⚡ | src/auth.py | 574 | async def complete_auth_flow_from_callback_url( | CODE |
| LOW | src/auth.py | 43 | def _prepare_credentials_data(credentials: Credentials, project_id: str, subscription_tier: str = None) -> Dict[str, Any | CODE |
| LOW | src/auth.py | 102 | def cleanup_auth_flows_for_memory(): | CODE |
| LOW | src/auth.py | 344 | async def _save_antigravity_credential( | CODE |
| LOW | src/auth.py | 448 | async def asyncio_complete_auth_flow( | CODE |
| LOW | src/credential_manager.py | 295 | def _is_permanent_refresh_failure(error_msg: str, status_code: Optional[int] = None) -> bool: | CODE |
| LOW | src/google_oauth_api.py | 372 | async def fetch_user_email_from_file(cred_data: Dict[str, Any]) -> Optional[str]: | CODE |
| LOW | src/google_oauth_api.py | 403 | async def fetch_project_id_and_tier( | CODE |
| LOW | src/utils.py | 22 | def _get_latest_antigravity_cli_version() -> str: | CODE |
| LOW | src/utils.py | 83 | def get_base_model_from_feature_model(model_name: str) -> str: | CODE |
| LOW⚡ | src/panel/creds.py | 52 | async def _import_single_credential(data: Dict[str, Any]) -> Dict[str, Any]: | CODE |
| LOW⚡ | src/panel/creds.py | 142 | async def extract_json_files_from_zip(zip_file: UploadFile) -> List[dict]: | CODE |
| LOW⚡ | src/panel/creds.py | 189 | async def upload_credentials_common( files: List[UploadFile] ) -> JSONResponse: | CODE |
| LOW⚡ | src/panel/creds.py | 638 | async def verify_credential_project( | CODE |
| LOW | src/panel/creds.py | 335 | async def download_all_creds_common() -> Response: | CODE |
| LOW | src/panel/creds.py | 384 | async def verify_credential_project_common(email: str) -> JSONResponse: | CODE |
| LOW | src/converter/antigravity_fix.py | 80 | def _clean_parameters_json_schema( | CODE |
| LOW | src/converter/antigravity_fix.py | 268 | def _normalize_tools_for_internal_api(tools: Any) -> Any: | CODE |
| LOW | src/converter/antigravity_fix.py | 314 | def _ensure_empty_tool_schema_for_claude(tools: Any, model_name: str) -> Any: | CODE |
| LOW | src/converter/antigravity_fix.py | 426 | def _should_skip_thought_signature(part: Dict[str, Any], model_name: str) -> bool: | CODE |
| LOW | src/converter/antigravity_fix.py | 439 | def _normalize_part_thought_signature(part: Dict[str, Any], model_name: str) -> Dict[str, Any]: | CODE |
| LOW | src/converter/antigravity_fix.py | 495 | def _parse_size_to_image_config(size_str: str) -> Dict[str, str]: | CODE |
| LOW | src/converter/antigravity_fix.py | 540 | def prepare_image_generation_request( | CODE |
| LOW | src/converter/antigravity_fix.py | 681 | async def _get_sensitive_word_patterns(): | CODE |
| LOW | src/converter/antigravity_fix.py | 692 | def _filter_contents_sensitive_words(contents: Any, patterns) -> Any: | CODE |
| LOW | src/converter/antigravity_fix.py | 719 | def _filter_system_instruction_sensitive_words(system_instruction: Any, patterns) -> Any: | CODE |
| LOW | src/converter/antigravity_fix.py | 803 | def _strip_trailing_model_turns(contents: List[Any]) -> Tuple[List[Any], int]: | CODE |
| LOW | src/converter/antigravity_fix.py | 847 | async def normalize_antigravity_request( | CODE |
| LOW | src/converter/anti_truncation.py | 73 | def _collect_function_tool_names(tools: List[Dict[str, Any]]) -> List[str]: | CODE |
| LOW | src/converter/anti_truncation.py | 98 | def _resolve_function_calling_mode(tools: List[Dict[str, Any]]) -> Tuple[str, bool]: | CODE |
| LOW | src/converter/anti_truncation.py | 201 | def extract_synthetic_content_from_response( | CODE |
| LOW | src/converter/anti_truncation.py | 244 | def _extract_content_from_json_str(args_str: str) -> Optional[str]: | CODE |
| LOW | src/converter/anti_truncation.py | 287 | def _chunk_has_real_function_call(data: Dict[str, Any]) -> bool: | CODE |
| LOW | src/converter/anti_truncation.py | 303 | def _replace_thought_signatures(data: Dict[str, Any]) -> bool: | CODE |
| LOW | src/converter/anti_truncation.py | 340 | def build_text_chunk_from_synthetic( | CODE |
| LOW | src/converter/anti_truncation.py | 409 | def _deep_copy_anti_truncation_payload(payload: Dict[str, Any]) -> Dict[str, Any]: | CODE |
| LOW | src/converter/anti_truncation.py | 969 | def _build_fallback_text_chunk(self, text: str) -> Optional[bytes]: | CODE |
| LOW | src/converter/anti_truncation.py | 985 | def _build_finish_reason_chunk(self, finish_reason: str = "STOP") -> bytes: | CODE |
| LOW | src/converter/anti_truncation.py | 999 | async def _handle_non_streaming_response(self, response) -> bytes: | CODE |
| LOW | src/converter/thoughtSignature_fix.py | 17 | def is_internal_placeholder_text(text: Any) -> bool: | CODE |
| LOW | src/converter/thoughtSignature_fix.py | 23 | def is_skip_thought_signature_placeholder(part: Mapping[str, Any]) -> bool: | CODE |
| LOW | src/converter/thoughtSignature_fix.py | 34 | def encode_tool_id_with_signature(tool_id: str, signature: Optional[str]) -> str: | CODE |
| LOW | src/converter/thoughtSignature_fix.py | 56 | def decode_tool_id_and_signature(encoded_id: str) -> Tuple[str, Optional[str]]: | CODE |
| LOW | src/converter/utils.py | 9 | def extract_content_and_reasoning(parts: list) -> tuple: | CODE |
| LOW⚡ | src/converter/anthropic2gemini.py | 35 | def has_valid_thoughtsignature(block: Dict[str, Any]) -> bool: | CODE |
| LOW⚡ | src/converter/anthropic2gemini.py | 199 | def _cached_content_token_count(usage_metadata: Any) -> int: | CODE |
| LOW⚡ | src/converter/anthropic2gemini.py | 205 | def _anthropic_usage_from_metadata(usage_metadata: Any) -> Dict[str, Any]: | CODE |
| 39 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | src/panel/creds.py | 48 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | src/panel/creds.py | 50 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | src/panel/creds.py | 137 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | src/panel/creds.py | 139 | # ============================================================================= | COMMENT |
| MEDIUM | src/panel/creds.py | 445 | # ============================================================================= | COMMENT |
| MEDIUM | src/panel/creds.py | 447 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 27 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 29 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 189 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 191 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 406 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 408 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 598 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 600 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 723 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | src/converter/anthropic2gemini.py | 725 | # ============================================================================ | COMMENT |
| MEDIUM | src/converter/anthropic2gemini.py | 280 | # ============================================================================ | COMMENT |
| MEDIUM | src/converter/anthropic2gemini.py | 282 | # ============================================================================ | COMMENT |
| MEDIUM | src/converter/anthropic2gemini.py | 373 | # ============================================================================ | COMMENT |
| MEDIUM | src/converter/anthropic2gemini.py | 375 | # ============================================================================ | COMMENT |
| MEDIUM | src/converter/anthropic2gemini.py | 639 | # ============================================================================ | COMMENT |
| MEDIUM | src/converter/anthropic2gemini.py | 641 | # ============================================================================ | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | config.py | 403 | CODE | |
| LOW | config.py | 573 | CODE | |
| LOW | src/token_estimator.py | 7 | CODE | |
| LOW | src/token_estimator.py | 13 | CODE | |
| LOW | src/usage_log.py | 22 | CODE | |
| LOW | src/auth.py | 102 | CODE | |
| LOW | src/auth.py | 132 | CODE | |
| LOW | src/auth.py | 247 | CODE | |
| LOW | src/auth.py | 448 | CODE | |
| LOW | src/credential_manager.py | 32 | CODE | |
| LOW | src/credential_manager.py | 181 | CODE | |
| LOW | src/request_body_log.py | 113 | CODE | |
| LOW | src/google_oauth_api.py | 126 | CODE | |
| LOW | src/utils.py | 92 | CODE | |
| LOW | src/session_cache.py | 87 | CODE | |
| LOW | src/panel/auth.py | 80 | CODE | |
| LOW | src/panel/auth.py | 133 | CODE | |
| LOW | src/panel/version.py | 20 | CODE | |
| LOW | src/panel/config_routes.py | 104 | CODE | |
| LOW | src/panel/creds.py | 52 | CODE | |
| LOW | src/panel/creds.py | 142 | CODE | |
| LOW | src/panel/creds.py | 189 | CODE | |
| LOW | src/panel/creds.py | 335 | CODE | |
| LOW | src/panel/creds.py | 489 | CODE | |
| LOW | src/panel/creds.py | 531 | CODE | |
| LOW | src/panel/creds.py | 669 | CODE | |
| LOW | src/converter/antigravity_fix.py | 80 | CODE | |
| LOW | src/converter/antigravity_fix.py | 268 | CODE | |
| LOW | src/converter/antigravity_fix.py | 314 | CODE | |
| LOW | src/converter/antigravity_fix.py | 447 | CODE | |
| LOW | src/converter/antigravity_fix.py | 692 | CODE | |
| LOW | src/converter/antigravity_fix.py | 739 | CODE | |
| LOW | src/converter/anti_truncation.py | 201 | CODE | |
| LOW | src/converter/anti_truncation.py | 340 | CODE | |
| LOW | src/converter/anti_truncation.py | 463 | CODE | |
| LOW | src/converter/anti_truncation.py | 999 | CODE | |
| LOW | src/converter/utils.py | 60 | CODE | |
| LOW | src/converter/anthropic2gemini.py | 128 | CODE | |
| LOW | src/converter/anthropic2gemini.py | 284 | CODE | |
| LOW | src/converter/anthropic2gemini.py | 424 | CODE | |
| LOW | src/converter/anthropic2gemini.py | 553 | CODE | |
| LOW | src/converter/anthropic2gemini.py | 602 | CODE | |
| LOW | src/converter/anthropic2gemini.py | 941 | CODE | |
| LOW | src/converter/openai2gemini.py | 132 | CODE | |
| LOW | src/converter/openai2gemini.py | 227 | CODE | |
| LOW | src/converter/openai2gemini.py | 376 | CODE | |
| LOW | src/converter/openai2gemini.py | 613 | CODE | |
| LOW | src/converter/openai2gemini.py | 799 | CODE | |
| LOW | src/converter/openai2gemini.py | 877 | CODE | |
| LOW | src/converter/openai2gemini.py | 948 | CODE | |
| LOW | src/converter/openai2gemini.py | 1052 | CODE | |
| LOW | src/converter/openai2gemini.py | 1105 | CODE | |
| LOW | src/converter/openai2gemini.py | 1142 | CODE | |
| LOW | src/converter/openai2gemini.py | 1172 | CODE | |
| LOW | src/converter/openai2gemini.py | 1214 | CODE | |
| LOW | src/converter/openai2gemini.py | 1498 | CODE | |
| LOW | src/converter/openai2gemini.py | 1674 | CODE | |
| LOW | src/storage/database.py | 188 | CODE | |
| LOW | src/storage/database.py | 236 | CODE | |
| LOW | src/storage/database.py | 425 | CODE | |
| 15 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | src/utils.py | 102 | 统一的灵活认证函数,支持多种认证方式 此函数可以直接用作 FastAPI 的 Depends 依赖 支持的认证方式: - URL 参数: key - HTTP 头部: Autho | STRING |
| HIGH | src/utils.py | 211 | 简化的控制面板密码验证函数 直接验证Bearer token是否等于控制面板密码 Args: credentials: HTTPAuthorizationCredentials 自动注入 | STRING |
| HIGH | src/converter/thoughtSignature_fix.py | 35 | 将 thoughtSignature 编码到工具调用ID中,以便往返保留。 Args: tool_id: 原始工具调用ID signature: thoughtSignature(可选) | STRING |
| HIGH | src/converter/thoughtSignature_fix.py | 57 | 从编码的ID中提取原始工具ID和thoughtSignature。 Args: encoded_id: 编码的工具调用ID Returns: (原始工具ID, thoughtSi | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/token_estimator.py | 2 | CODE | |
| LOW | src/usage_log.py | 9 | CODE | |
| LOW | src/auth.py | 28 | CODE | |
| LOW | src/google_oauth_api.py | 6 | CODE | |
| LOW | src/panel/creds.py | 10 | CODE | |
| LOW | src/panel/creds.py | 12 | CODE | |
| LOW | src/panel/creds.py | 12 | CODE | |
| LOW | src/converter/anthropic2gemini.py | 6 | CODE | |
| LOW | src/api/antigravity.py | 25 | CODE | |
| LOW | src/router/antigravity/anthropic.py | 21 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | log.py | 84 | __all__ = ["log", "set_log_level", "get_log_level", "LOG_LEVELS"] | CODE |
| LOW | src/session_cache.py | 160 | async def set_session_binding(session_key: str, email: str) -> None: | CODE |
| LOW | src/panel/__init__.py | 28 | __all__ = ["router"] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/panel/usage_logs.py | 27 | CODE | |
| LOW | src/storage/database.py | 761 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | install.sh | 294 | # Check if web.py exists | COMMENT |