From d16f72f089b7d22648bf163260763a9d4e5f43eb Mon Sep 17 00:00:00 2001 From: Claude Code Date: Wed, 8 Apr 2026 18:07:13 +0000 Subject: [PATCH] Enable Blue Jay profile: init container, ConfigMap volumes, tools, extensions, theme --- apps/agent-zero/agent-zero.yaml | 98 ++++++++++++++++++++++++++++----- 1 file changed, 85 insertions(+), 13 deletions(-) diff --git a/apps/agent-zero/agent-zero.yaml b/apps/agent-zero/agent-zero.yaml index 6d861b8..41bbfd9 100644 --- a/apps/agent-zero/agent-zero.yaml +++ b/apps/agent-zero/agent-zero.yaml @@ -1,21 +1,25 @@ # ============================================================================= # Agent Zero AI Stack — NUC Deployment (RKE2 Bare-Metal) # ============================================================================= -# Deploys: AgentZero (agent UI) on RKE2 cluster -# Ollama: edge1 Pi 5 at 10.0.57.17:11434 (qwen2.5-coder:7b, CPU) +# Deploys: AgentZero (agent UI) on RKE2 cluster with Blue Jay profile +# Ollama: edge1 Pi 5 at 10.0.57.17:11434 (qwen2.5-coder:7b + nomic-embed-text) # Target: RKE2 bare-metal cluster, namespace: agent-zero +# Profile: Blue Jay (21 tools, 3 prompts, 4 extensions, theme) # # Differences from LOCAL (WSL K3s): # - Uses Longhorn StorageClass (not local-path) # - Connects to edge1 Pi 5 Ollama (not workstation R9700) # - NO Anthropic API key (free/local models only) # - NO Piper TTS or Kiwix (edge1 handles TTS, no Wikipedia needed) -# - NO hostPath volumes (no access to Windows filesystem) +# - NO hostPath volumes — profile/tools/extensions loaded via ConfigMaps # - Traefik IngressRoute for LAN access at agent-zero.iamworkin.lan -# - Knowledge base loaded via ConfigMap (not hostPath) # -# Available Ollama models on edge1: -# - qwen2.5-coder:7b ~4.7 GB Code generation (CPU, Q4_K_M) +# ConfigMaps (defined in configmaps-bluejay.yaml): +# bluejay-tools 21 Python tool modules (~520K) +# bluejay-profile agent.json, agent.yaml, system_prompt.md (~20K) +# bluejay-prompts 3 prompt templates (~11K) +# flowercore-extensions 5 Python extension modules (~76K) +# bluejay-theme CSS theme (~7K) # # Apply: KUBECONFIG=~/.kube/rke2.yaml kubectl apply -f agent-zero-nuc.yaml # ============================================================================= @@ -84,10 +88,10 @@ subjects: namespace: agent-zero # ============================================================================= -# Agent Zero — AI Agent Web UI (NUC Edition) +# Agent Zero — AI Agent Web UI (NUC Edition, Blue Jay Profile) # ============================================================================= # Connects to edge1 Pi 5 Ollama (free, local models only) -# No paid API keys — uses qwen2.5-coder:7b for everything +# Blue Jay profile with 21 tools, 3 prompts, 4 extensions --- apiVersion: apps/v1 @@ -99,6 +103,7 @@ metadata: app: agent-zero annotations: agent-zero/deployment: "nuc" + agent-zero/profile: "bluejay" agent-zero/ollama: "edge1 Pi 5 (10.0.57.17:11434)" spec: replicas: 1 @@ -115,8 +120,6 @@ spec: serviceAccountName: agent-zero initContainers: # Wait for edge1 Pi 5 Ollama to be reachable before starting Agent Zero. - # Without this, the FAISS memory system crashes on embed_query() - # and Agent Zero enters a broken state on every message. - name: wait-for-ollama image: busybox:1.37 command: ["sh", "-c"] @@ -128,6 +131,45 @@ spec: sleep 5 done echo "edge1 Ollama is reachable!" + # Assemble the Blue Jay profile directory structure from ConfigMaps. + # ConfigMaps can't create nested dirs, so we copy into the workspace PVC. + - name: setup-bluejay + image: busybox:1.37 + command: ["sh", "-c"] + args: + - | + echo "Setting up Blue Jay profile..." + # Profile root files + mkdir -p /a0/work/.bluejay/agents/bluejay/tools + mkdir -p /a0/work/.bluejay/agents/bluejay/prompts + cp /tmp/bluejay-profile/* /a0/work/.bluejay/agents/bluejay/ + # Tools + cp /tmp/bluejay-tools/* /a0/work/.bluejay/agents/bluejay/tools/ + # Prompts + cp /tmp/bluejay-prompts/* /a0/work/.bluejay/agents/bluejay/prompts/ + # Extensions + mkdir -p /a0/work/.bluejay/extensions/flowercore + cp /tmp/flowercore-extensions/* /a0/work/.bluejay/extensions/flowercore/ + # Theme + mkdir -p /a0/work/.bluejay/theme + cp /tmp/bluejay-theme/* /a0/work/.bluejay/theme/ + echo "Blue Jay profile ready:" + echo " Tools: $(ls /a0/work/.bluejay/agents/bluejay/tools/*.py | wc -l)" + echo " Prompts: $(ls /a0/work/.bluejay/agents/bluejay/prompts/*.md | wc -l)" + echo " Extensions: $(ls /a0/work/.bluejay/extensions/flowercore/*.py | wc -l)" + volumeMounts: + - name: workspace + mountPath: /a0/work + - name: bluejay-tools + mountPath: /tmp/bluejay-tools + - name: bluejay-profile + mountPath: /tmp/bluejay-profile + - name: bluejay-prompts + mountPath: /tmp/bluejay-prompts + - name: flowercore-extensions + mountPath: /tmp/flowercore-extensions + - name: bluejay-theme + mountPath: /tmp/bluejay-theme containers: - name: agent-zero image: agent0ai/agent-zero:latest @@ -142,6 +184,12 @@ spec: chmod +x kubectl && mv kubectl /usr/local/bin/kubectl && \ cp /usr/local/bin/kubectl /a0/work/kubectl fi + # Link Blue Jay profile from workspace into Agent Zero's expected paths + ln -sfn /a0/work/.bluejay/agents/bluejay /a0/agents/bluejay + ln -sfn /a0/work/.bluejay/extensions/flowercore /a0/extensions/flowercore + # Theme CSS into webui static dir + mkdir -p /a0/webui/static/css/custom + cp /a0/work/.bluejay/theme/* /a0/webui/static/css/custom/ 2>/dev/null || true # Run the original entrypoint exec /exe/initialize.sh $BRANCH ports: @@ -170,7 +218,7 @@ spec: value: "http://10.0.57.17:11434" - name: A0_SET_util_model_kwargs value: '{"num_ctx": 8192}' - # Embedding model — nomic on edge1 (if installed, fallback to none) + # Embedding model — nomic on edge1 - name: A0_SET_embed_model_provider value: "ollama" - name: A0_SET_embed_model_name @@ -186,9 +234,9 @@ spec: value: "http://10.0.57.17:11434" - name: A0_SET_browser_model_vision value: "false" - # Agent profile + # Agent profile — Blue Jay personality, tools, and system prompt - name: A0_SET_agent_profile - value: "default" + value: "bluejay" # Memory settings - name: A0_SET_memory_memorize_enabled value: "true" @@ -201,6 +249,9 @@ spec: # Speech-to-text disabled (no GPU for Whisper) - name: A0_SET_stt_model_size value: "tiny" + # Print.Web — Thermal printer service on edge2 + - name: PRINT_WEB_URL + value: "http://10.0.57.16:5200" # Kubernetes - name: KUBERNETES_SERVICE_HOST value: "kubernetes.default.svc" @@ -246,6 +297,21 @@ spec: - name: knowledge persistentVolumeClaim: claimName: agent-zero-knowledge + - name: bluejay-tools + configMap: + name: bluejay-tools + - name: bluejay-profile + configMap: + name: bluejay-profile + - name: bluejay-prompts + configMap: + name: bluejay-prompts + - name: flowercore-extensions + configMap: + name: flowercore-extensions + - name: bluejay-theme + configMap: + name: bluejay-theme --- apiVersion: v1 @@ -352,6 +418,12 @@ spec: cidr: 10.0.57.17/32 ports: - port: 11434 + # Print.Web on edge2 + - to: + - ipBlock: + cidr: 10.0.57.16/32 + ports: + - port: 5200 # K8s API - to: - ipBlock: