Skip to content

fix(core): Preserve trailing whitespace in newString during edits - #1688

Merged
pomelo-nwu merged 1 commit into
mainfrom
fix/preserve-trailing-whitespace-1618
Feb 4, 2026
Merged

fix(core): Preserve trailing whitespace in newString during edits#1688
pomelo-nwu merged 1 commit into
mainfrom
fix/preserve-trailing-whitespace-1618

Conversation

@tanzhenxin

Copy link
Copy Markdown
Collaborator

TLDR

Fixes an issue where trailing whitespace in newString was being unconditionally stripped during file edits, breaking legitimate use cases like multi-line strings with intentional trailing spaces.

Dive Deeper

The normalizeEditStrings() function in editHelper.ts previously stripped trailing whitespace from newString as a "cleanup" step. However, this broke valid editing scenarios where trailing whitespace is intentional:

  • Multi-line template literals with trailing spaces
  • Heredocs and raw string blocks
  • Files where users explicitly added trailing whitespace for formatting

This change removes the stripTrailingWhitespacePreserveNewlines() function and preserves newString exactly as provided by the LLM. The oldString fuzzy matching continues to work correctly (finding the canonical text from disk), but the replacement text is now preserved verbatim.

Key changes:

  • Removed stripTrailingWhitespacePreserveNewlines() function
  • Modified normalizeEditStrings() to pass newString through unchanged
  • Added comprehensive test suite for trailing whitespace preservation scenarios
  • Fixed test cases that previously expected stripped output

Reviewer Test Plan

  1. Run the new test suite:

    cd packages/core && npx vitest run src/utils/editHelper.test.ts
  2. Verify the fix works with a real edit scenario:

    • Create a file with trailing whitespace that should be preserved
    • Ask Qwen Code to make an edit that preserves or adds trailing whitespace
    • Confirm the whitespace is retained in the final file

Testing Matrix

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

Note: Tests were run on macOS with npx vitest run src/utils/editHelper.test.ts - all 34 tests passing.

Linked issues / bugs

Fixes #1618


🤖 Generated with Qwen Code

Remove unconditional trimming of trailing whitespace from newString in
normalizeEditStrings(). This fixes cases where intentional trailing
whitespace (e.g., in multi-line strings, heredocs) was being stripped.

The oldString fuzzy matching still works correctly, and newString is
now preserved exactly as the LLM intended.

Fixes #1618

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@github-actions

github-actions Bot commented Feb 2, 2026

Copy link
Copy Markdown
Contributor

📋 Review Summary

This PR addresses issue #1618 by removing the unconditional stripping of trailing whitespace from newString during file edits. The change preserves intentional trailing whitespace in multi-line strings, heredocs, and other legitimate use cases where whitespace is significant. The implementation includes comprehensive test coverage for the new behavior.

🔍 General Feedback

  • The PR successfully addresses the reported issue with trailing whitespace being unconditionally stripped
  • Comprehensive test coverage has been added to validate the new behavior across various scenarios
  • The change maintains backward compatibility for the oldString fuzzy matching functionality
  • Clear documentation has been added explaining why trailing whitespace is now preserved

🎯 Specific Feedback

🟡 High

  • File: packages/core/src/utils/editHelper.ts:308 - The documentation comment mentions that trailing whitespace in newString is intentionally NOT stripped, but it could benefit from a brief mention of potential side effects (e.g., LLMs accidentally adding trailing whitespace that gets preserved). Consider adding a note about monitoring for unexpected whitespace accumulation in files over time.

🟢 Medium

  • File: packages/core/src/utils/editHelper.test.ts:90 - The test case "preserves trailing whitespace when intentionally adding to end of line" could be enhanced with a comment explaining why tabs vs spaces matter differently in certain contexts (some languages/contexts treat them differently for indentation vs formatting).
  • File: packages/core/src/utils/editHelper.test.ts:112 - The test case for multi-line template literals could benefit from a more descriptive comment explaining why trailing whitespace in template literals is significant (e.g., for formatted output in tagged templates).

