Общий обзор статуса жизненного цикла каналов
Дата: 2026-07-01
Цель
Предоставить единую площадку для ревью, которая обобщает поведение статуса жизненного цикла для поддерживаемых адаптеров каналов и явно указывает, что намеренно остается вне скоупа.
Скоуп
- Telegram
- Weixin
- DingTalk
- Feishu
Явные задачи вне скоупа
- Slack остается вне скоупа.
- QQ Bot остается вне скоупа для UI статуса жизненного цикла.
- Пример плагина остается вне скоупа для UI статуса жизненного цикла.
- Терминальные эмодзи DingTalk остаются вне скоупа.
Матрица ревью
| Канал | Поддерживаемые события жизненного цикла | Нативный интерфейс | Поведение started | Поведение text_chunk | Поведение при завершении | Причина отсутствия поддержки / no-op | Точные тестовые файлы |
|---|---|---|---|---|---|---|---|
| Telegram | started, completed, cancelled, failed | Индикатор набора текста | Запускает существующий цикл набора текста для каждого чата один раз. Дублирующиеся события started не добавляют новый цикл. | Игнорируется хуком жизненного цикла. Контент ответа продолжает поступать через обычный путь ответа. | Останавливает цикл набора текста при любом терминальном событии и не оставляет активных интервалов. | tool_call не имеет нативного интерфейса статуса и не нуждается в UI адаптера. | packages/channels/telegram/src/TelegramAdapter.test.ts |
| Weixin | started, completed, cancelled, failed | Индикатор набора текста | Вызывает setTyping(chatId, true) один раз для активного чата. Дублирующиеся события started не перезапускают состояние набора текста. | Игнорируется хуком жизненного цикла. Контент ответа продолжает поступать через обычный путь отправки. | Вызывает setTyping(chatId, false) при терминальных событиях. Неудачные попытки запуска очищают локальное состояние, чтобы последующее событие started могло повторить попытку. | tool_call не имеет отдельного интерфейса статуса, и дополнительные сообщения отправлять не нужно. | packages/channels/weixin/src/WeixinAdapter.test.ts |
| DingTalk | started, completed, cancelled, failed | Реакция «глаз» на входящее сообщение | Добавляет существующую реакцию «глаз» один раз, когда становится доступен id беседы. | Игнорируется хуком жизненного цикла. Контент ответа продолжает поступать через обычный путь отправки. | Отзывает реакцию «глаз» при терминальных событиях, включая состояния гонки при позднем добавлении после отмены. | Прямые чаты вебхуков роботов не предоставляют id беседы, необходимый для реакций, поэтому статус жизненного цикла там является no-op. Для tool_call UI также не предусмотрен в рамках скоупа. | packages/channels/dingtalk/src/DingtalkAdapter.test.ts |
| Feishu | started, completed, cancelled, failed | Статусная метка стриминговой карточки | Удерживает карточку в состоянии выполнения и резервирует место для метки выполнения, пока активна существующая потоковая передача карточки. | Не потребляется напрямую хуком жизненного цикла. Потоковая передача контента по-прежнему обрабатывается существующим хуком потока ответа/карточки. | Завершает статусную метку карточки как выполненную, отмененную или завершенную с ошибкой, не перезаписывая тело потокового ответа. | tool_call остается скрытым, так как карточка использует только поток ответа и терминальные статусные метки. | packages/channels/feishu/src/adapter.test.ts, packages/channels/feishu/src/markdown.test.ts |
| QQ Bot | Нет | Нет | No-op. | No-op. QQ Bot по-прежнему передает фрагменты ответов через отправку исходящих сообщений, но не через обновления статуса жизненного цикла. | No-op. | Канал не имеет эндпоинта для набора текста или статуса задачи, и QQChannel намеренно оставляет onPromptStart, onPromptEnd и onTaskLifecycle пустыми. | packages/channels/qqbot/src/send.test.ts, packages/channels/qqbot/src/api.test.ts |
| Plugin example | Нет | Только сообщения протокола WebSocket | No-op для статуса жизненного цикла. | Передает фрагменты ответа через тип сообщения chunk мок-протокола из onResponseChunk, вне обработки статуса жизненного цикла. | Отправляет финальное исходящее сообщение при завершении ответа, вне обработки статуса жизненного цикла. | Мок-канал демонстрирует только настройку транспорта; у него нет нативного индикатора набора, реакций или интерфейса статуса. | integration-tests/channel-plugin.test.ts |
Заметки для ревью
text_chunkжизненного цикла Feishu остается no-op в хуке жизненного цикла. Он не добавляет и не обновляет контент ответа в этом месте.- Slack намеренно исключен из этой матрицы, так как находится вне скоупа.
- Терминальные события DingTalk в рамках данного скоупа только отзывают существующую реакцию «глаз». Терминальные эмодзи не добавляются.
Last updated on