diff --git a/setup.sh b/setup.sh index 1b24f2d..e6488f0 100644 --- a/setup.sh +++ b/setup.sh @@ -100,6 +100,35 @@ if isinstance(d, dict) and d.get("deploymentMode") == "1p": PY } +# ---------- Чистка BOM ---------- +# Приложение падает на BOM: в логе видно +# [managedConfig] Failed to read config library meta: Unexpected token +# и тогда ВСЯ библиотека конфигов не читается. BOM приезжает из Блокнота на +# Windows (он по умолчанию сохраняет UTF-8 именно так) и из старых скриптов. +repair_json_bom() { + [ -n "$PY" ] || return 0 + "$PY" - "$LIB" "$C1P" "$C3P" <<'PY' +import os, sys +lib, c1p, c3p = sys.argv[1:4] +targets = [] +if os.path.isdir(lib): + targets += [os.path.join(lib, f) for f in os.listdir(lib) if f.endswith(".json")] +for d in (c1p, c3p): + for n in ("developer_settings.json", "claude_desktop_config.json"): + p = os.path.join(d, n) + if os.path.isfile(p): targets.append(p) +fixed = 0 +for p in targets: + try: + b = open(p, "rb").read() + if b.startswith(b"\xef\xbb\xbf"): + open(p, "wb").write(b[3:]); fixed += 1 + except Exception: + pass +if fixed: print(fixed) +PY +} + # merge_meta merge_meta() { local applied="$1" routes="$2" @@ -288,6 +317,7 @@ if [ "$MODE" = "restore" ]; then say "Откат на родного Claude..." if [ ! -f "$LIB/_meta.json" ]; then ok "Конфигов нет, откатывать нечего."; exit 0; fi merge_meta default none + repair_json_bom >/dev/null 2>&1 || true ok "Применён пустой профиль Default." echo " Если приложение всё равно открывается на чужом мозге: меню аккаунта внизу слева -> Sign out," echo " затем на экране входа выбери обычный вход по почте или Google." @@ -443,6 +473,8 @@ fi # Активной делаем ту конфигурацию, которая реально готова работать. if [ "$HAVE_OLLAMA" = "true" ]; then merge_meta ollama "$BRAIN"; else merge_meta zai "$BRAIN"; fi +nbom="$(repair_json_bom || true)" +[ -n "$nbom" ] && ok "Убран BOM у $nbom файлов конфигурации (приложение их не читало)." if [ "$OS" = "mac" ]; then ok "TLS-фикс песочницы для вкладки Code: $(apply_tls_fix)"