Add Object B and self-growth canons with Cursor ledger rules; refresh connectivity and VPN runbooks.

Track day metrics/anamnesis HARD rules under .cursor/rules and personal docs so each screening updates days/{KIN}, dynamics, and big-data ledger.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
ahauimix
2026-07-26 10:22:56 +08:00
parent 4bc9629a09
commit 0238aa7c02
214 changed files with 121312 additions and 388 deletions

View File

@@ -1,212 +1,137 @@
# Cursor IDE — работа из РФ и обход PING timeout
# Cursor IDE — сеть, прокси, Agent
> **Проблема:** из России Cursor показывает `PING timed out`, Agent не отвечает.
> **Временный обход:** Disable Http2 в настройках — помогает, но всё сильно замедляется.
> **Рекомендуемое решение:** SOCKS-прокси через SSH-туннель на сервер с нормальным доступом (DO / RU VPS), без отключения HTTP/2.
> **Смена страны / «Cursor не подключается», а интернет живой:** почти всегда мёртвый SOCKS в `settings.json` (`127.0.0.1:1090` + `http.proxySupport: override`).
> **Фикс:** снять proxy → Cmd+Q. Подробно: **[RUNBOOK.md](./RUNBOOK.md)** (логи 2026-07, диагностика).
**Связанные гайды:** [PROXY_GUIDE.md](../connectivity/PROXY_GUIDE.md), [BUILD_AAB_FROM_RUSSIA_GUIDE.md](../connectivity/BUILD_AAB_FROM_RUSSIA_GUIDE.md) — тот же паттерн «туннель через прокси-сервер». **Выход через DO (как VPN на 209.38.32.21):** [docs/connectivity/vpn/README.md](../connectivity/vpn/README.md). **Windows:** [WINDOWS_CURSOR_TUNNEL.md](../connectivity/WINDOWS_CURSOR_TUNNEL.md) и скрипт `scripts/cursor-socks-tunnel.ps1`.
> **Из РФ / DPI:** SOCKS через SSH на **10809** (не 1090). Disable Http2 — только временный костыль.
**Связанные:** [PROXY_GUIDE.md](../../connectivity/PROXY_GUIDE.md), [SSH_EXIT_MODES.md](../../connectivity/vpn/SSH_EXIT_MODES.md), [WINDOWS_CURSOR_TUNNEL.md](../../connectivity/WINDOWS_CURSOR_TUNNEL.md).
---
## Содержание
1. [Симптомы и причина](#-симптомы-и-причина)
2. [Обход 1: Disable Http2 (простой, но медленный)](#-обход-1-disable-http2-простой-но-медленный)
3. [Обход 2: SOCKS через SSH-туннель (рекомендуется)](#-обход-2-socks-через-ssh-туннель-рекомендуется)
4. [Проверка и диагностика](#-проверка-и-диагностика)
5. [Troubleshooting](#-troubleshooting)
6. [Ссылки](#-ссылки)
1. [Показательный инцидент: SOCKS 1090](#показательный-инцидент-socks-1090)
2. [Симптомы из РФ (PING timeout)](#симптомы-из-рф-ping-timeout)
3. [Обход 1: Disable Http2](#обход-1-disable-http2)
4. [Обход 2: SOCKS 10809](#обход-2-socks-10809)
5. [Проверка и troubleshooting](#проверка-и-troubleshooting)
6. [Ссылки](#ссылки)
---
## Симптомы и причина
## Показательный инцидент: SOCKS 1090
### Что видно в Cursor
**Контекст:** после смены страны Cursor «не подключался». Интернет, DNS и HTTP/2 — **исправны**.
- В чате с Agent: **Request ID: … [unavailable] PING timed out**, `_he: [unavailable] PING timed out`.
- Стек указывает на `workbench.desktop.main.js`, `streamFromAgentBackend` / `getAgentStreamResponse` — обрыв связи с бэкендом агента.
**Ошибка в логах / Network Diagnostics (единственная настоящая причина):**
### Почему так происходит
```
Failed to establish a socket connection to proxies: SOCKS 127.0.0.1:1090
```
1. **HTTP/2 и маршрутизация**
Cursor использует HTTP/2 для стриминга к `*.cursor.sh` (в т.ч. `agent.api5.cursor.sh`). В части сетей (в т.ч. из РФ) запросы уходят в CDN (например Cloudflare) с неудачной конфигурацией SSL/HTTP2 или блокировкой по DPI, из‑за чего соединение обрывается или уходит в таймаут.
**Источник** — не macOS и не Cursor API:
2. **Disable Http2**
Отключение HTTP/2 переводит трафик на HTTP/1.1 и часто убирает обрывы, но увеличивает нагрузку и задержки — «всё становится медленным», возможны дополнительные таймауты агента.
```json
"http.proxy": "socks5://127.0.0.1:1090",
"http.proxySupport": "override"
```
3. **Идея нормального обхода**
Пропускать только трафик Cursor через сервер с хорошим доступом к Cursor API (VPS в DO, РФ и т.п.). До этого сервера — SSH (обычно не режется). От сервера до `*.cursor.sh` — уже «нормальный» канал, HTTP/2 работает без костылей.
`override` заставляет Cursor **всегда** ходить через локальный SOCKS, даже когда порт **1090 никто не слушает**.
**Что помогло:** отключение прокси в Cursor (`http.proxySupport: "off"`, убрать `http.proxy`) + полный перезапуск.
**Правило:** при прямом интернете — **без** жёсткого proxy в settings. Прокси включать только пока жив туннель на **10809**.
Полный чеклист команд и выдержки из логов за 2 суток: [RUNBOOK.md](./RUNBOOK.md).
---
## Обход 1: Disable Http2 (простой, но медленный)
## Симптомы из РФ (PING timeout)
Если нужно быстро восстановить работу без настройки туннеля:
1. **Cursor → Settings** (Cmd+, / Ctrl+,).
2. Поиск: **HTTP**.
3. Включить **Cursor > General: Disable Http2**.
Минус: выше задержки и нагрузка, возможны таймауты агента при длинных ответах. Для постоянной работы из РФ предпочтительно [Обход 2](#-обход-2-socks-через-ssh-туннель-рекомендуется).
- Chat / Agent: `PING timed out`, Request ID unavailable.
- Часто помогает временный **Disable Http2**, но всё тормозит.
- Нормальный путь: SOCKS **10809** через RU→DO (см. ниже).
---
## Обход 2: SOCKS через SSH-туннель (рекомендуется)
## Обход 1: Disable Http2
Трафик Cursor идёт в интернет через ваш VPS. До VPS — SSH (один порт), с VPS — обычный доступ к Cursor API, HTTP/2 остаётся включённым.
1. Settings → поиск **HTTP****Disable Http2** = on.
2. Минус: медленнее, больше таймаутов агента.
### Схема
Если Diagnostics показывает **HTTP/2: Success** (как вне РФ) — параметр лучше **выключить** (`false` / удалить ключ).
---
## Обход 2: SOCKS 10809
```
Cursor SOCKS 127.0.0.1:10809 SSH RU hsites-ahau DO 209.38.32.21
HTTPS/HTTP2 → *.cursor.sh
Cursor → socks5://127.0.0.1:10809 → SSH RU (hsites-ahau) → DO → *.cursor.sh
```
При **`CURSOR_SOCKS_VIA_DO=1`** (по умолчанию) — **только** цепочка **Mac → RU → DO** (`telegram-socks-via-do`). Если **`hsites-ahau`** недоступен, скрипт **завершается с ошибкой** (прямой Mac→DO для SOCKS не поднимается). Публичный IP снаружи — **DO** (шаблон `Host telegram-socks-via-do` в [PROXY_GUIDE.md](../connectivity/PROXY_GUIDE.md)).
На стороне DO не нужен отдельный прокси-сервис — только SSH и те же `Host`, что для Telegram.
### Предположения
- В **`~/.ssh/config`** задан **`telegram-socks-via-do`** с **`ProxyJump hsites-ahau`** (шаблон в [PROXY_GUIDE.md](../connectivity/PROXY_GUIDE.md)).
- Локально свободен порт **10809** (не путать с **1081** для Telegram).
### Шаг 1: Поднять SOCKS-туннель
Рекомендуется скрипт (выход через DO по умолчанию):
### Поднять туннель
```bash
./docs/cursor/scripts/cursor-socks-tunnel.sh start
./docs/apps/cursor/scripts/cursor-socks-tunnel.sh start
./docs/apps/cursor/scripts/cursor-socks-tunnel.sh status
```
Переменные: **`CURSOR_SOCKS_PORT`** (по умолчанию 10809), **`CURSOR_SOCKS_VIA_DO=0`** — только RU (`CURSOR_TUNNEL_HOST`, по умолчанию `hsites-ahau`).
Или: `./scripts/vpn/exit-via-ru-do.sh` (см. [SSH_EXIT_MODES.md](../../connectivity/vpn/SSH_EXIT_MODES.md)).
Вручную (выход с DO, как у скрипта):
Порт по умолчанию: **10809**. Не путать с **1081** (Telegram) и устаревшим **1090**.
```bash
pkill -f "ssh.*-D 10809" 2>/dev/null
ssh -D 10809 -f -N -o ServerAliveInterval=60 -o ServerAliveCountMax=4 telegram-socks-via-do
```
Только RU (без DO в цепочке выхода):
```bash
CURSOR_SOCKS_VIA_DO=0 ./docs/cursor/scripts/cursor-socks-tunnel.sh start
# или: ssh -D 10809 -f -N hsites-ahau
```
Проверка: туннель держится, пока сессия не разорвана; см. [Проверка и диагностика](#-проверка-и-диагностика).
### Шаг 2: Настроить Cursor на использование SOCKS
1. **Cursor → Settings** (Cmd+, / Ctrl+,), поиск: **proxy**.
2. Заполнить:
- **Http: Proxy** — `socks5://127.0.0.1:10809`
- **Http: Proxy Strict SSL** — при необходимости отключить только если заведомо знаете, что за прокси (для одного своего VPS обычно не требуется).
Или в `settings.json` (Cursor: Open User Settings (JSON)):
### Настройки Cursor (только пока туннель жив)
```json
{
"http.proxy": "socks5://127.0.0.1:10809",
"https.proxy": "socks5://127.0.0.1:10809"
"http.proxySupport": "override",
"http.disableHttp2": false
}
```
### Шаг 3: Не отключать HTTP/2
### Вернуться на локальный IP
**Cursor > General: Disable Http2** — выключить (оставить HTTP/2 включённым). Трафик к Cursor API идёт с DO (или с RU, если включён только RU-туннель).
```bash
./scripts/vpn/exit-via-local.sh
```
### Шаг 4: Запуск Cursor при уже поднятом туннеле
Затем в settings:
Порядок каждый раз:
```json
{
"http.proxy": "",
"http.proxySupport": "off"
}
```
1. В терминале: `./docs/cursor/scripts/cursor-socks-tunnel.sh start` (или ручная команда из шага 1).
2. Запуск Cursor как обычно.
Чтобы не забывать туннель, можно завести скрипт запуска (см. [Скрипт запуска с туннелем](#скрипт-запуска-с-туннелем)).
Cmd+Q → снова открыть Cursor.
---
## Проверка и диагностика
### Туннель поднят
## Проверка и troubleshooting
```bash
# Должен слушать 10809
lsof -i :10809
# или
nc -z 127.0.0.1 10809 && echo "OK"
# Кто слушает SOCKS
lsof -nP -iTCP:10809 -sTCP:LISTEN
lsof -nP -iTCP:1090 -sTCP:LISTEN || echo "1090 free (ожидаемо без старого прокси)"
# API через туннель
curl -x socks5h://127.0.0.1:10809 -sI --max-time 15 https://agent.api5.cursor.sh | head -5
# Мёртвый 1090 в профиле
grep -n 'http.proxy\|1090\|proxySupport' ~/Library/Application\ Support/Cursor/User/settings.json
# Логи
grep -R "SOCKS 127.0.0.1" ~/Library/Application\ Support/Cursor/logs --include='*.log' 2>/dev/null | tail -10
```
### Доступ к Cursor API через SOCKS (curl)
```bash
curl -x socks5h://127.0.0.1:10809 -sI https://agent.api5.cursor.sh 2>&1 | head -5
```
Успех: в ответе есть HTTP/2 или заголовки от сервера. Ошибка соединения или таймаут — туннель не работает или порт занят.
### Логи Cursor
При проблемах с подключением:
- **macOS:** `~/Library/Application Support/Cursor/logs/main.log`
- Искать по `ERROR`, `PING`, `timeout`, `HTTP2`, `ECONNREFUSED`, `ETIMEDOUT`.
---
## Troubleshooting
### После включения прокси Cursor вообще не подключается
- Убедиться, что туннель запущен: `lsof -i :10809`.
- Проверить доступ через SOCKS: `curl -x socks5h://127.0.0.1:10809 -sI https://agent.api5.cursor.sh`.
- Временно в настройках Cursor убрать `http.proxy` / `https.proxy` и проверить без прокси (например, с Disable Http2) — если так работает, проблема в туннеле или порте.
### PING timed out остаётся даже через прокси
- Перезапустить туннель и Cursor (полностью закрыть приложение и открыть снова).
- В настройках Cursor убедиться, что **Disable Http2** выключен (HTTP/2 включён).
- Проверить, что в настройках указан именно `socks5://127.0.0.1:10809` (без опечаток, порт совпадает с `-D 10809`).
### Порт 10809 занят
Выбрать другой порт, например 10810:
```bash
ssh -D 10810 -f -N hsites-ahau
```
И в настройках Cursor указать `socks5://127.0.0.1:10810`.
### Туннель рвётся при долгой неактивности
Поддерживать соединение помогут опции SSH:
```bash
ssh -D 10809 -f -N -o ServerAliveInterval=30 -o ServerAliveCountMax=6 hsites-ahau
```
При необходимости можно вынести эту команду в скрипт или systemd/supervisor на стороне клиента.
---
## Скрипт запуска туннеля
В репозитории есть скрипт для поднятия/остановки SOCKS-туннеля:
```bash
# Из корня репо
./docs/cursor/scripts/cursor-socks-tunnel.sh start # поднять туннель
./docs/cursor/scripts/cursor-socks-tunnel.sh status # проверить
./docs/cursor/scripts/cursor-socks-tunnel.sh stop # остановить
```
Переменные окружения: `CURSOR_SOCKS_PORT` (10809), **`CURSOR_SOCKS_VIA_DO`** (по умолчанию **1** — выход через DO), при **`CURSOR_SOCKS_VIA_DO=0`** — `CURSOR_TUNNEL_HOST` (по умолчанию `hsites-ahau`).
**Запуск Cursor после туннеля (macOS):** после `./docs/cursor/scripts/cursor-socks-tunnel.sh start` откройте Cursor как обычно; при настроенных `http.proxy`/`https.proxy` трафик пойдёт через SOCKS.
| Симптом | Действие |
|---------|----------|
| `SOCKS 127.0.0.1:1090` / API FAIL при живом интернете | [RUNBOOK.md](./RUNBOOK.md) — снять proxy |
| Proxy на 10809, но Cursor мёртв | `cursor-socks-tunnel.sh status` / `exit-via-ru-do.sh` |
| PING timeout из РФ без прокси | Туннель 10809 или временно Disable Http2 |
---
@@ -214,12 +139,12 @@ ssh -D 10809 -f -N -o ServerAliveInterval=30 -o ServerAliveCountMax=6 hsites-aha
| Документ | Назначение |
|----------|------------|
| [PROXY_GUIDE.md](../connectivity/PROXY_GUIDE.md) | Прокси ru.hunab.app, SSH ProxyCommand для scp/ssh на прод |
| [WINDOWS_CURSOR_TUNNEL.md](../connectivity/WINDOWS_CURSOR_TUNNEL.md) | Cursor из РФ на **Windows**: туннель, скрипт .ps1, автозапуск |
| [BUILD_AAB_FROM_RUSSIA_GUIDE.md](../connectivity/BUILD_AAB_FROM_RUSSIA_GUIDE.md) | Сборка AAB из РФ через Maven proxy + SSH-туннель |
| [Cursor Forum — HTTP/2 network error](https://forum.cursor.com/t/http2-network-error-with-cursor-ide-and-cursor-cli/147318) | Обсуждение ошибок HTTP/2 и региональной маршрутизации |
| [Cursor Forum — Agent timeouts when HTTP2 disabled](https://forum.cursor.com/t/agent-timeouts-much-more-when-http2-disabled/76517) | Таймауты агента при отключённом HTTP/2 |
| **[RUNBOOK.md](./RUNBOOK.md)** | RCA SOCKS 1090, чеклист, логи |
| [SSH_EXIT_MODES.md](../../connectivity/vpn/SSH_EXIT_MODES.md) | local / ru / ru-do |
| [PROXY_EMERGENCY.md](../../connectivity/PROXY_EMERGENCY.md) | Экстренный SSH / SOCKS |
| [WINDOWS_CURSOR_TUNNEL.md](../../connectivity/WINDOWS_CURSOR_TUNNEL.md) | Windows |
| [scripts/cursor-socks-tunnel.sh](./scripts/cursor-socks-tunnel.sh) | Туннель macOS |
---
*Последнее обновление: 2026-04-08*
*Обновлено: 2026-07-12 — инцидент смены страны / SOCKS 1090.*

176
docs/apps/cursor/RUNBOOK.md Normal file
View File

@@ -0,0 +1,176 @@
# Runbook: Cursor не подключается (Agent / Chat / API)
Симптом: сеть на Mac **работает**, браузер открывает сайты, DNS OK, но Cursor — Agent, Chat, Marketplace, auth — падают или «не подключается» после смены страны / сети.
---
## Показательная диагностика (2026-07, смена страны → ID)
### Что показала Network Diagnostics Cursor
| Проверка | Результат |
|----------|-----------|
| Интернет | OK |
| DNS | OK |
| HTTP/2 | OK |
| SSL / API / Chat / Agent | FAIL |
### Единственная настоящая ошибка в логах
```
Failed to establish a socket connection to proxies: SOCKS 127.0.0.1:1090
```
За **2 суток** (сессии `20260709T150616`, `20260712T121524`, `20260712T122718`) — **тысячи** повторов этой ошибки в:
- `Cursor Structured Logs*.log`
- `renderer.log`
- `cursor-sentry-events*.log`
- Agent Exec / Indexing & Retrieval
Типичные вызовы: `refreshAuthentication`, `getEmailAndSignUpType`, `GetEffectiveUserPlugins`, `GetGithubInstallations`, unary AI connect.
### Причина (не сеть и не «Индонезия»)
В `~/Library/Application Support/Cursor/User/settings.json` было жёстко:
```json
"http.proxy": "socks5://127.0.0.1:1090",
"http.proxySupport": "override"
```
`override` = **игнорировать системный прокси macOS** и всегда гнать HTTP Cursor через указанный SOCKS.
После переезда локальный SOCKS на **1090** (старый SSH Dynamic Forward / clash / xray и т.п.) **не слушал**, порт пуст → весь API Cursor мёртв, хотя прямой интернет живой.
Подтверждение источника:
```bash
grep -R "127.0.0.1:1090" ~/Library/Application\ Support/Cursor 2>/dev/null
# → User/settings.json: "http.proxy": "socks5://127.0.0.1:1090"
```
**Отключение прокси в Cursor помогло** — это и есть фикс.
---
## Быстрый фикс (локальный выход, другая страна)
1. Открыть **Cursor → Settings → Open User Settings (JSON)** или:
```bash
open -a "Cursor" "$HOME/Library/Application Support/Cursor/User/settings.json"
```
2. Убрать / заменить:
```json
"http.proxy": "",
"http.proxySupport": "off"
```
Либо **удалить** ключи `http.proxy` и `http.proxySupport` целиком.
3. **Cmd+Q** (полностью закрыть Cursor) → запустить снова.
4. Опционально: если Network Diagnostics показывает **HTTP/2: Success**, убрать костыль:
```json
"http.disableHttp2": false
```
(или удалить ключ) — раньше `true` ставили как обход для РФ; вне РФ он часто не нужен.
5. Проверить, что **1090 никто не слушает** (ожидаемо пусто, если прокси не нужен):
```bash
lsof -nP -iTCP:1090 -sTCP:LISTEN || echo "1090 free"
```
---
## Кто подсовывает SOCKS — чеклист (2 минуты)
```bash
# 1. Env (обычно пусто — Cursor берёт settings.json)
env | egrep -i 'proxy|http_proxy|https_proxy|all_proxy|no_proxy' || echo "(none)"
# 2. Явный 1090 в профиле Cursor
grep -R "127.0.0.1:1090" ~/Library/Application\ Support/Cursor 2>/dev/null | grep -v Cache_Data
# 3. settings.json
cat ~/Library/Application\ Support/Cursor/User/settings.json
# 4. Системный прокси macOS (не источник, если http.proxySupport=override)
networksetup -getsocksfirewallproxy "Wi-Fi"
networksetup -getwebproxy "Wi-Fi"
networksetup -getsecurewebproxy "Wi-Fi"
networksetup -getautoproxyurl "Wi-Fi"
# 5. Слушает ли кто-то 1090
lsof -nP -iTCP:1090 -sTCP:LISTEN || echo "(nothing on 1090)"
# 6. Логи за сегодня
grep -R "SOCKS 127.0.0.1:1090" ~/Library/Application\ Support/Cursor/logs --include='*.log' 2>/dev/null | tail -5
```
| Источник | Роль |
|----------|------|
| **`settings.json``http.proxy` + `override`** | Главный виновник (этот инцидент) |
| Env `ALL_PROXY` / `HTTPS_PROXY` | Редко; Cursor может подхватить при запуске из терминала |
| Системный SOCKS / PAC | Только если `http.proxySupport` не `override` / не `off` |
| Порт 1090 слушает процесс | Нужен **только** когда осознанно гоните Cursor через локальный SOCKS |
---
## Правило после смены страны / сети
| Сеть | Cursor proxy |
|------|----------------|
| **Прямой интернет работает** (ID, EU, …) | `http.proxySupport: off`, **без** `http.proxy` |
| **Нужен RU→DO** (из РФ / DPI) | Поднять SOCKS **10809**, затем `socks5://127.0.0.1:10809` + `override` **только пока** туннель жив |
**Не** держать мёртвый `127.0.0.1:1090` (или любой порт) в settings навсегда.
Рекомендуемый порт для Cursor-туннеля в этом репо: **10809** (см. [README.md](./README.md)), не 1090.
Включить на время:
```json
"http.proxy": "socks5://127.0.0.1:10809",
"http.proxySupport": "override"
```
Выключить:
```json
"http.proxy": "",
"http.proxySupport": "off"
```
Скрипты выхода: [SSH_EXIT_MODES.md](../../connectivity/vpn/SSH_EXIT_MODES.md) — после `exit-via-local.sh` **обязательно** снять proxy в Cursor.
---
## Симптом → действие
| Симптом | Действие |
|---------|----------|
| Diagnostics: DNS/HTTP2 OK, API FAIL; лог `SOCKS 127.0.0.1:…` | Снять `http.proxy` / `override` → Cmd+Q |
| `lsof :1090` пусто + proxy в settings | То же — прокси прописан, слушателя нет |
| Нужен выход с IP DO | `exit-via-ru-do.sh` + proxy на **10809**, не 1090 |
| После фикса всё ещё FAIL | Новый Network Diagnostics + свежие логи без строки SOCKS |
---
## Логи
```
~/Library/Application Support/Cursor/logs/<timestamp>/
```
Искать: `SOCKS 127.0.0.1`, `Failed to establish a socket connection to proxies`, `ConnectError`.
---
*Инцидент зафиксирован: 2026-07-12. Отключение прокси в settings.json — рабочий фикс.*