feat(manager): upgrade Manager runtime to QwenPaw 2.2 - #1175
Open
LUOSENGWA wants to merge 6 commits into
Open
Conversation
LUOSENGWA
marked this pull request as ready for review
August 13, 2026 13:12
LUOSENGWA
marked this pull request as draft
August 26, 2026 12:39
LUOSENGWA
force-pushed
the
qwenpaw-2.1-manager-migration
branch
from
September 5, 2026 07:50
a0b2b6f to
6f60378
Compare
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
marked this pull request as ready for review
September 6, 2026 04:03
LUOSENGWA
force-pushed
the
qwenpaw-2.1-manager-migration
branch
from
September 10, 2026 09:03
7e90276 to
d371a4f
Compare
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
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
force-pushed
the
qwenpaw-2.1-manager-migration
branch
from
September 11, 2026 08:30
d371a4f to
04d0644
Compare
LUOSENGWA
marked this pull request as ready for review
September 12, 2026 05:48
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 ontoorigin/main(acaed255).What's included
manager/Dockerfile.qwenpaw—QWENPAW_PIP_SPEC→qwenpaw==2.2.0(+ doc comments "QwenPaw 2.2"). Unlike the Worker, the Manager has norequire_versionruntime check — its startup path (copaw_worker.run_copaw_app, API wait inqwenpaw_manager_skill_sync.py) performs no version assertion, so the DockerfileQWENPAW_PIP_SPECis the sole version controlmanager/scripts/init/start-qwenpaw-manager.sh— "QwenPaw 2.0" comments → "2.2"plugins/agentteams-manager-tools/plugin.json—qwenpaw_version→>=2.2.0,<2.3.0. Plugins declareqwenpaw_version: {min, max}with left-closed right-open semantics (>=min,<max); the oldmax: "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-enabledNo
changelog/current.mdedit: 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 (newAgentProfileConfigfields all have defaults), and the manager-tools plugin's qwenpaw API surface is unchanged.agentteams-manager-toolsplugin, whose qwenpaw API surface (qwenpaw.runtime.hooks/phases, same as the Worker teamharness plugin) is unchanged in 2.2 —HookBase/HookResultpresent,Phase8-value enum identical between 2.1/2.2copaw_worker.bridge(config conversion) +copaw_worker.run_copaw_app(qwenpaw app launch); the config schema it produces (agent.profiles) is backward-compatibleStatus
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:
QWENPAW_LLM_STREAM_FIRST_CONTENT_TIMEOUT/QWENPAW_LLM_STREAM_IDLE_TIMEOUT(native, per-phase, finest control)AGENTTEAMS_LLM_STREAM_TIMEOUT_S(single AgentTeams knob)300(new default)Deployments that want the upstream behavior can set
AGENTTEAMS_LLM_STREAM_TIMEOUT_S=30(or0to 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/main(acaed255)。改动清单
manager/Dockerfile.qwenpaw—QWENPAW_PIP_SPEC→qwenpaw==2.2.0(+ 注释同步 "QwenPaw 2.2")。与 Worker 不同,Manager 无require_version运行时强校验——启动路径(copaw_worker.run_copaw_app、qwenpaw_manager_skill_sync.py等 API)不做版本断言,版本控制完全靠 Dockerfile 的QWENPAW_PIP_SPECmanager/scripts/init/start-qwenpaw-manager.sh— "QwenPaw 2.0" 注释 → "2.2"plugins/agentteams-manager-tools/plugin.json—qwenpaw_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 面零变化。agentteams-manager-tools插件注册,其 qwenpaw API 依赖(qwenpaw.runtime.hooks/phases,与 Worker 的 teamharness 插件相同)在 2.2 零变化——HookBase/HookResult存在,Phase8 值枚举 2.1/2.2 完全一致copaw_worker.bridge(配置转换)+copaw_worker.run_copaw_app(启动 qwenpaw app);生成的 config schema(agent.profiles)向后兼容状态
QwenPaw 2.2.0 已发布到 PyPI——版本声明与发布版本一致。已 rebase 到
origin/main(acaed255)。可以 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,优先级链(可覆盖):
QWENPAW_LLM_STREAM_FIRST_CONTENT_TIMEOUT/QWENPAW_LLM_STREAM_IDLE_TIMEOUT(原生变量,分相位细调,最细粒度)AGENTTEAMS_LLM_STREAM_TIMEOUT_S(AgentTeams 单旋钮)300(新默认)需要上游行为的部署:设
AGENTTEAMS_LLM_STREAM_TIMEOUT_S=30(或0完全禁用 stall 检测)。