You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Новое действие правила events (add_rule, update_rule): меняет события SSE и WebSocket, которые идут через прокси от настоящего сервера. Условия (host, path, method, url_regex) выбирают поток при его открытии, дальше правило смотрит каждое событие: в SSE — событие с data: (комментарии не трогаются), в WebSocket — сообщение. Поля: event_contains — только события, в данных которых есть этот текст (с учётом регистра, данные как в list_events); direction — incoming (по умолчанию, от сервера) или outgoing (от приложения, только WebSocket); replace — замены текста в данных; event_data — новые данные целиком (в SSE перевод строки даёт несколько строк data:, event: и id: остаются); close — before (событие не доставляется) или after (сначала событие): рвёт соединение приложения без кадра закрытия, приложение видит обрыв сети, дальше ничего не доставляется. Нужно хотя бы одно из replace, event_data, close; event_data и replace вместе не принимаются, delay_ms, download_kbps и upload_kbps у events тоже.
hits и times у events считают потоки, обычные запросы и потоки, которые правило не правит (сжатый SSE, поток правила sse, SSE для правила с direction: outgoing), их не тратят: close с times: 1 действует только на первый подходящий поток и пропускает переподключение. Правило видят потоки, открытые после него: ответ add_rule напоминает переподключить приложение, а для close без times предупреждает о цикле переподключений. history_matches у такого правила считает только записи SSE и WebSocket, у direction: outgoing — только WebSocket. update_rule и delete_rule действуют на открытые потоки сразу.
send_event в WebSocket, оборванный правилом events, отказывает: писать в новый поток после переподключения. send_event отвечает last_seq: реакцию приложения на событие SSE ждать wait_for_flow с since_seq = last_seq. wait_for_flow с since_seq отдаёт первый подходящий запрос после него, а не самый новый. В update_rule поля close и direction снимаются null, как и остальные; null в числовых параметрах инструментов — значение по умолчанию.
В истории события уже изменённые. У записи потока в rules пометки: changed — сколько событий изменено, replaced — замен всего, closed — где оборвано (before incoming event 3: счёт — события с данными этого направления, а не n из list_events), skipped — правка не применена (сжатый SSE, событие больше 1 МБ, поток правила sse, бинарное сообщение WebSocket), error — оборвать не удалось; у открытого потока пометки появляются после его конца, до того результат видно в list_events. not_found у events нет. После обрыва в событиях потока — note «rule … closed the stream …», в строке rules #seq журнала — changed и closed; недоставленное сообщение WebSocket — с notedropped. Монитор показывает эти пометки.
На HTTP/2 close рвёт всё соединение приложения с соседними запросами, closed об этом говорит; хосту из host правила с close прокси даёт новым соединениям только HTTP/1.1. Сжатый SSE правило не меняет: нужен rewrite с request_headers{"Accept-Encoding": "identity"}.
Пометка skipped у rewrite с правкой тела SSE теперь называет events.
Трей: выход из Windows больше не выглядит как «движок упал» и не отправляет отчёт о сбое; установщик с окном не включает снова выключенный автозапуск; окно «Журнал» не перескакивает в конец, пока журнал прокручен вверх или в нём выделен текст.
Скилл agentproxy: раздел «События events» в rules.md, строка в разделе потоков SKILL.md.