summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/hooks
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/ui/hooks')
-rw-r--r--packages/cli/src/ui/hooks/slashCommandProcessor.ts2
-rw-r--r--packages/cli/src/ui/hooks/useCompletion.ts38
2 files changed, 25 insertions, 15 deletions
diff --git a/packages/cli/src/ui/hooks/slashCommandProcessor.ts b/packages/cli/src/ui/hooks/slashCommandProcessor.ts
index e2b478e2..7ce3ae86 100644
--- a/packages/cli/src/ui/hooks/slashCommandProcessor.ts
+++ b/packages/cli/src/ui/hooks/slashCommandProcessor.ts
@@ -94,7 +94,7 @@ export const useSlashCommandProcessor = (
{
name: 'quit',
altName: 'exit',
- description: '',
+ description: 'exit the cli',
action: (_value: PartListUnion | string) => {
onDebugMessage('Quitting. Good-bye.');
process.exit(0);
diff --git a/packages/cli/src/ui/hooks/useCompletion.ts b/packages/cli/src/ui/hooks/useCompletion.ts
index 1c693f71..622dc4c4 100644
--- a/packages/cli/src/ui/hooks/useCompletion.ts
+++ b/packages/cli/src/ui/hooks/useCompletion.ts
@@ -119,20 +119,30 @@ export function useCompletion(
// --- Handle Slash Command Completion ---
if (trimmedQuery.startsWith('/')) {
const partialCommand = trimmedQuery.substring(1);
- const commands = slashCommands
- .map((cmd) => cmd.name)
- .concat(
- slashCommands
- .map((cmd) => cmd.altName)
- .filter((cmd) => cmd !== undefined),
- );
-
- const filteredSuggestions = commands
- .filter((name) => name.startsWith(partialCommand))
- // Filter out ? and any other single character commands
- .filter((name) => name.length > 1)
- .map((name) => ({ label: name, value: name }))
- .sort();
+ const filteredSuggestions = slashCommands
+ .filter(
+ (cmd) =>
+ cmd.name.startsWith(partialCommand) ||
+ cmd.altName?.startsWith(partialCommand),
+ )
+ // Filter out ? and any other single character commands unless it's the only char
+ .filter((cmd) => {
+ const nameMatch = cmd.name.startsWith(partialCommand);
+ const altNameMatch = cmd.altName?.startsWith(partialCommand);
+ if (partialCommand.length === 1) {
+ return nameMatch || altNameMatch; // Allow single char match if query is single char
+ }
+ return (
+ (nameMatch && cmd.name.length > 1) ||
+ (altNameMatch && cmd.altName && cmd.altName.length > 1)
+ );
+ })
+ .map((cmd) => ({
+ label: cmd.name, // Always show the main name as label
+ value: cmd.name, // Value should be the main command name for execution
+ description: cmd.description,
+ }))
+ .sort((a, b) => a.label.localeCompare(b.label));
setSuggestions(filteredSuggestions);
setShowSuggestions(filteredSuggestions.length > 0);