Why
Design §4 (lines 1713-1735) shows the chat composer with a floating popover above the input listing slash commands as the user types /. The TUI already has full slash + @-mention + #-memo semantics — the dashboard textarea has none of it.
Right now typing / in the dashboard sends the literal string verbatim. No completion, no preview of available commands. Same for @path (file inline) and #note (memory pin) which just go through as text.
Scope
Slash popover
- Reuse
SLASH_COMMANDS + suggestSlashCommands already in src/cli/ui/slash/commands.ts — surface them via a new GET /api/slash/commands?codeMode=true endpoint
- Trigger when input starts with
/ and has no whitespace yet
- ↑/↓ navigate, Tab insert, Enter run-and-submit
- Show
name + summary per row; group label as section header
@ mention popover (project files)
- Trigger after
@ with no whitespace following
- New
GET /api/files?prefix=<part> endpoint that walks cwd (cap to ~50 results, ignore .gitignore + binaries)
- Tab insert path-relative-to-cwd; Enter keep editing (don't send)
# memo passthrough
- Lower priority; just send-as-is. The TUI auto-routes
#note to memory append. Server side already handles this when submitPrompt runs through TUI handleSubmit.
Layout
- Popover positioned above the composer (
position:absolute; bottom: calc(100% + 6px))
- Width 380px, max-height 320px with scroll
- Close on click-outside, Esc, or non-matching keystroke
Constraints
- TUI side is already done — this is dashboard-only plumbing
- Don't duplicate slash command definitions — fetch from server so additions auto-show
- Keyboard-first: every popover action must work without the mouse
Why
Design §4 (lines 1713-1735) shows the chat composer with a floating popover above the input listing slash commands as the user types
/. The TUI already has full slash +@-mention +#-memo semantics — the dashboard textarea has none of it.Right now typing
/in the dashboard sends the literal string verbatim. No completion, no preview of available commands. Same for@path(file inline) and#note(memory pin) which just go through as text.Scope
Slash popover
SLASH_COMMANDS+suggestSlashCommandsalready insrc/cli/ui/slash/commands.ts— surface them via a newGET /api/slash/commands?codeMode=trueendpoint/and has no whitespace yetname+summaryper row; group label as section header@ mention popover (project files)
@with no whitespace followingGET /api/files?prefix=<part>endpoint that walkscwd(cap to ~50 results, ignore .gitignore + binaries)# memo passthrough
#noteto memory append. Server side already handles this whensubmitPromptruns through TUI handleSubmit.Layout
position:absolute; bottom: calc(100% + 6px))Constraints