summaryrefslogtreecommitdiff
path: root/packages/cli/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src')
-rw-r--r--packages/cli/src/ui/hooks/slashCommandProcessor.ts31
-rw-r--r--packages/cli/src/ui/hooks/useCompletion.ts11
2 files changed, 19 insertions, 23 deletions
diff --git a/packages/cli/src/ui/hooks/slashCommandProcessor.ts b/packages/cli/src/ui/hooks/slashCommandProcessor.ts
index 33b59b68..b4401eef 100644
--- a/packages/cli/src/ui/hooks/slashCommandProcessor.ts
+++ b/packages/cli/src/ui/hooks/slashCommandProcessor.ts
@@ -11,6 +11,7 @@ import { getCommandFromQuery } from '../utils/commandUtils.js';
export interface SlashCommand {
name: string; // slash command
+ altName?: string; // alternative name for the command
description: string; // flavor text in UI
action: (value: PartListUnion) => void;
}
@@ -37,6 +38,7 @@ export const useSlashCommandProcessor = (
const slashCommands: SlashCommand[] = [
{
name: 'help',
+ altName: '?',
description: 'for help on gemini-code',
action: (_value: PartListUnion) => {
setDebugMessage('Opening help.');
@@ -61,31 +63,12 @@ export const useSlashCommandProcessor = (
},
},
{
- name: 'exit',
- description: '',
- action: (_value: PartListUnion) => {
- setDebugMessage('Exiting. Good-bye.');
- const timestamp = getNextMessageId(Date.now());
- addHistoryItem(
- setHistory,
- { type: 'info', text: 'good-bye!' },
- timestamp,
- );
- process.exit(0);
- },
- },
- {
- // TODO: dedup with exit by adding altName or cmdRegex.
name: 'quit',
+ altName: 'exit',
description: '',
action: (_value: PartListUnion) => {
setDebugMessage('Quitting. Good-bye.');
const timestamp = getNextMessageId(Date.now());
- addHistoryItem(
- setHistory,
- { type: 'info', text: 'good-bye!' },
- timestamp,
- );
process.exit(0);
},
},
@@ -102,12 +85,16 @@ export const useSlashCommandProcessor = (
const [symbol, test] = getCommandFromQuery(trimmed);
// Skip non slash commands
- if (symbol !== '/') {
+ if (symbol !== '/' && symbol !== '?') {
return false;
}
for (const cmd of slashCommands) {
- if (test === cmd.name) {
+ if (
+ test === cmd.name ||
+ test === cmd.altName ||
+ symbol === cmd.altName
+ ) {
// Add user message *before* execution
const userMessageTimestamp = Date.now();
addHistoryItem(
diff --git a/packages/cli/src/ui/hooks/useCompletion.ts b/packages/cli/src/ui/hooks/useCompletion.ts
index 31c59bcf..97ad48ed 100644
--- a/packages/cli/src/ui/hooks/useCompletion.ts
+++ b/packages/cli/src/ui/hooks/useCompletion.ts
@@ -119,9 +119,18 @@ export function useCompletion(
// --- Handle Slash Command Completion ---
if (trimmedQuery.startsWith('/')) {
const partialCommand = trimmedQuery.substring(1);
- const filteredSuggestions = slashCommands
+ 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();