Юнифай Консалт, команда экспертов Николая Епифанова Обсудить задачу
← Все материалы

Личная практикаСтатья

Как отслеживать лимиты двух учёток Codex на Stream Deck на одном ПК

Если вам не хватает максимального лимита x20 на одном аккаунте Codex и вы хотите распараллелить работу над одним проектом на несколько аккаунтов Codex на одном ПК, это вполне можно сделать через несколько учётных записей Windows. В моём случае для работы над одним конкретным ресурсоёмким проектом я использую два выделенных аккаунта x20. Но возникает вопрос: как отслеживать статус задач во втором аккаунте и его лимиты «на лету»?

Рабочий профиль Stream Deck с индикаторами состояния Codex
Рабочий профиль Stream Deck с двумя индикаторами недельного лимита Codex и статусом выполнения задач

Видеть состояние без переключения учётной записи Windows

Проекты распределены между двумя учётными записями Windows, и в каждой работает своя подписка Codex и своя копия репозитория. Подобное разделение помогает контролировать контекст и нагрузку, но добавляет повторяющуюся проверку: завершилась ли задача во второй сессии и сколько недельного лимита там осталось?

Панель должна отвечать на четыре вопроса:

  1. Завершилась ли задача во втором аккаунте?
  2. Сколько недельного лимита осталось на каждом аккаунте?
  3. Когда сбросится окно лимита?
  4. Насколько свежие данные отображаются на кнопке?

Основной контур не получает тексты промптов, ответы и локальные файлы второй учётной записи. Для индикатора достаточно агрегированного состояния.

Архитектура решения

Сборщик запускается внутри каждой Windows-сессии и читает локальные структурированные события. Во второй учётной записи bridge-процесс превращает их в небольшой JSON-снимок, а Dashboard writer проверяет оба снимка и готовит состояние кнопок Stream Deck.

Граница решения

Это локальная интеграция, а не официальный публичный API Codex. Формат событий может измениться, поэтому парсер и набор проверок требуют небольшой кастомной разработки.

Минимальный контракт данных

Снимок хранит только поля, которые нужны для интерфейса, значения в примере синтетические.

{
  "account": "work",
  "limitId": "codex",
  "weeklyRemainingPercent": 69,
  "resetAt": 1786400000,
  "status": "ACTIVE",
  "activeTasks": 1,
  "eventAt": 1786399000,
  "publishedAt": 1786399005,
  "health": "OK"
}

Поле limitId защищает от случайного чтения другого лимита. eventAt показывает время последнего события, а publishedAt помогает определить, не остановился ли bridge.

Интерфейс не должен начать показывать неверные данные

Каждый снимок проходит проверку до отрисовки:

  • имя учётной записи совпадает с ожидаемым;
  • limitId равен codex;
  • процент находится в диапазоне от 0 до 100;
  • время сброса содержит корректную временную метку;
  • возраст снимка не превышает 15 минут;
  • число активных задач неотрицательное.

Если проверка не пройдена, кнопка становится серой и показывает N/A. Последнее успешное значение не маскируется под свежее.

Три состояния, которые быстро считываются

Активно

В учётной записи есть хотя бы одна незавершённая задача.

Свободно

Открытых выполнений нет, можно запускать следующую задачу.

Нет данных

Снимок устарел, повреждён или не прошёл проверку.

Событие начала задачи открывает выполнение, а события завершения и прерывания закрывают его. Если одновременно работают несколько задач, то кнопка сохраняет общий статус, а поле activeTasks хранит их количество.

Разная частота обновления и самовосстановление

Лимит меняется небыстро, поэтому обычный интервал опроса составляет пять минут. Возле нуля, при временной недоступности источника и около времени сброса интервал сокращается до 30 секунд, а активность задач проверяется раз в пять секунд.

Сборщик читает хвост изменившихся файлов и хранит небольшой кэш. Снимки записываются атомарно, то есть временный файл заменяет предыдущий только после полной записи. Процессы запускаются через Планировщик заданий Windows и контролируются heartbeat-проверкой.

Негативные сценарии входят в обязательную проверку, включая повреждённый JSON, остановленный bridge, устаревший снимок, смену недельного окна, несколько параллельных задач и прерванное выполнение.

Нет необходимости переключаться между учётными записями Windows

Stream Deck убрал постоянные переходы во вторую Windows-сессию ради одной проверки завершённой задачи или лимита.

Этот принцип переносится на другие рабочие процессы. Если пользователь регулярно открывает систему только ради одного состояния, это состояние стоит вынести в отдельный постоянно видимый индикатор.

Разберём рабочий процесс и найдём подходящую точку автоматизации

Определим, где достаточно небольшого инструмента, а где нужен полноценный цифровой продукт.

Обсудить задачу