# Куда наше ядро вообще может обратиться.
#
# 🔴 Этот файл существует ради обещания клиенту. Мы говорим «телеметрии нет,
# данные уходят только туда, куда вы сами указали» - и здесь это утверждение
# становится проверяемым: сторож deploy/tools/check-egress.py валит сборку,
# если в коде появился адрес, которого тут нет, ИЛИ если тут есть адрес,
# которого больше нет в коде. Второе не мелочь: список читают как перечень
# того, куда мы ходим.
#
# Адресов, которые вписывает сам владелец (эндпоинт своей модели, вебхук
# своего портала, свой сервер узлов), здесь нет и быть не может: они приходят
# из настроек, а не из кода.
#
# Формат: хост - зачем он нужен.

# ---------- модели ----------
chatgpt.com - Codex: обращение к модели, только если владелец вошёл через codex login
auth.openai.com - Codex: обновление токена той же учётной записи
ai-gateway.vercel.sh - шлюз Vercel, только если владелец задал его ключ
api.anthropic.com - Anthropic (Claude): обращение к модели по ключу владельца с console.anthropic.com
gigachat.devices.sberbank.ru - GigaChat: обращение к модели по ключу владельца
ngw.devices.sberbank.ru:9443 - GigaChat: получение временного токена по ключу владельца
generativelanguage.googleapis.com - Gemini: обращение к модели по ключу владельца, два входа
#   на одном хосте. Предустановка OpenAI-совместимого входа (dir.go, ключ
#   "gemini", путь .../v1beta/openai) и нативный протокол
#   models/{модель}:generateContent (gemini.go, ключ каталога
#   "gemini-native", разрыв с бетой, пункт 23) - разные пути на одном домене.
#   🔴 Пропущен здесь с 24.09 (первый вход) - самой строки не было, хотя
#   адрес уже был в коде; починено 25.09 вместе со вторым входом.

# ---------- питомец-капибара (волна 4) ----------
petdex.dev - галерея питомцев petdex: каталог (манифест), только при CAPYAGENT_PET_GALLERY=1 и только по нажатию на экране «Питомец»
assets.petdex.dev - та же галерея: файл манифеста, куда petdex.dev переадресует, листы кадров и pet.json выбранного питомца; переадресация и адреса из манифеста на другие хосты отвергаются

# ---------- волна 7: инструменты и агентная работа ----------
# Всё ниже выключено по умолчанию и уходит только по ключу владельца.
api.x.ai - поиск по X (инструмент x_search), только при CAPYAGENT_X_SEARCH=1 и ключе XAI_API_KEY владельца; модель Grok по учётке xai из пула (capyagent auth add xai); распознавание речи xAI, только при CAPYAGENT_STT_FALLBACK_PROVIDER=xai и ключе владельца (волна 9)
api.spotify.com - Spotify: плеер, поиск, плейлисты и медиатека владельца, только при CAPYAGENT_SPOTIFY=1 и его входе
accounts.spotify.com - Spotify: вход владельца по PKCE (capyagent spotify вход) и обновление его токена доступа
app.daytona.io - облачная песочница терминала Daytona, только при CAPYAGENT_TERMINAL_ENV=daytona и ключе владельца
# Daytona: команды песочницы идут на её toolboxProxyUrl - адрес называет сама Daytona в ответе
# о песочнице, заранее он неизвестен; ядро шлёт туда ключ только по https (или на хост API владельца).
api.vercel.com - облачная песочница терминала Vercel Sandbox, только при CAPYAGENT_TERMINAL_ENV=vercel и токене владельца
api.github.com - источники навыков github, official и skills.sh (capyagent skills hub), только при CAPYAGENT_SKILLS_SOURCES; обмен токена GitHub владельца на токен Copilot (CAPYAGENT_PROVIDER=copilot, волна 9)
clawhub.ai - источник навыков ClawHub (capyagent skills hub), только при CAPYAGENT_SKILLS_SOURCES с clawhub
skills.sh - поиск в каталоге навыков skills.sh (capyagent skills hub), только при CAPYAGENT_SKILLS_SOURCES со skills.sh
# ---------- конец блока волны 7 ----------

