Skip to content

Conversation

@hannesrudolph
Copy link
Collaborator

@hannesrudolph hannesrudolph commented Nov 28, 2025

Related GitHub Issue

Closes: #8295

Roo Code Task Context (Optional)

No Roo Code task context for this PR

Description

This PR implements non-destructive context management (both condensing and sliding window truncation) to fix the issue where rewinding after context reduction operations shows an empty or incomplete context window.


Part 1: Non-Destructive Condensing

Root Cause Analysis:
When condensing, the system was deleting messages between the first message and the last N messages. When the user later rewound to a point before the condense operation, those deleted messages were permanently lost, resulting in an empty or incomplete context.

Solution Architecture:
Instead of deleting condensed messages, we now tag them with a condenseParent field that links to their summary's condenseId. This enables:

  1. API calls to use a filtered/condensed history via getEffectiveApiHistory() - messages with a condenseParent pointing to an existing summary are filtered out
  2. Rewind operations to properly restore context - when a summary is deleted (via truncation), the orphaned messages automatically become visible again
  3. Task persistence to store the full history for accurate rewind
  4. UI synchronization - condense_context UI messages are explicitly linked to their Summary messages via condenseId, ensuring they are removed together during rewind operations

Part 2: Non-Destructive Sliding Window Truncation

Root Cause Analysis:
When the context window fills up and condensing fails or is disabled, truncateConversation() was called to remove messages. Similar to condensing, these messages were permanently deleted and lost forever if users rewound past a truncation point.

Solution Architecture:
Applied the same non-destructive approach as condensing:

  1. Tag instead of delete - Messages get truncationParent: <truncationId> instead of being removed
  2. Insert truncation markers - A visible marker with isTruncationMarker: true and truncationId is inserted to track where truncation occurred
  3. Filter for API - getEffectiveApiHistory() filters out messages whose truncationParent points to an active truncation marker
  4. Restore on rewind - When truncation marker is removed, cleanupAfterTruncation() clears orphaned truncationParent tags, making messages visible again

Implementation Details:

  • truncateConversation() now returns TruncationResult with messages, truncationId, and messagesRemoved
  • Added sliding_window_truncation ClineMessage type for UI events
  • Updated Task.ts to create UI events when truncation happens
  • Enhanced removeMessagesThisAndSubsequent() to sync truncation marker removal
  • Extended getEffectiveApiHistory() and cleanupAfterTruncation() to handle both condense and truncation tags

Key Implementation Details

Type Extensions:

  • ApiMessage type extended with optional fields:
    • condenseId and condenseParent (for condensing)
    • truncationId, truncationParent, and isTruncationMarker (for truncation)
  • Added ContextTruncation schema and sliding_window_truncation to ClineSay types

Core Functions:

  • summarizeConversation() - tags messages instead of deleting, generates unique condenseId, returns it
  • truncateConversation() - tags messages instead of deleting, inserts truncation marker, returns TruncationResult
  • getEffectiveApiHistory() - filters out messages by both condenseParent and truncationParent
  • cleanupAfterTruncation() - clears orphaned parent references for both condensing and truncation
  • removeMessagesThisAndSubsequent() - syncs removal of both summaries and truncation markers with their UI events

Test Coverage

Unit Tests:

  • 17 condense rewind tests pass (condense/__tests__/rewind-after-condense.spec.ts)
  • 11 delete/rewind tests pass (webview/__tests__/webviewMessageHandler.delete.spec.ts)
  • 17 truncation tests pass (context-management/__tests__/truncation.spec.ts)
  • 28 context management tests pass (context-management/__tests__/context-management.spec.ts)
  • Total: 73 tests passing

Test Coverage Includes:

  • Non-destructive condensing with proper message tagging
  • Nested condense scenarios
  • Rewind operations restoring original messages
  • Condense_context/Summary sync during rewind
  • Non-destructive truncation with message tagging
  • Multiple truncations
  • Rewind past truncation markers
  • Combined condense + truncation scenarios

