Skip to content

feat: Implement Plan Mode for Safe Code Planning#658

Merged
tanzhenxin merged 11 commits into
mainfrom
feat/plan-mode
Sep 24, 2025
Merged

feat: Implement Plan Mode for Safe Code Planning#658
tanzhenxin merged 11 commits into
mainfrom
feat/plan-mode

Conversation

@tanzhenxin

@tanzhenxin tanzhenxin commented Sep 19, 2025

Copy link
Copy Markdown
Collaborator

🎯 Summary

This PR introduces Plan Mode, a new approval workflow that allows users to review and approve implementation plans before any code changes are made. This feature enhances safety and control by ensuring users can see exactly what the AI intends to do before execution begins.

🚀 Key Features

Plan Mode Workflow

  • Read-only Planning Phase: When in plan mode, the AI can only perform read-only operations (file reading, searching, analysis)
  • Plan Presentation: AI presents a comprehensive implementation plan using the new exit_plan_mode tool
  • User Approval: Users can approve, reject, or modify the plan before any code changes occur
  • Seamless Transition: Upon approval, the system transitions to normal execution mode

New Configuration Options

  • approvalMode: New setting with values plan, default, auto-edit, yolo
  • Plan Mode UI: New PlanSummaryDisplay component for presenting plans in the terminal
  • Enhanced Tool Confirmation: Updated confirmation dialogs to handle plan approval workflow

New Slash Command: /approval-mode

  • Interactive Mode Management: New /approval-mode slash command for runtime approval mode switching, available options: plan, default, auto-edit and yolo.
  • Flexible Scope Control: Set approval mode for current session, user profile, or project with --session, --user, --project flags
  • Real-time Switching: Change approval behavior mid-conversation without restarting the CLI

🔧 Technical Implementation

Core Components

  • ExitPlanModeTool: New tool for transitioning from planning to execution
  • Plan Mode System Prompts: Enforces read-only behavior during planning phase
  • Enhanced Tool Scheduler: Blocks non-read-only tools when in plan mode
  • Shell Read-only Detection: New utilities to identify safe vs. destructive shell commands

UI Enhancements

  • PlanSummaryDisplay: React component for rendering markdown plans
  • Updated Tool Confirmation: Enhanced dialogs with plan-specific approval options
  • Auto-accept Indicator: Updated to reflect plan mode status

Command System Integration

  • ApprovalModeCommand: New built-in slash command with comprehensive argument parsing
  • Command Registration: Integrated into the BuiltinCommandLoader for automatic availability
  • Subcommand Support: Each approval mode available as a subcommand (e.g., /approval-mode plan)
  • Settings Integration: Seamless integration with user, project, and session-level configuration

🧪 Testing

  • Unit Tests: Comprehensive test coverage for all new components
  • Integration Tests: Updated existing tests to handle plan mode scenarios
  • Configuration Tests: Validation of new approval mode settings
  • Command Tests: Full test coverage for the new /approval-mode slash command functionality

📚 Documentation Updates

  • Updated CLI configuration documentation
  • Enhanced keyboard shortcuts documentation
  • Added plan mode workflow explanations
  • New Command Documentation: Complete documentation for /approval-mode command usage and options

🔒 Safety & Security

  • Read-only Enforcement: Plan mode strictly prevents any system modifications
  • Shell Command Analysis: New utilities to classify shell commands as safe/destructive
  • User Control: Users maintain full control over when and what gets executed
  • Runtime Safety: /approval-mode command allows users to increase or decrease safety levels as needed

🎨 User Experience

  • Clear Plan Presentation: Markdown-formatted plans with syntax highlighting
  • Intuitive Approval Flow: Simple approve/reject/modify workflow
  • Visual Indicators: Clear UI feedback for current approval mode status
  • Flexible Control: Easy switching between approval modes without interrupting workflow
  • Contextual Help: Built-in help and mode descriptions via the /approval-mode command

🔄 Migration & Compatibility

  • Backward Compatible: Existing workflows continue unchanged
  • Optional Feature: Plan mode is opt-in via configuration
  • Graceful Fallbacks: Robust error handling and mode transitions
  • Command Compatibility: New slash command follows existing CLI patterns and conventions

This feature significantly enhances the safety and predictability of AI-assisted coding by giving users full visibility and control over implementation plans before any changes are made to their codebase. The new /approval-mode slash command provides users with immediate, interactive control over their safety preferences without needing to restart or reconfigure the CLI.

@github-actions

Copy link
Copy Markdown
Contributor

📋 Review Summary

This PR introduces a significant new feature called "Plan Mode" which allows users to review and approve implementation plans before any code changes are made. The implementation is comprehensive, covering configuration, core logic, UI components, and proper testing. Overall, this is a valuable addition that enhances safety and user control.

🔍 General Feedback

  • The implementation is well-structured with clear separation of concerns
  • Good test coverage for the new functionality
  • Proper documentation updates for the new configuration options
  • The UI components are well-designed and integrate smoothly with existing components
  • The plan mode enforcement logic is robust and handles various edge cases

🎯 Specific Feedback

🟡 High

  • File: packages/core/src/utils/shellReadOnlyChecker.ts - The containsWriteRedirection function has a potential issue with escaped quotes. The function checks for quotes to determine if it's inside a quoted string, but it doesn't properly handle escaped quotes (e.g., "This is a \\\"quoted\\\" string"). This could lead to false positives in detecting write redirections.

🟢 Medium

  • File: packages/core/src/core/prompts.ts - In the getPlanModeSystemReminder function, the reference to ${ToolNames.EXIT_PLAN_MODE} might be clearer if it used the actual string literal for consistency with other parts of the prompt, or ensure that the ToolNames import is clearly visible.
  • File: packages/core/src/tools/exitPlanMode.ts - In the ExitPlanModeToolInvocation.execute method, the error handling could be improved by using a more specific error type instead of the generic Error type for better type safety.

🔵 Low

  • File: packages/core/src/core/client.ts - Consider adding a comment to explain why the order of tool registration was changed (ExitPlanModeTool before WebFetchTool) for better maintainability.
  • File: packages/core/src/utils/shellReadOnlyChecker.ts - The file is missing a newline at the end, which is a minor style issue.

