Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
37d0bde
feat(SecretStorageService): service for mcp hub to store access and r…
edelauna Mar 6, 2026
5128372
feat(callbackServer): used for OAuth 2.1 callbacks
edelauna Mar 6, 2026
288f147
fix(@modelcontextprotocol): overwrites
edelauna Mar 6, 2026
1aa1184
feat(McpOAuthClientProvider): implementing provider to allow OAuth fo…
edelauna Mar 6, 2026
0afa23c
fix(callbackServer): removing reflected xss and updating template
edelauna Mar 7, 2026
3121d36
fix(McpHub): not blocking on authprovider flow
edelauna Mar 7, 2026
8f314c4
refactor(McpOAuthClientProvider): do not default to openid scope
edelauna Mar 11, 2026
240cc81
feat(McpHub): handle OAuth refresh mid tool call
edelauna Mar 11, 2026
c9f981e
fix(McpOAuthClientProvider): refresh token race condition between cli…
edelauna Mar 12, 2026
441deac
feat(McpHub): update OAuth Flow to be opt in and handle concurrent fl…
edelauna Mar 14, 2026
faffb4b
refactor(McpHub): prompt for authentication even mid tool call
edelauna Mar 25, 2026
ab8d12d
refactor(callbackServer): added in i18n translations
edelauna Mar 25, 2026
7c0d0e3
feat(McpHub): cache whether server required OAuth or not
edelauna Mar 27, 2026
b1d44ce
refactor(McpOAuthClientProvider): add TOKEN_EXPIRY_BUFFER
edelauna Mar 27, 2026
f2a3cfb
refactor(SecretStorageService): caching full DCR repose
edelauna Mar 27, 2026
8eb8be9
refactor(McpHub): making prompt long running or dismissable
edelauna Apr 3, 2026
f10d254
feat(McpHub): handling concurrent window auth
edelauna Apr 24, 2026
fda3e98
feat(McpHub): making oauth less disruptive to flow
edelauna Apr 24, 2026
ba5345c
fix(esbuild): sequence rebuild calls to prevent Windows EBUSY race on…
edelauna Apr 24, 2026
a127704
refactor(McpHub): cleanup crosswindow auths
edelauna Apr 24, 2026
b9d2852
refactor(SecretStorageService): base64 encode server endpoints to avo…
edelauna Apr 24, 2026
cde464e
refactor(callbackServer): make cancellable
edelauna Apr 24, 2026
4f62b40
fix(i18n): catalan strings
edelauna Apr 24, 2026
dab4e2c
test(oauth): restoring mocked global
edelauna Apr 24, 2026
f0e1121
feat(McpOAuthClientProvider): adding callback to cancel callback server
edelauna Apr 24, 2026
05b399b
test: feedback
edelauna Apr 24, 2026
7840d03
empty commit for ci
edelauna Apr 26, 2026
04c7580
Remove Roo Code Cloud from extension and CLI
taltas Apr 28, 2026
d8570e4
Remove Roo Code Router remnants and migrations
taltas Apr 28, 2026
caabce3
Fix CloudService compatibility test singleton usage
taltas Apr 28, 2026
f681e03
Update Roo provider tests for compatibility mode
taltas Apr 28, 2026
6fbf91b
Localize router removal messaging
taltas Apr 29, 2026
5c75bf6
Resolve router removal message at runtime
taltas Apr 29, 2026
ac78824
Add issue templates
taltas Apr 30, 2026
ff931da
Merge pull request #5 from Zoo-Code-Org/remove-roo-cloud
taltas Apr 30, 2026
bb46e6c
Rename Roo Code mentions to Zoo Code in English chat locale
taltas Apr 24, 2026
82ef6fb
Update localized chat locales for Zoo Code rebrand
taltas Apr 24, 2026
1cf8019
Update Roo and Roo code to Zoo and Zoo code
taltas Apr 24, 2026
821fd67
chore: update webview locale translations for Zoo rename
taltas Apr 24, 2026
3449809
chore: rename Roo to Zoo in locale files
taltas Apr 25, 2026
2303d00
chore: rename Roo to Zoo in package strings
taltas Apr 25, 2026
94c62e0
Resolve PR #2 locale merge conflicts after rebase
hannesrudolph Apr 30, 2026
04d5082
fix: restore valid locale JSON for translation check
hannesrudolph Apr 30, 2026
539cd95
Merge pull request #2 from Zoo-Code-Org/roo-to-zoo-upgrade
taltas Apr 30, 2026
9260779
Merge pull request #7 from Zoo-Code-Org/issue-templates
taltas Apr 30, 2026
2e3ec13
Merge pull request #1 from Zoo-Code-Org/feat/mcp-oauth-streamable-http
edelauna May 1, 2026
da4ee2f
Update icons
navedmerchant May 4, 2026
ef080a0
Update icons
navedmerchant May 4, 2026
38bf757
revert roohero change
navedmerchant May 4, 2026
7c4b803
Update icons
navedmerchant May 4, 2026
81afb6c
Merge pull request #15 from Zoo-Code-Org/icons
navedmerchant May 4, 2026
ecb4720
refactor(package.json): updating extension metadata
edelauna May 8, 2026
a442468
feat(ci): add stable and prerelease marketplace publishing
edelauna May 8, 2026
d8a5834
feat(Telemetry): add prerelease channel tags
edelauna May 8, 2026
95a1a15
docs(CHANGELOG): bumping init Zoo version
edelauna May 8, 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 @@ -2,7 +2,7 @@
"$schema": "https://unpkg.com/@changesets/config@3.0.4/schema.json",
"changelog": "./changelog-config.js",
"commit": false,
"fixed": [["roo-cline"]],
"fixed": [["zoo-code"]],
"linked": [],
"access": "restricted",
"baseBranch": "main",
Expand Down
13 changes: 13 additions & 0 deletions .github/ISSUE_TEMPLATE/add-provider-model.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
name: Add provider model
about: Add a provider model that isn't htere
title: ''
labels: model
assignees: ''
type: Task

