Skip to content

Commit bdbfff3

Browse files
committed
Merge remote-tracking branch 'upstream/main' into feat/abort-r1-requesty-completeprompt
2 parents 58b4ef1 + ba46d1f commit bdbfff3

112 files changed

Lines changed: 7856 additions & 664 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.

‎.coderabbit.yaml‎

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ chat:
1111
knowledge_base:
1212
web_search:
1313
enabled: true
14+
learnings:
15+
scope: local
1416

1517
reviews:
1618
profile: assertive
@@ -53,14 +55,19 @@ reviews:
5355
or upstream repositories. Report only concrete, actionable conflicts or failure modes, citing
5456
the relevant repository location or external source. Prioritize correctness, security, data loss,
5557
lifecycle, and test gaps. Do not report generic best practices, unsupported concerns, speculative
56-
style comments, or unrelated refactors. Search for existing helpers before suggesting abstractions.
58+
style comments, or unrelated refactors. When changed code introduces a local implementation of a
59+
cross-cutting concern, check whether it bypasses or duplicates an established repository abstraction
60+
or nearby convention. Report only a concrete inconsistency with behavioral or maintenance impact,
61+
and allow intentional deviations.
5762
5863
- path: "**/*.{ts,tsx,js,jsx,mts,mjs,cts,cjs}"
5964
instructions: >-
6065
Check strict typing and exhaustive behavior across normal, boundary, error,
6166
cancellation, retry, and compatibility paths. Verify promises and errors are handled,
6267
existing helpers are reused, and new code introduces no `any`, unjustified double
6368
assertions, floating promises, duplicated helpers, or increased lint suppressions.
69+
When a refactor adds early-return guards that redirect a subset of inputs to a new
70+
code path, confirm the old branches for those inputs are removed or unreachable.
6471
6572
- path: "{**/*.{test,spec}.{ts,tsx,js,jsx},**/__tests__/**}"
6673
instructions: >-
@@ -76,6 +83,11 @@ reviews:
7683
Flag tests that assert in-flight behavior only after the call completes — these cannot
7784
prove the behavior fires during execution. Check that describe block names match the
7885
actual subjects of the tests they contain.
86+
For tests that assert only mock call counts, confirm a corresponding return-value
87+
assertion exists; a regression that silently returns stale fallback data can satisfy
88+
a call-count check. For code with fallback behavior, verify both the cold-start case
89+
(no prior state) and the warm case (prior state exists) are covered, as they exercise
90+
different branches.
7991
8092
- path: "apps/vscode-e2e/**"
8193
instructions: >-
@@ -115,6 +127,9 @@ reviews:
115127
Check persistence and lifecycle invariants: awaited atomic writes, rollback or explicit
116128
partial-failure behavior, cross-window state consistency, stale listeners/watchers,
117129
cancellation, idempotency, and safe restart/resume without lost or duplicated state.
130+
For async functions that read shared mutable state before an `await` and write it back
131+
after, verify the captured reference is still valid when the write executes; a concurrent
132+
mutation during the await can cause a stale snapshot to overwrite a newer state.
118133
119134
- path: ".github/**"
120135
instructions: >-
@@ -128,8 +143,20 @@ reviews:
128143
during release preparation. Verify documentation describes real behavior and contracts,
129144
and deprioritize prose-only nits that do not affect correctness or usability.
130145
146+
finishing_touches:
147+
docstrings:
148+
enabled: false
149+
131150
pre_merge_checks:
132151
override_requested_reviewers_only: true
152+
docstrings:
153+
mode: off
154+
title:
155+
mode: warning
156+
description:
157+
mode: warning
158+
issue_assessment:
159+
mode: error
133160
custom_checks:
134161
- name: Regression evidence
135162
mode: warning
@@ -140,18 +167,32 @@ reviews:
140167
snapshot. Do not demand tests for unchanged behavior, mechanical configuration, or every
141168
branch without a plausible regression scenario. Cite the changed behavior and missing
142169
evidence.
143-
- name: Trust and persistence invariants
170+
- name: Security boundaries
171+
mode: error
172+
instructions: >-
173+
Fail only when a concrete changed path leaks secrets or PII, trusts or executes
174+
unvalidated input, or bypasses approval or allowlist controls. Cite the changed path
175+
and a plausible triggering scenario; pass when no such changed path exists.
176+
- name: Persistence integrity
144177
mode: error
145178
instructions: >-
146-
Fail only for a concrete changed path that leaks secrets or PII, trusts or executes
147-
unvalidated input, bypasses approval or allowlist controls, can lose persisted state due
148-
to a missing await, non-atomic write, or omitted default propagation, or leaks lifecycle
149-
resources. Cite the path and a plausible triggering scenario; pass when no such changed
150-
path exists.
179+
Fail only when a concrete changed persistence path can lose or corrupt state because an
180+
operation is not awaited, a write is non-atomic, rollback or explicit partial-failure
181+
behavior is missing, or a persisted default is not propagated to a consumer. Cite the
182+
changed path and a plausible triggering scenario; pass when no such changed path exists.
183+
- name: Lifecycle resource cleanup
184+
mode: warning
185+
instructions: >-
186+
Fail only when a concrete changed lifecycle path can leak a listener, watcher, provider,
187+
timer, task, or other resource, or can duplicate work after cancellation, disposal, or
188+
restart. Cite the changed path and a plausible triggering scenario; pass when no such
189+
changed path exists.
151190
152191
tools:
153192
eslint:
154193
enabled: true
194+
github-checks:
195+
enabled: true
155196
actionlint:
156197
enabled: true
157198
shellcheck:

