Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,8 @@ instances/<name>/hermes_data/ # маунт → /opt/data (~/.hermes)
- **Skills env isolation**: service-agent передаёт subprocess только переменные из `env_vars` в `skills.json` — остальные env не попадают в скилл
- **SQLite WAL**: все компоненты используют WAL mode + `journal_size_limit=1048576` (1MB); данные переживают рестарт контейнера
- **Broker sender auth**: отправитель определяется по API-ключу, не по полю body — подменить sender невозможно
- **Streaming не трекается квотой**: `quota-proxy` считает токены только из non-streaming ответов (`{"usage": {...}}`). SSE-стримы (`text/event-stream`) пропускаются — использование не учитывается
- **SSE-стримы трекаются квотой**: `quota-proxy` использует потоковый парсер `SSEUsageParser` для учёта токенов в `text/event-stream` (Anthropic `message_start`/`message_delta` и OpenAI `usage` chunks) без буферизации всего ответа в памяти (с защитой 64 KB на строку).
- **Enterprise 1000-User Scale**: поддерживаются горячая регистрация ключей без рестарта (`POST /quota/register-key`, `POST /admin/register-key`), департаментные квоты (`POST /quota/set-department-limit`), пагинация отчётов и инбоксов, широковещательная рассылка (`POST /broadcast`), массовый провижининг до 1000 инстансов с шардированием (`scripts/bulk-users.py`, `make bulk-import`, `make fleet-status`) и нагрузочный бенчмарк (`scripts/benchmark-1000-users.py`, `make benchmark-1k`). Подробности: `docs/ENTERPRISE_1000_USERS.md`.
- **Broker per-operation connections**: `broker.py` открывает/закрывает SQLite-соединение на каждую операцию (для WAL mode). `quota-proxy` наоборот — держит один `_conn` на всё время жизни
- **Memory limits**: admin = 2G, user instances = 1G (`deploy.resources.limits`)
- **Test import order**: env-переменные **ОБЯЗАТЕЛЬНО** ставить до `import` тестируемого модуля — модули читают env при импорте, не при вызове
Expand Down
15 changes: 14 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: add-user remove-user bootstrap deploy restart logs backup status quota-report quota-reset set-limit security-check monitor monitor-alerts add-service service-health service-skills install-hooks admin-overview
.PHONY: add-user remove-user bulk-import fleet-status bootstrap deploy restart logs backup status quota-report quota-reset set-limit security-check monitor monitor-alerts add-service service-health service-skills install-hooks admin-overview benchmark-1k

# ── Управление инстансами ──────────────────────────────────────────────────

Expand All @@ -18,6 +18,19 @@ bootstrap:
@bash scripts/provision-hermes-data.sh
@echo "✅ hermes_data готов"

# make bulk-import FILE=users.csv [SHARD_SIZE=100] — массовый онбординг до 1000 сотрудников
bulk-import:
@[ -n "$(FILE)" ] || (echo "❌ FILE= обязателен (CSV или JSON манифест)"; exit 1)
@python3 scripts/bulk-users.py import --file "$(FILE)" --shard-size "$${SHARD_SIZE:-100}"

# make fleet-status — сводка по парку инстансов и шардам
fleet-status:
@python3 scripts/bulk-users.py status

# make benchmark-1k — нагрузочный бенчмарк на 1000 конкурентных пользователей
benchmark-1k:
@python3 scripts/benchmark-1000-users.py

# ── Деплой ────────────────────────────────────────────────────────────────

deploy: bootstrap
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,9 @@ make status # all containers should be Up (healthy)
| Command | Description |
|---|---|
| `make add-user NAME=x BOT_TOKEN=y TG_ID=z` | Onboard a new employee |
| `make bulk-import FILE=users.csv [SHARD_SIZE=100]` | Bulk-onboard up to 1,000 employees with Compose shard profiles |
| `make fleet-status` | Fleet integrity summary and shard distribution |
| `make benchmark-1k` | Run 1,000-concurrent-user load benchmark (`quota-proxy` + `broker`) |
| `make remove-user NAME=x` | Remove instance (archives workspace to `backups/` first) |
| `make bootstrap` | Provision `hermes_data/` (`.env`, `config.yaml`, `SOUL.md`, permissions) for instances |
| `make deploy` | Run `bootstrap`, then start / rebuild all containers |
Expand Down Expand Up @@ -436,6 +439,7 @@ CortexForge/
│ ├── add-service.sh # add service-agent replica
│ └── backup.sh # workspace backup (tar.gz per instance)
├── docs/
│ ├── ENTERPRISE_1000_USERS.md # 1000-user scale architecture, sharding, SSE quotas, bulk provisioning
│ ├── SETUP.md # server installation guide
│ ├── ONBOARDING.md # employee onboarding guide
│ ├── PERSONAS.md # persona creation guide
Expand Down
4 changes: 4 additions & 0 deletions README.ru.md
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,9 @@ make status # все контейнеры должны быть Up (healthy)
| Команда | Описание |
|---|---|
| `make add-user NAME=x BOT_TOKEN=y TG_ID=z` | Онбординг нового сотрудника |
| `make bulk-import FILE=users.csv [SHARD_SIZE=100]` | Массовый онбординг до 1000 сотрудников с шардированием Compose |
| `make fleet-status` | Сводка целостности парка инстансов и распределения по шардам |
| `make benchmark-1k` | Нагрузочный бенчмарк на 1000 конкурентных пользователей (`quota-proxy` + `broker`) |
| `make remove-user NAME=x` | Удалить инстанс (сначала архивирует воркспейс в `backups/`) |
| `make bootstrap` | Подготовить `hermes_data/` (`.env`, `config.yaml`, `SOUL.md`, права) для инстансов |
| `make deploy` | Выполнить `bootstrap`, затем запустить / пересобрать все контейнеры |
Expand Down Expand Up @@ -434,6 +437,7 @@ CortexForge/
│ ├── add-service.sh # добавить реплику service-agent
│ └── backup.sh # бэкап воркспейсов (tar.gz на инстанс)
├── docs/
│ ├── ENTERPRISE_1000_USERS.md # архитектура на 1000 пользователей, шардирование, SSE-квоты, bulk-users
│ ├── SETUP.md # руководство по установке на сервер
│ ├── ONBOARDING.md # руководство по онбордингу сотрудника
│ ├── PERSONAS.md # руководство по созданию персонажей
Expand Down
Loading
Loading