server-monitor-manager/agents/hermes/notes/salvage-2026-08-18/hermes-desktop-attachments/desktop-attachments/a3-control-plane-runtime-2.md
Ochenstarik 23eb3f5233 chore(agents): разбор рабочих папок с диска на 2026-08-18
Задания, отчёты и патчи, лежавшие в C:\Users\Ochenstarik\projects и в
домашней папке, перенесены в agents/. Разложено по агентам там, где имя
файла позволяло определить автора; остальное — в _salvage-2026-08-18/
и разбирается вручную.

Патчи в notes/salvage-2026-08-18/ — незакоммиченная работа из брошенных
рабочих копий: она существовала только на диске.

Тяжёлое (релизные архивы, инсталляторы, наборы данных) в репозиторий не
попало: оно лежит рядом, в Agent_projects/_archive и Agent_projects/_data.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-18 14:19:54 +07:00

3.2 KiB
Raw Blame History

Правила работы: прочитай C:\Users\Ochenstarik\kagent-tasks\hermes-work-protocol.md.

Файлы: services/control-plane/src/main.ts, services/control-plane/src/auth.ts, при необходимости services/control-plane/package.json. Тесты в этой задаче не пишутся — они в задаче A4.

Дефект 1: сервис не стартует

В main.ts логгер сконфигурирован с transport.target: "pino-pretty", а пакета pino-pretty нет в зависимостях. Fastify падает при инициализации.

Предпочтительное решение: убрать transport и оставить структурный JSON-вывод. В контейнере человекочитаемый вывод не нужен, а зависимость попадёт в образ. Если выберешь добавить pino-pretty в devDependencies и включать транспорт только вне продакшена — обоснуй в отчёте.

Дефект 2: регистрация и вход не работают

В auth.ts функция pbkdf2 получает модуль через require("node:crypto"). Пакет объявлен как "type": "module", поэтому require не определён и вызов бросает ReferenceError при каждом хешировании пароля. То есть POST /v1/auth/register и POST /v1/auth/login не работают вообще.

В первой строке файла уже есть статический импорт import { randomBytes, createHash, timingSafeEqual } from "node:crypto". Добавь в него pbkdf2 и убери динамическое получение модуля.

Дефект 3: испорченный хеш даёт 500 вместо 401

verifyPassword разбирает хранимую строку через split(":") и передаёт результат в timingSafeEqual, который бросает исключение при разной длине буферов. Испорченное или устаревшее значение в базе превращается в 500.

Разбор должен проверять формат и возвращать false, а не бросать исключение. Сравнение остаётся постоянного времени.

Критерий приёмки

pnpm --filter @kagent/control-plane typecheck

Проходит без ошибок при включённых strict, noUncheckedIndexedAccess, exactOptionalPropertyTypes. Тип any не использовать.

Сервис запускается: pnpm --filter @kagent/control-plane dev поднимается и отвечает на GET /health/live. Если PostgreSQL недоступен — это ожидаемо на данном этапе, важно, что процесс не падает при старте. Вывод приложить к отчёту.

Изменения зависимостей перечислить отдельно с указанием лицензии.