Ссылки для общего доступа
Поделиться в заголовке чата создаёт ссылки, по которым другие люди могут говорить с персонажем, например:
- друг оценивает, насколько хорошо ИИ пишет в вашем стиле;
- друг разговаривает с копией самого себя.
Ссылка имеет вид https://<ваш хост>/s/<имя>. Посетители видят только чат: без боковой панели, настроек, заметок, описаний медиа, промпта, расхода токенов и других чатов.
Параметры
| Параметр | По умолчанию | |
|---|---|---|
| Кто может открыть | этот компьютер | переключатели Wi‑Fi и Интернет прямо в редакторе (ниже) |
| Ссылка | случайная | выберите имя, например alex |
| Отображаемое имя | имя персонажа | настоящие имена из экспорта не показываются |
| PIN | нет | от 4 до 64 символов, хранится как хеш Argon2id. ✨ генерирует 6 цифр |
| Разговоры | приватные | Приватные: один разговор на посетителя. Общая комната: все в одном разговоре |
| Посетители могут читать экспорт | ничего | ничего, последние N сообщений или всё |
| Лимиты | 50 посетителей, 200 ответов каждому | каждый ответ тратит токены вашего ключа. 0 = без ограничений |
| Посетители могут заставить начать первыми | выкл. | показывает кнопку 💬: персонаж отправляет сообщение без сообщения от посетителя |
| Посетители могут переписать ответ | выкл. | показывает кнопку ↻: последний ответ персонажа пишется заново. Оба действия используют один ответ из лимита, а сервер отклоняет их, пока они выключены |
| Истекает / активна | никогда / да | приостановить или завершить ссылку, не удаляя её |
| Группа Telegram | выкл. | ответ из Telegram |
В диалоге «Поделиться» можно Читать каждый разговор посетителя и Завершить его, чтобы отозвать. У каждого посетителя показан адрес, с которого он писал последним; при завершении разговора Также заблокировать не пускает этот адрес по ссылке (стартовая страница, новые разговоры и уже открытые), пока вы его не Разблокируете. В общей сети один адрес может принадлежать нескольким людям. Адреса хранятся вместе со ссылкой только на вашем компьютере.
С кем говорит персонаж
Посетитель — это не вы. Когда Миа открывает вашу ссылку, персонаж знает, что пишет Миа, что ссылка пришла от вас, и что история и ваши заметки касаются вас и их, а не Мии: он встречает её как незнакомку. Без имени она просто гость.
| Что видит персонаж | |
|---|---|
| Приватная ссылка | один разговор с посетителем под именем, которое он указал (или «Гость») |
| Общая комната | групповой чат: каждое сообщение несёт имя отправителя, и люди могут присоединиться в любой момент |
| Ваша история экспорта | ваши сообщения под вашим именем, затем сообщения посетителя, чтобы их никогда не путали |
Системный промпт фиксирован для каждого разговора, поэтому провайдеры его кэшируют: имя посетителя задаётся в начале разговора, а в комнате имена передаются вместе с сообщениями. Посетитель, который называет себя как персонаж или как вы, становится, например, «Alex (гость)», а вторая «Ann» в комнате — «Ann 2».
Приглашения
| Ссылка | Открывает |
|---|---|
/s/alex | стартовую страницу |
/s/alex#pin=2468 | чат сразу. PIN стоит после #, поэтому он никогда не попадает на сервер и в журналы |
/s/alex#name=Greg&pin=2468 | то же самое, с уже заполненным именем посетителя (работает и ?name=Greg) |
Кнопка QR у ссылки открывает код для сканирования телефоном — для каждого адреса, который работает. Сразу после сохранения Копировать приглашение с PIN копирует ссылку вместе с PIN.
Открытие ссылок на других устройствах
На сервере ссылки просто используют адрес сервера. Настольное приложение (и rooftop на 127.0.0.1) работает только на вашем компьютере, поэтому в диалоге «Поделиться» и редакторе ссылок есть два переключателя. Каждый показывает, Работает, Подключение или Не работает, а редактор сразу показывает адрес, который будет у ссылки.
┌──────────── ваш компьютер ────────────┐
телефон в Wi‑Fi ───▶│ :8737 только страницы посетителей │
│ │
любой ──▶ имя.iroof.top ══ одно исходящее WebSocket ══▶ приложение │
│ │
│ 127.0.0.1 интерфейс владельца, │
│ настройки и API │
└───────────────────────────────────────┘| Wi‑Fi и локальная сеть | Интернет | |
|---|---|---|
| Адрес | http://<ваш IP>:8737/s/<имя> | https://<имя>.iroof.top/s/<имя> |
| Кто | устройства в той же сети | кто угодно, пока работает приложение |
| Как | второй слушатель, который отдаёт только страницы посетителей | одно исходящее WebSocket-соединение с ретранслятором; в интернете ничего не слушает |
| Ваши данные | остаются на вашем компьютере | остаются на вашем компьютере, но сообщения посетителей проходят через ретранслятор |
- Порт Wi‑Fi остаётся прежним при перезапусках, поэтому напечатанные QR-коды продолжают работать. В macOS разрешите входящие соединения, если брандмауэр спросит.
- Имя для интернета вы выбираете и меняете сами (Изменить рядом с адресом). Ретранслятор пересылает только
/s/…,/api/s/…и ресурсы страниц, отбрасывает cookie в обоих направлениях и показывает страницу «офлайн», пока приложение закрыто. - Хотите собственный ретранслятор вместо iroof.top? См. Хаб ретрансляции.
- Автономный режим выключает и блокирует переключатель интернета; Wi‑Fi продолжает работать. Что может видеть ретранслятор: Автономный режим и конфиденциальность.
Защита
| Защита | Лимит |
|---|---|
| Неверные PIN с одного IP | после 5: блокировка на 1 мин, затем 2, 4… до 1 ч |
| Неверные PIN по ссылке, все IP | 20 за 15 мин: блокировка на 5 мин, удваивается до 24 ч |
| Сообщения на посетителя | 30 в минуту, 10 ответов в минуту |
| Новые разговоры | 20 в час с IP |
Счётчики хранятся в памяти. 6-значный PIN нельзя подобрать за разумное время. За обратным прокси задайте ROOFTOP_TRUST_PROXY=true, чтобы счётчики видели настоящие IP клиентов.
Сессии посетителей используют случайный токен из 26 символов в /s/<имя>/<токен>, который запоминает браузер и который защищён от утечки заголовком Referrer-Policy: no-referrer. Посетители могут загружать только те медиа, которые им разрешено видеть.