summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/hooks/useCompletion.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/ui/hooks/useCompletion.ts')
-rw-r--r--packages/cli/src/ui/hooks/useCompletion.ts28
1 files changed, 28 insertions, 0 deletions
diff --git a/packages/cli/src/ui/hooks/useCompletion.ts b/packages/cli/src/ui/hooks/useCompletion.ts
index b7603720..5217e60c 100644
--- a/packages/cli/src/ui/hooks/useCompletion.ts
+++ b/packages/cli/src/ui/hooks/useCompletion.ts
@@ -127,6 +127,34 @@ export function useCompletion(
// --- Handle Slash Command Completion ---
if (trimmedQuery.startsWith('/')) {
+ const parts = trimmedQuery.substring(1).split(' ');
+ const commandName = parts[0];
+ const subCommand = parts.slice(1).join(' ');
+
+ const command = slashCommands.find(
+ (cmd) => cmd.name === commandName || cmd.altName === commandName,
+ );
+
+ if (command && command.completion) {
+ const fetchAndSetSuggestions = async () => {
+ setIsLoadingSuggestions(true);
+ if (command.completion) {
+ const results = await command.completion();
+ const filtered = results.filter((r) => r.startsWith(subCommand));
+ const newSuggestions = filtered.map((s) => ({
+ label: s,
+ value: s,
+ }));
+ setSuggestions(newSuggestions);
+ setShowSuggestions(newSuggestions.length > 0);
+ setActiveSuggestionIndex(newSuggestions.length > 0 ? 0 : -1);
+ }
+ setIsLoadingSuggestions(false);
+ };
+ fetchAndSetSuggestions();
+ return;
+ }
+
const partialCommand = trimmedQuery.substring(1);
const filteredSuggestions = slashCommands
.filter(