Skip to content

Commit 281b131

Browse files
authored
Merge branch 'main' into renovate/npm-modelcontextprotocol-sdk-vulnerability
2 parents e6192bc + 79faecd commit 281b131

206 files changed

Lines changed: 10850 additions & 2089 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/marketplace-publish.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ on:
99
jobs:
1010
publish-stable:
1111
runs-on: ubuntu-latest
12+
environment: marketplace-production
1213
permissions:
1314
contents: write
1415

@@ -29,6 +30,13 @@ jobs:
2930
test "$package_name" = "zoo-code"
3031
test "$publisher" = "ZooCodeOrganization"
3132
33+
- name: Validate publish ref
34+
run: |
35+
if [ "$GITHUB_EVENT_NAME" = "workflow_dispatch" ] && [ "$GITHUB_REF_NAME" != "main" ]; then
36+
echo "Manual stable publishes must run from main, not ${GITHUB_REF_NAME}."
37+
exit 1
38+
fi
39+
3240
- name: Validate release tag
3341
if: github.event_name == 'push'
3442
run: |

.github/workflows/nightly-publish.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ concurrency:
1515
jobs:
1616
publish-prerelease:
1717
runs-on: ubuntu-latest
18+
environment: marketplace-prerelease
1819

1920
steps:
2021
- name: Checkout code
@@ -33,6 +34,13 @@ jobs:
3334
test "$package_name" = "zoo-code"
3435
test "$publisher" = "ZooCodeOrganization"
3536
37+
- name: Validate publish ref
38+
run: |
39+
if [ "$GITHUB_REF_NAME" != "main" ]; then
40+
echo "Pre-release publishes must run from main, not ${GITHUB_REF_NAME}."
41+
exit 1
42+
fi
43+
3644
- name: Set pre-release version
3745
id: version
3846
env:

.roo/commands/release.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ mode: code
5858
- Ask the user what three areas should be highlighted.
5959
- Update relevant announcement files and documentation, including `webview-ui/src/components/chat/Announcement.tsx`, `README.md`, and the `latestAnnouncementId` in `src/core/webview/ClineProvider.ts`.
6060
- Ask the user to confirm the English announcement before proceeding.
61-
- Arrange translation updates for all supported locales affected by README, announcement, or package localization changes.
61+
- Arrange translation updates for all supported locales affected by README, announcement, or package localization changes. Use the `/roo-translate` skill to propagate the updated `chat.json` announcement highlight keys and the "What's New" section to all supported locales.
62+
- All 17 locale READMEs should contain a translated "What's New" section. Check each one and add a translated section where missing.
6263
6364
8. Create the release branch:
6465

CHANGELOG.md

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

