codeforge-dev 1.5.8 → 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.
- package/.devcontainer/.env +4 -5
- package/.devcontainer/.env.example +29 -0
- package/.devcontainer/.gitignore +8 -0
- package/.devcontainer/.secrets.example +12 -0
- package/.devcontainer/CHANGELOG.md +186 -0
- package/.devcontainer/CLAUDE.md +108 -21
- package/.devcontainer/README.md +173 -57
- package/.devcontainer/config/defaults/keybindings.json +5 -0
- package/.devcontainer/config/{main-system-prompt.md → defaults/main-system-prompt.md} +135 -2
- package/.devcontainer/config/{settings.json → defaults/settings.json} +25 -6
- package/.devcontainer/config/file-manifest.json +20 -0
- package/.devcontainer/devcontainer.json +38 -2
- package/.devcontainer/docs/configuration-reference.md +90 -0
- package/.devcontainer/docs/keybindings.md +100 -0
- package/.devcontainer/docs/optional-features.md +129 -0
- package/.devcontainer/docs/plugins.md +154 -0
- package/.devcontainer/docs/troubleshooting.md +128 -0
- package/.devcontainer/features/README.md +21 -7
- package/.devcontainer/features/agent-browser/install.sh +6 -0
- package/.devcontainer/features/ast-grep/install.sh +6 -0
- package/.devcontainer/features/biome/README.md +27 -0
- package/.devcontainer/features/biome/install.sh +6 -0
- package/.devcontainer/features/ccburn/README.md +60 -0
- package/.devcontainer/features/ccburn/devcontainer-feature.json +38 -0
- package/.devcontainer/features/ccburn/install.sh +180 -0
- package/.devcontainer/features/ccstatusline/README.md +22 -21
- package/.devcontainer/features/ccstatusline/devcontainer-feature.json +6 -1
- package/.devcontainer/features/ccstatusline/install.sh +55 -16
- package/.devcontainer/features/ccusage/install.sh +6 -0
- package/.devcontainer/features/claude-monitor/install.sh +6 -0
- package/.devcontainer/features/dprint/README.md +30 -0
- package/.devcontainer/features/dprint/devcontainer-feature.json +18 -0
- package/.devcontainer/features/dprint/install.sh +131 -0
- package/.devcontainer/features/hadolint/README.md +35 -0
- package/.devcontainer/features/hadolint/devcontainer-feature.json +13 -0
- package/.devcontainer/features/hadolint/install.sh +86 -0
- package/.devcontainer/features/lsp-servers/devcontainer-feature.json +5 -0
- package/.devcontainer/features/lsp-servers/install.sh +7 -0
- package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +6 -1
- package/.devcontainer/features/mcp-qdrant/install.sh +13 -6
- package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +6 -1
- package/.devcontainer/features/mcp-reasoner/install.sh +8 -1
- package/.devcontainer/features/notify-hook/devcontainer-feature.json +5 -0
- package/.devcontainer/features/notify-hook/install.sh +7 -0
- package/.devcontainer/features/ruff/README.md +26 -0
- package/.devcontainer/features/ruff/devcontainer-feature.json +21 -0
- package/.devcontainer/features/ruff/install.sh +74 -0
- package/.devcontainer/features/shellcheck/README.md +38 -0
- package/.devcontainer/features/shellcheck/devcontainer-feature.json +13 -0
- package/.devcontainer/features/shellcheck/install.sh +24 -0
- package/.devcontainer/features/shfmt/README.md +37 -0
- package/.devcontainer/features/shfmt/devcontainer-feature.json +13 -0
- package/.devcontainer/features/shfmt/install.sh +85 -0
- package/.devcontainer/features/splitrail/devcontainer-feature.json +5 -0
- package/.devcontainer/features/splitrail/install.sh +7 -0
- package/.devcontainer/features/tmux/install.sh +8 -0
- package/.devcontainer/features/tree-sitter/install.sh +6 -0
- package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +3 -10
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/.claude-plugin/plugin.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/__pycache__/format-on-stop.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-on-stop.py +133 -13
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/.claude-plugin/plugin.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/hooks/hooks.json +4 -5
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/__pycache__/lint-file.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/scripts/lint-file.py +477 -78
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/.claude-plugin/plugin.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/AGENT-REDIRECTION.md +226 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/REVIEW-RUBRIC.md +440 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/architect.md +207 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/bash-exec.md +173 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/claude-guide.md +146 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/debug-logs.md +2 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/dependency-analyst.md +250 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/doc-writer.md +246 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/explorer.md +237 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/generalist.md +134 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/git-archaeologist.md +242 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/migrator.md +201 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/perf-profiler.md +265 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/refactorer.md +213 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/researcher.md +195 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/security-auditor.md +289 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/spec-writer.md +297 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/statusline-config.md +188 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/test-writer.md +248 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/hooks/hooks.json +51 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/advisory-test-runner.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/collect-edited-files.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/commit-reminder.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/git-state-injector.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/guard-readonly-bash.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/redirect-builtin-agents.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/skill-suggester.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/syntax-validator.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/ticket-linker.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/todo-harvester.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/verify-no-regression.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/__pycache__/verify-tests-pass.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/advisory-test-runner.py +174 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/collect-edited-files.py +8 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/commit-reminder.py +90 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/git-state-injector.py +114 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/guard-readonly-bash.py +611 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/redirect-builtin-agents.py +83 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/skill-suggester.py +146 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/syntax-validator.py +9 -4
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/ticket-linker.py +137 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/todo-harvester.py +130 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/verify-no-regression.py +221 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/verify-tests-pass.py +176 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/SKILL.md +224 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/error-handling.md +166 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/api-design/references/rest-conventions.md +215 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/SKILL.md +211 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/ast-grep-patterns/references/language-patterns.md +327 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/claude-agent-sdk/SKILL.md +599 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/claude-agent-sdk/references/sdk-typescript-reference.md +954 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/SKILL.md +134 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/ecosystem-commands.md +264 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/dependency-management/references/license-compliance.md +80 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/SKILL.md +153 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/api-doc-templates.md +221 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/documentation-patterns/references/docstring-formats.md +296 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/git-forensics/SKILL.md +276 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/git-forensics/references/advanced-commands.md +332 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/git-forensics/references/investigation-playbooks.md +319 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/SKILL.md +150 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/javascript-migrations.md +179 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/migration-patterns/references/python-migrations.md +141 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/performance-profiling/SKILL.md +341 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/performance-profiling/references/interpreting-results.md +235 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/performance-profiling/references/tool-commands.md +395 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/refactoring-patterns/SKILL.md +344 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/refactoring-patterns/references/safe-transformations.md +247 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/refactoring-patterns/references/smell-catalog.md +332 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/security-checklist/SKILL.md +277 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/security-checklist/references/owasp-patterns.md +269 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/security-checklist/references/secrets-patterns.md +253 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/specification-writing/SKILL.md +320 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/specification-writing/references/criteria-patterns.md +245 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/specification-writing/references/ears-templates.md +239 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/dangerous-command-blocker/scripts/__pycache__/block-dangerous.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/notify-hook/hooks/hooks.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/__pycache__/guard-protected.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/protected-files-guard/scripts/guard-protected.py +40 -39
- package/.devcontainer/scripts/check-setup.sh +72 -0
- package/.devcontainer/scripts/setup-aliases.sh +51 -6
- package/.devcontainer/scripts/setup-auth.sh +74 -0
- package/.devcontainer/scripts/setup-config.sh +112 -20
- package/.devcontainer/scripts/setup-plugins.sh +38 -46
- package/.devcontainer/scripts/setup-projects.sh +175 -0
- package/.devcontainer/scripts/setup-symlink-claude.sh +36 -0
- package/.devcontainer/scripts/setup-update-claude.sh +19 -8
- package/.devcontainer/scripts/setup.sh +49 -14
- package/README.md +23 -190
- package/package.json +1 -1
- package/setup.js +245 -71
- package/.devcontainer/features/claude-code/README.md +0 -498
- package/.devcontainer/features/claude-code/config/settings.json +0 -36
- package/.devcontainer/features/claude-code/config/system-prompt.md +0 -118
- package/.devcontainer/features/claude-code/config/world-building-sp.md +0 -1432
- package/.devcontainer/features/claude-code/devcontainer-feature.json +0 -42
- package/.devcontainer/features/claude-code/install.sh +0 -466
- package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/.claude-plugin/plugin.json +0 -7
- package/.devcontainer/plugins/devs-marketplace/plugins/planning-reminder/hooks/hooks.json +0 -17
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/.claude-plugin/plugin.json +0 -6
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/config/planning-instructions.md +0 -14
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/functional-conjuring-map.md +0 -989
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/hooks/hooks.json +0 -33
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/__pycache__/post-enhance-task.cpython-314.pyc +0 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhance-planning.py +0 -71
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-plan.sh +0 -68
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/enhancers/enhance-task.sh +0 -120
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-plan.py +0 -133
- package/.devcontainer/plugins/devs-marketplace/plugins/workflow-enhancer/scripts/post-enhance-task.py +0 -253
- package/.devcontainer/scripts/setup-irie-claude.sh +0 -32
package/README.md
CHANGED
|
@@ -37,215 +37,46 @@ npx codeforge-dev@1.2.3
|
|
|
37
37
|
|
|
38
38
|
- **Docker Desktop** (or compatible container runtime like Podman)
|
|
39
39
|
- **VS Code** with the [Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers), or **GitHub Codespaces**
|
|
40
|
-
- **Claude Code authentication**
|
|
40
|
+
- **Claude Code authentication** — run `claude` on first start to authenticate
|
|
41
41
|
|
|
42
|
-
##
|
|
43
|
-
|
|
44
|
-
1. **Open in Container**
|
|
45
|
-
- VS Code: Open the folder, then select "Reopen in Container" from the command palette
|
|
46
|
-
- Codespaces: Create a new codespace from this repository
|
|
47
|
-
|
|
48
|
-
2. **Authenticate** (first time only)
|
|
49
|
-
```bash
|
|
50
|
-
claude
|
|
51
|
-
```
|
|
52
|
-
Follow the prompts to authenticate via browser or API key.
|
|
53
|
-
|
|
54
|
-
3. **Start Claude Code**
|
|
55
|
-
```bash
|
|
56
|
-
cc
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
## Authentication
|
|
60
|
-
|
|
61
|
-
Claude Code supports multiple authentication methods. On first run, you'll be prompted to choose:
|
|
62
|
-
|
|
63
|
-
### Browser Login (Recommended)
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
claude
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Select "Login with browser" and complete authentication in your browser. This uses your Claude.ai account.
|
|
70
|
-
|
|
71
|
-
### API Key
|
|
72
|
-
|
|
73
|
-
For programmatic access or environments without browsers:
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
export ANTHROPIC_API_KEY="sk-ant-..."
|
|
77
|
-
claude
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
Get an API key from [console.anthropic.com](https://console.anthropic.com/).
|
|
81
|
-
|
|
82
|
-
### Credential Persistence
|
|
83
|
-
|
|
84
|
-
Authentication credentials are stored in `/workspaces/.claude/` and persist across container rebuilds.
|
|
85
|
-
|
|
86
|
-
For more options, see the [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code).
|
|
87
|
-
|
|
88
|
-
## GitHub CLI Authentication
|
|
89
|
-
|
|
90
|
-
GitHub CLI (`gh`) is pre-installed for repository operations like pushing code, creating pull requests, and accessing private repositories.
|
|
91
|
-
|
|
92
|
-
### Interactive Login (Recommended)
|
|
93
|
-
|
|
94
|
-
```bash
|
|
95
|
-
gh auth login
|
|
96
|
-
```
|
|
97
|
-
|
|
98
|
-
Follow the prompts:
|
|
99
|
-
1. Select **GitHub.com** (or your enterprise server)
|
|
100
|
-
2. Choose your preferred protocol: **HTTPS** (recommended) or **SSH**
|
|
101
|
-
3. Authenticate via **browser** (easiest) or paste a personal access token
|
|
102
|
-
|
|
103
|
-
### Token-Based Login
|
|
104
|
-
|
|
105
|
-
For automated setups or environments without browser access:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
# From a file
|
|
109
|
-
gh auth login --with-token < ~/github-token.txt
|
|
110
|
-
|
|
111
|
-
# From environment variable
|
|
112
|
-
echo "$GITHUB_TOKEN" | gh auth login --with-token
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Generate a token at [github.com/settings/tokens](https://github.com/settings/tokens) with appropriate scopes (typically `repo`, `read:org`).
|
|
116
|
-
|
|
117
|
-
### Verifying Authentication
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
gh auth status
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
Expected output shows your authenticated account and token scopes.
|
|
124
|
-
|
|
125
|
-
### Credential Persistence
|
|
126
|
-
|
|
127
|
-
GitHub CLI credentials are automatically persisted across container rebuilds. The container is configured to store credentials in `/workspaces/.gh/` (via `GH_CONFIG_DIR`), which is part of the bind-mounted workspace.
|
|
128
|
-
|
|
129
|
-
**You only need to authenticate once.** After running `gh auth login`, your credentials will survive container rebuilds and be available in future sessions.
|
|
130
|
-
|
|
131
|
-
## Available Tools
|
|
42
|
+
## What's Included
|
|
132
43
|
|
|
133
44
|
### Languages & Runtimes
|
|
134
|
-
| Tool | Description |
|
|
135
|
-
|------|-------------|
|
|
136
|
-
| Python 3.14 | Base language runtime |
|
|
137
|
-
| Node.js LTS | JavaScript runtime |
|
|
138
|
-
| TypeScript | Via Node.js |
|
|
139
|
-
|
|
140
|
-
### Package Managers
|
|
141
|
-
| Tool | Description |
|
|
142
|
-
|------|-------------|
|
|
143
|
-
| `uv` | Fast Python package manager (pip alternative) |
|
|
144
|
-
| `npm` | Node.js package manager |
|
|
145
|
-
| `pip` / `pipx` | Python package installers |
|
|
146
|
-
|
|
147
|
-
### Development Tools
|
|
148
|
-
| Tool | Description |
|
|
149
|
-
|------|-------------|
|
|
150
|
-
| `gh` | GitHub CLI for repository operations |
|
|
151
|
-
| `docker` | Container CLI (connects to host Docker) |
|
|
152
|
-
| `git` | Version control |
|
|
153
|
-
| `jq` | JSON processor |
|
|
154
|
-
| `curl` | HTTP client |
|
|
155
|
-
| `tmux` | Terminal multiplexer for Agent Teams split-pane sessions |
|
|
156
|
-
| `biome` | Fast JS/TS/JSON/CSS formatter |
|
|
157
|
-
| `agent-browser` | Headless browser automation for AI agents |
|
|
158
|
-
|
|
159
|
-
### Code Intelligence
|
|
160
|
-
| Tool | Description |
|
|
161
|
-
|------|-------------|
|
|
162
|
-
| tree-sitter | AST parsing for JavaScript, TypeScript, Python |
|
|
163
|
-
| ast-grep | Structural code search and rewriting |
|
|
164
|
-
| Pyright | Python language server |
|
|
165
|
-
| TypeScript LSP | TypeScript/JavaScript language server |
|
|
166
45
|
|
|
167
|
-
|
|
168
|
-
| Tool | Description |
|
|
169
|
-
|------|-------------|
|
|
170
|
-
| `claude` | Claude Code CLI |
|
|
171
|
-
| `cc` | Wrapper with auto-configuration |
|
|
172
|
-
| `ccusage` | Token usage analyzer |
|
|
173
|
-
| `ccstatusline` | Status line for sessions |
|
|
174
|
-
| `claude-monitor` | Real-time usage tracking |
|
|
175
|
-
|
|
176
|
-
## Using Claude Code
|
|
177
|
-
|
|
178
|
-
### The `cc` Command
|
|
179
|
-
|
|
180
|
-
The `cc` command is a wrapper that:
|
|
181
|
-
- Creates a project-local `.claude/` directory if missing
|
|
182
|
-
- Copies default configuration files
|
|
183
|
-
- Launches Claude Code with the project's system prompt
|
|
184
|
-
|
|
185
|
-
```bash
|
|
186
|
-
cc # Start Claude Code in current directory
|
|
187
|
-
cc "explain this" # Start with an initial prompt
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Direct CLI
|
|
46
|
+
Python 3.14, Node.js LTS, TypeScript, Go
|
|
191
47
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
```bash
|
|
195
|
-
claude # Basic invocation
|
|
196
|
-
claude --help # View all options
|
|
197
|
-
claude --resume # Resume previous session
|
|
198
|
-
```
|
|
48
|
+
### Package Managers
|
|
199
49
|
|
|
200
|
-
|
|
50
|
+
`uv`, `npm`, `pip` / `pipx`
|
|
201
51
|
|
|
202
|
-
###
|
|
52
|
+
### Development Tools
|
|
203
53
|
|
|
204
|
-
|
|
54
|
+
`gh` (GitHub CLI), `docker`, `git`, `jq`, `curl`, `tmux`, `biome`, `agent-browser`
|
|
205
55
|
|
|
206
|
-
|
|
207
|
-
|----------|---------|-------------|
|
|
208
|
-
| `CLAUDE_CONFIG_DIR` | `/workspaces/.claude` | Claude configuration directory |
|
|
209
|
-
| `SETUP_CONFIG` | `true` | Copy config files during setup |
|
|
210
|
-
| `OVERWRITE_CONFIG` | `true` | Overwrite existing configs |
|
|
211
|
-
| `SETUP_ALIASES` | `true` | Add `cc` alias to shell |
|
|
212
|
-
| `SETUP_PLUGINS` | `true` | Install official plugins |
|
|
56
|
+
### Code Intelligence
|
|
213
57
|
|
|
214
|
-
|
|
58
|
+
tree-sitter (JS/TS/Python), ast-grep, Pyright, TypeScript LSP
|
|
215
59
|
|
|
216
|
-
|
|
60
|
+
### Claude Code Tools
|
|
217
61
|
|
|
218
|
-
|
|
219
|
-
- **Model**: Claude Opus 4-6
|
|
220
|
-
- **Default mode**: Plan (prompts before executing)
|
|
221
|
-
- **Max output tokens**: 128,000
|
|
62
|
+
`claude`, `cc` (wrapper), `ccusage`, `ccburn`, `ccstatusline`, `claude-monitor`
|
|
222
63
|
|
|
223
|
-
###
|
|
64
|
+
### Custom Features (14)
|
|
224
65
|
|
|
225
|
-
|
|
66
|
+
tmux, agent-browser, claude-monitor, ccusage, ccburn, ccstatusline, ast-grep, tree-sitter, lsp-servers, biome, notify-hook, mcp-qdrant, mcp-reasoner, splitrail
|
|
226
67
|
|
|
227
|
-
|
|
68
|
+
### Agents (17) & Skills (16)
|
|
228
69
|
|
|
229
|
-
|
|
70
|
+
The `code-directive` plugin includes specialized agents (architect, explorer, test-writer, security-auditor, etc.) and domain-specific coding reference skills (fastapi, svelte5, docker, testing, etc.).
|
|
230
71
|
|
|
231
|
-
|
|
232
|
-
|---------|-------------|
|
|
233
|
-
| `claude-monitor` | Real-time token usage monitoring with ML predictions |
|
|
234
|
-
| `ccusage` | Usage analytics CLI |
|
|
235
|
-
| `ccstatusline` | Compact powerline status display |
|
|
236
|
-
| `ast-grep` | Structural code search using AST patterns |
|
|
237
|
-
| `tree-sitter` | Parser with JS/TS/Python grammars |
|
|
238
|
-
| `lsp-servers` | Pyright and TypeScript language servers |
|
|
239
|
-
| `agent-browser` | Browser automation with accessibility snapshots and screenshots |
|
|
240
|
-
| `tmux` | Terminal multiplexer with Catppuccin theme for Agent Teams |
|
|
241
|
-
| `biome` | Fast JS/TS/JSON/CSS formatter (global install) |
|
|
72
|
+
## Quick Start
|
|
242
73
|
|
|
243
|
-
|
|
74
|
+
1. **Install**: `npx codeforge-dev`
|
|
75
|
+
2. **Open in Container**: "Reopen in Container" in VS Code, or create a Codespace
|
|
76
|
+
3. **Authenticate**: Run `claude` and follow prompts
|
|
77
|
+
4. **Start coding**: Run `cc`
|
|
244
78
|
|
|
245
|
-
|
|
246
|
-
- **Plan mode default**: The container starts in "plan" mode, which prompts for approval before making changes
|
|
247
|
-
- **Project-local config**: The `cc` command creates `.claude/` in your current directory for project-specific settings
|
|
248
|
-
- **GitHub auth persists**: Run `gh auth login` once; credentials survive container rebuilds (stored in `/workspaces/.gh/`)
|
|
79
|
+
For full usage documentation — authentication, configuration, tools, agents, and keybindings — see [`.devcontainer/README.md`](.devcontainer/README.md).
|
|
249
80
|
|
|
250
81
|
## Development
|
|
251
82
|
|
|
@@ -266,6 +97,8 @@ npm publish
|
|
|
266
97
|
|
|
267
98
|
## Further Reading
|
|
268
99
|
|
|
100
|
+
- [Full Usage Guide](.devcontainer/README.md)
|
|
101
|
+
- [Changelog](.devcontainer/CHANGELOG.md)
|
|
269
102
|
- [Claude Code Documentation](https://docs.anthropic.com/en/docs/claude-code)
|
|
270
103
|
- [Dev Containers Specification](https://containers.dev/)
|
|
271
104
|
- [GitHub CLI Manual](https://cli.github.com/manual/)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeforge-dev",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Complete development container that sets up Claude Code with modular devcontainer features, modern dev tools, and persistent configurations. Drop it into any project and get a production-ready AI development environment in minutes.",
|
|
5
5
|
"main": "setup.js",
|
|
6
6
|
"bin": {
|
package/setup.js
CHANGED
|
@@ -1,83 +1,257 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const fs = require(
|
|
4
|
-
const path = require(
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const path = require("path");
|
|
5
5
|
|
|
6
|
+
// ── Default preserve list ────────────────────────────────────────
|
|
7
|
+
// Files in the package that should NOT overwrite user customizations.
|
|
8
|
+
// The package version is saved as <file>.codeforge-new for diffing.
|
|
9
|
+
const DEFAULT_PRESERVE = [
|
|
10
|
+
"config/defaults/settings.json",
|
|
11
|
+
"config/defaults/main-system-prompt.md",
|
|
12
|
+
"config/defaults/keybindings.json",
|
|
13
|
+
"config/file-manifest.json",
|
|
14
|
+
".codeforge-preserve",
|
|
15
|
+
];
|
|
16
|
+
|
|
17
|
+
// ── copyDirectory ────────────────────────────────────────────────
|
|
18
|
+
// Simple recursive copy (used for fresh install and --reset).
|
|
6
19
|
function copyDirectory(src, dest) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
if (!fs.existsSync(dest)) {
|
|
21
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
25
|
+
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
const srcPath = path.join(src, entry.name);
|
|
28
|
+
const destPath = path.join(dest, entry.name);
|
|
29
|
+
|
|
30
|
+
if (entry.isDirectory()) {
|
|
31
|
+
copyDirectory(srcPath, destPath);
|
|
32
|
+
} else {
|
|
33
|
+
fs.copyFileSync(srcPath, destPath);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
23
36
|
}
|
|
24
37
|
|
|
38
|
+
// ── loadPreserveList ─────────────────────────────────────────────
|
|
39
|
+
// Builds the set of relative paths to preserve during --force update.
|
|
40
|
+
// Combines built-in defaults with user entries from .codeforge-preserve.
|
|
41
|
+
function loadPreserveList(devcontainerDest) {
|
|
42
|
+
const preserveFile = path.join(devcontainerDest, ".codeforge-preserve");
|
|
43
|
+
let custom = [];
|
|
44
|
+
|
|
45
|
+
if (fs.existsSync(preserveFile)) {
|
|
46
|
+
custom = fs
|
|
47
|
+
.readFileSync(preserveFile, "utf-8")
|
|
48
|
+
.split("\n")
|
|
49
|
+
.map((line) => line.trim())
|
|
50
|
+
.filter((line) => line && !line.startsWith("#"));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return new Set([...DEFAULT_PRESERVE, ...custom]);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// ── syncDirectory ────────────────────────────────────────────────
|
|
57
|
+
// Selective overwrite: walks the package tree and copies files to dest.
|
|
58
|
+
// - Framework files (scripts, features, plugins): always overwrite
|
|
59
|
+
// - Preserved files: skip, save package version as .codeforge-new
|
|
60
|
+
// - devcontainer.json: overwrite, save user's as .bak
|
|
61
|
+
// - User-created files not in package: untouched (never visited)
|
|
62
|
+
function syncDirectory(src, dest, preserveSet) {
|
|
63
|
+
const stats = {
|
|
64
|
+
updated: 0,
|
|
65
|
+
preserved: 0,
|
|
66
|
+
added: 0,
|
|
67
|
+
backedUp: 0,
|
|
68
|
+
preservedFiles: [],
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
function walk(srcDir, destDir, relativeBase) {
|
|
72
|
+
if (!fs.existsSync(destDir)) {
|
|
73
|
+
fs.mkdirSync(destDir, { recursive: true });
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const entries = fs.readdirSync(srcDir, { withFileTypes: true });
|
|
77
|
+
|
|
78
|
+
for (const entry of entries) {
|
|
79
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
80
|
+
const destPath = path.join(destDir, entry.name);
|
|
81
|
+
const relativePath = relativeBase
|
|
82
|
+
? relativeBase + "/" + entry.name
|
|
83
|
+
: entry.name;
|
|
84
|
+
|
|
85
|
+
if (entry.isDirectory()) {
|
|
86
|
+
walk(srcPath, destPath, relativePath);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Special handling for devcontainer.json: overwrite + save .bak
|
|
91
|
+
if (relativePath === "devcontainer.json" && fs.existsSync(destPath)) {
|
|
92
|
+
fs.copyFileSync(destPath, destPath + ".bak");
|
|
93
|
+
fs.copyFileSync(srcPath, destPath);
|
|
94
|
+
stats.backedUp++;
|
|
95
|
+
stats.updated++;
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Preserved files: skip overwrite, save package version as .codeforge-new
|
|
100
|
+
if (preserveSet.has(relativePath) && fs.existsSync(destPath)) {
|
|
101
|
+
fs.copyFileSync(srcPath, destPath + ".codeforge-new");
|
|
102
|
+
stats.preserved++;
|
|
103
|
+
stats.preservedFiles.push(relativePath);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// Framework files: always overwrite (or create if new)
|
|
108
|
+
const isNew = !fs.existsSync(destPath);
|
|
109
|
+
fs.copyFileSync(srcPath, destPath);
|
|
110
|
+
if (isNew) {
|
|
111
|
+
stats.added++;
|
|
112
|
+
} else {
|
|
113
|
+
stats.updated++;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
walk(src, dest, "");
|
|
119
|
+
return stats;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// ── main ─────────────────────────────────────────────────────────
|
|
25
123
|
function main() {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
124
|
+
const args = process.argv.slice(2);
|
|
125
|
+
const force = args.includes("--force") || args.includes("-f");
|
|
126
|
+
const reset = args.includes("--reset");
|
|
127
|
+
|
|
128
|
+
if (args.includes("--help") || args.includes("-h")) {
|
|
129
|
+
console.log("Usage: codeforge [options]");
|
|
130
|
+
console.log("");
|
|
131
|
+
console.log("Options:");
|
|
132
|
+
console.log(
|
|
133
|
+
" --force, -f Update existing .devcontainer (preserves user config)",
|
|
134
|
+
);
|
|
135
|
+
console.log(
|
|
136
|
+
" --reset Remove all customizations and install fresh defaults",
|
|
137
|
+
);
|
|
138
|
+
console.log(" --help, -h Show this help message");
|
|
139
|
+
console.log("");
|
|
140
|
+
console.log(
|
|
141
|
+
"Without flags, installs only if .devcontainer does not exist.",
|
|
142
|
+
);
|
|
143
|
+
process.exit(0);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
const currentDir = process.cwd();
|
|
147
|
+
const packageDir = __dirname;
|
|
148
|
+
const devcontainerSrc = path.join(packageDir, ".devcontainer");
|
|
149
|
+
const devcontainerDest = path.join(currentDir, ".devcontainer");
|
|
150
|
+
|
|
151
|
+
console.log("");
|
|
152
|
+
|
|
153
|
+
// Check if source .devcontainer exists in the package
|
|
154
|
+
if (!fs.existsSync(devcontainerSrc)) {
|
|
155
|
+
console.error(
|
|
156
|
+
"Error: .devcontainer source directory not found in package.",
|
|
157
|
+
);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (fs.existsSync(devcontainerDest)) {
|
|
162
|
+
if (reset) {
|
|
163
|
+
// Nuclear: delete everything and copy fresh
|
|
164
|
+
console.log("Resetting .devcontainer to package defaults...");
|
|
165
|
+
console.log("");
|
|
166
|
+
fs.rmSync(devcontainerDest, { recursive: true, force: true });
|
|
167
|
+
copyDirectory(devcontainerSrc, devcontainerDest);
|
|
168
|
+
console.log(" Reset complete. All user customizations removed.");
|
|
169
|
+
console.log("");
|
|
170
|
+
printNextSteps();
|
|
171
|
+
} else if (force) {
|
|
172
|
+
// Smart update: selective overwrite with preservation
|
|
173
|
+
console.log("Updating .devcontainer (preserving user config)...");
|
|
174
|
+
console.log("");
|
|
175
|
+
|
|
176
|
+
const preserveSet = loadPreserveList(devcontainerDest);
|
|
177
|
+
const stats = syncDirectory(
|
|
178
|
+
devcontainerSrc,
|
|
179
|
+
devcontainerDest,
|
|
180
|
+
preserveSet,
|
|
181
|
+
);
|
|
182
|
+
|
|
183
|
+
// Summary
|
|
184
|
+
console.log(` Updated: ${stats.updated} files`);
|
|
185
|
+
console.log(` Added: ${stats.added} new files`);
|
|
186
|
+
console.log(` Preserved: ${stats.preserved} user config files`);
|
|
187
|
+
console.log("");
|
|
188
|
+
|
|
189
|
+
if (stats.backedUp > 0) {
|
|
190
|
+
console.log(
|
|
191
|
+
" devcontainer.json updated (previous saved as devcontainer.json.bak)",
|
|
192
|
+
);
|
|
193
|
+
console.log("");
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
if (stats.preservedFiles.length > 0) {
|
|
197
|
+
console.log(
|
|
198
|
+
" Review .codeforge-new files for new defaults you may want to merge:",
|
|
199
|
+
);
|
|
200
|
+
for (const file of stats.preservedFiles) {
|
|
201
|
+
console.log(` ${file}.codeforge-new`);
|
|
202
|
+
}
|
|
203
|
+
console.log("");
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
printNextSteps();
|
|
207
|
+
} else {
|
|
208
|
+
// No flags: error with guidance
|
|
209
|
+
console.log(".devcontainer directory already exists.");
|
|
210
|
+
console.log("");
|
|
211
|
+
console.log(" --force Update (preserves your config files)");
|
|
212
|
+
console.log(" --reset Start fresh (removes all customizations)");
|
|
213
|
+
console.log("");
|
|
214
|
+
process.exit(1);
|
|
215
|
+
}
|
|
216
|
+
} else {
|
|
217
|
+
// Fresh install
|
|
218
|
+
console.log("Setting up CodeForge DevContainer...");
|
|
219
|
+
console.log("");
|
|
220
|
+
|
|
221
|
+
try {
|
|
222
|
+
copyDirectory(devcontainerSrc, devcontainerDest);
|
|
223
|
+
console.log(" CodeForge DevContainer configuration installed!");
|
|
224
|
+
console.log("");
|
|
225
|
+
printNextSteps();
|
|
226
|
+
printFeatures();
|
|
227
|
+
} catch (error) {
|
|
228
|
+
console.error("Error copying .devcontainer:", error.message);
|
|
229
|
+
process.exit(1);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function printNextSteps() {
|
|
235
|
+
console.log("Next steps:");
|
|
236
|
+
console.log(" 1. Open this folder in VS Code");
|
|
237
|
+
console.log(' 2. Select "Reopen in Container" from the command palette');
|
|
238
|
+
console.log(" 3. Run: claude");
|
|
239
|
+
console.log("");
|
|
240
|
+
console.log("Documentation: .devcontainer/README.md");
|
|
241
|
+
console.log("");
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
function printFeatures() {
|
|
245
|
+
console.log("Features included:");
|
|
246
|
+
console.log(" - Claude Code CLI with optimized tool configuration");
|
|
247
|
+
console.log(" - MCP servers: Qdrant (vector memory), Reasoner");
|
|
248
|
+
console.log(" - Development tools: Node.js LTS, Python 3.14, Go, Bun");
|
|
249
|
+
console.log(" - Persistent configuration and shell history");
|
|
250
|
+
console.log("");
|
|
77
251
|
}
|
|
78
252
|
|
|
79
253
|
if (require.main === module) {
|
|
80
|
-
|
|
254
|
+
main();
|
|
81
255
|
}
|
|
82
256
|
|
|
83
|
-
module.exports = { copyDirectory, main };
|
|
257
|
+
module.exports = { copyDirectory, syncDirectory, loadPreserveList, main };
|