Manual Testing Steps

Condense Testing:

  1. Start a new task with sufficient messages (7+)
  2. Trigger condense operation
  3. Verify the condensed view shows: first message + summary + last 3 messages
  4. Use "Rewind" to delete back to before the condense
  5. Verify the original messages are restored and sent to the API

Truncation Testing:

  1. Disable auto-condensing in settings
  2. Create a very long conversation that fills the context window
  3. Verify sliding window truncation triggers
  4. Check that truncation marker appears in UI
  5. Use "Rewind" to delete back to before the truncation
  6. Verify the truncated messages are restored

Nested Operations Testing:

  1. Trigger first condense
  2. Continue conversation with more messages
  3. Trigger second condense or truncation
  4. Rewind to a point between the two operations
  5. Verify first operation is preserved, second is undone

Pre-Submission Checklist

  • Issue Linked: This PR is linked to an approved GitHub Issue (see "Related GitHub Issue" above).
  • Scope: My changes are focused on the linked issue (one major feature/fix per PR).
  • Self-Review: I have performed a thorough self-review of my code.
  • Testing: New and/or updated tests have been added to cover my changes (if applicable).
  • Documentation Impact: I have considered if my changes require documentation updates (see "Documentation Updates" section below).
  • Contribution Guidelines: I have read and agree to the Contributor Guidelines.

Screenshots / Videos

No UI changes in this PR - this is a backend logic fix

Documentation Updates

  • No documentation updates are required.

Additional Notes

Files Changed:

  • packages/types/src/message.ts - Added condenseId to ContextCondense, added ContextTruncation schema and sliding_window_truncation type
  • src/core/task-persistence/apiMessages.ts - Added condense and truncation fields to ApiMessage type
  • src/core/condense/index.ts - Implemented non-destructive condensing and truncation filtering/cleanup
  • src/core/context-management/index.ts - Non-destructive truncateConversation() with TruncationResult
  • src/core/task/Task.ts - Use getEffectiveApiHistory() for API calls, store IDs in UI events, handle truncation events
  • src/core/webview/webviewMessageHandler.ts - Sync removal of summaries and truncation markers with their UI events
  • Test files - Comprehensive coverage for both condense and truncation rewind scenarios

Backward Compatibility:

  • Existing task data without the new fields will work correctly (all fields are optional)
  • Old condensed/truncated messages cannot be retroactively restored
  • New operations will be fully rewindable
  • The fix is transparent to users - no changes to UI or workflow

Get in Touch

N/A

@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Nov 28, 2025
@dosubot dosubot bot added the bug Something isn't working label Nov 28, 2025
@roomote
Copy link
Contributor

roomote bot commented Nov 28, 2025

Oroocle Clock See task on Roo Cloud

Re-review complete for the latest changes on this PR (commit 95886591bb1083eabe7ee264d78bd412a035fd87). No new issues were identified and previous feedback remains resolved.

  • Review latest changes since 668da8e for cleanupAfterTruncation() refactor
  • Confirm non-destructive condense/truncation behavior remains consistent with design
  • Verify existing condense/truncation tests continue to cover affected paths
  • Monitor for regressions in rewind-after-condense and truncation flows after merge
Previous reviews

Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues.

@hannesrudolph hannesrudolph added the Issue/PR - Triage New issue. Needs quick review to confirm validity and assign labels. label Nov 28, 2025
@hannesrudolph hannesrudolph moved this from Triage to PR [Draft / In Progress] in Roo Code Roadmap Nov 29, 2025
@hannesrudolph hannesrudolph added PR - Draft / In Progress and removed Issue/PR - Triage New issue. Needs quick review to confirm validity and assign labels. labels Nov 29, 2025
@dosubot dosubot bot added size:XXL This PR changes 1000+ lines, ignoring generated files. and removed size:L This PR changes 100-499 lines, ignoring generated files. labels Dec 2, 2025
Implements non-destructive condensing to fix the issue where rewind
after condense shows empty context window.

