gemini-cli/packages/cli/src/ui/utils/commandUtils.ts

44 lines
1.4 KiB
TypeScript

/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
/**
* Checks if a query string potentially represents an '@' command.
* It triggers if the query starts with '@' or contains '@' preceded by whitespace
* and followed by a non-whitespace character.
*
* @param query The input query string.
* @returns True if the query looks like an '@' command, false otherwise.
*/
export const isAtCommand = (query: string): boolean =>
// Check if starts with @ OR has a space, then @, then a non-space character.
query.startsWith('@') || /\s@\S/.test(query);
/**
* Checks if a query string potentially represents an '/' command.
* It triggers if the query starts with '/'
*
* @param query The input query string.
* @returns True if the query looks like an '/' command, false otherwise.
*/
export const isSlashCommand = (query: string): boolean => query.startsWith('/');
const control_symbols: string[] = ['/', '@', '!', '?', '$'];
/**
* Returns the first word of query with optional leading slash, ampersand, bang.
*
* @param query The input query string.
* @returns optional leading symbol and first word of query
*/
export const getCommandFromQuery = (
query: string,
): [string | undefined, string] => {
const word = query.trim().split(/\s/, 1)[0];
if (word.length > 0 && control_symbols.includes(word[0])) {
return [word[0], word.slice(1)];
}
return [undefined, word];
};