# ---------- волна 9: пул учёток поставщиков (capyagent auth) ----------
# Только по учётке, которую владелец сам завёл командой capyagent auth add.
api.minimax.io - MiniMax: обращение к модели (Anthropic-совместимый вход) по учётке владельца из пула; вход кодом (capyagent auth add minimax) и обновление его токена
api.minimaxi.com - MiniMax из Китая: то же, только при capyagent auth add minimax --region cn
auth.x.ai - xAI Grok: вход кодом устройства (capyagent auth add xai) и обновление его токена
# ---------- волна 9: поставщики модели беты (llm/dirHvost.go, llm/podpiski.go) ----------
# Всё ниже - только если владелец выбрал этого поставщика (CAPYAGENT_PROVIDER
# или CAPYAGENT_FALLBACK) и дал свой ключ или вход. В автовыбор не входят.
api.fireworks.ai - Fireworks AI: обращение к модели по ключу владельца
api.deepinfra.com - DeepInfra: обращение к модели по ключу владельца; распознавание речи Whisper, только при CAPYAGENT_STT_FALLBACK_PROVIDER=deepinfra и ключе владельца
api.novita.ai - NovitaAI: обращение к модели по ключу владельца
router.huggingface.co - Hugging Face Inference Providers: обращение к модели по токену владельца
integrate.api.nvidia.com - NVIDIA NIM: обращение к модели по ключу владельца
api.z.ai - Z.AI (GLM): обращение к модели по ключу владельца
dashscope-intl.aliyuncs.com - Alibaba DashScope (Qwen): обращение к модели по ключу владельца
api.stepfun.ai - StepFun: обращение к модели по ключу владельца
api.arcee.ai - Arcee AI: обращение к модели по ключу владельца
api.kilo.ai - шлюз Kilo Code: обращение к модели по ключу владельца
opencode.ai - OpenCode Zen и бесплатный OpenCode Free (без ключа), только если владелец выбрал их
api.minimax.io - MiniMax: обращение к модели по ключу владельца (OpenAI-совместимый вход, CAPYAGENT_PROVIDER=minimax); см. также строку пула учёток выше
api.gmi-serving.com - GMI Cloud: обращение к модели по ключу владельца
api.upstage.ai - Upstage Solar: обращение к модели по ключу владельца
api.meta.ai - Meta Model API: обращение к модели по ключу владельца
api.tokenfactory.nebius.com - Nebius Token Factory: обращение к модели по ключу владельца
ollama.com - Ollama Cloud: обращение к модели по ключу владельца
aiplatform.googleapis.com - Google Vertex AI: обращение к модели по сервисному аккаунту или ADC владельца.
#   В регионе, отличном от global, хост собирается как <регион>-aiplatform.googleapis.com.
chat.qwen.ai - вход Qwen Code: обновление токена из файла входа владельца (~/.qwen/oauth_creds.json)
portal.qwen.ai - вход Qwen Code: обращение к модели по токену владельца
# ---------- конец блока волны 9 ----------

# ---------- волна 10: хвост поставщиков модели (llm/dirHvostDop.go) ----------
# Только если владелец выбрал поставщика по имени (CAPYAGENT_PROVIDER или
# CAPYAGENT_FALLBACK) и дал свой ключ. В автовыбор не входят.
coding-intl.dashscope.aliyuncs.com - Alibaba Cloud Coding Plan: обращение к модели по ключу владельца
coding.dashscope.aliyuncs.com - Alibaba Cloud Coding Plan (Китай): обращение к модели по ключу владельца
api.commandcode.ai - CommandCode: обращение к модели по ключу владельца (OpenAI-совместимый вход и Anthropic Messages)
api.kimi.com - Kimi Code: обращение к модели по ключу владельца вида sk-kimi- (поставщик kimi-coding)
api.moonshot.cn - Kimi через китайский вход Moonshot: обращение к модели по ключу владельца (kimi-coding-cn)
api.actual.inc - Actual Computer: обращение к модели по ключу владельца (Responses API)
api.router.com - Ramp Router: обращение к модели по ключу владельца (Responses API)
# ---------- конец блока волны 10 (поставщики) ----------

# ---------- учебных имён здесь нет ----------
#
# 🔴 Учебное имя в этом файле - прямая неправда, и сторож валит на нём сборку
# отдельным сообщением. Покупатель читает список как перечень того, куда
# уходят его данные; строка «capy.example - пример» означала бы «мы туда
# ходим», а туда не ходит никто и никогда.
#
# Учебными считаются только имена из RFC 2606: зоны .example, .test, .invalid,
# .localhost и example.com, example.net, example.org с поддоменами. Они не
# делегированы, их нельзя купить и по ним нельзя обратиться. Сторож
# check-egress узнаёт их сам и строки в списке для них не требует.
#
# 🔴 Здесь стояло example.org - как «пример ссылки в разборе утверждений». И
# рядом жила поблажка на *.example.ru, наша договорённость об образце. Она и
# была дырой: example.ru - обыкновенный домен в живой зоне .ru, его покупает
# кто угодно, и хост вида чтоугодно.example.ru уезжал бы в код мимо этого
# перечня молча. Убрано 09.09; учебный образец в дереве теперь
# agent.example.com, а сам example.org сторож считает учебным и в списке
# больше не ждёт.