Root cause: When condensing, messages were being deleted, so when
user rewound to before the condense, those messages were permanently
lost.

Solution: Instead of deleting condensed messages, tag them with
condenseParent field linking to their summary. This allows:
- API calls to use filtered/condensed history (via getEffectiveApiHistory)
- Rewind operations to properly restore context (via cleanupAfterTruncation)
- Task persistence to store full history for accurate rewind

Key changes:
- ApiMessage type: Add condenseId (for summaries) and condenseParent
  (for condensed messages) fields
- summarizeConversation: Tag messages instead of deleting them
- Task.ts: Use getEffectiveApiHistory when preparing API calls
- webviewMessageHandler: Call cleanupAfterTruncation when truncating
- Add comprehensive regression tests for rewind-after-condense

Fixes #8295
…tory

Links condense_context UI messages to their corresponding Summary messages
via condenseId. When deleting messages that remove a condense_context event,
the corresponding Summary is now explicitly removed from apiConversationHistory,
fixing the desync issue where Summary.ts < truncation point but the UI event
was after.

Changes:
- Add condenseId to ContextCondense schema (optional for backwards compat)
- Return condenseId from summarizeConversation()
- Store condenseId in condense_context clineMessage
- Update removeMessagesThisAndSubsequent() to collect removed condenseIds
  and filter out orphaned Summaries
- Add tests for single and nested condense deletion scenarios
- Add truncationId, truncationParent, and isTruncationMarker fields to ApiMessage type
- Refactor truncateConversation() to tag messages instead of deleting them
- Update getEffectiveApiHistory() to filter messages by truncationParent
- Enhance cleanupAfterTruncation() to handle orphaned truncation tags
- Add sliding_window_truncation ClineMessage type and ContextTruncation schema
- Create UI events when truncation occurs
- Sync truncation marker removal during rewind operations
- Add comprehensive test suite with 45 passing tests

This makes sliding window truncation rewindable by preserving messages with tags,
mirroring the non-destructive approach used for condensing.
@hannesrudolph hannesrudolph force-pushed the fix/issue-8295-rewind-after-condense branch from 88aeaf2 to 2908272 Compare December 2, 2025 04:23
The test 'should append multiple tool_use blocks for parallel tool calls' was
incorrectly assuming the summary message is at index 1. With non-destructive
condensing, the summary message position varies based on the messages array.

Updated to use result.messages.find(m => m.isSummary) which is consistent
with other tests in the file.
@hannesrudolph hannesrudolph moved this from PR [Draft / In Progress] to PR [Needs Prelim Review] in Roo Code Roadmap Dec 2, 2025
Replace two instances of 'as any[]' type assertions with proper
Anthropic SDK types:
- ContentBlockParam[] for content arrays
- TextBlockParam for text block property access
- ToolUseBlockParam for tool_use block property access

