Roo-Code/apps/cli/CHANGELOG.md
Hannes Rudolph bcb8c81916
Reapply Batch 2: 9 minor-conflict non-AI-SDK cherry-picks (#11474)
* fix: correct Bedrock model ID for Claude Opus 4.6 (#11232)

Remove the :0 suffix from the Claude Opus 4.6 model ID to match
the correct AWS Bedrock model identifier.

The model ID was "anthropic.claude-opus-4-6-v1:0" but should be
"anthropic.claude-opus-4-6-v1" per AWS Bedrock documentation.

Fixes #11231

Co-authored-by: Roo Code <roomote@roocode.com>

* fix: guard against empty-string baseURL in provider constructors (#11233)

When the 'custom base URL' checkbox is unchecked in the UI, the setting
is set to '' (empty string). Providers that passed this directly to their
SDK constructors caused 'Failed to parse URL' errors because the SDK
treated '' as a valid but broken base URL override.

- gemini.ts: use || undefined (was passing raw option)
- openai-native.ts: use || undefined (was passing raw option)
- openai.ts: change ?? to || for fallback default
- deepseek.ts: change ?? to || for fallback default
- moonshot.ts: change ?? to || for fallback default

Adds test coverage for Gemini and OpenAI Native constructors verifying
empty-string baseURL is coerced to undefined.

* fix: make defaultTemperature required in getModelParams to prevent silent temperature overrides (#11218)

* fix: DeepSeek temperature defaulting to 0 instead of 0.3

Pass defaultTemperature: DEEP_SEEK_DEFAULT_TEMPERATURE to getModelParams() in
DeepSeekHandler.getModel() to ensure the correct default temperature (0.3)
is used when no user configuration is provided.

Closes #11194

* refactor: make defaultTemperature required in getModelParams

Make the defaultTemperature parameter required in getModelParams() instead
of defaulting to 0. This prevents providers with their own non-zero default
temperature (like DeepSeek's 0.3) from being silently overridden by the
implicit 0 default.

Every provider now explicitly declares its temperature default, making the
temperature resolution chain clear:
  user setting → model default → provider default

---------

Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>

* feat: batch consecutive tool calls in chat UI with shared utility (#11245)

* feat: group consecutive list_files tool calls into single UI block

Consolidate consecutive listFilesTopLevel/listFilesRecursive ask messages
into a single 'Roo wants to view multiple directories' block, matching the
existing read_file batching pattern.

* chore: add missing translation keys for all locales

* refactor: consolidate duplicate listFiles batch-handling blocks in ChatRow

Merge the separate listFilesTopLevel and listFilesRecursive case blocks
into a single combined case with shared batch-detection logic, selecting
the icon and translation key based on the tool type. This removes the
duplicated isBatchDirRequest check and BatchListFilesPermission render.

* feat: batch consecutive file-edit tool calls into single UI block

Add edit-file batching in ChatView groupedMessages that consolidates
consecutive editedExistingFile, appliedDiff, newFileCreated,
insertContent, and searchAndReplace asks into a single BatchDiffApproval
block. Move batchDiffs detection in ChatRow above the switch statement
so it applies to any file-edit tool type.

* refactor: extract batchConsecutive utility, fix batch UI issues

- Extract generic batchConsecutive() utility from 3 identical while-loops
- Fix React key collisions in BatchListFilesPermission, BatchFilePermission, BatchDiffApproval
- Normalize language prop to "shellsession" (was "shell-session" for top-level)
- Remove unused _batchedMessages property from synthetic messages
- Remove dead didViewMultipleDirectories i18n key from all 18 locale files
- Add batch button text for listFilesTopLevel/listFilesRecursive
- Add batchConsecutive utility tests (6 cases)

* fix: audit improvements for batch tool-call UI

- Make batchConsecutive() generic instead of ClineMessage-specific
- Add batch-aware button text for edit-file batches ("Save All"/"Deny All")
- Add dedicated list-batch/edit-batch i18n keys (stop reusing read-batch)
- Add JSON.parse defense-in-depth in all three synthesizers
- Fix mixed list_files batch icon to default to FolderTree
- Add 6 missing test cases (all-match, immutability, spy, single-dir)

* chore: minor type cleanup (out-of-scope housekeeping)

- Trim unused recursive/isOutsideWorkspace from DirPermissionItem interface
- Remove 4 pre-existing `as any` casts in ChatView.tsx:
  - window cast → precise inline type
  - checkpoint bracket access → removed unnecessary casts
  - condensing message → `as ClineMessage`
  - debounce cancel → `.clear()` (correct API)
- Update BatchListFilesPermission test data to match trimmed interface

* i18n: add list-batch and edit-batch translations for all locales

* feat: add IPC query handlers for commands, modes, and models (#11279)

Add GetCommands, GetModes, and GetModels to the IPC protocol so external
clients can fetch slash commands, available modes, and Roo provider models
without going through the internal webview message channel.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add lock toggle to pin API config across all modes in workspace (#11295)

* feat: add lock toggle to pin API config across all modes in workspace

Add a lock/unlock toggle inside the API config selector popover (next to
the settings gear) that, when enabled, applies the selected API
configuration to all modes in the current workspace.

- Add lockApiConfigAcrossModes to ExtensionState and WebviewMessage types
- Store setting in workspaceState (per-workspace, not global)
- When locked, activateProviderProfile sets config for all modes
- Lock icon in ApiConfigSelector popover bottom bar next to gear
- Full i18n: English + 17 locale translations (all mention workspace scope)
- 9 new tests: 2 ClineProvider, 2 handler, 5 UI (77 total pass)

* refactor: replace write-fan-out with read-time override for lock API config

The original lock implementation used setModeConfig() fan-out to write the
locked config to ALL modes globally. Since the lock flag lives in workspace-
scoped workspaceState but modeApiConfigs are in global secrets, this caused
cross-workspace data destruction.

Replaced with read-time guards:
- handleModeSwitch: early return when lock is on (skip per-mode config load)
- createTaskWithHistoryItem: skip mode-based config restoration under lock
- activateProviderProfile: removed fan-out block
- lockApiConfigAcrossModes handler: simplified to flag + state post only
- Fixed pre-existing workspaceState mock gap in ClineProvider.spec.ts and
  ClineProvider.sticky-profile.spec.ts

* fix: validate Gemini thinkingLevel against model capabilities and handle empty streams (#11303)

* fix: validate Gemini thinkingLevel against model capabilities and handle empty streams

getGeminiReasoning() now validates the selected effort against the model's
supportsReasoningEffort array before sending it as thinkingLevel. When a
stale settings value (e.g. 'medium' from a different model) is not in the
supported set, it falls back to the model's default reasoningEffort.

GeminiHandler.createMessage() now tracks whether any text content was
yielded during streaming and handles NoOutputGeneratedError gracefully
instead of surfacing the cryptic 'No output generated' error.

* fix: guard thinkingLevel fallback against 'none' effort and add i18n TODO

The array validation fallback in getGeminiReasoning() now only triggers
when the selected effort IS a valid Gemini thinking level but not in
the model's supported set. Values like 'none' (explicit no-reasoning
signal) are no longer overridden by the model default.

Also adds a TODO for moving the empty-stream message to i18n.

* fix: track tool_call_start in hasContent to avoid false empty-stream warning

Tool-only responses (no text) are valid content. Without this,
agentic tool-call responses would incorrectly trigger the empty
response warning message.

* chore(cli): prepare release v0.0.53 (#11425)

* feat: add GLM-5 model support to Z.ai provider (#11440)

* chore: regenerate pnpm-lock.yaml

* fix: resolve type errors and remove AI SDK test contamination

* docs: update progress.txt with rebuilt Batch 2 status

---------

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: Roo Code <roomote@roocode.com>
Co-authored-by: daniel-lxs <ricciodaniel98@gmail.com>
Co-authored-by: Chris Estreich <cestreich@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 16:40:07 -07:00

9 KiB

Changelog

All notable changes to the @roo-code/cli package will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.0.53] - 2026-02-12

Changed

  • Auto-Approve by Default: The CLI now auto-approves all actions (tools, commands, browser, MCP) by default. Followup questions auto-select the first suggestion after a 60-second timeout.
  • New --require-approval Flag: Replaced -y/--yes/--dangerously-skip-permissions flags with a new -a, --require-approval flag for users who want manual approval prompts before actions execute.

Fixed

  • Spamming the escape key to cancel a running task no longer crashes the cli.

[0.0.52] - 2026-02-09

Added

  • Linux Support: Added support for linux-arm64.

[0.0.51] - 2026-02-06

Changed

  • Default Model Update: Changed the default model from Opus 4.5 to Opus 4.6 for improved performance and capabilities

[0.0.50] - 2026-02-05

Added

  • Linux Support: The CLI now supports Linux platforms in addition to macOS
  • Roo Provider API Key Support: Allow --api-key flag and ROO_API_KEY environment variable for the roo provider instead of requiring cloud auth token
  • Exit on Error: New --exit-on-error flag to exit immediately on API request errors instead of retrying, useful for CI/CD pipelines

Changed

  • Improved Dev Experience: Dev scripts now use tsx for running directly from source without building first
  • Path Resolution Fixes: Fixed path resolution in version.ts, extension.ts, and extension-host.ts to work from both source and bundled locations
  • Debug Logging: Debug log file (~/.roo/cli-debug.log) is now disabled by default unless --debug flag is passed
  • Updated README with complete environment variable table and dev workflow documentation

Fixed

  • Corrected example in install script

Removed

  • Dropped macOS 13 support

[0.0.49] - 2026-01-18

Added

  • Output Format Options: New --output-format flag to control CLI output format for scripting and automation:
    • text (default) - Human-readable interactive output
    • json - Single JSON object with all events and final result at task completion
    • stream-json - NDJSON (newline-delimited JSON) for real-time streaming of events
    • See json-events.ts for the complete event schema
    • New JsonEventEmitter for structured output generation

[0.0.48] - 2026-01-17

Changed

  • Simplified authentication callback flow by using HTTP redirects instead of POST requests with CORS headers for improved browser compatibility

[0.0.47] - 2026-01-17

Added

  • Workspace flag: New -w, --workspace <path> option to specify a custom workspace directory instead of using the current working directory
  • Oneshot mode: New --oneshot flag to exit upon task completion, useful for scripting and automation (can also be saved in settings via CliSettings.oneshot)

Changed

  • Skip onboarding flow when a provider is explicitly specified via --provider flag or saved in settings
  • Unified permission flags: Combined approval-skipping flags into a single option for Claude Code-like CLI compatibility
  • Improved Roo Code Router authentication flow and error messaging

Fixed

  • Removed unnecessary timeout that could cause issues with long-running tasks
  • Fixed authentication token validation for Roo Code Router provider

[0.0.45] - 2026-01-08

Changed

  • Major Refactor: Extracted ~1400 lines from App.tsx into reusable hooks and utilities for better maintainability:

  • Performance Optimizations:

    • Added RAF-style scroll throttling to reduce state updates
    • Stabilized useExtensionHost hook return values with useCallback/useMemo
    • Added streaming message debouncing to batch rapid partial updates
    • Added shallow array equality checks to prevent unnecessary re-renders
  • Simplified ModeTool layout to horizontal with mode suffix

  • Simplified logging by removing verbose debug output and adding first/last partial message logging pattern

  • Updated Nerd Font icon codepoints in Icon component

Added

  • # shortcut in help trigger for quick access to task history autocomplete

Fixed

  • Fixed a crash in message handling
  • Added protected file warning in tool approval prompts
  • Enabled alwaysAllowWriteProtected for non-interactive mode

Removed

  • Removed unused renderLogger.ts utility file

Tests

  • Updated extension-host tests to expect [Tool Request] format
  • Updated Icon tests to expect single-char Nerd Font icons

[0.0.44] - 2026-01-08

Added

  • Tool Renderer Components: Specialized renderers for displaying tool outputs with optimized formatting for each tool type. Each renderer provides a focused view of its data structure.

  • History Trigger: New # trigger for task history autocomplete with fuzzy search support. Type # at the start of a line to browse and resume previous tasks.

    • HistoryTrigger.tsx - Trigger implementation with fuzzy filtering
    • Shows task status, mode, and relative timestamps
    • Supports keyboard navigation for quick task selection
  • Release Confirmation Prompt: The release script now prompts for confirmation before creating a release.

Fixed

  • Task history picker selection and navigation issues
  • Mode switcher keyboard handling bug

Changed

  • Reorganized test files into __tests__ directories for better project structure
  • Refactored utility modules into dedicated utils/ directory

[0.0.43] - 2026-01-07

Added

  • Toast Notification System: New toast notifications for user feedback with support for info, success, warning, and error types. Toasts auto-dismiss after a configurable duration and are managed via Zustand store.

    • New ToastDisplay component for rendering toast messages
    • New useToast hook for managing toast state and displaying notifications
  • Global Input Sequences Registry: Centralized system for handling keyboard shortcuts at the application level, preventing conflicts with input components.

    • New globalInputSequences.ts utility module
    • Support for Kitty keyboard protocol (CSI u encoding) for better terminal compatibility
    • Built-in sequences for Ctrl+C (exit) and Ctrl+M (mode cycling)
  • Local Tarball Installation: The install script now supports installing from a local tarball via the ROO_LOCAL_TARBALL environment variable, useful for offline installation or testing pre-release builds.

Changed

  • MultilineTextInput: Updated to respect global input sequences, preventing the component from consuming shortcuts meant for application-level handling.

Tests

  • Added comprehensive tests for the toast notification system
  • Added tests for global input sequence matching

[0.0.42] - 2025-01-07

The cli is alive!