# ---------- каталог MCP-серверов ----------
#
# 🔴 Это НЕ адреса, куда ходим мы. Это записи каталога (capyagent mcp): что
# бывает и что можно подключить. Ходить туда начнёт та установка, где человек
# ВПИСАЛ такой сервер в конфигурацию сам, - и тогда он знает об этом, потому
# что вписывал. Держим их здесь, потому что сторож честно видит их в коде, а
# скрывать от покупателя то, что он и так прочтёт, незачем.
mcp.context7.com - каталожная запись: документация библиотек по MCP
api.githubcopilot.com - каталожная запись: MCP-сервер GitHub; обращение к модели по подписке Copilot владельца (CAPYAGENT_PROVIDER=copilot, волна 9); туда же ходит программа Copilot CLI при CAPYAGENT_PROVIDER=copilot-acp
#
# Хвост каталога беты (optional-mcps), перенесён 26.09. То же правило, что и
# выше: сюда ходит только та установка, где человек сам вписал сервер в
# конфигурацию. Источник записей: core/internal/mcp/katalogHvost.go.
mcp.airtable.com - каталожная запись: airtable (хвост каталога беты)
mcp.algolia.com - каталожная запись: algolia (хвост каталога беты)
www.alltrails.com - каталожная запись: alltrails (хвост каталога беты)
mcp.amplitude.com - каталожная запись: amplitude (хвост каталога беты)
mcp.asana.com - каталожная запись: asana (хвост каталога беты)
mcp.atlassian.com - каталожная запись: atlassian (хвост каталога беты)
mcp.attio.com - каталожная запись: attio (хвост каталога беты)
knowledge-mcp.global.api.aws - каталожная запись: aws-knowledge (хвост каталога беты)
mcp.betterstack.com - каталожная запись: betterstack (хвост каталога беты)
mcp.buildkite.com - каталожная запись: buildkite (хвост каталога беты)
mcp.calendly.com - каталожная запись: calendly (хвост каталога беты)
mcp.canva.com - каталожная запись: canva (хвост каталога беты)
mcp.circleci.com - каталожная запись: circleci (хвост каталога беты)
mcp.clickup.com - каталожная запись: clickup (хвост каталога беты)
mcp.close.com - каталожная запись: close (хвост каталога беты)
mcp.cloudflare.com - каталожная запись: cloudflare (хвост каталога беты)
asset-management.mcp.cloudinary.com - каталожная запись: cloudinary (хвост каталога беты)
cloud.comfy.org - каталожная запись: comfy-cloud (хвост каталога беты)
mcp.craft.do - каталожная запись: craft (хвост каталога беты)
mcp.datadoghq.com - каталожная запись: datadog (хвост каталога беты)
mcp.deepwiki.com - каталожная запись: deepwiki (хвост каталога беты)
mcp.dropbox.com - каталожная запись: dropbox (хвост каталога беты)
mcp.figma.com - каталожная запись: figma (хвост каталога беты)
api.fireflies.ai - каталожная запись: fireflies (хвост каталога беты)
mcp.gamma.app - каталожная запись: gamma (хвост каталога беты)
gitlab.com - каталожная запись: gitlab (хвост каталога беты)
mcp.globalping.dev - каталожная запись: globalping (хвост каталога беты)
mcp.grafana.com - каталожная запись: grafana (хвост каталога беты)
huggingface.co - каталожная запись: hugging_face (хвост каталога беты); заливка трасс разговоров в набор владельца (capyagent sessions export --format trace --upload), только при CAPYAGENT_SESSIONS_HF_UPLOAD=1 и ключе HF_TOKEN
mcp.indeed.com - каталожная запись: indeed (хвост каталога беты)
mcp.intercom.com - каталожная запись: intercom (хвост каталога беты)
mcp.kiwi.com - каталожная запись: kiwi (хвост каталога беты)
mcp.klaviyo.com - каталожная запись: klaviyo (хвост каталога беты)
mcp.linear.app - каталожная запись: linear (хвост каталога беты)
learn.microsoft.com - каталожная запись: microsoft-learn (хвост каталога беты)
mcp.miro.com - каталожная запись: miro (хвост каталога беты)
mcp.mixpanel.com - каталожная запись: mixpanel (хвост каталога беты)
mcp.monday.com - каталожная запись: monday (хвост каталога беты)
api.motherduck.com - каталожная запись: motherduck (хвост каталога беты)
mcp.neon.tech - каталожная запись: neon (хвост каталога беты)
netlify-mcp.netlify.app - каталожная запись: netlify (хвост каталога беты)
mcp.notion.com - каталожная запись: notion (хвост каталога беты)
mcp.paypal.com - каталожная запись: paypal (хвост каталога беты)
api.dashboard.plaid.com - каталожная запись: plaid (хвост каталога беты)
mcp.postman.com - каталожная запись: postman (хвост каталога беты)
mcp.prisma.io - каталожная запись: prisma-postgres (хвост каталога беты)
mcp.railway.com - каталожная запись: railway (хвост каталога беты)
agent.robinhood.com - каталожная запись: robinhood (хвост каталога беты)
mcp.semgrep.ai - каталожная запись: semgrep (хвост каталога беты)
mcp.sentry.dev - каталожная запись: sentry (хвост каталога беты)
mcp.squareup.com - каталожная запись: square (хвост каталога беты)
mcp.strava.com - каталожная запись: strava (хвост каталога беты)
mcp.stripe.com - каталожная запись: stripe (хвост каталога беты)
mcp.supabase.com - каталожная запись: supabase (хвост каталога беты)
ai.todoist.net - каталожная запись: todoist (хвост каталога беты)
mcp.trivago.com - каталожная запись: trivago (хвост каталога беты)
mcp.twelvedata.com - каталожная запись: twelve-data (хвост каталога беты)
mcp.twilio.com - каталожная запись: twilio-docs (хвост каталога беты)
mcp.vercel.com - каталожная запись: vercel (хвост каталога беты)
mcp.webflow.com - каталожная запись: webflow (хвост каталога беты)
agenttools.wolfram.com - каталожная запись: wolfram (хвост каталога беты)
public-api.wordpress.com - каталожная запись: wordpress-com (хвост каталога беты)

