Skip to content

Refactor model provider configuration to providerId-keyed structure (V4)#2220

Open
Mingholy wants to merge 6 commits intomainfrom
mingholy/refactor/model-providers-v2
Open

Refactor model provider configuration to providerId-keyed structure (V4)#2220
Mingholy wants to merge 6 commits intomainfrom
mingholy/refactor/model-providers-v2

Conversation

@Mingholy
Copy link
Copy Markdown
Collaborator

@Mingholy Mingholy commented Mar 9, 2026

TLDR

This PR introduces settings version V4 with a refactored model provider configuration structure, changing from authType-keyed arrays to providerId-keyed objects. It adds a new --providerId CLI flag for explicit provider selection and implements the V3→V4 migration path. All existing tests are updated to reflect the new settings version and configuration format.

Todo Actions

  • Backup settings.json when update coding plan configurations
  • Documents

Dive Deeper

Settings Migration V3→V4

  • Added v3-to-v4.ts migration that transforms modelProviders from an array format (keyed by authType) to an object format (keyed by providerId)
  • Each provider now has the structure: { authType, envKey, baseUrl?, models: [] }
  • The migration extracts model-level fields while moving provider-level metadata (envKey, baseUrl) to the provider container
  • Updated ALL_MIGRATIONS to include the V3→V4 migration

Model Provider Configuration Refactor

Before (V3):

modelProviders: {
  openai: [{ id: 'gpt-4', envKey: 'KEY', baseUrl: '...' }]
}

After (V4):

modelProviders: {
  'openai-custom': {
    authType: 'openai',
    envKey: 'KEY',
    baseUrl: '...',
    models: [{ id: 'gpt-4' }]
  }
}

This change allows multiple providers of the same authType with different configurations.

CLI Changes

  • Added --providerId flag to allow explicit provider selection at startup
  • Updated auth.ts to iterate over provider objects instead of authType-keyed arrays
  • Updated config resolution to prefer CLI --providerId over settings

Test Updates

  • All migration tests now reference SETTINGS_VERSION constant instead of hardcoded version numbers
  • Auth validation tests updated to use the new provider-keyed format
  • Integration tests verify V1→current version migration chain

Reviewer Test Plan

  1. Test settings migration:

    npm test -- integration-tests/settings-migration.test.ts

    Verify V1, V2, and V3 settings all migrate correctly to V4

  2. Test CLI provider selection:

    qwen --providerId openai-custom --model gpt-4

    Verify the specified provider is selected

  3. Test auth validation:

    npm test -- packages/cli/src/config/auth.test.ts
    npm test -- packages/core/src/models/modelRegistry.test.ts
  4. Run full test suite:

    npm test

Testing Matrix

🍏 🪟 🐧
npm run
npx
Docker
Podman - -
Seatbelt - -

Linked issues / bug

Fixes #1820

…sioning

- Changed references from V3 to current version in migration tests to reflect the new SETTINGS_VERSION.
- Updated test assertions to verify migration to the latest version instead of hardcoded version numbers.
- Introduced new migration logic for transitioning from V3 to V4 settings structure.
- Enhanced model provider configuration to support new providerId format and ensure backward compatibility.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 9, 2026

📋 Review Summary

This PR introduces settings version V4 with a significant refactoring of the model provider configuration structure, changing from authType-keyed arrays to providerId-keyed objects. The changes enable multiple providers of the same authType with different configurations and add a new --providerId CLI flag for explicit provider selection. Overall, this is a well-structured refactoring that improves flexibility, but there are several critical issues that must be addressed before merging.

🔍 General Feedback

  • The PR is comprehensive, touching 35 files with 2582 additions and 886 deletions
  • Good test coverage with updates across migration, auth, config, and model registry tests
  • The migration from V3 to V4 appears to be the core change, but the actual migration implementation file is missing from the repository
  • The new providerId-keyed structure is a significant improvement for supporting multiple providers of the same authType
  • Test updates consistently use SETTINGS_VERSION constant instead of hardcoded version numbers - excellent practice
  • The PR description includes a clear TLDR, dive deeper sections, and reviewer test plan

🎯 Specific Feedback

🔴 Critical

  • Missing migration file: packages/cli/src/config/migration/versions/v3-to-v4.ts - The diff shows this file should be added (418 lines of test file shown), but the actual implementation file v3-to-v4.ts is not present in the repository. The migration index exports it but the file doesn't exist. This is a blocking issue - the migration cannot run without this file.

  • packages/cli/src/config/settings.ts:69 - SETTINGS_VERSION is still set to 3 but should be updated to 4 to reflect the new settings version. This mismatch will cause the migration system to not trigger for V3→V4.

  • packages/cli/src/config/migration/index.ts - The file exports v3ToV4Migration but imports from a non-existent file. This will cause import errors at runtime:

    export { v3ToV4Migration, V3ToV4Migration } from './versions/v3-to-v4.js';
    // This file doesn't exist!
  • packages/cli/src/config/auth.ts - The findModelConfig function still uses the old V3 array-based structure:

    const models = modelProviders[authType];
    if (!Array.isArray(models)) {
      return undefined;
    }
    return models.find((m) => m.id === modelId);

    This needs to be updated to iterate over provider objects keyed by providerId, not authType-keyed arrays.

  • packages/core/src/models/modelRegistry.ts - Still expects the old V3 structure where ModelProvidersConfig is { [authType: string]: ModelConfig[] }. The type definition needs to change to support the new V4 structure with providerId keys.

  • packages/core/src/models/types.ts - The ModelProvidersConfig type definition needs to be updated:

    // Current V3 definition:
    export type ModelProvidersConfig = {
      [authType: string]: ModelConfig[];
    };
    
    // Should be V4 definition:
    export type ModelProvidersConfig = {
      [providerId: string]: {
        authType: AuthType;
        envKey?: string;
        baseUrl?: string;
        models: ModelConfig[];
      };
    };
  • packages/cli/src/utils/modelConfigUtils.ts - The resolveCliGenerationConfig function still uses V3 structure:

    const providers = settings.modelProviders[authType];
    if (providers && Array.isArray(providers)) {
      // This won't work with V4 structure
    }

🟡 High

  • packages/cli/src/config/migration/index.test.ts - Tests expect V3→V4 migration to execute but the migration doesn't exist yet. Tests like "should migrate V3 settings to V4" will fail until the migration is implemented.

  • packages/core/src/models/modelConfigResolver.ts - This file references modelProvider as a single ModelProviderConfig object but doesn't account for the new providerId-keyed structure. The resolver needs to be updated to find the correct provider by providerId.

  • packages/cli/src/config/config.ts - Added --providerId CLI flag but the integration with the new V4 structure needs verification. The flag should select a specific provider from the providerId-keyed object.

  • Settings Schema - packages/cli/src/config/settingsSchema.ts still describes the old structure:

    description: 'Model providers configuration grouped by authType. Each authType contains an array of model configurations.'

    This description needs updating to reflect the new providerId-keyed structure.

  • Migration Test Coverage - The test file v3-to-v4.test.ts is shown in the diff (418 lines) but needs to verify edge cases:

    • What happens when multiple providers have the same authType?
    • How are providerId collisions handled?
    • What about the managed flag for Coding Plan providers?

🟢 Medium

  • packages/cli/src/config/auth.test.ts - Test updates look correct for the new structure, but all test cases use made-up providerIds like customOpenAI, customGemini, etc. Consider using more realistic providerIds that match what users would actually configure.

  • packages/cli/src/ui/components/ModelDialog.tsx - This file is listed as changed but wasn't examined in detail. Ensure the UI properly displays and allows selection of providers by providerId, not just by authType.

  • packages/cli/src/ui/hooks/useCodingPlanUpdates.ts - Listed as changed. Verify that Coding Plan updates work correctly with the new managed provider structure.

  • packages/vscode-ide-companion/schemas/settings.schema.json - This JSON schema needs to be updated to validate the new V4 structure. The schema should reflect the providerId-keyed object structure.

🔵 Low

  • PR Description - The Todo Actions section lists incomplete items:

    • Backup settings.json when update coding plan configurations
    • More rollback instructions in case user downgrades the cli
    • UI to delete/modify non-managed provider models

    These should be completed or moved to follow-up issues before merging.

  • Documentation - Consider adding a migration guide or changelog entry explaining the V3→V4 changes for users who have custom modelProviders configurations.

  • Error Messages - When the migration encounters issues (e.g., duplicate providerIds), ensure clear error messages guide users on how to resolve conflicts.

  • Code Comments - The new V4 structure benefits from inline comments explaining:

    • Why providerId is used instead of authType
    • How providerId generation works for migrated settings
    • The relationship between managed flag and Coding Plan providers