‎.github/workflows/code-qa.yml‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ jobs:
9292
run: pnpm check-types
9393
- name: Model-check task lifecycle protocols
9494
run: pnpm lifecycle:model-check
95+
- name: Validate MCP OAuth integration
96+
run: pnpm mcp:integration-check
9597

9698
build-vsix:
9799
name: Build test VSIX
@@ -148,12 +150,20 @@ jobs:
148150
restore-keys: |
149151
${{ runner.os }}-turbo-${{ hashFiles('**/pnpm-lock.yaml') }}-
150152
${{ runner.os }}-turbo-
151-
- name: Run non-core coverage
152-
run: pnpm turbo run test:coverage --filter="!@roo-code/core" --log-order grouped --output-logs new-only
153+
- name: Run non-extension package coverage
154+
run: pnpm turbo run test:coverage --filter="!@roo-code/core" --filter="!zoo-code" --log-order grouped --output-logs new-only
155+
- name: Run extension unit coverage
156+
run: pnpm turbo run test:coverage:unit --filter="zoo-code" --log-order grouped --output-logs new-only
157+
- name: Verify extension coverage contract
158+
run: pnpm --dir src run verify:coverage-contract
159+
- name: Run extension dist smoke test
160+
run: pnpm turbo run test:dist --filter="zoo-code" --log-order grouped --output-logs new-only
153161
- name: Run core unit coverage
154162
run: pnpm turbo run test:coverage:unit --filter="@roo-code/core" --log-order grouped --output-logs new-only
155163
- name: Run core integration coverage
156164
run: pnpm turbo run test:coverage:integration --filter="@roo-code/core" --log-order grouped --output-logs new-only
165+
- name: Verify extension unit coverage report
166+
run: node src/scripts/verify-lcov.mjs src/coverage/unit/lcov.info
157167
- name: Save Turbo cache
158168
if: steps.turbo-cache.outputs.cache-hit != 'true'
159169
uses: actions/cache/save@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
@@ -175,7 +185,7 @@ jobs:
175185
uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0
176186
with:
177187
files: >-
178-
src/coverage/lcov.info,
188+
src/coverage/unit/lcov.info,
179189
packages/cloud/coverage/lcov.info,
180190
packages/telemetry/coverage/lcov.info,
181191
apps/cli/coverage/lcov.info
@@ -212,7 +222,7 @@ jobs:
212222
with:
213223
name: coverage-reports-${{ matrix.name }}
214224
path: |
215-
src/coverage/lcov.info
225+
src/coverage/unit/lcov.info
216226
webview-ui/coverage/lcov.info
217227
packages/cloud/coverage/lcov.info
218228
packages/telemetry/coverage/lcov.info