---

Name of model: (GPT 5.4)
Model creator: (i.e. Open AI)
Link to model:
34 changes: 34 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG] "
labels: bug
assignees: ''
type: Bug

---

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Video**
Add a video of the incident happening, it will help us debug

**What version of zoo are you running**
i.e. 3.55

**Additional context**
Add any other context about the problem here.
21 changes: 21 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
name: Feature request
about: What do you want to add to zoo?
title: ''
labels: enhancement
assignees: ''
type: Feature

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.
151 changes: 84 additions & 67 deletions .github/workflows/marketplace-publish.yml
Original file line number Diff line number Diff line change
@@ -1,92 +1,109 @@
name: Publish Extension
name: Publish Stable Extension

on:
pull_request:
types: [closed]
push:
tags:
- "v*.*.*"
workflow_dispatch:

env:
GIT_REF: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || 'main' }}

jobs:
publish-extension:
publish-stable:
runs-on: ubuntu-latest
permissions:
contents: write # Required for pushing tags.
if: >
( github.event_name == 'pull_request' &&
github.event.pull_request.base.ref == 'main' &&
contains(github.event.pull_request.title, 'Changeset version bump') ) ||
github.event_name == 'workflow_dispatch'
contents: write

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ env.GIT_REF }}

- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
- name: Configure Git
with:
install-args: "--frozen-lockfile"

- name: Validate package identity
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
- name: Create .env file
run: echo "POSTHOG_API_KEY=${{ secrets.POSTHOG_API_KEY }}" >> .env
- name: Package Extension
package_name=$(node -p "require('./src/package.json').name")
publisher=$(node -p "require('./src/package.json').publisher")

test "$package_name" = "zoo-code"
test "$publisher" = "ZooCodeOrganization"

- name: Validate release tag
if: github.event_name == 'push'
run: |
current_package_version=$(node -p "require('./src/package.json').version")
pnpm vsix

# Save VSIX contents to a temporary file to avoid broken pipe issues.
unzip -l bin/roo-cline-${current_package_version}.vsix > /tmp/roo-code-vsix-contents.txt

# Check for required files.
grep -q "extension/package.json" /tmp/roo-code-vsix-contents.txt || exit 1
grep -q "extension/package.nls.json" /tmp/roo-code-vsix-contents.txt || exit 1
grep -q "extension/dist/extension.js" /tmp/roo-code-vsix-contents.txt || exit 1
grep -q "extension/webview-ui/audio/celebration.wav" /tmp/roo-code-vsix-contents.txt || exit 1
grep -q "extension/webview-ui/build/assets/index.js" /tmp/roo-code-vsix-contents.txt || exit 1
grep -q "extension/assets/codicons/codicon.ttf" /tmp/roo-code-vsix-contents.txt || exit 1
grep -q "extension/assets/vscode-material-icons/icons/3d.svg" /tmp/roo-code-vsix-contents.txt || exit 1
grep -q ".env" /tmp/roo-code-vsix-contents.txt || exit 1