✅ Highlights

  • Excellent implementation of the plan mode workflow with proper read-only enforcement
  • Well-designed UI components for displaying plans with markdown support
  • Comprehensive test coverage for all new functionality
  • Good handling of edge cases like untrusted folders
  • Clear documentation updates for the new features
  • Proper integration with existing approval mode cycling functionality

@github-actions

github-actions Bot commented Sep 19, 2025

Copy link
Copy Markdown
Contributor

Code Coverage Summary

Package Lines Statements Functions Branches
CLI 69.47% 69.47% 74.01% 80.05%
Core 76.24% 76.24% 78.87% 83.76%
CLI Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   69.47 |    80.05 |   74.01 |   69.47 |                   
 src               |   57.75 |    68.33 |   61.53 |   57.75 |                   
  gemini.tsx       |   41.69 |       50 |    62.5 |   41.69 | ...71,381-387,399 
  ...ractiveCli.ts |   90.38 |    73.68 |   33.33 |   90.38 | 36-39,58-61,88-90 
  ...ActiveAuth.ts |     100 |      100 |     100 |     100 |                   
 src/commands      |    72.5 |      100 |      25 |    72.5 |                   
  extensions.tsx   |   56.52 |      100 |       0 |   56.52 | 19-27,31          
  mcp.ts           |   94.11 |      100 |      50 |   94.11 | 26                
 ...nds/extensions |   35.65 |       75 |   11.11 |   35.65 |                   
  disable.ts       |    28.2 |      100 |       0 |    28.2 | 17-27,33-44,46-50 
  enable.ts        |    23.4 |      100 |       0 |    23.4 | 17-35,41-52,54-58 
  install.ts       |   55.31 |    66.66 |   33.33 |   55.31 | 20-34,56,59-63    
  list.ts          |   32.14 |      100 |       0 |   32.14 | 11-27,34-35       
  uninstall.ts     |   45.71 |      100 |   33.33 |   45.71 | 15-23,35-40,43-46 
  update.ts        |   26.47 |      100 |       0 |   26.47 | 15-30,36-41,43-46 
 src/commands/mcp  |   95.62 |       80 |    90.9 |   95.62 |                   
  add.ts           |    97.4 |    83.33 |     100 |    97.4 | 109-112,119       
  list.ts          |   90.56 |    80.76 |      80 |   90.56 | ...07-109,134-135 
  remove.ts        |     100 |    66.66 |     100 |     100 | 19-23             
 src/config        |   92.56 |    83.14 |   87.32 |   92.56 |                   
  auth.ts          |   83.33 |       95 |      25 |   83.33 | ...60,63-64,67-68 
  config.ts        |   96.17 |    85.24 |   83.33 |   96.17 | ...58,515,710-714 
  extension.ts     |   83.72 |    83.87 |   91.66 |   83.72 | ...68-469,476-480 
  keyBindings.ts   |     100 |      100 |     100 |     100 |                   
  sandboxConfig.ts |   54.16 |    23.07 |   66.66 |   54.16 | ...44,54-68,73-89 
  settings.ts      |    89.4 |    82.44 |   95.45 |    89.4 | ...74-775,847-848 
  ...ingsSchema.ts |     100 |      100 |     100 |     100 |                   
  ...tedFolders.ts |   92.43 |       90 |     100 |   92.43 | ...10,126-131,149 
 ...fig/extensions |    87.5 |    66.66 |     100 |    87.5 |                   
  ...ableSchema.ts |     100 |      100 |     100 |     100 |                   
  variables.ts     |   83.72 |    66.66 |     100 |   83.72 | ...40,53-54,64-65 
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/patches       |       0 |        0 |       0 |       0 |                   
  is-in-ci.ts      |       0 |        0 |       0 |       0 | 1-17              
 src/services      |   71.94 |    88.15 |   82.35 |   71.94 |                   
  ...mandLoader.ts |     100 |      100 |     100 |     100 |                   
  ...andService.ts |     100 |      100 |     100 |     100 |                   
  ...mandLoader.ts |    92.7 |     92.5 |     100 |    92.7 | 177-182,265-272   
  ...omptLoader.ts |   34.37 |    72.72 |      50 |   34.37 | ...43-244,247-251 
  types.ts         |     100 |      100 |     100 |     100 |                   
 ...mpt-processors |   97.03 |     93.5 |     100 |   97.03 |                   
  ...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 |   96.96 |    94.87 |     100 |   96.96 | 93-96             
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/test-utils    |   91.52 |    83.33 |      80 |   91.52 |                   
  ...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            |   61.06 |    65.32 |   59.52 |   61.06 |                   
  App.tsx          |   60.02 |    56.41 |   35.29 |   60.02 | ...1559,1585-1614 
  ...tionNudge.tsx |    8.33 |      100 |       0 |    8.33 | 24-96             
  colors.ts        |   79.59 |      100 |   66.66 |   79.59 | ...43,45-46,48-49 
  constants.ts     |     100 |      100 |     100 |     100 |                   
  keyMatchers.ts   |   95.65 |    95.83 |     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/commands   |   77.64 |    80.75 |    82.5 |   77.64 |                   
  aboutCommand.ts  |     100 |       60 |     100 |     100 | 24-31             
  agentsCommand.ts |   77.77 |      100 |       0 |   77.77 | 23-25,32-34       
  ...odeCommand.ts |   79.23 |    75.53 |     100 |   79.23 | ...14-415,429-430 
  authCommand.ts   |     100 |      100 |     100 |     100 |                   
  bugCommand.ts    |   79.72 |     37.5 |     100 |   79.72 | 33-36,43,81-90    
  chatCommand.ts   |   94.23 |    83.33 |     100 |   94.23 | ...11-212,214-215 
  clearCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...essCommand.ts |     100 |    88.88 |     100 |     100 | 73                
  copyCommand.ts   |     100 |      100 |     100 |     100 |                   
  corgiCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...ryCommand.tsx |   69.69 |    73.07 |     100 |   69.69 | ...24-125,160-168 
  docsCommand.ts   |     100 |      100 |     100 |     100 |                   
  editorCommand.ts |     100 |      100 |     100 |     100 |                   
  ...onsCommand.ts |     100 |      100 |     100 |     100 |                   
  helpCommand.ts   |     100 |      100 |     100 |     100 |                   
  ideCommand.ts    |   62.19 |    66.66 |      60 |   62.19 | ...34-248,256-270 
  initCommand.ts   |   83.54 |       70 |     100 |   83.54 | 64,78-83,85-90    
  mcpCommand.ts    |   82.33 |    82.95 |   83.33 |   82.33 | ...84-385,438-445 
  memoryCommand.ts |   60.88 |     86.2 |   42.85 |   60.88 | ...12,219-240,264 
  modelCommand.ts  |     100 |      100 |     100 |     100 |                   
  ...acyCommand.ts |     100 |      100 |     100 |     100 |                   
  quitCommand.ts   |   64.81 |      100 |      50 |   64.81 | 15-34             
  ...oreCommand.ts |      92 |    87.09 |     100 |      92 | ...,82-87,128-129 
  ...ngsCommand.ts |     100 |      100 |     100 |     100 |                   
  ...hubCommand.ts |   83.66 |    66.66 |     100 |   83.66 | ...54-157,160-163 
  statsCommand.ts  |   84.48 |       75 |     100 |   84.48 | 25-33             
  ...aryCommand.ts |    8.33 |      100 |       0 |    8.33 | 23-188            
  ...tupCommand.ts |     100 |      100 |     100 |     100 |                   
  themeCommand.ts  |     100 |      100 |     100 |     100 |                   
  toolsCommand.ts  |     100 |      100 |     100 |     100 |                   
  types.ts         |     100 |      100 |     100 |     100 |                   
  vimCommand.ts    |   44.44 |      100 |       0 |   44.44 | 15-25             
 src/ui/components |   65.54 |    79.66 |   70.66 |   65.54 |                   
  AboutBox.tsx     |     100 |       50 |     100 |     100 | 104               
  AsciiArt.ts      |     100 |      100 |     100 |     100 |                   
  AuthDialog.tsx   |   74.65 |       90 |      50 |   74.65 | ...15-116,138-144 
  ...nProgress.tsx |   16.66 |      100 |       0 |   16.66 | 19-63             
  ...Indicator.tsx |   13.15 |      100 |       0 |   13.15 | 17-52             
  ...ryDisplay.tsx |   89.47 |    33.33 |     100 |   89.47 | 20-21             
  ...ryDisplay.tsx |   92.13 |    94.44 |     100 |   92.13 | 82-87,92          
  ...geDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...gProfiler.tsx |      24 |      100 |       0 |      24 | 13-36             
  ...esDisplay.tsx |   10.52 |      100 |       0 |   10.52 | 24-82             
  ...ngsDialog.tsx |    6.99 |      100 |       0 |    6.99 | 30-181            
  ...ustDialog.tsx |     100 |      100 |     100 |     100 |                   
  Footer.tsx       |   84.82 |    82.35 |     100 |   84.82 | ...,89-91,136-143 
  ...ngSpinner.tsx |   76.19 |       60 |     100 |   76.19 | 34,39-44          
  Header.tsx       |   87.23 |    57.14 |     100 |   87.23 | 36-39,55,64       
  Help.tsx         |    3.38 |      100 |       0 |    3.38 | 17-167            
  ...emDisplay.tsx |   82.05 |    55.55 |     100 |   82.05 | ...8,61-66,87,100 
  InputPrompt.tsx  |   77.82 |    74.85 |     100 |   77.82 | ...78-780,788-799 
  ...Indicator.tsx |     100 |      100 |     100 |     100 |                   
  ...geDisplay.tsx |   25.92 |      100 |       0 |   25.92 | 15-37             
  ...ionDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...tchDialog.tsx |     100 |      100 |     100 |     100 |                   
  ...KeyPrompt.tsx |   62.33 |    31.25 |     100 |   62.33 | ...59-112,116-124 
  ...ryDisplay.tsx |      20 |      100 |       0 |      20 | 20-41             
  PrepareLabel.tsx |      60 |       80 |     100 |      60 | 35-48             
  ...ionDialog.tsx |   20.75 |      100 |       0 |   20.75 | 28-74             
  ...hProgress.tsx |     100 |      100 |     100 |     100 |                   
  ...ryDisplay.tsx |     100 |      100 |     100 |     100 |                   
  ...ngsDialog.tsx |   58.49 |    70.19 |      75 |   58.49 | ...03-704,738,749 
  ...ionDialog.tsx |    85.5 |      100 |   33.33 |    85.5 | 35-38,43-50       
  ...Indicator.tsx |   44.44 |      100 |       0 |   44.44 | 12-17             
  ...MoreLines.tsx |      60 |       25 |     100 |      60 | 24-27,33-40       
  StatsDisplay.tsx |    98.5 |    93.33 |     100 |    98.5 | 180-182           
  ...nsDisplay.tsx |   84.61 |    68.42 |     100 |   84.61 | ...08-112,122-124 
  ThemeDialog.tsx  |    5.33 |      100 |       0 |    5.33 | 36-312            
  Tips.tsx         |   19.23 |      100 |       0 |   19.23 | 17-45             
  TodoDisplay.tsx  |     100 |      100 |     100 |     100 |                   
  ...tsDisplay.tsx |     100 |     87.5 |     100 |     100 | 30-31             
  ...ification.tsx |   36.36 |      100 |       0 |   36.36 | 15-22             
  ...ackDialog.tsx |    7.95 |      100 |       0 |    7.95 | 23-123            
  ...ionDialog.tsx |    8.75 |      100 |       0 |    8.75 | 20-108            
 ...nents/messages |   80.01 |    85.12 |   64.28 |   80.01 |                   
  ...onMessage.tsx |   20.68 |      100 |       0 |   20.68 | 23-51             
  DiffRenderer.tsx |   93.44 |    82.79 |     100 |   93.44 | ...29-230,234,296 
  ErrorMessage.tsx |     100 |      100 |     100 |     100 |                   
  ...niMessage.tsx |   18.75 |      100 |       0 |   18.75 | 21-49             
  ...geContent.tsx |   19.04 |      100 |       0 |   19.04 | 25-43             
  InfoMessage.tsx  |    90.9 |       50 |     100 |    90.9 | 19-20             
  ...ryMessage.tsx |   12.82 |      100 |       0 |   12.82 | 22-59             
  ...onMessage.tsx |   76.49 |    78.26 |      40 |   76.49 | ...49-164,178-181 
  ...upMessage.tsx |     100 |      100 |     100 |     100 |                   
  ToolMessage.tsx  |   88.28 |       86 |      80 |   88.28 | ...60-264,357-359 
  UserMessage.tsx  |     100 |      100 |     100 |     100 |                   
  ...llMessage.tsx |   36.36 |      100 |       0 |   36.36 | 17-25             
 ...ponents/shared |   77.16 |    76.34 |   93.18 |   77.16 |                   
  MaxSizedBox.tsx  |   81.62 |     82.5 |   88.88 |   81.62 | ...08-509,614-615 
  ...tonSelect.tsx |   86.45 |    67.44 |     100 |   86.45 | ...52,155-156,230 
  TextInput.tsx    |    7.94 |      100 |       0 |    7.94 | 32-194            
  text-buffer.ts   |   77.86 |    78.03 |   96.66 |   77.86 | ...1800,1827,1877 
  ...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.77 |      100 |       0 |    8.77 |                   
  ...ionWizard.tsx |    6.87 |      100 |       0 |    6.87 | 34-319            
  ...rSelector.tsx |      15 |      100 |       0 |      15 | 26-84             
  ...onSummary.tsx |    3.03 |      100 |       0 |    3.03 | 22-306            
  ...tionInput.tsx |    9.09 |      100 |       0 |    9.09 | 23-173            
  ...dSelector.tsx |   35.89 |      100 |       0 |   35.89 | 31-57             
  ...nSelector.tsx |   41.17 |      100 |       0 |   41.17 | 31-52             
  ...EntryStep.tsx |   12.76 |      100 |       0 |   12.76 | 34-78             
  ToolSelector.tsx |    3.74 |      100 |       0 |    3.74 | 30-249            
 ...bagents/manage |    9.16 |      100 |       0 |    9.16 |                   
  ...ctionStep.tsx |   13.72 |      100 |       0 |   13.72 | 20-74             
  ...eleteStep.tsx |   15.78 |      100 |       0 |   15.78 | 19-57             
  ...tEditStep.tsx |   28.75 |      100 |       0 |   28.75 | 44-111            
  ...ctionStep.tsx |    3.23 |      100 |       0 |    3.23 | 27-329            
  ...iewerStep.tsx |   13.33 |      100 |       0 |   13.33 | 17-65             
  ...gerDialog.tsx |    6.17 |      100 |       0 |    6.17 | 32-332            
 ...agents/runtime |    8.08 |      100 |       0 |    8.08 |                   
  ...onDisplay.tsx |    8.08 |      100 |       0 |    8.08 | ...73-503,512-550 
 src/ui/contexts   |   83.44 |    83.45 |     100 |   83.44 |                   
  ...ssContext.tsx |   81.79 |    85.32 |     100 |   81.79 | ...76-478,481-483 
  ...owContext.tsx |   91.07 |    81.81 |     100 |   91.07 | 47-48,60-62       
  ...onContext.tsx |    94.2 |      100 |     100 |    94.2 | 103-106           
  ...gsContext.tsx |   83.33 |       50 |     100 |   83.33 | 17-18             
  ...ngContext.tsx |   71.42 |       50 |     100 |   71.42 | 17-20             
  ...deContext.tsx |   76.08 |       50 |     100 |   76.08 | 47-48,52-59,77-78 
 src/ui/editors    |   93.18 |    85.71 |   66.66 |   93.18 |                   
  ...ngsManager.ts |   93.18 |    85.71 |   66.66 |   93.18 | 48,62-63          
 src/ui/hooks      |   78.78 |    80.98 |   85.86 |   78.78 |                   
  ...dProcessor.ts |   78.76 |    80.19 |     100 |   78.76 | ...47-450,461-479 
  ...dProcessor.ts |   96.34 |    76.31 |     100 |   96.34 | ...12-213,218-219 
  ...dProcessor.ts |   72.35 |    69.79 |    62.5 |   72.35 | ...38-507,563-591 
  ...agerDialog.ts |   88.23 |      100 |     100 |   88.23 | 20,24             
  ...Completion.ts |   92.77 |    89.47 |     100 |   92.77 | ...85-186,219-222 
  ...uthCommand.ts |    8.82 |      100 |       0 |    8.82 | 17-91             
  ...tIndicator.ts |     100 |    88.88 |     100 |     100 | 43                
  ...ketedPaste.ts |     100 |      100 |     100 |     100 |                   
  ...ompletion.tsx |    95.3 |    80.48 |     100 |    95.3 | ...24-225,227-228 
  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 |    42.1 |    22.22 |     100 |    42.1 | ...,94-96,100-102 
  ...orSettings.ts |     100 |      100 |     100 |     100 |                   
  useFocus.ts      |     100 |      100 |     100 |     100 |                   
  ...olderTrust.ts |     100 |    85.71 |     100 |     100 | 25-27             
  ...miniStream.ts |   72.96 |    72.95 |     100 |   72.96 | ...7-938,971-1073 
  ...BranchName.ts |   91.66 |    84.61 |     100 |   91.66 | 57-63             
  ...oryManager.ts |   98.41 |    93.33 |     100 |   98.41 | 43                
  ...putHistory.ts |    92.5 |    85.71 |     100 |    92.5 | 62-63,71,93-95    
  useKeypress.ts   |     100 |      100 |     100 |     100 |                   
  ...rdProtocol.ts |     100 |      100 |     100 |     100 |                   
  ...unchEditor.ts |   11.53 |      100 |       0 |   11.53 | 16-30,37-82       
  ...gIndicator.ts |     100 |      100 |     100 |     100 |                   
  useLogger.ts     |      25 |      100 |       0 |      25 | 15-33             
  ...ssageQueue.ts |     100 |      100 |     100 |     100 |                   
  ...raseCycler.ts |   95.45 |       75 |     100 |   95.45 | ...64-165,183-185 
  ...cySettings.ts |   85.08 |       75 |     100 |   85.08 | ...15-116,127-138 
  ...Completion.ts |   40.64 |    58.33 |     100 |   40.64 | ...23-224,226-227 
  ...nfirmation.ts |   55.55 |      100 |     100 |   55.55 | 14,18-31          
  useQwenAuth.ts   |     100 |      100 |     100 |     100 |                   
  ...lScheduler.ts |   78.82 |    94.44 |     100 |   78.82 | ...00-203,289-299 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-7               
  ...ompletion.tsx |     100 |     92.3 |     100 |     100 | 77                
  ...ngsCommand.ts |    87.5 |      100 |     100 |    87.5 | 13,17             
  ...ellHistory.ts |   91.66 |       80 |     100 |   91.66 | ...69,117-118,128 
  ...oryCommand.ts |       0 |        0 |       0 |       0 | 1-76              
  ...Completion.ts |      94 |    92.53 |     100 |      94 | 58-61,69-72,93    
  ...tateAndRef.ts |   13.63 |      100 |       0 |   13.63 | 16-36             
  ...eateDialog.ts |   88.23 |      100 |     100 |   88.23 | 14,18             
  ...rminalSize.ts |   18.18 |      100 |       0 |   18.18 | 12-32             
  ...emeCommand.ts |   46.98 |       75 |     100 |   46.98 | ...4,70-71,77-100 
  useTimer.ts      |   88.09 |    85.71 |     100 |   88.09 | 44-45,51-53       
  ...AutoSwitch.ts |   91.84 |    88.57 |     100 |   91.84 | ...07,173,233-241 
  ...elcomeBack.ts |   69.44 |    44.44 |     100 |   69.44 | ...85,89-90,96-98 
  ...eMigration.ts |    53.7 |       50 |   33.33 |    53.7 | ...35,42-57,60-61 
  vim.ts           |   83.57 |    79.67 |     100 |   83.57 | ...38,742-750,759 
 src/ui/models     |   62.96 |      100 |      50 |   62.96 |                   
  ...ableModels.ts |   62.96 |      100 |      50 |   62.96 | 25-31,38-40       
 src/ui/privacy    |   14.52 |      100 |       0 |   14.52 |                   
  ...acyNotice.tsx |   10.38 |      100 |       0 |   10.38 | 21-117            
  ...acyNotice.tsx |   14.28 |      100 |       0 |   14.28 | 16-59             
  ...acyNotice.tsx |   12.19 |      100 |       0 |   12.19 | 16-62             
  ...acyNotice.tsx |   30.76 |      100 |       0 |   30.76 | 19-36,39-41       
 src/ui/themes     |   99.01 |    67.71 |     100 |   99.01 |                   
  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.23 |    77.77 |     100 |   87.23 | ...00-306,311-312 
  theme.ts         |     100 |    42.55 |     100 |     100 | 255-270           
  xcode.ts         |     100 |      100 |     100 |     100 |                   
 src/ui/utils      |   65.97 |    79.93 |   82.25 |   65.97 |                   
  ...Colorizer.tsx |   79.31 |    84.37 |     100 |   79.31 | ...51-154,190-216 
  ...olePatcher.ts |      96 |       75 |     100 |      96 | 59-60             
  ...nRenderer.tsx |   52.85 |    27.27 |     100 |   52.85 | ...26-132,142-144 
  ...wnDisplay.tsx |   85.84 |    87.69 |     100 |   85.84 | ...72-280,313-336 
  ...eRenderer.tsx |   78.09 |    76.19 |     100 |   78.09 | 55-83             
  ...boardUtils.ts |   32.25 |     37.5 |     100 |   32.25 | ...55-114,129-145 
  commandUtils.ts  |   92.79 |    88.63 |     100 |   92.79 | ...12,116,118-119 
  computeStats.ts  |     100 |      100 |     100 |     100 |                   
  displayUtils.ts  |     100 |      100 |     100 |     100 |                   
  formatters.ts    |   90.47 |    95.83 |     100 |   90.47 | 57-60             
  isNarrowWidth.ts |     100 |      100 |     100 |     100 |                   
  ...olDetector.ts |   13.88 |      100 |      50 |   13.88 | 16-97             
  ...nUtilities.ts |   69.84 |    85.71 |     100 |   69.84 | 75-91,100-101     
  ...mConstants.ts |     100 |      100 |     100 |     100 |                   
  terminalSetup.ts |       4 |      100 |       0 |       4 | 40-342            
  textUtils.ts     |   94.11 |    82.35 |     100 |   94.11 | 17-18             
  updateCheck.ts   |     100 |    80.95 |     100 |     100 | 27-39             
 src/utils         |   46.87 |    90.82 |   83.87 |   46.87 |                   
  checks.ts        |   33.33 |      100 |       0 |   33.33 | 23-28             
  cleanup.ts       |   65.38 |      100 |   66.66 |   65.38 | 28-37             
  ...ScopeUtils.ts |   79.06 |    66.66 |     100 |   79.06 | 55-64             
  errors.ts        |   28.57 |      100 |       0 |   28.57 | 8-12              
  events.ts        |     100 |      100 |     100 |     100 |                   
  gitUtils.ts      |   94.66 |    82.35 |     100 |   94.66 | 75-78             
  ...AutoUpdate.ts |    81.6 |    95.83 |   66.66 |    81.6 | 89-103,129-136    
  ...lationInfo.ts |     100 |      100 |     100 |     100 |                   
  package.ts       |   88.88 |       80 |     100 |   88.88 | 33-34             
  readStdin.ts     |   79.24 |       90 |      80 |   79.24 | 31-38,50-52       
  resolvePath.ts   |   66.66 |       25 |     100 |   66.66 | 12-13,16,18-19    
  sandbox.ts       |       0 |        0 |       0 |       0 | 1-962             
  settingsUtils.ts |   86.94 |    92.13 |   96.66 |   86.94 | ...78-405,444-445 
  spawnWrapper.ts  |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |   23.07 |      100 |       0 |   23.07 | 14-40             
  ...entEmitter.ts |     100 |      100 |     100 |     100 |                   
  ...upWarnings.ts |     100 |      100 |     100 |     100 |                   
  version.ts       |     100 |       50 |     100 |     100 | 11                
 ...ed-integration |   24.27 |        0 |       0 |   24.27 |                   
  acp.ts           |    3.29 |        0 |       0 |    3.29 | ...53-289,292-339 
  ...temService.ts |   19.35 |      100 |       0 |   19.35 | 15-19,22-34,37-46 
  schema.ts        |     100 |      100 |     100 |     100 |                   
  ...ntegration.ts |    2.97 |        0 |       0 |    2.97 | ...30-907,922-981 
