Sub2API 一站式开源中转服务,让 Claude、Openai 、Gemini、Grok订阅统一接入,支持拼车共享,更高效分摊成本,原生工具无缝使用。
This report summarizes scanner evidence for Wei-Shaw/sub2api, a Go project with 45,202 GitHub stars. SynthScan examined 1,442,016 lines of code across 4097 source files, recording 1578 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 1.5 (Low 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? 1139 finding(s).
Are imports declared and package/API names verified? 186 finding(s).
Are wrappers, guards, and repeated structures necessary? 754 finding(s).
Which changes need focused human review? 1578 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 1578 distinct pattern matches across 14 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 |
|---|---|---|---|---|
| MEDIUM | frontend/src/utils/platformColors.ts | 27 | // ── Badge (bg + text + border, for inline badges with border) ─────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 46 | // ── Light badge (softer bg, no border) ────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 64 | // ── Border ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 122 | // ── Accent bar (gradient) ─────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 141 | // ── Text (price, icon) ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 160 | // ── Icon (check mark etc.) ────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 179 | // ── Button (solid bg) ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 198 | // ── Discount badge ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 217 | // ── Header gradient (subscription confirm) ───────────────────────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 236 | // ── Header text (light text on gradient bg) ──────────────────────── | COMMENT |
| MEDIUM | frontend/src/utils/platformColors.ts | 273 | // ── Public API ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/admin/channel/types.ts | 261 | // ── 模型模式冲突检测 ────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/admin/channel/types.ts | 300 | // ── 区间校验 ────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/channels/SupportedModelChip.vue | 272 | // ── Popover positioning ───────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/api/admin/settings.ts | 22 | // ── 平台限额类型 ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/api/admin/settings.ts | 474 | // ── 平台限额(嵌套 JSON,系统层 + 7 auth-source 层)──────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/api/admin/settings.ts | 827 | // ── 平台限额(嵌套 JSON,系统层 + 7 auth-source 层)──────────────────────────────── | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 20 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 23 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 25 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 45 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 47 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 50 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 52 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 77 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 79 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 89 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 91 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 95 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 97 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 105 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 107 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 110 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 112 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 120 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 128 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 131 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 133 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 145 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 147 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 157 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 159 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 164 | # ======================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.local.yml | 166 | # ======================================================================= | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 1 | # ============================================================================= | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 3 | # ============================================================================= | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 63 | # ======================================================================= | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 65 | # ======================================================================= | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 223 | # =========================================================================== | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 225 | # =========================================================================== | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 254 | # =========================================================================== | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 256 | # =========================================================================== | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 292 | # ============================================================================= | COMMENT |
| MEDIUM | deploy/docker-compose.local.yml | 294 | # ============================================================================= | COMMENT |
| MEDIUM | deploy/install.sh | 47 | # ============================================================ | COMMENT |
| MEDIUM | deploy/install.sh | 49 | # ============================================================ | COMMENT |
| MEDIUM⚡ | deploy/docker-deploy.sh | 2 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-deploy.sh | 4 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-deploy.sh | 13 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | deploy/docker-compose.dev.yml | 1 | # ============================================================================= | COMMENT |
| 193 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/components/keys/UseKeyModal.vue | 1121 | // Shape follows Grok Build user guide (~/.grok/docs + custom-models) and production-ready Sub2API setups. | COMMENT |
| LOW | frontend/src/views/auth/README.md | 201 | COMMENT | |
| LOW | frontend/src/views/auth/USAGE_EXAMPLES.md | 1 | # Authentication Views Usage Examples | COMMENT |
| LOW | frontend/src/views/auth/USAGE_EXAMPLES.md | 21 | COMMENT | |
| LOW | frontend/src/views/auth/USAGE_EXAMPLES.md | 41 | ```typescript | COMMENT |
| LOW | frontend/src/views/auth/USAGE_EXAMPLES.md | 61 | // - On success: | COMMENT |
| LOW | deploy/docker-compose.local.yml | 1 | # ============================================================================= | COMMENT |
| LOW | deploy/docker-compose.local.yml | 101 | # Generate a secure secret: openssl rand -hex 32 | COMMENT |
| LOW | deploy/docker-compose.local.yml | 121 | # Timezone Configuration | COMMENT |
| LOW | deploy/docker-compose.local.yml | 141 | - GEMINI_CLI_OAUTH_CLIENT_SECRET=${GEMINI_CLI_OAUTH_CLIENT_SECRET:-} | COMMENT |
| LOW | deploy/docker-deploy.sh | 1 | #!/bin/bash | COMMENT |
| LOW | deploy/config.example.yaml | 1 | # Sub2API Configuration File | COMMENT |
| LOW | deploy/config.example.yaml | 21 | # 运行模式:"debug" 用于开发,"release" 用于生产环境 | COMMENT |
| LOW | deploy/config.example.yaml | 41 | # Set [] explicitly to disable forwarded-IP trust in high-security mode. | COMMENT |
| LOW | deploy/config.example.yaml | 61 | max_concurrent_streams: 50 | COMMENT |
| LOW | deploy/config.example.yaml | 81 | # Passkey 在生产环境要求 HTTPS。RP ID 只填写域名(不含协议和端口),RP origins | COMMENT |
| LOW | deploy/config.example.yaml | 101 | run_mode: "standard" | COMMENT |
| LOW | deploy/config.example.yaml | 121 | allow_credentials: true | COMMENT |
| LOW | deploy/config.example.yaml | 141 | # Legacy compatibility switch. When true, raw forwarded headers take over | COMMENT |
| LOW | deploy/config.example.yaml | 181 | crs_hosts: [] | COMMENT |
| LOW | deploy/config.example.yaml | 201 | enabled: true | COMMENT |
| LOW | deploy/config.example.yaml | 221 | proxy_fallback: | COMMENT |
| LOW | deploy/config.example.yaml | 241 | openai_response_header_timeout: 0 | COMMENT |
| LOW | deploy/config.example.yaml | 261 | # 非流式上游响应体读取上限(默认 8MB) | COMMENT |
| LOW | deploy/config.example.yaml | 281 | # - account_proxy: Isolate by account+proxy combination (default, finest granularity) | COMMENT |
| LOW | deploy/config.example.yaml | 301 | # | COMMENT |
| LOW | deploy/config.example.yaml | 321 | # - {{ .UpstreamModel }} : final upstream model | COMMENT |
| LOW | deploy/config.example.yaml | 341 | # requests skip this retired fallback and keep their selected model. | COMMENT |
| LOW | deploy/config.example.yaml | 361 | enabled: true | COMMENT |
| LOW | deploy/config.example.yaml | 481 | # Stats cache for free-tier soft gate. Hot path never waits on DB: misses | COMMENT |
| LOW | deploy/config.example.yaml | 501 | # max_upstream_clients: 最大缓存客户端数量,超出后淘汰最久未使用的 | COMMENT |
| LOW | deploy/config.example.yaml | 521 | # Non-streaming Images JSON keepalive interval (seconds), 0=disable; commits HTTP 200 after the first heartbeat | COMMENT |
| LOW | deploy/config.example.yaml | 541 | max_waiting_requests: 100 | COMMENT |
| LOW | deploy/config.example.yaml | 561 | # 粘性会话最大排队长度 | COMMENT |
| LOW | deploy/config.example.yaml | 601 | # 全量重建周期(秒),0 表示禁用 | COMMENT |
| LOW | deploy/config.example.yaml | 621 | level: "info" | COMMENT |
| LOW | deploy/config.example.yaml | 641 | # Enable file output (default path auto-derived) | COMMENT |
| LOW | deploy/config.example.yaml | 661 | # Compress rotated files | COMMENT |
| LOW | deploy/config.example.yaml | 681 | # Candidate accounts loaded per cursor page (maximum 1000) | COMMENT |
| LOW | deploy/config.example.yaml | 701 | # API Key Auth Cache Configuration | COMMENT |
| LOW | deploy/config.example.yaml | 721 | # 缓存未命中时启用 singleflight 合并回源 | COMMENT |
| LOW | deploy/config.example.yaml | 741 | # ============================================================================= | COMMENT |
| LOW | deploy/config.example.yaml | 761 | enabled: true | COMMENT |
| LOW | deploy/config.example.yaml | 781 | # 启用聚合作业 | COMMENT |
| LOW | deploy/config.example.yaml | 801 | # Raw usage_logs retention | COMMENT |
| LOW | deploy/config.example.yaml | 821 | max_range_days: 31 | COMMENT |
| LOW | deploy/config.example.yaml | 841 | # 关键写接口幂等记录 TTL(秒) | COMMENT |
| LOW | deploy/config.example.yaml | 861 | # SSE ping interval during concurrency wait (seconds) | COMMENT |
| LOW | deploy/config.example.yaml | 881 | password: "your_secure_password_here" | COMMENT |
| LOW | deploy/config.example.yaml | 901 | COMMENT | |
| LOW | deploy/config.example.yaml | 921 | db: 0 | COMMENT |
| LOW | deploy/config.example.yaml | 941 | # Other detailed settings (cleanup, aggregation, etc.) are configured in ops settings dialog | COMMENT |
| LOW | deploy/config.example.yaml | 961 | access_token_expire_minutes: 0 | COMMENT |
| LOW | deploy/config.example.yaml | 1041 | userinfo_username_path: "" | COMMENT |
| LOW | deploy/config.example.yaml | 1061 | COMMENT | |
| LOW | deploy/config.example.yaml | 1081 | # ============================================================================= | COMMENT |
| LOW | deploy/config.example.yaml | 1101 | # ============================================================================= | COMMENT |
| LOW | deploy/config.example.yaml | 1121 | # Model names must match catalog keys exactly. Edits are detected by content hash | COMMENT |
| LOW | deploy/config.example.yaml | 1141 | # and is retried next check. | COMMENT |
| LOW | deploy/config.example.yaml | 1161 | # Number of requests to allow in half-open state | COMMENT |
| 492 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/App.vue | 68 | function onAdminComplianceRequired(event: Event) { | CODE |
| LOW | frontend/src/composables/useSwipeSelect.ts | 49 | export function findRowIndexByDomPosition(scrollEl: Element, clientY: number): number { | CODE |
| LOW | frontend/src/composables/useSwipeSelect.ts | 326 | function shouldPreferNativeTextSelection(target: HTMLElement): boolean { | CODE |
| LOW | frontend/src/composables/useSwipeSelect.ts | 342 | function shouldPreferNativeSelectionOutsideRows(target: HTMLElement): boolean { | CODE |
| LOW | frontend/src/composables/useNavigationLoading.ts | 119 | export function useNavigationLoadingState() { | CODE |
| LOW | frontend/src/composables/useModelWhitelist.ts | 474 | export async function fetchAntigravityDefaultMappings(): Promise<{ from: string; to: string }[]> { | CODE |
| LOW | frontend/src/composables/useModelWhitelist.ts | 552 | export function getPresetMappingsByPlatform(platform: string) { | CODE |
| LOW | frontend/src/constants/platformCatalog.ts | 89 | export function supportsUpstreamModelSync(platform: string | null | undefined): boolean { | CODE |
| LOW | frontend/src/constants/platformCatalog.ts | 105 | export function compositePrecedencePlatformIds(): string[] { | CODE |
| LOW | frontend/src/features/prompt-audit/viewModel.ts | 158 | export function resolveDeleteRangeFilters( | CODE |
| LOW | frontend/src/features/prompt-audit/PromptAuditView.vue | 386 | function requestFilterDeletePreview() { | CODE |
| LOW | …ntend/src/features/channel-monitor-v2/monitorFormat.ts | 54 | export function formatMonitorTokensPerSecond(tpm: number | null | undefined): string { | CODE |
| LOW | …ntend/src/features/channel-monitor-v2/monitorFormat.ts | 76 | export function formatMonitorSuccessRateFromError(errorRate: number): string { | CODE |
| LOW | …ntend/src/features/channel-monitor-v2/monitorFormat.ts | 172 | export function formatLatencyKpiSecondary( | CODE |
| LOW | …ntend/src/features/channel-monitor-v2/monitorFormat.ts | 185 | export function monitorErrorCategoryLabel(category: string): string { | CODE |
| LOW | frontend/src/stores/adminSettings.ts | 87 | function setOpsMonitoringEnabledLocal(value: boolean) { | CODE |
| LOW | frontend/src/stores/adminSettings.ts | 93 | function setOpsRealtimeMonitoringEnabledLocal(value: boolean) { | CODE |
| LOW | frontend/src/stores/adminSettings.ts | 105 | function setOpsQueryModeDefaultLocal(value: string) { | CODE |
| LOW | frontend/src/stores/auth.ts | 37 | function normalizePendingAuthTokenField(value: unknown): PendingAuthTokenField { | CODE |
| LOW | frontend/src/stores/auth.ts | 41 | function getPersistedPendingAuthSession(): PendingAuthSessionSummary | null { | CODE |
| LOW | frontend/src/stores/auth.ts | 69 | function persistPendingAuthSession(session: PendingAuthSessionSummary): void { | CODE |
| LOW | frontend/src/stores/auth.ts | 73 | function clearPendingAuthSessionStorage(): void { | CODE |
| LOW | frontend/src/utils/geminiExplicitCache.ts | 23 | export function normalizeExplicitCacheUpstreamMaxTTL(value: unknown): number | null { | CODE |
| LOW | frontend/src/utils/geminiExplicitCache.ts | 30 | export function applyExplicitCacheUpstreamCredentials( | CODE |
| LOW | frontend/src/utils/registrationEmailPolicy.ts | 12 | export function normalizeRegistrationEmailSuffixDomain(raw: string): string { | CODE |
| LOW | frontend/src/utils/registrationEmailPolicy.ts | 22 | export function normalizeRegistrationEmailSuffixDomains( | CODE |
| LOW | frontend/src/utils/registrationEmailPolicy.ts | 42 | export function parseRegistrationEmailSuffixWhitelistInput(input: string): string[] { | CODE |
| LOW | frontend/src/utils/registrationEmailPolicy.ts | 62 | export function normalizeRegistrationEmailSuffixWhitelist( | CODE |
| LOW | frontend/src/utils/registrationEmailPolicy.ts | 68 | function extractRegistrationEmailDomain(email: string): string { | CODE |
| LOW | frontend/src/utils/registrationEmailPolicy.ts | 83 | export function isRegistrationEmailSuffixAllowed( | CODE |
| LOW | frontend/src/utils/registrationEmailPolicy.ts | 108 | export function formatRegistrationEmailSuffixWhitelistForMessage( | CODE |
| LOW⚡ | frontend/src/utils/registrationEmailPolicy.ts | 125 | function normalizeRegistrationEmailSuffixDomainStrict(raw: string): string { | CODE |
| LOW⚡ | frontend/src/utils/registrationEmailPolicy.ts | 134 | export function isRegistrationEmailSuffixDomainValid(domain: string): boolean { | CODE |
| LOW⚡ | frontend/src/utils/registrationEmailPolicy.ts | 144 | function normalizeRegistrationEmailSuffixToken(value: string, strict: boolean): string { | CODE |
| LOW | frontend/src/utils/registrationEmailPolicy.ts | 163 | function toCanonicalRegistrationEmailSuffix(domain: string): string { | CODE |
| LOW | frontend/src/utils/ccswitchImport.ts | 57 | export function resolveCcSwitchImportConfig( | CODE |
| LOW | frontend/src/utils/ccswitchImport.ts | 95 | export function buildCcSwitchImportDeeplink(input: CcSwitchImportDeeplinkInput): string { | CODE |
| LOW | frontend/src/utils/usageServiceTier.ts | 1 | export function normalizeUsageServiceTier(serviceTier?: string | null): string | null { | CODE |
| LOW | frontend/src/utils/platformColors.ts | 306 | export function platformBorderStrongClass(p: string): string { | CODE |
| LOW | frontend/src/utils/platformColors.ts | 338 | export function platformGradientTextClass(p: string): string { | CODE |
| LOW | frontend/src/utils/platformColors.ts | 342 | export function platformGradientSubtextClass(p: string): string { | CODE |
| LOW | frontend/src/utils/featureFlags.ts | 183 | export function isChannelMonitorRouteEnabled(): boolean { | CODE |
| LOW | frontend/src/utils/featureFlags.ts | 204 | export function getChannelMonitorRefreshIntervalSeconds(): number { | CODE |
| LOW | frontend/src/utils/featureFlags.ts | 211 | export function isChannelMonitorThroughputHidden(): boolean { | CODE |
| LOW | frontend/src/utils/featureFlags.ts | 222 | export function isChannelMonitorQuotaVisible(): boolean { | CODE |
| LOW | frontend/src/utils/featureFlags.ts | 228 | export function isChannelMonitorUserRankingHidden(): boolean { | CODE |
| LOW | frontend/src/utils/subscriptionQuota.ts | 30 | export function getRemainingDurationParts( | CODE |
| LOW | frontend/src/utils/subscriptionQuota.ts | 50 | export function getExpirationDateRelation( | CODE |
| LOW | frontend/src/utils/subscriptionQuota.ts | 70 | export function getRemainingExpiryDuration( | CODE |
| LOW | frontend/src/utils/oauthAffiliate.ts | 10 | export function normalizeOAuthAffiliateCode(value?: unknown): string { | CODE |
| LOW | frontend/src/utils/oauthAffiliate.ts | 25 | export function storeAffiliateReferralCode(value?: unknown, now = Date.now()): void { | CODE |
| LOW | frontend/src/utils/oauthAffiliate.ts | 44 | export function loadAffiliateReferralCode(now = Date.now()): string { | CODE |
| LOW | frontend/src/utils/oauthAffiliate.ts | 67 | export function clearAffiliateReferralCode(): void { | CODE |
| LOW | frontend/src/utils/oauthAffiliate.ts | 78 | export function resolveAffiliateReferralCode(...values: unknown[]): string { | CODE |
| LOW | frontend/src/utils/oauthAffiliate.ts | 125 | export function clearAllAffiliateReferralCodes(): void { | CODE |
| LOW | frontend/src/utils/format.ts | 268 | function normalizeReasoningEffortKey(effort: string | null | undefined): string { | CODE |
| LOW | frontend/src/utils/format.ts | 298 | export function reasoningEffortValuesEqual( | CODE |
| LOW | frontend/src/utils/format.ts | 309 | export function formatReasoningEffortMapping( | CODE |
| LOW | frontend/src/utils/format.ts | 426 | export function formatCountdownWithSuffix(targetDate: string | Date | null | undefined): string | null { | CODE |
| LOW | frontend/src/utils/format.ts | 437 | export function formatRelativeWithDateTime(date: string | Date | null | undefined): string { | CODE |
| 441 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …src/features/prompt-audit/__tests__/components.spec.ts | 40 | expect(token.attributes('placeholder')).toContain('admin.promptAudit.pool.keepSecret') | CODE |
| LOW | …src/features/prompt-audit/__tests__/components.spec.ts | 65 | expect(token.attributes('placeholder')).toContain('admin.promptAudit.pool.reenterSecret') | CODE |
| LOW | frontend/src/stores/__tests__/app.spec.ts | 405 | contact_info: 'test@test.com', | CODE |
| LOW | frontend/src/stores/__tests__/auth.spec.ts | 42 | email: 'admin@example.com', | CODE |
| LOW | frontend/src/stores/__tests__/auth.spec.ts | 304 | store.register({ email: 'user@example.com', password: 'secret-123' }) | CODE |
| LOW | frontend/src/stores/__tests__/auth.spec.ts | 325 | await store.login({ email: 'admin@example.com', password: '123456' }) | CODE |
| LOW | …nd/src/utils/__tests__/registrationEmailPolicy.spec.ts | 83 | expect(isRegistrationEmailSuffixAllowed('user@example.com', [])).toBe(true) | CODE |
| LOW | …nd/src/utils/__tests__/registrationEmailPolicy.spec.ts | 87 | expect(isRegistrationEmailSuffixAllowed('user@example.com', ['@example.com'])).toBe(true) | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 59 | props: { testIdPrefix: 'oidc', initialEmail: 'user@example.com', isSubmitting: false }, | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 100 | initialEmail: 'user@example.com', | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 118 | email: 'user@example.com', | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 151 | email: 'user@example.com', | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 259 | email: 'user@example.com' | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 274 | await wrapper.get('[data-testid="linuxdo-create-account-email"]').setValue('user@example.com') | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 292 | initialEmail: 'user@example.com', | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 351 | email: 'user@example.com', | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 365 | initialEmail: 'user@example.com', | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 396 | email: 'user@example.com', | CODE |
| LOW | …s/auth/__tests__/PendingOAuthCreateAccountForm.spec.ts | 416 | initialEmail: 'user@example.com', | CODE |
| LOW | …in/group/__tests__/GroupRPMOverridesModal.edit.spec.ts | 15 | { user_id: 7, user_email: 'user@example.com', user_name: '', user_status: 'active', rpm_override: 100 } | CODE |
| LOW | …omponents/admin/group/__tests__/GroupI18nField.spec.ts | 124 | expect(input.attributes('placeholder')).toBe('admin.groups.i18nField.placeholder:English') | CODE |
| LOW | …omponents/admin/group/__tests__/GroupI18nField.spec.ts | 163 | expect(input.attributes('placeholder')).toBe('Enter name') | CODE |
| LOW | …in/group/__tests__/ReasoningEffortPolicyFields.spec.ts | 86 | props: ["id", "modelValue", "placeholder"], | CODE |
| LOW | …in/group/__tests__/ReasoningEffortPolicyFields.spec.ts | 88 | '<input :id="id" :value="modelValue ?? \'\'" :placeholder="placeholder" />', | CODE |
| LOW | …s/admin/group/__tests__/GroupRPMOverridesModal.spec.ts | 16 | mocks.list.mockResolvedValue({ items: [{ id: 7, email: 'user@example.com', status: 'active' }] }) | CODE |
| LOW | …s/admin/group/__tests__/GroupRPMOverridesModal.spec.ts | 33 | await wrapper.findAll('button').find(b => b.text().includes('user@example.com'))!.trigger('click') | CODE |
| LOW | …dmin/group/__tests__/GroupRateMultipliersModal.spec.ts | 16 | mocks.list.mockResolvedValue({ items: [{ id: 7, email: 'user@example.com', status: 'active' }] }) | CODE |
| LOW | …dmin/group/__tests__/GroupRateMultipliersModal.spec.ts | 33 | await wrapper.findAll('button').find(b => b.text().includes('user@example.com'))!.trigger('click') | CODE |
| LOW | …group/__tests__/GroupRateMultipliersModal.edit.spec.ts | 14 | { user_id: 7, user_email: 'user@example.com', user_name: '', user_status: 'active', rate_multiplier: 2, rpm_override | CODE |
| LOW | …ts/admin/user/__tests__/UserAllowedGroupsModal.spec.ts | 21 | props: { show: false, user: { id: 1, email: 'user@example.com', allowed_groups: [7], group_rates: { 7: 0.5 } } as Ad | CODE |
| LOW | …channel/__tests__/PricingEntryCard.timePricing.spec.ts | 143 | expect(wrapper.get('[data-reasoning-effort="max"]').attributes('placeholder')) | CODE |
| LOW | …nts/admin/channel/__tests__/TimePricingSection.spec.ts | 98 | expect(timeInputs.every(input => input.attributes('placeholder') === 'HH:mm:ss')).toBe(true) | CODE |
| LOW | frontend/src/components/common/SearchInput.vue | 10 | :placeholder="placeholder" | CODE |
| LOW | …omponents/account/__tests__/CreateAccountModal.spec.ts | 832 | .find((candidate) => candidate.attributes('placeholder') === 'https://cloudcode-pa.googleapis.com') | CODE |
| LOW | frontend/src/api/__tests__/admin.grok.spec.ts | 46 | email: 'user@example.com', | CODE |
| LOW | frontend/src/api/__tests__/tokenRefresh.spec.ts | 16 | localStorage.setItem('auth_user', JSON.stringify({ id: 7, email: 'admin@example.com' })) | CODE |
| LOW | frontend/src/api/__tests__/passkey.spec.ts | 163 | user: { id: 'BAU', name: 'user@example.com', displayName: 'user' } | CODE |
| LOW | …tend/src/views/auth/__tests__/MCPLoginRedirect.spec.ts | 69 | await wrapper.get('#email').setValue('user@example.com') | CODE |
| LOW | frontend/src/views/auth/__tests__/RegisterView.spec.ts | 151 | await wrapper.get('#email').setValue('user@example.com') | CODE |
| LOW | frontend/src/views/auth/__tests__/RegisterView.spec.ts | 171 | email: 'user@example.com', | CODE |
| LOW | frontend/src/views/auth/__tests__/RegisterView.spec.ts | 190 | await wrapper.get('#email').setValue('user@example.com') | CODE |
| LOW | frontend/src/views/auth/__tests__/RegisterView.spec.ts | 204 | email: 'user@example.com', | CODE |
| LOW | …ws/auth/__tests__/TencentCaptchaForgotPassword.spec.ts | 90 | await wrapper.get('#email').setValue('user@example.com') | CODE |
| LOW | …ws/auth/__tests__/TencentCaptchaForgotPassword.spec.ts | 97 | email: 'user@example.com', | CODE |
| LOW | …/views/auth/__tests__/TencentCaptchaActionGate.spec.ts | 135 | await wrapper.get('#email').setValue('user@example.com') | CODE |
| LOW | …/views/auth/__tests__/TencentCaptchaActionGate.spec.ts | 152 | await wrapper.get('#email').setValue('user@example.com') | CODE |
| LOW | …nd/src/views/auth/__tests__/WechatCallbackView.spec.ts | 586 | await emailInput.setValue('user@example.com') | CODE |
| LOW | …src/views/auth/__tests__/MCPOAuthAuthorizeView.spec.ts | 8 | auth: { isAdmin: false, user: { email: 'user@example.com' } }, | CODE |
| LOW | frontend/src/views/setup/SetupWizardView.vue | 320 | placeholder="admin@example.com" | CODE |
| LOW | …ntend/src/views/admin/settings/EmailTemplateEditor.vue | 179 | :key="placeholder" | CODE |
| LOW | …iews/admin/__tests__/GroupsView.columnSettings.spec.ts | 171 | props: ['modelValue', 'options', 'placeholder'], | CODE |
| LOW | frontend/src/views/admin/__tests__/SettingsView.spec.ts | 1841 | .attributes("placeholder"), | CODE |
| LOW | frontend/src/views/admin/__tests__/SettingsView.spec.ts | 1919 | .attributes("placeholder"), | CODE |
| LOW | …/src/views/admin/__tests__/ProxiesView.filters.spec.ts | 36 | props: ['modelValue', 'options', 'placeholder'], | CODE |
| LOW | …/src/views/admin/__tests__/ProxiesView.filters.spec.ts | 38 | template: `<select :data-filter="placeholder" :value="modelValue" | CODE |
| LOW | …/admin/ops/utils/__tests__/errorDetailResponse.spec.ts | 21 | user_email: 'user@example.com', | CODE |
| LOW⚡ | deploy/config.example.yaml | 1050 | admin_email: "admin@example.com" | CODE |
| LOW | backend/ent/userattributedefinition.go | 41 | // Placeholder holds the value of the "placeholder" field. | COMMENT |
| LOW | backend/ent/userattributedefinition_update.go | 147 | // SetPlaceholder sets the "placeholder" field. | COMMENT |
| LOW | backend/ent/userattributedefinition_update.go | 153 | // SetNillablePlaceholder sets the "placeholder" field if the given value is not nil. | COMMENT |
| 125 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/internal/handler/auth_dingtalk_oauth.go | 358 | // Step 2: 必须 — UnionID 是全局唯一,作为 subject + 合成邮箱种子;nick 是用户在 App 自设的昵称 | COMMENT |
| LOW⚡ | backend/internal/payment/load_balancer.go | 94 | // Step 1: query enabled instances matching payment type. | COMMENT |
| LOW⚡ | backend/internal/payment/load_balancer.go | 100 | // Step 2: batch-fetch daily usage for all candidates. | COMMENT |
| LOW⚡ | backend/internal/payment/load_balancer.go | 103 | // Step 3: filter by limits. | COMMENT |
| LOW⚡ | backend/internal/payment/load_balancer.go | 112 | // Step 4: pick by strategy. | COMMENT |
| LOW⚡ | backend/internal/service/update_service.go | 263 | // Step 1: Move current binary to backup | COMMENT |
| LOW⚡ | backend/internal/service/update_service.go | 268 | // Step 2: Move new binary to target location (atomic, same filesystem) | COMMENT |
| LOW | backend/internal/service/payment_config_providers.go | 289 | // NOTE: This function exceeds 30 lines due to per-field nil-check patch update | COMMENT |
| LOW⚡ | backend/internal/service/openai_fast_policy_ws_test.go | 773 | // Step 1: parse Anthropic request (mirrors openai_gateway_messages.go:38-50). | COMMENT |
| LOW⚡ | backend/internal/service/openai_fast_policy_ws_test.go | 780 | // Step 2: BetaFastMode header → service_tier="priority" (mirrors line 58-61). | COMMENT |
| LOW⚡ | backend/internal/service/openai_fast_policy_ws_test.go | 787 | // Step 3: marshal & apply fast policy (mirrors line 78 + 149). | COMMENT |
| LOW⚡ | backend/internal/service/openai_fast_policy_ws_test.go | 795 | // Step 4: default policy must preserve the explicit fast/priority request. | COMMENT |
| LOW⚡ | backend/internal/service/oauth_service.go | 205 | // Step 1: Get organization info using sessionKey | COMMENT |
| LOW⚡ | backend/internal/service/oauth_service.go | 211 | // Step 2: Generate PKCE values | COMMENT |
| LOW⚡ | backend/internal/service/oauth_service.go | 223 | // Step 3: Get authorization code using cookie | COMMENT |
| LOW⚡ | backend/internal/service/oauth_service.go | 229 | // Step 4: Exchange code for token | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 75 | // Step 1: User-Agent 检查 (必需) - 必须是 claude-cli/x.x.x | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 76 | // Step 2: 对于非 messages 路径和 /messages/count_tokens,只要 UA 匹配就通过 | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 77 | // Step 3: 检查 max_tokens=1 + haiku 探测请求绕过(UA 已验证) | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 78 | // Step 4: 对于 messages 路径,进行严格验证: | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 85 | // Step 1: User-Agent 检查 | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 91 | // Step 2: 非 messages 路径只要 UA 匹配就通过 | COMMENT |
| LOW | backend/internal/service/claude_code_validator.go | 102 | // Step 3: 检查 max_tokens=1 + haiku 探测请求绕过 | COMMENT |
| LOW | backend/internal/service/claude_code_validator.go | 114 | // Step 4: messages 路径,进行严格验证 | COMMENT |
| LOW | backend/internal/service/payment_config_plans.go | 159 | // NOTE: This function exceeds 30 lines due to per-field nil-check patch update boilerplate | COMMENT |
| LOW | backend/internal/service/payment_config_service.go | 335 | // NOTE: This function exceeds 30 lines because each field requires an independent | COMMENT |
| LOW | backend/internal/pkg/tlsfingerprint/dialer.go | 146 | // Step 1: Create SOCKS5 dialer | COMMENT |
| LOW⚡ | backend/internal/pkg/tlsfingerprint/dialer.go | 169 | // Step 2: Establish SOCKS5 tunnel to target | COMMENT |
| LOW⚡ | backend/internal/pkg/tlsfingerprint/dialer.go | 178 | // Step 3: Perform TLS handshake on the tunnel with utls fingerprint | COMMENT |
| LOW⚡ | backend/internal/pkg/tlsfingerprint/dialer.go | 187 | // Step 1: TCP connect to proxy server | COMMENT |
| LOW | backend/internal/pkg/tlsfingerprint/dialer.go | 208 | // Step 2: Send CONNECT request to establish tunnel | COMMENT |
| LOW | backend/internal/pkg/tlsfingerprint/dialer.go | 231 | // Step 3: Read CONNECT response | COMMENT |
| LOW | backend/internal/pkg/tlsfingerprint/dialer.go | 249 | // Step 4: Perform TLS handshake on the tunnel with utls fingerprint | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/internal/handler/auth_dingtalk_oauth.go | 358 | // Step 2: 必须 — UnionID 是全局唯一,作为 subject + 合成邮箱种子;nick 是用户在 App 自设的昵称 | COMMENT |
| LOW⚡ | backend/internal/payment/load_balancer.go | 94 | // Step 1: query enabled instances matching payment type. | COMMENT |
| LOW⚡ | backend/internal/payment/load_balancer.go | 100 | // Step 2: batch-fetch daily usage for all candidates. | COMMENT |
| LOW⚡ | backend/internal/payment/load_balancer.go | 103 | // Step 3: filter by limits. | COMMENT |
| LOW⚡ | backend/internal/payment/load_balancer.go | 112 | // Step 4: pick by strategy. | COMMENT |
| LOW⚡ | backend/internal/service/update_service.go | 263 | // Step 1: Move current binary to backup | COMMENT |
| LOW⚡ | backend/internal/service/update_service.go | 268 | // Step 2: Move new binary to target location (atomic, same filesystem) | COMMENT |
| LOW⚡ | backend/internal/service/openai_fast_policy_ws_test.go | 773 | // Step 1: parse Anthropic request (mirrors openai_gateway_messages.go:38-50). | COMMENT |
| LOW⚡ | backend/internal/service/openai_fast_policy_ws_test.go | 780 | // Step 2: BetaFastMode header → service_tier="priority" (mirrors line 58-61). | COMMENT |
| LOW⚡ | backend/internal/service/openai_fast_policy_ws_test.go | 787 | // Step 3: marshal & apply fast policy (mirrors line 78 + 149). | COMMENT |
| LOW⚡ | backend/internal/service/openai_fast_policy_ws_test.go | 795 | // Step 4: default policy must preserve the explicit fast/priority request. | COMMENT |
| LOW⚡ | backend/internal/service/oauth_service.go | 205 | // Step 1: Get organization info using sessionKey | COMMENT |
| LOW⚡ | backend/internal/service/oauth_service.go | 211 | // Step 2: Generate PKCE values | COMMENT |
| LOW⚡ | backend/internal/service/oauth_service.go | 223 | // Step 3: Get authorization code using cookie | COMMENT |
| LOW⚡ | backend/internal/service/oauth_service.go | 229 | // Step 4: Exchange code for token | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 75 | // Step 1: User-Agent 检查 (必需) - 必须是 claude-cli/x.x.x | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 76 | // Step 2: 对于非 messages 路径和 /messages/count_tokens,只要 UA 匹配就通过 | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 77 | // Step 3: 检查 max_tokens=1 + haiku 探测请求绕过(UA 已验证) | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 78 | // Step 4: 对于 messages 路径,进行严格验证: | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 85 | // Step 1: User-Agent 检查 | COMMENT |
| LOW⚡ | backend/internal/service/claude_code_validator.go | 91 | // Step 2: 非 messages 路径只要 UA 匹配就通过 | COMMENT |
| LOW | backend/internal/service/claude_code_validator.go | 102 | // Step 3: 检查 max_tokens=1 + haiku 探测请求绕过 | COMMENT |
| LOW | backend/internal/service/claude_code_validator.go | 114 | // Step 4: messages 路径,进行严格验证 | COMMENT |
| LOW | backend/internal/pkg/tlsfingerprint/dialer.go | 146 | // Step 1: Create SOCKS5 dialer | COMMENT |
| LOW⚡ | backend/internal/pkg/tlsfingerprint/dialer.go | 169 | // Step 2: Establish SOCKS5 tunnel to target | COMMENT |
| LOW⚡ | backend/internal/pkg/tlsfingerprint/dialer.go | 178 | // Step 3: Perform TLS handshake on the tunnel with utls fingerprint | COMMENT |
| LOW⚡ | backend/internal/pkg/tlsfingerprint/dialer.go | 187 | // Step 1: TCP connect to proxy server | COMMENT |
| LOW | backend/internal/pkg/tlsfingerprint/dialer.go | 208 | // Step 2: Send CONNECT request to establish tunnel | COMMENT |
| LOW | backend/internal/pkg/tlsfingerprint/dialer.go | 231 | // Step 3: Read CONNECT response | COMMENT |
| LOW | backend/internal/pkg/tlsfingerprint/dialer.go | 249 | // Step 4: Perform TLS handshake on the tunnel with utls fingerprint | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | deploy/install.sh | 328 | # Check if running interactively (can access terminal) | COMMENT |
| LOW | deploy/install.sh | 331 | # Check if /dev/tty is available (works even when piped) | COMMENT |
| LOW | deploy/install.sh | 420 | # Check if running as root | COMMENT |
| LOW | deploy/install.sh | 585 | # Check if the release exists | COMMENT |
| LOW | deploy/install.sh | 856 | # Check if Sub2API is installed | COMMENT |
| LOW | deploy/install.sh | 898 | # Check if Sub2API is installed | COMMENT |
| LOW | deploy/install.sh | 915 | # Check if same version | COMMENT |
| LOW | deploy/install.sh | 939 | # Set LATEST_VERSION to the target version for download_and_extract | COMMENT |
| LOW | deploy/docker-deploy.sh | 57 | # Check if command exists | COMMENT |
| LOW | deploy/docker-deploy.sh | 70 | # Check if openssl is available | COMMENT |
| LOW | deploy/docker-deploy.sh | 76 | # Check if deployment already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src/components/keys/UseKeyModal.vue | 1174 | # Text multi-agent / client web_search sub-agent (NOT Imagine image/video). | COMMENT |
| MEDIUM | frontend/src/components/keys/UseKeyModal.vue | 1266 | # Switch model: grok-4.5 | grok-4.3 | grok-build-0.1 | grok-4.20-multi-agent-0309 (text / web_search) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | backend/internal/pkg/openai/codex_gpt61_sol.json | 75 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job | CODE |
| MEDIUM⚡ | backend/internal/pkg/openai/codex_gpt61_sol.json | 75 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/i18n/locales/en/misc.ts | 269 | description: '<div style="line-height: 1.7;"><p style="margin-bottom: 12px;">Click the button to create your fir | CODE |
| MEDIUM⚡ | backend/internal/pkg/openai/codex_gpt61_sol.json | 75 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job | CODE |
| LOW⚡ | backend/internal/pkg/openai/codex_gpt61_sol.json | 75 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | deploy/docker-compose.dev.yml | 6 | # Usage: | COMMENT |
| LOW⚡ | deploy/docker-compose.standalone.yml | 7 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tools/check_pnpm_audit_exceptions.py | 23 | CODE | |
| LOW | tools/check_pnpm_audit_exceptions.py | 64 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | backend/internal/handler/admin/group_handler.go | 939 | _ = groupID // TODO: implement actual stats | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/release-tools/test_release_matrix.py | 2 | CODE |