izteamslots 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ # [1.7.0](https://github.com/izzzzzi/izTeamSlots/compare/v1.6.1...v1.7.0) (2026-03-07)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * remove unused variable to satisfy ruff F841 ([e5cfb77](https://github.com/izzzzzi/izTeamSlots/commit/e5cfb773e4449037aa96f7f940c22cd7eb78ecdc))
7
+
8
+
9
+ ### Features
10
+
11
+ * add Codex account switcher with auto-rotation ([70c8953](https://github.com/izzzzzi/izTeamSlots/commit/70c8953a6cde92127a17a5ea220bd8476bbc3447))
12
+
13
+ ## [1.6.1](https://github.com/izzzzzi/izTeamSlots/compare/v1.6.0...v1.6.1) (2026-03-07)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * **ci:** install python deps before unit tests ([5c57d2a](https://github.com/izzzzzi/izTeamSlots/commit/5c57d2a5c9f22ed667d9cbdedacb69c465d136ba))
19
+
1
20
  # [1.6.0](https://github.com/izzzzzi/izTeamSlots/compare/v1.5.5...v1.6.0) (2026-03-06)
2
21
 
3
22
 
package/CONTRIBUTING.md CHANGED
@@ -42,19 +42,30 @@ izTeamSlots/
42
42
  └── .github/workflows/ # CI/CD
43
43
  ```
44
44
 
45
- ## Линтеры
45
+ ## Проверки и тесты
46
46
 
47
47
  Перед коммитом убедитесь что код проходит проверки:
48
48
 
49
49
  ```bash
50
- # Python — ruff
51
- ruff check backend/
50
+ # Python — lint + unit tests
51
+ ruff check backend tests
52
+ python -m unittest discover -s tests -p 'test_*.py'
52
53
 
53
- # TypeScript — tsc
54
- npm run typecheck:ui
54
+ # TypeScript — typecheck + unit tests
55
+ npm --prefix ui run typecheck
56
+ npm --prefix ui run test
55
57
  ```
56
58
 
57
- CI автоматически запускает оба линтера на каждый push и PR.
59
+ CI автоматически запускает эти проверки на каждый PR.
60
+
61
+ ## Требование по тестам
62
+
63
+ - Любая новая функциональность или заметное изменение логики должно сопровождаться тестами.
64
+ - Минимум: покрывайте тот слой, который можно проверить локально без браузерного e2e.
65
+ - Для Python-логики добавляйте `unittest`-тесты в `tests/`.
66
+ - Для чистой TypeScript-логики добавляйте тесты в `ui/tests/`.
67
+ - Если изменение нельзя адекватно покрыть unit-тестом, это нужно явно отметить в описании PR.
68
+ - PR без тестов для новой логики может быть отклонён.
58
69
 
59
70
  ## Conventional Commits
60
71
 
@@ -100,8 +111,9 @@ chore: update seleniumbase to 4.33
100
111
 
101
112
  1. Один PR — одно логическое изменение.
102
113
  2. Следуйте Conventional Commits.
103
- 3. Убедитесь что `ruff check` и `tsc --noEmit` проходят.
104
- 4. Обновите документацию если изменение затрагивает пользовательское поведение.
114
+ 3. Добавьте или обновите тесты, если меняется логика приложения.
115
+ 4. Убедитесь что lint, unit tests и typecheck проходят локально.
116
+ 5. Обновите документацию если изменение затрагивает пользовательское поведение.
105
117
 
106
118
  ### Новый почтовый провайдер
107
119
 
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # izTeamSlots
4
4
 
5
- **Менеджер ChatGPT Team слотов с авто-регистрацией через временную почту и обновлением Codex-сессий**
5
+ **Локальный менеджер ChatGPT Team слотов: админы, инвайты, регистрация, перелогин и Codex-сессии**
6
6
 
7
7
  [![CI](https://github.com/izzzzzi/izTeamSlots/actions/workflows/ci.yml/badge.svg)](https://github.com/izzzzzi/izTeamSlots/actions/workflows/ci.yml)
8
8
  [![Release](https://github.com/izzzzzi/izTeamSlots/actions/workflows/release.yml/badge.svg)](https://github.com/izzzzzi/izTeamSlots/actions/workflows/release.yml)
@@ -18,111 +18,53 @@
18
18
 
19
19
  </div>
20
20
 
21
- ---
22
-
23
- ## Обзор
24
-
25
- **izTeamSlots** — локальное приложение с архитектурой:
26
-
27
- - **Python backend** (бизнес-логика, браузерная автоматизация, storage);
28
- - **TypeScript OpenTUI frontend** (терминальный интерфейс оператора).
29
-
30
- ---
31
-
32
- ## Возможности
33
-
34
- - Управление админами: добавить, перелогинить, удалить, открыть браузерный профиль.
35
- - Пайплайн слотов: `создать почту -> инвайт -> регистрация -> OAuth-логин`.
36
- - Перелогин слотов: одного выбранного или всех по очереди.
37
- - Codex-файлы: авто-сохранение `codex-<email>-Team.json` в аккаунт и в `./codex/`.
38
- - Doctor-проверка: валидация/восстановление файловой структуры аккаунтов при старте.
39
- ---
40
-
41
- ## Структура проекта
42
-
43
- ```text
44
- izTeamSlots/
45
- ├── bin/ # CLI-бинарники
46
- │ └── izteamslots.mjs # Кроссплатформенный entrypoint (Node.js)
47
- ├── scripts/ # Установочные скрипты
48
- │ ├── setup.mjs # Диспетчер: выбирает .sh или .cmd
49
- │ ├── setup.sh # Unix: uv + venv + Bun
50
- │ └── setup.cmd # Windows: uv + venv + Bun
51
- ├── backend/ # Весь Python-бэкенд
52
- │ ├── __init__.py # PROJECT_ROOT
53
- │ ├── __main__.py # python -m backend
54
- │ ├── account_store.py # CRUD аккаунтов (JSON storage)
55
- │ ├── mail/ # Почтовые провайдеры (плагины)
56
- │ │ ├── __init__.py # Фабрики: create_provider, create_slot_provider
57
- │ │ ├── base.py # MailProvider ABC, Mailbox, Mail, Inbox
58
- │ │ ├── boomlify.py # Boomlify Temp Mail API
59
- │ │ ├── trickads.py # trickadsagencyltd.com temp mail
60
- │ │ └── imap.py # Любой IMAP-сервер
61
- │ ├── openai_web_auth.py # Браузерная автоматизация (SeleniumBase)
62
- │ ├── chatgpt_workspace_api.py # ChatGPT Workspace API через браузер
63
- │ ├── slot_orchestrator.py # Оркестратор пайплайна слотов
64
- │ ├── dto.py # DTO для UI
65
- │ ├── file_logger.py # Логирование в файл
66
- │ ├── jobs.py # Задачи в потоках
67
- │ ├── rpc_protocol.py # JSON-RPC протокол
68
- │ ├── rpc_server.py # RPC-сервер (stdio)
69
- │ └── ui_facade.py # Фасад между RPC и бизнес-логикой
70
- ├── ui/ # TypeScript TUI (OpenTUI)
71
- │ ├── package.json
72
- │ └── src/
73
- │ ├── main.ts # Entrypoint UI
74
- │ ├── screens/MainScreen.ts # Главный экран
75
- │ ├── transport/stdioClient.ts # JSON-RPC клиент
76
- │ └── menus/ # Меню, таблицы, форматирование
77
- ├── requirements.txt # Python-зависимости
78
- ├── ruff.toml # Конфиг линтера Python
79
- ├── LICENSE # MIT
80
- └── README.md
81
- ```
82
-
83
- ---
84
-
85
- ## Установка
86
-
87
- ### npm (рекомендуется)
21
+ ## Quick Start
88
22
 
89
23
  ```bash
90
- npm cache clean --force && npm install -g izteamslots@latest
24
+ npm install -g izteamslots@latest
25
+ izteamslots
91
26
  ```
92
27
 
93
- Установщик автоматически поставит Python-зависимости (через [uv](https://docs.astral.sh/uv/)), [Bun](https://bun.sh) и всё остальное.
28
+ Дальше:
29
+ 1. Откройте `Настройки` и задайте почтовый провайдер / API-ключ.
30
+ 2. Добавьте админа через ручной вход в браузере.
31
+ 3. Запустите создание слотов.
94
32
 
95
- > Chrome и chromedriver скачиваются автоматически при первом запуске через SeleniumBase.
33
+ ## Что умеет
96
34
 
97
- ### Где лежат данные после `npm install -g`
35
+ - Добавление и ручной перелогин админов.
36
+ - Создание слотов: `почта -> инвайт -> регистрация -> OAuth`.
37
+ - Перелогин одного слота или всех сразу.
38
+ - Сохранение `codex-<email>-Team.json`.
39
+ - Логи, локальные browser profiles и doctor-проверка.
40
+ - Синхронизация workspace с локальными слотами.
98
41
 
99
- При глобальной установке runtime-данные сохраняются не в папку пакета, а в пользовательскую директорию `~/.izteamslots`.
42
+ ## Ограничения
100
43
 
101
- - `codex/`:
102
- - Windows: `C:\Users\<USER>\.izteamslots\codex`
103
- - macOS / Linux: `~/.izteamslots/codex`
104
- - `.env`:
105
- - Windows: `C:\Users\<USER>\.izteamslots\.env`
106
- - macOS / Linux: `~/.izteamslots/.env`
107
- - аккаунты и профили браузера:
108
- - Windows: `C:\Users\<USER>\.izteamslots\accounts`
109
- - macOS / Linux: `~/.izteamslots/accounts`
44
+ - Вход админа сейчас поддерживается только в ручном режиме.
45
+ - Проект зависит от текущего web UI OpenAI / ChatGPT.
46
+ - Браузерная автоматизация может ломаться после изменений на стороне сайта.
47
+ - Токены, профили браузера и `codex` хранятся локально.
48
+ - Основные платформы: macOS и Windows.
110
49
 
111
- Если вы обновляете старую версию, `codex`-файлы могут временно лежать ещё и внутри директории пакета. В актуальной версии основным путём считается именно `~/.izteamslots`.
50
+ ## Где лежат данные
112
51
 
113
- ### Из исходников
52
+ При глобальной установке данные сохраняются в `~/.izteamslots`.
114
53
 
115
- ```bash
116
- git clone https://github.com/izzzzzi/izTeamSlots.git
117
- cd izTeamSlots
118
- npm install
119
- ```
54
+ - `accounts/` — аккаунты и browser profiles
55
+ - `codex/` — сохранённые codex-файлы
56
+ - `logs/` — app/job logs
57
+ - `.env` — локальные настройки
120
58
 
121
- ### Настройка
59
+ Примеры:
60
+ - Windows: `C:\Users\<USER>\.izteamslots`
61
+ - macOS / Linux: `~/.izteamslots`
122
62
 
123
- API-ключи и провайдеры почты настраиваются прямо в приложении через меню **«Настройки»**. Значения сохраняются в `~/.izteamslots/.env`.
63
+ Если вы обновляете старую версию, `codex`-файлы могут временно лежать ещё и внутри директории пакета. В актуальной версии основным путём считается именно `~/.izteamslots`.
124
64
 
125
- Альтернативно — создайте файл вручную:
65
+ ## Настройка
66
+
67
+ Настройки можно задать через меню `Настройки` внутри приложения или вручную через `~/.izteamslots/.env`.
126
68
 
127
69
  ```bash
128
70
  # Linux / macOS
@@ -134,122 +76,25 @@ mkdir "$env:USERPROFILE\.izteamslots" -Force
134
76
  echo "BOOMLIFY_API_KEY=your_api_key" > "$env:USERPROFILE\.izteamslots\.env"
135
77
  ```
136
78
 
137
- Конфиг загружается в порядке приоритета: `~/.izteamslots/.env` > `./.env` > встроенный.
138
-
139
79
  | Переменная | По умолчанию | Описание |
140
80
  |-----------|:------------:|----------|
141
- | `BOOMLIFY_API_KEY` | — | API-ключ Boomlify (обязательно для слотов) |
142
- | `BOOMLIFY_DOMAIN` | авто | Домен для временных почт |
81
+ | `BOOMLIFY_API_KEY` | — | API-ключ Boomlify |
82
+ | `BOOMLIFY_DOMAIN` | авто | Домен временных почт |
143
83
  | `BOOMLIFY_TIME` | `permanent` | Время жизни ящика |
144
84
  | `SLOT_MAIL_PROVIDER` | `boomlify` | Провайдер почты для слотов |
145
85
  | `MAIL_PROVIDER` | `trickads` | Провайдер почты для админов |
146
86
 
147
- ## Запуск
148
-
149
- ```bash
150
- izteamslots
151
- ```
152
-
153
- Из исходников: `npm start`
154
-
155
- Это запустит OpenTUI frontend через **Bun**, который поднимет Python RPC backend (`python -m backend`) по `stdio`.
156
-
157
- ---
158
-
159
- ## Архитектура
160
-
161
- ```mermaid
162
- flowchart TD
163
- A[izteamslots CLI] -->|bun| B[ui/src/main.ts]
164
- B --> C[MainScreen.ts]
165
- C --> D[StdioRpcClient]
166
- D -->|spawns + stdio JSON-RPC| E[python -m backend]
167
- E --> F[RPCServer]
168
- F --> G[UIFacade]
169
- G --> H[AccountStore]
170
- G --> I[SlotManager]
171
- I --> J[openai_web_auth]
172
- I --> K[chatgpt_workspace_api]
173
- I --> L[Mail Providers]
174
- ```
175
-
176
- ## Почтовые провайдеры (плагины)
177
-
178
- Система почты построена на плагинах — абстрактный класс `MailProvider` и конкретные реализации.
179
-
180
- ```mermaid
181
- flowchart TD
182
- MP[MailProvider — абстрактный класс]
183
- MP --> B[BoomlifyProvider]
184
- MP --> T[TrickAdsProvider]
185
- MP --> I[IMAPProvider]
186
-
187
- CF[create_provider] -->|MAIL_PROVIDER env| MP
188
- CSP[create_slot_provider] -->|SLOT_MAIL_PROVIDER env| MP
189
- CPM[create_provider_for_mailbox] -->|по формату password| MP
190
-
191
- style MP fill:#1e3a5f,color:#fff
192
- style B fill:#1a4731,color:#fff
193
- style T fill:#1a4731,color:#fff
194
- style I fill:#1a4731,color:#fff
195
- ```
196
-
197
- ### Встроенные провайдеры
198
-
199
- | Провайдер | Модуль | Описание | Env-переменные |
200
- |-----------|--------|----------|----------------|
201
- | `boomlify` | `mail/boomlify.py` | Boomlify Temp Mail API (по умолчанию для слотов) | `BOOMLIFY_API_KEY`, `BOOMLIFY_DOMAIN`, `BOOMLIFY_TIME` |
202
- | `trickads` | `mail/trickads.py` | trickadsagencyltd.com temp mail (по умолчанию для админов) | — |
203
- | `imap` | `mail/imap.py` | Любой IMAP-сервер | `IMAP_HOST`, `IMAP_PORT`, `IMAP_SSL`, `IMAP_FOLDER` |
204
-
205
- ### Фабричные функции
206
-
207
- - `create_provider(name)` — создаёт провайдер по имени (или `MAIL_PROVIDER` env, по умолчанию `trickads`)
208
- - `create_slot_provider(name)` — для слотов (`SLOT_MAIL_PROVIDER` env, по умолчанию `boomlify`)
209
- - `create_provider_for_mailbox(mailbox)` — автоопределение по формату пароля (если `boomlify:<uuid>` → Boomlify)
210
-
211
- ### Свой провайдер
87
+ ## Почтовые провайдеры
212
88
 
213
- Наследуйте `MailProvider` из `backend/mail/base.py` и реализуйте два метода:
214
-
215
- ```python
216
- from backend.mail.base import MailProvider, Mailbox, Inbox
217
-
218
- class MyProvider(MailProvider):
219
- name = "my_provider"
220
-
221
- def generate(self) -> Mailbox:
222
- # создать временный ящик, вернуть Mailbox(email, password)
223
- ...
224
-
225
- def inbox(self, mailbox: Mailbox) -> Inbox:
226
- # получить письма, вернуть Inbox(email, messages=[Mail(...), ...])
227
- ...
228
- ```
229
-
230
- ---
231
-
232
- ## Пайплайн слотов
233
-
234
- ```mermaid
235
- flowchart TD
236
- S1[Создать временную почту] --> S2[Отправить инвайт через API]
237
- S2 --> S3[Ожидать письмо с инвайт-ссылкой]
238
- S3 --> S4[Регистрация по ссылке в браузере]
239
- S4 --> S5[Ввод email / пароль / код подтверждения]
240
- S5 --> S6[Заполнение имени и даты рождения]
241
- S6 --> S7[Закрыть браузер регистрации]
242
- S7 --> S8[OAuth PKCE логин]
243
- S8 --> S9[Сохранить access_token и codex-файл]
244
-
245
- style S1 fill:#1e3a5f,color:#fff
246
- style S9 fill:#1a4731,color:#fff
247
- ```
89
+ - В проект уже встроены `boomlify`, `trickads` и `imap`.
90
+ - Можно добавлять собственные почтовые провайдеры.
91
+ - Для этого нужно реализовать `MailProvider` и зарегистрировать его в backend.
248
92
 
249
- ---
93
+ Подробности: [docs/providers.md](./docs/providers.md)
250
94
 
251
- ## Важно
95
+ ## Документация
252
96
 
253
- - Проект хранит токены и браузерные профили локально на диске.
254
- - Не публикуйте папки `accounts/` и `codex/` в публичные репозитории.
255
- - Для стабильной работы перелогина у worker должен быть `openai_password`.
97
+ - [docs/providers.md](./docs/providers.md) встроенные и кастомные почтовые провайдеры
98
+ - [docs/architecture.md](./docs/architecture.md) структура проекта, архитектура и пайплайн слотов
99
+ - [docs/troubleshooting.md](./docs/troubleshooting.md) частые проблемы и способы диагностики
100
+ - [CONTRIBUTING.md](./CONTRIBUTING.md) — вклад в проект, проверки и тесты