@@ -497,12 +497,16 @@ mkdir -p "$FAKE_HOME/.config/opencode"
497497if [ " $( uname -s) " = " Darwin" ]; then
498498 mkdir -p " $FAKE_HOME /Library/Application Support/Zed"
499499 mkdir -p " $FAKE_HOME /Library/Application Support/Code/User"
500+ mkdir -p " $FAKE_HOME /Library/Application Support/Code/User/globalStorage/kilocode.kilo-code/settings"
501+ elif [[ " ${BINARY:- } " == * .exe ]]; then
502+ mkdir -p " $FAKE_HOME /AppData/Local/Zed"
503+ mkdir -p " $FAKE_HOME /AppData/Roaming/Code/User"
504+ mkdir -p " $FAKE_HOME /AppData/Roaming/Code/User/globalStorage/kilocode.kilo-code/settings"
500505else
501506 mkdir -p " $FAKE_HOME /.config/zed"
502507 mkdir -p " $FAKE_HOME /.config/Code/User"
508+ mkdir -p " $FAKE_HOME /.config/Code/User/globalStorage/kilocode.kilo-code/settings"
503509fi
504- # KiloCode detection always uses ~/.config/ path (even on macOS)
505- mkdir -p " $FAKE_HOME /.config/Code/User/globalStorage/kilocode.kilo-code/settings"
506510mkdir -p " $FAKE_HOME /.local/bin"
507511# Copy binary with correct name for platform
508512if [[ " $BINARY " == * .exe ]]; then
@@ -520,9 +524,14 @@ echo '{"existingKey": true}' > "$FAKE_HOME/.claude.json"
520524echo ' {"existingKey": true}' > " $FAKE_HOME /.gemini/settings.json"
521525printf ' [existing_section]\nline_from_user = true\n' > " $FAKE_HOME /.codex/config.toml"
522526
523- # Run install — set XDG_CONFIG_HOME explicitly so cbm_app_config_dir() resolves
524- # to FAKE_HOME/.config even on minimal systems (Alpine musl, no NSS).
525- HOME=" $FAKE_HOME " XDG_CONFIG_HOME=" $FAKE_HOME /.config" PATH=" $FAKE_HOME /.local/bin:$PATH " " $BINARY " install -y 2>&1 || true
527+ # Run install — override platform config dirs so cbm_app_config_dir() and
528+ # cbm_app_local_dir() resolve to FAKE_HOME paths on all platforms.
529+ HOME=" $FAKE_HOME " \
530+ XDG_CONFIG_HOME=" $FAKE_HOME /.config" \
531+ APPDATA=" $FAKE_HOME /AppData/Roaming" \
532+ LOCALAPPDATA=" $FAKE_HOME /AppData/Local" \
533+ PATH=" $FAKE_HOME /.local/bin:$PATH " \
534+ " $BINARY " install -y 2>&1 || true
526535
527536# Helper for JSON validation (pipe file to python — avoids MSYS2 path translation issues)
528537json_get () { cat " $1 " 2> /dev/null | python3 -c " import json,sys; d=json.load(sys.stdin); print($2 )" 2> /dev/null || echo " " ; }
@@ -634,6 +643,8 @@ echo "OK 8m: Gemini instructions"
634643# 8n: Zed MCP
635644if [ " $( uname -s) " = " Darwin" ]; then
636645 ZED_CFG=" $FAKE_HOME /Library/Application Support/Zed/settings.json"
646+ elif [[ " $BINARY " == * .exe ]]; then
647+ ZED_CFG=" $FAKE_HOME /AppData/Local/Zed/settings.json"
637648else
638649 ZED_CFG=" $FAKE_HOME /.config/zed/settings.json"
639650fi
@@ -690,8 +701,14 @@ else
690701 echo " SKIP 8s: Aider not detected (binary not on PATH)"
691702fi
692703
693- # 8t: KiloCode MCP (detection + install both use ~/.config/ on all platforms)
694- KILO_CFG=" $FAKE_HOME /.config/Code/User/globalStorage/kilocode.kilo-code/settings/mcp_settings.json"
704+ # 8t: KiloCode MCP
705+ if [ " $( uname -s) " = " Darwin" ]; then
706+ KILO_CFG=" $FAKE_HOME /Library/Application Support/Code/User/globalStorage/kilocode.kilo-code/settings/mcp_settings.json"
707+ elif [[ " $BINARY " == * .exe ]]; then
708+ KILO_CFG=" $FAKE_HOME /AppData/Roaming/Code/User/globalStorage/kilocode.kilo-code/settings/mcp_settings.json"
709+ else
710+ KILO_CFG=" $FAKE_HOME /.config/Code/User/globalStorage/kilocode.kilo-code/settings/mcp_settings.json"
711+ fi
695712CMD=$( json_get " $KILO_CFG " " d['mcpServers']['codebase-memory-mcp']['command']" )
696713if ! path_match " $CMD " " $SELF_PATH " ; then
697714 echo " FAIL 8t: KiloCode command='$CMD '"
@@ -709,6 +726,8 @@ echo "OK 8u: KiloCode instructions"
709726# 8v: VS Code MCP
710727if [ " $( uname -s) " = " Darwin" ]; then
711728 VSCODE_CFG=" $FAKE_HOME /Library/Application Support/Code/User/mcp.json"
729+ elif [[ " $BINARY " == * .exe ]]; then
730+ VSCODE_CFG=" $FAKE_HOME /AppData/Roaming/Code/User/mcp.json"
712731else
713732 VSCODE_CFG=" $FAKE_HOME /.config/Code/User/mcp.json"
714733fi
@@ -727,21 +746,24 @@ if ! path_match "$CMD" "$SELF_PATH"; then
727746fi
728747echo " OK 8w: OpenClaw MCP"
729748
730- # 8x-y: Skills
731- for SKILL_NAME in codebase-memory-exploring codebase-memory-tracing codebase-memory-quality codebase-memory-reference; do
732- SKILL_FILE=" $FAKE_HOME /.claude/skills/$SKILL_NAME /SKILL.md"
733- if [ ! -s " $SKILL_FILE " ]; then
734- echo " FAIL 8x: skill $SKILL_NAME missing or empty"
735- exit 1
736- fi
737- done
738- echo " OK 8x-y: all 4 skills installed"
749+ # 8x: Consolidated skill (old 4-skill dirs cleaned up, replaced by 1)
750+ SKILL_FILE=" $FAKE_HOME /.claude/skills/codebase-memory/SKILL.md"
751+ if [ ! -s " $SKILL_FILE " ]; then
752+ echo " FAIL 8x: skill codebase-memory missing or empty"
753+ exit 1
754+ fi
755+ echo " OK 8x: skill installed"
739756
740757echo " "
741758echo " === Phase 9: agent config uninstall E2E ==="
742759
743760# Run uninstall (same FAKE_HOME with all configs present)
744- HOME=" $FAKE_HOME " XDG_CONFIG_HOME=" $FAKE_HOME /.config" PATH=" $FAKE_HOME /.local/bin:$PATH " " $BINARY " uninstall -y -n 2>&1 || true
761+ HOME=" $FAKE_HOME " \
762+ XDG_CONFIG_HOME=" $FAKE_HOME /.config" \
763+ APPDATA=" $FAKE_HOME /AppData/Roaming" \
764+ LOCALAPPDATA=" $FAKE_HOME /AppData/Local" \
765+ PATH=" $FAKE_HOME /.local/bin:$PATH " \
766+ " $BINARY " uninstall -y -n 2>&1 || true
745767
746768# 9a-b: Claude Code MCP removed but existing keys preserved
747769if cat " $FAKE_HOME /.claude.json" 2> /dev/null | python3 -c "
836858 exit 1
837859fi
838860
839- # 9l: Skills removed
840- if [ -d " $FAKE_HOME /.claude/skills/codebase-memory-exploring " ]; then
861+ # 9l: Skills removed (consolidated skill dir)
862+ if [ -d " $FAKE_HOME /.claude/skills/codebase-memory" ]; then
841863 echo " FAIL 9l: skills not removed"
842864 exit 1
843865fi
0 commit comments