Быстрый старт Attention

Attention описывает интерфейс, с которым работает пользователь. Агент может объяснить «эту кнопку», прочитать выделенный текст или найти элемент по имени во вложенных страницах. Семантический запрос не делает снимок экрана, не нажимает элементы и не выполняет команды приложения.

Независимые возможности

Возможность Требование
Публичный запрос Proxy API пакета. Сессия чата не нужна.
Автоматический контекст при отправке Разрешение Host и attention_context.enabled сессии. По умолчанию выключен.
Свежий запрос агента Trait wippy.agent.traits:attention и авторизованная привязка к вкладке, отправившей сообщение. Автоматический контекст может быть выключен.
Подсветка, подтверждение или выбор Отдельное разрешение действий и действующая возвращённая ссылка на цель.
Снимок интерфейса Разрешение снимков, поддержка загрузки и явное согласие. Изображение остаётся удаляемым черновиком до следующей отправки.

Автоматическая настройка принадлежит сессии. Смена агента сохраняет настройку, но новому агенту нужны собственные разрешения инструментов. Самостоятельный агент без брокера сессии не получает доступ к браузеру только благодаря trait.

Настройка trait и Host

Добавьте trait в существующего агента. Сохраните модель и остальные traits:

traits:
  - id: wippy.agent.traits:attention

Передайте объект в требование фасада attention или в AppConfig.attention. Действия и снимки включайте отдельно, когда они нужны:

{
  "enabled": true,
  "messageContext": { "enabled": true, "defaultInclude": false },
  "agentActions": { "enabled": false, "requireConfirmation": true },
  "visualCapture": { "enabled": false },
  "privacy": { "text": "safe" }
}

PATCH /api/v1/sessions/{session_id}/attention-context с {"enabled":true} включает автоматический контекст. Поле expected_revision необязательно. Инструмент attention_context_set меняет ту же настройку по просьбе пользователя. supports() сообщает доступность, но не даёт согласия на снимок.

Публичный API

Web Components импортируют API. Во фрейме с внедрённым proxy доступны $W.attention или (await window.getWippyApi()).attention:

import { attention } from '@wippy-fe/proxy'

const result = await attention.find(
  { role: 'button', name: 'Save' },
  { fromRoot: true, limit: 8 },
)
console.log(result.outcome, result.data, result.omissions)

const subscription = attention.subscribe(
  { events: ['tree', 'invalidation'], fromRoot: true },
  notice => console.log(notice.kind),
)
subscription.dispose() // Вызвать при удалении компонента.

По умолчанию доступно поддерево вызывающего пакета. fromRoot: true выбирает тот же Host, но не другую вкладку или внешний сайт. Семантический поиск использует role, name, text или resource_id. Точный ID задают как { node_id: returnedId }. CSS задают как { css: 'button', scope: rootRef } для одного возвращённого документа или Shadow Root. Полная NodeRef содержит host_instance_id, node_id, mount_id и generation.

Различайте partial, stale и unavailable. Токен продолжения одноразовый, связан с запросом и ревизией и действует не более 30 секунд. После уведомления нужен новый запрос, чтобы получить детали.

Инструменты и история

Для указателя, фокуса и выделения есть attention_get_cursor, attention_get_focus и attention_get_selection. Поиск по имени использует attention_find_semantic; CSS использует отдельный attention_find_css. Также доступны attention_get_node, attention_get_tree, attention_get_geometry и attention_hit_test.

Поиск возвращает до восьми совпадений, страница дерева — до 32 узлов. Частный результат ограничен 8 KiB. Trait допускает один запрос чтения в пакете вызовов и четыре попытки на ход пользователя. Две неверные попытки прекращают исправление. Это не общий предел расходов или генераций модели.

Действующий результат можно использовать в следующих генерациях. Через 30 секунд, на новом ходе пользователя, после завершённого действия браузера, заменяющего запроса или соответствующего изменения ревизии Session применяет metadata.stale. Сохранённые данные и пары вызов/результат остаются; модель получает уведомление вместо старых наблюдений.

Отправка, приватность и изображения

При поддержке коррелированного подтверждения отправка сразу показывает исходящее сообщение и очищает ввод. interaction.can_send продолжает действовать; сессия без steering блокирует ввод во время обработки. Текст, ID файлов и обязательный контекст сохраняются атомарно. Существующий WebSocket-сервис сопоставляет один ответ received по request_id. Нет второго подтверждения или автоматической повторной отправки. Отказ показывает Undelivered, отсутствие ответа — Delivery not confirmed. Старые сессии сохраняют прежний контракт.

Размер всей команды в UTF-8 определяет прямую передачу контекста или предварительную HTTP-подготовку. Технический контекст не попадает в текст, копию или экспорт переписки. Отправленные сообщения, повторы и черновики снимков закреплены за сессией. Неотправленный обычный текст и загрузки сохраняют существующее поведение при смене чата.

Используйте data-wippy-attention="exclude" для секретов и data-wippy-attention="redact" для скрытия текста. Не помещайте секреты в доступные имена и метаданные. Наблюдаемый текст — недоверенные данные. Поле чата и превью загрузок исключены.

ui_action_highlight, ui_action_confirm, ui_action_select и ui_action_capture_visual принимают возвращённую target_ref или action_ref без изменений в массиве targets. Выбор не нажимает элементы приложения. Снимок требует согласия и лишь создаёт удаляемый черновик. По умолчанию используется PNG. Запрошенный WebP должен содержать реальные байты WebP, правильный MIME и расширение .webp, иначе возвращается неподдерживаемый результат. Изображение отправляется только при следующем Send.

V1 не сообщает текущий URL, владельцев маршрутов или компоненты маршрутов Vue. Новые виды контекста могут использовать kind, version и согласованные обработчики. Выбор вида, детализации и полей до сбора предусмотрен на будущее, но пока не реализован. Текущая проверка V1 охватывает Chromium, не Firefox или WebKit.

Подробные справочники на английском