Skip to content

Commit 00cfd91

Browse files
authored
Merge branch 'main' into pr/b13-usage-store-v2
2 parents 4ced785 + b2335fa commit 00cfd91

177 files changed

Lines changed: 6678 additions & 3684 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.

AGENTS.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,22 @@ When writing new code:
1717
- After editing a file, run `pnpm --dir src exec eslint --prune-suppressions --max-warnings=0 <relative-file>` and confirm the count for that file did not increase.
1818
- If a suppression is truly unavoidable (e.g. `vi.spyOn(Cls.prototype as any, "privateMethod")` where no typed alternative exists), document why in a comment next to the cast.
1919

20+
## Persisted Setting Checklist
21+
22+
When adding or changing a user setting, trace the complete round trip. A setting is not complete merely because its control renders or its value reaches storage.
23+
24+
- [ ] Define the setting, validation, and optionality in `packages/types/src/global-settings.ts` (or the appropriate provider/settings schema). Define a shared default constant when multiple readers need the same default.
25+
- [ ] If the webview uses the setting, include it in `ExtensionState` in `packages/types/src/vscode-extension-host.ts` and any relevant message types.
26+
- [ ] In `SettingsView`, initialize and read the control from local `cachedState`, NOT directly from live `useExtensionState()`. The cache buffers edits until the user explicitly clicks Save; binding to live state causes races and discarded edits.
27+
- [ ] Update `cachedState` from the control and include the setting in the `updateSettings` payload sent by `SettingsView.handleSubmit()` (or document and test a deliberate immediate-save flow).
28+
- [ ] Verify `webviewMessageHandler` handles any setting-specific normalization or side effects and persists the final value through `ContextProxy`. Generic settings normally use `contextProxy.setValue()`.
29+
- [ ] Add the setting to `ClineProvider.getState()` with the intended default so extension/runtime consumers can read it.
30+
- [ ] Add the setting to both the destructuring and returned object in `ClineProvider.getStateToPostToWebview()`. This completes the storage-to-webview round trip and prevents a saved control from reverting visually.
31+
- [ ] Update every runtime consumer and ensure all consumers use the same default semantics.
32+
- [ ] If users can import/export the setting, verify its schema inclusion makes it round-trip and add special handling only when required (for example, secrets or non-exportable state).
33+
- [ ] Add focused tests for: UI binding/save behavior, persistence or normalization, and the saved value returned by `getStateToPostToWebview()`. Include both `true` and `false`/unset cases when defaulting can hide omissions.
34+
- [ ] Run the narrowest relevant Vitest suites from the package directory that declares Vitest.
35+
2036
## Test Placement Guidance
2137

2238
Prefer the narrowest test layer that proves the behavior. This follows standard test-pyramid guidance: keep most coverage in fast, focused tests; add integration tests for cross-module contracts; reserve end-to-end tests for full workflow confidence.

CHANGELOG.md

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