# Clean up temporary file.
rm /tmp/roo-code-vsix-contents.txt
- name: Create and Push Git Tag
package_version=$(node -p "require('./src/package.json').version")
tag_version="${GITHUB_REF_NAME#v}"

if [ "$package_version" != "$tag_version" ]; then
echo "Tag v${tag_version} does not match src/package.json version ${package_version}."
exit 1
fi

- name: Package extension
env:
POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }}
run: |
current_package_version=$(node -p "require('./src/package.json').version")
git tag -a "v${current_package_version}" -m "Release v${current_package_version}"
git push origin "v${current_package_version}" --no-verify
echo "Successfully created and pushed git tag v${current_package_version}"
- name: Publish Extension
package_version=$(node -p "require('./src/package.json').version")
pnpm --filter ./src vsix

vsix_path="bin/zoo-code-${package_version}.vsix"
test -f "$vsix_path"

unzip -l "$vsix_path" > /tmp/zoo-code-vsix-contents.txt
grep -q "extension/package.json" /tmp/zoo-code-vsix-contents.txt
grep -q "extension/package.nls.json" /tmp/zoo-code-vsix-contents.txt
grep -q "extension/dist/extension.js" /tmp/zoo-code-vsix-contents.txt
grep -q "extension/webview-ui/audio/celebration.wav" /tmp/zoo-code-vsix-contents.txt
grep -q "extension/webview-ui/build/assets/index.js" /tmp/zoo-code-vsix-contents.txt
grep -q "extension/assets/codicons/codicon.ttf" /tmp/zoo-code-vsix-contents.txt
grep -q "extension/assets/vscode-material-icons/icons/3d.svg" /tmp/zoo-code-vsix-contents.txt

- name: Publish to VS Code Marketplace
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
OVSX_PAT: ${{ secrets.OVSX_PAT }}
run: |
current_package_version=$(node -p "require('./src/package.json').version")
pnpm --filter roo-cline publish:marketplace
echo "Successfully published version $current_package_version to VS Code Marketplace"
- name: Create GitHub Release
package_version=$(node -p "require('./src/package.json').version")
npx @vscode/vsce publish --packagePath "bin/zoo-code-${package_version}.vsix"
echo "Published ZooCodeOrganization.zoo-code ${package_version} to VS Code Marketplace"

- name: Publish to Open VSX Registry
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
OVSX_PAT: ${{ secrets.OVSX_PAT }}
run: |
current_package_version=$(node -p "require('./src/package.json').version")
package_version=$(node -p "require('./src/package.json').version")
pnpm exec ovsx publish "bin/zoo-code-${package_version}.vsix" --skip-duplicate
echo "Published ZooCodeOrganization.zoo-code ${package_version} to Open VSX Registry"

# Extract changelog for current version
echo "Extracting changelog for version ${current_package_version}"
changelog_content=$(sed -n "/## \\[${current_package_version}\\]/,/## \\[/p" CHANGELOG.md | sed '$d')
- name: Create GitHub release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
package_version=$(node -p "require('./src/package.json').version")
if [ "${GITHUB_REF_TYPE:-}" = "tag" ]; then
tag_name="$GITHUB_REF_NAME"
else
tag_name="v${package_version}"
fi
vsix_path="bin/zoo-code-${package_version}.vsix"

