From 1179897cba55ceced9f7ffa48c9431a02af58e14 Mon Sep 17 00:00:00 2001 From: DevContainer User Date: Fri, 27 Feb 2026 13:17:47 +0000 Subject: [PATCH] feat: remove Happy Coder and Node.js from devcontainer Happy Coder is no longer used. Node.js was only installed as a dependency for `npm install -g happy-coder`, so both are removed. This shrinks the Docker image and simplifies the configuration. Removed from: Dockerfile, Helm values/schema/templates, serverless manifests, Makefile, and all documentation. Co-Authored-By: Claude Opus 4.6 --- .github/PULL_REQUEST_TEMPLATE.md | 1 - CLAUDE.md | 6 ++--- DEPLOYMENT.md | 12 ---------- Dockerfile | 8 ------- Makefile | 1 - README.md | 35 +++------------------------- VARIABLES.md | 30 ------------------------ chart/templates/deployment.yaml | 8 ------- chart/templates/knative-service.yaml | 13 ----------- chart/values-dynamic.yaml | 7 ------ chart/values.schema.json | 23 ------------------ chart/values.yaml | 7 ------ serverless/deployment.yaml | 5 ---- serverless/knative-service.yaml | 5 ---- 14 files changed, 5 insertions(+), 156 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 128ae07..7597b76 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -19,7 +19,6 @@ - [ ] Built Docker image locally - [ ] Tested container startup - [ ] Tested repository cloning -- [ ] Tested Happy Coder integration - [ ] Tested VNC web interface ## Checklist diff --git a/CLAUDE.md b/CLAUDE.md index c590db2..794bf28 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -6,7 +6,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co The Dev Container is a Docker-based cloud development environment that provides: - Web-based GUI IDE (VSCode/Antigravity) via VNC on port 5800 -- Claude Code, Happy Coder, OpenCode, and Crush AI coding agents (terminal-based) +- Claude Code, OpenCode, and Crush AI coding agents (terminal-based) - Built-in web file manager for uploading/downloading files (optional, via `fileManager.enabled`) - Automatic GitHub repository cloning on startup - Kubernetes-native deployment with persistent home storage @@ -69,7 +69,7 @@ Container start | File | Purpose | |------|---------| -| `Dockerfile` | Image definition — installs Chrome, Node.js, VSCode, Helm, gh CLI, kubeseal, Claude Code, Happy Coder, OpenCode, Crush; creates non-root user (UID 1000) | +| `Dockerfile` | Image definition — installs Chrome, VSCode, Helm, gh CLI, kubeseal, Claude Code, OpenCode, Crush; creates non-root user (UID 1000) | | `scripts/init-repo.sh` | Configures git credentials, clones GitHub repo | | `scripts/startapp.sh` | Calls init-repo.sh then opens VSCode in the workspace | | `chart/` | Helm chart for Kubernetes deployment | @@ -188,8 +188,6 @@ helm install my-devcontainer ./chart -f custom-values.yaml - `VNC_PASSWORD` — VNC web interface password - `DISPLAY_WIDTH` / `DISPLAY_HEIGHT` — VNC resolution - `USER_ID` / `GROUP_ID` — Override UID/GID (default 1000) -- `HAPPY_SERVER_URL` / `HAPPY_WEBAPP_URL` — Custom Happy Coder endpoints -- `HAPPY_HOME_DIR` / `HAPPY_EXPERIMENTAL` - `WEB_FILE_MANAGER` — Set to `1` to enable the built-in web file manager (controlled via `fileManager.enabled` in Helm values) - `WEB_FILE_MANAGER_ALLOWED_PATHS` — Paths accessible by the file manager (default: `/workspace,/config`) - `WEB_FILE_MANAGER_DENIED_PATHS` — Paths to deny access to (takes precedence over allowed) diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index aebfc59..669fa30 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -225,18 +225,6 @@ spec: ## Advanced Configurations -### Custom Happy Coder Endpoints - -For self-hosted Happy instances: - -```bash -helm install mydev ./chart \ - --set name=mydev \ - --set githubRepo=https://github.com/youruser/yourrepo \ - --set happyServerUrl=https://your-happy-server.com \ - --set happyWebappUrl=https://your-happy-webapp.com -``` - ### Custom Display Resolution ```bash diff --git a/Dockerfile b/Dockerfile index d73c9a1..332aac4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -56,14 +56,6 @@ exec /usr/bin/google-chrome-stable \\\n\ "$@"\n' > /usr/local/bin/google-chrome && \ chmod +x /usr/local/bin/google-chrome -# Install Node.js LTS (required by Happy Coder) -RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \ - apt-get install -y nodejs && \ - rm -rf /var/lib/apt/lists/* - -# Install Happy Coder globally via npm (stable, rarely changes) -RUN npm install -g happy-coder - # Install Claude Code native binary (npm wrapper breaks remote control) RUN curl -fsSL https://claude.ai/install.sh | bash && \ cp /root/.local/bin/claude /usr/local/bin/claude && \ diff --git a/Makefile b/Makefile index 0f27f50..e69654c 100644 --- a/Makefile +++ b/Makefile @@ -26,7 +26,6 @@ run: -e GITHUB_REPO="${GITHUB_REPO}" \ -e GITHUB_TOKEN="${GITHUB_TOKEN}" \ -e VNC_PASSWORD="${VNC_PASSWORD}" \ - -e HAPPY_EXPERIMENTAL="true" \ -v $(PWD)/home:/home \ -v $(PWD)/workspace:/workspace \ --name devcontainer \ diff --git a/README.md b/README.md index 1da476f..16f67a0 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ A containerized cloud development environment with web-based GUI access, featuring: - **VSCode or Google Antigravity** via browser-based VNC (port 5800) - **SSH access** option (OpenSSH on port 22, additive with any IDE) -- **Claude Code**, **Happy Coder**, **OpenCode**, and **Crush** AI coding agents (terminal-based) +- **Claude Code**, **OpenCode**, and **Crush** AI coding agents (terminal-based) - **Built-in web file manager** for uploading/downloading files via the VNC web interface - **Helm CLI** included for Kubernetes chart development and deployment - **Automatic GitHub repo cloning** on startup @@ -114,7 +114,7 @@ The Helm chart uses a logical organization with these main sections: - **Basic Configuration**: name, image, githubRepo - **Access & Interface**: IDE, SSH, display, user settings - **Infrastructure**: storage, resources, cluster access -- **Integrations**: Happy Coder, MCP sidecars +- **Integrations**: MCP sidecars - **Smart Defaults**: auto-detection and profiles 📖 **Documentation**: @@ -189,15 +189,6 @@ helm install mydev ./chart \ --set fileManager.enabled=true ``` -### Happy Coder - -| Value | Default | Description | -|-------|---------|-------------| -| `happy.serverUrl` | `https://happy.farh.net` | Happy Coder server endpoint | -| `happy.webappUrl` | `https://happy-coder.farh.net` | Happy Coder webapp URL | -| `happy.homeDir` | `/config/userdata/.happy` | Happy runtime state directory (persists on the home PVC) | -| `happy.experimental` | `true` | Enable experimental Happy features | - ### Kubernetes cluster access The `clusterAccess` value provisions a ServiceAccount, Role/ClusterRole, and binding so the devcontainer pod can interact with the Kubernetes API. The default is `none` — no RBAC resources are created. @@ -377,30 +368,10 @@ Container start | `/config` | ReadWriteMany PVC (`userhome-{name}`) | Survives pod restarts — stores Claude credentials, dotfiles, git config | | `/workspace` | `emptyDir` | Ephemeral — repo is re-cloned on each pod start | -Happy Coder's runtime state (`HAPPY_HOME_DIR`) is kept in `/config/userdata/.happy` on the persistent home PVC, so auth credentials and settings survive pod restarts when manually started. - --- ## Troubleshooting -### Happy Coder (manual startup) - -Happy daemon is not started automatically. Launch it manually when needed: - -```bash -# Start Happy Coder daemon manually -happy daemon start - -# Check daemon status -happy daemon status - -# View daemon logs -ls ~/.happy/logs/ - -# Stop daemon if needed -happy daemon stop -``` - ### Claude not authenticated Browser-based OAuth login is the primary method (works inside VNC via the Chrome wrapper). If you prefer API key auth: @@ -466,4 +437,4 @@ The image is also built and pushed automatically by CI on every push to `main` a ## Credits - Base image: [jlesage/docker-baseimage-gui](https://github.com/jlesage/docker-baseimage-gui) -- AI assistant: [Happy Coder](https://happy.engineering) + [Claude](https://claude.ai) +- AI assistant: [Claude](https://claude.ai) diff --git a/VARIABLES.md b/VARIABLES.md index 2a76cbb..bf5e53e 100644 --- a/VARIABLES.md +++ b/VARIABLES.md @@ -52,30 +52,6 @@ Complete reference for all configurable values in the Antigravity Dev Container - **Options:** `Always`, `IfNotPresent`, `Never` - **Description:** Image pull policy -## Happy Coder Configuration - -### happyServerUrl -- **Type:** String -- **Default:** `https://happy.farh.net` -- **Description:** Happy Coder server endpoint -- **When to Change:** Self-hosted Happy instance - -### happyWebappUrl -- **Type:** String -- **Default:** `https://happy-coder.farh.net` -- **Description:** Happy Coder webapp URL -- **When to Change:** Self-hosted Happy instance - -### happyHomeDir -- **Type:** String -- **Default:** `/config/userdata/.happy` -- **Description:** Happy runtime state directory (persists on PVC) - -### happyExperimental -- **Type:** String -- **Default:** `"true"` -- **Description:** Enable experimental Happy features - ## Display Configuration ### display.width @@ -339,8 +315,6 @@ storage: clusterAccess: readonly -happyServerUrl: https://happy.internal.company.com -happyWebappUrl: https://happy-app.internal.company.com ``` ### Smart Home Development Configuration @@ -431,10 +405,6 @@ These environment variables are set in the container based on chart values: | `VNC_PASSWORD` | Secret: `vnc-password` | VNC access password | | `ANTHROPIC_API_KEY` | Secret: `anthropic-api-key` | Claude API key | | `SSH_AUTHORIZED_KEYS` | Secret: `ssh-authorized-keys` | SSH public keys | -| `HAPPY_SERVER_URL` | `happyServerUrl` | Happy server endpoint | -| `HAPPY_WEBAPP_URL` | `happyWebappUrl` | Happy webapp URL | -| `HAPPY_HOME_DIR` | `happyHomeDir` | Happy data directory | -| `HAPPY_EXPERIMENTAL` | `happyExperimental` | Experimental features | | `DISPLAY_WIDTH` | `display.width` | VNC width | | `DISPLAY_HEIGHT` | `display.height` | VNC height | | `SECURE_CONNECTION` | `secureConnection` | TLS termination | diff --git a/chart/templates/deployment.yaml b/chart/templates/deployment.yaml index 823a049..f4a22ad 100644 --- a/chart/templates/deployment.yaml +++ b/chart/templates/deployment.yaml @@ -80,14 +80,6 @@ spec: value: {{ .Values.fileManager.deniedPaths | quote }} {{- end }} {{- end }} - - name: HAPPY_HOME_DIR - value: {{ .Values.happy.homeDir | quote }} - - name: HAPPY_EXPERIMENTAL - value: {{ .Values.happy.experimental | quote }} - - name: HAPPY_SERVER_URL - value: {{ .Values.happy.serverUrl | quote }} - - name: HAPPY_WEBAPP_URL - value: {{ .Values.happy.webappUrl | quote }} {{- if .Values.githubRepo }} - name: GITHUB_REPO value: {{ .Values.githubRepo | quote }} diff --git a/chart/templates/knative-service.yaml b/chart/templates/knative-service.yaml index 79982c6..30e4b8b 100644 --- a/chart/templates/knative-service.yaml +++ b/chart/templates/knative-service.yaml @@ -59,19 +59,6 @@ spec: value: "1" - name: WEB_FILE_MANAGER_ALLOWED_PATHS value: "/workspace,/tmp" # No persistent /config in dynamic mode - # Happy Coder (ephemeral in dynamic mode) - - name: HAPPY_HOME_DIR - value: "/tmp/.happy" - - name: HAPPY_EXPERIMENTAL - value: {{ .Values.happy.experimental | quote }} - {{- if .Values.happy.serverUrl }} - - name: HAPPY_SERVER_URL - value: {{ .Values.happy.serverUrl | quote }} - {{- end }} - {{- if .Values.happy.webappUrl }} - - name: HAPPY_WEBAPP_URL - value: {{ .Values.happy.webappUrl | quote }} - {{- end }} # Secret environment variables envFrom: - secretRef: diff --git a/chart/values-dynamic.yaml b/chart/values-dynamic.yaml index 9898e1d..5d56803 100644 --- a/chart/values-dynamic.yaml +++ b/chart/values-dynamic.yaml @@ -100,13 +100,6 @@ user: shm: sizeLimit: 2Gi -# Happy Coder (ephemeral in dynamic mode) -happy: - serverUrl: "" - webappUrl: "" - homeDir: "/tmp/.happy" # Ephemeral location in dynamic mode - experimental: "true" - # MCP sidecars are not supported in dynamic mode (Knative limitation) mcp: sidecars: diff --git a/chart/values.schema.json b/chart/values.schema.json index bf11ec9..e7f1fc2 100644 --- a/chart/values.schema.json +++ b/chart/values.schema.json @@ -229,29 +229,6 @@ "enum": ["none", "readonlyns", "readwritens", "readonly", "readwrite"], "description": "Kubernetes cluster access level" }, - "happy": { - "type": "object", - "properties": { - "serverUrl": { - "type": "string", - "description": "Happy Coder server URL" - }, - "webappUrl": { - "type": "string", - "description": "Happy Coder webapp URL" - }, - "homeDir": { - "type": "string", - "description": "Happy Coder home directory" - }, - "experimental": { - "type": "string", - "enum": ["true", "false"], - "description": "Enable experimental Happy features" - } - }, - "required": ["homeDir", "experimental"] - }, "mcp": { "type": "object", "properties": { diff --git a/chart/values.yaml b/chart/values.yaml index d7ac070..70320b5 100644 --- a/chart/values.yaml +++ b/chart/values.yaml @@ -83,13 +83,6 @@ clusterAccess: none # INTEGRATIONS # ============================================================================= -# Happy Coder AI assistant configuration -happy: - serverUrl: "" - webappUrl: "" - homeDir: "/config/userdata/.happy" - experimental: "true" - # MCP (Model Context Protocol) server sidecars mcp: sidecars: diff --git a/serverless/deployment.yaml b/serverless/deployment.yaml index e0143c6..1b7b95c 100644 --- a/serverless/deployment.yaml +++ b/serverless/deployment.yaml @@ -155,11 +155,6 @@ spec: value: "1" - name: WEB_FILE_MANAGER_ALLOWED_PATHS value: "/workspace,/config" - # Happy Coder config (ephemeral in serverless mode) - - name: HAPPY_HOME_DIR - value: "/tmp/.happy" - - name: HAPPY_EXPERIMENTAL - value: "true" # Use secrets for sensitive data envFrom: - secretRef: diff --git a/serverless/knative-service.yaml b/serverless/knative-service.yaml index 8ebcedf..b2f2560 100644 --- a/serverless/knative-service.yaml +++ b/serverless/knative-service.yaml @@ -49,11 +49,6 @@ spec: value: "1" - name: WEB_FILE_MANAGER_ALLOWED_PATHS value: "/workspace,/config" - # Happy Coder config - - name: HAPPY_HOME_DIR - value: "/config/userdata/.happy" - - name: HAPPY_EXPERIMENTAL - value: "true" # Use secrets for sensitive data envFrom: - secretRef: