# Забруднення контексту в 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/)
