# Загрязнение контекста в Translate API

## Предыстория

CC-Viewer включает встроенную функцию перевода (`POST /api/translate`), работающую на основе Anthropic Messages API. В ранней реализации запросы на перевод повторно использовали кэшированные учётные данные аутентификации из сессии Claude Code — включая заголовки `x-api-key` и `authorization`. Это вызывало неочевидную, но серьёзную проблему: результаты перевода часто возвращали нерелевантное содержимое.

## Корневая причина

### Фундаментальное различие между двумя методами аутентификации

Anthropic API поддерживает два метода аутентификации:

| Метод | Заголовок | Типичный источник | Характеристики |
|-------|-----------|-------------------|----------------|
| API-ключ | `x-api-key: sk-ant-...` | Переменная окружения / Console | Без состояния, каждый запрос независим |
| OAuth-токен | `authorization: Bearer sessionToken` | Вход по подписке Claude Code | Привязан к сессии, сервер поддерживает ассоциацию контекста |

Ключевое различие: **API-ключи не хранят состояние** — каждый запрос полностью независим; тогда как **OAuth-токены сессии хранят состояние** — сервер Anthropic ассоциирует запросы с одним и тем же токеном с одним и тем же контекстом сессии.

### Цепочка загрязнения

Когда Claude Code использует OAuth-вход по подписке, поток аутентификации выглядит так:

```
Основной диалог Claude Code ──(authorization: Bearer sessionToken)──→ Anthropic API
                                                                        ↑
Запрос перевода CC-Viewer ──(authorization: Bearer sessionToken)──→ Anthropic API
```

Поскольку запросы на перевод повторно использовали тот же токен сессии, сервер Anthropic может ассоциировать запросы на перевод с контекстом основного диалога Claude Code. Это приводит к:

1. **Результаты перевода под влиянием контекста основного диалога**: Системный промпт запроса на перевод — «вы переводчик», но серверный контекст всё ещё содержит историю диалогов Claude Code, что может влиять на модель
2. **Основной диалог нарушается запросами на перевод**: Содержимое запросов на перевод (фрагменты текста UI) может быть внедрено в контекст основного диалога, вызывая отклонения в ответах Claude Code
3. **Непредсказуемое поведение**: Поскольку загрязнение контекста — это поведение на стороне сервера, клиент не может его обнаружить или контролировать

## Извлечённые уроки

- **OAuth-токены сессии — это не «просто ещё один API-ключ»** — они несут серверное состояние, и их повторное использование означает разделение контекста
- **Внутренние вызовы сервисов должны использовать независимую аутентификацию без состояния**, чтобы избежать ассоциации с пользовательскими сессиями

## Ссылки

- [Anthropic API Authentication Docs](https://docs.anthropic.com/en/api/getting-started)
- [Claude Code Authentication](https://support.claude.com/en/articles/12304248-managing-api-key-environment-variables-in-claude-code)
- [Anthropic Bans Subscription OAuth in Third-Party Apps](https://winbuzzer.com/2026/02/19/anthropic-bans-claude-subscription-oauth-in-third-party-apps-xcxwbn/)
- [Claude Code Authentication: API Keys, Subscriptions, and SSO](https://developertoolkit.ai/en/claude-code/quick-start/authentication/)
