# Codex Status Этот файл нужен как быстрый вход для следующего запуска Codex. ## Текущее состояние - Репозиторий уже не на стадии пустых заглушек: `web`, `worker`, `bot`, `cli`, `db`, `domain`, `providers` имеют рабочий runtime-код. - Архитектурные границы пока соблюдены: - бизнес-правила живут в `packages/domain` - persistence и Prisma-транзакции живут в `packages/db` - transport/integration adapters живут в `packages/providers` - `apps/*` в основном собирают transport + use cases ## Реализовано ### `packages/domain` - quota buckets `100/80/60/40/20/0` - provider-key pool policy: - round-robin selection - retry vs stop decision - cooldown / manual_review / out_of_funds transitions - configurable manual-review threshold - generation use cases: - `createGenerationRequest` - `markGenerationRequestSucceeded` - auth helpers: - email normalization/validation - password validation - password hashing/verification - session token hashing - password reset token hashing - telegram pairing helpers: - code normalization - code hashing - expiration check ### `packages/db` - Prisma schema and migration history for: - users - sessions - password reset tokens - subscriptions and plans - invoices - generation requests / attempts / assets - usage ledger - provider keys / status events / proxies - Telegram pairing / allowlist / audit log - bootstrap: - default subscription plan seed - migrate-time bootstrap entrypoint - stores: - `auth-store` - `account-store` - `billing-store` - `generation-store` - `worker-store` - `telegram-pairing-store` - `telegram-bot-store` ### `packages/providers` - simulated `nano_banana` adapter - Telegram Bot API transport - email transport - payment provider adapter for invoice creation ### `apps/web` - auth/session endpoints: - `POST /api/auth/register` - `POST /api/auth/login` - `POST /api/auth/password-reset/request` - `POST /api/auth/password-reset/confirm` - `POST /api/auth/logout` - `GET /api/auth/me` - `GET /api/auth/sessions` - `DELETE /api/auth/sessions/:id` - `POST /api/auth/logout-all` - account and billing endpoints: - `GET /api/account` - `GET /api/billing/invoices` - `POST /api/billing/invoices` - `POST /api/admin/invoices/:id/mark-paid` - generation endpoints: - `POST /api/generations` - `GET /api/generations/:id` - uses cookie-based server sessions instead of temporary `x-user-id` ### `apps/worker` - polls queued generation requests - claims one request at a time - builds provider-key attempt order - persists `GenerationAttempt` - persists generated assets - marks request `succeeded` / `failed` - consumes quota only on success - updates provider-key state and audit events - supports proxy-first then direct fallback inside one key attempt - runs cooldown recovery sweep back to `active` ### `apps/cli` - real Telegram pairing commands: - `nproxy pair [--yes]` - `nproxy pair list` - `nproxy pair revoke [--yes]` - `nproxy pair cleanup [--yes]` - mutating commands require confirmation unless `--yes` - successful mutations write audit logs ### `apps/bot` - Telegram long polling - allowlist check - pending pairing creation for unpaired users - pairing code issuance - system audit log on pairing initiation ## Проверено - `docker build -f infra/docker/web.Dockerfile .` проходит - `docker build -f infra/docker/worker.Dockerfile .` проходит - `docker build -f infra/docker/bot.Dockerfile .` проходит - `docker build -f infra/docker/cli.Dockerfile .` проходит - `docker build -f infra/docker/migrate.Dockerfile .` проходит - `docker run --env-file .env.example` ранее успешно стартовал для `web`, `worker`, `bot` - `prisma migrate deploy` ранее успешно проверялся против временного `postgres:16-alpine` ## Что уже есть как product foundation - регистрация и логин - серверные сессии в БД - password reset backend - session management backend - account overview backend - billing invoice creation backend - paid invoice -> subscription activation flow - generation request lifecycle backend - worker execution flow - Telegram admin pairing flow ## Что ещё отсутствует ### Auth / account - email verification - device metadata / session rotation - frontend account UI ### Billing - payment reconciliation worker flow - invoice expiration / cancel flow - webhook/provider callback handling - полноценный billing history / admin payment operations surface ### Generations - реальный provider HTTP adapter вместо simulated `nano_banana` - object storage upload/download path - richer request/result payloads for frontend polling ### Web product - реальный frontend: - landing - dashboard - billing pages - chat UI - admin UI ### Bot / ops - richer admin commands for allowed Telegram admins - alerts / notifications - provider health and billing events in bot output ## Следующие шаги 1. Довести billing lifecycle: - reconciliation flow - invoice expiration/cancel - webhook/provider callback handling 2. Заменить simulated image provider adapter на реальный transport adapter 3. Расширить `web` account/billing/generation API под реальный frontend 4. Добавить frontend surfaces поверх уже существующего backend 5. Расширить `bot` для operational alerts и admin commands ## Ограничения и договорённости - Не переносить бизнес-правила в `apps/*`. - Provider-specific HTTP код должен оставаться в `packages/providers`. - Сохранять разделение `GenerationRequest` и `GenerationAttempt`. - Деплой остаётся `single VPS + Docker Compose`. - User-facing quota остаётся approximate buckets only. ## Полезные файлы - `AGENTS.md` - `docs/plan/mvp-system-plan.md` - `docs/architecture/system-overview.md` - `docs/ops/deployment.md` - `docs/ops/provider-key-pool.md` - `docs/ops/telegram-pairing.md` ## Ограничение текущей среды Codex - В текущем runtime нет локальных `node`, `npm`, `pnpm`, `corepack`, `tsc` в PATH. - Проверка делалась через Docker-based builds.