3+
## 3.58.0
4+
5+
### Minor Changes
6+
7+
- Add Zoo Gateway provider with auth callback and multi-profile token sync (PR #344 by @JamesRobert20, PR #345 by @JamesRobert20, PR #347 by @JamesRobert20)
8+
- Add Gemini 3.5 Flash support (PR #331 by @jeanbispo)
9+
- Add Semble as a local on-the-fly embedding provider for code indexing (PR #399 by @navedmerchant)
10+
- Remove extension-side LLM telemetry; server logs only through gateway (PR #346 by @JamesRobert20)
11+
- Add VS Code integrated terminal shell override (PR #277 by @proyectoauraorg)
12+
- Add configurable chat font size (#157 by @duvw, PR #276 by @proyectoauraorg)
13+
- Render GitHub-style alerts in the webview (#258 by @melck, PR #275 by @proyectoauraorg)
14+
- Add configurable max output tokens for GLM models (#161 by @app/roomote, PR #274 by @proyectoauraorg)
15+
- Introduce WorkspacePathResolver for async symlink-aware path canonicalization (#389 by @edelauna, PR #428 by @proyectoauraorg)
16+
- Better secure release workflows and GitHub Actions (PR #482 by @edelauna)
17+
- Fix React crash from malformed follow-up suggestion mode (PR #414 by @edelauna)
18+
- Fix OpenAI temperature omitted when no custom value is set (#242 by @brunocasado, PR #247 by @proyectoauraorg)
19+
- Handle per-key failures during settings import (PR #401 by @taltas)
20+
- Add comprehensive test coverage for ReadFileTool (PR #222 by @proyectoauraorg)
21+
- Unskip VS Code e2e replay for subtasks (PR #94 by @app/roomote)
22+
- Fix e2e cache: replace paths filter with content-hash cache skip (PR #268 by @app/roomote)
23+
- Remove deprecated requestRooCreditBalance handler (PR #385 by @JamesRobert20)
24+
- Update mermaid to v11.15.0 for a security fix (PR #235 by @app/renovate)
25+
- Update axios to v1.16.0 for a security fix (PR #400 by @app/renovate)
26+
- Pin dependencies (PR #353 by @app/renovate)
27+
- Remove unused tmp dependency and other unused packages (PR #341 by @app/renovate)
28+
329
## 3.56.0
430

531
### Minor Changes

PRIVACY.md

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,6 @@ go—and, importantly, where they don't.
4040
We retain telemetry only as long as needed for product analytics and debugging.
4141
Telemetry does **not** collect your code or AI prompts, and you can opt out at
4242
any time through the settings.
43-
- **Zoo Code Observability (Authenticated Subscribers Only):** If you sign in to
44-
Zoo Code and have an active subscription, Zoo Code will send LLM usage
45-
telemetry to the Zoo Code backend (zoocode.dev). This includes task ID, AI
46-
provider name, model name, token counts (input/output/cache), and estimated
47-
cost. This data is linked to your authenticated Zoo Code account. You can stop
48-
this collection at any time by signing out via the Zoo Code badge in the chat
49-
area.
5043
- **Marketplace Requests**: When you browse or search the Marketplace for Model
5144
Configuration Profiles (MCPs) or Custom Modes, Zoo Code makes a secure API
5245
call to Zoo Code's backend servers to retrieve listing information. These

README.md

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,17 +53,19 @@
5353
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)
5454
for this exact support, so if you are having problems or if you have question, jump on and ask.
5555

56-
## What's New in v3.56.0
57-
58-
- **Claude Opus 4.8** support across Anthropic, Bedrock, and Vertex providers
59-
- **Opencode Go** added as a new first-class API provider
60-
- **Reliable task cancellation** — cancelling a task now terminates the running process, with automatic Ctrl+C retry for stubborn processes
61-
- Fix Gemini custom model IDs being ignored and falling back to the default
62-
- Fix truncated Grok diffs caused by missing diff markers
63-
- Fix PowerShell detection on Windows when no shell profile is configured
64-
- Fix VS Code code actions still showing Roo Code branding; localized into all supported languages
65-
- Fix Vertex AI warning when the Google Cloud Credentials field receives a file path
66-
- Six security dependency updates (diff, i18next-http-backend, fast-xml-parser, simple-git, uuid, turbo)
56+
## What's New in v3.58.0
57+
58+
- **Zoo Gateway** — connect through a managed gateway with multi-profile auth support
59+
- **Gemini 3.5 Flash** — a fast, capable Google model now available from your provider settings
60+
- **Semble embedding** — index your codebase locally with on-the-fly embeddings, no external API key required
61+
- **Configurable chat font size** and **VS Code integrated terminal shell override**
62+
- **GitHub-style alerts** rendered in the webview
63+
- **Configurable max output tokens** for GLM models
64+
- **WorkspacePathResolver** — reliable path handling across symlinked workspaces
65+
- Fix React crash from malformed follow-up suggestion mode
66+
- Fix OpenAI temperature being omitted when no custom value is set
67+
- Handle per-key failures during settings import
68+
- Security updates: mermaid v11.15.0, axios v1.16.0
6769

6870
<details>
6971
<summary>🌐 Available languages</summary>
@@ -87,7 +89,7 @@ for this exact support, so if you are having problems or if you have question, j
8789
- [简体中文](locales/zh-CN/README.md)
8890
- [繁體中文](locales/zh-TW/README.md)
8991
- ...
90-
</details>
92+
</details>
9193

9294
---
9395

apps/cli/package.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@
4141
"devDependencies": {
4242
"@roo-code/config-eslint": "workspace:^",
4343
"@roo-code/config-typescript": "workspace:^",
44-
"@types/node": "^24.1.0",
44+
"@types/node": "24.2.1",
4545
"@types/react": "^19.1.6",
46-
"ink-testing-library": "^4.0.0",
47-
"rimraf": "^6.0.1",
48-
"tsup": "^8.4.0",
49-
"@vitest/coverage-v8": "^3.2.3",
50-
"vitest": "^3.2.3"
46+
"ink-testing-library": "4.0.0",
47+
"rimraf": "6.0.1",
48+
"tsup": "8.5.0",
49+
"@vitest/coverage-v8": "3.2.6",
50+
"vitest": "3.2.6"
5151
}
5252
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"fixtures": [
3+
{
4+
"match": {
5+
"userMessage": "TERMINAL_PROFILE_E2E_OVERRIDE"
6+
},
7+
"response": {
8+
"toolCalls": [
9+
{
10+
"name": "execute_command",
11+
"arguments": "{\"command\":\"printf 'zoo-profile-override-ok\\\\n' > terminal-profile-e2e/terminal-profile-override.txt\"}",
12+
"id": "call_terminal_profile_override_001"
13+
}
14+
]
15+
}
16+
},
17+
{
18+
"match": {
19+
"userMessage": "TERMINAL_PROFILE_E2E_DEFAULT"
20+
},
21+
"response": {
22+
"toolCalls": [
23+
{
24+
"name": "execute_command",
25+
"arguments": "{\"command\":\"printf 'zoo-profile-default-ok\\\\n' > terminal-profile-e2e/terminal-profile-default.txt\"}",
26+
"id": "call_terminal_profile_default_001"
27+
}
28+
]
29+
}
30+
}
31+
]
32+
}

apps/vscode-e2e/package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
"@roo-code/config-typescript": "workspace:^",
1717
"@roo-code/types": "workspace:^",
1818
"@copilotkit/aimock": "1.15.1",
19-
"@types/mocha": "^10.0.10",
20-
"@types/node": "^20.19.25",
21-
"@types/vscode": "^1.95.0",
22-
"@vscode/test-cli": "^0.0.11",
23-
"@vscode/test-electron": "^2.4.0",
24-
"glob": "^11.1.0",
25-
"mocha": "^11.1.0",
26-
"rimraf": "^6.0.1"
19+
"@types/mocha": "10.0.10",
20+
"@types/node": "20.19.41",
21+
"@types/vscode": "1.100.0",
22+
"@vscode/test-cli": "0.0.11",
23+
"@vscode/test-electron": "2.5.2",
24+
"glob": "11.1.0",
25+
"mocha": "11.2.2",
26+
"rimraf": "6.0.1"
2727
}
2828
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { LLMock } from "@copilotkit/aimock"
2+
3+
import { toolResultContains } from "./tool-result"
4+
5+
type TerminalProfileToolCall = {
6+
name: "execute_command" | "attempt_completion"
7+
params: Record<string, unknown>
8+
id: string
9+
}
10+
11+
type TerminalProfileFixture = {
12+
toolCallId: string
13+
expected: string[]
14+
toolCalls: TerminalProfileToolCall[]
15+
}
16+
17+
export function addTerminalProfileResultFixtures(mock: InstanceType<typeof LLMock>) {
18+
const fixtures: TerminalProfileFixture[] = [
19+
{
20+
toolCallId: "call_terminal_profile_override_001",
21+
expected: ["Exit code: 0"],
22+
toolCalls: [
23+
{
24+
name: "attempt_completion",
25+
params: { result: "Ran the command using the Zoo E2E Bash profile override." },
26+
id: "call_terminal_profile_override_002",
27+
},
28+
],
29+
},
30+
{
31+
toolCallId: "call_terminal_profile_default_001",
32+
expected: ["Exit code: 0"],
33+
toolCalls: [
34+
{
35+
name: "attempt_completion",
36+
params: { result: "Ran the command using the default terminal profile." },
37+
id: "call_terminal_profile_default_002",
38+
},
39+
],
40+
},
41+
]
42+
43+
for (const fixture of fixtures) {
44+
mock.addFixture({
45+
match: {
46+
toolCallId: fixture.toolCallId,
47+
predicate: (req) => toolResultContains(req, fixture.toolCallId, fixture.expected),
48+
},
49+
response: {
50+
toolCalls: fixture.toolCalls.map((toolCall) => ({
51+
name: toolCall.name,
52+
arguments: JSON.stringify(toolCall.params),
53+
id: toolCall.id,
54+
})),
55+
},
56+
})
57+
}
58+
}

0 commit comments

Comments
 (0)