AI Slop Code RIsk Monitor

su-kaka/gcli2api

将 GeminiCLI 和 Antigravity 转换为 OpenAI 、GEMINI 和 Claude API 接口

24.3 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for su-kaka/gcli2api, a Python project with 5,236 GitHub stars. SynthScan examined 36,633 lines of code across 72 source files, recording 700 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 24.3 (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.

24.3
Adjusted Signal
24.3
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
5.2K
Stars
Python
Language
36.6K
Lines of Code
72
Files
700
Pattern Hits
2026-10-12
Scan Date
0.54
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 33.2/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 302 finding(s).

Hallucinated Dependency & Supply Chain Risk 3.0/100 · LOW

Are imports declared and package/API names verified? 23 finding(s).

Agent Over-Engineering Ratio 62.9/100 · HIGH

Are wrappers, guards, and repeated structures necessary? 536 finding(s).

PR Review Velocity Impact 73.6/100 · HIGH

Which changes need focused human review? 700 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 39MEDIUM 40LOW 621

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 700 distinct pattern matches across 11 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.

Excessive Try-Catch Wrapping304 hits · 268 pts
SeverityFileLineSnippetContext
LOWweb.py59 except Exception:CODE
LOWweb.py93 except Exception as e:CODE
LOW⚡web.py111 except Exception as e:CODE
LOW⚡web.py120 except Exception as e:CODE
LOW⚡web.py129 except Exception as e:CODE
LOWweb.py150 except Exception as e:CODE
LOWweb.py165 except Exception as e:CODE
LOWweb.py172 except Exception as e:CODE
LOWconfig.py67 except Exception:CODE
LOWconfig.py88 except Exception:CODE
LOW⚡log.py68 except Exception:CODE
LOW⚡log.py108 except Exception as e:CODE
LOW⚡log.py146 except Exception as e:CODE
LOW⚡log.py151 except Exception:CODE
LOW⚡log.py160 except Exception:CODE
LOWlog.py87 except Exception as e:CODE
LOWlog.py172 except Exception:CODE
MEDIUMsrc/auth.py102def patched_validate(params):CODE
MEDIUMsrc/auth.py952def shutdown_server_async():CODE
LOW⚡src/auth.py506 except Exception as e:CODE
LOW⚡src/auth.py510 except Exception as e:CODE
LOW⚡src/auth.py761 except Exception as e:CODE
LOW⚡src/auth.py765 except Exception as e:CODE
LOWsrc/auth.py87 except Exception as e:CODE
LOWsrc/auth.py142 except Exception:CODE
LOWsrc/auth.py253 except Exception as e:CODE
LOWsrc/auth.py298 except Exception as e:CODE
LOWsrc/auth.py336 except Exception as e:CODE
LOWsrc/auth.py870 except Exception as e:CODE
LOWsrc/auth.py882 except Exception as e:CODE
LOWsrc/auth.py902 except Exception as e:CODE
LOWsrc/auth.py906 except Exception as e:CODE
LOWsrc/auth.py941 except Exception as e:CODE
LOWsrc/auth.py963 except Exception as e:CODE
LOWsrc/auth.py977 except Exception as e:CODE
LOWsrc/auth.py1009 except Exception as e:CODE
LOWsrc/credential_manager.py129 except Exception as e:CODE
LOWsrc/credential_manager.py150 except Exception as e:CODE
LOWsrc/credential_manager.py168 except Exception as e:CODE
LOWsrc/credential_manager.py177 except Exception as e:CODE
LOWsrc/credential_manager.py189 except Exception as e:CODE
LOWsrc/credential_manager.py239 except Exception as e:CODE
LOWsrc/credential_manager.py300 except Exception as e:CODE
LOWsrc/credential_manager.py350 except Exception as e:CODE
LOWsrc/credential_manager.py354 except Exception as e:CODE
LOWsrc/credential_manager.py374 except Exception as e:CODE
LOWsrc/credential_manager.py397 except Exception as e:CODE
LOWsrc/credential_manager.py425 except Exception as e2:CODE
LOWsrc/keeplive.py30 except Exception as e:CODE
LOWsrc/google_oauth_api.py113 except Exception as e:CODE
LOWsrc/google_oauth_api.py243 except Exception as e:CODE
LOWsrc/google_oauth_api.py315 except Exception as e:CODE
LOWsrc/google_oauth_api.py344 except Exception as e:CODE
LOWsrc/google_oauth_api.py369 except Exception as e:CODE
LOWsrc/google_oauth_api.py386 except Exception as e:CODE
LOWsrc/google_oauth_api.py400 except Exception as e:CODE
LOWsrc/google_oauth_api.py439 except Exception as e:CODE
LOWsrc/google_oauth_api.py460 except Exception as e:CODE
LOWsrc/google_oauth_api.py465 except Exception as e:CODE
LOWsrc/google_oauth_api.py505 except Exception as e:CODE
244 more matches not shown…
Empty Error Handlers33 hits · 165 pts
SeverityFileLineSnippetContext
HIGHweb.py48except (OSError, AttributeError):CODE
HIGHweb.py59except Exception:CODE
HIGHweb.py158except asyncio.CancelledError:CODE
HIGHconfig.py88except Exception:CODE
HIGHconfig.py143except ValueError:CODE
HIGHconfig.py158except ValueError:CODE
HIGHconfig.py179except ValueError:CODE
HIGHconfig.py197except ValueError:CODE
HIGHconfig.py227except ValueError:CODE
HIGHconfig.py493except ValueError:CODE
HIGHlog.py68except Exception:CODE
HIGHlog.py172except Exception:CODE
HIGHlog.py160except Exception:CODE
HIGHlog.py151except Exception:CODE
HIGHsrc/auth.py105except Warning:CODE
HIGHsrc/auth.py142except Exception:CODE
HIGHsrc/keeplive.py68except asyncio.CancelledError:CODE
HIGHsrc/panel/utils.py48except ValueError:CODE
HIGHsrc/panel/logs.py232except WebSocketDisconnect:CODE
HIGHsrc/panel/logs.py153except Exception:CODE
HIGHsrc/panel/logs.py229except asyncio.CancelledError:CODE
HIGHsrc/converter/anti_truncation.py197except (json.JSONDecodeError, TypeError):CODE
HIGHsrc/converter/anti_truncation.py618except ValueError:CODE
HIGHsrc/storage/psql_manager.py707except ValueError:CODE
HIGHsrc/storage/sqlite_manager.py967except ValueError:CODE
HIGHsrc/storage/mongodb_manager.py1073except ValueError:CODE
HIGHsrc/api/geminicli.py549except Exception:CODE
HIGHsrc/api/geminicli.py561except Exception:CODE
HIGHsrc/api/geminicli.py249except Exception:CODE
HIGHsrc/api/antigravity.py653except Exception:CODE
HIGHsrc/api/antigravity.py664except Exception:CODE
HIGHsrc/api/antigravity.py351except Exception:CODE
HIGHsrc/router/base_router.py61except Exception:CODE
Hyper-Verbose Identifiers157 hits · 150 pts
SeverityFileLineSnippetContext
LOWconfig.py185async def get_anti_truncation_max_attempts() -> int:CODE
LOWconfig.py304async def get_compatibility_mode_enabled() -> bool:CODE
LOWconfig.py322async def get_return_thoughts_to_frontend() -> bool:CODE
LOWconfig.py358async def get_antigravity_switch_credential_enabled() -> bool:CODE
LOWconfig.py410async def get_resource_manager_api_url() -> str:CODE
LOWconfig.py429async def get_service_usage_api_url() -> str:CODE
LOWtests/test_gemini_fix.py4def test_antigravity_claude_tools_keep_schema_in_parameters():CODE
LOWtests/test_openai2gemini_tool_calls.py24def test_parallel_tool_calls_get_distinct_stream_indices():CODE
LOWtests/test_openai2gemini_tool_calls.py37def test_tool_calls_in_one_chunk_are_numbered_consecutively():CODE
LOWtests/test_openai2gemini_tool_calls.py53def test_stream_index_is_isolated_per_response_id():CODE
LOWtests/test_openai2gemini_tool_calls.py65def test_stream_index_released_after_finish_reason():CODE
LOWtests/test_openai2gemini_tool_calls.py75def test_unparsable_tool_call_arguments_keep_function_call():CODE
LOWtests/test_openai2gemini_tool_calls.py115def test_streaming_tool_call_finishes_with_tool_calls_reason():CODE
LOWtests/test_openai2gemini_tool_calls.py144def test_convert_openai_request_merges_adjacent_same_role_contents():CODE
LOWtests/test_openai2gemini_tool_calls.py186def test_clean_schema_removes_boolean_enum_and_stringifies_enum():CODE
LOW⚡front/common.js1458function refreshAntigravityCredsList() { AppState.antigravityCreds.refresh(); }CODE
LOW⚡front/common.js1459function applyAntigravityStatusFilter() { AppState.antigravityCreds.applyStatusFilter(); }CODE
LOW⚡front/common.js1461function changeAntigravityPageSize() { AppState.antigravityCreds.changePageSize(); }CODE
LOW⚡front/common.js1462function toggleAntigravityFileSelection(filename) {CODE
LOW⚡front/common.js1470function toggleSelectAllAntigravity() {CODE
LOWfront/common.js792async function toggleAntigravityCredDetails(pathId) {CODE
LOWfront/common.js1202async function getAntigravityCredentials() {CODE
LOWfront/common.js1239function downloadAntigravityCredentials() {CODE
LOWfront/common.js1283function toggleAntigravityCallbackUrlSection() {CODE
LOWfront/common.js1351async function processAntigravityCallbackUrl() {CODE
LOWfront/common.js1502async function downloadAllAntigravityCreds() {CODE
LOWfront/common.js1526function handleAntigravityFileSelect(event) { AppState.antigravityUploadFiles.handleFileSelect(event); }CODE
LOWfront/common.js1527function handleAntigravityFileDrop(event) {CODE
LOWfront/common.js1584async function fetchAntigravityUserEmail(filename) {CODE
LOWfront/common.js1641async function verifyAntigravityProjectId(filename) {CODE
LOWfront/common.js1726async function testAntigravityCredential(filename) {CODE
LOWfront/common.js1818async function toggleAntigravityQuotaDetails(pathId) {CODE
LOWfront/common.js1942async function toggleAntigravityErrorDetails(pathId) {CODE
LOWfront/common.js2189async function batchVerifyAntigravityProjectIds() {CODE
LOWfront/common.js2371async function refreshAllAntigravityEmails() {CODE
LOWfront/common.js2423async function deduplicateAntigravityByEmail() {CODE
LOW⚡src/auth.py515async def asyncio_complete_auth_flow(CODE
LOW⚡src/auth.py770async def complete_auth_flow_from_callback_url(CODE
LOWsrc/auth.py45def _prepare_credentials_data(credentials: Credentials, project_id: str, mode: str = "geminicli", subscription_tier: strCODE
LOWsrc/auth.py78def _cleanup_auth_flow_server(state: str):CODE
LOWsrc/auth.py122def cleanup_auth_flows_for_memory():CODE
LOWsrc/credential_manager.py113 async def add_antigravity_credential(self, credential_name: str, credential_data: Dict[str, Any]):CODE
LOWsrc/credential_manager.py433 def _is_permanent_refresh_failure(self, error_msg: str, status_code: Optional[int] = None) -> bool:CODE
LOWsrc/google_oauth_api.py374async def fetch_user_email_from_file(cred_data: Dict[str, Any]) -> Optional[str]:CODE
LOWsrc/google_oauth_api.py534async def fetch_project_id_and_tier(CODE
LOWsrc/utils.py77def get_base_model_from_feature_model(model_name: str) -> str:CODE
LOWsrc/storage_adapter.py53 async def get_all_credential_states(self, mode: str = "geminicli") -> Dict[str, Dict[str, Any]]:CODE
LOWsrc/storage_adapter.py195 async def get_all_credential_states(self, mode: str = "geminicli") -> Dict[str, Dict[str, Any]]:CODE
LOWsrc/storage_adapter.py224 async def export_credential_to_json(self, filename: str, output_path: str = None) -> bool:CODE
LOWsrc/storage_adapter.py246 async def import_credential_from_json(self, json_path: str, filename: str = None) -> bool:CODE
LOW⚡src/panel/creds.py39async def extract_json_files_from_zip(zip_file: UploadFile) -> List[dict]:CODE
LOW⚡src/panel/creds.py91async def clear_all_model_cooldowns_for_credential(CODE
LOW⚡src/panel/creds.py105async def upload_credentials_common(CODE
LOW⚡src/panel/creds.py1057async def deduplicate_credentials_by_email(CODE
LOWsrc/panel/creds.py301async def download_all_creds_common(mode: str = "geminicli") -> Response:CODE
LOWsrc/panel/creds.py377async def refresh_all_user_emails_common(mode: str = "geminicli") -> JSONResponse:CODE
LOWsrc/panel/creds.py445async def deduplicate_credentials_by_email_common(mode: str = "geminicli") -> JSONResponse:CODE
LOWsrc/panel/creds.py532async def verify_credential_project_common(filename: str, mode: str = "geminicli") -> JSONResponse:CODE
LOWsrc/panel/creds.py1090async def verify_credential_project(CODE
LOWsrc/panel/creds.py1223async def configure_preview_channel(CODE
97 more matches not shown…
Decorative Section Separators36 hits · 138 pts
SeverityFileLineSnippetContext
MEDIUM⚡log.py22# -----------------------------------------------------------------COMMENT
MEDIUM⚡log.py26# -----------------------------------------------------------------COMMENT
MEDIUM⚡log.py32# -----------------------------------------------------------------COMMENT
MEDIUM⚡log.py34# -----------------------------------------------------------------COMMENT
MEDIUM⚡log.py58# -----------------------------------------------------------------COMMENT
MEDIUM⚡log.py60# -----------------------------------------------------------------COMMENT
MEDIUM⚡log.py112# -----------------------------------------------------------------COMMENT
MEDIUM⚡log.py114# -----------------------------------------------------------------COMMENT
MEDIUMlog.py203# -----------------------------------------------------------------COMMENT
MEDIUMlog.py205# -----------------------------------------------------------------COMMENT
MEDIUMlog.py224# -----------------------------------------------------------------COMMENT
MEDIUMlog.py226# -----------------------------------------------------------------COMMENT
MEDIUM⚡src/panel/creds.py34# =============================================================================COMMENT
MEDIUM⚡src/panel/creds.py36# =============================================================================COMMENT
MEDIUMsrc/panel/creds.py636# =============================================================================COMMENT
MEDIUMsrc/panel/creds.py638# =============================================================================COMMENT
MEDIUMsrc/panel/utils.py17# =============================================================================COMMENT
MEDIUMsrc/panel/utils.py19# =============================================================================COMMENT
MEDIUMsrc/panel/utils.py98# =============================================================================COMMENT
MEDIUMsrc/panel/utils.py100# =============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py27# ============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py29# ============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py189# ============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py191# ============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py389# ============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py391# ============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py581# ============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py583# ============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py706# ============================================================================COMMENT
MEDIUM⚡src/converter/anthropic2gemini.py708# ============================================================================COMMENT
MEDIUMsrc/converter/anthropic2gemini.py263# ============================================================================COMMENT
MEDIUMsrc/converter/anthropic2gemini.py265# ============================================================================COMMENT
MEDIUMsrc/converter/anthropic2gemini.py356# ============================================================================COMMENT
MEDIUMsrc/converter/anthropic2gemini.py358# ============================================================================COMMENT
MEDIUMsrc/converter/anthropic2gemini.py622# ============================================================================COMMENT
MEDIUMsrc/converter/anthropic2gemini.py624# ============================================================================COMMENT
Deep Nesting130 hits · 108 pts
SeverityFileLineSnippetContext
LOWweb.py52CODE
LOWweb.py64CODE
LOWlog.py119CODE
LOWsrc/token_estimator.py7CODE
LOWsrc/token_estimator.py13CODE
LOWsrc/auth.py122CODE
LOWsrc/auth.py233CODE
LOWsrc/auth.py369CODE
LOWsrc/auth.py515CODE
LOWsrc/auth.py770CODE
LOWsrc/auth.py986CODE
LOWsrc/credential_manager.py243CODE
LOWsrc/credential_manager.py303CODE
LOWsrc/credential_manager.py358CODE
LOWsrc/credential_manager.py433CODE
LOWsrc/google_oauth_api.py405CODE
LOWsrc/google_oauth_api.py634CODE
LOWsrc/google_oauth_api.py716CODE
LOWsrc/google_oauth_api.py128CODE
LOWsrc/utils.py86CODE
LOWsrc/utils.py148CODE
LOWsrc/task_manager.py58CODE
LOWsrc/storage_adapter.py83CODE
LOWsrc/storage_adapter.py283CODE
LOWsrc/panel/auth.py80CODE
LOWsrc/panel/auth.py132CODE
LOWsrc/panel/version.py18CODE
LOWsrc/panel/config_routes.py94CODE
LOWsrc/panel/creds.py39CODE
LOWsrc/panel/creds.py105CODE
LOWsrc/panel/creds.py301CODE
LOWsrc/panel/creds.py445CODE
LOWsrc/panel/creds.py769CODE
LOWsrc/panel/creds.py872CODE
LOWsrc/panel/creds.py1223CODE
LOWsrc/panel/creds.py1451CODE
LOWsrc/panel/logs.py27CODE
LOWsrc/panel/logs.py98CODE
LOWsrc/converter/antigravity_fix.py74CODE
LOWsrc/converter/antigravity_fix.py262CODE
LOWsrc/converter/antigravity_fix.py308CODE
LOWsrc/converter/antigravity_fix.py441CODE
LOWsrc/converter/antigravity_fix.py670CODE
LOWsrc/converter/anti_truncation.py134CODE
LOWsrc/converter/anti_truncation.py225CODE
LOWsrc/converter/anti_truncation.py352CODE
LOWsrc/converter/anti_truncation.py836CODE
LOWsrc/converter/fake_stream.py162CODE
LOWsrc/converter/fake_stream.py356CODE
LOWsrc/converter/utils.py60CODE
LOWsrc/converter/anthropic2gemini.py128CODE
LOWsrc/converter/anthropic2gemini.py267CODE
LOWsrc/converter/anthropic2gemini.py407CODE
LOWsrc/converter/anthropic2gemini.py536CODE
LOWsrc/converter/anthropic2gemini.py585CODE
LOWsrc/converter/anthropic2gemini.py924CODE
LOWsrc/converter/gemini_fix.py120CODE
LOWsrc/converter/gemini_fix.py233CODE
LOWsrc/converter/openai2gemini.py122CODE
LOWsrc/converter/openai2gemini.py219CODE
70 more matches not shown…
Docstring Block Structure6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHsrc/utils.py158 统一的灵活认证函数,支持多种认证方式 此函数可以直接用作 FastAPI 的 Depends 依赖 支持的认证方式: - URL 参数: key - HTTP 头部: AuthoSTRING
HIGHsrc/utils.py267 简化的控制面板密码验证函数 直接验证Bearer token是否等于控制面板密码 Args: credentials: HTTPAuthorizationCredentials 自动注入 STRING
HIGHsrc/panel/utils.py137 验证 mode 参数 Args: mode: 模式字符串 ("geminicli" 或 "antigravity") Returns: str: 验证后的 mode 字符串 STRING
HIGHsrc/converter/thoughtSignature_fix.py35 将 thoughtSignature 编码到工具调用ID中,以便往返保留。 Args: tool_id: 原始工具调用ID signature: thoughtSignature(可选) STRING
HIGHsrc/converter/thoughtSignature_fix.py57 从编码的ID中提取原始工具ID和thoughtSignature。 Args: encoded_id: 编码的工具调用ID Returns: (原始工具ID, thoughtSiSTRING
HIGHsrc/api/geminicli.py47 从凭证数据准备请求头和最终payload Args: payload: 原始请求payload credential_data: 凭证数据字典 target_urlSTRING
Unused Imports23 hits · 22 pts
SeverityFileLineSnippetContext
LOWsrc/token_estimator.py2CODE
LOWsrc/credential_manager.py6CODE
LOWsrc/panel/__init__.py29CODE
LOWsrc/panel/__init__.py29CODE
LOWsrc/panel/__init__.py29CODE
LOWsrc/panel/__init__.py29CODE
LOWsrc/converter/anthropic2gemini.py6CODE
LOWsrc/router/geminicli/gemini.py33CODE
LOWsrc/router/geminicli/gemini.py51CODE
LOWsrc/router/geminicli/openai.py35CODE
LOWsrc/router/geminicli/openai.py53CODE
LOWsrc/router/geminicli/anthropic.py15CODE
LOWsrc/router/geminicli/anthropic.py35CODE
LOWsrc/router/geminicli/anthropic.py53CODE
LOWsrc/router/antigravity/gemini.py15CODE
LOWsrc/router/antigravity/gemini.py35CODE
LOWsrc/router/antigravity/gemini.py53CODE
LOWsrc/router/antigravity/openai.py35CODE
LOWsrc/router/antigravity/openai.py53CODE
LOWsrc/router/antigravity/anthropic.py15CODE
LOWsrc/router/antigravity/anthropic.py23CODE
LOWsrc/router/antigravity/anthropic.py35CODE
LOWsrc/router/antigravity/anthropic.py53CODE
Over-Commented Block4 hits · 4 pts
SeverityFileLineSnippetContext
LOWlog.py321# 2. 设置日志文件: export LOG_FILE=log.txt (或在 .env 中设置)COMMENT
LOWdocker-compose.yml21 # Optional: Google credentials from environmentCOMMENT
LOWdocker-compose.yml41 - ./data/creds:/app/credsCOMMENT
LOWdocker-compose.yml61# image: mongo:7COMMENT
AI Structural Patterns4 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/panel/creds.py659CODE
LOWsrc/storage/psql_manager.py612CODE
LOWsrc/storage/sqlite_manager.py837CODE
LOWsrc/storage/mongodb_manager.py1017CODE
Modern Structural Boilerplate2 hits · 2 pts
SeverityFileLineSnippetContext
LOWlog.py308__all__ = ["log", "set_log_level", "LOG_LEVELS"]CODE
LOWsrc/panel/__init__.py31__all__ = [CODE
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippetContext
LOWinstall.sh294# Check if web.py existsCOMMENT