This improves type safety and follows project guidelines.
@mrubens mrubens merged commit 23605be into main Dec 3, 2025
19 checks passed
@github-project-automation github-project-automation bot moved this from New to Done in Roo Code Roadmap Dec 3, 2025
@github-project-automation github-project-automation bot moved this from PR [Needs Review] to Done in Roo Code Roadmap Dec 3, 2025
@mrubens mrubens deleted the fix/issue-8295-rewind-after-condense branch December 3, 2025 16:40
mini2s added a commit to zgsm-ai/costrict that referenced this pull request Dec 4, 2025
* fix: preserve user images in native tool call results (RooCodeInc#9401)

* feat: migrate PostHog client to ph.roocode.com (RooCodeInc#9402)

Co-authored-by: Roo Code <[email protected]>
Co-authored-by: Matt Rubens <[email protected]>

* feat: enable native tool calling for gemini provider (RooCodeInc#9343)

Co-authored-by: daniel-lxs <[email protected]>

* Add a RCC credit balance display (RooCodeInc#9386)

* Add a RCC credit balance display

* Replace the provider docs with the balance when logged in

* PR feedback

---------

Co-authored-by: Matt Rubens <[email protected]>

* perf: reduce excessive getModel() calls & implement disk cache fallback (RooCodeInc#9410)

* Show zero price for free models (RooCodeInc#9419)

* Release v3.33.2 (RooCodeInc#9420)

* Changeset version bump (RooCodeInc#9421)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* Improve read_file tool description with examples (RooCodeInc#9422)

* Improve read_file tool description with examples

- Add explicit JSON structure documentation
- Include three concrete examples (single file, with line ranges, multiple files)
- Clarify that 'path' is required and 'line_ranges' is optional
- Better explain line range format (1-based inclusive)

This addresses agent confusion by providing clear examples similar to the XML tool definition.

* Make read_file tool dynamic based on partialReadsEnabled setting

- Convert read_file from static export to createReadFileTool() factory function
- Add getNativeTools() function that accepts partialReadsEnabled parameter
- Create buildNativeToolsArray() helper to encapsulate tool building logic
- Update Task.ts to build native tools dynamically using maxReadFileLine setting
- When partialReadsEnabled is false, line_ranges parameter is excluded from schema
- Examples and descriptions adjust based on whether line ranges are supported

This matches the behavior of the XML tool definition which dynamically adjusts
its documentation based on settings, reducing confusion for agents.

* Fix Marketplace crash by removing wildcard activation event (RooCodeInc#9423)

* Revert "Fix Marketplace crash by removing wildcard activation event" (RooCodeInc#9432)

* Fix OpenAI Native parallel tool calls for native protocol (RooCodeInc#9433)

Fixes an issue where using the OpenAI Native provider together with Native Tool Calling could cause OpenAI’s Responses API to fail with errors like:

* feat: add Google Gemini 3 Pro Image Preview to image generation models (RooCodeInc#9440)

Co-authored-by: Roo Code <[email protected]>
Co-authored-by: Matt Rubens <[email protected]>

* fix: prevent duplicate environment_details when resuming cancelled tasks (RooCodeInc#9442)

- Filter out complete environment_details blocks before appending fresh ones
- Check for both opening and closing tags to ensure we're matching complete blocks
- Prevents stale environment data from being kept during task resume
- Add tests to verify deduplication logic and edge cases

* Update glob to ^11.1.0 (RooCodeInc#9449)

* chore: update tar-fs to 3.1.1 via pnpm override (RooCodeInc#9450)

Co-authored-by: Roo Code <[email protected]>

* Store reasoning in conversation history for all providers (RooCodeInc#9451)

* Fix preserveReasoning flag to control API reasoning inclusion (RooCodeInc#9453)

* feat: store reasoning in conversation history for all providers

* refactor: address review feedback

- Move comments inside else block
- Combine reasoning checks into single if block
- Make comments more concise

* refactor: make comments more concise

* Fix preserveReasoning flag to control API reasoning inclusion

Changes:
1. Removed hardcoded <think> tag logic in streaming
   - Previously hardcoded reasoning into assistant message text
   - Now passes reasoning to addToApiConversationHistory as parameter

2. Updated buildCleanConversationHistory to respect preserveReasoning flag
   - When preserveReasoning: true → reasoning block included in API requests
   - When preserveReasoning: false/undefined → reasoning stripped from API
   - Reasoning stored in history for all cases

3. Added temporary debug logs to base-openai-compatible-provider.ts
   - Shows preserveReasoning flag value
   - Logs reasoning blocks in incoming messages
   - Logs <think> tags in converted messages sent to API

* Fix: Use api.getModel() directly instead of cachedStreamingModel

Addresses review comment: cachedStreamingModel is set during streaming but
buildCleanConversationHistory is called before streaming starts. Using the
cached value could cause stale model info when switching models between requests.

Now directly uses this.api.getModel().info.preserveReasoning to ensure we
always check the current model's flag, not a potentially stale cached value.

* Clean up comments in Task.ts

Removed outdated comment regarding model's preserveReasoning flag.

* fix: remove unnecessary reasoningBlock variable in task reasoning logic

* fix: send tool_result blocks for skipped tools in native protocol (RooCodeInc#9457)

* fix: improve markdown formatting and add reasoning support (RooCodeInc#9458)

* feat: implement Minimax as Anthropic-compatible provider (RooCodeInc#9455)

* fix: improve search and replace symbol parsing (RooCodeInc#9456)

* chore: add changeset for v3.33.3 (RooCodeInc#9459)

* Changeset version bump (RooCodeInc#9460)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* feat(terminal): add inline shell integration with user input support

* Release: v1.87.0 (RooCodeInc#9477)

* refactor(terminal): remove inline shell integration callback and improve terminal process handling

* fix: add fallback to yield tool calls regardless of finish_reason (RooCodeInc#9476)

* Improvements to base openai compatible (RooCodeInc#9462)

Co-authored-by: Roo Code <[email protected]>

* Browser Use 2.0 (RooCodeInc#8941)

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: daniel-lxs <[email protected]>

* fix: resolve apply_diff performance regression from PR RooCodeInc#9456 (RooCodeInc#9474)

* fix: implement model cache refresh to prevent stale disk cache (RooCodeInc#9478)

* fix: Make cancel button immediately responsive during streaming (RooCodeInc#9448)

* Test a provider-oriented welcome screen (RooCodeInc#9484)

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* (feat): Add Baseten Provider (RooCodeInc#9461)

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>
Co-authored-by: AlexKer <[email protected]>
Co-authored-by: Matt Rubens <[email protected]>

* fix: copy model-level capabilities to OpenRouter endpoint models (RooCodeInc#9483)

* Pin the Roo provider to the top of the list (RooCodeInc#9485)

* Wait to experiment until state is hydrated (RooCodeInc#9488)

* Change baseten default model to glm for now (RooCodeInc#9489)

* Revert "Wait to experiment until state is hydrated" (RooCodeInc#9491)

* Try to fix build (RooCodeInc#9490)

* Update webview-ui Vite config (RooCodeInc#9493)

* Enhance native tool descriptions with examples and clarifications (RooCodeInc#9486)

* Revert "Revert "Wait to experiment until state is hydrated"" (RooCodeInc#9494)

* chore: add changeset and announcement for v3.34.0 (RooCodeInc#9495)

* Changeset version bump (RooCodeInc#9496)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* Enable the Roo Code Cloud provider in evals (RooCodeInc#9492)

* Show the prompt for image gen (RooCodeInc#9505)

* feat(chat): conditionally render UpdateTodoListToolBlock based on alwaysAllowUpdateTodoList flag

* fix(web-evals): update checkbox handler in new-run component

* Remove double todo list (RooCodeInc#9517)

* Track cloud synced messages (RooCodeInc#9518)

* 3.34.1 (RooCodeInc#9522)

* Changeset version bump (RooCodeInc#9523)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* fix: support reasoning_details format for Gemini 3 models (RooCodeInc#9506)

* feat: update Cerebras models (RooCodeInc#9527)

Co-authored-by: Roo Code <[email protected]>

* fix: ensure XML parser state matches tool protocol on config update (RooCodeInc#9535)

* fix: flush LiteLLM cache when credentials change on refresh (RooCodeInc#9536)

* Add Roo Code Cloud as an imagegen provider (RooCodeInc#9528)

* fix: gracefully skip unsupported content blocks in Gemini transformer (RooCodeInc#9537)

Co-authored-by: Matt Rubens <[email protected]>

* feat: add claude-opus-4.5 to OpenRouter prompt caching and reasoning budget models (RooCodeInc#9540)

* feat: add claude-opus-4.5 to Anthropic and Vertex providers (RooCodeInc#9541)

* Release v3.34.2 (RooCodeInc#9545)

* Changeset version bump (RooCodeInc#9546)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* Add support for Roo Code Cloud as an embeddings provider (RooCodeInc#9543)

* Switch from asdf to mise-en-place in bare-metal evals setup script (RooCodeInc#9548)

* feat: implement streaming for native tool calls (RooCodeInc#9542)

* Add Opus 4.5 to Claude Code provider (RooCodeInc#9560)

* Fix ask_followup_question streaming issue and add missing tool cases (RooCodeInc#9561)

* feat(auth): enhance login status logging and use dynamic plugin version

* refactor:  remove disable provider and add client id headers

* test(webview): remove disable  provider tests across multiple test files

* fix: enable caching for Opus 4.5 model (RooCodeInc#9568)

Added claude-opus-4-5-20251101 to the cache control switch statements
to enable prompt caching, matching the behavior of other Claude models.

Fixes RooCodeInc#9567

Co-authored-by: Roo Code <[email protected]>

* feat: Add contact links to About Roo Code settings page (RooCodeInc#9570)

* feat: add contact links to About settings page

* Tweaks

* i18n

* Update webview-ui/src/components/settings/__tests__/About.spec.tsx

Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

---------

Co-authored-by: Roo Code <[email protected]>
Co-authored-by: Bruno Bergher <[email protected]>
Co-authored-by: roomote[bot] <219738659+roomote[bot]@users.noreply.github.com>

* feat: add Claude Opus 4.5 model to Bedrock provider (RooCodeInc#9572)

Co-authored-by: Roo Code <[email protected]>
Co-authored-by: Matt Rubens <[email protected]>

* chore: add changeset for v3.34.3 (RooCodeInc#9578)

* Changeset version bump (RooCodeInc#9579)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* fix: preserve dynamic MCP tool names in native mode API history (RooCodeInc#9559)

* fix: preserve tool_use blocks in summary message during condensing with native tools (RooCodeInc#9582)

* Add support for images api (RooCodeInc#9587)

* Make it clear that BFL Flux 2 is free (RooCodeInc#9588)

* Add BFL models to openrouter (RooCodeInc#9589)

* chore: add changeset for v3.34.4 (RooCodeInc#9590)

* Changeset version bump (RooCodeInc#9591)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* feat: set native tools as default for minimax-m2 and claude-haiku-4.5 (RooCodeInc#9586)

* feat: enable multiple native tool calls per turn with failure guardrails (RooCodeInc#9273)

* feat: add Bedrock Opus 4.5 to global inference model list (RooCodeInc#9595)

Co-authored-by: Roo Code <[email protected]>

* fix: update API handler when toolProtocol changes (RooCodeInc#9599)

* Make single file read only apply to xml tools (RooCodeInc#9600)

* Revert "Add support for Roo Code Cloud as an embeddings provider" (RooCodeInc#9602)

* feat(web-evals): enhance dashboard with dynamic tool columns and UX improvements (RooCodeInc#9592)

Co-authored-by: Roo Code <[email protected]>

* fix(webview): pass taskId to finishSubTask when canceling or deleting tasks

* chore: add changeset for v3.34.5 (RooCodeInc#9603)

* Changeset version bump (RooCodeInc#9604)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* Feature/bedrock embeddings support (RooCodeInc#9475)

* feat: add AWS Bedrock support for codebase indexing

- Add bedrock as a new EmbedderProvider type
- Add AWS Bedrock embedding model profiles (titan-embed-text models)
- Create BedrockEmbedder class with support for Titan and Cohere models
- Add Bedrock configuration support to config manager and interfaces
- Update service factory to create BedrockEmbedder instances
- Add comprehensive tests for BedrockEmbedder
- Add localization strings for Bedrock support

Closes RooCodeInc#8658

* fix: add missing bedrockOptions to loadConfiguration return type

* Fix various issues that the original PR missed.

* Remove debug logs

* Rename AWS Bedrock -> Amazon Bedrock

* Remove some 'as any's

* Revert README changes

* Add translations

* More translations

* Remove leftover code from a debugging session.

* fix: add bedrock to codebaseIndexModelsSchema and update brace-expansion override

- Add bedrock provider to codebaseIndexModelsSchema type definition to fix empty model dropdown in UI
- Update pnpm override for brace-expansion from '>=2.0.2' to '^2.0.2' to resolve ESM/CommonJS compatibility issues

* Improvements to AWS Bedrock embeddings support

- Enhanced bedrock.ts embedder implementation
- Added comprehensive test coverage in bedrock.spec.ts
- Updated config-manager.ts for better Bedrock configuration handling
- Improved service-factory.ts integration
- Updated embeddingModels.ts with Bedrock models
- Enhanced CodeIndexPopover.tsx UI for Bedrock options
- Added auto-populate test for CodeIndexPopover
- Updated pnpm-lock.yaml dependencies

* Restore openrouter config

* Remove debug log

* Fix config-manager.spec.ts unit test.

* Add translations for "optional"

* Revert unnecessary change related to open ia embedder

---------

Co-authored-by: Roo Code <[email protected]>
Co-authored-by: Matt Rubens <[email protected]>
Co-authored-by: Smartsheet-JB-Brown <[email protected]>

* fix: restore content undefined check in WriteToFileTool.handlePartial() (RooCodeInc#9614)

* fix: exclude access_mcp_resource tool when MCP has no resources (RooCodeInc#9615)

* fix: prevent model cache from persisting empty API responses (RooCodeInc#9623)

* fix: update default settings for inline terminal and codebase indexing (RooCodeInc#9622)

Co-authored-by: Roo Code <[email protected]>

* feat(mistral): add native tool calling support (RooCodeInc#9625)

* feat: wire MULTIPLE_NATIVE_TOOL_CALLS experiment to OpenAI parallel_tool_calls (RooCodeInc#9621)

* feat(bedrock): allow global inference selection when cross-region is enabled (RooCodeInc#9616)

Co-authored-by: Roo Code <[email protected]>

* fix: defer new_task tool_result until subtask completes for native protocol (RooCodeInc#9628)

* fix: convert line_ranges strings to lineRanges objects in native tool calls (RooCodeInc#9627)

* fix: filter non-Anthropic content blocks before sending to Vertex API (RooCodeInc#9618)

* Add fine grained tool streaming for OpenRouter Anthropic (RooCodeInc#9629)

* Release v3.34.6 (RooCodeInc#9631)

* Changeset version bump (RooCodeInc#9632)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* fix: OpenRouter GPT-5 strict schema validation for read_file tool (RooCodeInc#9633)

* fix: create parent directories early in write_to_file to prevent ENOENT errors (RooCodeInc#9640)

* Fix openrouter tool calls (RooCodeInc#9642)

* fix(claude-code): disable native tools and temperature support (RooCodeInc#9643)

* Enable native tool calling for z.ai (RooCodeInc#9645)

* Moonshot native tool call support (RooCodeInc#9646)

* Support native tools in the anthropic provider (RooCodeInc#9644)

Co-authored-by: Roo Code <[email protected]>

* Add 'taking you to cloud' screen after provider welcome (RooCodeInc#9652)

* chore: add changeset for v3.34.7 (RooCodeInc#9651)

* Changeset version bump (RooCodeInc#9654)

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Rubens <[email protected]>

* fix: race condition in new_task tool for native protocol (RooCodeInc#9655)

The pendingNewTaskToolCallId was being set AFTER startSubtask() returned.
However, startSubtask() contains a 500ms delay during which the subtask
could complete. If the subtask completed during this window, completeSubtask()
would be called before pendingNewTaskToolCallId was set, causing it to
fall through to the XML protocol path and add a text message instead of
a proper tool_result block, breaking the API conversation structure.

This fix moves the pendingNewTaskToolCallId assignment to happen BEFORE
calling startSubtask(), ensuring the ID is set before the subtask starts.
If the subtask creation fails, the pending ID is cleared.

* chore: add changeset for v3.34.8 (RooCodeInc#9657)

* Changeset version bump (