Skip to content

feat(manager): upgrade Manager runtime to QwenPaw 2.2 - #1175

Open
LUOSENGWA wants to merge 6 commits into
agentscope-ai:mainfrom
LUOSENGWA:qwenpaw-2.1-manager-migration
Open

feat(manager): upgrade Manager runtime to QwenPaw 2.2#1175
LUOSENGWA wants to merge 6 commits into
agentscope-ai:mainfrom
LUOSENGWA:qwenpaw-2.1-manager-migration

Conversation

@LUOSENGWA

@LUOSENGWA LUOSENGWA commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Summary

Upgrade the Manager image's bundled QwenPaw runtime from 2.0.1 to 2.2.0, following the Worker migration in #1174. No API adaptation is needed — verified across the same three interaction layers (plugin Python API, HTTP API, config schema) and against the v2.2.0 release. The Manager also gains the 2.2.0 stalled-LLM-stream fix (#7150) — the same production defect the Worker PR closes — since the Manager runs qwenpaw too.

Companion to #1174 (Worker): both PRs are independent (zero file overlap), raised separately so each rebases cleanly onto main. Rebased onto origin/main (acaed255).

What's included

  1. manager/Dockerfile.qwenpawQWENPAW_PIP_SPECqwenpaw==2.2.0 (+ doc comments "QwenPaw 2.2"). Unlike the Worker, the Manager has no require_version runtime check — its startup path (copaw_worker.run_copaw_app, API wait in qwenpaw_manager_skill_sync.py) performs no version assertion, so the Dockerfile QWENPAW_PIP_SPEC is the sole version control
  2. manager/scripts/init/start-qwenpaw-manager.sh — "QwenPaw 2.0" comments → "2.2"
  3. plugins/agentteams-manager-tools/plugin.jsonqwenpaw_version>=2.2.0,<2.3.0. Plugins declare qwenpaw_version: {min, max} with left-closed right-open semantics (>=min,<max); the old max: "2.1.0" rejects 2.2.0. The upper-bound check is currently temporarily disabled upstream (#6532), but the declaration must be correct for when full range checking is re-enabled

No changelog/current.md edit: upstream #1182 removed that file and switched to CI-generated release notes.

Compatibility (verified against v2.2.0 tag, no adaptation)

190 commits in v2.1.0..v2.2.0. The only commit that could touch the config/model-declaration surface is #6302 — audited: the Manager's config-schema output (agent.profiles) stays loadable (new AgentProfileConfig fields all have defaults), and the manager-tools plugin's qwenpaw API surface is unchanged.

  • Manager tools (projectflow/taskflow/message/filesync) register via the agentteams-manager-tools plugin, whose qwenpaw API surface (qwenpaw.runtime.hooks/phases, same as the Worker teamharness plugin) is unchanged in 2.2 — HookBase/HookResult present, Phase 8-value enum identical between 2.1/2.2
  • Manager startup path uses copaw_worker.bridge (config conversion) + copaw_worker.run_copaw_app (qwenpaw app launch); the config schema it produces (agent.profiles) is backward-compatible
  • HTTP API routes: zero destructive deletions to Manager-facing endpoints (same audit as feat(qwenpaw): upgrade QwenPaw Worker runtime to 2.2 #1174)

Status

QwenPaw 2.2.0 is released on PyPI — version declarations match the published version. Rebased onto origin/main (acaed255). Ready for review.

AgentTeams default for LLM stream stall timeouts: 300s (QwenPaw 2.2.0 #7150)

Companion to the Worker-side change in #1174.

QwenPaw 2.2.0 adds LLM stream stall detection (#7150) with a first-content and an idle timeout, both defaulting to 30s and read at process startup. In local-LLM deployments (self-hosted SGLang serving a large model under concurrent agent load), a stream can be starved for well over 30s without being dead, so the 30s default false-kills healthy requests — observed twice in our environment (2026-08-26 and 2026-08-28, single-rank SGLang serving a 27B-FP8 model).

This change sets the AgentTeams container default to 300s in the entrypoint/start scripts, with an overridable priority chain:

  1. QWENPAW_LLM_STREAM_FIRST_CONTENT_TIMEOUT / QWENPAW_LLM_STREAM_IDLE_TIMEOUT (native, per-phase, finest control)
  2. AGENTTEAMS_LLM_STREAM_TIMEOUT_S (single AgentTeams knob)
  3. 300 (new default)

Deployments that want the upstream behavior can set AGENTTEAMS_LLM_STREAM_TIMEOUT_S=30 (or 0 to disable stall detection entirely).


将 Manager 镜像内置的 QwenPaw 运行时从 2.0.1 升级到 2.2.0,与 #1174 的 Worker 迁移一致。无需 API 适配——已在三个交互层(插件 Python API / HTTP API / config schema)和 v2.2.0 release 上验证。Manager 同样获得 2.2.0 的 stalled-LLM-stream 修复(#7150)——与 Worker PR 关闭的是同一生产缺陷,因为 Manager 也跑 qwenpaw。

Companion to #1174(Worker):两个 PR 独立(零文件重叠),分开提交以便各自干净 rebase 到 main。已 rebase 到 origin/mainacaed255)。

改动清单

  1. manager/Dockerfile.qwenpawQWENPAW_PIP_SPECqwenpaw==2.2.0(+ 注释同步 "QwenPaw 2.2")。与 Worker 不同,Manager require_version 运行时强校验——启动路径(copaw_worker.run_copaw_appqwenpaw_manager_skill_sync.py 等 API)不做版本断言,版本控制完全靠 Dockerfile 的 QWENPAW_PIP_SPEC
  2. manager/scripts/init/start-qwenpaw-manager.sh — "QwenPaw 2.0" 注释 → "2.2"
  3. plugins/agentteams-manager-tools/plugin.jsonqwenpaw_version>=2.2.0,<2.3.0。插件声明 qwenpaw_version: {min, max}(左闭右开 >=min,<max),原 max: "2.1.0" 会拒绝 2.2.0。上限检查上游目前暂时禁用(#6532),但声明必须正确以防恢复检查后失效

changelog/current.md 改动:上游 #1182 删除了该文件,改为 CI 从 merged PRs 自动生成 release notes。

兼容性(对照 v2.2.0 tag 验证,无需适配)

v2.1.0..v2.2.0 共 190 commit。唯一可能动 config/模型声明面的是 #6302——已审计:Manager 的 config-schema 输出(agent.profiles)保持可加载(新 AgentProfileConfig 字段均有默认值),manager-tools 插件的 qwenpaw API 面零变化。

  • Manager 工具(projectflow/taskflow/message/filesync)通过 agentteams-manager-tools 插件注册,其 qwenpaw API 依赖(qwenpaw.runtime.hooks/phases,与 Worker 的 teamharness 插件相同)在 2.2 零变化——HookBase/HookResult 存在,Phase 8 值枚举 2.1/2.2 完全一致
  • Manager 启动路径用 copaw_worker.bridge(配置转换)+ copaw_worker.run_copaw_app(启动 qwenpaw app);生成的 config schema(agent.profiles)向后兼容
  • HTTP API 路由:Manager 面向的端点零破坏性删除(与 feat(qwenpaw): upgrade QwenPaw Worker runtime to 2.2 #1174 相同审计)

状态

QwenPaw 2.2.0 已发布到 PyPI——版本声明与发布版本一致。已 rebase 到 origin/mainacaed255)。可以 review。

LLM 流 stall 超时:AgentTeams 容器默认 300s(QwenPaw 2.2.0 #7150)

配套 #1174(Worker)的对应改动。

2.2.0 新增 LLM 流 stall 检测(#7150):首内容 / 空闲双超时,均默认 30s,进程启动时读取。本地 LLM 部署(自托管 SGLang 并发服务大模型)下,流可能被并发负载饿死远超 30s 但并未死亡,30s 默认会误杀健康请求——我方环境 8/26、8/28 两度实锤(单 rank SGLang 服务 27B-FP8)。

本变更在容器启动脚本中将 AgentTeams 默认调为 300s,优先级链(可覆盖):

  1. QWENPAW_LLM_STREAM_FIRST_CONTENT_TIMEOUT / QWENPAW_LLM_STREAM_IDLE_TIMEOUT(原生变量,分相位细调,最细粒度)
  2. AGENTTEAMS_LLM_STREAM_TIMEOUT_S(AgentTeams 单旋钮)
  3. 300(新默认)

需要上游行为的部署:设 AGENTTEAMS_LLM_STREAM_TIMEOUT_S=30(或 0 完全禁用 stall 检测)。

@LUOSENGWA
LUOSENGWA marked this pull request as ready for review August 13, 2026 13:12
@LUOSENGWA
LUOSENGWA marked this pull request as draft August 26, 2026 12:39
@LUOSENGWA
LUOSENGWA force-pushed the qwenpaw-2.1-manager-migration branch from a0b2b6f to 6f60378 Compare September 5, 2026 07:50
@LUOSENGWA LUOSENGWA changed the title feat(manager): upgrade Manager runtime to QwenPaw 2.1.0 feat(manager): upgrade Manager runtime to QwenPaw 2.2 Sep 5, 2026
LUOSENGWA added a commit to LUOSENGWA/HiClaw that referenced this pull request Sep 6, 2026
QwenPaw 2.2.0's workspace skill watcher is directory-level: a content-only
update (edited SKILL.md, same skill dir) does not trigger an automatic
reconcile, so the updated content never appears in GET /api/skills. Force a
refresh (POST /api/skills/refresh = 'Force reconcile') right after the update
so the hot-reload regression subtest polls the refreshed content.

Fixes agentscope-ai#1175 CI: test-27-qwenpaw-manager-startup subtest 2 (skill content
hot-reload) timing out at 30s on the 2.2.0 Manager runtime.
@LUOSENGWA
LUOSENGWA marked this pull request as ready for review September 6, 2026 04:03
@LUOSENGWA
LUOSENGWA force-pushed the qwenpaw-2.1-manager-migration branch from 7e90276 to d371a4f Compare September 10, 2026 09:03
LUOSENGWA added a commit to LUOSENGWA/HiClaw that referenced this pull request Sep 10, 2026
QwenPaw 2.2.0's workspace skill watcher is directory-level: a content-only
update (edited SKILL.md, same skill dir) does not trigger an automatic
reconcile, so the updated content never appears in GET /api/skills. Force a
refresh (POST /api/skills/refresh = 'Force reconcile') right after the update
so the hot-reload regression subtest polls the refreshed content.

Fixes agentscope-ai#1175 CI: test-27-qwenpaw-manager-startup subtest 2 (skill content
hot-reload) timing out at 30s on the 2.2.0 Manager runtime.
@LUOSENGWA
LUOSENGWA marked this pull request as draft September 10, 2026 09:32
Bump the Manager container QwenPaw runtime from 2.0.1 to 2.2.0:
- manager/Dockerfile.qwenpaw: QWENPAW_PIP_SPEC 2.0.1 -> 2.2.0 (+ doc comments)
- manager/scripts/init/start-qwenpaw-manager.sh: version references 2.0 -> 2.2
- agentteams-manager-tools/plugin.json: qwenpaw_version >=2.2.0,<2.3.0
QwenPaw 2.2.0's workspace skill watcher is directory-level: a content-only
update (edited SKILL.md, same skill dir) does not trigger an automatic
reconcile, so the updated content never appears in GET /api/skills. Force a
refresh (POST /api/skills/refresh = 'Force reconcile') right after the update
so the hot-reload regression subtest polls the refreshed content.

Fixes agentscope-ai#1175 CI: test-27-qwenpaw-manager-startup subtest 2 (skill content
hot-reload) timing out at 30s on the 2.2.0 Manager runtime.
QwenPaw 2.2.0 adds LLM stream stall detection (#7150): first-content and
idle timeouts default to 30s and are read at process startup. Local-LLM
deployments (self-hosted SGLang under concurrent agent load) can starve a
stream for >30s without it being dead, so the 30s default false-kills
healthy requests (two observed incidents, 2026-08-26 / 2026-08-28).

Set the AgentTeams container default to 300s with an overridable priority
chain: native QWENPAW_LLM_STREAM_* vars (per-phase) >
AGENTTEAMS_LLM_STREAM_TIMEOUT_S (single knob) > 300.

Aligned with the Worker entrypoint change in companion PR agentscope-ai#1174.
QwenPaw >= 2.2.0 splits the skills API: the list endpoint
(GET /api/skills) returns metadata only (SkillSpec, no content);
skill content is served by the per-skill detail endpoint
(GET /api/skills/{name}, SkillDetail), read from disk at request
time.

test-27 subtest 2 was written against the 2.0.1 contract and polled
.content on the list response, which is always null on 2.2.0 ->
guaranteed 30s timeout regardless of skill-sync or reconcile
behavior. Switch the content assertion to the detail endpoint, which
exercises the real 2.2.0 hot-update path (Manager skill sync copies
the canonical file into the workspace within ~1s, detail endpoint
serves the fresh content).

Also drop the manual POST /api/skills/refresh workaround (no longer
needed: the detail endpoint reads content from disk at request time).

Verified E2E in a v1.2.2 Manager container upgraded to qwenpaw 2.2.0:
in-place SKILL.md update -> detail endpoint serves new content within
~3s.
Companion to the Worker bump (qwenpaw-2.1-worker-migration). 2.2.1 official
wheel re-verified: QWENPAW_LLM_STREAM_* registry, QWENPAW_WORKING_DIR, and the
skills list/detail contract all unchanged from 2.2.0.
@LUOSENGWA
LUOSENGWA force-pushed the qwenpaw-2.1-manager-migration branch from d371a4f to 04d0644 Compare September 11, 2026 08:30
@LUOSENGWA
LUOSENGWA marked this pull request as ready for review September 12, 2026 05:48
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.

1 participant