diff --git a/AGENTS.md b/AGENTS.md index 531d2f1..e4f5c6b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -28,25 +28,25 @@ devcontainer features test . | Feature | Ver | Description | | ------- | --- | ----------- | | `helpers4-common` | 1.1.0 | Bootstrap: `common.sh` (user detection, apt helpers, cloud-env detection) + automatic git-config self-heal on every attach — all features depend on this | -| `essential-dev` | 1.0.9 | Git visualization, editor enhancements, Markdown | +| `essential-dev` | 1.2.0 | Git visualization, editor enhancements, Markdown | | `github-dev` | 1.0.5 | gh CLI, Copilot Chat, PR/Issues/Actions extensions | | `copilot-dev` | 1.0.3 | Copilot Chat + AI instructions (commits, PRs, code review) | -| `claude-dev` | 1.1.0 | Claude Code extension + CLI + `~/.claude` named-volume persistence (credentials + memory) | -| `mistral-dev` | 1.1.0 | Mistral Vibe extension + `~/.vibe` named-volume persistence | +| `claude-dev` | 1.2.0 | Claude Code extension + CLI + `~/.claude` named-volume persistence (credentials + memory) | +| `mistral-dev` | 1.2.0 | Mistral Vibe extension + `~/.vibe` named-volume persistence | | `cline-dev` | 1.0.0 | Cline extension (`saoudrizwan.claude-dev`) + optional CLI, no credential persistence | -| `nub` | 1.1.0 | Fast TS/JS/script runner on top of existing node+package-manager (dependsOn node) | +| `nub` | 1.2.0 | Fast TS/JS/script runner on top of existing node+package-manager (dependsOn node) | | `typescript-dev` | 1.0.7 | TS/JS dev, import management (dependsOn essential-dev) | -| `angular-dev` | 1.1.0 | Angular dev, port 4200 | -| `vite-plus` | 1.1.0 | vp CLI, Oxlint/Oxfmt, Vitest | -| `package-auto-install` | 1.1.0 | Auto-detect and install packages (npm/yarn/pnpm/nub) | -| `playwright-dev` | 1.1.0 | Playwright OS deps (Chromium/Firefox/WebKit) + shared browser-binary volume + VS Code extension | -| `pnpm-store` | 1.1.0 | Shared pnpm store via Docker named volume (dependsOn helpers4-common) | -| `auto-header` | 1.1.0 | LGPL-3.0 license headers | -| `git-absorb` | 1.1.0 | git-absorb from GitHub releases | -| `bitwarden-secrets-manager` | 1.0.0 | `bws` CLI from bitwarden/sdk-sm GitHub releases, token-only auth, no persisted state | -| `dotfiles-sync` | 1.1.0 | Sync Git/SSH/GPG/npm/gh config from host; SSH key files opt-in (dependsOn helpers4-common) | -| `peon-ping` | 1.1.0 | AI agent sound notifications | -| `shell-history-per-project` | 1.1.0 | Persistent shell history (zsh/bash/fish) | +| `angular-dev` | 1.2.0 | Angular dev, port 4200 | +| `vite-plus` | 1.2.0 | vp CLI, Oxlint/Oxfmt, Vitest | +| `package-auto-install` | 1.2.0 | Auto-detect and install packages (npm/yarn/pnpm/nub) | +| `playwright-dev` | 1.2.0 | Playwright OS deps (Chromium/Firefox/WebKit) + shared browser-binary volume + VS Code extension | +| `pnpm-store` | 1.2.0 | Shared pnpm store via Docker named volume (dependsOn helpers4-common) | +| `auto-header` | 1.2.0 | LGPL-3.0 license headers | +| `git-absorb` | 1.2.0 | git-absorb from GitHub releases | +| `bitwarden-secrets-manager` | 1.2.0 | `bws` CLI from bitwarden/sdk-sm GitHub releases, token-only auth, no persisted state | +| `dotfiles-sync` | 1.2.0 | Sync Git/SSH/GPG/npm/gh config from host; SSH key files opt-in (dependsOn helpers4-common) | +| `peon-ping` | 1.2.0 | AI agent sound notifications | +| `shell-history-per-project` | 1.2.0 | Persistent shell history (zsh/bash/fish) | **Adding a new feature — checklist:** diff --git a/src/angular-dev/README.md b/src/angular-dev/README.md index e9b13ba..0a8cece 100644 --- a/src/angular-dev/README.md +++ b/src/angular-dev/README.md @@ -2,6 +2,11 @@ Angular-specific development environment with VS Code extensions and CLI autocompletion. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Features - **VS Code extensions**: Essential Angular development extensions pre-installed @@ -166,6 +171,8 @@ If `ng` command is not available: ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/angular-dev/devcontainer-feature.json b/src/angular-dev/devcontainer-feature.json index 995b4d0..b7a5375 100644 --- a/src/angular-dev/devcontainer-feature.json +++ b/src/angular-dev/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "angular-dev", - "version": "1.1.0", + "version": "1.2.0", "name": "Angular Development Environment", - "description": "Angular-specific development environment with port forwarding, VS Code extensions, and CLI autocompletion.", + "description": "Angular-specific development environment with port forwarding, VS Code extensions, and CLI autocompletion. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/angular-dev", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "angular", "typescript", "cli"], diff --git a/src/auto-header/README.md b/src/auto-header/README.md index 45a3713..c1b6700 100644 --- a/src/auto-header/README.md +++ b/src/auto-header/README.md @@ -2,6 +2,11 @@ Automatically configures VS Code with customizable file headers based on your project's license, company, and team information. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Features ✨ **Two header styles**: @@ -28,7 +33,7 @@ If you use a minimal base image (e.g. `ubuntu:latest`), add `common-utils` first { "features": { "ghcr.io/devcontainers/features/common-utils:2": {}, - "ghcr.io/helpers4/devcontainer/auto-header:latest": { ... } + "ghcr.io/helpers4/devcontainer/auto-header:1": { ... } } } ``` @@ -42,7 +47,7 @@ Add to your `.devcontainer/devcontainer.json`: ```json { "features": { - "ghcr.io/helpers4/devcontainer/auto-header:latest": { + "ghcr.io/helpers4/devcontainer/auto-header:1": { "projectName": "my-awesome-project", "license": "MIT", "company": "Acme Corp", @@ -65,7 +70,7 @@ This generates headers like: ```json { "features": { - "ghcr.io/helpers4/devcontainer/auto-header:latest": { + "ghcr.io/helpers4/devcontainer/auto-header:1": { "headerType": "custom", "projectName": "my-awesome-project", "customHeaderLines": "/**\n * @project my-awesome-project\n * @author Team\n * @license MIT\n */" @@ -106,7 +111,7 @@ This command: ```json { "features": { - "ghcr.io/helpers4/devcontainer/auto-header:latest": { + "ghcr.io/helpers4/devcontainer/auto-header:1": { "projectName": "helpers4-typescript", "license": "LGPL-3.0", "company": "helpers4", @@ -122,7 +127,7 @@ This command: ```json { "features": { - "ghcr.io/helpers4/devcontainer/auto-header:latest": { + "ghcr.io/helpers4/devcontainer/auto-header:1": { "projectName": "enterprise-app", "license": "Apache-2.0", "company": "ACME Industries", @@ -137,7 +142,7 @@ This command: ```json { "features": { - "ghcr.io/helpers4/devcontainer/auto-header:latest": { + "ghcr.io/helpers4/devcontainer/auto-header:1": { "headerType": "custom", "projectName": "my-lib", "license": "LGPL-3.0-or-later", @@ -177,7 +182,7 @@ Add `postCreateCommand` to auto-initialize: ```json { "features": { - "ghcr.io/helpers4/devcontainer/auto-header:latest": { + "ghcr.io/helpers4/devcontainer/auto-header:1": { "projectName": "my-project", "license": "MIT" } @@ -267,6 +272,8 @@ Licensed under LGPL-3.0 - see LICENSE file for details ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/auto-header/devcontainer-feature.json b/src/auto-header/devcontainer-feature.json index 18cdc12..a23cc64 100644 --- a/src/auto-header/devcontainer-feature.json +++ b/src/auto-header/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "auto-header", - "version": "1.1.0", + "version": "1.2.0", "name": "Automatic File Headers", - "description": "Automatically configures VS Code file headers with customizable templates based on project, license, company, and contributors information.", + "description": "Automatically configures VS Code file headers with customizable templates based on project, license, company, and contributors information. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/auto-header", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "license", "header", "lgpl", "copyright"], diff --git a/src/bitwarden-secrets-manager/README.md b/src/bitwarden-secrets-manager/README.md index f8c0e1c..cce9bff 100644 --- a/src/bitwarden-secrets-manager/README.md +++ b/src/bitwarden-secrets-manager/README.md @@ -4,6 +4,11 @@ This DevContainer feature installs [`bws`](https://github.com/bitwarden/sdk-sm), This is deliberately **not** a general Bitwarden feature: it installs `bws` (Secrets Manager) only, not `bw` (the password-vault CLI, which needs an interactive login/session model this feature doesn't address). If you need the vault CLI, look for a dedicated `bw` feature instead. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Usage Add this feature to your `devcontainer.json`, and pass your Secrets Manager machine account access token through as an environment variable: @@ -46,3 +51,9 @@ Set `BWS_ACCESS_TOKEN` via `containerEnv`/`remoteEnv` (sourced from a host env v The binary is downloaded straight from the matching `bws--unknown-linux-musl-.zip` GitHub release asset, its SHA-256 checksum verified against Bitwarden's own published checksums file, then extracted to `/usr/local/bin/bws`. The musl build is used (statically linked) so it runs regardless of the base image's libc. Supported architectures: `x86_64` and `aarch64`/`arm64` (e.g. Oracle Cloud Ampere A1). This feature only ever runs inside the Linux container being built — never on the host — so unlike `bws`'s own multi-OS releases, there's no Darwin/Windows case to detect here. + +## Version History + +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) comes along with this feature. +- **v1.0.0**: Initial release. diff --git a/src/bitwarden-secrets-manager/devcontainer-feature.json b/src/bitwarden-secrets-manager/devcontainer-feature.json index 0bc14d6..776816a 100644 --- a/src/bitwarden-secrets-manager/devcontainer-feature.json +++ b/src/bitwarden-secrets-manager/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "bitwarden-secrets-manager", - "version": "1.0.0", + "version": "1.2.0", "name": "Bitwarden Secrets Manager CLI", - "description": "Installs bws, the official Bitwarden Secrets Manager CLI, from bitwarden/sdk-sm GitHub releases. Non-interactive, machine-account-token auth only (BWS_ACCESS_TOKEN) — no vault login, no persisted state, no bind mounts.", + "description": "Installs bws, the official Bitwarden Secrets Manager CLI, from bitwarden/sdk-sm GitHub releases. Non-interactive, machine-account-token auth only (BWS_ACCESS_TOKEN) — no vault login, no persisted state, no bind mounts. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/bitwarden-secrets-manager", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "bitwarden", "bws", "secrets", "secrets-manager"], diff --git a/src/claude-dev/README.md b/src/claude-dev/README.md index e08d77d..5812f0a 100644 --- a/src/claude-dev/README.md +++ b/src/claude-dev/README.md @@ -5,6 +5,11 @@ across supported editors and persists `~/.claude` (credentials, config, memory) across every devcontainer rebuild — including GitHub Codespaces — via a Docker named volume. Optionally installs the `claude` CLI too. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Example Usage ```jsonc @@ -87,6 +92,8 @@ without depending on that user's shell profile already including ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/claude-dev/devcontainer-feature.json b/src/claude-dev/devcontainer-feature.json index 0d14730..8d24f71 100644 --- a/src/claude-dev/devcontainer-feature.json +++ b/src/claude-dev/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "claude-dev", - "version": "1.1.0", + "version": "1.2.0", "name": "Claude Code Development Environment", - "description": "Installs the Claude Code IDE extension (anthropic.claude-code) for VS Code and Cursor, and optionally the claude CLI. Persists ~/.claude (credentials, config, memory) across rebuilds and Codespaces via a Docker named volume, shared per host OS user.", + "description": "Installs the Claude Code IDE extension (anthropic.claude-code) for VS Code and Cursor, and optionally the claude CLI. Persists ~/.claude (credentials, config, memory) across rebuilds and Codespaces via a Docker named volume, shared per host OS user. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/claude-dev", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": [ diff --git a/src/dotfiles-sync/README.md b/src/dotfiles-sync/README.md index f70a814..9c27f35 100644 --- a/src/dotfiles-sync/README.md +++ b/src/dotfiles-sync/README.md @@ -2,7 +2,7 @@ Syncs local Git, SSH, GPG, npm, and yarn config files into the devcontainer. Optionally syncs cloud credentials (AWS, kube, Docker) and SSH private key files — opt-in only. Works on macOS, Linux, Windows (WSL and native), GitHub Codespaces, Gitpod, and DevPod. Uses a **merge strategy** for established files and a **copy-if-absent** strategy for new ones — never overwrites existing values, safe alongside cloud platform native auth and GPG signing. -> **Recommended**: if you use this feature, disable VS Code's own automatic `.gitconfig` copy (`"dev.containers.copyGitConfig": false`, a client-side VS Code setting — not something a `devcontainer.json` can control). VS Code's copy runs earlier and writes every key verbatim; this feature's merge only fills in whatever's still absent by the time it runs, so with both active, VS Code's raw copy silently wins for every key it touched and this feature's smarter merge does nothing for those. Either way, [`helpers4-common`](../helpers4-common)'s automatic git-config self-heal (every helpers4 consumer gets it, unconditionally) repairs host-specific paths left over by whichever one actually wrote them. +> **Recommended**: if you use this feature, disable VS Code's own automatic `.gitconfig` copy (`"dev.containers.copyGitConfig": false`, a client-side VS Code setting — not something a `devcontainer.json` can control). VS Code's copy runs earlier and writes every key verbatim; this feature's merge only fills in whatever's still absent by the time it runs, so with both active, VS Code's raw copy silently wins for every key it touched and this feature's smarter merge does nothing for those. Either way, this feature's dependency on [`helpers4-common`](../helpers4-common) means its self-heal mechanism is already working in the background — it does its best to fix broken paths and a missing commit-signing key left over by whichever one actually wrote them, with nothing to set up on your end. ## Usage @@ -303,6 +303,9 @@ ssh-add -l ## Version History +- **v1.2.0**: Documentation only, no functional change — description now mentions + `helpers4-common`'s automatic git-config self-heal alongside the existing "Recommended" note + above. - **v1.1.0**: SSH private/public key file copying is now opt-in (`syncSshKeys`, default `false`) — `~/.ssh/config` and `known_hosts` still always sync (agent forwarding doesn't provide either), but actual key files no longer land on the container's filesystem unless explicitly diff --git a/src/dotfiles-sync/devcontainer-feature.json b/src/dotfiles-sync/devcontainer-feature.json index e0f312e..c805d06 100644 --- a/src/dotfiles-sync/devcontainer-feature.json +++ b/src/dotfiles-sync/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "dotfiles-sync", - "version": "1.1.0", + "version": "1.2.0", "name": "Dotfiles Sync", - "description": "Syncs local Git, SSH, GPG, npm, yarn config files into the devcontainer. Optionally syncs cloud credentials (AWS, kube, Docker) and SSH private key files — opt-in only. Works on macOS, Linux, Windows (WSL), Codespaces, Gitpod, DevPod. Merges instead of overwriting.", + "description": "Syncs local Git, SSH, GPG, npm, yarn config files into the devcontainer. Optionally syncs cloud credentials (AWS, kube, Docker) and SSH private key files — opt-in only. Works on macOS, Linux, Windows (WSL), Codespaces, Gitpod, DevPod. Merges instead of overwriting. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/dotfiles-sync", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "dotfiles", "git", "ssh", "sync"], diff --git a/src/essential-dev/README.md b/src/essential-dev/README.md index 9bd5385..dbe36d5 100644 --- a/src/essential-dev/README.md +++ b/src/essential-dev/README.md @@ -2,6 +2,11 @@ Core development environment with Git integration, GitHub Copilot, Markdown support, and essential editor enhancements. Perfect base for all development projects. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Features - **Git Integration**: History, graph visualization, PR support, conventional commits @@ -67,7 +72,7 @@ That's it! All extensions and settings are applied automatically. "ghcr.io/helpers4/devcontainer/essential-dev:1": {}, "ghcr.io/helpers4/devcontainer/typescript-dev:1": {}, "ghcr.io/helpers4/devcontainer/package-auto-install:1": {}, - "ghcr.io/helpers4/devcontainer/local-mounts:1": {} + "ghcr.io/helpers4/devcontainer/dotfiles-sync:1": {} } } ``` @@ -82,7 +87,7 @@ That's it! All extensions and settings are applied automatically. "ghcr.io/helpers4/devcontainer/typescript-dev:1": {}, "ghcr.io/helpers4/devcontainer/package-auto-install:1": {}, "ghcr.io/helpers4/devcontainer/git-absorb:1": {}, - "ghcr.io/helpers4/devcontainer/local-mounts:1": {} + "ghcr.io/helpers4/devcontainer/dotfiles-sync:1": {} } } ``` @@ -114,7 +119,11 @@ All shells are automatically detected and configured when available. **Code Formatters** - Oxc/Prettier - Use `vite-plus` feature instead -- Biome - Dedicated feature available **Testing** - Vitest - Use `vite-plus` feature instead + +## Version History + +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) comes along with this feature. diff --git a/src/essential-dev/devcontainer-feature.json b/src/essential-dev/devcontainer-feature.json index df6cc08..f3313ee 100644 --- a/src/essential-dev/devcontainer-feature.json +++ b/src/essential-dev/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "essential-dev", - "version": "1.0.9", + "version": "1.2.0", "name": "Essential Development Environment", - "description": "Core development environment with Git visualization, Markdown support, and essential editor enhancements.", + "description": "Core development environment with Git visualization, Markdown support, and essential editor enhancements. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/essential-dev", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "git", "editor", "markdown", "essential"], diff --git a/src/git-absorb/README.md b/src/git-absorb/README.md index e03f6d4..9ce32e8 100644 --- a/src/git-absorb/README.md +++ b/src/git-absorb/README.md @@ -2,6 +2,11 @@ This DevContainer feature installs [git-absorb](https://github.com/tummychow/git-absorb), a tool that automatically absorbs staged changes into their logical commits. It's like `git commit --fixup` but automatic. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Features - **Automatic fixup commits**: Absorbs staged changes into existing commits automatically @@ -149,6 +154,8 @@ This feature is part of the `helpers4/devcontainer-features` repository. Contrib ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/git-absorb/devcontainer-feature.json b/src/git-absorb/devcontainer-feature.json index 261fb6d..c34876b 100644 --- a/src/git-absorb/devcontainer-feature.json +++ b/src/git-absorb/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "git-absorb", - "version": "1.1.0", + "version": "1.2.0", "name": "git absorb — Automatic Fixup Commits", - "description": "Installs git-absorb, a tool to automatically absorb staged changes into their logical commits. Like 'git commit --fixup' but automatic.", + "description": "Installs git-absorb, a tool to automatically absorb staged changes into their logical commits. Like 'git commit --fixup' but automatic. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/git-absorb", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "git", "absorb", "commits"], diff --git a/src/mistral-dev/README.md b/src/mistral-dev/README.md index 6865066..41b19b1 100644 --- a/src/mistral-dev/README.md +++ b/src/mistral-dev/README.md @@ -6,6 +6,11 @@ by Mistral out of the box. Credentials and configuration persist in a Docker named volume linked into the container — they survive all rebuilds, including `--no-cache`, and GitHub Codespaces. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Example Usage ```jsonc @@ -94,6 +99,8 @@ When `installCli: true`, the `vibe` command is installed at build time via `uv` ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/mistral-dev/devcontainer-feature.json b/src/mistral-dev/devcontainer-feature.json index 11c957e..2e17ebb 100644 --- a/src/mistral-dev/devcontainer-feature.json +++ b/src/mistral-dev/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "mistral-dev", - "version": "1.1.0", + "version": "1.2.0", "name": "Mistral Vibe Development Environment", - "description": "Installs the Mistral Vibe IDE extension (mistralai.mistral-vibe-code) for VS Code and Cursor. Persists ~/.vibe (credentials, config) across rebuilds and Codespaces via a Docker named volume, shared per host OS user.", + "description": "Installs the Mistral Vibe IDE extension (mistralai.mistral-vibe-code) for VS Code and Cursor. Persists ~/.vibe (credentials, config) across rebuilds and Codespaces via a Docker named volume, shared per host OS user. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/mistral-dev", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": [ diff --git a/src/nub/README.md b/src/nub/README.md index 64a0ba0..8fe2d8f 100644 --- a/src/nub/README.md +++ b/src/nub/README.md @@ -2,6 +2,11 @@ Installs [nub](https://nubjs.com/): a single Rust binary that runs TypeScript/JavaScript files, `package.json` scripts, and local CLIs directly on top of the Node.js and package manager already in the container — no new runtime, no lock-in. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Why this feature exists nub is explicitly **not a replacement runtime**: "runs on the node and package manager you already have." It accelerates three things that are normally slow because of Node's own CLI-wrapper overhead: @@ -61,6 +66,8 @@ No VS Code extension — nub doesn't have one. This feature is CLI tooling only. ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/nub/devcontainer-feature.json b/src/nub/devcontainer-feature.json index e3290a7..9caedd9 100644 --- a/src/nub/devcontainer-feature.json +++ b/src/nub/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "nub", - "version": "1.1.0", + "version": "1.2.0", "name": "Nub — Fast TypeScript/Node Toolchain", - "description": "Installs nub (nubjs.com): a Rust binary that runs TypeScript/JavaScript files, package.json scripts, and local CLIs directly on the Node.js and package manager already in the container — no new runtime, no lock-in. Does not manage Node versions itself (dependsOn the official node feature), so it never competes with this container's own version-selection mechanism.", + "description": "Installs nub (nubjs.com): a Rust binary that runs TypeScript/JavaScript files, package.json scripts, and local CLIs directly on the Node.js and package manager already in the container — no new runtime, no lock-in. Does not manage Node versions itself (dependsOn the official node feature), so it never competes with this container's own version-selection mechanism. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/nub", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "nub", "node", "typescript", "package-manager", "cli"], diff --git a/src/package-auto-install/README.md b/src/package-auto-install/README.md index a1f8dd5..d3a6fa7 100644 --- a/src/package-auto-install/README.md +++ b/src/package-auto-install/README.md @@ -2,6 +2,11 @@ Automatically detects and runs npm/yarn/pnpm install in non-interactive mode after container creation. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Features - **Automatic detection**: Detects package manager based on lockfile (pnpm-lock.yaml, yarn.lock, package-lock.json) @@ -153,7 +158,8 @@ For any IDE that does not have a parseable workspace file (Zed, Neovim, etc.) or `directories` takes precedence over both `workingDirectory` and `autoDiscover`. ## How It Works -Corepack Support (Node 24+) + +### Corepack Support (Node 24+) If your `package.json` contains a `packageManager` field (e.g., `"packageManager": "pnpm@9.0.0"`): @@ -162,9 +168,9 @@ If your `package.json` contains a `packageManager` field (e.g., `"packageManager 3. Enables corepack with `corepack enable` 4. Corepack then automatically installs and uses the exact package manager version specified -This is particularly important for Node 24+ where corepack is no longer included by default. +Node 24+ dropped corepack from the default install, so this step is what makes the +`packageManager` field still work there without you installing corepack yourself. -### ### Package Manager Detection The feature detects the package manager in this order: @@ -240,6 +246,8 @@ You can manually run the installation script: ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/package-auto-install/devcontainer-feature.json b/src/package-auto-install/devcontainer-feature.json index 1faca8a..7e17dd5 100644 --- a/src/package-auto-install/devcontainer-feature.json +++ b/src/package-auto-install/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "package-auto-install", - "version": "1.1.0", + "version": "1.2.0", "name": "Automatic Package Installation", - "description": "Automatically detects and runs npm/yarn/pnpm/nub install in non-interactive mode after container creation.", + "description": "Automatically detects and runs npm/yarn/pnpm/nub install in non-interactive mode after container creation. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/package-auto-install", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "pnpm", "npm", "yarn", "nub", "install"], diff --git a/src/peon-ping/README.md b/src/peon-ping/README.md index 14c9cb3..6d1e434 100644 --- a/src/peon-ping/README.md +++ b/src/peon-ping/README.md @@ -4,6 +4,11 @@ Installs [peon-ping](https://peonping.com/) and the [Peon Pet](https://marketpla Supports **Claude Code**, **GitHub Copilot**, **Cursor**, **OpenAI Codex**, and [many more IDEs](https://github.com/PeonPing/peon-ping#multi-ide-support). +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Features - **Sound notifications**: Warcraft, StarCraft, Portal, Zelda and 165+ sound packs @@ -199,6 +204,8 @@ peon packs list # List installed packs ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/peon-ping/devcontainer-feature.json b/src/peon-ping/devcontainer-feature.json index 5f06daf..0d73957 100644 --- a/src/peon-ping/devcontainer-feature.json +++ b/src/peon-ping/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "peon-ping", - "version": "1.1.0", + "version": "1.2.0", "name": "Peon Ping — AI Agent Sound Notifications", - "description": "Installs peon-ping and the Peon Pet VS Code extension for game character voice notifications when your AI coding agent finishes or needs permission. Supports VS Code/Copilot, Cursor, and Codex with audio relay for devcontainers.", + "description": "Installs peon-ping and the Peon Pet VS Code extension for game character voice notifications when your AI coding agent finishes or needs permission. Supports VS Code/Copilot, Cursor, and Codex with audio relay for devcontainers. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/peon-ping", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "peon", "audio", "notifications", "ai"], diff --git a/src/playwright-dev/README.md b/src/playwright-dev/README.md index 923dca5..9fbd44b 100644 --- a/src/playwright-dev/README.md +++ b/src/playwright-dev/README.md @@ -2,6 +2,11 @@ OS-level dependencies for headless Chromium, Firefox, and WebKit, a browser-binary cache shared across rebuilds via a Docker named volume, and the official Playwright Test VS Code extension — pre-configured so `npx playwright test` and `npx playwright install` just work, without re-downloading browsers on every rebuild. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Why this feature exists Headless browser automation (Playwright, and anything built on Chromium's DevTools Protocol — including `WebAuthn.addVirtualAuthenticator`, useful for testing passkey/WebAuthn flows without physical hardware) needs a real browser binary plus a long list of OS shared libraries. `npx playwright install --with-deps` can fetch both, but: @@ -142,6 +147,8 @@ npx playwright install ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/playwright-dev/devcontainer-feature.json b/src/playwright-dev/devcontainer-feature.json index 93735b1..a52807a 100644 --- a/src/playwright-dev/devcontainer-feature.json +++ b/src/playwright-dev/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "playwright-dev", - "version": "1.1.0", + "version": "1.2.0", "name": "Playwright Development Environment", - "description": "Playwright E2E/browser-automation toolchain: OS-level dependencies for headless Chromium, Firefox, and WebKit (via the official `playwright install-deps`), a browser-binary cache shared across rebuilds through a Docker named volume, and the official Playwright Test VS Code extension.", + "description": "Playwright E2E/browser-automation toolchain: OS-level dependencies for headless Chromium, Firefox, and WebKit (via the official `playwright install-deps`), a browser-binary cache shared across rebuilds through a Docker named volume, and the official Playwright Test VS Code extension. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/playwright-dev", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "playwright", "e2e", "chromium", "firefox", "webkit", "testing", "webauthn"], diff --git a/src/pnpm-store/README.md b/src/pnpm-store/README.md index f19b208..7dec09d 100644 --- a/src/pnpm-store/README.md +++ b/src/pnpm-store/README.md @@ -4,6 +4,11 @@ Shares a single [pnpm](https://pnpm.io) content-addressable store across **every repo and across rebuilds** via a Docker **named volume**, so no stray `.pnpm-store` folders pollute your repos. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Why a named volume? A named volume is created automatically by Docker, so the feature is fully @@ -68,6 +73,8 @@ to ensure it runs before `pnpm-store`. ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/pnpm-store/devcontainer-feature.json b/src/pnpm-store/devcontainer-feature.json index e1f5b96..d716a33 100644 --- a/src/pnpm-store/devcontainer-feature.json +++ b/src/pnpm-store/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "pnpm-store", - "version": "1.1.0", + "version": "1.2.0", "name": "pnpm Store (shared)", - "description": "Shares a single pnpm content-addressable store across every repo and across rebuilds via a Docker named volume, so no stray .pnpm-store folders pollute your repos. Zero-config and autonomous: the volume is created automatically, with no host directory to pre-create.", + "description": "Shares a single pnpm content-addressable store across every repo and across rebuilds via a Docker named volume, so no stray .pnpm-store folders pollute your repos. Zero-config and autonomous: the volume is created automatically, with no host directory to pre-create. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/pnpm-store", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "pnpm", "store", "cache"], diff --git a/src/shell-history-per-project/README.md b/src/shell-history-per-project/README.md index 0b2cca9..6f174f9 100644 --- a/src/shell-history-per-project/README.md +++ b/src/shell-history-per-project/README.md @@ -2,6 +2,11 @@ This DevContainer feature provides shell history persistence per project by mounting a shell directory and creating symbolic links internally. This ensures that your shell history is preserved across container rebuilds and is isolated per project. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Features - **Per-project history isolation**: Each project maintains its own shell history @@ -121,21 +126,14 @@ This feature differs from the existing shell-history feature by: - **Collaborative**: Can be shared with team members through project setup - **Configurable location**: Allows customization of where history is stored within the project -## Installation and Development - -This feature is automatically installed when referenced in a `devcontainer.json` file. The installation process: - -1. Creates the specified history directory -2. Updates shell configuration files -3. Creates symbolic links for seamless integration -4. Sets proper permissions for the remote user - ## Contributing This feature is part of the `helpers4/devcontainer-features` repository. Contributions and issues are welcome! ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/shell-history-per-project/devcontainer-feature.json b/src/shell-history-per-project/devcontainer-feature.json index 827cd7e..2a92c6a 100644 --- a/src/shell-history-per-project/devcontainer-feature.json +++ b/src/shell-history-per-project/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "shell-history-per-project", - "version": "1.1.0", + "version": "1.2.0", "name": "Shell History Per Project", - "description": "Persist shell history per project by automatically detecting and configuring all available shells (zsh, bash, fish). Supports auto-detection or manual shell selection.", + "description": "Persist shell history per project by automatically detecting and configuring all available shells (zsh, bash, fish). Supports auto-detection or manual shell selection. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/shell-history-per-project", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "shell", "history", "zsh", "bash"], diff --git a/src/vite-plus/README.md b/src/vite-plus/README.md index c84229f..435e30c 100644 --- a/src/vite-plus/README.md +++ b/src/vite-plus/README.md @@ -2,6 +2,11 @@ Complete Vite+ unified toolchain setup with the `vp` CLI, integrating Vite, Vitest, Oxlint, Oxfmt, Rolldown, tsdown, and Vite Task into a single development experience with VS Code extensions pre-configured. +> **Also included automatically:** helpers4's self-heal mechanism, working on both local and +> cloud containers. It does its best to fix broken paths and a missing commit-signing key, with +> nothing to set up on your end. It comes from this feature's dependency on `helpers4-common` — +> you never need to add that feature yourself. + ## Features - **Vite+ CLI (`vp`)**: Unified toolchain installed via the official installer @@ -192,7 +197,7 @@ Combine with other features for a complete development environment: "features": { "ghcr.io/helpers4/devcontainer/vite-plus:1": {}, "ghcr.io/helpers4/devcontainer/package-auto-install:1": {}, - "ghcr.io/helpers4/devcontainer/local-mounts:1": {}, + "ghcr.io/helpers4/devcontainer/dotfiles-sync:1": {}, "ghcr.io/helpers4/devcontainer/shell-history-per-project:1": {}, "ghcr.io/helpers4/devcontainer/git-absorb:1": {} } @@ -268,6 +273,8 @@ Run `vp migrate` in your project root or see the [migration guide](https://vitep ## Version History +- **v1.2.0**: Documentation only, no functional change — mentions that `helpers4-common`'s + automatic git-config self-heal (see above) now comes along with this feature. - **v1.1.0**: Switched from an inline copy of `helpers4-common`'s bootstrap (user detection, apt helpers) to a direct `dependsOn` on the `helpers4-common` feature — no behavior change, just a single source of truth for that logic instead of a copy every feature had to keep in sync. diff --git a/src/vite-plus/devcontainer-feature.json b/src/vite-plus/devcontainer-feature.json index 7979763..168360e 100644 --- a/src/vite-plus/devcontainer-feature.json +++ b/src/vite-plus/devcontainer-feature.json @@ -1,8 +1,8 @@ { "id": "vite-plus", - "version": "1.1.0", + "version": "1.2.0", "name": "Vite+ Development Environment", - "description": "Complete Vite+ unified toolchain setup (vp) with Vite, Vitest, Oxlint, Oxfmt, Rolldown, tsdown, and VS Code integration.", + "description": "Complete Vite+ unified toolchain setup (vp) with Vite, Vitest, Oxlint, Oxfmt, Rolldown, tsdown, and VS Code integration. Also includes helpers4's self-heal.", "documentationURL": "https://github.com/helpers4/devcontainer/tree/main/src/vite-plus", "licenseURL": "https://github.com/helpers4/devcontainer/blob/main/LICENSE", "keywords": ["helpers4", "vite", "vitest", "oxc", "typescript"],