✅ Highlights

  • Excellent Test Structure - Using SETTINGS_VERSION constant throughout tests instead of hardcoded numbers is a best practice that will prevent future version-related bugs.

  • Clear PR Description - The TLDR, Dive Deeper, and Reviewer Test Plan sections make it easy to understand the scope and how to verify the changes.

  • Comprehensive Coverage - The PR touches all affected areas: migration, auth, config, model registry, UI components, and VSCode schema.

  • Provider Flexibility - The new structure allowing multiple providers of the same authType (e.g., multiple OpenAI-compatible providers with different baseUrls) is a significant usability improvement.

  • Managed Provider Concept - The managed flag for Coding Plan providers is a clean way to distinguish between user-configured and system-managed providers.

  • CLI Provider Selection - The new --providerId flag gives users explicit control over provider selection, which is essential when multiple providers share the same authType.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 9, 2026

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 58.85% 58.85% 69.44% 80.36%
Core 74.1% 74.1% 78.28% 81.79%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   58.85 |    80.36 |   69.44 |   58.85 |                   
 src               |   76.13 |    66.86 |   72.22 |   76.13 |                   
  gemini.tsx       |    61.7 |    63.15 |      75 |    61.7 | ...90,498-501,509 
  ...ractiveCli.ts |   84.53 |       64 |      40 |   84.53 | ...27,337-338,357 
  ...liCommands.ts |   83.25 |    69.04 |     100 |   83.25 | ...10,245,247,370 
  ...ActiveAuth.ts |   94.11 |    82.35 |     100 |   94.11 | 27-30             
 ...cp-integration |    3.44 |        0 |       0 |    3.44 |                   
  acpAgent.ts      |    2.76 |        0 |       0 |    2.76 | 70-98,101-600     
  authMethods.ts   |    11.9 |      100 |       0 |    11.9 | 11-32,35-39,42-51 
  errorCodes.ts    |       0 |        0 |       0 |       0 | 1-22              
 ...ration/service |   73.07 |    73.33 |      50 |   73.07 |                   
  filesystem.ts    |   73.07 |    73.33 |      50 |   73.07 | ...,69-84,106-107 
 ...ration/session |   47.48 |    64.56 |   65.85 |   47.48 |                   
  ...ryReplayer.ts |      76 |    79.41 |      90 |      76 | ...19-220,228-229 
  Session.ts       |   31.14 |    49.01 |   44.44 |   31.14 | ...4-967,987-1068 
  ...entTracker.ts |   81.42 |       75 |    90.9 |   81.42 | ...76-383,386-387 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ssion/emitters |   96.76 |     90.9 |      92 |   96.76 |                   
  BaseEmitter.ts   |    82.6 |       75 |      80 |    82.6 | 23-24,50-51       
  ...ageEmitter.ts |     100 |    83.33 |     100 |     100 | 83-85             
  PlanEmitter.ts   |     100 |      100 |     100 |     100 |                   
  ...allEmitter.ts |   98.95 |    93.22 |     100 |   98.95 | 314,322           
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
 src/commands      |   87.09 |      100 |   33.33 |   87.09 |                   
  extensions.tsx   |   96.55 |      100 |      50 |   96.55 | 37                
  hooks.tsx        |    62.5 |      100 |       0 |    62.5 | 16-20,24          
  mcp.ts           |   94.11 |      100 |      50 |   94.11 | 26                
 ...nds/extensions |   85.34 |    91.27 |   81.81 |   85.34 |                   
  consent.ts       |   71.65 |    89.28 |   42.85 |   71.65 | ...85-141,156-162 
  disable.ts       |     100 |      100 |     100 |     100 |                   
  enable.ts        |     100 |      100 |     100 |     100 |                   
  install.ts       |   81.73 |    83.33 |   66.66 |   81.73 | ...17-120,123-130 
  link.ts          |     100 |      100 |     100 |     100 |                   
  list.ts          |     100 |      100 |     100 |     100 |                   
  new.ts           |     100 |      100 |     100 |     100 |                   
  settings.ts      |   99.15 |      100 |   83.33 |   99.15 | 151               
  uninstall.ts     |    37.5 |      100 |   33.33 |    37.5 | 23-45,57-64,67-70 
  update.ts        |   96.32 |      100 |     100 |   96.32 | 101-105           
  utils.ts         |   60.24 |    28.57 |     100 |   60.24 | ...81,83-87,89-93 
 ...les/mcp-server |       0 |        0 |       0 |       0 |                   
  example.ts       |       0 |        0 |       0 |       0 | 1-60              
 ...commands/hooks |   22.22 |      100 |       0 |   22.22 |                   
  disable.ts       |   22.22 |      100 |       0 |   22.22 | 20-59,65-69,71-74 
  enable.ts        |   22.22 |      100 |       0 |   22.22 | 20-59,65-69,71-74 
 src/commands/mcp  |   97.35 |    87.87 |    90.9 |   97.35 |                   
  add.ts           |     100 |    96.66 |     100 |     100 | 211               
  list.ts          |   91.22 |    80.76 |      80 |   91.22 | ...19-121,146-147 
  remove.ts        |     100 |       80 |     100 |     100 | 21-25             
 src/config        |   91.52 |    81.13 |    87.3 |   91.52 |                   
  auth.ts          |    87.5 |    77.35 |     100 |    87.5 | ...06-207,223-224 
  config.ts        |    89.8 |    84.12 |   77.77 |    89.8 | ...-956,1078-1079 
  keyBindings.ts   |   95.87 |       50 |     100 |   95.87 | 159-162           
  ...idersScope.ts |      92 |       90 |     100 |      92 | 11-12             
  sandboxConfig.ts |   54.16 |    23.07 |   66.66 |   54.16 | ...44,54-68,73-89 
  settings.ts      |    86.1 |     82.2 |   86.36 |    86.1 | ...46-647,723-740 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...tedFolders.ts |   96.29 |       94 |     100 |   96.29 | ...88-190,205-206 
  webSearch.ts     |    40.9 |    11.11 |     100 |    40.9 | ...95-102,105-121 
 ...nfig/migration |   94.89 |    77.77 |   83.33 |   94.89 |                   
  index.ts         |   94.87 |     87.5 |     100 |   94.87 | 91-92             
  scheduler.ts     |   96.55 |    77.77 |     100 |   96.55 | 19-20             
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ation/versions |   92.76 |    88.09 |     100 |   92.76 |                   
  ...-v2-shared.ts |     100 |      100 |     100 |     100 |                   
  v1-to-v2.ts      |   81.75 |    90.19 |     100 |   81.75 | ...28-229,231-247 
  v2-to-v3.ts      |     100 |      100 |     100 |     100 |                   
  v3-to-v4.ts      |   91.41 |    80.51 |     100 |   91.41 | ...27-233,328-329 
 src/constants     |   90.68 |    94.73 |   77.77 |   90.68 |                   
  codingPlan.ts    |   90.68 |    94.73 |   77.77 |   90.68 | ...93-306,314-326 
 src/core          |    17.8 |      100 |       0 |    17.8 |                   
  auth.ts          |    9.52 |      100 |       0 |    9.52 | 21-48             
  initializer.ts   |   15.38 |      100 |       0 |   15.38 | 33-74             
  theme.ts         |   38.46 |      100 |       0 |   38.46 | 17-24             
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/i18n          |   43.69 |    71.42 |   38.88 |   43.69 |                   
  index.ts         |   26.11 |    69.23 |   26.66 |   26.11 | ...35-236,246-257 
  languages.ts     |   98.27 |       75 |     100 |   98.27 | 88                
 src/i18n/locales  |       0 |        0 |       0 |       0 |                   
  de.js            |       0 |        0 |       0 |       0 | 1-1613            
  en.js            |       0 |        0 |       0 |       0 | 1-1665            
  ja.js            |       0 |        0 |       0 |       0 | 1-1117            
  pt.js            |       0 |        0 |       0 |       0 | 1-1608            
  ru.js            |       0 |        0 |       0 |       0 | 1-1620            
  zh.js            |       0 |        0 |       0 |       0 | 1-1485            
 ...nonInteractive |   68.34 |    71.68 |   68.88 |   68.34 |                   
  session.ts       |    73.1 |    69.52 |   81.81 |    73.1 | ...03-604,612-622 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...73-574,577-578 
 ...active/control |   77.48 |       88 |      80 |   77.48 |                   
  ...rolContext.ts |    7.69 |        0 |       0 |    7.69 | 47-79             
  ...Dispatcher.ts |   91.63 |    91.66 |   88.88 |   91.63 | ...54-372,387,390 
  ...rolService.ts |       8 |        0 |       0 |       8 | 46-179            
 ...ol/controllers |    7.32 |       80 |   13.79 |    7.32 |                   
  ...Controller.ts |   19.32 |      100 |      60 |   19.32 | 81-118,127-210    
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |    3.96 |      100 |   11.11 |    3.96 | ...61-379,389-494 
  ...Controller.ts |   14.06 |      100 |       0 |   14.06 | ...82-117,130-133 
  ...Controller.ts |    5.72 |      100 |       0 |    5.72 | ...72-384,393-418 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |    97.2 |    92.05 |   96.05 |    97.2 |                   
  ...putAdapter.ts |   97.32 |    91.62 |     100 |   97.32 | ...1275,1300-1301 
  ...putAdapter.ts |   96.15 |    91.66 |   85.71 |   96.15 | 51-52             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   96.49 |     93.1 |   88.23 |   96.49 | ...85,111-112,319 
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/services      |    87.6 |    85.87 |   95.83 |    87.6 |                   
  ...mandLoader.ts |     100 |      100 |     100 |     100 |                   
  ...andService.ts |     100 |      100 |     100 |     100 |                   
  ...mandLoader.ts |   86.38 |    81.48 |     100 |   86.38 | ...25-330,335-340 
  ...omptLoader.ts |    75.1 |    80.64 |   83.33 |    75.1 | ...03-204,270-271 
  ...nd-factory.ts |    91.2 |    93.33 |     100 |    91.2 | 119-126           
  ...ation-tool.ts |     100 |    95.45 |     100 |     100 | 125               
  ...and-parser.ts |   89.74 |    85.71 |     100 |   89.74 | 59-62             
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...ght/generators |   52.91 |    85.59 |   73.33 |   52.91 |                   
  DataProcessor.ts |   55.48 |    85.59 |   84.61 |   55.48 | ...1110,1114-1121 
  ...tGenerator.ts |   14.03 |      100 |       0 |   14.03 | 20-93             
  ...teRenderer.ts |   45.45 |      100 |       0 |   45.45 | 13-51             
 .../insight/types |       0 |       50 |      50 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 |                   
  ...sightTypes.ts |       0 |        0 |       0 |       0 | 1                 
 ...mpt-processors |   97.26 |    92.59 |     100 |   97.26 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.52 |    84.21 |     100 |   94.52 | 46-47,93-94       
  ...tionParser.ts |     100 |      100 |     100 |     100 |                   
  ...lProcessor.ts |   97.38 |    93.02 |     100 |   97.38 | 96-99             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/test-utils    |   93.46 |    83.33 |      80 |   93.46 |                   
  ...omMatchers.ts |   69.69 |       50 |      50 |   69.69 | 32-35,37-39,45-47 
  ...andContext.ts |     100 |      100 |     100 |     100 |                   
  render.tsx       |     100 |      100 |     100 |     100 |                   
 src/ui            |   65.86 |    73.33 |   54.05 |   65.86 |                   
  App.tsx          |     100 |      100 |     100 |     100 |                   
  AppContainer.tsx |   70.79 |    64.07 |   57.14 |   70.79 | ...1109,1123-1223 
  ...tionNudge.tsx |    9.58 |      100 |       0 |    9.58 | 24-94             
  ...ackDialog.tsx |   29.23 |      100 |       0 |   29.23 | 25-75             
  ...tionNudge.tsx |    7.69 |      100 |       0 |    7.69 | 25-103            
  colors.ts        |      60 |      100 |   35.29 |      60 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   91.83 |    88.46 |     100 |   91.83 | 25-26,54-55       
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/auth       |   32.06 |    62.85 |      40 |   32.06 |                   
  AuthDialog.tsx   |    68.3 |     64.7 |   46.15 |    68.3 | ...36,338,340,342 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  useAuth.ts       |    3.01 |      100 |       0 |    3.01 | 41-449            
 src/ui/commands   |   59.94 |    79.59 |   47.01 |   59.94 |                   
  aboutCommand.ts  |     100 |      100 |     100 |     100 |                   
  agentsCommand.ts |    64.7 |      100 |       0 |    64.7 | ...30,35-36,39-41 
  ...odeCommand.ts |     100 |      100 |     100 |     100 |                   
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  bugCommand.ts    |   76.47 |    66.66 |      50 |   76.47 | 21-22,57-66       
  clearCommand.ts  |   88.23 |    66.66 |      50 |   88.23 | 16-17,41-42       
  ...essCommand.ts |   63.15 |       50 |      50 |   63.15 | ...47-148,162-165 
  copyCommand.ts   |   96.22 |      100 |      50 |   96.22 | 15-16             
  ...ryCommand.tsx |   67.89 |    73.07 |      50 |   67.89 | ...74-175,183-191 
  docsCommand.ts   |   95.23 |       80 |      50 |   95.23 | 20-21             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  exportCommand.ts |   57.31 |     90.9 |      50 |   57.31 | 173-312           
  ...onsCommand.ts |   44.09 |    85.71 |   27.27 |   44.09 | ...35-236,244-245 
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  hooksCommand.ts  |   11.65 |      100 |       0 |   11.65 | ...63-299,301-321 
  ideCommand.ts    |   56.79 |    57.69 |   35.29 |   56.79 | ...00-301,304-318 
  initCommand.ts   |    81.7 |       70 |      50 |    81.7 | ...67,81-86,88-93 
  ...ghtCommand.ts |   15.23 |      100 |       0 |   15.23 | 23-26,29-131      
  ...ageCommand.ts |   89.24 |    82.35 |   76.92 |   89.24 | ...20-323,345-346 
  mcpCommand.ts    |   85.71 |      100 |      50 |   85.71 | 14-15             
  memoryCommand.ts |   70.38 |    77.14 |   33.33 |   70.38 | ...84,291-292,310 
  modelCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...onsCommand.ts |     100 |      100 |     100 |     100 |                   
  quitCommand.ts   |   93.75 |      100 |      50 |   93.75 | 15-16             
  ...oreCommand.ts |      92 |    87.09 |     100 |      92 | ...,82-87,128-129 
  resumeCommand.ts |     100 |      100 |     100 |     100 |                   
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   80.12 |    63.63 |      60 |   80.12 | ...69-172,175-178 
  skillsCommand.ts |    12.5 |      100 |       0 |    12.5 | ...89-105,108-135 
  statsCommand.ts  |   76.92 |       75 |      50 |   76.92 | ...36,50-51,65-66 
  ...aryCommand.ts |    4.61 |      100 |       0 |    4.61 | 21-24,27-322      
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |   95.12 |      100 |      50 |   95.12 | 18-19             
  types.ts         |     100 |      100 |     100 |     100 |                   
  vimCommand.ts    |   42.85 |      100 |       0 |   42.85 | 14-15,18-28       
 src/ui/components |   71.11 |    75.05 |   69.67 |   71.11 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  AnsiOutput.tsx   |     100 |      100 |     100 |     100 |                   
  ApiKeyInput.tsx  |   18.91 |      100 |       0 |   18.91 | 30-95             
  AppHeader.tsx    |   87.03 |    42.85 |     100 |   87.03 | 33-39,41          
  ...odeDialog.tsx |     9.7 |      100 |       0 |     9.7 | 35-47,50-182      
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   13.95 |      100 |       0 |   13.95 | 18-58             
  Composer.tsx     |   91.86 |       60 |     100 |   91.86 | ...2-45,63,99,110 
  ...itDisplay.tsx |   55.81 |      100 |      50 |   55.81 | 22-38,42-43       
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   90.47 |       75 |     100 |   90.47 | 20-21             
  ...ification.tsx |   28.57 |      100 |       0 |   28.57 | 16-36             
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...ogManager.tsx |   12.86 |      100 |       0 |   12.86 | 48-321            
  ...ngsDialog.tsx |    8.44 |      100 |       0 |    8.44 | 37-195            
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   77.31 |    33.33 |     100 |   77.31 | ...64,71-75,77-81 
  ...ngSpinner.tsx |   54.28 |       50 |      50 |   54.28 | 31-48,61          
  Header.tsx       |   94.28 |    76.92 |     100 |   94.28 | 96,98,103-106     
  Help.tsx         |    98.7 |    68.75 |     100 |    98.7 | 74,129            
  ...emDisplay.tsx |   78.35 |       50 |     100 |   78.35 | ...86,189,192,195 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |   84.81 |    77.77 |     100 |   84.81 | ...1026,1122,1196 
  ...Shortcuts.tsx |   21.11 |      100 |       0 |   21.11 | ...5,48-50,66-124 
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   18.46 |      100 |       0 |   18.46 | 24-80             
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |   75.18 |    48.43 |     100 |   75.18 | ...09-518,524-528 
  ...tsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...fications.tsx |   18.18 |      100 |       0 |   18.18 | 15-58             
  ...ustDialog.tsx |     100 |    81.81 |     100 |     100 | 71-86             
  ...ryDisplay.tsx |      20 |      100 |       0 |      20 | 20-41             
  ...icePrompt.tsx |   88.14 |    83.87 |     100 |   88.14 | ...01-105,133-138 
  PrepareLabel.tsx |   91.66 |    76.19 |     100 |   91.66 | 73-75,77-79,110   
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngDisplay.tsx |   21.42 |      100 |       0 |   21.42 | 13-39             
  ...hProgress.tsx |   90.86 |    95.55 |     100 |   90.86 | 250-276           
  ...ionPicker.tsx |   94.18 |    92.85 |     100 |   94.18 | 79,194-202        
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...putPrompt.tsx |   72.56 |       80 |      40 |   72.56 | ...06-109,114-117 
  ...ngsDialog.tsx |   66.75 |    72.66 |     100 |   66.75 | ...72-780,786-787 
  ...ionDialog.tsx |   87.01 |      100 |   33.33 |   87.01 | 36-39,44-51       
  ...putPrompt.tsx |      15 |      100 |       0 |      15 | 19-57             
  ...Indicator.tsx |   44.44 |      100 |       0 |   44.44 | 12-17             
  ...MoreLines.tsx |      28 |      100 |       0 |      28 | 18-40             
  ...ionPicker.tsx |    8.04 |      100 |       0 |    8.04 | 21-129            
  StatsDisplay.tsx |   98.66 |    93.33 |     100 |   98.66 | 199-201           
  ...nsDisplay.tsx |   84.09 |    57.14 |     100 |   84.09 | ...16-118,125-127 
  ThemeDialog.tsx  |   90.95 |    44.44 |      75 |   90.95 | ...16-117,159-161 
  Tips.tsx         |      75 |       60 |      75 |      75 | 23,48-49,52-62    
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 31-32             
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...ackDialog.tsx |    7.84 |      100 |       0 |    7.84 | 24-134            
 ...nts/extensions |   45.28 |    33.33 |      60 |   45.28 |                   
  ...gerDialog.tsx |   44.31 |    34.14 |      75 |   44.31 | ...71-480,483-488 
  index.ts         |       0 |        0 |       0 |       0 | 1-9               
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...tensions/steps |   54.77 |    94.23 |   66.66 |   54.77 |                   
  ...ctionStep.tsx |   95.12 |    92.85 |   85.71 |   95.12 | 84-86,89          
  ...etailStep.tsx |    6.18 |      100 |       0 |    6.18 | 17-128            
  ...nListStep.tsx |   88.35 |    94.73 |      80 |   88.35 | 51-52,58-71,105   
  ...electStep.tsx |   13.46 |      100 |       0 |   13.46 | 20-70             
  ...nfirmStep.tsx |   19.56 |      100 |       0 |   19.56 | 23-65             
  index.ts         |     100 |      100 |     100 |     100 |                   
 ...components/mcp |    19.8 |    84.37 |   77.77 |    19.8 |                   
  ...entDialog.tsx |    3.87 |      100 |       0 |    3.87 | 40-673            
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-30              
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |   96.42 |    87.09 |     100 |   96.42 | 21,96-97          
 ...ents/mcp/steps |    7.53 |      100 |       0 |    7.53 |                   
  ...icateStep.tsx |    8.26 |      100 |       0 |    8.26 | 24-164            
  ...electStep.tsx |   10.95 |      100 |       0 |   10.95 | 16-88             
  ...etailStep.tsx |    5.58 |      100 |       0 |    5.58 | 30-233            
  ...rListStep.tsx |    5.88 |      100 |       0 |    5.88 | 20-176            
  ...etailStep.tsx |   10.41 |      100 |       0 |   10.41 | ...1,67-79,82-139 
  ToolListStep.tsx |    7.14 |      100 |       0 |    7.14 | 16-146            
 ...nents/messages |   75.06 |    79.33 |   58.33 |   75.06 |                   
  ...ionDialog.tsx |   72.44 |    78.63 |   57.14 |   72.44 | ...20,538,556-558 
  ...onMessage.tsx |   91.93 |    82.35 |     100 |   91.93 | 57-59,61,63       
  ...nMessages.tsx |   77.35 |      100 |      70 |   77.35 | ...31-244,248-260 
  DiffRenderer.tsx |   93.19 |    86.17 |     100 |   93.19 | ...09,237-238,304 
  ...ssMessage.tsx |    12.5 |      100 |       0 |    12.5 | 18-59             
  ...sMessages.tsx |   16.17 |      100 |       0 |   16.17 | ...1,85-95,99-104 
  ...ryMessage.tsx |   12.82 |      100 |       0 |   12.82 | 22-59             
  ...onMessage.tsx |   76.28 |       75 |   33.33 |   76.28 | ...80-195,351-356 
  ...upMessage.tsx |   90.74 |       84 |     100 |   90.74 | 40-43,55,140-144  
  ToolMessage.tsx  |   78.71 |    69.33 |      80 |   78.71 | ...94-399,473-475 
 ...ponents/shared |   80.92 |    77.31 |   94.11 |   80.92 |                   
  ...ctionList.tsx |     100 |      100 |     100 |     100 |                   
  ...tonSelect.tsx |     100 |    66.66 |     100 |     100 | 73                
  EnumSelector.tsx |     100 |    96.42 |     100 |     100 | 58                
  MaxSizedBox.tsx  |   81.13 |    81.96 |   88.88 |   81.13 | ...12-513,618-619 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  TextInput.tsx    |    7.84 |      100 |       0 |    7.84 | 33-197            
  text-buffer.ts   |   82.07 |    75.96 |   96.87 |   82.07 | ...1897,1924,1986 
  ...er-actions.ts |   86.71 |    67.79 |     100 |   86.71 | ...07-608,809-811 
 ...ents/subagents |    32.1 |      100 |       0 |    32.1 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  reducers.tsx     |    12.1 |      100 |       0 |    12.1 | 33-190            
  types.ts         |     100 |      100 |     100 |     100 |                   
  utils.ts         |   10.95 |      100 |       0 |   10.95 | ...1,56-57,60-102 
 ...bagents/create |    9.13 |      100 |       0 |    9.13 |                   
  ...ionWizard.tsx |    7.28 |      100 |       0 |    7.28 | 34-299            
  ...rSelector.tsx |   14.75 |      100 |       0 |   14.75 | 26-85             
  ...onSummary.tsx |    4.26 |      100 |       0 |    4.26 | 27-331            
  ...tionInput.tsx |    8.63 |      100 |       0 |    8.63 | 23-177            
  ...dSelector.tsx |   33.33 |      100 |       0 |   33.33 | 20-21,26-27,36-63 
  ...nSelector.tsx |    37.5 |      100 |       0 |    37.5 | 20-21,26-27,36-58 
  ...EntryStep.tsx |   12.76 |      100 |       0 |   12.76 | 34-78             
  ToolSelector.tsx |    4.16 |      100 |       0 |    4.16 | 31-253            
 ...bagents/manage |    8.43 |      100 |       0 |    8.43 |                   
  ...ctionStep.tsx |   10.25 |      100 |       0 |   10.25 | 21-103            
  ...eleteStep.tsx |   20.93 |      100 |       0 |   20.93 | 23-62             
  ...tEditStep.tsx |   25.53 |      100 |       0 |   25.53 | ...2,37-38,51-124 
  ...ctionStep.tsx |    2.29 |      100 |       0 |    2.29 | 28-449            
  ...iewerStep.tsx |   15.21 |      100 |       0 |   15.21 | 18-66             
  ...gerDialog.tsx |    6.74 |      100 |       0 |    6.74 | 35-341            
 ...agents/runtime |    7.83 |      100 |       0 |    7.83 |                   
  ...onDisplay.tsx |    7.83 |      100 |       0 |    7.83 | ...72-502,511-549 
 ...mponents/views |   86.46 |    69.23 |      75 |   86.46 |                   
  ...sionsList.tsx |   87.69 |    73.68 |     100 |   87.69 | 65-72             
  McpStatus.tsx    |   89.53 |    60.52 |     100 |   89.53 | ...72,175-177,262 
  SkillsList.tsx   |   27.27 |      100 |       0 |   27.27 | 18-35             
  ToolsList.tsx    |     100 |      100 |     100 |     100 |                   
 src/ui/contexts   |   79.26 |    79.73 |    86.2 |   79.26 |                   
  AppContext.tsx   |      40 |      100 |       0 |      40 | 17-22             
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   86.81 |    84.21 |     100 |   86.81 | ...76-878,881-883 
  ...owContext.tsx |   89.28 |       80 |   66.66 |   89.28 | 34,47-48,60-62    
  ...onContext.tsx |   47.02 |     62.5 |   71.42 |   47.02 | ...36-239,243-246 
  ...gsContext.tsx |   83.33 |       50 |     100 |   83.33 | 17-18             
  ...usContext.tsx |     100 |      100 |     100 |     100 |                   
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...nsContext.tsx |   88.23 |       50 |     100 |   88.23 | 97-98             
  ...teContext.tsx |   84.61 |       50 |     100 |   84.61 | 141-142           
  ...deContext.tsx |   76.08 |    72.72 |     100 |   76.08 | 47-48,52-59,77-78 
 src/ui/editors    |   93.33 |    85.71 |   66.66 |   93.33 |                   
  ...ngsManager.ts |   93.33 |    85.71 |   66.66 |   93.33 | 49,63-64          
 src/ui/hooks      |   81.31 |    81.84 |   83.57 |   81.31 |                   
  ...dProcessor.ts |   83.02 |     81.9 |     100 |   83.02 | ...86-387,406-433 
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...dProcessor.ts |   94.77 |    70.58 |     100 |   94.77 | ...75-276,281-282 
  ...dProcessor.ts |   77.38 |       63 |   66.66 |   77.38 | ...32,656,675-679 
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...odeCommand.ts |   58.82 |      100 |     100 |   58.82 | 28,33-48          
  ...Completion.ts |   92.77 |    89.09 |     100 |   92.77 | ...86-187,220-223 
  ...ifications.ts |     100 |      100 |     100 |     100 |                   
  ...tIndicator.ts |     100 |    93.75 |     100 |     100 | 60                
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...lanUpdates.ts |    99.2 |     91.3 |     100 |    99.2 | 67                
  ...ompletion.tsx |   94.87 |    80.55 |     100 |   94.87 | ...99-200,202-203 
  ...dMigration.ts |   90.62 |       75 |     100 |   90.62 | 38-40             
  useCompletion.ts |    92.4 |     87.5 |     100 |    92.4 | 68-69,93-94,98-99 
  ...ialogClose.ts |      25 |      100 |     100 |      25 | 62-99             
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...ionUpdates.ts |   93.45 |     92.3 |     100 |   93.45 | ...83-287,300-306 
  ...agerDialog.ts |   88.88 |      100 |     100 |   88.88 | 21,25             
  ...backDialog.ts |   50.37 |    77.77 |   33.33 |   50.37 | ...58-174,195-196 
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |      100 |     100 |     100 |                   
  ...miniStream.ts |   74.86 |    72.24 |      80 |   74.86 | ...1464,1505-1606 
  ...BranchName.ts |    90.9 |     92.3 |     100 |    90.9 | 19-20,55-58       
  ...oryManager.ts |   98.41 |    93.33 |     100 |   98.41 | 43                
  ...stListener.ts |     100 |      100 |     100 |     100 |                   
  ...nAuthError.ts |   76.19 |       50 |     100 |   76.19 | 39-40,43-45       
  ...putHistory.ts |    92.5 |    85.71 |     100 |    92.5 | 62-63,71,93-95    
  ...storyStore.ts |     100 |    94.11 |     100 |     100 | 69                
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |   36.36 |      100 |       0 |   36.36 | 24-31             
  ...unchEditor.ts |    8.97 |      100 |       0 |    8.97 | 20-67,74-125      
  ...gIndicator.ts |     100 |      100 |     100 |     100 |                   
  useLogger.ts     |   21.05 |      100 |       0 |   21.05 | 15-37             
  useMcpDialog.ts  |    87.5 |      100 |     100 |    87.5 | 19,23             
  ...oryMonitor.ts |     100 |      100 |     100 |     100 |                   
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...delCommand.ts |     100 |      100 |     100 |     100 |                   
  ...odifyTrust.ts |     100 |      100 |     100 |     100 |                   
  ...raseCycler.ts |   84.48 |    76.47 |     100 |   84.48 | ...47,50-51,67-69 
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   85.13 |    94.73 |     100 |   85.13 | ...05-208,296-306 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...umeCommand.ts |   95.45 |    83.33 |     100 |   95.45 | 55-56             
  ...ompletion.tsx |   90.59 |    83.33 |     100 |   90.59 | ...01,104,137-140 
  ...ectionList.ts |   96.21 |    93.67 |     100 |   96.21 | ...61-162,208-211 
  ...sionPicker.ts |   91.66 |    72.34 |     100 |   91.66 | ...45-246,250-251 
  ...ngsCommand.ts |   18.75 |      100 |       0 |   18.75 | 10-25             
  ...ellHistory.ts |   91.74 |    79.41 |     100 |   91.74 | ...74,122-123,133 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-73              
  ...Completion.ts |   80.97 |     84.4 |   91.66 |   80.97 | ...69-471,479-487 
  ...tateAndRef.ts |     100 |      100 |     100 |     100 |                   
  ...eateDialog.ts |   88.23 |      100 |     100 |   88.23 | 14,18             
  ...rminalSize.ts |   76.19 |      100 |      50 |   76.19 | 21-25             
  ...emeCommand.ts |    8.04 |      100 |       0 |    8.04 | 25-112            
  useTimer.ts      |   88.09 |    85.71 |     100 |   88.09 | 44-45,51-53       
  ...lMigration.ts |       0 |        0 |       0 |       0 |                   
  ...elcomeBack.ts |   69.44 |    54.54 |     100 |   69.44 | ...85,89-90,96-98 
  vim.ts           |   83.54 |     79.5 |     100 |   83.54 | ...44,748-756,765 
 src/ui/layouts    |   89.28 |       80 |     100 |   89.28 |                   
  ...AppLayout.tsx |     100 |      100 |     100 |     100 |                   
  ...AppLayout.tsx |   79.31 |       50 |     100 |   79.31 | 28-33             
 src/ui/models     |   80.24 |    79.16 |   71.42 |   80.24 |                   
  ...ableModels.ts |   80.24 |    79.16 |   71.42 |   80.24 | ...,61-71,123-125 
 ...noninteractive |     100 |      100 |    9.09 |     100 |                   
  ...eractiveUi.ts |     100 |      100 |    9.09 |     100 |                   
 src/ui/state      |   94.91 |    81.81 |     100 |   94.91 |                   
  extensions.ts    |   94.91 |    81.81 |     100 |   94.91 | 68-69,88          
 src/ui/themes     |      99 |    58.66 |     100 |      99 |                   
  ansi-light.ts    |     100 |      100 |     100 |     100 |                   
  ansi.ts          |     100 |      100 |     100 |     100 |                   
  atom-one-dark.ts |     100 |      100 |     100 |     100 |                   
  ayu-light.ts     |     100 |      100 |     100 |     100 |                   
  ayu.ts           |     100 |      100 |     100 |     100 |                   
  color-utils.ts   |     100 |      100 |     100 |     100 |                   
  default-light.ts |     100 |      100 |     100 |     100 |                   
  default.ts       |     100 |      100 |     100 |     100 |                   
  dracula.ts       |     100 |      100 |     100 |     100 |                   
  github-dark.ts   |     100 |      100 |     100 |     100 |                   
  github-light.ts  |     100 |      100 |     100 |     100 |                   
  googlecode.ts    |     100 |      100 |     100 |     100 |                   
  no-color.ts      |     100 |      100 |     100 |     100 |                   
  qwen-dark.ts     |     100 |      100 |     100 |     100 |                   
  qwen-light.ts    |     100 |      100 |     100 |     100 |                   
  ...tic-tokens.ts |     100 |      100 |     100 |     100 |                   
  ...-of-purple.ts |     100 |      100 |     100 |     100 |                   
  theme-manager.ts |   87.08 |    79.68 |     100 |   87.08 | ...03-312,317-318 
  theme.ts         |     100 |    28.98 |     100 |     100 | 272-461           
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/utils      |   68.02 |    83.05 |   79.22 |   68.02 |                   
  ...Colorizer.tsx |   82.78 |    88.23 |     100 |   82.78 | ...10-111,197-223 
  ...nRenderer.tsx |   59.31 |    38.23 |     100 |   59.31 | ...33-139,149-151 
  ...wnDisplay.tsx |   85.75 |    88.05 |     100 |   85.75 | ...76-284,317-342 
  ...eRenderer.tsx |   77.88 |    76.19 |     100 |   77.88 | 54-82             
  ...boardUtils.ts |   59.61 |    58.82 |     100 |   59.61 | ...,86-88,107-149 
  commandUtils.ts  |   93.27 |    88.37 |     100 |   93.27 | ...32,136,138-139 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  displayUtils.ts  |     100 |      100 |     100 |     100 |                   
  formatters.ts    |   94.11 |    97.82 |     100 |   94.11 | 91-94             
  highlight.ts     |   98.63 |       95 |     100 |   98.63 | 93                
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |    7.89 |      100 |       0 |    7.89 | ...11-112,115-116 
  ...nUtilities.ts |   69.84 |    85.71 |     100 |   69.84 | 75-91,100-101     
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  ...storyUtils.ts |   60.25 |    67.69 |      90 |   60.25 | ...36,384,389-411 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  terminalSetup.ts |    4.37 |      100 |       0 |    4.37 | 44-393            
  textUtils.ts     |   96.52 |    94.44 |    87.5 |   96.52 | 19-20,148-149     
  updateCheck.ts   |     100 |    80.95 |     100 |     100 | 30-42             
 ...i/utils/export |    3.89 |        0 |       0 |    3.89 |                   
  collect.ts       |     2.1 |      100 |       0 |     2.1 | 19-266            
  index.ts         |     100 |      100 |     100 |     100 |                   
  normalize.ts     |    1.28 |      100 |       0 |    1.28 | 17-324            
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |      40 |      100 |       0 |      40 | 11-13             
 ...ort/formatters |    4.82 |      100 |       0 |    4.82 |                   
  html.ts          |    9.61 |      100 |       0 |    9.61 | ...28,34-75,81-83 
  json.ts          |      50 |      100 |       0 |      50 | 14-15             
  jsonl.ts         |   13.33 |      100 |       0 |   13.33 | 14-31             
  markdown.ts      |    1.27 |      100 |       0 |    1.27 | 13-225            
 src/utils         |   68.76 |     89.2 |    94.4 |   68.76 |                   
  acpModelUtils.ts |     100 |      100 |     100 |     100 |                   
  ...tification.ts |   92.59 |    71.42 |     100 |   92.59 | 36-37             
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  cleanup.ts       |   65.38 |      100 |   66.66 |   65.38 | 28-37             
  commands.ts      |     100 |      100 |     100 |     100 |                   
  commentJson.ts   |     100 |    93.75 |     100 |     100 | 30                
  deepMerge.ts     |     100 |       90 |     100 |     100 | 41-43,49          
  ...ScopeUtils.ts |   97.56 |    88.88 |     100 |   97.56 | 67                
  ...arResolver.ts |   94.28 |    88.46 |     100 |   94.28 | 28-29,125-126     
  errors.ts        |   98.27 |       95 |     100 |   98.27 | 44-45             
  events.ts        |     100 |      100 |     100 |     100 |                   
  gitUtils.ts      |   91.91 |    84.61 |     100 |   91.91 | 78-81,124-127     
  ...AutoUpdate.ts |    51.2 |       90 |      50 |    51.2 | 87-152            
  ...lationInfo.ts |     100 |      100 |     100 |     100 |                   
  languageUtils.ts |   97.87 |    96.42 |     100 |   97.87 | 132-133           
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...onfigUtils.ts |   88.18 |    95.65 |     100 |   88.18 | 111-129           
  ...iveHelpers.ts |   96.84 |    93.28 |     100 |   96.84 | ...87-488,586,599 
  package.ts       |   88.88 |       80 |     100 |   88.88 | 33-34             
  processUtils.ts  |     100 |      100 |     100 |     100 |                   
  readStdin.ts     |   79.62 |       90 |      80 |   79.62 | 33-40,52-54       
  relaunch.ts      |   98.07 |    76.92 |     100 |   98.07 | 70                
  resolvePath.ts   |   66.66 |       25 |     100 |   66.66 | 12-13,16,18-19    
  sandbox.ts       |       0 |        0 |       0 |       0 | 1-984             
  settingsUtils.ts |   87.59 |    89.16 |   97.22 |   87.59 | ...69,634-639,642 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  stdioHelpers.ts  |     100 |       60 |     100 |     100 | 23,32             
  systemInfo.ts    |   98.97 |     90.9 |     100 |   98.97 | 171               
  ...InfoFields.ts |   86.79 |    65.78 |     100 |   86.79 | ...15-116,137-138 
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   91.17 |    82.35 |     100 |   91.17 | 67-68,73-74,77-78 
  version.ts       |     100 |       50 |     100 |     100 | 11                
  windowTitle.ts   |     100 |      100 |     100 |     100 |                   
  ...WithBackup.ts |    62.1 |    77.77 |     100 |    62.1 | 93,107,118-157    
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |    74.1 |    81.79 |   78.28 |    74.1 |                   
 src               |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |       0 |        0 |       0 |       0 |                   
  promises.ts      |       0 |        0 |       0 |       0 | 1-48              
 src/config        |   70.64 |     78.5 |    52.9 |   70.64 |                   
  config.ts        |   69.31 |     76.8 |      50 |   69.31 | ...1908,1911-1912 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   81.65 |       95 |   67.85 |   81.65 | ...37-138,141-142 
 ...nfirmation-bus |    24.5 |      100 |       0 |    24.5 |                   
  message-bus.ts   |    17.2 |      100 |       0 |    17.2 | ...5,78-82,90-124 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/core          |   82.37 |    82.23 |   86.82 |   82.37 |                   
  baseLlmClient.ts |     100 |    96.42 |     100 |     100 | 115               
  client.ts        |   72.51 |    76.06 |      75 |   72.51 | ...48,692,718-734 
  ...tGenerator.ts |   72.13 |    61.11 |     100 |   72.13 | ...54,356,363-366 
  ...lScheduler.ts |   80.71 |    81.77 |      90 |   80.71 | ...1357,1399-1403 
  geminiChat.ts    |   84.27 |    85.41 |   82.14 |   84.27 | ...56-667,699-702 
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  logger.ts        |   82.25 |    81.81 |     100 |   82.25 | ...57-361,407-421 
  ...tyDefaults.ts |     100 |      100 |     100 |     100 |                   
  ...olExecutor.ts |   92.59 |       75 |      50 |   92.59 | 41-42             
  prompts.ts       |   89.16 |     87.3 |   77.77 |   89.16 | ...-806,1063-1064 
  tokenLimits.ts   |     100 |    86.66 |     100 |     100 | 41-42             
  turn.ts          |   96.15 |    88.46 |     100 |   96.15 | ...54,367-368,416 
 ...ntentGenerator |   93.93 |    73.38 |    90.9 |   93.93 |                   
  ...tGenerator.ts |   96.54 |    71.69 |   86.66 |   96.54 | ...77-278,412,468 
  converter.ts     |   93.47 |    75.17 |     100 |   93.47 | ...87-488,498,558 
  index.ts         |       0 |        0 |       0 |       0 | 1-21              
 ...ntentGenerator |   91.37 |    70.31 |   93.33 |   91.37 |                   
  ...tGenerator.ts |      90 |    70.49 |   92.85 |      90 | ...77-283,301-302 
  index.ts         |     100 |    66.66 |     100 |     100 | 45                
 ...ntentGenerator |   89.87 |    68.36 |      85 |   89.87 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   89.82 |    68.36 |      85 |   89.82 | ...71-472,500,508 
 ...ntentGenerator |   75.68 |     83.9 |   91.42 |   75.68 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   70.86 |    78.42 |   88.88 |   70.86 | ...1317,1338-1347 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-94              
  ...tGenerator.ts |   48.78 |    91.66 |   77.77 |   48.78 | ...10-163,166-167 
  pipeline.ts      |   95.73 |    88.31 |     100 |   95.73 | ...76,411-412,420 
  ...CallParser.ts |   90.66 |    88.57 |     100 |   90.66 | ...15-319,349-350 
 ...rator/provider |   97.24 |    90.32 |   93.54 |   97.24 |                   
  dashscope.ts     |   96.62 |    88.73 |   93.75 |   96.62 | ...18-219,295-296 
  deepseek.ts      |     100 |       75 |     100 |     100 | 23                
  default.ts       |   96.66 |      100 |   83.33 |   96.66 | 76-77             
  index.ts         |     100 |      100 |     100 |     100 |                   
  modelscope.ts    |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
 src/extension     |   59.93 |    80.49 |   77.87 |   59.93 |                   
  ...-converter.ts |   61.96 |    47.22 |      90 |   61.96 | ...34-735,744-776 
  ...ionManager.ts |   43.32 |    85.18 |   64.28 |   43.32 | ...1219,1240-1259 
  ...onSettings.ts |   93.46 |    93.05 |     100 |   93.46 | ...17-221,228-232 
  ...-converter.ts |   54.88 |    94.44 |      60 |   54.88 | ...35-146,158-192 
  github.ts        |   44.74 |    89.09 |      60 |   44.74 | ...46-352,391-444 
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   97.19 |    93.47 |     100 |   97.19 | ...63,183-184,266 
  override.ts      |   94.11 |    88.88 |     100 |   94.11 | 63-64,81-82       
  settings.ts      |   66.26 |      100 |      50 |   66.26 | 81-108,143-149    
  storage.ts       |   94.73 |       90 |     100 |   94.73 | 41-42             
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   95.91 |    89.47 |     100 |   95.91 | 37-38             
 src/generated     |       0 |        0 |       0 |       0 |                   
  git-commit.ts    |       0 |        0 |       0 |       0 | 1-10              
 src/hooks         |   81.17 |    88.71 |   86.48 |   81.17 |                   
  ...Aggregator.ts |   96.46 |     90.9 |     100 |   96.46 | ...66-267,269-270 
  ...entHandler.ts |   89.91 |    82.35 |   77.77 |   89.91 | ...04,172,174-190 
  hookPlanner.ts   |   98.76 |       96 |     100 |   98.76 | 93                
  hookRegistry.ts  |   79.54 |    83.92 |   92.85 |   79.54 | ...46-251,340-352 
  hookRunner.ts    |   78.13 |    91.11 |     100 |   78.13 | ...71-274,309-319 
  hookSystem.ts    |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  trustedHooks.ts  |    9.75 |        0 |       0 |    9.75 | 24-118            
  types.ts         |   80.32 |    85.29 |      70 |   80.32 | ...39,257-261,311 
 src/ide           |   74.15 |    84.71 |   77.58 |   74.15 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   62.73 |    83.78 |   64.86 |   62.73 | ...69-870,899-907 
  ide-installer.ts |   89.06 |    79.31 |     100 |   89.06 | ...36,143-147,160 
  ideContext.ts    |     100 |      100 |     100 |     100 |                   
  process-utils.ts |   84.84 |    71.79 |     100 |   84.84 | ...37,151,193-194 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/lsp           |   23.15 |    42.62 |   33.91 |   23.15 |                   
  ...nfigLoader.ts |   63.43 |    32.09 |     100 |   63.43 | ...86-488,492-498 
  ...ionFactory.ts |    4.29 |        0 |       0 |    4.29 | ...20-371,377-394 
  ...geDetector.ts |   76.31 |    46.66 |   66.66 |   76.31 | ...10-215,224-225 
  ...Normalizer.ts |    4.03 |      100 |       0 |    4.03 | ...48-856,862-916 
  ...verManager.ts |   10.03 |       75 |      25 |   10.03 | ...64-683,689-719 
  ...eLspClient.ts |   17.89 |      100 |       0 |   17.89 | ...37-244,254-258 
  ...LspService.ts |   19.63 |    76.47 |   39.13 |   19.63 | ...26-880,883-893 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |   78.79 |    76.05 |   75.92 |   78.79 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.95 |      100 |   33.33 |   86.95 | ...,93,97,101-102 
  ...h-provider.ts |   73.59 |    54.16 |     100 |   73.59 | ...15-822,829-831 
  ...en-storage.ts |   98.62 |    97.72 |     100 |   98.62 | 87-88             
  oauth-utils.ts   |   70.58 |    85.29 |    90.9 |   70.58 | ...70-290,315-344 
  ...n-provider.ts |   89.83 |    95.83 |   45.45 |   89.83 | ...43,147,151-152 
 .../token-storage |   79.48 |    86.66 |   86.36 |   79.48 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   82.75 |    82.35 |   92.85 |   82.75 | ...62-172,180-181 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...en-storage.ts |   68.14 |    82.35 |   64.28 |   68.14 | ...81-295,298-314 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mocks         |       0 |        0 |       0 |       0 |                   
  msw.ts           |       0 |        0 |       0 |       0 | 1-9               
 src/models        |   87.52 |    80.95 |   90.54 |   87.52 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   73.38 |    43.33 |   86.66 |   73.38 | ...,89-95,134-151 
  ...igResolver.ts |   97.52 |    86.44 |     100 |   97.52 | ...00,306,321-322 
  modelRegistry.ts |   97.21 |     92.4 |     100 |   97.21 | 140-144,274-275   
  modelsConfig.ts  |   82.53 |    80.23 |   86.84 |   82.53 | ...1210,1239-1240 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/output        |     100 |      100 |     100 |     100 |                   
  ...-formatter.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/prompts       |   29.09 |      100 |      25 |   29.09 |                   
  mcp-prompts.ts   |   18.18 |      100 |       0 |   18.18 | 11-19             
  ...t-registry.ts |   31.81 |      100 |   28.57 |   31.81 | ...45,51-58,71-76 
 src/qwen          |   85.87 |    79.93 |   97.18 |   85.87 |                   
  ...tGenerator.ts |   98.64 |    98.18 |     100 |   98.64 | 105-106           
  qwenOAuth2.ts    |   84.74 |    75.78 |   93.33 |   84.74 | ...4,963-979,1009 
  ...kenManager.ts |   83.67 |    76.03 |     100 |   83.67 | ...59-764,785-790 
 src/services      |   82.01 |    80.28 |   82.47 |   82.01 |                   
  ...ionService.ts |   93.21 |     90.9 |     100 |   93.21 | ...44,176,178-182 
  ...ingService.ts |   68.94 |       50 |   85.71 |   68.94 | ...17-429,445-446 
  ...eryService.ts |   80.43 |    95.45 |      75 |   80.43 | ...19-134,140-141 
  ...temService.ts |   87.12 |    77.14 |   85.71 |   87.12 | ...41,143,226-233 
  gitService.ts    |   66.29 |     90.9 |   55.55 |   66.29 | ...03-113,116-120 
  ...ionService.ts |   98.98 |     98.3 |     100 |   98.98 | 260-261           
  ...ionService.ts |   79.23 |    73.19 |   88.88 |   79.23 | ...53-674,682-706 
  ...ionService.ts |   79.93 |    76.92 |      75 |   79.93 | ...90-791,795-800 
 src/skills        |   76.26 |    80.15 |   77.77 |   76.26 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  skill-load.ts    |   90.69 |    77.77 |     100 |   90.69 | ...24,144,156-158 
  skill-manager.ts |   70.94 |    80.89 |   73.91 |   70.94 | ...31-639,642-651 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/subagents     |   81.58 |     79.2 |      85 |   81.58 |                   
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-events.ts |      92 |      100 |      75 |      92 | 139-140           
  ...gent-hooks.ts |       0 |        0 |       0 |       0 | 1                 
  ...nt-manager.ts |   73.06 |    75.83 |      88 |   73.06 | ...76-898,968-969 
  ...statistics.ts |   98.19 |     81.7 |     100 |   98.19 | 128,152,193,226   
  subagent.ts      |   78.13 |    68.34 |   73.07 |   78.13 | ...36-937,989-990 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |    92.4 |    96.59 |     100 |    92.4 | 54-59,63-68,72-77 
 src/telemetry     |   70.09 |     83.9 |   74.13 |   70.09 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...-exporters.ts |   36.76 |      100 |   22.22 |   36.76 | ...84,87-88,91-92 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-111             
  ...t.circular.ts |       0 |        0 |       0 |       0 | 1-128             
  loggers.ts       |   55.08 |    62.79 |   51.42 |   55.08 | ...04-919,922-948 
  metrics.ts       |   82.85 |    86.74 |   81.63 |   82.85 | ...24-725,731-749 
  sdk.ts           |   85.13 |    56.25 |     100 |   85.13 | ...78,184-185,191 
  ...etry-utils.ts |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |   80.36 |    84.69 |   84.48 |   80.36 | ...85-796,805-828 
  uiTelemetry.ts   |   94.73 |    96.15 |   91.66 |   94.73 | 136,165-171       
 ...ry/qwen-logger |    72.1 |    78.82 |   69.23 |    72.1 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |    72.1 |    78.57 |   68.62 |    72.1 | ...33-937,975-976 
 src/test-utils    |   93.88 |    93.33 |   77.77 |   93.88 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  mock-tool.ts     |   92.14 |     92.3 |      76 |   92.14 | ...70,174-175,188 
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
 src/tools         |   73.13 |    78.82 |   81.39 |   73.13 |                   
  ...erQuestion.ts |   87.74 |     73.8 |      90 |   87.74 | ...37-338,342-343 
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  edit.ts          |   85.62 |    86.17 |   85.71 |   85.62 | ...91-492,581-621 
  exitPlanMode.ts  |    85.5 |    86.36 |     100 |    85.5 | ...16-121,149-161 
  glob.ts          |   95.77 |    86.53 |    90.9 |   95.77 | ...00,142,227,230 
  grep.ts          |   71.49 |    85.29 |   76.47 |   71.49 | ...25,465,473-480 
  ls.ts            |   96.44 |     88.7 |     100 |   96.44 | 145-150,181,185   
  lsp.ts           |   72.58 |    60.29 |   90.32 |   72.58 | ...1202,1204-1205 
  ...nt-manager.ts |   47.47 |       60 |   44.44 |   47.47 | ...73-491,494-531 
  mcp-client.ts    |   29.24 |    69.44 |   46.87 |   29.24 | ...1416,1420-1423 
  mcp-tool.ts      |   91.05 |    88.04 |   95.83 |   91.05 | ...91,424,481-482 
  memoryTool.ts    |   74.81 |    83.87 |   90.47 |   74.81 | ...47-355,457-541 
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 102,109           
  read-file.ts     |   96.42 |    86.84 |    87.5 |   96.42 | 66,68,70-71,77-78 
  ripGrep.ts       |   95.65 |    88.67 |     100 |   95.65 | ...26,229,307-308 
  ...-transport.ts |    6.34 |        0 |       0 |    6.34 | 47-145            
  shell.ts         |   87.13 |    80.83 |     100 |   87.13 | ...91-598,603-604 
  skill.ts         |   95.93 |    88.88 |     100 |   95.93 | 61-62,227-230,234 
  task.ts          |   66.84 |     87.5 |     100 |   66.84 | ...07-508,529-536 
  todoWrite.ts     |   78.94 |    80.95 |   71.42 |   78.94 | ...98-423,444-445 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   66.39 |    65.38 |   63.33 |   66.39 | ...02-511,518-524 
  tools.ts         |    89.2 |    89.58 |    87.5 |    89.2 | ...74-375,391-397 
  web-fetch.ts     |   85.86 |       64 |    90.9 |   85.86 | ...43-244,246-247 
  write-file.ts    |   84.15 |    84.12 |      75 |   84.15 | ...41-444,456-490 
 ...ols/web-search |   71.89 |    76.59 |   81.25 |   71.89 |                   
  base-provider.ts |    40.9 |    33.33 |     100 |    40.9 | 40-43,48-56       
  index.ts         |   76.19 |    84.61 |   91.66 |   76.19 | ...54-158,264-274 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |      60 |       50 |      50 |      60 | 35-42             
 ...arch/providers |   46.73 |    61.11 |   72.72 |   46.73 |                   
  ...e-provider.ts |       8 |        0 |       0 |       8 | 68-83,89-199      
  ...e-provider.ts |      82 |    55.55 |     100 |      82 | 57-58,61-62,72-76 
  ...y-provider.ts |   89.79 |       75 |     100 |   89.79 | 62-66             
 src/utils         |   84.76 |    88.24 |   88.05 |   84.76 |                   
  LruCache.ts      |       0 |        0 |       0 |       0 | 1-41              
  browser.ts       |    7.69 |      100 |       0 |    7.69 | 17-56             
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  debugLogger.ts   |   95.96 |    93.61 |   93.75 |   95.96 | 159-163           
  editHelper.ts    |   92.67 |    82.14 |     100 |   92.67 | ...52-454,463-464 
  editor.ts        |   96.98 |    93.87 |     100 |   96.98 | ...93-194,196-197 
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  ...entContext.ts |     100 |     92.3 |     100 |     100 | 81                
  errorParsing.ts  |   96.92 |       95 |     100 |   96.92 | 36-37             
  ...rReporting.ts |   88.46 |       90 |     100 |   88.46 | 69-74             
  errors.ts        |   61.45 |    88.88 |   46.15 |   61.45 | ...08-124,128-134 
  fetch.ts         |   71.97 |    71.42 |   71.42 |   71.97 | ...38,144,157,182 
  fileUtils.ts     |   91.63 |    84.26 |     100 |   91.63 | ...43-649,663-669 
  formatters.ts    |   54.54 |       50 |     100 |   54.54 | 12-16             
  ...eUtilities.ts |   89.21 |    86.66 |     100 |   89.21 | 16-17,49-55,65-66 
  ...rStructure.ts |   94.36 |    94.28 |     100 |   94.36 | ...17-120,330-335 
  getPty.ts        |    12.5 |      100 |       0 |    12.5 | 21-34             
  ...noreParser.ts |    92.3 |    89.13 |     100 |    92.3 | ...15-116,186-187 
  gitUtils.ts      |   59.25 |    76.92 |   66.66 |   59.25 | 41-42,51-74,88-89 
  iconvHelper.ts   |     100 |      100 |     100 |     100 |                   
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  ...ionManager.ts |     100 |       90 |     100 |     100 | 26                
  jsonl-utils.ts   |    8.87 |      100 |       0 |    8.87 | ...51-184,190-196 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...yDiscovery.ts |   82.97 |    76.59 |     100 |   82.97 | ...75,292-293,296 
  ...tProcessor.ts |   93.63 |    90.12 |     100 |   93.63 | ...96-302,384-385 
  ...Inspectors.ts |   61.53 |      100 |      50 |   61.53 | 18-23             
  ...kerChecker.ts |   84.04 |    78.94 |     100 |   84.04 | 68-69,79-84,92-98 
  openaiLogger.ts  |   86.13 |    81.48 |     100 |   86.13 | ...01-103,126-131 
  partUtils.ts     |     100 |      100 |     100 |     100 |                   
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   93.78 |    95.38 |    90.9 |   93.78 | ...03-104,220-222 
  ...ectSummary.ts |    3.75 |      100 |       0 |    3.75 | 27-119            
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   60.25 |    75.86 |     100 |   60.25 | ...95-100,125-126 
  ...noreParser.ts |   85.45 |    81.48 |     100 |   85.45 | ...59,65-66,72-73 
  rateLimit.ts     |      90 |    84.37 |     100 |      90 | 68,79-81          
  readManyFiles.ts |   85.95 |    85.71 |     100 |   85.95 | ...80-182,198-209 
  retry.ts         |   72.22 |    82.69 |     100 |   72.22 | ...19,237,244-245 
  ripgrepUtils.ts  |   46.53 |    83.33 |   66.66 |   46.53 | ...32-233,245-322 
  ...tchOptions.ts |   55.88 |       50 |      75 |   55.88 | ...29-130,151-152 
  safeJsonParse.ts |   74.07 |    83.33 |     100 |   74.07 | 40-46             
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   90.78 |    87.87 |     100 |   90.78 | ...41-42,93,95-96 
  ...aValidator.ts |     100 |    82.85 |     100 |     100 | 16-40,94-95,126   
  ...r-launcher.ts |   76.52 |     87.5 |   66.66 |   76.52 | ...33,135,153-191 
  shell-utils.ts   |   86.82 |    90.98 |     100 |   86.82 | ...61-862,869-873 
  ...nlyChecker.ts |   85.15 |    85.71 |   81.81 |   85.15 | ...07-308,312-313 
  ...tGenerator.ts |     100 |     90.9 |     100 |     100 | 129               
  summarizer.ts    |     100 |    88.88 |     100 |     100 | 94                
  symlink.ts       |   77.77 |       50 |     100 |   77.77 | 44,54-59          
  ...emEncoding.ts |   98.14 |    94.73 |     100 |   98.14 | 118-119           
  ...Serializer.ts |   99.06 |    94.54 |     100 |   99.06 | 90,147-149        
  testUtils.ts     |   53.33 |      100 |   33.33 |   53.33 | ...53,59-64,70-72 
  textUtils.ts     |      60 |      100 |   66.66 |      60 | 36-55             
  thoughtUtils.ts  |     100 |    92.85 |     100 |     100 | 71                
  ...-converter.ts |   94.59 |    85.71 |     100 |   94.59 | 35-36             
  tool-utils.ts    |    93.6 |       92 |     100 |    93.6 | ...58-159,162-163 
  ...aceContext.ts |   96.87 |       95 |    92.3 |   96.87 | 97-98,112-113     
  yaml-parser.ts   |      92 |    83.67 |     100 |      92 | 49-53,65-69       
 ...ils/filesearch |   96.17 |     91.4 |     100 |   96.17 |                   
  crawlCache.ts    |     100 |      100 |     100 |     100 |                   
  crawler.ts       |   96.22 |     92.3 |     100 |   96.22 | 66-67             
  fileSearch.ts    |   93.22 |    87.14 |     100 |   93.22 | ...30-231,233-234 
  ignore.ts        |     100 |      100 |     100 |     100 |                   
  result-cache.ts  |     100 |     92.3 |     100 |     100 | 46                
 ...uest-tokenizer |   56.63 |    74.52 |   74.19 |   56.63 |                   
  ...eTokenizer.ts |   41.86 |    76.47 |   69.23 |   41.86 | ...70-443,453-507 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tTokenizer.ts |   68.39 |    69.49 |    90.9 |   68.39 | ...24-325,327-328 
  ...ageFormats.ts |      76 |      100 |   33.33 |      76 | 45-48,55-56       
  textTokenizer.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