‎.github/workflows/label-pr-review-state.yml‎

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ jobs:
8787
const codeRabbitLogin = 'coderabbitai[bot]';
8888
const codeRabbitLogins = new Set([codeRabbitLogin, 'coderabbitai']);
8989
const codeRabbitActiveLabel = 'coderabbit-review-active';
90+
const codeRabbitEligibleBotLogins = new Set(['zoomote[bot]']);
9091
const reviewGateName = 'Zoo Code / PR review gate';
9192
const reconciliationCheckName = 'Zoo Code / reconcile PR review state';
9293
@@ -660,6 +661,8 @@ jobs:
660661
review => review.state === 'CHANGES_REQUESTED'
661662
);
662663
const automatedAuthor = pr.user?.type === 'Bot';
664+
const codeRabbitEligibleAuthor = !automatedAuthor ||
665+
codeRabbitEligibleBotLogins.has(pr.user?.login.toLowerCase());
663666
const codeRabbitReviewComplete = freshCodeRabbitReview?.state === 'APPROVED';
664667
const codeRabbitChangesRequested = freshCodeRabbitReview?.state === 'CHANGES_REQUESTED';
665668
const maintainerApproval = freshMaintainerReviews
@@ -676,7 +679,7 @@ jobs:
676679
if (codeRabbitChangesRequested || maintainerChangeRequest) {
677680
desiredLabel = 'awaiting-author';
678681
phase = codeRabbitChangesRequested ? 'coderabbit-changes' : 'maintainer-changes';
679-
} else if (automatedAuthor) {
682+
} else if (!codeRabbitEligibleAuthor) {
680683
if (pr.draft) {
681684
desiredLabel = null;
682685
phase = 'draft';
@@ -721,14 +724,22 @@ jobs:
721724
continue;
722725
}
723726
if (latestPrDetail.mergeable === null || latestPrDetail.mergeable_state === 'unknown') {
724-
desiredLabel = null;
725-
phase = 'mergeability-pending';
727+
try {
728+
core.info(`PR #${pr.number}: mergeability pending — preserving current state labels`);
729+
await updateReviewGate(pr, 'mergeability-pending', false);
730+
await setCodeRabbitReviewActive(pr, false);
731+
await updateReviewGuide(pr, 'mergeability-pending', existingGuide);
732+
} catch (error) {
733+
error.preserveStateLabels = true;
734+
throw error;
735+
}
736+
continue;
726737
}
727738
}
728739
729740
core.info(
730741
`PR #${pr.number}: CI passing, reviews=${latest.size}, ` +
731-
`coderabbit=${freshCodeRabbitReview?.state ?? (automatedAuthor ? 'optional' : 'pending')}, ` +
742+
`coderabbit=${freshCodeRabbitReview?.state ?? (codeRabbitEligibleAuthor ? 'pending' : 'optional')}, ` +
732743
`maintainer=${maintainerApproval?.state ?? 'pending'} → ${desiredLabel ?? '(none)'}`
733744
);
734745

‎.github/workflows/mutation-testing.yml‎

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@ jobs:
2222
- name: Record merge-queue enforcement
2323
if: github.event_name == 'merge_group'
2424
run: |
25-
echo "## Changed-code mutation testing" >> "$GITHUB_STEP_SUMMARY"
26-
echo "Mutation testing was enforced on each pull request before it entered the merge queue." >> "$GITHUB_STEP_SUMMARY"
25+
{
26+
echo "## Changed-code mutation testing"
27+
echo "Mutation testing was enforced on each pull request before it entered the merge queue."
28+
} >> "$GITHUB_STEP_SUMMARY" || echo "::warning title=Mutation test advisory::Could not write the job summary"
2729
2830
- name: Checkout pull request merge result
2931
if: github.event_name == 'pull_request'
@@ -50,7 +52,7 @@ jobs:
5052
if: github.event_name == 'pull_request'
5153
run: pnpm test:mutation-ci
5254

