mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-16 02:11:28 +00:00
471 lines
13 KiB
JSON
471 lines
13 KiB
JSON
{
|
|
"scope": "src/**/*.{ts,tsx,js,jsx,mjs,cjs}",
|
|
"syncFs": {
|
|
"totalOccurrences": 835,
|
|
"filesAffected": 100,
|
|
"hotpathOccurrences": 724,
|
|
"hotpathFilesAffected": 89,
|
|
"topHotpathFiles": [
|
|
{
|
|
"file": "src/management/shared-manager.ts",
|
|
"count": 60,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"cpSync",
|
|
"existsSync",
|
|
"lstatSync",
|
|
"mkdirSync",
|
|
"readdirSync",
|
|
"readFileSync",
|
|
"readlinkSync",
|
|
"rmSync",
|
|
"statSync",
|
|
"symlinkSync",
|
|
"unlinkSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/utils/claude-symlink-manager.ts",
|
|
"count": 27,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"lstatSync",
|
|
"mkdirSync",
|
|
"readdirSync",
|
|
"readlinkSync",
|
|
"renameSync",
|
|
"rmSync",
|
|
"statSync",
|
|
"symlinkSync",
|
|
"unlinkSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/utils/shell-completion.ts",
|
|
"count": 23,
|
|
"calls": [
|
|
"appendFileSync",
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"readFileSync",
|
|
"statSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/web-server/routes/settings-routes.ts",
|
|
"count": 23,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"readFileSync",
|
|
"renameSync",
|
|
"statSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/utils/claude-dir-installer.ts",
|
|
"count": 21,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"cpSync",
|
|
"existsSync",
|
|
"lstatSync",
|
|
"mkdirSync",
|
|
"readdirSync",
|
|
"renameSync",
|
|
"rmSync",
|
|
"statSync",
|
|
"unlinkSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/cliproxy/binary/version-cache.ts",
|
|
"count": 20,
|
|
"calls": [
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"readFileSync",
|
|
"unlinkSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/management/recovery-manager.ts",
|
|
"count": 20,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"renameSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/web-server/routes/cliproxy-stats-routes.ts",
|
|
"count": 20,
|
|
"calls": [
|
|
"closeSync",
|
|
"existsSync",
|
|
"fstatSync",
|
|
"mkdirSync",
|
|
"openSync",
|
|
"readdirSync",
|
|
"readFileSync",
|
|
"readSync",
|
|
"renameSync",
|
|
"statSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/web-server/routes/misc-routes.ts",
|
|
"count": 20,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"readdirSync",
|
|
"readFileSync",
|
|
"renameSync",
|
|
"statSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/web-server/routes/persist-routes.ts",
|
|
"count": 17,
|
|
"calls": [
|
|
"closeSync",
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"lstatSync",
|
|
"openSync",
|
|
"readdirSync",
|
|
"readSync",
|
|
"renameSync",
|
|
"unlinkSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
}
|
|
],
|
|
"topFilesOverall": [
|
|
{
|
|
"file": "src/management/shared-manager.ts",
|
|
"count": 60,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"cpSync",
|
|
"existsSync",
|
|
"lstatSync",
|
|
"mkdirSync",
|
|
"readdirSync",
|
|
"readFileSync",
|
|
"readlinkSync",
|
|
"rmSync",
|
|
"statSync",
|
|
"symlinkSync",
|
|
"unlinkSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/config/migration-manager.ts",
|
|
"count": 27,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"readdirSync",
|
|
"readFileSync",
|
|
"renameSync",
|
|
"rmdirSync",
|
|
"unlinkSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/utils/claude-symlink-manager.ts",
|
|
"count": 27,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"lstatSync",
|
|
"mkdirSync",
|
|
"readdirSync",
|
|
"readlinkSync",
|
|
"renameSync",
|
|
"rmSync",
|
|
"statSync",
|
|
"symlinkSync",
|
|
"unlinkSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/utils/shell-completion.ts",
|
|
"count": 23,
|
|
"calls": [
|
|
"appendFileSync",
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"readFileSync",
|
|
"statSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/web-server/routes/settings-routes.ts",
|
|
"count": 23,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"readFileSync",
|
|
"renameSync",
|
|
"statSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/utils/claude-dir-installer.ts",
|
|
"count": 21,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"cpSync",
|
|
"existsSync",
|
|
"lstatSync",
|
|
"mkdirSync",
|
|
"readdirSync",
|
|
"renameSync",
|
|
"rmSync",
|
|
"statSync",
|
|
"unlinkSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/cliproxy/binary/version-cache.ts",
|
|
"count": 20,
|
|
"calls": [
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"readFileSync",
|
|
"unlinkSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/copilot/copilot-package-manager.ts",
|
|
"count": 20,
|
|
"calls": [
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"readFileSync",
|
|
"rmSync",
|
|
"unlinkSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/management/recovery-manager.ts",
|
|
"count": 20,
|
|
"calls": [
|
|
"copyFileSync",
|
|
"existsSync",
|
|
"mkdirSync",
|
|
"renameSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
},
|
|
{
|
|
"file": "src/web-server/routes/cliproxy-stats-routes.ts",
|
|
"count": 20,
|
|
"calls": [
|
|
"closeSync",
|
|
"existsSync",
|
|
"fstatSync",
|
|
"mkdirSync",
|
|
"openSync",
|
|
"readdirSync",
|
|
"readFileSync",
|
|
"readSync",
|
|
"renameSync",
|
|
"statSync",
|
|
"writeFileSync"
|
|
],
|
|
"markers": []
|
|
}
|
|
]
|
|
},
|
|
"legacyShim": {
|
|
"totalMarkers": 131,
|
|
"filesAffected": 56,
|
|
"topFiles": [
|
|
{
|
|
"file": "src/utils/config-manager.ts",
|
|
"count": 13,
|
|
"calls": [],
|
|
"markers": [
|
|
"* Get config file path (legacy JSON path)",
|
|
"* Precedence: --config-dir flag > CCS_DIR env > CCS_HOME env (legacy, appends .ccs) > ~/.ccs default",
|
|
"* Read and parse config (legacy compatibility)",
|
|
"* Returns Config with profiles from unified config.yaml or legacy config.json.",
|
|
"* Returns config.yaml in unified mode, config.json in legacy mode.",
|
|
"* then falls back to config.json for backward compatibility.",
|
|
"// Convert unified cliproxy variants to legacy format",
|
|
"// Convert unified profiles to legacy format for compatibility",
|
|
"// If not found in unified config, try legacy config.json as fallback",
|
|
"// Legacy config is invalid JSON - that's OK in unified mode",
|
|
"// Legacy mode - read from config.json only",
|
|
"// Legacy mode: read config.json",
|
|
"// Merge legacy profiles into available list (avoid duplicates)"
|
|
]
|
|
},
|
|
{
|
|
"file": "src/auth/profile-detector.ts",
|
|
"count": 11,
|
|
"calls": [],
|
|
"markers": [
|
|
"* - Legacy JSON format (config.json, profiles.json) as fallback",
|
|
"* 2. User-defined CLIProxy variants (config.cliproxy section) [legacy]",
|
|
"* 3. Settings-based profiles (config.profiles section) [legacy]",
|
|
"* 4. Account-based profiles (profiles.json) [legacy]",
|
|
"* Priority: settings-based profiles (glm/kimi) checked FIRST for backward compatibility.",
|
|
"// Check if account-based default exists (legacy)",
|
|
"// Fall back to legacy config",
|
|
"// Fall back to legacy config display",
|
|
"// Fall through to legacy if not found in unified config",
|
|
"// Priority 3: Check settings-based profiles (glm, kimi) - LEGACY FALLBACK",
|
|
"// Priority 4: Check account-based profiles (work, personal) - LEGACY FALLBACK"
|
|
]
|
|
},
|
|
{
|
|
"file": "src/config/unified-config-loader.ts",
|
|
"count": 9,
|
|
"calls": [],
|
|
"markers": [
|
|
"* 'json' if only legacy config exists,",
|
|
"* Check if legacy config.json exists",
|
|
"* Get path to legacy config.json",
|
|
"* Provides fallback to legacy JSON format for backward compatibility.",
|
|
"// Legacy field for backwards compatibility",
|
|
"// Legacy fields (deprecated)",
|
|
"// Legacy fields (keep for backwards compatibility during read)",
|
|
"partial.websearch?.gemini?.enabled ?? // Legacy fallback",
|
|
"partial.websearch?.gemini?.timeout ?? // Legacy fallback"
|
|
]
|
|
},
|
|
{
|
|
"file": "src/commands/setup-command.ts",
|
|
"count": 7,
|
|
"calls": [],
|
|
"markers": [
|
|
"* 3. Legacy config.json profiles (GLM, Kimi)",
|
|
"* 4. Legacy profiles.json accounts",
|
|
"// Also check legacy config.json for existing profiles",
|
|
"// Has legacy accounts - NOT first time",
|
|
"// Has legacy profiles - NOT first time",
|
|
"// Legacy config exists but is invalid - ignore and continue",
|
|
"// Legacy profiles exists but is invalid - ignore and continue"
|
|
]
|
|
},
|
|
{
|
|
"file": "src/management/checks/config-check.ts",
|
|
"count": 6,
|
|
"calls": [],
|
|
"markers": [
|
|
"* - Prefers config.yaml (v2) over config.json (legacy)",
|
|
"// Fallback to config.json (legacy format)",
|
|
"// Inform if legacy config.json also exists (purely informational, not a check)",
|
|
"console.log(` ${info('config.json'.padEnd(22))} Legacy (ignored)`);",
|
|
"console.log(` ${ok('config.json'.padEnd(22))} Valid (legacy)`);",
|
|
"info: 'Valid (legacy)',"
|
|
]
|
|
},
|
|
{
|
|
"file": "src/web-server/routes/account-routes.ts",
|
|
"count": 6,
|
|
"calls": [],
|
|
"markers": [
|
|
"* Uses ProfileRegistry to read from both legacy (profiles.json)",
|
|
"// Add legacy profiles first",
|
|
"// Delete from appropriate config (unified and/or legacy)",
|
|
"// Get default from unified config first, fallback to legacy",
|
|
"// Get profiles from both legacy and unified config (same logic as CLI)",
|
|
"// Use unified config if in unified mode, otherwise use legacy"
|
|
]
|
|
},
|
|
{
|
|
"file": "src/config/migration-manager.ts",
|
|
"count": 5,
|
|
"calls": [],
|
|
"markers": [
|
|
"* Check if there are legacy profiles that haven't been migrated to config.yaml.",
|
|
"* Handles migration from legacy JSON config (v1) to unified YAML config (v2).",
|
|
"`Profile \"${name}\" exists in both configs with different settings - keeping existing (${existingSettings}), skipping legacy (${pathStr})`",
|
|
"console.log(infoBox('Migrated legacy profiles to config.yaml', 'SUCCESS'));",
|
|
"console.log(infoBox('Migration failed - using legacy config', 'WARNING'));"
|
|
]
|
|
},
|
|
{
|
|
"file": "src/api/services/profile-writer.ts",
|
|
"count": 4,
|
|
"calls": [],
|
|
"markers": [
|
|
"* Supports both unified YAML config and legacy JSON config.",
|
|
"/** Create settings.json file for API profile (legacy format) */",
|
|
"/** Remove API profile from legacy config */",
|
|
"/** Update config.json with new API profile (legacy format) */"
|
|
]
|
|
},
|
|
{
|
|
"file": "src/cliproxy/quota-fetcher-gemini-cli.ts",
|
|
"count": 4,
|
|
"calls": [],
|
|
"markers": [
|
|
"// Legacy pattern: gemini-email.json",
|
|
"// Must match account AND be gemini type (or legacy gemini- prefix)",
|
|
"// Try exact legacy match first",
|
|
"`gemini-${sanitizedId}.json`, // Legacy format"
|
|
]
|
|
},
|
|
{
|
|
"file": "src/auth/profile-registry.ts",
|
|
"count": 3,
|
|
"calls": [],
|
|
"markers": [
|
|
"* Get all profiles merged from both legacy and unified config.",
|
|
"* Get resolved default profile from unified config first, fallback to legacy.",
|
|
"// Start with legacy profiles"
|
|
]
|
|
}
|
|
],
|
|
"explicitShimFiles": [
|
|
"src/cliproxy/openai-compat-manager.ts"
|
|
]
|
|
}
|
|
}
|