# С помощью ИИ

Приложение для Pairx можно не писать самому: любой чат с ИИ напишет его по описанию, если знает правила песочницы и мост. Ниже — запрос, который их перечисляет. Скопируйте его, допишите в конце, что должно делать приложение, а ответ вставьте в Pairx: «+» → «Приложение» → «Новое из кода» → «Вставить».

```text
Напиши мини-приложение для мессенджера Pairx: один HTML-файл со встроенными CSS и JavaScript, до 512 КБ. Название — в <title>.

Песочница Pairx:
- Сети нет: никаких fetch, XMLHttpRequest, WebSocket, внешних скриптов, шрифтов, картинок и CDN. Всё — внутри файла (картинки — data: URL или SVG).
- Нет WebGL, WebAudio, IndexedDB, WebAssembly, камеры, микрофона, геолокации, всплывающих окон и внешних ссылок.
- Светлая и тёмная тема через @media (prefers-color-scheme: dark). Вёрстка под телефон, ширина от 320 px. Шапку с названием рисует Pairx.

Мост: объект window.pairx уже есть. Вызовы асинхронные: await pairx.call(метод, параметры); ошибка — исключение с полем code
(unsupported, forbidden, consent_required, rate_limited, too_large, conflict, offline, not_found, internal). События: pairx.on(имя, функция).
- pairx.call('app.ready') — когда первый экран нарисован (убирает заставку).
- pairx.call('user.get') → {id, locale}: id человека внутри этого приложения.
- pairx.call('context.get') → {kind: 'chat' | 'personal' | 'preview'}.
- pairx.call('ui.mainButton', {text, visible, enabled, progress}) и событие 'ui.mainButton.clicked' — нативная кнопка Pairx внизу.
- pairx.call('ui.backButton', {visible}) и событие 'ui.backButton.clicked' — «Назад» в шапке для своих экранов.
- pairx.call('ui.popup', {message, buttons: [{id, text, type: 'cancel' | 'destructive'}]}) → id нажатой кнопки, до трёх кнопок.
- pairx.call('ui.toast', {text}); pairx.call('ui.theme') → {scheme, colors: {accent, background, surface, text, muted}}.

Общие данные чата хранит Pairx. Хранилища объявляются в странице:
<script type="application/pairx+json">{"stores": {"имя": {"type": "log"}}}</script>
Типы: log — журнал записей по порядку (убрать можно только свою), slot — одно значение на человека,
doc — один общий документ с версией, counter — суммы по ключам (per_user_limit ограничивает вклад одного человека).
- await pairx.call('storage.snapshot') → {seq, stores}: log → {entries: [{entry, user, value, at, retracted}]},
  slot → {slots: {user: value}}, doc → {value, version}, counter → {totals: {key: n}, mine: {key: n}}.
- await pairx.call('storage.write', {op, store, ...}): {op: 'log.append', value}, {op: 'log.retract', entry},
  {op: 'slot.set', value}, {op: 'slot.clear'}, {op: 'doc.set', value, version}, {op: 'counter.add', key, amount}.
  doc.set с устаревшей version отклоняется с кодом conflict — перечитай снимок, примени изменение заново и повтори.
- pairx.on('storage.changed', ({changes}) => …) — изменения всех участников, и свои тоже, по порядку seq. Каждое несёт seq, store, op:
  log {entry, user, value, at}, retract {entry}, slot {user, value}, doc {value, version, by}, counter {key, total, user, mine}.
  Изменения с seq не больше seq снимка пропускай. pairx.on('storage.reset', …) — перечитай снимок.
- Личное (видно только самому человеку) — обычный localStorage, до 256 КБ; Pairx сохраняет его сам.
- Значение записи до 16 КБ, запись журнала до 4 КБ, не больше 10 записей в секунду от человека.

Само приложение: [опиши, что оно должно делать]
```

## Если ИИ умеет читать ссылки

Дайте ему полное описание платформы одним файлом — оно собирается из этого сайта и всегда совпадает с ним:

- `https://dev.pairx.org/llms.txt` — коротко: что такое приложение Pairx и где что описано;
- `https://dev.pairx.org/llms-full.txt` — весь сайт одним текстом: руководства, справочник моста и хранилища, пределы, примеры.

Например: «Прочитай https://dev.pairx.org/llms-full.txt и напиши приложение для Pairx: …».

## Как получить хороший результат

- **Опишите, что видит и делает каждый участник.** «Каждый может встать в очередь и выйти; первый видит „Ваша очередь“» лучше, чем «сделай очередь».
- **Скажите, что общее, а что личное.** Общее — в хранилищах чата, личное — в `localStorage`.
- **Проверьте в эмуляторе.** `pairx dev app.html` покажет приложение у двух участников сразу; ошибки скриптов видны в консоли браузера. Вставьте ИИ текст ошибки — он исправит.
- **Проверьте до отправки.** `pairx check app.html` скажет, примет ли сервис приложение и не уйдёт ли версия на ручную проверку.

> **Помните.** Приложение отправляется в чат от вашего имени и помечается «Код пользователя». Прочитайте код, который написал ИИ, хотя бы бегло: не просит ли он пароли или коды, нет ли там чужих ссылок.