53-
- name: Mutate changed executable lines
55+
- name: Enforce executable-line scope and run advisory mutation testing
5456
if: github.event_name == 'pull_request'
5557
env:
5658
BASE_SHA: ${{ github.event.pull_request.base.sha }}
@@ -60,6 +62,7 @@ jobs:
6062
- name: Upload mutation reports
6163
id: mutation_report
6264
if: always() && github.event_name == 'pull_request'
65+
continue-on-error: true
6366
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
6467
with:
6568
name: changed-code-mutation-report
@@ -76,4 +79,4 @@ jobs:
7679
echo ""
7780
echo "### Download mutation reports"
7881
echo "[Open the changed-code-mutation-report artifact]($ARTIFACT_URL), then open the package's mutation.html file."
79-
} >> "$GITHUB_STEP_SUMMARY"
82+
} >> "$GITHUB_STEP_SUMMARY" || echo "::warning title=Mutation test advisory::Could not write the job summary"

‎CHANGELOG.md‎

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

3+
## [3.82.1]
4+
5+
### Patch Changes
6+
7+
- Fix task history entries disappearing when users reopen a task (#1279 by @jiangbing321, PR #1319 by @app/zoomote)
8+
- Fix task history entries disappearing when users restart after a task completes (#1453 by @zoomote, PR #1452 by @app/zoomote)
9+
- Fix tasks stalling when interrupted subtasks resume (#1468 by @zoomote, PR #1470 by @app/zoomote)
10+
- Fix nested subtask tool calls stalling mid-task (#921 by @easonLiangWorldedtech, PR #1494 by @app/zoomote)
11+
- Fix reasoning models stopping their thinking after a model selection change (#1348 by @zoomote, PR #1349 by @app/zoomote)
12+
- Fix provider settings requests contacting model services that the user did not select (#1424 by @zoomote, PR #1425 by @app/zoomote)
13+
- Fix MCP OAuth registration failing for servers that advertise unsupported grant types (#1531 by @edelauna, PR #1532 by @app/zoomote)
14+
- Fix commits failing after users interrupt mutation tests (#1514 by @easonLiangWorldedtech, PR #1525 by @app/zoomote)
15+
- Fix the OpenCode Go context meter showing incorrect limits (PR #1428 by @app/zoomote)
16+
- Fix NanoGPT requests dropping optional tool parameters (PR #1590 by @huggix)
17+
- Ignore blank or missing follow-up suggestion answers in the webview (#1226 by @andreluko, PR #1286 by @easonLiangWorldedtech)
18+
- Finish the canonical provider identifier audit across providers (#944 by @WebMad, PR #1493 by @WebMad)
19+
- Add test coverage for code-index and tools lines left uncovered by #1297 (PR #1317 by @easonLiangWorldedtech)
20+
- Add an LM Studio reasoning_content E2E guard (#1075 by @marunguy, PR #1322 by @easonLiangWorldedtech)
21+
- Refresh pull-request review labels after base updates (PR #1584 by @app/zoomote)
22+
- Bump GitHub Actions to node24 runtimes to clear Node 20 deprecation warnings (PR #1534 by @app/zoomote)
23+
- Refine CodeRabbit review checks (PR #1571 by @app/zoomote)
24+
- Clarify CodeRabbit approval checks (PR #1577 by @app/zoomote)
25+
- Update mammoth to v1.12.2 (PR #1472 by @app/renovate)
26+
- Update globals to v16.5.0 (PR #1474 by @app/renovate)
27+
- Update i18next to v25.10.10 (PR #1475 by @app/renovate)
28+
- Update ink to v6.8.0 (PR #1477 by @app/renovate)
29+
330
## [3.82.0]
431

532
- 🔑 **Use your Zoo Gateway API key anywhere** — bring it to any OpenAI-compatible client or workflow: https://zoocode.dev/models
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
"fixtures": [
3+
{
4+
"match": {
5+
"userMessage": "LMSTUDIO_E2E_THINK_BLOCK",
6+
"model": "qwen3.8-27b"
7+
},
8+
"response": {
9+
"reasoning": "LMSTUDIO_E2E_REASONING_PROBE I considered which country the question refers to and recalled its capital from geography knowledge before committing to an answer.",
10+
"toolCalls": [
11+
{
12+
"name": "attempt_completion",
13+
"arguments": "{\"result\":\"Paris\"}",
14+
"id": "call_lmstudio_e2e_think_001"
15+
}
16+
]
17+
}
18+
}
19+
]
20+
}

0 commit comments

Comments
 (0)