graph.facebook.com - канал WhatsApp (Cloud API), при заданном WHATSAPP_TOKEN.
#   Отправка ответов деловым аккаунтом. Входящие приходят вебхуком к нам, то
#   есть наружу мы ходим только чтобы ответить. Без токена канал не
#   поднимается и в сеть не ходит вовсе.
#   🔴 Вложения и голос от человека качаются по адресу, который graph.facebook.com
#   выдаёт В РАНТАЙМЕ на каждый файл (обычно lookaside.fbsbx.com), с тем же
#   токеном; в коде этот адрес не зашит. Качаем только от разрешённых номеров
#   и только по https.

# Канал WhatsApp личного номера (connectors/whatsapp_web, Baileys), только
#   при WHATSAPP_WEB_ENABLED=1. Ходит не ядро, а мост на Node: протокол
#   WhatsApp Web по вебсокету к серверам WhatsApp (web.whatsapp.com,
#   g.whatsapp.net, mmg.whatsapp.net для файлов). Адреса зашиты в библиотеке
#   Baileys, в нашем коде их нет, поэтому строкой списка они не стоят. Ядро
#   говорит с мостом только через 127.0.0.1. Выключено по умолчанию.

platform-api2.max.ru - канал MAX (мессенджер VK), при заданном MAX_BOT_TOKEN.
#   Тот же путь, что у Telegram: длинный опрос за событиями и отправка ответов.
#   Без токена канал не поднимается и в сеть не ходит вовсе.

# ---------- голос ----------
stt.api.cloud.yandex.net - распознавание речи Яндекса, при включённом CAPYAGENT_STT
tts.api.cloud.yandex.net - синтез речи Яндекса, при включённом CAPYAGENT_TTS
#   🔴 При CAPYAGENT_TTS_PROVIDER=edge текст ответа уходит в облако Microsoft,
#   но не из ядра: его отправляет внешняя программа edge-tts, которую владелец
#   ставит сам. Только явным выбором; умолчание (piper или espeak-ng) в сеть
#   не ходит вовсе.
operation.api.cloud.yandex.net - опрос готовности длинного распознавания там же,
#   только при включённом CAPYAGENT_STT_LONG. Это тот же SpeechKit: короткое
#   голосовое разбирается сразу, длинное ставится в очередь, и адрес нужен,
#   чтобы спросить «готово ли». Выключено по умолчанию.

# ---------- картинки ----------
api.openai.com - рисование картинок, при включённом CAPYAGENT_IMAGE_GEN и ключе владельца;
#   там же запасное распознавание голоса, только при
#   CAPYAGENT_STT_FALLBACK_PROVIDER=openai и ключе владельца.
#   Там же голос OpenAI (волна 7): только при CAPYAGENT_TTS_PROVIDER=openai.
api-key.fusionbrain.ai - Kandinsky, там же
llm.api.cloud.yandex.net - Яндекс: и рисование ART, и ТЕКСТОВАЯ модель YandexGPT.
#   🔴 Хост один на два разных дела. В списке он стоял только как «ART»,
#   и по описанию выходило, что туда уходят подсказки к картинкам. На деле
#   это же адрес /foundationModels/v1/completion (llm/yandexgpt.go:47,173):
#   если владелец выбрал YandexGPT, туда уходит ПЕРЕПИСКА. Список читают как
#   перечень того, куда мы ходим и зачем, поэтому неточное «зачем» здесь
#   хуже отсутствующей строки.
llm.api.cloud.yandex.net:443 - Яндекс ART: опрос готовности той же задачи

