/**
 * @license
 * Copyright 2025 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */
import { aboutCommand } from '../ui/commands/aboutCommand.js';
import { agentsCommand } from '../ui/commands/agentsCommand.js';
import { arenaCommand } from '../ui/commands/arenaCommand.js';
import { approvalModeCommand } from '../ui/commands/approvalModeCommand.js';
import { authCommand } from '../ui/commands/authCommand.js';
import { btwCommand } from '../ui/commands/btwCommand.js';
import { bugCommand } from '../ui/commands/bugCommand.js';
import { clearCommand } from '../ui/commands/clearCommand.js';
import { deleteCommand } from '../ui/commands/deleteCommand.js';
import { compressCommand } from '../ui/commands/compressCommand.js';
import { contextCommand } from '../ui/commands/contextCommand.js';
import { copyCommand } from '../ui/commands/copyCommand.js';
import { docsCommand } from '../ui/commands/docsCommand.js';
import { doctorCommand } from '../ui/commands/doctorCommand.js';
import { directoryCommand } from '../ui/commands/directoryCommand.js';
import { editorCommand } from '../ui/commands/editorCommand.js';
import { exportCommand } from '../ui/commands/exportCommand.js';
import { extensionsCommand } from '../ui/commands/extensionsCommand.js';
import { helpCommand } from '../ui/commands/helpCommand.js';
import { hooksCommand } from '../ui/commands/hooksCommand.js';
import { ideCommand } from '../ui/commands/ideCommand.js';
import { createDebugLogger } from '@hoptrendy/hopcode-core';
import { initCommand } from '../ui/commands/initCommand.js';
import { languageCommand } from '../ui/commands/languageCommand.js';
import { mcpCommand } from '../ui/commands/mcpCommand.js';
import { dreamCommand } from '../ui/commands/dreamCommand.js';
import { forgetCommand } from '../ui/commands/forgetCommand.js';
import { memoryCommand } from '../ui/commands/memoryCommand.js';
import { modelCommand } from '../ui/commands/modelCommand.js';
import { manageModelsCommand } from '../ui/commands/manageModelsCommand.js';
import { rememberCommand } from '../ui/commands/rememberCommand.js';
import { planCommand } from '../ui/commands/planCommand.js';
import { permissionsCommand } from '../ui/commands/permissionsCommand.js';
import { trustCommand } from '../ui/commands/trustCommand.js';
import { quitCommand } from '../ui/commands/quitCommand.js';
import { recapCommand } from '../ui/commands/recapCommand.js';
import { renameCommand } from '../ui/commands/renameCommand.js';
import { restoreCommand } from '../ui/commands/restoreCommand.js';
import { resumeCommand } from '../ui/commands/resumeCommand.js';
import { rewindCommand } from '../ui/commands/rewindCommand.js';
import { settingsCommand } from '../ui/commands/settingsCommand.js';
import { skillsCommand } from '../ui/commands/skillsCommand.js';
import { statsCommand } from '../ui/commands/statsCommand.js';
import { summaryCommand } from '../ui/commands/summaryCommand.js';
import { terminalSetupCommand } from '../ui/commands/terminalSetupCommand.js';
import { themeCommand } from '../ui/commands/themeCommand.js';
import { toolsCommand } from '../ui/commands/toolsCommand.js';
import { vimCommand } from '../ui/commands/vimCommand.js';
import { setupGithubCommand } from '../ui/commands/setupGithubCommand.js';
import { insightCommand } from '../ui/commands/insightCommand.js';
import { statuslineCommand } from '../ui/commands/statuslineCommand.js';
const builtinDebugLogger = createDebugLogger('BUILTIN_COMMAND_LOADER');
/**
 * Loads the core, hard-coded slash commands that are an integral part
 * of the Qwen Code application.
 */
export class BuiltinCommandLoader {
    config;
    constructor(config) {
        this.config = config;
    }
    /**
     * 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) {
        // Load ideCommand separately with error handling so that a failure
        // (e.g., platform-specific process detection on Windows) does not
        // prevent ALL built-in commands from loading.
        let resolvedIdeCommand = null;
        try {
            resolvedIdeCommand = await ideCommand();
        }
        catch (error) {
            builtinDebugLogger.warn('Failed to load IDE command:', error instanceof Error ? error.message : String(error));
        }
        const allDefinitions = [
            aboutCommand,
            agentsCommand,
            arenaCommand,
            approvalModeCommand,
            authCommand,
            btwCommand,
            bugCommand,
            clearCommand,
            compressCommand,
            contextCommand,
            copyCommand,
            deleteCommand,
            docsCommand,
            doctorCommand,
            directoryCommand,
            editorCommand,
            exportCommand,
            extensionsCommand,
            helpCommand,
            hooksCommand,
            resolvedIdeCommand,
            initCommand,
            languageCommand,
            mcpCommand,
            ...(this.config?.getManagedAutoMemoryEnabled()
                ? [dreamCommand, forgetCommand]
                : []),
            memoryCommand,
            modelCommand,
            manageModelsCommand,
            rememberCommand,
            planCommand,
            permissionsCommand,
            ...(this.config?.getFolderTrust() ? [trustCommand] : []),
            quitCommand,
            recapCommand,
            renameCommand,
            restoreCommand(this.config),
            resumeCommand,
            rewindCommand,
            skillsCommand,
            statsCommand,
            summaryCommand,
            themeCommand,
            toolsCommand,
            settingsCommand,
            vimCommand,
            setupGithubCommand,
            terminalSetupCommand,
            insightCommand,
            statuslineCommand,
        ];
        return allDefinitions
            .filter((cmd) => cmd !== null)
            .map((cmd) => ({
            ...cmd,
            source: 'builtin-command',
            sourceLabel: 'Built-in',
            modelInvocable: false,
            userInvocable: cmd.userInvocable ?? true,
        }));
    }
}
//# sourceMappingURL=BuiltinCommandLoader.js.map