Агентный слой
Агентный слой
Пятнадцать компонентов, и все они про одно: показать человеку работу машины, которая идёт прямо сейчас. Отсюда и различия — не в виде, а в том, что именно показывается: единица работы, её вывод, её время или её цена.
| единица | форма | |
|---|---|---|
| Прогон | фаза, попытка, шард | счётные точки |
| Строка очереди | задача | плоская строка, их сотни |
| Шаг | вызов инструмента | раскрывается, внутри вывод |
| Лог | строка от машины | поток с уровнем и временем |
| Диф | правка в файле | две стороны |
| Дорожки | исполнитель | отрезки на общей оси |
| История | попытка с исходом | ряд равных событий |
| Бюджет | ресурс с лимитом | расход против предела |
| Дерево | узел | иерархия неизвестной глубины |
| Согласование | решение человека | остаётся в потоке |
| Отказ | сбой | причина и повтор |
Сравнение стоит здесь, а не на страницах: «возьмите другое» — это утверждение о СОСЕДЯХ, и повторённое пятнадцать раз оно расходится с ними по одной строке за правку.
Что показать
| Что нужно | Возьмите | Почему не соседа |
|---|---|---|
| Задачи списком, их сотни, у каждой состояние | Очередь | Строка плоская: у шага есть тело, и на сотне строк оно не читается |
| Вызов инструмента со входом и выводом | Шаг | В очереди вывода нет, а сворачивать нечего |
| Однородный поток строк от машины | Лог | У шагов тело, у ленты разный состав |
| Что агент изменил в файле | Диф | Диф без изменений — это просто код |
| Параллельных исполнителей на общей оси | Дорожки | У очереди нет оси времени |
| Ряд равных попыток с исходом | Историю | У спарклайна важно значение, а не исход |
| Расход против явного лимита | Бюджет | У метрики нет предела, у меры нет прогноза исчерпания |
| Счётные единицы работы: фазы, шарды | Прогон | Пятьдесят точек глазом не считаются — там нужна мера с числом |
| Иерархию неизвестной глубины | Дерево | Дерево на одном уровне — это список с лишними ролями |
| Один шаг обмена, который держит всё перечисленное | Реплику | Строка очереди плоская, а шаг — один вызов: ответа не держит ни то ни другое |
| Черновик, который машина сделала перед ответом | Размышление | Шаг это вызов с результатом, который может провалиться; здесь статуса нет вовсе |
| Поле, в котором пишут следующую реплику | Поле ввода | Поле рядом с панелью инструментов — два объекта, и фокус подсвечивает половину одного |
Что делать, когда работа встала
| Что случилось | Возьмите | Почему не соседа |
|---|---|---|
| Агент ждёт разрешения продолжить | Согласование | Модалка блокирует всё остальное, а решение здесь часть ленты |
| Агент упал | Отказ | В согласовании нет причины и того, что уже пробовали |
| Решение обязано быть принято немедленно | модалка | Согласование остаётся в потоке и ждёт |
| Сообщение без выбора | баннер с тоном warn |
У согласования есть варианты, и они перечислимы |
Когда ни один не подходит
| Что нужно | Возьмите | Почему не отсюда |
|---|---|---|
| Именованные шаги, известные наперёд | шаги мастера | Там конечная последовательность, здесь состав приходит из работы |
| События с разным составом | ленту | У лога однородные строки и колонки |
| Непрерывную величину | меру | Прогон считает единицы, а не проценты |
| Сравнение записей по полям | таблицу | Дерево про структуру, а не про сравнение |
| Свойства одного объекта | список свойств | У дерева узлы раскрываются, у свойств нечего раскрывать |
Общее для всех двенадцати
Состояние живёт в data-state, а не в классе. Словарь закрытый: значение
вне его не даёт ошибки нигде — оно просто ничего не делает, и потому
сторожится реестром.
Бесконечное движение означает «идёт». Пульсирующая точка, вращающееся
кольцо, бегущая каретка — всё это при prefers-reduced-motion замедляется, но
не останавливается: остановленный индикатор сообщает «ничего не происходит»
ровно тогда, когда происходит.
Узлы приходят во время работы. Строки очереди, шаги и узлы дерева
появляются по одной, поэтому instrument.js работает делегированием и следит
за появлением групп наблюдателем — подробнее.
Почему кит устроен именно так — конституция · Открытый код под MIT, github.com/keshon/instrument