Skip to content

[codex] Bundle Node runtime for ACP desktop#5814

Merged
rayrayraykk merged 6 commits into
agentscope-ai:mainfrom
jinglinpeng:codex-acp-node-runtime
Jul 8, 2026
Merged

[codex] Bundle Node runtime for ACP desktop#5814
rayrayraykk merged 6 commits into
agentscope-ai:mainfrom
jinglinpeng:codex-acp-node-runtime

Conversation

@jinglinpeng

@jinglinpeng jinglinpeng commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

Description

Bundle a Node.js runtime with the Tauri desktop package and add a small ACP Node settings entry so built-in ACP agents that run through npx can work without requiring users to install Node separately.

Related Issue: N/A

Security Considerations: ACP only prepends the selected Node directory to the ACP child process PATH; it does not modify the user/system PATH. Custom Node paths are validated by running node --version and npx --version before saving.

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation
  • Refactoring

Component(s) Affected

  • Core / Backend (app, agents, config, providers, utils, local_models)
  • Console (frontend web UI)
  • Channels (DingTalk, Lark, QQ, Discord, iMessage, etc.)
  • Skills
  • CLI
  • Documentation (website)
  • Tests
  • CI/CD
  • Scripts / Deploy

Checklist

  • I ran pre-commit run --all-files locally and it passes
  • If pre-commit auto-fixed files, I committed those changes and reran checks
  • I ran tests locally (pytest or as relevant) and they pass
  • Documentation updated (if needed)
  • Ready for review

For Channel Changes (DingTalk, Lark, QQ, Console, etc.)

  • I ran ./scripts/check-channels.sh (or ./scripts/check-channels.sh --changed) and it passes
  • Contract test exists in tests/contract/channels/test_<channel>_contract.py (REQUIRED)
  • Contract test implements create_instance() with proper channel initialization
  • All 19 contract verification points pass (see tests/contract/channels/__init__.py)
  • Optional: Unit tests in tests/unit/channels/test_<channel>.py for complex internal logic

Testing

  • python -m compileall src\\qwenpaw\\agents\\acp\\node_runtime.py src\\qwenpaw\\agents\\acp\\service.py src\\qwenpaw\\app\\routers\\config.py src\\qwenpaw\\config\\config.py scripts\\pack-tauri\\stage_node_runtime.py
  • python -c "import json, pathlib; files=list(pathlib.Path('console/src/locales').glob('*.json')); [json.load(open(f, encoding='utf-8')) for f in files]; print('locales ok', len(files))"
  • git diff --check
  • python scripts\\pack-tauri\\stage_node_runtime.py --help
  • Verified local node / npx detection with the ACP Node runtime helper
  • Triggered QwenPaw Desktop Build on the fork branch for Tauri Windows/macOS packaging

Local Verification Evidence

python -m compileall src\\qwenpaw\\agents\\acp\\node_runtime.py src\\qwenpaw\\agents\\acp\\service.py src\\qwenpaw\\app\\routers\\config.py src\\qwenpaw\\config\\config.py scripts\\pack-tauri\\stage_node_runtime.py
# passed

python -c "import json, pathlib; files=list(pathlib.Path('console/src/locales').glob('*.json')); [json.load(open(f, encoding='utf-8')) for f in files]; print('locales ok', len(files))"
# locales ok 7

git diff --check
# passed

pre-commit run --all-files, full pytest, and frontend type/lint were not run locally. console/node_modules is not installed in this checkout; desktop packaging verification is running in GitHub Actions on the fork branch.

Additional Notes

The desktop bundle includes the Node runtime only, not ACP npm packages. Existing ACP commands such as npx -y @zed-industries/codex-acp still resolve packages at runtime through npm/npx.

@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown

Welcome to QwenPaw! 🐾

Hi @jinglinpeng, this is your 43rd Pull Request.

🙌 Join Developer Community

Thanks so much for your contribution! We'd love to invite you to join the official QwenPaw developer group! You can find the Discord and DingTalk group links under the "Developer Community" section on our docs page:
https://qwenpaw.agentscope.io/docs/community

We truly appreciate your enthusiasm—and look forward to your future contributions! 😊

We'll review your PR soon.

