== User stories == US1: Контекст с дашборда/датасета → /agent с URL params US2: Guardrails card — env badge, 7 risk tones, countdown, permission_denied US3: Tools optimization — retry, timeout, summarise, RBAC + context affinity == Backend == - _context.py (NEW): UIContext validation (7 checks) - _tool_filter.py (NEW): RBAC + context affinity pipeline - _confirmation.py: build_confirmation_contract_v2, permission_denied_payload - tools.py: superset_list_databases, retry/summarise/timeout wrappers - app.py: _inject_uicontext, _inject_env_id_into_tools, database prefetch в runtime context - _persistence.py: prefetch_databases() - agent_superset_explore.py: GET /databases endpoint - _llm_async_http.py, _persistence.py: fix double /v1 в LLM URL (LM Studio Unexpected endpoint) == Frontend == - AgentChatModel.svelte.ts: 5 atoms, 3 actions, countdown, context - AgentChat.svelte: production banner, process steps, debug panel - ConfirmationCard.svelte: 7 risk tones, permission_denied, countdown - ToolCallCard.svelte: retrying/timeout/cancelled states - StreamProcessor.svelte.ts: tool_retry, timeout, permission_denied - TopNavbar: sparkles icon + Ассистент - sidebarNavigation: AI section - DashboardHeader, datasets/+page: contextual AI buttons - Icon: sparkles, brain, cpu icons - tailwind: assistant category colors - i18n: en/ru nav keys == Tests == - 159 backend agent tests (+16 US3: retry, timeout, summarise, contracts) - 2544 frontend tests (+11 model + component tests) - 15 JSON fixtures (10 API + 5 model) == Specs == - specs/035-agent-chat-context/: spec, UX, plan, tasks, research, data-model, contracts, quickstart, traceability, fixtures, checklists Closes #035
2.0 KiB
2.0 KiB
#region UxDecisions [C:3] [TYPE ADR] [SEMANTICS ux,decisions,agent-chat] @defgroup Ux Final UX design decisions for 035-agent-chat-context.
Agent Chat Panel
- Context: Route-level — передаётся при переходе на
/agent; статичен на странице - Indicator: Пилюля «Контекст» в process steps bar (существующий элемент, расширенная функциональность)
- Prod warning: Реактивный $derived от model.envId — bg-warning-light + красная полоса сверху
- Env switch: EnvSelector на странице агента обновляет контекст реактивно
ConfirmationCard
- Risk visual: border/background по риску инструмента; dangerous всегда destructive
- Environment: бейдж в заголовке карточки
- Dangerous protection: 10-секундный таймер с обратным отсчётом на кнопке подтверждения
- Permission denied: карточка → закрыть → сообщение агента с альтернативами
- States: read, write_staging, write_prod, dangerous_any, permission_denied, loading_confirm, loading_deny
ToolCallCard
- Retry: бэкенд 1 авто-ретрай (1s backoff) + ручная кнопка «Повторить» при исчерпании
- Timeout: ⏱️ иконка + сообщение + кнопка «Повторить»
- New states: retrying, timeout, cancelled
- New SSE events: tool_timeout, tool_retry
Debug Panel
- Новые секции: UIContext (JSON + objectName) и ContextToolAffinity (✅/❌ список)
- Интегрировано в существующую debug-панель (isDebugPanelOpen)
Accessibility
- Process steps: role="status" aria-live="polite"
- Dangerous countdown: aria-live="assertive" каждые 5 секунд
- Prod background: aria-live="polite" при активации
- All touch targets ≥ 44×44px
#endregion UxDecisions