@@ -111,7 +111,7 @@ locals {
111
111
encoded_post_install_script = var. experiment_post_install_script != null ? base64encode (var. experiment_post_install_script ) : " "
112
112
agentapi_start_script_b64 = base64encode (file (" ${ path . module } /scripts/agentapi-start.sh" ))
113
113
agentapi_wait_for_start_script_b64 = base64encode (file (" ${ path . module } /scripts/agentapi-wait-for-start.sh" ))
114
- remove_last_session_id_script_b64 = base64encode (file (" ${ path . module } /scripts/remove-last-session-id.js " ))
114
+ remove_last_session_id_script_b64 = base64encode (file (" ${ path . module } /scripts/remove-last-session-id.sh " ))
115
115
claude_code_app_slug = " ccw"
116
116
}
117
117
@@ -129,6 +129,21 @@ resource "coder_script" "claude_code" {
129
129
command -v "$1" >/dev/null 2>&1
130
130
}
131
131
132
+ function install_claude_code_cli() {
133
+ echo "Installing Claude Code via official installer"
134
+ set +e
135
+ curl -fsSL claude.ai/install.sh | bash -s -- "${ var . claude_code_version } " 2>&1
136
+ CURL_EXIT=$${PIPESTATUS[0]}
137
+ set -e
138
+ if [ $CURL_EXIT -ne 0 ]; then
139
+ echo "Claude Code installer failed with exit code $$CURL_EXIT"
140
+ fi
141
+
142
+ # Ensure binaries are discoverable.
143
+ export PATH="~/.local/bin:$PATH"
144
+ echo "Installed Claude Code successfully. Version: $(claude --version || echo 'unknown')"
145
+ }
146
+
132
147
if [ ! -d "${ local . workdir } " ]; then
133
148
echo "Warning: The specified folder '${ local . workdir } ' does not exist."
134
149
echo "Creating the folder..."
@@ -143,37 +158,7 @@ resource "coder_script" "claude_code" {
143
158
fi
144
159
145
160
if [ "${ var . install_claude_code } " = "true" ]; then
146
- if ! command_exists npm; then
147
- echo "npm not found, checking for Node.js installation..."
148
- if ! command_exists node; then
149
- echo "Node.js not found, installing Node.js via NVM..."
150
- export NVM_DIR="$HOME/.nvm"
151
- if [ ! -d "$NVM_DIR" ]; then
152
- mkdir -p "$NVM_DIR"
153
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
154
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
155
- else
156
- [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
157
- fi
158
-
159
- nvm install --lts
160
- nvm use --lts
161
- nvm alias default node
162
-
163
- echo "Node.js installed: $(node --version)"
164
- echo "npm installed: $(npm --version)"
165
- else
166
- echo "Node.js is installed but npm is not available. Please install npm manually."
167
- exit 1
168
- fi
169
- fi
170
- echo "Installing Claude Code..."
171
- npm install -g @anthropic-ai/claude-code@${ var . claude_code_version }
172
- fi
173
-
174
- if ! command_exists node; then
175
- echo "Error: Node.js is not installed. Please install Node.js manually."
176
- exit 1
161
+ install_claude_code_cli
177
162
fi
178
163
179
164
# Install AgentAPI if enabled
@@ -214,7 +199,7 @@ resource "coder_script" "claude_code" {
214
199
215
200
echo -n "${ local . agentapi_start_script_b64 } " | base64 -d > "$module_path/scripts/agentapi-start.sh"
216
201
echo -n "${ local . agentapi_wait_for_start_script_b64 } " | base64 -d > "$module_path/scripts/agentapi-wait-for-start.sh"
217
- echo -n "${ local . remove_last_session_id_script_b64 } " | base64 -d > "$module_path/scripts/remove-last-session-id.js "
202
+ echo -n "${ local . remove_last_session_id_script_b64 } " | base64 -d > "$module_path/scripts/remove-last-session-id.sh "
218
203
chmod +x "$module_path/scripts/agentapi-start.sh"
219
204
chmod +x "$module_path/scripts/agentapi-wait-for-start.sh"
220
205
@@ -292,4 +277,4 @@ resource "coder_ai_task" "claude_code" {
292
277
sidebar_app {
293
278
id = coder_app. claude_code_web . id
294
279
}
295
- }
280
+ }
0 commit comments