codeforge-dev 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/.devcontainer/.env +4 -6
  2. package/.devcontainer/.env.example +29 -0
  3. package/.devcontainer/.gitignore +8 -0
  4. package/.devcontainer/.secrets.example +12 -0
  5. package/.devcontainer/CHANGELOG.md +130 -0
  6. package/.devcontainer/CLAUDE.md +56 -19
  7. package/.devcontainer/README.md +111 -56
  8. package/.devcontainer/config/{main-system-prompt.md → defaults/main-system-prompt.md} +72 -0
  9. package/.devcontainer/config/file-manifest.json +20 -0
  10. package/.devcontainer/devcontainer.json +20 -0
  11. package/.devcontainer/docs/configuration-reference.md +90 -0
  12. package/.devcontainer/docs/keybindings.md +100 -0
  13. package/.devcontainer/docs/optional-features.md +129 -0
  14. package/.devcontainer/docs/plugins.md +154 -0
  15. package/.devcontainer/docs/troubleshooting.md +128 -0
  16. package/.devcontainer/features/agent-browser/install.sh +6 -0
  17. package/.devcontainer/features/ast-grep/install.sh +6 -0
  18. package/.devcontainer/features/biome/README.md +27 -0
  19. package/.devcontainer/features/biome/install.sh +6 -0
  20. package/.devcontainer/features/ccburn/install.sh +6 -0
  21. package/.devcontainer/features/ccstatusline/devcontainer-feature.json +5 -0
  22. package/.devcontainer/features/ccstatusline/install.sh +7 -0
  23. package/.devcontainer/features/ccusage/install.sh +6 -0
  24. package/.devcontainer/features/claude-monitor/install.sh +6 -0
  25. package/.devcontainer/features/dprint/README.md +30 -0
  26. package/.devcontainer/features/dprint/devcontainer-feature.json +18 -0
  27. package/.devcontainer/features/dprint/install.sh +131 -0
  28. package/.devcontainer/features/hadolint/README.md +35 -0
  29. package/.devcontainer/features/hadolint/devcontainer-feature.json +13 -0
  30. package/.devcontainer/features/hadolint/install.sh +86 -0
  31. package/.devcontainer/features/lsp-servers/devcontainer-feature.json +5 -0
  32. package/.devcontainer/features/lsp-servers/install.sh +7 -0
  33. package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +5 -0
  34. package/.devcontainer/features/mcp-qdrant/install.sh +13 -6
  35. package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +5 -0
  36. package/.devcontainer/features/mcp-reasoner/install.sh +8 -1
  37. package/.devcontainer/features/notify-hook/devcontainer-feature.json +5 -0
  38. package/.devcontainer/features/notify-hook/install.sh +7 -0
  39. package/.devcontainer/features/ruff/README.md +26 -0
  40. package/.devcontainer/features/ruff/devcontainer-feature.json +21 -0
  41. package/.devcontainer/features/ruff/install.sh +74 -0
  42. package/.devcontainer/features/shellcheck/README.md +38 -0
  43. package/.devcontainer/features/shellcheck/devcontainer-feature.json +13 -0
  44. package/.devcontainer/features/shellcheck/install.sh +24 -0
  45. package/.devcontainer/features/shfmt/README.md +37 -0
  46. package/.devcontainer/features/shfmt/devcontainer-feature.json +13 -0
  47. package/.devcontainer/features/shfmt/install.sh +85 -0
  48. package/.devcontainer/features/splitrail/devcontainer-feature.json +5 -0
  49. package/.devcontainer/features/splitrail/install.sh +7 -0
  50. package/.devcontainer/features/tmux/install.sh +8 -0
  51. package/.devcontainer/features/tree-sitter/install.sh +6 -0
  52. package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +3 -10
  53. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/.claude-plugin/plugin.json +1 -1
  54. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/__pycache__/format-on-stop.cpython-314.pyc +0 -0
  55. package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-on-stop.py +114 -9
  56. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/.claude-plugin/plugin.json +1 -1
  57. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/hooks/hooks.json +4 -5
  58. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/__pycache__/lint-file.cpython-314.pyc +0 -0
  59. package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/lint-file.py +478 -76
  60. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/.claude-plugin/plugin.json +1 -1
  61. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/AGENT-REDIRECTION.md +226 -0
  62. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/architect.md +17 -0
  63. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/bash-exec.md +4 -4
  64. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/claude-guide.md +14 -23
  65. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/debug-logs.md +2 -0
  66. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/dependency-analyst.md +2 -0
  67. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/doc-writer.md +13 -0
  68. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/explorer.md +2 -0
  69. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/generalist.md +10 -1
  70. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/migrator.md +6 -0
  71. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/refactorer.md +4 -0
  72. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/spec-writer.md +36 -23
  73. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/statusline-config.md +3 -3
  74. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/test-writer.md +3 -0
  75. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/hooks/hooks.json +39 -0
  76. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/advisory-test-runner.cpython-314.pyc +0 -0
  77. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/collect-edited-files.cpython-314.pyc +0 -0
  78. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/commit-reminder.cpython-314.pyc +0 -0
  79. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/git-state-injector.cpython-314.pyc +0 -0
  80. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/redirect-builtin-agents.cpython-314.pyc +0 -0
  81. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/ticket-linker.cpython-314.pyc +0 -0
  82. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/todo-harvester.cpython-314.pyc +0 -0
  83. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/advisory-test-runner.py +174 -0
  84. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/collect-edited-files.py +8 -6
  85. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/commit-reminder.py +90 -0
  86. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/git-state-injector.py +114 -0
  87. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/skill-suggester.py +61 -0
  88. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/ticket-linker.py +137 -0
  89. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/todo-harvester.py +130 -0
  90. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/SKILL.md +224 -0
  91. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/error-handling.md +166 -0
  92. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/rest-conventions.md +215 -0
  93. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/SKILL.md +211 -0
  94. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/references/language-patterns.md +327 -0
  95. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/SKILL.md +134 -0
  96. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/ecosystem-commands.md +264 -0
  97. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/license-compliance.md +80 -0
  98. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/SKILL.md +153 -0
  99. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/api-doc-templates.md +221 -0
  100. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/docstring-formats.md +296 -0
  101. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/SKILL.md +150 -0
  102. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/javascript-migrations.md +179 -0
  103. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/python-migrations.md +141 -0
  104. package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/specification-writing/SKILL.md +32 -0
  105. package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/__pycache__/block-dangerous.cpython-314.pyc +0 -0
  106. package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/hooks/hooks.json +1 -1
  107. package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/__pycache__/guard-protected.cpython-314.pyc +0 -0
  108. package/.devcontainer/scripts/check-setup.sh +72 -0
  109. package/.devcontainer/scripts/setup-aliases.sh +43 -3
  110. package/.devcontainer/scripts/setup-auth.sh +74 -0
  111. package/.devcontainer/scripts/setup-config.sh +112 -22
  112. package/.devcontainer/scripts/setup-update-claude.sh +8 -0
  113. package/.devcontainer/scripts/setup.sh +46 -13
  114. package/README.md +23 -190
  115. package/package.json +1 -1
  116. package/setup.js +245 -71
  117. package/.devcontainer/features/claude-code/README.md +0 -498
  118. package/.devcontainer/features/claude-code/config/settings.json +0 -72
  119. package/.devcontainer/features/claude-code/config/system-prompt.md +0 -118
  120. package/.devcontainer/features/claude-code/config/world-building-sp.md +0 -1432
  121. package/.devcontainer/features/claude-code/devcontainer-feature.json +0 -42
  122. package/.devcontainer/features/claude-code/install.sh +0 -466
  123. package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/.claude-plugin/plugin.json +0 -7
  124. package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/hooks/hooks.json +0 -17
  125. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/.claude-plugin/plugin.json +0 -6
  126. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/config/planning-instructions.md +0 -14
  127. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/functional-conjuring-map.md +0 -989
  128. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/hooks/hooks.json +0 -33
  129. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/__pycache__/post-enhance-task.cpython-314.pyc +0 -0
  130. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhance-planning.py +0 -71
  131. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-plan.sh +0 -68
  132. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-task.sh +0 -120
  133. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-plan.py +0 -133
  134. package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-task.py +0 -253
  135. /package/.devcontainer/config/{keybindings.json → defaults/keybindings.json} +0 -0
  136. /package/.devcontainer/config/{settings.json → defaults/settings.json} +0 -0