# ---------- каналы ----------
api.telegram.org - канал Telegram, при заданном токене бота владельца
#   Свой сервер Bot API (capyagent telegram local-api, tgserver/svyaz.go):
#   до logOut в облаке ядро открывает и сразу закрывает TCP-соединение с
#   серверами Telegram 149.154.167.50, 149.154.175.50 и 149.154.167.91
#   (порт 443), ни одного байта не отправляя: без прямой связи с ними свой
#   сервер бота не примет. Адреса числом и не URL, поэтому здесь пояснением.
discord.com - канал Discord, при заданном токене бота владельца
cdn.discordapp.com - канал Discord: файлы и голосовые, присланные боту (качаем только отсюда и с media.discordapp.net, только https, discord/vlozheniya.go)
media.discordapp.net - канал Discord: второй адрес CDN тех же вложений
slack.com - канал Slack (Web API, chat.postMessage), при заданном SLACK_BOT_TOKEN
#   🔴 В Socket Mode (SLACK_APP_TOKEN) события идут по вебсокету на адрес,
#   который slack.com выдаёт В РАНТАЙМЕ ответом apps.connections.open (обычно
#   wss-primary.slack.com, slack/sokety.go). Строкой его здесь быть не может -
#   в исходниках его нет; записан словами, потому что мы туда ходим.
#   🔴 Файлы агента (slack/zagruzka.go) уходят на адрес загрузки, который
#   slack.com выдаёт В РАНТАЙМЕ ответом files.getUploadURLExternal (обычно
#   files.slack.com); тело файла шлётся только на https-адрес домена slack.com.
api.vk.com - канал VK (методы Bots Long Poll и messages.send), только при включённом CAPYAGENT_VK_CHANNEL
#   🔴 Сервер Long Poll (lp.vk.com и соседи) VK выдаёт В РАНТАЙМЕ ответом
#   groups.getLongPollServer, а файлы вложений лежат на userapi.com и других
#   доменах VK: адреса приходят в событии, и канал качает только https с
#   доменов из dopustimyeDomeny (channels/vk/vlozheniya.go).
#   🔴 Приём событий идёт по вебсокету на адрес, который discord.com выдаёт
#   В РАНТАЙМЕ (обычно gateway.discord.gg, discord/channel.go:112-124).
#   Строкой в списке его быть не может: сторож ищет адреса в исходниках, а
#   этого адреса в исходниках нет. Записан здесь словами, потому что молчание
#   означало бы «мы туда не ходим», а мы ходим.

# ---------- каналы из беты (перенесены 27.09) ----------
# 🔴 Каждый канал ходит в сеть ТОЛЬКО при включённом флаге
# CAPYAGENT_<ИМЯ>_CHANNEL; выключенный не открывает ни одного соединения.
ntfy.sh - канал ntfy: общий сервер по умолчанию (поток темы и публикация ответов), только при CAPYAGENT_NTFY_CHANNEL и незаданном NTFY_SERVER_URL
api.twilio.com - канал SMS: отправка ответов (Messages.json), только при CAPYAGENT_SMS_CHANNEL. Входящие Twilio приносит вебхуком к нам
#   Канал IRC (CAPYAGENT_IRC_CHANNEL) ходит ТОЛЬКО на сервер из IRC_SERVER,
#   который вписывает владелец: зашитого адреса у канала нет. Так же канал
#   Mattermost (CAPYAGENT_MATTERMOST_CHANNEL) ходит только на MATTERMOST_URL,
#   а iMessage через BlueBubbles (CAPYAGENT_BLUEBUBBLES_CHANNEL) - только на
#   мак владельца по BLUEBUBBLES_SERVER_URL.
api.line.me - канал LINE: ответы (reply и push) и индикатор «печатает», только при CAPYAGENT_LINE_CHANNEL. Входящие LINE приносит вебхуком к нам
api-data.line.me - канал LINE: содержимое вложений, присланных допущенным человеком, там же
chat.googleapis.com - канал Google Chat: ответы агента (spaces.messages.create), только при CAPYAGENT_GOOGLECHAT_CHANNEL. События Google приносит к нам сам
oauth2.googleapis.com - канал Google Chat: токен сервисного аккаунта владельца для ответов, там же; токен сервисного аккаунта или ADC владельца для Vertex AI (CAPYAGENT_PROVIDER=vertex, волна 9)
www.googleapis.com - канал Google Chat: открытые ключи Google для проверки подписи событий (oauth2/v3/certs и сертификаты chat@system), там же
accounts.google.com - канал Google Chat: имя издателя в ID-токене события, с которым сверяется поле iss. Обращения туда нет
login.botframework.com - канал Teams: открытые ключи Bot Framework для проверки подписи активностей, только при CAPYAGENT_TEAMS_CHANNEL
login.microsoftonline.com - канал Teams: токен бота (client credentials) для ответов, там же
smba.trafficmanager.net - канал Teams: соединитель Bot Framework, куда уходят ответы, там же
smba.infra.gov.teams.microsoft.us - канал Teams: соединитель государственного облака, только если активность пришла оттуда или он задан в TEAMS_SERVICE_URL
api.botframework.com - канал Teams: имя издателя токенов активностей и область токена бота. Обращения туда нет
spectrum.photon.codes - iMessage через Photon, только при CAPYAGENT_PHOTON_CHANNEL: туда уходит переписка iMessage. Ходит не ядро, а помощник на Node.js (connectors/photon_sidecar, библиотека spectrum-ts); ядро говорит только с ним на петле 127.0.0.1. Телеметрия библиотеки выключена, пока не включён PHOTON_TELEMETRY

