Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
137 commits
Select commit Hold shift + click to select a range
d23824d
Changeset version bump (#10451)
github-actions[bot] Jan 4, 2026
cbc0ae4
feat: add image support documentation to read_file native tool descri…
roomote-v0[bot] Jan 5, 2026
f2276be
fix: add explicit deduplication for duplicate tool_result blocks (#10…
roomote-v0[bot] Jan 5, 2026
b11d53a
VSCode shim + basic cli (#10452)
cte Jan 5, 2026
424bce6
Add an option to use our cli for evals (#10456)
cte Jan 5, 2026
6f09481
fix: preserve tool_use blocks for all tool_results in kept messages d…
daniel-lxs Jan 6, 2026
6b13d1d
fix: add additionalProperties: false to MCP tool schemas for OpenAI R…
daniel-lxs Jan 6, 2026
861139c
Add a cli installer (#10474)
cte Jan 6, 2026
503f402
feat(proxy): add debug-mode proxy routing (#10467)
hannesrudolph Jan 6, 2026
741b268
fix: prevent duplicate tool_result blocks causing API errors (#10497)
daniel-lxs Jan 6, 2026
781ed1e
feat: add Kimi K2 thinking model to Fireworks AI provider (#9202)
roomote-v0[bot] Jan 7, 2026
7f2978a
fix: add missing description fields for debugProxy configuration (#10…
roomote-v0[bot] Jan 7, 2026
2d22804
Tweak the style of the follow up suggestion modes (#9260)
mrubens Jan 7, 2026
41c5ff6
feat(web-evals): remember last Roo model selection + add evals skill …
hannesrudolph Jan 7, 2026
7bbdcdf
feat: rename YOLO to BRRR (#10507)
roomote-v0[bot] Jan 7, 2026
9700eab
feat: implement sticky provider profile for task-level API config per…
hannesrudolph Jan 7, 2026
e287a82
fix: remove legacy Claude 2 series models from Bedrock provider (#10501)
roomote-v0[bot] Jan 7, 2026
43f7ce0
feat: add support for image file @mentions (#10189)
hannesrudolph Jan 7, 2026
d7d3f40
fix: handle PowerShell ENOENT error in os-name on Windows (#9897)
roomote-v0[bot] Jan 7, 2026
e3b90fb
feat: add xhigh reasoning effort to OpenAI compatible endpoints (#10061)
roomote-v0[bot] Jan 7, 2026
7552581
feat: filter @ mention file search results using .rooignore (#10174)
roomote-v0[bot] Jan 7, 2026
ca0c901
fix: use task stored API config as fallback for rate limit (#10266)
roomote-v0[bot] Jan 8, 2026
1573edf
fix: make command chaining examples shell-aware for Windows compatibi…
roomote-v0[bot] Jan 8, 2026
710e7dd
feat(types): add zai-glm-4.7 to Cerebras models (#10500)
sebastiand-cerebras Jan 8, 2026
b2941d5
🐛 Fix glitchy kangaroo bounce animation on welcome screen (#10035)
objectiveSee Jan 8, 2026
f84bead
Release v3.39.0 (#10537)
mrubens Jan 8, 2026
a10b450
feat: Change "Get Started" button label to "Create Roo Account" (#10543)
roomote-v0[bot] Jan 8, 2026
9ddbc9b
fix: add @roo-code/cli to changeset ignore list (#10545)
mrubens Jan 8, 2026
2cd4c2e
Changeset version bump (#10546)
github-actions[bot] Jan 8, 2026
93bccfe
Update changelog for version 3.39.0 release
mrubens Jan 8, 2026
1d9f7f2
fix: change minItems from 2 to 1 for Anthropic API compatibility (#10…
daniel-lxs Jan 8, 2026
e3c0cd6
fix: disable Gemini thought signature persistence to prevent corrupte…
daniel-lxs Jan 8, 2026
ef4b950
fix: stabilize file paths during native tool call streaming (#10555)
daniel-lxs Jan 8, 2026
58b0441
Release v3.39.1 (#10557)
mrubens Jan 8, 2026
eb7d8f4
Changeset version bump (#10558)
github-actions[bot] Jan 8, 2026
caa3779
chore(cli): change default model to anthropic/claude-opus-4.5 (#10544)
mrubens Jan 8, 2026
9ac4499
fix: ensure assistant message content is never undefined for Gemini c…
daniel-lxs Jan 9, 2026
2ff08b5
Update Terms of Service (effective January 9, 2026) (#10568)
mrubens Jan 9, 2026
ade10e2
fix(vscode-lm): order text parts before tool calls in assistant messa…
daniel-lxs Jan 9, 2026
7b771a2
fix: merge approval feedback into tool result instead of pushing dupl…
daniel-lxs Jan 9, 2026
b7bd859
feat: improve error messaging for stream termination errors from prov…
daniel-lxs Jan 9, 2026
907b94b
fix(openai): remove convertToSimpleMessages to fix tool calling for O…
daniel-lxs Jan 9, 2026
3171ffc
Move more types to @roo-code/types (for the cli) (#10583)
cte Jan 9, 2026
a4eb15b
Add some functionality to @roo-code/core for the cli (#10584)
cte Jan 9, 2026
237fa89
Add some slash commands that are useful for cli development (#10586)
cte Jan 9, 2026
108f78d
feat: add debug setting to settings page (#10580)
hannesrudolph Jan 9, 2026
168cfca
fix: round-trip Gemini thought signatures for tool calls (#10590)
hannesrudolph Jan 10, 2026
e39abbf
fix: make edit_file matching more resilient (#10585)
hannesrudolph Jan 10, 2026
8478944
chore(gemini): stop overriding tool allow/deny lists (#10592)
hannesrudolph Jan 10, 2026
d97e540
fix(cerebras): ensure all tools have consistent strict mode values (#…
roomote-v0[bot] Jan 10, 2026
5a82c33
chore: disable edit_file tool for Gemini/Vertex (#10594)
hannesrudolph Jan 10, 2026
658da2c
Release v3.39.2 (#10595)
mrubens Jan 10, 2026
1e62b5d
Changeset version bump (#10596)
github-actions[bot] Jan 10, 2026
ea9717d
Add a TUI (#10480)
cte Jan 10, 2026
e8ed344
Allow the cli release script to install locally for testing (#10597)
cte Jan 10, 2026
fc21101
More file organization for the cli (#10599)
cte Jan 10, 2026
a33117a
Some cleanup in ExtensionHost (#10600)
cte Jan 10, 2026
75d8958
Rename Roo Code Cloud Provider to Roo Code Router (#10560)
roomote-v0[bot] Jan 10, 2026
f99d116
chore: bump version to v1.102.0 (#10604)
mrubens Jan 10, 2026
fa5fe75
Update router name in types (#10605)
mrubens Jan 10, 2026
352616a
Update Roo Code Router service name (#10607)
mrubens Jan 10, 2026
9c91fb3
chore: add changeset for v3.39.3 (#10608)
mrubens Jan 10, 2026
f1bbd29
Update router name in types (#10610)
mrubens Jan 10, 2026
611bb70
Changeset version bump (#10609)
github-actions[bot] Jan 10, 2026
632b86c
Basic settings search (#10619)
mrubens Jan 11, 2026
e23e1ec
ux: UI improvements to search settings (#10633)
brunobergher Jan 12, 2026
4c2d1f0
feat: display edit_file errors in UI after consecutive failures (#10581)
daniel-lxs Jan 12, 2026
55b7324
perf: optimize message block cloning in presentAssistantMessage (#10616)
ArchimedesCrypto Jan 12, 2026
f439496
fix: correct Gemini 3 thought signature injection format via OpenRout…
daniel-lxs Jan 12, 2026
a682908
fix: encode hyphens in MCP tool names before sanitization (#10644)
pdecat Jan 12, 2026
621d950
fix: sanitize tool_use IDs to match API validation pattern (#10649)
daniel-lxs Jan 12, 2026
b514996
fix(path): return empty string from getReadablePath when path is empt…
daniel-lxs Jan 12, 2026
a12163d
ux: Standard stop button 🟥 (#10639)
brunobergher Jan 13, 2026
2d4dba0
fix: omit parallel_tool_calls when not explicitly enabled (COM-406) (…
daniel-lxs Jan 13, 2026
78821a3
fix: use placeholder for empty tool result content to fix Gemini API …
daniel-lxs Jan 13, 2026
749026a
ux: Further improve error display (#10692)
brunobergher Jan 13, 2026
8303710
ux: improve stop button visibility and streamline error handling (#10…
brunobergher Jan 13, 2026
440924a
fix: clear approval buttons when API request starts (ROO-526) (#10702)
daniel-lxs Jan 13, 2026
fdc6104
chore: add changeset for v3.40.0 (#10705)
mrubens Jan 13, 2026
d74bad9
Changeset version bump (#10706)
github-actions[bot] Jan 13, 2026
9b1c850
feat(gemini): add allowedFunctionNames support to prevent mode switch…
hannesrudolph Jan 14, 2026
8fdd96b
Release v3.40.1 (#10713)
mrubens Jan 14, 2026
d689de3
Changeset version bump (#10714)
github-actions[bot] Jan 14, 2026
4b17f98
Release: v1.105.0 (#10722)
mrubens Jan 14, 2026
b04597f
feat(providers): add gpt-5.2-codex model to openai-native provider (#…
hannesrudolph Jan 14, 2026
dbf206f
feat(e2e): Enable E2E tests - 39 passing tests (#10720)
ArchimedesCrypto Jan 14, 2026
739b91e
Clear terminal output buffers to prevent memory leaks (#7666)
hannesrudolph Jan 15, 2026
4ebbca0
feat: add OpenAI Codex provider with OAuth subscription authenticatio…
hannesrudolph Jan 15, 2026
d7b7e17
fix(litellm): inject dummy thought signatures on ALL tool calls for G…
daniel-lxs Jan 15, 2026
dba76f5
fix(e2e): add alwaysAllow config for MCP time server tools (#10733)
ArchimedesCrypto Jan 15, 2026
afc588b
Release v3.41.0 (#10746)
mrubens Jan 15, 2026
5183be2
Changeset version bump (#10747)
github-actions[bot] Jan 15, 2026
724571c
feat: clarify Slack and Linear are Cloud Team only features (#10748)
roomote-v0[bot] Jan 15, 2026
4ee494b
Release: v1.106.0 (#10749)
mrubens Jan 15, 2026
f2b16d4
fix: handle missing tool identity in OpenAI Native streams (#10719)
hannesrudolph Jan 15, 2026
f48ea38
Feat/issue 5376 aggregate subtask costs (#10757)
taltas Jan 15, 2026
245e0f6
feat: add settings tab titles to search index (#10761)
roomote-v0[bot] Jan 16, 2026
bbf3196
fix: filter Ollama models without native tool support (#10735)
daniel-lxs Jan 16, 2026
3a884ee
fix: filter out empty text blocks from user messages for Gemini compa…
daniel-lxs Jan 16, 2026
df42655
fix: flatten top-level anyOf/oneOf/allOf in MCP tool schemas (#10726)
daniel-lxs Jan 16, 2026
bbb6a6e
fix: prevent duplicate tool_use IDs causing API 400 errors (#10760)
daniel-lxs Jan 16, 2026
e34d93e
fix: truncate call_id to 64 chars for OpenAI Responses API (#10763)
daniel-lxs Jan 16, 2026
ddac338
fix: Gemini thought signature validation errors (#10694)
daniel-lxs Jan 16, 2026
7e3fcd7
Release v3.41.1 (#10767)
mrubens Jan 16, 2026
8b9f02a
Changeset version bump (#10768)
github-actions[bot] Jan 16, 2026
9bf7173
feat: add button to open markdown in VSCode preview (#10773)
brunobergher Jan 16, 2026
9533f0b
fix(openai-codex): reset invalid model selection (#10777)
hannesrudolph Jan 16, 2026
c40c882
fix: add openai-codex to providers that don't require API key (#10786)
roomote-v0[bot] Jan 16, 2026
95be704
fix(litellm): detect Gemini models with space-separated names for tho…
daniel-lxs Jan 16, 2026
cad0320
Release v3.41.2 (#10788)
mrubens Jan 16, 2026
99a9950
changeset version bump
github-actions[bot] Jan 16, 2026
8d26940
Update CHANGELOG.md
mrubens Jan 16, 2026
aa29ea0
Merge branch 'upstream-at-v3.41.2' into roo-v3.41.2
kevinvandijk Jan 20, 2026
eb2c770
Remove duplicate entry
kevinvandijk Jan 20, 2026
ba16412
Add missing import
kevinvandijk Jan 20, 2026
66e26a6
Fix imports in getTaskHistory
kevinvandijk Jan 20, 2026
f3f6f7a
Fix typing
kevinvandijk Jan 20, 2026
c9204df
Fix linting errors
kevinvandijk Jan 20, 2026
b798fc3
Fix for new types
kevinvandijk Jan 20, 2026
95a3303
Fix circular dependency
kevinvandijk Jan 20, 2026
22a91d9
Add kilo specific mocks
kevinvandijk Jan 20, 2026
3bd3af5
Use the right referer
kevinvandijk Jan 20, 2026
3a43c9f
Fix setting headers
kevinvandijk Jan 20, 2026
7513a76
Merge branch 'main' into roo-v3.41.2
kevinvandijk Jan 20, 2026
922b984
Update translations
kevinvandijk Jan 20, 2026
95d840c
Remove .roo dir
kevinvandijk Jan 20, 2026
be260c8
Fix webview tests
kevinvandijk Jan 20, 2026
58cd7fe
Merge branch 'main' into roo-v3.41.2
chrarnoldus Jan 21, 2026
6947993
Update user agent
kevinvandijk Jan 21, 2026
7f6f156
Merge branch 'main' into roo-v3.41.2
kevinvandijk Jan 21, 2026
db3dc2c
Fix test
kevinvandijk Jan 21, 2026
015e1e0
Re-add cancel button
kevinvandijk Jan 21, 2026
25e9c44
Merge branch 'main' into roo-v3.41.2
kevinvandijk Jan 21, 2026
52ebb1c
Make autocomplete settings searchable
kevinvandijk Jan 22, 2026
19ad8fd
Add missing translations
kevinvandijk Jan 23, 2026
2bd633c
Merge branch 'main' into roo-v3.41.2
kevinvandijk Jan 26, 2026
796e188
Add changeset
kevinvandijk Jan 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
"access": "restricted",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": []
"ignore": ["@roo-code/cli"]
}
64 changes: 64 additions & 0 deletions .changeset/shaky-wolves-check.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
"kilo-code": minor
---

Include changes from Roo Code v3.39.0-v3.41.2

- Add button to open markdown in VSCode preview for easier reading of formatted content (PR #10773 by @brunobergher)
- Fix: Add openai-codex to providers that don't require an API key (PR #10786 by @roomote)
- Fix: Detect Gemini models with space-separated names for proper thought signature injection in LiteLLM (PR #10787 by @daniel-lxs)
- Feat: Aggregate subtask costs in parent task (#5376 by @hannesrudolph, PR #10757 by @taltas)
- Fix: Prevent duplicate tool_use IDs causing API 400 errors (PR #10760 by @daniel-lxs)
- Fix: Handle missing tool identity in OpenAI Native streams (PR #10719 by @hannesrudolph)
- Fix: Truncate call_id to 64 chars for OpenAI Responses API (PR #10763 by @daniel-lxs)
- Fix: Gemini thought signature validation errors (PR #10694 by @daniel-lxs)
- Fix: Filter out empty text blocks from user messages for Gemini compatibility (PR #10728 by @daniel-lxs)
- Fix: Flatten top-level anyOf/oneOf/allOf in MCP tool schemas (PR #10726 by @daniel-lxs)
- Fix: Filter Ollama models without native tool support (PR #10735 by @daniel-lxs)
- Feat: Add settings tab titles to search index (PR #10761 by @roomote)
- Fix: Clear terminal output buffers to prevent memory leaks that could cause gray screens and performance degradation (#10666, PR #7666 by @hannesrudolph)
- Fix: Inject dummy thought signatures on ALL tool calls for Gemini models, resolving issues with Gemini tool call handling through LiteLLM (PR #10743 by @daniel-lxs)
- Fix: Add allowedFunctionNames support for Gemini to prevent mode switch errors (#10711 by @hannesrudolph, PR #10708 by @hannesrudolph)
- Add settings search functionality to quickly find and navigate to specific settings (PR #10619 by @mrubens)
- Improve settings search UI with better styling and usability (PR #10633 by @brunobergher)
- Display edit_file errors in UI after consecutive failures for better debugging feedback (PR #10581 by @daniel-lxs)
- Improve error display styling and visibility in chat messages (PR #10692 by @brunobergher)
- Improve stop button visibility and streamline error handling (PR #10696 by @brunobergher)
- Fix: Omit parallel_tool_calls when not explicitly enabled to prevent API errors (#10553 by @Idlebrand, PR #10671 by @daniel-lxs)
- Fix: Encode hyphens in MCP tool names before sanitization (#10642 by @pdecat, PR #10644 by @pdecat)
- Fix: Correct Gemini 3 thought signature injection format via OpenRouter (PR #10640 by @daniel-lxs)
- Fix: Sanitize tool_use IDs to match API validation pattern (PR #10649 by @daniel-lxs)
- Fix: Use placeholder for empty tool result content to fix Gemini API validation (PR #10672 by @daniel-lxs)
- Fix: Return empty string from getReadablePath when path is empty (PR #10638 by @daniel-lxs)
- Optimize message block cloning in presentAssistantMessage for better performance (PR #10616 by @ArchimedesCrypto)
- Improve ExtensionHost code organization and cleanup (PR #10600 by @cte)
- Fix: Ensure all tools have consistent strict mode values for Cerebras compatibility (#10334 by @brianboysen51, PR #10589 by @app/roomote)
- Fix: Remove convertToSimpleMessages to restore tool calling for OpenAI-compatible providers (PR #10575 by @daniel-lxs)
- Fix: Make edit_file matching more resilient to prevent false negatives (PR #10585 by @hannesrudolph)
- Fix: Order text parts before tool calls in assistant messages for vscode-lm (PR #10573 by @daniel-lxs)
- Fix: Ensure assistant message content is never undefined for Gemini compatibility (PR #10559 by @daniel-lxs)
- Fix: Merge approval feedback into tool result instead of pushing duplicate messages (PR #10519 by @daniel-lxs)
- Fix: Round-trip Gemini thought signatures for tool calls (PR #10590 by @hannesrudolph)
- Feature: Improve error messaging for stream termination errors from provider (PR #10548 by @daniel-lxs)
- Feature: Add debug setting to settings page for easier troubleshooting (PR #10580 by @hannesrudolph)
- Chore: Disable edit_file tool for Gemini/Vertex providers (PR #10594 by @hannesrudolph)
- Chore: Stop overriding tool allow/deny lists for Gemini (PR #10592 by @hannesrudolph)
- Fix: Stabilize file paths during native tool call streaming to prevent path corruption (PR #10555 by @daniel-lxs)
- Fix: Disable Gemini thought signature persistence to prevent corrupted signature errors (PR #10554 by @daniel-lxs)
- Fix: Change minItems from 2 to 1 for Anthropic API compatibility (PR #10551 by @daniel-lxs)
- Implement sticky provider profile for task-level API config persistence (#8010 by @hannesrudolph, PR #10018 by @hannesrudolph)
- Add support for image file @mentions (PR #10189 by @hannesrudolph)
- Add debug-mode proxy routing for debugging API calls (#7042 by @SleeperSmith, PR #10467 by @hannesrudolph)
- Add Kimi K2 thinking model to Fireworks AI provider (#9201 by @kavehsfv, PR #9202 by @roomote)
- Add image support documentation to read_file native tool description (#10440 by @nabilfreeman, PR #10442 by @roomote)
- Add zai-glm-4.7 to Cerebras models (PR #10500 by @sebastiand-cerebras)
- Tweak the style of follow up suggestion modes (PR #9260 by @mrubens)
- Fix: Handle PowerShell ENOENT error in os-name on Windows (#9859 by @Yang-strive, PR #9897 by @roomote)
- Fix: Make command chaining examples shell-aware for Windows compatibility (#10352 by @AlexNek, PR #10434 by @roomote)
- Fix: Preserve tool_use blocks for all tool_results in kept messages during condensation (PR #10471 by @daniel-lxs)
- Fix: Add additionalProperties: false to MCP tool schemas for OpenAI Responses API (PR #10472 by @daniel-lxs)
- Fix: Prevent duplicate tool_result blocks causing API errors (PR #10497 by @daniel-lxs)
- Fix: Add explicit deduplication for duplicate tool_result blocks (#10465 by @nabilfreeman, PR #10466 by @roomote)
- Fix: Use task stored API config as fallback for rate limit (PR #10266 by @roomote)
- Fix: Remove legacy Claude 2 series models from Bedrock provider (#9220 by @KevinZhao, PR #10501 by @roomote)
- Fix: Add missing description fields for debugProxy configuration (PR #10505 by @roomote) @objectiveSee)
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,5 @@ qdrant_storage/
.secrets
# Architect plans
./plans/

roo-cli-*.tar.gz*
42 changes: 21 additions & 21 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,42 +45,42 @@ Agents are forked processes configured via the `AGENT_CONFIG` environment variab
import { fork } from "child_process"

const agent = fork(require.resolve("@kilocode/agent-runtime/process"), [], {
env: {
AGENT_CONFIG: JSON.stringify({
workspace: "/path/to/project",
providerSettings: { apiProvider: "anthropic", apiKey: "..." },
mode: "code",
autoApprove: false,
}),
},
stdio: ["pipe", "pipe", "pipe", "ipc"],
env: {
AGENT_CONFIG: JSON.stringify({
workspace: "/path/to/project",
providerSettings: { apiProvider: "anthropic", apiKey: "..." },
mode: "code",
autoApprove: false,
}),
},
stdio: ["pipe", "pipe", "pipe", "ipc"],
})

agent.on("message", (msg) => {
if (msg.type === "ready") {
agent.send({ type: "sendMessage", payload: { type: "newTask", text: "Fix the bug" } })
}
if (msg.type === "ready") {
agent.send({ type: "sendMessage", payload: { type: "newTask", text: "Fix the bug" } })
}
})
```

### Message Protocol

| Direction | Type | Description |
|-----------|------|-------------|
| Parent → Agent | `sendMessage` | Send user message to extension |
| Direction | Type | Description |
| -------------- | -------------- | ------------------------------ |
| Parent → Agent | `sendMessage` | Send user message to extension |
| Parent → Agent | `injectConfig` | Update extension configuration |
| Parent → Agent | `shutdown` | Gracefully terminate agent |
| Agent → Parent | `ready` | Agent initialized |
| Agent → Parent | `message` | Extension message |
| Agent → Parent | `stateChange` | State updated |
| Parent → Agent | `shutdown` | Gracefully terminate agent |
| Agent → Parent | `ready` | Agent initialized |
| Agent → Parent | `message` | Extension message |
| Agent → Parent | `stateChange` | State updated |

### Detecting Agent Context

Code running in agent processes can check for the `AGENT_CONFIG` environment variable. This is set by the agent manager when spawning processes:

```typescript
if (process.env.AGENT_CONFIG) {
// Running as spawned agent - disable worker pools, etc.
// Running as spawned agent - disable worker pools, etc.
}
```

Expand All @@ -93,7 +93,7 @@ The Agent Manager follows a **read-shared, write-isolated** pattern:

```typescript
fork(agentRuntimePath, [], {
env: { AGENT_CONFIG: JSON.stringify({ workspace, providerSettings, mode, sessionId }) }
env: { AGENT_CONFIG: JSON.stringify({ workspace, providerSettings, mode, sessionId }) },
})
```

Expand Down
116 changes: 116 additions & 0 deletions apps/cli/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# Changelog

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

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.0.45] - 2026-01-08

### Changed

- **Major Refactor**: Extracted ~1400 lines from [`App.tsx`](src/ui/App.tsx) into reusable hooks and utilities for better maintainability:

- [`useExtensionHost`](src/ui/hooks/useExtensionHost.ts) - Extension host connection and lifecycle management
- [`useMessageHandlers`](src/ui/hooks/useMessageHandlers.ts) - Message processing and state updates
- [`useTaskSubmit`](src/ui/hooks/useTaskSubmit.ts) - Task submission logic
- [`useGlobalInput`](src/ui/hooks/useGlobalInput.ts) - Global keyboard shortcut handling
- [`useFollowupCountdown`](src/ui/hooks/useFollowupCountdown.ts) - Auto-approval countdown logic
- [`useFocusManagement`](src/ui/hooks/useFocusManagement.ts) - Input focus state management
- [`usePickerHandlers`](src/ui/hooks/usePickerHandlers.ts) - Picker component event handling
- [`uiStateStore`](src/ui/stores/uiStateStore.ts) - UI-specific state (showExitHint, countdown, etc.)
- Tool data utilities ([`extractToolData`](src/ui/utils/toolDataUtils.ts), `formatToolOutput`, etc.)
- [`HorizontalLine`](src/ui/components/HorizontalLine.tsx) component

- **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`](src/ui/components/tools/ModeTool.tsx) 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`](src/ui/components/Icon.tsx) 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.

- [`FileReadTool`](src/ui/components/tools/FileReadTool.tsx) - Display file read operations with syntax highlighting
- [`FileWriteTool`](src/ui/components/tools/FileWriteTool.tsx) - Show file write/edit operations with diff views
- [`SearchTool`](src/ui/components/tools/SearchTool.tsx) - Render search results with context
- [`CommandTool`](src/ui/components/tools/CommandTool.tsx) - Display command execution with output
- [`BrowserTool`](src/ui/components/tools/BrowserTool.tsx) - Show browser automation actions
- [`ModeTool`](src/ui/components/tools/ModeTool.tsx) - Display mode switching operations
- [`CompletionTool`](src/ui/components/tools/CompletionTool.tsx) - Show task completion status
- [`GenericTool`](src/ui/components/tools/GenericTool.tsx) - Fallback renderer for other tools

- **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`](src/ui/components/autocomplete/triggers/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`](src/ui/components/ToastDisplay.tsx) component for rendering toast messages
- New [`useToast`](src/ui/hooks/useToast.ts) 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`](src/ui/utils/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!
Loading
Loading