# AskUserQuestion

Представляє користувачеві одне або кілька структурованих запитань із множинним вибором у чат-інтерфейсі, збирає його вибір і повертає його асистентові — корисно для усунення неоднозначності наміру без довільного обміну повідомленнями.

## Коли використовувати

- Запит має кілька розумних інтерпретацій, і асистенту потрібно, щоб користувач обрав одну з них перед тим, як продовжити.
- Користувач має обрати серед конкретних варіантів (фреймворк, бібліотека, шлях файлу, стратегія), де вільні текстові відповіді схильні до помилок.
- Ви хочете порівняти альтернативи поруч за допомогою панелі попереднього перегляду.
- Кілька повʼязаних рішень можна обʼєднати в один запит, щоб зменшити обмін повідомленнями.
- План або виклик інструмента залежить від конфігурації, яку користувач ще не вказав.

## Параметри

- `questions` (array, обовʼязковий): Від одного до чотирьох запитань, показаних разом в одному запиті. Кожен обʼєкт запитання містить:
  - `question` (string, обовʼязковий): Повний текст запитання, що закінчується знаком питання.
  - `header` (string, обовʼязковий): Коротка мітка (не більше 12 символів), що відображається як чіп над запитанням.
  - `options` (array, обовʼязковий): Від двох до чотирьох обʼєктів варіантів. Кожен варіант має `label` (1–5 слів), `description` та необовʼязковий попередній перегляд `markdown`.
  - `multiSelect` (boolean, обовʼязковий): Якщо `true`, користувач може обрати більше одного варіанта.

## Приклади

### Приклад 1: Вибір одного фреймворка

```
AskUserQuestion(questions=[{
  "header": "Test runner",
  "question": "Which test runner should I configure?",
  "multiSelect": false,
  "options": [
    {"label": "Vitest (Recommended)", "description": "Fast, Vite-native, Jest-compatible API"},
    {"label": "Jest",                  "description": "Mature, broadest plugin ecosystem"},
    {"label": "Node --test",           "description": "Zero dependencies, built in"}
  ]
}])
```

### Приклад 2: Порівняльний попередній перегляд двох макетів

```
AskUserQuestion(questions=[{
  "header": "Layout",
  "question": "Which dashboard layout do you prefer?",
  "multiSelect": false,
  "options": [
    {"label": "Sidebar",  "description": "Nav on the left", "markdown": "```\n+------+---------+\n| NAV  | CONTENT |\n+------+---------+\n```"},
    {"label": "Top bar",  "description": "Nav across top",  "markdown": "```\n+-----------------+\n|       NAV       |\n+-----------------+\n|     CONTENT     |\n+-----------------+\n```"}
  ]
}])
```

## Примітки

- UI автоматично додає варіант вільного тексту "Other" до кожного запитання. Не додавайте власні пункти "Other", "None" чи "Custom" — це продублює вбудовану можливість.
- Обмежуйте кожен виклик до одного-чотирьох запитань, а кожне запитання — до двох-чотирьох варіантів. Перевищення цих меж відхиляється оболонкою.
- Якщо ви рекомендуєте конкретний варіант, розмістіть його першим і додайте "(Recommended)" до його мітки, щоб UI виділив бажаний шлях.
- Попередні перегляди через поле `markdown` підтримуються лише для запитань з одиночним вибором. Використовуйте їх для візуальних артефактів, таких як ASCII-макети, фрагменти коду чи diff конфігурації — а не для простих запитань переваг, де достатньо мітки та опису.
- Коли будь-який варіант у запитанні має значення `markdown`, UI переключається на макет пліч-о-пліч зі списком варіантів зліва та попереднім переглядом справа.
- Не використовуйте `AskUserQuestion` для запиту "чи виглядає цей план добре?" — викликайте замість цього `ExitPlanMode`, який існує саме для затвердження плану. У режимі плану також уникайте згадування "плану" в тексті запитання, оскільки план не видно користувачеві, доки не виконається `ExitPlanMode`.
- Не використовуйте цей інструмент для запитів конфіденційного або довільного вводу, такого як API-ключі чи паролі. Запитайте натомість у чаті.
