# context-panel Панель «Токены» для веб-интерфейса OpenCode 2: что сейчас лежит в контексте сессии, как он рос и сколько токенов ушло за сессию, за день и за всё время. Работает как плагин OpenCode и поднимается в его же процессе. Вкладка «Токены» в боковой панели OpenCode ## Что на вкладке В шапке сессии появляется кнопка с кружком и % заполнения контекста. Она открывает боковую панель на вкладке **«Токены»** рядом с Review и Context; вкладку можно выбрать и вручную. Кнопка и вкладка повторяют разметку OpenCode, поэтому стили у них родные. Если OpenCode перерисует интерфейс, `panel.js` вставит их заново. - **Состав контекста.** Сколько токенов было в последнем запросе к модели (как в самом OpenCode) из лимита модели. Разбивка по категориям: сообщения, ответы, reasoning, вывод каждого тула (MCP отдельно, `gitlab: …`, `jira: …`; для Code Mode — какие MCP вызывал скрипт), сводка compaction. Учитывается только то, что сейчас в контексте, — его отдаёт сам OpenCode (`/api/session/{id}/context`). Категории считаются как символы/4, так же оценивает сам OpenCode. «Остаток» — это разница между реальным числом токенов и суммой оценок: системный промпт, AGENTS.md, схемы тулов и MCP, плюс погрешность. - **Рост контекста по шагам.** Токенов в каждом запросе к модели за всю сессию, линия лимита модели и отметки compaction. Под графиком — список compaction: когда, авто или вручную, контекст до и после, размер сводки, сколько заняло. Провал на графике без отметки compaction — это чистка вывода тулов (prune / DCP). - **Самые тяжёлые вызовы в контексте.** Топ-10 вызовов тулов в текущем контексте: тул, что вызывали (файл, команда, описание), токены входа и вывода. - **Расход за сессию.** Input, cache read/write, output, reasoning, число шагов модели. Если были сабагенты, рядом показан итог вместе с ними. - **Скорость модели в сессии.** Генерация (output + reasoning за время потока, ток/с), среднее ожидание первого токена, prefill (input без кэша за это время, ток/с) и среднее время модели на шаг. Начало потока — первая часть ответа, конец — `time.streamed` сообщения. Выполнение тулов не считается. - **Расход за сегодня / 7 дней / 30 дней / всё время**, по проекту или по всем проектам, плюс топ моделей (со скоростью генерации и временем на шаг). Над таблицей — график с выбором периода: сегодня по часам, 7 и 30 дней по дням, всё время по дням или по неделям, если история длиннее 90 дней. Столбики разбиты по типу токенов (Cache / Input / Output) или по моделям (топ-4 + «другие»). Каждый раздел сворачивается кликом по заголовку; какие свёрнуты — запоминается в браузере (`localStorage`). Данные обновляются раз в 3 секунды, пока вкладка выбрана, % на кнопке — раз в 10 секунд. ## Как устроено У веб-интерфейса OpenCode нет точек расширения: он зашит в бинарник, слоты для плагинов есть только в TUI, а своих HTTP-маршрутов серверный плагин добавить не может. Поэтому плагин `context-panel.v2.ts` поднимает внутри процесса OpenCode прокси (`server.mjs`) на отдельном порту. Прокси пропускает HTTP, SSE и WebSocket как есть, а в HTML-страницы вставляет `