diff --git a/registry/coder/modules/claude-code/main.tf b/registry/coder/modules/claude-code/main.tf index f7cd5b16..45e9f777 100644 --- a/registry/coder/modules/claude-code/main.tf +++ b/registry/coder/modules/claude-code/main.tf @@ -336,17 +336,43 @@ locals { var.report_tasks ? format("\n%s\n", local.report_tasks_system_prompt) : "", local.custom_system_prompt != "" ? format("\n%s\n", local.custom_system_prompt) : "" ) -} -resource "coder_script" "install_agent" { + # Common environment variables for install script + install_env_vars = <<-EOT + ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ + ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ + ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ + ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ + ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' + EOT - count = !var.report_tasks ? 1 : 0 + # Common environment variables for start script + start_env_vars = <<-EOT + ARG_MODEL='${var.model}' \ + ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ + ARG_CONTINUE='${var.continue}' \ + ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ + ARG_PERMISSION_MODE='${var.permission_mode}' \ + ARG_WORKDIR='${local.workdir}' \ + ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ + ARG_REPORT_TASKS='${var.report_tasks}' \ + ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ + ARG_BOUNDARY_VERSION='${var.boundary_version}' \ + ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ + ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ + ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ + ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ + ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ + ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ + ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ + ARG_CODER_HOST='${local.coder_host}' + EOT - agent_id = var.agent_id - display_name = "Install agent" - run_on_start = true - log_path = "/home/coder/install.log" - script = < /tmp/start.sh + echo -n "${local.remove_last_session_id_script_b64}" | base64 -d > "/tmp/remove-last-session-id.sh" + chmod +x /tmp/start.sh + chmod +x /tmp/remove-last-session-id.sh + + ${local.start_env_vars} \ + /tmp/start.sh + EOT +} + +resource "coder_script" "install_agent" { + count = !var.report_tasks ? 1 : 0 + + agent_id = var.agent_id + display_name = "Install agent" + run_on_start = true + log_path = "/home/coder/install.log" + script = local.install_command } resource "coder_app" "agent_cli" { - count = (!var.report_tasks && var.cli_app) ? 1 : 0 - - agent_id = var.agent_id + agent_id = var.agent_id slug = local.app_slug display_name = var.cli_app_display_name - command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : <<-EOT - ARG_MODEL='${var.model}' \ - ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ - ARG_CONTINUE='${var.continue}' \ - ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ - ARG_PERMISSION_MODE='${var.permission_mode}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ - ARG_BOUNDARY_VERSION='${var.boundary_version}' \ - ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ - ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ - ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ - ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ - ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ - ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ - ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ - ARG_CODER_HOST='${local.coder_host}' \ - /tmp/start.sh - EOT + command = length(trimprefix(var.cli_command, " ")) > 0 ? var.cli_command : "${local.start_env_vars} \\\n /tmp/start.sh" } @@ -405,7 +426,7 @@ module "agentapi" { source = "registry.coder.com/coder/agentapi/coder" version = "2.0.0" - count = var.report_tasks ? 1 : 0 + count = var.report_tasks ? 1 : 0 agent_id = var.agent_id web_app_slug = local.app_slug web_app_order = var.order @@ -422,53 +443,8 @@ module "agentapi" { agentapi_version = var.agentapi_version pre_install_script = var.pre_install_script post_install_script = var.post_install_script - start_script = <<-EOT - #!/bin/bash - set -o errexit - set -o pipefail - echo -n '${base64encode(local.start_script)}' | base64 -d > /tmp/start.sh - echo -n "${local.remove_last_session_id_script_b64}" | base64 -d > "/tmp/remove-last-session-id.sh" - chmod +x /tmp/start.sh - chmod +x /tmp/remove-last-session-id.sh - - ARG_MODEL='${var.model}' \ - ARG_RESUME_SESSION_ID='${var.resume_session_id}' \ - ARG_CONTINUE='${var.continue}' \ - ARG_DANGEROUSLY_SKIP_PERMISSIONS='${var.dangerously_skip_permissions}' \ - ARG_PERMISSION_MODE='${var.permission_mode}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_AI_PROMPT='${base64encode(var.ai_prompt)}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_ENABLE_BOUNDARY='${var.enable_boundary}' \ - ARG_BOUNDARY_VERSION='${var.boundary_version}' \ - ARG_BOUNDARY_LOG_DIR='${var.boundary_log_dir}' \ - ARG_BOUNDARY_LOG_LEVEL='${var.boundary_log_level}' \ - ARG_BOUNDARY_ADDITIONAL_ALLOWED_URLS='${join("|", var.boundary_additional_allowed_urls)}' \ - ARG_BOUNDARY_PROXY_PORT='${var.boundary_proxy_port}' \ - ARG_ENABLE_BOUNDARY_PPROF='${var.enable_boundary_pprof}' \ - ARG_BOUNDARY_PPROF_PORT='${var.boundary_pprof_port}' \ - ARG_COMPILE_FROM_SOURCE='${var.compile_boundary_from_source}' \ - ARG_CODER_HOST='${local.coder_host}' \ - /tmp/start.sh - EOT - - install_script = <<-EOT - #!/bin/bash - set -o errexit - set -o pipefail - - echo -n '${base64encode(local.install_script)}' | base64 -d > /tmp/install.sh - chmod +x /tmp/install.sh - ARG_CLAUDE_CODE_VERSION='${var.claude_code_version}' \ - ARG_MCP_APP_STATUS_SLUG='${local.app_slug}' \ - ARG_INSTALL_CLAUDE_CODE='${var.install_claude_code}' \ - ARG_REPORT_TASKS='${var.report_tasks}' \ - ARG_WORKDIR='${local.workdir}' \ - ARG_ALLOWED_TOOLS='${var.allowed_tools}' \ - ARG_DISALLOWED_TOOLS='${var.disallowed_tools}' \ - ARG_MCP='${var.mcp != null ? base64encode(replace(var.mcp, "'", "'\\''")) : ""}' \ - /tmp/install.sh - EOT + start_script = local.agentapi_start_command + install_script = local.install_command } output "task_app_id" {