-------------------|---------|----------|---------|---------|-------------------
Core Package - Full Text Report
-------------------|---------|----------|---------|---------|-------------------
File               | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
-------------------|---------|----------|---------|---------|-------------------
All files          |   76.24 |    83.76 |   78.87 |   76.24 |                   
 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/code_assist   |   75.15 |    78.78 |      80 |   75.15 |                   
  codeAssist.ts    |   18.51 |      100 |       0 |   18.51 | 15-37             
  converter.ts     |   94.93 |    93.02 |     100 |   94.93 | ...83,197,214-215 
  oauth2.ts        |   78.19 |    66.66 |   91.66 |   78.19 | ...39-445,450-451 
  server.ts        |   50.29 |       80 |   53.84 |   50.29 | ...75-216,219-222 
  setup.ts         |   86.66 |    78.94 |     100 |   86.66 | ...,92-94,118-124 
  types.ts         |     100 |      100 |     100 |     100 |                   
 src/config        |   77.48 |    89.05 |   50.78 |   77.48 |                   
  config.ts        |   76.22 |    87.28 |   45.71 |   76.22 | ...1046,1062-1063 
  models.ts        |     100 |      100 |     100 |     100 |                   
  storage.ts       |   85.88 |      100 |   73.91 |   85.88 | ...08-109,112-113 
 src/core          |   78.82 |    83.85 |   75.37 |   78.82 |                   
  client.ts        |   80.53 |    81.11 |   75.86 |   80.53 | ...1078,1085-1134 
  ...tGenerator.ts |   70.62 |    72.41 |     100 |   70.62 | ...51,185,206-245 
  ...lScheduler.ts |   84.41 |    84.41 |      92 |   84.41 | ...,967,1047-1051 
  geminiChat.ts    |   73.45 |     87.5 |   58.62 |   73.45 | ...22-823,826-827 
  geminiRequest.ts |     100 |      100 |     100 |     100 |                   
  logger.ts        |   83.42 |    84.07 |     100 |   83.42 | ...63-367,407-418 
  ...tGenerator.ts |    16.1 |      100 |      20 |    16.1 | ...52-184,187-188 
  ...olExecutor.ts |     100 |      100 |      50 |     100 |                   
  prompts.ts       |   86.95 |    83.75 |   77.77 |   86.95 | ...98-811,829-830 
  tokenLimits.ts   |     100 |    85.71 |     100 |     100 | 41-42             
  turn.ts          |   87.01 |     87.8 |     100 |   87.01 | ...07-308,321-322 
 ...ntentGenerator |   56.64 |    78.92 |   81.81 |   56.64 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  converter.ts     |   21.41 |    25.49 |   54.54 |   21.41 | ...8-971,990-1027 
  errorHandler.ts  |     100 |      100 |     100 |     100 |                   
  index.ts         |       0 |        0 |       0 |       0 | 1-83              
  ...tGenerator.ts |   49.58 |     87.5 |    87.5 |   49.58 | 86-98,102-155     
  pipeline.ts      |   97.12 |    91.52 |     100 |   97.12 | ...21-222,394-398 
  ...CallParser.ts |   90.14 |    86.66 |     100 |   90.14 | ...15-319,349-350 
  ...tryService.ts |   98.75 |    95.23 |     100 |   98.75 | 153-154           
 ...rator/provider |     100 |    96.77 |     100 |     100 |                   
  dashscope.ts     |     100 |    96.07 |     100 |     100 | 107,116           
  default.ts       |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  openrouter.ts    |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 |                   
 src/generated     |     100 |      100 |     100 |     100 |                   
  git-commit.ts    |     100 |      100 |     100 |     100 |                   
 src/ide           |   75.99 |    84.31 |   79.16 |   75.99 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  detect-ide.ts    |   96.96 |    97.29 |     100 |   96.96 | 63-65             
  ide-client.ts    |   62.04 |    76.36 |   64.28 |   62.04 | ...00-508,533-541 
  ide-installer.ts |   91.45 |       84 |     100 |   91.45 | ...95,130-134,147 
  ideContext.ts    |   83.65 |      100 |     100 |   83.65 | 74-90             
  process-utils.ts |   88.03 |    78.57 |     100 |   88.03 | ...18,149,159-160 
 src/mcp           |   76.51 |    68.55 |   81.57 |   76.51 |                   
  ...h-provider.ts |   86.36 |      100 |   33.33 |   86.36 | ...85,89,93,97-98 
  ...h-provider.ts |   74.19 |    51.64 |     100 |   74.19 | ...05-809,816-818 
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  oauth-utils.ts   |   67.78 |    78.57 |    90.9 |   67.78 | ...61-282,307-330 
 .../token-storage |   96.87 |    93.33 |   83.33 |   96.87 |                   
  ...en-storage.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |       0 |        0 |       0 |       0 | 1                 
 src/mocks         |     100 |      100 |     100 |     100 |                   
  msw.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          |   86.68 |     80.2 |   97.01 |   86.68 |                   
  ...tGenerator.ts |   98.63 |    98.18 |     100 |   98.63 | 106-107           
  qwenOAuth2.ts    |   85.85 |    76.06 |    92.3 |   85.85 | ...67,797-808,847 
  ...kenManager.ts |   84.24 |    76.03 |     100 |   84.24 | ...52-757,778-783 
 src/services      |   88.15 |    85.29 |   91.66 |   88.15 |                   
  ...ingService.ts |   77.01 |     61.9 |     100 |   77.01 | ...06-408,435-437 
  ...eryService.ts |   93.33 |    88.46 |   85.71 |   93.33 | 32,40,85,110-111  
  ...temService.ts |     100 |      100 |     100 |     100 |                   
  gitService.ts    |      70 |    93.33 |      60 |      70 | ...14-124,127-131 
  ...ionService.ts |   97.53 |     92.1 |     100 |   97.53 | ...44-345,351-352 
  ...ionService.ts |   92.21 |    88.15 |     100 |   92.21 | ...69-370,446-460 
 src/subagents     |   86.01 |    80.36 |      84 |   86.01 |                   
  ...tin-agents.ts |     100 |      100 |     100 |     100 |                   
  index.ts         |     100 |      100 |     100 |     100 |                   
  ...ent-events.ts |   83.33 |      100 |      50 |   83.33 | 124-125,128-129   
  ...gent-hooks.ts |       0 |        0 |       0 |       0 | 1                 
  ...nt-manager.ts |    85.4 |    81.25 |   95.23 |    85.4 | ...10-711,780-781 
  ...statistics.ts |   97.97 |    82.92 |     100 |   97.97 | 111,131,168,201   
  subagent.ts      |   78.91 |    63.55 |      68 |   78.91 | ...73-874,880-881 
  types.ts         |     100 |      100 |     100 |     100 |                   
  validation.ts    |    92.4 |    96.59 |     100 |    92.4 | 54-59,63-68,72-77 
 src/telemetry     |   65.44 |    85.41 |   71.13 |   65.44 |                   
  constants.ts     |     100 |      100 |     100 |     100 |                   
  ...-exporters.ts |   26.47 |      100 |       0 |   26.47 | ...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       |   53.15 |    75.86 |   52.38 |   53.15 | ...46-565,574-593 
  metrics.ts       |   62.09 |    93.54 |   46.15 |   62.09 | ...85-287,293-311 
  sdk.ts           |   78.08 |    47.05 |     100 |   78.08 | ...82,186-187,189 
  ...etry-utils.ts |     100 |      100 |     100 |     100 |                   
  ...l-decision.ts |     100 |      100 |     100 |     100 |                   
  types.ts         |   89.81 |    90.54 |    92.1 |   89.81 | ...69-378,398-409 
  uiTelemetry.ts   |    99.3 |    95.83 |     100 |    99.3 | 130               
 ...learcut-logger |   41.02 |       66 |   41.17 |   41.02 |                   
  ...cut-logger.ts |   34.35 |     65.3 |   41.17 |   34.35 | ...52-953,956-959 
  ...tadata-key.ts |     100 |      100 |     100 |     100 |                   
 ...ry/qwen-logger |   68.17 |    83.07 |      70 |   68.17 |                   
  event-types.ts   |       0 |        0 |       0 |       0 |                   
  qwen-logger.ts   |   68.17 |    82.81 |   69.23 |   68.17 | ...15-720,762-763 
 src/test-utils    |   96.87 |       96 |   81.81 |   96.87 |                   
  config.ts        |     100 |      100 |     100 |     100 |                   
  ...aceContext.ts |     100 |      100 |     100 |     100 |                   
  tools.ts         |   95.86 |    95.23 |      80 |   95.86 | 60-61,129,133-134 
 src/tools         |   74.37 |    83.36 |   83.33 |   74.37 |                   
  diffOptions.ts   |     100 |      100 |     100 |     100 |                   
  edit.ts          |   82.64 |    87.35 |   85.71 |   82.64 | ...53-454,544-587 
  exitPlanMode.ts  |   93.66 |    86.95 |     100 |   93.66 | 88-90,102-107     
  glob.ts          |   91.63 |    82.69 |    87.5 |   91.63 | ...27-228,319-320 
  grep.ts          |   62.07 |       84 |      80 |   62.07 | ...57-661,671-672 
  ls.ts            |   97.37 |    91.66 |     100 |   97.37 | 140-145           
  ...nt-manager.ts |   79.74 |    83.33 |      80 |   79.74 | ...98-105,113-114 
  mcp-client.ts    |   31.05 |    78.26 |      50 |   31.05 | ...1356,1360-1363 
  mcp-tool.ts      |    94.9 |    92.85 |   94.11 |    94.9 | 199-209,271-272   
  memoryTool.ts    |   75.87 |    84.37 |   90.47 |   75.87 | ...41-352,490-574 
  ...iable-tool.ts |     100 |    84.61 |     100 |     100 | 99,106            
  read-file.ts     |   98.67 |    96.96 |    87.5 |   98.67 | 64-65             
  ...many-files.ts |   80.17 |    78.37 |   85.71 |   80.17 | ...90-491,498-499 
  ripGrep.ts       |   89.72 |    86.17 |   92.85 |   89.72 | ...42-443,464-465 
  shell.ts         |   88.34 |    78.88 |     100 |   88.34 | ...73-474,485-486 
  task.ts          |   65.94 |    86.27 |     100 |   65.94 | ...99-500,521-528 
  todoWrite.ts     |   78.21 |    79.48 |   71.42 |   78.21 | ...70-395,416-417 
  tool-error.ts    |     100 |      100 |     100 |     100 |                   
  tool-names.ts    |     100 |      100 |     100 |     100 |                   
  tool-registry.ts |   70.88 |    66.66 |   74.07 |   70.88 | ...06-408,431-439 
  tools.ts         |   89.32 |    89.58 |    87.5 |   89.32 | ...69-370,386-392 
  web-fetch.ts     |   84.97 |    63.63 |      90 |   84.97 | ...30-231,233-234 
  web-search.ts    |   79.43 |    82.14 |    87.5 |   79.43 | ...,92-98,117-121 
  write-file.ts    |   82.86 |    79.68 |      75 |   82.86 | ...64-467,479-515 
 src/utils         |   84.11 |    87.79 |   87.05 |   84.11 |                   
  LruCache.ts      |   70.96 |     62.5 |     100 |   70.96 | 20-22,28,30-34    
  bfsFileSearch.ts |   89.02 |    90.47 |     100 |   89.02 | 86-94             
  browser.ts       |    7.69 |      100 |       0 |    7.69 | 17-56             
  editCorrector.ts |   77.13 |    61.11 |   91.66 |   77.13 | ...62-674,708,722 
  editor.ts        |   97.63 |    94.54 |     100 |   97.63 | 154,224,227-228   
  ...entContext.ts |     100 |      100 |     100 |     100 |                   
  errorParsing.ts  |     100 |     92.3 |     100 |     100 | 76,80,86          
  ...rReporting.ts |   83.72 |    84.61 |     100 |   83.72 | 82-86,107-115     
  errors.ts        |   45.94 |       60 |      30 |   45.94 | ...0,76-92,96-102 
  fetch.ts         |   34.04 |      100 |       0 |   34.04 | 22-27,31-57       
  fileUtils.ts     |   94.65 |       90 |     100 |   94.65 | ...08-113,322-328 
  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 |     100 |    89.47 |     100 |     100 | 27,47             
  gitUtils.ts      |   51.21 |     90.9 |      50 |   51.21 | 40-41,50-73       
  ...rePatterns.ts |     100 |      100 |     100 |     100 |                   
  ...ionManager.ts |     100 |    91.66 |     100 |     100 | 23                
  ...-detection.ts |     100 |      100 |     100 |     100 |                   
  ...yDiscovery.ts |    82.4 |    72.41 |   77.77 |    82.4 | ...97-398,401-402 
  ...tProcessor.ts |   91.51 |    88.46 |   84.61 |   91.51 | ...02-308,385-386 
  ...Inspectors.ts |     100 |      100 |     100 |     100 |                   
  ...kerChecker.ts |   83.33 |    83.33 |     100 |   83.33 | 64-65,75-80,88-94 
  openaiLogger.ts  |    19.1 |      100 |   33.33 |    19.1 | ...96-116,124-131 
  partUtils.ts     |     100 |      100 |     100 |     100 |                   
  pathReader.ts    |     100 |      100 |     100 |     100 |                   
  paths.ts         |   88.11 |    91.17 |     100 |   88.11 | ...,89-90,101-102 
  ...ectSummary.ts |    3.75 |      100 |       0 |    3.75 | 27-119            
  ...rDetection.ts |   76.85 |    84.31 |     100 |   76.85 | ...25-126,166-167 
  retry.ts         |   63.98 |    76.19 |     100 |   63.98 | ...74-294,339-354 
  safeJsonParse.ts |      72 |    83.33 |     100 |      72 | 37-43             
  ...nStringify.ts |     100 |      100 |     100 |     100 |                   
  ...aValidator.ts |   89.18 |    53.33 |     100 |   89.18 | 27-28,30-31       
  ...r-launcher.ts |   76.52 |     87.5 |   66.66 |   76.52 | ...33,135,153-191 
  session.ts       |     100 |      100 |     100 |     100 |                   
  shell-utils.ts   |   98.63 |    97.56 |     100 |   98.63 | 177-178,195-196   
  ...nlyChecker.ts |   81.63 |       80 |      80 |   81.63 | ...58-259,263-264 
  ...tGenerator.ts |     100 |      100 |     100 |     100 |                   
  summarizer.ts    |     100 |    88.88 |     100 |     100 | 91                
  ...emEncoding.ts |      98 |    94.11 |     100 |      98 | 106-107           
  testUtils.ts     |   84.44 |    72.72 |   83.33 |   84.44 | 27-28,34-35,70-72 
  textUtils.ts     |    12.5 |      100 |       0 |    12.5 | 15-34             
  tool-utils.ts    |   91.48 |    89.47 |     100 |   91.48 | 53-54,57-58       
  ...untManager.ts |   97.14 |    94.73 |     100 |   97.14 | 36-38             
  ...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 |   59.81 |    76.37 |   75.67 |   59.81 |                   
  ...eTokenizer.ts |   41.47 |    76.47 |   69.23 |   41.47 | ...67-440,450-504 
  index.ts         |   66.66 |      100 |      50 |   66.66 | 35-40             
  ...tTokenizer.ts |   71.18 |    70.96 |   91.66 |   71.18 | ...26-327,338-339 
  ...ageFormats.ts |      76 |      100 |   33.33 |      76 | 45-48,55-56       
  textTokenizer.ts |     100 |    88.88 |     100 |     100 | 71,76,81          
  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 Mingholy mentioned this pull request Sep 20, 2025