# ---------- каналы волны 7 (разрыв с бетой, 27.09) ----------
# Все выключены, пока владелец не задал доступы канала; без них в сеть не
# ходят вовсе. Адреса своих систем (Home Assistant, демон SimpleX, узлы A2A,
# реле Buzz) вписывает владелец, здесь их нет.
homeassistant.local:8123 - Home Assistant владельца в его локальной сети, только если
#   задан HASS_TOKEN, а HASS_URL пуст: умолчание беты. Это не внешний адрес, а
#   имя mDNS дома владельца; наружу по нему не уходит ничего.
api.dingtalk.com - канал DingTalk (Stream): открытие потока /v1.0/gateway/connections/open и ответ
#   на вебхук сессии, только при заданном DINGTALK_CLIENT_ID. Адрес вебсокета
#   (обычно wss-open-connection.dingtalk.com) DingTalk выдаёт В РАНТАЙМЕ ответом
#   на открытие потока. Вебхук сессии приходит в сообщении; слать на него
#   готовы только на api.dingtalk.com и oapi.dingtalk.com.
oapi.dingtalk.com - канал DingTalk: второй домен вебхуков сессии, тот же случай.
bots.qq.com - канал QQ: токен приложения /app/getAppAccessToken, только при заданном QQ_APP_ID.
api.sgroup.qq.com - канал QQ: адрес шлюза /gateway и отправка ответов. Сам вебсокет
#   (обычно api.sgroup.qq.com/websocket) QQ выдаёт В РАНТАЙМЕ ответом /gateway.
openws.work.weixin.qq.com - канал WeCom: вебсокет бота ИИ (wss), только при заданном WECOM_BOT_ID.
ilinkai.weixin.qq.com - канал WeChat (iLink Bot API): вход по QR-коду, длинный опрос и
#   отправка ответов, только при заданном WEIXIN_TOKEN или по команде
#   `capyagent weixin login`. При входе iLink может увести опрос на другой
#   свой узел (redirect_host) - принимается только https на *.weixin.qq.com.
open.feishu.cn - канал и инструменты Feishu: ключ приложения, ответы, документы и
#   комментарии, только при заданных FEISHU_APP_ID и FEISHU_APP_SECRET.
open.larksuite.com - то же для Lark, при FEISHU_DOMAIN=lark.
bot.yuanbao.tencent.com - канал Yuanbao: подписанный запрос токена sign-token, только при
#   заданном YUANBAO_APP_ID.
bot-wss.yuanbao.tencent.com - канал Yuanbao: вебсокет шлюза ботов (wss), тот же случай.

# ---------- обновление ----------
github.com - названная пара перенаправления для capyagent update, ЕСЛИ владелец сам увёл канал на GitHub через CAPYAGENT_UPDATE_BASE. 🔴 Каналом по умолчанию БОЛЬШЕ НЕ является: 05.09 канал вернулся на capyagent.ru, потому что закрытые выпуски GitHub отдают постороннему 404; вход в Copilot по коду устройства (capyagent model copilot-login, волна 9)
objects.githubusercontent.com - склад объектов GitHub, куда github.com уводит перенаправлением за самим файлом
#   🔴 Разрешён ровно этот переход и ровно с github.com: правило «за бинарником
#   на чужой хост не идём» осталось, у него появилась одна названная пара.
#   Смысл правила прежний - подменённый манифест не должен уводить нас за
#   исполняемым файлом куда попало.
capyagent.ru - КАНАЛ ВЫПУСКА: манифест и бинарник берутся отсюда по команде capyagent update при CAPYAGENT_UPDATE=1. Он же в заголовке User-Agent к Discord. 🔴 Решение владельца 05.09: канал вернулся сюда с выпусков GitHub, потому что репозиторий остаётся закрытым, а закрытые выпуски отдают постороннему 404 - неотличимо от «выпуска нет». Он же КАНАЛ ИНСТРУМЕНТОВ (dl/tools, internal/zakreplennye): программа whisper.cpp и модель whisper - при первой записи со своим распознавателем (CAPYAGENT_STT_FALLBACK_PROVIDER=whisper), программа telegram-bot-api - при включении своего сервера Bot API без Docker. Каждый файл сверяется с размером и sha256, закреплёнными в бинарнике ядра, и без совпадения не ставится