@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from 51abf87 to 325af8a Compare July 6, 2026 09:11
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 6, 2026 09:11 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from 325af8a to 8219932 Compare July 6, 2026 09:26
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 6, 2026 09:26 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from 8219932 to 277a863 Compare July 6, 2026 09:41
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 6, 2026 09:41 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from 277a863 to 4925f82 Compare July 6, 2026 09:52
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 6, 2026 09:52 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from 4925f82 to be62114 Compare July 6, 2026 10:01
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 6, 2026 10:01 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from be62114 to e8e2b8a Compare July 6, 2026 11:35
@jinglinpeng
jinglinpeng requested a deployment to ai-review-approved July 6, 2026 11:35 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 6, 2026 11:35 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from e8e2b8a to 336c534 Compare July 7, 2026 02:32
@jinglinpeng
jinglinpeng requested a deployment to ai-review-approved July 7, 2026 02:32 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 7, 2026 02:32 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from 336c534 to 5facc87 Compare July 7, 2026 02:39
@jinglinpeng
jinglinpeng requested a deployment to ai-review-approved July 7, 2026 02:39 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 7, 2026 02:39 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from 5facc87 to 6173307 Compare July 7, 2026 06:16
@jinglinpeng
jinglinpeng requested a deployment to ai-review-approved July 7, 2026 06:16 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng force-pushed the codex-acp-node-runtime branch from 6173307 to d8c25f1 Compare July 7, 2026 07:20
@jinglinpeng
jinglinpeng requested a deployment to ai-review-approved July 7, 2026 07:20 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 7, 2026 07:20 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng marked this pull request as ready for review July 7, 2026 07:46
@jinglinpeng
jinglinpeng requested a deployment to ai-review-approved July 7, 2026 08:23 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 7, 2026 08:23 — with GitHub Actions Waiting
@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

✅ QwenPaw AI Review: Passed AI Review — Awaiting Human Review

Now I have all the information needed. Let me produce the review.


1. Overview

Item Details
PR Number #5814
Author @jinglinpeng
Changes 22 files, +912 / −16
Merge Target main
Related Issue N/A (stated in PR body)

2. Background

ACP (Agent Communication Protocol) agents like Codex require a Node.js runtime to execute via npx. Currently, desktop users must install Node.js separately. This PR bundles a Node.js runtime with the Tauri desktop package and adds a UI settings entry so users can configure which Node runtime ACP uses — bundled, system, or a custom path.

3. Core Changes

  • New node_runtime.py (285 lines): Core module that detects bundled/system/custom Node runtimes, validates them by running node --version and npx --version, and builds the correct PATH for ACP subprocess spawning.
  • service.py integration: _open_conversation now calls build_acp_process_env() to inject the Node runtime into the process environment, and _resolve_process_command() resolves npx to its full path.
  • REST API (config.py): New GET /config/acp/node-runtime and PUT /config/acp/node-runtime endpoints for querying and updating the Node runtime.
  • stage_node_runtime.py (128 lines): Build script that downloads and stages a Node.js distribution into the Tauri bundle directory.
  • Rust side (command.rs): Detects the bundled node-runtime directory in release builds and passes it to the Python backend via QWENPAW_DESKTOP_NODE_RUNTIME env var.
  • Frontend (ACP/index.tsx): New "Node Settings" modal with a <Select> dropdown listing available Node candidates, plus a file-picker dialog for custom paths (Tauri native dialog on desktop, window.prompt fallback on web).
  • i18n: All 7 locale files updated with identical key structure (nodeSettings, nodePath, nodeRuntime, nodeRuntimeReason, etc.).
  • error.ts: parseErrorDetail changed from indexOf to lastIndexOf for " - " separator.
  • Build scripts: Both .sh and .ps1 pack scripts updated to invoke stage_node_runtime.py.

4. Strengths

  1. Clean separation of concerns: The node_runtime.py module is well-structured with clear functions for detection (get_node_runtime_status), validation (resolve_node_runtime), and process environment building (build_acp_process_env). The candidate-based model makes it easy to extend.

  2. Security-conscious design: The Node runtime path is only prepended to the ACP child process PATH (not system-wide). Custom paths are validated via node --version and npx --version before being accepted, preventing arbitrary executable injection.

  3. Cross-platform handling: Windows extended-length path prefix stripping (\\?\), case-insensitive path comparison (os.path.normcase), platform-aware executable names (node.exe vs bin/node), and CREATE_NO_WINDOW flag for subprocess on Windows — all handled correctly.

  4. Frontend UX: The Select dropdown with disabled unavailable options, color-coded reason messages, and native file dialog on Tauri desktop is a thoughtful implementation. The sameNodePath normalization function handles cross-platform path comparison on the client side.

  5. Complete i18n coverage: All 7 locale files are updated with consistent key structures — no missing translations.

  6. Route ordering: The new /acp/node-runtime endpoints are correctly placed before /acp/{agent_name} in the FastAPI router, preventing path-parameter hijacking.

  7. Caching in staging script: The .node-runtime-version marker file prevents redundant downloads on repeated builds.

5. Issues and Suggestions

High

None.

Medium

1. Blocking subprocess.run in async context

Code referencesrc/qwenpaw/agents/acp/node_runtime.py, _version():

def _version(executable: str, env: dict[str, str]) -> tuple[str, str]:
    creationflags = getattr(subprocess, "CREATE_NO_WINDOW", 0)
    try:
        result = subprocess.run(
            [executable, "--version"],
            capture_output=True,
            text=True,
            timeout=5,
            env=env,
            creationflags=creationflags,
            check=False,
        )

Explanation: _version() is called from resolve_node_runtime(), which is invoked from the put_acp_node_runtime async endpoint handler. subprocess.run blocks the event loop for up to 5 seconds per invocation (timeout). Since resolve_node_runtime calls _version twice (once for node, once for npx), a single PUT request could block the event loop for up to 10 seconds.

