ciphermesh 2.13.0 → 2.14.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/CHANGELOG.md +69 -0
- package/README.md +4 -3
- package/README.pt-BR.md +4 -3
- package/docs/ARCHITECTURE.md +321 -225
- package/docs/SETUP.md +18 -0
- package/docs/commands.json +2 -2
- package/package.json +2 -2
- package/src/client/ChatController.js +22 -4
- package/src/client/UI.js +617 -124
- package/src/client/keyboard.js +388 -0
- package/src/p2p/P2PChatController.js +21 -4
- package/src/shared/desktopNotify.js +204 -0
- package/src/shared/notifyWorker.js +46 -0
- package/src/shared/tips.js +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,75 @@
|
|
|
3
3
|
Notable changes per release. Older versions are reconstructed from the git
|
|
4
4
|
history — the commit bodies and pull requests remain the fuller record.
|
|
5
5
|
|
|
6
|
+
## 2.14.0
|
|
7
|
+
|
|
8
|
+
**The chat, read properly.** Three things a user reported in the same session:
|
|
9
|
+
notifications wrecking the screen, Shift+Enter sending instead of breaking a
|
|
10
|
+
line, and long messages running the whole width of the terminal.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **Messages are laid out as blocks.** A header naming the sender, then the text
|
|
15
|
+
wrapped at 65 % of the window (78 columns at most) and indented under it,
|
|
16
|
+
instead of one line handed to the terminal's own wrapping and left to run into
|
|
17
|
+
the border. Own messages are no longer right-aligned — everything starts at the
|
|
18
|
+
same column and a coloured rule down the left says what a message is: yellow
|
|
19
|
+
when it mentions you, magenta for a DM, the accent for your own.
|
|
20
|
+
|
|
21
|
+
Runs from one sender fold under a single header, but only inside the same
|
|
22
|
+
minute, so folding a run never costs you a timestamp. Notices — system, error,
|
|
23
|
+
`/me`, tombstones — share the gutter and wrap with a hanging indent, though at
|
|
24
|
+
the window's width rather than the reading width, so `/help`'s table is not
|
|
25
|
+
folded in half on a window with room to spare.
|
|
26
|
+
|
|
27
|
+
Everything is laid out again when the terminal is resized, stored room buffers
|
|
28
|
+
included, so the scrollback is never left measured for a window you no longer
|
|
29
|
+
have.
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- **Shift+Enter inserts a newline.** A terminal cannot tell it from Enter unless
|
|
34
|
+
asked, so CipherMesh now negotiates the kitty keyboard protocol and xterm's
|
|
35
|
+
`modifyOtherKeys` on startup and undoes both on the way out. What the terminal
|
|
36
|
+
reports back is decoded ahead of the UI's key parser, which could not read it —
|
|
37
|
+
and without that step would have typed `13;2u` into the composer.
|
|
38
|
+
|
|
39
|
+
**Alt+Enter was broken too** and works now, on every terminal, protocol or not;
|
|
40
|
+
Ctrl+J still does the same. `CIPHERMESH_LEGACY_KEYS=1` turns the negotiation off
|
|
41
|
+
for terminals that dislike it.
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
|
|
45
|
+
- **Desktop notifications no longer wreck the chat on Windows.** SnoreToast, the
|
|
46
|
+
back-end behind `node-notifier`, ignores the pipes it is given when
|
|
47
|
+
notifications are disabled for the application and writes its diagnostics to
|
|
48
|
+
the attached console instead — the one the chat is drawn on. A room could
|
|
49
|
+
become unreadable, one burst per incoming message, with `/notify off` the only
|
|
50
|
+
way out.
|
|
51
|
+
|
|
52
|
+
Notifications are now delivered on Windows by a detached helper with no console
|
|
53
|
+
of its own, so nothing it prints can reach the terminal. The first refusal also
|
|
54
|
+
mutes them for the session and says so once, in one line with the reason
|
|
55
|
+
summarised rather than the raw command line; sound alerts keep working and
|
|
56
|
+
`/notify on` retries. And they are rate-limited to one per three seconds, which
|
|
57
|
+
was the other half of the complaint.
|
|
58
|
+
|
|
59
|
+
### Internal
|
|
60
|
+
|
|
61
|
+
- **`docs/ARCHITECTURE.md` matches the code again, and a test keeps it that
|
|
62
|
+
way.** It listed `play-sound` as a production dependency, which it is not, and
|
|
63
|
+
omitted seven of the eleven that are; its directory tree named files that do
|
|
64
|
+
not exist and 2 of the 27 modules under `src/shared/`; about half the document
|
|
65
|
+
was still Portuguese; and it called the project SecureLAN Chat, three renames
|
|
66
|
+
later. `test/architecture-doc.test.js` now fails on any of those — the same
|
|
67
|
+
shape as the command-list check, for the same reason.
|
|
68
|
+
|
|
69
|
+
- The UI can be tested headlessly. `UI` takes the streams blessed drives, so the
|
|
70
|
+
layout — wrapping, alignment, relayout — runs against a fake terminal instead
|
|
71
|
+
of only being checked by eye.
|
|
72
|
+
|
|
73
|
+
- eslint 10.9.1, github/codeql-action 4.37.9.
|
|
74
|
+
|
|
6
75
|
## 2.13.0
|
|
7
76
|
|
|
8
77
|
**Multi-device.** One identity, several devices, and none of them holding a copy
|
package/README.md
CHANGED
|
@@ -54,7 +54,7 @@ forwarding, survives CGNAT).
|
|
|
54
54
|
| 🗂️ | **Encrypted local history** | Opt-in (passphrase only), Argon2id + XSalsa20-Poly1305, `/search` & `/export` |
|
|
55
55
|
| 🖼️ | **Image previews** | Received photos render right in the chat as colored half-blocks |
|
|
56
56
|
| 📎 | **Resumable transfers** | Lost chunks are re-requested; reconnects resume from where they stopped |
|
|
57
|
-
| 💬 | **Modern chat feel** |
|
|
57
|
+
| 💬 | **Modern chat feel** | Messages laid out as wrapped blocks with a coloured rule on your own, per-user emoji avatars, replies with quotes, `:fire:` → 🔥 |
|
|
58
58
|
| 🎞️ | **Animated UI** | Splash intro, reconnect spinner, live transfer bars (shimmer + ETA), a lock-closing handshake on connect, and a pulsing "new messages ↓" pill |
|
|
59
59
|
| 👻 | **Deniable & ephemeral** | Symmetric-crypto deniable mode; ephemeral messages _burn away_ char-by-char when they expire |
|
|
60
60
|
| 🔒 | **Private rooms** | `/create <room> <password>` — zero-knowledge: the password never leaves your machine (Argon2id → Ed25519 challenge-response) and room content gets an extra symmetric layer the relay can't fake its way into |
|
|
@@ -302,13 +302,14 @@ A green **✓** next to a name marks a SAS-verified peer; a red **✗** flags a
|
|
|
302
302
|
| `/react <emoji>` | React to the last message — the emoji lands **on the message**, with a count when several people react |
|
|
303
303
|
| `/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 |
|
|
304
304
|
| `/pin` `/unpin` `/pins` | Pin messages |
|
|
305
|
-
| `/sound`
|
|
305
|
+
| `/sound` | Sound alerts on incoming messages |
|
|
306
|
+
| `/notify` | Desktop notifications — rate-limited, and muted for the session (with a line saying why) if the OS refuses them |
|
|
306
307
|
| `/dnd [on\|off\|mentions\|HH:MM-HH:MM]` | Do-not-disturb, mentions-only, or quiet hours |
|
|
307
308
|
| `/clear` | Clear the chat |
|
|
308
309
|
|
|
309
310
|
</details>
|
|
310
311
|
|
|
311
|
-
Typing `:fire:` anywhere becomes 🔥 (Tab autocompletes shortcodes). **Ctrl+K** opens a fuzzy command palette, **Ctrl+E** an emoji picker. PageUp/PageDown scroll the history. **
|
|
312
|
+
Typing `:fire:` anywhere becomes 🔥 (Tab autocompletes shortcodes). **Ctrl+K** opens a fuzzy command palette, **Ctrl+E** an emoji picker. PageUp/PageDown scroll the history. **Shift+Enter** inserts a newline for multi-line messages — CipherMesh negotiates the kitty keyboard protocol / `modifyOtherKeys` on startup so the terminal can tell it apart from Enter, and **Alt+Enter** and **Ctrl+J** do the same on terminals that support neither (`CIPHERMESH_LEGACY_KEYS=1` turns the negotiation off). Enter sends. Pasting multi-line text (code included) keeps its line breaks — paste, check, Enter. Markdown works: \`code\`, **bold**, _italic_, links, plus fenced \`\`\` code blocks and | tables |. Received images preview inline (half-blocks) and render full-res with `/img` on kitty/iTerm2. Messages are laid out as blocks — a header naming the sender, then the text wrapped well short of the window and indented under it, with a coloured rule down the left of your own, of DMs and of anything that mentions you. Day separators and message grouping keep the log clean.
|
|
312
313
|
|
|
313
314
|
### First run & config file
|
|
314
315
|
|
package/README.pt-BR.md
CHANGED
|
@@ -54,7 +54,7 @@ forwarding, imune a CGNAT).
|
|
|
54
54
|
| 🗂️ | **Histórico local cifrado** | Opt-in (só com passphrase), Argon2id + XSalsa20-Poly1305, `/search` e `/export` |
|
|
55
55
|
| 🖼️ | **Preview de imagens** | Fotos recebidas renderizam no chat em half-blocks coloridos |
|
|
56
56
|
| 📎 | **Transferências com resume** | Chunks perdidos são re-pedidos; reconexão retoma de onde parou |
|
|
57
|
-
| 💬 | **Cara de app moderno** |
|
|
57
|
+
| 💬 | **Cara de app moderno** | Mensagens em blocos com quebra de linha e uma barra colorida nas suas, avatar de emoji por usuário, reply com citação, `:fire:` → 🔥 |
|
|
58
58
|
| 🎞️ | **Interface animada** | Splash na abertura, spinner de reconexão, barra de transferência viva (shimmer + ETA), cadeado fechando no handshake e um selo pulsante "novas mensagens ↓" |
|
|
59
59
|
| 👻 | **Deniable e efêmeras** | Modo de negação plausível (crypto simétrica); mensagens efêmeras _queimam_ caractere a caractere ao expirar |
|
|
60
60
|
| 🔒 | **Salas privadas** | `/create <sala> <senha>` — zero-knowledge: a senha nunca sai da sua máquina (Argon2id → challenge-response Ed25519) e o conteúdo da sala ganha uma camada simétrica extra que nem um relay malicioso atravessa |
|
|
@@ -302,14 +302,15 @@ Um **✓** verde ao lado de um nome indica um peer verificado por SAS; um **✗*
|
|
|
302
302
|
| `/react <emoji>` | Reage à última mensagem — o emoji aparece **na própria mensagem**, com contagem quando várias pessoas reagem |
|
|
303
303
|
| `/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 |
|
|
304
304
|
| `/pin` `/unpin` `/pins` | Fixa mensagens |
|
|
305
|
-
| `/sound`
|
|
305
|
+
| `/sound` | Alertas sonoros ao receber mensagens |
|
|
306
|
+
| `/notify` | Notificações de desktop — com limite de frequência, e silenciadas na sessão (com uma linha a dizer porquê) se o SO as recusar |
|
|
306
307
|
| `/dnd [on\|off\|mentions\|HH:MM-HH:MM]` | Não perturbe, só menções, ou horário silencioso |
|
|
307
308
|
| `/clear` | Limpa o chat |
|
|
308
309
|
|
|
309
310
|
</details>
|
|
310
311
|
|
|
311
312
|
Digitar `:fire:` em qualquer lugar vira 🔥 (Tab autocompleta shortcodes).
|
|
312
|
-
**Ctrl+K** abre uma paleta de comandos fuzzy, **Ctrl+E** um seletor de emoji. PageUp/PageDown rolam o histórico. **
|
|
313
|
+
**Ctrl+K** abre uma paleta de comandos fuzzy, **Ctrl+E** um seletor de emoji. PageUp/PageDown rolam o histórico. **Shift+Enter** insere uma nova linha para mensagens de várias linhas — o CipherMesh negocia o kitty keyboard protocol / `modifyOtherKeys` no arranque para o terminal conseguir distingui-lo do Enter, e **Alt+Enter** e **Ctrl+J** fazem o mesmo em terminais que não suportam nenhum dos dois (`CIPHERMESH_LEGACY_KEYS=1` desliga a negociação). Enter envia. Colar texto multi-linha (código incluso) preserva as quebras — cola, confere, Enter. Markdown funciona: \`código\`, **negrito**, _itálico_, links, além de blocos de código \`\`\` e | tabelas |. Imagens recebidas têm preview inline (half-blocks) e renderizam em alta resolução com `/img` no kitty/iTerm2. As mensagens são desenhadas em blocos — um cabeçalho com o remetente e, por baixo, o texto quebrado bem antes da largura da janela, com uma barra colorida à esquerda nas suas, nas DMs e em tudo o que te mencione. Separadores de dia e agrupamento de mensagens deixam o log limpo.
|
|
313
314
|
|
|
314
315
|
### Primeira execução & arquivo de config
|
|
315
316
|
|