# ---------- инструменты (internal/zakreplennye) ----------
capyagent.com - ЗЕРКАЛО КАНАЛА ИНСТРУМЕНТОВ (dl/tools): whisper.cpp, модели whisper и telegram-bot-api берутся отсюда, только если capyagent.ru не отдал годный файл. Та же сверка размера и sha256, закреплённых в бинарнике ядра; перенаправление на другой хост не принимается

# ---------- НЕ адреса обращения ----------
# 🔴 Ниже то, что встречается в текстах для человека. Обращений по этим
# адресам код не делает; они в списке потому, что сторож ищет адреса везде, а
# не только там, где вся строка - адрес. Спрятать телеметрию внутри длинной
# строки иначе было бы можно.
# 🔴 Адреса предустановок поставщиков модели. Ими агент пользуется ТОЛЬКО
# если человек выбрал этого поставщика и вписал ключ: в коде это готовые
# значения для настройки CAPYAGENT_LLM_BASE_URL, а не адрес, к которому мы
# ходим сами. Без ключа туда не уходит ни один запрос.
#
# Внесены поимённо, а не маской: обещание клиенту звучит «наружу уходит только
# названное», и маска сделала бы его невыполнимым - под неё однажды попал бы
# адрес, которого никто не называл.
token-plan-sgp.xiaomimimo.com - предустановка поставщика MiMo (agent.AdresMiMoPoUmolchaniyu).
#   🔴 Стоит здесь по той же причине, что и соседи, но честнее сказать больше:
#   это адрес по УМОЛЧАНИЮ, его подставляет экран знакомства, и у того, кто
#   выбрал MiMo и вписал ключ, вся переписка с моделью идёт сюда. Без ключа
#   туда не уходит ни один запрос; свой адрес задаётся настройкой MIMO_BASE.
api.deepseek.com - предустановка поставщика DeepSeek и пример в подсказке о настройке OpenAI-совместимого эндпоинта
openrouter.ai - предустановка поставщика OpenRouter: адрес подставляется в настройку по кнопке
api.groq.com - предустановка поставщика Groq; там же запасное распознавание голоса,
#   только при CAPYAGENT_STT_FALLBACK_PROVIDER=groq и ключе владельца.
api.moonshot.ai - предустановка поставщика Kimi (слот CAPYAGENT_LLM_KIMI_*): без ключа туда не уходит ни один запрос
api.mistral.ai - предустановка поставщика Mistral; распознавание речи Voxtral, только при CAPYAGENT_STT_FALLBACK_PROVIDER=mistral и ключе владельца (волна 9)
api.together.xyz - предустановка поставщика Together AI
capyagent.ru - пример адреса вебхука в тексте ошибки

# ---------------------------------------------------------------------------
# Ссылки, которые открывает ЧЕЛОВЕК. Ядро сюда не ходит.
#
# 🔴 Раздел отдельный нарочно. Список выше читают как перечень того, куда
# уходят данные, и подмешать в него кабинеты поставщиков значило бы соврать в
# самом важном обещании клиенту. Здесь адреса, которые ядро только ПОКАЗЫВАЕТ
# на экране ключей рядом с полем: «где взять этот ключ». Открывает их человек в
# своём браузере, служба к ним не обращается ни разу - это проверяется тем, что
# ни один из них не встречается в коде рядом с http-клиентом.
console.anthropic.com - кабинет Anthropic: где взять ANTHROPIC_API_KEY
console.yandex.cloud - кабинет Яндекс Облака: где взять ключ и каталог
developers.sber.ru - кабинет Сбера: где взять ключ GigaChat
developers.facebook.com - кабинет Meta: где взять токен WhatsApp Cloud API
platform.openai.com - кабинет OpenAI: где взять OPENAI_API_KEY
fusionbrain.ai - кабинет Kandinsky: где взять ключ рисования
brave.com - кабинет Brave Search: где взять ключ поиска
app.tavily.com - кабинет Tavily: где взять ключ запасного поиска
dashboard.exa.ai - кабинет Exa: где взять ключ запасного поиска
www.firecrawl.dev - кабинет Firecrawl: где взять ключ поиска и чтения страниц (волна 10)
platform.parallel.ai - кабинет Parallel: где взять ключ поиска и чтения страниц (волна 10)
www.perplexity.ai - кабинет Perplexity: где взять ключ поиска (волна 10)
keenable.ai - кабинет Keenable: где взять ключ поиска (волна 10)
t.me - чат с @BotFather: где завести бота Telegram; витрина VPN+ (/vpn, «Купить VPN»): ссылка на бота @noobhostbot, её открывает человек, ядро туда не обращается
matrix.org - пример домашнего сервера в подсказке к MATRIX_HOMESERVER_URL: адрес задаёт владелец настройкой, в коде не зашит и рядом с http-клиентом не встречается
www.npmjs.com - страница пакета MCP-сервера в подробностях записи каталога: ссылку открывает человек, ставит пакет npx у него на машине
pypi.org - то же для пакетов Python: ссылку открывает человек, ставит пакет uvx у него на машине
vercel.com - кабинет Vercel: где взять ключ шлюза (сам шлюз - ai-gateway.vercel.sh выше)
# ---- волна 7: администрирование из терминала ----
api.osv.dev - база уязвимостей OSV.dev: capyagent security audit отправляет туда имена и версии пакетов python и закреплённых зависимостей коннекторов, только по команде человека, никогда сама
socket.dev - ссылка в тексте предупреждения безопасности shai-hulud-2026-05: открывает человек, ядро туда не обращается

