Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@ LOCAL_WORKER = agentteams/worker-agent:$(VERSION)
LOCAL_COPAW_WORKER = agentteams/copaw-worker:$(VERSION)
LOCAL_HERMES_WORKER = agentteams/hermes-worker:$(VERSION)
LOCAL_QWENPAW_WORKER = agentteams/qwenpaw-worker:$(VERSION)
# SKIP_BUILD callers may not have the opt-in QwenPaw image loaded (for example CI shards).
AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE ?= $(if $(SKIP_BUILD),,$(LOCAL_QWENPAW_WORKER))
LOCAL_MANAGER_LEGACY = hiclaw/hiclaw-manager:$(VERSION)
LOCAL_MANAGER_COPAW_LEGACY = hiclaw/hiclaw-manager-copaw:$(VERSION)
LOCAL_WORKER_LEGACY = hiclaw/worker-agent:$(VERSION)
Expand Down Expand Up @@ -640,6 +642,7 @@ endif
AGENTTEAMS_INSTALL_COPAW_WORKER_IMAGE=$(LOCAL_COPAW_WORKER) \
AGENTTEAMS_INSTALL_HERMES_WORKER_IMAGE=$(LOCAL_HERMES_WORKER) \
AGENTTEAMS_INSTALL_OPENHUMAN_WORKER_IMAGE=$(LOCAL_OPENHUMAN_WORKER) \
AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE=$(AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE) \
AGENTTEAMS_INSTALL_CONTROLLER_IMAGE=$(LOCAL_CONTROLLER) \
bash ./install/hiclaw-install.sh manager

Expand All @@ -654,6 +657,7 @@ endif
AGENTTEAMS_INSTALL_COPAW_WORKER_IMAGE=$(LOCAL_COPAW_WORKER) \
AGENTTEAMS_INSTALL_HERMES_WORKER_IMAGE=$(LOCAL_HERMES_WORKER) \
AGENTTEAMS_INSTALL_OPENHUMAN_WORKER_IMAGE=$(LOCAL_OPENHUMAN_WORKER) \
AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE=$(AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE) \
bash ./install/hiclaw-install.sh manager

uninstall: ## Stop and remove Manager + all Worker containers
Expand Down Expand Up @@ -696,7 +700,7 @@ uninstall: ## Stop and remove Manager + all Worker containers

install-embedded: ## Install in embedded mode (dual-container: controller + agent)
ifndef SKIP_BUILD
$(MAKE) build-embedded build-manager build-manager-copaw build-worker build-copaw-worker build-hermes-worker
$(MAKE) build-embedded build-manager build-manager-copaw build-worker build-copaw-worker build-hermes-worker build-qwenpaw-worker
endif
@echo "==> Installing AgentTeams (embedded mode)..."
AGENTTEAMS_NON_INTERACTIVE=1 \
Expand All @@ -707,6 +711,7 @@ endif
AGENTTEAMS_INSTALL_COPAW_WORKER_IMAGE=$(LOCAL_COPAW_WORKER) \
AGENTTEAMS_INSTALL_HERMES_WORKER_IMAGE=$(LOCAL_HERMES_WORKER) \
AGENTTEAMS_INSTALL_OPENHUMAN_WORKER_IMAGE=$(LOCAL_OPENHUMAN_WORKER) \
AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE=$(AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE) \
AGENTTEAMS_MATRIX_E2EE=0 \
bash ./install/hiclaw-install.sh

