codeforge-dev 1.5.7 → 1.7.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 +2 -1
- package/.devcontainer/CHANGELOG.md +55 -9
- package/.devcontainer/CLAUDE.md +65 -15
- package/.devcontainer/README.md +67 -6
- package/.devcontainer/config/keybindings.json +5 -0
- package/.devcontainer/config/main-system-prompt.md +63 -2
- package/.devcontainer/config/settings.json +25 -6
- package/.devcontainer/devcontainer.json +23 -7
- package/.devcontainer/features/README.md +21 -7
- package/.devcontainer/features/ccburn/README.md +60 -0
- package/.devcontainer/features/ccburn/devcontainer-feature.json +38 -0
- package/.devcontainer/features/ccburn/install.sh +174 -0
- package/.devcontainer/features/ccstatusline/README.md +22 -21
- package/.devcontainer/features/ccstatusline/devcontainer-feature.json +1 -1
- package/.devcontainer/features/ccstatusline/install.sh +48 -16
- package/.devcontainer/features/claude-code/config/settings.json +60 -24
- package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +1 -1
- package/.devcontainer/features/mcp-reasoner/devcontainer-feature.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 +21 -6
- 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 +7 -10
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/REVIEW-RUBRIC.md +440 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/architect.md +190 -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 +155 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/dependency-analyst.md +248 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/doc-writer.md +233 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/explorer.md +235 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/agents/generalist.md +125 -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 +195 -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 +209 -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 +284 -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 +245 -0
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/hooks/hooks.json +12 -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__/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/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 +85 -2
- package/.devcontainer/plugins/devs-marketplace/plugins/code-directive/scripts/syntax-validator.py +9 -4
- 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/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/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/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 +288 -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/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/setup-aliases.sh +10 -20
- package/.devcontainer/scripts/setup-config.sh +2 -0
- 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 +11 -8
- package/.devcontainer/scripts/setup.sh +4 -2
- package/package.json +1 -1
- package/.devcontainer/scripts/setup-irie-claude.sh +0 -32
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Auto-detect projects under /workspaces/ and register them in Project Manager's projects.json.
|
|
3
|
+
# Runs an initial scan synchronously, then starts an inotifywait background watcher
|
|
4
|
+
# that updates the project list instantly when directories are created or removed.
|
|
5
|
+
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
WORKSPACE_ROOT="${WORKSPACE_ROOT:-/workspaces}"
|
|
9
|
+
PROJECTS_DIR="${WORKSPACE_ROOT}/.config/project-manager"
|
|
10
|
+
PROJECTS_FILE="${PROJECTS_DIR}/projects.json"
|
|
11
|
+
PID_FILE="/tmp/project-watcher.pid"
|
|
12
|
+
LOG_PREFIX="[setup-projects]"
|
|
13
|
+
|
|
14
|
+
# Directories to exclude from project detection (hidden/config dirs)
|
|
15
|
+
EXCLUDED_DIRS=".claude .gh .tmp .devcontainer .config node_modules .git"
|
|
16
|
+
|
|
17
|
+
# --- Helpers ---
|
|
18
|
+
|
|
19
|
+
is_excluded() {
|
|
20
|
+
local name="$1"
|
|
21
|
+
# Skip hidden directories (start with .)
|
|
22
|
+
[[ "$name" == .* ]] && return 0
|
|
23
|
+
# Skip explicitly excluded names
|
|
24
|
+
for excluded in $EXCLUDED_DIRS; do
|
|
25
|
+
[[ "$name" == "$excluded" ]] && return 0
|
|
26
|
+
done
|
|
27
|
+
return 1
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
detect_tags() {
|
|
31
|
+
local dir="$1"
|
|
32
|
+
local tags=()
|
|
33
|
+
|
|
34
|
+
[ -d "$dir/.git" ] && tags+=("git")
|
|
35
|
+
[ -f "$dir/package.json" ] && tags+=("node")
|
|
36
|
+
[ -f "$dir/pyproject.toml" ] && tags+=("python")
|
|
37
|
+
[ -f "$dir/Cargo.toml" ] && tags+=("rust")
|
|
38
|
+
[ -f "$dir/go.mod" ] && tags+=("go")
|
|
39
|
+
[ -f "$dir/deno.json" ] && tags+=("deno")
|
|
40
|
+
[ -f "$dir/Makefile" ] && tags+=("make")
|
|
41
|
+
[ -f "$dir/CLAUDE.md" ] && tags+=("claude")
|
|
42
|
+
|
|
43
|
+
# Always add "auto" tag to mark as script-managed
|
|
44
|
+
tags+=("auto")
|
|
45
|
+
|
|
46
|
+
# If no markers found (only "auto"), add "folder" tag
|
|
47
|
+
if [ ${#tags[@]} -eq 1 ]; then
|
|
48
|
+
tags=("folder" "${tags[@]}")
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# Output as JSON array
|
|
52
|
+
printf '%s\n' "${tags[@]}" | jq -R . | jq -s .
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
scan_and_update() {
|
|
56
|
+
# Build the new auto-detected projects array
|
|
57
|
+
local new_projects="[]"
|
|
58
|
+
|
|
59
|
+
for dir in "$WORKSPACE_ROOT"/*/; do
|
|
60
|
+
[ -d "$dir" ] || continue
|
|
61
|
+
local name
|
|
62
|
+
name=$(basename "$dir")
|
|
63
|
+
|
|
64
|
+
is_excluded "$name" && continue
|
|
65
|
+
|
|
66
|
+
local tags
|
|
67
|
+
tags=$(detect_tags "$dir")
|
|
68
|
+
|
|
69
|
+
new_projects=$(echo "$new_projects" | jq \
|
|
70
|
+
--arg name "$name" \
|
|
71
|
+
--arg path "$dir" \
|
|
72
|
+
--argjson tags "$tags" \
|
|
73
|
+
'. += [{"name": $name, "rootPath": ($path | rtrimstr("/")), "tags": $tags, "enabled": true}]')
|
|
74
|
+
done
|
|
75
|
+
|
|
76
|
+
# Read existing projects.json (or empty array if missing/invalid)
|
|
77
|
+
local existing="[]"
|
|
78
|
+
if [ -f "$PROJECTS_FILE" ] && jq empty "$PROJECTS_FILE" 2>/dev/null; then
|
|
79
|
+
existing=$(cat "$PROJECTS_FILE")
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# Separate user entries (no "auto" tag) from auto entries
|
|
83
|
+
local user_entries
|
|
84
|
+
user_entries=$(echo "$existing" | jq '[.[] | select(.tags | index("auto") | not)]')
|
|
85
|
+
|
|
86
|
+
# Merge: user entries + new auto-detected entries
|
|
87
|
+
local merged
|
|
88
|
+
merged=$(jq -n --argjson user "$user_entries" --argjson auto "$new_projects" '$user + $auto')
|
|
89
|
+
|
|
90
|
+
# Only write if content changed (avoid unnecessary file writes that trigger Project Manager reloads)
|
|
91
|
+
local current_hash new_hash
|
|
92
|
+
current_hash=""
|
|
93
|
+
[ -f "$PROJECTS_FILE" ] && current_hash=$(md5sum "$PROJECTS_FILE" 2>/dev/null | cut -d' ' -f1)
|
|
94
|
+
|
|
95
|
+
local tmp_file
|
|
96
|
+
tmp_file=$(mktemp)
|
|
97
|
+
echo "$merged" | jq '.' > "$tmp_file"
|
|
98
|
+
new_hash=$(md5sum "$tmp_file" | cut -d' ' -f1)
|
|
99
|
+
|
|
100
|
+
if [ "$current_hash" != "$new_hash" ]; then
|
|
101
|
+
mv "$tmp_file" "$PROJECTS_FILE"
|
|
102
|
+
chmod 644 "$PROJECTS_FILE"
|
|
103
|
+
local count
|
|
104
|
+
count=$(echo "$merged" | jq 'length')
|
|
105
|
+
echo "$LOG_PREFIX Updated projects.json ($count projects)"
|
|
106
|
+
else
|
|
107
|
+
rm -f "$tmp_file"
|
|
108
|
+
fi
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
start_watcher() {
|
|
112
|
+
# Guard: don't start if already running
|
|
113
|
+
if [ -f "$PID_FILE" ]; then
|
|
114
|
+
local old_pid
|
|
115
|
+
old_pid=$(cat "$PID_FILE" 2>/dev/null)
|
|
116
|
+
if [ -n "$old_pid" ] && kill -0 "$old_pid" 2>/dev/null; then
|
|
117
|
+
echo "$LOG_PREFIX Watcher already running (PID $old_pid), skipping"
|
|
118
|
+
return 0
|
|
119
|
+
fi
|
|
120
|
+
# Stale PID file — clean up
|
|
121
|
+
rm -f "$PID_FILE"
|
|
122
|
+
fi
|
|
123
|
+
|
|
124
|
+
# Check if inotifywait is available
|
|
125
|
+
if ! command -v inotifywait &>/dev/null; then
|
|
126
|
+
echo "$LOG_PREFIX Installing inotify-tools..."
|
|
127
|
+
if command -v sudo &>/dev/null; then
|
|
128
|
+
sudo apt-get update -qq && sudo apt-get install -y -qq inotify-tools >/dev/null 2>&1
|
|
129
|
+
else
|
|
130
|
+
apt-get update -qq && apt-get install -y -qq inotify-tools >/dev/null 2>&1
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
if ! command -v inotifywait &>/dev/null; then
|
|
134
|
+
echo "$LOG_PREFIX WARNING: Could not install inotify-tools, watcher disabled"
|
|
135
|
+
return 1
|
|
136
|
+
fi
|
|
137
|
+
echo "$LOG_PREFIX inotify-tools installed"
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
# Fork background watcher
|
|
141
|
+
(
|
|
142
|
+
# Watch for directory create/delete/move events in /workspaces/
|
|
143
|
+
# --quiet suppresses header, --monitor keeps watching indefinitely
|
|
144
|
+
inotifywait -m -q -e create,delete,moved_to,moved_from \
|
|
145
|
+
--format '%f %e' "$WORKSPACE_ROOT" 2>/dev/null |
|
|
146
|
+
while read -r name event; do
|
|
147
|
+
# Small delay to let filesystem settle (e.g., move operations)
|
|
148
|
+
sleep 1
|
|
149
|
+
scan_and_update
|
|
150
|
+
done
|
|
151
|
+
|
|
152
|
+
# Cleanup on exit
|
|
153
|
+
rm -f "$PID_FILE"
|
|
154
|
+
) &
|
|
155
|
+
local watcher_pid=$!
|
|
156
|
+
echo "$watcher_pid" > "$PID_FILE"
|
|
157
|
+
disown
|
|
158
|
+
|
|
159
|
+
echo "$LOG_PREFIX Background watcher started (PID $watcher_pid)"
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
# --- Main ---
|
|
163
|
+
|
|
164
|
+
echo "$LOG_PREFIX Configuring Project Manager auto-detection..."
|
|
165
|
+
|
|
166
|
+
# Ensure projects directory exists
|
|
167
|
+
mkdir -p "$PROJECTS_DIR"
|
|
168
|
+
|
|
169
|
+
# Initial scan (synchronous — runs in <1 second)
|
|
170
|
+
scan_and_update
|
|
171
|
+
|
|
172
|
+
# Start background watcher
|
|
173
|
+
start_watcher
|
|
174
|
+
|
|
175
|
+
echo "$LOG_PREFIX Done"
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Symlink $HOME/.claude → $CLAUDE_CONFIG_DIR so third-party tools
|
|
3
|
+
# (ccburn, ccusage, etc.) that hardcode ~/.claude can find auth and config.
|
|
4
|
+
|
|
5
|
+
CLAUDE_DIR="${CLAUDE_CONFIG_DIR:=/workspaces/.claude}"
|
|
6
|
+
HOME_CLAUDE="$HOME/.claude"
|
|
7
|
+
|
|
8
|
+
echo "[setup-symlink] Ensuring $HOME_CLAUDE → $CLAUDE_DIR ..."
|
|
9
|
+
|
|
10
|
+
# Already a correct symlink — nothing to do
|
|
11
|
+
if [ -L "$HOME_CLAUDE" ]; then
|
|
12
|
+
CURRENT_TARGET="$(readlink "$HOME_CLAUDE")"
|
|
13
|
+
if [ "$CURRENT_TARGET" = "$CLAUDE_DIR" ]; then
|
|
14
|
+
echo "[setup-symlink] Symlink already correct, skipping"
|
|
15
|
+
exit 0
|
|
16
|
+
fi
|
|
17
|
+
# Points somewhere else — remove stale symlink
|
|
18
|
+
echo "[setup-symlink] Removing stale symlink ($CURRENT_TARGET)"
|
|
19
|
+
rm "$HOME_CLAUDE"
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
# Real directory exists — merge contents into target, then remove
|
|
23
|
+
if [ -d "$HOME_CLAUDE" ]; then
|
|
24
|
+
echo "[setup-symlink] Moving existing $HOME_CLAUDE contents into $CLAUDE_DIR"
|
|
25
|
+
mkdir -p "$CLAUDE_DIR"
|
|
26
|
+
# Copy contents preserving attributes; skip files that already exist in target
|
|
27
|
+
cp -rn "$HOME_CLAUDE/." "$CLAUDE_DIR/" 2>/dev/null || true
|
|
28
|
+
rm -rf "$HOME_CLAUDE"
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Ensure target exists
|
|
32
|
+
mkdir -p "$CLAUDE_DIR"
|
|
33
|
+
|
|
34
|
+
# Create symlink
|
|
35
|
+
ln -s "$CLAUDE_DIR" "$HOME_CLAUDE"
|
|
36
|
+
echo "[setup-symlink] Created symlink: $HOME_CLAUDE → $CLAUDE_DIR"
|
|
@@ -5,10 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
echo "[update-claude] Checking for Claude Code updates..."
|
|
7
7
|
|
|
8
|
+
# === TMPDIR ===
|
|
9
|
+
_TMPDIR="${TMPDIR:-/tmp}"
|
|
10
|
+
|
|
8
11
|
# === CLEANUP TRAP ===
|
|
9
12
|
cleanup() {
|
|
10
|
-
rm -f /
|
|
11
|
-
rm -f /
|
|
13
|
+
rm -f "${_TMPDIR}/claude-update" 2>/dev/null || true
|
|
14
|
+
rm -f "${_TMPDIR}/claude-update-manifest.json" 2>/dev/null || true
|
|
12
15
|
}
|
|
13
16
|
trap cleanup EXIT
|
|
14
17
|
|
|
@@ -81,13 +84,13 @@ echo "[update-claude] Platform: ${PLATFORM}"
|
|
|
81
84
|
# === DOWNLOAD MANIFEST ===
|
|
82
85
|
MANIFEST_URL="${BASE_URL}/${LATEST_VERSION}/manifest.json"
|
|
83
86
|
|
|
84
|
-
if ! curl -fsSL "${MANIFEST_URL}" -o /
|
|
87
|
+
if ! curl -fsSL "${MANIFEST_URL}" -o ${_TMPDIR}/claude-update-manifest.json 2>/dev/null; then
|
|
85
88
|
echo "[update-claude] WARNING: Failed to download manifest, skipping"
|
|
86
89
|
exit 0
|
|
87
90
|
fi
|
|
88
91
|
|
|
89
92
|
# === EXTRACT AND VERIFY CHECKSUM ===
|
|
90
|
-
EXPECTED_CHECKSUM=$(jq -r ".platforms.\"${PLATFORM}\".checksum" /
|
|
93
|
+
EXPECTED_CHECKSUM=$(jq -r ".platforms.\"${PLATFORM}\".checksum" ${_TMPDIR}/claude-update-manifest.json)
|
|
91
94
|
if [ -z "${EXPECTED_CHECKSUM}" ] || [ "${EXPECTED_CHECKSUM}" = "null" ]; then
|
|
92
95
|
echo "[update-claude] WARNING: Platform ${PLATFORM} not found in manifest, skipping"
|
|
93
96
|
exit 0
|
|
@@ -96,13 +99,13 @@ fi
|
|
|
96
99
|
# === DOWNLOAD BINARY ===
|
|
97
100
|
BINARY_URL="${BASE_URL}/${LATEST_VERSION}/${PLATFORM}/claude"
|
|
98
101
|
|
|
99
|
-
if ! curl -fsSL "${BINARY_URL}" -o /
|
|
102
|
+
if ! curl -fsSL "${BINARY_URL}" -o ${_TMPDIR}/claude-update 2>/dev/null; then
|
|
100
103
|
echo "[update-claude] WARNING: Failed to download binary, skipping"
|
|
101
104
|
exit 0
|
|
102
105
|
fi
|
|
103
106
|
|
|
104
107
|
# === VERIFY CHECKSUM ===
|
|
105
|
-
ACTUAL_CHECKSUM=$(sha256sum /
|
|
108
|
+
ACTUAL_CHECKSUM=$(sha256sum ${_TMPDIR}/claude-update | cut -d' ' -f1)
|
|
106
109
|
|
|
107
110
|
if [ "${ACTUAL_CHECKSUM}" != "${EXPECTED_CHECKSUM}" ]; then
|
|
108
111
|
echo "[update-claude] WARNING: Checksum verification failed, skipping"
|
|
@@ -112,8 +115,8 @@ if [ "${ACTUAL_CHECKSUM}" != "${EXPECTED_CHECKSUM}" ]; then
|
|
|
112
115
|
fi
|
|
113
116
|
|
|
114
117
|
# === INSTALL (atomic replace) ===
|
|
115
|
-
chmod +x /
|
|
116
|
-
if ! sudo mv /
|
|
118
|
+
chmod +x ${_TMPDIR}/claude-update
|
|
119
|
+
if ! sudo mv ${_TMPDIR}/claude-update /usr/local/bin/claude; then
|
|
117
120
|
echo "[update-claude] WARNING: Failed to install update (sudo mv failed), skipping"
|
|
118
121
|
exit 0
|
|
119
122
|
fi
|
|
@@ -22,8 +22,9 @@ fi
|
|
|
22
22
|
: "${OVERWRITE_CONFIG:=false}"
|
|
23
23
|
: "${SETUP_PLUGINS:=true}"
|
|
24
24
|
: "${SETUP_UPDATE_CLAUDE:=true}"
|
|
25
|
+
: "${SETUP_PROJECTS:=true}"
|
|
25
26
|
|
|
26
|
-
export CLAUDE_CONFIG_DIR CONFIG_SOURCE_DIR SETUP_CONFIG SETUP_ALIASES OVERWRITE_CONFIG SETUP_PLUGINS SETUP_UPDATE_CLAUDE
|
|
27
|
+
export CLAUDE_CONFIG_DIR CONFIG_SOURCE_DIR SETUP_CONFIG SETUP_ALIASES OVERWRITE_CONFIG SETUP_PLUGINS SETUP_UPDATE_CLAUDE SETUP_PROJECTS
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
@@ -49,10 +50,11 @@ run_script() {
|
|
|
49
50
|
fi
|
|
50
51
|
}
|
|
51
52
|
|
|
53
|
+
run_script "$SCRIPT_DIR/setup-symlink-claude.sh" "true"
|
|
52
54
|
run_script "$SCRIPT_DIR/setup-config.sh" "$SETUP_CONFIG"
|
|
53
55
|
run_script "$SCRIPT_DIR/setup-aliases.sh" "$SETUP_ALIASES"
|
|
54
56
|
run_script "$SCRIPT_DIR/setup-plugins.sh" "$SETUP_PLUGINS"
|
|
55
|
-
run_script "$SCRIPT_DIR/setup-
|
|
57
|
+
run_script "$SCRIPT_DIR/setup-projects.sh" "$SETUP_PROJECTS"
|
|
56
58
|
|
|
57
59
|
# Non-blocking: check for Claude Code updates in background
|
|
58
60
|
if [ "$SETUP_UPDATE_CLAUDE" = "true" ]; then
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "codeforge-dev",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.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": {
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# setup-irie-claude.sh
|
|
3
|
-
# Copies commands and agents from irie project to workspace .claude directory.
|
|
4
|
-
# This script is only for AnExiledDev's setup.
|
|
5
|
-
|
|
6
|
-
IRIE_CLAUDE="/workspaces/projects/irie/.claude"
|
|
7
|
-
WORKSPACE_CLAUDE="/workspaces/.claude"
|
|
8
|
-
|
|
9
|
-
# Fail gracefully if irie doesn't exist
|
|
10
|
-
if [[ ! -d "/workspaces/projects/irie" ]]; then
|
|
11
|
-
echo "┌─────────────────────────────────────────────────────────┐"
|
|
12
|
-
echo "│ Note: /workspaces/projects/irie not found. │"
|
|
13
|
-
echo "│ Failure is expected - this script is only for AnExiledDev│"
|
|
14
|
-
echo "└─────────────────────────────────────────────────────────┘"
|
|
15
|
-
exit 0
|
|
16
|
-
fi
|
|
17
|
-
|
|
18
|
-
# Copy commands if source exists
|
|
19
|
-
if [[ -d "$IRIE_CLAUDE/commands" ]]; then
|
|
20
|
-
mkdir -p "$WORKSPACE_CLAUDE/commands"
|
|
21
|
-
cp -f "$IRIE_CLAUDE/commands/"* "$WORKSPACE_CLAUDE/commands/" 2>/dev/null
|
|
22
|
-
echo "Copied irie commands to workspace .claude"
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
|
-
# Copy agents if source exists
|
|
26
|
-
if [[ -d "$IRIE_CLAUDE/agents" ]]; then
|
|
27
|
-
mkdir -p "$WORKSPACE_CLAUDE/agents"
|
|
28
|
-
cp -f "$IRIE_CLAUDE/agents/"* "$WORKSPACE_CLAUDE/agents/" 2>/dev/null
|
|
29
|
-
echo "Copied irie agents to workspace .claude"
|
|
30
|
-
fi
|
|
31
|
-
|
|
32
|
-
echo "irie .claude sync complete"
|