🔵 Low

  • File: packages/core/src/utils/editHelper.ts:306 - The comment explains the change well, but consider adding a reference to the specific issue number (无法在行尾添加空格 #1618) in the JSDoc for future developers who might search for that issue number.
  • File: packages/core/src/utils/editHelper.test.ts:63 - The test name "matches unicode dash variants and preserves newString" now includes the preservation aspect, which is good, but consider renaming it to be more specific about what's being tested (e.g., "matches unicode dash variants and preserves newString trailing whitespace").

✅ Highlights

  • Excellent addition of comprehensive test cases covering various scenarios where trailing whitespace needs to be preserved
  • Good decision to preserve the LLM's intent by not modifying newString unnecessarily
  • The fix maintains the existing fuzzy matching functionality for oldString while addressing the core issue
  • Clear documentation explaining the rationale behind the change
  • Well-designed test cases that cover edge cases like multi-line template literals and file creation scenarios

@github-actions

github-actions Bot commented Feb 2, 2026

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 62.08% 62.08% 71.54% 80.84%
Core 73.02% 73.02% 77.52% 81.74%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   62.08 |    80.84 |   71.54 |   62.08 |                   
 src               |   76.27 |    66.06 |   68.42 |   76.27 |                   
  gemini.tsx       |   63.43 |    61.81 |      75 |   63.43 | ...73,478-486,494 
  ...ractiveCli.ts |   82.77 |    62.74 |   33.33 |   82.77 | ...23,332-337,356 
  ...liCommands.ts |   83.18 |    69.04 |     100 |   83.18 | ...07,242,244,367 
  ...ActiveAuth.ts |   94.02 |    82.35 |     100 |   94.02 | 26-29             
 ...cp-integration |   45.76 |       75 |   23.07 |   45.76 |                   
  acp.ts           |   11.22 |      100 |   27.27 |   11.22 | ...93-398,401-408 
  acpAgent.ts      |    3.15 |        0 |       0 |    3.15 | 36-55,58-408      
  errorCodes.ts    |     100 |      100 |     100 |     100 |                   
  schema.ts        |     100 |      100 |     100 |     100 |                   
 ...ration/service |   75.47 |    66.66 |      50 |   75.47 |                   
  filesystem.ts    |   75.47 |    66.66 |      50 |   75.47 | 39,54,58-67,69-70 
 ...ration/session |   46.74 |    62.69 |    67.5 |   46.74 |                   
  ...ryReplayer.ts |   73.43 |    81.25 |   88.88 |   73.43 | ...57-186,199-200 
  Session.ts       |   32.77 |    44.23 |      50 |   32.77 | ...1046,1067-1135 
  ...entTracker.ts |   81.34 |       75 |    90.9 |   81.34 | ...68-375,378-379 
  index.ts         |       0 |        0 |       0 |       0 | 1-40              
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 ...ssion/emitters |   97.11 |    94.84 |   91.66 |   97.11 |                   
  BaseEmitter.ts   |   84.61 |      100 |      75 |   84.61 | 35-36             
  ...ageEmitter.ts |     100 |      100 |     100 |     100 |                   
  PlanEmitter.ts   |     100 |      100 |     100 |     100 |                   
  ...allEmitter.ts |   98.94 |    92.98 |     100 |   98.94 | 308,316           
  index.ts         |       0 |        0 |       0 |       0 | 1-10              
 src/commands      |   95.65 |      100 |      50 |   95.65 |                   
  extensions.tsx   |   96.55 |      100 |      50 |   96.55 | 37                
  mcp.ts           |   94.11 |      100 |      50 |   94.11 | 26                
 ...nds/extensions |   85.69 |    91.81 |   81.81 |   85.69 |                   
  consent.ts       |   73.56 |    92.59 |   42.85 |   73.56 | 22-30,84-140      
  disable.ts       |     100 |      100 |     100 |     100 |                   
  enable.ts        |     100 |      100 |     100 |     100 |                   
  install.ts       |   81.55 |    83.33 |   66.66 |   81.55 | ...16-119,122-129 
  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 | 150               
  uninstall.ts     |   36.36 |      100 |   33.33 |   36.36 | 22-44,56-63,66-69 
  update.ts        |   96.24 |      100 |     100 |   96.24 | 98-102            
  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              
 src/commands/mcp  |   97.19 |     86.2 |    90.9 |   97.19 |                   
  add.ts           |     100 |    96.15 |     100 |     100 | 210               
  list.ts          |   91.15 |    80.76 |      80 |   91.15 | ...18-120,145-146 
  remove.ts        |     100 |    66.66 |     100 |     100 | 19-23             
 src/config        |   90.66 |    81.51 |    82.6 |   90.66 |                   
  auth.ts          |   86.92 |    78.84 |     100 |   86.92 | ...98-199,215-216 
  config.ts        |   90.31 |    85.65 |      70 |   90.31 | ...-937,1056-1057 
  keyBindings.ts   |     100 |      100 |     100 |     100 |                   
  ...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      |   83.49 |       80 |   80.76 |   83.49 | ...97-919,922-945 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...tedFolders.ts |   96.87 |       94 |     100 |   96.87 | ...87-188,203-204 
  webSearch.ts     |    40.9 |    11.11 |     100 |    40.9 | ...95-102,105-121 
 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          |   42.91 |    71.42 |   38.88 |   42.91 |                   
  index.ts         |   25.27 |    69.23 |   26.66 |   25.27 | ...38-239,249-260 
  languages.ts     |   98.27 |       75 |     100 |   98.27 | 88                
 src/i18n/locales  |       0 |        0 |       0 |       0 |                   
  de.js            |       0 |        0 |       0 |       0 | 1-1371            
  en.js            |       0 |        0 |       0 |       0 | 1-1364            
  ja.js            |       0 |        0 |       0 |       0 | 1-886             
  pt.js            |       0 |        0 |       0 |       0 | 1-1390            
  ru.js            |       0 |        0 |       0 |       0 | 1-1375            
  zh.js            |       0 |        0 |       0 |       0 | 1-1200            
 ...nonInteractive |   63.42 |     65.6 |   68.88 |   63.42 |                   
  session.ts       |   66.87 |    63.24 |   81.81 |   66.87 | ...43-644,658-668 
  types.ts         |    42.5 |      100 |   33.33 |    42.5 | ...63-564,567-568 
 ...active/control |   75.65 |    87.03 |   78.94 |   75.65 |                   
  ...rolContext.ts |    7.69 |        0 |       0 |    7.69 | 47-79             
  ...Dispatcher.ts |   89.32 |    90.38 |   88.23 |   89.32 | ...50-370,385,388 
  ...rolService.ts |       8 |        0 |       0 |       8 | 46-179            
 ...ol/controllers |    6.59 |       80 |   13.79 |    6.59 |                   
  ...Controller.ts |   16.66 |      100 |      60 |   16.66 | 77-114,123-210    
  ...Controller.ts |       0 |        0 |       0 |       0 | 1-56              
  ...Controller.ts |    3.92 |      100 |   11.11 |    3.92 | ...63-381,391-498 
  ...Controller.ts |   13.23 |      100 |       0 |   13.23 | ...82-121,134-137 
  ...Controller.ts |    4.95 |      100 |       0 |    4.95 | ...94-406,415-442 
 .../control/types |       0 |        0 |       0 |       0 |                   
  serviceAPIs.ts   |       0 |        0 |       0 |       0 | 1                 
 ...Interactive/io |   97.13 |    91.88 |   95.94 |   97.13 |                   
  ...putAdapter.ts |    97.3 |    91.52 |     100 |    97.3 | ...1246,1271-1272 
  ...putAdapter.ts |   96.15 |    91.66 |   85.71 |   96.15 | 51-52             
  ...nputReader.ts |     100 |    94.73 |     100 |     100 | 67                
  ...putAdapter.ts |   96.15 |     92.3 |    87.5 |   96.15 | ...81,107-108,289 
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/services      |   87.75 |       85 |   95.83 |   87.75 |                   
  ...mandLoader.ts |     100 |    77.77 |     100 |     100 | 82                
  ...andService.ts |     100 |      100 |     100 |     100 |                   
  ...mandLoader.ts |   87.44 |    81.48 |     100 |   87.44 | ...16-321,326-331 
  ...omptLoader.ts |    75.1 |    80.64 |   83.33 |    75.1 | ...03-204,270-271 
  ...nd-factory.ts |   91.01 |    93.33 |     100 |   91.01 | 116-123           
  ...ation-tool.ts |     100 |    95.45 |     100 |     100 | 125               
  ...and-parser.ts |   89.47 |    85.71 |     100 |   89.47 | 54-57             
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...mpt-processors |   97.25 |    92.59 |     100 |   97.25 |                   
  ...tProcessor.ts |     100 |      100 |     100 |     100 |                   
  ...eProcessor.ts |   94.44 |    84.21 |     100 |   94.44 | 43-44,90-91       
  ...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            |   66.51 |    74.35 |   55.26 |   66.51 |                   
  App.tsx          |     100 |      100 |     100 |     100 |                   
  AppContainer.tsx |    71.4 |    64.86 |      50 |    71.4 | ...1168,1182-1243 
  ...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        |   63.63 |      100 |   41.17 |   63.63 | ...52,54-55,60-61 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   95.65 |    95.65 |     100 |   95.65 | 25-26             
  ...tic-colors.ts |     100 |      100 |     100 |     100 |                   
  textConstants.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/auth       |   29.13 |    72.72 |   42.85 |   29.13 |                   
  AuthDialog.tsx   |   86.66 |    76.19 |      60 |   86.66 | ...01-102,147-153 
  ...nProgress.tsx |       0 |        0 |       0 |       0 | 1-64              
  useAuth.ts       |    3.21 |      100 |       0 |    3.21 | 30-324            
 src/ui/commands   |   66.98 |    80.44 |      52 |   66.98 |                   
  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 |   64.13 |    57.89 |      50 |   64.13 | ...34-138,153-156 
  copyCommand.ts   |   96.22 |      100 |      50 |   96.22 | 15-16             
  ...ryCommand.tsx |   67.53 |    73.07 |      50 |   67.53 | ...75-176,184-192 
  docsCommand.ts   |   95.23 |       80 |      50 |   95.23 | 20-21             
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...onsCommand.ts |   75.45 |    82.89 |   47.82 |   75.45 | ...51-652,661-662 
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  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 
  ...ageCommand.ts |   89.16 |    82.35 |   76.92 |   89.16 | ...17-320,342-343 
  mcpCommand.ts    |   37.54 |    80.95 |   22.22 |   37.54 | ...12-352,358-361 
  memoryCommand.ts |   70.47 |    77.14 |   33.33 |   70.47 | ...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 |    82.8 |    66.66 |      75 |    82.8 | ...57-160,163-166 
  skillsCommand.ts |    10.9 |      100 |       0 |    10.9 | ...86-102,105-132 
  statsCommand.ts  |   76.92 |       75 |      50 |   76.92 | ...36,50-51,65-66 
  ...aryCommand.ts |    4.74 |      100 |       0 |    4.74 | 21-24,27-314      
  ...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 |   70.43 |       77 |   67.47 |   70.43 |                   
  AboutBox.tsx     |     100 |      100 |     100 |     100 |                   
  AnsiOutput.tsx   |     100 |      100 |     100 |     100 |                   
  AppHeader.tsx    |     100 |       50 |     100 |     100 | 26,38             
  ...odeDialog.tsx |     9.7 |      100 |       0 |     9.7 | 35-47,50-182      
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  ...Indicator.tsx |   15.38 |      100 |       0 |   15.38 | 18-53             
  Composer.tsx     |   96.07 |    69.23 |     100 |   96.07 | 40,46,118,127     
  ...itDisplay.tsx |   55.81 |      100 |      50 |   55.81 | 22-38,42-43       
  ...entPrompt.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |   21.05 |      100 |       0 |   21.05 | 17-35             
  ...ryDisplay.tsx |   75.89 |    62.06 |     100 |   75.89 | ...,88,93-108,113 
  ...geDisplay.tsx |   90.47 |       75 |     100 |   90.47 | 20-21             
  ...gProfiler.tsx |       0 |        0 |       0 |       0 | 1-36              
  ...esDisplay.tsx |   10.34 |      100 |       0 |   10.34 | 24-83             
  ...ogManager.tsx |   12.23 |      100 |       0 |   12.23 | 48-334            
  ...ngsDialog.tsx |    7.84 |      100 |       0 |    7.84 | 32-190            
  ExitWarning.tsx  |     100 |      100 |     100 |     100 |                   
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   75.89 |    31.57 |     100 |   75.89 | ...,87-91,107-111 
  ...ngSpinner.tsx |   54.28 |       50 |      50 |   54.28 | 31-48,61          
  Header.tsx       |    82.3 |       60 |   66.66 |    82.3 | ...19,121,126-129 
  Help.tsx         |   98.69 |    73.33 |     100 |   98.69 | 74,129            
  ...emDisplay.tsx |   79.38 |    48.14 |     100 |   79.38 | ...67-171,174,177 
  ...ngeDialog.tsx |     100 |      100 |     100 |     100 |                   
  InputPrompt.tsx  |    88.1 |    82.46 |     100 |    88.1 | ...84,744-745,860 
  ...Shortcuts.tsx |   22.89 |      100 |       0 |   22.89 | ...8,41-43,59-117 
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...firmation.tsx |   91.42 |      100 |      50 |   91.42 | 26-31             
  MainContent.tsx  |   16.39 |      100 |       0 |   16.39 | 22-76             
  ...geDisplay.tsx |       0 |        0 |       0 |       0 | 1-41              
  ModelDialog.tsx  |   79.22 |    68.05 |     100 |   79.22 | ...39-355,368-372 
  ...tsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...tchDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...fications.tsx |   17.02 |      100 |       0 |   17.02 | 15-62             
  ...KeyPrompt.tsx |   45.49 |     12.5 |   33.33 |   45.49 | ...80-198,214-216 
  ...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.78 |    95.55 |     100 |   90.78 | 247-273           
  ...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.71 |    72.66 |     100 |   66.71 | ...70-778,784-785 
  ...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 |    6.97 |      100 |       0 |    6.97 | 20-128            
  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         |   57.14 |      100 |       0 |   57.14 | 24-37             
  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            
 ...nents/messages |   78.16 |    80.25 |    60.6 |   78.16 |                   
  ...onMessage.tsx |   91.93 |    82.35 |     100 |   91.93 | 57-59,61,63       
  DiffRenderer.tsx |   93.17 |    86.17 |     100 |   93.17 | ...08,236-237,303 
  ErrorMessage.tsx |   22.22 |      100 |       0 |   22.22 | 16-31             
  ...niMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...geContent.tsx |     100 |      100 |     100 |     100 |                   
  ...htMessage.tsx |   17.85 |      100 |       0 |   17.85 | 24-48             
  ...geContent.tsx |   31.57 |      100 |       0 |   31.57 | 26-40             
  InfoMessage.tsx  |   22.72 |      100 |       0 |   22.72 | 18-37             
  ...ryMessage.tsx |   12.82 |      100 |       0 |   12.82 | 22-59             
  ...onMessage.tsx |   77.48 |    77.77 |   33.33 |   77.48 | ...57-158,179-194 
  ...upMessage.tsx |   90.74 |       84 |     100 |   90.74 | 40-43,55,140-144  
  ToolMessage.tsx  |   80.54 |       70 |      80 |   80.54 | ...77-382,456-458 
  UserMessage.tsx  |     100 |      100 |     100 |     100 |                   
  ...llMessage.tsx |   36.36 |      100 |       0 |   36.36 | 17-25             
  ...ngMessage.tsx |   26.31 |      100 |       0 |   26.31 | 17-32             
 ...ponents/shared |   80.81 |    77.19 |   94.11 |   80.81 |                   
  ...ctionList.tsx |   99.02 |    95.65 |     100 |   99.02 | 82                
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  EnumSelector.tsx |     100 |    96.42 |     100 |     100 | 58                
  MaxSizedBox.tsx  |   81.62 |    81.96 |   88.88 |   81.62 | ...07-508,613-614 
  ...tonSelect.tsx |     100 |      100 |     100 |     100 |                   
  ...eSelector.tsx |     100 |       60 |     100 |     100 | 40-45             
  TextInput.tsx    |    7.94 |      100 |       0 |    7.94 | 32-194            
  text-buffer.ts   |   82.06 |    75.96 |   96.87 |   82.06 | ...1895,1922,1984 
  ...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 |    8.66 |      100 |       0 |    8.66 |                   
  ...ionWizard.tsx |    6.38 |      100 |       0 |    6.38 | 34-339            
  ...rSelector.tsx |   14.75 |      100 |       0 |   14.75 | 26-85             
  ...onSummary.tsx |    3.51 |      100 |       0 |    3.51 | 24-328            
  ...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.01 |      100 |       0 |    8.01 |                   
  ...ctionStep.tsx |   10.25 |      100 |       0 |   10.25 | 21-103            
  ...eleteStep.tsx |   17.07 |      100 |       0 |   17.07 | 20-59             
  ...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.03 |      100 |       0 |    6.03 | 32-338            
 ...agents/runtime |    7.83 |      100 |       0 |    7.83 |                   
  ...onDisplay.tsx |    7.83 |      100 |       0 |    7.83 | ...72-502,511-549 
 ...mponents/views |   84.97 |    69.23 |      75 |   84.97 |                   
  ...sionsList.tsx |    87.3 |    73.68 |     100 |    87.3 | 62-69             
  McpStatus.tsx    |   87.34 |    60.52 |     100 |   87.34 | ...79,182-184,269 
  SkillsList.tsx   |   27.27 |      100 |       0 |   27.27 | 18-35             
  ToolsList.tsx    |     100 |      100 |     100 |     100 |                   
 src/ui/contexts   |   77.47 |    79.32 |    86.2 |   77.47 |                   
  AppContext.tsx   |      40 |      100 |       0 |      40 | 17-22             
  ...igContext.tsx |   81.81 |       50 |     100 |   81.81 | 15-16             
  ...ssContext.tsx |   85.24 |    84.21 |     100 |   85.24 | ...52-754,757-759 
  ...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.88 |       50 |     100 |   88.88 | 83-84             
  ...teContext.tsx |   83.33 |       50 |     100 |   83.33 | 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.37 |    82.89 |   84.39 |   81.37 |                   
  ...dProcessor.ts |   78.76 |    80.19 |     100 |   78.76 | ...47-450,461-479 
  keyToAnsi.ts     |    3.92 |      100 |       0 |    3.92 | 19-77             
  ...dProcessor.ts |   94.75 |    70.58 |     100 |   94.75 | ...70-271,276-277 
  ...dProcessor.ts |   80.14 |    65.59 |      80 |   80.14 | ...29,584,603-609 
  ...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.28 |     100 |   92.77 | ...85-186,219-222 
  ...ifications.ts |     100 |      100 |     100 |     100 |                   
  ...tIndicator.ts |     100 |     87.5 |     100 |     100 | 43                
  ...ketedPaste.ts |    23.8 |      100 |       0 |    23.8 | 19-37             
  ...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 
  ...leMessages.ts |   98.68 |       95 |     100 |   98.68 | 55                
  ...ialogClose.ts |      25 |      100 |     100 |      25 | 57-94             
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  ...ionUpdates.ts |   93.45 |     92.3 |     100 |   93.45 | ...83-287,300-306 
  ...backDialog.ts |      50 |    77.77 |   33.33 |      50 | ...56-172,193-194 
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |      100 |     100 |     100 |                   
  ...miniStream.ts |   75.04 |    75.24 |      75 |   75.04 | ...1199,1232-1333 
  ...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 | 66                
  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             
  ...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.06 |    94.73 |     100 |   85.06 | ...00-203,291-301 
  ...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.18 |    93.67 |     100 |   96.18 | ...58-159,205-208 
  ...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.66 |    79.41 |     100 |   91.66 | ...69,117-118,128 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-76              
  ...Completion.ts |   80.88 |     84.4 |   91.66 |   80.88 | ...66-468,476-484 
  ...tateAndRef.ts |   13.63 |      100 |       0 |   13.63 | 16-36             
  ...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 |                   
  ...AutoSwitch.ts |   91.84 |    88.57 |     100 |   91.84 | ...07,173,233-241 
  ...elcomeBack.ts |   69.44 |    54.54 |     100 |   69.44 | ...85,89-90,96-98 
  vim.ts           |   83.57 |     79.5 |     100 |   83.57 | ...38,742-750,759 
 src/ui/layouts    |   89.65 |       80 |     100 |   89.65 |                   
  ...AppLayout.tsx |     100 |      100 |     100 |     100 |                   
  ...AppLayout.tsx |   79.31 |       50 |     100 |   79.31 | 28-33             
 src/ui/models     |    91.5 |     87.5 |   81.81 |    91.5 |                   
  ...ableModels.ts |    91.5 |     87.5 |   81.81 |    91.5 | 70-71,79-85       
 ...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.09 |    59.06 |     100 |   99.09 |                   
  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 |   88.08 |    79.68 |     100 |   88.08 | ...00-306,311-312 
  theme.ts         |     100 |    29.41 |     100 |     100 | 270-458           
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/utils      |   69.43 |    83.16 |   79.01 |   69.43 |                   
  ...Colorizer.tsx |   82.19 |    88.23 |     100 |   82.19 | ...08-109,191-217 
  ...olePatcher.ts |      70 |    55.55 |   66.66 |      70 | ...56,59-60,64-67 
  ...nRenderer.tsx |   58.74 |    38.23 |     100 |   58.74 | ...30-136,146-148 
  ...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 |   29.29 |     37.5 |     100 |   29.29 | ...59-120,135-151 
  commandUtils.ts  |   93.16 |    88.37 |     100 |   93.16 | ...29,133,135-136 
  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 |   85.58 |    70.96 |     100 |   85.58 | ...28,236-241,289 
  ...ickerUtils.ts |     100 |      100 |     100 |     100 |                   
  terminalSetup.ts |    3.67 |      100 |       0 |    3.67 | 41-390            
  textUtils.ts     |   96.52 |    94.44 |    87.5 |   96.52 | 19-20,148-149     
  updateCheck.ts   |     100 |    80.95 |     100 |     100 | 27-39             
 src/utils         |   67.78 |    90.78 |   93.75 |   67.78 |                   
  ...tification.ts |      92 |    71.42 |     100 |      92 | 34-35             
  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 |      100 |     100 |     100 |                   
  deepMerge.ts     |     100 |    89.65 |     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.12 |     100 |   98.27 | 40-41             
  events.ts        |     100 |      100 |     100 |     100 |                   
  gitUtils.ts      |   91.75 |    84.61 |     100 |   91.75 | 75-78,121-124     
  ...AutoUpdate.ts |   52.71 |     87.5 |      50 |   52.71 | 88-153            
  ...lationInfo.ts |     100 |      100 |     100 |     100 |                   
  languageUtils.ts |   97.87 |    96.42 |     100 |   97.87 | 131-132           
  math.ts          |       0 |        0 |       0 |       0 | 1-15              
  ...onfigUtils.ts |     100 |      100 |     100 |     100 |                   
  ...iveHelpers.ts |   96.17 |       93 |     100 |   96.17 | ...45-446,544,557 
  package.ts       |   88.88 |       80 |     100 |   88.88 | 33-34             
  processUtils.ts  |     100 |      100 |     100 |     100 |                   
  readStdin.ts     |   79.24 |       90 |      80 |   79.24 | 31-38,50-52       
  relaunch.ts      |      98 |    83.33 |     100 |      98 | 68                
  resolvePath.ts   |   66.66 |       25 |     100 |   66.66 | 12-13,16,18-19    
  sandbox.ts       |       0 |        0 |       0 |       0 | 1-989             
  settingsUtils.ts |   88.23 |    93.57 |   96.87 |   88.23 | ...95,460-493,524 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  systemInfo.ts    |   98.94 |    90.32 |     100 |   98.94 | 168               
  ...InfoFields.ts |   91.11 |    64.51 |     100 |   91.11 | ...,80-81,116-117 
  ...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 |                   
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   73.02 |    81.74 |   77.52 |   73.02 |                   
 src               |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
 src/__mocks__/fs  |     100 |      100 |     100 |     100 |                   
  promises.ts      |     100 |      100 |     100 |     100 |                   
 src/config        |   74.66 |    77.93 |    56.6 |   74.66 |                   
  config.ts        |   73.73 |    76.16 |   54.19 |   73.73 | ...1669,1672-1673 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   81.13 |       95 |   67.85 |   81.13 | ...30-131,134-135 
 src/core          |   83.75 |    81.84 |    87.8 |   83.75 |                   
  baseLlmClient.ts |     100 |    96.42 |     100 |     100 | 115               
  client.ts        |   82.16 |    77.77 |      75 |   82.16 | ...43,586,612-628 
  ...tGenerator.ts |    72.1 |    61.11 |     100 |    72.1 | ...27,329,336-339 
  ...lScheduler.ts |   78.93 |    81.21 |   89.65 |   78.93 | ...1288,1330-1334 
  geminiChat.ts    |   86.12 |       84 |      84 |   86.12 | ...47-558,590-593 
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  logger.ts        |   82.99 |    81.81 |     100 |   82.99 | ...52-356,396-407 
  ...olExecutor.ts |   92.59 |       75 |      50 |   92.59 | 41-42             
  prompts.ts       |   88.44 |    86.15 |    87.5 |   88.44 | ...96-797,800-801 
  tokenLimits.ts   |     100 |    86.66 |     100 |     100 | 41-42             
  turn.ts          |   95.93 |    88.23 |     100 |   95.93 | ...32,345-346,394 
 ...ntentGenerator |   93.59 |    71.17 |   90.32 |   93.59 |                   
  ...tGenerator.ts |   96.51 |    71.69 |   86.66 |   96.51 | ...73-274,408,464 
  converter.ts     |   92.76 |    71.31 |     100 |   92.76 | ...59,461-462,472 
  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.92 |    69.07 |      85 |   89.92 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tGenerator.ts |   89.87 |    69.07 |      85 |   89.87 | ...73-474,502,510 
 ...ntentGenerator |   73.38 |    82.95 |    90.9 |   73.38 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   66.81 |    76.71 |      88 |   66.81 | ...1241,1262-1271 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-94              
  ...tGenerator.ts |   47.93 |    91.66 |   77.77 |   47.93 | ...07-160,163-164 
  pipeline.ts      |   97.81 |    89.55 |     100 |   97.81 | ...11,346-347,355 
  ...CallParser.ts |   90.14 |    86.66 |     100 |   90.14 | ...15-319,349-350 
 ...rator/provider |      95 |    88.67 |   90.62 |      95 |                   
  dashscope.ts     |   96.53 |    90.14 |   93.75 |   96.53 | ...19-220,284-285 
  deepseek.ts      |   84.37 |    70.58 |      75 |   84.37 | ...41,54-55,82-85 
  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     |   57.62 |    84.26 |    76.1 |   57.62 |                   
  ...-converter.ts |   46.62 |    53.24 |      70 |   46.62 | ...16-717,726-758 
  ...ionManager.ts |   43.95 |    86.79 |   64.28 |   43.95 | ...1202,1223-1228 
  ...onSettings.ts |   94.97 |    93.05 |     100 |   94.97 | ...14-216,223-225 
  ...-converter.ts |   58.33 |      100 |      60 |   58.33 | 67-106,140-174    
  github.ts        |   43.76 |    89.09 |      60 |   43.76 | ...35-341,380-433 
  index.ts         |     100 |      100 |     100 |     100 |                   
  marketplace.ts   |   97.14 |    93.18 |     100 |   97.14 | ...63,183-184,247 
  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     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/ide           |   68.79 |    82.74 |      75 |   68.79 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |     100 |      100 |     100 |     100 |                   
  ide-client.ts    |   52.32 |     78.2 |      60 |   52.32 | ...11-819,845-853 
  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.04 |    42.97 |   33.91 |   23.04 |                   
  ...nfigLoader.ts |   63.88 |    32.09 |     100 |   63.88 | ...79-481,485-491 
  ...ionFactory.ts |    3.65 |      100 |       0 |    3.65 | ...17-368,374-391 
  ...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 |    9.71 |       75 |      25 |    9.71 | ...61-680,686-716 
  ...eLspClient.ts |   17.89 |      100 |       0 |   17.89 | ...37-244,254-258 
  ...LspService.ts |   19.59 |    76.47 |   39.13 |   19.59 | ...06-860,863-873 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mcp           |    78.5 |    75.24 |   75.92 |    78.5 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...h-provider.ts |   86.56 |      100 |   33.33 |   86.56 | ...86,90,94,98-99 
  ...h-provider.ts |   73.19 |    54.16 |     100 |   73.19 | ...11-818,825-827 
  ...en-storage.ts |    98.6 |    97.72 |     100 |    98.6 | 84-85             
  oauth-utils.ts   |   70.33 |    81.48 |    90.9 |   70.33 | ...62-283,308-331 
  ...n-provider.ts |   89.47 |    95.83 |   45.45 |   89.47 | ...40,144,148-149 
 .../token-storage |   79.76 |    86.66 |   86.36 |   79.76 |                   
  ...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.57 |    82.35 |   64.28 |   68.57 | ...77-291,294-310 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/mocks         |     100 |      100 |     100 |     100 |                   
  msw.ts           |     100 |      100 |     100 |     100 |                   
 src/models        |   87.78 |    82.62 |    84.9 |   87.78 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...nfigErrors.ts |   74.22 |    47.82 |   84.61 |   74.22 | ...,67-74,106-117 
  ...igResolver.ts |   97.94 |    87.93 |     100 |   97.94 | 135,295,311-312   
  modelRegistry.ts |     100 |    97.77 |     100 |     100 | 164               
  modelsConfig.ts  |   80.91 |    80.45 |   76.92 |   80.91 | ...29,701,724-728 
  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       |   26.41 |      100 |      25 |   26.41 |                   
  mcp-prompts.ts   |   18.18 |      100 |       0 |   18.18 | 11-19             
  ...t-registry.ts |   28.57 |      100 |   28.57 |   28.57 | ...42,48-55,68-73 
 src/qwen          |   85.93 |    79.93 |   97.18 |   85.93 |                   
  ...tGenerator.ts |   98.63 |    98.18 |     100 |   98.63 | 103-104           
  qwenOAuth2.ts    |   84.37 |    75.78 |   93.33 |   84.37 | ...6,957-973,1000 
  ...kenManager.ts |   84.24 |    76.03 |     100 |   84.24 | ...52-757,778-783 
 src/services      |   83.34 |    80.96 |   83.15 |   83.34 |                   
  ...ionService.ts |   93.21 |     90.9 |     100 |   93.21 | ...44,176,178-182 
  ...ingService.ts |   67.42 |       50 |   84.61 |   67.42 | ...77-389,395-407 
  ...eryService.ts |   80.43 |    95.45 |      75 |   80.43 | ...19-134,140-141 
  ...temService.ts |     100 |      100 |     100 |     100 |                   
  gitService.ts    |   66.29 |     90.9 |   55.55 |   66.29 | ...03-113,116-120 
  ...ionService.ts |   97.67 |    91.25 |     100 |   97.67 | ...79-380,386-387 
  ...ionService.ts |   79.12 |    73.19 |   88.88 |   79.12 | ...50-671,679-703 
  ...ionService.ts |   82.18 |    78.63 |   73.91 |   82.18 | ...43-744,748-753 
 src/skills        |   64.86 |    83.72 |      75 |   64.86 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  skill-load.ts    |   40.54 |    69.23 |   66.66 |   40.54 | ...13,119,131-133 
  skill-manager.ts |   70.48 |    86.11 |      75 |   70.48 | ...24-532,535-544 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/subagents     |   81.03 |    79.04 |   84.81 |   81.03 |                   
  ...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 |   72.88 |    75.83 |      88 |   72.88 | ...72-894,962-963 
  ...statistics.ts |   98.19 |     81.7 |     100 |   98.19 | 128,152,193,226   
  subagent.ts      |   76.38 |    66.66 |      72 |   76.38 | ...01-902,908-909 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |    92.4 |    96.59 |     100 |    92.4 | 54-59,63-68,72-77 
 src/telemetry     |   69.98 |    85.53 |   74.13 |   69.98 |                   
  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 |     65.9 |   51.42 |   55.08 | ...04-919,922-948 
  metrics.ts       |   82.85 |    86.74 |   81.63 |   82.85 | ...24-725,731-749 
  sdk.ts           |   82.55 |       50 |     100 |   82.55 | ...85,189-190,192 
  ...etry-utils.ts |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |   80.39 |    91.11 |   84.48 |   80.39 | ...86-797,806-829 
  uiTelemetry.ts   |   94.73 |    96.15 |   91.66 |   94.73 | 136,165-171       
 ...learcut-logger |   45.11 |    70.17 |   38.09 |   45.11 |                   
  ...cut-logger.ts |   38.36 |    69.64 |   38.09 |   38.36 | ...1117,1120-1123 
  ...tadata-key.ts |     100 |      100 |     100 |     100 |                   
 ...ry/qwen-logger |   68.78 |    82.71 |   68.62 |   68.78 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   68.78 |     82.5 |      68 |   68.78 | ...08-912,955-956 
 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         |   74.79 |    79.45 |   84.01 |   74.79 |                   
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  edit.ts          |   84.89 |    85.71 |   85.71 |   84.89 | ...60-461,550-590 
  exitPlanMode.ts  |   85.29 |    86.36 |     100 |   85.29 | ...03-108,136-148 
  glob.ts          |   95.73 |    86.53 |    90.9 |   95.73 | 91-97,139,224,227 
  grep.ts          |   71.35 |    85.29 |   76.47 |   71.35 | ...22,462,470-477 
  ls.ts            |   96.41 |     88.7 |     100 |   96.41 | 142-147,178,182   
  lsp.ts           |   72.58 |    60.29 |   90.32 |   72.58 | ...1202,1204-1205 
  ...nt-manager.ts |   87.05 |     62.5 |      80 |   87.05 | ...10-117,125-126 
  mcp-client.ts    |   28.89 |    70.42 |   48.38 |   28.89 | ...1365,1369-1372 
  mcp-tool.ts      |   95.43 |    93.67 |      95 |   95.43 | 233-243,305-306   
  memoryTool.ts    |   74.42 |    83.87 |   90.47 |   74.42 | ...39-347,449-533 
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 99,106            
  read-file.ts     |   96.34 |    86.48 |    87.5 |   96.34 | 65,67,69-70,76-77 
  ...many-files.ts |   78.99 |    78.87 |   85.71 |   78.99 | ...46-447,454-455 
  ripGrep.ts       |   95.61 |    88.67 |     100 |   95.61 | ...23,226,304-305 
  ...-transport.ts |    2.43 |      100 |       0 |    2.43 | 44-163            
  shell.ts         |   87.22 |    82.35 |     100 |   87.22 | ...75-582,587-588 
  skill.ts         |   94.57 |    85.29 |    90.9 |   94.57 | ...77,220-223,227 
  smart-edit.ts    |   82.95 |    77.86 |      88 |   82.95 | ...01-903,921-964 
  task.ts          |   66.66 |     87.5 |     100 |   66.66 | ...04-505,526-533 
  todoWrite.ts     |   78.74 |    80.95 |   71.42 |   78.74 | ...95-420,441-442 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   69.09 |    65.38 |   70.37 |   69.09 | ...24-429,437-445 
  tools.ts         |    89.2 |    89.58 |    87.5 |    89.2 | ...74-375,391-397 
  web-fetch.ts     |   85.22 |    60.86 |      90 |   85.22 | ...33-234,236-237 
  write-file.ts    |   83.33 |    83.33 |      75 |   83.33 | ...16-419,431-465 
 ...ols/web-search |   72.49 |    76.59 |   81.25 |   72.49 |                   
  base-provider.ts |    40.9 |    33.33 |     100 |    40.9 | 40-43,48-56       
  index.ts         |   76.99 |    84.61 |   91.66 |   76.99 | ...47-151,257-267 
  types.ts         |       0 |        0 |       0 |       0 | 1                 
  utils.ts         |      60 |       50 |      50 |      60 | 35-42             
 ...arch/providers |   46.73 |     64.7 |   72.72 |   46.73 |                   
  ...e-provider.ts |       8 |      100 |       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.47 |     88.7 |   85.95 |   84.47 |                   
  LruCache.ts      |   80.64 |       75 |     100 |   80.64 | 28,30-34          
  browser.ts       |    7.69 |      100 |       0 |    7.69 | 17-56             
  ...igResolver.ts |     100 |      100 |     100 |     100 |                   
  editHelper.ts    |   92.03 |    80.24 |     100 |   92.03 | ...52-454,463-464 
  editor.ts        |   96.95 |    93.87 |     100 |   96.95 | ...90-191,193-194 
  ...arResolver.ts |   94.28 |    88.88 |     100 |   94.28 | 28-29,125-126     
  ...entContext.ts |     100 |    94.73 |     100 |     100 | 120               
  errorParsing.ts  |     100 |      100 |     100 |     100 |                   
  ...rReporting.ts |   83.72 |    84.61 |     100 |   83.72 | 82-86,107-115     
  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     |   94.78 |       90 |     100 |   94.78 | ...27-429,478-484 
  formatters.ts    |   54.54 |       50 |     100 |   54.54 | 12-16             
  ...eUtilities.ts |    95.4 |    94.87 |     100 |    95.4 | 16-17,45-46       
  ...rStructure.ts |   95.96 |    94.93 |     100 |   95.96 | ...14-117,345-347 
  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 
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  ...ionManager.ts |     100 |       90 |     100 |     100 | 23                
  jsonl-utils.ts   |    7.37 |      100 |       0 |    7.37 | ...48-181,187-193 
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...edit-fixer.ts |     100 |      100 |     100 |     100 |                   
  ...yDiscovery.ts |    78.5 |       65 |   66.66 |    78.5 | ...83-384,387-388 
  ...tProcessor.ts |   92.46 |    88.75 |   92.85 |   92.46 | ...09-315,398-399 
  ...Inspectors.ts |   61.53 |      100 |      50 |   61.53 | 18-23             
  ...kerChecker.ts |   83.69 |    78.94 |     100 |   83.69 | 65-66,76-81,89-95 
  openaiLogger.ts  |   85.85 |    81.48 |     100 |   85.85 | ...98-100,123-128 
  partUtils.ts     |     100 |      100 |     100 |     100 |                   
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   95.32 |    95.23 |     100 |   95.32 | ...,70-71,103-104 
  ...ectSummary.ts |    3.75 |      100 |       0 |    3.75 | 27-119            
  ...tIdContext.ts |     100 |      100 |     100 |     100 |                   
  ...rDetection.ts |   60.25 |    74.07 |     100 |   60.25 | ...95-100,125-126 
  ...noreParser.ts |   85.45 |    78.26 |     100 |   85.45 | ...59,65-66,72-73 
  retry.ts         |   71.83 |    82.69 |     100 |   71.83 | ...12,230,237-238 
  ripgrepUtils.ts  |   36.19 |       75 |   55.55 |   36.19 | ...77-230,246-334 
  ...tchOptions.ts |   55.88 |       50 |      75 |   55.88 | ...29-130,151-152 
  safeJsonParse.ts |      72 |    83.33 |     100 |      72 | 37-43             
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...aConverter.ts |   90.78 |    87.87 |     100 |   90.78 | ...41-42,93,95-96 
  ...aValidator.ts |     100 |    88.88 |     100 |     100 | 11-25,69          
  ...r-launcher.ts |   76.52 |     87.5 |   66.66 |   76.52 | ...33,135,153-191 
  shell-utils.ts   |   87.07 |    95.71 |   93.33 |   87.07 | ...30-543,563-567 
  ...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 | 91                
  ...emEncoding.ts |   98.11 |    94.59 |     100 |   98.11 | 115-116           
  ...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     |   53.33 |      100 |      50 |   53.33 | 36-55             
  thoughtUtils.ts  |     100 |     92.3 |     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.82 |    95.12 |    92.3 |   96.82 | 94-95,109-110     
  yaml-parser.ts   |      92 |       84 |     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 | ...27-228,230-231 
  ignore.ts        |     100 |      100 |     100 |     100 |                   
  result-cache.ts  |     100 |     92.3 |     100 |     100 | 46                
 ...uest-tokenizer |   56.33 |    74.52 |   74.19 |   56.33 |                   
  ...eTokenizer.ts |   41.47 |    76.47 |   69.23 |   41.47 | ...67-440,450-504 
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...tTokenizer.ts |   68.12 |    69.49 |    90.9 |   68.12 | ...21-322,324-325 
  ...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.

@pomelo-nwu pomelo-nwu left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@pomelo-nwu
pomelo-nwu merged commit a8b1a5d into main Feb 4, 2026
14 checks passed
xaelistic pushed a commit to xaelistic/qwen-code that referenced this pull request Jun 7, 2026
xaelistic pushed a commit to xaelistic/qwen-code that referenced this pull request Jun 7, 2026
…espace-1618

fix(core): Preserve trailing whitespace in newString during edits
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

无法在行尾添加空格

2 participants