Skip to content

Commit 5f154ce

Browse files
authored
Merge branch 'main' into feat/friendli-reasoning-params-clean
2 parents 6b0dfa7 + c322f3c commit 5f154ce

182 files changed

Lines changed: 5459 additions & 2311 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/code-qa.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,3 +170,17 @@ jobs:
170170
disable_search: true
171171
flags: ${{ matrix.codecov-flag }},core-integration
172172
token: ${{ secrets.CODECOV_TOKEN }}
173+
- name: Upload coverage reports to GitHub
174+
if: matrix.upload-coverage
175+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
176+
with:
177+
name: coverage-reports-${{ matrix.name }}
178+
path: |
179+
src/coverage/lcov.info
180+
webview-ui/coverage/lcov.info
181+
packages/cloud/coverage/lcov.info
182+
packages/telemetry/coverage/lcov.info
183+
apps/cli/coverage/lcov.info
184+
packages/core/coverage/unit/lcov.info
185+
packages/core/coverage/integration/lcov.info
186+
retention-days: 7
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
name: Post weekly release reminder
2+
3+
# Requires repo secret DISCORD_RELEASE_WEBHOOK_URL — Discord webhook for the
4+
# release-reminders channel. The reminder job fails (noisily) if it is unset.
5+
6+
on:
7+
schedule:
8+
# Friday at 09:00 UTC
9+
- cron: "0 9 * * 5"
10+
workflow_dispatch:
11+
12+
permissions: {}
13+
14+
concurrency:
15+
group: release-reminder
16+
# A re-run produces an identical message, so cancel a stale/duplicate run
17+
# rather than risk posting twice.
18+
cancel-in-progress: true
19+
20+
jobs:
21+
remind:
22+
runs-on: ubuntu-latest
23+
steps:
24+
- name: Post release reminder to Discord
25+
env:
26+
DISCORD_RELEASE_WEBHOOK_URL: ${{ secrets.DISCORD_RELEASE_WEBHOOK_URL }}
27+
run: |
28+
set -euo pipefail
29+
owners=("Elliott" "Navad" "Toray")
30+
anchor_date="2026-07-17"
31+
seconds_since_anchor=$(($(date -u +%s) - $(date -u -d "$anchor_date" +%s)))
32+
weeks_since_anchor=$((seconds_since_anchor / 604800))
33+
owner="${owners[$((weeks_since_anchor % ${#owners[@]}))]}"
34+
35+
message=$(cat <<EOF
36+
**Weekly release reminder**
37+
38+
**${owner}** is on deck for this week's Zoo Code release.
39+
40+
1. Create the release branch and prepare the release with \`.roo/commands/release.md\`.
41+
2. Get the release PR approved.
42+
3. Tag the release branch to trigger the Marketplace publish workflow.
43+
4. Approve the deployment when the \`marketplace-production\` environment requests it.
44+
5. After publishing succeeds, add the release PR to the merge queue.
45+
46+
Avoid merging or rebasing the release branch before publishing, so the approved tag keeps the intended commit SHA.
47+
48+
More detail: https://discord.com/channels/1497384592494297201/1498024845945081999/1512914847124291667
49+
EOF
50+
)
51+
52+
payload=$(jq -n --arg content "$message" '{content: $content}')
53+
curl --fail-with-body --silent --show-error \
54+
--header 'Content-Type: application/json' \
55+
--data "$payload" \
56+
"$DISCORD_RELEASE_WEBHOOK_URL"
57+
58+
- name: Notify on failure
59+
if: failure()
60+
env:
61+
DISCORD_RELEASE_WEBHOOK_URL: ${{ secrets.DISCORD_RELEASE_WEBHOOK_URL }}
62+
run: |
63+
set -euo pipefail
64+
payload=$(jq -nc --arg content "⚠️ release-reminder workflow failed — see the Actions runs." '{content: $content}')
65+
curl --fail-with-body --silent --show-error \
66+
--header 'Content-Type: application/json' \
67+
--data "$payload" \
68+
"$DISCORD_RELEASE_WEBHOOK_URL" || true

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
# Zoo Code Changelog
22

3+
## [3.70.0]
4+
5+
### Minor Changes
6+
7+
- Add Kenari as a first-class provider, an Indonesian OpenAI-compatible AI gateway billed in Rupiah covering Claude, GPT, DeepSeek, GLM, Kimi and more (#792 by @doedja, PR #793 by @doedja)
8+
- Add OpenAI GPT-5.6 family support (sol, terra, luna) across both OpenAI Codex and OpenAI Native provider paths (#871 by @xRaTcHeT302, PR #876 by @navedmerchant)
9+
- Add Grok 4.5 support and fix a latent xAI reasoning-effort format bug affecting Grok 4 Mini (#866 by @navedmerchant, PR #867 by @navedmerchant)
10+
- Surface the context-compaction button and context window progress bar in the collapsed task header so context pressure can be monitored and acted on without expanding it (#606 by @awschmeder, PR #680 by @awschmeder)
11+
- Fix(terminal): fix output loss and premature task completion on cold terminals by reading command output only after shell execution actually starts (#800 by @juneleung, PR #834 by @edelauna)
12+
- Fix(zoo-gateway): enable image attach for Zoo Gateway and Vercel AI Gateway models based on live vision-capability tags instead of a static allowlist (PR #897 by @JamesRobert20)
13+
- Chore(deps): routine dependency updates (PRs #807-#828 by @app/renovate)
14+
315
## [3.68.0]
416

517
### Minor Changes

README.md

Lines changed: 17 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -16,35 +16,17 @@
1616
1717
## We are Zoo Code
1818

19-
> You may have seen the
20-
> [recent announcement](https://x.com/mattrubens/status/2046636598859559114)
21-
> from the Roo team 🦘🦘🦘. The TLDR is the team is winding down active Roo
22-
> Code development as they focus on [Roomote](https://roomote.dev/). That news
23-
> was difficult for many Roo users, this plugin means a lot to this community.
19+
> Zoo Code continues development of this project after the Roo team wound down
20+
> active Roo Code work to focus on [Roomote](https://roomote.dev/). Thank you
21+
> to the Roo team for everything they built.
2422
>
25-
> We want to thank the entire Roo team for the work they put into this plugin.
26-
> We won't call out each person by name here, but we can all agree they are
27-
> exceptional developers and, just as importantly, incredible people. Thank you
28-
> to the Roo team.
29-
>
30-
> As Roo coders, we come in all kinds of shapes and sizes. Some of us are using
31-
> it professionally in our day-to-day work, some are using it to tinker and
32-
> scheme unimaginably complicated workflows. Some are using it to improve Roo
33-
> itself while others are using it to improve the very models that Roo is using
34-
> (super meta). The point we are making is that the community is
35-
> diverse, and although a kangaroo 🦘🦘🦘 is a distinguished and noble animal,
36-
> we felt a "Zoo" 🐘🦡🦒🦓🦛🦧🦭🦦 of different species better reflected this
37-
> diversity of the plugin's users.
38-
>
39-
> So we would like to announce that **Zoo Code** will continue development on
40-
> this important project. The core team is a group of developers who contributed
41-
> to Roo previously and care deeply about this plugin. We will continue to make
42-
> model updates, fix bugs, and release features. But more than anything, we plan
43-
> to listen to the community that made this plugin so special. Feel free to join
44-
> us on [Discord](https://discord.gg/VxfP4Vx3gX),
23+
> The core team is a group of developers who contributed to Roo previously and
24+
> care deeply about this plugin. We will continue to make model updates, fix
25+
> bugs, and release features, and we plan to listen closely to the community
26+
> that made this plugin so special. Join us on
27+
> [Discord](https://discord.gg/VxfP4Vx3gX),
4528
> [Reddit](https://www.reddit.com/r/ZooCode), or
46-
> [open a PR or issue](https://github.com/Zoo-Code-Org/Zoo-Code), and above all,
47-
> please stay involved, connected, and active as a community.
29+
> [open a PR or issue](https://github.com/Zoo-Code-Org/Zoo-Code).
4830
>
4931
> _-Zoo Code Team_
5032
@@ -53,15 +35,15 @@
5335
You can find a quick guide for migrating from Roo Code to Zoo Code in the [Roo→Zoo migration guide](https://docs.zoocode.dev/roo-to-zoo-migration). We plan to try and help users as they transition over, we have our [Reddit](https://www.reddit.com/r/ZooCode) and [Discord](https://discord.gg/VxfP4Vx3gX)
5436
for this exact support, so if you are having problems or if you have question, jump on and ask.
5537

56-
## What's New in v3.68.0
38+
## What's New in v3.70.0
5739

58-
- **Friendli provider with GLM-5.2 support**use the latest GLM model through Friendli.
59-
- **Native Ollama thinking/reasoning support**preserve reasoning output end-to-end when you use Ollama models.
60-
- **Anthropic custom `apiModelId` fix**custom Anthropic model IDs now stay selected instead of silently falling back to `claude-sonnet-4-5`.
61-
- Fix: Ollama provider tool result handling and premature context condensing.
62-
- Fix: preserve the parent-child task link when a delegated subtask is interrupted.
63-
- Improve Anthropic Vertex Claude content block handling for more reliable responses.
64-
- CI, nightly publishing, and dependency/tooling updates.
40+
- **OpenAI GPT-5.6 family**`Sol`, `Terra`, and `Luna` are now available across both the OpenAI Codex and OpenAI Native provider paths.
41+
- **Grok 4.5 support**xAI's new flagship model, plus a reasoning-effort format fix that also benefits Grok 4 Mini.
42+
- **Kenari provider support**a first-class, OpenAI-compatible AI gateway billed in Rupiah covering Claude, GPT, DeepSeek, GLM, Kimi and more.
43+
- Surface the context-compaction button and context window progress bar in the collapsed task header.
44+
- Fix: terminal output loss and premature task completion on cold terminals.
45+
- Fix: image attach for Zoo Gateway and Vercel AI Gateway models now follows live vision-capability tags instead of a static allowlist.
46+
- Dependency and tooling updates.
6547

6648
<details>
6749
<summary>🌐 Available languages</summary>

apps/cli/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"@roo-code/core": "workspace:^",
2727
"@roo-code/types": "workspace:^",
2828
"@roo-code/vscode-shim": "workspace:^",
29-
"@trpc/client": "^11.8.1",
29+
"@trpc/client": "^11.18.0",
3030
"@vscode/ripgrep": "^1.15.9",
3131
"commander": "^12.1.0",
3232
"execa": "^9.5.2",
@@ -35,17 +35,18 @@
3535
"p-wait-for": "^5.0.2",
3636
"react": "^19.1.0",
3737
"superjson": "^2.2.6",
38-
"zustand": "^5.0.0"
38+
"zustand": "^5.0.14"
3939
},
4040
"devDependencies": {
4141
"@roo-code/config-eslint": "workspace:^",
42+
"@trpc/server": "^11.18.0",
4243
"@roo-code/config-typescript": "workspace:^",
4344
"@types/node": "20.19.43",
4445
"@types/react": "18.3.31",
4546
"@vitest/coverage-v8": "4.1.9",
4647
"ink-testing-library": "4.0.0",
4748
"rimraf": "6.0.1",
48-
"tsup": "8.5.0",
49+
"tsup": "8.5.1",
4950
"tsx": "4.22.4",
5051
"vitest": "4.1.9"
5152
}

apps/cli/scripts/build.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ create_tarball() {
173173

174174
# Find and copy ripgrep binary
175175
info "Looking for ripgrep binary..."
176-
RIPGREP_PATH=$(find "$REPO_ROOT/node_modules" -path "*/@vscode/ripgrep/bin/rg" -type f 2>/dev/null | head -1)
176+
RIPGREP_PATH=$(find "$REPO_ROOT/node_modules" -path "*/@vscode/ripgrep*/bin/rg" -type f 2>/dev/null | head -1)
177177
if [ -n "$RIPGREP_PATH" ] && [ -f "$RIPGREP_PATH" ]; then
178178
info "Found ripgrep at: $RIPGREP_PATH"
179179
mkdir -p "$RELEASE_DIR/node_modules/@vscode/ripgrep/bin"
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"fixtures": [
3+
{
4+
"match": {
5+
"userMessage": "COLD_SHELL_INIT_E2E"
6+
},
7+
"response": {
8+
"toolCalls": [
9+
{
10+
"name": "execute_command",
11+
"arguments": "{\"command\":\"python3 -c \\\"\\nimport sys\\nprint('cold-init-ok', file=sys.stdout)\\nsys.exit(0)\\n\\\"\"}",
12+
"id": "call_cold_shell_init_001"
13+
}
14+
]
15+
}
16+
}
17+
]
18+
}

apps/vscode-e2e/fixtures/deepseek-v4.json

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,6 @@
1818
]
1919
}
2020
},
21-
{
22-
"match": {
23-
"model": "deepseek-v4-flash",
24-
"toolCallId": "call_dsv4_flash_on_read"
25-
},
26-
"response": {
27-
"toolCalls": [
28-
{
29-
"name": "attempt_completion",
30-
"arguments": "{\"result\":\"DEEPSEEK_V4_MARKER_deepseek_v4_flash_reasoning_on\"}",
31-
"id": "call_dsv4_flash_on_done"
32-
}
33-
]
34-
}
35-
},
3621
{
3722
"match": {
3823
"model": "deepseek-v4-flash",
@@ -49,21 +34,6 @@
4934
]
5035
}
5136
},
52-
{
53-
"match": {
54-
"model": "deepseek-v4-flash",
55-
"toolCallId": "call_dsv4_flash_off_read"
56-
},
57-
"response": {
58-
"toolCalls": [
59-
{
60-
"name": "attempt_completion",
61-
"arguments": "{\"result\":\"DEEPSEEK_V4_MARKER_deepseek_v4_flash_reasoning_off\"}",
62-
"id": "call_dsv4_flash_off_done"
63-
}
64-
]
65-
}
66-
},
6737
{
6838
"match": {
6939
"model": "deepseek-v4-pro",
@@ -82,21 +52,6 @@
8252
]
8353
}
8454
},
85-
{
86-
"match": {
87-
"model": "deepseek-v4-pro",
88-
"toolCallId": "call_dsv4_pro_on_read"
89-
},
90-
"response": {
91-
"toolCalls": [
92-
{
93-
"name": "attempt_completion",
94-
"arguments": "{\"result\":\"DEEPSEEK_V4_MARKER_deepseek_v4_pro_reasoning_on\"}",
95-
"id": "call_dsv4_pro_on_done"
96-
}
97-
]
98-
}
99-
},
10055
{
10156
"match": {
10257
"model": "deepseek-v4-pro",
@@ -112,21 +67,6 @@
11267
}
11368
]
11469
}
115-
},
116-
{
117-
"match": {
118-
"model": "deepseek-v4-pro",
119-
"toolCallId": "call_dsv4_pro_off_read"
120-
},
121-
"response": {
122-
"toolCalls": [
123-
{
124-
"name": "attempt_completion",
125-
"arguments": "{\"result\":\"DEEPSEEK_V4_MARKER_deepseek_v4_pro_reasoning_off\"}",
126-
"id": "call_dsv4_pro_off_done"
127-
}
128-
]
129-
}
13070
}
13171
]
13272
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"fixtures": [
3+
{
4+
"match": {
5+
"userMessage": "FAST_EXIT_SHELL_RACE_E2E"
6+
},
7+
"response": {
8+
"toolCalls": [
9+
{
10+
"name": "execute_command",
11+
"arguments": "{\"command\":\"python3 -c \\\"\\nimport sys\\nprint('boom', file=sys.stderr)\\nsys.exit(1)\\n\\\"\"}",
12+
"id": "call_fast_exit_shell_race_001"
13+
}
14+
]
15+
}
16+
}
17+
]
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"fixtures": [
3+
{
4+
"match": {
5+
"userMessage": "LONG_RUNNING_SILENT_COMMAND_E2E"
6+
},
7+
"response": {
8+
"toolCalls": [
9+
{
10+
"name": "execute_command",
11+
"arguments": "{\"command\":\"sleep 5\"}",
12+
"id": "call_long_running_silent_001"
13+
}
14+
]
15+
}
16+
}
17+
]
18+
}

0 commit comments

Comments
 (0)