You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 1b72ebe
Browse filesBrowse the repository at this point in the historyBrowse files
Anthony: "qc tui needs an @ and optional partial-name[tab] to autocomplete like
both x.com and irc do" ... "add that to all surfaces pwa/desktop/cli/mcp".
- src/lib/chat/mentions.js: one shared module. mentionAt (the @word at the
cursor, never a@b.com), matchMentions (username prefix, display-name word,
substring), completeMention (Tab, Tab again cycles, Shift+Tab back),
expandMentions (unique @partial -> @username for non-interactive sends).
- Web composer (PWA and the installed desktop app): x.com-style list above the
composer as you type @..., arrows move, Tab/Enter pick, Tab again cycles, Esc
closes, tap picks on phones. EmojiEditor gains onKeyDown/onCaret/ref.replace.
- qc TUI: Tab/Shift+Tab complete inside an @name (otherwise Tab still switches
panes); the line above the composer lists the matches.
- qc send expands a unique @partial and warns on ambiguous ones; new
qc mentions <chat> [@partial].
- MCP: send_message expands @partials (reports mentions/ambiguous); new
list_mentions tool.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: packages/qryptchat/README.md
+5-2Lines changed: 5 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -35,7 +35,8 @@ The first run signs you in through your browser, then opens your chats.
35
35
| Enter | send (or open the highlighted chat) |
36
36
| Ctrl+E | the emoji picker: search, recents and every group, drawn with [OpenEmoji](https://github.com/profullstack/openemoji)|
37
37
|`:rocket:`| shortcodes turn into emoji when you send |
38
-
| Tab / Esc | move between the chat list and the composer |
38
+
|`@``@ali` + Tab | complete a mention, like x.com and IRC: Tab again cycles the matches, Shift+Tab goes back; the line above the composer lists who matches |
39
+
| Tab / Esc | move between the chat list and the composer (Tab completes instead when the cursor is in an `@name`) |
39
40
| Ctrl+N / Ctrl+P | next / previous chat |
40
41
| PgUp / PgDn, wheel | scroll back through the conversation |
41
42
| Ctrl+R | reload |
@@ -49,6 +50,8 @@ The mouse works too: click a chat, scroll the transcript, click an emoji. Unread
49
50
qc chats # id and name of every chat
50
51
qc read alice -n 20 # the last 20 messages, decrypted
51
52
qc send alice "on my way"# encrypted to every participant
53
+
qc send ops "@ri deploy is done"# an @partial matching one person is sent as @riotcoder
54
+
qc mentions ops @al # who @al completes to: @alice, @alina
52
55
echo"deploy done"| qc send ops -
53
56
qc listen --json # new messages as NDJSON, until you stop it
54
57
qc whoami
@@ -62,7 +65,7 @@ qc whoami
62
65
qc mcp
63
66
```
64
67
65
-
runs an MCP server on stdio with three tools: `list_chats`, `read_chat`and `send_message`. Encryption and decryption happen on this machine; the server only ever sees ciphertext. For Claude Code:
68
+
runs an MCP server on stdio with `list_chats`, `read_chat`, `send_message`, `list_mentions` (who an `@partial` completes to) and `react_to_message`; `send_message` writes out an `@partial` that matches exactly one person. Encryption and decryption happen on this machine; the server only ever sees ciphertext. For Claude Code:
Copy file name to clipboardExpand all lines: packages/qryptchat/package.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
{
2
2
"name": "@profullstack/qryptchat",
3
-
"version": "0.10.0",
3
+
"version": "0.11.0",
4
4
"description": "qc: qrypt.chat in your terminal. A full-screen end-to-end encrypted chat client (ML-KEM-1024), plus a scriptable CLI and an MCP server.",
description: 'Send an end-to-end encrypted message (ML-KEM-1024) to a conversation.',
30
+
description: 'Send an end-to-end encrypted message (ML-KEM-1024) to a conversation. An @partial in the text that matches exactly one participant is written out as their full @username (list_mentions shows who matches).',
31
31
inputSchema: {
32
32
type: 'object',
33
33
properties: {
@@ -39,6 +39,19 @@ const TOOLS = [
39
39
additionalProperties: false,
40
40
},
41
41
},
42
+
{
43
+
name: 'list_mentions',
44
+
description: 'Who an @mention can complete to in a conversation, best match first (like typing @ali then Tab). Without partial: everyone you can mention.',
45
+
inputSchema: {
46
+
type: 'object',
47
+
properties: {
48
+
chat: {type: 'string',description: 'Conversation id or part of its name'},
49
+
partial: {type: 'string',description: 'Optional: the start of a name, with or without the @'},
50
+
},
51
+
required: ['chat'],
52
+
additionalProperties: false,
53
+
},
54
+
},
42
55
{
43
56
name: 'react_to_message',
44
57
description: 'React to a message with an emoji (Signal-style: one reaction per person; a new one replaces yours). End-to-end encrypted.',
0 commit comments