Additionally, build_acp_process_env (called from the async _open_conversation in service.py) doesn't call _version directly, but it does call shutil.which and Path.is_file() which are synchronous disk I/O — acceptable for those since they're fast, but worth noting.

Suggested fix: Wrap the subprocess calls with asyncio.to_thread or use asyncio.create_subprocess_exec:

async def _version(executable: str, env: dict[str, str]) -> tuple[str, str]:
    creationflags = getattr(subprocess, "CREATE_NO_WINDOW", 0)
    try:
        proc = await asyncio.create_subprocess_exec(
            executable, "--version",
            stdout=asyncio.subprocess.PIPE,
            stderr=asyncio.subprocess.PIPE,
            env=env,
            creationflags=creationflags,
        )
        stdout, stderr = await asyncio.wait_for(proc.communicate(), timeout=5)
        ...

Alternatively, if keeping _version synchronous, run resolve_node_runtime via asyncio.to_thread in the endpoint handler:

candidate = await asyncio.to_thread(resolve_node_runtime, node_path)

2. parseErrorDetail behavioral change from indexOf to lastIndexOf is undocumented and may affect other callers

Code referenceconsole/src/utils/error.ts:

-  const idx = msg.indexOf(" - ");
+  const idx = msg.lastIndexOf(" - ");

Explanation: This is a shared utility function. Changing from first-match to last-match semantics alters behavior for all callers, not just the new ACP Node runtime error handling. If any existing error message format contains " - " within the JSON payload itself (e.g., {"detail": "some - thing"}), lastIndexOf would find the separator inside the JSON and produce incorrect parsing. The PR body does not mention this change, and there are no tests covering it.

Suggested fix: Add a comment explaining why lastIndexOf is needed, and consider verifying that no other callers depend on first-match behavior. If only the ACP error format needs this, consider handling it in the ACP-specific error handler rather than modifying the shared utility.


3. tarfile.extractall fallback without filter on Python < 3.12

Code referencescripts/pack-tauri/stage_node_runtime.py:

    else:
        with tarfile.open(archive, "r:xz") as tar:
            try:
                tar.extractall(workdir, filter="data")
            except TypeError:
                tar.extractall(workdir)

Explanation: On Python versions before 3.12, filter="data" is not supported and the TypeError fallback calls extractall without any filter. This means a maliciously crafted tarball could write files outside workdir via path traversal (e.g., ../../etc/crontab). While the source is nodejs.org (trusted), this is a build-time security concern — a compromised CDN or MITM attack could exploit this.

Suggested fix: Add a manual path validation for the fallback case:

            except TypeError:
                for member in tar.getmembers():
                    member_path = (workdir / member.name).resolve()
                    if not str(member_path).startswith(str(workdir.resolve())):
                        raise SystemExit(
                            f"tar member escapes target: {member.name}"
                        )
                tar.extractall(workdir)

Low

1. _normalize_node_path return type annotation is misleading

Code referencesrc/qwenpaw/agents/acp/node_runtime.py:

def _normalize_node_path(value: str) -> Path | None:
    path = Path(os.path.expandvars(value)).expanduser()
    if path.is_dir():
        path = path / ("node.exe" if os.name == "nt" else "bin/node")
    return path

Explanation: The function always returns a Path, never None. The Path | None return type is misleading — callers like _bundled_node_path check for None, but that check will never be true from this function. The None return only comes from _bundled_node_path itself when the env var is empty. Consider correcting the type to Path or explicitly returning None for empty input:

def _normalize_node_path(value: str) -> Path | None:
    if not value:
        return None
    path = Path(os.path.expandvars(value)).expanduser()
    if path.is_dir():
        path = path / ("node.exe" if os.name == "nt" else "bin/node")
    return path

2. _version uses broad except Exception

Code referencesrc/qwenpaw/agents/acp/node_runtime.py:

    except Exception as exc:
        return "", f"{Path(executable).name} --version failed: {exc}"

Explanation: While this is a reasonable defensive pattern for version detection (any failure should return an error string), the project coding standards discourage overly broad exception handling. Consider narrowing to except (OSError, subprocess.SubprocessError) which covers the realistic failure modes.


3. Portuguese (Brazilian) locale uses unaccented characters

Code referenceconsole/src/locales/pt-BR.json:

"nodePathPrompt": "Informe o caminho do executavel node",
"nodeSaveFailed": "Caminho do Node indisponivel",

Explanation: "executavel" should be "executável" and "indisponivel" should be "indisponível". Other strings in the same file also lack accents (e.g., "Configuracoes" instead of "Configurações", "verificacao" instead of "verificação"). This appears to be consistent with the existing style in this locale file (pre-existing strings also lack accents), so it may be intentional, but consider verifying.

6. Summary

