Skip to Content
ДизайнTool Use SummaryЕдиный механизм отображения результатов работы инструментов

Единый механизм отображения результатов работы инструментов

Предыстория

В TUI ранее было два режима отображения результатов работы инструментов:

  • Компактный режим (Ctrl+O): сворачивал завершённые результаты инструментов в однострочную сводку
  • Обычный режим: показывал полные результаты инструментов внутри потока, что приводило к излишнему вертикальному шуму

Пользователям приходилось вручную переключаться между режимами. В большинстве случаев завершённые результаты инструментов (содержимое файлов, результаты поиска и т.д.) не добавляли ценности в ход диалога.

Дизайн

Основной принцип

Единый режим: отображение инструмента определяется его категорией, а не переключаемым пользователем режимом. Инструменты сбора информации (чтение/поиск/список) сворачиваются в сводку; инструменты модификации (правка/запись/команда/агент) всегда отображаются по отдельности с полными результатами.

Смысловая сводка (buildToolSummary)

Вместо отображения сырых имён и количества инструментов (ReadFile x 3) генерируется читаемая сводка в формате на основе количества:

СценарийВывод
Один инструментПрочитан 1 файл / Выполнена 1 команда
Несколько однотипныхПрочитано 3 файла
Смешанные типыВыполнена 1 команда, прочитано 3 файла, отредактировано 2 файла
Активный (выполняется)Чтение 1 файла (настоящее продолженное время)
ЗавершённыйПрочитан 1 файл (прошедшее время)

Категории инструментов

КатегорияОтображаемые именаГлагол прош. вр.Глагол наст. вр.Сворачиваемый
readReadFile, Read File(s)ПрочиталЧитаюДа
editEdit, NotebookEditОтредактировалРедактируюНет
writeWriteFileЗаписалЗаписываюНет
searchGrep, GlobВыполнил поискИщуДа
listListFiles, Read DirectoryПеречислилПеречисляюДа
commandShellВыполнилВыполняюНет
agentAgent, Workflow, SendMessageВыполнилВыполняюНет
other(всё остальное)ИспользовалИспользуюНет

Правила отображения

  1. Разделение по типу: инструменты делятся с помощью isCollapsibleTool() — сворачиваемые (read/search/list) отображаются одной строкой через CompactToolGroupDisplay; несворачиваемые (edit/write/command/agent/other) отображаются по отдельности через ToolMessage
  2. Группы только с памятью имеют отдельный путь отображения (значок количества чтений/записей), который имеет приоритет, но только когда все операции успешны (!hasErrorTool && every status === Success)
  3. Сворачивание результатов: только сворачиваемые инструменты со статусом Success сворачивают текстовый/ANSI вывод. Несворачиваемые инструменты (включая MCP-инструменты, WebFetch и т.д.) всегда показывают результаты. Отменённые инструменты оставляют частичный вывод видимым
  4. Имена инструментов отображаются жирным шрифтом независимо от статуса, обеспечивая единый стиль как в CompactToolGroupDisplay, так и в отдельных ToolMessage
  5. Условия принудительного раскрытия: когда любой инструмент в группе находится в состоянии подтверждения, ошибки, инициирован пользователем, находится в фокусированной оболочке или является терминальным саб-агентом, ВСЕ инструменты отображаются по отдельности (без разделения), причём результаты принудительно показываются только для вызвавших это инструментов (с ошибкой, подтверждением, терминальный саб-агент) — успешные соседи сохраняют обычное сворачивание
  6. Элементы tool_use_summary (семантические сводки, сгенерированные LLM) отображаются безусловно вместе с механическим подсчётом CompactToolGroupDisplay — они служат разным целям (семантический контекст vs подсчёт инструментов)
  7. Значок памяти: отображается как в пути со всеми сворачиваемыми инструментами, так и в смешанном пути, когда операции с памятью присутствуют в группе, не состоящей только из памяти

Ключевые изменения

ФайлИзменение
CompactToolGroupDisplay.tsxДобавлены buildToolSummary() с форматом подсчёта, isCollapsibleTool(), удалены стили границ
ToolMessage.tsxshouldCollapseResult ограничен только isCollapsibleTool() и Success; удалён isDim
ToolGroupMessage.tsxРазделение по типу заменяет showCompact; forceShowResult упрощён до forceExpandAll; бюджет высоты учитывает строку сводки сворачиваемых
MainContent.tsxУдалены псевдоним mergedHistory, absorbedCallIds, summaryByCallId, кросс-групповое слияние
HistoryItemDisplay.tsxtool_use_summary отображается безусловно (удалён шлюз summaryAbsorbed)
mergeCompactToolGroups.tscompactToggleHasVisualEffect больше не срабатывает на tool_group (компактный режим не влияет на отображение инструментов)

Рассмотренные альтернативы

  1. Оставить два режима с улучшенными сводками: Отвергнуто — излишняя когнитивная нагрузка для пользователей
  2. Сводка для каждого инструмента (стиль Gemini CLI): Каждый инструмент получает свою стрелку сводки. Отвергнуто — всё ещё слишком подробно для больших наборов инструментов
  3. Поэтапное внедрение: Отвергнуто — предпочтение пользователей отдано единому проходу реализации
Last updated on