@@ -0,0 +1,128 @@
1
+ # Troubleshooting
2
+
3
+ Common issues and solutions for the CodeForge devcontainer.
4
+
5
+ ## Container Build Failures
6
+
7
+ **Problem**: Container fails to build during feature installation.
8
+
9
+ - Check Docker has sufficient memory (4GB+ recommended). CodeForge sets `--memory=4g` by default.
10
+ - If a specific feature fails, disable it temporarily by setting `"version": "none"` in `devcontainer.json`.
11
+ - Check internet connectivity — most features download binaries from GitHub releases.
12
+ - If hitting GitHub API rate limits during build, set `GH_TOKEN` or `GITHUB_TOKEN` as an environment variable.
13
+
14
+ **Problem**: Build is slow or hangs.
15
+
16
+ - The mcp-qdrant feature downloads an embedding model (~90MB). This is normal on first build.
17
+ - The mcp-reasoner feature clones and builds a Node.js project. This takes 1-2 minutes.
18
+ - Use `"version": "none"` to skip optional features you don't need.
19
+
20
+ ## Authentication Issues
21
+
22
+ **Problem**: `claude` command fails with authentication error.
23
+
24
+ - Run `claude` once interactively to complete authentication.
25
+ - If using API key auth, verify `ANTHROPIC_API_KEY` is set correctly.
26
+ - Background update may be in progress — wait 10 seconds and retry.
27
+
28
+ **Problem**: `gh` CLI not authenticated.
29
+
30
+ - Run `gh auth status` to check current state.
31
+ - Run `gh auth login` for interactive setup.
32
+ - Or configure `.devcontainer/.secrets` with `GH_TOKEN` for automatic auth on container start.
33
+ - Credentials persist in `/workspaces/.gh/` across rebuilds.
34
+
35
+ **Problem**: Git push fails with permission error.
36
+
37
+ - Run `gh auth status` to verify authentication.
38
+ - Check git remote URL: `git remote -v`. HTTPS remotes require `gh` auth; SSH remotes require SSH keys.
39
+ - Verify `git config --global user.name` and `user.email` are set.
40
+
41
+ **Problem**: NPM publish/install fails with 401.
42
+
43
+ - Set `NPM_TOKEN` in `.devcontainer/.secrets` or as environment variable.
44
+ - Verify token: `npm whoami`.
45
+
46
+ ## Feature Installation Failures
47
+
48
+ **Problem**: Feature checksum verification fails.
49
+
50
+ - This usually means a corrupted download. Rebuild the container to retry.
51
+ - If persistent, the release may have been re-tagged. Try pinning a specific version in `devcontainer.json`.
52
+
53
+ **Problem**: Feature download fails after retries.
54
+
55
+ - Check internet connectivity.
56
+ - GitHub may be experiencing issues — check [githubstatus.com](https://www.githubstatus.com/).
57
+ - Set `GH_TOKEN` environment variable to avoid rate limiting.
58
+
59
+ **Problem**: Permission denied during feature install.
60
+
61
+ - Features run as root during build. This shouldn't happen in normal use.
62
+ - If modifying features, ensure `install.sh` has `chmod +x` and starts with `#!/bin/bash`.
63
+
64
+ ## Plugin Issues
65
+
66
+ **Problem**: Plugin not loading or not appearing in Claude Code.
67
+
68
+ - Check `enabledPlugins` in `config/defaults/settings.json` — the plugin must be listed there.
69
+ - Verify the plugin directory exists under `plugins/devs-marketplace/plugins/`.
70
+ - Run `check-setup` to verify core configuration is correct.
71
+ - Check plugin blacklist: ensure it's not in `PLUGIN_BLACKLIST` in `.env`.
72
+
73
+ **Problem**: Auto-formatter or auto-linter not running.
74
+
75
+ - These run on the Stop hook — they only trigger when Claude Code stops (end of conversation turn).
76
+ - Verify the underlying tools are installed: `cc-tools` lists all available tools.
77
+ - Check the 30-second timeout hasn't been exceeded (large file sets may hit this).
78
+
79
+ ## Agent Teams / tmux Issues
80
+
81
+ **Problem**: Split panes not working.
82
+
83
+ - Agent Teams requires tmux. Use the **"Claude Teams (tmux)"** terminal profile in VS Code.
84
+ - Verify tmux is installed: `tmux -V`.
85
+ - If using an external terminal, connect via `connect-external-terminal.sh`.
86
+
87
+ **Problem**: tmux Unicode/emoji rendering broken.
88
+
89
+ - Ensure locale is set: `echo $LANG` should show `en_US.UTF-8`.
90
+ - If not, run `source ~/.bashrc` or open a new terminal.
91
+
92
+ ## "Command Not Found" Errors
93
+
94
+ **Problem**: `cc: command not found` or similar.
95
+
96
+ - Run `source ~/.bashrc` (or `~/.zshrc`) to reload aliases.
97
+ - Or open a new terminal.
98
+ - Verify setup ran: check for `# Claude Code environment and aliases` in your rc file.
99
+
100
+ **Problem**: Tool not found (e.g., `ruff`, `dprint`).
101
+
102
+ - Run `cc-tools` to see which tools are installed.
103
+ - Check if the feature was disabled with `"version": "none"` in `devcontainer.json`.
104
+ - Some tools (like `ruff`) install to `~/.local/bin` — ensure it's in your PATH.
105
+
106
+ ## Performance Issues
107
+
108
+ **Problem**: Container is slow or running out of memory.
109
+
110
+ - CodeForge defaults to 4GB RAM / 8GB swap. Increase in `devcontainer.json` `runArgs`.
111
+ - Disable features you don't need with `"version": "none"`.
112
+ - The background Claude Code update runs once on startup — it's not persistent.
113
+
114
+ **Problem**: Slow startup.
115
+
116
+ - First start is slower due to `postStartCommand` running all setup scripts.
117
+ - Subsequent starts skip unchanged config files (sha256 comparison).
118
+ - Disable steps you don't need via `.env` (e.g., `SETUP_PROJECTS=false`).
119
+
120
+ ## How to Reset to Defaults
121
+
122
+ 1. **Reset config files**: Delete `/workspaces/.claude/` and restart the container. `setup-config.sh` will recopy all files from `config/defaults/`.
123
+
124
+ 2. **Reset aliases**: Delete the `# Claude Code environment and aliases` block from `~/.bashrc` and `~/.zshrc`, then run `bash /workspaces/.devcontainer/scripts/setup-aliases.sh`.
125
+
126
+ 3. **Full reset**: Rebuild the container from scratch (VS Code: "Dev Containers: Rebuild Container").
127
+
128
+ 4. **Reset a single feature**: Set it to `"version": "none"`, rebuild, then set it back to the desired version and rebuild again.
@@ -4,6 +4,12 @@ set -euo pipefail
4
4
  VERSION="${VERSION:-latest}"
5
5
  USERNAME="${USERNAME:-automatic}"
6
6
 
7
+ # Skip installation if version is "none"
8
+ if [ "${VERSION}" = "none" ]; then
9
+ echo "[agent-browser] Skipping installation (version=none)"
10
+ exit 0
11
+ fi
12
+
7
13
  # Set headless as default for containers (bundled Chromium, no display needed)
8
14
  export AGENT_BROWSER_HEADLESS=true
9
15
 
@@ -4,6 +4,12 @@ set -euo pipefail
4
4
  VERSION="${VERSION:-latest}"
5
5
  USERNAME="${USERNAME:-automatic}"
6
6
 
7
+ # Skip installation if version is "none"
8
+ if [ "${VERSION}" = "none" ]; then
9
+ echo "[ast-grep] Skipping installation (version=none)"
10
+ exit 0
11
+ fi
12
+
7
13
  echo "[ast-grep] Starting installation..."
8
14
  echo "[ast-grep] Version: ${VERSION}"
9
15
 
@@ -0,0 +1,27 @@
1
+ # Biome
2
+
3
+ Fast JavaScript/TypeScript/JSON/CSS formatter and linter.
4
+
5
+ ## What It Does
6
+
7
+ Installs [Biome](https://biomejs.dev/) globally via npm. Biome is an all-in-one toolchain for web projects, replacing ESLint and Prettier for JS/TS/CSS/JSON formatting and linting.
8
+
9
+ ## Options
10
+
11
+ | Option | Default | Description |
12
+ |--------|---------|-------------|
13
+ | `version` | `latest` | Biome version to install. Set `"none"` to skip. |
14
+
15
+ ## Usage
16
+
17
+ ```bash
18
+ biome format --write src/
19
+ biome lint src/
20
+ biome check --write src/ # format + lint
21
+ ```
22
+
23
+ ## Configuration
24
+
25
+ Biome is used by the `auto-formatter` and `auto-linter` plugins for JS/TS/CSS/JSON/GraphQL/HTML files. No additional configuration required for basic usage.
26
+
27
+ For project-specific config, create a `biome.json` in your project root. See [Biome docs](https://biomejs.dev/reference/configuration/).
@@ -3,6 +3,12 @@ set -euo pipefail
3
3
 
4
4
  VERSION="${VERSION:-latest}"
5
5
 
6
+ # Skip installation if version is "none"
7
+ if [ "${VERSION}" = "none" ]; then
8
+ echo "[biome] Skipping installation (version=none)"
9
+ exit 0
10
+ fi
11
+
6
12
  echo "[biome] Starting installation..."
7
13
  echo "[biome] Version: ${VERSION}"
8
14
 
@@ -13,6 +13,12 @@ CCBURN_VERSION="${VERSION:-latest}"
13
13
  SHELLS="${SHELLS:-both}"
14
14
  USERNAME="${USERNAME:-automatic}"
15
15
 
16
+ # Skip installation if version is "none"
17
+ if [ "${CCBURN_VERSION}" = "none" ]; then
18
+ echo "[ccburn] Skipping installation (version=none)"
19
+ exit 0
20
+ fi
21
+
16
22
  echo "[ccburn] Starting ccburn installation..."
17
23
 
18
24
  # === SOURCE NVM ===
@@ -6,6 +6,11 @@
6
6
  "maintainer": "AnExiledDev",
7
7
  "documentationURL": "https://github.com/sirmalloc/ccstatusline",
8
8
  "options": {
9
+ "version": {
10
+ "type": "string",
11
+ "description": "Version to install (or 'none' to skip installation)",
12
+ "default": "latest"
13
+ },
9
14
  "username": {
10
15
  "type": "string",
11
16
  "description": "Container user to install for",
@@ -9,8 +9,15 @@ trap cleanup EXIT
9
9
 
10
10
  # Import options from devcontainer-feature.json
11
11
  # NOTE: DevContainer converts camelCase options to UPPERCASE without underscores
12
+ VERSION="${VERSION:-latest}"
12
13
  USERNAME="${USERNAME:-automatic}"
13
14
 
15
+ # Skip installation if version is "none"
16
+ if [ "${VERSION}" = "none" ]; then
17
+ echo "[ccstatusline] Skipping installation (version=none)"
18
+ exit 0
19
+ fi
20
+
14
21
  echo "[ccstatusline] Starting installation..."
15
22
 
16
23
  # Source NVM (Node is installed via NVM by the node feature)
@@ -15,6 +15,12 @@ CCUSAGE_VERSION="${VERSION:-latest}"
15
15
  SHELLS="${SHELLS:-both}"
16
16
  USERNAME="${USERNAME:-automatic}"
17
17
 
18
+ # Skip installation if version is "none"
19
+ if [ "${CCUSAGE_VERSION}" = "none" ]; then
20
+ echo "[ccusage] Skipping installation (version=none)"
21
+ exit 0
22
+ fi
23
+
18
24
  echo "[ccusage] Starting ccusage installation..."
19
25
 
20
26
  # === SOURCE NVM ===
@@ -10,6 +10,12 @@ MONITOR_VERSION="${VERSION:-latest}"
10
10
  INSTALLER="${INSTALLER:-uv}"
11
11
  USERNAME="${USERNAME:-automatic}"
12
12
 
13
+ # Skip installation if version is "none"
14
+ if [ "${MONITOR_VERSION}" = "none" ]; then
15
+ echo "[claude-monitor] Skipping installation (version=none)"
16
+ exit 0
17
+ fi
18
+
13
19
  echo "[claude-monitor] Starting installation..."
14
20
 
15
21
  # ---------- USER ----------
@@ -0,0 +1,30 @@
1
+ # dprint
2
+
3
+ Pluggable code formatter for Markdown, YAML, TOML, and Dockerfile.
4
+
5
+ ## What It Does
6
+
7
+ Installs [dprint](https://dprint.dev/) with a global config covering Markdown, YAML, TOML, and Dockerfile formatting. Used by the `auto-formatter` plugin for these file types.
8
+
9
+ ## Options
10
+
11
+ | Option | Default | Description |
12
+ |--------|---------|-------------|
13
+ | `version` | `0.51.1` | dprint version to install. Set `"latest"` for newest, `"none"` to skip. |
14
+ | `username` | `automatic` | Container user to install for. |
15
+
16
+ ## Usage
17
+
18
+ ```bash
19
+ dprint fmt # format files in current directory
20
+ dprint fmt --config /usr/local/share/dprint/dprint.json # use global config
21
+ dprint check # check without modifying
22
+ ```
23
+
24
+ ## Configuration
25
+
26
+ A global config is installed at `/usr/local/share/dprint/dprint.json` with plugins for Markdown, YAML, TOML, and Dockerfile. For project-specific config, create a `dprint.json` in your project root.
27
+
28
+ ## Checksum Verification
29
+
30
+ Downloads are verified against SHA256 checksums published with each GitHub release. If checksums can't be fetched, installation proceeds with a warning.
@@ -0,0 +1,18 @@
1
+ {
2
+ "id": "dprint",
3
+ "version": "1.0.0",
4
+ "name": "dprint",
5
+ "description": "Pluggable code formatter for Markdown, YAML, TOML, and Dockerfile",
6
+ "options": {
7
+ "version": {
8
+ "type": "string",
9
+ "default": "0.51.1",
10
+ "description": "dprint version to install. Set 'latest' to always get newest."
11
+ },
12
+ "username": {
13
+ "type": "string",
14
+ "default": "automatic",
15
+ "description": "Container user to install for"
16
+ }
17
+ }
18
+ }
@@ -0,0 +1,131 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ # ==============================
5
+ # dprint DevContainer Feature
6
+ # Official installer + global config
7
+ # ==============================
8
+
9
+ DPRINT_VERSION="${VERSION:-latest}"
10
+ USERNAME="${USERNAME:-automatic}"
11
+
12
+ # Skip installation if version is "none"
13
+ if [ "${DPRINT_VERSION}" = "none" ]; then
14
+ echo "[dprint] Skipping installation (version=none)"
15
+ exit 0
16
+ fi
17
+
18
+ echo "[dprint] Starting installation..."
19
+
20
+ # ---------- USER ----------
21
+ if [[ "${USERNAME}" == "auto" || "${USERNAME}" == "automatic" ]]; then
22
+ for u in vscode node codespace; do
23
+ if id -u "$u" >/dev/null 2>&1; then
24
+ USERNAME="$u"
25
+ break
26
+ fi
27
+ done
28
+ USERNAME="${USERNAME:-root}"
29
+ fi
30
+
31
+ USER_HOME="$(eval echo "~${USERNAME}")"
32
+
33
+ echo "[dprint] Target user: ${USERNAME}"
34
+ echo "[dprint] Version: ${DPRINT_VERSION}"
35
+
36
+ # ---------- HELPERS ----------
37
+ download_with_retry() {
38
+ local url="$1" dest="$2" retries="${3:-3}" delay="${4:-2}"
39
+ local attempt=1
40
+ while [ $attempt -le $retries ]; do
41
+ if curl -fsSL ${GITHUB_AUTH_HEADER:-} "$url" -o "$dest" 2>/dev/null; then
42
+ return 0
43
+ fi
44
+ echo "[dprint] Download attempt $attempt/$retries failed, retrying in ${delay}s..."
45
+ sleep "$delay"
46
+ attempt=$((attempt + 1))
47
+ delay=$((delay * 2))
48
+ done
49
+ echo "[dprint] ERROR: Download failed after $retries attempts: $url"
50
+ return 1
51
+ }
52
+
53
+ # GitHub API auth header (avoids rate limiting)
54
+ GITHUB_AUTH_HEADER=""
55
+ if [ -n "${GH_TOKEN:-}" ] || [ -n "${GITHUB_TOKEN:-}" ]; then
56
+ GITHUB_AUTH_HEADER="-H Authorization: token ${GH_TOKEN:-$GITHUB_TOKEN}"
57
+ fi
58
+
59
+ # ---------- INSTALL ----------
60
+ # Install to a system-wide location so all users can access it
61
+ export DPRINT_INSTALL="/usr/local/share/dprint"
62
+ mkdir -p "${DPRINT_INSTALL}/bin"
63
+
64
+ ARCH="$(dpkg --print-architecture)"
65
+ case "${ARCH}" in
66
+ amd64) TARGET="x86_64-unknown-linux-gnu" ;;
67
+ arm64) TARGET="aarch64-unknown-linux-gnu" ;;
68
+ *)
69
+ echo "[dprint] ERROR: Unsupported architecture: ${ARCH}" >&2
70
+ exit 1
71
+ ;;
72
+ esac
73
+
74
+ # Version pinned for reproducible builds. Set "latest" to always get newest.
75
+ if [[ "${DPRINT_VERSION}" == "latest" ]]; then
76
+ DPRINT_VERSION="$(curl -fsSL ${GITHUB_AUTH_HEADER:-} https://api.github.com/repos/dprint/dprint/releases/latest | grep -o '"tag_name": *"[^"]*"' | head -1 | cut -d'"' -f4)"
77
+ echo "[dprint] Resolved latest version: ${DPRINT_VERSION}"
78
+ fi
79
+
80
+ ZIP_URL="https://github.com/dprint/dprint/releases/download/${DPRINT_VERSION}/dprint-${TARGET}.zip"
81
+ echo "[dprint] Downloading from: ${ZIP_URL}"
82
+
83
+ TMP_DIR="$(mktemp -d)"
84
+ download_with_retry "${ZIP_URL}" "${TMP_DIR}/dprint.zip"
85
+
86
+ # ---------- CHECKSUM VERIFICATION ----------
87
+ CHECKSUM_URL="https://github.com/dprint/dprint/releases/download/${DPRINT_VERSION}/SHASUMS256.txt"
88
+ if curl -fsSL "${CHECKSUM_URL}" -o "${TMP_DIR}/checksums.txt" 2>/dev/null; then
89
+ EXPECTED=$(grep "dprint-${TARGET}.zip" "${TMP_DIR}/checksums.txt" | awk '{print $1}')
90
+ ACTUAL=$(sha256sum "${TMP_DIR}/dprint.zip" | cut -d' ' -f1)
91
+ if [ -n "$EXPECTED" ] && [ "$ACTUAL" != "$EXPECTED" ]; then
92
+ echo "[dprint] ERROR: Checksum verification failed"
93
+ echo " Expected: $EXPECTED"
94
+ echo " Actual: $ACTUAL"
95
+ rm -rf "${TMP_DIR}"
96
+ exit 1
97
+ fi
98
+ echo "[dprint] Checksum verified"
99
+ else
100
+ echo "[dprint] WARNING: Could not fetch checksums, skipping verification"
101
+ fi
102
+
103
+ unzip -o "${TMP_DIR}/dprint.zip" -d "${DPRINT_INSTALL}/bin"
104
+ chmod +x "${DPRINT_INSTALL}/bin/dprint"
105
+ rm -rf "${TMP_DIR}"
106
+
107
+ # Symlink into PATH
108
+ ln -sf "${DPRINT_INSTALL}/bin/dprint" /usr/local/bin/dprint
109
+
110
+ # ---------- GLOBAL CONFIG ----------
111
+ cat > "${DPRINT_INSTALL}/dprint.json" << 'DPRINT_CONFIG'
112
+ {
113
+ "lineWidth": 120,
114
+ "indentWidth": 2,
115
+ "markdown": {},
116
+ "yaml": {},
117
+ "toml": {},
118
+ "dockerfile": {},
119
+ "plugins": [
120
+ "https://plugins.dprint.dev/markdown-0.17.8.wasm",
121
+ "https://plugins.dprint.dev/g-plane/pretty_yaml-0.5.0.wasm",
122
+ "https://plugins.dprint.dev/toml-0.6.4.wasm",
123
+ "https://plugins.dprint.dev/dockerfile-0.3.2.wasm"
124
+ ]
125
+ }
126
+ DPRINT_CONFIG
127
+
128
+ echo "[dprint] Global config written to ${DPRINT_INSTALL}/dprint.json"
129
+
130
+ # ---------- VERIFY ----------
131
+ echo "[dprint] Installed: $(dprint --version 2>/dev/null || echo 'unknown')"
@@ -0,0 +1,35 @@
1
+ # hadolint
2
+
3
+ Dockerfile linter that validates best practices.
4
+
5
+ ## What It Does
6
+
7
+ Installs [hadolint](https://github.com/hadolint/hadolint) as a static binary. Hadolint parses Dockerfiles and checks them against best-practice rules based on the official Docker documentation.
8
+
9
+ ## Options
10
+
11
+ | Option | Default | Description |
12
+ |--------|---------|-------------|
13
+ | `version` | `v2.14.0` | hadolint version to install. Set `"latest"` for newest, `"none"` to skip. |
14
+
15
+ ## Usage
16
+
17
+ ```bash
18
+ hadolint Dockerfile
19
+ hadolint --ignore DL3008 Dockerfile # ignore specific rule
20
+ hadolint -f json Dockerfile # JSON output
21
+ ```
22
+
23
+ ## Configuration
24
+
25
+ Used by the `auto-linter` plugin to lint Dockerfiles on save. For project-specific ignores, create a `.hadolint.yaml` in your project root:
26
+
27
+ ```yaml
28
+ ignored:
29
+ - DL3008 # Pin versions in apt-get install
30
+ - DL3009 # Delete apt lists
31
+ ```
32
+
33
+ ## Checksum Verification
34
+
35
+ Downloads are verified against per-binary `.sha256` files published with each GitHub release.
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "hadolint",
3
+ "version": "1.0.0",
4
+ "name": "hadolint",
5
+ "description": "Dockerfile linter that validates best practices",
6
+ "options": {
7
+ "version": {
8
+ "type": "string",
9
+ "default": "v2.14.0",
10
+ "description": "hadolint version to install. Set 'latest' to always get newest."
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,86 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+
4
+ # ==============================
5
+ # hadolint DevContainer Feature
6
+ # Direct binary from GitHub releases
7
+ # ==============================
8
+
9
+ HADOLINT_VERSION="${VERSION:-latest}"
10
+
11
+ # Skip installation if version is "none"
12
+ if [ "${HADOLINT_VERSION}" = "none" ]; then
13
+ echo "[hadolint] Skipping installation (version=none)"
14
+ exit 0
15
+ fi
16
+
17
+ echo "[hadolint] Starting installation..."
18
+
19
+ # ---------- HELPERS ----------
20
+ download_with_retry() {
21
+ local url="$1" dest="$2" retries="${3:-3}" delay="${4:-2}"
22
+ local attempt=1
23
+ while [ $attempt -le $retries ]; do
24
+ if curl -fsSL ${GITHUB_AUTH_HEADER:-} "$url" -o "$dest" 2>/dev/null; then
25
+ return 0
26
+ fi
27
+ echo "[hadolint] Download attempt $attempt/$retries failed, retrying in ${delay}s..."
28
+ sleep "$delay"
29
+ attempt=$((attempt + 1))
30
+ delay=$((delay * 2))
31
+ done
32
+ echo "[hadolint] ERROR: Download failed after $retries attempts: $url"
33
+ return 1
34
+ }
35
+
36
+ # GitHub API auth header (avoids rate limiting)
37
+ GITHUB_AUTH_HEADER=""
38
+ if [ -n "${GH_TOKEN:-}" ] || [ -n "${GITHUB_TOKEN:-}" ]; then
39
+ GITHUB_AUTH_HEADER="-H Authorization: token ${GH_TOKEN:-$GITHUB_TOKEN}"
40
+ fi
41
+
42
+ ARCH="$(dpkg --print-architecture)"
43
+ case "${ARCH}" in
44
+ amd64) BINARY_ARCH="x86_64" ;;
45
+ arm64) BINARY_ARCH="arm64" ;;
46
+ *)
47
+ echo "[hadolint] ERROR: Unsupported architecture: ${ARCH}" >&2
48
+ exit 1
49
+ ;;
50
+ esac
51
+
52
+ # Version pinned for reproducible builds. Set "latest" to always get newest.
53
+ if [[ "${HADOLINT_VERSION}" == "latest" ]]; then
54
+ HADOLINT_VERSION="$(curl -fsSL ${GITHUB_AUTH_HEADER:-} https://api.github.com/repos/hadolint/hadolint/releases/latest | grep -o '"tag_name": *"[^"]*"' | head -1 | cut -d'"' -f4)"
55
+ echo "[hadolint] Resolved latest version: ${HADOLINT_VERSION}"
56
+ fi
57
+
58
+ URL="https://github.com/hadolint/hadolint/releases/download/${HADOLINT_VERSION}/hadolint-Linux-${BINARY_ARCH}"
59
+ echo "[hadolint] Downloading from: ${URL}"
60
+
61
+ TMP_DIR="$(mktemp -d)"
62
+ download_with_retry "${URL}" "${TMP_DIR}/hadolint"
63
+
64
+ # ---------- CHECKSUM VERIFICATION ----------
65
+ # hadolint publishes per-binary .sha256 files
66
+ CHECKSUM_URL="${URL}.sha256"
67
+ if curl -fsSL "${CHECKSUM_URL}" -o "${TMP_DIR}/checksum.sha256" 2>/dev/null; then
68
+ EXPECTED=$(awk '{print $1}' "${TMP_DIR}/checksum.sha256")
69
+ ACTUAL=$(sha256sum "${TMP_DIR}/hadolint" | cut -d' ' -f1)
70
+ if [ -n "$EXPECTED" ] && [ "$ACTUAL" != "$EXPECTED" ]; then
71
+ echo "[hadolint] ERROR: Checksum verification failed"
72
+ echo " Expected: $EXPECTED"
73
+ echo " Actual: $ACTUAL"
74
+ rm -rf "${TMP_DIR}"
75
+ exit 1
76
+ fi
77
+ echo "[hadolint] Checksum verified"
78
+ else
79
+ echo "[hadolint] WARNING: Could not fetch checksum, skipping verification"
80
+ fi
81
+
82
+ cp "${TMP_DIR}/hadolint" /usr/local/bin/hadolint
83
+ chmod +x /usr/local/bin/hadolint
84
+ rm -rf "${TMP_DIR}"
85
+
86
+ echo "[hadolint] Installed: $(hadolint --version 2>/dev/null || echo 'unknown')"
@@ -6,6 +6,11 @@
6
6
  "maintainer": "AnExiledDev",
7
7
  "documentationURL": "https://code.claude.com/docs/en/discover-plugins#code-intelligence",
8
8
  "options": {
9
+ "version": {
10
+ "type": "string",
11
+ "description": "Set to 'none' to skip installation of all LSP servers",
12
+ "default": "latest"
13
+ },
9
14
  "pyrightVersion": {
10
15
  "type": "string",
11
16
  "description": "Pyright npm package version (e.g., 'latest', '1.1.350')",
@@ -4,12 +4,19 @@
4
4
 
5
5
  set -euo pipefail
6
6
 
7
+ VERSION="${VERSION:-latest}"
7
8
  PYRIGHT_VERSION="${PYRIGHTVERSION:-latest}"
8
9
  TSLSP_VERSION="${TYPESCRIPTLSPVERSION:-latest}"
9
10
  TS_VERSION="${TYPESCRIPTVERSION:-latest}"
10
11
  GOPLS_VERSION="${GOPLSVERSION:-latest}"
11
12
  USERNAME="${USERNAME:-automatic}"
12
13
 
14
+ # Skip installation if version is "none"
15
+ if [ "${VERSION}" = "none" ]; then
16
+ echo "[lsp-servers] Skipping installation (version=none)"
17
+ exit 0
18
+ fi
19
+
13
20
  echo "[lsp-servers] Starting installation..."
14
21
  echo "[lsp-servers] Pyright version: ${PYRIGHT_VERSION}"
15
22
  echo "[lsp-servers] TypeScript LSP version: ${TSLSP_VERSION}"
@@ -6,6 +6,11 @@
6
6
  "maintainer": "AnExiledDev",
7
7
  "documentationURL": "https://github.com/qdrant/mcp-server-qdrant",
8
8
  "options": {
9
+ "version": {
10
+ "type": "string",
11
+ "description": "Version to install (or 'none' to skip installation)",
12
+ "default": "latest"
13
+ },
9
14
  "qdrantUrl": {
10
15
  "type": "string",
11
16
  "description": "Qdrant instance URL (e.g., https://xyz.cloud.qdrant.io:6333). Leave empty for local instance.",