summaryrefslogtreecommitdiff
path: root/packages/cli/src/services/BuiltinCommandLoader.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/cli/src/services/BuiltinCommandLoader.ts')
-rw-r--r--packages/cli/src/services/BuiltinCommandLoader.ts73
1 files changed, 73 insertions, 0 deletions
diff --git a/packages/cli/src/services/BuiltinCommandLoader.ts b/packages/cli/src/services/BuiltinCommandLoader.ts
new file mode 100644
index 00000000..259c6013
--- /dev/null
+++ b/packages/cli/src/services/BuiltinCommandLoader.ts
@@ -0,0 +1,73 @@
+/**
+ * @license
+ * Copyright 2025 Google LLC
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import { ICommandLoader } from './types.js';
+import { SlashCommand } from '../ui/commands/types.js';
+import { Config } from '@google/gemini-cli-core';
+import { aboutCommand } from '../ui/commands/aboutCommand.js';
+import { authCommand } from '../ui/commands/authCommand.js';
+import { bugCommand } from '../ui/commands/bugCommand.js';
+import { chatCommand } from '../ui/commands/chatCommand.js';
+import { clearCommand } from '../ui/commands/clearCommand.js';
+import { compressCommand } from '../ui/commands/compressCommand.js';
+import { copyCommand } from '../ui/commands/copyCommand.js';
+import { corgiCommand } from '../ui/commands/corgiCommand.js';
+import { docsCommand } from '../ui/commands/docsCommand.js';
+import { editorCommand } from '../ui/commands/editorCommand.js';
+import { extensionsCommand } from '../ui/commands/extensionsCommand.js';
+import { helpCommand } from '../ui/commands/helpCommand.js';
+import { ideCommand } from '../ui/commands/ideCommand.js';
+import { mcpCommand } from '../ui/commands/mcpCommand.js';
+import { memoryCommand } from '../ui/commands/memoryCommand.js';
+import { privacyCommand } from '../ui/commands/privacyCommand.js';
+import { quitCommand } from '../ui/commands/quitCommand.js';
+import { restoreCommand } from '../ui/commands/restoreCommand.js';
+import { statsCommand } from '../ui/commands/statsCommand.js';
+import { themeCommand } from '../ui/commands/themeCommand.js';
+import { toolsCommand } from '../ui/commands/toolsCommand.js';
+
+/**
+ * Loads the core, hard-coded slash commands that are an integral part
+ * of the Gemini CLI application.
+ */
+export class BuiltinCommandLoader implements ICommandLoader {
+ constructor(private config: Config | null) {}
+
+ /**
+ * Gathers all raw built-in command definitions, injects dependencies where
+ * needed (e.g., config) and filters out any that are not available.
+ *
+ * @param _signal An AbortSignal (unused for this synchronous loader).
+ * @returns A promise that resolves to an array of `SlashCommand` objects.
+ */
+ async loadCommands(_signal: AbortSignal): Promise<SlashCommand[]> {
+ const allDefinitions: Array<SlashCommand | null> = [
+ aboutCommand,
+ authCommand,
+ bugCommand,
+ chatCommand,
+ clearCommand,
+ compressCommand,
+ copyCommand,
+ corgiCommand,
+ docsCommand,
+ editorCommand,
+ extensionsCommand,
+ helpCommand,
+ ideCommand(this.config),
+ mcpCommand,
+ memoryCommand,
+ privacyCommand,
+ quitCommand,
+ restoreCommand(this.config),
+ statsCommand,
+ themeCommand,
+ toolsCommand,
+ ];
+
+ return allDefinitions.filter((cmd): cmd is SlashCommand => cmd !== null);
+ }
+}