Skip to content

AgentProxy 1.0

Choose a tag to compare

@aokazantsev aokazantsev released this 24 Oct 20:52
  • Новое действие правила 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 — с note dropped. Монитор показывает эти пометки.
  • На 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.