# If changelog extraction failed, use a default message
changelog_content=$(awk -v version="$package_version" '
$0 ~ "^## \\[" version "\\]" { found = 1 }
found && $0 == "---" { exit }
found && $0 ~ "^## " && $0 !~ "^## \\[" version "\\]" { exit }
found { print }
' CHANGELOG.md)
if [ -z "$changelog_content" ]; then
echo "Warning: No changelog section found for version ${current_package_version}"
changelog_content="Release v${current_package_version}"
else
echo "Found changelog section for version ${current_package_version}"
changelog_content="Release ${tag_name}"
fi
printf "%s\n" "$changelog_content" > /tmp/zoo-code-release-notes.md

# Create release with changelog content
gh release create "v${current_package_version}" \
--title "Release v${current_package_version}" \
--notes "$changelog_content" \
--target ${{ env.GIT_REF }} \
bin/roo-cline-${current_package_version}.vsix
echo "Successfully created GitHub Release v${current_package_version}"
if gh release view "$tag_name" >/dev/null 2>&1; then
gh release upload "$tag_name" "$vsix_path" --clobber
else
gh release create "$tag_name" \
--title "Zoo Code ${tag_name}" \
--notes-file /tmp/zoo-code-release-notes.md \
--target "$GITHUB_SHA" \
"$vsix_path"
fi
73 changes: 46 additions & 27 deletions .github/workflows/nightly-publish.yml
Original file line number Diff line number Diff line change
@@ -1,52 +1,71 @@
name: Nightly Publish
name: Publish Pre-release Extension

on:
push:
branches: [main]
workflow_dispatch: # Allows manual triggering.

permissions:
contents: read

concurrency:
group: marketplace-prerelease
cancel-in-progress: false

jobs:
publish-nightly:
publish-prerelease:
runs-on: ubuntu-latest

permissions:
contents: read # No tags pushed → read is enough.

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
with:
install-args: '--frozen-lockfile'
- name: Forge numeric Nightly version
install-args: "--frozen-lockfile"

- name: Validate package identity
run: |
package_name=$(node -p "require('./src/package.json').name")
publisher=$(node -p "require('./src/package.json').publisher")

test "$package_name" = "zoo-code"
test "$publisher" = "ZooCodeOrganization"

- name: Set pre-release version
id: version
env:
RUN_NUMBER: ${{ github.run_number }}
run: echo "number=$(( 5500 + ${RUN_NUMBER} ))" >> $GITHUB_OUTPUT
- name: Patch package.json version
env:
VERSION_NUMBER: ${{ steps.version.outputs.number }}
run: |
node <<'EOF'
const fs = require('fs');
const path = require('path');
const pkgPath = path.join(__dirname, 'apps', 'vscode-nightly', 'package.nightly.json');
const pkg = JSON.parse(fs.readFileSync(pkgPath,'utf8'));
const [maj, min] = pkg.version.split('.');
pkg.version = `${maj}.${min}.${process.env.VERSION_NUMBER}`;
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));
console.log(`🔖 Nightly version set to ${pkg.version}`);
const fs = require("fs")
const pkgPath = "src/package.json"
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"))
const [major, minor] = pkg.version.split(".").map(Number)
const prereleaseMinor = minor % 2 === 0 ? minor + 1 : minor
const patch = 100000 + Number(process.env.RUN_NUMBER)

pkg.version = `${major}.${prereleaseMinor}.${patch}`
fs.writeFileSync(pkgPath, `${JSON.stringify(pkg, null, "\t")}\n`)
fs.appendFileSync(process.env.GITHUB_OUTPUT, `number=${pkg.version}\n`)
console.log(`Pre-release version set to ${pkg.version}`)
EOF
- name: Build VSIX
run: pnpm vsix:nightly # Produces bin/roo-code-nightly-0.0.[count].vsix
- name: Publish to VS Code Marketplace

- name: Package pre-release VSIX
env:
VSCE_PAT: ${{ secrets.VSCE_PAT }}
run: npx vsce publish --packagePath "bin/$(/bin/ls bin | head -n1)"
- name: Publish to Open VSX Registry
POSTHOG_API_KEY: ${{ secrets.POSTHOG_API_KEY }}
PKG_RELEASE_CHANNEL: prerelease
run: |
pnpm --filter ./src bundle --production
npx @vscode/vsce package --pre-release --no-dependencies --cwd src --out ../bin

- name: Publish pre-release to VS Code Marketplace
env:
OVSX_PAT: ${{ secrets.OVSX_PAT }}
run: npx ovsx publish "bin/$(ls bin | head -n1)"
VSCE_PAT: ${{ secrets.VSCE_PAT }}
VERSION_NUMBER: ${{ steps.version.outputs.number }}
run: |
npx @vscode/vsce publish --pre-release --packagePath "bin/zoo-code-${VERSION_NUMBER}.vsix"
echo "Published ZooCodeOrganization.zoo-code ${VERSION_NUMBER} as a VS Code Marketplace pre-release"
20 changes: 19 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
# Roo Code Changelog
# Zoo Code Changelog

All notable changes to Zoo Code will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and Zoo Code uses [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [3.54.0] - 2026-05-08

### Added

- Publish Zoo Code under the `ZooCodeOrganization.zoo-code` Marketplace identity, continuing from upstream Roo Code `3.53.0`.
- Add stable publishing workflows for the VS Code Marketplace and Open VSX Registry.
- Add a VS Code Marketplace pre-release workflow.

---

# Archived Roo Code Changelog

The entries below are preserved from the upstream Roo Code project history before the Zoo Code marketplace handoff.

## 3.53.0

Expand Down
Loading
Loading