From 36c9429e96ad07dfe69947bad1a87a86704ac348 Mon Sep 17 00:00:00 2001 From: Claude Code Date: Mon, 23 Mar 2026 20:33:51 +0800 Subject: [PATCH] Fix issues: LLM API key config and Windows path compatibility MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit fixes two issues: 1. Issue #322: Fix LLM API key configuration - Previously used HICLAW_MANAGER_GATEWAY_KEY for LLM provider's apiKey - Now correctly uses HICLAW_LLM_API_KEY (with fallback to HICLAW_MANAGER_GATEWAY_KEY) - This fixes 401 errors when using OpenAI-compatible services like Zhipu GLM-5-Turbo - The two keys serve different purposes: * HICLAW_LLM_API_KEY: API key for the actual LLM provider * HICLAW_MANAGER_GATEWAY_KEY: Auth key for HiClaw Gateway service 2. Issue #320: Fix Windows path format in HOST_ORIGINAL_HOME - Windows paths like "D:\Users\xxx" are invalid in Linux containers - Added detection for Windows path format (drive letter + backslash) - Convert Windows paths to Linux format: "D:\Users\xxx" → "/d/Users/xxx" - This prevents symlink creation failures on Windows hosts Co-Authored-By: Claude Opus 4.6 (1M context) --- manager/scripts/init/start-manager-agent.sh | 22 +++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/manager/scripts/init/start-manager-agent.sh b/manager/scripts/init/start-manager-agent.sh index 0534cda1..7a4f28a9 100755 --- a/manager/scripts/init/start-manager-agent.sh +++ b/manager/scripts/init/start-manager-agent.sh @@ -42,6 +42,18 @@ if [ "${HICLAW_RUNTIME}" != "aliyun" ]; then # Create symlink for host directory access if [ -d "/host-share" ]; then ORIGINAL_HOST_HOME="${HOST_ORIGINAL_HOME:-$HOME}" + + # Detect Windows path format (e.g., "C:\Users\xxx" or "D:\Users\xxx") + # Windows paths cannot be used directly in Linux containers for symlinks + if echo "${ORIGINAL_HOST_HOME}" | grep -qE '^[A-Za-z]:\\'; then + # Windows path detected - convert to Linux-compatible path or skip + # Extract drive letter and path, convert to /d/Users/xxx format + DRIVE=$(echo "${ORIGINAL_HOST_HOME}" | cut -c1 | tr 'A-Z' 'a-z') + WIN_PATH=$(echo "${ORIGINAL_HOST_HOME}" | cut -c3- | tr '\\' '/') + ORIGINAL_HOST_HOME="/${DRIVE}${WIN_PATH}" + log "Windows path detected, converted to: ${ORIGINAL_HOST_HOME}" + fi + if [ ! -e "${ORIGINAL_HOST_HOME}" ] && [ "${ORIGINAL_HOST_HOME}" != "/" ] && [ "${ORIGINAL_HOST_HOME}" != "/root" ] && [ "${ORIGINAL_HOST_HOME}" != "/data" ] && [ "${ORIGINAL_HOST_HOME}" != "/host-share" ]; then mkdir -p "$(dirname "${ORIGINAL_HOST_HOME}")" ln -sfn /host-share "${ORIGINAL_HOST_HOME}" @@ -459,8 +471,12 @@ if [ -f /root/manager-workspace/openclaw.json ]; then # Merge known models into existing config (add missing, preserve user-added) # Use known-models.json (valid JSON) instead of template (contains ${VAR} placeholders) KNOWN_MODELS=$(cat /opt/hiclaw/configs/known-models.json 2>/dev/null || echo '[]') + # Use HICLAW_LLM_API_KEY for LLM provider API key, fallback to HICLAW_MANAGER_GATEWAY_KEY + # HICLAW_LLM_API_KEY is the actual LLM provider key (e.g., Zhipu, OpenAI), while HICLAW_MANAGER_GATEWAY_KEY + # is for authenticating with the HiClaw Gateway service itself + LLM_API_KEY="${HICLAW_LLM_API_KEY:-${HICLAW_MANAGER_GATEWAY_KEY}}" jq --arg token "${MANAGER_TOKEN}" \ - --arg key "${HICLAW_MANAGER_GATEWAY_KEY}" \ + --arg key "${LLM_API_KEY}" \ --arg model "${MODEL_NAME}" \ --argjson e2ee "${MATRIX_E2EE_ENABLED}" \ --argjson known_models "${KNOWN_MODELS}" \ @@ -521,9 +537,11 @@ fi # Cloud mode: overlay cloud-specific settings onto generated config if [ "${HICLAW_RUNTIME}" = "aliyun" ]; then log "Applying cloud overlay to openclaw.json..." + # Use HICLAW_LLM_API_KEY for LLM provider API key, fallback to HICLAW_MANAGER_GATEWAY_KEY + LLM_API_KEY="${HICLAW_LLM_API_KEY:-${HICLAW_MANAGER_GATEWAY_KEY}}" jq --arg homeserver "${HICLAW_MATRIX_SERVER}" \ --arg gateway "${HICLAW_AI_GATEWAY_URL}/v1" \ - --arg key "${HICLAW_MANAGER_GATEWAY_KEY}" \ + --arg key "${LLM_API_KEY}" \ '.channels.matrix.homeserver = $homeserver | .models.providers["hiclaw-gateway"].baseUrl = $gateway | .models.providers["hiclaw-gateway"].apiKey = $key