3+
## [3.76.0]
4+
5+
### Minor Changes
6+
7+
- Add Destructive Command Guard as an opt-in safety layer that blocks dangerous terminal commands while allowing longer tasks to continue without repeated approvals (#1057 by @navedmerchant, PR #1061 by @navedmerchant)
8+
- Streamline Destructive Command Guard approval handling so safe commands can continue with fewer interruptions (#1058 by @navedmerchant, PR #1062 by @navedmerchant)
9+
- Harden Destructive Command Guard binary installation and platform handling (#1056 by @navedmerchant, PR #1060 by @navedmerchant)
10+
- Strengthen shared managed-binary downloads, archive extraction, verification, and atomic installation (#1055 by @navedmerchant, PR #1059 by @navedmerchant)
11+
- Fix Zoo starting the next step before a terminal command finishes (PR #1145 by @app/zoomote)
12+
- Add an OpenAI Codex response-speed selector to provider settings (PR #1076 by @WebMad)
13+
- Update DeepSeek model configurations and defaults (#1082 by @WHMHammer, PR #1083 by @WHMHammer)
14+
- Isolate each task's provider configuration from changes to the currently focused provider state (PR #1085 by @edelauna)
15+
- Isolate provider-profile mutations from running tasks to prevent mid-task configuration changes (PR #1087 by @edelauna)
16+
- Group nearby, related tool approval requests while keeping unrelated requests separate (#1004 by @easonLiangWorldedtech, PR #1005 by @easonLiangWorldedtech)
17+
- Add telemetry circuit breaking and drain pending events during shutdown for more reliable, bounded delivery (PR #1070 by @edelauna)
18+
- Aggregate task-completion telemetry using incremental delta installments (PR #1071 by @edelauna)
19+
- Deduplicate concurrent model-cache fetches and throttle telemetry for empty provider responses (PR #1072 by @edelauna)
20+
- Fix Semble archive extraction on Windows by safely encoding the extraction command (#1167 by @navedmerchant, PR #1168 by @navedmerchant)
21+
- Introduce shared provider-stream test utilities to reduce duplicated stream setup (PR #1086 by @app/zoomote)
22+
- Reuse the shared webview query-client helper in tests (PR #1088 by @app/zoomote)
23+
- Migrate Requesty provider tests to shared stream helpers (PR #1089 by @app/zoomote)
24+
- Migrate Unbound provider tests to shared stream helpers (PR #1090 by @app/zoomote)
25+
- Migrate OpenAI-family provider tests to shared stream helpers (PR #1091 by @app/zoomote)
26+
- Migrate base OpenAI-compatible provider tests to shared stream helpers (PR #1092 by @app/zoomote)
27+
- Migrate OpenAI provider tests to shared stream helpers (PR #1093 by @app/zoomote)
28+
- Migrate Anthropic Vertex provider tests to shared stream helpers (PR #1094 by @app/zoomote)
29+
- Migrate LiteLLM and Z.ai provider tests to shared stream helpers (PR #1095 by @app/zoomote)
30+
- Migrate Friendli, OpenCode Go, and MiMo provider tests to shared stream helpers (PR #1102 by @app/zoomote)
31+
- Migrate Qwen, LM Studio, and Fireworks provider tests to shared stream helpers (PR #1103 by @app/zoomote)
32+
- Migrate Kenari, MiniMax, Vercel, and Mistral provider tests to shared stream helpers (PR #1105 by @app/zoomote)
33+
- Finish the provider-stream test-helper rollout across the remaining provider suites (PR #1169 by @app/zoomote)
34+
- Merge the v3.74.0 release preparation branch into `main` (PR #1081 by @taltas)
35+
336
## [3.74.0]
437

538
### Minor Changes

README.md

Lines changed: 15 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
<p align="center">
22
<a href="https://marketplace.visualstudio.com/items?itemName=ZooCodeOrganization.zoo-code"><img src="https://img.shields.io/badge/VS_Code_Marketplace-007ACC?style=flat&logo=visualstudiocode&logoColor=white" alt="VS Code Marketplace"></a>
33
<a href="https://x.com/ZooCodeDev"><img src="https://img.shields.io/badge/ZooCode-000000?style=flat&logo=x&logoColor=white" alt="X"></a>
4-
<a href="https://youtube.com/@roocodeyt?feature=shared"><img src="https://img.shields.io/badge/YouTube-FF0000?style=flat&logo=youtube&logoColor=white" alt="YouTube"></a>
54
<a href="https://discord.gg/VxfP4Vx3gX"><img src="https://img.shields.io/badge/Join%20Discord-5865F2?style=flat&logo=discord&logoColor=white" alt="Join Discord"></a>
65
<a href="https://www.reddit.com/r/ZooCode/"><img src="https://img.shields.io/badge/Join%20r%2FZooCode-FF4500?style=flat&logo=reddit&logoColor=white" alt="Join r/ZooCode"></a>
76
<a href="https://github.com/Zoo-Code-Org/Zoo-Code/issues"><img src="https://img.shields.io/badge/GitHub-Issues-181717?style=flat&logo=github&logoColor=white" alt="GitHub Issues"></a>
@@ -35,28 +34,25 @@
3534
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)
3635
for this exact support, so if you are having problems or if you have question, jump on and ask.
3736

38-
## What's New in v3.74.0
37+
## What Zoo Code Has Added Since Roo Code
3938

40-
**Zoo Gateway is live!**
39+
Zoo Code builds on the foundation created by Roo Code and continues to expand it with:
4140

42-
The gateway is a single endpoint for all providers, with one balance and per-request spending/usage breakdown.
41+
- **Semble codebase intelligence** — fast, on-demand semantic code search with automatic setup and no separate indexing workflow.
42+
- **Stronger Orchestrator workflows** — safer delegation, parallel task coordination, reliable parent/child task recovery, and better isolation between subtasks and provider profiles.
43+
- **Longer autonomous runs with Destructive Command Guard (DCG)** — automatically block dangerous commands while trusted work continues without repeated approval prompts.
44+
- **The latest models** — ongoing support for new Claude, GPT, Gemini, Kimi, GLM, Grok, MiniMax, and other model families.
45+
- **More ways to connect** — new and expanded providers including Zoo Gateway, Moonshot, Kimi Code, Kenari, Friendli, OpenCode Go, and many more.
46+
- **More dependable terminal and editing workflows** — fixes for premature terminal completion, task-state races, context management, diff editing, and provider-specific tool use.
47+
- **More control over your workspace** — rules management, per-mode MCP restrictions, multi-root path controls, model reasoning options, and completion change review actions.
4348

44-
**Setup:**
49+
## What's New in v3.76.0
4550

46-
- Add credits: https://www.zoocode.dev/dashboard/credits
47-
- Sign in from the extension.
48-
- In the settings, select Zoo Gateway as the provider when creating profiles for different models
49-
50-
Usage and charges can be viewed in the [dashboard](https://www.zoocode.dev/dashboard).
51-
52-
Models: https://www.zoocode.dev/dashboard/models
53-
54-
- **More OpenAI controls** — use Fast priority mode with OpenAI Codex and choose higher reasoning effort for OpenAI-compatible models.
55-
- **More reliable providers and models** — improved router metadata handling, Ollama model refresh, Bedrock proxy support, and Friendli reasoning controls.
56-
- **Smoother settings and developer workflows** — settings now preserve unsaved edits, short terminal commands complete cleanly, architect plans use workspace-relative paths, and remaining user-facing Roo branding is updated to Zoo.
57-
- **Stronger task foundations** — new task registry and semaphore-based scheduler primitives prepare Zoo Code for safer task coordination.
58-
- **Consistent provider architecture** — provider identifiers and service-tier primitives are now centralized across the API, core, shared types, and webview.
59-
- Security, dependency, lint, visual-regression, and end-to-end test improvements.
51+
- **Run longer, uninterrupted tasks with Destructive Command Guard (DCG)** — DCG blocks dangerous commands while letting Zoo keep working without you continuously pressing approval buttons, backed by hardened managed-binary downloads and installation.
52+
- **Better provider controls and reliability** — choose OpenAI Codex response speed, use updated DeepSeek configurations, and benefit from stronger isolation between provider-profile changes and running tasks.
53+
- **Critical terminal execution fix** — Zoo now waits for terminal commands to finish before starting the next step, preventing overlapping work and premature model continuation.
54+
- Smarter batching groups related tool approvals while keeping unrelated requests separate.
55+
- Telemetry delivery and model-cache fetching are more resilient under failures and concurrent requests.
6056

6157
<details>
6258
<summary>🌐 Available languages</summary>
@@ -107,26 +103,10 @@ Zoo Code adapts to how you work:
107103
Learn more: [Using Modes](https://docs.zoocode.dev/basic-usage/using-modes)
108104
[Custom Modes](https://docs.zoocode.dev/advanced-usage/custom-modes)
109105

110-
## Tutorial & Feature Videos
111-
112-
<div align="center">
113-
114-
| | | |
115-
| :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
116-
| <a href="https://www.youtube.com/watch?v=Mcq3r1EPZ-4"><img src="https://img.youtube.com/vi/Mcq3r1EPZ-4/maxresdefault.jpg" width="100%" alt="Installing the Extension"></a><br><b>Installing the Extension</b> | <a href="https://www.youtube.com/watch?v=ZBML8h5cCgo"><img src="https://img.youtube.com/vi/ZBML8h5cCgo/maxresdefault.jpg" width="100%" alt="Configuring Profiles"></a><br><b>Configuring Profiles</b> | <a href="https://www.youtube.com/watch?v=r1bpod1VWhg"><img src="https://img.youtube.com/vi/r1bpod1VWhg/maxresdefault.jpg" width="100%" alt="Codebase Indexing"></a><br><b>Codebase Indexing</b> |
117-
| <a href="https://www.youtube.com/watch?v=iiAv1eKOaxk"><img src="https://img.youtube.com/vi/iiAv1eKOaxk/maxresdefault.jpg" width="100%" alt="Custom Modes"></a><br><b>Custom Modes</b> | <a href="https://www.youtube.com/watch?v=Ho30nyY332E"><img src="https://img.youtube.com/vi/Ho30nyY332E/maxresdefault.jpg" width="100%" alt="Checkpoints"></a><br><b>Checkpoints</b> | <a href="https://www.youtube.com/watch?v=HmnNSasv7T8"><img src="https://img.youtube.com/vi/HmnNSasv7T8/maxresdefault.jpg" width="100%" alt="Context Management"></a><br><b>Context Management</b> |
118-
119-
</div>
120-
<p align="center">
121-
<a href="https://docs.zoocode.dev/tutorial-videos">More quick tutorial and feature videos...</a>
122-
</p>
123-
124106
## Resources
125107

126108
- **[Documentation](https://docs.zoocode.dev):** The official guide to
127109
installing, configuring, and mastering Zoo Code.
128-
- **[YouTube Channel](https://youtube.com/@roocodeyt?feature=shared):** Watch
129-
tutorials and see features in action.
130110
- **[Discord Server](https://discord.gg/VxfP4Vx3gX):** Join the community for
131111
real-time help and discussion.
132112
- **[Reddit Community](https://www.reddit.com/r/ZooCode/):** Share your

apps/vscode-e2e/src/suite/subtasks.test.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,8 @@ suite("Roo Code Subtasks", function () {
660660
...parentProfile,
661661
openRouterModelId: "openai/gpt-4.1-mini",
662662
}
663-
const priorModeApiConfigs = api.getConfiguration().modeApiConfigs ?? {}
663+
const priorConfiguration = api.getConfiguration()
664+
const priorActiveProfile = api.getActiveProfile()
664665
const parentProfileId = await api.upsertProfile("subtask-parent-profile", parentProfile, true)
665666
const childProfileId = await api.upsertProfile("subtask-child-profile", childProfile, false)
666667
await api.setConfiguration({
@@ -735,7 +736,10 @@ suite("Roo Code Subtasks", function () {
735736
)
736737
} finally {
737738
api.off(RooCodeEventName.Message, messageHandler)
738-
await api.setConfiguration({ modeApiConfigs: priorModeApiConfigs })
739+
await api.setConfiguration(priorConfiguration)
740+
if (priorActiveProfile) {
741+
await api.setActiveProfile(priorActiveProfile)
742+
}
739743
await api.deleteProfile("subtask-child-profile").catch(() => {})
740744
await api.deleteProfile("subtask-parent-profile").catch(() => {})
741745
while (api.getCurrentTaskStack().length > 0) {

0 commit comments

Comments
 (0)