ciphermesh 2.3.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -95,6 +95,12 @@ Prefer a prebuilt image? Pull the relay from GHCR (published on each release):
95
95
  docker run -p 3600:3600 ghcr.io/felipekreulich/secret-chat-lan:latest
96
96
  ```
97
97
 
98
+ **Hosting it publicly?** [`deploy/`](deploy/README.md) has a Caddy + Docker
99
+ setup that gets a Let's Encrypt certificate automatically — clients then verify
100
+ the server against a real CA (no trust-on-first-use window), and a host that
101
+ once served a valid certificate can never be silently downgraded to a
102
+ self-signed one.
103
+
98
104
  **No Node on the host?** Every release ships a standalone relay binary for
99
105
  macOS and Linux (arm64/x64) — download it from the
100
106
  [releases page](https://github.com/FelipeKreulich/secret-chat-lan/releases),
@@ -116,7 +122,10 @@ and use the `Internet` address from the banner — full walkthrough in
116
122
  Already in the chat? Run `/invite <your-ip>:3600` and send the string (or the
117
123
  QR code) to whoever you want to pull in.
118
124
 
119
- **No server at all?** `npm run p2p` — peers find each other via mDNS.
125
+ **No server at all?** `npm run p2p` — peers find each other via mDNS. P2P mode
126
+ now speaks nearly the same command set as the relay client (presence, `/lock`,
127
+ `/contacts`, `/mentions`, `/topic`, encrypted history and more); only
128
+ `/invite`, `/create` and `/nick` are relay-specific by nature.
120
129
 
121
130
  ## 💬 Commands
122
131
 
@@ -130,6 +139,8 @@ QR code) to whoever you want to pull in.
130
139
  | `/users` | Who's online (with away/status) |
131
140
  | `/msg <nick> <text>` | Private message (DM) |
132
141
  | `/reply <text>` | Reply quoting the last received message |
142
+ | `/me <action>` | Third-person action — *«felipe is compiling»* |
143
+ | `/watch [add\|remove\|clear]` | Alert on a keyword in **any** room, like a mention |
133
144
  | `/invite [host:port]` | Generate a `ciphermesh://` invite + QR code |
134
145
  | `/nick <new>` | Change nickname (before joining — recovers from "nickname taken") |
135
146
  | `/quit` | Leave |
@@ -146,6 +157,7 @@ QR code) to whoever you want to pull in.
146
157
  | `/create <room> <password>` | Create a **private room** 🔒 — see below |
147
158
  | `/rooms` | List rooms (🔒 marks private ones) |
148
159
  | `/room` | Current room + your buffer list |
160
+ | `/topic [text\|clear]` | Show or set the room topic — shown in the status bar and synced to whoever joins later |
149
161
  | `/owner` | Room owner |
150
162
  | `/kick` `/mute` `/ban` | Owner moderation |
151
163
 
@@ -198,7 +210,9 @@ A green **✓** next to a name marks a SAS-verified peer; a red **✗** flags a
198
210
  | `/play [path]` | Play the last received voice note (`afplay`/`sox`/`ffplay`) |
199
211
  | `/accept [id]` / `/reject [id]` | Accept / decline an incoming file offer |
200
212
  | `/img [path]` | Render the last received image in **full resolution** (kitty/iTerm2) |
201
- | `/search <term>` | Search the encrypted local history |
213
+ | `/search <term>` | Search the encrypted local history (on disk, across sessions) |
214
+ | `/find [term]` — **Ctrl+F** | Search **this room's scrollback** and press Enter to **jump to the message**, highlighted |
215
+ | `/doctor [host:port]` | Diagnose why a connection fails: address, DNS, TCP port, TLS (CA vs self-signed) and protocol version — each failure with what to do about it |
202
216
  | `/history [n]` | Last n messages from history |
203
217
  | `/retention <7d\|24h\|30m>` | Purge local history older than the given age |
204
218
  | `/export [path]` | Export history as .txt or .json (plaintext!) |
@@ -213,8 +227,8 @@ A green **✓** next to a name marks a SAS-verified peer; a red **✗** flags a
213
227
  | `/away [reason]` / `/back` | Mark yourself away — while away, unreads are counted (`[away · N new]`) and `/back` shows a summary |
214
228
  | `/mentions [n]` | Recent mentions of you this session (who, where, when) |
215
229
  | `/status <text\|off>` | Free-form status — emojis welcome (`/status :fire: coding`) |
216
- | `/react <emoji>` | React to the last message |
217
- | `/edit` `/delete` | Edit/delete your last message |
230
+ | `/react <emoji>` | React to the last message — the emoji lands **on the message**, with a count when several people react |
231
+ | `/edit` `/delete` | Edit or delete your last message — the **original line is rewritten in place** (marked *(edited)*) or replaced by a tombstone, instead of a new line you have to mentally staple to it |
218
232
  | `/pin` `/unpin` `/pins` | Pin messages |
219
233
  | `/sound` `/notify` | Sound / desktop notifications |
220
234
  | `/dnd [on\|off\|mentions\|HH:MM-HH:MM]` | Do-not-disturb, mentions-only, or quiet hours |
package/README.pt-BR.md CHANGED
@@ -95,6 +95,12 @@ Prefere imagem pronta? Baixe o relay do GHCR (publicado a cada release):
95
95
  docker run -p 3600:3600 ghcr.io/felipekreulich/secret-chat-lan:latest