@liuzhenjluccst

liuzhenjluccst commented Sep 20, 2025

Copy link
Copy Markdown

感谢此pr,学习了您的代码之后,貌似要从拉起qwen时指定为plan mode:
qwen --approval-mode plan
麻烦同时支持拉起qwen之后,用shift+tab切换进入plan mode,多谢!

@tanzhenxin

Copy link
Copy Markdown
Collaborator Author

感谢此pr,学习了您的代码之后,貌似要从拉起qwen时指定为plan mode: qwen --approval-mode plan 麻烦同时支持拉起qwen之后,用shift+tab切换进入plan mode,多谢!

可以在 .qwen/settings.json 中配置 "approvalMode",也可以通过命令行参数设置 --approval-mode,指定 qwen 启动后的默认 approval mode.
启动后可以通过 Shift+Tab 快速切换不同的 approval modes,包括有:plan, default, auto-edit, yolo. 根据使用场景灵活选择

@tanzhenxin

Copy link
Copy Markdown
Collaborator Author

Linked #672

@liuzhenjluccst

Copy link
Copy Markdown

感谢此pr,学习了您的代码之后,貌似要从拉起qwen时指定为plan mode: qwen --approval-mode plan 麻烦同时支持拉起qwen之后,用shift+tab切换进入plan mode,多谢!

可以在 .qwen/settings.json 中配置 "approvalMode",也可以通过命令行参数设置 --approval-mode,指定 qwen 启动后的默认 approval mode. 启动后可以通过 Shift+Tab 快速切换不同的 approval modes,包括有:plan, default, auto-edit, yolo. 根据使用场景灵活选择

谢谢指导!

@Mingholy Mingholy 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

@tanzhenxin tanzhenxin merged commit 4e7a7e2 into main Sep 24, 2025
17 checks passed
@liuzhenjluccst

Copy link
Copy Markdown

多谢,安装最新14版本后,shift+tab能看到plan mode了!

@tanzhenxin tanzhenxin deleted the feat/plan-mode branch October 29, 2025 07:16
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
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.

3 participants