This is a well-architected feature that adds Node.js runtime bundling and configuration for ACP agents, with clean separation between detection logic, API endpoints, and UI. The cross-platform handling is thorough and the i18n coverage is complete. The main concern is the use of blocking subprocess.run in async endpoint handlers, which could stall the event loop under adverse conditions.

  • 2 items recommended to address before merge: (1) blocking subprocess.run in async context, (2) undocumented behavioral change to shared parseErrorDetail utility.
  • 1 item to consider: tar extraction fallback security hardening.
  • 3 items for follow-up: type annotation correction, exception narrowing, and locale accent verification.

Auto-generated by QwenPaw Review Agent | Triggered by maintainer approval

@jinglinpeng
jinglinpeng requested a deployment to ai-review-approved July 8, 2026 03:54 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 8, 2026 03:54 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng requested a deployment to ai-review-approved July 8, 2026 04:22 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng requested a deployment to maintainer-approved July 8, 2026 04:22 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng requested a deployment to ai-review-approved July 8, 2026 04:32 — with GitHub Actions Waiting
@jinglinpeng
jinglinpeng temporarily deployed to maintainer-approved July 8, 2026 04:32 — with GitHub Actions Inactive
@rayrayraykk
rayrayraykk merged commit a3be71b into agentscope-ai:main Jul 8, 2026
24 of 25 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in QwenPaw Jul 8, 2026
AIArbHub added a commit to AIArbHub/QwenPaw that referenced this pull request Jul 8, 2026
commit e936dd4
Author: Qin Xiaoming <xiaoming.qxm@gmail.com>
Date:   Wed Jul 8 21:21:25 2026 +0800

    fix(mcp): apply runtime approval level to driver policy (agentscope-ai#5864)

    Co-authored-by: Xiaoming Qin <xiaoming.qxm@alibaba-inc.com>

commit adceab9
Author: lalaliat <78087788+lalaliat@users.noreply.github.com>
Date:   Wed Jul 8 17:36:13 2026 +0800

    feat(cron): add tool safety toggle for cron jobs to control approval … (agentscope-ai#5847)

commit 717aa4d
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Wed Jul 8 16:35:14 2026 +0800

    feat(console): enhance approval card UI and UX (agentscope-ai#5855)

commit 2cf61c5
Author: Keefe Wong <595751021@qq.com>
Date:   Wed Jul 8 16:21:45 2026 +0800

    feat(console): enable long text upload (agentscope-ai#5854)

commit 691724c
Author: qbc <qianbingchen.qbc@alibaba-inc.com>
Date:   Wed Jul 8 15:19:23 2026 +0800

    fix(runtime): persist interrupted turn state and suppress empty cancel messages (agentscope-ai#5838)

commit 1178097
Author: zhijianma <zhijian.mzj@alibaba-inc.com>
Date:   Wed Jul 8 15:18:50 2026 +0800

    Revert "feat(console): enable long text upload regression config and optimize message rendering (agentscope-ai#5845)" (agentscope-ai#5851)

commit 5d335fe
Author: hehuang139 <ox48@qq.com>
Date:   Wed Jul 8 14:58:03 2026 +0800

    fix(providers): retry streaming OpenAI APIError with body status codes (agentscope-ai#5799)

commit c1ff7bc
Author: Syed Osama Ali Shah <86572800+Osamaali313@users.noreply.github.com>
Date:   Wed Jul 8 09:57:52 2026 +0300

    fix(agents): stop dropping self-paired tool messages during sanitation (agentscope-ai#5792)

commit a3be71b
Author: Jinglin Peng <jlpengcs@gmail.com>
Date:   Wed Jul 8 14:55:42 2026 +0800

    feat: Bundle Node runtime for ACP desktop (agentscope-ai#5814)

commit dc4f50c
Author: Keefe Wong <595751021@qq.com>
Date:   Wed Jul 8 14:17:35 2026 +0800

    feat(console): enable long text upload regression config and optimize message rendering (agentscope-ai#5845)

commit 41755a6
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Wed Jul 8 11:13:55 2026 +0800

    fix(packaging): add static project.urls for GitHub dependency graph (agentscope-ai#5839)

commit 69ff31d
Author: Irene Lin <yin.lin@alibaba-inc.com>
Date:   Tue Jul 7 19:53:00 2026 -0700

    fix(scroll): protect the active turn, add graduated pressure relief, and make recall failures unmistakable (agentscope-ai#5765)

commit 7e86404
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Tue Jul 7 19:06:30 2026 +0800

    chore(version): bump version 2.0.0b4 (agentscope-ai#5837)

commit 9dae676
Author: jinliyl <6469360+jinliyl@users.noreply.github.com>
Date:   Tue Jul 7 16:41:54 2026 +0800

    feat(memory): add usage-aware auto search and backend-specific embeddings (agentscope-ai#5820)

commit b113eea
Author: hongxicheng <1003394729@qq.com>
Date:   Tue Jul 7 16:37:40 2026 +0800

    feat(plugin): support plugin-registered custom channels with schema-driven config UI (agentscope-ai#4693)

commit bd8e8b9
Author: zhijianma <zhijian.mzj@alibaba-inc.com>
Date:   Tue Jul 7 16:26:29 2026 +0800

    feat(console, chat): remove default mode  of session approval level (agentscope-ai#5832)

commit 3dfef8a
Author: Mo xi <i@morxi.com>
Date:   Tue Jul 7 16:09:52 2026 +0800

    feat(channels): matrix Add Streaming Mode Like Discord in Matrix (agentscope-ai#5585)

commit 88b662f
Author: qbc <qianbingchen.qbc@alibaba-inc.com>
Date:   Tue Jul 7 16:00:09 2026 +0800

    fix: sanitize const Schema Field for Gemini Tool Parameters (agentscope-ai#5827)

commit ed2fe73
Author: lalaliat <78087788+lalaliat@users.noreply.github.com>
Date:   Tue Jul 7 15:59:23 2026 +0800

    fix(offloader): handle TextBlock objects in offload_tool_result (agentscope-ai#5831)

commit 6aff001
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Tue Jul 7 15:52:15 2026 +0800

    feat(coding-mode): allow selecting hidden folders in project browser (agentscope-ai#5828)

commit fc7b64e
Author: sidiluo <wb-lsd703406@alibaba-inc.com>
Date:   Tue Jul 7 15:48:15 2026 +0800

    docs (website): add new blog (agentscope-ai#5825)

commit 5d27c3e
Author: Osier-Yi <njuyaoliuyi@gmail.com>
Date:   Tue Jul 7 15:47:20 2026 +0800

    fix (plugin): pet approval bug (agentscope-ai#5830)

commit e80860c
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Tue Jul 7 11:54:04 2026 +0800

    feat(desktop): hidden 8-click logo gesture to open DevTools (agentscope-ai#5805)

commit ae36f4e
Author: jinliyl <6469360+jinliyl@users.noreply.github.com>
Date:   Tue Jul 7 11:47:31 2026 +0800

    refactor(memory): simplify auto-memory search state and context handling (agentscope-ai#5815)

commit 085d6b2
Author: lalaliat <78087788+lalaliat@users.noreply.github.com>
Date:   Mon Jul 6 18:18:47 2026 +0800

    feat(ci): add QwenPaw review bot (agentscope-ai#5736)

commit 58ad207
Author: VectorPeak <garrufariw@gmail.com>
Date:   Mon Jul 6 17:25:56 2026 +0800

    fix(console): route plugin market details through link guard (agentscope-ai#5750)

commit c872d7c
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Mon Jul 6 16:00:58 2026 +0800

    fix(providers): restore OpenRouter OAuth router dropped in Runtime 2.0 (agentscope-ai#5806)

commit 6ff2f02
Author: wangxhu <wananing@outlook.com>
Date:   Mon Jul 6 15:48:32 2026 +0800

    fix(crons): record run timestamps in job timezone (agentscope-ai#5783)

commit dd93efb
Author: hongxicheng <1003394729@qq.com>
Date:   Mon Jul 6 15:44:48 2026 +0800

    fix(yuanbao): prevent connection failures from empty api_domain and missing proto descriptors (agentscope-ai#5804)

commit 6e62383
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Mon Jul 6 15:22:57 2026 +0800

    fix(runtime): remove stale language arg from _process_memory_section call (agentscope-ai#5803)

commit c1de2ba
Author: Eric Zhu <320302+ekzhu@users.noreply.github.com>
Date:   Sun Jul 5 23:29:39 2026 -0700

    fix(runtime): respect configured workspace prompt files (agentscope-ai#5396)

commit 7a0a6bd
Author: ManJieqi <40858189+manjieqi@users.noreply.github.com>
Date:   Mon Jul 6 14:18:05 2026 +0800

    fix: add timezone.utc to datetime.fromtimestamp in AgentMdManager (agentscope-ai#5768)

commit 6769fba
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Mon Jul 6 13:55:46 2026 +0800

    chore(dep): pin ACP version to avoid breaking change (agentscope-ai#5798)

commit 91b0b16
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Mon Jul 6 13:53:50 2026 +0800

    Fix: timestamp always visible &&  Double /api prefix (agentscope-ai#5802)

commit 0bc68ed
Author: Jinglin Peng <jlpengcs@gmail.com>
Date:   Mon Jul 6 11:49:56 2026 +0800

    feat: switch desktop release to Tauri (agentscope-ai#5734)

commit cc6303a
Author: VectorPeak <garrufariw@gmail.com>
Date:   Mon Jul 6 11:48:51 2026 +0800

    fix(utils): recover JSON after leading whitespace (agentscope-ai#5766)

commit bb313ac
Author: Jinglin Peng <jlpengcs@gmail.com>
Date:   Mon Jul 6 11:31:53 2026 +0800

    fix: Include ACP modules in desktop bundle (agentscope-ai#5794)

commit 7052644
Author: y1y5 <105190237+y1y5@users.noreply.github.com>
Date:   Mon Jul 6 10:51:39 2026 +0800

    docs(plugins-migration): update v1 to v2 migration guides (agentscope-ai#5752)

    * docs(plugins-migration): update v1 to v2 migration guides

    * docs(plugins): address migration guide review comments

    * add migration guide navigation entry

commit f5b1203
Author: mi1k7 <75235876+ustc-mkh@users.noreply.github.com>
Date:   Sat Jul 4 00:28:22 2026 +0800

    feat(sandbox): implement windows native sandbox (agentscope-ai#5525)

    Co-authored-by: cuiyuebing <cuipaofu@gmail.com>

commit f69e61d
Author: wangfei010313 <wangfei01219@126.com>
Date:   Fri Jul 3 18:19:30 2026 +0800

    fix(providers): update GitHub Models to new endpoint and support fine-grained PAT (agentscope-ai#5735)

commit e228026
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Fri Jul 3 17:16:00 2026 +0800

    feat: add request timeout, retry and AbortSignal support (agentscope-ai#5764)

commit 66051e6
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Fri Jul 3 16:12:46 2026 +0800

    refactor(session list): unify session item into SessionItem component(agentscope-ai#5754)

commit 856f0ce
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Fri Jul 3 16:11:04 2026 +0800

    fix(config): make agent resilient to invalid MCP client config (agentscope-ai#5755)

commit 13af342
Author: qbc <qianbingchen.qbc@alibaba-inc.com>
Date:   Fri Jul 3 15:18:32 2026 +0800

    fix: show stream completion time instead of first-chunk time for assistant messages (agentscope-ai#5742)

commit 456cbf9
Author: sidiluo <wb-lsd703406@alibaba-inc.com>
Date:   Fri Jul 3 14:57:40 2026 +0800

    fix(website): update blog developer day collection and add blog GA tracking (agentscope-ai#5758)

commit 150c1d9
Author: yaozy2020 <88593746+yaozy2020@users.noreply.github.com>
Date:   Fri Jul 3 14:38:48 2026 +0800

    fix(console): mobile chat history panel shows empty session list (agentscope-ai#5744)

commit 65b4a04
Author: Runlin Lei <lei_runlin@163.com>
Date:   Fri Jul 3 14:34:43 2026 +0800

    refactor(skill): skill-related UI (agentscope-ai#5753)

commit f0cc70f
Author: wangfei010313 <wangfei01219@126.com>
Date:   Fri Jul 3 14:33:58 2026 +0800

    feat: add 'none' memory backend to disable long memory system (agentscope-ai#5732)

commit f0d2279
Author: Yue Cui <39703217+cuiyuebing@users.noreply.github.com>
Date:   Fri Jul 3 14:17:27 2026 +0800

    chore(version): bump version to 2.0.0b3 (agentscope-ai#5760)
AIArbHub added a commit to AIArbHub/QwenPaw that referenced this pull request Jul 9, 2026
commit b0d9d49
Author: Irene Lin <yin.lin@alibaba-inc.com>
Date:   Wed Jul 8 20:51:25 2026 -0700

    fix(scroll): anchor the live turn with a seam banner in the eviction index (agentscope-ai#5871)

commit 9c3a20e
Author: Irene Lin <yin.lin@alibaba-inc.com>
Date:   Wed Jul 8 19:34:25 2026 -0700

    fix(scroll): label un-headlined evicted spans in the eviction index (agentscope-ai#5848)

commit e936dd4
Author: Qin Xiaoming <xiaoming.qxm@gmail.com>
Date:   Wed Jul 8 21:21:25 2026 +0800

    fix(mcp): apply runtime approval level to driver policy (agentscope-ai#5864)

    Co-authored-by: Xiaoming Qin <xiaoming.qxm@alibaba-inc.com>

commit adceab9
Author: lalaliat <78087788+lalaliat@users.noreply.github.com>
Date:   Wed Jul 8 17:36:13 2026 +0800

    feat(cron): add tool safety toggle for cron jobs to control approval … (agentscope-ai#5847)

commit 717aa4d
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Wed Jul 8 16:35:14 2026 +0800

    feat(console): enhance approval card UI and UX (agentscope-ai#5855)

commit 2cf61c5
Author: Keefe Wong <595751021@qq.com>
Date:   Wed Jul 8 16:21:45 2026 +0800

    feat(console): enable long text upload (agentscope-ai#5854)

commit 691724c
Author: qbc <qianbingchen.qbc@alibaba-inc.com>
Date:   Wed Jul 8 15:19:23 2026 +0800

    fix(runtime): persist interrupted turn state and suppress empty cancel messages (agentscope-ai#5838)

commit 1178097
Author: zhijianma <zhijian.mzj@alibaba-inc.com>
Date:   Wed Jul 8 15:18:50 2026 +0800

    Revert "feat(console): enable long text upload regression config and optimize message rendering (agentscope-ai#5845)" (agentscope-ai#5851)

commit 5d335fe
Author: hehuang139 <ox48@qq.com>
Date:   Wed Jul 8 14:58:03 2026 +0800

    fix(providers): retry streaming OpenAI APIError with body status codes (agentscope-ai#5799)

commit c1ff7bc
Author: Syed Osama Ali Shah <86572800+Osamaali313@users.noreply.github.com>
Date:   Wed Jul 8 09:57:52 2026 +0300

    fix(agents): stop dropping self-paired tool messages during sanitation (agentscope-ai#5792)

commit a3be71b
Author: Jinglin Peng <jlpengcs@gmail.com>
Date:   Wed Jul 8 14:55:42 2026 +0800

    feat: Bundle Node runtime for ACP desktop (agentscope-ai#5814)

commit dc4f50c
Author: Keefe Wong <595751021@qq.com>
Date:   Wed Jul 8 14:17:35 2026 +0800

    feat(console): enable long text upload regression config and optimize message rendering (agentscope-ai#5845)

commit 41755a6
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Wed Jul 8 11:13:55 2026 +0800

    fix(packaging): add static project.urls for GitHub dependency graph (agentscope-ai#5839)

commit 69ff31d
Author: Irene Lin <yin.lin@alibaba-inc.com>
Date:   Tue Jul 7 19:53:00 2026 -0700

    fix(scroll): protect the active turn, add graduated pressure relief, and make recall failures unmistakable (agentscope-ai#5765)

commit 7e86404
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Tue Jul 7 19:06:30 2026 +0800

    chore(version): bump version 2.0.0b4 (agentscope-ai#5837)

commit 9dae676
Author: jinliyl <6469360+jinliyl@users.noreply.github.com>
Date:   Tue Jul 7 16:41:54 2026 +0800

    feat(memory): add usage-aware auto search and backend-specific embeddings (agentscope-ai#5820)

commit b113eea
Author: hongxicheng <1003394729@qq.com>
Date:   Tue Jul 7 16:37:40 2026 +0800

    feat(plugin): support plugin-registered custom channels with schema-driven config UI (agentscope-ai#4693)

commit bd8e8b9
Author: zhijianma <zhijian.mzj@alibaba-inc.com>
Date:   Tue Jul 7 16:26:29 2026 +0800

    feat(console, chat): remove default mode  of session approval level (agentscope-ai#5832)

commit 3dfef8a
Author: Mo xi <i@morxi.com>
Date:   Tue Jul 7 16:09:52 2026 +0800

    feat(channels): matrix Add Streaming Mode Like Discord in Matrix (agentscope-ai#5585)

commit 88b662f
Author: qbc <qianbingchen.qbc@alibaba-inc.com>
Date:   Tue Jul 7 16:00:09 2026 +0800

    fix: sanitize const Schema Field for Gemini Tool Parameters (agentscope-ai#5827)

commit ed2fe73
Author: lalaliat <78087788+lalaliat@users.noreply.github.com>
Date:   Tue Jul 7 15:59:23 2026 +0800

    fix(offloader): handle TextBlock objects in offload_tool_result (agentscope-ai#5831)

commit 6aff001
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Tue Jul 7 15:52:15 2026 +0800

    feat(coding-mode): allow selecting hidden folders in project browser (agentscope-ai#5828)

commit fc7b64e
Author: sidiluo <wb-lsd703406@alibaba-inc.com>
Date:   Tue Jul 7 15:48:15 2026 +0800

    docs (website): add new blog (agentscope-ai#5825)

commit 5d27c3e
Author: Osier-Yi <njuyaoliuyi@gmail.com>
Date:   Tue Jul 7 15:47:20 2026 +0800

    fix (plugin): pet approval bug (agentscope-ai#5830)

commit e80860c
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Tue Jul 7 11:54:04 2026 +0800

    feat(desktop): hidden 8-click logo gesture to open DevTools (agentscope-ai#5805)

commit ae36f4e
Author: jinliyl <6469360+jinliyl@users.noreply.github.com>
Date:   Tue Jul 7 11:47:31 2026 +0800

    refactor(memory): simplify auto-memory search state and context handling (agentscope-ai#5815)

commit 085d6b2
Author: lalaliat <78087788+lalaliat@users.noreply.github.com>
Date:   Mon Jul 6 18:18:47 2026 +0800

    feat(ci): add QwenPaw review bot (agentscope-ai#5736)

commit 58ad207
Author: VectorPeak <garrufariw@gmail.com>
Date:   Mon Jul 6 17:25:56 2026 +0800

    fix(console): route plugin market details through link guard (agentscope-ai#5750)

commit c872d7c
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Mon Jul 6 16:00:58 2026 +0800

    fix(providers): restore OpenRouter OAuth router dropped in Runtime 2.0 (agentscope-ai#5806)

commit 6ff2f02
Author: wangxhu <wananing@outlook.com>
Date:   Mon Jul 6 15:48:32 2026 +0800

    fix(crons): record run timestamps in job timezone (agentscope-ai#5783)

commit dd93efb
Author: hongxicheng <1003394729@qq.com>
Date:   Mon Jul 6 15:44:48 2026 +0800

    fix(yuanbao): prevent connection failures from empty api_domain and missing proto descriptors (agentscope-ai#5804)

commit 6e62383
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Mon Jul 6 15:22:57 2026 +0800

    fix(runtime): remove stale language arg from _process_memory_section call (agentscope-ai#5803)

commit c1de2ba
Author: Eric Zhu <320302+ekzhu@users.noreply.github.com>
Date:   Sun Jul 5 23:29:39 2026 -0700

    fix(runtime): respect configured workspace prompt files (agentscope-ai#5396)

commit 7a0a6bd
Author: ManJieqi <40858189+manjieqi@users.noreply.github.com>
Date:   Mon Jul 6 14:18:05 2026 +0800

    fix: add timezone.utc to datetime.fromtimestamp in AgentMdManager (agentscope-ai#5768)

commit 6769fba
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Mon Jul 6 13:55:46 2026 +0800

    chore(dep): pin ACP version to avoid breaking change (agentscope-ai#5798)

commit 91b0b16
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Mon Jul 6 13:53:50 2026 +0800

    Fix: timestamp always visible &&  Double /api prefix (agentscope-ai#5802)

commit 0bc68ed
Author: Jinglin Peng <jlpengcs@gmail.com>
Date:   Mon Jul 6 11:49:56 2026 +0800

    feat: switch desktop release to Tauri (agentscope-ai#5734)

commit cc6303a
Author: VectorPeak <garrufariw@gmail.com>
Date:   Mon Jul 6 11:48:51 2026 +0800

    fix(utils): recover JSON after leading whitespace (agentscope-ai#5766)

commit bb313ac
Author: Jinglin Peng <jlpengcs@gmail.com>
Date:   Mon Jul 6 11:31:53 2026 +0800

    fix: Include ACP modules in desktop bundle (agentscope-ai#5794)

commit 7052644
Author: y1y5 <105190237+y1y5@users.noreply.github.com>
Date:   Mon Jul 6 10:51:39 2026 +0800

    docs(plugins-migration): update v1 to v2 migration guides (agentscope-ai#5752)

    * docs(plugins-migration): update v1 to v2 migration guides

    * docs(plugins): address migration guide review comments

    * add migration guide navigation entry

commit f5b1203
Author: mi1k7 <75235876+ustc-mkh@users.noreply.github.com>
Date:   Sat Jul 4 00:28:22 2026 +0800

    feat(sandbox): implement windows native sandbox (agentscope-ai#5525)

    Co-authored-by: cuiyuebing <cuipaofu@gmail.com>

commit f69e61d
Author: wangfei010313 <wangfei01219@126.com>
Date:   Fri Jul 3 18:19:30 2026 +0800

    fix(providers): update GitHub Models to new endpoint and support fine-grained PAT (agentscope-ai#5735)

commit e228026
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Fri Jul 3 17:16:00 2026 +0800

    feat: add request timeout, retry and AbortSignal support (agentscope-ai#5764)

commit 66051e6
Author: zhaozhuang521 <71918264+zhaozhuang521@users.noreply.github.com>
Date:   Fri Jul 3 16:12:46 2026 +0800

    refactor(session list): unify session item into SessionItem component(agentscope-ai#5754)

commit 856f0ce
Author: Weirui Kuang <39145382+rayrayraykk@users.noreply.github.com>
Date:   Fri Jul 3 16:11:04 2026 +0800

    fix(config): make agent resilient to invalid MCP client config (agentscope-ai#5755)

commit 13af342
Author: qbc <qianbingchen.qbc@alibaba-inc.com>
Date:   Fri Jul 3 15:18:32 2026 +0800

    fix: show stream completion time instead of first-chunk time for assistant messages (agentscope-ai#5742)

commit 456cbf9
Author: sidiluo <wb-lsd703406@alibaba-inc.com>
Date:   Fri Jul 3 14:57:40 2026 +0800

    fix(website): update blog developer day collection and add blog GA tracking (agentscope-ai#5758)

commit 150c1d9
Author: yaozy2020 <88593746+yaozy2020@users.noreply.github.com>
Date:   Fri Jul 3 14:38:48 2026 +0800

    fix(console): mobile chat history panel shows empty session list (agentscope-ai#5744)

commit 65b4a04
Author: Runlin Lei <lei_runlin@163.com>
Date:   Fri Jul 3 14:34:43 2026 +0800

    refactor(skill): skill-related UI (agentscope-ai#5753)

commit f0cc70f
Author: wangfei010313 <wangfei01219@126.com>
Date:   Fri Jul 3 14:33:58 2026 +0800

    feat: add 'none' memory backend to disable long memory system (agentscope-ai#5732)

commit f0d2279
Author: Yue Cui <39703217+cuiyuebing@users.noreply.github.com>
Date:   Fri Jul 3 14:17:27 2026 +0800

    chore(version): bump version to 2.0.0b3 (agentscope-ai#5760)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants