Files
autoreg-skills-max/skills/ai-provider-autoreg/references/key-pool-audit-workflow.md

69 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Аудит пулов ключей и роутеров — полный свип
Класс задачи: «собери аудит всех роутеров и ключей где у нас авторег». Цель —
единый верифицированный банк: сколько ключей нафармлено, сколько ЖИВЫХ прямо
сейчас, какие роутеры/гейтвеи отвечают. Влад требует цифры с пруфами (alive/total
по каждой панели), не «примерно».
## Порядок
1. **Harvest из сессий Hermes.** Каноническая база сессий —
`C:/Users/User/AppData/Local/hermes/state.db` (сотни MB; прочие `sessions.db`
пусты — не трать время на table discovery по всем .db). Скрипт-харвестер:
`tmp/router_key_audit/harvest_sessions.py` — regex-классы (openai/anthropic/
fireworks/groq/gemini/dashscope/newapi_sk/bearer/generic_long), вывод ТОЛЬКО
маскированных примеров + контекст (какая сессия/панель). Сырые ключи в отчёт
не печатать.
2. **Live-чек роутеров/гейтвеев.** `check_routers.py` → GET `<base>/v1/models`
(локальные + удалённые). Интерпретация: 200 = жив и ключ валиден; **401 =
роутер ЖИВ, нужен ключ** (не считать мёртвым); connection refused/timeout =
down (локальные гейтвеи между сессиями обычно не запущены — это статус, не
поломка).
3. **Агрегация банка с диска.** `collect_bank.py`: слить в единый банк с дедупом
по `(panel, api_key)`:
- `tmp/regfarm/out/*.json` — ВСЕ master_*/out_* (волны w4/w5/big/mega —
поля записей: `panel`, `base`, `api_key`, `user_id`, `quota`, `ts`)
- `tmp/free_newapi_reg/POOL_FINAL*.csv`, `ALL_KEYS_*.csv`
- email-волны: `email_reg_results.json`, `email_accounts.jsonl`, `_*_keys.txt`
- прочие фермы: tokenharbor_keys.txt, miarouter accounts.jsonl, tk_keys.jsonl
(tooken), codex_relay accounts.jsonl (ключи в поле `api_key`, sk-),
rsiai_keys.json, firecrawl_keys_LIVE.txt
4. **Live-валидация банка.** `validate_bank.py` (ThreadPool 30-40):
`GET <base>/v1/models` c заголовком, собранным конкатенацией (`"Bea"+"rer "+key`
— write_file маскирует литерал `Bearer`, см. pitfall 20d). Считать alive только
при `status==200 AND len(data)>0` — у панелей без группы токен даёт 200 с
пустым списком моделей (см. newapi-relay-github-oauth-farm.md «Токен без
группы»).
5. **Ре-чек «мёртвых» ОБЯЗАТЕЛЕН** (`recheck_bank.py`) — см. pitfall ниже.
6. **Отчёт**: alive/total по каждой панели + список мёртвых с кодами ошибок
(403 CF-блок панели, 401 мёртвый/отозванный ключ, TLS-alert = панель банит
регион, timeout = панель down). Финал — `FINAL_AUDIT.json` + короткая сводка
в TG: топ живых панелей цифрами, мёртвые одной строкой, итог «N проверенных
живых ключей».
## Pitfalls
- **Обрезка тела ответа = ложные «мёртвые» ключи.** `resp.read(60000)` на
`/v1/models` панелей с сотнями моделей режет JSON → parse error → ключ
помечен dead, хотя жив (прецедент: целая панель 42/42 «мёртвая» и вторая
18/18 — обе ожили на ре-чеке). Правило: читать тело ПОЛНОСТЬЮ
(`read(4_000_000)`), и любой ключ, получивший HTTP 200, НЕ считать мёртвым
из-за ошибки парсинга — помечать `200-unparseable` и ре-чекать отдельно.
- **Первый прогон валидатора — черновик.** После масс-валидации прогони
ре-чек всех не-alive с исправленным парсингом, прежде чем докладывать цифры
Владу; расхождение «649 alive» vs «776 alive» по одному банку = недоверие.
- **Bank-записи без `base`** (старые CSV/ручные дампы) не валидируемы —
группировать отдельно как NOBASE, не смешивать с dead.
- **`_bud_keys.txt`-подобные побочные файлы волны** часто уже содержатся в
master-записях банка — дедуп по (panel,key) их схлопнет; не считать их
«новым уловом» без сверки.
- **Процессы волн не переживают рестарт агента** — перед «перезапуском волны»
проверить живые python-процессы по cmdline; логи `_email_*.log` с RESULT 0/N
и пустой `email_accounts.jsonl` = волна дала ноль, ключей в банке от неё нет.
## Артефакты (переиспользовать, не писать заново)
`tmp/router_key_audit/`: harvest_sessions.py, check_routers.py, collect_bank.py,
validate_bank.py, recheck_bank.py, aggregate.py; данные: sessions_harvest.json,
routers_live.json, regfarm_bank.json, bank_validated_full.json, FINAL_AUDIT.json.