Skip to content

feat: @mention autocomplete everywhere: web/PWA, TUI, CLI, MCP (0.16.0, qc 0.11.0) - #339

Merged
ralyodio merged 1 commit into
masterfrom
feat/mention-autocomplete
Oct 26, 2026
Merged

ralyodio merged 1 commit into
masterfrom
feat/mention-autocomplete

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

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 [@partial].
  • MCP: send_message expands @partials (reports mentions/ambiguous); new
    list_mentions tool.

Tests: 131 files / 865 tests green locally (new: src/lib/chat/mentions.test.js, tests/components/MentionComplete.test.jsx, TUI + MCP cases). next build and build-qc pass.

🤖 Generated with Claude Code

…0, qc 0.11.0)

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>
@github-actions

Copy link
Copy Markdown

ThreatCrush Security Scan

17 finding(s)

MEDIUM: 13 | LOW: 4

Severity Rule Location
MEDIUM js-unescaped-html-sink src/app/blog/[slug]/page.jsx:38
MEDIUM js-unescaped-html-sink src/app/blog/[slug]/page.jsx:66
MEDIUM js-unescaped-html-sink src/app/faq/page.jsx:57
MEDIUM js-unescaped-html-sink src/app/layout.jsx:142
MEDIUM js-unescaped-html-sink src/app/layout.jsx:146
MEDIUM js-unescaped-html-sink src/app/page.jsx:50
MEDIUM js-open-redirect src/app/phone/page.jsx:70
MEDIUM redos-nested-quantifier src/lib/auth/dns-name.js:88
MEDIUM redos-nested-quantifier src/lib/chat/voice-mode.js:116
MEDIUM redos-nested-quantifier src/lib/chat/voice-mode.js:121
MEDIUM js-unescaped-html-sink src/lib/components/chat/MessageItem.jsx:85
MEDIUM js-unescaped-html-sink src/lib/components/chat/MessageItem.jsx:130
MEDIUM js-unescaped-html-sink src/lib/components/PitFooter.jsx:15
LOW secret-generic-credential src/app/api/auth/register-anon/route.test.js:32
LOW secret-jwt tests/debug-sms.js:10
LOW secret-generic-credential tests/private-key-import-export.test.js:252
LOW secret-generic-credential tests/private-key-import-export.test.js:264

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit 1b72ebe into master Oct 26, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant