UNPKG

@qodalis/angular-cli

Version:

A lightweight and flexible command-line interface (CLI) tool designed to streamline workflows and automate tasks for developers.

1 lines 320 kB
{"version":3,"file":"qodalis-angular-cli.mjs","sources":["../../../projects/cli/src/lib/cli/tokens/index.ts","../../../projects/cli/src/lib/cli/state/cli-state-store.ts","../../../projects/cli/src/lib/cli/state/cli-state-store-manager.ts","../../../projects/cli/src/lib/cli/context/cli-command-executution-context.ts","../../../projects/cli/src/lib/cli/services/cli-terminal-writer.ts","../../../projects/cli/src/lib/cli/services/progress-bars/cli-terminal-spinner.ts","../../../projects/cli/src/lib/cli/services/progress-bars/cli-terminal-progress-bar.ts","../../../projects/cli/src/lib/cli/services/cli-clipboard.ts","../../../projects/cli/src/lib/cli/context/errors/index.ts","../../../projects/cli/src/lib/cli/context/cli-execution-process.ts","../../../projects/cli/src/lib/cli/services/progress-bars/cli-terminal-text-animator.ts","../../../projects/cli/src/lib/cli/context/cli-execution-context.ts","../../../projects/cli/src/lib/cli/storage/cli-key-value-store.ts","../../../projects/cli/src/lib/cli/services/system/cli-boot.ts","../../../projects/cli/src/lib/version.ts","../../../projects/cli/src/lib/cli/constants/index.ts","../../../projects/cli/src/lib/utils/command-parser.ts","../../../projects/cli/src/lib/utils/dependency-injection.ts","../../../projects/cli/src/lib/utils/index.ts","../../../projects/cli/src/lib/cli/services/system/cli-welcome-message.service.ts","../../../projects/cli/src/lib/cli/processors/theme/types/index.ts","../../../projects/cli/src/lib/cli/services/cli-command-history.service.ts","../../../projects/cli/src/lib/cli/services/cli-user-session.service.ts","../../../projects/cli/src/lib/cli/services/cli-users-store.service.ts","../../../projects/cli/src/lib/utils/args-parser.ts","../../../projects/cli/src/lib/cli/services/cli-command-executor.service.ts","../../../projects/cli/src/lib/cli/services/cli-default-ping-server.service.ts","../../../projects/cli/src/lib/cli/services/script-loader.service.ts","../../../projects/cli/src/lib/addons/overlay.ts","../../../projects/cli/src/lib/cli-terminal/cli-terminal.component.ts","../../../projects/cli/src/lib/cli-terminal/cli-terminal.component.html","../../../projects/cli/src/lib/cli/cli.component.ts","../../../projects/cli/src/lib/cli/cli.component.html","../../../projects/cli/src/lib/collapsable-content/collapsable-content.component.ts","../../../projects/cli/src/lib/collapsable-content/collapsable-content.component.html","../../../projects/cli/src/lib/services/cli-can-view.service.ts","../../../projects/cli/src/lib/cli-panel/cli-panel.component.ts","../../../projects/cli/src/lib/cli-panel/cli-panel.component.html","../../../projects/cli/src/lib/cli/processors/cli-ping-command-processor.ts","../../../projects/cli/src/lib/cli/processors/cli-eval-command-processor.ts","../../../projects/cli/src/lib/cli/processors/system/cli-feedback-command-processor.ts","../../../projects/cli/src/lib/utils/arrays.ts","../../../projects/cli/src/lib/cli/processors/system/cli-help-command-processor.ts","../../../projects/cli/src/lib/cli/processors/system/cli-history-command-processor.ts","../../../projects/cli/src/lib/cli/processors/system/cli-hot-keys-command-processor.ts","../../../projects/cli/src/lib/cli/services/cli-package-manager.service.ts","../../../projects/cli/src/lib/cli/processors/system/cli-packages-command-processor.ts","../../../projects/cli/src/lib/cli/processors/system/cli-version-command-processor.ts","../../../projects/cli/src/lib/cli/processors/system/index.ts","../../../projects/cli/src/lib/cli/processors/misc/cli-clear-command-processor.ts","../../../projects/cli/src/lib/cli/processors/misc/cli-uname-command-processor.ts","../../../projects/cli/src/lib/cli/processors/misc/cli-echo-command-processor.ts","../../../projects/cli/src/lib/cli/processors/misc/cli-alias-command-processor.ts","../../../projects/cli/src/lib/cli/processors/misc/cli-unalias-command-processor.ts","../../../projects/cli/src/lib/cli/processors/misc/cli-sleep-command-processor.ts","../../../projects/cli/src/lib/cli/processors/misc/index.ts","../../../projects/cli/src/lib/cli/processors/users/cli-add-user-command-processor.ts","../../../projects/cli/src/lib/cli/processors/users/cli-list-users-command-processor.ts","../../../projects/cli/src/lib/cli/processors/users/cli-switch-user-command-processor.ts","../../../projects/cli/src/lib/cli/processors/users/cli-whoami-command-processor.ts","../../../projects/cli/src/lib/cli/processors/users/index.ts","../../../projects/cli/src/lib/services/cli-logger.service.ts","../../../projects/cli/src/lib/cli/services/cli-command-processor-registry.ts","../../../projects/cli/src/lib/cli/services/system/cli-service-provider.ts","../../../projects/cli/src/lib/cli/processors/theme/cli-theme-command-processor.ts","../../../projects/cli/src/lib/index.ts","../../../projects/cli/src/lib/cli.module.ts","../../../projects/cli/src/public-api.ts","../../../projects/cli/src/qodalis-angular-cli.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport {\n    ICliCommandProcessor,\n    ICliCommandProcessorRegistry,\n    ICliLogger,\n    ICliPingServerService,\n    ICliServiceProvider,\n    ICliUserSessionService,\n    ICliUsersStoreService,\n} from '@qodalis/cli-core';\n\n/**\n * Represents a command processor token for dependency injection\n */\nexport const CliCommandProcessor_TOKEN = new InjectionToken<\n    ICliCommandProcessor[]\n>('cli-processors');\n\n/**\n * Represents a user session service token for dependency injection\n */\nexport const ICliUserSessionService_TOKEN =\n    new InjectionToken<ICliUserSessionService>('cli-user-session-service');\n\n/**\n * Represents a user store service token for dependency injection\n */\nexport const ICliUsersStoreService_TOKEN = new InjectionToken<\n    ICliUsersStoreService[]\n>('cli-users-store-service');\n\n/**\n * Represents a ping server service token for dependency injection\n */\nexport const ICliPingServerService_TOKEN = new InjectionToken<\n    ICliPingServerService[]\n>('cli-ping-server-service');\n\n/**\n * Represents a logger token for dependency injection\n */\nexport const CliLogger_TOKEN = new InjectionToken<ICliLogger>('cli-logger');\n\n/**\n * Represents a command processor registry token for dependency injection\n */\nexport const CliProcessorsRegistry_TOKEN =\n    new InjectionToken<ICliCommandProcessorRegistry>('cli-processors-registry');\n\nexport const CliServiceProvider_TOKEN = new InjectionToken<ICliServiceProvider>(\n    'cli-service-provider',\n);\n","import {\n    CliState,\n    ICliServiceProvider,\n    ICliKeyValueStore,\n    ICliStateStore,\n} from '@qodalis/cli-core';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { distinctUntilChanged, map } from 'rxjs/operators';\n\nexport class CliStateStore implements ICliStateStore {\n    private state$: BehaviorSubject<CliState>;\n\n    private storageKey: string;\n\n    constructor(\n        private readonly services: ICliServiceProvider,\n        public readonly name: string,\n        private readonly initialState: CliState,\n    ) {\n        this.state$ = new BehaviorSubject<CliState>(initialState);\n\n        this.storageKey = `store-state-${name}`;\n    }\n\n    getState<T extends CliState = CliState>(): T {\n        return this.state$.getValue() as T;\n    }\n\n    updateState(newState: Partial<CliState>): void {\n        this.state$.next({ ...this.getState(), ...newState });\n    }\n\n    select<K>(selector: (state: CliState) => K): Observable<K> {\n        return this.state$.asObservable().pipe(\n            map(selector),\n            distinctUntilChanged(), // Emit only when the selected value changes\n        );\n    }\n\n    subscribe(callback: (state: CliState) => void): Subscription {\n        return this.state$.asObservable().subscribe(callback);\n    }\n\n    reset(): void {\n        this.state$.next(this.initialState);\n    }\n\n    async persist(): Promise<void> {\n        const keyValueStore = this.services.get<ICliKeyValueStore>(\n            'cli-key-value-store',\n        );\n\n        await keyValueStore.set(this.storageKey, this.getState());\n    }\n\n    async initialize(): Promise<void> {\n        const keyValueStore = this.services.get<ICliKeyValueStore>(\n            'cli-key-value-store',\n        );\n\n        const state = await keyValueStore.get<CliState>(this.storageKey);\n\n        if (state) {\n            this.state$.next(state);\n        }\n    }\n}\n","import {\n    ICliCommandProcessor,\n    ICliCommandProcessorRegistry,\n    ICliServiceProvider,\n    ICliStateStore,\n} from '@qodalis/cli-core';\nimport { CliStateStore } from './cli-state-store';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n    CliProcessorsRegistry_TOKEN,\n    CliServiceProvider_TOKEN,\n} from '../tokens';\n\n@Injectable()\nexport class CliStateStoreManager {\n    private stores = new Map<string, ICliStateStore>();\n\n    constructor(\n        @Inject(CliServiceProvider_TOKEN)\n        private readonly services: ICliServiceProvider,\n    ) {}\n\n    public getStateStore(\n        name: string,\n        defaultState?: Record<string, any>,\n    ): ICliStateStore {\n        if (!this.stores.has(name)) {\n            this.stores.set(\n                name,\n                new CliStateStore(this.services, name, defaultState ?? {}),\n            );\n        }\n\n        return this.stores.get(name)!;\n    }\n\n    public getProcessorStateStore(\n        processor: ICliCommandProcessor,\n    ): ICliStateStore {\n        const registry = this.services.get<ICliCommandProcessorRegistry>(\n            CliProcessorsRegistry_TOKEN,\n        );\n\n        const rootProcessor = registry.getRootProcessor(processor);\n\n        return this.getStateStore(\n            rootProcessor.stateConfiguration?.storeName ||\n                rootProcessor.command,\n            rootProcessor.stateConfiguration?.initialState,\n        );\n    }\n}\n","import {\n    CliOptions,\n    ICliClipboard,\n    ICliCommandExecutorService,\n    ICliCommandProcessor,\n    ICliServiceProvider,\n    ICliExecutionContext,\n    ICliExecutionProcess,\n    ICliLogger,\n    ICliPercentageProgressBar,\n    ICliSpinner,\n    ICliStateStore,\n    ICliTerminalWriter,\n    ICliUserSession,\n    ICliTextAnimator,\n} from '@qodalis/cli-core';\nimport { Terminal } from '@xterm/xterm';\nimport { Subject } from 'rxjs';\nimport { CliExecutionContext } from './cli-execution-context';\nimport { CliStateStoreManager } from '../state/cli-state-store-manager';\n\nexport class CliCommandExecutionContext implements ICliExecutionContext {\n    userSession?: ICliUserSession | undefined;\n    spinner?: ICliSpinner | undefined;\n    progressBar: ICliPercentageProgressBar;\n    textAnimator?: ICliTextAnimator | undefined;\n    onAbort: Subject<void>;\n    terminal: Terminal;\n    writer: ICliTerminalWriter;\n    executor: ICliCommandExecutorService;\n    clipboard: ICliClipboard;\n    state: ICliStateStore;\n    options?: CliOptions | undefined;\n    showPrompt: () => void;\n    setContextProcessor: (\n        processor: ICliCommandProcessor,\n        silent?: boolean,\n    ) => void;\n    process: ICliExecutionProcess;\n    logger: ICliLogger;\n    services: ICliServiceProvider;\n\n    constructor(\n        public readonly context: CliExecutionContext,\n        processor: ICliCommandProcessor,\n    ) {\n        this.userSession = context.userSession;\n        this.spinner = context.spinner;\n        this.progressBar = context.progressBar;\n        this.textAnimator = context.textAnimator;\n        this.onAbort = context.onAbort;\n        this.terminal = context.terminal;\n        this.writer = context.writer;\n        this.executor = context.executor;\n        this.clipboard = context.clipboard;\n        this.options = context.options;\n        this.showPrompt = context.showPrompt;\n        this.setContextProcessor = context.setContextProcessor;\n        this.process = context.process;\n        this.logger = context.logger;\n        this.services = context.services;\n\n        this.state = context.services\n            .get<CliStateStoreManager>(CliStateStoreManager)\n            .getProcessorStateStore(processor);\n    }\n}\n","import { Terminal } from '@xterm/xterm';\nimport {\n    CliBackgroundColor,\n    CliForegroundColor,\n    CliIcon,\n    formatJson,\n    ICliTerminalWriter,\n} from '@qodalis/cli-core';\n\nexport class CliTerminalWriter implements ICliTerminalWriter {\n    constructor(public readonly terminal: Terminal) {}\n\n    write(text: string): void {\n        this.terminal.write(text);\n    }\n    writeln(text?: string): void {\n        this.terminal.writeln(text || '');\n    }\n\n    public writeSuccess(message: string) {\n        this.writeLog(message, CliForegroundColor.Green, CliIcon.CheckIcon);\n    }\n\n    public writeInfo(message: string) {\n        this.writeLog(message, CliForegroundColor.Cyan, CliIcon.InfoIcon);\n    }\n\n    public writeWarning(message: string) {\n        this.writeLog(message, CliForegroundColor.Yellow, CliIcon.WarningIcon);\n    }\n\n    public writeError(message: string) {\n        this.writeLog(message, CliForegroundColor.Red, CliIcon.CrossIcon);\n    }\n\n    private writeLog(\n        message: string,\n        color: CliForegroundColor,\n        icon?: CliIcon,\n    ) {\n        this.terminal.writeln(\n            this.wrapInColor(icon ? icon + ' ' + message : message, color),\n        );\n    }\n\n    public writeDivider(options?: {\n        color?: CliForegroundColor;\n        length?: number;\n        char?: string;\n    }) {\n        const { color, length: oLength, char: oChar } = options || {};\n\n        let length = oLength ?? 80;\n        let char = oChar ?? '-';\n\n        if (this.terminal.cols < length) {\n            length = this.terminal.cols;\n        }\n\n        let text = char.repeat(length);\n\n        if (color) {\n            text = this.wrapInColor(text, color);\n        }\n\n        this.writeln(text);\n    }\n\n    public wrapInColor(text: string, color: CliForegroundColor): string {\n        return color + text + CliForegroundColor.Reset;\n    }\n\n    public wrapInBackgroundColor(text: string, color: CliBackgroundColor) {\n        return color + text + CliForegroundColor.Reset;\n    }\n\n    public writeJson(json: any) {\n        this.terminal.writeln(formatJson(json));\n    }\n\n    public writeToFile(fileName: string, content: string): void {\n        const blob = new Blob([content], { type: 'text/plain' });\n        const link = document.createElement('a');\n        link.href = URL.createObjectURL(blob);\n        link.download = fileName;\n\n        document.body.appendChild(link);\n        link.click();\n        document.body.removeChild(link);\n    }\n\n    public writeObjectsAsTable(objects: any[]): void {\n        if (objects.length === 0) {\n            this.writeInfo('No objects to display');\n            return;\n        }\n\n        const headers = Object.keys(objects[0]);\n        const rows = objects.map((object) =>\n            headers.map((header) => object[header]),\n        );\n\n        this.writeTable(headers, rows);\n    }\n\n    public writeTable(headers: string[], rows: string[][]): void {\n        // Calculate column widths\n        const colWidths = headers.map((header, colIndex) =>\n            Math.max(\n                header.length,\n                ...rows.map((row) => row[colIndex]?.length || 0),\n            ),\n        );\n\n        // Function to pad text to a specific width\n        const padText = (text: string, width: number) =>\n            text?.toString()?.padEnd(width, ' ');\n\n        // Write the header\n        this.write(\n            headers\n                .map((header, i) =>\n                    this.wrapInColor(\n                        padText(header, colWidths[i]),\n                        CliForegroundColor.Yellow,\n                    ),\n                )\n                .join(' | ') + '\\r\\n',\n        );\n        this.write(\n            '-'.repeat(colWidths.reduce((sum, w) => sum + w + 3, -3)) + '\\r\\n',\n        );\n\n        // Write the rows\n        rows.forEach((row) => {\n            this.write(\n                row.map((cell, i) => padText(cell, colWidths[i])).join(' | ') +\n                    '\\r\\n',\n            );\n        });\n    }\n}\n","import { Terminal } from '@xterm/xterm';\nimport { ICliSpinner } from '@qodalis/cli-core';\n\nexport class CliTerminalSpinner implements ICliSpinner {\n    isRunning: boolean = false;\n\n    text: string = '';\n\n    constructor(private terminal: Terminal) {}\n\n    private spinnerInterval?: ReturnType<typeof setInterval> | null;\n    private spinnerFrames = ['|', '/', '-', '\\\\'];\n    private spinnerIndex = 0;\n\n    public show(text?: string): void {\n        if (text) {\n            this.text = text;\n        }\n\n        this.isRunning = true;\n        this.spinnerInterval = setInterval(() => {\n            // Clear the current line\n            this.terminal.write('\\x1b[2K\\r');\n            // Write the spinner frame\n            this.terminal.write(\n                this.spinnerFrames[this.spinnerIndex] +\n                    (this.text.length > 0 ? ` ${this.text}` : ''),\n            );\n            // Update the frame index\n            this.spinnerIndex =\n                (this.spinnerIndex + 1) % this.spinnerFrames.length;\n        }, 100);\n    }\n\n    public hide(): void {\n        this.isRunning = false;\n        if (this.spinnerInterval) {\n            clearInterval(this.spinnerInterval);\n            this.spinnerInterval = null;\n        }\n\n        // Clear the spinner character and reset the line\n        this.terminal.write('\\x1b[2K\\r');\n\n        this.text = '';\n    }\n\n    public setText(text: string) {\n        this.text = text;\n    }\n}\n","import { Terminal } from '@xterm/xterm';\nimport {\n    CliPercentageProgressBarUpdateValueOptions,\n    ICliPercentageProgressBar,\n} from '@qodalis/cli-core';\n\nexport class CliTerminalProgressBar implements ICliPercentageProgressBar {\n    isRunning: boolean = false;\n\n    private text: string = '';\n    private progressBarInterval?: ReturnType<typeof setInterval> | null;\n    private progress = 0;\n    private total = 100;\n    private progressText = '';\n\n    constructor(private terminal: Terminal) {}\n\n    public show(text?: string): void {\n        this.isRunning = true;\n        this.progress = 0;\n        this.text = text || '';\n\n        // Update progress bar every 100ms\n        this.progressBarInterval = setInterval(() => {\n            this.updateProgressBar();\n\n            // Stop when progress reaches 100%\n            if (this.progress > this.total) {\n                this.progress = this.total;\n                this.hide(); // Stop the progress bar\n            }\n        }, 100);\n    }\n\n    public hide(): void {\n        this.isRunning = false;\n        if (this.progressBarInterval) {\n            clearInterval(this.progressBarInterval);\n            this.progressBarInterval = null;\n        }\n\n        this.clearCurrentLine();\n\n        this.text = '';\n        this.progressText = '';\n    }\n\n    public update(\n        progress: number,\n        options?: CliPercentageProgressBarUpdateValueOptions,\n    ) {\n        if (options?.type === 'increment') {\n            this.progress += progress;\n        } else {\n            this.progress = progress;\n        }\n\n        if (this.progress > this.total) {\n            this.progress = this.total;\n        }\n\n        this.updateProgressBar();\n    }\n\n    public complete() {\n        this.progress = 100;\n        this.hide();\n    }\n\n    public setText(text: string) {\n        this.text = text;\n\n        this.updateProgressBar();\n    }\n\n    private updateProgressBar(): void {\n        const totalBars = 50; // Length of the progress bar\n        const filledBars = Math.round((this.progress / this.total) * totalBars);\n        const emptyBars = totalBars - filledBars;\n\n        const progressBar = `[${'#'.repeat(filledBars)}${'.'.repeat(emptyBars)}]`;\n        const percentage = `${this.progress}%`.padStart(4, ' ');\n        const text = this.text.length > 0 ? ` ${this.text}` : '';\n\n        this.clearCurrentLine();\n        this.progressText = `${progressBar} ${percentage} ${text}`;\n\n        this.terminal.write(this.progressText); // Write progress bar\n    }\n\n    private clearCurrentLine(): void {\n        const wrappedLines = Math.ceil(\n            this.progressText.length / this.terminal.cols,\n        );\n\n        for (let i = 0; i < wrappedLines; i++) {\n            this.terminal.write('\\x1b[2K'); // Clear the current line\n            this.terminal.write('\\r'); // Move the cursor to the start of the line\n            if (i < wrappedLines - 1) {\n                this.terminal.write('\\x1b[F'); // Move the cursor up for all but the last line\n            }\n\n            if (i === wrappedLines - 1) {\n                this.terminal.write('\\r');\n            }\n        }\n    }\n}\n","import { ICliClipboard, ICliExecutionContext } from '@qodalis/cli-core';\n\nexport class CliClipboard implements ICliClipboard {\n    constructor(private readonly context: ICliExecutionContext) {}\n\n    async write(text: string): Promise<void> {\n        try {\n            await navigator.clipboard.writeText(text);\n        } catch (error) {\n            this.context.writer.writeError('Failed to write to clipboard');\n        }\n    }\n\n    async read(): Promise<string> {\n        try {\n            return await navigator.clipboard.readText();\n        } catch (error) {\n            this.context.writer.writeError('Failed to read from clipboard');\n            return '';\n        }\n    }\n}\n","export class ProcessExitedError extends Error {\n    code: number;\n\n    constructor(code: number) {\n        super(`Process exited with code ${code}`);\n        this.name = 'ProcessExitedError';\n        this.code = code;\n        Object.setPrototypeOf(this, new.target.prototype);\n    }\n}\n","import { ICliExecutionContext, ICliExecutionProcess } from '@qodalis/cli-core';\nimport { ProcessExitedError } from './errors';\n\nexport class CliExecutionProcess implements ICliExecutionProcess {\n    exited?: boolean | undefined;\n    exitCode?: number | undefined;\n    running: boolean = false;\n    data: any | undefined;\n\n    constructor(private readonly context: ICliExecutionContext) {}\n\n    exit(\n        code?: number,\n        options?: {\n            silent?: boolean;\n        },\n    ) {\n        code = code ?? 0;\n\n        this.exited = true;\n        this.exitCode = code;\n\n        if (!options?.silent) {\n            throw new ProcessExitedError(code);\n        }\n    }\n\n    output(data: any) {\n        this.data = data;\n    }\n\n    start() {\n        this.exited = undefined;\n        this.exitCode = undefined;\n        this.data = undefined;\n        this.running = true;\n    }\n\n    end() {\n        this.running = false;\n        this.exitCode = 0;\n    }\n}\n","import { Terminal } from '@xterm/xterm';\nimport {\n    CliTextAnimatorOptions,\n    delay,\n    ICliTextAnimator,\n} from '@qodalis/cli-core';\n\nexport class CliTerminalTextAnimator implements ICliTextAnimator {\n    isRunning: boolean = false;\n\n    private animationInterval?: ReturnType<typeof setInterval> | null;\n    private text: string = '';\n\n    constructor(private terminal: Terminal) {}\n\n    public show(text?: string): void {\n        this.showText(text || '');\n    }\n\n    showText(text: string, options?: CliTextAnimatorOptions) {\n        const { speed, removeAfterTyping } = options || {};\n\n        if (this.isRunning) {\n            return; // Prevent multiple animations\n        }\n\n        this.isRunning = true;\n        this.text = text || this.text;\n\n        let index = 0;\n        let isTyping = true;\n\n        this.animationInterval = setInterval(() => {\n            if (isTyping) {\n                // Write text character by character\n                this.terminal.write(this.text[index]);\n                index++;\n\n                // Switch to erasing mode once typing is done\n                if (index === this.text.length) {\n                    isTyping = false;\n                }\n            } else if (removeAfterTyping) {\n                clearInterval(this.animationInterval!);\n                this.animationInterval = null;\n\n                delay(1000).then(() => {\n                    for (let i = 0; i < this.text.length; i++) {\n                        this.terminal.write('\\b \\b');\n                    }\n                });\n\n                this.isRunning = false;\n            } else {\n                // Erase text character by character\n                this.terminal.write('\\b \\b'); // Backspace, overwrite with space, and backspace again\n                index--;\n\n                // Stop animation once all characters are erased\n                if (index < 0) {\n                    clearInterval(this.animationInterval!);\n                    this.animationInterval = null;\n                    this.isRunning = false;\n                }\n            }\n        }, speed || 100);\n    }\n\n    /**\n     * Hide the animation and reset the state.\n     */\n    public hide(): void {\n        if (!this.isRunning) {\n            return; // Prevent stopping if not running\n        }\n\n        this.isRunning = false;\n\n        if (this.animationInterval) {\n            clearInterval(this.animationInterval);\n            this.animationInterval = null;\n        }\n\n        this.text = '';\n    }\n}\n","import { Terminal } from '@xterm/xterm';\nimport { Subject } from 'rxjs';\nimport {\n    ICliExecutionContext,\n    ICliTerminalWriter,\n    ICliUserSession,\n    CliOptions,\n    ICliSpinner,\n    ICliPercentageProgressBar,\n    ICliClipboard,\n    ICliExecutionProcess,\n    ICliCommandProcessor,\n    ICliLogger,\n    CliLogLevel,\n    ICliServiceProvider,\n    ICliStateStore,\n    ICliTextAnimator,\n} from '@qodalis/cli-core';\nimport { CliCommandExecutorService } from '../services/cli-command-executor.service';\nimport { CliTerminalWriter } from '../services/cli-terminal-writer';\nimport { CliTerminalSpinner } from '../services/progress-bars/cli-terminal-spinner';\nimport { CliTerminalProgressBar } from '../services/progress-bars/cli-terminal-progress-bar';\nimport { CliClipboard } from '../services/cli-clipboard';\nimport { CliExecutionProcess } from './cli-execution-process';\nimport { Injector } from '@angular/core';\nimport { CliLogger_TOKEN, CliServiceProvider_TOKEN } from '../tokens';\nimport { CliStateStoreManager } from '../state/cli-state-store-manager';\nimport { CliTerminalTextAnimator } from '../services/progress-bars/cli-terminal-text-animator';\n\nexport class CliExecutionContext implements ICliExecutionContext {\n    public userSession?: ICliUserSession;\n\n    public contextProcessor?: ICliCommandProcessor;\n\n    public readonly writer: ICliTerminalWriter;\n\n    public readonly spinner: ICliSpinner;\n\n    public readonly textAnimator: ICliTextAnimator;\n\n    public readonly progressBar: ICliPercentageProgressBar;\n\n    public readonly options?: CliOptions;\n\n    public readonly onAbort = new Subject<void>();\n\n    public readonly state: ICliStateStore;\n\n    public readonly clipboard: ICliClipboard;\n\n    public readonly process: ICliExecutionProcess;\n\n    public readonly logger: ICliLogger;\n\n    public readonly services: ICliServiceProvider;\n\n    constructor(\n        injector: Injector,\n        public terminal: Terminal,\n        public executor: CliCommandExecutorService,\n        public showPrompt: (options?: {\n            reset?: boolean;\n            newLine?: boolean;\n        }) => void,\n        cliOptions?: CliOptions,\n    ) {\n        //initialize services\n        this.services = injector.get(CliServiceProvider_TOKEN);\n\n        //initialize state store\n        const stateStoreManager = injector.get(CliStateStoreManager);\n        this.state = stateStoreManager.getStateStore('shared');\n\n        this.options = cliOptions;\n        this.writer = new CliTerminalWriter(terminal);\n\n        this.spinner = new CliTerminalSpinner(terminal);\n        this.progressBar = new CliTerminalProgressBar(terminal);\n        this.textAnimator = new CliTerminalTextAnimator(terminal);\n\n        this.clipboard = new CliClipboard(this);\n        this.process = new CliExecutionProcess(this);\n\n        //initialize logger\n        this.logger = injector.get(CliLogger_TOKEN);\n        this.logger.setCliLogLevel(cliOptions?.logLevel || CliLogLevel.ERROR);\n    }\n\n    setContextProcessor(\n        processor: ICliCommandProcessor | undefined,\n        silent?: boolean,\n    ): void {\n        if (!processor) {\n            this.contextProcessor = processor;\n\n            return;\n        }\n\n        if (!silent) {\n            this.writer.writeInfo(\n                'Set ' +\n                    processor?.command +\n                    ' as context processor, press Ctrl+C to exit',\n            );\n        }\n\n        this.contextProcessor = processor;\n    }\n\n    /**\n     * Checks if there is a progress running\n     * @returns true if there is a progress running\n     * @returns false if there is no progress running\n     */\n    public isProgressRunning(): boolean {\n        return (\n            this.progressBar.isRunning ||\n            this.spinner.isRunning ||\n            this.textAnimator.isRunning\n        );\n    }\n\n    /**\n     * Aborts the current command\n     */\n    public abort(): void {\n        this.onAbort.next();\n    }\n\n    public setSession(session: ICliUserSession): void {\n        this.userSession = session;\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { ICliKeyValueStore } from '@qodalis/cli-core';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliKeyValueStore implements ICliKeyValueStore {\n    private dbName = 'CliKeyValueDB';\n    private storeName = 'KeyValueStore';\n    private db!: IDBDatabase;\n\n    constructor() {}\n\n    /**\n     * Initializes the IndexedDB instance.\n     */\n    public initialize(): Promise<void> {\n        return new Promise((resolve, reject) => {\n            const request = indexedDB.open(this.dbName, 1);\n\n            request.onupgradeneeded = (event) => {\n                const db = (event.target as IDBOpenDBRequest).result;\n                if (!db.objectStoreNames.contains(this.storeName)) {\n                    db.createObjectStore(this.storeName);\n                }\n            };\n\n            request.onsuccess = (event) => {\n                this.db = (event.target as IDBOpenDBRequest).result;\n                resolve();\n            };\n\n            request.onerror = (event) => {\n                console.error('Error initializing IndexedDB:', event);\n                reject();\n            };\n        });\n    }\n\n    /**\n     * Retrieves a value by key.\n     * @param key - The key to retrieve the value for.\n     * @returns A promise resolving to the value or undefined if not found.\n     */\n    async get<T = any>(key: string): Promise<T | undefined> {\n        return new Promise((resolve, reject) => {\n            try {\n                const transaction = this.db.transaction(\n                    this.storeName,\n                    'readonly',\n                );\n                const store = transaction.objectStore(this.storeName);\n                const request = store.get(key);\n\n                request.onsuccess = () => {\n                    resolve(request.result as T);\n                };\n\n                request.onerror = (event) => {\n                    console.error('Error getting value:', event);\n                    reject(undefined);\n                };\n            } catch (e) {\n                console.error('Error getting value:', e);\n                reject(undefined);\n            }\n        });\n    }\n\n    /**\n     * Sets a key-value pair in the store.\n     * @param key - The key to set.\n     * @param value - The value to store.\n     * @returns A promise resolving when the value is stored.\n     */\n    async set(key: string, value: any): Promise<void> {\n        return new Promise((resolve, reject) => {\n            const transaction = this.db.transaction(\n                this.storeName,\n                'readwrite',\n            );\n            const store = transaction.objectStore(this.storeName);\n            const request = store.put(value, key);\n\n            request.onsuccess = () => resolve();\n\n            request.onerror = (event) => {\n                console.error('Error setting value:', event);\n                reject();\n            };\n        });\n    }\n\n    /**\n     * Removes a key-value pair by key.\n     * @param key - The key to remove.\n     * @returns A promise resolving when the key is removed.\n     */\n    async remove(key: string): Promise<void> {\n        return new Promise((resolve, reject) => {\n            const transaction = this.db.transaction(\n                this.storeName,\n                'readwrite',\n            );\n            const store = transaction.objectStore(this.storeName);\n            const request = store.delete(key);\n\n            request.onsuccess = () => resolve();\n\n            request.onerror = (event) => {\n                console.error('Error removing value:', event);\n                reject();\n            };\n        });\n    }\n\n    /**\n     * Clears all key-value pairs from the store.\n     * @returns A promise resolving when the store is cleared.\n     */\n    async clear(): Promise<void> {\n        return new Promise((resolve, reject) => {\n            const transaction = this.db.transaction(\n                this.storeName,\n                'readwrite',\n            );\n            const store = transaction.objectStore(this.storeName);\n            const request = store.clear();\n\n            request.onsuccess = () => resolve();\n\n            request.onerror = (event) => {\n                console.error('Error clearing store:', event);\n                reject();\n            };\n        });\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n    CliIcon,\n    delay,\n    ICliCommandChildProcessor,\n    ICliCommandProcessor,\n    ICliCommandProcessorRegistry,\n    ICliUmdModule,\n    initializeBrowserEnvironment,\n} from '@qodalis/cli-core';\nimport {\n    CliCommandProcessor_TOKEN,\n    CliProcessorsRegistry_TOKEN,\n} from '../../tokens';\nimport { CliCommandExecutionContext, CliExecutionContext } from '../../context';\nimport { CliKeyValueStore } from '../../storage/cli-key-value-store';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliBoot {\n    private initialized = false;\n    private initializing = false;\n\n    constructor(\n        @Inject(CliCommandProcessor_TOKEN)\n        private readonly implementations: ICliCommandProcessor[],\n\n        @Inject(CliProcessorsRegistry_TOKEN)\n        private readonly registry: ICliCommandProcessorRegistry,\n    ) {}\n\n    public async boot(context: CliExecutionContext): Promise<void> {\n        context.spinner?.show(CliIcon.Rocket + '  Booting...');\n\n        if (this.initialized || this.initializing) {\n            await this.bootShared(context);\n\n            context.spinner?.hide();\n\n            return;\n        }\n\n        this.initializing = true;\n\n        await this.registerServices(context);\n\n        initializeBrowserEnvironment({\n            context,\n            handlers: [\n                async (module: ICliUmdModule) => {\n                    await this.registerUmdModule(module, context);\n                },\n            ],\n        });\n\n        let processors = this.implementations;\n\n        //TODO: refactor in a better way\n        if (!context.options?.usersModule?.enabled) {\n            processors = processors.filter(\n                (p) => p.metadata?.module !== 'users',\n            );\n        }\n\n        processors.forEach((impl) => this.registry.registerProcessor(impl));\n\n        await this.bootShared(context);\n\n        context.spinner?.hide();\n\n        this.initialized = true;\n    }\n\n    private async bootShared(context: CliExecutionContext): Promise<void> {\n        await this.initializeProcessorsInternal(\n            context,\n            this.registry.processors,\n        );\n\n        await delay(300);\n    }\n\n    private async initializeProcessorsInternal(\n        context: CliExecutionContext,\n        processors: ICliCommandProcessor[],\n        parent?: ICliCommandProcessor,\n    ): Promise<void> {\n        try {\n            for (const p of processors) {\n                (p as ICliCommandChildProcessor).parent = parent;\n\n                if (p.initialize) {\n                    const processorContext = new CliCommandExecutionContext(\n                        context,\n                        p,\n                    );\n\n                    await processorContext.state.initialize();\n\n                    await p.initialize(processorContext);\n                }\n\n                if (p.processors && p.processors.length > 0) {\n                    await this.initializeProcessorsInternal(\n                        context,\n                        p.processors,\n                        p,\n                    );\n                }\n            }\n        } catch (e) {\n            context.writer.writeError(`Error initializing processors: ${e}`);\n        }\n    }\n\n    private async registerServices(\n        context: CliExecutionContext,\n    ): Promise<void> {\n        context.services.set([\n            {\n                provide: 'cli-key-value-store',\n                useValue: context.services.get(CliKeyValueStore),\n            },\n        ]);\n    }\n\n    private async registerUmdModule(\n        module: ICliUmdModule,\n        context: CliExecutionContext,\n    ): Promise<void> {\n        const { logger } = context;\n        if (!module) {\n            return;\n        }\n\n        if (module.processors) {\n            logger.info('Registering processors from module ' + module.name);\n            for (const processor of module.processors) {\n                this.registry.registerProcessor(processor);\n            }\n\n            await this.initializeProcessorsInternal(context, module.processors);\n        } else {\n            logger.warn(`Module ${module.name} has no processors`);\n        }\n    }\n}\n","\n// Automatically generated during build\nexport const LIBRARY_VERSION = '1.0.35';\n  ","export const CLi_Name_Art = `\n   ____            _       _ _        _____ _      _____\n  / __ \\\\          | |     | (_)      / ____| |    |_   _|\n | |  | | ___   __| | __ _| |_ ___  | |    | |      | |\n | |  | |/ _ \\\\ / _\\` |/ _\\` | | / __| | |    | |      | |\n | |__| | (_) | (_| | (_| | | \\\\__ \\\\ | |____| |____ _| |_\n  \\\\___\\\\_\\\\\\\\___/ \\\\__,_|\\\\__,_|_|_|___/  \\\\_____|______|_____|\n`;\n\nexport const hotkeysInfo = [\n    {\n        key: 'Ctrl + C',\n        description:\n            'Cancel the current command (if possible) or copy the current selection',\n    },\n    {\n        key: 'Ctrl + V',\n        description: 'Paste the copied text',\n    },\n    {\n        key: 'Ctrl + L',\n        description: 'Clear the screen',\n    },\n];\n","export type ParsedArg = {\n    name: string;\n    value: any;\n};\n\nexport type CommandParserOutput = {\n    commandName: string;\n    args: ParsedArg[];\n};\n\n/**\n * A utility class for parsing command strings into command names and arguments.\n */\nexport class CommandParser {\n    /**\n     * Parse a command string into a full command name and arguments.\n     * @param command - The full command string.\n     * @returns An object containing the full command name and arguments.\n     */\n    parse(command: string): CommandParserOutput {\n        try {\n            // Match quoted strings, single-quoted strings, or unquoted words\n            const regex =\n                /(?:--?([a-zA-Z0-9-_]+)(?:=(\"[^\"]*\"|'[^']*'|[^\\s]+))?)|(?:[^\\s]+)/g;\n\n            const matches = Array.from(command.matchAll(regex));\n\n            if (matches.length === 0) {\n                throw new Error('Invalid command string');\n            }\n\n            const commandParts: string[] = [];\n            const args: ParsedArg[] = [];\n\n            // Process matches\n            matches.forEach((match) => {\n                if (match[1]) {\n                    // Handle arguments\n                    const key = match[1];\n                    let value: any = match[2];\n                    if (value) {\n                        // Remove surrounding quotes, if any\n                        value = value.replace(/^['\"]|['\"]$/g, '');\n                    } else {\n                        // Flag without a value\n                        value = true;\n                    }\n                    args.push({\n                        name: key,\n                        value: this.parseValue(value),\n                    });\n                } else if (!match[0].startsWith('--')) {\n                    // Command name\n                    commandParts.push(match[0]);\n                }\n            });\n\n            const commandName = commandParts.join(' ');\n\n            return {\n                commandName,\n                args,\n            };\n        } catch (e) {\n            console.error('Unable to parse the command:', command, e);\n\n            return {\n                commandName: '',\n                args: [],\n            };\n        }\n    }\n\n    /**\n     * Parse individual values to their appropriate type.\n     * @param value - The value to parse.\n     * @returns The parsed value.\n     */\n    private parseValue(value: string): any {\n        if (!isNaN(Number(value))) return Number(value); // Convert numeric strings to numbers\n        if (value === 'true' || value === 'false') return value === 'true'; // Convert \"true\"/\"false\" to boolean\n        return value; // Return as string otherwise\n    }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport { ICliCommandProcessor } from '@qodalis/cli-core';\nimport { CliCommandProcessor_TOKEN } from '../cli/tokens';\n\nexport const resolveCliProvider = <T extends any>(\n    token: InjectionToken<T>,\n    provider: new (...args: any[]) => T,\n): Provider => ({\n    provide: token,\n    useExisting: provider,\n    multi: true,\n});\n\nexport const resolveCommandProcessorProvider = <T extends ICliCommandProcessor>(\n    provider: new (...args: any[]) => T,\n): Provider => [\n    provider,\n    resolveCliProvider<T>(CliCommandProcessor_TOKEN, provider),\n];\n","export { CommandParser } from './command-parser';\n\nexport const openLink = (link: string) => {\n    try {\n        window.open(link, '_blank');\n    } catch (e) {\n        console.error(e);\n    }\n};\n\nexport const getGreetingBasedOnTime = (date?: Date) => {\n    const currentHour = (date ?? new Date()).getHours();\n\n    if (currentHour >= 5 && currentHour < 12) {\n        return 'Good morning! Wishing you a productive day ahead!';\n    } else if (currentHour >= 12 && currentHour < 18) {\n        return 'Good afternoon! Keep up the great work!';\n    } else if (currentHour >= 18 && currentHour < 22) {\n        return 'Good evening! Hope you had a fantastic day!';\n    } else {\n        return 'Good night! Rest well and see you tomorrow!';\n    }\n};\n\nexport * from './dependency-injection';\n","import { Injectable } from '@angular/core';\nimport { LIBRARY_VERSION } from '../../../version';\nimport { CLi_Name_Art } from '../../constants';\nimport { CliForegroundColor, ICliExecutionContext } from '@qodalis/cli-core';\nimport { getGreetingBasedOnTime } from '../../../utils';\n\n/**\n * Service that displays the welcome message to the user.\n */\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliWelcomeMessageService {\n    /**\n     * Displays the welcome message to the user.\n     * @param context\n     * @returns void\n     */\n    public displayWelcomeMessage(context: ICliExecutionContext) {\n        const welcomeConfig = context.options?.welcomeMessage;\n\n        // Handle the 'show' property\n        if (welcomeConfig?.show) {\n            const showOption = welcomeConfig.show;\n\n            // Determine if the welcome message should be shown\n            if (!this.shouldDisplayWelcomeMessage(showOption)) {\n                context.showPrompt();\n                return;\n            }\n        }\n\n        if (welcomeConfig?.message) {\n            context.terminal.writeln(welcomeConfig?.message);\n        } else {\n            const welcomeMessage = [\n                `Welcome to Web CLI [Version ${context.writer.wrapInColor(LIBRARY_VERSION, CliForegroundColor.Green)}]`,\n                '(c) 2024 Qodalis Solutions. All rights reserved.',\n                CLi_Name_Art,\n                '',\n                context.writer.wrapInColor(\n                    'Documentation: ',\n                    CliForegroundColor.Green,\n                ) + 'https://cli-docs.qodalis.com/',\n                '',\n                \"Type 'help' to get started.\",\n                '',\n            ];\n\n            welcomeMessage.forEach((line, index) => {\n                context.terminal.write(line + '\\r\\n');\n            });\n        }\n\n        this.recordWelcomeMessageDisplay();\n        context.showPrompt();\n        context.textAnimator?.showText(getGreetingBasedOnTime(), {\n            speed: 60,\n            removeAfterTyping: true,\n        });\n    }\n\n    /**\n     * Determines if the welcome message should be displayed based on the show option.\n     * @param showOption - The show option from the config.\n     * @returns true if the message should be displayed, false otherwise.\n     */\n    private shouldDisplayWelcomeMessage(\n        showOption: 'always' | 'once' | 'daily' | 'never',\n    ): boolean {\n        const lastDisplayed = this.getLastWelcomeMessageDisplayTime();\n\n        switch (showOption) {\n            case 'always':\n                return true;\n            case 'once':\n                return !lastDisplayed; // Show only if it hasn't been shown before\n            case 'daily':\n                if (!lastDisplayed) return true; // No previous display, show it\n                const now = new Date();\n                const lastDate = new Date(lastDisplayed);\n                return now.toDateString() !== lastDate.toDateString(); // Compare dates\n            case 'never':\n                return false;\n            default:\n                return true;\n        }\n    }\n\n    /**\n     * Records the current time as the last display time for the welcome message.\n     */\n    private recordWelcomeMessageDisplay(): void {\n        localStorage.setItem(\n            'cliWelcomeMessageLastDisplayed',\n            new Date().toISOString(),\n        );\n    }\n\n    /**\n     * Retrieves the last display time of the welcome message.\n     * @returns The ISO string of the last display time or null if not recorded.\n     */\n    private getLastWelcomeMessageDisplayTime(): string | null {\n        return localStorage.getItem('cliWelcomeMessageLastDisplayed');\n    }\n}\n","import { DefaultThemes } from '@qodalis/cli-core';\nimport { ITheme } from '@xterm/xterm';\n\nexport type ThemeState = {\n    selectedTheme?: string;\n    customOptions?: ITheme;\n};\n\nexport const themes = {\n    ...DefaultThemes,\n};\n","import { Injectable } from '@angular/core';\nimport { CliKeyValueStore } from '../storage/cli-key-value-store';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliCommandHistoryService {\n    private readonly storageKey = 'cli-command-history';\n    private commandHistory: string[] = [];\n\n    constructor(private readonly store: CliKeyValueStore) {}\n\n    public async addCommand(command: string): Promise<void> {\n        const normalizedCommand = command.trim();\n        if (normalizedCommand) {\n            if (this.commandHistory.length > 0) {\n                const lastCommand =\n                    this.commandHistory[this.commandHistory.length - 1];\n                if (lastCommand === normalizedCommand) {\n                    return;\n                }\n            }\n            this.commandHistory.push(command);\n            await this.saveHistory();\n        }\n    }\n\n    public getLastIndex(): number {\n        return this.commandHistory.length;\n    }\n\n    public getHistory(): string[] {\n        return [...this.commandHistory];\n    }\n\n    public async clearHistory(): Promise<void> {\n        this.commandHistory = [];\n        await this.saveHistory();\n    }\n\n    public getCommand(index: number): string | undefined {\n        return this.commandHistory[index];\n    }\n\n    private async saveHistory(): Promise<void> {\n        //save only last 500 commands\n        const trimmedHistory = this.commandHistory.slice(-500);\n        return await this.store.set(this.storageKey, trimmedHistory);\n    }\n\n    private async loadHistory(): Promise<void> {\n        const savedOldHistory = localStorage.getItem('cliCommandHistory');\n        if (savedOldHistory) {\n            localStorage.removeItem('cliCommandHistory');\n            await this.store.set(this.storageKey, JSON.parse(savedOldHistory));\n        }\n\n        const savedHistory = await this.store.get<string[]>(this.storageKey);\n\n        if (savedHistory) {\n            this.commandHistory = savedHistory;\n        }\n    }\n\n    public async initialize(): Promise<void> {\n        await this.loadHistory();\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n    ICliUserSessionService,\n    ICliUserSession,\n    ICliUsersStoreService,\n} from '@qodalis/cli-core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ICliUsersStoreService_TOKEN } from '../tokens';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliUserSessionService implements ICliUserSessionService {\n    private userSessionSubject = new BehaviorSubject<\n        ICliUserSession | undefined\n    >({\n        user: {\n            id: 'anonymous',\n            name: 'Anonymous',\n            email: 'anonymous',\n        },\n    });\n\n    constructor(\n        @Inject(ICliUsersStoreService_TOKEN)\n        private readonly usersService: ICliUsersStoreService,\n    ) {\n        this.usersService.getUsers().subscribe((users) => {\n            const user = users.find((u) => u.id === 'root');\n            if (user) {\n                this.setUserSession({\n                    user,\n                });\n            }\n        });\n    }\n\n    async setUserSession(session: ICliUserSession): Promise<void> {\n        this.userSessionSubject.next(session);\n    }\n\n    getUserSession(): Observable<ICliUserSession | undefined> {\n        return this.userSessionSubject.asObservable();\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { ICliUser, ICliUsersStoreService } from '@qodalis/cli-core';\nimport { BehaviorSubject, map, Observable } from 'rxjs';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliUsersStoreService implements ICliUsersStoreService {\n    private localStorageKey = 'users';\n\n    protected defaultUsers: ICliUser[] = [\n        {\n            id: 'root',\n            name: 'root',\n            email: 'root@domain.com',\n            groups: ['admin'],\n        },\n    ];\n\n    protected usersSubject = new BehaviorSubject<ICliUser[]>([]);\n\n    constructor() {\n        this.initialize(this.defaultUsers);\n    }\n\n    protected initialize(defaultUsers: ICliUser[]): void {\n        const storedUsers = this.loadUsers(defaultUsers);\n        this.usersSubject.next(storedUsers);\n    }\n\n    async createUser(user: Omit<ICliUser, 'id'>): Promise<ICliUser> {\n        const users = this.usersSubject.getValue();\n\n        if (users.some((u) => u.email === user.email || u.name === user.name)) {\n            return Promise.reject('User already exists');\n        }\n\n        const newUser: ICliUser = {\n            ...user,\n            id: user.email,\n        };\n\n        users.push(newUser);\n        this.saveUsers(users);\n        this.usersSubject.next(users);\n\n        return newUser;\n    }\n\n    getUsers(options?: {\n        query?: string;\n        skip?: number;\n        take?: number;\n    }): Observable<ICliUser[]> {\n        const { query, skip, take } = options || {};\n\n        return this.usersSubject.asObservable().pipe(\n            map((users) => {\n                if (query) {\n                    const queryLower = query.toLowerCase();\n                    users = users.filter(\n                        (u) =>\n                            u.name.toLowerCase().includes(queryLower) ||\n                            u.email.toLowerCase().includes(queryLower),\n                    );\n                }\n\n                if (skip) {\n                    users = users.slice(skip);\n                }\n\n                if (take) {\n                    users = users.slice(0, take);\n                }\n\n                return users;\n            }),\n        );\n    }\n\n    getUser(id: string): Observable<ICliUser | undefined> {\n        return this.usersSubject\n            .asObservable()\n            .pipe(\n                map((users) =>\n                    users.find(\n                        (u) => u.id === id || u.name === id || u.email === id,\n                    ),\n                ),\n            );\n    }\n\n    private saveUsers(users: ICliUser[]): void {\n        localStorage.setItem(this.localStorageKey, JSON.stringify(users));\n    }\n\n    private loadUsers(fallbackUsers: ICliUser[]): ICliUser[] {\n        const data = localStorage.getItem(this.localStorageKey);\n        if (!data) {\n            return fallbackUsers;\n        }\n\n        try {\n            return JSON.parse(data) as ICliUser[];\n        } catch (error) {\n            console.error('Failed to parse user data from localStorage', error);\n            return [];\n        }\n    }\n}\n","import {\n    ICliCommandProcessor,\n    ICliCommandParameterDescriptor,\n} from '@qodalis/cli-core';\nimport { ParsedArg } from './command-parser';\n\nexport class CliArgsParser {\n    public static convertToRecord(\n        args: ParsedArg[],\n        processor: ICliCommandProcessor,\n    ): Record<string, any> {\n        const result: Record<string, any> = {};\n\n        const updateParamValue = (\n            parameter: ICliCommandParameterDescriptor,\n            value: any,\n        ) => {\n            result[parameter.name] = value;\n            parameter.aliases?.forEach((alias) => {\n                result[alias] = value;\n            });\n        };\n\n        args.forEach((arg) => {\n            const parameter = processor.parameters?.find(\n                (p) =>\n                    p.name === arg.name ||\n                    p.aliases?.some((a) => a === arg.name),\n            );\n\n            if (parameter) {\n                let value = arg.value;\n\n                switch (parameter.type) {\n                    case 'array':\n                        const previousValue = Array.isArray(result[arg.name])\n                            ? result[arg.name]\n                            : [];\n                        value = [...previousValue, arg.value];\n                        break;\n                    case 'boolean':\n                        value =\n                            value === 'true' ||\n                            value === '1' ||\n                            value === 'yes' ||\n                            value === 'y' ||\n                            value === 1;\n                        break;\n                    default:\n                        value = arg.value;\n                        break;\n                }\n                updateParamValue(parameter, value);\n            } else {\n                result[arg.name] = arg.value;\n            }\n        });\n\n        return result;\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n    ICliExecutionContext,\n    ICliCommandProcessor,\n    CliProcessCommand,\n    getRightOfWord,\n    getParameterValue,\n    ICliCommandExecutorService,\n    CancellablePromise,\n    CliForegroundColor,\n    ICliCommandProcessorRegistry,\n} from '@qodalis/cli-core';\nimport { CommandParser } from '../../utils';\nimport { CliExecutionProcess } from '../context/cli-execution-process';\nimport { CliExecutionContext } from '../context/cli-execution-context';\nimport { CliArgsParser } from '../../utils/args-parser';\nimport { ProcessExitedError } from '../context/errors';\nimport { CliCommandExecutionContext } from '../context/cli-command-executution-context';\nimport { CliAliasCommandProcessor } from '../processors';\nimport { CliProcessorsRegistry_TOKEN } from '../tokens';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliCommandExecutorService implements ICliCommandExecutorService {\n    private commandParser: CommandParser = new CommandParser();\n\n    constructor(\n        @Inject(CliProcessorsRegistry_TOKEN)\n        private readonly registry: ICliCommandProcessorRegistry,\n    ) {}\n\n    public async executeCommand(\n        command: string,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        // Split commands by logical operators\n        const parts = command.split(/(&&|\\|\\|)/).map((part) => part.trim());\n        let shouldRunNextCommand = true; // Tracks whether to execute the next command\n\n        let rootContext: CliExecutionContext;\n        if (context instanceof CliCommandExecutionContext) {\n            rootContext = context.context;\n        } else {\n            rootContext = context as CliExecutionContext;\n        }\n\n        for (let i = 0; i < parts.length; i++) {\n            const current = parts[i];\n\n            // If the current part is a logical operator, adjust the shouldRunNextCommand flag\n            if (current === '&&') {\n                shouldRunNextCommand = shouldRunNextCommand && true;\n                continue;\n            } else if (current === '||') {\n                shouldRunNextCommand = !shouldRunNextCommand;\n                continue;\n            }\n\n            // Skip execution based on previous command's result and operator\n            if (!shouldRunNextCommand) {\n                shouldRunNextCommand = true; // Reset for next iteration\n                continue;\n            }\n\n            // Execute the command\n            let commandSuccess = true;\n            try {\n                const data = context.process.data;\n                const command = current;\n\n                await this.executeSingleCommand(command, data, rootContext);\n\n                commandSuccess = context.process.exitCode === 0;\n            } catch (e) {\n                commandSuccess = false;\n\n                context.writer.writeError(`Command ${current} failed: ${e}`);\n            }\n\n            shouldRunNextCommand = commandSuccess;\n        }\n    }\n\n    private async executeSingleCommand(\n        command: string,\n        data: any | undefined,\n        context: CliExecutionContext,\n    ): Promise<void> {\n        const process = context.process as CliExecutionProcess;\n\n        process.start();\n\n        const { commandName, args: parsedArgs } =\n            this.commandParser.parse(command);\n\n        const [mainCommand, ...other] = commandName.split(' ');\n\n        const chainCommands = other.map((c) => c.toLowerCase());\n\n        const searchableProcessors = context.contextProcessor\n            ? (context.contextProcessor.processors ?? [])\n            : this.registry.processors;\n\n        const processor = this.registry.findProcessorInCollection(\n            mainCommand,\n            chainCommands,\n            searchableProcessors,\n        );\n\n        if (!processor) {\n            const aliases =\n                (\n                    this.registry.findProcessor(\n                        'alias',\n                        [],\n                    ) as CliAliasCommandProcessor\n                ).aliases ?? {};\n\n            if (aliases[mainCommand]) {\n                const alias = aliases[mainCommand];\n                return await this.executeSingleCommand(alias, data, context);\n            }\n\n            context.writer.writeError(\n                `Command: ${commandName} not found or not installed`,\n            );\n\n            context.writer.writeln();\n\n            context.writer.writeInfo(\n                'Type \"help\" for a list of available commands.',\n            );\n            context.writer.writeInfo(\n                'Use packages to install additional commands.',\n            );\n\n            context.process.exit(-1, {\n                silent: true,\n            });\n\n            return;\n        }\n\n        const args = CliArgsParser.convertToRecord(parsedArgs, processor);\n\n        const commandToProcess: CliProcessCommand = {\n            command: commandName,\n            chainCommands: chainCommands,\n            rawCommand: command,\n            args: args,\n            data: data,\n        };\n\n        if (this.versionRequested(context, processor, args)) {\n            process.end();\n            return;\n        }\n\n        if (await this.helpRequested(commandToProcess, context)) {\n            process.end();\n            return;\n        }\n\n        if (this.setContextProcessorRequested(context, processor, args)) {\n            process.end();\n            return;\n        }\n\n        if (!this.validateBeforeExecution(context, processor, args)) {\n            process.end();\n            return;\n        }\n\n        const value =\n            processor.allowUnlistedCommands || processor.valueRequired\n                ? getRightOfWord(commandName, processor.command)\n                : undefined;\n\n        commandToProcess.value = value;\n\n        const missingValue = processor.valueRequired && !value;\n\n        if (missingValue) {\n            context.writer.writeError(\n                `Value required for command: ${commandName} <value>`,\n            );\n\n            context.process.exit(-1);\n\n            return;\n        }\n\n        if (processor.validateBeforeExecution) {\n            const validationResult = processor.validateBeforeExecution(\n                commandToProcess,\n                context,\n            );\n\n            if (validationResult.valid === false) {\n                context.writer.writeError(\n                    validationResult?.message ||\n                        'An error occurred while validating the command.',\n                );\n\n                context.process.exit(-1);\n\n                return;\n            }\n        }\n\n        let cancellable: CancellablePromise<void> = null!;\n\n        const commandContext = new CliCommandExecutionContext(\n            context,\n            processor,\n        );\n\n        try {\n            const hooks = processor.hooks ?? [];\n\n            for (const hook of hooks.filter((h) => h.when === 'before')) {\n                await hook.execute(commandContext);\n            }\n\n            cancellable = new CancellablePromise<void>(\n                async (resolve, reject) => {\n                    processor\n                        .processCommand(commandToProcess, commandContext)\n                        .then(() => {\n                            resolve();\n                        })\n                        .catch((e) => {\n                            reject(e);\n                        });\n                },\n            );\n\n            await cancellable.execute();\n\n            for (const hook of hooks.filter((h) => h.when === 'after')) {\n                await hook.execute(commandContext);\n            }\n\n            process.end();\n        } catch (e) {\n            context.spinner?.hide();\n\n            if (e instanceof ProcessExitedError) {\n                cancellable?.cancel();\n\n                (context as CliExecutionContext)?.abort();\n\n                if (e.code !== 0) {\n                    context.writer.writeError(\n                        `Process exited with code ${e.code}`,\n                    );\n                } else {\n                    context.writer.writeInfo(\n                        'Process exited successfully with code 0',\n                    );\n                }\n            } else {\n                context.writer.writeError(`Error executing command: ${e}`);\n                context.process.exit(-1);\n            }\n        }\n    }\n\n    public async showHelp(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        try {\n            await this.executeCommand('help ' + command.rawCommand, context);\n        } catch (e) {\n            context.writer.writeError(`Error executing command: ${e}`);\n        }\n    }\n\n    private versionRequested(\n        context: ICliExecutionContext,\n        processor: ICliCommandProcessor,\n        args: Record<string, any>,\n    ): boolean {\n        if (args['v'] || args['version']) {\n            context.writer.writeln(\n                `${context.writer.wrapInColor(processor.version || '1.0.0', CliForegroundColor.Cyan)}`,\n            );\n            return true;\n        }\n\n        return false;\n    }\n\n    private setContextProcessorRequested(\n        context: ICliExecutionContext,\n        processor: ICliCommandProcessor,\n        args: Record<string, any>,\n    ): boolean {\n        if (args['context']) {\n            context.setContextProcessor(processor);\n            return true;\n        }\n\n        return false;\n    }\n\n    private async helpRequested(\n        commandToProcess: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<boolean> {\n        if (commandToProcess.command?.startsWith('help')) {\n            return false;\n        }\n\n        if (commandToProcess.args['h'] || commandToProcess.args['help']) {\n            await this.showHelp(commandToProcess, context);\n\n            return true;\n        }\n\n        return false;\n    }\n\n    /**\n     * Validates the command arguments before execution.\n     * @param context The current CLI execution context.\n     * @param processor The processor to validate.\n     * @param args The command arguments.\n     * @returns True if the arguments are valid, false otherwise.\n     */\n    private validateBeforeExecution(\n        context: ICliExecutionContext,\n        processor: ICliCommandProcessor,\n        args: Record<string, any>,\n    ): boolean {\n        // Check for required parameters\n        if (processor.parameters?.some((p) => p.required)) {\n            const missingParams = processor.parameters?.filter(\n                (p) =>\n                    p.required &&\n                    !args[p.name] &&\n                    !p.aliases?.some((a) => args[a]),\n            );\n\n            if (missingParams?.length) {\n                context.writer.writeError(\n                    `Missing required parameters: ${missingParams\n                        .map((p) => p.name)\n                        .join(', ')}`,\n                );\n\n                return false;\n            }\n        }\n\n        // Check for parameter validation\n        const parametersToValidate =\n            processor.parameters\n                ?.filter((x) => x.validator)\n                ?.map((p) => ({\n                    parameter: p,\n                    value: getParameterValue(p, args),\n                }))\n                ?.filter((p) => p.value) ?? [];\n\n        if (parametersToValidate.length > 0) {\n            const invalidParams = parametersToValidate\n                .filter((x) => !x.parameter.validator!(x.value).valid)\n                .map((p) => ({\n                    name: p.parameter.name,\n                    message: p.parameter.validator!(args[p.parameter.name])\n                        .message,\n                }));\n\n            if (invalidParams?.length) {\n                context.writer.writeError('Invalid parameters:');\n\n                invalidParams.forEach((p, index) => {\n                    context.writer.writeln(\n                        `${index + 1}. Invalid value for ${p.name}: ${args[p.name]} -> ${\n                            p.message\n                        }`,\n                    );\n                });\n\n                return false;\n            }\n        }\n\n        return true;\n    }\n}\n","import { ICliPingServerService } from '@qodalis/cli-core';\n\nexport class CliDefaultPingServerService implements ICliPingServerService {\n    ping(): Promise<void> {\n        // Simulate a server ping\n        return new Promise((resolve) => setTimeout(resolve, 2000));\n    }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class ScriptLoaderService {\n    constructor() {}\n\n    injectScript(src: string): Promise<void> {\n        return new Promise((resolve, reject) => {\n            const script = document.createElement('script');\n            script.src = src;\n            script.async = true;\n            script.onload = () => resolve();\n            script.onerror = () =>\n                reject(new Error(`Failed to load script: ${src}`));\n            document.head.appendChild(script);\n        });\n    }\n\n    getScript(\n        src: string,\n        options?: {\n            onProgress?: (progress: number) => void;\n        },\n    ): Promise<{\n        xhr: XMLHttpRequest;\n        content?: string;\n        error?: any;\n    }> {\n        const { onProgress } = options || {};\n\n        let fetchProgress = 0;\n\n        return new Promise((resolve, reject) => {\n            const xhr = new XMLHttpRequest();\n            xhr.open('GET', src, true);\n\n            xhr.onprogress = (event) => {\n                if (event.lengthComputable) {\n                    const progress = Math.round(\n                        (event.loaded / event.total) * 100,\n                    );\n                    fetchProgress = progress;\n\n                    onProgress?.(progress);\n                } else {\n                    fetchProgress += 20;\n                    onProgress?.(fetchProgress);\n                }\n            };\n\n            xhr.onload = () => {\n                if (xhr.status === 200) {\n                    onProgress?.(100);\n                    fetchProgress = 100;\n                    resolve({\n                        xhr,\n                        content: xhr.responseText,\n                    });\n                } else {\n                    reject(\n                        new Error(\n                            `Failed to load package: ${src}, Status: ${xhr.status}, Message: ${xhr.responseText}`,\n                        ),\n                    );\n                }\n            };\n\n            xhr.onerror = () => {\n                reject(new Error(`Failed to load package: ${src}`));\n            };\n\n            xhr.send();\n        });\n    }\n\n    injectBodyScript(code: string): void {\n        const script = document.createElement('script');\n        script.text = code;\n        document.head.appendChild(script);\n    }\n}\n","import { ITerminalAddon, Terminal } from '@xterm/xterm';\n\nexport class OverlayAddon implements ITerminalAddon {\n    private terminal!: Terminal;\n    private overlayNode: HTMLElement;\n    private overlayTimeout?: number;\n\n    constructor() {\n        this.overlayNode = document.createElement('div');\n        this.overlayNode.style.cssText = `border-radius: 15px;\nfont-size: xx-large;\nopacity: 0.75;\npadding: 0.2em 0.5em 0.2em 0.5em;\nposition: absolute;\n-webkit-user-select: none;\n-webkit-transition: opacity 180ms ease-in;\n-moz-user-select: none;\n-moz-transition: opacity 180ms ease-in;`;\n\n        this.overlayNode.addEventListener(\n            'mousedown',\n            (e) => {\n                e.preventDefault();\n                e.stopPropagation();\n            },\n            true,\n        );\n    }\n\n    activate(terminal: Terminal): void {\n        this.terminal = terminal;\n    }\n\n    dispose(): void {}\n\n    showOverlay(msg: string, timeout?: number): void {\n        const { terminal, overlayNode } = this;\n        if (!terminal.element) return;\n\n        overlayNode.style.color = '#101010';\n        overlayNode.style.backgroundColor = '#f0f0f0';\n        overlayNode.textContent = msg;\n        overlayNode.style.opacity = '0.75';\n\n        if (!overlayNode.parentNode) {\n            terminal.element.appendChild(overlayNode);\n        }\n\n        const divSize = terminal.element.getBoundingClientRect();\n        const overlaySize = overlayNode.getBoundingClientRect();\n\n        overlayNode.style.top =\n            (divSize.height - overlaySize.height) / 2 + 'px';\n        overlayNode.style.left = (divSize.width - overlaySize.width) / 2 + 'px';\n\n        if (this.overlayTimeout) clearTimeout(this.overlayTimeout);\n        if (!timeout) return;\n\n        this.overlayTimeout = window.setTimeout(() => {\n            overlayNode.style.opacity = '0';\n            this.overlayTimeout = window.setTimeout(() => {\n                if (overlayNode.parentNode) {\n                    overlayNode.parentNode.removeChild(overlayNode);\n                }\n                this.overlayTimeout = undefined;\n                overlayNode.style.opacity = '0.75';\n            }, 200);\n        }, timeout || 1500);\n    }\n}\n","import {\n    AfterViewInit,\n    Component,\n    ElementRef,\n    EventEmitter,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    ViewChild,\n} from '@angular/core';\nimport {\n    ITerminalInitOnlyOptions,\n    ITerminalOptions,\n    Terminal,\n} from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { WebLinksAddon } from '@xterm/addon-web-links';\nimport { OverlayAddon } from '../addons/overlay';\nimport { WebglAddon } from '@xterm/addon-webgl';\nimport { Unicode11Addon } from '@xterm/addon-unicode11';\n\nexport type ContainerSize =\n    | `${number}%`\n    | `${number}vh`\n    | `${number}px`\n    | `${number}rem`;\n\n@Component({\n    selector: 'cli-terminal',\n    templateUrl: './cli-terminal.component.html',\n    styleUrls: ['./cli-terminal.component.sass'],\n})\nexport class CliTerminalComponent implements OnInit, AfterViewInit, OnDestroy {\n    @Input() options!: ITerminalOptions & ITerminalInitOnlyOptions;\n\n    @Input()\n    height?: ContainerSize;\n\n    @Output() onTerminalReady = new EventEmitter<Terminal>();\n\n    // xterm dependencies\n    @ViewChild('terminal', { static: true }) terminalDiv!: ElementRef;\n    private terminal!: Terminal;\n    private fitAddon!: FitAddon;\n    private resizeObserver!: ResizeObserver;\n\n    constructor() {}\n\n    ngOnInit(): void {\n        this.initializeTerminal();\n    }\n\n    ngAfterViewInit(): void {\n        this.handleResize();\n    }\n\n    private initializeTerminal(): void {\n        if (!this.options) {\n            this.options = {\n                allowProposedApi: true,\n            };\n        }\n\n        this.terminal = new Terminal(this.options);\n\n        this.fitAddon = new FitAddon();\n        this.terminal.loadAddon(this.fitAddon);\n\n        const webLinksAddon = new WebLinksAddon();\n        this.terminal.loadAddon(webLinksAddon);\n\n        const overlayAddon = new OverlayAddon();\n        this.terminal.loadAddon(overlayAddon);\n\n        // const webGlAddon = new WebglAddon();\n        // webGlAddon.onContextLoss((e) => {\n        //     webGlAddon.dispose();\n        // });\n        // this.terminal.loadAddon(webGlAddon);\n\n        const unicode11Addon = new Unicode11Addon();\n        this.terminal.loadAddon(unicode11Addon);\n\n        this.terminal.open(this.terminalDiv.nativeElement);\n        this.fitAddon.fit();\n\n        this.terminal.focus();\n\n        this.onTerminalReady.emit(this.terminal);\n    }\n\n    private handleResize(): void {\n        window.addEventListener('resize', () => {\n            this.fitAddon.fit();\n        });\n\n        this.observeContainerSize();\n    }\n\n    private observeContainerSize(): void {\n        this.resizeObserver = new ResizeObserver(() => {\n            this.fitAddon.fit();\n        });\n\n        this.resizeObserver.observe(this.terminalDiv.nativeElement);\n    }\n\n    ngOnDestroy(): void {\n        if (this.resizeObserver) {\n            this.resizeObserver.disconnect();\n        }\n\n        this.terminal?.dispose();\n    }\n}\n","<div #terminal class=\"terminal-container\" [style.height]=\"height\"></div>\n","import {\n    Component,\n    Inject,\n    Injector,\n    Input,\n    OnInit,\n    ViewEncapsulation,\n} from '@angular/core';\nimport {\n    CliForegroundColor,\n    CliOptions,\n    colorFirstWord,\n    ICliUserSession,\n    ICliUserSessionService,\n} from '@qodalis/cli-core';\nimport {\n    CliCommandExecutorService,\n    CliCommandHistoryService,\n} from './services';\nimport { CliKeyValueStore } from './storage/cli-key-value-store';\nimport {\n    ITerminalInitOnlyOptions,\n    ITerminalOptions,\n    Terminal,\n} from '@xterm/xterm';\nimport { ICliUserSessionService_TOKEN } from './tokens';\nimport { CliExecutionContext } from './context';\nimport { CliBoot } from './services/system/cli-boot';\nimport { CliWelcomeMessageService } from './services/system/cli-welcome-message.service';\nimport { BehaviorSubject, combineLatest, filter } from 'rxjs';\nimport { themes } from './processors/theme/types';\nimport { ContainerSize } from '../cli-terminal/cli-terminal.component';\n\n@Component({\n    selector: 'cli',\n    templateUrl: './cli.component.html',\n    styleUrls: ['./cli.component.sass'],\n    encapsulation: ViewEncapsulation.None,\n})\nexport class CliComponent implements OnInit {\n    @Input() options?: CliOptions;\n\n    @Input() height?: ContainerSize;\n\n    protected terminalOptions!: ITerminalOptions & ITerminalInitOnlyOptions;\n    private terminal!: Terminal;\n\n    private currentLine = '';\n    private executionContext?: CliExecutionContext;\n    private currentUserSession: ICliUserSession | undefined;\n\n    protected minDepsInitialized = new BehaviorSubject<boolean>(false);\n    protected terminalInitialized = new BehaviorSubject<boolean>(false);\n\n    constructor(\n        private injector: Injector,\n        @Inject(ICliUserSessionService_TOKEN)\n        private readonly userManagementService: ICliUserSessionService,\n        private commandExecutor: CliCommandExecutorService,\n        private readonly commandHistoryService: CliCommandHistoryService,\n        private readonly store: CliKeyValueStore,\n    ) {\n        this.userManagementService.getUserSession().subscribe((session) => {\n            this.currentUserSession = session;\n            this.executionContext?.setSession(session!);\n\n            if (this.terminal) {\n                this.printPrompt({\n                    reset: true,\n                });\n            }\n        });\n    }\n\n    ngOnInit(): void {\n        combineLatest([this.minDepsInitialized, this.terminalInitialized])\n            .pipe(filter(([x, y]) => x && y))\n            .subscribe(() => {\n                this.initialize();\n            });\n\n        this.terminalOptions = {\n            cursorBlink: true,\n            allowProposedApi: true,\n            fontSize: 20,\n            theme: themes.default,\n            convertEol: true,\n            ...(this.options?.terminalOptions ?? {}),\n        };\n\n        this.store.initialize().then(() => {\n            this.minDepsInitialized.next(true);\n        });\n    }\n\n    protected onTerminalReady(terminal: Terminal): void {\n        this.terminal = terminal;\n\n        this.terminalInitialized.next(true);\n    }\n\n    private initialize() {\n        this.commandHistoryService.initialize().then(() => {\n            this.historyIndex = this.commandHistoryService.getLastIndex();\n        });\n\n        this.addTerminalEventListeners();\n\n        this.executionContext = new CliExecutionContext(\n            this.injector,\n            this.terminal,\n            this.commandExecutor,\n            (o) => this.printPrompt(o),\n            {\n                ...(this.options ?? {}),\n                terminalOptions: this.terminalOptions,\n            },\n        );\n\n        this.executionContext.setSession(this.currentUserSession!);\n\n        this.injector\n            .get(CliBoot)\n            .boot(this.executionContext)\n            .then(() => {\n                this.injector\n                    .get(CliWelcomeMessageService)\n                    .displayWelcomeMessage(this.executionContext!);\n            });\n    }\n\n    private getTerminalCursorPosition() {\n        const x: number = (this.terminal as any)._core.buffer.x;\n        const y: number = (this.terminal as any)._core.buffer.y;\n\n        return {\n            x,\n            y,\n        };\n    }\n\n    private selectionStart: { x: number; y: number } | null = null;\n    private selectionEnd: { x: number; y: number } | null = null;\n\n    private addTerminalEventListeners(): void {\n        // Handle user input\n        this.terminal.onData(async (data) => await this.handleInput(data));\n\n        this.terminal.onKey(async (event) => {});\n\n        this.terminal.attachCustomKeyEventHandler((event) => {\n            if (event.type === 'keydown') {\n                if (event.code === 'KeyC' && event.ctrlKey) {\n                    // Handle Ctrl+C\n                    this.executionContext?.abort();\n                    this.executionContext?.setContextProcessor(undefined);\n                    this.terminal.writeln('Ctrl+C');\n                    this.printPrompt();\n\n                    return false;\n                }\n\n                if (event.code === 'Escape') {\n                    // Handle Escape\n                    this.executionContext?.abort();\n                    this.printPrompt({\n                        newLine: true,\n                    });\n\n                    return false;\n                }\n\n                if (event.code === 'KeyV' && event.ctrlKey) {\n                    //Handle Ctrl+V\n                    return false;\n                }\n\n                if (event.code === 'KeyL' && event.ctrlKey) {\n                    // Prevent the browser's default action (e.g., focusing the address bar)\n                    event.preventDefault();\n\n                    this.clearCurrentLine();\n\n                    // Clear the terminal screen\n                    this.terminal.clear();\n\n                    return false;\n                }\n\n                if (\n                    event.shiftKey &&\n                    (event.code === 'ArrowLeft' || event.code === 'ArrowRight')\n                ) {\n                    if (!this.selectionStart) {\n                        this.selectionStart = this.getTerminalCursorPosition();\n                    }\n\n                    switch (event.code) {\n                        case 'ArrowLeft':\n                            this.moveCursorLeft();\n                            break;\n                        case 'ArrowRight':\n                            this.moveCursorRight();\n                            break;\n                    }\n\n                    this.selectionEnd = this.getTerminalCursorPosition();\n\n                    this.updateSelection();\n                    return false;\n                } else {\n                    this.selectionStart = null;\n                }\n            }\n\n            return true;\n        });\n    }\n\n    private updateSelection(): void {\n        if (this.selectionStart && this.selectionEnd) {\n            const startRow = Math.min(\n                this.selectionStart.y,\n                this.selectionEnd.y,\n            );\n            const endRow = Math.max(this.selectionStart.y, this.selectionEnd.y);\n\n            if (startRow === endRow) {\n                const startCol = Math.min(\n                    this.selectionStart.x,\n                    this.selectionEnd.x,\n                );\n                const endCol = Math.max(\n                    this.selectionStart.x,\n                    this.selectionEnd.x,\n                );\n\n                // Select text on the same line\n                this.terminal.select(\n                    startCol,\n                    startRow,\n                    Math.abs(endCol - startCol),\n                );\n            } else {\n                // Select multiple lines\n                this.terminal.selectLines(startRow, endRow);\n            }\n        }\n    }\n\n    private printPrompt(options?: {\n        reset?: boolean;\n        newLine?: boolean;\n        keepCurrentLine?: boolean;\n    }): void {\n        const { reset, newLine, keepCurrentLine } = options || {};\n\n        if (reset) {\n            this.terminal.write('\\x1b[2K\\r');\n        }\n\n        if (newLine) {\n            this.terminal.write('\\r\\n');\n        }\n\n        if (!keepCurrentLine) {\n            this.currentLine = '';\n            this.cursorPosition = 0;\n        }\n\n        let promtStartMessage =\n            this.options?.usersModule?.hideUserName ||\n            !this.options?.usersModule?.enabled\n                ? ''\n                : `\\x1b[32m${this.currentUserSession?.user.email}\\x1b[0m:`;\n\n        if (this.executionContext?.contextProcessor) {\n            promtStartMessage = `${this.executionContext.contextProcessor.command}`;\n        }\n\n        const promtEndMessage = '\\x1b[34m~\\x1b[0m$ ';\n\n        const prompt = `${promtStartMessage}${promtEndMessage}`;\n\n        this.terminal.write(prompt);\n    }\n\n    private historyIndex: number = 0;\n    private cursorPosition: number = 0;\n\n    private async handleInput(data: string): Promise<void> {\n        if (this.executionContext?.isProgressRunning()) {\n            return;\n        }\n\n        if (data === '\\r') {\n            // Enter key: Process the current command\n            this.terminal.write('\\r\\n'); // Move to the next line\n\n            if (this.currentLine) {\n                await this.commandHistoryService.addCommand(this.currentLine);\n\n                this.historyIndex = this.commandHistoryService.getLastIndex();\n\n                //reset cursor position\n                this.cursorPosition = 0;\n\n                await this.commandExecutor.executeCommand(\n                    this.currentLine,\n                    this.executionContext!,\n                );\n\n                //check if the command has subscribed to the onAbort event\n                if (this.executionContext?.onAbort.observed) {\n                    this.terminal.writeln(\n                        '\\x1b[33m' + 'Press Ctrl+C to cancel' + '\\x1b[0m',\n                    );\n                }\n            }\n\n            this.printPrompt();\n        } else if (data === '\\u001B[A') {\n            // Arrow Up\n            this.showPreviousCommand();\n        } else if (data === '\\u001B[B') {\n            // Arrow Down\n            this.showNextCommand();\n        } else if (data === '\\u001B[D') {\n            // Left Arrow\n            this.moveCursorLeft(data);\n        } else if (data === '\\u001B[C') {\n            // Right Arrow\n            this.moveCursorRight(data);\n        } else if (data === '\\u007F') {\n            // Backspace key\n            this.handleBackspace();\n        } else {\n            // Append character at cursor position\n            this.handleInputText(data);\n        }\n    }\n\n    private normalizeText(text: string): string {\n        //handle tab\n        if (text === '\\u0009') {\n            return '    ';\n        }\n\n        return text.replace(/[\\r\\n]+/g, '');\n    }\n\n    private handleInputText(text: string): void {\n        text = this.normalizeText(text);\n\n        this.currentLine =\n            this.currentLine.slice(0, this.cursorPosition) +\n            text +\n            this.currentLine.slice(this.cursorPosition);\n\n        this.cursorPosition += text.length;\n\n        this.refreshCurrentLine();\n    }\n\n    private refreshCurrentLine(): void {\n        this.terminal.write('\\x1b[2K'); // Clear the current line\n        this.terminal.write('\\r'); // Move the cursor to the start\n\n        this.printPrompt({\n            keepCurrentLine: true,\n        });\n\n        // Redraw the prompt\n        this.writeCurrentLine();\n\n        // Move cursor to the correct position\n        const cursorOffset = this.currentLine.length - this.cursorPosition;\n        if (cursorOffset > 0) {\n            this.terminal.write(`\\x1b[${cursorOffset}D`);\n        }\n    }\n\n    private writeCurrentLine() {\n        this.terminal.write(\n            colorFirstWord(\n                this.currentLine,\n                (word) =>\n                    this.executionContext?.writer.wrapInColor(\n                        word,\n                        CliForegroundColor.Yellow,\n                    ) ?? this.currentLine,\n            ),\n        );\n    }\n\n    private showPreviousCommand(): void {\n        if (this.historyIndex > 0) {\n            this.historyIndex--;\n            this.displayCommandFromHistory();\n        }\n    }\n\n    private showNextCommand(): void {\n        if (this.historyIndex < this.commandHistoryService.getLastIndex() - 1) {\n            this.historyIndex++;\n            this.displayCommandFromHistory();\n        } else {\n            this.historyIndex = this.commandHistoryService.getLastIndex();\n            this.clearCurrentLine();\n        }\n    }\n\n    private displayCommandFromHistory(): void {\n        this.clearCurrentLine();\n        this.currentLine =\n            this.commandHistoryService.getCommand(this.historyIndex) || '';\n        this.writeCurrentLine();\n        this.cursorPosition = this.currentLine.length;\n    }\n\n    private clearCurrentLine(): void {\n        const wrappedLines = Math.ceil(\n            this.currentLine.length / this.terminal.cols,\n        );\n\n        for (let i = 0; i < wrappedLines; i++) {\n            this.terminal.write('\\x1b[2K'); // Clear the current line\n            this.terminal.write('\\r'); // Move the cursor to the start of the line\n            if (i < wrappedLines - 1) {\n                this.terminal.write('\\x1b[F'); // Move the cursor up for all but the last line\n            }\n\n            if (i === wrappedLines - 1) {\n                this.terminal.write('\\r');\n                this.printPrompt();\n            }\n        }\n\n        this.currentLine = '';\n        this.cursorPosition = 0;\n    }\n\n    private moveCursorLeft(key: string = '\\x1b[D'): void {\n        if (this.cursorPosition > 0) {\n            this.cursorPosition--;\n            this.terminal.write(key);\n        }\n    }\n\n    private moveCursorRight(key: string = '\\x1b[C'): void {\n        if (this.cursorPosition < this.currentLine.length) {\n            this.cursorPosition++;\n            this.terminal.write(key);\n        }\n    }\n\n    private handleBackspace(): void {\n        if (this.cursorPosition > 0) {\n            this.currentLine =\n                this.currentLine.slice(0, this.cursorPosition - 1) +\n                this.currentLine.slice(this.cursorPosition);\n            this.cursorPosition--;\n\n            this.refreshCurrentLine();\n        }\n    }\n}\n","<cli-terminal\n  [options]=\"terminalOptions\"\n  [height]=\"height\"\n  (onTerminalReady)=\"onTerminalReady($event)\"\n/>\n","import {\n    Component,\n    EventEmitter,\n    Input,\n    Output,\n    OnInit,\n    HostListener,\n    ElementRef,\n} from '@angular/core';\nimport { MenuItem } from 'primeng/api';\n\n@Component({\n    selector: 'collapsable-content',\n    templateUrl: './collapsable-content.component.html',\n    styleUrls: ['./collapsable-content.component.sass'],\n})\nexport class CollapsableContentComponent implements OnInit {\n    previousPanelHeight = 500;\n    panelHeight = 500;\n\n    isResizing = false;\n    startY = 0;\n    startHeight = 0;\n\n    @Input() visible: boolean = true;\n    @Input() isCollapsed: boolean = true;\n    @Input() isMaximized: boolean = false;\n\n    @Output()\n    public onToggle = new EventEmitter<boolean>();\n\n    @Output()\n    public onContentSizeChange = new EventEmitter<number>();\n\n    items: MenuItem[] | undefined;\n\n    activeItem: MenuItem | undefined;\n\n    constructor(private el: ElementRef) {}\n\n    ngOnInit() {\n        this.items = [\n            {\n                label: 'Tab 1',\n                icon: 'pi pi-plus',\n            },\n        ];\n    }\n\n    onActiveItemChange(event: MenuItem) {\n        this.activeItem = event;\n    }\n\n    toggleTerminal(): void {\n        this.isCollapsed = !this.isCollapsed;\n\n        this.onToggle.emit(this.isCollapsed);\n    }\n\n    closeTerminal(): void {\n        this.visible = false;\n    }\n\n    toggleMaximizationTerminal(): void {\n        //check next\n        if (!this.isMaximized) {\n            this.previousPanelHeight = this.panelHeight;\n            const windowHeight = window.innerHeight;\n            this.panelHeight = windowHeight;\n        } else {\n            this.panelHeight = this.previousPanelHeight;\n        }\n\n        this.isMaximized = !this.isMaximized;\n        this.updateTerminalSize();\n    }\n\n    onResizeStart(event: MouseEvent) {\n        this.isResizing = true;\n        if (this.isCollapsed) {\n            this.toggleTerminal();\n        }\n\n        this.startY = event.clientY;\n        this.startHeight = this.panelHeight;\n        event.preventDefault();\n    }\n\n    @HostListener('document:mousemove', ['$event'])\n    onMouseMove(event: MouseEvent) {\n        if (this.isResizing) {\n            const deltaY = this.startY - event.clientY;\n            let nextHeight = Math.max(100, this.startHeight + deltaY);\n\n            if (nextHeight > window.innerHeight) {\n                nextHeight = window.innerHeight;\n            }\n\n            this.panelHeight = nextHeight;\n            this.updateTerminalSize();\n        }\n    }\n\n    @HostListener('document:mouseup')\n    onMouseUp() {\n        this.isResizing = false;\n    }\n\n    private updateTerminalSize() {\n        this.onContentSizeChange.emit(this.panelHeight - 60 - 8);\n    }\n}\n","<div\n  *ngIf=\"visible\"\n  class=\"terminal-wrapper\"\n  [class.collapsed]=\"isCollapsed\"\n  [style]=\"{\n    height: panelHeight + 'px',\n  }\"\n>\n  <div class=\"card terminal-header\">\n    <div class=\"divider\">\n      <i class=\"pi pi-minus\" (mousedown)=\"onResizeStart($event)\"></i>\n    </div>\n    <div class=\"header-content\">\n      <p class=\"terminal-title\">\n        <i class=\"pi pi-desktop\" style=\"font-size: 2rem\"></i>\n        CLI\n      </p>\n      <div class=\"action-buttons\">\n        <p-button\n          [icon]=\"\n            isMaximized ? 'pi pi-window-minimize' : 'pi pi-window-maximize'\n          \"\n          class=\"p-button-rounded p-button-text p-button-secondary\"\n          [pTooltip]=\"!isMaximized ? 'Maximize' : 'Minimize'\"\n          tooltipPosition=\"top\"\n          [disabled]=\"isCollapsed\"\n          (onClick)=\"toggleMaximizationTerminal()\"\n        />\n\n        <p-button\n          [icon]=\"isCollapsed ? 'pi pi-chevron-up' : 'pi pi-chevron-down'\"\n          class=\"p-button-rounded p-button-text p-button-secondary\"\n          [pTooltip]=\"isCollapsed ? 'Expand' : 'Collapse'\"\n          tooltipPosition=\"top\"\n          (onClick)=\"toggleTerminal()\"\n        />\n\n        <p-button\n          [icon]=\"'pi pi-eye-slash'\"\n          class=\"p-button-rounded p-button-text p-button-secondary\"\n          [pTooltip]=\"'Close'\"\n          tooltipPosition=\"top\"\n          (onClick)=\"closeTerminal()\"\n        />\n      </div>\n    </div>\n  </div>\n  <div class=\"terminal-content\" *ngIf=\"!isCollapsed\">\n    <ng-content></ng-content>\n  </div>\n</div>\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliCanViewService {\n    constructor() {}\n\n    canView(): Observable<boolean> {\n        return of(true);\n    }\n}\n","import { Component, Input } from '@angular/core';\nimport { CliOptions } from '@qodalis/cli-core';\nimport { CliCanViewService } from '../services';\nimport { Subscription } from 'rxjs';\nimport { ContainerSize } from '../cli-terminal/cli-terminal.component';\n\nexport type CliPanelOptions = CliOptions & {\n    /**\n     * Whether the CLI should be collapsed by default. Defaults to `true`.\n     */\n    isCollapsed?: boolean;\n};\n\n/**\n * A component that displays the CLI on the bottom of page.\n */\n@Component({\n    selector: 'cli-panel',\n    templateUrl: './cli-panel.component.html',\n    styleUrls: ['./cli-panel.component.sass'],\n})\nexport class CliPanelComponent {\n    /**\n     * The options for the CLI.\n     */\n    @Input() options?: CliPanelOptions;\n\n    visible = false;\n\n    protected terminalHeight: ContainerSize = `${450 - 8}px`;\n\n    protected initialized: boolean = false;\n\n    private subscriptions: Subscription = new Subscription();\n\n    constructor(private readonly canView: CliCanViewService) {\n        this.subscriptions.add(\n            this.canView.canView().subscribe((canView) => {\n                this.visible = canView;\n            }),\n        );\n    }\n\n    onToggle($event: boolean) {\n        if (!$event && !this.initialized) {\n            this.initialized = true;\n        }\n    }\n\n    onContentSizeChange($event: number) {\n        this.terminalHeight = `${$event}px`;\n    }\n}\n","<collapsable-content\n  [isCollapsed]=\"options?.isCollapsed ?? true\"\n  (onToggle)=\"onToggle($event)\"\n  (onContentSizeChange)=\"onContentSizeChange($event)\"\n  *ngIf=\"visible\"\n>\n  <ng-container *ngIf=\"initialized\">\n    <cli [options]=\"options\" [height]=\"terminalHeight\" />\n  </ng-container>\n</collapsable-content>\n","import { Inject, Injectable } from '@angular/core';\nimport { CliProcessorMetadata, DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport {\n    CliProcessCommand,\n    ICliCommandAuthor,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n    ICliPingServerService,\n} from '@qodalis/cli-core';\nimport { ICliPingServerService_TOKEN } from '../tokens';\n\n@Injectable()\nexport class CliPingCommandProcessor implements ICliCommandProcessor {\n    command = 'ping';\n\n    description?: string | undefined = 'Pings the server';\n\n    author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        icon: '🏓',\n    };\n\n    constructor(\n        @Inject(ICliPingServerService_TOKEN)\n        private pingServerService: ICliPingServerService,\n    ) {}\n\n    async processCommand(\n        _: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        context.spinner?.show();\n        context?.spinner?.setText('Pinging server...');\n        this.pingServerService\n            .ping()\n            .then(() => {\n                context.spinner?.hide();\n                context.writer.writeln('pong');\n                context.showPrompt();\n            })\n            .catch(() => {\n                context.spinner?.hide();\n                context.writer.writeError('Failed to ping the server');\n                context.showPrompt();\n            });\n    }\n}\n","import { CliProcessorMetadata, DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport {\n    CliProcessCommand,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliEvalCommandProcessor implements ICliCommandProcessor {\n    command = 'eval';\n    description = 'Evaluate a JavaScript expression';\n    author = DefaultLibraryAuthor;\n    allowUnlistedCommands = true;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        icon: '🧮',\n        module: 'misc',\n    };\n\n    async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        try {\n            const output = eval(command.value ?? '');\n\n            if (Array.isArray(output)) {\n                context.writer.writeln('Output:');\n                context.writer.writeJson(output);\n                return;\n            }\n\n            if (typeof output === 'object') {\n                context.writer.writeln('Output:');\n                context.writer.writeJson(output);\n                return;\n            }\n\n            context.writer.writeln('Output: ' + output?.toString());\n        } catch (e) {\n            context.writer.writeError(e!.toString());\n        }\n    }\n\n    writeDescription(context: ICliExecutionContext): void {\n        context.writer.writeln(this.description);\n        context.writer.writeln('Examples:');\n        context.writer.writeln('  eval 1 + 1');\n        context.writer.writeln('  eval \"Hello, \" + \"World!\"');\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n    ICliExecutionContext,\n    CliProcessCommand,\n    ICliCommandProcessor,\n    ICliCommandAuthor,\n    CliProcessorMetadata,\n    CliIcon,\n    ICliCommandChildProcessor,\n    CliForegroundColor,\n} from '@qodalis/cli-core';\n\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { openLink } from '../../../utils';\n\nconst githubUrl = 'https://github.com/qodalis-solutions/angular-web-cli';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliFeedbackCommandProcessor implements ICliCommandProcessor {\n    command = 'feedback';\n\n    description?: string | undefined =\n        'Allows users to report bugs or request features';\n\n    processors?: ICliCommandChildProcessor[] | undefined = [];\n\n    author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        icon: CliIcon.Bug,\n        module: 'system',\n    };\n\n    constructor() {\n        this.processors?.push(\n            {\n                command: 'report-bug',\n                description: 'Reports a bug on GitHub',\n                allowUnlistedCommands: true,\n                async processCommand(\n                    { value }: CliProcessCommand,\n                    context: ICliExecutionContext,\n                ): Promise<void> {\n                    openLink(\n                        `${githubUrl}/issues/new?assignees=&labels=bug&projects=&template=bug_report.md&title=${value}`,\n                    );\n                },\n                writeDescription({ writer }: ICliExecutionContext): void {\n                    writer.writeln(\n                        'Reports a bug on GitHub. Usage: feedback report-bug <description>',\n                    );\n                },\n            },\n            {\n                command: 'request-feature',\n                description: 'Requests a new feature on GitHub',\n                allowUnlistedCommands: true,\n                async processCommand(\n                    { value }: CliProcessCommand,\n                    context: ICliExecutionContext,\n                ): Promise<void> {\n                    openLink(\n                        `${githubUrl}/issues/new?assignees=&labels=feature-request&projects=&template=feature_request.md&title=${value}`,\n                    );\n                },\n                writeDescription({ writer }: ICliExecutionContext): void {\n                    writer.writeln(\n                        'Requests a new feature on GitHub. Usage: feedback request-feature <description>',\n                    );\n                },\n            },\n            {\n                command: 'request-command',\n                description: 'Requests a new command on GitHub',\n                allowUnlistedCommands: true,\n                async processCommand(\n                    { value }: CliProcessCommand,\n                    context: ICliExecutionContext,\n                ): Promise<void> {\n                    openLink(\n                        `${githubUrl}/issues/new?assignees=&labels=command-request&projects=&template=command-request.md&title=${value}`,\n                    );\n                },\n                writeDescription({ writer }: ICliExecutionContext): void {\n                    writer.writeln(\n                        'Requests a new command on GitHub. Usage: feedback request-command <description>',\n                    );\n                },\n            },\n        );\n    }\n\n    async processCommand(\n        _: CliProcessCommand,\n        { writer }: ICliExecutionContext,\n    ): Promise<void> {\n        writer.writeln('Use one of the following subcommands:');\n        this.processors?.forEach((processor) => {\n            writer.writeln(\n                `- ${writer.wrapInColor(`feedback ${processor.command}`, CliForegroundColor.Cyan)}: ${processor.description}`,\n            );\n        });\n    }\n\n    writeDescription({ writer }: ICliExecutionContext): void {\n        writer.writeln(\n            'Allows users to report bugs or request features on GitHub.',\n        );\n    }\n}\n","export const groupBy = <T, K>(\n    list: T[],\n    keySelector: (item: T) => K,\n): Map<K, T[]> => {\n    return list.reduce((map, item) => {\n        const key = keySelector(item);\n        if (!map.has(key)) {\n            map.set(key, []);\n        }\n        map.get(key)!.push(item);\n        return map;\n    }, new Map<K, T[]>());\n};\n","import { Injectable, Injector } from '@angular/core';\nimport {\n    ICliExecutionContext,\n    CliProcessCommand,\n    ICliCommandProcessor,\n    ICliCommandParameterDescriptor,\n    CliForegroundColor,\n    CliProcessorMetadata,\n    CliIcon,\n    ICliCommandProcessorRegistry,\n} from '@qodalis/cli-core';\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { CliProcessorsRegistry_TOKEN } from '../../tokens';\nimport { groupBy } from '../../../utils/arrays';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliHelpCommandProcessor implements ICliCommandProcessor {\n    command = 'help';\n\n    description = 'Displays help for a command';\n\n    allowUnlistedCommands?: boolean | undefined = true;\n\n    author = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        icon: CliIcon.Help,\n        module: 'system',\n    };\n\n    private readonly registry: ICliCommandProcessorRegistry;\n\n    constructor(private readonly injector: Injector) {\n        this.registry = this.injector.get<ICliCommandProcessorRegistry>(\n            CliProcessorsRegistry_TOKEN,\n        );\n    }\n\n    async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        const { writer } = context;\n\n        const [_, ...commandsToHelp] = command.command.split(' ');\n\n        if (commandsToHelp.length === 0) {\n            await context.executor.executeCommand('version', context);\n\n            this.writeSeparator(context);\n\n            writer.writeln(\n                writer.wrapInColor(\n                    'Available commands:',\n                    CliForegroundColor.Yellow,\n                ),\n            );\n\n            const groupedCommands = groupBy<ICliCommandProcessor, string>(\n                this.registry.processors,\n                (x) => x.metadata?.module || 'uncategorized',\n            );\n\n            groupedCommands.forEach((processors, module) => {\n                writer.writeln(\n                    writer.wrapInColor(module, CliForegroundColor.Yellow),\n                );\n\n                processors.forEach((processor) => {\n                    writer.writeln(\n                        `- ${processor?.metadata?.icon ? processor.metadata.icon : CliIcon.Extension}  ${writer.wrapInColor(processor.command, CliForegroundColor.Cyan)} - ${\n                            processor?.description || 'Missing description'\n                        }`,\n                    );\n                });\n\n                this.writeSeparator(context);\n            });\n\n            context.writer.writeln();\n\n            await context.executor.executeCommand('hotkeys', context);\n\n            this.writeSeparator(context);\n\n            writer.writeln(\n                '\\nType `help <command>` to get more information about a specific command',\n            );\n        } else {\n            const processor = this.registry.findProcessor(\n                commandsToHelp[0],\n                commandsToHelp.slice(1),\n            );\n\n            if (processor) {\n                this.writeProcessorDescription(processor, context);\n            } else {\n                writer.writeln(`\\x1b[33mUnknown command: ${commandsToHelp[0]}`);\n            }\n        }\n    }\n\n    writeDescription({ writer }: ICliExecutionContext): void {\n        writer.writeln('Displays help for a command');\n\n        writer.writeln(\n            'If no command is specified, it will display a list of available commands',\n        );\n\n        writer.writeln(\n            'If a command is specified, it will display information about that command',\n        );\n\n        writer.writeln(\n            'If a command is specified with a subcommand, it will display information about that subcommand',\n        );\n    }\n\n    private writeProcessorDescription(\n        processor: ICliCommandProcessor,\n        context: ICliExecutionContext,\n    ) {\n        const { writer } = context;\n\n        writer.write('\\x1b[33mCommand: \\x1b[0m');\n\n        if (processor.metadata?.icon) {\n            writer.write(`${processor.metadata.icon}  `);\n        }\n\n        writer.writeln(\n            `${writer.wrapInColor(\n                processor.command,\n                CliForegroundColor.Cyan,\n            )} @${processor.version || '1.0.0'} - ${processor.description}`,\n        );\n\n        this.writeSeparator(context);\n\n        if (processor.author) {\n            writer.writeln(\n                `\\x1b[33mAuthor:\\x1b[0m ${processor.author.name}<${processor.author.email}>`,\n            );\n\n            this.writeSeparator(context);\n        }\n\n        writer.write(\n            writer.wrapInColor('Description: ', CliForegroundColor.Yellow),\n        );\n\n        if (processor.writeDescription) {\n            processor.writeDescription(context);\n        } else if (processor.description) {\n            writer.writeln(\n                `${writer.wrapInColor('Description:', CliForegroundColor.Yellow)} ${processor.description}`,\n            );\n        } else {\n            writer.writeln(\n                writer.wrapInColor(\n                    'No description available',\n                    CliForegroundColor.Yellow,\n                ),\n            );\n        }\n\n        this.writeSeparator(context);\n\n        if (processor.processors?.length) {\n            writer.writeln(\n                writer.wrapInColor('Subcommands:', CliForegroundColor.Yellow),\n            );\n\n            processor.processors.forEach((subprocessor) => {\n                writer.writeln(\n                    `- ${writer.wrapInColor(\n                        subprocessor.command,\n                        CliForegroundColor.Cyan,\n                    )} - ${subprocessor.description}`,\n                );\n            });\n\n            this.writeSeparator(context);\n        }\n\n        const parameters = [\n            ...(processor.parameters || []),\n            ...defaultParameters,\n        ];\n\n        writer.writeln(\n            writer.wrapInColor('Parameters:', CliForegroundColor.Yellow),\n        );\n\n        parameters.forEach((parameter) => {\n            writer.writeln(\n                `--${writer.wrapInColor(\n                    parameter.name,\n                    CliForegroundColor.Cyan,\n                )} (${parameter.type}) ${\n                    parameter.aliases ? `(${parameter.aliases.join(', ')})` : ''\n                } - ${parameter.description}${\n                    parameter.required ? ' (required)' : ''\n                }`,\n            );\n        });\n\n        this.writeSeparator(context);\n\n        if (processor.metadata?.requireServer) {\n            writer.writeln(\n                writer.wrapInColor(\n                    'Requires server to be running',\n                    CliForegroundColor.Red,\n                ),\n            );\n        }\n    }\n\n    private writeSeparator({ writer }: ICliExecutionContext) {\n        writer.writeDivider({\n            char: '=',\n        });\n    }\n}\n\nconst defaultParameters: ICliCommandParameterDescriptor[] = [\n    {\n        name: 'version',\n        aliases: ['v'],\n        type: 'boolean',\n        description: 'Displays the version of the command',\n        required: false,\n    },\n    {\n        name: 'main',\n        type: 'boolean',\n        description: 'Set the command as the main command',\n        required: false,\n    },\n];\n","import { Injectable } from '@angular/core';\nimport {\n    ICliExecutionContext,\n    CliProcessCommand,\n    ICliCommandProcessor,\n    ICliCommandAuthor,\n    CliProcessorMetadata,\n    CliIcon,\n} from '@qodalis/cli-core';\n\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { CliCommandHistoryService } from '../../services';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliHistoryCommandProcessor implements ICliCommandProcessor {\n    command = 'history';\n\n    description?: string | undefined =\n        'Prints the command history of the current session';\n\n    processors?: ICliCommandProcessor[] | undefined = [];\n\n    author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        icon: CliIcon.Code,\n        module: 'system',\n    };\n\n    constructor(\n        private readonly commandHistoryService: CliCommandHistoryService,\n    ) {\n        this.processors?.push({\n            command: 'list',\n            description: this.description,\n            processCommand: this.processCommand.bind(this),\n            writeDescription: this.writeDescription.bind(this),\n        });\n\n        this.processors?.push({\n            command: 'clear',\n            description: 'Clears the command history',\n            processCommand: async (\n                _: CliProcessCommand,\n                context: ICliExecutionContext,\n            ) => {\n                await this.commandHistoryService.clearHistory();\n                context.writer.writeInfo('Command history cleared');\n            },\n            writeDescription: (context: ICliExecutionContext) => {\n                context.writer.writeln('Clears the command history');\n            },\n        });\n    }\n\n    async processCommand(\n        _: CliProcessCommand,\n        { writer }: ICliExecutionContext,\n    ): Promise<void> {\n        const history = this.commandHistoryService.getHistory();\n\n        if (history.length === 0) {\n            writer.writeln('No history available');\n            return;\n        } else {\n            writer.writeln('Command history:');\n            history.forEach((command, index) => {\n                writer.writeln(`${index + 1}. ${command}`);\n            });\n        }\n    }\n\n    writeDescription({ writer }: ICliExecutionContext): void {\n        writer.writeln('Prints the command history of the current session');\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n    ICliExecutionContext,\n    CliProcessCommand,\n    ICliCommandProcessor,\n    CliForegroundColor,\n    CliProcessorMetadata,\n} from '@qodalis/cli-core';\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { hotkeysInfo } from '../../constants';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliHotKeysCommandProcessor implements ICliCommandProcessor {\n    command = 'hotkeys';\n\n    description = 'Displays the hotkeys information';\n\n    processors?: ICliCommandProcessor[] | undefined = [];\n\n    author = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        icon: '🔥',\n        module: 'system',\n    };\n\n    async processCommand(\n        _: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        context.writer.writeln(\n            context.writer.wrapInColor(\n                'Avalaible hotkeys:',\n                CliForegroundColor.Yellow,\n            ),\n        );\n\n        hotkeysInfo.forEach((hotkey) => {\n            context.writer.writeln(\n                `- ${context.writer.wrapInColor(\n                    hotkey.key,\n                    CliForegroundColor.Yellow,\n                )} - ${hotkey.description}`,\n            );\n        });\n    }\n\n    writeDescription(context: ICliExecutionContext): void {\n        context.writer.writeln(\n            this.description || 'Displays the hotkeys information',\n        );\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Package } from '@qodalis/cli-core';\nimport { CliKeyValueStore } from '../storage/cli-key-value-store';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliPackageManagerService {\n    private readonly storageKey = 'cli-packages';\n\n    public QODALIS_COMMAND_PREFIX = '@qodalis/cli-';\n\n    constructor(private readonly store: CliKeyValueStore) {}\n\n    /**\n     * Retrieves the list of packages\n     * @returns {Package[]} Array of packages\n     */\n    async getPackages(): Promise<Package[]> {\n        const oldPackages = localStorage.getItem('cliPackages');\n        if (oldPackages) {\n            localStorage.removeItem('cliPackages');\n            await this.store.set(this.storageKey, JSON.parse(oldPackages));\n        }\n\n        const packages = await this.store.get<Package[]>(this.storageKey);\n\n        return packages ? packages : [];\n    }\n\n    /**\n     * Retrieves a package by name from the list.\n     * @param packageName {string} The name of the package to retrieve\n     * @returns {Package | undefined} The package if found, undefined otherwise\n     */\n    async getPackage(packageName: string): Promise<Package | undefined> {\n        return (await this.getPackages()).find(\n            (p) =>\n                p.name === packageName ||\n                p.name === this.QODALIS_COMMAND_PREFIX + packageName,\n        );\n    }\n\n    /**\n     * Checks if a package with the given name exists in the list.\n     * @param packageName {string} The name of the package to check\n     * @returns {boolean} True if the package exists, false otherwise\n     */\n    async hasPackage(packageName: string): Promise<boolean> {\n        return (await this.getPackage(packageName)) !== undefined;\n    }\n\n    /**\n     * Adds a new package to the list and saves it in storage.\n     * @param pkg {Package} The package to add\n     */\n    async addPackage(pkg: Package): Promise<void> {\n        const packages = await this.getPackages();\n        if (packages.find((p) => p.name === pkg.name)) {\n            throw new Error(`Package with name \"${pkg.name}\" already exists.`);\n        }\n        packages.push(pkg);\n        await this.savePackages(packages);\n    }\n\n    /**\n     * Removes a package by name and saves the updated list in storage\n     * @param packageName {string} The name of the package to remove\n     */\n    async removePackage(packageName: string): Promise<Package> {\n        const packages = await this.getPackages();\n        const packageToRemove = packages.find(\n            (p) =>\n                p.name === packageName ||\n                p.name === this.QODALIS_COMMAND_PREFIX + packageName,\n        );\n\n        if (!packageToRemove) {\n            throw new Error(`Package with name \"${packageName}\" not found.`);\n        }\n\n        const updatedPackages = packages.filter(\n            (p) => p.name !== packageToRemove.name,\n        );\n\n        if (packages.length === updatedPackages.length) {\n            throw new Error(`Package with name \"${packageName}\" not found.`);\n        }\n\n        this.savePackages(updatedPackages);\n\n        return packageToRemove!;\n    }\n\n    /**\n     * Updates an existing package in the list and saves the updated list in storage.\n     * @param pkg {Package} The updated package\n     * @throws {Error} If the package to update is not found\n     * @returns {void}\n     * @throws {Error} If the package to update is not found\n     * @returns {void}\n     */\n    async updatePackage(pkg: Package): Promise<void> {\n        const packages = await this.getPackages();\n        const index = packages.findIndex((p) => p.name === pkg.name);\n        if (index === -1) {\n            throw new Error(`Package with name \"${pkg.name}\" not found.`);\n        }\n        packages[index] = pkg;\n        await this.savePackages(packages);\n    }\n\n    /**\n     * Saves the list of packages to storage.\n     * @param packages {Package[]} The list of packages to save\n     */\n    private async savePackages(packages: Package[]): Promise<void> {\n        await this.store.set(this.storageKey, packages);\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n    CliForegroundColor,\n    CliProcessorMetadata,\n    DefaultLibraryAuthor,\n    ICliCommandProcessorRegistry,\n} from '@qodalis/cli-core';\nimport {\n    CliProcessCommand,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n    ICliUmdModule,\n    Package,\n} from '@qodalis/cli-core';\nimport { ScriptLoaderService } from '../../services/script-loader.service';\nimport { CliPackageManagerService } from '../../services/cli-package-manager.service';\nimport { CliProcessorsRegistry_TOKEN } from '../../tokens';\n\n@Injectable()\nexport class CliPackagesCommandProcessor implements ICliCommandProcessor {\n    readonly command = 'packages';\n\n    description = 'Manage packages in the cli';\n\n    author = DefaultLibraryAuthor;\n\n    readonly version = '1.0.2';\n\n    readonly processors?: ICliCommandProcessor[] | undefined = [];\n\n    readonly metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        icon: '📦',\n        module: 'system',\n    };\n\n    private registeredDependencies: string[] = [];\n\n    constructor(\n        private readonly scriptsLoader: ScriptLoaderService,\n        private readonly packagesManager: CliPackageManagerService,\n        @Inject(CliProcessorsRegistry_TOKEN)\n        private readonly registry: ICliCommandProcessorRegistry,\n    ) {\n        const scope = this;\n\n        this.processors = [\n            {\n                command: 'ls',\n                description: 'List all packages in the cli',\n                author: DefaultLibraryAuthor,\n                async processCommand(_, context) {\n                    const packages = await packagesManager.getPackages();\n\n                    context.writer.writeln('Packages:');\n\n                    if (packages.length === 0) {\n                        context.writer.writeInfo('No packages installed');\n                        context.writer.writeInfo(\n                            \"Use 'packages add <package>' to add a package\",\n                        );\n                        return;\n                    }\n\n                    packages.forEach((pkg) => {\n                        context.writer.writeInfo(\n                            `- ${pkg.name}@${pkg.version}`,\n                        );\n                    });\n                },\n                writeDescription(context) {\n                    context.writer.writeln('  packages ls');\n                },\n            },\n            {\n                command: 'add',\n                description:\n                    'Add a package to the cli, e.g. packages add guid.',\n                valueRequired: true,\n                async processCommand(command, context) {\n                    const packages = command.value!.split(' ');\n                    for (const pkg of packages) {\n                        await scope.addPackage(pkg, context);\n                    }\n                },\n                writeDescription({ writer }) {\n                    writer.writeInfo(\n                        \"Supoorts multiple packages, e.g. 'packages add guid server-logs'\",\n                    );\n                    writer.writeln(\n                        '  packages add <package> ' +\n                            writer.wrapInColor(\n                                '# Add a package',\n                                CliForegroundColor.Green,\n                            ),\n                    );\n                    writer.writeln('  packages add guid');\n                    writer.writeln('  packages add @qodalis/cli-guid');\n                    writer.writeln('  packages add @qodalis/cli-server-logs');\n                },\n            },\n            {\n                command: 'remove',\n                description: 'Remove a package from the cli',\n                valueRequired: true,\n                async processCommand(command, context) {\n                    const packages = command.value!.split(' ');\n\n                    for (const pkg of packages) {\n                        await scope.removePackage(pkg, context);\n                    }\n                },\n            },\n            {\n                command: 'update',\n                description:\n                    'Update a package in the cli to the latest version or update all packages',\n                allowUnlistedCommands: true,\n                valueRequired: false,\n                async processCommand(command, context) {\n                    if (command.value) {\n                        await scope.updatePackage(command.value!, context);\n                    } else {\n                        const packages = await packagesManager.getPackages();\n                        for (const pkg of packages) {\n                            await scope.updatePackage(pkg.name, context);\n                        }\n\n                        context.writer.writeSuccess('All packages updated');\n                    }\n                },\n                writeDescription(context) {\n                    context.writer.writeln(\n                        '  packages update <package> ' +\n                            context.writer.wrapInColor(\n                                '# Update a specific package',\n                                CliForegroundColor.Green,\n                            ),\n                    );\n                    context.writer.writeln(\n                        '  packages update ' +\n                            context.writer.wrapInColor(\n                                '# Update all packages',\n                                CliForegroundColor.Green,\n                            ),\n                    );\n                },\n            },\n        ];\n    }\n\n    async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        await context.executor.showHelp(command, context);\n    }\n\n    writeDescription?({ writer }: ICliExecutionContext): void {\n        writer.writeln(this.description);\n\n        writer.writeInfo(\n            'Available packages can be found at https://www.npmjs.com/org/qodalis',\n        );\n\n        writer.writeln('  packages ls');\n        writer.writeln('  packages add <package>');\n    }\n\n    async initialize(context: ICliExecutionContext): Promise<void> {\n        const packages = await this.packagesManager.getPackages();\n\n        for (const pkg of packages) {\n            await this.registerPackageDependencies(pkg, context);\n\n            await this.scriptsLoader.injectScript(pkg.url);\n        }\n    }\n\n    private async removePackage(name: string, context: ICliExecutionContext) {\n        context.progressBar.show();\n\n        try {\n            const pkg = await this.packagesManager.removePackage(name);\n\n            if (pkg) {\n                const module = (window as any)[pkg.name] as ICliUmdModule;\n                if (module) {\n                    module.processors?.forEach((processor) => {\n                        this.registry.unregisterProcessor(processor);\n                    });\n                }\n            }\n\n            context.progressBar.complete();\n            context.writer.writeSuccess(\n                `Package ${pkg.name}@${pkg.version} removed successfully`,\n            );\n        } catch (e) {\n            context.progressBar.complete();\n            context.writer.writeError(e?.toString() || 'Unknown error');\n        }\n    }\n\n    private async addPackage(name: string, context: ICliExecutionContext) {\n        const { progressBar, writer } = context;\n\n        const hasPackage = await this.packagesManager.hasPackage(name);\n        if (hasPackage) {\n            writer.writeInfo(`Package ${name} already installed`);\n\n            return;\n        }\n\n        progressBar.show();\n        progressBar.setText(`Fetching package ${name}`);\n\n        try {\n            const promises = [\n                this.scriptsLoader\n                    .getScript(`https://unpkg.com/${name}` + '/package.json')\n                    .catch((error) => ({\n                        error,\n                        content: null,\n                        xhr: null,\n                    }))\n                    .finally(() => {\n                        progressBar.update(10, {\n                            type: 'increment',\n                        });\n                    }),\n            ];\n\n            if (!name.startsWith(this.packagesManager.QODALIS_COMMAND_PREFIX)) {\n                promises.push(\n                    this.scriptsLoader\n                        .getScript(\n                            `https://unpkg.com/${this.packagesManager.QODALIS_COMMAND_PREFIX}${name}` +\n                                '/package.json',\n                        )\n                        .catch((error) => ({\n                            error,\n                            content: null,\n                            xhr: null,\n                        }))\n                        .finally(() => {\n                            progressBar.update(10, {\n                                type: 'increment',\n                            });\n                        }),\n                );\n            }\n\n            progressBar.update(10);\n\n            const packages = await Promise.all(promises);\n\n            if (packages.every((p) => p.error)) {\n                progressBar.setText('Package not found');\n                throw packages[0].error;\n            }\n\n            const validResponses = packages\n                .filter((p) => p.content)\n                .map((p) => JSON.parse(p.content || '{}'));\n\n            progressBar.update(20, {\n                type: 'increment',\n            });\n            progressBar.setText(\"Checking package's dependencies\");\n\n            const packgeInfo = validResponses.some((x) =>\n                x.name.startsWith(this.packagesManager.QODALIS_COMMAND_PREFIX),\n            )\n                ? validResponses.find((x) =>\n                      x.name.startsWith(\n                          this.packagesManager.QODALIS_COMMAND_PREFIX,\n                      ),\n                  )\n                : validResponses[0];\n\n            const response = await this.scriptsLoader.getScript(\n                `https://unpkg.com/${packgeInfo.name}`,\n                {\n                    onProgress: (progress) => {\n                        context.progressBar.update(progress);\n                    },\n                },\n            );\n\n            progressBar.update(20, {\n                type: 'increment',\n            });\n            progressBar.setText('Injecting package');\n\n            const pkg: Package = {\n                name: packgeInfo.name,\n                version: packgeInfo.version || 'latest',\n                url: response.xhr.responseURL,\n                dependencies: packgeInfo.cliDependencies || [],\n            };\n\n            progressBar.update(80);\n            progressBar.setText('Registering dependencies');\n\n            await this.registerPackageDependencies(pkg, context);\n\n            progressBar.update(90);\n            progressBar.setText('Dependencies registered');\n\n            if (response.content) {\n                await this.scriptsLoader.injectBodyScript(response.content);\n            }\n\n            progressBar.update(95);\n            progressBar.setText('Saving package');\n\n            await this.packagesManager.addPackage(pkg);\n\n            context.progressBar.complete();\n\n            context.writer.writeSuccess(\n                `Package ${packgeInfo.name}@${packgeInfo.version} added successfully`,\n            );\n        } catch (e) {\n            context.progressBar.complete();\n            context.writer.writeError(e?.toString() || 'Unknown error');\n        }\n    }\n\n    private async updatePackage(\n        name: string,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        const { progressBar, writer } = context;\n\n        progressBar.show();\n\n        try {\n            progressBar.update(10, {\n                type: 'increment',\n            });\n            progressBar.setText(`Updating package ${name}`);\n            const currentPackage = await this.packagesManager.getPackage(name);\n\n            if (!currentPackage) {\n                progressBar.complete();\n                writer.writeError(`Package ${name} not found`);\n                return;\n            }\n\n            const packageUrl = `https://unpkg.com/${currentPackage.name}`;\n\n            const newPackage = await this.scriptsLoader\n                .getScript(packageUrl + '/package.json')\n                .then((response) => {\n                    return JSON.parse(response.content || '{}');\n                });\n\n            progressBar.update(20, {\n                type: 'increment',\n            });\n\n            progressBar.setText(\n                `Checking for updates for package ${currentPackage.name}`,\n            );\n\n            if (newPackage.version === currentPackage.version) {\n                context.progressBar.complete();\n                context.writer.writeInfo(\n                    `Package ${currentPackage.name} is already up to date with version ${currentPackage.version}`,\n                );\n                return;\n            }\n\n            const response = await this.scriptsLoader.getScript(packageUrl, {\n                onProgress: (progress) => {\n                    context.progressBar.update(progress);\n                },\n            });\n\n            progressBar.update(20, {\n                type: 'increment',\n            });\n            progressBar.setText(`Updating package ${currentPackage.name}`);\n\n            const updatedPkg: Package = {\n                name: newPackage.name,\n                version: newPackage.version || 'latest',\n                url: response.xhr.responseURL,\n                dependencies: newPackage.cliDependencies || [],\n            };\n\n            await this.registerPackageDependencies(updatedPkg, context);\n\n            progressBar.update(90);\n            progressBar.setText(`Injecting package ${currentPackage.name}`);\n\n            if (response.content) {\n                await this.scriptsLoader.injectBodyScript(response.content);\n            }\n\n            await this.packagesManager.updatePackage(updatedPkg);\n\n            progressBar.setText(\n                `Package ${currentPackage.name} updated successfully`,\n            );\n            progressBar.complete();\n\n            writer.writeSuccess(\n                `Package ${currentPackage.name} updated successfully to version ${newPackage.version} from ${currentPackage.version}`,\n            );\n        } catch (e) {\n            progressBar.complete();\n            writer.writeError(e?.toString() || 'Unknown error');\n        }\n    }\n\n    private async registerPackageDependencies(\n        pkg: Package,\n        { logger }: ICliExecutionContext,\n    ): Promise<void> {\n        if (pkg.dependencies && pkg.dependencies.length > 0) {\n            logger.info(`Injecting package ${pkg.name} dependencies`);\n\n            for (const dependency of pkg.dependencies) {\n                if (this.registeredDependencies.includes(dependency.name!)) {\n                    logger.info(\n                        `Dependency ${dependency.globalName} already registered`,\n                    );\n                    continue;\n                }\n\n                await this.scriptsLoader.injectScript(dependency.url);\n\n                if (dependency.globalName) {\n                    const isAvailable = await this.waitForGlobal(\n                        dependency.globalName,\n                        3000,\n                    );\n\n                    if (!isAvailable) {\n                        logger.error(\n                            `Dependency ${dependency.globalName} not found in global scope within timeout`,\n                        );\n\n                        return;\n                    } else {\n                        logger.info(\n                            `Dependency ${dependency.globalName} is available in global scope`,\n                        );\n                    }\n                }\n\n                this.registeredDependencies.push(dependency.name);\n            }\n        } else {\n            logger.info(`Package ${pkg.name} has no dependencies`);\n        }\n    }\n\n    /**\n     * Waits until a global variable is available on the `window` object.\n     * @param globalName {string} The name of the global variable to check.\n     * @param timeout {number} The maximum time to wait in milliseconds.\n     * @returns {Promise<boolean>} Resolves to `true` if the variable is found, `false` otherwise.\n     */\n    private waitForGlobal(\n        globalName: string,\n        timeout: number,\n    ): Promise<boolean> {\n        return new Promise((resolve) => {\n            const interval = 50; // Check every 50ms\n            let elapsed = 0;\n\n            const check = () => {\n                if ((window as any)[globalName]) {\n                    resolve(true);\n                } else if (elapsed >= timeout) {\n                    resolve(false);\n                } else {\n                    elapsed += interval;\n                    setTimeout(check, interval);\n                }\n            };\n\n            check();\n        });\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n    ICliExecutionContext,\n    CliProcessCommand,\n    ICliCommandProcessor,\n    ICliCommandAuthor,\n    CliProcessorMetadata,\n    CliIcon,\n    CliForegroundColor,\n} from '@qodalis/cli-core';\n\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../../../version';\nimport { CLi_Name_Art } from '../../constants';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliVersionCommandProcessor implements ICliCommandProcessor {\n    command = 'version';\n\n    description?: string | undefined = 'Prints the version information';\n\n    processors?: ICliCommandProcessor[] | undefined = [];\n\n    author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        icon: CliIcon.Settings,\n        module: 'system',\n    };\n\n    async processCommand(\n        _: CliProcessCommand,\n        { writer }: ICliExecutionContext,\n    ): Promise<void> {\n        writer.writeln(\n            `CLI Version@${writer.wrapInColor(LIBRARY_VERSION, CliForegroundColor.Green)}`,\n        );\n\n        writer.writeln(CLi_Name_Art);\n\n        writer.writeln(\n            writer.wrapInColor('Documentation: ', CliForegroundColor.Green) +\n                'https://cli-docs.qodalis.com/',\n        );\n\n        writer.writeln();\n    }\n\n    writeDescription(context: ICliExecutionContext): void {\n        context.writer.writeln('Prints the current version of the CLI');\n    }\n}\n","import { resolveCommandProcessorProvider } from '../../../utils';\nimport { CliFeedbackCommandProcessor } from './cli-feedback-command-processor';\nimport { CliHelpCommandProcessor } from './cli-help-command-processor';\nimport { CliHistoryCommandProcessor } from './cli-history-command-processor';\nimport { CliHotKeysCommandProcessor } from './cli-hot-keys-command-processor';\nimport { CliPackagesCommandProcessor } from './cli-packages-command-processor';\nimport { CliVersionCommandProcessor } from './cli-version-command-processor';\n\nexport { CliPackagesCommandProcessor } from './cli-packages-command-processor';\n\nexport { CliHotKeysCommandProcessor } from './cli-hot-keys-command-processor';\n\nexport { CliHelpCommandProcessor } from './cli-help-command-processor';\n\nexport { CliVersionCommandProcessor } from './cli-version-command-processor';\n\nexport { CliHistoryCommandProcessor } from './cli-history-command-processor';\n\nexport { CliFeedbackCommandProcessor } from './cli-feedback-command-processor';\n\nexport const systemProviders = [\n    resolveCommandProcessorProvider(CliHelpCommandProcessor),\n    resolveCommandProcessorProvider(CliVersionCommandProcessor),\n    resolveCommandProcessorProvider(CliFeedbackCommandProcessor),\n    resolveCommandProcessorProvider(CliHistoryCommandProcessor),\n    resolveCommandProcessorProvider(CliPackagesCommandProcessor),\n    resolveCommandProcessorProvider(CliHotKeysCommandProcessor),\n];\n","import {\n    CliProcessCommand,\n    CliProcessorMetadata,\n    DefaultLibraryAuthor,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliClearCommandProcessor implements ICliCommandProcessor {\n    command = 'clear';\n\n    description?: string | undefined = 'Clears the terminal';\n\n    author = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        icon: '🧹',\n        module: 'misc',\n    };\n\n    async processCommand(\n        _: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        context.terminal.clear();\n    }\n}\n","import {\n    CliForegroundColor,\n    CliIcon,\n    CliProcessCommand,\n    CliProcessorMetadata,\n    DefaultLibraryAuthor,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION as Core_Version } from '@qodalis/cli-core';\nimport { LIBRARY_VERSION as CLI_Version } from '../../../version';\n\nexport class CliUnameCommandProcessor implements ICliCommandProcessor {\n    command = 'uname';\n\n    description?: string | undefined =\n        'Prints detailed system and browser information';\n\n    author = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        icon: CliIcon.Flame,\n        module: 'misc',\n    };\n\n    async processCommand(\n        _: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        const { writer } = context;\n\n        function writeItem(key: string, value: string): void {\n            writer.writeln(\n                `- ${writer.wrapInColor(key, CliForegroundColor.Cyan)}: ${value}`,\n            );\n        }\n\n        writer.writeInfo('CLI:');\n        writeItem('Core version', Core_Version);\n        writeItem('Cli version', CLI_Version);\n\n        writer.writeln();\n\n        if (typeof navigator !== 'undefined') {\n            writer.writeInfo('Browser Information:');\n\n            writeItem('User Agent', navigator.userAgent);\n            writeItem('Language', navigator.language);\n            writeItem('Platform', navigator.platform);\n\n            // Extracting more detailed information from userAgent\n            const browserDetails = this.parseUserAgent(navigator.userAgent);\n            writeItem('Browser', browserDetails.browserName);\n            writeItem('Version', browserDetails.version);\n            writeItem('OS', browserDetails.os);\n        } else {\n            writer.writeError(\n                'Browser information is not available in this environment.',\n            );\n        }\n    }\n\n    parseUserAgent(userAgent: string): {\n        browserName: string;\n        version: string;\n        os: string;\n    } {\n        let browserName = 'Unknown';\n        let version = 'Unknown';\n        let os = 'Unknown';\n\n        // Simple parsing logic for demonstration purposes\n        if (userAgent.includes('Chrome')) {\n            browserName = 'Chrome';\n            version = userAgent.match(/Chrome\\/([\\d.]+)/)?.[1] || 'Unknown';\n        } else if (userAgent.includes('Firefox')) {\n            browserName = 'Firefox';\n            version = userAgent.match(/Firefox\\/([\\d.]+)/)?.[1] || 'Unknown';\n        } else if (\n            userAgent.includes('Safari') &&\n            !userAgent.includes('Chrome')\n        ) {\n            browserName = 'Safari';\n            version = userAgent.match(/Version\\/([\\d.]+)/)?.[1] || 'Unknown';\n        } else if (\n            userAgent.includes('MSIE') ||\n            userAgent.includes('Trident')\n        ) {\n            browserName = 'Internet Explorer';\n            version =\n                userAgent.match(/(?:MSIE |rv:)([\\d.]+)/)?.[1] || 'Unknown';\n        }\n\n        if (userAgent.includes('Windows')) {\n            os = 'Windows';\n        } else if (userAgent.includes('Mac OS')) {\n            os = 'Mac OS';\n        } else if (userAgent.includes('Linux')) {\n            os = 'Linux';\n        } else if (userAgent.includes('Android')) {\n            os = 'Android';\n        } else if (userAgent.includes('iPhone') || userAgent.includes('iPad')) {\n            os = 'iOS';\n        }\n\n        return { browserName, version, os };\n    }\n}\n","import {\n    CliProcessCommand,\n    CliProcessorMetadata,\n    DefaultLibraryAuthor,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliEchoCommandProcessor implements ICliCommandProcessor {\n    command = 'echo';\n\n    description = 'Prints the specified text';\n\n    allowUnlistedCommands = true;\n\n    author = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        icon: '📢',\n        module: 'misc',\n    };\n\n    async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        const text = command.value || command.data || '';\n\n        if (typeof text === 'object') {\n            context.writer.writeJson(text);\n        } else {\n            context.writer.writeln(text);\n        }\n\n        context.process.output(text);\n    }\n\n    writeDescription(context: ICliExecutionContext): void {\n        context.writer.writeln('echo <text>');\n        context.writer.writeln('Prints the specified text');\n    }\n}\n","import {\n    CliProcessCommand,\n    CliProcessorMetadata,\n    CliStateConfiguration,\n    DefaultLibraryAuthor,\n    ICliCommandProcessor,\n    ICliCommandProcessorRegistry,\n    ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { CliProcessorsRegistry_TOKEN } from '../../tokens';\n\nexport class CliAliasCommandProcessor implements ICliCommandProcessor {\n    command = 'alias';\n\n    author = DefaultLibraryAuthor;\n\n    description = 'Manage aliases for commands';\n\n    processors?: ICliCommandProcessor[] | undefined;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        icon: '🔥',\n        module: 'misc',\n        sealed: true,\n    };\n\n    stateConfiguration?: CliStateConfiguration | undefined = {\n        initialState: {\n            aliases: {},\n        },\n        storeName: 'aliases',\n    };\n\n    public aliases: Record<string, string> = {};\n\n    constructor() {\n        this.processors = [\n            {\n                command: 'ls',\n                description: 'List all aliases',\n                processCommand: async (_, context) => {\n                    const { writer } = context;\n\n                    writer.writeln('Aliases:');\n                    Object.entries(this.aliases).forEach(([alias, command]) => {\n                        writer.writeInfo(`  ${alias} -> ${command}`);\n                    });\n\n                    if (Object.keys(this.aliases).length === 0) {\n                        writer.writeInfo('  No aliases defined');\n                    }\n                },\n            },\n        ];\n    }\n\n    public async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        const registry = context.services.get<ICliCommandProcessorRegistry>(\n            CliProcessorsRegistry_TOKEN,\n        );\n\n        const { writer } = context;\n        const aliases = Object.keys(command.args);\n\n        if (aliases.length === 0) {\n            writer.writeError('No aliases provided');\n            context.process.exit(-1);\n            return;\n        }\n\n        for (const alias of aliases) {\n            if (registry.processors.some((p) => p.command === alias)) {\n                writer.writeError(\n                    `${alias} cannot be aliased to ${command.args[alias]}`,\n                );\n                context.process.exit(-1);\n                return;\n            }\n\n            context.writer.writeInfo(`${alias} -> ${command.args[alias]}`);\n        }\n\n        context.state.updateState({\n            aliases: {\n                ...this.aliases,\n                ...command.args,\n            },\n        });\n\n        await context.state.persist();\n    }\n\n    async initialize(context: ICliExecutionContext): Promise<void> {\n        context.state\n            .select((x) => x['aliases'])\n            .subscribe((aliases) => {\n                this.aliases = aliases ?? {};\n            });\n    }\n}\n","import {\n    CliProcessCommand,\n    CliProcessorMetadata,\n    CliStateConfiguration,\n    DefaultLibraryAuthor,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliUnAliasCommandProcessor implements ICliCommandProcessor {\n    command = 'unalias';\n\n    author = DefaultLibraryAuthor;\n\n    description = 'Remove aliases for commands';\n\n    valueRequired?: boolean | undefined = true;\n\n    stateConfiguration?: CliStateConfiguration | undefined = {\n        initialState: {},\n        storeName: 'aliases',\n    };\n\n    metadata?: CliProcessorMetadata | undefined = {\n        icon: '🔥',\n        module: 'misc',\n        sealed: true,\n    };\n\n    public async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        const { writer } = context;\n\n        const aliasToRemove = command.value!;\n\n        const { aliases } = context.state.getState();\n\n        if (!aliases[aliasToRemove]) {\n            writer.writeError(`Alias ${aliasToRemove} not found`);\n            context.process.exit(-1);\n            return;\n        }\n\n        const updated: Record<string, any> = {};\n\n        Object.keys(aliases)\n            .filter((alias) => alias !== aliasToRemove)\n            .forEach((alias) => {\n                updated[alias] = aliases[alias];\n            });\n\n        context.state.updateState({\n            aliases: updated,\n        });\n\n        await context.state.persist();\n    }\n}\n","import {\n    CliIcon,\n    CliProcessCommand,\n    CliProcessorMetadata,\n    DefaultLibraryAuthor,\n    delay,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliSleepCommandProcessor implements ICliCommandProcessor {\n    command = 'sleep';\n\n    description?: string | undefined = 'Sleep for a specified amount of time';\n\n    author = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        module: 'misc',\n        icon: CliIcon.Timer,\n    };\n\n    valueRequired?: boolean | undefined = true;\n\n    constructor() {}\n\n    async processCommand(\n        command: CliProcessCommand,\n        { writer }: ICliExecutionContext,\n    ) {\n        const time = parseInt(command.value!);\n\n        await delay(time);\n\n        writer.writeInfo(`Slept for ${time}ms`);\n    }\n\n    writeDescription(context: ICliExecutionContext): void {\n        context.writer.writeln('Sleep for a specified amount of time');\n        context.writer.writeln('Usage: sleep <time>');\n        context.writer.writeln('Usage: sleep 5000 # Sleep for 5 seconds');\n    }\n}\n","import {\n    CliAliasCommandProcessor,\n    CliEchoCommandProcessor,\n    CliEvalCommandProcessor,\n    CliSleepCommandProcessor,\n    CliUnAliasCommandProcessor,\n} from '..';\nimport { CliClearCommandProcessor } from './cli-clear-command-processor';\nimport { CliUnameCommandProcessor } from './cli-uname-command-processor';\n\nexport * from './cli-echo-command-processor';\nexport * from './cli-clear-command-processor';\nexport * from './cli-alias-command-processor';\nexport * from './cli-unalias-command-processor';\nexport * from './cli-sleep-command-processor';\n\nexport const miscProcessors = [\n    new CliClearCommandProcessor(),\n    new CliEchoCommandProcessor(),\n    new CliEvalCommandProcessor(),\n    new CliAliasCommandProcessor(),\n    new CliUnAliasCommandProcessor(),\n    new CliSleepCommandProcessor(),\n    new CliUnameCommandProcessor(),\n];\n","import { Inject, Injectable } from '@angular/core';\nimport {\n    CliIcon,\n    CliProcessCommand,\n    CliProcessorMetadata,\n    CliStateConfiguration,\n    ICliCommandParameterDescriptor,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n    ICliUsersStoreService,\n} from '@qodalis/cli-core';\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { ICliUsersStoreService_TOKEN } from '../../tokens';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliAddUserCommandProcessor implements ICliCommandProcessor {\n    command = 'adduser';\n\n    description?: string | undefined = 'Add a new user';\n\n    author = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        module: 'users',\n        icon: CliIcon.User,\n    };\n\n    stateConfiguration?: CliStateConfiguration | undefined = {\n        initialState: {},\n        storeName: 'users',\n    };\n\n    allowUnlistedCommands?: boolean | undefined = true;\n\n    valueRequired?: boolean | undefined = true;\n\n    parameters?: ICliCommandParameterDescriptor[] | undefined = [\n        {\n            name: 'email',\n            description: 'The email of the user',\n            required: true,\n            type: 'email',\n            validator: (value: string) => {\n                //validate email format\n                const emailRegex =\n                    /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\n                if (!emailRegex.test(value)) {\n                    return {\n                        valid: false,\n                        message: 'Invalid email format',\n                    };\n                }\n\n                return {\n                    valid: true,\n                };\n            },\n        },\n        {\n            name: 'groups',\n            description: 'The groups the user belongs to, separated by commas',\n            type: 'string',\n            required: false,\n        },\n    ];\n\n    constructor(\n        @Inject(ICliUsersStoreService_TOKEN)\n        private readonly usersStore: ICliUsersStoreService,\n    ) {}\n\n    async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        const name: string = command.value as string;\n        const email: string = command.args['email'];\n        const groups: string[] = command.args['groups']?.split(',') || [];\n\n        try {\n            await this.usersStore.createUser({\n                name,\n                email,\n                groups,\n            });\n\n            context.writer.writeInfo('User created successfully');\n        } catch (e) {\n            console.error(e);\n            context.writer.writeError(\n                e?.toString() || 'An error occurred while creating the user',\n            );\n        }\n    }\n\n    writeDescription(context: ICliExecutionContext): void {\n        context.writer.writeln('Add a new user');\n        context.writer.writeln(\n            'Usage: adduser <name> --email=<email> --groups=<groups>',\n        );\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n    CliIcon,\n    CliProcessCommand,\n    CliProcessorMetadata,\n    CliStateConfiguration,\n    ICliCommandParameterDescriptor,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n    ICliUsersStoreService,\n} from '@qodalis/cli-core';\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { ICliUsersStoreService_TOKEN } from '../../tokens';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliListUsersCommandProcessor implements ICliCommandProcessor {\n    command = 'listusers';\n\n    description?: string | undefined = 'List all users';\n\n    author = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        module: 'users',\n        icon: CliIcon.User,\n    };\n\n    stateConfiguration?: CliStateConfiguration | undefined = {\n        initialState: {},\n        storeName: 'users',\n    };\n\n    parameters?: ICliCommandParameterDescriptor[] | undefined = [\n        {\n            name: 'query',\n            description: 'The query to filter the users',\n            type: 'string',\n            required: false,\n        },\n        {\n            name: 'skip',\n            description: 'The number of users to skip',\n            type: 'number',\n            required: false,\n        },\n        {\n            name: 'take',\n            description: 'The maximum number of users to return',\n            type: 'number',\n            required: false,\n        },\n    ];\n\n    constructor(\n        @Inject(ICliUsersStoreService_TOKEN)\n        private readonly usersStore: ICliUsersStoreService,\n    ) {}\n\n    async processCommand(\n        command: CliProcessCommand,\n        { writer }: ICliExecutionContext,\n    ): Promise<void> {\n        const users = await firstValueFrom(\n            this.usersStore.getUsers({\n                query: command.args['query'],\n                skip: command.args['skip'],\n                take: command.args['take'],\n            }),\n        );\n\n        writer.writeln('Users:');\n        writer.writeObjectsAsTable(users);\n    }\n\n    writeDescription({ writer }: ICliExecutionContext): void {\n        writer.writeln(this.description!);\n        writer.writeln('Usage: listusers');\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n    ICliExecutionContext,\n    CliProcessCommand,\n    ICliCommandProcessor,\n    ICliCommandParameterDescriptor,\n    ICliUsersStoreService,\n    ICliUserSessionService,\n    CliProcessorMetadata,\n    CliIcon,\n    CliForegroundColor,\n    CliStateConfiguration,\n} from '@qodalis/cli-core';\n\nimport { firstValueFrom } from 'rxjs';\nimport {\n    ICliUserSessionService_TOKEN,\n    ICliUsersStoreService_TOKEN,\n} from '../../tokens';\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliSwitchUserCommandProcessor implements ICliCommandProcessor {\n    command = 'su';\n\n    description?: string | undefined = 'Switch user';\n\n    allowUnlistedCommands?: boolean | undefined = true;\n\n    parameters?: ICliCommandParameterDescriptor[] | undefined = [\n        {\n            name: 'reload',\n            description: 'Reload the page after switching user',\n            type: 'boolean',\n            required: false,\n            aliases: ['r'],\n        },\n    ];\n\n    author = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        module: 'users',\n        icon: CliIcon.User,\n    };\n\n    stateConfiguration?: CliStateConfiguration | undefined = {\n        initialState: {},\n        storeName: 'users',\n    };\n\n    valueRequired = true;\n\n    constructor(\n        @Inject(ICliUserSessionService_TOKEN)\n        private readonly userSessionService: ICliUserSessionService,\n        @Inject(ICliUsersStoreService_TOKEN)\n        private readonly usersStore: ICliUsersStoreService,\n    ) {}\n\n    async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        try {\n            const fromUser = context.userSession?.user;\n\n            const toUser = command.value;\n\n            if (!fromUser) {\n                context.writer.writeError('Missing user to switch from');\n                context.process.exit(-1);\n                return;\n            }\n\n            if (!toUser) {\n                context.writer.writeError('Missing user to switch to');\n                context.process.exit(-1);\n                return;\n            }\n\n            context.spinner?.show(CliIcon.User + '  Switching...');\n\n            const user = await firstValueFrom(this.usersStore.getUser(toUser));\n\n            if (!user) {\n                context.writer.writeError(`User ${toUser} not found`);\n\n                context.spinner?.hide();\n                context.process.exit(-1);\n                return;\n            }\n\n            if (user.id === fromUser.id) {\n                context.writer.writeError('Already on the user');\n                context.spinner?.hide();\n                context.process.exit(-1);\n                return;\n            }\n\n            await this.userSessionService.setUserSession({\n                user,\n            });\n\n            context.spinner?.hide();\n\n            context.writer.writeSuccess(\n                `Switch to ${context.writer.wrapInColor(toUser, CliForegroundColor.Cyan)} was successfully`,\n            );\n\n            const reload =\n                command.args['reload'] ||\n                command.args['r'] ||\n                context.options?.usersModule?.reloadPageOnUserChange === true;\n\n            if (reload) {\n                context.writer.writeln('Reloading the page in 3 seconds...');\n                setTimeout(() => {\n                    window.location.reload();\n                }, 3000);\n            }\n        } catch (e) {\n            console.error(e);\n            context.spinner?.hide();\n            context.writer.writeError('Failed to switch user');\n\n            context.process.exit(-1);\n            return;\n        }\n    }\n\n    writeDescription(context: ICliExecutionContext): void {\n        context.writer.writeln('Switch user command');\n        context.writer.writeln('Usage: su <user email>');\n        context.writer.writeln('Example: su user@domain.com');\n    }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport {\n    CliIcon,\n    CliProcessCommand,\n    CliProcessorMetadata,\n    CliStateConfiguration,\n    ICliCommandAuthor,\n    ICliCommandParameterDescriptor,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n    ICliUserSessionService,\n} from '@qodalis/cli-core';\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { ICliUserSessionService_TOKEN } from '../../tokens';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliWhoamiCommandProcessor implements ICliCommandProcessor {\n    command = 'whoami';\n\n    description?: string | undefined = 'Display current user information';\n\n    author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        module: 'users',\n        icon: CliIcon.User,\n    };\n\n    stateConfiguration?: CliStateConfiguration | undefined = {\n        initialState: {},\n        storeName: 'users',\n    };\n\n    parameters?: ICliCommandParameterDescriptor[] | undefined = [\n        {\n            name: 'info',\n            description: 'Display user information',\n            type: 'boolean',\n            required: false,\n            aliases: ['i'],\n        },\n    ];\n\n    constructor(\n        @Inject(ICliUserSessionService_TOKEN)\n        private readonly userSessionService: ICliUserSessionService,\n    ) {}\n\n    async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        const user = await firstValueFrom(\n            this.userSessionService.getUserSession(),\n        );\n\n        if (!user) {\n            context.writer.writeln('No user session found');\n            return;\n        }\n\n        if (command.args['info'] || command.args['i']) {\n            context.writer.writeln('User information:');\n            context.writer.writeObjectsAsTable([user.user]);\n        } else {\n            context.writer.writeln(user?.user.email);\n        }\n    }\n\n    writeDescription(context: ICliExecutionContext): void {\n        context.writer.writeln(this.description!);\n    }\n}\n","import { resolveCommandProcessorProvider } from '../../../utils';\nimport { CliAddUserCommandProcessor } from './cli-add-user-command-processor';\nimport { CliListUsersCommandProcessor } from './cli-list-users-command-processor';\nimport { CliSwitchUserCommandProcessor } from './cli-switch-user-command-processor';\nimport { CliWhoamiCommandProcessor } from './cli-whoami-command-processor';\n\nexport * from './cli-switch-user-command-processor';\nexport * from './cli-whoami-command-processor';\nexport * from './cli-add-user-command-processor';\nexport * from './cli-list-users-command-processor';\n\nexport const usersProviders = [\n    resolveCommandProcessorProvider(CliSwitchUserCommandProcessor),\n    resolveCommandProcessorProvider(CliWhoamiCommandProcessor),\n    resolveCommandProcessorProvider(CliAddUserCommandProcessor),\n    resolveCommandProcessorProvider(CliListUsersCommandProcessor),\n];\n","import { CliLogLevel, ICliLogger } from '@qodalis/cli-core';\n\nexport class CliLogger implements ICliLogger {\n    private CliLogLevel: CliLogLevel = CliLogLevel.ERROR;\n\n    constructor() {}\n\n    setCliLogLevel(level: CliLogLevel): void {\n        this.CliLogLevel = level;\n    }\n\n    log(...args: any[]): void {\n        if (this.CliLogLevel <= CliLogLevel.LOG) {\n            console.log(...args);\n        }\n    }\n\n    info(...args: any[]): void {\n        if (this.CliLogLevel <= CliLogLevel.INFO) {\n            console.info(...args);\n        }\n    }\n\n    warn(...args: any[]): void {\n        if (this.CliLogLevel <= CliLogLevel.WARN) {\n            console.warn(...args);\n        }\n    }\n\n    error(...args: any[]): void {\n        if (this.CliLogLevel <= CliLogLevel.ERROR) {\n            console.error(...args);\n        }\n    }\n\n    debug(...args: any[]): void {\n        if (this.CliLogLevel <= CliLogLevel.DEBUG) {\n            console.debug(...args);\n        }\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n    ICliCommandChildProcessor,\n    ICliCommandProcessor,\n    ICliCommandProcessorRegistry,\n} from '@qodalis/cli-core';\nimport { miscProcessors } from '../processors';\n\n@Injectable()\nexport class CliCommandProcessorRegistry\n    implements ICliCommandProcessorRegistry\n{\n    public readonly processors: ICliCommandProcessor[] = [...miscProcessors];\n\n    constructor() {}\n\n    public registerProcessor(processor: ICliCommandProcessor): void {\n        const existingProcessor = this.getProcessorByName(processor.command);\n\n        if (existingProcessor) {\n            if (existingProcessor.metadata?.sealed) {\n                console.warn(\n                    `Processor with command: ${processor.command} is sealed and cannot be replaced.`,\n                );\n\n                return;\n            }\n\n            const existingIndex = this.processors.findIndex(\n                (p) => p.command === processor.command,\n            );\n\n            // Replace the existing processor\n            this.processors[existingIndex] = processor;\n        } else {\n            this.processors.push(processor);\n        }\n    }\n\n    public unregisterProcessor(processor: ICliCommandProcessor): void {\n        const existingProcessor = this.getProcessorByName(processor.command);\n\n        if (existingProcessor) {\n            if (existingProcessor.metadata?.sealed) {\n                console.warn(\n                    `Processor with command: ${processor.command} is sealed and cannot be removed.`,\n                );\n                return;\n            }\n        }\n\n        const index = this.processors.findIndex(\n            (p) => p.command === processor.command,\n        );\n\n        if (index !== -1) {\n            this.processors.splice(index, 1);\n        }\n    }\n\n    public findProcessor(\n        mainCommand: string,\n        chainCommands: string[],\n    ): ICliCommandProcessor | undefined {\n        return this.findProcessorInCollection(\n            mainCommand,\n            chainCommands,\n            this.processors,\n        );\n    }\n\n    /**\n     * Recursively searches for a processor matching the given command.\n     * @param mainCommand The main command name.\n     * @param chainCommands The remaining chain commands (if any).\n     * @param processors The list of available processors.\n     * @returns The matching processor or undefined if not found.\n     */\n    public findProcessorInCollection(\n        mainCommand: string,\n        chainCommands: string[],\n        processors: ICliCommandProcessor[],\n    ): ICliCommandProcessor | undefined {\n        const processor = processors.find(\n            (p) => p.command.toLowerCase() === mainCommand.toLowerCase(),\n        );\n\n        if (!processor) {\n            return undefined;\n        }\n\n        if (chainCommands.length === 0) {\n            return processor;\n        }\n\n        if (processor.processors && processor.processors.length > 0) {\n            return this.findProcessorInCollection(\n                chainCommands[0],\n                chainCommands.slice(1),\n                processor.processors,\n            );\n        } else if (processor.allowUnlistedCommands || processor.valueRequired) {\n            return processor;\n        }\n\n        return undefined;\n    }\n\n    public getRootProcessor(\n        child: ICliCommandChildProcessor,\n    ): ICliCommandProcessor {\n        return child.parent ? this.getRootProcessor(child.parent) : child;\n    }\n\n    private getProcessorByName(name: string): ICliCommandProcessor | undefined {\n        return this.processors.find(\n            (p) => p.command.toLowerCase() === name.toLowerCase(),\n        );\n    }\n}\n","import {\n    ClassProvider,\n    FactoryProvider,\n    Injectable,\n    Injector,\n    Provider,\n    StaticProvider,\n    ValueProvider,\n} from '@angular/core';\nimport { CliProvider, ICliServiceProvider } from '@qodalis/cli-core';\n\n@Injectable()\nexport class CliServiceProvider implements ICliServiceProvider {\n    private providers: StaticProvider[] = [];\n    private currentInjector: Injector;\n\n    constructor(injector: Injector) {\n        this.currentInjector = injector;\n    }\n\n    get<T>(service: any): T {\n        try {\n            return this.currentInjector.get<T>(service);\n        } catch (e) {\n            throw new Error(`Service ${service} not found`);\n        }\n    }\n\n    set(definition: CliProvider | CliProvider[]): void {\n        const definitions = Array.isArray(definition)\n            ? definition\n            : [definition];\n\n        const newProviders: Provider = [];\n\n        for (const def of definitions) {\n            let newProvider: Provider = {\n                provide: def.provide,\n            };\n\n            if (def.hasOwnProperty('useClass')) {\n                const classProvider: ClassProvider = {\n                    provide: def.provide,\n                    useClass: def.useClass,\n                    multi: def.multi,\n                };\n                newProvider = classProvider;\n            } else if (def.hasOwnProperty('useValue')) {\n                const valueProvider: ValueProvider = {\n                    provide: def.provide,\n                    useValue: def.useValue,\n                    multi: def.multi,\n                };\n\n                newProvider = valueProvider;\n            } else if (def.hasOwnProperty('useFactory')) {\n                const valueProvider: FactoryProvider = {\n                    provide: def.provide,\n                    useFactory: def.useFactory,\n                    multi: def.multi,\n                };\n\n                newProvider = valueProvider;\n            }\n\n            newProviders.push(newProvider);\n        }\n\n        this.providers.push(...newProviders);\n\n        this.currentInjector = Injector.create({\n            providers: newProviders,\n            parent: this.currentInjector,\n        });\n    }\n}\n","import { Injectable } from '@angular/core';\nimport {\n    CliForegroundColor,\n    CliProcessCommand,\n    CliProcessorMetadata,\n    CliStateConfiguration,\n    ICliCommandAuthor,\n    ICliCommandProcessor,\n    ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { ITheme } from '@xterm/xterm';\nimport { themes, ThemeState } from './types';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class CliThemeCommandProcessor implements ICliCommandProcessor {\n    command = 'theme';\n\n    description = 'Interact with the theme';\n\n    author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n    version?: string | undefined = '1.0.1';\n\n    processors?: ICliCommandProcessor[] | undefined = [];\n\n    metadata?: CliProcessorMetadata | undefined = {\n        sealed: true,\n        icon: '🎨',\n        module: 'system',\n    };\n\n    stateConfiguration?: CliStateConfiguration | undefined = {\n        initialState: {\n            selectedTheme: 'default',\n            customOptions: null,\n        },\n    };\n\n    private themeOptions: string[] = Object.keys(themeOptions);\n\n    private defaultTheme!: ITheme;\n\n    constructor() {\n        this.processors = [\n            {\n                command: 'list',\n                description: 'List available themes',\n                processCommand: async (\n                    command: CliProcessCommand,\n                    context: ICliExecutionContext,\n                ) => {\n                    context.writer.writeln('Available themes:');\n                    Object.keys(themes).forEach((theme) => {\n                        context.writer.writeln(\n                            context.writer.wrapInColor(\n                                theme,\n                                CliForegroundColor.Cyan,\n                            ),\n                        );\n                    });\n                },\n            },\n            {\n                command: 'current',\n                description: 'Show the current theme',\n                processCommand: async (\n                    _: CliProcessCommand,\n                    context: ICliExecutionContext,\n                ) => {\n                    const state = context.state.getState<ThemeState>();\n                    const theme = state.selectedTheme || 'custom';\n\n                    context.writer.writeln(`Current theme: ${theme}`);\n                    context.writer.writeln('Theme options:');\n                    Object.keys(context.terminal.options.theme!).forEach(\n                        (key) => {\n                            context.writer.writeln(\n                                `${key}: ${(context.terminal.options.theme as any)[key]}`,\n                            );\n                        },\n                    );\n                },\n            },\n            {\n                command: 'apply',\n                description: 'Apply a theme',\n                valueRequired: true,\n                processCommand: async (\n                    command: CliProcessCommand,\n                    context: ICliExecutionContext,\n                ) => {\n                    const theme = command.value!;\n\n                    if (!themes[theme]) {\n                        context.writer.writeError(`Theme ${theme} not found`);\n                        return;\n                    }\n\n                    context.terminal.options.theme = themes[theme];\n\n                    context.state.updateState({\n                        selectedTheme: theme,\n                        customOptions: null,\n                    });\n\n                    await context.state.persist();\n\n                    this.applyStyles(context);\n\n                    context.writer.writeSuccess(`Theme ${theme} applied`);\n                },\n            },\n            {\n                command: 'set',\n                allowUnlistedCommands: true,\n                description: 'Set a theme variable',\n                parameters: [\n                    {\n                        name: 'save',\n                        description: 'Save the theme settings',\n                        type: 'boolean',\n                        required: false,\n                    },\n                ],\n                processCommand: async (\n                    command: CliProcessCommand,\n                    context: ICliExecutionContext,\n                ) => {\n                    const [key, value] = command.command.split(' ').slice(2);\n\n                    if (!this.themeOptions.includes(key)) {\n                        context.writer.writeError(\n                            `Unsupported key: ${key}, supported keys: ${this.themeOptions.join(', ')}`,\n                        );\n                        return;\n                    }\n\n                    context.terminal.options.theme = {\n                        ...context.terminal.options.theme,\n                        [key]: value,\n                    };\n\n                    context.state.updateState({\n                        selectedTheme: null,\n                        customOptions: context.terminal.options.theme,\n                    });\n\n                    context.writer.writeSuccess(`Set ${key} to ${value}`);\n\n                    this.applyStyles(context);\n\n                    if (command.args['save']) {\n                        await this.saveTheme(context);\n                    }\n                },\n            },\n            {\n                command: 'save',\n                description: 'Save the current theme settings',\n                processCommand: async (\n                    command: CliProcessCommand,\n                    context: ICliExecutionContext,\n                ) => {\n                    context.terminal.options.theme = {};\n                    context.state.updateState({\n                        selectedTheme: null,\n                        customOptions: context.terminal.options.theme,\n                    });\n\n                    await this.saveTheme(context);\n                },\n            },\n            {\n                command: 'reset',\n                description: 'Reset the theme to the default',\n                processCommand: async (\n                    command: CliProcessCommand,\n                    context: ICliExecutionContext,\n                ) => {\n                    context.terminal.options.theme = { ...this.defaultTheme };\n                    context.state.reset();\n                    await context.state.persist();\n                    context.writer.writeSuccess('Theme reset to default');\n                },\n            },\n        ];\n    }\n\n    async initialize(context: ICliExecutionContext): Promise<void> {\n        this.defaultTheme = context.terminal.options.theme!;\n        const state = context.state.getState<ThemeState>();\n\n        if (state.selectedTheme && state.selectedTheme !== 'default') {\n            context.terminal.options.theme = themes[state.selectedTheme];\n        } else if (state.customOptions) {\n            context.terminal.options.theme = state.customOptions;\n        }\n\n        this.applyStyles(context);\n    }\n\n    async processCommand(\n        command: CliProcessCommand,\n        context: ICliExecutionContext,\n    ): Promise<void> {\n        context.executor.showHelp(command, context);\n    }\n\n    private applyStyles(context: ICliExecutionContext) {\n        const parents = document.getElementsByClassName('terminal-container');\n\n        for (const parent of Array.from(parents)) {\n            (parent as HTMLElement).style.background =\n                context.terminal.options.theme?.background ||\n                this.defaultTheme.background!;\n        }\n    }\n\n    private async saveTheme(context: ICliExecutionContext): Promise<void> {\n        await context.state.persist();\n\n        context.writer.writeSuccess('Theme saved');\n    }\n\n    writeDescription?(context: ICliExecutionContext): void {\n        context.writer.writeln('Interact with the theme');\n\n        context.writer.writeln('Examples:');\n        context.writer.writeln(\n            context.writer.wrapInColor(\n                'theme apply dracula',\n                CliForegroundColor.Magenta,\n            ),\n        );\n        context.writer.writeln(\n            context.writer.wrapInColor(\n                'theme reset',\n                CliForegroundColor.Magenta,\n            ),\n        );\n        context.writer.writeln(\n            context.writer.wrapInColor(\n                'theme set background red',\n                CliForegroundColor.Magenta,\n            ),\n        );\n        context.writer.writeln(\n            context.writer.wrapInColor(\n                'theme set foreground red',\n                CliForegroundColor.Magenta,\n            ),\n        );\n\n        context.writer.write('Available theme options: ');\n        context.writer.writeln(\n            context.writer.wrapInColor(\n                this.themeOptions.join(', ') ?? '',\n                CliForegroundColor.Blue,\n            ),\n        );\n    }\n}\n\nconst themeOptions: ITheme = {\n    background: '',\n    foreground: '',\n    black: '',\n    blue: '',\n    brightBlack: '',\n    brightBlue: '',\n    brightCyan: '',\n    brightGreen: '',\n    brightMagenta: '',\n    brightRed: '',\n    brightWhite: '',\n    brightYellow: '',\n    cyan: '',\n    green: '',\n    magenta: '',\n    red: '',\n    white: '',\n    yellow: '',\n    cursor: '',\n    cursorAccent: '',\n    selectionBackground: '',\n    selectionForeground: '',\n    selectionInactiveBackground: '',\n};\n","import { Provider } from '@angular/core';\nimport {\n    CliLogger_TOKEN,\n    CliProcessorsRegistry_TOKEN,\n    CliServiceProvider_TOKEN,\n    ICliPingServerService_TOKEN,\n    ICliUserSessionService_TOKEN,\n    ICliUsersStoreService_TOKEN,\n} from './cli/tokens';\nimport { CliUserSessionService } from './cli/services/cli-user-session.service';\nimport { CliUsersStoreService } from './cli/services/cli-users-store.service';\nimport { resolveCommandProcessorProvider } from './utils';\nimport { CliPingCommandProcessor } from './cli/processors';\nimport {\n    CliDefaultPingServerService,\n    ScriptLoaderService,\n} from './cli/services';\nimport { CliCanViewService } from './services';\nimport { systemProviders } from './cli/processors/system';\nimport { usersProviders } from './cli/processors/users';\nimport { CliLogger } from './services/cli-logger.service';\nimport { CliCommandProcessorRegistry } from './cli/services/cli-command-processor-registry';\nimport { CliStateStoreManager } from './cli/state/cli-state-store-manager';\nimport { CliServiceProvider } from './cli/services/system/cli-service-provider';\nimport { CliThemeCommandProcessor } from './cli/processors/theme/cli-theme-command-processor';\n\nexport const resolveCliProviders = (): Provider[] => {\n    return [\n        ScriptLoaderService,\n        CliCanViewService,\n        CliStateStoreManager,\n        {\n            useClass: CliUserSessionService,\n            provide: ICliUserSessionService_TOKEN,\n        },\n        {\n            useClass: CliUsersStoreService,\n            provide: ICliUsersStoreService_TOKEN,\n        },\n        {\n            useClass: CliDefaultPingServerService,\n            provide: ICliPingServerService_TOKEN,\n        },\n        {\n            useClass: CliLogger,\n            provide: CliLogger_TOKEN,\n        },\n        {\n            useClass: CliCommandProcessorRegistry,\n            provide: CliProcessorsRegistry_TOKEN,\n        },\n        {\n            useClass: CliServiceProvider,\n            provide: CliServiceProvider_TOKEN,\n        },\n        ...systemProviders,\n        ...usersProviders,\n        resolveCommandProcessorProvider(CliThemeCommandProcessor),\n        resolveCommandProcessorProvider(CliPingCommandProcessor),\n    ];\n};\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { ButtonModule } from 'primeng/button';\nimport { TabMenuModule } from 'primeng/tabmenu';\nimport { MenuModule } from 'primeng/menu';\nimport { SplitButtonModule } from 'primeng/splitbutton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { CliComponent } from './cli/cli.component';\nimport { CollapsableContentComponent } from './collapsable-content/collapsable-content.component';\nimport { CliPanelComponent } from './cli-panel/cli-panel.component';\nimport { CliTerminalComponent } from './cli-terminal/cli-terminal.component';\nimport { resolveCliProviders } from '.';\n\n@NgModule({\n    declarations: [\n        CliComponent,\n        CollapsableContentComponent,\n        CliPanelComponent,\n        CliTerminalComponent,\n    ],\n    imports: [\n        CommonModule,\n        //PrimeNG\n        ButtonModule,\n        TabMenuModule,\n        MenuModule,\n        SplitButtonModule,\n        TooltipModule,\n    ],\n    providers: [\n        resolveCliProviders(),\n        { provide: ActivatedRoute, useValue: {} },\n    ],\n    exports: [CliPanelComponent, CliComponent],\n})\nexport class CliModule {}\n","/*\n * Public API Surface of cli\n */\n\nexport * from './lib/cli.module';\n\nexport * from './lib/cli/services';\n\nexport * from './lib/cli/context';\n\nexport * from './lib/utils';\n\nexport * from './lib/cli/tokens';\n\nexport * from './lib/services';\n\nexport {\n    CliPanelComponent,\n    CliPanelOptions,\n} from './lib/cli-panel/cli-panel.component';\n\nexport { CliComponent } from './lib/cli/cli.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.CliKeyValueStore","map","i1.CliCommandExecutorService","i1.CliCommandHistoryService","i2.CliKeyValueStore","i3.CliTerminalComponent","i1.CliCanViewService","i2","i3.CliComponent","i4.CollapsableContentComponent","Core_Version","CLI_Version"],"mappings":"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"}