🚀 通用 AI IDE 账号管理工具:支持 Antigravity / Codex / GitHub Copilot / Windsurf / Kiro / Cursor / Gemini-cli / CodeBuddy,多账号切换、配额监控、自动唤醒与多开实例管理。 🚀 Universal AI IDE account manager for Antigravity / Codex / GitHub Copilot / Windsurf / Kiro / Cursor / Gemini-cli / CodeBuddy, with multi-account switching, quota monitoring, wake-up automation, and multi-insta
This report summarizes scanner evidence for jlcodes99/cockpit-tools, a Rust project with 19,591 GitHub stars. SynthScan examined 1,099,955 lines of code across 2283 source files, recording 1622 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 1.7 (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? 1287 finding(s).
Are imports declared and package/API names verified? 278 finding(s).
Are wrappers, guards, and repeated structures necessary? 1209 finding(s).
Which changes need focused human review? 1622 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 1622 distinct pattern matches across 9 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 | tests/helpers/codexServiceMemberDraftHarness.ts | 7 | export function createCodexServiceMemberDraftHarness(options: { | CODE |
| LOW | src/App.tsx | 297 | function resolveTopPromoDisplayMode(ad: TopRightAd): string { | CODE |
| LOW | src/App.tsx | 305 | function isTopPromoAdVisibleOnPage(ad: TopRightAd, page: Page): boolean { | CODE |
| LOW | src/App.tsx | 349 | function normalizeStoredActivePage(value: string | null): Page | null { | CODE |
| LOW | src/App.tsx | 358 | function normalizeStartupPagePreference(value: string | null | undefined): 'last' | Page { | CODE |
| LOW | src/App.tsx | 438 | function isClaudeWindowsAppLaunchTarget(value: string): boolean { | CODE |
| LOW | src/App.tsx | 519 | function buildExternalImportDedupeKey(payload: { | CODE |
| LOW | src/App.tsx | 566 | function normalizeQuotaAlertPlatform(platform: string | undefined): QuotaAlertPlatform { | CODE |
| LOW | src/App.tsx | 604 | function getQuotaAlertPlatformLabel( | CODE |
| LOW | src/App.tsx | 671 | function getQuotaAlertQuickSettingsType(platform: QuotaAlertPlatform): QuickSettingsType { | CODE |
| LOW | src/types/zed.ts | 80 | function isUnlimitedEditPredictionsLimit(value: string | null | undefined): boolean { | CODE |
| LOW | src/types/zed.ts | 84 | export function getZedAccountDisplayEmail(account: ZedAccount): string { | CODE |
| LOW | src/types/zed.ts | 128 | export function getZedEditPredictionsMetrics(account: ZedAccount): ZedEditPredictionsMetrics { | CODE |
| LOW | src/types/zed.ts | 153 | export function getZedEditPredictionsLabel(account: ZedAccount): string { | CODE |
| LOW | src/types/cursor.ts | 47 | function normalizeCursorMembershipType(membershipType?: string | null): string { | CODE |
| LOW | src/types/cursor.ts | 101 | function isCursorEnterpriseAccount(account: CursorAccount): boolean { | CODE |
| LOW | src/types/cursor.ts | 196 | export function getCursorAccountDisplayEmail(account: CursorAccount): string { | CODE |
| LOW | src/types/navigation.ts | 61 | export function isMainWindowNavigablePage(page: string): page is Page { | CODE |
| LOW | src/types/kiro.ts | 300 | function getBreakdownFreeTrialData( | CODE |
| LOW | src/types/kiro.ts | 583 | export function getKiroAccountDisplayEmail(account: KiroAccount): string { | CODE |
| LOW | src/types/kiro.ts | 597 | export function getKiroAccountDisplayUserId(account: KiroAccount): string { | CODE |
| LOW | src/types/kiro.ts | 604 | export function getKiroAccountLoginProvider(account: KiroAccount): string | null { | CODE |
| LOW | src/types/kiro.ts | 644 | export function getKiroAccountStatusReason(account: KiroAccount): string | null { | CODE |
| LOW | src/types/kiro.ts | 771 | function formatKiroResetTimeAbsolute(resetTime: number): string { | CODE |
| LOW | src/types/windsurf.ts | 84 | export function getWindsurfPlanDisplayName(planType?: string | null): string { | CODE |
| LOW | src/types/windsurf.ts | 135 | export function getWindsurfPlanBadgeClass(planType?: string | null): string { | CODE |
| LOW | src/types/windsurf.ts | 215 | function getNormalizedNumberFromPaths(root: unknown, paths: string[][]): number | null { | CODE |
| LOW | src/types/windsurf.ts | 219 | function resolveWindsurfPlanStatus(account: WindsurfAccount): Record<string, unknown> | null { | CODE |
| LOW | src/types/windsurf.ts | 249 | function resolveWindsurfRemotePlanName(account: WindsurfAccount): string | null { | CODE |
| LOW | src/types/windsurf.ts | 278 | function resolvePlanLabelFromTeamsTier(root: unknown): string | null { | CODE |
| LOW | src/types/windsurf.ts | 293 | export function getWindsurfResolvedPlanLabel(account: WindsurfAccount): string | null { | CODE |
| LOW | src/types/windsurf.ts | 324 | export function getWindsurfAccountDisplayEmail(account: WindsurfAccount): string { | CODE |
| LOW | src/types/windsurf.ts | 542 | function parseProtoTimestampSecondsFromMessage(bytes: Uint8Array): number | null { | CODE |
| LOW | src/types/windsurf.ts | 561 | function normalizeProtoCreditsValue(value: number | null): number | null { | CODE |
| LOW | src/types/windsurf.ts | 568 | function parseWindsurfProtoSummary(account: WindsurfAccount): WindsurfProtoSummary | null { | CODE |
| LOW | src/types/windsurf.ts | 875 | function calcUsedPercentFromRemainingPercent(remainingPercent: number | null): number | null { | CODE |
| LOW | src/types/windsurf.ts | 888 | function calcUsedPercentFromPremiumSnapshot(snapshot: Record<string, unknown>): number | null { | CODE |
| LOW | src/types/windsurf.ts | 905 | function calcRemainingFromPremiumSnapshot(snapshot: Record<string, unknown>): number | null { | CODE |
| LOW | src/types/windsurf.ts | 974 | export function getWindsurfCreditsSummary(account: WindsurfAccount): WindsurfCreditsSummary { | CODE |
| LOW | src/types/windsurf.ts | 1105 | export function getWindsurfBillingStrategy(account: WindsurfAccount): string | null { | CODE |
| LOW | src/types/windsurf.ts | 1157 | export function getWindsurfOfficialUsageMode(account: WindsurfAccount): WindsurfOfficialUsageMode { | CODE |
| LOW | src/types/windsurf.ts | 1162 | export function getWindsurfQuotaUsageSummary(account: WindsurfAccount): WindsurfQuotaUsageSummary { | CODE |
| LOW | src/types/windsurf.ts | 1228 | export function formatWindsurfAllowanceResetLine( | CODE |
| LOW | src/types/windsurf.ts | 1296 | export function formatWindsurfResetTimeAbsolute(resetTime: number | null | undefined): string { | CODE |
| LOW | src/types/codebuddy-compat.ts | 34 | export function getCodebuddyAccountDisplayEmail(account: CodebuddyCnAccount): string { | CODE |
| LOW | src/types/codebuddy-compat.ts | 41 | export function getCodebuddyAccountDisplayName(account: CodebuddyCnAccount): string { | CODE |
| LOW | src/types/codebuddy-compat.ts | 62 | export function getCodebuddyPlanBadgeClass(badge: string): string { | CODE |
| LOW⚡ | src/types/codebuddy-compat.ts | 76 | export function getCodebuddyAccountStatus(account: CodebuddyCnAccount): string { | CODE |
| LOW⚡ | src/types/codebuddy-compat.ts | 83 | export function getCodebuddyCreditsBalance(account: CodebuddyCnAccount): number | null { | CODE |
| LOW⚡ | src/types/codebuddy-compat.ts | 90 | export function getCodebuddyOfficialQuotaModel(account: CodebuddyCnAccount): OfficialQuotaModel { | CODE |
| LOW⚡ | src/types/codebuddy-compat.ts | 97 | export function getCodebuddyQuotaDisplayItems(account: CodebuddyCnAccount): QuotaDisplayItem[] { | CODE |
| LOW⚡ | src/types/codebuddy-compat.ts | 104 | export function getCodebuddyQuotaCategoryGroups( | CODE |
| LOW⚡ | src/types/codebuddy-compat.ts | 114 | export function getCodebuddyResourceSummary(account: CodebuddyCnAccount): CodebuddyResourceSummary | null { | CODE |
| LOW | src/types/codebuddy-compat.ts | 167 | export function getCodebuddyExtraCreditSummary(account: CodebuddyCnAccount): CodebuddyExtraCreditSummary { | CODE |
| LOW | src/types/workbuddy-compat.ts | 23 | export function getWorkbuddyAccountDisplayEmail(account: WorkbuddyAccount): string { | CODE |
| LOW | src/types/workbuddy-compat.ts | 30 | export function getWorkbuddyAccountDisplayName(account: WorkbuddyAccount): string { | CODE |
| LOW⚡ | src/types/workbuddy-compat.ts | 58 | export function getWorkbuddyAccountStatus(account: WorkbuddyAccount): string { | CODE |
| LOW⚡ | src/types/workbuddy-compat.ts | 65 | export function getWorkbuddyOfficialQuotaModel(account: WorkbuddyAccount): OfficialQuotaModel { | CODE |
| LOW⚡ | src/types/workbuddy-compat.ts | 72 | export function getWorkbuddyQuotaDisplayItems(account: WorkbuddyAccount): QuotaDisplayItem[] { | CODE |
| LOW⚡ | src/types/workbuddy-compat.ts | 79 | export function getWorkbuddyQuotaCategoryGroups(account: WorkbuddyAccount, t: (key: string, defaultValue?: string) => st | CODE |
| 1092 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/cockpit-core/src/modules/account.rs | 2205 | Some("user@example.com".to_string()), | CODE |
| LOW | crates/cockpit-core/src/modules/account.rs | 2210 | "user@example.com".to_string(), | CODE |
| LOW | crates/cockpit-core/src/modules/account.rs | 2230 | assert_eq!(first.id, build_account_storage_id("user@example.com")); | CODE |
| LOW | src-tauri/src/commands/codex_instance_terminal.rs | 444 | std::fs::write(temp.join("wt.exe"), b"placeholder").expect("write wt.exe stub"); | CODE |
| LOW | …rc/modules/codex_local_access_tests_pricing_profile.rs | 629 | Some("user@example.com"), | CODE |
| LOW | …rc/modules/codex_local_access_tests_pricing_profile.rs | 712 | Some("user@example.com"), | CODE |
| LOW | …rc/modules/codex_local_access_tests_pricing_profile.rs | 827 | Some("user@example.com"), | CODE |
| LOW | …rc/modules/codex_local_access_tests_pricing_profile.rs | 932 | Some("user@example.com"), | CODE |
| LOW | …rc/modules/codex_local_access_tests_pricing_profile.rs | 1034 | Some("user@example.com"), | CODE |
| LOW | …rc/modules/codex_local_access_tests_pricing_profile.rs | 2371 | Some("user@example.com"), | CODE |
| LOW | src-tauri/src/modules/claude_account_desktop_profile.rs | 294 | || email.contains("placeholder") | CODE |
| LOW | src-tauri/src/modules/kiro_account_identity.rs | 175 | email: Some("user@example.com".into()), | CODE |
| LOW | src-tauri/src/modules/import.rs | 1344 | assert_eq!(parsed.email, "user@example.com"); | CODE |
| LOW | src-tauri/src/modules/zcode_oauth.rs | 687 | "user": { "user_id": "user-1", "email": "user@example.com" } | CODE |
| LOW | …c-tauri/src/modules/codex_local_access_usage_rollup.rs | 235 | email: "user@example.com".into(), | CODE |
| LOW | …rc/modules/codex_local_access_tests_request_routing.rs | 318 | account_email: "user@example.com".to_string(), | CODE |
| LOW | …rc/modules/codex_local_access_tests_request_routing.rs | 446 | Some("user@example.com"), | CODE |
| LOW | src-tauri/src/modules/account.rs | 2942 | Some("user@example.com".to_string()), | CODE |
| LOW | src-tauri/src/modules/account.rs | 2947 | "user@example.com".to_string(), | CODE |
| LOW | …rc/modules/codex_local_access_tests_sidecar_gateway.rs | 11 | account_email: "user@example.com".to_string(), | CODE |
| LOW | src-tauri/src/modules/account_query_identity.rs | 348 | serde_json::json!({"id":"old","email":"user@example.com","created_at":0,"last_used":0}); | CODE |
| LOW | src-tauri/src/modules/codex_account_chatgpt_plan.rs | 122 | "user@example.com".into(), | CODE |
| LOW⚡ | src-tauri/src/modules/hermes_auth.rs | 123 | "email": "user@example.com", | CODE |
| LOW⚡ | src-tauri/src/modules/hermes_auth.rs | 132 | "user@example.com" | CODE |
| LOW⚡ | src-tauri/src/modules/hermes_auth.rs | 141 | {"email": "user@example.com", "access_token": "old"}, | CODE |
| LOW⚡ | src-tauri/src/modules/hermes_auth.rs | 147 | "email": "user@example.com", | CODE |
| LOW | src/locales/tr.json | 526 | "placeholder": "Örnek: ghu_xxx / sk-ws-xxx / {\"access_token\":\"eyJ...\",\"refresh_token\":\"rt_...\"} / [{...} | CODE |
| LOW | src/locales/tr.json | 1850 | "placeholder": "Teslim notları, kurtarma e-postası veya hesap ayrıntıları", | CODE |
| LOW | src/locales/tr.json | 1935 | "placeholder": "Desteklenen format: [{\"email\":\"xxx\",\"refresh_token\":\"1//...\"}] veya doğrudan refresh_token | CODE |
| LOW | src/locales/tr.json | 2736 | "placeholder": "Örnek: satır başına bir refresh_token veya {\"refresh_token\":\"rt_...\"}", | CODE |
| LOW | src/locales/tr.json | 2988 | "placeholder": "Özel model kimliği girin", | CODE |
| LOW | src/locales/tr.json | 3361 | "placeholder": "Hesap ara..." | CODE |
| LOW | src/locales/tr.json | 3920 | "placeholder": "Her satıra bir model kimliği girin veya kimlikleri virgülle ayırın.", | CODE |
| LOW | src/locales/tr.json | 4547 | "placeholder": "Teslim notları, kurtarma e-postası veya hesap ayrıntıları", | CODE |
| LOW | src/locales/tr.json | 4861 | "placeholder": "Örnek:\ngpt-5.4-mini\ngpt-5.3-*", | CODE |
| LOW | src/locales/tr.json | 7281 | "placeholder": "API Anahtarını yapıştırın", | CODE |
| LOW | src/locales/tr.json | 7522 | "placeholder": "Günlük içeriğinde ara", | CODE |
| LOW | src/locales/tr.json | 7888 | "placeholder": "Sağlayıcı API Key yapıştırın", | CODE |
| LOW | src/locales/tr.json | 7999 | "placeholder": "Örn: Free ana, Max 20x, ekip hesabı", | CODE |
| LOW | src/locales/ja.json | 531 | "placeholder": "例: ghu_xxx / sk-ws-xxx / {\"access_token\":\"eyJ...\",\"refresh_token\":\"rt_...\"} / [{...}]" | CODE |
| LOW | src/locales/ja.json | 1850 | "placeholder": "受け渡しメモ、復旧メール、アカウント詳細など", | CODE |
| LOW | src/locales/ja.json | 1935 | "placeholder": "対応形式:[{\"email\":\"xxx\",\"refresh_token\":\"1//...\"}] または refresh_token を直接貼り付け", | CODE |
| LOW | src/locales/ja.json | 2736 | "placeholder": "例: 1 行に 1 つの refresh_token、または {\"refresh_token\":\"rt_...\"}", | CODE |
| LOW | src/locales/ja.json | 2988 | "placeholder": "カスタムモデル ID を入力", | CODE |
| LOW | src/locales/ja.json | 3358 | "placeholder": "アカウントを検索..." | CODE |
| LOW | src/locales/ja.json | 3920 | "placeholder": "1 行に 1 つのモデル ID を入力するか、カンマで区切ってください。", | CODE |
| LOW | src/locales/ja.json | 4547 | "placeholder": "受け渡しメモ、復旧メール、アカウント詳細など", | CODE |
| LOW | src/locales/ja.json | 4861 | "placeholder": "例:\ngpt-5.4-mini\ngpt-5.3-*", | CODE |
| LOW | src/locales/ja.json | 7281 | "placeholder": "API キーを貼り付け", | CODE |
| LOW | src/locales/ja.json | 7522 | "placeholder": "ログ内を検索", | CODE |
| LOW | src/locales/ja.json | 7888 | "placeholder": "プロバイダーの API Key を貼り付け", | CODE |
| LOW | src/locales/ja.json | 7999 | "placeholder": "例:Free メイン、Max 20x、チームアカウント", | CODE |
| LOW | src/locales/de.json | 531 | "placeholder": "Beispiel: ghu_xxx / sk-ws-xxx / {\"access_token\":\"eyJ...\",\"refresh_token\":\"rt_...\"} / [{. | CODE |
| LOW | src/locales/de.json | 1850 | "placeholder": "Lieferhinweise, Wiederherstellungs-E-Mail oder Kontodetails", | CODE |
| LOW | src/locales/de.json | 1935 | "placeholder": "Unterstütztes Format: [{\"email\":\"xxx\",\"refresh_token\":\"1//...\"}] oder refresh_token direkt | CODE |
| LOW | src/locales/de.json | 2736 | "placeholder": "Beispiel: ein refresh_token pro Zeile oder {\"refresh_token\":\"rt_...\"}", | CODE |
| LOW | src/locales/de.json | 2988 | "placeholder": "Benutzerdefinierte Modell-ID eingeben", | CODE |
| LOW | src/locales/de.json | 3361 | "placeholder": "Konten suchen..." | CODE |
| LOW | src/locales/de.json | 3920 | "placeholder": "Eine Modell-ID pro Zeile eingeben oder IDs durch Kommas trennen.", | CODE |
| LOW | src/locales/de.json | 4547 | "placeholder": "Lieferhinweise, Wiederherstellungs-E-Mail oder Kontodetails", | CODE |
| 218 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src-tauri/src/commands/account.rs | 725 | // ─── 账号分组持久化 ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/commands/codex_account_commands.rs | 2815 | // ─── Codex 账号分组持久化 ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src-tauri/src/modules/codex_account_index.rs | 1102 | // ─── Codex 分组额度刷新策略(最高优先级)──────────────────────────── | COMMENT |
| MEDIUM | src/components/AccountGroupModal.tsx | 65 | // ─── 分组管理弹窗 ────────────────────────────────────────── | COMMENT |
| MEDIUM | src/components/AccountGroupModal.tsx | 581 | // ─── 通用添加账号到分组弹窗 ────────────────────────────────── | COMMENT |
| MEDIUM | src/components/AccountGroupModal.tsx | 867 | // ─── 添加到分组弹窗 ────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 751 | // ─── Privacy ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 769 | // ─── View Mode ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 782 | // ─── Search & Filter ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 798 | // ─── Sort ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 862 | // ─── Selection ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 894 | // ─── Tags ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 1040 | // ─── Tag filter click-outside ───────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 1053 | // ─── Fetch on mount ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 1058 | // ─── CRUD ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 1180 | // ─── Inject ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 1272 | // ─── WebView(网页会话) ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 1302 | // ─── Export ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 1357 | // ─── Add Modal ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 1751 | // ─── Import ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 1925 | // ─── OAuth (Device Flow) ────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 2396 | // ─── Flow Notice ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 2415 | // ─── Current Account ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 2464 | // ─── Utilities ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/hooks/useProviderAccountsPage.ts | 2487 | // ─── Return ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/WindsurfAccountsPage.tsx | 745 | // ─── Platform-specific: Presentation & Credits ────────────────────── | COMMENT |
| MEDIUM | src/pages/WindsurfAccountsPage.tsx | 1019 | // ─── Tier filter ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/WindsurfAccountsPage.tsx | 1046 | // ─── Filtering & Sorting ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/WindsurfAccountsPage.tsx | 1151 | // ─── Render helpers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/CursorAccountsPage.tsx | 224 | // ─── Platform-specific: Plan resolution ──────────────────────────── | COMMENT |
| MEDIUM | src/pages/CursorAccountsPage.tsx | 262 | // ─── Platform-specific: Quota ────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/CursorAccountsPage.tsx | 375 | // ─── Platform-specific: Dynamic tier filter ──────────────────────── | COMMENT |
| MEDIUM | src/pages/CursorAccountsPage.tsx | 463 | // ─── Filtering & Sorting ────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/CursorAccountsPage.tsx | 613 | // ─── Render helpers ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/AccountsPage.tsx | 202 | // ─── 验证状态标记 ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/AccountsPage.tsx | 604 | // ─── 账号分组 ────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/CodexAccountsPage.tsx | 244 | // ─── Codex-specific: OAuth via Tauri events ────────────────────────── | COMMENT |
| MEDIUM | src/pages/CodexAccountsPage.tsx | 356 | // ─── Codex-specific: Switch / Import ───────────────────────────────── | COMMENT |
| MEDIUM | src/pages/CodexAccountsPage.tsx | 433 | // ─── Platform-specific: Presentation ───────────────────────────────── | COMMENT |
| MEDIUM | src/pages/CodexAccountsPage.tsx | 491 | // ─── Filtering & Sorting ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/CodexAccountsPage.tsx | 539 | // ─── Render helpers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/useCodexAccountsBaseController.tsx | 100 | // ─── Codex 账号分组 ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/GitHubCopilotAccountsPage.tsx | 188 | // ─── Platform-specific: Presentation & filtering ──────────────────── | COMMENT |
| MEDIUM | src/pages/GitHubCopilotAccountsPage.tsx | 415 | // ─── Render helpers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/KiroAccountsPage.tsx | 225 | // ─── Platform-specific: Presentation & Credits ────────────────────── | COMMENT |
| MEDIUM | src/pages/KiroAccountsPage.tsx | 413 | // ─── Platform-specific: Dynamic tier filter ───────────────────────── | COMMENT |
| MEDIUM | src/pages/KiroAccountsPage.tsx | 477 | // ─── Filtering & Sorting ──────────────────────────────────────────── | COMMENT |
| MEDIUM | src/pages/KiroAccountsPage.tsx | 599 | // ─── Render helpers ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/services/platformGroupService.ts | 15 | // ─── 平台标识规范化 ────────────────────────────────────────── | COMMENT |
| MEDIUM | src/services/platformGroupService.ts | 25 | // ─── 内存缓存与任务串行队列 ───────────────────────────────── | COMMENT |
| MEDIUM | src/services/platformGroupService.ts | 50 | // ─── 磁盘 I/O ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/services/platformGroupService.ts | 92 | // ─── 公开 API ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/services/platformGroupService.ts | 272 | // ─── 本地 Active Tab 记忆持久化(不纳入云端同步与备份) ───────── | COMMENT |
| MEDIUM | src/services/accountGroupService.ts | 23 | // ─── 内存缓存 ─────────────────────────────────────── | COMMENT |
| MEDIUM | src/services/accountGroupService.ts | 150 | // ─── 公开 API(全部改为 async) ─────────────────────── | COMMENT |
| MEDIUM | src/services/codexAccountGroupService.ts | 157 | // ─── 内存缓存 ─────────────────────────────────────── | COMMENT |
| MEDIUM | src/services/codexAccountGroupService.ts | 210 | // ─── 公开 API ─────────────────────────────────────── | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/cockpit-core/src/models/codex.rs | 141 | pub hourly_percentage: i32, | COMMENT |
| LOW | crates/cockpit-core/src/models/windsurf.rs | 41 | pub windsurf_auth_token: Option<String>, | COMMENT |
| LOW | crates/cockpit-core/src/modules/windsurf_devin_oauth.rs | 1 | //! Windsurf Devin Auth (2026-04+) 协议实现 | COMMENT |
| LOW | crates/cockpit-core/src/modules/vscode_inject.rs | 1 | //! VS Code GitHub Copilot token injection module. | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 41 | /// WebSocket 服务是否启用 | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 61 | pub global_proxy_url: String, | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 81 | #[serde(default = "default_auto_refresh")] | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 101 | /// GitHub Copilot 自动刷新间隔(分钟),-1 表示禁用 | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 121 | pub workbuddy_auto_refresh_minutes: i32, | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 141 | #[serde(default = "default_hide_dock_icon")] | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 161 | /// Codex 启动后唤醒延时(秒),0 表示立即 | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 181 | pub auto_backup_last_backup_at: Option<String>, | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 201 | #[serde(default = "default_vscode_app_path")] | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 221 | /// Qoder 启动路径(为空则使用默认路径) | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 241 | pub trae_solo_cn_app_scan_roots: String, | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 261 | #[serde(default = "default_grok_opencode_sync_on_switch")] | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 281 | /// Antigravity 切号是否启用“本地落盘 + 扩展无感”且不重启 | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 301 | pub auto_switch_selected_account_ids: Vec<String>, | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 321 | #[serde(default = "default_quota_alert_threshold")] | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 341 | /// 是否启用 GitHub Copilot 配额预警通知 | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 361 | pub cursor_quota_alert_enabled: bool, | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 381 | #[serde(default = "default_qoder_quota_alert_threshold")] | COMMENT |
| LOW | crates/cockpit-core/src/modules/config.rs | 401 | /// 是否启用 WorkBuddy 配额预警通知 | COMMENT |
| LOW | crates/cockpit-core/src/modules/websocket.rs | 21 | // ============ 事件通知(Tools -> 扩展) ============ | COMMENT |
| LOW | src-tauri/src/models/grok.rs | 101 | pub access_token: String, | COMMENT |
| LOW | src-tauri/src/models/grok.rs | 201 | pub coding_data_retention_opt_out: Option<bool>, | COMMENT |
| LOW | src-tauri/src/models/codex_local_access.rs | 181 | #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] | COMMENT |
| LOW | src-tauri/src/models/codex_local_access.rs | 681 | pub image_generation_main_model: Option<String>, | COMMENT |
| LOW | src-tauri/src/models/codex_local_access.rs | 701 | #[serde(default, skip_serializing_if = "Vec::is_empty")] | COMMENT |
| LOW | src-tauri/src/models/codex_local_access.rs | 721 | #[serde(default)] | COMMENT |
| LOW | src-tauri/src/models/codex_local_access.rs | 761 | pub debug_logs: bool, | COMMENT |
| LOW | src-tauri/src/models/codex_local_access.rs | 941 | #[serde(default)] | COMMENT |
| LOW | src-tauri/src/models/codex_local_access.rs | 961 | #[serde(default, skip_serializing_if = "Option::is_none")] | COMMENT |
| LOW | src-tauri/src/models/codex_local_access.rs | 981 | pub error_category: String, | COMMENT |
| LOW | src-tauri/src/models/codex.rs | 121 | #[serde(default)] | COMMENT |
| LOW | src-tauri/src/models/codex.rs | 201 | pub openai_api_key: Option<String>, | COMMENT |
| LOW | src-tauri/src/models/codex.rs | 221 | #[serde(default, skip_serializing_if = "is_false")] | COMMENT |
| LOW | src-tauri/src/models/codex.rs | 241 | /// 网关模式下用于生图转发的来源账号池。 | COMMENT |
| LOW | src-tauri/src/models/codex.rs | 441 | /// 周配额百分比 (0-100) | COMMENT |
| LOW | src-tauri/src/models/account.rs | 21 | pub account_password: Option<String>, | COMMENT |
| LOW | src-tauri/src/models/windsurf.rs | 41 | pub windsurf_auth_token: Option<String>, | COMMENT |
| LOW | src-tauri/src/commands/codex_temp_login_commands.rs | 1 | // Codex 官方客户端临时登录命令。 | COMMENT |
| LOW | src-tauri/src/modules/codex_account_provider.rs | 1101 | COMMENT | |
| LOW | src-tauri/src/modules/codex_account_model_catalog.rs | 2421 | /// profile 级「工具写入的 provider 引用」快照文件名。 | COMMENT |
| LOW | src-tauri/src/modules/windsurf_devin_oauth.rs | 1 | //! Windsurf Devin Auth (2026-04+) 协议实现 | COMMENT |
| LOW | src-tauri/src/modules/windsurf_devin_oauth.rs | 521 | // ========== GetUserStatus: 查 Devin 账号的计划/配额 ========== | COMMENT |
| LOW | src-tauri/src/modules/codex_account_grok_provider.rs | 1 | // Codex 账号模块:Grok(xAI) 供应商账号。 | COMMENT |
| LOW | src-tauri/src/modules/vscode_inject.rs | 1 | //! VS Code GitHub Copilot token injection module. | COMMENT |
| LOW | src-tauri/src/modules/group_settings.rs | 1 | //! 模型分组配置模块 | COMMENT |
| LOW | src-tauri/src/modules/codex_proxy_desktop_router.rs | 1 | //! A stable, per-account SOCKS5 / HTTP CONNECT endpoint shared by account requests, | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 41 | /// 用户配置(持久化存储) | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 61 | pub global_proxy_enabled: bool, | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 81 | #[serde(default = "default_theme")] | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 101 | /// Codex 自动刷新间隔(分钟),-1 表示禁用 | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 121 | /// Zed 自动刷新间隔(分钟),-1 表示禁用 | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 141 | pub grok_sync_official_auth_on_switch: bool, | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 161 | #[serde(default = "default_qoder_auto_refresh")] | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 181 | /// 是否隐藏 Dock 图标(macOS) | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 201 | pub startup_minimized: bool, | COMMENT |
| LOW | src-tauri/src/modules/config.rs | 221 | /// 是否启用后台账号授权保活 | COMMENT |
| 28 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | resources/codex/codex_client_models.json | 72 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 72 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 159 | "base_instructions": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job i | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 159 | "base_instructions": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job i | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 864 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 864 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 945 | "base_instructions": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job i | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 945 | "base_instructions": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job i | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 1014 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 1014 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 1095 | "base_instructions": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job i | CODE |
| MEDIUM⚡ | resources/codex/codex_client_models.json | 1095 | "base_instructions": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job i | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | resources/codex/codex_client_models.json | 72 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your | CODE |
| LOW⚡ | resources/codex/codex_client_models.json | 159 | "base_instructions": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job i | CODE |
| LOW⚡ | resources/codex/codex_client_models.json | 864 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your | CODE |
| LOW⚡ | resources/codex/codex_client_models.json | 945 | "base_instructions": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job i | CODE |
| LOW⚡ | resources/codex/codex_client_models.json | 1014 | "instructions_template": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your | CODE |
| LOW⚡ | resources/codex/codex_client_models.json | 1095 | "base_instructions": "You are Codex, an agent based on GPT-6. You and the user share one workspace, and your job i | CODE |
| LOW | resources/codex/codex_client_models.json | 234 | "instructions_template": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your | CODE |
| LOW | resources/codex/codex_client_models.json | 288 | "base_instructions": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your job i | CODE |
| LOW | resources/codex/codex_client_models.json | 359 | "instructions_template": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your | CODE |
| LOW | resources/codex/codex_client_models.json | 413 | "base_instructions": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your job i | CODE |
| LOW | resources/codex/codex_client_models.json | 480 | "instructions_template": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your | CODE |
| LOW | resources/codex/codex_client_models.json | 534 | "base_instructions": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your job i | CODE |
| LOW | resources/codex/codex_client_models.json | 729 | "instructions_template": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your | CODE |
| LOW | resources/codex/codex_client_models.json | 791 | "base_instructions": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your job i | CODE |
| LOW | src-tauri/resources/deepseek_codex_models.json | 57 | "instructions_template": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your | CODE |
| LOW | src-tauri/resources/deepseek_codex_models.json | 69 | "base_instructions": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your job i | CODE |
| LOW | src-tauri/resources/deepseek_codex_models.json | 124 | "instructions_template": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your | CODE |
| LOW | src-tauri/resources/deepseek_codex_models.json | 136 | "base_instructions": "You are Codex, an agent based on GPT-5. You and the user share one workspace, and your job i | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/cockpit-core/src/modules/windsurf_devin_oauth.rs | 565 | // Step 1: WindsurfPostAuth | COMMENT |
| LOW⚡ | crates/cockpit-core/src/modules/windsurf_devin_oauth.rs | 576 | // Step 2: GetOneTimeAuthToken | COMMENT |
| LOW⚡ | crates/cockpit-core/src/modules/windsurf_devin_oauth.rs | 581 | // Step 3: RegisterUser → ide_token (机器绑定) | COMMENT |
| LOW⚡ | crates/cockpit-core/src/modules/windsurf_devin_oauth.rs | 588 | // Step 4: GetCurrentUser → UserStatusProto | COMMENT |
| LOW⚡ | src-tauri/src/modules/windsurf_devin_oauth.rs | 466 | // Step 1: WindsurfPostAuth | COMMENT |
| LOW⚡ | src-tauri/src/modules/windsurf_devin_oauth.rs | 476 | // Step 2: GetOneTimeAuthToken | COMMENT |
| LOW⚡ | src-tauri/src/modules/windsurf_devin_oauth.rs | 481 | // Step 3: RegisterUser → ide_token (机器绑定) | COMMENT |
| LOW⚡ | src-tauri/src/modules/windsurf_devin_oauth.rs | 488 | // Step 4: GetCurrentUser → UserStatusProto(失败不致命) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/cockpit-core/src/modules/windsurf_devin_oauth.rs | 565 | // Step 1: WindsurfPostAuth | COMMENT |
| LOW⚡ | crates/cockpit-core/src/modules/windsurf_devin_oauth.rs | 576 | // Step 2: GetOneTimeAuthToken | COMMENT |
| LOW⚡ | crates/cockpit-core/src/modules/windsurf_devin_oauth.rs | 581 | // Step 3: RegisterUser → ide_token (机器绑定) | COMMENT |
| LOW⚡ | crates/cockpit-core/src/modules/windsurf_devin_oauth.rs | 588 | // Step 4: GetCurrentUser → UserStatusProto | COMMENT |
| LOW⚡ | src-tauri/src/modules/windsurf_devin_oauth.rs | 466 | // Step 1: WindsurfPostAuth | COMMENT |
| LOW⚡ | src-tauri/src/modules/windsurf_devin_oauth.rs | 476 | // Step 2: GetOneTimeAuthToken | COMMENT |
| LOW⚡ | src-tauri/src/modules/windsurf_devin_oauth.rs | 481 | // Step 3: RegisterUser → ide_token (机器绑定) | COMMENT |
| LOW⚡ | src-tauri/src/modules/windsurf_devin_oauth.rs | 488 | // Step 4: GetCurrentUser → UserStatusProto(失败不致命) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/cpa-multi-agent-parity.md | 1 | # Codex multi-agent call-chain parity | COMMENT |