Skip to content

Sync upstream main into sendbird (375f64c) - #3

Merged
sf-jin-ku merged 32 commits into
sendbirdfrom
main
Oct 22, 2026
Merged

sf-jin-ku merged 32 commits into
sendbirdfrom
main

Conversation

@sf-jin-ku

Copy link
Copy Markdown

Regular upstream sync: merges alibaba/open-code-review main at 375f64c (32 commits since a758d9c) into the sendbird build branch. Brings in the grace-round completion fix (alibaba#1678) that replaced our closed #2. Our carried patch (alibaba#1656) merges cleanly.

🤖 Generated with Claude Code

https://claude.ai/code/session_016fFEYAkexJ1sSe5eeLxxuH

Dante-dan and others added 30 commits October 5, 2026 14:34
* fix(llm): allow unlisted OpenRouter model overrides

* docs(llm): clarify OpenRouter model overrides

* fix(llm): allow unlisted model overrides for built-in providers

* fix(llm): share stderr test helper across platforms

---------

Co-authored-by: kite <lizhengfeng.lzf@alibaba-inc.com>
…aba#1159)

* fix(llm): let --timeout raise the per-request HTTP deadline

The --timeout flag documents a concurrent-task timeout in minutes, but
the per-request HTTP deadline stayed at the client's independent
5-minute default. A review of one slow file therefore failed with
classification=timeout at duration_to_headers_ms≈300000 even when the
caller granted --timeout 30, and no CLI setting could let the file
review finish (issue alibaba#1155).

ResolveOptions gains a TaskTimeout field: when no env
(OCR_LLM_TIMEOUT) or config-file (timeout_sec) request timeout is set,
the task budget raises the request deadline so a single request can use
the whole task budget. Existing precedence is unchanged — env and
config-file timeouts still win, and leaving --timeout at its default
keeps the 5-minute client default.

ocr review and ocr scan both pass their --timeout value through.

Fixes alibaba#1155

* fix(cmd): feed the concurrent task timeout into the request deadline

main replaced the per-file timeout flag with --timeout binding
concurrentTaskTimeout, and the agent applies it as a context deadline
across review rounds — but the per-request HTTP deadline stayed at the
client's independent 5-minute default, so a single slow file request
could still die inside a task that had plenty of budget left (alibaba#1155's
original symptom).

Wire ResolveOptions.TaskTimeout from the live
opts.concurrentTaskTimeout (minutes) in both review and scan commands.
Precedence is unchanged: env OCR_LLM_TIMEOUT and config-file
timeout_sec still win, and an unset task timeout keeps the 5-minute
client default.

* fix(llm): keep request and task timeouts independent

* docs: localize timeout configuration guidance

* fix(llm): avoid attributing caller deadlines to task timeout

---------

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
Co-authored-by: kite <lizhengfeng.lzf@alibaba-inc.com>
…rst (alibaba#1598)

`ocr scan --path .` selected no files and exited 0. `git ls-files` prints
repository-relative names such as `main.go`, and filterByPaths matches an
exact path or a `<selector>/` prefix, so a selector left as "." matched
nothing. `--path ./` normalized to the same dead selector. Both spellings now
mean the whole repository, which is what an omitted --path already means.

filepath.ToSlash also ran after the "./" trim. On Windows a selector like
`.\internal\scan` only becomes `./internal/scan` during that conversion, so
the prefix survived the trim and matched nothing there either. ToSlash now
runs first, and the "./" trim repeats so `././` collapses.

A root selector alongside a narrower one widens the scan, since the root
already covers it.

closes alibaba#1596
closes alibaba#1597
…a#1062)

* docs(delegate): disable git pagers in agent environments

* docs(delegate): streamline pager guidance

* docs(delegate): clarify pager terminology

* docs(delegate): harden diff retrieval across integrations

* fix(ci): refresh Go toolchains and simplify delegate docs

* fix(delegate): complete pager and path coverage

* fix(ci): restore patched Go dependencies

* docs(delegate): simplify review instructions

* test(delegate): reject empty command examples

---------

Co-authored-by: Qiyuanqiii <267806965+Qiyuanqiii@users.noreply.github.com>
…libaba#1626)

Co-authored-by: gu-feng418 <287555569+gu-feng418@users.noreply.github.com>
Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
alibaba#1680)

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
…ba#1698)

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
Add an independent stdio ACP adapter with slash commands, optional
natural-language parsing, managed review/scan processes, CI, and
multilingual setup docs. Keep the OCR CLI source and prompts unchanged.

* refactor(acp): add ACP adapter and supporting services
* ci(acp): use patched Go toolchain
* docs(acp): trim support caveats and sync CI notes

  Drop dated verification claims and the prebuilt-binary disclaimer so the
  adapter docs match the current local-build story and acp-ci.yml.

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
…a#1652)

* fix(scan): record rendered prompt overflow as a failed review

Fixes alibaba#1650

* fix(scan): preserve reused checkpoints when new tasks fail

Signed-off-by: Rui <1685901819@qq.com>

---------

Signed-off-by: Rui <1685901819@qq.com>
…baba#1622)

* feat(auth): enable ChatGPT plan reviews through public Responses

* fix(auth): prevent stale credential status and provider keys

* Fix ChatGPT auth tests on Windows

---------

Co-authored-by: kite <lizhengfeng.lzf@alibaba-inc.com>
…a#1622) (alibaba#1718)

* Fix ChatGPT auth recovery and provider credential handling

* Handle rejected refresh identities and review feedback

* docs: explain ChatGPT recovery and gateway credentials

* Fix refresh window after pending token recovery

---------

Co-authored-by: Qiyuanqiii <267806965+Qiyuanqiii@users.noreply.github.com>
* ci(release): publish to npm via trusted publishing

Replace the NPM_TOKEN secret with GitHub OIDC token exchange, and add a
manually triggered job that verifies every package's trusted publisher
configuration without publishing anything.

npm only accepts an OIDC exchange from a cloud-hosted runner, so those two
jobs run on ubuntu-latest while the Go build matrix stays on self-hosted.

* fix(ci): harden npm trusted publishing checks

* fix(test): encode all slashes in release contract URLs
* chore(deps): bump google.golang.org/grpc

Bumps the go_modules group with 1 update in the / directory: [google.golang.org/grpc](https://github.com/grpc/grpc-go).


Updates `google.golang.org/grpc` from 1.83.0 to 1.83.1
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.83.0...v1.83.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.83.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump google.golang.org/grpc

Bumps the go_modules group with 1 update in the / directory: [google.golang.org/grpc](https://github.com/grpc/grpc-go).


Updates `google.golang.org/grpc` from 1.83.1 to 1.83.2
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](grpc/grpc-go@v1.83.1...v1.83.2)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.83.2
  dependency-type: indirect
  dependency-group: go_modules
...

Signed-off-by: dependabot[bot] <support@github.com>

* Ok

* chore(deps): bump the npm_and_yarn group across 2 directories with 2 updates

Bumps the npm_and_yarn group with 1 update in the /extensions/vscode directory: [markdown-it](https://github.com/markdown-it/markdown-it).
Bumps the npm_and_yarn group with 1 update in the /plugins/open-code-review/opencode directory: [ip-address](https://github.com/beaugunderson/ip-address).


Updates `markdown-it` from 14.2.0 to 14.3.2
- [Changelog](https://github.com/markdown-it/markdown-it/blob/14.3.2/CHANGELOG.md)
- [Commits](markdown-it/markdown-it@14.2.0...14.3.2)

Updates `ip-address` from 10.7.0 to 10.7.3
- [Release notes](https://github.com/beaugunderson/ip-address/releases)
- [Commits](beaugunderson/ip-address@v10.7.0...v10.7.3)

---
updated-dependencies:
- dependency-name: markdown-it
  dependency-version: 14.3.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: ip-address
  dependency-version: 10.7.3
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore: limit dependency PR to grpc update

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: kite <lizhengfeng.lzf@alibaba-inc.com>
* fix(llmloop): count a grace-round task_done as completion

The grace round after an exhausted budget offers only code_comment and
task_done, and asks the model to call task_done when it has nothing further
to report. That checkpoint was discarded and RunMainTask returned
completed=false, so a file the model had finished was recorded as
incomplete: scan wrote review_item_failed instead of a reusable
review_item_done, and a later resume re-ran it.

Report grace-round completion and return it. Stops that never run a grace
round, and a task_done(FAILED), are unchanged.

closes alibaba#1018

* fix(llmloop): warn when a review limit reaches the grace round

A task that spends its tool-request rounds or token budget and then
completes in the grace round reported success with no trace of the
limit, so a zero-finding result could read as clean. Record a
review_limit_reached warning with the stop reason and the round's
verdict, and qualify the zero-finding message in text and JSON output.
Completion, the reusable checkpoint, and budget_exceeded are unchanged.

* fix(llmloop): let failure veto grace-round completion

---------

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
Co-authored-by: kite <lizhengfeng.lzf@alibaba-inc.com>
…libaba#1745)

* fix(scan): surface llmloop token-budget stop on the run-level state

`alibaba#1248` (merged 2026-09-17) added an in-conversation token-budget stop to
`internal/llmloop.RunMainTask` and wired its `StopTokenBudget` outcome
through to the review path's run-level `budgetExceeded` flag plus a
`token_budget_reached` warning (see `internal/agent/agent.go` near
`executeGroupSubtask`).

The scan path was left out: `internal/scan.Agent.budgetExceeded` is
still set only by the dispatchBatch look-ahead check, and
`executeSubtask` does not react to a `StopTokenBudget` returned by
`llmloop.RunMainTask`. The result is that an in-flight token-budget
stop fired mid-task on a scan run leaves:

- `cmd/opencodereview` `--format json` `budget_exceeded: false` even
  though the run stopped on the budget, and the stderr
  `budget_exceeded=...` line lying for the same reason;
- no `token_budget_reached` warning, so `ocr session list` and the
  other warnings-driven surfaces can't distinguish a budget stop from
  other failure modes.

This change mirrors the review path: in `executeSubtask`, on a
non-completed stop with `stop == llmloop.StopTokenBudget`, atomically
flip `budgetExceeded` via `CompareAndSwap` and emit one
`token_budget_reached` warning. `budgetExceeded` is now
`atomic.Bool` (was plain `bool`) for the same reason the review
agent uses one.

Fixes the gap between the two commands' `BudgetExceeded()` /
`token_budget_reached` reporting. The per-item failure record keeps
existing semantics: the inner `main_task did not complete before
stopping: <Reason>` string still feeds the `scan_subtask_error`
warning unchanged, so the diagnostic that survives `--format json`
continues to name the stop trigger via `llmloop.StopTokenBudget.Reason()`.

* docs: Apply batched suggestions from code review

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>

---------

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
…self-defined) (alibaba#1661)

* main fix

* chore: write tests (AI)

* fix(config): validate dotted provider names across CLI and IDEs

---------

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
* terraform: adding .tofu extension (used by opentofu projects)

* table align in md files

---------

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
…ibaba#1721)

Keep the CONTRIBUTING Project Structure trees in sync with main,
including internal/chatgptauth from alibaba#1622 (review feedback on alibaba#1721).

Co-authored-by: Frank-zhu2000 <332350688+Frank-zhu2000@users.noreply.github.com>
Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
…s multiple languages (alibaba#1729)

- Enhanced the contributing documentation by adding new sections for `acp`, `docs`, `imgs`, `chatgptauth`, `delegate`, `llmloop`, `mcp`, `scan`, and `scripts`.
- Improved clarity in existing sections, particularly in `cmd/opencodereview/`, emphasizing the role of command dispatch.
- Ensured consistency in terminology and descriptions across English, Japanese, Korean, Russian, and Chinese versions of the documentation.

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
* feat(rules): add PowerShell review support

* docs(rules): sync PowerShell translations

* fix(rules): refine PowerShell guidance and regression tests

---------

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
* docs: nushell.md from @hustcer

* feat: file extensions

* chore: add new nu (NU) extensions

* Credits for `nushell.md`

Co-authored-by: hustcer <hustcer@outlook.com>

* docs: update supported languages

* fixup: CI failures from bad merge

* chore: fix merge

* credits for nushell.md

* docs: sync nushell into korean site docs

* chore: append excludsion to indexes

* chore: format with prettier [skip ci]

---------

Co-authored-by: hustcer <hustcer@outlook.com>
Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
…paths (alibaba#1709)

* fix(scan): match --path selectors case-insensitively

On Windows and macOS a --path selector such as SRC names an existing directory (the filesystem resolves it), but filterByPaths compared selectors to git ls-files output byte-for-byte, so the scan silently selected no files and exited 0. Fold case like the other user-facing path filters (--include/--exclude, secret paths, the extension allowlist).

Refs alibaba#1708

* fix(scan): prefer the exact --path spelling before folding case

A selector now matches its own spelling first, so on a case-sensitive
filesystem --path src cannot widen to a sibling SRC/; case-insensitive
matching stays as a per-selector fallback, the repair for --path SRC on
Windows and macOS. Documented on the ocr scan page in all locales.

* fix(scan): resolve --path against the filesystem before folding case

A selector's own spelling is tried first; a spelling that names nothing
must resolve in the working tree before case folding applies, so on a
case-sensitive filesystem a wrongly-cased --path is an error instead of
a folded match or a silent empty scan. Docs updated in all locales.

* fix(scan): resolve --path selectors to their on-disk path

A selector that names nothing in its own spelling is resolved against
the working tree -- symlinks followed, on-disk case taken where the
filesystem folds it -- and only the resolved path is matched, replacing
the case-fold fallback. An empty src/docs/ therefore selects nothing on
a case-sensitive filesystem even while src/DOCS/ holds tracked files.

---------

Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
Co-authored-by: kite <lizhengfeng.lzf@alibaba-inc.com>
ydflow and others added 2 commits October 20, 2026 16:15
…baba#1770)

Co-authored-by: ydflow <314143294+ydflow@users.noreply.github.com>
Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
…baba#1773)

Co-authored-by: ydflow <314143294+ydflow@users.noreply.github.com>
Co-authored-by: Kite <254839944+lizhengfeng101@users.noreply.github.com>
@upwind-code-us

upwind-code-us Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Upwind Upwind Code Scan - ⚠️ Warn

3 newly introduced vulnerabilities · 0 resolved · 3 total in this PR vs main

Total breakdown: 🔶 2 High | 🟢 1 Low


🔶 High · 2 findings
CVE Package Version Fix
CVE-2026-111758 markdown-it 14.3.2 14.3.3
CVE-2026-93687 braces 3.0.3 —

🟢 Low · 1 finding
CVE Package Version Fix
CVE-2026-111766 markdown-it 14.3.2 14.3.3

View full analysis in Upwind Console

Scan completed in 11s

Scan history (1 scan)
Commit Scanned at New Resolved Net
375f64c < 2026-10-22 18:59 UTC +3 0 +3

Last scanned: 375f64c · 2026-10-22 18:59 UTC

@upwind-code-us

upwind-code-us Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

Upwind Upwind IaC Scan - ✅ Passed

0 misconfigurations detected

No default-branch baseline yet — showing all findings.

View full analysis in Upwind Console →

Scan completed in 1s

Scan history (1 scan)
Commit Scanned at New Resolved Net
375f64c < 2026-10-22 18:59 UTC 0 0 0

Last scanned: 375f64c · 2026-10-22 18:59 UTC

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review 🔄 Running since 2026-10-22T18:59:17.300356Z 375f64c PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@upwind-code-us

Copy link
Copy Markdown

Upwind Upwind Secrets Scan

6 findings detected

Total breakdown: 🔶 4 SECRET | 🔶 2 PII

No default-branch baseline yet — showing all findings.


🔶 SECRET · 4 findings
File Line Type Value
acp/internal/intent/llm/resolve.go 36 generic-api-key OCR_••••_KEY
internal/llm/bedrock_test.go 347 generic-api-key sk-t••••-key
internal/llm/resolver.go 78 generic-api-key ANTH••••OKEN
scripts/github-actions/release-contract.test.js 101 generic-api-key fixt••••oken

🔶 PII · 1 finding
File Line Type Value
extensions/frontend/package-lock.json 2871 Email ••••@izs.me (+1 more)

A secret that has been pushed remains in the repository's history even after the line is removed.

Scan completed in 1s.


Scan history (1 scan)
Commit Scanned at New Resolved Net
375f64c < 2026-10-22 18:59 UTC +5 0 +5

Last scanned: 375f64c · 2026-10-22 18:59 UTC

version "14.2.0"
resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-14.2.0.tgz#06d48d9035e77d5b1c85adb315482fc8240289ef"
integrity sha512-1TGiQiJVRQ3NPmZH6sx5Cfnmg6GQm9jvC1ch4TK511NjSJvjzKLzn5pPfZRNZkRPZP0HqCioSndqH8v2nRaWVQ==
markdown-it@^14.1.0, markdown-it@^14.3.1:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

High severity vulnerability may affect your project—review required:
Line 3852 lists a dependency (markdown-it) with a known High severity vulnerability.

ℹ️ Why this matters

Affected versions of markdown-it are vulnerable to Inefficient Algorithmic Complexity / Uncontrolled Resource Consumption. markdown-it processes link reference definitions with an unclosed, multi-line label or title in quadratic time in its block "reference" rule. Passing attacker-controlled Markdown to render() or parse() with default options can block the Node.js event loop (or browser main thread) for many seconds (denial of service). renderInline()/parseInline() do not run the block parser and are not affected; the "zero" preset or md.disable("reference") also avoid the vulnerable rule.

References: https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-105358, GHSA

To resolve this comment:
Check if you run markdown-it via the CLI.

  • If you're affected, upgrade this dependency to at least version 14.3.3 at extensions/vscode/yarn.lock.
  • If you're not affected, comment /fp we don't use this [condition]
💬 Ignore this finding

To ignore this, reply with:

  • /fp <comment> for false positive
  • /ar <comment> for acceptable risk
  • /other <comment> for all other reasons

You can view more details on this finding in the Semgrep AppSec Platform here.

@sf-jin-ku
sf-jin-ku merged commit 20a172a into sendbird Oct 22, 2026
12 of 24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.