공유 링크
채팅 머리글의 공유는 다른 사람들이 페르소나와 대화할 수 있도록 링크를 만듭니다. 예를 들면 다음과 같습니다.
- 친구가 AI가 사용자의 말투로 얼마나 잘 쓰는지 평가합니다.
- 친구가 자기 자신의 복사본과 대화합니다.
링크는 https://<사용자의 호스트>/s/<이름> 형식입니다. 방문자에게 보이는 것은 채팅뿐입니다. 사이드바, 설정, 메모, 미디어 설명, 프롬프트, 토큰 사용량, 다른 채팅은 보이지 않습니다.
옵션
| 옵션 | 기본값 | |
|---|---|---|
| 누가 열 수 있는지 | 이 컴퓨터 | 편집기 안의 Wi‑Fi와 인터넷 스위치(아래) |
| 링크 | 무작위 | alex 같은 이름을 고르세요 |
| 표시 이름 | 페르소나 이름 | 내보내기의 실제 이름은 표시되지 않습니다 |
| PIN | 없음 | 4–64자, Argon2id 해시로 저장. ✨는 6자리를 만듭니다 |
| 대화 | 비공개 | 비공개: 방문자마다 하나의 대화. 공유 방: 모두가 하나의 대화 |
| 방문자가 내보내기를 읽을 수 있는지 | 없음 | 없음, 마지막 N개의 메시지, 또는 전부 |
| 제한 | 방문자 50명, 각각 답변 200개 | 답변마다 사용자의 키에서 토큰이 쓰입니다. 0 = 무제한 |
| 방문자가 먼저 말하게 할 수 있는지 | 꺼짐 | 💬 버튼을 표시: 방문자가 아무것도 쓰지 않아도 페르소나가 메시지를 보냅니다 |
| 방문자가 답변을 다시 쓰게 할 수 있는지 | 꺼짐 | ↻ 버튼을 표시: 페르소나의 마지막 답변을 다시 씁니다. 둘 다 제한 중 답변 하나를 사용하며, 꺼져 있으면 서버가 거부합니다 |
| 만료 / 활성 | 없음 / 켜짐 | 링크를 삭제하지 않고 일시 중지하거나 만료시킵니다 |
| Telegram 그룹 | 꺼짐 | Telegram에서 답변하기 |
공유 대화 상자에서는 방문자의 각 대화를 읽기할 수 있고, 하나를 종료해 철회할 수 있습니다. 각 방문자는 마지막으로 메시지를 보낸 주소를 보여 줍니다. 대화를 종료할 때 차단도 함께를 선택하면, 차단 해제할 때까지 그 주소를 링크에서 막습니다(시작 페이지, 새 대화, 이미 열린 대화 모두). 공유 네트워크에서는 한 주소가 여러 사람일 수 있습니다. 주소는 링크와 함께 사용자의 컴퓨터에만 저장됩니다.
페르소나가 대화하는 상대
방문자는 사용자가 아닙니다. Mia가 사용자의 링크를 열면, 페르소나는 Mia가 쓰고 있다는 것, 링크가 사용자에게서 왔다는 것, 그리고 기록과 사용자의 메모는 사용자와 그들에 관한 것이지 Mia에 관한 것이 아니라는 것을 압니다. 페르소나는 그녀를 새로운 사람처럼 맞이합니다. 이름이 없으면 그녀는 그냥 손님입니다.
| 페르소나가 보는 것 | |
|---|---|
| 비공개 링크 | 방문자가 준 이름(또는 "손님")으로 된 방문자와의 하나의 대화 |
| 공유 방 | 그룹 채팅: 모든 메시지에 보낸 사람의 이름이 붙고, 사람들은 언제든 들어올 수 있음 |
| 사용자의 내보내기 기록 | 사용자의 메시지는 사용자의 이름으로, 그다음 방문자의 메시지가, 절대 섞이지 않도록 |
시스템 프롬프트는 대화마다 고정되므로 공급자가 그것을 캐시합니다. 방문자의 이름은 대화가 시작될 때 정해지고, 방에서는 이름이 메시지와 함께 전달됩니다. 페르소나나 사용자와 같은 이름을 쓰는 방문자는 예를 들어 "Alex (손님)"이 되며, 방 안의 두 번째 "Ann"은 "Ann 2"가 됩니다.
초대
| 링크 | 여는 것 |
|---|---|
/s/alex | 시작 페이지 |
/s/alex#pin=2468 | 바로 채팅. PIN은 # 뒤에 있으므로 서버나 로그에 전달되지 않습니다 |
/s/alex#name=Greg&pin=2468 | 같은 것이지만 방문자 이름이 채워져 있음(?name=Greg도 작동합니다) |
링크의 QR 버튼은 작동하는 모든 주소에 대해 휴대폰으로 스캔할 코드를 엽니다. 저장한 직후에는 PIN과 함께 초대 복사로 PIN이 포함된 링크를 복사할 수 있습니다.
다른 기기에서 링크 열기
서버에서는 링크가 단순히 서버의 주소를 사용합니다. 데스크톱 앱(과 127.0.0.1의 rooftop)은 사용자의 컴퓨터에서만 실행되므로, 공유 대화 상자와 링크 편집기에는 두 개의 스위치가 있습니다. 각각은 활성, 연결 중, 또는 작동 안 함을 표시하며, 편집기는 링크가 가질 주소를 바로 보여 줍니다.
┌──────────── 사용자의 컴퓨터 ──────────┐
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/…, 페이지 리소스만 전달하고, 양방향 쿠키를 버리며, 앱이 닫혀 있는 동안에는 "오프라인" 페이지를 보여 줍니다. - iroof.top 대신 자체 릴레이를 원하나요? 릴레이 허브를 보세요.
- 오프라인 모드는 인터넷 스위치를 끄고 잠급니다. Wi‑Fi는 계속 작동합니다. 릴레이가 볼 수 있는 것: 오프라인과 개인정보 보호.
보호
| 보호 | 제한 |
|---|---|
| 한 IP에서의 잘못된 PIN | 5회 후 1분 잠금, 그다음 2, 4… 최대 1시간 |
| 한 링크에서의 잘못된 PIN, 모든 IP | 15분에 20회: 5분 잠금, 최대 24시간까지 두 배씩 |
| 방문자별 메시지 | 분당 30개, 분당 답변 10개 |
| 새 대화 | IP당 시간당 20개 |
카운터는 메모리에 있습니다. 6자리 PIN은 합리적인 시간 안에 추측할 수 없습니다. 리버스 프록시 뒤에서는 ROOFTOP_TRUST_PROXY=true를 설정해, 카운터가 실제 클라이언트 IP를 보게 하세요.
방문자 세션은 /s/<이름>/<토큰>의 무작위 26자 토큰을 사용합니다. 이 토큰은 브라우저가 기억하며, Referrer-Policy: no-referrer로 유출되지 않도록 보호됩니다. 방문자는 자신이 볼 수 있는 미디어만 불러올 수 있습니다.