RUGitHubInstall

Trace пишет ядро, показывает плагин

Владелец хочет видеть ход целиком: как сообщение идёт через Bridge, Inbound pipeline, Gate, контекст, шаги модели, тулы, память, субагентов, Outbox и обратно в Telegram — живьём и повтором. Это первый плагин Ивы и первый потребитель рельсов ADR-0009.

Что решено

Журнал хода (Trace) — в ядре. data/trace/YYYY-MM-DD.jsonl, append-only, одна строка = событие {ts, turn, session, kind, name, data}. Пишут два места: хук agent/hooks/trace.ts (все события eve: turn.*, step.*, actions.requested, action.result, subagent.*, message.*, reasoning.*) и швы Ивы — Bridge принял апдейт, Inbound pipeline (allowlist, вердикт Gate, сборка контекста), Outbox (доставка, outbound-Gate). Ночные ходы пишутся так же. Почему ядро: швы Ивы видит только Ива, а плагин видит только eve; и это доставка/безопасность — территория кода (philosophy §2). Второй потребитель журнала — iva trace tail|show|open, поэтому это механизм, а не функция (philosophy §5).

Содержимое пишем, с потолком. Аргументы и результаты тулов, текст модели — да, каждое поле обрезано по лимиту, как CONTENT_ATTRIBUTE_LIMIT у eve. Тумблер captureContent, по умолчанию включён: вьюер локальный, владелец один. Хранение 14 дней, чистка по дате в имени файла, не по mtime.

Вьюер — плагин trace, отдельный сервис. plugin.json + skills/trace/ (как читать журнал, как открыть вьюер) + sh.iva/services/viewer — node http + SSE, читает data/trace/, слушает 127.0.0.1. Юнит генерит Ива по рельсам ADR-0009. Отдельный процесс переживает рестарт агента, показывает «агент перезапускается» и не грузит процесс модели. eve Extension плагину не нужен.

Доступ — только SSH-туннель. Наружу ничего; iva trace open печатает готовую ssh -N -L. Трейс — личные данные, auth = SSH-ключ.

Ввода на странице нет. Пишешь в Telegram, смотришь на странице. Вход внутрь остаётся один — Inbound pipeline; веб-чат через eve-канал обошёл бы allowlist и Gate.

Страница — один HTML-файл без сборки. Схема Ивы с подсветкой узлов и рёбер по событиям, справа лента хода чипами, сверху равные плитки за период (без «hero»-цифры, решение владельца). У каждого хода кнопка «Повторить»: события проигрываются заново с реальными интервалами и ускоренно — владелец переключается с Telegram на браузер и успевает не всегда. Планка для критиков — референсный скриншот дашборда Waku.

Что отвергнуто

Пересмотрено 06.10.2026. Поле содержимого — до 4096 знаков: входящее сообщение Telegram ложится целиком. Строка, не влезшая в 16 КБ, сначала пересобирается с полями по 2000 знаков и только потом теряет содержимое, поэтому ни одно событие не теряет больше, чем раньше; атомарность одной записи не меняется. Результат инструмента пишется одной строкой JSON: вложенность не съедает выдачу, а размер строки держит одно поле. Хук ставит failure — класс сбоя без текста — и exitCode; у bash хранится конец вывода, там стоит ошибка. Чатовый ход склеивается по паре «сессия + turn», имя хода — <session>/<turn>. Хранение 30 дней: сравнить можно с прошлым месяцем. Откат на версию до этой правки дочищает журнал до 14 дней — это диагностика, а не данные владельца из ADR-0002. Отвергнуто: строка больше 16 КБ (атомарность больших записей не проверена) и результаты в отдельных файлах (ломают «один файл на день» и всех читателей).

Статус: решение принято 17.08.2026, реализация — вместе с волной «плагины».

View original Markdown ↗