agentscope-ai / agentscope-ai/AgentTeams
[Bug] 版本更新后 Worker 容器未自动重建 - Builtin skills 更新不同步到运行中的 Worker || [Bug] Worker container is not automatically rebuilt after version update - Builtin skills update is not synchronized to running Worker
- Lingua principale
- Go
- Stelle
- 5.6k
- Fork
- 692
- Merge medio
- 5g 4h
- PR unite (30g)
- 23
Descrizione
## Description
更新 HiClaw manager 镜像到最新版本后,已注册的 Worker 容器没有被自动重建,导致 Builtin skills 无法同步到运行中的 Worker。
### Symptoms
1. Manager 启动时执行 `upgrade-builtins` 只同步文件到 MinIO
2. Manager 发送 Matrix 通知给 Worker,但 Worker 不会自动响应重建
3. `worker-lifecycle.json` 中 `container_status: unknown` 未被自动处理
4. 缺少版本比对和容器重建逻辑
### Impact
- 运行中的 Worker 无法获取最新的 Builtin skills
- 需要手动重建 Worker 容器才能同步更新
- 多 Agent 协作环境维护成本增加
---
## Reproduction Steps
1. 启动 HiClaw manager (旧版本)
2. 创建/注册至少一个 Worker (如 `net-worker`)
3. 停止 manager 容器
4. 拉取最新 manager 镜像:`docker pull higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/hiclaw-manager:latest`
5. 启动新镜像:`docker run -d --name hiclaw-manager ...`
6. 观察日志 `/var/log/hiclaw/manager-agent.log`
7. 检查 `workers-registry.json` 和 `worker-lifecycle.json`
---
## Expected Behavior
- 版本更新后应自动检测并重建 Worker 容器
- 或至少提供一键重建命令
---
## Actual Behavior
Manager 日志显示:
```log
[upgrade-builtins 2026-04-03 09:18:08] Step 4: Syncing builtins to registered workers' workspaces...
[upgrade-builtins 2026-04-03 09:18:08] Syncing builtins to worker: debug-wizard
[upgrade-builtins 2026-04-03 09:18:09] Syncing builtins to worker: hiclaw-crawler
[upgrade-builtins 2026-04-03 09:18:10] Syncing builtins to worker: net-worker
[upgrade-builtins 2026-04-03 09:18:11] Synced builtins to 3 worker(s)
[upgrade-builtins 2026-04-03 09:18:11] Step 6: Marked for worker skill notification (workers registered)
[hiclaw 2026-04-03 09:19:00] No container runtime found — Worker creation will output install commands
```
`workers-registry.json`:
```json
{
"version": 1,
"workers": {
"net-worker": {
"matrix_user_id": "@net-worker:matrix-local.hiclaw.io:18080",
"room_id": "!h94Nk40eUzu8boLwYq:matrix-local.hiclaw.io:18080",
"runtime": "copaw",
"deployment": "local",
"image": null
}
}
}
```
`worker-lifecycle.json`:
```json
{
"workers": {
"net-worker": {
"container_status": "unknown",
"idle_since": null,
"auto_stopped_at": null,
"last_started_at": null
}
}
}
```
---
## Root Cause Analysis
1. **容器运行时检测缺失**: Manager 启动时未检测到 `HICLAW_CONTAINER_API` 环境变量
2. **版本比对逻辑缺失**: 没有比对 manager 版本与 Worker 容器镜像版本
3. **重建机制缺失**: `upgrade-builtins` 只同步文件,不触发容器重建
4. **状态恢复逻辑缺失**: `container_status: unknown` 未触发自动修复
---
## Suggested Solutions
### 方案 1: 版本更新后自动重建 (推荐)
在 `upgrade-builtins` 脚本中添加容器重建逻辑:
```bash
# 检测 Worker 容器是否存在且镜像版本匹配
# 如不匹配则调用 container_create_worker 重建
```
### 方案 2: Manager 启动时检查
Manager 启动时检查所有已注册 Worker:
- 如容器不存在且 `HICLAW_CONTAINER_API` 可用,自动创建
- 如容器存在但镜像过时,标记待重建
### 方案 3: Worker 定期拉取
Worker 定期从 MinIO 拉取最新配置和 skills,无需重建容器
### 方案 4: hiclaw-docker-proxy 自启动
确保 `hiclaw-docker-proxy` 在 manager 之前启动并自恢复
---
## Temporary Workaround
手动重建 Worker:
```bash
# 1. 获取 MinIO 凭证
MINIO_USER=$(docker exec hiclaw-manager cat /root/manager-workspace/.minio-user)
MINIO_PASS=$(docker exec hiclaw-manager cat /root/manager-workspace/.minio-password)
# 2. 删除旧容器
docker rm -f hiclaw-worker-net-worker
# 3. 创建新容器
docker run -d --name hiclaw-worker-net-worker \
--network hiclaw-net \
-e HICLAW_FS_ENDPOINT=http://fs-local.hiclaw.io:8080 \
-e HICLAW_FS_DOMAIN=fs-local.hiclaw.io \
-e HICLAW_FS_ACCESS_KEY=admin \
-e HICLAW_FS_SECRET_KEY=${MINIO_PASS} \
-e HICLAW_WORKER_NAME=net-worker \
-e HICLAW_MATRIX_DOMAIN=matrix-local.hiclaw.io:18080 \
-e HICLAW_MATRIX_CLIENT_DOMAIN=matrix-client-local.hiclaw.io \
higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/hiclaw-copaw-worker:latest
```
---
## Environment
| Item | Value |
|------|-------|
| HiClaw Version | latest (2026-04-03) |
| Docker Version | Docker Desktop 4.x |
| OS | Windows 11 Home |
| Worker Type | copaw |
---
## Additional Context
- Manager 容器名:`hiclaw-manager`
- Worker 容器命名规则:`hiclaw-worker-{worker_name}`
- 网络名称:`hiclaw-net`
- 相关文件位于 manager 容器内 `/root/manager-workspace/`
---
## Description
After updating the HiClaw manager image to the latest version, the registered Worker container was not automatically rebuilt, causing Builtin skills to fail to be synchronized to the running Worker.
### Symptoms
1. Execute `upgrade-builtins` when Manager starts to synchronize only files to MinIO
2. Manager sends Matrix notification to Worker, but Worker does not automatically respond to reconstruction
3. `container_status: unknown` in `worker-lifecycle.json` is not automatically processed
4. Lack of version comparison and container reconstruction logic
### Impact
- The running Worker cannot obtain the latest Builtin skills
- Need to manually rebuild the Worker container to synchronize updates
- Increased maintenance costs for multi-Agent collaboration environments
---
## Reproduction Steps
1. Start HiClaw manager (old version)
2. Create/register at least one Worker (such as `net-worker`)
3. Stop the manager container
4. Pull the latest manager image: `docker pull higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/hiclaw-manager:latest`
5. Start the new image: `docker run -d --name hiclaw-manager ...`
6. Observe the log `/var/log/hiclaw/manager-agent.log`
7. Check `workers-registry.json` and `worker-lifecycle.json`
---
## Expected Behavior
- Worker containers should be automatically detected and rebuilt after version updates
- Or at least provide a one-click rebuild command
---
## Actual Behavior
Manager log shows:
```log
[upgrade-builtins 2026-04-03 09:18:08] Step 4: Syncing builtins to registered workers' workspaces...
[upgrade-builtins 2026-04-03 09:18:08] Syncing builtins to worker: debug-wizard
[upgrade-builtins 2026-04-03 09:18:09] Syncing builtins to worker: hiclaw-crawler
[upgrade-builtins 2026-04-03 09:18:10] Syncing builtins to worker: net-worker
[upgrade-builtins 2026-04-03 09:18:11] Synced builtins to 3 worker(s)
[upgrade-builtins 2026-04-03 09:18:11] Step 6: Marked for worker skill notification (workers registered)
[hiclaw 2026-04-03 09:19:00] No container runtime found — Worker creation will output install commands
```
`workers-registry.json`:
```json
{
"version": 1,
"workers": {
"net-worker": {
"matrix_user_id": "@net-worker:matrix-local.hiclaw.io:18080",
"room_id": "!h94Nk40eUzu8boLwYq:matrix-local.hiclaw.io:18080",
"runtime": "copaw",
"deployment": "local",
"image": null
}
}
}
```
`worker-lifecycle.json`:
```json
{
"workers": {
"net-worker": {
"container_status": "unknown",
"idle_since": null,
"auto_stopped_at": null,
"last_started_at": null
}
}
}
```
---
## Root Cause Analysis
1. **Container runtime detection missing**: The `HICLAW_CONTAINER_API` environment variable was not detected when the Manager started
2. **Missing version comparison logic**: There is no comparison between the manager version and the Worker container image version
3. **Missing reconstruction mechanism**: `upgrade-builtins` only synchronizes files and does not trigger container reconstruction
4. **Status recovery logic is missing**: `container_status: unknown` does not trigger automatic repair
---
## Suggested Solutions
### Option 1: Automatically rebuild after version update (recommended)
Add container rebuild logic in the `upgrade-builtins` script:
```bash
# Detect whether the Worker container exists and the image version matches
# If there is no match, call container_create_worker to rebuild
```
### Option 2: Check when Manager starts
When the Manager starts, it checks all registered Workers:
- If the container does not exist and `HICLAW_CONTAINER_API` is available, it will be created automatically
- If the container exists but the image is out of date, mark it for reconstruction
### Option 3: Worker pulls regularly
Worker regularly pulls the latest configuration and skills from MinIO without rebuilding the container.
### Solution 4: hiclaw-docker-proxy self-starting
Make sure `hiclaw-docker-proxy` is started before manager and recovers automatically
---
## Temporary Workaround
Manually rebuild the Worker:
```bash
# 1. Obtain MinIO credentials
MINIO_USER=$(docker exec hiclaw-manager cat /root/manager-workspace/.minio-user)
MINIO_PASS=$(docker exec hiclaw-manager cat /root/manager-workspace/.minio-password)
# 2. Delete the old container
docker rm -f hiclaw-worker-net-worker
# 3. Create a new container
docker run -d --name hiclaw-worker-net-worker \
--network hiclaw-net \
-e HICLAW_FS_ENDPOINT=http://fs-local.hiclaw.io:8080 \
-e HICLAW_FS_DOMAIN=fs-local.hiclaw.io \
-e HICLAW_FS_ACCESS_KEY=admin \
-e HICLAW_FS_SECRET_KEY=${MINIO_PASS} \
-e HICLAW_WORKER_NAME=net-worker \
-e HICLAW_MATRIX_DOMAIN=matrix-local.hiclaw.io:18080 \
-e HICLAW_MATRIX_CLIENT_DOMAIN=matrix-client-local.hiclaw.io \
higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/hiclaw-copaw-worker:latest
```
---
## Environment
| Item | Value |
|------|-------|
| HiClaw Version | latest (2026-04-03) |
| Docker Version | Docker Desktop 4.x |
| OS | Windows 11 Home |
| Worker Type | copaw |
---
## Additional Context
- Manager container name: `hiclaw-manager`
- Worker container naming rules: `hiclaw-worker-{worker_name}`
- Network name: `hiclaw-net`
- Relevant files are located in the manager container `/root/manager-workspace/`
Guida per i contributori
Nessuna guida per i contributori indicizzata per questo repository
Valutazione
Questa issue non è ancora stata valutata.