Skip to content

Commit fdf95e5

Browse files
author
Zeph Gillen
committed
Merge upstream v3.58.1 into local/daily-driver
Brings in 30 upstream commits (v3.56.0 → v3.58.1). Notable features: - Zoo Gateway provider (types, handler, model fetcher, auth/token sync, settings UI) - Gemini 3.5 Flash (Vertex) - Semble: local on-the-fly embedding+search provider for code-index (Zoo-Code-Org#399) - Privacy: remove extension-side LLM telemetry; gateway-only server logs (Zoo-Code-Org#346) (deletes src/services/zoo-telemetry.ts + test — upstream intent) - WorkspacePathResolver (symlink-aware path canonicalization) - Configurable chat font size; VS Code integrated-terminal shell override - GitHub-style markdown alerts in the webview - Z.ai GLM configurable max output tokens (supportsMaxTokens) - Security dep bumps (axios, mermaid, etc.) Conflict resolutions (3 files; everything else auto-merged): packages/types/src/vscode-extension-host.ts Both sides appended a field after `debug`. Kept BOTH: our `codebaseIndexConfigSources` (dotfile-origin map for the pinned-by-dotfile badges) and upstream's `platform`/`arch` (semble binary availability). src/services/code-index/config-manager.ts Upstream added a `semble` arm to the per-provider if/else that selects embedderProvider; our rework had already replaced that chain with a direct assignment from the resolved config. Kept our direct assignment — the resolver (config-resolver.ts) defaults unset/invalid to "openai" exactly like upstream's else-branch, and the resolved type now includes "semble", so every provider (incl. the new one) carries through. Upstream's isConfigured() semble early-return auto-applied cleanly alongside it. webview-ui/src/components/chat/CodeIndexPopover.tsx Upstream wraps the Qdrant URL+key blocks in `{provider !== "semble" && (…)}` (Qdrant is hidden when semble is selected, since semble needs no Qdrant); we had added dotfile "pinned" badges + `disabled` to the Qdrant URL field. Merged: kept upstream's semble conditional wrapper AND our badge/disabled logic inside it. Also folded both into the single useExtensionState() destructure and kept both the saveScope state and semble platform-gate. Semble vs our workspace-scoped code-index rework are orthogonal: semble is a *which-embedder* choice (parallel indexing path that bypasses Qdrant), our work is *where-config-comes-from* (global/workspace/dotfile layering). They compose — manager.ts auto-merged keeping both the SembleProvider path and our dotfile watchers/dispose logic. Vertex Opus 4.8 retains our effort-shape entry (no supportsReasoningBudget); upstream's new gemini-3.5-flash entry slotted in above it cleanly. The silent-automerge 400 trap from the 3.56.0 merge did not recur (verified). Verification: - pnpm -w check-types: 11/11 clean - pnpm -w lint: 11/11 clean - pnpm -w test: 22 failures, all pre-existing in reasoning.spec.ts and model-params.spec.ts (fd93c5b baseline). +281 new upstream tests pass. Zero new failures. Follow-ups unchanged from 3.56.0: Vertex Opus 4.7 still uses the legacy budget shape (live 400); CodeIndexPopover semble/badge interaction is compile-verified but not yet render-verified.
2 parents d8b2cc2 + 52c4473 commit fdf95e5

231 files changed

Lines changed: 13310 additions & 2407 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/actions/setup-node-pnpm/action.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,22 @@ runs:
2424
using: "composite"
2525
steps:
2626
- name: Install pnpm
27-
uses: pnpm/action-setup@v4
27+
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
2828
with:
2929
version: ${{ inputs.pnpm-version }}
3030
- name: Get pnpm store directory
3131
shell: bash
3232
run: |
3333
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
3434
- name: Setup pnpm cache
35-
uses: actions/cache@v4
35+
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
3636
with:
3737
path: ${{ env.STORE_PATH }}
3838
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
3939
restore-keys: |
4040
${{ runner.os }}-pnpm-store-
4141
- name: Setup Node.js
42-
uses: actions/setup-node@v4
42+
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
4343
with:
4444
node-version: ${{ inputs.node-version }}
4545
- name: Install dependencies

.github/workflows/cli-release.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434

3535
steps:
3636
- name: Checkout code
37-
uses: actions/checkout@v4
37+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
3838
with:
3939
fetch-depth: 0
4040

@@ -195,7 +195,7 @@ jobs:
195195
rm -rf "$VERIFY_DIR"
196196
197197
- name: Upload artifact
198-
uses: actions/upload-artifact@v4
198+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
199199
with:
200200
name: cli-${{ matrix.platform }}
201201
path: |
@@ -213,7 +213,7 @@ jobs:
213213

214214
steps:
215215
- name: Checkout code
216-
uses: actions/checkout@v4
216+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
217217

218218
- name: Get version
219219
id: version
@@ -227,7 +227,7 @@ jobs:
227227
echo "tag=cli-v$VERSION" >> $GITHUB_OUTPUT
228228
229229
- name: Download all artifacts
230-
uses: actions/download-artifact@v4
230+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
231231
with:
232232
path: artifacts
233233

@@ -373,7 +373,7 @@ jobs:
373373

374374
steps:
375375
- name: Download all artifacts
376-
uses: actions/download-artifact@v4
376+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
377377
with:
378378
path: artifacts
379379

.github/workflows/code-qa.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
runs-on: ubuntu-latest
1515
steps:
1616
- name: Checkout code
17-
uses: actions/checkout@v4
17+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
1818
- name: Setup Node.js and pnpm
1919
uses: ./.github/actions/setup-node-pnpm
2020
- name: Verify all translations are complete
@@ -24,7 +24,7 @@ jobs:
2424
runs-on: ubuntu-latest
2525
steps:
2626
- name: Checkout code
27-
uses: actions/checkout@v4
27+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
2828
- name: Setup Node.js and pnpm
2929
uses: ./.github/actions/setup-node-pnpm
3030
- name: Run knip checks
@@ -34,7 +34,7 @@ jobs:
3434
runs-on: ubuntu-latest
3535
steps:
3636
- name: Checkout code
37-
uses: actions/checkout@v4
37+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
3838
- name: Setup Node.js and pnpm
3939
uses: ./.github/actions/setup-node-pnpm
4040
- name: Lint
@@ -58,12 +58,12 @@ jobs:
5858
upload-coverage: false
5959
steps:
6060
- name: Checkout code
61-
uses: actions/checkout@v4
61+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
6262
- name: Setup Node.js and pnpm
6363
uses: ./.github/actions/setup-node-pnpm
6464
- name: Restore Turbo cache
6565
id: turbo-cache
66-
uses: actions/cache/restore@v4
66+
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
6767
with:
6868
path: .turbo/cache
6969
key: ${{ runner.os }}-turbo-${{ hashFiles('**/pnpm-lock.yaml') }}-${{ github.sha }}
@@ -78,7 +78,7 @@ jobs:
7878
run: pnpm turbo run test:coverage:integration --filter="@roo-code/core" --log-order grouped --output-logs new-only
7979
- name: Save Turbo cache
8080
if: steps.turbo-cache.outputs.cache-hit != 'true'
81-
uses: actions/cache/save@v4
81+
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
8282
with:
8383
path: .turbo/cache
8484
key: ${{ steps.turbo-cache.outputs.cache-primary-key }}
@@ -94,7 +94,7 @@ jobs:
9494
# See https://docs.codecov.com/docs/flags
9595
- name: Upload non-core coverage to Codecov
9696
if: matrix.upload-coverage
97-
uses: codecov/codecov-action@v4
97+
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4
9898
with:
9999
files: >-
100100
src/coverage/lcov.info,
@@ -107,15 +107,15 @@ jobs:
107107
token: ${{ secrets.CODECOV_TOKEN }}
108108
- name: Upload core unit coverage to Codecov
109109
if: matrix.upload-coverage
110-
uses: codecov/codecov-action@v4
110+
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4
111111
with:
112112
files: packages/core/coverage/unit/lcov.info
113113
disable_search: true
114114
flags: ${{ matrix.codecov-flag }},core-unit
115115
token: ${{ secrets.CODECOV_TOKEN }}
116116
- name: Upload core integration coverage to Codecov
117117
if: matrix.upload-coverage
118-
uses: codecov/codecov-action@v4
118+
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4
119119
with:
120120
files: packages/core/coverage/integration/lcov.info
121121
disable_search: true

.github/workflows/codeql.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ jobs:
4343
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
4444
steps:
4545
- name: Checkout repository
46-
uses: actions/checkout@v4
46+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
4747

4848
# Initializes the CodeQL tools for scanning.
4949
- name: Initialize CodeQL
50-
uses: github/codeql-action/init@v3
50+
uses: github/codeql-action/init@03e4368ac7daa2bd82b3e85262f3bf87ee112f57 # v3
5151
with:
5252
languages: ${{ matrix.language }}
5353
build-mode: ${{ matrix.build-mode }}
@@ -75,6 +75,6 @@ jobs:
7575
exit 1
7676
7777
- name: Perform CodeQL Analysis
78-
uses: github/codeql-action/analyze@v3
78+
uses: github/codeql-action/analyze@03e4368ac7daa2bd82b3e85262f3bf87ee112f57 # v3
7979
with:
8080
category: "/language:${{matrix.language}}"

.github/workflows/e2e.yml

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,6 @@ on:
44
workflow_dispatch:
55
pull_request:
66
types: [opened, reopened, ready_for_review, synchronize]
7-
paths:
8-
- "src/**"
9-
- "webview-ui/**"
10-
- "apps/vscode-e2e/**"
11-
- "packages/core/**"
12-
- "package.json"
13-
- "pnpm-lock.yaml"
14-
- "turbo.json"
15-
- ".github/actions/setup-node-pnpm/**"
167
merge_group:
178
types: [checks_requested]
189

@@ -22,10 +13,41 @@ jobs:
2213
timeout-minutes: 30
2314
steps:
2415
- name: Checkout code
25-
uses: actions/checkout@v4
16+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
17+
18+
- name: Restore mocked E2E pass marker
19+
id: e2e-marker
20+
uses: actions/cache/restore@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
21+
with:
22+
path: .cache/e2e-pass
23+
# packages/** is intentionally broader than the old packages/core/** to avoid false cache hits when any package changes
24+
# base_ref is included to prevent same-repo branches from stuffing a pass marker for a different base
25+
key: ${{ runner.os }}-mocked-e2e-${{ github.base_ref }}-${{ hashFiles('src/**', 'webview-ui/**', 'apps/vscode-e2e/**', 'packages/**', 'package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml', 'turbo.json', '.github/workflows/e2e.yml', '.github/actions/setup-node-pnpm/**') }}
26+
27+
- name: Use cached mocked E2E result
28+
if: github.event_name == 'pull_request' && steps.e2e-marker.outputs.cache-hit == 'true'
29+
run: echo "Skipping mocked E2E tests because this source hash already passed."
30+
2631
- name: Setup Node.js and pnpm
32+
if: github.event_name != 'pull_request' || steps.e2e-marker.outputs.cache-hit != 'true'
2733
uses: ./.github/actions/setup-node-pnpm
2834
- name: Install xvfb
35+
if: github.event_name != 'pull_request' || steps.e2e-marker.outputs.cache-hit != 'true'
2936
run: sudo apt-get install -y xvfb
3037
- name: Run mocked E2E tests
38+
id: run-e2e
39+
# merge_group and workflow_dispatch always run; cache skip is pull_request only
40+
if: github.event_name != 'pull_request' || steps.e2e-marker.outputs.cache-hit != 'true'
3141
run: xvfb-run -a pnpm --filter @roo-code/vscode-e2e test:ci:mock
42+
43+
- name: Write mocked E2E pass marker
44+
if: steps.e2e-marker.outputs.cache-hit != 'true' && steps.run-e2e.outcome == 'success'
45+
run: mkdir -p .cache/e2e-pass && date -u > .cache/e2e-pass/passed
46+
47+
- name: Save mocked E2E pass marker
48+
if: steps.e2e-marker.outputs.cache-hit != 'true' && steps.run-e2e.outcome == 'success'
49+
continue-on-error: true
50+
uses: actions/cache/save@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
51+
with:
52+
path: .cache/e2e-pass
53+
key: ${{ steps.e2e-marker.outputs.cache-primary-key }}

.github/workflows/marketplace-publish.yml

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

1516
steps:
1617
- name: Checkout code
17-
uses: actions/checkout@v4
18+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
1819

1920
- name: Setup Node.js and pnpm
2021
uses: ./.github/actions/setup-node-pnpm
@@ -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: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ concurrency:
1515
jobs:
1616
publish-prerelease:
1717
runs-on: ubuntu-latest
18+
environment: marketplace-prerelease
1819

1920
steps:
2021
- name: Checkout code
21-
uses: actions/checkout@v4
22+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
2223

2324
- name: Setup Node.js and pnpm
2425
uses: ./.github/actions/setup-node-pnpm
@@ -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:

.github/workflows/release-validation.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424

2525
steps:
2626
- name: Checkout code
27-
uses: actions/checkout@v4
27+
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
2828

2929
- name: Setup Node.js and pnpm
3030
uses: ./.github/actions/setup-node-pnpm

.roo/commands/release.md

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,16 +36,9 @@ mode: code
3636
- Do not manually edit `src/README.md`; the extension bundle step copies root `README.md` into `src/README.md`.
3737
- Check for stale upstream Roo Code wording that should now say Zoo Code.
3838

39-
6. Create the release notes as a changeset file at `.changeset/v[version].md`, then run `pnpm changeset:version` on the release branch before opening the PR.
40-
41-
```md
42-
---
43-
"zoo-code": patch|minor|major
44-
---
45-
46-
[list of changes]
47-
```
39+
6. Write the release notes directly into `CHANGELOG.md` on the release branch.
4840

41+
- Use the heading format `## [version]` (with square brackets) — e.g. `## [3.58.1]`. The publish workflow at `.github/workflows/marketplace-publish.yml` extracts release notes by matching this exact pattern; headings without brackets will be missed and the GitHub release will fall back to a generic message.
4942
- Always include contributor attribution and the PR number: use `(PR #<prNumber> by @username)`.
5043
- For PRs that close issues, include both issue and PR authors: `- Fix: Description (#123 by @reporter, PR #456 by @contributor)`.
5144
- For PRs without linked issues, include the PR number and author: `- Add support for feature (PR #456 by @contributor)`.
@@ -58,21 +51,19 @@ mode: code
5851
- Ask the user what three areas should be highlighted.
5952
- 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`.
6053
- 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.
54+
- 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.
55+
- All 17 locale READMEs should contain a translated "What's New" section. Check each one and add a translated section where missing.
6256
6357
8. Create the release branch:
6458
6559
```bash
6660
git checkout -b release/v[version]
6761
```
6862
69-
9. Generate the final release state on that branch:
70-
71-
```bash
72-
pnpm changeset:version
73-
```
63+
9. Bump the version in `src/package.json` to the target release version and ensure `CHANGELOG.md` and `src/CHANGELOG.md` are up to date.
7464
75-
- This should update `src/package.json`, `CHANGELOG.md`, and `src/CHANGELOG.md`, then consume the `.changeset` file.
65+
- Verify the `CHANGELOG.md` heading uses `## [version]` (with brackets).
66+
- Copy or sync `CHANGELOG.md` to `src/CHANGELOG.md` if the project keeps both.
7667
- Review the generated version and changelog before opening the PR.
7768
7869
10. Open a single release PR with the fully generated release state.

CHANGELOG.md

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

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

537
### Minor Changes

0 commit comments

Comments
 (0)