Expand Down
2 changes: 2 additions & 0 deletions changelog/current.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Record image-affecting changes to `manager/`, `worker/`, `copaw/`, `openclaw-bas

---

- fix(controller): wire the dedicated QwenPaw Worker image through controller backend defaults and Helm deployments ([d9f0876](https://github.com/agentscope-ai/AgentTeams/commit/d9f08763d10e5087c7169f3051a426fb78bb55b1)).
- fix(install): propagate explicit QwenPaw Worker images through local install targets and Embedded controllers while preserving `SKIP_BUILD` image sets ([1b9bdcb](https://github.com/agentscope-ai/AgentTeams/commit/1b9bdcbae14cf836656cce8a516195af7188359f), [77ff709](https://github.com/agentscope-ai/AgentTeams/commit/77ff7093b6eed80cb5094276d585c2de732decc0)).
- feat(qwenpaw): add the QwenPaw worker runtime Python package baseline with runtime config sync, storage sync, heartbeat reporting, Matrix channel overlay, and focused unit tests.
- fix(controller): surface Kubernetes Pod container failures in Worker backend status and status API responses.
- feat(controller): expose low-cardinality AgentTeams controller metrics and optional Helm ServiceMonitor.
Expand Down
5 changes: 5 additions & 0 deletions helm/hiclaw/templates/_helpers.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -192,3 +192,8 @@ app.kubernetes.io/component: {{ .component }}
{{- $tag := default (include "hiclaw.globalImageTag" .) .Values.worker.defaultImage.openhuman.tag }}
{{- printf "%s:%s" .Values.worker.defaultImage.openhuman.repository $tag }}
{{- end }}

{{- define "hiclaw.worker.qwenpawImage" -}}
{{- $tag := default (include "hiclaw.globalImageTag" .) .Values.worker.defaultImage.qwenpaw.tag }}
{{- printf "%s:%s" .Values.worker.defaultImage.qwenpaw.repository $tag }}
{{- end }}
2 changes: 2 additions & 0 deletions helm/hiclaw/templates/controller/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ spec:
value: {{ include "hiclaw.worker.hermesImage" . | quote }}
- name: AGENTTEAMS_OPENHUMAN_WORKER_IMAGE
value: {{ include "hiclaw.worker.openhumanImage" . | quote }}
- name: AGENTTEAMS_QWENPAW_WORKER_IMAGE
value: {{ include "hiclaw.worker.qwenpawImage" . | quote }}
- name: AGENTTEAMS_DEFAULT_WORKER_RUNTIME
value: {{ .Values.worker.defaultRuntime | quote }}
- name: TZ
Expand Down
3 changes: 3 additions & 0 deletions helm/hiclaw/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,9 @@ worker:
openhuman:
repository: higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/hiclaw-openhuman-worker
tag: "" # defaults to global.imageTag
qwenpaw:
repository: higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/agentteams-qwenpaw-worker
tag: "" # defaults to global.imageTag
defaultRuntime: "openclaw"
resources:
requests:
Expand Down
3 changes: 3 additions & 0 deletions hiclaw-controller/internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -518,6 +518,7 @@ func (c *Config) DockerConfig() backend.DockerConfig {
CopawWorkerImage: envOrDefault("AGENTTEAMS_COPAW_WORKER_IMAGE", "agentteams/agentteams-copaw-worker:latest"),
HermesWorkerImage: envOrDefault("AGENTTEAMS_HERMES_WORKER_IMAGE", "agentteams/agentteams-hermes-worker:latest"),
OpenHumanWorkerImage: envOrDefault("AGENTTEAMS_OPENHUMAN_WORKER_IMAGE", "agentteams/agentteams-openhuman-worker:latest"),
QwenPawWorkerImage: envOrDefault("AGENTTEAMS_QWENPAW_WORKER_IMAGE", "agentteams/agentteams-qwenpaw-worker:latest"),
DefaultNetwork: envOrDefault("AGENTTEAMS_DOCKER_NETWORK", "agentteams-net"),
}
}
Expand Down Expand Up @@ -560,6 +561,7 @@ func (c *Config) K8sConfig() backend.K8sConfig {
CopawWorkerImage: envOrDefault("AGENTTEAMS_COPAW_WORKER_IMAGE", "agentteams/agentteams-copaw-worker:latest"),
HermesWorkerImage: envOrDefault("AGENTTEAMS_HERMES_WORKER_IMAGE", "agentteams/agentteams-hermes-worker:latest"),
OpenHumanWorkerImage: envOrDefault("AGENTTEAMS_OPENHUMAN_WORKER_IMAGE", "agentteams/agentteams-openhuman-worker:latest"),
QwenPawWorkerImage: envOrDefault("AGENTTEAMS_QWENPAW_WORKER_IMAGE", "agentteams/agentteams-qwenpaw-worker:latest"),
WorkerCPU: c.K8sWorkerCPU,
WorkerMemory: c.K8sWorkerMemory,
ControllerName: c.ControllerName,
Expand All @@ -576,6 +578,7 @@ func (c *Config) SandboxConfig() backend.SandboxConfig {
CopawWorkerImage: envOrDefault("AGENTTEAMS_COPAW_WORKER_IMAGE", "agentteams/agentteams-copaw-worker:latest"),
HermesWorkerImage: envOrDefault("AGENTTEAMS_HERMES_WORKER_IMAGE", "agentteams/agentteams-hermes-worker:latest"),
OpenHumanWorkerImage: envOrDefault("AGENTTEAMS_OPENHUMAN_WORKER_IMAGE", "agentteams/agentteams-openhuman-worker:latest"),
QwenPawWorkerImage: envOrDefault("AGENTTEAMS_QWENPAW_WORKER_IMAGE", "agentteams/agentteams-qwenpaw-worker:latest"),
WorkerCPU: c.K8sWorkerCPU,
WorkerMemory: c.K8sWorkerMemory,
SandboxPrewarmSize: c.SandboxPrewarmSize,
Expand Down
16 changes: 16 additions & 0 deletions hiclaw-controller/internal/config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,22 @@ func TestLoadConfigMetricsBindAddrIgnoresLegacyFallback(t *testing.T) {
}
}

func TestBackendConfigsIncludeQwenPawWorkerImage(t *testing.T) {
t.Setenv("AGENTTEAMS_QWENPAW_WORKER_IMAGE", "registry.example.com/agentteams-qwenpaw-worker:test")

cfg := &Config{}
tests := map[string]string{
"docker": cfg.DockerConfig().QwenPawWorkerImage,
"kubernetes": cfg.K8sConfig().QwenPawWorkerImage,
"sandbox": cfg.SandboxConfig().QwenPawWorkerImage,
}
for backendName, got := range tests {
if want := "registry.example.com/agentteams-qwenpaw-worker:test"; got != want {
t.Errorf("%s QwenPawWorkerImage = %q, want %q", backendName, got, want)
}
}
}

func TestLoadConfigAppliesManagerSpec(t *testing.T) {
t.Setenv("AGENTTEAMS_MANAGER_SPEC", `{
"model":"qwen-max",
Expand Down
18 changes: 16 additions & 2 deletions install/hiclaw-install.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
# AGENTTEAMS_INSTALL_WORKER_IMAGE Override worker image (e.g., local build)
# AGENTTEAMS_INSTALL_COPAW_WORKER_IMAGE Override copaw worker image (e.g., local build)
# AGENTTEAMS_INSTALL_HERMES_WORKER_IMAGE Override hermes worker image (e.g., local build)
# AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE Override qwenpaw worker image (e.g., local build)
# AGENTTEAMS_PORT_GATEWAY Host port for Higress gateway (default: 18080)
# AGENTTEAMS_PORT_CONSOLE Host port for Higress console (default: 18001)
# AGENTTEAMS_PORT_ELEMENT_WEB Host port for Element Web direct access (default: 18088)
Expand Down Expand Up @@ -1060,11 +1061,12 @@ AGENTTEAMS_CMS_METRICS_ENABLED=$(if ($env:AGENTTEAMS_CMS_METRICS_ENABLED) { $env
AGENTTEAMS_WORKER_IMAGE=$($Config.WORKER_IMAGE)
AGENTTEAMS_COPAW_WORKER_IMAGE=$($Config.COPAW_WORKER_IMAGE)
AGENTTEAMS_HERMES_WORKER_IMAGE=$($Config.HERMES_WORKER_IMAGE)
AGENTTEAMS_QWENPAW_WORKER_IMAGE=$($Config.QWENPAW_WORKER_IMAGE)

# Manager runtime (openclaw | copaw)
AGENTTEAMS_MANAGER_RUNTIME=$($Config.MANAGER_RUNTIME)

# Default Worker runtime (openclaw | copaw | hermes)
# Default Worker runtime (openclaw | copaw | hermes | qwenpaw)
AGENTTEAMS_DEFAULT_WORKER_RUNTIME=$($Config.DEFAULT_WORKER_RUNTIME)

# Matrix E2EE (0=disabled, 1=enabled; default: 0)
Expand Down Expand Up @@ -2486,6 +2488,8 @@ function Install-Manager {
"$($script:AGENTTEAMS_REGISTRY)/higress/agentteams-hermes-worker:$($script:AGENTTEAMS_VERSION)"
}

$script:QWENPAW_WORKER_IMAGE = $env:AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE

$script:MANAGER_COPAW_IMAGE = if ($env:AGENTTEAMS_INSTALL_MANAGER_COPAW_IMAGE) {
$env:AGENTTEAMS_INSTALL_MANAGER_COPAW_IMAGE
} else {
Expand Down Expand Up @@ -2669,6 +2673,7 @@ function Install-Manager {
$config.WORKER_IMAGE = $script:WORKER_IMAGE
$config.COPAW_WORKER_IMAGE = $script:COPAW_WORKER_IMAGE
$config.HERMES_WORKER_IMAGE = $script:HERMES_WORKER_IMAGE
$config.QWENPAW_WORKER_IMAGE = $script:QWENPAW_WORKER_IMAGE
$config.MANAGER_COPAW_IMAGE = $script:MANAGER_COPAW_IMAGE

# Write env file
Expand Down Expand Up @@ -2745,6 +2750,7 @@ function Install-Manager {
-e "AGENTTEAMS_WORKER_IMAGE=$($script:WORKER_IMAGE)" `
-e "AGENTTEAMS_COPAW_WORKER_IMAGE=$($script:COPAW_WORKER_IMAGE)" `
-e "AGENTTEAMS_HERMES_WORKER_IMAGE=$($script:HERMES_WORKER_IMAGE)" `
$(if ($script:QWENPAW_WORKER_IMAGE) { @("-e", "AGENTTEAMS_QWENPAW_WORKER_IMAGE=$($script:QWENPAW_WORKER_IMAGE)") }) `
-e "AGENTTEAMS_DEFAULT_WORKER_RUNTIME=$($script:config.DEFAULT_WORKER_RUNTIME)" `
$(if ($config.PROXY_ALLOWED_REGISTRIES) { @("-e", "AGENTTEAMS_PROXY_ALLOWED_REGISTRIES=$($config.PROXY_ALLOWED_REGISTRIES)") }) `
--restart unless-stopped `
Expand Down Expand Up @@ -2866,7 +2872,11 @@ function Install-Manager {
}

# Pull all worker runtime images (workers may use any runtime regardless of the default)
foreach ($workerImg in @($script:WORKER_IMAGE, $script:COPAW_WORKER_IMAGE, $script:HERMES_WORKER_IMAGE)) {
$workerImages = @($script:WORKER_IMAGE, $script:COPAW_WORKER_IMAGE, $script:HERMES_WORKER_IMAGE)
if ($script:QWENPAW_WORKER_IMAGE) {
$workerImages += $script:QWENPAW_WORKER_IMAGE
}
foreach ($workerImg in $workerImages) {
if ($workerImg -match $LocalImagePattern) {
if (Test-OrTagLocalImage $workerImg) {
Write-Log (Get-Msg "install.image.worker_exists" -f $workerImg)
Expand Down Expand Up @@ -3136,6 +3146,10 @@ function Install-Manager {
"-e", "AGENTTEAMS_PORT_MANAGER_CONSOLE=$($config.PORT_MANAGER_CONSOLE)"
)

if ($script:QWENPAW_WORKER_IMAGE) {
$ctrlArgs += @("-e", "AGENTTEAMS_QWENPAW_WORKER_IMAGE=$($script:QWENPAW_WORKER_IMAGE)")
}

if ($script:AGENTTEAMS_TIMEZONE) {
$ctrlArgs += @("-e", "TZ=$($script:AGENTTEAMS_TIMEZONE)")
}
Expand Down
9 changes: 8 additions & 1 deletion install/hiclaw-install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
# AGENTTEAMS_INSTALL_WORKER_IMAGE Override worker image (e.g., local build)
# AGENTTEAMS_INSTALL_COPAW_WORKER_IMAGE Override copaw worker image (e.g., local build)
# AGENTTEAMS_INSTALL_HERMES_WORKER_IMAGE Override hermes worker image (e.g., local build)
# AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE Override qwenpaw worker image (e.g., local build)
# AGENTTEAMS_NACOS_REGISTRY_URI Default Nacos registry URI for Worker market search/import
# (default: nacos://market.agentteams.io:80/public)
# AGENTTEAMS_NACOS_USERNAME Default Nacos username for nacos:// package imports (optional)
Expand Down Expand Up @@ -1023,6 +1024,7 @@ MANAGER_COPAW_IMAGE="${AGENTTEAMS_INSTALL_MANAGER_COPAW_IMAGE:-}"
WORKER_IMAGE="${AGENTTEAMS_INSTALL_WORKER_IMAGE:-}"
COPAW_WORKER_IMAGE="${AGENTTEAMS_INSTALL_COPAW_WORKER_IMAGE:-}"
HERMES_WORKER_IMAGE="${AGENTTEAMS_INSTALL_HERMES_WORKER_IMAGE:-}"
QWENPAW_WORKER_IMAGE="${AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE:-}"
CONTROLLER_IMAGE="${AGENTTEAMS_INSTALL_CONTROLLER_IMAGE:-}"

resolve_image_tags() {
Expand All @@ -1031,6 +1033,7 @@ resolve_image_tags() {
WORKER_IMAGE="${AGENTTEAMS_INSTALL_WORKER_IMAGE:-${AGENTTEAMS_REGISTRY}/higress/agentteams-worker:${AGENTTEAMS_VERSION}}"
COPAW_WORKER_IMAGE="${AGENTTEAMS_INSTALL_COPAW_WORKER_IMAGE:-${AGENTTEAMS_REGISTRY}/higress/agentteams-copaw-worker:${AGENTTEAMS_VERSION}}"
HERMES_WORKER_IMAGE="${AGENTTEAMS_INSTALL_HERMES_WORKER_IMAGE:-${AGENTTEAMS_REGISTRY}/higress/agentteams-hermes-worker:${AGENTTEAMS_VERSION}}"
QWENPAW_WORKER_IMAGE="${AGENTTEAMS_INSTALL_QWENPAW_WORKER_IMAGE:-}"
EMBEDDED_IMAGE="${AGENTTEAMS_INSTALL_EMBEDDED_IMAGE:-${AGENTTEAMS_REGISTRY}/higress/agentteams-embedded:${AGENTTEAMS_VERSION}}"
# CoPaw Worker introduced in v1.0.4; Hermes Worker introduced in v1.1.0
if [ -z "${AGENTTEAMS_INSTALL_COPAW_WORKER_IMAGE:-}" ] && _ver_lt "${AGENTTEAMS_VERSION}" "v1.0.4"; then
Expand Down Expand Up @@ -3071,8 +3074,9 @@ AGENTTEAMS_CMS_METRICS_ENABLED=${AGENTTEAMS_CMS_METRICS_ENABLED:-false}
AGENTTEAMS_WORKER_IMAGE=${WORKER_IMAGE}
AGENTTEAMS_COPAW_WORKER_IMAGE=${COPAW_WORKER_IMAGE}
AGENTTEAMS_HERMES_WORKER_IMAGE=${HERMES_WORKER_IMAGE}
AGENTTEAMS_QWENPAW_WORKER_IMAGE=${QWENPAW_WORKER_IMAGE}

# Default Worker runtime (openclaw | copaw | hermes)
# Default Worker runtime (openclaw | copaw | hermes | qwenpaw)
AGENTTEAMS_DEFAULT_WORKER_RUNTIME=${AGENTTEAMS_DEFAULT_WORKER_RUNTIME:-copaw}

# Matrix E2EE (0=disabled, 1=enabled; default: 0)
Expand Down Expand Up @@ -3263,6 +3267,7 @@ EOF
_pull_image "${WORKER_IMAGE}" "install.image.worker_exists" "install.image.pulling_worker"
_pull_image "${COPAW_WORKER_IMAGE}" "install.image.worker_exists" "install.image.pulling_worker"
_pull_image "${HERMES_WORKER_IMAGE}" "install.image.worker_exists" "install.image.pulling_worker"
_pull_image "${QWENPAW_WORKER_IMAGE}" "install.image.worker_exists" "install.image.pulling_worker"

# --- Pre-upgrade: extract Matrix passwords from running old containers ---
# Only needed when upgrading FROM old architecture (v1.0.9) TO embedded.
Expand Down Expand Up @@ -3481,6 +3486,7 @@ CREDEOF
-e "AGENTTEAMS_WORKER_IMAGE=${WORKER_IMAGE}"
-e "AGENTTEAMS_COPAW_WORKER_IMAGE=${COPAW_WORKER_IMAGE}"
-e "AGENTTEAMS_HERMES_WORKER_IMAGE=${HERMES_WORKER_IMAGE}"
-e "AGENTTEAMS_QWENPAW_WORKER_IMAGE=${QWENPAW_WORKER_IMAGE}"
-e "AGENTTEAMS_MATRIX_DOMAIN=${_matrix_domain}"
-e "AGENTTEAMS_ELEMENT_HOMESERVER_URL=http://127.0.0.1:${AGENTTEAMS_PORT_GATEWAY}"
-e "AGENTTEAMS_MATRIX_URL=http://127.0.0.1:6167"
Expand Down Expand Up @@ -3719,6 +3725,7 @@ CREDEOF
-e AGENTTEAMS_WORKER_IMAGE="${WORKER_IMAGE}" \
-e AGENTTEAMS_COPAW_WORKER_IMAGE="${COPAW_WORKER_IMAGE}" \
-e AGENTTEAMS_HERMES_WORKER_IMAGE="${HERMES_WORKER_IMAGE}" \
-e AGENTTEAMS_QWENPAW_WORKER_IMAGE="${QWENPAW_WORKER_IMAGE}" \
${AGENTTEAMS_PROXY_ALLOWED_REGISTRIES:+-e AGENTTEAMS_PROXY_ALLOWED_REGISTRIES="${AGENTTEAMS_PROXY_ALLOWED_REGISTRIES}"} \
--restart unless-stopped \
"${_proxy_image}"
Expand Down
Loading