codeforge-dev 1.4.0 → 1.5.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/CHANGELOG.md +112 -0
- package/.devcontainer/README.md +7 -3
- package/.devcontainer/config/main-system-prompt.md +10 -0
- package/.devcontainer/config/settings.json +9 -5
- package/.devcontainer/connect-external-terminal.ps1 +77 -0
- package/.devcontainer/connect-external-terminal.sh +69 -0
- package/.devcontainer/devcontainer.json +9 -4
- package/.devcontainer/features/agent-browser/install.sh +5 -5
- package/.devcontainer/features/biome/devcontainer-feature.json +16 -0
- package/.devcontainer/features/biome/install.sh +19 -0
- package/.devcontainer/features/tmux/README.md +75 -0
- package/.devcontainer/features/tmux/devcontainer-feature.json +17 -0
- package/.devcontainer/features/tmux/install.sh +52 -0
- package/.devcontainer/plugins/devs-marketplace/.claude-plugin/marketplace.json +2 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/.claude-plugin/plugin.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/hooks/hooks.json +5 -5
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-on-stop.py +177 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-linter/hooks/hooks.json +2 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/.claude-plugin/commands/debug.md +86 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/.claude-plugin/plugin.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/debug-logs.md +149 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/hooks/hooks.json +46 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/collect-edited-files.py +44 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/skill-suggester.py +229 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/syntax-validator.py +141 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/debugging/SKILL.md +165 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/debugging/references/error-patterns.md +530 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/skills/debugging/references/log-locations.md +430 -0
- package/README.md +13 -9
- package/package.json +1 -1
- package/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-file.py +0 -101
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/claude-code-headless/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/claude-code-headless/references/cli-flags-and-output.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/claude-code-headless/references/sdk-and-mcp.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/docker/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/docker/references/compose-services.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/docker/references/dockerfile-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/docker-py/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/docker-py/references/container-lifecycle.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/docker-py/references/resources-and-security.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/fastapi/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/fastapi/references/middleware-and-lifespan.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/fastapi/references/pydantic-models.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/fastapi/references/routing-and-dependencies.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/fastapi/references/sse-and-streaming.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/pydantic-ai/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/pydantic-ai/references/agents-and-tools.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/pydantic-ai/references/models-and-streaming.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/skill-building/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/skill-building/references/cross-vendor-principles.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/skill-building/references/patterns-and-antipatterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/skill-building/references/skill-authoring-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/sqlite/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/sqlite/references/advanced-queries.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/sqlite/references/javascript-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/sqlite/references/python-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/sqlite/references/schema-and-pragmas.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/svelte5/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/svelte5/references/ai-sdk-svelte.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/svelte5/references/component-patterns.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/svelte5/references/layercake.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/svelte5/references/migration-guide.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/svelte5/references/runes-and-reactivity.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/svelte5/references/spa-and-routing.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/svelte5/references/svelte-dnd-action.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/testing/SKILL.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/testing/references/fastapi-testing.md +0 -0
- /package/.devcontainer/plugins/devs-marketplace/plugins/{codedirective-skills → code-directive}/skills/testing/references/svelte-testing.md +0 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
# Log Locations Reference
|
|
2
|
+
|
|
3
|
+
Comprehensive reference of log file locations organized by system, runtime, and application framework.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Linux System Logs
|
|
8
|
+
|
|
9
|
+
### Syslog
|
|
10
|
+
|
|
11
|
+
The traditional Unix system log. Most distributions write to one of:
|
|
12
|
+
|
|
13
|
+
| Distribution | Path | Format |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| Debian / Ubuntu | `/var/log/syslog` | BSD syslog |
|
|
16
|
+
| RHEL / CentOS / Fedora | `/var/log/messages` | BSD syslog |
|
|
17
|
+
| Alpine | `/var/log/messages` | BSD syslog |
|
|
18
|
+
|
|
19
|
+
Syslog captures messages from system services, cron, mail, and applications that use the syslog facility. Each line follows the format:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
<timestamp> <hostname> <program>[<pid>]: <message>
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Useful filters:**
|
|
26
|
+
```bash
|
|
27
|
+
# Recent errors
|
|
28
|
+
grep -i "error\|fail\|crit" /var/log/syslog | tail -50
|
|
29
|
+
|
|
30
|
+
# Specific service
|
|
31
|
+
grep "nginx" /var/log/syslog | tail -20
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Systemd Journal (journald)
|
|
35
|
+
|
|
36
|
+
Modern Linux distributions use systemd's binary journal as the primary log store. The journal captures structured metadata (unit name, priority, PID, UID) alongside the message.
|
|
37
|
+
|
|
38
|
+
**Key commands:**
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# All logs from the last hour
|
|
42
|
+
journalctl --no-pager -n 200 --since "1 hour ago"
|
|
43
|
+
|
|
44
|
+
# Specific systemd unit
|
|
45
|
+
journalctl --no-pager -n 100 -u nginx.service --since "1 hour ago"
|
|
46
|
+
|
|
47
|
+
# Kernel messages only (OOM killer, hardware, drivers)
|
|
48
|
+
journalctl --no-pager -n 100 -k --since "1 hour ago"
|
|
49
|
+
|
|
50
|
+
# Priority filtering (0=emerg through 7=debug)
|
|
51
|
+
journalctl --no-pager -p err --since "1 hour ago"
|
|
52
|
+
|
|
53
|
+
# Follow mode (like tail -f)
|
|
54
|
+
journalctl -f -u myservice.service
|
|
55
|
+
|
|
56
|
+
# Output as JSON for structured parsing
|
|
57
|
+
journalctl --no-pager -o json -n 50 -u myservice.service
|
|
58
|
+
|
|
59
|
+
# Disk usage of journal
|
|
60
|
+
journalctl --disk-usage
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Kernel Log
|
|
64
|
+
|
|
65
|
+
Kernel messages are critical for diagnosing:
|
|
66
|
+
- **OOM killer** events (`Out of memory: Killed process`)
|
|
67
|
+
- **Segmentation faults** (`segfault at`)
|
|
68
|
+
- **Hardware errors** (`I/O error`, `EXT4-fs error`)
|
|
69
|
+
- **Network stack** issues (`nf_conntrack: table full`)
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# Kernel ring buffer (dmesg)
|
|
73
|
+
dmesg --time-format iso | tail -50
|
|
74
|
+
|
|
75
|
+
# Via journal
|
|
76
|
+
journalctl -k --no-pager -n 50 --since "1 hour ago"
|
|
77
|
+
|
|
78
|
+
# File-based (if available)
|
|
79
|
+
# /var/log/kern.log (Debian/Ubuntu)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Authentication Log
|
|
83
|
+
|
|
84
|
+
Records login attempts, sudo usage, SSH sessions, and PAM events.
|
|
85
|
+
|
|
86
|
+
| Distribution | Path |
|
|
87
|
+
|---|---|
|
|
88
|
+
| Debian / Ubuntu | `/var/log/auth.log` |
|
|
89
|
+
| RHEL / CentOS / Fedora | `/var/log/secure` |
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# Failed login attempts
|
|
93
|
+
grep "Failed password\|authentication failure" /var/log/auth.log | tail -20
|
|
94
|
+
|
|
95
|
+
# Sudo commands
|
|
96
|
+
grep "sudo:" /var/log/auth.log | tail -20
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Other System Logs
|
|
100
|
+
|
|
101
|
+
| Log | Path | Contents |
|
|
102
|
+
|---|---|---|
|
|
103
|
+
| Boot log | `/var/log/boot.log` | Service startup messages |
|
|
104
|
+
| Cron log | `/var/log/cron` or in syslog | Scheduled task execution |
|
|
105
|
+
| Package manager | `/var/log/dpkg.log` (Debian) or `/var/log/yum.log` (RHEL) | Package install/remove |
|
|
106
|
+
| Filesystem | `/var/log/fsck/` | Filesystem check results |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Docker
|
|
111
|
+
|
|
112
|
+
### Container Logs
|
|
113
|
+
|
|
114
|
+
Docker captures stdout and stderr from the container's PID 1 process. This is the primary log source for containerized applications.
|
|
115
|
+
|
|
116
|
+
**Storage location** (default json-file driver):
|
|
117
|
+
```
|
|
118
|
+
/var/lib/docker/containers/<container-id>/<container-id>-json.log
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**Access methods:**
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# By container name or ID
|
|
125
|
+
docker logs <container>
|
|
126
|
+
|
|
127
|
+
# With timestamps
|
|
128
|
+
docker logs --timestamps <container>
|
|
129
|
+
|
|
130
|
+
# Tail last N lines
|
|
131
|
+
docker logs --tail 100 <container>
|
|
132
|
+
|
|
133
|
+
# Time window
|
|
134
|
+
docker logs --since "2025-01-15T10:00:00" --until "2025-01-15T11:00:00" <container>
|
|
135
|
+
|
|
136
|
+
# Follow (real-time)
|
|
137
|
+
docker logs -f <container>
|
|
138
|
+
|
|
139
|
+
# Separate stdout and stderr
|
|
140
|
+
docker logs <container> 2>/dev/null # stdout only
|
|
141
|
+
docker logs <container> 1>/dev/null # stderr only
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Log Drivers
|
|
145
|
+
|
|
146
|
+
Docker supports pluggable log drivers. The default is `json-file`, but others redirect logs elsewhere:
|
|
147
|
+
|
|
148
|
+
| Driver | Destination | `docker logs` Works? |
|
|
149
|
+
|---|---|---|
|
|
150
|
+
| `json-file` (default) | Local JSON files | Yes |
|
|
151
|
+
| `local` | Optimized local storage | Yes |
|
|
152
|
+
| `journald` | systemd journal | Yes |
|
|
153
|
+
| `syslog` | Syslog daemon | No |
|
|
154
|
+
| `fluentd` | Fluentd collector | No |
|
|
155
|
+
| `awslogs` | CloudWatch | No |
|
|
156
|
+
| `none` | Discarded | No |
|
|
157
|
+
|
|
158
|
+
Check which driver a container uses:
|
|
159
|
+
```bash
|
|
160
|
+
docker inspect --format '{{.HostConfig.LogConfig.Type}}' <container>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
If `docker logs` returns nothing, the log driver may not support it. Check the driver and look for logs at the configured destination.
|
|
164
|
+
|
|
165
|
+
### Docker Daemon Logs
|
|
166
|
+
|
|
167
|
+
The Docker daemon itself logs operational events:
|
|
168
|
+
|
|
169
|
+
| System | Location |
|
|
170
|
+
|---|---|
|
|
171
|
+
| systemd-based | `journalctl -u docker.service` |
|
|
172
|
+
| Non-systemd | `/var/log/docker.log` |
|
|
173
|
+
| macOS (Docker Desktop) | `~/Library/Containers/com.docker.docker/Data/log/` |
|
|
174
|
+
|
|
175
|
+
### Docker Compose Aggregation
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# All services
|
|
179
|
+
docker compose logs --tail 100
|
|
180
|
+
|
|
181
|
+
# Specific service
|
|
182
|
+
docker compose logs --tail 100 <service_name>
|
|
183
|
+
|
|
184
|
+
# With timestamps for cross-service correlation
|
|
185
|
+
docker compose logs --timestamps --tail 200
|
|
186
|
+
|
|
187
|
+
# Follow all services
|
|
188
|
+
docker compose logs -f
|
|
189
|
+
|
|
190
|
+
# Service status overview
|
|
191
|
+
docker compose ps -a
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Docker Events
|
|
195
|
+
|
|
196
|
+
System-level events (container create/start/stop/die, image pull, network connect):
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
# Recent events
|
|
200
|
+
docker events --since "1h" --until "now"
|
|
201
|
+
|
|
202
|
+
# Filtered by type
|
|
203
|
+
docker events --filter 'type=container' --filter 'event=die' --since "1h"
|
|
204
|
+
|
|
205
|
+
# Formatted output
|
|
206
|
+
docker events --since "1h" --format '{{.Time}} {{.Type}} {{.Action}} {{.Actor.Attributes.name}}'
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Docker Health Checks
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# Health status
|
|
213
|
+
docker inspect --format '{{.State.Health.Status}}' <container>
|
|
214
|
+
|
|
215
|
+
# Health check log (last 5 results)
|
|
216
|
+
docker inspect --format '{{json .State.Health}}' <container> | python3 -m json.tool
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Python Frameworks
|
|
222
|
+
|
|
223
|
+
### FastAPI / Uvicorn
|
|
224
|
+
|
|
225
|
+
Uvicorn writes to stderr by default. Log level is controlled by `--log-level` flag or `UVICORN_LOG_LEVEL` env var.
|
|
226
|
+
|
|
227
|
+
| Source | Location |
|
|
228
|
+
|---|---|
|
|
229
|
+
| Uvicorn access log | stderr (or `--access-log` file) |
|
|
230
|
+
| Uvicorn error log | stderr |
|
|
231
|
+
| Application logger | Depends on `logging` config; defaults to stderr |
|
|
232
|
+
| In Docker | `docker logs <container>` |
|
|
233
|
+
|
|
234
|
+
**Uvicorn log format:**
|
|
235
|
+
```
|
|
236
|
+
INFO: <client_ip>:<port> - "<method> <path> HTTP/1.1" <status_code>
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Common configuration patterns:**
|
|
240
|
+
```python
|
|
241
|
+
# logging.conf or logging.yaml referenced by app
|
|
242
|
+
# Check for: logging.config.dictConfig(), logging.config.fileConfig()
|
|
243
|
+
# Environment variables: LOG_LEVEL, UVICORN_LOG_LEVEL
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Django
|
|
247
|
+
|
|
248
|
+
| Source | Default Location |
|
|
249
|
+
|---|---|
|
|
250
|
+
| Django server log | stderr (runserver) |
|
|
251
|
+
| Application logs | Configured in `settings.LOGGING` |
|
|
252
|
+
| Debug log | Often `./debug.log` when `DEBUG=True` |
|
|
253
|
+
|
|
254
|
+
Check `settings.py` for `LOGGING` dict — it defines handlers, formatters, and file paths.
|
|
255
|
+
|
|
256
|
+
### Flask
|
|
257
|
+
|
|
258
|
+
| Source | Default Location |
|
|
259
|
+
|---|---|
|
|
260
|
+
| Flask dev server | stderr |
|
|
261
|
+
| Application logger | `app.logger` → stderr by default |
|
|
262
|
+
| Gunicorn | `--error-logfile`, `--access-logfile` flags |
|
|
263
|
+
|
|
264
|
+
### Gunicorn
|
|
265
|
+
|
|
266
|
+
```bash
|
|
267
|
+
# Default: stderr
|
|
268
|
+
# Common flag overrides:
|
|
269
|
+
# --error-logfile /var/log/gunicorn/error.log
|
|
270
|
+
# --access-logfile /var/log/gunicorn/access.log
|
|
271
|
+
# --log-level info
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Gunicorn prefork model means each worker process logs independently. Worker crashes appear in the error log as:
|
|
275
|
+
```
|
|
276
|
+
[CRITICAL] WORKER TIMEOUT (pid:1234)
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
---
|
|
280
|
+
|
|
281
|
+
## Node.js
|
|
282
|
+
|
|
283
|
+
### Express / Generic Node
|
|
284
|
+
|
|
285
|
+
Node.js applications typically log to stdout/stderr. No default file logging.
|
|
286
|
+
|
|
287
|
+
| Source | Location |
|
|
288
|
+
|---|---|
|
|
289
|
+
| `console.log` / `console.error` | stdout / stderr |
|
|
290
|
+
| Winston | Configured in app (`transports` define file paths) |
|
|
291
|
+
| Bunyan | Configured in app (commonly `./logs/`) |
|
|
292
|
+
| Pino | stdout (designed for pipe-based logging) |
|
|
293
|
+
|
|
294
|
+
**Common file locations when file transport is configured:**
|
|
295
|
+
- `./logs/combined.log`
|
|
296
|
+
- `./logs/error.log`
|
|
297
|
+
- `./logs/app.log`
|
|
298
|
+
- `/var/log/<app-name>/`
|
|
299
|
+
|
|
300
|
+
### PM2
|
|
301
|
+
|
|
302
|
+
PM2 manages Node processes and captures their output:
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
# Log file locations
|
|
306
|
+
~/.pm2/logs/<app-name>-out.log # stdout
|
|
307
|
+
~/.pm2/logs/<app-name>-error.log # stderr
|
|
308
|
+
|
|
309
|
+
# View logs
|
|
310
|
+
pm2 logs # all apps, follow mode
|
|
311
|
+
pm2 logs <app-name> --lines 100 # specific app
|
|
312
|
+
|
|
313
|
+
# Flush logs
|
|
314
|
+
pm2 flush
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## Databases
|
|
320
|
+
|
|
321
|
+
### PostgreSQL
|
|
322
|
+
|
|
323
|
+
| Distribution | Default Log Location |
|
|
324
|
+
|---|---|
|
|
325
|
+
| Debian / Ubuntu (apt) | `/var/log/postgresql/postgresql-<version>-main.log` |
|
|
326
|
+
| RHEL (yum/dnf) | `/var/lib/pgsql/<version>/data/log/` |
|
|
327
|
+
| Docker (official image) | stderr → `docker logs` |
|
|
328
|
+
| Custom | Check `log_directory` in `postgresql.conf` |
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
# Find log config
|
|
332
|
+
psql -c "SHOW log_directory; SHOW log_filename; SHOW logging_collector;"
|
|
333
|
+
|
|
334
|
+
# Check for slow queries if log_min_duration_statement is set
|
|
335
|
+
psql -c "SHOW log_min_duration_statement;"
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Key log entries:**
|
|
339
|
+
- `FATAL:` — Connection failures, authentication errors, startup failures
|
|
340
|
+
- `ERROR:` — Query errors, constraint violations
|
|
341
|
+
- `LOG: checkpoint` — Checkpoint activity (performance indicator)
|
|
342
|
+
- `LOG: connection` — Connection open/close events
|
|
343
|
+
|
|
344
|
+
### MySQL / MariaDB
|
|
345
|
+
|
|
346
|
+
| Log Type | Default Path | Config Variable |
|
|
347
|
+
|---|---|---|
|
|
348
|
+
| Error log | `/var/log/mysql/error.log` | `log_error` |
|
|
349
|
+
| General query log | Off by default | `general_log_file` |
|
|
350
|
+
| Slow query log | Off by default | `slow_query_log_file` |
|
|
351
|
+
| Binary log | `/var/lib/mysql/binlog.*` | `log_bin` |
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
# Check what's enabled
|
|
355
|
+
mysql -e "SHOW VARIABLES LIKE '%log%';"
|
|
356
|
+
|
|
357
|
+
# Docker
|
|
358
|
+
docker logs <mysql-container>
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Redis
|
|
362
|
+
|
|
363
|
+
| Installation | Log Location |
|
|
364
|
+
|---|---|
|
|
365
|
+
| Package manager | `/var/log/redis/redis-server.log` |
|
|
366
|
+
| Docker (official) | stderr → `docker logs` |
|
|
367
|
+
| Custom | Check `logfile` directive in `redis.conf` |
|
|
368
|
+
|
|
369
|
+
```bash
|
|
370
|
+
# Check config
|
|
371
|
+
redis-cli CONFIG GET logfile
|
|
372
|
+
redis-cli CONFIG GET loglevel
|
|
373
|
+
|
|
374
|
+
# In Docker
|
|
375
|
+
docker logs <redis-container>
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
Key log patterns:
|
|
379
|
+
- `# WARNING overcommit_memory` — Memory configuration warning
|
|
380
|
+
- `* Ready to accept connections` — Successful startup
|
|
381
|
+
- `# oO0OoO0OoO0Oo Redis is starting` — Boot sequence
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
385
|
+
## Web Servers
|
|
386
|
+
|
|
387
|
+
### Nginx
|
|
388
|
+
|
|
389
|
+
| Log Type | Default Path |
|
|
390
|
+
|---|---|
|
|
391
|
+
| Access log | `/var/log/nginx/access.log` |
|
|
392
|
+
| Error log | `/var/log/nginx/error.log` |
|
|
393
|
+
| Docker | stdout (access) / stderr (error) → `docker logs` |
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
# Check configured paths
|
|
397
|
+
nginx -T 2>/dev/null | grep -E "access_log|error_log"
|
|
398
|
+
|
|
399
|
+
# Error levels (in order): debug, info, notice, warn, error, crit, alert, emerg
|
|
400
|
+
# Default error_log level: error
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Common error log patterns:**
|
|
404
|
+
- `connect() failed (111: Connection refused)` — Upstream/proxy target is down
|
|
405
|
+
- `no live upstreams` — All backends in upstream block are unhealthy
|
|
406
|
+
- `client intended to send too large body` — `client_max_body_size` exceeded
|
|
407
|
+
|
|
408
|
+
### Apache (httpd)
|
|
409
|
+
|
|
410
|
+
| Log Type | Default Path |
|
|
411
|
+
|---|---|
|
|
412
|
+
| Access log | `/var/log/apache2/access.log` (Debian) or `/var/log/httpd/access_log` (RHEL) |
|
|
413
|
+
| Error log | `/var/log/apache2/error.log` (Debian) or `/var/log/httpd/error_log` (RHEL) |
|
|
414
|
+
| Docker | Varies by image configuration |
|
|
415
|
+
|
|
416
|
+
```bash
|
|
417
|
+
# Check configured paths
|
|
418
|
+
apachectl -S 2>/dev/null | grep -i log
|
|
419
|
+
grep -r "ErrorLog\|CustomLog" /etc/apache2/ /etc/httpd/ 2>/dev/null
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
### Caddy
|
|
423
|
+
|
|
424
|
+
| Installation | Log Location |
|
|
425
|
+
|---|---|
|
|
426
|
+
| Package | `journalctl -u caddy` |
|
|
427
|
+
| Docker | stderr → `docker logs` |
|
|
428
|
+
| File | Configured in Caddyfile with `log` directive |
|
|
429
|
+
|
|
430
|
+
Caddy uses structured JSON logging by default (v2). Access logs require explicit `log` directive in the Caddyfile.
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# CodeForge DevContainer
|
|
2
2
|
|
|
3
3
|
[](https://www.gnu.org/licenses/gpl-3.0)
|
|
4
|
-
[](https://www.npmjs.com/package/codeforge)
|
|
4
|
+
[](https://www.npmjs.com/package/codeforge-dev)
|
|
5
5
|
|
|
6
6
|
A curated development environment optimized for AI-powered coding with Claude Code. CodeForge comes pre-configured with language servers, code intelligence tools, and official Anthropic plugins to streamline your development workflow.
|
|
7
7
|
|
|
@@ -10,7 +10,7 @@ A curated development environment optimized for AI-powered coding with Claude Co
|
|
|
10
10
|
Add CodeForge to any project:
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
npx codeforge
|
|
13
|
+
npx codeforge-dev
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
This copies the `.devcontainer/` directory to your project. Then open in VS Code and select "Reopen in Container".
|
|
@@ -18,19 +18,19 @@ This copies the `.devcontainer/` directory to your project. Then open in VS Code
|
|
|
18
18
|
### Options
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
npx codeforge --force # Overwrite existing .devcontainer directory
|
|
22
|
-
npx codeforge -f # Short form
|
|
21
|
+
npx codeforge-dev --force # Overwrite existing .devcontainer directory
|
|
22
|
+
npx codeforge-dev -f # Short form
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
### Alternative Install Methods
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
28
|
# Install globally
|
|
29
|
-
npm install -g codeforge
|
|
30
|
-
codeforge
|
|
29
|
+
npm install -g codeforge-dev
|
|
30
|
+
codeforge-dev
|
|
31
31
|
|
|
32
32
|
# Run specific version
|
|
33
|
-
npx codeforge@1.2.3
|
|
33
|
+
npx codeforge-dev@1.2.3
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
## Prerequisites
|
|
@@ -152,6 +152,8 @@ GitHub CLI credentials are automatically persisted across container rebuilds. Th
|
|
|
152
152
|
| `git` | Version control |
|
|
153
153
|
| `jq` | JSON processor |
|
|
154
154
|
| `curl` | HTTP client |
|
|
155
|
+
| `tmux` | Terminal multiplexer for Agent Teams split-pane sessions |
|
|
156
|
+
| `biome` | Fast JS/TS/JSON/CSS formatter |
|
|
155
157
|
| `agent-browser` | Headless browser automation for AI agents |
|
|
156
158
|
|
|
157
159
|
### Code Intelligence
|
|
@@ -214,9 +216,9 @@ Edit `.devcontainer/.env` to customize behavior:
|
|
|
214
216
|
Default settings are in `.devcontainer/config/settings.json`. These are copied to `/workspaces/.claude/settings.json` on first run.
|
|
215
217
|
|
|
216
218
|
Key defaults:
|
|
217
|
-
- **Model**: Claude Opus 4
|
|
219
|
+
- **Model**: Claude Opus 4-6
|
|
218
220
|
- **Default mode**: Plan (prompts before executing)
|
|
219
|
-
- **Max output tokens**:
|
|
221
|
+
- **Max output tokens**: 128,000
|
|
220
222
|
|
|
221
223
|
### System Prompt
|
|
222
224
|
|
|
@@ -235,6 +237,8 @@ CodeForge includes several custom devcontainer features:
|
|
|
235
237
|
| `tree-sitter` | Parser with JS/TS/Python grammars |
|
|
236
238
|
| `lsp-servers` | Pyright and TypeScript language servers |
|
|
237
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) |
|
|
238
242
|
|
|
239
243
|
## Essential Gotchas
|
|
240
244
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeforge-dev",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.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/.devcontainer/plugins/devs-marketplace/plugins/auto-formatter/scripts/format-file.py
DELETED
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
"""
|
|
3
|
-
Auto-format files after editing.
|
|
4
|
-
|
|
5
|
-
Reads tool input from stdin, detects file type by extension,
|
|
6
|
-
runs appropriate formatter if available.
|
|
7
|
-
Outputs JSON with additionalContext on success.
|
|
8
|
-
Non-blocking: exit 0 regardless of formatting result.
|
|
9
|
-
"""
|
|
10
|
-
|
|
11
|
-
import json
|
|
12
|
-
import os
|
|
13
|
-
import subprocess
|
|
14
|
-
import sys
|
|
15
|
-
from pathlib import Path
|
|
16
|
-
|
|
17
|
-
# Formatter configuration: extension -> (command, args, name)
|
|
18
|
-
FORMATTERS = {
|
|
19
|
-
".py": ("/usr/local/py-utils/bin/black", ["--quiet"], "Black"),
|
|
20
|
-
".pyi": ("/usr/local/py-utils/bin/black", ["--quiet"], "Black"),
|
|
21
|
-
".go": ("/usr/local/go/bin/gofmt", ["-w"], "gofmt"),
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
def get_formatter(file_path: str) -> tuple[str, list[str], str] | None:
|
|
26
|
-
"""Get formatter config for file extension."""
|
|
27
|
-
ext = Path(file_path).suffix.lower()
|
|
28
|
-
return FORMATTERS.get(ext)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
def format_file(file_path: str) -> tuple[bool, str]:
|
|
32
|
-
"""Run formatter on file.
|
|
33
|
-
|
|
34
|
-
Returns:
|
|
35
|
-
(success, message)
|
|
36
|
-
"""
|
|
37
|
-
formatter = get_formatter(file_path)
|
|
38
|
-
if formatter is None:
|
|
39
|
-
return True, "" # No formatter available, that's OK
|
|
40
|
-
|
|
41
|
-
cmd_path, args, name = formatter
|
|
42
|
-
|
|
43
|
-
# Check if formatter exists
|
|
44
|
-
if not os.path.exists(cmd_path):
|
|
45
|
-
return True, f"[Auto-formatter] {name} not found, skipping"
|
|
46
|
-
|
|
47
|
-
# Check if file exists
|
|
48
|
-
if not os.path.exists(file_path):
|
|
49
|
-
return True, ""
|
|
50
|
-
|
|
51
|
-
try:
|
|
52
|
-
# Run formatter
|
|
53
|
-
cmd = [cmd_path] + args + [file_path]
|
|
54
|
-
result = subprocess.run(
|
|
55
|
-
cmd,
|
|
56
|
-
capture_output=True,
|
|
57
|
-
text=True,
|
|
58
|
-
timeout=25
|
|
59
|
-
)
|
|
60
|
-
|
|
61
|
-
if result.returncode == 0:
|
|
62
|
-
return True, f"[Auto-formatter] Formatted with {name}"
|
|
63
|
-
else:
|
|
64
|
-
# Formatting failed, but don't block
|
|
65
|
-
error = result.stderr.strip() if result.stderr else "Unknown error"
|
|
66
|
-
return True, f"[Auto-formatter] {name} warning: {error}"
|
|
67
|
-
|
|
68
|
-
except subprocess.TimeoutExpired:
|
|
69
|
-
return True, f"[Auto-formatter] {name} timed out"
|
|
70
|
-
except Exception as e:
|
|
71
|
-
return True, f"[Auto-formatter] Error: {e}"
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
def main():
|
|
75
|
-
try:
|
|
76
|
-
input_data = json.load(sys.stdin)
|
|
77
|
-
tool_input = input_data.get("tool_input", {})
|
|
78
|
-
file_path = tool_input.get("file_path", "")
|
|
79
|
-
|
|
80
|
-
if not file_path:
|
|
81
|
-
sys.exit(0)
|
|
82
|
-
|
|
83
|
-
_, message = format_file(file_path)
|
|
84
|
-
|
|
85
|
-
if message:
|
|
86
|
-
# Output context for Claude
|
|
87
|
-
print(json.dumps({
|
|
88
|
-
"additionalContext": message
|
|
89
|
-
}))
|
|
90
|
-
|
|
91
|
-
sys.exit(0)
|
|
92
|
-
|
|
93
|
-
except json.JSONDecodeError:
|
|
94
|
-
sys.exit(0)
|
|
95
|
-
except Exception as e:
|
|
96
|
-
print(f"Hook error: {e}", file=sys.stderr)
|
|
97
|
-
sys.exit(0)
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
if __name__ == "__main__":
|
|
101
|
-
main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|