-------------------|---------|----------|---------|---------|-------------------

For detailed HTML reports, please see the 'coverage-reports-22.x-ubuntu-latest' artifact from the main CI run.

Mingholy and others added 5 commits March 10, 2026 14:16
Add generateProviderIdFromBaseUrl function to create more user-friendly
provider IDs by extracting domain names from baseUrl (e.g., api.openai.com
→ openai). Falls back to authType-based naming when URL parsing fails.

Update documentation to reflect v4 configuration format with providerId
structure, including new migration guide section.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
…ix chars

- Change selection indicator from ● to › for better visual alignment
- Add prefix character system (›, ↑, ↓) aligned with SessionPicker
- Add centerSelection prop to keep selected item centered in visible window
- Change scroll indicators from ▲/▼ to ↑/↓ for Unicode consistency
- Update DescriptiveRadioButtonSelect to support centerSelection
- Add height=2 and description fallback for consistent layout

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Update migration tests to expect providerIds generated from baseUrl domains
(e.g., 'my-proxy' instead of 'openai-2', 'api-1' instead of 'openai').

feat(ui): enable scroll indicators in ModelDialog

Add maxItemsToShow, showScrollArrows, and centerSelection props to
BaseSelectionList in ModelDialog for improved scrolling UX.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Add backupSettingsFile call before updating Coding Plan provider
configuration to preserve user settings in case of migration issues.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Update test snapshots to reflect the change from ● to › for
selection indicator, and fix useCodingPlanUpdates test mock.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@Mingholy Mingholy marked this pull request as ready for review March 10, 2026 07:23
@wenshao
Copy link
Copy Markdown
Collaborator

wenshao commented Mar 10, 2026

toV4Model drops capabilities field during migration

In packages/cli/src/config/migration/versions/v3-to-v4.ts, the toV4Model function strips envKey and baseUrl (correctly), but also silently drops the capabilities field. The new ModelConfig type does include an optional capabilities field. Users who had capabilities: { vision: true } on V3 models will lose that data after migration.

The test changes in modelsConfig.test.ts confirm this — expectations changed from isVision: true / capabilities: { vision: true } to isVision: false / capabilities: {}, which suggests capabilities on provider models may be silently broken.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] /model command doesn't show all avaliable models

2 participants