96
96
  ```
97
97
 
98
+ **Vai hospedar publicamente?** A pasta [`deploy/`](deploy/README.md) tem um
99
+ setup com Caddy + Docker que pega certificado Let's Encrypt sozinho — aí os
100
+ clientes verificam o servidor contra uma CA de verdade (sem janela de
101
+ trust-on-first-use), e um host que já apresentou certificado válido nunca pode
102
+ ser rebaixado silenciosamente para um self-signed.
103
+
98
104
  **Sem Node na máquina?** Todo release traz um binário standalone do relay para
99
105
  macOS e Linux (arm64/x64) — baixe da
100
106
  [página de releases](https://github.com/FelipeKreulich/secret-chat-lan/releases),
@@ -116,7 +122,10 @@ em [docs/SETUP.md](docs/SETUP.md).
116
122
  Já está no chat? Rode `/invite <seu-ip>:3600` e mande a string (ou o QR) pra
117
123
  quem você quiser puxar pra conversa.
118
124
 
119
- **Sem servidor nenhum?** `npm run p2p` — os peers se encontram via mDNS.
125
+ **Sem servidor nenhum?** `npm run p2p` — os peers se encontram via mDNS. O modo
126
+ P2P agora fala quase o mesmo conjunto de comandos do cliente relay (presença,
127
+ `/lock`, `/contacts`, `/mentions`, `/topic`, histórico cifrado e mais); só
128
+ `/invite`, `/create` e `/nick` são específicos do relay por natureza.
120
129
 
121
130
  ## 💬 Comandos
122
131
 
@@ -130,6 +139,8 @@ quem você quiser puxar pra conversa.
130
139
  | `/users` | Quem está online (com away/status) |
131
140
  | `/msg <nick> <texto>` | Mensagem privada (DM) |
132
141
  | `/reply <texto>` | Responde citando a última mensagem recebida |
142
+ | `/me <ação>` | Ação em terceira pessoa — *«felipe está compilando»* |
143
+ | `/watch [add\|remove\|clear]` | Alerta quando uma palavra aparece em **qualquer** sala, como uma menção |
133
144
  | `/invite [host:porta]` | Gera convite `ciphermesh://` + QR code |
134
145
  | `/nick <novo>` | Troca de apelido (antes de entrar — recupera de "apelido em uso") |
135
146
  | `/quit` | Sair |
@@ -146,6 +157,7 @@ quem você quiser puxar pra conversa.
146
157
  | `/create <sala> <senha>` | Cria uma **sala privada** 🔒 — veja abaixo |
147
158
  | `/rooms` | Lista salas (🔒 marca as privadas) |
148
159
  | `/room` | Sala atual + sua lista de buffers |
160
+ | `/topic [texto\|clear]` | Mostra ou define o assunto da sala — aparece na barra de status e é sincronizado para quem entra depois |
149
161
  | `/owner` | Dono da sala |
150
162
  | `/kick` `/mute` `/ban` | Moderação (dono da sala) |
151
163
 
@@ -199,7 +211,9 @@ Um **✓** verde ao lado de um nome indica um peer verificado por SAS; um **✗*
199
211
  | `/accept [id]` / `/reject [id]` | Aceita / recusa uma oferta de arquivo recebida |
200
212
  | `/img [caminho]` | Renderiza a última imagem recebida em **alta resolução** (kitty/iTerm2) |
201
213
  | `/retention <7d\|24h\|30m>` | Purga o histórico local mais antigo que o tempo dado |
202
- | `/search <termo>` | Busca no histórico local cifrado |
214
+ | `/search <termo>` | Busca no histórico local cifrado (em disco, entre sessões) |
215
+ | `/find [termo]` — **Ctrl+F** | Busca **no histórico da sala na tela** e, com Enter, **salta para a mensagem** destacada |
216
+ | `/doctor [host:porta]` | Diagnostica por que a conexão falha: endereço, DNS, porta TCP, TLS (CA ou self-signed) e versão de protocolo — cada falha com o que fazer |
203
217
  | `/history [n]` | Últimas n mensagens do histórico |
204
218
  | `/export [caminho]` | Exporta o histórico em .txt ou .json (texto plano!) |
205
219
 
@@ -213,8 +227,8 @@ Um **✓** verde ao lado de um nome indica um peer verificado por SAS; um **✗*
213
227
  | `/away [motivo]` / `/back` | Marca/remove ausência — enquanto ausente, não-lidas são contadas (`[away · N new]`) e o `/back` mostra um resumo |
214
228
  | `/mentions [n]` | Menções recentes a você na sessão (quem, onde, quando) |
215
229
  | `/status <texto\|off>` | Status livre — emoji à vontade (`/status :fire: codando`) |
216
- | `/react <emoji>` | Reage à última mensagem |
217
- | `/edit` `/delete` | Edita/apaga sua última mensagem |
230
+ | `/react <emoji>` | Reage à última mensagem — o emoji aparece **na própria mensagem**, com contagem quando várias pessoas reagem |
231
+ | `/edit` `/delete` | Edita ou apaga sua última mensagem — a **linha original é reescrita no lugar** (marcada *(edited)*) ou vira uma lápide, em vez de uma linha nova que você precisa juntar mentalmente à original |
218
232
  | `/pin` `/unpin` `/pins` | Fixa mensagens |
219
233
  | `/sound` `/notify` | Notificações sonoras / desktop |
220
234
  | `/dnd [on\|off\|mentions\|HH:MM-HH:MM]` | Não perturbe, só menções, ou horário silencioso |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ciphermesh",
3
- "version": "2.3.0",
3
+ "version": "2.5.0",
4
4
  "description": "Secure terminal chat for the local network (LAN) with real end-to-end encryption (E2EE) using libsodium",
5
5
  "type": "module",
6
6
  "main": "src/client/index.js",