# ---------- волна 7: облачные голоса беты ----------
api.elevenlabs.io - озвучка ElevenLabs, только при CAPYAGENT_TTS_PROVIDER=elevenlabs и ключе владельца; распознавание речи ElevenLabs Scribe, только при CAPYAGENT_STT_FALLBACK_PROVIDER=elevenlabs и ключе владельца (волна 9)
api.x.ai - озвучка xAI (только при CAPYAGENT_TTS_PROVIDER=xai) и создание видео xAI (только при
#   CAPYAGENT_VIDEO_GEN=1 и CAPYAGENT_VIDEO_GEN_PROVIDER=xai), по ключу владельца XAI_API_KEY.

# ---------- волна 7: разбор видео ----------
#   Разбор видео Gemini ходит на generativelanguage.googleapis.com (строка
#   выше, раздел моделей): /v1beta/models/...:generateContent и загрузка файла
#   /upload/v1beta/files, только при CAPYAGENT_VIDEO_ANALYZE=1 и ключе владельца.
#   Ролик YouTube (youtube.com, youtu.be) ядро не скачивает: ссылка уходит
#   Gemini как есть, и смотрит её Google.

# ---------- волна 7: создание видео ----------
queue.fal.run - FAL.ai: очередь создания видео, только при CAPYAGENT_VIDEO_GEN=1 и ключе владельца FAL_KEY.
#   Готовый ролик (и у xAI, и у FAL) скачивается по ссылке из ответа поставщика
#   через сторож внутренних адресов; ключ на адрес скачивания не уходит.

# ---------- волна 10: рисовальщики беты ----------
#   Все - только при CAPYAGENT_IMAGE_GEN=1 и ключе владельца. Готовая картинка
#   по ссылке из ответа (fal.media, CDN Krea, xAI, OpenRouter) скачивается
#   через сторож внутренних адресов; ключ на адрес скачивания не уходит.
api.krea.ai - Krea 2: рисование по ключу владельца KREA_API_KEY (цепочка по ключам или CAPYAGENT_IMAGE_GEN_PROVIDER=krea)
#   queue.fal.run (раздел создания видео выше) - и очередь картинок FAL по FAL_KEY.
#   api.x.ai (выше) - и картинки Grok Imagine, только при CAPYAGENT_IMAGE_GEN_PROVIDER=xai.
#   openrouter.ai (выше) - и картинки /api/v1/images/generations и
#   /api/v1/chat/completions, только при CAPYAGENT_IMAGE_GEN_PROVIDER=openrouter.
#   api.deepinfra.com (выше) - и картинки /v1/openai/images/generations с
#   каталогом /v1/openai/models, только при CAPYAGENT_IMAGE_GEN_PROVIDER=deepinfra;
#   и ролики /v1/openai/videos, только при CAPYAGENT_VIDEO_GEN=1 и
#   CAPYAGENT_VIDEO_GEN_PROVIDER=deepinfra.
#   api.meta.ai (выше) - и картинки /v1/images/generations, только при
#   CAPYAGENT_IMAGE_GEN_PROVIDER=meta-ai.
#   chatgpt.com (выше) - и картинки инструментом image_generation подписки,
#   только при CAPYAGENT_IMAGE_GEN_PROVIDER=openai-codex и входе codex login.
# ---------- волна 10: модели для личного ассистента (переезд с беты) ----------
api.kimi.com - Kimi Coding (слот kimi-coding, подписка Kimi Code): обращение к модели по протоколу Anthropic, только по ключу владельца
capyagent.ru - значение заголовка HTTP-Referer к Kimi Coding, как у беты: обращения туда нет
