claudepod 1.1.1 → 1.2.1
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 +18 -0
- package/.devcontainer/CHANGELOG.md +68 -0
- package/.devcontainer/CLAUDE.md +100 -0
- package/.devcontainer/README.md +220 -0
- package/.devcontainer/config/main-system-prompt.md +118 -0
- package/.devcontainer/config/settings.json +41 -0
- package/.devcontainer/devcontainer.json +71 -113
- package/.devcontainer/features/README.md +113 -0
- package/.devcontainer/features/ast-grep/README.md +24 -0
- package/.devcontainer/features/ast-grep/devcontainer-feature.json +24 -0
- package/.devcontainer/features/ast-grep/install.sh +51 -0
- package/.devcontainer/features/ccstatusline/README.md +296 -0
- package/.devcontainer/features/ccstatusline/devcontainer-feature.json +19 -0
- package/.devcontainer/features/ccstatusline/install.sh +290 -0
- package/.devcontainer/features/ccusage/README.md +205 -0
- package/.devcontainer/features/ccusage/devcontainer-feature.json +38 -0
- package/.devcontainer/features/ccusage/install.sh +132 -0
- package/.devcontainer/features/claude-code/README.md +498 -0
- package/.devcontainer/features/claude-code/config/settings.json +36 -0
- package/.devcontainer/features/claude-code/config/system-prompt.md +118 -0
- package/.devcontainer/features/claude-code/config/world-building-sp.md +1432 -0
- package/.devcontainer/features/claude-code/devcontainer-feature.json +42 -0
- package/.devcontainer/features/claude-code/install.sh +466 -0
- package/.devcontainer/features/claude-monitor/README.md +74 -0
- package/.devcontainer/features/claude-monitor/devcontainer-feature.json +38 -0
- package/.devcontainer/features/claude-monitor/install.sh +99 -0
- package/.devcontainer/features/lsp-servers/README.md +85 -0
- package/.devcontainer/features/lsp-servers/devcontainer-feature.json +34 -0
- package/.devcontainer/features/lsp-servers/install.sh +92 -0
- package/.devcontainer/features/mcp-qdrant/CHANGES.md +399 -0
- package/.devcontainer/features/mcp-qdrant/README.md +474 -0
- package/.devcontainer/features/mcp-qdrant/devcontainer-feature.json +57 -0
- package/.devcontainer/features/mcp-qdrant/install.sh +295 -0
- package/.devcontainer/features/mcp-qdrant/poststart-hook.sh +129 -0
- package/.devcontainer/features/mcp-reasoner/README.md +177 -0
- package/.devcontainer/features/mcp-reasoner/devcontainer-feature.json +20 -0
- package/.devcontainer/features/mcp-reasoner/install.sh +177 -0
- package/.devcontainer/features/mcp-reasoner/poststart-hook.sh +67 -0
- package/.devcontainer/features/splitrail/README.md +140 -0
- package/.devcontainer/features/splitrail/devcontainer-feature.json +34 -0
- package/.devcontainer/features/splitrail/install.sh +129 -0
- package/.devcontainer/features/tree-sitter/README.md +138 -0
- package/.devcontainer/features/tree-sitter/devcontainer-feature.json +52 -0
- package/.devcontainer/features/tree-sitter/install.sh +173 -0
- package/.devcontainer/scripts/setup-aliases.sh +52 -0
- package/.devcontainer/scripts/setup-config.sh +28 -0
- package/.devcontainer/scripts/setup-irie-claude.sh +32 -0
- package/.devcontainer/scripts/setup-lsp.sh +20 -0
- package/.devcontainer/scripts/setup-plugins.sh +31 -0
- package/.devcontainer/scripts/setup.sh +60 -0
- package/README.md +163 -177
- package/package.json +5 -9
- package/setup.js +2 -2
- package/.devcontainer/config/claude/mcp.json +0 -77
- package/.devcontainer/config/claude/mcp.json.backup +0 -77
- package/.devcontainer/config/claude/mcp.json.template +0 -118
- package/.devcontainer/config/claude/output-styles/strict-development.md +0 -158
- package/.devcontainer/config/claude/settings.json +0 -10
- package/.devcontainer/config/claude/system-prompt.md +0 -3
- package/.devcontainer/config/searxng/ods_config.json +0 -16
- package/.devcontainer/config/searxng/searxng_env_template +0 -71
- package/.devcontainer/config/serena/serena_config.yml +0 -72
- package/.devcontainer/config/taskmaster/config.json +0 -37
- package/.devcontainer/ods_config.json +0 -21
- package/.devcontainer/post-create.sh +0 -1077
- package/.devcontainer/post-start.sh +0 -551
- package/.devcontainer/sanitize-system-prompt.sh +0 -31
- package/.devcontainer/scripts/config/claude-core.sh +0 -210
- package/.devcontainer/scripts/config/searxng.sh +0 -252
- package/.devcontainer/scripts/config/serena.sh +0 -47
- package/.devcontainer/scripts/config/taskmaster.sh +0 -41
- package/.devcontainer/scripts/generate-mcp-config.js +0 -205
- package/.devcontainer/scripts/install/claude-code.sh +0 -112
- package/.devcontainer/scripts/shell/zsh-config.sh +0 -271
- package/.devcontainer/scripts/utils.sh +0 -44
- package/.devcontainer/setup-zsh.sh +0 -234
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "tree-sitter",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"name": "Tree-sitter Parser",
|
|
5
|
+
"description": "Installs tree-sitter CLI (via npm) and parsing library with Node.js and Python bindings",
|
|
6
|
+
"maintainer": "AnExiledDev",
|
|
7
|
+
"documentationURL": "https://tree-sitter.github.io/tree-sitter/",
|
|
8
|
+
"options": {
|
|
9
|
+
"version": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "tree-sitter-cli npm package version (e.g., 'latest', '0.24.4')",
|
|
12
|
+
"default": "latest"
|
|
13
|
+
},
|
|
14
|
+
"bindings": {
|
|
15
|
+
"type": "string",
|
|
16
|
+
"description": "Language bindings to install (node, python, both, none)",
|
|
17
|
+
"default": "both",
|
|
18
|
+
"enum": [
|
|
19
|
+
"node",
|
|
20
|
+
"python",
|
|
21
|
+
"both",
|
|
22
|
+
"none"
|
|
23
|
+
],
|
|
24
|
+
"proposals": [
|
|
25
|
+
"node",
|
|
26
|
+
"python",
|
|
27
|
+
"both",
|
|
28
|
+
"none"
|
|
29
|
+
]
|
|
30
|
+
},
|
|
31
|
+
"installCli": {
|
|
32
|
+
"type": "boolean",
|
|
33
|
+
"description": "Install tree-sitter CLI tool (requires Node.js)",
|
|
34
|
+
"default": true
|
|
35
|
+
},
|
|
36
|
+
"grammars": {
|
|
37
|
+
"type": "string",
|
|
38
|
+
"description": "Comma-separated list of grammars to preload (e.g., 'javascript,python,rust'). Empty for none.",
|
|
39
|
+
"default": "javascript,typescript,python"
|
|
40
|
+
},
|
|
41
|
+
"username": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"description": "Container user to install for",
|
|
44
|
+
"default": "automatic"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"installsAfter": [
|
|
48
|
+
"ghcr.io/devcontainers/features/common-utils:2",
|
|
49
|
+
"ghcr.io/devcontainers/features/node:1",
|
|
50
|
+
"ghcr.io/devcontainers/features/python:1"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# === IMPORT OPTIONS ===
|
|
5
|
+
# DevContainer converts camelCase to UPPERCASE without underscores
|
|
6
|
+
VERSION="${VERSION:-latest}"
|
|
7
|
+
BINDINGS="${BINDINGS:-both}"
|
|
8
|
+
INSTALL_CLI="${INSTALLCLI:-true}"
|
|
9
|
+
GRAMMARS="${GRAMMARS:-}"
|
|
10
|
+
USERNAME="${USERNAME:-automatic}"
|
|
11
|
+
|
|
12
|
+
echo "[tree-sitter] Starting tree-sitter installation..."
|
|
13
|
+
echo "[tree-sitter] Options: version=${VERSION}, bindings=${BINDINGS}, cli=${INSTALL_CLI}"
|
|
14
|
+
|
|
15
|
+
# === SOURCE NVM ===
|
|
16
|
+
if [ -f /usr/local/share/nvm/nvm.sh ]; then
|
|
17
|
+
source /usr/local/share/nvm/nvm.sh
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# === VALIDATE BINDINGS OPTION ===
|
|
21
|
+
if [[ ! "${BINDINGS}" =~ ^(node|python|both|none)$ ]]; then
|
|
22
|
+
echo "[tree-sitter] ERROR: bindings must be 'node', 'python', 'both', or 'none'"
|
|
23
|
+
echo " Provided: ${BINDINGS}"
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# === VALIDATE DEPENDENCIES ===
|
|
28
|
+
NEED_NODE=false
|
|
29
|
+
NEED_PYTHON=false
|
|
30
|
+
|
|
31
|
+
if [ "${BINDINGS}" = "node" ] || [ "${BINDINGS}" = "both" ]; then
|
|
32
|
+
NEED_NODE=true
|
|
33
|
+
fi
|
|
34
|
+
if [ "${BINDINGS}" = "python" ] || [ "${BINDINGS}" = "both" ]; then
|
|
35
|
+
NEED_PYTHON=true
|
|
36
|
+
fi
|
|
37
|
+
|
|
38
|
+
# CLI installation requires npm
|
|
39
|
+
if [ "${INSTALL_CLI}" = "true" ]; then
|
|
40
|
+
NEED_NODE=true
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
if [ "${NEED_NODE}" = "true" ]; then
|
|
44
|
+
if ! command -v npm &>/dev/null; then
|
|
45
|
+
echo "[tree-sitter] ERROR: npm not available but required for CLI or node bindings"
|
|
46
|
+
echo " Ensure node feature is installed first"
|
|
47
|
+
exit 1
|
|
48
|
+
fi
|
|
49
|
+
echo "[tree-sitter] Node.js: $(node --version)"
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
if [ "${NEED_PYTHON}" = "true" ]; then
|
|
53
|
+
if ! command -v pip &>/dev/null && ! command -v pip3 &>/dev/null; then
|
|
54
|
+
echo "[tree-sitter] ERROR: pip not available but python bindings requested"
|
|
55
|
+
echo " Ensure python feature is installed first"
|
|
56
|
+
exit 1
|
|
57
|
+
fi
|
|
58
|
+
echo "[tree-sitter] Python: $(python3 --version)"
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# === DETECT USER ===
|
|
62
|
+
if [ "${USERNAME}" = "auto" ] || [ "${USERNAME}" = "automatic" ]; then
|
|
63
|
+
if [ -n "${_REMOTE_USER:-}" ]; then
|
|
64
|
+
USERNAME="${_REMOTE_USER}"
|
|
65
|
+
elif getent passwd vscode >/dev/null 2>&1; then
|
|
66
|
+
USERNAME="vscode"
|
|
67
|
+
elif getent passwd node >/dev/null 2>&1; then
|
|
68
|
+
USERNAME="node"
|
|
69
|
+
elif getent passwd codespace >/dev/null 2>&1; then
|
|
70
|
+
USERNAME="codespace"
|
|
71
|
+
else
|
|
72
|
+
USERNAME="root"
|
|
73
|
+
fi
|
|
74
|
+
fi
|
|
75
|
+
|
|
76
|
+
if [ "${USERNAME}" = "root" ]; then
|
|
77
|
+
USER_HOME="/root"
|
|
78
|
+
else
|
|
79
|
+
USER_HOME=$(getent passwd "${USERNAME}" | cut -d: -f6)
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
echo "[tree-sitter] Installing for user: ${USERNAME} (home: ${USER_HOME})"
|
|
83
|
+
|
|
84
|
+
# === INSTALL CLI VIA NPM ===
|
|
85
|
+
if [ "${INSTALL_CLI}" = "true" ]; then
|
|
86
|
+
echo "[tree-sitter] Installing tree-sitter CLI via npm..."
|
|
87
|
+
|
|
88
|
+
# Build version specifier
|
|
89
|
+
if [ "${VERSION}" = "latest" ]; then
|
|
90
|
+
NPM_PACKAGE="tree-sitter-cli"
|
|
91
|
+
else
|
|
92
|
+
NPM_PACKAGE="tree-sitter-cli@${VERSION}"
|
|
93
|
+
fi
|
|
94
|
+
|
|
95
|
+
npm install -g "${NPM_PACKAGE}" 2>/dev/null || {
|
|
96
|
+
echo "[tree-sitter] WARNING: Global npm install failed, trying user install"
|
|
97
|
+
su - "${USERNAME}" -c "npm install -g ${NPM_PACKAGE}" 2>/dev/null || true
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
echo "[tree-sitter] CLI installed: $(tree-sitter --version 2>/dev/null || echo 'unknown')"
|
|
101
|
+
fi
|
|
102
|
+
|
|
103
|
+
# === INSTALL NODE BINDINGS ===
|
|
104
|
+
if [ "${BINDINGS}" = "node" ] || [ "${BINDINGS}" = "both" ]; then
|
|
105
|
+
echo "[tree-sitter] Installing Node.js bindings..."
|
|
106
|
+
|
|
107
|
+
# Install web-tree-sitter for runtime parsing
|
|
108
|
+
npm install -g web-tree-sitter 2>/dev/null || {
|
|
109
|
+
echo "[tree-sitter] WARNING: Global npm install failed, trying user install"
|
|
110
|
+
su - "${USERNAME}" -c "npm install -g web-tree-sitter" 2>/dev/null || true
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
# Install grammars if specified
|
|
114
|
+
if [ -n "${GRAMMARS}" ]; then
|
|
115
|
+
echo "[tree-sitter] Installing Node.js grammars: ${GRAMMARS}"
|
|
116
|
+
IFS=',' read -ra GRAMMAR_LIST <<< "${GRAMMARS}"
|
|
117
|
+
for grammar in "${GRAMMAR_LIST[@]}"; do
|
|
118
|
+
grammar=$(echo "${grammar}" | xargs) # trim whitespace
|
|
119
|
+
if [ -n "${grammar}" ]; then
|
|
120
|
+
npm install -g "tree-sitter-${grammar}" 2>/dev/null || {
|
|
121
|
+
echo "[tree-sitter] WARNING: Failed to install grammar: ${grammar}"
|
|
122
|
+
}
|
|
123
|
+
fi
|
|
124
|
+
done
|
|
125
|
+
fi
|
|
126
|
+
|
|
127
|
+
echo "[tree-sitter] Node.js bindings installed"
|
|
128
|
+
fi
|
|
129
|
+
|
|
130
|
+
# === INSTALL PYTHON BINDINGS ===
|
|
131
|
+
if [ "${NEED_PYTHON}" = "true" ]; then
|
|
132
|
+
echo "[tree-sitter] Installing Python bindings..."
|
|
133
|
+
|
|
134
|
+
# Use pip3 with --break-system-packages for system python
|
|
135
|
+
PIP_CMD="pip3"
|
|
136
|
+
if command -v pip &>/dev/null; then
|
|
137
|
+
PIP_CMD="pip"
|
|
138
|
+
fi
|
|
139
|
+
|
|
140
|
+
# Install tree-sitter python package
|
|
141
|
+
${PIP_CMD} install --break-system-packages tree-sitter 2>/dev/null || \
|
|
142
|
+
${PIP_CMD} install tree-sitter 2>/dev/null || {
|
|
143
|
+
echo "[tree-sitter] WARNING: System pip install failed, trying user install"
|
|
144
|
+
su - "${USERNAME}" -c "${PIP_CMD} install --user tree-sitter" 2>/dev/null || true
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
# Install grammars if specified
|
|
148
|
+
if [ -n "${GRAMMARS}" ]; then
|
|
149
|
+
echo "[tree-sitter] Installing Python grammars: ${GRAMMARS}"
|
|
150
|
+
IFS=',' read -ra GRAMMAR_LIST <<< "${GRAMMARS}"
|
|
151
|
+
for grammar in "${GRAMMAR_LIST[@]}"; do
|
|
152
|
+
grammar=$(echo "${grammar}" | xargs) # trim whitespace
|
|
153
|
+
if [ -n "${grammar}" ]; then
|
|
154
|
+
${PIP_CMD} install --break-system-packages "tree-sitter-${grammar}" 2>/dev/null || \
|
|
155
|
+
${PIP_CMD} install "tree-sitter-${grammar}" 2>/dev/null || {
|
|
156
|
+
echo "[tree-sitter] WARNING: Failed to install grammar: ${grammar}"
|
|
157
|
+
}
|
|
158
|
+
fi
|
|
159
|
+
done
|
|
160
|
+
fi
|
|
161
|
+
|
|
162
|
+
echo "[tree-sitter] Python bindings installed"
|
|
163
|
+
fi
|
|
164
|
+
|
|
165
|
+
# === SUMMARY ===
|
|
166
|
+
echo ""
|
|
167
|
+
echo "[tree-sitter] Installation complete!"
|
|
168
|
+
echo " CLI: $(command -v tree-sitter &>/dev/null && echo "installed ($(tree-sitter --version 2>/dev/null || echo 'unknown'))" || echo "not installed")"
|
|
169
|
+
echo " Node.js: $([ "${NEED_NODE}" = "true" ] && echo "installed" || echo "skipped")"
|
|
170
|
+
echo " Python: $([ "${NEED_PYTHON}" = "true" ] && echo "installed" || echo "skipped")"
|
|
171
|
+
if [ -n "${GRAMMARS}" ]; then
|
|
172
|
+
echo " Grammars: ${GRAMMARS}"
|
|
173
|
+
fi
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup cc function for claude with local system prompt support
|
|
3
|
+
|
|
4
|
+
CLAUDE_DIR="${CLAUDE_CONFIG_DIR:?CLAUDE_CONFIG_DIR not set}"
|
|
5
|
+
|
|
6
|
+
echo "[setup-aliases] Configuring Claude aliases..."
|
|
7
|
+
|
|
8
|
+
# cc function: ensures local system prompt and settings exist, then runs claude
|
|
9
|
+
CC_FUNCTION='cc() {
|
|
10
|
+
local LOCAL_PROMPT=".claude/system-prompt.md"
|
|
11
|
+
local DEFAULT_PROMPT="/workspaces/.devcontainer/config/main-system-prompt.md"
|
|
12
|
+
local LOCAL_SETTINGS=".claude/settings.json"
|
|
13
|
+
local DEFAULT_SETTINGS="/workspaces/.devcontainer/config/settings.json"
|
|
14
|
+
|
|
15
|
+
mkdir -p .claude
|
|
16
|
+
|
|
17
|
+
if [ ! -f "$LOCAL_PROMPT" ]; then
|
|
18
|
+
cp "$DEFAULT_PROMPT" "$LOCAL_PROMPT"
|
|
19
|
+
echo "[cc] Created $LOCAL_PROMPT from default"
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
if [ ! -f "$LOCAL_SETTINGS" ]; then
|
|
23
|
+
cp "$DEFAULT_SETTINGS" "$LOCAL_SETTINGS"
|
|
24
|
+
echo "[cc] Created $LOCAL_SETTINGS from default"
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
claude --system-prompt-file "$LOCAL_PROMPT" --dangerously-skip-permissions "$@"
|
|
28
|
+
}'
|
|
29
|
+
|
|
30
|
+
for rc in ~/.bashrc ~/.zshrc; do
|
|
31
|
+
if [ -f "$rc" ]; then
|
|
32
|
+
# Remove old cc alias if present
|
|
33
|
+
if grep -q "alias cc=" "$rc" 2>/dev/null; then
|
|
34
|
+
sed -i '/alias cc=/d' "$rc"
|
|
35
|
+
echo "[setup-aliases] Removed old cc alias from $(basename $rc)"
|
|
36
|
+
fi
|
|
37
|
+
# Remove old specwright alias if present
|
|
38
|
+
if grep -q "alias specwright=" "$rc" 2>/dev/null; then
|
|
39
|
+
sed -i '/alias specwright=/d' "$rc"
|
|
40
|
+
echo "[setup-aliases] Removed specwright alias from $(basename $rc)"
|
|
41
|
+
fi
|
|
42
|
+
# Add cc function if not present
|
|
43
|
+
if ! grep -q "^cc()" "$rc" 2>/dev/null; then
|
|
44
|
+
echo "" >> "$rc"
|
|
45
|
+
echo "$CC_FUNCTION" >> "$rc"
|
|
46
|
+
echo "[setup-aliases] Added cc function to $(basename $rc)"
|
|
47
|
+
fi
|
|
48
|
+
fi
|
|
49
|
+
done
|
|
50
|
+
|
|
51
|
+
echo "[setup-aliases] Aliases configured:"
|
|
52
|
+
echo " cc -> claude with local .claude/system-prompt.md and .claude/settings.json (auto-created from defaults)"
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Copy Claude configuration files to workspace
|
|
3
|
+
|
|
4
|
+
CONFIG_DIR="${CONFIG_SOURCE_DIR:?CONFIG_SOURCE_DIR not set}"
|
|
5
|
+
TARGET_DIR="${CLAUDE_CONFIG_DIR:?CLAUDE_CONFIG_DIR not set}"
|
|
6
|
+
OVERWRITE="${OVERWRITE_CONFIG:-false}"
|
|
7
|
+
|
|
8
|
+
echo "[setup-config] Copying configuration files..."
|
|
9
|
+
[ "$OVERWRITE" = "true" ] && echo "[setup-config] Overwrite mode enabled"
|
|
10
|
+
|
|
11
|
+
mkdir -p "$TARGET_DIR"
|
|
12
|
+
|
|
13
|
+
copy_file() {
|
|
14
|
+
local file="$1"
|
|
15
|
+
if [ -f "$CONFIG_DIR/$file" ]; then
|
|
16
|
+
if [ "$OVERWRITE" = "true" ] || [ ! -f "$TARGET_DIR/$file" ]; then
|
|
17
|
+
cp "$CONFIG_DIR/$file" "$TARGET_DIR/$file"
|
|
18
|
+
echo "[setup-config] Copied $file"
|
|
19
|
+
else
|
|
20
|
+
echo "[setup-config] $file already exists, skipping"
|
|
21
|
+
fi
|
|
22
|
+
fi
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
copy_file "settings.json"
|
|
26
|
+
copy_file "main-system-prompt.md"
|
|
27
|
+
|
|
28
|
+
echo "[setup-config] Configuration complete"
|
|
@@ -0,0 +1,32 @@
|
|
|
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"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Install LSP plugins for Claude Code
|
|
3
|
+
|
|
4
|
+
echo "[setup-lsp] Installing Claude Code LSP plugins..."
|
|
5
|
+
|
|
6
|
+
# Install Python LSP plugin
|
|
7
|
+
if claude plugin install pyright-lsp@claude-plugins-official 2>/dev/null; then
|
|
8
|
+
echo "[setup-lsp] Installed: pyright-lsp"
|
|
9
|
+
else
|
|
10
|
+
echo "[setup-lsp] WARNING: Failed to install pyright-lsp (may already be installed)"
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
# Install TypeScript LSP plugin
|
|
14
|
+
if claude plugin install typescript-lsp@claude-plugins-official 2>/dev/null; then
|
|
15
|
+
echo "[setup-lsp] Installed: typescript-lsp"
|
|
16
|
+
else
|
|
17
|
+
echo "[setup-lsp] WARNING: Failed to install typescript-lsp (may already be installed)"
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
echo "[setup-lsp] LSP plugin installation complete"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Install official Anthropic plugins
|
|
3
|
+
|
|
4
|
+
echo "[setup-plugins] Installing official Anthropic plugins..."
|
|
5
|
+
|
|
6
|
+
# Note: typescript-lsp and pyright-lsp are installed by setup-lsp.sh
|
|
7
|
+
PLUGINS=(
|
|
8
|
+
"frontend-design@claude-plugins-official"
|
|
9
|
+
"code-review@claude-plugins-official"
|
|
10
|
+
"commit-commands@claude-plugins-official"
|
|
11
|
+
"pr-review-toolkit@claude-plugins-official"
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
for plugin in "${PLUGINS[@]}"; do
|
|
15
|
+
echo "[setup-plugins] Installing $plugin..."
|
|
16
|
+
if claude plugin install "$plugin" 2>/dev/null; then
|
|
17
|
+
echo "[setup-plugins] Installed: $plugin"
|
|
18
|
+
else
|
|
19
|
+
echo "[setup-plugins] Warning: Failed to install $plugin (may already exist)"
|
|
20
|
+
fi
|
|
21
|
+
done
|
|
22
|
+
|
|
23
|
+
# code-simplifier requires npx method (not available via native CLI)
|
|
24
|
+
echo "[setup-plugins] Installing code-simplifier (via npx)..."
|
|
25
|
+
if npx -y claude-plugins install "@anthropics/claude-plugins-official/code-simplifier" 2>/dev/null; then
|
|
26
|
+
echo "[setup-plugins] Installed: code-simplifier"
|
|
27
|
+
else
|
|
28
|
+
echo "[setup-plugins] Warning: Failed to install code-simplifier (may already exist)"
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
echo "[setup-plugins] Plugin installation complete"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Master setup script for ClaudePod devcontainer
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
DEVCONTAINER_DIR="$(dirname "$SCRIPT_DIR")"
|
|
8
|
+
ENV_FILE="$DEVCONTAINER_DIR/.env"
|
|
9
|
+
|
|
10
|
+
# Load configuration
|
|
11
|
+
if [ -f "$ENV_FILE" ]; then
|
|
12
|
+
set -a
|
|
13
|
+
source "$ENV_FILE"
|
|
14
|
+
set +a
|
|
15
|
+
fi
|
|
16
|
+
|
|
17
|
+
# Apply defaults for any unset variables
|
|
18
|
+
: "${CLAUDE_CONFIG_DIR:=/workspaces/.claude}"
|
|
19
|
+
: "${CONFIG_SOURCE_DIR:=$DEVCONTAINER_DIR/config}"
|
|
20
|
+
: "${SETUP_CONFIG:=true}"
|
|
21
|
+
: "${SETUP_ALIASES:=true}"
|
|
22
|
+
: "${OVERWRITE_CONFIG:=false}"
|
|
23
|
+
: "${SETUP_LSP:=true}"
|
|
24
|
+
: "${SETUP_PLUGINS:=true}"
|
|
25
|
+
|
|
26
|
+
export CLAUDE_CONFIG_DIR CONFIG_SOURCE_DIR SETUP_CONFIG SETUP_ALIASES OVERWRITE_CONFIG SETUP_LSP SETUP_PLUGINS
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
30
|
+
echo " ClaudePod Setup"
|
|
31
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
32
|
+
echo ""
|
|
33
|
+
|
|
34
|
+
run_script() {
|
|
35
|
+
local script="$1"
|
|
36
|
+
local enabled="$2"
|
|
37
|
+
local name="$(basename $script .sh)"
|
|
38
|
+
|
|
39
|
+
if [ "$enabled" = "true" ]; then
|
|
40
|
+
if [ -f "$script" ]; then
|
|
41
|
+
echo "Running $name..."
|
|
42
|
+
bash "$script"
|
|
43
|
+
echo ""
|
|
44
|
+
else
|
|
45
|
+
echo "WARNING: $script not found, skipping"
|
|
46
|
+
fi
|
|
47
|
+
else
|
|
48
|
+
echo "Skipping $name (disabled)"
|
|
49
|
+
fi
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
run_script "$SCRIPT_DIR/setup-config.sh" "$SETUP_CONFIG"
|
|
53
|
+
run_script "$SCRIPT_DIR/setup-aliases.sh" "$SETUP_ALIASES"
|
|
54
|
+
run_script "$SCRIPT_DIR/setup-lsp.sh" "$SETUP_LSP"
|
|
55
|
+
run_script "$SCRIPT_DIR/setup-plugins.sh" "$SETUP_PLUGINS"
|
|
56
|
+
run_script "$SCRIPT_DIR/setup-irie-claude.sh" "true"
|
|
57
|
+
|
|
58
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
59
|
+
echo " Setup Complete"
|
|
60
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|