Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
6e05ae9
fix(task-history): route invalidate() and invalidateAll() through wit…
morgan-coded Jul 19, 2026
8c17b41
test(task-lifecycle): add regression coverage for issue #566 (interru…
edelauna Jul 20, 2026
45968c0
fix(webview): dismiss welcome after Zoo Gateway sign-in (#961) (#962)
JamesRobert20 Jul 21, 2026
1b372ce
feat: add MiniMax-M3 model (#946)
Jul 21, 2026
b132a6b
feat: enable image support for DeepSeek V4 models (#963)
grizmin Jul 21, 2026
f2bdcb6
feat(moonshot): implement provider with model picker, API fetching, s…
grizmin Jul 21, 2026
3024768
feat(gemini): add Gemini 3.6 Flash support (#975)
Jul 21, 2026
cc2588b
fix(litellm): preserve reasoning_content for known reasoning model fa…
daewoongoh Jul 21, 2026
71a58a1
chore(deps): update dependency esbuild-wasm to v0.28.1 (#829)
renovate[bot] Jul 22, 2026
badb82c
fix(webview): sync cachedState on mode changes in SettingsView (#925)
easonLiangWorldedtech Jul 22, 2026
c6279d8
Fix codebase indexing for plain text files (#938)
WebMad Jul 22, 2026
a7d7968
fix(mcp): remove obsolete server creation translations (#943)
WebMad Jul 22, 2026
c24a8c5
feat(types): centralize provider identifiers (#952)
WebMad Jul 22, 2026
ae89dbd
feat(subtasks): abandon interrupted subtask — sever parent-child link…
edelauna Jul 23, 2026
7af1a8a
refactor(types): use canonical provider identifiers in categories (#989)
WebMad Jul 23, 2026
6fec173
[Feat] Add Kimi K3 model to Moonshot and OpenCode Go providers (#996)
Jul 24, 2026
78c1410
[Feat] Add Kimi Code provider with OAuth device flow (#945)
taltas Jul 24, 2026
e0e7fb9
[Fix] GPT-5.6 Luna requests rejected by Codex backend when using Chat…
taltas Jul 24, 2026
2634d5c
Add Dart support to codebase indexing (#941)
WebMad Jul 24, 2026
d5a8c4a
feat: implement Claude Opus 5 support across all providers (#1010)
Jul 24, 2026
d1f3999
Release v3.72.0 (#1013)
navedmerchant Jul 25, 2026
116acfd
[Fix] Flaky mocked e2e subtasks test when parent resume is served the…
Jul 25, 2026
933ee98
fix(settings): buffer Save-managed settings in cachedState until Save…
JunyongParkDev Jul 25, 2026
2d2a238
fix(ollama): always respond to model refresh, surface errors, and use…
navedmerchant Jul 25, 2026
4e9543f
Fix bedrock DNS resolution when behind a corporate proxy (#906)
LouisClt Jul 25, 2026
e479b7e
chore: update Node.js to v22 LTS (22.23.1) (#743)
renovate[bot] Jul 25, 2026
dfb8d69
fix(architect): instruct plans directory as workspace-relative ./plan…
Jul 25, 2026
ff17dcb
feat(TaskRegistry): introduce TaskRegistry and migrate clineStack (#1…
edelauna Jul 25, 2026
66120b4
chore(deps): update dependency shell-quote to v1.9.0 [security] (#986)
renovate[bot] Jul 26, 2026
1ceb4e6
test(webview): add Playwright visual regression harness (#526)
edelauna Jul 26, 2026
772e716
refactor(api): use canonical provider identifiers (#1012)
WebMad Jul 26, 2026
c52f118
refactor(types): use canonical identifiers for default models (#991)
WebMad Jul 26, 2026
2db2af0
refactor(api): use canonical model cache provider identifiers (#1020)
WebMad Jul 26, 2026
7710513
refactor(shared): use canonical profile provider identifiers (#1019)
WebMad Jul 26, 2026
782e28e
refactor(core): use canonical provider identifiers (#1022)
WebMad Jul 26, 2026
d27153a
fix(ripgrep): support @vscode/ripgrep >=1.18 platform-package layout …
edelauna Jul 26, 2026
ce77a10
fix(providers): add totalCost calculation using user-configured pricing
k1yt Jul 19, 2026
98aa1d6
test(providers): add totalCost tests for OpenAI and OpenAICompatible …
Jul 27, 2026
7cf01c0
fix(lint): replace no-explicit-any with proper types in provider test…
Jul 27, 2026
e54551a
fix(providers): restore moonshot.ts structure and update test asserti…
Jul 27, 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
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .changeset/itchy-moles-thank.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"zoo-code": patch
---

Fix bedrock DNS resolution when behind corporate proxy
2 changes: 1 addition & 1 deletion .github/actions/setup-node-pnpm/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ inputs:
node-version:
description: "Node.js version to use"
required: false
default: "20.20.2"
default: "22.23.1"
pnpm-version:
description: "pnpm version to use"
required: false
Expand Down
27 changes: 24 additions & 3 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,14 +38,35 @@ Detail the steps to test your changes. This helps reviewers verify your work.
- [ ] **Scope**: My changes are focused on the linked issue (one major feature/fix per PR).
- [ ] **Self-Review**: I have performed a thorough self-review of my code.
- [ ] **Testing**: New and/or updated tests have been added to cover my changes (if applicable).
- [ ] **Visual Snapshot** (UI changes only): If a user would notice this change at a glance (layout, theme tokens, brand elements, empty/error states), I've added or updated a `*.visual.tsx` snapshot in `webview-ui/`. See `webview-ui/AGENTS.md` → "When a UI change needs a snapshot".
- [ ] **Documentation Impact**: I have considered if my changes require documentation updates (see "Documentation Updates" section below).
- [ ] **Contribution Guidelines**: I have read and agree to the [Contributor Guidelines](/CONTRIBUTING.md).

### Screenshots / Videos
### Visual Snapshots

<!--
For UI changes, please provide before-and-after screenshots or a short video of the *actual results*.
This greatly helps in understanding the visual impact of your changes.
For UI changes to static rendered state, the primary artifact is a committed
Playwright CT snapshot (`*.visual.tsx` in `webview-ui/`) — that baseline
becomes durable regression coverage for the surface. See
`webview-ui/AGENTS.md` for what deserves a snapshot.

Before/after screenshots pasted here are welcome as a review aid but are not a
substitute for the committed baseline. If a snapshot is possible, prefer the
snapshot.
-->

### Videos (interaction / animation only)

<!--
Snapshots cannot capture motion or multi-step flows. Attach a short screen
recording here when reviewers need to see:
- A new interactive flow (dropdown, form, dialog progression)
- Animation, transition, or timing behavior
- A regression that only manifests during interaction

Videos are a review aid, not regression coverage. If the *result* of the
interaction has a distinct rendered state worth protecting, still commit a
`*.visual.tsx` snapshot of that end-state alongside the video.
-->

### Documentation Updates
Expand Down
15 changes: 11 additions & 4 deletions .github/workflows/code-qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -135,25 +135,32 @@ jobs:
# lanes for behavioral confidence, but duplicating coverage uploads
# there mostly adds Codecov overhead without changing pass/fail
# behavior.
# Coverage is uploaded in three separate steps so each LCOV gets the
# Coverage is uploaded in separate steps so each LCOV gets the
# correct flag set. Codecov double-counts overlapping lines when a
# single upload carries multiple flags whose paths overlap, so the
# two core lanes (which both cover packages/core/src/**) must be
# uploaded individually with their own lane flag.
# core lanes and webview lane must be uploaded individually with
# their own flag.
# See https://docs.codecov.com/docs/flags
- name: Upload non-core coverage to Codecov
if: matrix.upload-coverage
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4
with:
files: >-
src/coverage/lcov.info,
webview-ui/coverage/lcov.info,
packages/cloud/coverage/lcov.info,
packages/telemetry/coverage/lcov.info,
apps/cli/coverage/lcov.info
disable_search: true
flags: ${{ matrix.codecov-flag }}
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload webview JSDOM coverage to Codecov
if: matrix.upload-coverage
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4
with:
files: webview-ui/coverage/lcov.info
disable_search: true
flags: webview-ui
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload core unit coverage to Codecov
if: matrix.upload-coverage
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4
Expand Down
57 changes: 57 additions & 0 deletions .github/workflows/visual-regression.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: Webview Visual Regression

on:
workflow_dispatch:
pull_request:
types: [opened, reopened, ready_for_review, synchronize]
paths:
- "webview-ui/**"
- "src/shared/**"
- "package.json"
- "pnpm-lock.yaml"
- ".github/workflows/visual-regression.yml"
merge_group:
types: [checks_requested]

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
webview-visual:
runs-on: ubuntu-latest
timeout-minutes: 10
container:
image: mcr.microsoft.com/playwright:v1.60.0-noble@sha256:9bd26ad900bb5e0f4dee75839e957a89ae89c2b7ab1e76050e559790e946b948
options: --ipc=host
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
persist-credentials: false
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
with:
install-args: "--frozen-lockfile"
- name: Run webview visual tests
run: pnpm --filter @roo-code/vscode-webview test:visual
- name: Upload visual test coverage to Codecov
if: always()
uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4
with:
files: webview-ui/coverage-ct/lcov.info
disable_search: true
flags: webview-ui-ct
token: ${{ secrets.CODECOV_TOKEN }}
- name: Upload visual test artifacts
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: webview-visual-regression
path: |
webview-ui/playwright-report
webview-ui/test-results
if-no-files-found: ignore
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
20.20.2
22.23.1
2 changes: 1 addition & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
pnpm 10.8.1
nodejs 20.20.2
nodejs 22.23.1
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
# Zoo Code Changelog

## [3.72.0]

### Minor Changes

- Add the Moonshot provider with live model discovery, streaming, model metadata, and a model picker (PR #857 by @grizmin)
- Add the Kimi Code provider with OAuth device-flow authentication (PR #945 by @taltas)
- Add Claude Opus 5 support across all providers (PR #1010 by @app/zoomote)
- Add Kimi K3 to the Moonshot and OpenCode Go providers (#932 by @navedmerchant, PR #996 by @app/zoomote)
- Add Gemini 3.6 Flash model support (PR #975 by @app/zoomote)
- Add MiniMax-M3 model support (#888 by @RayWinter0816, PR #946 by @app/zoomote)
- Add a safe way to abandon interrupted subtasks by severing stale parent-child links and surfacing delegation status (#559 by @edelauna, PR #935 by @edelauna)
- Add Dart support to codebase indexing (#940 by @WebMad, PR #941 by @WebMad)
- Fix codebase indexing for plain-text files (#931 by @tool-buddy, PR #938 by @WebMad)
- Enable image input for DeepSeek V4 models (#964 by @grizmin, PR #963 by @grizmin)
- Fix ChatGPT OAuth requests for GPT-5.6 Luna being rejected by the Codex backend (PR #889 by @taltas)
- Preserve `reasoning_content` for known reasoning model families when using LiteLLM (#891 by @daewoongoh, PR #899 by @daewoongoh)
- Fix task-history cache invalidation races by routing `invalidate()` and `invalidateAll()` through the task-history lock (#698 by @edelauna, PR #912 by @morgan-coded)
- Fix Settings mode changes by synchronizing the local `cachedState` editing buffer (#914 by @easonLiangWorldedtech, PR #925 by @easonLiangWorldedtech)
- Dismiss the welcome screen after successful Zoo Gateway sign-in (#961 by @JohnCanty, PR #962 by @JamesRobert20)
- Add `CompletePromptOptions` to the `completePrompt` API so callers can configure prompt completion (#615 by @edelauna, PR #901 by @easonLiangWorldedtech)
- Centralize provider identifiers into canonical shared types (#951 by @WebMad, PR #952 by @WebMad)
- Refactor provider categories to use canonical provider identifiers (PR #989 by @WebMad)
- Remove obsolete MCP server-creation translations (#895 by @edelauna, PR #943 by @WebMad)
- Add regression coverage for resuming interrupted subtasks (#566 by @myk1yt, PR #911 by @edelauna)
- Upload coverage reports as GitHub Actions artifacts to simplify CI debugging (PR #939 by @app/zoomote)
- Update `esbuild-wasm` to v0.28.1 (PR #829 by @app/renovate)

## [3.70.0]

### Minor Changes
Expand Down
19 changes: 9 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,15 @@
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)
for this exact support, so if you are having problems or if you have question, jump on and ask.

## What's New in v3.70.0
## What's New in v3.72.0

- **OpenAI GPT-5.6 family** — `Sol`, `Terra`, and `Luna` are now available across both the OpenAI Codex and OpenAI Native provider paths.
- **Grok 4.5 support** — xAI's new flagship model, plus a reasoning-effort format fix that also benefits Grok 4 Mini.
- **Kenari provider support** — a first-class, OpenAI-compatible AI gateway billed in Rupiah covering Claude, GPT, DeepSeek, GLM, Kimi and more.
- Surface the context-compaction button and context window progress bar in the collapsed task header.
- Fix: terminal output loss and premature task completion on cold terminals.
- Fix: image attach for Zoo Gateway and Vercel AI Gateway models now follows live vision-capability tags instead of a static allowlist.
- Dependency and tooling updates.
- **Moonshot and Kimi Code providers** — discover Moonshot models dynamically or sign in to Kimi Code through its OAuth device flow.
- **Latest model support** — use Claude Opus 5 across providers, plus Kimi K3, Gemini 3.6 Flash, and MiniMax-M3.
- **Improved subtask workflows** — abandon interrupted subtasks cleanly, with safer task-history invalidation and better resume coverage.
- **Expanded codebase indexing** — index Dart and plain-text files.
- **Provider reliability** — fixes for GPT-5.6 Luna with ChatGPT OAuth, LiteLLM reasoning content, and DeepSeek V4 image input.
- **Smoother setup and settings** — improved Zoo Gateway sign-in and mode-switch behavior.
- API, provider-type, dependency, localization, and CI improvements.

<details>
<summary>🌐 Available languages</summary>
Expand All @@ -66,8 +66,7 @@ for this exact support, so if you are having problems or if you have question, j
- [Tiếng Việt](locales/vi/README.md)
- [简体中文](locales/zh-CN/README.md)
- [繁體中文](locales/zh-TW/README.md)
- ...
</details>
</details>

---

Expand Down
2 changes: 1 addition & 1 deletion apps/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
"@roo-code/config-eslint": "workspace:^",
"@trpc/server": "^11.18.0",
"@roo-code/config-typescript": "workspace:^",
"@types/node": "20.19.43",
"@types/node": "22.20.1",
"@types/react": "18.3.31",
"@vitest/coverage-v8": "4.1.9",
"ink-testing-library": "4.0.0",
Expand Down
2 changes: 1 addition & 1 deletion apps/vscode-e2e/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"@roo-code/types": "workspace:^",
"@copilotkit/aimock": "1.35.0",
"@types/mocha": "10.0.10",
"@types/node": "20.19.43",
"@types/node": "22.20.1",
"@types/vscode": "1.100.0",
"@vscode/test-electron": "2.5.2",
"dotenv-cli": "11.0.0",
Expand Down
Loading
Loading