# 🚀 CodeBuddy Code v2.95.0 Release

## ✨ New Features

### Agent Team Capability Alignment

Team collaboration capabilities have been significantly enhanced, making multi-agent collaboration more stable and controllable:

- **Teammate Idle Awareness**: The team lead can now precisely query the real-time status of each teammate, wait for a specific teammate to become idle (with timeout and abort signal support), or register a "callback once idle" hook. UI display, task scheduling, graceful shutdown, and other scenarios no longer need to subscribe to a complex stream — a single API call reveals teammate status
- **Plan Approval UX Alignment**: When a teammate ends a plan in Plan mode, the approval dialog automatically appears in the lead's terminal, with the teammate's color badge, offering three options: "Approve / Continue Planning / Exit Plan Mode" (clearly distinguished from the regular tool-approval semantics of "Approve / Always Approve / Reject")
- **Graceful Shutdown Handshake + Timeout Fallback**: On `TeamDelete` / manual teammate shutdown, the lead sends a shutdown request and waits for the teammate's response; if the teammate does not respond within the default 15 seconds, the process is automatically force-terminated, preventing stuck teammates from hanging the cleanup flow indefinitely
- **Teammate Progress Snapshots**: Real-time tracking of how many tool-call rounds each teammate has run, the cumulative text generated, and the most recent 10 tool activity summaries — laying the groundwork for "what is the teammate doing" displays in TUI/Web UI

### New Environment Variables

- `CODEBUDDY_TEAM_IDLE_DETECTION_DISABLED`: Disable teammate idle awareness
- `CODEBUDDY_TEAM_SHUTDOWN_GRACEFUL_TIMEOUT_MS`: Shutdown fallback timeout in milliseconds (default 15000, set to 0 to disable)
- `CODEBUDDY_BASH_ASSISTANT_BUDGET_MS`: Main conversation response budget (shared by Bash/PowerShell)
- `CODEBUDDY_BASH_AUTO_BACKGROUND_DISABLED`: Disable auto-backgrounding on timeout

## 🔧 Improvements

### Bash Tool

- **Auto-Backgrounding on Timeout**: When a foreground command hits `timeout`, the child process is no longer killed directly — it is automatically converted into a background task that keeps running, returning a `task_id` you can use with TaskOutput (compatible with the legacy name BashOutput) to fetch subsequent progress/results. Long cold-start commands like `yarn install` / `docker build` / `cargo build` / `make` that far exceed the default timeout are no longer wrongly killed by the tool layer
- **Updated Long-Command Guidance**: The description template guides you to explicitly pass `run_in_background: true` for long commands and explains the new semantics where timeout is no longer "kill" but "auto-background"

### PowerShell Tool

- **Auto-Backgrounding on Timeout**: Aligned with the Bash tool — large file downloads via `Invoke-WebRequest`, long `Copy-Item -Recurse`, builds invoked through PowerShell, and other cold-start timeouts are no longer wrongly killed by the tool layer
- **Background Task Status Query**: Background commands explicitly passed with `run_in_background: true` now fully support TaskOutput querying — you can pull stdout/stderr/status the same way as Bash
- **Ctrl+B to Background**: Upgraded from a "not implemented" placeholder to a real feature
- **Main Conversation Response Budget**: Shares `CODEBUDDY_BASH_ASSISTANT_BUDGET_MS` with Bash; commands exceeding the budget are automatically backgrounded to keep the conversation responsive

### Session Interruption Semantics

- Both Bash and PowerShell tools now distinguish between "user-initiated cancellation" and "internal flow switch" interruption signals. On internal flow switches, the running command is no longer killed — instead the tool tries to convert it to a background task to keep running, avoiding wrongly killing long commands due to concurrent calls or turn switching

## 🐛 Bug Fixes

- **PowerShell Background Task Status Update**: After backgrounding, task status now updates to `completed`/`failed` based on the actual exit code (previously it stayed at `running` forever, so TaskOutput queries never saw the final status)
- **PowerShell Background Task Exception Backfill**: After backgrounding, if the command later terminates abnormally, it no longer bubbles up as a Node `unhandledRejection` warning — the error details are backfilled into the task's stderr output for TaskOutput querying and display
- **PowerShell Background Wording Accuracy**: The returned messages now accurately distinguish among the five sources: timeout / main conversation budget / Ctrl+B / explicit background / internal interruption, no longer reusing similar wording that caused semantic pollution
