fix(tui): align slash command parsing and handlers

This commit is contained in:
William Valentin
2026-02-16 12:22:40 -08:00
parent fd7ad7bfb0
commit 1d16cd54e6
4 changed files with 176 additions and 0 deletions
+31
View File
@@ -70,6 +70,7 @@ export function App({
const [streamingContent, setStreamingContent] = useState('');
const [scrollOffset, setScrollOffset] = useState(0);
const [tokenUsage, setTokenUsage] = useState<TokenUsage>({ inputTokens: 0, outputTokens: 0 });
const [verbose, setVerbose] = useState(false);
const [currentModel, setCurrentModel] = useState(() => {
if (!modelRouter) {return model;}
return modelRouter.getLabel(modelRouter.getTier());
@@ -227,6 +228,24 @@ export function App({
return;
}
case 'compact': {
setMessages(prev => [...prev, session.addMessage({ role: 'assistant', content: 'Compact command is not available in fullscreen TUI mode.' })]);
return;
}
case 'usage': {
const text = `Token Usage\n\nTotal: ${tokenUsage.inputTokens} in / ${tokenUsage.outputTokens} out`;
setMessages(prev => [...prev, session.addMessage({ role: 'assistant', content: text })]);
return;
}
case 'verbose': {
const next = !verbose;
setVerbose(next);
setMessages(prev => [...prev, session.addMessage({ role: 'assistant', content: `Verbose mode: ${next ? 'on' : 'off'}` })]);
return;
}
case 'model': {
if (!modelRouter) {
setMessages(prev => [...prev, session.addMessage({ role: 'assistant', content: 'Model switching not available.' })]);
@@ -421,8 +440,20 @@ export function App({
return;
}
case 'backend':
case 'login':
case 'pair':
case 'elevate':
setMessages(prev => [...prev, session.addMessage({ role: 'assistant', content: `/${command.type} is not supported in fullscreen mode.` })]);
return;
case 'message':
break;
default: {
const exhaustive: never = command;
throw new Error(`Unhandled command: ${JSON.stringify(exhaustive)}`);
}
}
if (command.type !== 'message' || isStreaming) {