@qodalis/cli 2.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../packages/cli/src/lib/parsers/command-parser.ts","../../packages/cli/src/lib/parsers/args-parser.ts","../../packages/cli/src/lib/parsers/reconcile-args.ts","../../packages/cli/src/lib/utils/arrays.ts","../../packages/cli/src/lib/utils/greetings.ts","../../packages/cli/src/lib/utils/index.ts","../../packages/cli/src/lib/errors/index.ts","../../packages/cli/src/lib/registry/cli-command-processor-registry.ts","../../packages/cli/src/lib/tokens.ts","../../packages/cli/src/lib/version.ts","../../packages/cli/src/lib/processors/cli-alias-command-processor.ts","../../packages/cli/src/lib/processors/cli-capture-command-processor.ts","../../packages/cli/src/lib/processors/cli-base64-command-processor.ts","../../packages/cli/src/lib/processors/cli-cal-command-processor.ts","../../packages/cli/src/lib/processors/cli-clear-command-processor.ts","../../packages/cli/src/lib/processors/cli-clipboard-command-processor.ts","../../packages/cli/src/lib/processors/cli-color-command-processor.ts","../../packages/cli/src/lib/processors/cli-convert-command-processor.ts","../../packages/cli/src/lib/processors/cli-echo-command-processor.ts","../../packages/cli/src/lib/processors/cli-eval-command-processor.ts","../../packages/cli/src/lib/processors/cli-hash-command-processor.ts","../../packages/cli/src/lib/processors/cli-hex-command-processor.ts","../../packages/cli/src/lib/processors/cli-json-command-processor.ts","../../packages/cli/src/lib/processors/cli-jwt-command-processor.ts","../../packages/cli/src/lib/processors/cli-lorem-command-processor.ts","../../packages/cli/src/lib/processors/cli-open-command-processor.ts","../../packages/cli/src/lib/processors/cli-random-command-processor.ts","../../packages/cli/src/lib/processors/cli-screen-command-processor.ts","../../packages/cli/src/lib/processors/cli-seq-command-processor.ts","../../packages/cli/src/lib/processors/cli-sleep-command-processor.ts","../../packages/cli/src/lib/processors/cli-time-command-processor.ts","../../packages/cli/src/lib/processors/cli-timestamp-command-processor.ts","../../packages/cli/src/lib/processors/cli-unalias-command-processor.ts","../../packages/cli/src/lib/processors/cli-uname-command-processor.ts","../../packages/cli/src/lib/processors/cli-uptime-command-processor.ts","../../packages/cli/src/lib/processors/cli-url-command-processor.ts","../../packages/cli/src/lib/processors/cli-yes-command-processor.ts","../../packages/cli/src/lib/processors/configure/cli-configure-command-processor.ts","../../packages/cli/src/lib/processors/cli-snippet-command-processor.ts","../../packages/cli/src/lib/processors/diff-utils.ts","../../packages/cli/src/lib/processors/cli-diff-command-processor.ts","../../packages/cli/src/lib/processors/system/cli-help-command-processor.ts","../../packages/cli/src/lib/constants/index.ts","../../packages/cli/src/lib/processors/system/cli-version-command-processor.ts","../../packages/cli/src/lib/processors/system/cli-feedback-command-processor.ts","../../packages/cli/src/lib/processors/system/cli-history-command-processor.ts","../../packages/cli/src/lib/processors/system/cli-hot-keys-command-processor.ts","../../packages/cli/src/lib/services/script-loader.ts","../../packages/cli/src/lib/services/cli-package-manager.ts","../../packages/cli/src/lib/processors/system/cli-packages-command-processor.ts","../../packages/cli/src/lib/server/cli-server-connection.ts","../../packages/cli/src/lib/server/cli-server-proxy-processor.ts","../../packages/cli/src/lib/server/cli-server-multi-proxy-processor.ts","../../packages/cli/src/lib/server/cli-server-manager.ts","../../packages/cli/src/lib/wasm/fallback.ts","../../packages/cli/src/lib/wasm/wasm-loader.ts","../../packages/cli/src/lib/processors/system/cli-debug-command-processor.ts","../../packages/cli/src/lib/editor/nano-editor-buffer.ts","../../packages/cli/src/lib/editor/nano-editor-renderer.ts","../../packages/cli/src/lib/processors/system/cli-nano-command-processor.ts","../../packages/cli/src/lib/processors/system/cli-services-command-processor.ts","../../packages/cli/src/lib/services/cli-process-registry.ts","../../packages/cli/src/lib/processors/system/cli-ps-command-processor.ts","../../packages/cli/src/lib/processors/system/cli-kill-command-processor.ts","../../packages/cli/src/lib/processors/system/index.ts","../../packages/cli/src/lib/processors/theme/types/index.ts","../../packages/cli/src/lib/processors/theme/cli-theme-command-processor.ts","../../packages/cli/src/lib/processors/cli-ping-command-processor.ts","../../packages/cli/src/lib/services/cli-environment.ts","../../packages/cli/src/lib/processors/cli-env-command-processor.ts","../../packages/cli/src/lib/processors/cli-font-size-command-processor.ts","../../packages/cli/src/lib/processors/index.ts","../../packages/cli/src/lib/context/cli-execution-process.ts","../../packages/cli/src/lib/context/cli-command-execution-context.ts","../../packages/cli/src/lib/services/background/service-log-buffer.ts","../../packages/cli/src/lib/services/background/cli-main-thread-service-runner.ts","../../packages/cli/src/lib/services/background/cli-worker-service-runner.ts","../../packages/cli/src/lib/services/background/cli-background-service-registry.ts","../../packages/cli/src/lib/services/cli-terminal-writer.ts","../../packages/cli/src/lib/services/progress-bars/cli-terminal-spinner.ts","../../packages/cli/src/lib/services/progress-bars/cli-terminal-progress-bar.ts","../../packages/cli/src/lib/services/progress-bars/cli-terminal-text-animator.ts","../../packages/cli/src/lib/services/cli-clipboard.ts","../../packages/cli/src/lib/services/cli-input-reader.ts","../../packages/cli/src/lib/completion/cli-completion-engine.ts","../../packages/cli/src/lib/input/cli-line-buffer.ts","../../packages/cli/src/lib/input/command-line-mode.ts","../../packages/cli/src/lib/input/reader-mode.ts","../../packages/cli/src/lib/input/raw-mode.ts","../../packages/cli/src/lib/input/cli-terminal-line-renderer.ts","../../packages/cli/src/lib/context/cli-execution-context.ts","../../packages/cli/src/lib/services/capturing-terminal-writer.ts","../../packages/cli/src/lib/executor/global-parameters.ts","../../packages/cli/src/lib/executor/cli-command-executor.ts","../../packages/cli/src/lib/services/cli-service-container.ts","../../packages/cli/src/lib/services/cli-logger.ts","../../packages/cli/src/lib/services/cli-command-history.ts","../../packages/cli/src/lib/services/cli-welcome-message.ts","../../packages/cli/src/lib/services/cli-boot.ts","../../packages/cli/src/lib/services/defaults/cli-default-ping-server.service.ts","../../packages/cli/src/lib/services/cli-drag-drop.service.ts","../../packages/cli/src/lib/addons/overlay.ts","../../packages/cli/src/lib/storage/cli-key-value-store.ts","../../packages/cli/src/lib/state/cli-state-store.ts","../../packages/cli/src/lib/state/cli-state-store-manager.ts","../../packages/cli/src/lib/services/cli-translation-service.ts","../../packages/cli/src/lib/completion/cli-command-completion-provider.ts","../../packages/cli/src/lib/completion/cli-parameter-completion-provider.ts","../../packages/cli/src/lib/completion/cli-service-name-completion-provider.ts","../../packages/cli/src/lib/completion/cli-package-name-completion-provider.ts","../../packages/cli/src/lib/completion/cli-theme-name-completion-provider.ts","../../packages/cli/src/lib/completion/cli-alias-name-completion-provider.ts","../../packages/cli/src/lib/completion/cli-server-name-completion-provider.ts","../../packages/cli/src/lib/completion/cli-config-key-completion-provider.ts","../../packages/cli/src/lib/server/cli-server-command-processor.ts","../../packages/cli/src/lib/server/cli-ssh-command-processor.ts","../../packages/cli/src/lib/server/cli-server-module.ts","../../packages/cli/src/lib/engine/cli-engine.ts","../../packages/cli/src/lib/testing/cli-test-harness.ts"],"names":["trimmed","command","map","context","DefaultLibraryAuthor","CliForegroundColor","p","q","output","CliIcon","Core_Version","categories","i","j","DIM","RESET","CORE_VERSION","response","entry","ptr","info","CliLogLevel","ANSI_RE","FS_TOKEN","CliModuleRegistry","delay","Subject","DefaultThemes","resolveConfigurationCategories","connection","ICliTranslationService_TOKEN"],"mappings":"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","file":"public-api.mjs","sourcesContent":["export type ParsedArg = {\n name: string;\n value: any;\n};\n\nexport type ParsedToken =\n | { kind: 'flag'; name: string; value: string | number | boolean; hasEquals: boolean }\n | { kind: 'word'; value: string };\n\nexport type CommandParserOutput = {\n commandName: string;\n args: ParsedArg[];\n tokens: ParsedToken[];\n};\n\nexport type CommandPart = {\n /** 'command' for a command to execute, or the operator string */\n type: 'command' | '&&' | '||' | '2>>' | '2>' | '>>' | '>' | '|' | ';';\n value: string;\n};\n\n/**\n * A utility class for parsing command strings into command names and arguments.\n */\nexport class CommandParser {\n /** Operators recognized during command-line splitting. */\n private static readonly OPERATORS = ['&&', '||', '2>>', '2>', '>>', '>', '|', ';'] as const;\n\n /**\n * Split a raw command line into commands and operators.\n * Respects single and double quotes — operators inside quoted strings\n * are treated as literal text, not as operators.\n * @param input - The full raw input string.\n * @returns An array of command parts with their types.\n */\n static splitByOperators(input: string): CommandPart[] {\n const result: CommandPart[] = [];\n let current = '';\n let inSingleQuote = false;\n let inDoubleQuote = false;\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i];\n\n // Toggle quote state\n if (ch === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n current += ch;\n continue;\n }\n if (ch === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n current += ch;\n continue;\n }\n\n // Inside quotes — everything is literal\n if (inSingleQuote || inDoubleQuote) {\n current += ch;\n continue;\n }\n\n // Check for two-character operators at this position\n const twoChar = input.slice(i, i + 2);\n\n // Check for 2>> stderr append redirect (current ends with '2' and next two chars are '>>')\n if (twoChar === '>>' && current.endsWith('2')) {\n const prefix = current.slice(0, -1).trim();\n if (prefix) {\n result.push({ type: 'command', value: prefix });\n }\n current = '';\n result.push({ type: '2>>', value: '2>>' });\n i++; // skip the second >\n continue;\n }\n\n if (twoChar === '&&' || twoChar === '||' || twoChar === '>>') {\n const trimmed = current.trim();\n if (trimmed) {\n result.push({ type: 'command', value: trimmed });\n }\n current = '';\n result.push({\n type: twoChar as CommandPart['type'],\n value: twoChar,\n });\n i++; // skip the second character of the operator\n continue;\n }\n\n // Check for 2> stderr overwrite redirect (current ends with '2' and next char is '>')\n if (ch === '>' && current.endsWith('2')) {\n const prefix = current.slice(0, -1).trim();\n if (prefix) {\n result.push({ type: 'command', value: prefix });\n }\n current = '';\n result.push({ type: '2>', value: '2>' });\n continue;\n }\n\n // Check for single-character pipe operator (after || is ruled out)\n if (ch === '|') {\n const trimmed = current.trim();\n if (trimmed) {\n result.push({ type: 'command', value: trimmed });\n }\n current = '';\n result.push({ type: '|', value: '|' });\n continue;\n }\n\n // Check for single-character > redirect (after >> is ruled out)\n if (ch === '>') {\n const trimmed = current.trim();\n if (trimmed) {\n result.push({ type: 'command', value: trimmed });\n }\n current = '';\n result.push({ type: '>', value: '>' });\n continue;\n }\n\n // Check for ; sequential separator\n if (ch === ';') {\n const trimmed = current.trim();\n if (trimmed) {\n result.push({ type: 'command', value: trimmed });\n }\n current = '';\n result.push({ type: ';', value: ';' });\n continue;\n }\n\n current += ch;\n }\n\n const trimmed = current.trim();\n if (trimmed) {\n result.push({ type: 'command', value: trimmed });\n }\n\n return result;\n }\n\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 // 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 return { commandName: '', args: [], tokens: [] };\n }\n\n const commandParts: string[] = [];\n const args: ParsedArg[] = [];\n const tokens: ParsedToken[] = [];\n\n for (const match of matches) {\n if (match[1]) {\n const key = match[1];\n const hasEquals = match[2] !== undefined;\n let value: any = match[2];\n if (value) {\n // Remove surrounding quotes\n value = value.replace(/^['\"]|['\"]$/g, '');\n } else if (!hasEquals) {\n // Flag without a value\n value = true;\n }\n const parsedValue = this.parseValue(value);\n args.push({\n name: key,\n value: parsedValue,\n });\n tokens.push({\n kind: 'flag',\n name: key,\n value: parsedValue,\n hasEquals,\n });\n } else if (!match[0].startsWith('-')) {\n commandParts.push(match[0]);\n tokens.push({ kind: 'word', value: match[0] });\n }\n }\n\n return {\n commandName: commandParts.join(' '),\n args,\n tokens,\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: any): any {\n if (typeof value !== 'string') return value;\n if (value.length > 0 && !isNaN(Number(value))) return Number(value);\n if (value === 'true' || value === 'false') return value === 'true';\n return value;\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(\n result[parameter.name],\n )\n ? result[parameter.name]\n : [];\n value = [...previousValue, arg.value];\n break;\n }\n case 'boolean':\n value =\n value === true ||\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 { ICliCommandParameterDescriptor } from '@qodalis/cli-core';\nimport { ParsedArg, ParsedToken } from './command-parser';\n\n/**\n * Re-interprets parsed tokens using processor parameter descriptors to support\n * `--param value` (space-separated) argument format in addition to `--param=value`.\n *\n * When a flag has no explicit `=` value and the matching descriptor's type is\n * not boolean, the next word token is consumed as the flag's value.\n *\n * @param tokens - Ordered tokens from the parser.\n * @param descriptors - Parameter descriptors from the matched processor.\n * @returns Reconciled args array and remaining command parts.\n */\nexport function reconcileArgs(\n tokens: ParsedToken[],\n descriptors: ICliCommandParameterDescriptor[] | undefined,\n): { args: ParsedArg[]; commandParts: string[] } {\n const args: ParsedArg[] = [];\n const commandParts: string[] = [];\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n\n if (token.kind === 'word') {\n commandParts.push(token.value);\n continue;\n }\n\n // token.kind === 'flag'\n const descriptor = findDescriptor(token.name, descriptors);\n\n if (\n descriptor &&\n descriptor.type !== 'boolean' &&\n !token.hasEquals &&\n i + 1 < tokens.length &&\n tokens[i + 1].kind === 'word'\n ) {\n // Consume the next word token as this flag's value\n const nextToken = tokens[i + 1] as { kind: 'word'; value: string };\n args.push({\n name: token.name,\n value: parseValue(nextToken.value),\n });\n i++; // skip consumed word\n } else {\n args.push({ name: token.name, value: token.value });\n }\n }\n\n return { args, commandParts };\n}\n\nfunction findDescriptor(\n name: string,\n descriptors: ICliCommandParameterDescriptor[] | undefined,\n): ICliCommandParameterDescriptor | undefined {\n if (!descriptors) return undefined;\n return descriptors.find(\n (d) =>\n d.name === name ||\n d.aliases?.some((a) => a === name),\n );\n}\n\nfunction parseValue(value: string): string | number | boolean {\n if (value.length > 0 && !isNaN(Number(value))) return Number(value);\n if (value === 'true' || value === 'false') return value === 'true';\n return value;\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","export 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","export { groupBy } from './arrays';\nexport { getGreetingBasedOnTime } from './greetings';\n\nexport const openLink = (link: string) => {\n try {\n window.open(link, '_blank');\n } catch (e) {\n console.error(e);\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 {\n ICliCommandChildProcessor,\n ICliCommandProcessor,\n ICliCommandProcessorRegistry,\n} from '@qodalis/cli-core';\n\nexport class CliCommandProcessorRegistry implements ICliCommandProcessorRegistry {\n public readonly processors: ICliCommandProcessor[] = [];\n\n constructor(initialProcessors?: ICliCommandProcessor[]) {\n if (initialProcessors) {\n this.processors.push(...initialProcessors);\n }\n }\n\n public registerProcessor(processor: ICliCommandProcessor): void {\n const existingProcessor = this.getProcessorByName(processor.command);\n\n if (existingProcessor) {\n // Same instance registered again (e.g. via multiple DI paths) — skip silently\n if (existingProcessor === processor) {\n return;\n }\n\n const existingIndex = this.processors.findIndex(\n (p) => p.command === processor.command,\n );\n\n if (processor.extendsProcessor) {\n // Extension: merge sub-processors into the existing processor\n // instead of replacing it, so existing sub-commands remain available\n if (processor.processors?.length) {\n if (!existingProcessor.processors) {\n existingProcessor.processors = [];\n }\n for (const sub of processor.processors) {\n const exists = existingProcessor.processors.find(\n (p) => p.command === sub.command,\n );\n if (!exists) {\n existingProcessor.processors.push(sub);\n }\n }\n }\n return;\n }\n\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 // 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 (\n existingProcessor.metadata?.sealed &&\n !existingProcessor.originalProcessor\n ) {\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 const current = this.processors[index];\n if (current.originalProcessor) {\n // Restore the original processor instead of removing\n this.processors[index] = current.originalProcessor;\n } else {\n this.processors.splice(index, 1);\n }\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 lowerCommand = mainCommand.toLowerCase();\n const processor = processors.find(\n (p) =>\n p.command.toLowerCase() === lowerCommand ||\n p.aliases?.some((a) => a.toLowerCase() === lowerCommand),\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.acceptsRawInput || 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","/**\n * Framework-agnostic token for the CLI command processor registry.\n * Used as a key in the service provider to retrieve the registry.\n */\nexport const CliProcessorsRegistry_TOKEN = 'cli-processors-registry';\n\n/**\n * Framework-agnostic token for the CLI state store manager.\n * Used as a key in the service provider to retrieve the state store manager.\n */\nexport const CliStateStoreManager_TOKEN = 'cli-state-store-manager';\n\n/**\n * Framework-agnostic token for the CLI command history service.\n * Used as a key in the service provider to retrieve the command history.\n */\nexport const CliCommandHistory_TOKEN = 'cli-command-history';\n\n/**\n * Framework-agnostic token for the CLI ping server service.\n * Used as a key in the service provider to retrieve the ping server service.\n */\nexport const ICliPingServerService_TOKEN = 'cli-ping-server-service';\n\n/**\n * Framework-agnostic token for the CLI module registry.\n * Used as a key in the service provider to retrieve the module registry.\n */\nexport const CliModuleRegistry_TOKEN = 'cli-module-registry';\n\n/**\n * Framework-agnostic token for the CLI background service registry.\n * Used as a key in the service provider to retrieve the background service registry.\n */\nexport const CliBackgroundServiceRegistry_TOKEN = 'cli-background-service-registry';\n\n/**\n * Framework-agnostic token for the CLI package manager service.\n * Used as a key in the service provider to retrieve the package manager.\n */\nexport const CliPackageManagerService_TOKEN = 'cli-package-manager-service';\n\n// Re-exported from @qodalis/cli-core for backward compatibility\nexport {\n ICliUserSessionService_TOKEN,\n ICliUsersStoreService_TOKEN,\n} from '@qodalis/cli-core';\n","\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.1';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n CliStateConfiguration,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliCommandProcessorRegistry,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { Subscription } from 'rxjs';\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 userAliases: Record<string, string> = {};\n\n private stateSubscription?: Subscription;\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.userAliases).forEach(\n ([alias, command]) => {\n writer.writeInfo(` ${alias} -> ${command}`);\n },\n );\n\n if (Object.keys(this.userAliases).length === 0) {\n writer.writeInfo(' No aliases defined');\n }\n },\n },\n ];\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.alias.long_description', 'Create shortcut aliases for frequently used commands'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('alias --<name>=<command>', CliForegroundColor.Cyan)} ${t.t('cli.alias.create_new', 'Create a new alias')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('alias ls', CliForegroundColor.Cyan)} ${t.t('cli.alias.list_all', 'List all aliases')}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` alias --h=help ${writer.wrapInColor('# \"h\" → runs \"help\"', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` alias --cls=clear ${writer.wrapInColor('# \"cls\" → runs \"clear\"', CliForegroundColor.Green)}`,\n );\n writer.writeln();\n writer.writeln(\n `💡 ${t.t('cli.alias.remove_hint', 'Use {command} to remove an alias', { command: 'unalias <name>' })}`,\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.userAliases,\n ...command.args,\n },\n });\n\n await context.state.persist();\n }\n\n async initialize(context: ICliExecutionContext): Promise<void> {\n this.stateSubscription?.unsubscribe();\n this.stateSubscription = context.state\n .select((x) => x['aliases'])\n .subscribe((aliases) => {\n this.userAliases = aliases ?? {};\n });\n }\n}\n","import {\n ICliCommandProcessor,\n ICliExecutionContext,\n CliProcessCommand,\n ICliCommandAuthor,\n CliProcessorMetadata,\n CliIcon,\n DefaultLibraryAuthor,\n ICliCommandParameterDescriptor,\n} from '@qodalis/cli-core';\nimport { ITheme } from '@xterm/xterm';\n\nexport class CliCaptureCommandProcessor implements ICliCommandProcessor {\n command = 'capture';\n description = 'Export terminal output to a downloadable file';\n aliases = ['export-output'];\n author: ICliCommandAuthor = DefaultLibraryAuthor;\n metadata: CliProcessorMetadata = { icon: CliIcon.Save, module: 'system' };\n\n parameters: ICliCommandParameterDescriptor[] = [\n {\n name: 'format',\n description: 'Output format: html (default) or txt',\n required: false,\n type: 'string',\n },\n {\n name: 'filename',\n description: 'Output filename (without extension)',\n required: false,\n type: 'string',\n },\n {\n name: 'lines',\n description: 'Number of recent lines to capture (default: all)',\n required: false,\n type: 'number',\n },\n ];\n\n async processCommand(cmd: CliProcessCommand, context: ICliExecutionContext): Promise<void> {\n const format = (cmd.args?.['format'] as string) ?? 'html';\n const filename = (cmd.args?.['filename'] as string) ?? `terminal-${Date.now()}`;\n const linesParam = cmd.args?.['lines'] as number | undefined;\n\n if (format !== 'html' && format !== 'txt') {\n context.writer.writeError('Format must be \"html\" or \"txt\"');\n context.process.exit(-1);\n return;\n }\n\n const terminal = context.terminal;\n const buffer = terminal?.buffer?.active;\n\n if (!buffer) {\n context.writer.writeError('Terminal buffer is not available');\n context.process.exit(-1);\n return;\n }\n\n const totalLines = buffer.length;\n const startLine = linesParam ? Math.max(0, totalLines - linesParam) : 0;\n\n const lines: string[] = [];\n for (let i = startLine; i < totalLines; i++) {\n const line = buffer.getLine(i);\n if (line) {\n lines.push(line.translateToString(true));\n }\n }\n\n if (format === 'txt') {\n const content = lines.join('\\n');\n this.download(`${filename}.txt`, content, 'text/plain');\n context.writer.writeSuccess(`Downloaded ${filename}.txt (${lines.length} lines)`);\n } else {\n const theme = context.terminal?.options?.theme;\n const content = this.toHtml(lines, theme);\n this.download(`${filename}.html`, content, 'text/html');\n context.writer.writeSuccess(`Downloaded ${filename}.html (${lines.length} lines)`);\n }\n }\n\n private sanitizeCssColor(value: string | undefined, fallback: string): string {\n if (!value) return fallback;\n // Allow only hex colors, rgb(), rgba(), named colors (no special chars)\n return /^[a-zA-Z0-9#(),. %]+$/.test(value) ? value : fallback;\n }\n\n private toHtml(lines: string[], theme: ITheme | undefined): string {\n const bg = this.sanitizeCssColor(theme?.background, '#0c0c0c');\n const fg = this.sanitizeCssColor(theme?.foreground, '#cccccc');\n const escaped = lines.map((l) => this.escapeHtml(l)).join('\\n');\n return `<!DOCTYPE html>\n<html>\n<head>\n <meta charset=\"utf-8\">\n <title>Terminal Output</title>\n <style>\n body { background: ${bg}; color: ${fg}; font-family: 'Courier New', monospace; font-size: 14px; padding: 16px; white-space: pre-wrap; word-break: break-all; }\n </style>\n</head>\n<body>${escaped}</body>\n</html>`;\n }\n\n private escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n }\n\n private download(filename: string, content: string, mimeType: string): void {\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = filename;\n a.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliBase64CommandProcessor implements ICliCommandProcessor {\n command = 'base64';\n\n aliases = ['b64'];\n\n description = 'Encode or decode Base64 strings';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '🔣',\n module: 'misc',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'encode',\n aliases: ['enc', 'e'],\n description: 'Encode text to Base64',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const text = command.value || command.data || '';\n const encoded = btoa(\n new TextEncoder()\n .encode(text as string)\n .reduce(\n (data, byte) =>\n data + String.fromCharCode(byte),\n '',\n ),\n );\n context.writer.writeln(encoded);\n context.process.output(encoded);\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Encode text to Base64 format');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('base64 encode <text>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` base64 encode Hello World ${writer.wrapInColor('# → SGVsbG8gV29ybGQ=', CliForegroundColor.Green)}`,\n );\n },\n },\n {\n command: 'decode',\n aliases: ['dec', 'd'],\n description: 'Decode a Base64 string',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const encoded = command.value || command.data || '';\n try {\n const bytes = Uint8Array.from(\n atob(encoded as string),\n (c) => c.charCodeAt(0),\n );\n const decoded = new TextDecoder().decode(bytes);\n context.writer.writeln(decoded);\n context.process.output(decoded);\n } catch {\n context.writer.writeError('Invalid Base64 string');\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Decode a Base64 string back to text');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('base64 decode <base64>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` base64 decode SGVsbG8gV29ybGQ= ${writer.wrapInColor('# → Hello World', CliForegroundColor.Green)}`,\n );\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.base64.long_description', 'Encode and decode Base64 strings'));\n writer.writeln(t.t('cli.base64.utf8_note', 'Supports UTF-8 text encoding'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('base64 encode <text>', CliForegroundColor.Cyan)} ${t.t('cli.base64.encode_desc', 'Encode text to Base64')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('base64 decode <base64>', CliForegroundColor.Cyan)} ${t.t('cli.base64.decode_desc', 'Decode Base64 to text')}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliCalCommandProcessor implements ICliCommandProcessor {\n command = 'cal';\n\n aliases = ['calendar'];\n\n description = 'Display a calendar';\n\n author = DefaultLibraryAuthor;\n\n metadata?: CliProcessorMetadata = {\n icon: '📅',\n module: 'misc',\n };\n\n parameters = [\n {\n name: 'month',\n aliases: ['m'],\n description: 'Month (1-12)',\n type: 'number' as const,\n required: false,\n },\n {\n name: 'year',\n aliases: ['y'],\n description: 'Year (e.g. 2024)',\n type: 'number' as const,\n required: false,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const { writer } = context;\n const now = new Date();\n\n const month =\n parseInt(command.args['month'] || command.args['m']) ||\n now.getMonth() + 1;\n const year =\n parseInt(command.args['year'] || command.args['y']) ||\n now.getFullYear();\n\n if (month < 1 || month > 12) {\n writer.writeError('Month must be between 1 and 12');\n context.process.exit(-1);\n return;\n }\n\n const monthNames = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n ];\n\n const title = `${monthNames[month - 1]} ${year}`;\n const padding = Math.max(0, Math.floor((20 - title.length) / 2));\n\n writer.writeln(\n writer.wrapInColor(\n ' '.repeat(padding) + title,\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln(\n writer.wrapInColor('Su Mo Tu We Th Fr Sa', CliForegroundColor.Cyan),\n );\n\n const firstDay = new Date(year, month - 1, 1).getDay();\n const daysInMonth = new Date(year, month, 0).getDate();\n const today = now.getDate();\n const isCurrentMonth =\n now.getMonth() + 1 === month && now.getFullYear() === year;\n\n let line = ' '.repeat(firstDay);\n for (let day = 1; day <= daysInMonth; day++) {\n const dayStr = String(day).padStart(2);\n if (isCurrentMonth && day === today) {\n line += `\\x1b[7m${dayStr}\\x1b[0m `;\n } else {\n line += dayStr + ' ';\n }\n\n if ((firstDay + day) % 7 === 0 || day === daysInMonth) {\n writer.writeln(line);\n line = '';\n }\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.cal.long_description', 'Display a monthly calendar'));\n writer.writeln(t.t('cli.cal.highlight_note', 'Current day is highlighted'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('cal', CliForegroundColor.Cyan)} ${t.t('cli.cal.current_month', 'Current month')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('cal --month=3 --year=2024', CliForegroundColor.Cyan)} ${t.t('cli.cal.specific_month', 'Specific month')}`,\n );\n }\n}\n","import {\n CliForegroundColor,\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 aliases = ['cls'];\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 writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.clear.long_description', 'Clears all content from the terminal screen'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('clear', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(\n `⌨️ ${t.t('cli.clear.shortcut', 'Shortcut:')} ${writer.wrapInColor('Ctrl+L', CliForegroundColor.Yellow)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliClipboardCommandProcessor implements ICliCommandProcessor {\n command = 'clipboard';\n\n aliases = ['cb', 'pbcopy'];\n\n description = 'Copy to or paste from the clipboard';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '📎',\n module: 'misc',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'copy',\n aliases: ['cp'],\n description: 'Copy text to clipboard',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const text = (command.value ||\n command.data ||\n '') as string;\n try {\n await navigator.clipboard.writeText(text);\n context.writer.writeSuccess('Copied to clipboard');\n } catch {\n context.writer.writeError(\n 'Failed to copy. Clipboard access may be denied by the browser.',\n );\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Copy text to the system clipboard');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('clipboard copy <text>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'paste',\n aliases: ['p'],\n description: 'Paste text from clipboard',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n try {\n const text = await navigator.clipboard.readText();\n if (text) {\n context.writer.writeln(text);\n context.process.output(text);\n } else {\n context.writer.writeInfo('Clipboard is empty');\n }\n } catch {\n context.writer.writeError(\n 'Failed to paste. Clipboard access may be denied by the browser.',\n );\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Read text from the system clipboard');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('clipboard paste', CliForegroundColor.Cyan)}`,\n );\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.clipboard.long_description', 'Copy text to or paste text from the system clipboard'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('clipboard copy <text>', CliForegroundColor.Cyan)} ${t.t('cli.clipboard.copy_desc', 'Copy text to clipboard')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('clipboard paste', CliForegroundColor.Cyan)} ${t.t('cli.clipboard.paste_desc', 'Paste from clipboard')}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliColorCommandProcessor implements ICliCommandProcessor {\n command = 'color';\n\n aliases = ['colour'];\n\n description = 'Convert and preview colors (hex, rgb, hsl)';\n\n author = DefaultLibraryAuthor;\n\n acceptsRawInput = true;\n\n valueRequired = true;\n\n metadata?: CliProcessorMetadata = {\n icon: '🎨',\n module: 'misc',\n };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const { writer } = context;\n const input = (command.value || '').trim();\n\n let r: number, g: number, b: number;\n\n try {\n if (input.startsWith('#')) {\n [r, g, b] = this.parseHex(input);\n } else if (input.startsWith('rgb')) {\n [r, g, b] = this.parseRgb(input);\n } else if (input.startsWith('hsl')) {\n [r, g, b] = this.hslToRgb(...this.parseHsl(input));\n } else if (/^[0-9a-fA-F]{3,8}$/.test(input)) {\n [r, g, b] = this.parseHex('#' + input);\n } else {\n writer.writeError(\n 'Unrecognized color format. Use hex (#ff0000), rgb(255,0,0), or hsl(0,100%,50%)',\n );\n context.process.exit(-1);\n return;\n }\n } catch {\n writer.writeError('Invalid color value');\n context.process.exit(-1);\n return;\n }\n\n const hex = this.rgbToHex(r, g, b);\n const [h, s, l] = this.rgbToHsl(r, g, b);\n\n // Color preview using ANSI true color\n const preview = `\\x1b[48;2;${r};${g};${b}m \\x1b[0m`;\n\n writer.writeln(`${preview}`);\n writer.writeln(\n ` ${writer.wrapInColor('HEX:', CliForegroundColor.Cyan)} ${hex}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('RGB:', CliForegroundColor.Cyan)} rgb(${r}, ${g}, ${b})`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('HSL:', CliForegroundColor.Cyan)} hsl(${h}, ${s}%, ${l}%)`,\n );\n\n context.process.output({ hex, rgb: { r, g, b }, hsl: { h, s, l } });\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.color.long_description', 'Convert between color formats and preview colors'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('color <value>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.color.supported_formats', 'Supported formats:')}`);\n writer.writeln(\n ` color #ff6600 ${writer.wrapInColor('# Hex', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` color ff6600 ${writer.wrapInColor('# Hex without #', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` color rgb(255,102,0) ${writer.wrapInColor('# RGB', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` color hsl(24,100%,50%) ${writer.wrapInColor('# HSL', CliForegroundColor.Green)}`,\n );\n }\n\n private parseHex(hex: string): [number, number, number] {\n hex = hex.replace('#', '');\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n return [\n parseInt(hex.substring(0, 2), 16),\n parseInt(hex.substring(2, 4), 16),\n parseInt(hex.substring(4, 6), 16),\n ];\n }\n\n private parseRgb(input: string): [number, number, number] {\n const match = input.match(/(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/);\n if (!match) throw new Error('Invalid RGB');\n return [parseInt(match[1]), parseInt(match[2]), parseInt(match[3])];\n }\n\n private parseHsl(input: string): [number, number, number] {\n const match = input.match(/(\\d+)\\s*,\\s*(\\d+)%?\\s*,\\s*(\\d+)%?/);\n if (!match) throw new Error('Invalid HSL');\n return [parseInt(match[1]), parseInt(match[2]), parseInt(match[3])];\n }\n\n private rgbToHex(r: number, g: number, b: number): string {\n return (\n '#' + [r, g, b].map((x) => x.toString(16).padStart(2, '0')).join('')\n );\n }\n\n private rgbToHsl(\n r: number,\n g: number,\n b: number,\n ): [number, number, number] {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n let h = 0;\n let s = 0;\n const l = (max + min) / 2;\n\n if (max !== min) {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = ((g - b) / d + (g < b ? 6 : 0)) / 6;\n break;\n case g:\n h = ((b - r) / d + 2) / 6;\n break;\n case b:\n h = ((r - g) / d + 4) / 6;\n break;\n }\n }\n\n return [Math.round(h * 360), Math.round(s * 100), Math.round(l * 100)];\n }\n\n private hslToRgb(\n h: number,\n s: number,\n l: number,\n ): [number, number, number] {\n h /= 360;\n s /= 100;\n l /= 100;\n\n let r: number, g: number, b: number;\n if (s === 0) {\n r = g = b = l;\n } else {\n const hue2rgb = (p: number, q: number, t: number) => {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n };\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\ntype ConversionMap = Record<string, Record<string, number>>;\n\nconst lengthUnits: ConversionMap = {\n m: {\n m: 1,\n km: 0.001,\n cm: 100,\n mm: 1000,\n mi: 0.000621371,\n ft: 3.28084,\n in: 39.3701,\n yd: 1.09361,\n },\n km: {\n m: 1000,\n km: 1,\n cm: 100000,\n mm: 1000000,\n mi: 0.621371,\n ft: 3280.84,\n in: 39370.1,\n yd: 1093.61,\n },\n cm: {\n m: 0.01,\n km: 0.00001,\n cm: 1,\n mm: 10,\n mi: 0.00000621371,\n ft: 0.0328084,\n in: 0.393701,\n yd: 0.0109361,\n },\n mm: {\n m: 0.001,\n km: 0.000001,\n cm: 0.1,\n mm: 1,\n mi: 6.2137e-7,\n ft: 0.00328084,\n in: 0.0393701,\n yd: 0.00109361,\n },\n mi: {\n m: 1609.34,\n km: 1.60934,\n cm: 160934,\n mm: 1609340,\n mi: 1,\n ft: 5280,\n in: 63360,\n yd: 1760,\n },\n ft: {\n m: 0.3048,\n km: 0.0003048,\n cm: 30.48,\n mm: 304.8,\n mi: 0.000189394,\n ft: 1,\n in: 12,\n yd: 0.333333,\n },\n in: {\n m: 0.0254,\n km: 0.0000254,\n cm: 2.54,\n mm: 25.4,\n mi: 0.0000157828,\n ft: 0.0833333,\n in: 1,\n yd: 0.0277778,\n },\n yd: {\n m: 0.9144,\n km: 0.0009144,\n cm: 91.44,\n mm: 914.4,\n mi: 0.000568182,\n ft: 3,\n in: 36,\n yd: 1,\n },\n};\n\nconst weightUnits: ConversionMap = {\n kg: { kg: 1, g: 1000, mg: 1000000, lb: 2.20462, oz: 35.274, t: 0.001 },\n g: { kg: 0.001, g: 1, mg: 1000, lb: 0.00220462, oz: 0.035274, t: 0.000001 },\n mg: {\n kg: 0.000001,\n g: 0.001,\n mg: 1,\n lb: 0.00000220462,\n oz: 0.000035274,\n t: 1e-9,\n },\n lb: { kg: 0.453592, g: 453.592, mg: 453592, lb: 1, oz: 16, t: 0.000453592 },\n oz: {\n kg: 0.0283495,\n g: 28.3495,\n mg: 28349.5,\n lb: 0.0625,\n oz: 1,\n t: 0.0000283495,\n },\n t: { kg: 1000, g: 1000000, mg: 1000000000, lb: 2204.62, oz: 35274, t: 1 },\n};\n\nconst dataUnits: ConversionMap = {\n b: {\n b: 1,\n kb: 1 / 1024,\n mb: 1 / 1024 ** 2,\n gb: 1 / 1024 ** 3,\n tb: 1 / 1024 ** 4,\n },\n kb: { b: 1024, kb: 1, mb: 1 / 1024, gb: 1 / 1024 ** 2, tb: 1 / 1024 ** 3 },\n mb: { b: 1024 ** 2, kb: 1024, mb: 1, gb: 1 / 1024, tb: 1 / 1024 ** 2 },\n gb: { b: 1024 ** 3, kb: 1024 ** 2, mb: 1024, gb: 1, tb: 1 / 1024 },\n tb: { b: 1024 ** 4, kb: 1024 ** 3, mb: 1024 ** 2, gb: 1024, tb: 1 },\n};\n\ninterface ConversionCategory {\n name: string;\n units: ConversionMap;\n unitNames: Record<string, string>;\n}\n\nconst categories: ConversionCategory[] = [\n {\n name: 'length',\n units: lengthUnits,\n unitNames: {\n m: 'meters',\n km: 'kilometers',\n cm: 'centimeters',\n mm: 'millimeters',\n mi: 'miles',\n ft: 'feet',\n in: 'inches',\n yd: 'yards',\n },\n },\n {\n name: 'weight',\n units: weightUnits,\n unitNames: {\n kg: 'kilograms',\n g: 'grams',\n mg: 'milligrams',\n lb: 'pounds',\n oz: 'ounces',\n t: 'tonnes',\n },\n },\n {\n name: 'data',\n units: dataUnits,\n unitNames: {\n b: 'bytes',\n kb: 'kilobytes',\n mb: 'megabytes',\n gb: 'gigabytes',\n tb: 'terabytes',\n },\n },\n];\n\nexport class CliConvertCommandProcessor implements ICliCommandProcessor {\n command = 'convert';\n\n aliases = ['conv'];\n\n description = 'Convert between units (length, weight, temperature, data)';\n\n author = DefaultLibraryAuthor;\n\n acceptsRawInput = true;\n\n valueRequired = true;\n\n metadata?: CliProcessorMetadata = {\n icon: '📐',\n module: 'misc',\n };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const { writer } = context;\n const input = (command.value || '').trim();\n\n // Parse: \"100 km to mi\" or \"100km mi\" or \"32 c to f\"\n const match = input.match(\n /^([\\d.]+)\\s*([a-zA-Z°]+)\\s+(?:to\\s+)?([a-zA-Z°]+)$/i,\n );\n\n if (!match) {\n writer.writeError('Usage: convert <value> <from> to <to>');\n writer.writeInfo('Example: convert 100 km to mi');\n context.process.exit(-1);\n return;\n }\n\n const value = parseFloat(match[1]);\n const fromUnit = match[2].toLowerCase();\n const toUnit = match[3].toLowerCase();\n\n if (isNaN(value)) {\n writer.writeError('Invalid number');\n context.process.exit(-1);\n return;\n }\n\n // Temperature special case\n if (\n this.isTemperatureUnit(fromUnit) &&\n this.isTemperatureUnit(toUnit)\n ) {\n const result = this.convertTemperature(value, fromUnit, toUnit);\n if (result !== null) {\n const rounded = Math.round(result * 1000) / 1000;\n writer.writeln(\n ` ${value} ${this.tempLabel(fromUnit)} = ${writer.wrapInColor(String(rounded), CliForegroundColor.Cyan)} ${this.tempLabel(toUnit)}`,\n );\n context.process.output(rounded);\n return;\n }\n }\n\n // Standard unit conversion\n for (const category of categories) {\n if (\n category.units[fromUnit] &&\n category.units[fromUnit][toUnit] !== undefined\n ) {\n const result = value * category.units[fromUnit][toUnit];\n const rounded = Math.round(result * 1000000) / 1000000;\n const fromName = category.unitNames[fromUnit] || fromUnit;\n const toName = category.unitNames[toUnit] || toUnit;\n writer.writeln(\n ` ${value} ${fromName} = ${writer.wrapInColor(String(rounded), CliForegroundColor.Cyan)} ${toName}`,\n );\n context.process.output(rounded);\n return;\n }\n }\n\n writer.writeError(`Cannot convert from \"${fromUnit}\" to \"${toUnit}\"`);\n writer.writeln();\n writer.writeInfo('Supported units:');\n writer.writeln(' Length: m, km, cm, mm, mi, ft, in, yd');\n writer.writeln(' Weight: kg, g, mg, lb, oz, t');\n writer.writeln(' Temperature: c, f, k');\n writer.writeln(' Data: b, kb, mb, gb, tb');\n context.process.exit(-1);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.convert.long_description', 'Convert between various units of measurement'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('convert <value> <from> to <to>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` convert 100 km to mi ${writer.wrapInColor('# → 62.1371 miles', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` convert 72 f to c ${writer.wrapInColor('# → 22.222 celsius', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` convert 1024 mb to gb ${writer.wrapInColor('# → 1 gigabytes', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` convert 5.5 lb to kg ${writer.wrapInColor('# → 2.494 kilograms', CliForegroundColor.Green)}`,\n );\n writer.writeln();\n writer.writeln(`📐 ${t.t('cli.convert.supported', 'Supported:')}`);\n writer.writeln(' Length: m, km, cm, mm, mi, ft, in, yd');\n writer.writeln(' Weight: kg, g, mg, lb, oz, t');\n writer.writeln(' Temperature: c, f, k');\n writer.writeln(' Data: b, kb, mb, gb, tb');\n }\n\n private isTemperatureUnit(unit: string): boolean {\n return ['c', 'f', 'k', '°c', '°f', '°k'].includes(unit);\n }\n\n private tempLabel(unit: string): string {\n const u = unit.replace('°', '');\n return { c: '°C', f: '°F', k: 'K' }[u] || unit;\n }\n\n private convertTemperature(\n value: number,\n from: string,\n to: string,\n ): number | null {\n const f = from.replace('°', '');\n const t = to.replace('°', '');\n\n // Convert to Celsius first\n let celsius: number;\n switch (f) {\n case 'c':\n celsius = value;\n break;\n case 'f':\n celsius = ((value - 32) * 5) / 9;\n break;\n case 'k':\n celsius = value - 273.15;\n break;\n default:\n return null;\n }\n\n // Convert from Celsius to target\n switch (t) {\n case 'c':\n return celsius;\n case 'f':\n return (celsius * 9) / 5 + 32;\n case 'k':\n return celsius + 273.15;\n default:\n return null;\n }\n }\n}\n","import {\n CliForegroundColor,\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 aliases = ['print'];\n\n description = 'Prints the specified text';\n\n acceptsRawInput = 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 raw = command.value || command.data || '';\n\n if (typeof raw === 'object') {\n context.writer.writeJson(raw);\n context.process.output(raw);\n } else {\n const text = this.interpretEscapes(this.stripQuotes(raw));\n context.writer.writeln(text);\n context.process.output(text);\n }\n }\n\n /** Remove surrounding quotes from the text. */\n private stripQuotes(text: string): string {\n if (\n (text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))\n ) {\n return text.slice(1, -1);\n }\n return text;\n }\n\n /** Interpret common escape sequences like a POSIX echo -e. */\n private interpretEscapes(text: string): string {\n return text.replace(/\\\\([\\\\nrtv0])/g, (_, ch) => {\n switch (ch) {\n case 'n': return '\\n';\n case 't': return '\\t';\n case 'r': return '\\r';\n case 'v': return '\\v';\n case '0': return '\\0';\n case '\\\\': return '\\\\';\n default: return ch;\n }\n });\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.echo.long_description', 'Prints the specified text to the terminal'));\n writer.writeln(t.t('cli.echo.piping_note', 'Supports text and JSON object output via piping'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('echo <text>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` echo Hello World ${writer.wrapInColor('# Print text', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` echo \"Hello, World!\" ${writer.wrapInColor('# Print quoted text', CliForegroundColor.Green)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n} 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 aliases = ['calc', 'js'];\n description = 'Evaluate a JavaScript expression';\n author = DefaultLibraryAuthor;\n acceptsRawInput = 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 const { writer, translator: t } = context;\n writer.writeln(t.t('cli.eval.long_description', this.description));\n writer.writeln(\n t.t('cli.eval.supports', 'Supports arithmetic, strings, arrays, objects, and any valid JS'),\n );\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('eval <expression>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` eval 1 + 1 ${writer.wrapInColor('# → 2', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` eval \"Hello, \" + \"World!\" ${writer.wrapInColor('# → Hello, World!', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` eval Math.random() ${writer.wrapInColor('# → 0.1234...', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` eval [1,2,3].map(x => x * 2) ${writer.wrapInColor('# → [2, 4, 6]', CliForegroundColor.Green)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliHashCommandProcessor implements ICliCommandProcessor {\n command = 'hash';\n\n description = 'Generate hash digests of text';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '#️⃣',\n module: 'misc',\n };\n\n constructor() {\n const algorithms: {\n command: string;\n algo: string;\n aliases?: string[];\n }[] = [\n { command: 'sha256', algo: 'SHA-256', aliases: ['sha-256'] },\n { command: 'sha1', algo: 'SHA-1', aliases: ['sha-1'] },\n { command: 'sha384', algo: 'SHA-384', aliases: ['sha-384'] },\n { command: 'sha512', algo: 'SHA-512', aliases: ['sha-512'] },\n ];\n\n this.processors = algorithms.map(({ command, algo, aliases }) => ({\n command,\n aliases,\n description: `Generate ${algo} hash`,\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n cmd: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const text = (cmd.value || cmd.data || '') as string;\n try {\n const encoded = new TextEncoder().encode(text);\n const hashBuffer = await crypto.subtle.digest(\n algo,\n encoded,\n );\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hex = hashArray\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n context.writer.writeln(hex);\n context.process.output(hex);\n } catch {\n context.writer.writeError(`Failed to compute ${algo} hash`);\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n `Generate a ${algo} hash digest of the input text`,\n );\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor(`hash ${command} <text>`, CliForegroundColor.Cyan)}`,\n );\n },\n }));\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.hash.long_description', 'Generate cryptographic hash digests using the Web Crypto API'),\n );\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('hash sha256 <text>', CliForegroundColor.Cyan)} SHA-256 hash`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('hash sha1 <text>', CliForegroundColor.Cyan)} SHA-1 hash`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('hash sha384 <text>', CliForegroundColor.Cyan)} SHA-384 hash`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('hash sha512 <text>', CliForegroundColor.Cyan)} SHA-512 hash`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` hash sha256 hello ${writer.wrapInColor('# → 2cf24dba5fb0a30e...', CliForegroundColor.Green)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliHexCommandProcessor implements ICliCommandProcessor {\n command = 'hex';\n\n description = 'Hex encode/decode and number base conversions';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '0️⃣',\n module: 'misc',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'encode',\n aliases: ['enc'],\n description: 'Encode text to hexadecimal',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const text = (command.value ||\n command.data ||\n '') as string;\n const hex = Array.from(new TextEncoder().encode(text))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n context.writer.writeln(hex);\n context.process.output(hex);\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Encode text to hexadecimal representation');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('hex encode <text>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'decode',\n aliases: ['dec'],\n description: 'Decode hexadecimal to text',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const hexStr = (command.value ||\n command.data ||\n '') as string;\n try {\n const bytes = new Uint8Array(\n (hexStr.match(/.{1,2}/g) || []).map((byte) =>\n parseInt(byte, 16),\n ),\n );\n const text = new TextDecoder().decode(bytes);\n context.writer.writeln(text);\n context.process.output(text);\n } catch {\n context.writer.writeError('Invalid hex string');\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Decode hexadecimal back to text');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('hex decode <hex>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'convert',\n aliases: ['conv'],\n description: 'Convert a number between bases',\n acceptsRawInput: true,\n valueRequired: true,\n parameters: [\n {\n name: 'from',\n description: 'Source base (default: 10)',\n type: 'number' as const,\n required: false,\n },\n {\n name: 'to',\n description: 'Target base (default: 16)',\n type: 'number' as const,\n required: false,\n },\n ],\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n const input = (command.value || '') as string;\n const fromBase = parseInt(command.args['from']) || 10;\n const toBase = parseInt(command.args['to']) || 16;\n\n if (\n fromBase < 2 ||\n fromBase > 36 ||\n toBase < 2 ||\n toBase > 36\n ) {\n writer.writeError('Base must be between 2 and 36');\n context.process.exit(-1);\n return;\n }\n\n try {\n const num = parseInt(input, fromBase);\n if (isNaN(num)) {\n writer.writeError(\n `Invalid number for base ${fromBase}`,\n );\n context.process.exit(-1);\n return;\n }\n const result = num.toString(toBase);\n\n writer.writeln(\n ` ${writer.wrapInColor(`Base ${fromBase}:`, CliForegroundColor.Cyan)} ${input}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor(`Base ${toBase}:`, CliForegroundColor.Cyan)} ${result}`,\n );\n\n if (fromBase !== 10 && toBase !== 10) {\n writer.writeln(\n ` ${writer.wrapInColor('Base 10:', CliForegroundColor.Cyan)} ${num}`,\n );\n }\n\n context.process.output(result);\n } catch {\n writer.writeError('Conversion failed');\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Convert a number between different bases (2-36)',\n );\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('hex convert <number> [--from=N] [--to=N]', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` hex convert 255 ${writer.wrapInColor('# Decimal → Hex (ff)', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` hex convert ff --from=16 --to=2 ${writer.wrapInColor('# Hex → Binary (11111111)', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` hex convert 1010 --from=2 ${writer.wrapInColor('# Binary → Hex (a)', CliForegroundColor.Green)}`,\n );\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.hex.long_description', 'Hex encode/decode text and convert numbers between bases'),\n );\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('hex encode <text>', CliForegroundColor.Cyan)} ${t.t('cli.hex.text_to_hex', 'Text to hex')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('hex decode <hex>', CliForegroundColor.Cyan)} ${t.t('cli.hex.hex_to_text', 'Hex to text')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('hex convert <num> [--from --to]', CliForegroundColor.Cyan)} ${t.t('cli.hex.base_conversion', 'Base conversion')}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliJsonCommandProcessor implements ICliCommandProcessor {\n command = 'json';\n\n description = 'Format, minify, or validate JSON';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '📋',\n module: 'misc',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'format',\n aliases: ['fmt', 'pretty'],\n description: 'Pretty-print JSON with indentation',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const input = (command.value ||\n command.data ||\n '') as string;\n try {\n const parsed =\n typeof input === 'object'\n ? input\n : JSON.parse(input);\n const formatted = JSON.stringify(parsed, null, 2);\n context.writer.writeln(formatted);\n context.process.output(formatted);\n } catch {\n context.writer.writeError('Invalid JSON input');\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Pretty-print JSON with 2-space indentation',\n );\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('json format <json>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'minify',\n aliases: ['min'],\n description: 'Minify JSON by removing whitespace',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const input = (command.value ||\n command.data ||\n '') as string;\n try {\n const parsed =\n typeof input === 'object'\n ? input\n : JSON.parse(input);\n const minified = JSON.stringify(parsed);\n context.writer.writeln(minified);\n context.process.output(minified);\n } catch {\n context.writer.writeError('Invalid JSON input');\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Minify JSON by removing all unnecessary whitespace',\n );\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('json minify <json>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'validate',\n aliases: ['check'],\n description: 'Validate whether a string is valid JSON',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const input = (command.value ||\n command.data ||\n '') as string;\n try {\n JSON.parse(input);\n context.writer.writeSuccess('Valid JSON');\n } catch (e: any) {\n context.writer.writeError(`Invalid JSON: ${e.message}`);\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Check whether a string is valid JSON');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('json validate <json>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.json.long_description', 'Format, minify, or validate JSON strings'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('json format <json>', CliForegroundColor.Cyan)} ${t.t('cli.json.format_desc', 'Pretty-print JSON')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('json minify <json>', CliForegroundColor.Cyan)} ${t.t('cli.json.minify_desc', 'Remove whitespace')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('json validate <json>', CliForegroundColor.Cyan)} ${t.t('cli.json.validate_desc', 'Check if valid JSON')}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` json format {\"a\":1,\"b\":2} ${writer.wrapInColor('# Pretty-print', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` json validate {\"valid\":true} ${writer.wrapInColor('# Check validity', CliForegroundColor.Green)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliJwtCommandProcessor implements ICliCommandProcessor {\n command = 'jwt';\n\n description = 'Decode and inspect JWT tokens';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '🔑',\n module: 'misc',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'decode',\n aliases: ['d'],\n description: 'Decode a JWT token',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const token = (command.value ||\n command.data ||\n '') as string;\n const { writer } = context;\n\n const parts = token.split('.');\n if (parts.length !== 3) {\n writer.writeError(\n 'Invalid JWT token (expected 3 parts separated by dots)',\n );\n context.process.exit(-1);\n return;\n }\n\n try {\n const header = JSON.parse(\n this.base64UrlDecode(parts[0]),\n );\n const payload = JSON.parse(\n this.base64UrlDecode(parts[1]),\n );\n\n writer.writeln(\n writer.wrapInColor(\n 'Header:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln(JSON.stringify(header, null, 2));\n writer.writeln();\n\n writer.writeln(\n writer.wrapInColor(\n 'Payload:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln(JSON.stringify(payload, null, 2));\n writer.writeln();\n\n // Show expiration info\n if (payload.exp) {\n const expDate = new Date(payload.exp * 1000);\n const isExpired = expDate.getTime() < Date.now();\n writer.writeln(\n `${writer.wrapInColor('Expires:', CliForegroundColor.Yellow)} ${expDate.toLocaleString()} ${\n isExpired\n ? writer.wrapInColor(\n '(EXPIRED)',\n CliForegroundColor.Red,\n )\n : writer.wrapInColor(\n '(valid)',\n CliForegroundColor.Green,\n )\n }`,\n );\n }\n\n if (payload.iat) {\n const iatDate = new Date(payload.iat * 1000);\n writer.writeln(\n `${writer.wrapInColor('Issued:', CliForegroundColor.Yellow)} ${iatDate.toLocaleString()}`,\n );\n }\n\n writer.writeln();\n writer.writeln(\n writer.wrapInColor(\n 'Signature:',\n CliForegroundColor.Yellow,\n ) + ` ${parts[2].substring(0, 20)}...`,\n );\n\n context.process.output({ header, payload });\n } catch {\n writer.writeError('Failed to decode JWT token');\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Decode a JWT token and display its header and payload',\n );\n writer.writeln(\n 'Shows expiration status and issue date if present',\n );\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('jwt decode <token>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.jwt.long_description', 'Decode and inspect JSON Web Tokens (JWT)'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('jwt decode <token>', CliForegroundColor.Cyan)} ${t.t('cli.jwt.decode_display', 'Decode and display JWT contents')}`,\n );\n writer.writeln();\n writer.writeln(\n `📝 ${t.t('cli.jwt.shows', 'Shows: header, payload, expiration status, issue date')}`,\n );\n }\n\n private base64UrlDecode(str: string): string {\n str = str.replace(/-/g, '+').replace(/_/g, '/');\n while (str.length % 4) {\n str += '=';\n }\n return decodeURIComponent(\n atob(str)\n .split('')\n .map(\n (c) =>\n '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2),\n )\n .join(''),\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nconst LOREM_WORDS = [\n 'lorem',\n 'ipsum',\n 'dolor',\n 'sit',\n 'amet',\n 'consectetur',\n 'adipiscing',\n 'elit',\n 'sed',\n 'do',\n 'eiusmod',\n 'tempor',\n 'incididunt',\n 'ut',\n 'labore',\n 'et',\n 'dolore',\n 'magna',\n 'aliqua',\n 'enim',\n 'ad',\n 'minim',\n 'veniam',\n 'quis',\n 'nostrud',\n 'exercitation',\n 'ullamco',\n 'laboris',\n 'nisi',\n 'aliquip',\n 'ex',\n 'ea',\n 'commodo',\n 'consequat',\n 'duis',\n 'aute',\n 'irure',\n 'in',\n 'reprehenderit',\n 'voluptate',\n 'velit',\n 'esse',\n 'cillum',\n 'fugiat',\n 'nulla',\n 'pariatur',\n 'excepteur',\n 'sint',\n 'occaecat',\n 'cupidatat',\n 'non',\n 'proident',\n 'sunt',\n 'culpa',\n 'qui',\n 'officia',\n 'deserunt',\n 'mollit',\n 'anim',\n 'id',\n 'est',\n 'laborum',\n];\n\nexport class CliLoremCommandProcessor implements ICliCommandProcessor {\n command = 'lorem';\n\n aliases = ['lipsum'];\n\n description = 'Generate lorem ipsum placeholder text';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '📝',\n module: 'misc',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'words',\n aliases: ['w'],\n description: 'Generate a number of words',\n parameters: [\n {\n name: 'count',\n aliases: ['n'],\n description: 'Number of words (default: 10)',\n type: 'number',\n required: false,\n },\n ],\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const count = Math.min(\n parseInt(command.args['count'] || command.args['n']) ||\n 10,\n 1000,\n );\n const text = this.generateWords(count);\n context.writer.writeln(text);\n context.process.output(text);\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Generate a specific number of lorem ipsum words',\n );\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('lorem words [--count=N]', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'sentences',\n aliases: ['s'],\n description: 'Generate a number of sentences',\n parameters: [\n {\n name: 'count',\n aliases: ['n'],\n description: 'Number of sentences (default: 3)',\n type: 'number',\n required: false,\n },\n ],\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const count = Math.min(\n parseInt(command.args['count'] || command.args['n']) ||\n 3,\n 50,\n );\n const sentences: string[] = [];\n for (let i = 0; i < count; i++) {\n const wordCount = Math.floor(Math.random() * 10) + 5;\n const words = this.generateWords(wordCount);\n sentences.push(\n words.charAt(0).toUpperCase() +\n words.slice(1) +\n '.',\n );\n }\n const text = sentences.join(' ');\n context.writer.writeln(text);\n context.process.output(text);\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Generate lorem ipsum sentences');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('lorem sentences [--count=N]', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'paragraphs',\n aliases: ['p'],\n description: 'Generate a number of paragraphs',\n parameters: [\n {\n name: 'count',\n aliases: ['n'],\n description: 'Number of paragraphs (default: 1)',\n type: 'number',\n required: false,\n },\n ],\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const count = Math.min(\n parseInt(command.args['count'] || command.args['n']) ||\n 1,\n 20,\n );\n const paragraphs: string[] = [];\n for (let i = 0; i < count; i++) {\n const sentenceCount = Math.floor(Math.random() * 4) + 3;\n const sentences: string[] = [];\n for (let j = 0; j < sentenceCount; j++) {\n const wordCount =\n Math.floor(Math.random() * 10) + 5;\n const words = this.generateWords(wordCount);\n sentences.push(\n words.charAt(0).toUpperCase() +\n words.slice(1) +\n '.',\n );\n }\n paragraphs.push(sentences.join(' '));\n }\n const text = paragraphs.join('\\n\\n');\n context.writer.writeln(text);\n context.process.output(text);\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Generate lorem ipsum paragraphs');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('lorem paragraphs [--count=N]', CliForegroundColor.Cyan)}`,\n );\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.lorem.long_description', 'Generate lorem ipsum placeholder text'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('lorem words [--count=N]', CliForegroundColor.Cyan)} ${t.t('cli.lorem.gen_words', 'Generate words')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('lorem sentences [--count=N]', CliForegroundColor.Cyan)} ${t.t('cli.lorem.gen_sentences', 'Generate sentences')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('lorem paragraphs [--count=N]', CliForegroundColor.Cyan)} ${t.t('cli.lorem.gen_paragraphs', 'Generate paragraphs')}`,\n );\n }\n\n private generateWords(count: number): string {\n const words: string[] = [];\n for (let i = 0; i < count; i++) {\n words.push(\n LOREM_WORDS[Math.floor(Math.random() * LOREM_WORDS.length)],\n );\n }\n return words.join(' ');\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliOpenCommandProcessor implements ICliCommandProcessor {\n command = 'open';\n\n description = 'Open a URL in a new browser tab';\n\n author = DefaultLibraryAuthor;\n\n acceptsRawInput = true;\n\n valueRequired = true;\n\n metadata?: CliProcessorMetadata = {\n icon: '🌐',\n module: 'misc',\n };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n let url = (command.value || '') as string;\n\n if (!url.startsWith('http://') && !url.startsWith('https://')) {\n url = 'https://' + url;\n }\n\n try {\n new URL(url);\n } catch {\n context.writer.writeError(`Invalid URL: ${command.value}`);\n context.process.exit(-1);\n return;\n }\n\n const opened = window.open(url, '_blank');\n\n if (opened) {\n context.writer.writeSuccess(\n `Opened ${context.writer.wrapInColor(url, CliForegroundColor.Blue)}`,\n );\n } else {\n context.writer.writeError(\n 'Failed to open URL. Pop-ups may be blocked by the browser.',\n );\n context.process.exit(-1);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.open.long_description', 'Open a URL in a new browser tab'));\n writer.writeln(\n t.t('cli.open.auto_https', 'Automatically adds https:// if no protocol is specified'),\n );\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('open <url>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` open google.com ${writer.wrapInColor('# Opens https://google.com', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` open https://github.com ${writer.wrapInColor('# Opens GitHub', CliForegroundColor.Green)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliRandomCommandProcessor implements ICliCommandProcessor {\n command = 'random';\n\n aliases = ['rand'];\n\n description = 'Generate random values';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '🎲',\n module: 'misc',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'number',\n aliases: ['num'],\n description: 'Generate a random number',\n parameters: [\n {\n name: 'min',\n description: 'Minimum value (default: 0)',\n type: 'number',\n required: false,\n },\n {\n name: 'max',\n description: 'Maximum value (default: 100)',\n type: 'number',\n required: false,\n },\n {\n name: 'count',\n aliases: ['n'],\n description:\n 'How many numbers to generate (default: 1)',\n type: 'number',\n required: false,\n },\n ],\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const min = parseInt(command.args['min']) || 0;\n const max = parseInt(command.args['max']) || 100;\n const count = Math.min(\n parseInt(command.args['count'] || command.args['n']) ||\n 1,\n 100,\n );\n\n const results: number[] = [];\n for (let i = 0; i < count; i++) {\n results.push(\n Math.floor(Math.random() * (max - min + 1)) + min,\n );\n }\n\n const output = results.join(', ');\n context.writer.writeln(output);\n context.process.output(\n results.length === 1 ? results[0] : results,\n );\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Generate random numbers within a range');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('random number [--min=N] [--max=N] [--count=N]', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` random number ${writer.wrapInColor('# 0-100', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` random number --min=1 --max=6 ${writer.wrapInColor('# Dice roll', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` random number --count=5 ${writer.wrapInColor('# 5 numbers', CliForegroundColor.Green)}`,\n );\n },\n },\n {\n command: 'string',\n aliases: ['str'],\n description: 'Generate a random string',\n parameters: [\n {\n name: 'length',\n aliases: ['l'],\n description: 'String length (default: 16)',\n type: 'number',\n required: false,\n },\n {\n name: 'charset',\n description:\n 'Character set: alphanumeric, alpha, numeric, hex (default: alphanumeric)',\n type: 'string',\n required: false,\n },\n ],\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const length = Math.min(\n parseInt(command.args['length'] || command.args['l']) ||\n 16,\n 1024,\n );\n const charset = command.args['charset'] || 'alphanumeric';\n\n const charsets: Record<string, string> = {\n alphanumeric:\n 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',\n alpha: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n numeric: '0123456789',\n hex: '0123456789abcdef',\n };\n\n const chars = charsets[charset];\n if (!chars) {\n context.writer.writeError(\n `Unknown charset: ${charset}. Available: ${Object.keys(charsets).join(', ')}`,\n );\n context.process.exit(-1);\n return;\n }\n\n const randomValues = new Uint32Array(length);\n crypto.getRandomValues(randomValues);\n const result = Array.from(randomValues)\n .map((v) => chars[v % chars.length])\n .join('');\n\n context.writer.writeln(result);\n context.process.output(result);\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Generate a cryptographically random string',\n );\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('random string [--length=N] [--charset=TYPE]', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(\n ` Charsets: ${writer.wrapInColor('alphanumeric, alpha, numeric, hex', CliForegroundColor.Yellow)}`,\n );\n },\n },\n {\n command: 'uuid',\n description: 'Generate a random UUID v4',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const uuid = crypto.randomUUID();\n context.writer.writeln(uuid);\n context.process.output(uuid);\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Generate a cryptographically random UUID v4',\n );\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('random uuid', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'coin',\n aliases: ['flip'],\n description: 'Flip a coin',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const result = Math.random() < 0.5 ? 'Heads' : 'Tails';\n context.writer.writeln(`🪙 ${result}`);\n context.process.output(result);\n },\n },\n {\n command: 'dice',\n aliases: ['roll'],\n description: 'Roll a dice',\n parameters: [\n {\n name: 'sides',\n aliases: ['s'],\n description: 'Number of sides (default: 6)',\n type: 'number',\n required: false,\n },\n ],\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const sides =\n parseInt(command.args['sides'] || command.args['s']) ||\n 6;\n const result = Math.floor(Math.random() * sides) + 1;\n context.writer.writeln(`🎲 ${result}`);\n context.process.output(result);\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.random.long_description', 'Generate random numbers, strings, UUIDs, and more'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('random number', CliForegroundColor.Cyan)} ${t.t('cli.random.number_desc', 'Random number (0-100)')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('random string', CliForegroundColor.Cyan)} ${t.t('cli.random.string_desc', 'Random string (16 chars)')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('random uuid', CliForegroundColor.Cyan)} ${t.t('cli.random.uuid_desc', 'Random UUID v4')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('random coin', CliForegroundColor.Cyan)} ${t.t('cli.random.coin_desc', 'Flip a coin')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('random dice', CliForegroundColor.Cyan)} ${t.t('cli.random.dice_desc', 'Roll a dice')}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliScreenCommandProcessor implements ICliCommandProcessor {\n command = 'screen';\n\n aliases = ['display'];\n\n description = 'Display screen and terminal information';\n\n author = DefaultLibraryAuthor;\n\n metadata?: CliProcessorMetadata = {\n icon: '🖥️',\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.padEnd(22), CliForegroundColor.Cyan)} ${value}`,\n );\n }\n\n writer.writeln(\n writer.wrapInColor('🖥️ Screen:', CliForegroundColor.Yellow),\n );\n writeItem('Resolution:', `${screen.width} x ${screen.height}`);\n writeItem('Available:', `${screen.availWidth} x ${screen.availHeight}`);\n writeItem('Color Depth:', `${screen.colorDepth}-bit`);\n writeItem('Pixel Ratio:', `${window.devicePixelRatio}x`);\n writeItem('Orientation:', screen.orientation?.type || 'unknown');\n writer.writeln();\n\n writer.writeln(\n writer.wrapInColor('🪟 Viewport:', CliForegroundColor.Yellow),\n );\n writeItem(\n 'Inner Size:',\n `${window.innerWidth} x ${window.innerHeight}`,\n );\n writeItem(\n 'Outer Size:',\n `${window.outerWidth} x ${window.outerHeight}`,\n );\n writer.writeln();\n\n writer.writeln(\n writer.wrapInColor('📟 Terminal:', CliForegroundColor.Yellow),\n );\n writeItem('Columns:', `${context.terminal.cols}`);\n writeItem('Rows:', `${context.terminal.rows}`);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.screen.long_description', 'Display screen, viewport, and terminal dimensions'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('screen', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(\n `📝 ${t.t('cli.screen.shows', 'Shows: resolution, color depth, pixel ratio, viewport size, terminal size')}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliSeqCommandProcessor implements ICliCommandProcessor {\n command = 'seq';\n\n aliases = ['sequence'];\n\n description = 'Print a sequence of numbers';\n\n author = DefaultLibraryAuthor;\n\n acceptsRawInput = true;\n\n valueRequired = true;\n\n metadata?: CliProcessorMetadata = {\n icon: '🔢',\n module: 'misc',\n };\n\n parameters = [\n {\n name: 'step',\n aliases: ['s'],\n description: 'Step increment (default: 1)',\n type: 'number' as const,\n required: false,\n },\n {\n name: 'separator',\n aliases: ['sep'],\n description: 'Separator between numbers (default: newline)',\n type: 'string' as const,\n required: false,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const { writer } = context;\n const parts = (command.value || '').split(/\\s+/).map(Number);\n\n let start: number, end: number;\n const step = parseFloat(command.args['step'] || command.args['s']) || 1;\n const separator =\n command.args['separator'] || command.args['sep'] || '\\n';\n\n if (parts.length === 1) {\n start = 1;\n end = parts[0];\n } else if (parts.length >= 2) {\n start = parts[0];\n end = parts[1];\n } else {\n writer.writeError('Usage: seq <end> or seq <start> <end>');\n context.process.exit(-1);\n return;\n }\n\n if (isNaN(start) || isNaN(end)) {\n writer.writeError('Invalid numbers');\n context.process.exit(-1);\n return;\n }\n\n const maxCount = 10000;\n const numbers: number[] = [];\n\n if (step > 0) {\n for (\n let i = start;\n i <= end && numbers.length < maxCount;\n i += step\n ) {\n numbers.push(i);\n }\n } else if (step < 0) {\n for (\n let i = start;\n i >= end && numbers.length < maxCount;\n i += step\n ) {\n numbers.push(i);\n }\n } else {\n writer.writeError('Step cannot be 0');\n context.process.exit(-1);\n return;\n }\n\n writer.writeln(numbers.join(separator));\n context.process.output(numbers);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.seq.long_description', 'Print a sequence of numbers'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('seq <end>', CliForegroundColor.Cyan)} ${t.t('cli.seq.numbers_to_end', 'Numbers from 1 to end')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('seq <start> <end>', CliForegroundColor.Cyan)} ${t.t('cli.seq.numbers_range', 'Numbers from start to end')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('seq <start> <end> --step=N', CliForegroundColor.Cyan)} ${t.t('cli.seq.with_step', 'With custom step')}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` seq 5 ${writer.wrapInColor('# 1, 2, 3, 4, 5', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` seq 2 10 --step=2 ${writer.wrapInColor('# 2, 4, 6, 8, 10', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` seq 1 5 --sep=\", \" ${writer.wrapInColor('# 1, 2, 3, 4, 5', CliForegroundColor.Green)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliIcon,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliSleepCommandProcessor implements ICliCommandProcessor {\n command = 'sleep';\n\n aliases = ['wait'];\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 context: ICliExecutionContext,\n ) {\n const { writer, onAbort } = context;\n const time = parseInt(command.value!);\n\n if (isNaN(time) || time < 0) {\n writer.writeError(\n `Invalid time value: \"${command.value}\". Please provide a positive number in milliseconds.`,\n );\n return;\n }\n\n let aborted = false;\n await new Promise<void>((resolve) => {\n const timer = setTimeout(() => {\n subscription.unsubscribe();\n resolve();\n }, time);\n\n const subscription = onAbort.subscribe(() => {\n clearTimeout(timer);\n aborted = true;\n resolve();\n });\n });\n\n if (!aborted) {\n writer.writeInfo(`Slept for ${time}ms`);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.sleep.long_description', 'Pauses execution for the specified duration (in milliseconds)'),\n );\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('sleep <milliseconds>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` sleep 1000 ${writer.wrapInColor('# Sleep for 1 second', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` sleep 5000 ${writer.wrapInColor('# Sleep for 5 seconds', CliForegroundColor.Green)}`,\n );\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 } from '../version';\n\nexport class CliTimeCommandProcessor implements ICliCommandProcessor {\n command = 'time';\n\n aliases = ['date'];\n\n description = 'Display the current local and UTC time';\n\n author = DefaultLibraryAuthor;\n\n version = LIBRARY_VERSION;\n\n processors?: ICliCommandProcessor[] | undefined = [];\n\n metadata?: CliProcessorMetadata | undefined = {\n sealed: true,\n module: 'misc',\n icon: CliIcon.Timer,\n };\n\n constructor() {\n this.processors = [\n {\n command: 'now',\n description: 'Display the current time',\n processCommand: async (_command, context) => {\n const now = new Date();\n\n const localTime = now.toLocaleString();\n const utcTime = now.toUTCString();\n\n context.writer.writeSuccess(\n `🕒 Local Time: ${context.writer.wrapInColor(localTime, CliForegroundColor.White)}`,\n );\n context.writer.writeSuccess(\n `🌐 UTC Time: ${context.writer.wrapInColor(utcTime, CliForegroundColor.White)}`,\n );\n\n context.process.output(now);\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.time.long_description', 'Display the current local and UTC time'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('time now', CliForegroundColor.Cyan)} 🕒 ${t.t('cli.time.show_current', 'Show current local and UTC time')}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliTimestampCommandProcessor implements ICliCommandProcessor {\n command = 'timestamp';\n\n aliases = ['ts', 'epoch'];\n\n description = 'Convert between Unix timestamps and dates';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '🕐',\n module: 'misc',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'now',\n description: 'Show current Unix timestamp',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n const now = Date.now();\n const seconds = Math.floor(now / 1000);\n\n writer.writeln(\n ` ${writer.wrapInColor('Seconds:', CliForegroundColor.Cyan)} ${seconds}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Milliseconds:', CliForegroundColor.Cyan)} ${now}`,\n );\n\n context.process.output(seconds);\n },\n },\n {\n command: 'to-date',\n aliases: ['todate', 'parse'],\n description: 'Convert a Unix timestamp to a date',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n let ts = parseInt((command.value || '') as string);\n\n if (isNaN(ts)) {\n writer.writeError('Invalid timestamp');\n context.process.exit(-1);\n return;\n }\n\n // Auto-detect seconds vs milliseconds\n if (ts < 1e12) {\n ts *= 1000;\n }\n\n const date = new Date(ts);\n writer.writeln(\n ` ${writer.wrapInColor('Local:', CliForegroundColor.Cyan)} ${date.toLocaleString()}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('UTC:', CliForegroundColor.Cyan)} ${date.toUTCString()}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('ISO:', CliForegroundColor.Cyan)} ${date.toISOString()}`,\n );\n\n context.process.output(date.toISOString());\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Convert a Unix timestamp to a human-readable date',\n );\n writer.writeln('Auto-detects seconds vs milliseconds');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('timestamp to-date <timestamp>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'from-date',\n aliases: ['fromdate'],\n description: 'Convert a date string to a Unix timestamp',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n const input = (command.value || '') as string;\n const date = new Date(input);\n\n if (isNaN(date.getTime())) {\n writer.writeError(`Invalid date: ${input}`);\n context.process.exit(-1);\n return;\n }\n\n const seconds = Math.floor(date.getTime() / 1000);\n writer.writeln(\n ` ${writer.wrapInColor('Seconds:', CliForegroundColor.Cyan)} ${seconds}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Milliseconds:', CliForegroundColor.Cyan)} ${date.getTime()}`,\n );\n\n context.process.output(seconds);\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Convert a date string to a Unix timestamp');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('timestamp from-date <date>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` timestamp from-date 2024-01-01 ${writer.wrapInColor('# ISO date', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` timestamp from-date \"Jan 1, 2024 12:00\" ${writer.wrapInColor('# Human-readable', CliForegroundColor.Green)}`,\n );\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.timestamp.long_description', 'Convert between Unix timestamps and human-readable dates'),\n );\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('timestamp now', CliForegroundColor.Cyan)} ${t.t('cli.timestamp.current', 'Current Unix timestamp')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('timestamp to-date <ts>', CliForegroundColor.Cyan)} ${t.t('cli.timestamp.to_date', 'Timestamp to date')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('timestamp from-date <date>', CliForegroundColor.Cyan)} ${t.t('cli.timestamp.from_date', 'Date to timestamp')}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` timestamp to-date 1704067200 ${writer.wrapInColor('# → Jan 1, 2024', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` timestamp from-date 2024-01-01 ${writer.wrapInColor('# → 1704067200', CliForegroundColor.Green)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\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 writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.unalias.long_description', 'Remove a previously defined command alias'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('unalias <name>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` unalias h ${writer.wrapInColor('# Remove the \"h\" alias', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` unalias cls ${writer.wrapInColor('# Remove the \"cls\" alias', CliForegroundColor.Green)}`,\n );\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 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 aliases = ['sysinfo'];\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 writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.uname.long_description', 'Prints detailed system and browser information including:'),\n );\n writer.writeln(` 💾 ${t.t('cli.uname.cli_versions', 'CLI core and library versions')}`);\n writer.writeln(\n ` 🌐 ${t.t('cli.uname.browser_info', 'Browser name, version, user agent, language, and platform')}`,\n );\n writer.writeln(` 🖥 ${t.t('cli.uname.os', 'Operating system')}`);\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('uname', CliForegroundColor.Cyan)}`,\n );\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 CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { Terminal } from '@xterm/xterm';\n\nexport class CliUptimeCommandProcessor implements ICliCommandProcessor {\n command = 'uptime';\n\n description = 'Show session uptime';\n\n author = DefaultLibraryAuthor;\n\n metadata?: CliProcessorMetadata = {\n icon: '⏱️',\n module: 'misc',\n };\n\n private sessionStartTimes = new WeakMap<Terminal, number>();\n\n async initialize(context: ICliExecutionContext): Promise<void> {\n this.sessionStartTimes.set(context.terminal, Date.now());\n\n try {\n context.backgroundServices.register({\n name: 'uptime-tracker',\n description: 'Tracks terminal session uptime',\n type: 'daemon',\n onStart: async (ctx) => {\n ctx.log('Uptime tracking started');\n },\n });\n await context.backgroundServices.start('uptime-tracker');\n } catch {\n // Already registered or failed — WeakMap fallback is fine\n }\n }\n\n async processCommand(\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const svcInfo = context.backgroundServices.getStatus('uptime-tracker');\n const startTime = (svcInfo?.status === 'running' && svcInfo.startedAt)\n ? svcInfo.startedAt.getTime()\n : this.sessionStartTimes.get(context.terminal) ?? Date.now();\n const elapsed = Date.now() - startTime;\n const { writer } = context;\n\n const seconds = Math.floor(elapsed / 1000) % 60;\n const minutes = Math.floor(elapsed / (1000 * 60)) % 60;\n const hours = Math.floor(elapsed / (1000 * 60 * 60)) % 24;\n const days = Math.floor(elapsed / (1000 * 60 * 60 * 24));\n\n const parts: string[] = [];\n if (days > 0) parts.push(`${days}d`);\n if (hours > 0) parts.push(`${hours}h`);\n if (minutes > 0) parts.push(`${minutes}m`);\n parts.push(`${seconds}s`);\n\n const uptimeStr = parts.join(' ');\n const startDate = new Date(startTime).toLocaleString();\n\n writer.writeln(\n `⏱️ Uptime: ${writer.wrapInColor(uptimeStr, CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n `📅 Started: ${writer.wrapInColor(startDate, CliForegroundColor.Green)}`,\n );\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.uptime.long_description', 'Show how long the current terminal session has been active'),\n );\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('uptime', CliForegroundColor.Cyan)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliUrlCommandProcessor implements ICliCommandProcessor {\n command = 'url';\n\n description = 'Encode or decode URLs';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n icon: '🔗',\n module: 'misc',\n };\n\n constructor() {\n this.processors = [\n {\n command: 'encode',\n aliases: ['enc'],\n description: 'URL-encode a string',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const text = (command.value ||\n command.data ||\n '') as string;\n const encoded = encodeURIComponent(text);\n context.writer.writeln(encoded);\n context.process.output(encoded);\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('URL-encode a string');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('url encode <text>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` url encode hello world ${writer.wrapInColor('# → hello%20world', CliForegroundColor.Green)}`,\n );\n },\n },\n {\n command: 'decode',\n aliases: ['dec'],\n description: 'URL-decode a string',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const text = (command.value ||\n command.data ||\n '') as string;\n try {\n const decoded = decodeURIComponent(text);\n context.writer.writeln(decoded);\n context.process.output(decoded);\n } catch {\n context.writer.writeError('Invalid URL-encoded string');\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('URL-decode a string');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('url decode <text>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` url decode hello%20world ${writer.wrapInColor('# → hello world', CliForegroundColor.Green)}`,\n );\n },\n },\n {\n command: 'parse',\n description: 'Parse a URL into its components',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const input = (command.value ||\n command.data ||\n '') as string;\n try {\n const url = new URL(input);\n const parts: Record<string, string> = {\n protocol: url.protocol,\n hostname: url.hostname,\n port: url.port || '(default)',\n pathname: url.pathname,\n search: url.search || '(none)',\n hash: url.hash || '(none)',\n origin: url.origin,\n };\n const { writer } = context;\n Object.entries(parts).forEach(([key, value]) => {\n writer.writeln(\n ` ${writer.wrapInColor(key.padEnd(12), CliForegroundColor.Cyan)} ${value}`,\n );\n });\n context.process.output(parts);\n } catch {\n context.writer.writeError('Invalid URL');\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Parse a URL and display its components');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('url parse <url>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.url.long_description', 'Encode, decode, and parse URLs'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('url encode <text>', CliForegroundColor.Cyan)} ${t.t('cli.url.encode_desc', 'URL-encode a string')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('url decode <text>', CliForegroundColor.Cyan)} ${t.t('cli.url.decode_desc', 'URL-decode a string')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('url parse <url>', CliForegroundColor.Cyan)} ${t.t('cli.url.parse_desc', 'Parse URL components')}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliYesCommandProcessor implements ICliCommandProcessor {\n command = 'yes';\n\n description = 'Output a string repeatedly';\n\n author = DefaultLibraryAuthor;\n\n acceptsRawInput = true;\n\n metadata?: CliProcessorMetadata = {\n icon: '✅',\n module: 'misc',\n };\n\n parameters = [\n {\n name: 'count',\n aliases: ['n'],\n description: 'Number of repetitions (default: 20)',\n type: 'number' as const,\n required: false,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const text = (command.value || 'y') as string;\n const count = Math.min(\n parseInt(command.args['count'] || command.args['n']) || 20,\n 1000,\n );\n\n for (let i = 0; i < count; i++) {\n context.writer.writeln(text);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.yes.long_description', 'Output a string repeatedly'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('yes [text] [--count=N]', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` yes ${writer.wrapInColor('# Outputs \"y\" 20 times', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` yes hello --count=5 ${writer.wrapInColor('# Outputs \"hello\" 5 times', CliForegroundColor.Green)}`,\n );\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n CliStateConfiguration,\n ICliCommandAuthor,\n ICliCommandProcessor,\n ICliCommandProcessorRegistry,\n ICliConfigurationOption,\n ICliExecutionContext,\n ICliTranslationService,\n ICliTranslationService_TOKEN,\n CliLogLevel,\n DefaultLibraryAuthor,\n resolveConfigurationCategories,\n} from '@qodalis/cli-core';\n\nimport { CliProcessorsRegistry_TOKEN } from '../../tokens';\nimport { ConfigureState } from './types';\n\n/** Built-in system configuration options. */\nconst SYSTEM_OPTIONS: ICliConfigurationOption[] = [\n {\n key: 'logLevel',\n label: 'Log Level',\n description: 'Controls how much logging the CLI outputs',\n type: 'select',\n defaultValue: 'ERROR',\n options: [\n { label: 'None', value: 'None' },\n { label: 'Debug', value: 'Debug' },\n { label: 'Log', value: 'Log' },\n { label: 'Info', value: 'Info' },\n { label: 'Warn', value: 'Warn' },\n { label: 'Error', value: 'Error' },\n ],\n },\n {\n key: 'welcomeMessage',\n label: 'Welcome Message',\n description: 'When to display the welcome message on startup',\n type: 'select',\n defaultValue: 'always',\n options: [\n { label: 'Always', value: 'always' },\n { label: 'Once', value: 'once' },\n { label: 'Daily', value: 'daily' },\n { label: 'Never', value: 'never' },\n ],\n },\n {\n key: 'language',\n label: 'Language',\n description: 'Display language for the CLI interface',\n type: 'select',\n defaultValue: 'en',\n options: [\n { label: 'English', value: 'en' },\n ],\n },\n];\n\n/** Map of string labels to CliLogLevel enum values. */\nconst LOG_LEVEL_MAP: Record<string, CliLogLevel> = {\n None: CliLogLevel.None,\n Debug: CliLogLevel.DEBUG,\n Log: CliLogLevel.LOG,\n Info: CliLogLevel.INFO,\n Warn: CliLogLevel.WARN,\n Error: CliLogLevel.ERROR,\n};\n\nexport class CliConfigureCommandProcessor implements ICliCommandProcessor {\n command = 'configure';\n\n description = 'Manage system and plugin configuration';\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version?: string | undefined = '1.0.0';\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 system: CliConfigureCommandProcessor.buildDefaults(SYSTEM_OPTIONS),\n plugins: {},\n },\n storeName: 'configure',\n };\n\n constructor() {\n this.processors = [\n this.buildListProcessor(),\n this.buildGetProcessor(),\n this.buildSetProcessor(),\n this.buildResetProcessor(),\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const registry = context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n const pluginCategories = resolveConfigurationCategories(registry);\n await this.showMainMenu(context, pluginCategories);\n }\n\n async initialize(context: ICliExecutionContext): Promise<void> {\n const state = context.state.getState<ConfigureState>();\n\n if (state?.system) {\n this.applySystemSettings(state.system, context);\n }\n }\n\n writeDescription?(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n\n writer.writeln(\n t.t('cli.configure.long_description', 'Manage system and plugin configuration interactively or via subcommands'),\n );\n writer.writeln();\n writer.writeln(t.t('cli.common.usage', 'Usage:'));\n writer.writeln(\n ` ${writer.wrapInColor('configure', CliForegroundColor.Cyan)} ${t.t('cli.configure.open_menu', 'Open interactive configuration menu')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('configure list', CliForegroundColor.Cyan)} ${t.t('cli.configure.list_opts', 'List all configuration options')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('configure get <category.key>', CliForegroundColor.Cyan)} ${t.t('cli.configure.get_value', 'Get a configuration value')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('configure set <category.key> <value>', CliForegroundColor.Cyan)} ${t.t('cli.configure.set_value', 'Set a configuration value')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('configure reset [category]', CliForegroundColor.Cyan)} ${t.t('cli.configure.reset_defaults', 'Reset configuration to defaults')}`,\n );\n writer.writeln();\n writer.writeln(t.t('cli.common.examples', 'Examples:'));\n writer.writeln(\n ` configure get system.logLevel ${writer.wrapInColor('# Get the current log level', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` configure set system.logLevel Debug ${writer.wrapInColor('# Set log level to Debug', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` configure set system.welcomeMessage never ${writer.wrapInColor('# Disable welcome message', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` configure reset system ${writer.wrapInColor('# Reset system config to defaults', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` configure reset ${writer.wrapInColor('# Reset all configuration', CliForegroundColor.Green)}`,\n );\n }\n\n // ── Interactive menus ───────────────────────────────────────────────\n\n private async showMainMenu(\n context: ICliExecutionContext,\n pluginCategories: Map<\n string,\n { processorCommand: string; options: ICliConfigurationOption[] }\n >,\n ): Promise<void> {\n const t = context.translator;\n while (true) {\n const menuOptions: { label: string; value: string }[] = [\n { label: t.t('cli.configure.system', 'System'), value: 'system' },\n ];\n\n for (const [category] of pluginCategories) {\n menuOptions.push({\n label: category.charAt(0).toUpperCase() + category.slice(1),\n value: category,\n });\n }\n\n menuOptions.push({ label: t.t('cli.configure.exit', 'Exit'), value: '__exit__' });\n\n const selected = await context.reader.readSelect(\n 'Configuration categories:',\n menuOptions,\n );\n\n if (selected === null || selected === '__exit__') {\n return;\n }\n\n if (selected === 'system') {\n await this.showCategoryMenu(\n context,\n 'System',\n 'system',\n SYSTEM_OPTIONS,\n );\n } else {\n const cat = pluginCategories.get(selected);\n if (cat) {\n await this.showCategoryMenu(\n context,\n selected,\n selected,\n cat.options,\n );\n }\n }\n }\n }\n\n private async showCategoryMenu(\n context: ICliExecutionContext,\n label: string,\n stateKey: string,\n options: ICliConfigurationOption[],\n ): Promise<void> {\n // Dynamically populate language options from available locales\n if (stateKey === 'system') {\n const langOption = options.find(o => o.key === 'language');\n if (langOption) {\n try {\n const translator = context.services.get<ICliTranslationService>(\n ICliTranslationService_TOKEN,\n );\n const locales = translator.getAvailableLocales();\n if (locales.length > 0) {\n langOption.options = locales.map(l => ({\n label: this.getLanguageLabel(l),\n value: l,\n }));\n }\n } catch {\n // ignore\n }\n }\n }\n\n while (true) {\n const menuOptions: { label: string; value: string }[] = [];\n\n for (const opt of options) {\n const currentValue = this.getConfigValue(\n context,\n stateKey,\n opt.key,\n opt.defaultValue,\n );\n const display = `${opt.label.padEnd(25)} [${currentValue}]`;\n menuOptions.push({ label: display, value: opt.key });\n }\n\n menuOptions.push({ label: context.translator.t('cli.configure.back', 'Back'), value: '__back__' });\n\n const selected = await context.reader.readSelect(\n `${label} settings:`,\n menuOptions,\n );\n\n if (selected === null || selected === '__back__') {\n return;\n }\n\n const option = options.find((o) => o.key === selected);\n if (option) {\n await this.editOption(context, stateKey, option);\n }\n }\n }\n\n private async editOption(\n context: ICliExecutionContext,\n stateKey: string,\n option: ICliConfigurationOption,\n ): Promise<void> {\n const currentValue = this.getConfigValue(\n context,\n stateKey,\n option.key,\n option.defaultValue,\n );\n\n context.writer.writeln();\n context.writer.writeln(\n `${context.writer.wrapInColor(option.label, CliForegroundColor.Cyan)}: ${option.description}`,\n );\n context.writer.writeln(\n ` ${context.translator.t('cli.configure.current_value', 'Current value:')} ${context.writer.wrapInColor(String(currentValue), CliForegroundColor.Yellow)}`,\n );\n context.writer.writeln();\n\n let newValue: any = null;\n\n switch (option.type) {\n case 'select': {\n if (!option.options) break;\n const selectOptions = option.options.map((o) => ({\n label:\n o.value === currentValue\n ? `${o.label} (current)`\n : o.label,\n value: o.value,\n }));\n newValue = await context.reader.readSelect(\n 'Select a value:',\n selectOptions,\n );\n break;\n }\n case 'boolean': {\n newValue = await context.reader.readConfirm(\n `${option.label}?`,\n currentValue === true,\n );\n break;\n }\n case 'number': {\n newValue = await context.reader.readNumber(\n `${option.label}: `,\n {\n default:\n typeof currentValue === 'number'\n ? currentValue\n : undefined,\n },\n );\n break;\n }\n case 'string': {\n newValue = await context.reader.readLine(\n `${option.label} [${currentValue}]: `,\n );\n if (newValue === '') {\n newValue = currentValue;\n }\n break;\n }\n }\n\n if (newValue === null) {\n return;\n }\n\n // Validate if validator is defined\n if (option.validator) {\n const result = option.validator(newValue);\n if (!result.valid) {\n context.writer.writeError(result.message || context.translator.t('cli.configure.invalid_value', 'Invalid value'));\n return;\n }\n }\n\n this.setConfigValue(context, stateKey, option.key, newValue);\n await context.state.persist();\n\n context.writer.writeSuccess(\n context.translator.t('cli.configure.set_to', 'Set {label} to {value}', { label: option.label, value: String(newValue) }),\n );\n }\n\n // ── State helpers ───────────────────────────────────────────────────\n\n private setConfigValue(\n context: ICliExecutionContext,\n stateKey: string,\n key: string,\n value: any,\n ): void {\n const state = context.state.getState<ConfigureState>();\n\n if (stateKey === 'system') {\n state.system = { ...state.system, [key]: value };\n context.state.updateState({ system: state.system });\n this.applySystemSettings(state.system, context);\n } else {\n const pluginState = state.plugins[stateKey] || {};\n state.plugins = {\n ...state.plugins,\n [stateKey]: { ...pluginState, [key]: value },\n };\n context.state.updateState({ plugins: state.plugins });\n }\n }\n\n private getConfigValue(\n context: ICliExecutionContext,\n stateKey: string,\n key: string,\n defaultValue: any,\n ): any {\n const state = context.state.getState<ConfigureState>();\n\n if (stateKey === 'system') {\n return state?.system?.[key] ?? defaultValue;\n }\n\n return state?.plugins?.[stateKey]?.[key] ?? defaultValue;\n }\n\n private getAllOptions(\n registry: ICliCommandProcessorRegistry,\n ): { stateKey: string; option: ICliConfigurationOption }[] {\n const result: { stateKey: string; option: ICliConfigurationOption }[] =\n [];\n\n // System options first\n for (const option of SYSTEM_OPTIONS) {\n result.push({ stateKey: 'system', option });\n }\n\n // Plugin options\n const categories = resolveConfigurationCategories(registry);\n for (const [category, { options }] of categories) {\n for (const option of options) {\n result.push({ stateKey: category, option });\n }\n }\n\n return result;\n }\n\n private applySystemSettings(\n settings: Record<string, any>,\n context: ICliExecutionContext,\n ): void {\n // Apply log level\n if (settings['logLevel']) {\n const level = LOG_LEVEL_MAP[settings['logLevel']];\n if (level !== undefined) {\n context.logger.setCliLogLevel(level);\n }\n }\n\n // Apply language\n if (settings['language']) {\n try {\n const translator = context.services.get<ICliTranslationService>(\n ICliTranslationService_TOKEN,\n );\n translator.setLocale(settings['language']);\n } catch {\n // Translation service not available yet during early boot\n }\n }\n\n // Welcome message setting is persisted in state and read\n // directly by the welcome module on next boot — no runtime\n // mutation needed here.\n }\n\n // ── Child processor builders ────────────────────────────────────────\n\n private buildListProcessor(): ICliCommandProcessor {\n return {\n command: 'list',\n aliases: ['ls'],\n description:\n 'List all configuration options and their current values',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const registry =\n context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n const allOptions = this.getAllOptions(registry);\n\n let currentCategory = '';\n const output: Record<string, Record<string, any>> = {};\n\n for (const { stateKey, option } of allOptions) {\n const value = this.getConfigValue(\n context,\n stateKey,\n option.key,\n option.defaultValue,\n );\n\n if (stateKey !== currentCategory) {\n currentCategory = stateKey;\n const header =\n stateKey === 'system' ? 'System' : stateKey;\n context.writer.writeln();\n context.writer.writeln(\n context.writer.wrapInColor(\n ` ${header}`,\n CliForegroundColor.Cyan,\n ),\n );\n context.writer.writeln(\n context.writer.wrapInColor(\n ` ${'─'.repeat(40)}`,\n CliForegroundColor.Cyan,\n ),\n );\n }\n\n const keyDisplay = `${stateKey}.${option.key}`.padEnd(30);\n const valueDisplay = context.writer.wrapInColor(\n String(value),\n CliForegroundColor.Yellow,\n );\n context.writer.writeln(` ${keyDisplay} ${valueDisplay}`);\n\n if (!output[stateKey]) {\n output[stateKey] = {};\n }\n output[stateKey][option.key] = value;\n }\n\n context.writer.writeln();\n context.process.output(output);\n },\n };\n }\n\n private buildGetProcessor(): ICliCommandProcessor {\n return {\n command: 'get',\n description:\n 'Get a configuration value (e.g. configure get system.logLevel)',\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const path = command.value!;\n const dotIndex = path.indexOf('.');\n\n if (dotIndex === -1) {\n context.writer.writeError(\n context.translator.t('cli.configure.invalid_format_get', 'Invalid format. Use: configure get <category.key>'),\n );\n return;\n }\n\n const category = path.substring(0, dotIndex);\n const key = path.substring(dotIndex + 1);\n\n const registry =\n context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n const allOptions = this.getAllOptions(registry);\n const match = allOptions.find(\n (o) => o.stateKey === category && o.option.key === key,\n );\n\n if (!match) {\n context.writer.writeError(\n context.translator.t('cli.configure.unknown_key', 'Unknown configuration key: {path}', { path }),\n );\n return;\n }\n\n const value = this.getConfigValue(\n context,\n category,\n key,\n match.option.defaultValue,\n );\n\n context.writer.writeln(\n `${context.writer.wrapInColor(path, CliForegroundColor.Cyan)} = ${context.writer.wrapInColor(String(value), CliForegroundColor.Yellow)}`,\n );\n context.process.output(value);\n },\n };\n }\n\n private buildSetProcessor(): ICliCommandProcessor {\n return {\n command: 'set',\n description:\n 'Set a configuration value (e.g. configure set system.logLevel Debug)',\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const raw = command.value!;\n const spaceIndex = raw.indexOf(' ');\n\n if (spaceIndex === -1) {\n context.writer.writeError(\n context.translator.t('cli.configure.invalid_format_set', 'Invalid format. Use: configure set <category.key> <value>'),\n );\n return;\n }\n\n const path = raw.substring(0, spaceIndex);\n const rawValue = raw.substring(spaceIndex + 1).trim();\n const dotIndex = path.indexOf('.');\n\n if (dotIndex === -1) {\n context.writer.writeError(\n context.translator.t('cli.configure.invalid_format_set', 'Invalid format. Use: configure set <category.key> <value>'),\n );\n return;\n }\n\n const category = path.substring(0, dotIndex);\n const key = path.substring(dotIndex + 1);\n\n const registry =\n context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n const allOptions = this.getAllOptions(registry);\n const match = allOptions.find(\n (o) => o.stateKey === category && o.option.key === key,\n );\n\n if (!match) {\n context.writer.writeError(\n context.translator.t('cli.configure.unknown_key', 'Unknown configuration key: {path}', { path }),\n );\n return;\n }\n\n // Coerce value based on type\n const coerceResult = this.coerceValue(rawValue, match.option, context.translator);\n if (coerceResult.error) {\n context.writer.writeError(coerceResult.error);\n return;\n }\n const coerced = coerceResult.value;\n\n // Validate if validator is defined\n if (match.option.validator) {\n const result = match.option.validator(coerced);\n if (!result.valid) {\n context.writer.writeError(\n result.message || `Invalid value for ${path}`,\n );\n return;\n }\n }\n\n this.setConfigValue(context, category, key, coerced);\n await context.state.persist();\n\n context.writer.writeSuccess(\n context.translator.t('cli.configure.set_success', 'Set {path} to {value}', { path, value: String(coerced) }),\n );\n },\n };\n }\n\n private buildResetProcessor(): ICliCommandProcessor {\n return {\n command: 'reset',\n description:\n 'Reset configuration to defaults (optionally for a specific category)',\n acceptsRawInput: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const t = context.translator;\n const category = command.value?.trim();\n\n if (category) {\n // Reset a specific category\n if (category === 'system') {\n const defaults =\n CliConfigureCommandProcessor.buildDefaults(\n SYSTEM_OPTIONS,\n );\n const state = context.state.getState<ConfigureState>();\n context.state.updateState({\n system: defaults,\n plugins: state.plugins,\n });\n this.applySystemSettings(defaults, context);\n await context.state.persist();\n context.writer.writeSuccess(\n t.t('cli.configure.system_reset', 'System configuration reset to defaults'),\n );\n } else {\n const registry =\n context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n const categories =\n resolveConfigurationCategories(registry);\n const cat = categories.get(category);\n\n if (!cat) {\n context.writer.writeError(\n t.t('cli.configure.unknown_category', 'Unknown category: {category}', { category }),\n );\n return;\n }\n\n const defaults =\n CliConfigureCommandProcessor.buildDefaults(\n cat.options,\n );\n\n const state = context.state.getState<ConfigureState>();\n const updatedPlugins = {\n ...state.plugins,\n [category]: defaults,\n };\n context.state.updateState({\n system: state.system,\n plugins: updatedPlugins,\n });\n await context.state.persist();\n context.writer.writeSuccess(\n t.t('cli.configure.category_reset', 'Configuration for \"{category}\" reset to defaults', { category }),\n );\n }\n } else {\n // Reset all\n const confirmed = await context.reader.readConfirm(\n t.t('cli.configure.reset_confirm', 'Reset all configuration to defaults?'),\n false,\n );\n\n if (!confirmed) {\n context.writer.writeInfo(t.t('cli.configure.reset_cancelled', 'Reset cancelled'));\n return;\n }\n\n context.state.reset();\n await context.state.persist();\n\n // Re-apply system defaults\n const defaults =\n CliConfigureCommandProcessor.buildDefaults(\n SYSTEM_OPTIONS,\n );\n this.applySystemSettings(defaults, context);\n\n context.writer.writeSuccess(\n t.t('cli.configure.all_reset', 'All configuration reset to defaults'),\n );\n }\n },\n };\n }\n\n // ── Helpers ─────────────────────────────────────────────────────────\n\n private coerceValue(\n rawValue: string,\n option: ICliConfigurationOption,\n translator: ICliExecutionContext['translator'],\n ): { value: any; error?: string } {\n switch (option.type) {\n case 'number': {\n const num = Number(rawValue);\n if (isNaN(num)) {\n return {\n value: null,\n error: translator.t('cli.configure.invalid_number', 'Invalid number: {value}', { value: rawValue }),\n };\n }\n return { value: num };\n }\n case 'boolean':\n return {\n value: ['true', '1', 'yes'].includes(\n rawValue.toLowerCase(),\n ),\n };\n case 'select':\n if (option.options) {\n const match = option.options.find(\n (o) =>\n String(o.value).toLowerCase() ===\n rawValue.toLowerCase(),\n );\n if (!match) {\n const validOptions = option.options.map((o) => o.value).join(', ');\n return {\n value: null,\n error: translator.t('cli.configure.invalid_options', 'Invalid value. Valid options: {options}', { options: validOptions }),\n };\n }\n return { value: match.value };\n }\n return { value: rawValue };\n default:\n return { value: rawValue };\n }\n }\n\n private getLanguageLabel(locale: string): string {\n const labels: Record<string, string> = {\n en: 'English',\n es: 'Español',\n fr: 'Français',\n de: 'Deutsch',\n pt: 'Português',\n it: 'Italiano',\n ja: '日本語',\n ko: '한국어',\n zh: '中文',\n ru: 'Русский',\n ar: 'العربية',\n ro: 'Română',\n };\n return labels[locale] || locale;\n }\n\n private static buildDefaults(\n options: ICliConfigurationOption[],\n ): Record<string, any> {\n return options.reduce(\n (acc, opt) => {\n acc[opt.key] = opt.defaultValue;\n return acc;\n },\n {} as Record<string, any>,\n );\n }\n}\n","import {\n ICliCommandProcessor,\n ICliCommandChildProcessor,\n ICliExecutionContext,\n CliProcessCommand,\n ICliCommandAuthor,\n CliProcessorMetadata,\n CliIcon,\n CliStateConfiguration,\n DefaultLibraryAuthor,\n CliForegroundColor,\n} from '@qodalis/cli-core';\n\ninterface SnippetState {\n snippets: Record<string, string>;\n}\n\nexport class CliSnippetCommandProcessor implements ICliCommandProcessor {\n command = 'snippet';\n description = 'Save and reuse parameterized command templates';\n aliases = ['snip'];\n author: ICliCommandAuthor = DefaultLibraryAuthor;\n metadata: CliProcessorMetadata = { icon: CliIcon.Code, module: 'system' };\n\n stateConfiguration: CliStateConfiguration = {\n storeName: 'snippets',\n initialState: { snippets: {} } as SnippetState,\n };\n\n processors: ICliCommandChildProcessor[] = [\n {\n command: 'list',\n description: 'List all saved snippets',\n processCommand: async (_: CliProcessCommand, context: ICliExecutionContext) => {\n const { snippets } = context.state.getState<SnippetState>();\n const entries = Object.entries(snippets);\n if (entries.length === 0) {\n context.writer.writeInfo('No snippets saved yet. Use: snippet save <name> \"<template>\"');\n return;\n }\n context.writer.writeln(\n context.writer.wrapInColor('Saved snippets:', CliForegroundColor.Yellow),\n );\n for (const [name, template] of entries) {\n context.writer.writeln(\n ` ${context.writer.wrapInColor(name, CliForegroundColor.Cyan)} ${template}`,\n );\n }\n },\n },\n {\n command: 'save',\n description: 'Save a new snippet: snippet save <name> \"<template>\"',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (cmd: CliProcessCommand, context: ICliExecutionContext) => {\n const raw = (cmd.value ?? '').trim();\n // Parse: first token is name, rest is template (with optional quotes)\n const spaceIdx = raw.indexOf(' ');\n if (spaceIdx === -1) {\n context.writer.writeError('Usage: snippet save <name> \"<template>\"');\n return;\n }\n const name = raw.slice(0, spaceIdx).trim();\n let template = raw.slice(spaceIdx + 1).trim();\n // Strip surrounding quotes if present\n if (\n (template.startsWith('\"') && template.endsWith('\"')) ||\n (template.startsWith(\"'\") && template.endsWith(\"'\"))\n ) {\n template = template.slice(1, -1);\n }\n if (!name || !template) {\n context.writer.writeError('Usage: snippet save <name> \"<template>\"');\n return;\n }\n const { snippets } = context.state.getState<SnippetState>();\n const updated = { ...snippets, [name]: template };\n context.state.updateState({ snippets: updated });\n await context.state.persist();\n context.writer.writeSuccess(`Snippet \"${name}\" saved`);\n },\n },\n {\n command: 'show',\n description: 'Show a snippet template: snippet show <name>',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (cmd: CliProcessCommand, context: ICliExecutionContext) => {\n const name = (cmd.value ?? '').trim();\n const { snippets } = context.state.getState<SnippetState>();\n if (!(name in snippets)) {\n context.writer.writeError(`Snippet \"${name}\" not found`);\n return;\n }\n context.writer.writeln(\n `${context.writer.wrapInColor(name, CliForegroundColor.Cyan)}: ${snippets[name]}`,\n );\n },\n },\n {\n command: 'delete',\n description: 'Delete a snippet: snippet delete <name>',\n aliases: ['rm', 'remove'],\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (cmd: CliProcessCommand, context: ICliExecutionContext) => {\n const name = (cmd.value ?? '').trim();\n const { snippets } = context.state.getState<SnippetState>();\n if (!(name in snippets)) {\n context.writer.writeError(`Snippet \"${name}\" not found`);\n return;\n }\n const updated = { ...snippets };\n delete updated[name];\n context.state.updateState({ snippets: updated });\n await context.state.persist();\n context.writer.writeSuccess(`Snippet \"${name}\" deleted`);\n },\n },\n {\n command: 'run',\n description: 'Run a snippet with variable values: snippet run <name> var1=val1 var2=val2',\n acceptsRawInput: true,\n valueRequired: true,\n processCommand: async (cmd: CliProcessCommand, context: ICliExecutionContext) => {\n const raw = (cmd.value ?? '').trim();\n const spaceIdx = raw.indexOf(' ');\n const name = spaceIdx === -1 ? raw : raw.slice(0, spaceIdx);\n const argsStr = spaceIdx === -1 ? '' : raw.slice(spaceIdx + 1).trim();\n\n const { snippets } = context.state.getState<SnippetState>();\n if (!(name in snippets)) {\n context.writer.writeError(`Snippet \"${name}\" not found`);\n return;\n }\n\n // Parse key=value pairs\n const vars: Record<string, string> = {};\n const varPattern = /(\\w+)=(?:\"([^\"]*)\"|([\\S]*))/g;\n let match: RegExpExecArray | null;\n while ((match = varPattern.exec(argsStr)) !== null) {\n vars[match[1]] = match[2] ?? match[3] ?? '';\n }\n\n // Replace {{var}} placeholders\n let resolved = snippets[name];\n for (const [key, value] of Object.entries(vars)) {\n resolved = resolved.replace(new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g'), value);\n }\n\n // Check for unresolved variables\n const missing = [...resolved.matchAll(/\\{\\{(\\w+)\\}\\}/g)].map((m) => m[1]);\n if (missing.length > 0) {\n context.writer.writeError(\n `Missing variables: ${missing.join(', ')}. Usage: snippet run ${name} ${missing.map((v) => `${v}=value`).join(' ')}`,\n );\n return;\n }\n\n context.writer.writeInfo(`Running: ${resolved}`);\n await context.executor.executeCommand(resolved, context);\n },\n },\n ];\n\n async processCommand(_: CliProcessCommand, context: ICliExecutionContext): Promise<void> {\n const { snippets } = context.state.getState<SnippetState>();\n const count = Object.keys(snippets).length;\n context.writer.writeln(\n `${count} snippet(s) saved. Sub-commands: list, save, show, run, delete`,\n );\n }\n}\n","export type DiffType = 'same' | 'add' | 'remove';\n\nexport interface DiffLine {\n type: DiffType;\n text: string;\n}\n\n/**\n * Compute line-by-line diff using LCS (longest common subsequence).\n */\nexport function computeDiff(left: string, right: string): DiffLine[] {\n const a = left === '' ? [] : left.split('\\n');\n const b = right === '' ? [] : right.split('\\n');\n const m = a.length;\n const n = b.length;\n\n // Build LCS table (bottom-up)\n const lcs: number[][] = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));\n for (let i = m - 1; i >= 0; i--) {\n for (let j = n - 1; j >= 0; j--) {\n lcs[i][j] = a[i] === b[j]\n ? 1 + lcs[i + 1][j + 1]\n : Math.max(lcs[i + 1][j], lcs[i][j + 1]);\n }\n }\n\n // Trace back\n const result: DiffLine[] = [];\n let i = 0, j = 0;\n while (i < m && j < n) {\n if (a[i] === b[j]) {\n result.push({ type: 'same', text: a[i++] });\n j++;\n } else if (lcs[i + 1][j] >= lcs[i][j + 1]) {\n result.push({ type: 'remove', text: a[i++] });\n } else {\n result.push({ type: 'add', text: b[j++] });\n }\n }\n while (i < m) result.push({ type: 'remove', text: a[i++] });\n while (j < n) result.push({ type: 'add', text: b[j++] });\n\n return result;\n}\n\n/**\n * Format diff with ANSI colors. Only shows lines near changes (contextLines around each change).\n */\nexport function formatDiff(lines: DiffLine[], contextLines = 3): string[] {\n const output: string[] = [];\n const changes = new Set<number>();\n lines.forEach((l, i) => { if (l.type !== 'same') changes.add(i); });\n\n const visible = new Set<number>();\n for (const idx of changes) {\n for (let k = Math.max(0, idx - contextLines); k <= Math.min(lines.length - 1, idx + contextLines); k++) {\n visible.add(k);\n }\n }\n\n let lastVisible = -1;\n for (let i = 0; i < lines.length; i++) {\n if (!visible.has(i)) continue;\n if (lastVisible !== -1 && i > lastVisible + 1) {\n output.push('\\x1b[2m...\\x1b[0m');\n }\n const { type, text } = lines[i];\n if (type === 'add') {\n output.push(`\\x1b[32m+ ${text}\\x1b[0m`);\n } else if (type === 'remove') {\n output.push(`\\x1b[31m- ${text}\\x1b[0m`);\n } else {\n output.push(`\\x1b[2m ${text}\\x1b[0m`);\n }\n lastVisible = i;\n }\n return output;\n}\n","import {\n ICliCommandProcessor,\n ICliExecutionContext,\n CliProcessCommand,\n ICliCommandAuthor,\n CliProcessorMetadata,\n CliIcon,\n DefaultLibraryAuthor,\n ICliCommandParameterDescriptor,\n} from '@qodalis/cli-core';\nimport { computeDiff, formatDiff } from './diff-utils';\n\nexport class CliDiffCommandProcessor implements ICliCommandProcessor {\n command = 'diff';\n description = 'Show colored diff between two text inputs';\n author: ICliCommandAuthor = DefaultLibraryAuthor;\n metadata: CliProcessorMetadata = { icon: CliIcon.Edit, module: 'system' };\n\n parameters: ICliCommandParameterDescriptor[] = [\n {\n name: 'b',\n description: 'Second text to compare',\n required: false,\n type: 'string',\n },\n {\n name: 'a',\n description: 'First text (alternative to pipe)',\n required: false,\n type: 'string',\n },\n {\n name: 'context',\n description: 'Number of context lines around changes (default: 3)',\n required: false,\n type: 'number',\n },\n ];\n\n async processCommand(command: CliProcessCommand, context: ICliExecutionContext): Promise<void> {\n // First text: from --a param or piped value\n const a = (command.args['a'] as string | undefined) ?? (command.value ?? '');\n const b = command.args['b'] as string | undefined;\n const rawContext = command.args?.['context'];\n const parsed = rawContext !== undefined ? parseInt(String(rawContext), 10) : NaN;\n const contextLines = Number.isFinite(parsed) && parsed >= 0 ? parsed : 3;\n\n if (b === undefined) {\n context.writer.writeError(\n 'Usage: diff --a \"text1\" --b \"text2\"\\n' +\n ' echo \"text1\" | diff --b \"text2\"',\n );\n return;\n }\n\n const diffLines = computeDiff(a, b);\n const hasChanges = diffLines.some((l) => l.type !== 'same');\n\n if (!hasChanges) {\n context.writer.writeSuccess('No differences found');\n return;\n }\n\n const added = diffLines.filter((l) => l.type === 'add').length;\n const removed = diffLines.filter((l) => l.type === 'remove').length;\n context.writer.writeln(`\\x1b[32m+${added} added\\x1b[0m \\x1b[31m-${removed} removed\\x1b[0m`);\n context.writer.writeln('');\n\n const formatted = formatDiff(diffLines, contextLines);\n for (const line of formatted) {\n context.writer.writeln(line);\n }\n }\n}\n","import {\n ICliExecutionContext,\n CliProcessCommand,\n ICliCommandProcessor,\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';\n\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst RESET = '\\x1b[0m';\n\nexport class CliHelpCommandProcessor implements ICliCommandProcessor {\n command = 'help';\n\n aliases = ['man'];\n\n description = 'Displays help for a command';\n\n acceptsRawInput?: 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 async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const { writer } = context;\n const t = context.translator;\n const registry = context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n\n const [_, ...commandsToHelp] = command.command.split(' ');\n\n if (commandsToHelp.length === 0) {\n await context.executor.executeCommand('version', context);\n\n const groupedCommands = groupBy<ICliCommandProcessor, string>(\n registry.processors.filter((p) => !p.metadata?.hidden),\n (x) => x.metadata?.module || 'uncategorized',\n );\n\n const sortedModules = [...groupedCommands.entries()].sort(\n ([a], [b]) => {\n if (a === 'uncategorized') return 1;\n if (b === 'uncategorized') return -1;\n return 0;\n },\n );\n\n sortedModules.forEach(([module, processors]) => {\n const displayName = this.formatModuleName(module);\n writer.writeln(\n ` ${BOLD}${writer.wrapInColor(displayName, CliForegroundColor.Yellow)}${RESET}`,\n );\n\n processors.forEach((processor) => {\n const icon = processor?.metadata?.icon || CliIcon.Extension;\n const name = writer.wrapInColor(\n processor.command.padEnd(20),\n CliForegroundColor.Cyan,\n );\n const aliasText = processor.aliases?.length\n ? `${DIM} ${processor.aliases.join(', ')}${RESET}`\n : '';\n const desc = this.translateDescription(\n processor.description,\n processor.command,\n context,\n );\n writer.writeln(` ${icon} ${name} ${desc}${aliasText}`);\n });\n\n writer.writeln();\n });\n\n writer.writeln(\n ` ${BOLD}${writer.wrapInColor(t.t('cli.help.shortcuts', 'Shortcuts'), CliForegroundColor.Yellow)}${RESET}`,\n );\n await context.executor.executeCommand('hotkeys', context);\n\n writer.writeln();\n writer.writeln(\n ` ${DIM}${t.t('cli.help.type', 'Type')}${RESET} ${writer.wrapInColor(t.t('cli.help.help_command', 'help <command>'), CliForegroundColor.Cyan)} ${DIM}${t.t('cli.help.for_details', 'for detailed information')}${RESET}`,\n );\n } else {\n const processor = registry.findProcessor(\n commandsToHelp[0],\n commandsToHelp.slice(1),\n );\n\n if (processor) {\n this.writeProcessorDescription(processor, context);\n } else {\n writer.writeError(t.t('cli.help.unknown_command', 'Unknown command: {command}', { command: commandsToHelp[0] }));\n writer.writeln();\n writer.writeln(\n ` ${DIM}${t.t('cli.help.type', 'Type')}${RESET} ${writer.wrapInColor('help', CliForegroundColor.Cyan)} ${DIM}${t.t('cli.help.see_all', 'to see all available commands')}${RESET}`,\n );\n }\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n const t = context.translator;\n writer.writeln(t.t('cli.help.long_description', 'Displays help information for commands'));\n writer.writeln();\n writer.writeln(\n writer.wrapInColor(t.t('cli.common.usage', 'Usage:'), CliForegroundColor.Yellow),\n );\n writer.writeln(\n ` ${writer.wrapInColor('help', CliForegroundColor.Cyan)} ${t.t('cli.help.show_all', 'Show all available commands')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('help <command>', CliForegroundColor.Cyan)} ${t.t('cli.help.show_details', 'Show details for a command')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('help <command> <sub>', CliForegroundColor.Cyan)} ${t.t('cli.help.show_sub_details', 'Show details for a subcommand')}`,\n );\n writer.writeln();\n writer.writeln(\n writer.wrapInColor(t.t('cli.common.examples', 'Examples:'), CliForegroundColor.Yellow),\n );\n writer.writeln(\n ` help pkg ${DIM}# ${t.t('cli.help.example_pkg', 'Package manager help')}${RESET}`,\n );\n writer.writeln(\n ` help theme apply ${DIM}# ${t.t('cli.help.example_theme', 'Theme apply subcommand help')}${RESET}`,\n );\n }\n\n private translateDescription(\n description: string | undefined,\n processorCommand: string,\n context: ICliExecutionContext,\n ): string {\n if (!description) return '';\n return context.translator.t(\n `cli.${processorCommand}.description`,\n description,\n );\n }\n\n private writeProcessorDescription(\n processor: ICliCommandProcessor,\n context: ICliExecutionContext,\n ) {\n const { writer } = context;\n const t = context.translator;\n\n // ── Header ───────────────────────────────────────────────\n const icon = processor.metadata?.icon || '';\n const name = `${BOLD}${writer.wrapInColor(processor.command, CliForegroundColor.Cyan)}${RESET}`;\n const version = `${DIM}v${processor.version || '1.0.0'}${RESET}`;\n\n writer.writeln();\n writer.writeln(` ${icon}${icon ? ' ' : ''}${name} ${version}`);\n\n if (processor.description) {\n const desc = this.translateDescription(\n processor.description,\n processor.command,\n context,\n );\n writer.writeln(` ${desc}`);\n }\n\n if (processor.aliases?.length) {\n writer.writeln(\n ` ${DIM}${t.t('cli.help.aliases', 'Aliases:')}${RESET} ${processor.aliases.map((a: string) => writer.wrapInColor(a, CliForegroundColor.Magenta)).join(', ')}`,\n );\n }\n\n // ── Extension chain ──────────────────────────────────────\n if (processor.originalProcessor) {\n writer.writeln();\n writer.writeln(\n ` ${BOLD}${writer.wrapInColor(t.t('cli.help.extension_chain', 'Extension chain'), CliForegroundColor.Yellow)}${RESET}`,\n );\n let current = processor.originalProcessor;\n let depth = 1;\n while (current) {\n const module = current.metadata?.module || 'unknown';\n const ver = current.version || '1.0.0';\n writer.writeln(\n ` ${'└'.padStart(depth + 1, ' ')} ${writer.wrapInColor(current.command, CliForegroundColor.Cyan)} ${DIM}v${ver}${RESET} ${DIM}(${module})${RESET}`,\n );\n current = current.originalProcessor!;\n depth++;\n }\n }\n\n // ── Description ──────────────────────────────────────────\n if (processor.writeDescription) {\n writer.writeln();\n processor.writeDescription(context);\n }\n\n // ── Subcommands ──────────────────────────────────────────\n if (processor.processors?.length) {\n writer.writeln();\n writer.writeln(\n ` ${BOLD}${writer.wrapInColor(t.t('cli.help.subcommands', 'Subcommands'), CliForegroundColor.Yellow)}${RESET}`,\n );\n\n processor.processors.forEach((sub) => {\n const subName = writer.wrapInColor(\n sub.command.padEnd(16),\n CliForegroundColor.Cyan,\n );\n const subAliases = sub.aliases?.length\n ? `${DIM} (${sub.aliases.join(', ')})${RESET}`\n : '';\n const subDesc = this.translateDescription(\n sub.description,\n `${processor.command}.${sub.command}`,\n context,\n );\n writer.writeln(\n ` ${subName} ${subDesc}${subAliases}`,\n );\n });\n }\n\n // ── Parameters ───────────────────────────────────────────\n const commandParams = processor.parameters || [];\n const globalParams = context.executor.getGlobalParameters();\n\n if (commandParams.length > 0) {\n writer.writeln();\n writer.writeln(\n ` ${BOLD}${writer.wrapInColor(t.t('cli.help.options', 'Options'), CliForegroundColor.Yellow)}${RESET}`,\n );\n\n commandParams.forEach((param) => {\n this.writeParameter(param, writer, t);\n });\n }\n\n if (globalParams.length > 0) {\n writer.writeln();\n writer.writeln(\n ` ${BOLD}${writer.wrapInColor(t.t('cli.help.global_options', 'Global options'), CliForegroundColor.Yellow)}${RESET}`,\n );\n\n globalParams.forEach((param) => {\n this.writeParameter(param, writer, t);\n });\n }\n\n // ── Server notice ────────────────────────────────────────\n if (processor.metadata?.requireServer) {\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor(t.t('cli.help.requires_server', 'Requires a connected server'), CliForegroundColor.Red)}`,\n );\n }\n\n writer.writeln();\n }\n\n private formatModuleName(module: string): string {\n // @qodalis/cli-server → Server\n if (module.startsWith('@qodalis/cli-')) {\n const name = module.replace('@qodalis/cli-', '');\n return name.charAt(0).toUpperCase() + name.slice(1);\n }\n // server:myhost → Server (myhost)\n if (module.startsWith('server:')) {\n const name = module.substring(7);\n return `Server (${name})`;\n }\n // system → System, misc → Misc\n return module.charAt(0).toUpperCase() + module.slice(1);\n }\n\n private writeParameter(\n param: { name: string; aliases?: string[]; type: string; description: string; required: boolean; defaultValue?: any },\n writer: ICliExecutionContext['writer'],\n translator: ICliExecutionContext['translator'],\n ) {\n const aliases = param.aliases?.length\n ? `, ${param.aliases.map((a) => `-${a}`).join(', ')}`\n : '';\n const nameStr = writer.wrapInColor(\n `--${param.name}${aliases}`,\n CliForegroundColor.Cyan,\n );\n const typeStr = `${DIM}<${param.type}>${RESET}`;\n const required = param.required\n ? writer.wrapInColor(` ${translator.t('cli.help.required', '(required)')}`, CliForegroundColor.Red)\n : '';\n const defaultVal =\n param.defaultValue !== undefined && !param.required\n ? `${DIM} [${param.defaultValue}]${RESET}`\n : '';\n writer.writeln(\n ` ${nameStr} ${typeStr} ${param.description}${required}${defaultVal}`,\n );\n }\n}\n","const CLi_Name_Art_Full = `\n ____ _ _ _ _____ _ _____\n / __ \\\\ | | | (_) / ____| | |_ _|\n | | | | ___ __| | __ _| |_ ___ | | | | | |\n | | | |/ _ \\\\ / _\\` |/ _\\` | | / __| | | | | | |\n | |__| | (_) | (_| | (_| | | \\\\__ \\\\ | |____| |____ _| |_\n \\\\___\\\\_\\\\\\\\___/ \\\\__,_|\\\\__,_|_|_|___/ \\\\_____|______|_____|\n`;\n\nconst CLi_Name_Art_Compact = `\n ___ _ _ _\n / _ \\\\ ___ __| |__ _| (_)___\n| (_) / _ \\\\/ _\\` / _\\` | | (_-<\n \\\\__\\\\_\\\\___/\\\\__,_\\\\__,_|_|_/__/ CLI\n`;\n\nexport const getCliNameArt = (cols: number): string => {\n if (cols >= 60) {\n return CLi_Name_Art_Full;\n }\n if (cols >= 35) {\n return CLi_Name_Art_Compact;\n }\n return '\\n Qodalis CLI\\n';\n};\n\n/** @deprecated Use getCliNameArt(cols) instead */\nexport const CLi_Name_Art = CLi_Name_Art_Full;\n\nexport const hotkeysInfo = [\n {\n key: 'Ctrl + C',\n description: 'Cancel command or copy selection',\n },\n {\n key: 'Ctrl + V',\n description: 'Paste from clipboard',\n },\n {\n key: 'Ctrl + L',\n description: 'Clear the terminal screen',\n },\n {\n key: '↑ / ↓',\n description: 'Navigate command history',\n },\n {\n key: 'Tab',\n description: 'Autocomplete command',\n },\n];\n","import {\n ICliExecutionContext,\n CliProcessCommand,\n ICliCommandProcessor,\n ICliCommandAuthor,\n CliProcessorMetadata,\n CliIcon,\n CliForegroundColor,\n LIBRARY_VERSION as CORE_VERSION,\n} from '@qodalis/cli-core';\n\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../../version';\nimport { getCliNameArt } from '../../constants';\n\nconst BOLD = '\\x1b[1m';\nconst DIM = '\\x1b[2m';\nconst RESET = '\\x1b[0m';\n\nexport class CliVersionCommandProcessor implements ICliCommandProcessor {\n command = 'version';\n\n aliases = ['ver'];\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 context: ICliExecutionContext,\n ): Promise<void> {\n const { writer } = context;\n\n writer.writeln(\n writer.wrapInColor(getCliNameArt(context.terminal.cols), CliForegroundColor.Cyan),\n );\n\n writer.writeln(\n ` ${DIM}CLI${RESET} ${writer.wrapInColor(`v${LIBRARY_VERSION}`, CliForegroundColor.Green)} ${DIM}Core${RESET} ${writer.wrapInColor(`v${CORE_VERSION}`, CliForegroundColor.Green)}`,\n );\n\n let framework = 'vanilla';\n try {\n framework = context.services.get<string>('cli-framework');\n } catch {\n // no framework registered — standalone usage\n }\n writer.writeln(\n ` ${DIM}Framework${RESET} ${writer.wrapInColor(framework, CliForegroundColor.Cyan)}`,\n );\n\n writer.writeln(\n ` ${DIM}Docs${RESET} ${writer.wrapInColor('https://cli.qodalis.com/docs/', CliForegroundColor.Blue)}`,\n );\n\n writer.writeln();\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.version.long_description', 'Prints the current version of the CLI and documentation link'),\n );\n writer.writeln();\n writer.writeln(\n writer.wrapInColor(t.t('cli.common.usage', 'Usage:'), CliForegroundColor.Yellow),\n );\n writer.writeln(\n ` ${writer.wrapInColor('version', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(\n ` ${DIM}Docs${RESET} ${writer.wrapInColor('https://cli.qodalis.com/docs/', CliForegroundColor.Blue)}`,\n );\n }\n}\n","import {\n ICliExecutionContext,\n CliProcessCommand,\n ICliCommandProcessor,\n ICliCommandAuthor,\n CliProcessorMetadata,\n CliIcon,\n ICliCommandChildProcessor,\n CliForegroundColor,\n LIBRARY_VERSION as CORE_VERSION,\n} from '@qodalis/cli-core';\n\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { LIBRARY_VERSION as CLI_VERSION } from '../../version';\nimport { openLink } from '../../utils';\n\nconst githubUrl = 'https://github.com/qodalis-solutions/web-cli';\n\ninterface FeedbackType {\n command: string;\n label: string;\n icon: string;\n description: string;\n gitHubLabel: string;\n gitHubTemplate: string;\n titlePrompt: string;\n descriptionPrompt: string;\n}\n\nconst feedbackTypes: FeedbackType[] = [\n {\n command: 'report-bug',\n label: '🐞 Report a Bug',\n icon: '🐞',\n description: 'Reports a bug on GitHub',\n gitHubLabel: 'bug',\n gitHubTemplate: 'bug_report.md',\n titlePrompt: 'Bug title: ',\n descriptionPrompt: 'Describe the bug (what happened vs what you expected): ',\n },\n {\n command: 'request-feature',\n label: '✨ Request a Feature',\n icon: '✨',\n description: 'Requests a new feature on GitHub',\n gitHubLabel: 'feature-request',\n gitHubTemplate: 'feature_request.md',\n titlePrompt: 'Feature title: ',\n descriptionPrompt: 'Describe the feature you would like: ',\n },\n {\n command: 'request-command',\n label: '🧩 Request a Command',\n icon: '🧩',\n description: 'Requests a new command on GitHub',\n gitHubLabel: 'command-request',\n gitHubTemplate: 'command-request.md',\n titlePrompt: 'Command name or title: ',\n descriptionPrompt: 'Describe what the command should do: ',\n },\n];\n\nfunction collectSystemInfo(context: ICliExecutionContext): string {\n const lines: string[] = [];\n\n lines.push(`- **CLI Version:** ${CLI_VERSION}`);\n lines.push(`- **Core Version:** ${CORE_VERSION}`);\n\n let framework = 'vanilla';\n try {\n framework = context.services.get<string>('cli-framework');\n } catch {\n // standalone usage\n }\n lines.push(`- **Framework:** ${framework}`);\n lines.push(`- **Terminal:** ${context.terminal.cols}x${context.terminal.rows}`);\n\n if (typeof navigator !== 'undefined') {\n lines.push(`- **Browser:** ${navigator.userAgent}`);\n lines.push(`- **Language:** ${navigator.language}`);\n lines.push(`- **Platform:** ${navigator.platform}`);\n lines.push(`- **Online:** ${navigator.onLine}`);\n }\n\n if (typeof screen !== 'undefined') {\n lines.push(`- **Screen:** ${screen.width}x${screen.height}`);\n }\n\n return lines.join('\\n');\n}\n\nfunction buildIssueBody(\n description: string | undefined,\n systemInfo: string,\n): string {\n const sections: string[] = [];\n\n if (description) {\n sections.push(`## Description\\n\\n${description}`);\n }\n\n sections.push(`## System Info\\n\\n${systemInfo}`);\n\n return sections.join('\\n\\n');\n}\n\nfunction buildGitHubUrl(type: FeedbackType, title: string, body: string): string {\n const params = new URLSearchParams();\n params.set('labels', type.gitHubLabel);\n params.set('template', type.gitHubTemplate);\n params.set('title', title);\n params.set('body', body);\n return `${githubUrl}/issues/new?${params.toString()}`;\n}\n\nasync function runInteractiveFlow(\n type: FeedbackType,\n initialTitle: string | undefined,\n context: ICliExecutionContext,\n): Promise<void> {\n const { writer, reader } = context;\n\n // Step 1: Get title\n let title = initialTitle?.trim();\n if (!title) {\n title = await reader.readLine(type.titlePrompt) ?? undefined;\n if (!title?.trim()) {\n writer.writeInfo('Feedback cancelled.');\n return;\n }\n title = title.trim();\n }\n\n // Step 2: Optional description\n writer.writeln();\n const addDescription = await reader.readConfirm(\n 'Add a description?',\n false,\n );\n\n let description: string | undefined;\n if (addDescription) {\n const desc = await reader.readLine(type.descriptionPrompt);\n if (desc?.trim()) {\n description = desc.trim();\n }\n }\n\n // Step 3: Collect system info\n const systemInfo = collectSystemInfo(context);\n\n // Step 4: Show summary and confirm\n writer.writeln();\n writer.writeln(\n `${writer.wrapInColor('── Summary ──', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(` Type: ${type.icon} ${type.command}`);\n writer.writeln(` Title: ${writer.wrapInColor(title, CliForegroundColor.White)}`);\n if (description) {\n writer.writeln(` Desc: ${description}`);\n }\n writer.writeln();\n writer.writeln(\n `${writer.wrapInColor('── System Info (auto-attached) ──', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(` CLI: ${CLI_VERSION} Core: ${CORE_VERSION}`);\n\n let framework = 'vanilla';\n try {\n framework = context.services.get<string>('cli-framework');\n } catch {\n // standalone\n }\n writer.writeln(` Framework: ${framework} Terminal: ${context.terminal.cols}x${context.terminal.rows}`);\n\n if (typeof navigator !== 'undefined') {\n writer.writeln(` Platform: ${navigator.platform} Language: ${navigator.language}`);\n }\n writer.writeln();\n\n const confirmed = await reader.readConfirm(\n 'Open on GitHub?',\n true,\n );\n\n if (!confirmed) {\n writer.writeInfo('Feedback cancelled.');\n return;\n }\n\n const body = buildIssueBody(description, systemInfo);\n const url = buildGitHubUrl(type, title, body);\n openLink(url);\n writer.writeln();\n writer.writeSuccess(\n `Opened ${type.command} on GitHub. Thank you for your feedback!`,\n );\n}\n\nexport class CliFeedbackCommandProcessor implements ICliCommandProcessor {\n command = 'feedback';\n\n aliases = ['support'];\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 for (const type of feedbackTypes) {\n this.processors?.push({\n command: type.command,\n description: type.description,\n acceptsRawInput: true,\n async processCommand(\n { value }: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n await runInteractiveFlow(type, value, context);\n },\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln(`${type.icon} ${type.description}`);\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor(`feedback ${type.command}`, CliForegroundColor.Cyan)} Interactive mode`,\n );\n writer.writeln(\n ` ${writer.wrapInColor(`feedback ${type.command} <title>`, CliForegroundColor.Cyan)} Provide title upfront`,\n );\n },\n });\n }\n }\n\n async processCommand(\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const { writer, reader } = context;\n\n writer.writeln('📣 What would you like to do?');\n writer.writeln();\n\n const options = feedbackTypes.map((t) => ({\n label: t.label,\n value: t.command,\n }));\n\n const selected = await reader.readSelect(\n 'Select feedback type:',\n options,\n );\n\n if (!selected) {\n writer.writeInfo('Feedback cancelled.');\n return;\n }\n\n const type = feedbackTypes.find((t) => t.command === selected);\n if (!type) {\n return;\n }\n\n writer.writeln();\n await runInteractiveFlow(type, undefined, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.feedback.long_description', 'Report bugs, request features, or suggest new commands — interactively or inline.'),\n );\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('feedback', CliForegroundColor.Cyan)} Interactive wizard`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('feedback report-bug', CliForegroundColor.Cyan)} 🐞 Report a bug`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('feedback report-bug <title>', CliForegroundColor.Cyan)} 🐞 Report with title`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('feedback request-feature', CliForegroundColor.Cyan)} ✨ Request a feature`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('feedback request-feature <title>', CliForegroundColor.Cyan)} ✨ Request with title`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('feedback request-command', CliForegroundColor.Cyan)} 🧩 Request a command`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('feedback request-command <title>', CliForegroundColor.Cyan)} 🧩 Request with title`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` feedback ${writer.wrapInColor('# Start interactive wizard', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` feedback report-bug \"Login page crashes\" ${writer.wrapInColor('# Opens bug report with title', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` feedback request-feature \"Dark mode support\" ${writer.wrapInColor('# Opens feature request with title', CliForegroundColor.Green)}`,\n );\n }\n}\n","import {\n ICliExecutionContext,\n CliProcessCommand,\n ICliCommandProcessor,\n ICliCommandAuthor,\n CliProcessorMetadata,\n CliIcon,\n CliForegroundColor,\n ICliCommandParameterDescriptor,\n} from '@qodalis/cli-core';\n\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { CliCommandHistory } from '../../services/cli-command-history';\nimport { CliCommandHistory_TOKEN } from '../../tokens';\n\nexport class CliHistoryCommandProcessor implements ICliCommandProcessor {\n command = 'history';\n\n aliases = ['hist'];\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 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 const commandHistory = context.services.get<CliCommandHistory>(\n CliCommandHistory_TOKEN,\n );\n await commandHistory.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 const searchParameters: ICliCommandParameterDescriptor[] = [\n {\n name: 'n',\n description: 'Maximum number of results to show',\n required: false,\n type: 'number',\n },\n ];\n\n this.processors?.push({\n command: 'search',\n description: 'Search command history for a pattern',\n parameters: searchParameters,\n processCommand: async (\n cmd: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const commandHistory = context.services.get<CliCommandHistory>(\n CliCommandHistory_TOKEN,\n );\n const query = (cmd.value ?? '').trim();\n const limit = (cmd.args?.['n'] as number) ?? 0;\n\n const matches = commandHistory.search(query);\n\n if (matches.length === 0) {\n context.writer.writeInfo(\n query\n ? `No history entries matching \"${query}\"`\n : '📜 No command history yet',\n );\n return;\n }\n\n const displayed = limit > 0 ? matches.slice(-limit) : matches;\n const startOffset =\n limit > 0 ? matches.length - displayed.length : 0;\n\n context.writer.writeln(\n context.writer.wrapInColor(\n `📜 ${matches.length} match${matches.length !== 1 ? 'es' : ''}${query ? ` for \"${query}\"` : ''}:`,\n CliForegroundColor.Yellow,\n ),\n );\n\n displayed.forEach((command, i) => {\n const globalIndex = startOffset + i;\n const highlighted = query\n ? command.replace(\n new RegExp(\n query.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'),\n 'gi',\n ),\n (m) =>\n context.writer.wrapInColor(\n m,\n CliForegroundColor.Cyan,\n ),\n )\n : command;\n context.writer.writeln(\n ` ${context.writer.wrapInColor(String(globalIndex + 1).padStart(3), CliForegroundColor.Yellow)} ${highlighted}`,\n );\n });\n },\n writeDescription: (context: ICliExecutionContext) => {\n context.writer.writeln(\n 'Search command history for a pattern (case-insensitive substring match)',\n );\n context.writer.writeln();\n context.writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n context.writer.writeln(\n ` ${context.writer.wrapInColor('history search git', CliForegroundColor.Cyan)} Show all history entries containing \"git\"`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('history search git --n 5', CliForegroundColor.Cyan)} Show last 5 matches`,\n );\n },\n });\n }\n\n async processCommand(\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const { writer } = context;\n const commandHistory = context.services.get<CliCommandHistory>(\n CliCommandHistory_TOKEN,\n );\n const history = commandHistory.getHistory();\n\n if (history.length === 0) {\n writer.writeInfo('📜 No command history yet');\n return;\n } else {\n writer.writeln(\n writer.wrapInColor(\n `📜 Command history (${history.length} entries):`,\n CliForegroundColor.Yellow,\n ),\n );\n history.forEach((command, index) => {\n writer.writeln(\n ` ${writer.wrapInColor(String(index + 1).padStart(3), CliForegroundColor.Yellow)} ${command}`,\n );\n });\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.history.long_description', 'Prints the command history of the current session'));\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('history', CliForegroundColor.Cyan)} ${t.t('cli.history.show', 'Show command history')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('history search <q>', CliForegroundColor.Cyan)} ${t.t('cli.history.search', 'Search history for pattern')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('history clear', CliForegroundColor.Cyan)} ${t.t('cli.history.clear', 'Clear all history')}`,\n );\n writer.writeln();\n writer.writeln(\n `💡 ${t.t('cli.history.arrow_hint', 'Use {keys} arrow keys to navigate through history', { keys: '↑/↓' })}`,\n );\n writer.writeln(\n `💡 ${t.t('cli.history.prefix_hint', 'Type a prefix then {key} to search history by prefix', { key: '↑' })}`,\n );\n }\n}\n","import {\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\nconst DIM = '\\x1b[2m';\nconst RESET = '\\x1b[0m';\n\nexport class CliHotKeysCommandProcessor implements ICliCommandProcessor {\n command = 'hotkeys';\n\n aliases = ['shortcuts', 'keys'];\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 const { writer } = context;\n\n hotkeysInfo.forEach((hotkey) => {\n writer.writeln(\n ` ${writer.wrapInColor(hotkey.key.padEnd(12), CliForegroundColor.Cyan)} ${DIM}${hotkey.description}${RESET}`,\n );\n });\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.hotkeys.long_description', 'Displays all available keyboard shortcuts and hotkeys'));\n writer.writeln();\n writer.writeln(\n writer.wrapInColor(t.t('cli.common.usage', 'Usage:'), CliForegroundColor.Yellow),\n );\n writer.writeln(\n ` ${writer.wrapInColor('hotkeys', CliForegroundColor.Cyan)}`,\n );\n }\n}\n","export type CdnSourceName = string;\n\nexport type SourceKind = 'registry' | 'file';\n\nexport interface SourceEntry {\n url: string;\n kind: SourceKind;\n}\n\nconst BUILTIN_SOURCES: Record<string, SourceEntry> = {\n unpkg: { url: 'https://unpkg.com/', kind: 'file' },\n jsdelivr: { url: 'https://cdn.jsdelivr.net/npm/', kind: 'file' },\n npm: { url: 'https://registry.npmjs.org/', kind: 'registry' },\n};\n\nexport class ScriptLoaderService {\n private sources: Map<string, SourceEntry> = new Map(\n Object.entries(BUILTIN_SOURCES),\n );\n private primary: string = 'unpkg';\n\n constructor() {}\n\n /**\n * Registers a custom package source.\n */\n addSource(name: string, url: string, kind: SourceKind = 'file'): void {\n // Ensure trailing slash\n this.sources.set(name, {\n url: url.endsWith('/') ? url : url + '/',\n kind,\n });\n }\n\n /**\n * Returns all registered source names.\n */\n getSources(): string[] {\n return Array.from(this.sources.keys());\n }\n\n /**\n * Returns the full source entry for a given name, or undefined if not found.\n */\n getSource(name: string): SourceEntry | undefined {\n return this.sources.get(name);\n }\n\n /**\n * Returns the base URL for a given source name, or undefined if not found.\n */\n getSourceUrl(name: string): string | undefined {\n return this.sources.get(name)?.url;\n }\n\n /**\n * Returns all sources of a given kind.\n */\n getSourcesByKind(kind: SourceKind): { name: string; url: string }[] {\n const result: { name: string; url: string }[] = [];\n for (const [name, entry] of this.sources) {\n if (entry.kind === kind) {\n result.push({ name, url: entry.url });\n }\n }\n return result;\n }\n\n /**\n * Sets the preferred CDN source. The other sources become fallbacks.\n */\n setCdnSource(preferred: CdnSourceName): void {\n if (this.sources.has(preferred)) {\n this.primary = preferred;\n }\n }\n\n /**\n * Returns the current preferred CDN source name.\n */\n getCdnSource(): CdnSourceName {\n return this.primary;\n }\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 signal?: AbortSignal;\n },\n ): Promise<{\n xhr: XMLHttpRequest;\n content?: string;\n error?: any;\n }> {\n const { onProgress, signal } = 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 if (signal) {\n if (signal.aborted) {\n reject(new Error('Aborted'));\n return;\n }\n\n signal.addEventListener('abort', () => {\n xhr.abort();\n reject(new Error('Aborted'));\n });\n }\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 /**\n * Returns CDN URLs for a given npm package path.\n * The first entry is the primary source, the rest are fallbacks.\n * Only includes 'file' kind sources (CDNs and file servers).\n */\n getCdnUrls(packagePath: string): string[] {\n const urls: string[] = [];\n const primaryEntry = this.sources.get(this.primary);\n if (primaryEntry && primaryEntry.kind === 'file') {\n urls.push(`${primaryEntry.url}${packagePath}`);\n }\n for (const [name, entry] of this.sources) {\n if (name !== this.primary && entry.kind === 'file') {\n urls.push(`${entry.url}${packagePath}`);\n }\n }\n return urls;\n }\n\n /**\n * Tries to fetch a script from multiple CDN sources, falling back on failure.\n */\n getScriptWithFallback(\n packagePath: string,\n options?: {\n onProgress?: (progress: number) => void;\n signal?: AbortSignal;\n },\n ): Promise<{\n xhr: XMLHttpRequest;\n content?: string;\n error?: any;\n }> {\n const urls = this.getCdnUrls(packagePath);\n return this.getScriptFromUrls(urls, options);\n }\n\n /**\n * Tries to inject a script tag from multiple CDN sources, falling back on failure.\n */\n injectScriptWithFallback(packagePath: string): Promise<void> {\n const urls = this.getCdnUrls(packagePath);\n return this.injectScriptFromUrls(urls);\n }\n\n private async getScriptFromUrls(\n urls: string[],\n options?: {\n onProgress?: (progress: number) => void;\n signal?: AbortSignal;\n },\n ): Promise<{\n xhr: XMLHttpRequest;\n content?: string;\n error?: any;\n }> {\n let lastError: any;\n for (const url of urls) {\n try {\n return await this.getScript(url, options);\n } catch (e: any) {\n if (e?.message === 'Aborted') throw e;\n lastError = e;\n }\n }\n throw lastError;\n }\n\n private async injectScriptFromUrls(urls: string[]): Promise<void> {\n let lastError: any;\n for (const url of urls) {\n try {\n return await this.injectScript(url);\n } catch (e) {\n lastError = e;\n }\n }\n throw lastError;\n }\n}\n","import { ICliKeyValueStore, Package } from '@qodalis/cli-core';\n\nexport class CliPackageManagerService {\n private readonly storageKey = 'cli-packages';\n\n public QODALIS_COMMAND_PREFIX = '@qodalis/cli-';\n\n private store!: ICliKeyValueStore;\n\n constructor() {}\n\n /**\n * Set the key-value store instance for persistence.\n */\n setStore(store: ICliKeyValueStore): void {\n this.store = store;\n }\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 */\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 */\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 */\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 */\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.\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 private async savePackages(packages: Package[]): Promise<void> {\n await this.store.set(this.storageKey, packages);\n }\n}\n","import {\n CliForegroundColor,\n CliProcessorMetadata,\n CliStateConfiguration,\n DefaultLibraryAuthor,\n ICliCommandProcessorRegistry,\n ICliKeyValueStore,\n} from '@qodalis/cli-core';\nimport {\n CliProcessCommand,\n ICliCommandProcessor,\n ICliExecutionContext,\n ICliUmdModule,\n Package,\n} from '@qodalis/cli-core';\nimport {\n CliPackageManagerService_TOKEN,\n CliProcessorsRegistry_TOKEN,\n} from '../../tokens';\nimport {\n CdnSourceName,\n ScriptLoaderService,\n SourceKind,\n} from '../../services/script-loader';\nimport { CliPackageManagerService } from '../../services/cli-package-manager';\n\nexport class CliPackagesCommandProcessor implements ICliCommandProcessor {\n readonly command = 'pkg';\n\n readonly aliases = ['packages'];\n\n description = 'Manage packages in the cli';\n\n author = DefaultLibraryAuthor;\n\n readonly version = '1.0.3';\n\n readonly processors?: ICliCommandProcessor[] | undefined = [];\n\n readonly metadata?: CliProcessorMetadata | undefined = {\n sealed: true,\n icon: '📦',\n module: 'system',\n };\n\n stateConfiguration?: CliStateConfiguration | undefined = {\n initialState: {\n cdnSource: 'unpkg',\n },\n };\n\n private registeredDependencies: string[] = [];\n private scriptsLoader!: ScriptLoaderService;\n private packagesManager!: CliPackageManagerService;\n private registry!: ICliCommandProcessorRegistry;\n\n private createAbortSignal(context: ICliExecutionContext): {\n signal: AbortSignal;\n cleanup: () => void;\n } {\n const controller = new AbortController();\n const subscription = context.onAbort.subscribe(() => {\n controller.abort();\n });\n\n return {\n signal: controller.signal,\n cleanup: () => subscription.unsubscribe(),\n };\n }\n\n constructor() {\n this.scriptsLoader = new ScriptLoaderService();\n this.packagesManager = new CliPackageManagerService();\n\n const scope = this;\n const scriptsLoader = this.scriptsLoader;\n const packagesManager = this.packagesManager;\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 if (packages.length === 0) {\n context.writer.writeInfo('📦 No packages installed');\n context.writer.writeln();\n context.writer.writeInfo(\n `💡 Use ${context.writer.wrapInColor('pkg add <name>', CliForegroundColor.Cyan)} to install a package`,\n );\n return;\n }\n\n context.writer.writeln(\n context.writer.wrapInColor(\n `📦 Installed packages (${packages.length}):`,\n CliForegroundColor.Yellow,\n ),\n );\n\n packages.forEach((pkg) => {\n context.writer.writeln(\n ` ${context.writer.wrapInColor(pkg.name, CliForegroundColor.Cyan)}@${context.writer.wrapInColor(pkg.version, CliForegroundColor.Green)}`,\n );\n });\n },\n writeDescription(context) {\n context.writer.writeln(\n 'List all installed packages and their versions',\n );\n context.writer.writeln();\n context.writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg ls', CliForegroundColor.Cyan)}`,\n );\n },\n },\n {\n command: 'browse',\n description:\n 'List all available packages from all configured sources',\n async processCommand(_, context) {\n const { progressBar, writer } = context;\n const { signal, cleanup } =\n scope.createAbortSignal(context);\n\n progressBar.show();\n\n const prefix = packagesManager.QODALIS_COMMAND_PREFIX;\n\n const knownShortNames = [\n 'browser-storage',\n 'curl',\n 'guid',\n 'password-generator',\n 'qr',\n 'regex',\n 'server-logs',\n 'speed-test',\n 'string',\n 'text-to-image',\n 'todo',\n 'yesno',\n ];\n\n // Merged results: keyed by package name\n const packagesMap = new Map<\n string,\n {\n name: string;\n shortName: string;\n version: string;\n description: string;\n source: string;\n }\n >();\n\n // 1. Query registry sources (npm-compatible search API)\n const registrySources =\n scriptsLoader.getSourcesByKind('registry');\n for (const regSource of registrySources) {\n if (signal.aborted) break;\n\n progressBar.setText(\n `Searching ${regSource.name} registry`,\n );\n\n try {\n const searchUrl = `${regSource.url}-/v1/search?text=${encodeURIComponent(prefix)}&size=250`;\n const response = await scriptsLoader.getScript(\n searchUrl,\n { signal },\n );\n\n const data = JSON.parse(response.content || '{}');\n\n for (const obj of data.objects || []) {\n const pkg = obj.package;\n if (\n !pkg.name.startsWith(prefix) ||\n pkg.name === `${prefix}core`\n ) {\n continue;\n }\n\n if (!packagesMap.has(pkg.name)) {\n packagesMap.set(pkg.name, {\n name: pkg.name,\n shortName: pkg.name.replace(prefix, ''),\n version: pkg.version,\n description: pkg.description || '',\n source: regSource.name,\n });\n }\n }\n } catch (e: any) {\n if (signal.aborted) break;\n // Registry unavailable, continue with other sources\n }\n }\n\n // 2. Probe file sources for known packages\n const fileSources = scriptsLoader.getSourcesByKind('file');\n for (const fileSource of fileSources) {\n if (signal.aborted) break;\n\n progressBar.setText(`Scanning ${fileSource.name}`);\n\n for (const shortName of knownShortNames) {\n if (signal.aborted) break;\n\n const fullName = `${prefix}${shortName}`;\n progressBar.setText(\n `Scanning ${fileSource.name}: ${shortName}`,\n );\n\n try {\n const pkgUrl = `${fileSource.url}${fullName}/package.json`;\n const response = await scriptsLoader.getScript(\n pkgUrl,\n { signal },\n );\n\n const packageInfo = JSON.parse(\n response.content || '{}',\n );\n\n const existing = packagesMap.get(fullName);\n if (existing) {\n // Append source name if different version or same\n if (\n !existing.source.includes(\n fileSource.name,\n )\n ) {\n existing.source += `, ${fileSource.name}`;\n }\n // If file source has a newer version, update\n if (\n packageInfo.version &&\n packageInfo.version !== existing.version\n ) {\n existing.version = packageInfo.version;\n existing.source = fileSource.name;\n }\n } else {\n packagesMap.set(fullName, {\n name: fullName,\n shortName,\n version:\n packageInfo.version || 'latest',\n description:\n packageInfo.description || '',\n source: fileSource.name,\n });\n }\n } catch {\n // Not available on this source, skip\n }\n }\n }\n\n cleanup();\n\n if (signal.aborted) return;\n\n progressBar.complete();\n\n const allPackages = Array.from(packagesMap.values()).sort(\n (a, b) => a.name.localeCompare(b.name),\n );\n\n if (allPackages.length === 0) {\n writer.writeInfo(\n '📦 No packages found across any source',\n );\n return;\n }\n\n const installed = await packagesManager.getPackages();\n const installedMap = new Map(\n installed.map((p) => [p.name, p.version]),\n );\n\n writer.writeln(\n writer.wrapInColor(\n `📦 Available packages (${allPackages.length}):`,\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n for (const pkg of allPackages) {\n const installedVersion = installedMap.get(pkg.name);\n\n let status: string;\n if (installedVersion) {\n if (installedVersion === pkg.version) {\n status = writer.wrapInColor(\n '✅ installed',\n CliForegroundColor.Green,\n );\n } else {\n status = writer.wrapInColor(\n `🔄 ${installedVersion} → ${pkg.version}`,\n CliForegroundColor.Yellow,\n );\n }\n } else {\n status = writer.wrapInColor(\n '📥 not installed',\n CliForegroundColor.Magenta,\n );\n }\n\n const sourceTag = writer.wrapInColor(\n `[${pkg.source}]`,\n CliForegroundColor.Blue,\n );\n\n writer.writeln(\n ` ${writer.wrapInColor(pkg.shortName, CliForegroundColor.Cyan)} ${writer.wrapInColor(`v${pkg.version}`, CliForegroundColor.Green)} ${status} ${sourceTag}`,\n );\n\n if (pkg.description) {\n writer.writeln(` ${pkg.description}`);\n }\n }\n\n writer.writeln();\n writer.writeInfo(\n `💡 Use ${writer.wrapInColor('pkg add <name>', CliForegroundColor.Cyan)} to install a package`,\n );\n },\n writeDescription(context) {\n context.writer.writeln(\n 'Browse all available packages across all configured sources',\n );\n context.writer.writeln();\n context.writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg browse', CliForegroundColor.Cyan)}`,\n );\n context.writer.writeln();\n context.writer.writeln(\n 'Shows each package with its latest version, install status, and source:',\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('✅ installed', CliForegroundColor.Green)} Already installed and up to date`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('🔄 update', CliForegroundColor.Yellow)} Installed but a newer version exists`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('📥 not installed', CliForegroundColor.Magenta)} Not yet installed`,\n );\n context.writer.writeln();\n context.writer.writeln('🌐 Sources queried:');\n context.writer.writeln(\n ` ${context.writer.wrapInColor('registry', CliForegroundColor.Cyan)} npm-compatible search API (e.g. npmjs.org, Verdaccio)`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('file', CliForegroundColor.Cyan)} Static file servers, probed for known packages`,\n );\n },\n },\n {\n command: 'add',\n description: 'Add a package to the cli, e.g. pkg add guid.',\n valueRequired: true,\n async processCommand(command, context) {\n const { signal, cleanup } =\n scope.createAbortSignal(context);\n\n const packages = command.value!.split(' ');\n for (const pkg of packages) {\n if (signal.aborted) break;\n await scope.addPackage(pkg, context, signal);\n }\n\n cleanup();\n },\n writeDescription(context) {\n const { writer } = context;\n writer.writeln(\n 'Install one or more packages from the Qodalis registry',\n );\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('pkg add <package> [package2...]', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` pkg add guid ${writer.wrapInColor('# Short name', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` pkg add @qodalis/cli-guid ${writer.wrapInColor('# Full name', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` pkg add guid server-logs ${writer.wrapInColor('# Multiple packages', CliForegroundColor.Green)}`,\n );\n writer.writeln();\n writer.writeInfo(\n '💡 Short names are automatically prefixed with @qodalis/cli-',\n );\n },\n },\n {\n command: 'remove',\n description: 'Remove a package from the cli',\n valueRequired: true,\n async processCommand(command, context) {\n const { signal, cleanup } =\n scope.createAbortSignal(context);\n\n const packages = command.value!.split(' ');\n for (const pkg of packages) {\n if (signal.aborted) break;\n await scope.removePackage(pkg, context);\n }\n\n cleanup();\n },\n writeDescription(context) {\n const { writer } = context;\n writer.writeln('Remove one or more installed packages');\n writer.writeln();\n writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('pkg remove <package> [package2...]', CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` pkg remove guid ${writer.wrapInColor('# Remove one package', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` pkg remove guid server-logs ${writer.wrapInColor('# Remove multiple', CliForegroundColor.Green)}`,\n );\n },\n },\n {\n command: 'versions',\n description: 'Show all published versions of a package',\n valueRequired: true,\n acceptsRawInput: true,\n async processCommand(command, context) {\n const { progressBar, writer } = context;\n const { signal, cleanup } =\n scope.createAbortSignal(context);\n\n const name = command.value!.trim();\n const prefix = packagesManager.QODALIS_COMMAND_PREFIX;\n const fullName = name.startsWith(prefix)\n ? name\n : `${prefix}${name}`;\n\n progressBar.show();\n progressBar.setText(`Fetching versions for ${name}`);\n\n try {\n const response = await scriptsLoader.getScript(\n `https://registry.npmjs.org/${encodeURIComponent(fullName)}`,\n { signal },\n );\n\n if (signal.aborted) {\n cleanup();\n return;\n }\n\n const data = JSON.parse(response.content || '{}');\n\n if (!data.versions) {\n progressBar.complete();\n writer.writeError(`Package ${name} not found`);\n cleanup();\n return;\n }\n\n const versions = Object.keys(data.versions);\n const time: Record<string, string> = data.time || {};\n const latest = data['dist-tags']?.latest || '';\n\n const installed =\n await packagesManager.getPackage(name);\n\n progressBar.complete();\n\n writer.writeln(\n writer.wrapInColor(\n `📦 ${fullName} — ${versions.length} version${versions.length !== 1 ? 's' : ''}:`,\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n for (const version of versions) {\n const publishDate = time[version]\n ? new Date(time[version]).toLocaleDateString()\n : '';\n\n const tags: string[] = [];\n\n if (version === latest) {\n tags.push(\n writer.wrapInColor(\n 'latest',\n CliForegroundColor.Green,\n ),\n );\n }\n\n if (installed && installed.version === version) {\n tags.push(\n writer.wrapInColor(\n 'installed',\n CliForegroundColor.Cyan,\n ),\n );\n }\n\n const tagStr =\n tags.length > 0 ? ` [${tags.join(', ')}]` : '';\n\n writer.writeln(\n ` ${writer.wrapInColor(`v${version}`, CliForegroundColor.White)} ${writer.wrapInColor(publishDate, CliForegroundColor.Yellow)}${tagStr}`,\n );\n }\n\n writer.writeln();\n } catch (e: any) {\n if (signal.aborted) {\n cleanup();\n return;\n }\n progressBar.complete();\n writer.writeError(\n e?.toString() || 'Failed to fetch versions',\n );\n }\n\n cleanup();\n },\n writeDescription(context) {\n context.writer.writeln(\n 'Show all published versions of a package from the npm registry',\n );\n context.writer.writeln();\n context.writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg versions <package>', CliForegroundColor.Cyan)}`,\n );\n context.writer.writeln();\n context.writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n context.writer.writeln(\n ` pkg versions guid ${context.writer.wrapInColor('# Short name', CliForegroundColor.Green)}`,\n );\n context.writer.writeln(\n ` pkg versions @qodalis/cli-guid ${context.writer.wrapInColor('# Full name', CliForegroundColor.Green)}`,\n );\n },\n },\n {\n command: 'check',\n description: 'Check installed packages for available updates',\n async processCommand(_, context) {\n const packages = await packagesManager.getPackages();\n\n if (packages.length === 0) {\n context.writer.writeInfo('📦 No packages installed');\n context.writer.writeln();\n context.writer.writeInfo(\n `💡 Use ${context.writer.wrapInColor('pkg add <name>', CliForegroundColor.Cyan)} to install a package`,\n );\n return;\n }\n\n const { progressBar, writer } = context;\n const { signal, cleanup } =\n scope.createAbortSignal(context);\n\n progressBar.show();\n\n const updates: {\n name: string;\n current: string;\n latest: string;\n }[] = [];\n const upToDate: string[] = [];\n const errors: { name: string; error: string }[] = [];\n\n for (const pkg of packages) {\n if (signal.aborted) break;\n\n progressBar.setText(`Checking ${pkg.name}`);\n\n try {\n const packageInfo = await scriptsLoader\n .getScriptWithFallback(\n `${pkg.name}/package.json`,\n { signal },\n )\n .then((response) =>\n JSON.parse(response.content || '{}'),\n );\n\n if (\n packageInfo.version &&\n packageInfo.version !== pkg.version\n ) {\n updates.push({\n name: pkg.name,\n current: pkg.version,\n latest: packageInfo.version,\n });\n } else {\n upToDate.push(pkg.name);\n }\n } catch {\n if (signal.aborted) break;\n errors.push({\n name: pkg.name,\n error: 'Failed to check',\n });\n }\n }\n\n cleanup();\n\n if (signal.aborted) return;\n\n progressBar.complete();\n\n if (updates.length > 0) {\n writer.writeln(\n writer.wrapInColor(\n `🔄 Updates available (${updates.length}):`,\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n for (const u of updates) {\n writer.writeln(\n ` ${writer.wrapInColor(u.name, CliForegroundColor.Cyan)} ${writer.wrapInColor(u.current, CliForegroundColor.Red)} → ${writer.wrapInColor(u.latest, CliForegroundColor.Green)}`,\n );\n }\n\n writer.writeln();\n writer.writeInfo(\n `💡 Run ${writer.wrapInColor('pkg update', CliForegroundColor.Cyan)} to update all packages`,\n );\n }\n\n if (upToDate.length > 0) {\n if (updates.length > 0) {\n writer.writeln();\n }\n writer.writeln(\n writer.wrapInColor(\n `✅ Up to date (${upToDate.length}):`,\n CliForegroundColor.Green,\n ),\n );\n writer.writeln();\n\n for (const name of upToDate) {\n writer.writeln(\n ` ${writer.wrapInColor(name, CliForegroundColor.Cyan)}`,\n );\n }\n }\n\n if (errors.length > 0) {\n writer.writeln();\n for (const e of errors) {\n writer.writeWarning(`⚠️ ${e.name}: ${e.error}`);\n }\n }\n\n if (updates.length === 0 && errors.length === 0) {\n writer.writeln();\n writer.writeSuccess('🎉 All packages are up to date!');\n }\n },\n writeDescription(context) {\n context.writer.writeln(\n 'Check installed packages for newer versions available on the registry',\n );\n context.writer.writeln();\n context.writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg check', CliForegroundColor.Cyan)}`,\n );\n context.writer.writeln();\n context.writer.writeInfo(\n `💡 Use ${context.writer.wrapInColor('pkg update', CliForegroundColor.Cyan)} to apply updates`,\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 acceptsRawInput: true,\n valueRequired: false,\n async processCommand(command, context) {\n const { signal, cleanup } =\n scope.createAbortSignal(context);\n\n if (command.value) {\n const raw = command.value!.trim();\n const atIndex = raw.lastIndexOf('@');\n let name: string;\n let version: string | undefined;\n\n if (\n atIndex > 0 &&\n !raw.slice(0, atIndex).endsWith('/')\n ) {\n name = raw.slice(0, atIndex);\n version = raw.slice(atIndex + 1);\n } else {\n name = raw;\n }\n\n await scope.updatePackage(\n name,\n context,\n signal,\n version,\n );\n } else {\n const packages = await packagesManager.getPackages();\n for (const pkg of packages) {\n if (signal.aborted) break;\n await scope.updatePackage(\n pkg.name,\n context,\n signal,\n );\n }\n\n if (!signal.aborted) {\n context.writer.writeSuccess('All packages updated');\n }\n }\n\n cleanup();\n },\n writeDescription(context) {\n context.writer.writeln(\n 'Update packages to their latest versions or to a specific version',\n );\n context.writer.writeln();\n context.writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg update <package>', CliForegroundColor.Cyan)} Update to latest`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg update <package>@<version>', CliForegroundColor.Cyan)} Update to specific version`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg update', CliForegroundColor.Cyan)} Update all packages`,\n );\n context.writer.writeln();\n context.writer.writeln(`📝 ${context.translator.t('cli.common.examples', 'Examples:')}`);\n context.writer.writeln(\n ` pkg update guid ${context.writer.wrapInColor('# Update to latest', CliForegroundColor.Green)}`,\n );\n context.writer.writeln(\n ` pkg update guid@1.0.2 ${context.writer.wrapInColor('# Install specific version', CliForegroundColor.Green)}`,\n );\n },\n },\n {\n command: 'source',\n description: 'Get or set the package source for downloads',\n acceptsRawInput: true,\n processors: [\n {\n command: 'get',\n description: 'Show the current CDN source',\n async processCommand(_, context) {\n const current = scriptsLoader.getCdnSource();\n const allSources = scriptsLoader.getSources();\n const fallbacks = allSources.filter(\n (s) => s !== current,\n );\n\n context.writer.writeln(\n `🌐 Current source: ${context.writer.wrapInColor(current, CliForegroundColor.Cyan)}`,\n );\n\n if (fallbacks.length > 0) {\n context.writer.writeln(\n ` Fallbacks: ${fallbacks.map((s) => context.writer.wrapInColor(s, CliForegroundColor.Yellow)).join(', ')}`,\n );\n }\n },\n },\n {\n command: 'set',\n description:\n 'Set the preferred package source (interactive if no name given)',\n acceptsRawInput: true,\n async processCommand(command, context) {\n let value = (command.value || '')\n .trim()\n .toLowerCase();\n const allSources = scriptsLoader.getSources();\n\n if (!value) {\n // Interactive selection\n const current = scriptsLoader.getCdnSource();\n const options = allSources.map((name) => {\n const entry = scriptsLoader.getSource(name);\n const active =\n name === current ? ' (active)' : '';\n return {\n label: `${name}${active} ${entry?.url || ''}`,\n value: name,\n };\n });\n\n const selected =\n await context.reader.readSelect(\n 'Select package source:',\n options,\n );\n\n if (!selected) {\n context.writer.writeInfo(\n 'Source selection cancelled',\n );\n return;\n }\n value = selected;\n }\n\n if (!allSources.includes(value)) {\n context.writer.writeError(\n `Invalid source \"${value}\". Available sources: ${allSources.join(', ')}`,\n );\n return;\n }\n\n scriptsLoader.setCdnSource(value);\n context.state.updateState({ cdnSource: value });\n await context.state.persist();\n\n context.writer.writeSuccess(\n `Package source set to ${context.writer.wrapInColor(value, CliForegroundColor.Cyan)}`,\n );\n\n const fallbacks = allSources.filter(\n (s) => s !== value,\n );\n if (fallbacks.length > 0) {\n context.writer.writeln(\n ` Fallbacks: ${fallbacks.map((s) => context.writer.wrapInColor(s, CliForegroundColor.Yellow)).join(', ')}`,\n );\n }\n },\n writeDescription(context) {\n const allSources = scriptsLoader.getSources();\n context.writer.writeln(\n 'Set the preferred source for package downloads',\n );\n context.writer.writeln();\n context.writer.writeln(`📋 ${context.translator.t('cli.common.usage', 'Usage:')}`);\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg source set <name>', CliForegroundColor.Cyan)}`,\n );\n context.writer.writeln();\n context.writer.writeln('🌐 Available sources:');\n for (const name of allSources) {\n const entry = scriptsLoader.getSource(name);\n const kindTag = entry ? `[${entry.kind}]` : '';\n context.writer.writeln(\n ` ${context.writer.wrapInColor(name, CliForegroundColor.Cyan)} ${context.writer.wrapInColor(kindTag, CliForegroundColor.Yellow)} ${entry?.url || ''}`,\n );\n }\n },\n },\n ],\n async processCommand(_, context) {\n const current = scriptsLoader.getCdnSource();\n const allSources = scriptsLoader.getSources();\n const fallbacks = allSources.filter((s) => s !== current);\n\n context.writer.writeln(\n `🌐 Current source: ${context.writer.wrapInColor(current, CliForegroundColor.Cyan)}`,\n );\n\n if (fallbacks.length > 0) {\n context.writer.writeln(\n ` Fallbacks: ${fallbacks.map((s) => context.writer.wrapInColor(s, CliForegroundColor.Yellow)).join(', ')}`,\n );\n }\n\n context.writer.writeln();\n context.writer.writeInfo(\n `💡 Use ${context.writer.wrapInColor('pkg source set <name>', CliForegroundColor.Cyan)} to change`,\n );\n },\n writeDescription(context) {\n const allSources = scriptsLoader.getSources();\n\n context.writer.writeln(\n 'Manage the source used for downloading packages',\n );\n context.writer.writeln();\n context.writer.writeln('📋 Commands:');\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg source', CliForegroundColor.Cyan)} Show current source`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg source get', CliForegroundColor.Cyan)} Show current source`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('pkg source set <name>', CliForegroundColor.Cyan)} Set preferred source`,\n );\n context.writer.writeln();\n context.writer.writeln('🌐 Available sources:');\n for (const name of allSources) {\n const url = scriptsLoader.getSourceUrl(name) || '';\n context.writer.writeln(\n ` ${context.writer.wrapInColor(name, CliForegroundColor.Cyan)} ${url}`,\n );\n }\n context.writer.writeln();\n context.writer.writeInfo(\n 'The non-selected source is used as a fallback.',\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?(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(this.description);\n writer.writeln();\n writer.writeln(`📋 ${t.t('cli.common.usage', 'Usage:')}`);\n writer.writeln(\n ` ${writer.wrapInColor('pkg ls', CliForegroundColor.Cyan)} List installed packages`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('pkg browse', CliForegroundColor.Cyan)} Browse all available packages`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('pkg add <package>', CliForegroundColor.Cyan)} Install a package`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('pkg remove <package>', CliForegroundColor.Cyan)} Remove a package`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('pkg versions <package>', CliForegroundColor.Cyan)} Show all published versions`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('pkg check', CliForegroundColor.Cyan)} Check for available updates`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('pkg update [package]', CliForegroundColor.Cyan)} Update one or all packages`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('pkg source [get|set <name>]', CliForegroundColor.Cyan)} Get or set package source`,\n );\n writer.writeln();\n writer.writeln(\n `🌐 Browse packages: ${writer.wrapInColor('https://www.npmjs.com/org/qodalis', CliForegroundColor.Blue)}`,\n );\n writer.writeln();\n writer.writeln(`📝 ${t.t('cli.common.examples', 'Examples:')}`);\n writer.writeln(\n ` pkg add guid ${writer.wrapInColor('# Install @qodalis/cli-guid', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` pkg add guid server-logs ${writer.wrapInColor('# Install multiple packages', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` pkg update ${writer.wrapInColor('# Update all packages', CliForegroundColor.Green)}`,\n );\n }\n\n async initialize(context: ICliExecutionContext): Promise<void> {\n this.registry = context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n\n const store = context.services.get<ICliKeyValueStore>(\n 'cli-key-value-store',\n );\n this.packagesManager.setStore(store);\n\n // Expose the package manager so the completion provider can access it\n context.services.set([{\n provide: CliPackageManagerService_TOKEN,\n useValue: this.packagesManager,\n }]);\n\n // Register custom package sources from options\n const packageSources = context.options?.packageSources;\n if (packageSources?.sources) {\n for (const source of packageSources.sources) {\n this.scriptsLoader.addSource(\n source.name,\n source.url,\n source.kind || 'file',\n );\n }\n }\n\n // Set primary source from options (if specified and not overridden by persisted state)\n if (packageSources?.primary) {\n this.scriptsLoader.setCdnSource(packageSources.primary);\n }\n\n context.state\n .select<CdnSourceName>((s) => s['cdnSource'])\n .subscribe((cdnSource) => {\n if (cdnSource) {\n this.scriptsLoader.setCdnSource(cdnSource);\n }\n });\n\n const packages = await this.packagesManager.getPackages();\n\n for (const pkg of packages) {\n await this.registerPackageDependencies(pkg, context);\n\n await this.injectScriptWithCdnFallback(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(\n name: string,\n context: ICliExecutionContext,\n signal?: AbortSignal,\n ) {\n const hasPackage = await this.packagesManager.hasPackage(name);\n if (hasPackage) {\n context.writer.writeInfo(`Package ${name} already installed`);\n return;\n }\n\n const jobName = `pkg-install:${name}`;\n\n try {\n context.backgroundServices.register({\n name: jobName,\n description: `Installing package '${name}'`,\n type: 'job',\n onStart: async (ctx) => {\n ctx.log(`Installing ${name}`);\n await this.doAddPackage(name, context, signal);\n ctx.log(`Installation of ${name} complete`);\n },\n });\n\n await context.backgroundServices.start(jobName);\n } catch {\n // Fallback: run directly if service registration fails\n await this.doAddPackage(name, context, signal);\n }\n }\n\n private async doAddPackage(\n name: string,\n context: ICliExecutionContext,\n signal?: AbortSignal,\n ): Promise<void> {\n const { progressBar } = context;\n\n progressBar.show();\n progressBar.setText(`Fetching package ${name}`);\n\n try {\n const primaryName = name.startsWith(\n this.packagesManager.QODALIS_COMMAND_PREFIX,\n )\n ? name\n : `${this.packagesManager.QODALIS_COMMAND_PREFIX}${name}`;\n\n let packageInfo: any = await this.scriptsLoader\n .getScriptWithFallback(`${primaryName}/package.json`, {\n signal,\n })\n .then((response) => JSON.parse(response.content || '{}'))\n .catch(() => null);\n\n if (signal?.aborted) return;\n\n if (!packageInfo && primaryName !== name) {\n progressBar.setText(`Trying ${name}`);\n packageInfo = await this.scriptsLoader\n .getScriptWithFallback(`${name}/package.json`, {\n signal,\n })\n .then((response) => JSON.parse(response.content || '{}'))\n .catch(() => null);\n }\n\n if (signal?.aborted) return;\n\n if (!packageInfo) {\n progressBar.setText('Package not found');\n throw new Error(`Package ${name} not found`);\n }\n\n progressBar.setText('Downloading package');\n\n const cdnPath = this.resolvePackageCdnPath(packageInfo);\n const response = await this.scriptsLoader.getScriptWithFallback(\n cdnPath,\n { signal },\n );\n\n if (signal?.aborted) return;\n\n progressBar.setText('Registering dependencies');\n\n const pkg: Package = {\n name: packageInfo.name,\n version: packageInfo.version || 'latest',\n url: response.xhr.responseURL,\n dependencies: packageInfo.cliDependencies || [],\n };\n\n await this.registerPackageDependencies(pkg, context);\n\n progressBar.setText('Injecting package');\n\n if (response.content) {\n await this.scriptsLoader.injectBodyScript(response.content);\n }\n\n progressBar.setText('Saving package');\n\n await this.packagesManager.addPackage(pkg);\n\n context.progressBar.complete();\n\n context.writer.writeSuccess(\n `Package ${packageInfo.name}@${packageInfo.version} added successfully`,\n );\n } catch (e: any) {\n if (signal?.aborted) return;\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 signal?: AbortSignal,\n targetVersion?: string,\n ): Promise<void> {\n const { progressBar, writer } = context;\n\n progressBar.show();\n\n try {\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 versionSuffix = targetVersion ? `@${targetVersion}` : '';\n const packagePath = `${currentPackage.name}${versionSuffix}`;\n\n progressBar.setText(\n targetVersion\n ? `Fetching ${currentPackage.name}@${targetVersion}`\n : `Checking for updates for package ${currentPackage.name}`,\n );\n\n const newPackage = await this.scriptsLoader\n .getScriptWithFallback(packagePath + '/package.json', {\n signal,\n })\n .then((response) => {\n return JSON.parse(response.content || '{}');\n });\n\n if (signal?.aborted) return;\n\n if (newPackage.version === currentPackage.version) {\n progressBar.complete();\n writer.writeInfo(\n `Package ${currentPackage.name} is already at version ${currentPackage.version}`,\n );\n return;\n }\n\n progressBar.setText(\n `Downloading package ${currentPackage.name}@${newPackage.version}`,\n );\n\n const cdnPath = this.resolvePackageCdnPath(\n newPackage,\n versionSuffix,\n );\n const response = await this.scriptsLoader.getScriptWithFallback(\n cdnPath,\n { signal },\n );\n\n if (signal?.aborted) return;\n\n progressBar.setText('Registering dependencies');\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.setText(`Injecting package ${currentPackage.name}`);\n\n if (response.content) {\n await this.scriptsLoader.injectBodyScript(response.content);\n }\n\n progressBar.setText(`Saving package ${currentPackage.name}`);\n\n await this.packagesManager.updatePackage(updatedPkg);\n\n progressBar.complete();\n\n writer.writeSuccess(\n `Package ${currentPackage.name} updated to version ${newPackage.version} from ${currentPackage.version}`,\n );\n } catch (e: any) {\n if (signal?.aborted) return;\n progressBar.complete();\n writer.writeError(e?.toString() || 'Unknown error');\n }\n }\n\n private async injectScriptWithCdnFallback(url: string): Promise<void> {\n let packagePath = url;\n\n // Strip any known source base URL to get the package path\n for (const name of this.scriptsLoader.getSources()) {\n const baseUrl = this.scriptsLoader.getSourceUrl(name);\n if (baseUrl && packagePath.startsWith(baseUrl)) {\n packagePath = packagePath.slice(baseUrl.length);\n break;\n }\n }\n\n await this.scriptsLoader.injectScriptWithFallback(packagePath);\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.injectScriptWithCdnFallback(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 private resolvePackageCdnPath(\n packageInfo: any,\n versionSuffix = '',\n ): string {\n const entryPoint =\n packageInfo.unpkg || packageInfo.umd || packageInfo.main;\n const basePath = `${packageInfo.name}${versionSuffix}`;\n\n if (entryPoint) {\n const cleanEntry = entryPoint.replace(/^\\.\\//, '');\n return `${basePath}/${cleanEntry}`;\n }\n\n return basePath;\n }\n\n private waitForGlobal(\n globalName: string,\n timeout: number,\n ): Promise<boolean> {\n return new Promise((resolve) => {\n const interval = 50;\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 {\n CliProcessCommand,\n CliServerCapabilities,\n CliServerConfig,\n CliServerResponse,\n CliServerCommandDescriptor,\n ICliBackgroundServiceRegistry,\n} from '@qodalis/cli-core';\n\nexport class CliServerConnection {\n private _connected = false;\n private _commands: CliServerCommandDescriptor[] = [];\n private _capabilities: CliServerCapabilities | null = null;\n private _eventSocket: WebSocket | null = null;\n\n onDisconnect?: () => void;\n\n constructor(\n private readonly _config: CliServerConfig,\n private readonly _backgroundServices?: ICliBackgroundServiceRegistry,\n ) {}\n\n get config(): CliServerConfig {\n return this._config;\n }\n\n get connected(): boolean {\n return this._connected;\n }\n\n get commands(): CliServerCommandDescriptor[] {\n return this._commands;\n }\n\n get capabilities(): CliServerCapabilities | null {\n return this._capabilities;\n }\n\n async connect(): Promise<void> {\n try {\n this._commands = await this.fetchCommands();\n this._connected = true;\n this._capabilities = await this.fetchCapabilities();\n this.connectEventSocket();\n } catch {\n this._connected = false;\n this._commands = [];\n this._capabilities = null;\n }\n }\n\n disconnect(): void {\n this._connected = false;\n this._commands = [];\n this._capabilities = null;\n this.closeEventSocket();\n }\n\n async fetchCommands(): Promise<CliServerCommandDescriptor[]> {\n const url = `${this.normalizeUrl(this._config.url)}/api/v1/cli/commands`;\n const response = await this.httpFetch(url);\n\n if (!response.ok) {\n throw new Error(\n `Server ${this._config.name} returned ${response.status}`,\n );\n }\n\n return response.json();\n }\n\n async fetchCapabilities(): Promise<CliServerCapabilities | null> {\n try {\n const url = `${this.normalizeUrl(this._config.url)}/api/v1/cli/capabilities`;\n const response = await this.httpFetch(url);\n if (!response.ok) return null;\n return response.json();\n } catch {\n return null;\n }\n }\n\n async execute(command: CliProcessCommand): Promise<CliServerResponse> {\n const url = `${this.normalizeUrl(this._config.url)}/api/v1/cli/execute`;\n const response = await this.httpFetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(command),\n });\n\n if (!response.ok) {\n return {\n exitCode: 1,\n outputs: [\n {\n type: 'text',\n value: `Server error: ${response.status} ${response.statusText}`,\n style: 'error',\n },\n ],\n };\n }\n\n return response.json();\n }\n\n async ping(): Promise<boolean> {\n try {\n const url = `${this.normalizeUrl(this._config.url)}/api/v1/cli/version`;\n const response = await this.httpFetch(url);\n return response.ok;\n } catch {\n return false;\n }\n }\n\n private connectEventSocket(): void {\n if (!this._backgroundServices) {\n this.connectEventSocketDirect();\n return;\n }\n\n const serviceName = `server-events:${this._config.name}`;\n\n try {\n this._backgroundServices.register({\n name: serviceName,\n description: `Event stream for server '${this._config.name}'`,\n type: 'daemon',\n onStart: async (ctx) => {\n const baseUrl = this.normalizeUrl(this._config.url);\n const wsUrl = this.toWebSocketUrl(baseUrl) + '/ws/v1/cli/events';\n ctx.log(`Connecting to ${wsUrl}`);\n\n this._eventSocket = new WebSocket(wsUrl);\n\n this._eventSocket.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n ctx.emit({\n source: serviceName,\n type: data.type || 'server-event',\n data,\n });\n if (data.type === 'disconnect') {\n this.handleServerDisconnect();\n }\n } catch { /* ignore malformed */ }\n };\n\n this._eventSocket.onclose = () => {\n if (this._connected) {\n ctx.log('WebSocket closed unexpectedly', 'warn');\n this.handleServerDisconnect();\n }\n };\n\n this._eventSocket.onerror = () => {\n ctx.log('WebSocket error', 'error');\n };\n },\n onStop: async () => {\n this.closeEventSocketDirect();\n },\n });\n\n this._backgroundServices.start(serviceName).catch(() => {\n this.connectEventSocketDirect();\n });\n } catch {\n this.connectEventSocketDirect();\n }\n }\n\n private connectEventSocketDirect(): void {\n try {\n const baseUrl = this.normalizeUrl(this._config.url);\n const wsUrl = this.toWebSocketUrl(baseUrl) + '/ws/v1/cli/events';\n this._eventSocket = new WebSocket(wsUrl);\n\n this._eventSocket.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n if (data.type === 'disconnect') {\n this.handleServerDisconnect();\n }\n } catch {\n // Ignore malformed messages\n }\n };\n\n this._eventSocket.onclose = () => {\n if (this._connected) {\n this.handleServerDisconnect();\n }\n };\n\n this._eventSocket.onerror = () => {\n // onclose will fire after onerror\n };\n } catch {\n // WebSocket not available or URL invalid — fall back to no events\n }\n }\n\n private handleServerDisconnect(): void {\n this._connected = false;\n this._commands = [];\n this._capabilities = null;\n this.closeEventSocket();\n this.onDisconnect?.();\n }\n\n private closeEventSocket(): void {\n if (this._backgroundServices) {\n const serviceName = `server-events:${this._config.name}`;\n const info = this._backgroundServices.getStatus(serviceName);\n if (info && info.status === 'running') {\n this._backgroundServices.stop(serviceName).catch(() => {});\n return; // onStop calls closeEventSocketDirect()\n }\n }\n this.closeEventSocketDirect();\n }\n\n private closeEventSocketDirect(): void {\n if (this._eventSocket) {\n this._eventSocket.onclose = null;\n this._eventSocket.onmessage = null;\n this._eventSocket.onerror = null;\n if (\n this._eventSocket.readyState === WebSocket.OPEN ||\n this._eventSocket.readyState === WebSocket.CONNECTING\n ) {\n this._eventSocket.close();\n }\n this._eventSocket = null;\n }\n }\n\n private httpFetch(url: string, init?: RequestInit): Promise<Response> {\n const timeout = this._config.timeout ?? 30000;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeout);\n\n const headers: Record<string, string> = {\n ...(this._config.headers ?? {}),\n ...((init?.headers as Record<string, string>) ?? {}),\n };\n\n return fetch(url, {\n ...init,\n headers,\n signal: controller.signal,\n }).finally(() => clearTimeout(timer));\n }\n\n private normalizeUrl(url: string): string {\n return url.endsWith('/') ? url.slice(0, -1) : url;\n }\n\n private toWebSocketUrl(httpUrl: string): string {\n if (!httpUrl || httpUrl.startsWith('/')) {\n // Relative URL — derive from current location\n const protocol =\n typeof location !== 'undefined' &&\n location.protocol === 'https:'\n ? 'wss:'\n : 'ws:';\n const host =\n typeof location !== 'undefined' ? location.host : 'localhost';\n return `${protocol}//${host}`;\n }\n return httpUrl.replace(/^https:/, 'wss:').replace(/^http:/, 'ws:');\n }\n}\n","import {\n CliProcessCommand,\n CliProcessorMetadata,\n CliServerCommandDescriptor,\n CliServerResponse,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { CliServerConnection } from './cli-server-connection';\n\n/**\n * Execute a command on a specific server connection and render the response.\n * Shared by both single-proxy and multi-proxy processors.\n */\nexport async function executeOnServer(\n connection: CliServerConnection,\n serverName: string,\n descriptor: CliServerCommandDescriptor,\n command: CliProcessCommand,\n context: ICliExecutionContext,\n): Promise<void> {\n if (!connection.connected) {\n context.writer.writeError(\n `Server '${serverName}' is not reachable. Run 'server reconnect ${serverName}' to retry.`,\n );\n context.process.exit(1);\n return;\n }\n\n const serverCommand: CliProcessCommand = {\n ...command,\n command: descriptor.command,\n };\n\n try {\n context.spinner?.show('Executing on server...');\n const response = await connection.execute(serverCommand);\n context.spinner?.hide();\n renderServerResponse(response, context);\n } catch (e: any) {\n context.spinner?.hide();\n if (e.name === 'AbortError') {\n context.writer.writeError(\n `Request to server '${serverName}' timed out after ${connection.config.timeout ?? 30000}ms.`,\n );\n } else {\n context.writer.writeError(\n `Error communicating with server '${serverName}': ${e.message}`,\n );\n }\n context.process.exit(1);\n }\n}\n\n/**\n * Render a CliServerResponse to the terminal.\n */\nexport function renderServerResponse(\n response: CliServerResponse,\n context: ICliExecutionContext,\n): void {\n for (const output of response.outputs ?? []) {\n switch (output.type) {\n case 'text': {\n const style = output.style;\n if (style === 'success')\n context.writer.writeSuccess(output.value);\n else if (style === 'error')\n context.writer.writeError(output.value);\n else if (style === 'info')\n context.writer.writeInfo(output.value);\n else if (style === 'warning')\n context.writer.writeWarning(output.value);\n else context.writer.writeln(output.value);\n break;\n }\n case 'table':\n context.writer.writeTable(output.headers, output.rows);\n break;\n case 'list':\n context.writer.writeList(output.items, {\n ordered: output.ordered,\n });\n break;\n case 'json':\n context.writer.writeJson(output.value);\n break;\n case 'key-value': {\n const record: Record<string, string> = {};\n for (const e of output.entries) {\n record[e.key] = e.value;\n }\n context.writer.writeKeyValue(record);\n break;\n }\n }\n }\n\n if (response.exitCode !== 0) {\n context.process.exit(response.exitCode);\n }\n}\n\nexport class CliServerProxyProcessor implements ICliCommandProcessor {\n command: string;\n aliases?: string[];\n description?: string;\n version?: string;\n metadata?: CliProcessorMetadata;\n parameters?: ICliCommandParameterDescriptor[];\n processors?: ICliCommandProcessor[];\n\n constructor(\n private readonly connection: CliServerConnection,\n private readonly descriptor: CliServerCommandDescriptor,\n private readonly serverName: string,\n ) {\n this.command = `${serverName}:${descriptor.command}`;\n this.description = descriptor.description;\n this.version = descriptor.version;\n this.metadata = {\n module: `server:${serverName}`,\n icon: '\\u{1F5A5}',\n requireServer: true,\n };\n this.parameters = descriptor.parameters?.map((p) => ({\n name: p.name,\n aliases: p.aliases,\n description: p.description,\n required: p.required,\n type: p.type,\n defaultValue: p.defaultValue,\n }));\n this.processors = descriptor.processors?.map(\n (sub) => new CliServerProxyProcessor(connection, sub, serverName),\n );\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n return executeOnServer(\n this.connection,\n this.serverName,\n this.descriptor,\n command,\n context,\n );\n }\n}\n","import {\n CliProcessCommand,\n CliProcessorMetadata,\n CliServerCommandDescriptor,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { CliServerConnection } from './cli-server-connection';\nimport { executeOnServer } from './cli-server-proxy-processor';\n\nexport interface MultiProxyEntry {\n serverName: string;\n connection: CliServerConnection;\n descriptor: CliServerCommandDescriptor;\n}\n\nexport interface DefaultServerProvider {\n readonly defaultServer: string | null;\n}\n\n/**\n * Proxy processor registered as a bare alias when the same command\n * exists on multiple connected servers. Dispatches to the default\n * server when one is set, prompts the user otherwise, and falls back\n * to the next reachable server when the preferred one is down.\n */\nexport class CliServerMultiProxyProcessor implements ICliCommandProcessor {\n command: string;\n description?: string;\n metadata?: CliProcessorMetadata;\n parameters?: ICliCommandParameterDescriptor[];\n processors?: ICliCommandProcessor[];\n\n constructor(\n private readonly entries: MultiProxyEntry[],\n private readonly provider: DefaultServerProvider,\n ) {\n const first = entries[0].descriptor;\n this.command = first.command;\n this.description = first.description;\n this.metadata = {\n module: 'server:multi',\n icon: '\\u{1F5A5}',\n requireServer: true,\n };\n this.parameters = first.parameters?.map((p) => ({\n name: p.name,\n aliases: p.aliases,\n description: p.description,\n required: p.required,\n type: p.type,\n defaultValue: p.defaultValue,\n }));\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const defaultServer = this.provider.defaultServer;\n\n if (defaultServer) {\n // Try default server first\n const entry = this.entries.find(\n (e) =>\n e.serverName === defaultServer && e.connection.connected,\n );\n if (entry) {\n return executeOnServer(\n entry.connection,\n entry.serverName,\n entry.descriptor,\n command,\n context,\n );\n }\n\n // Default is down — fall through to next connected server\n const fallback = this.entries.find(\n (e) => e.connection.connected,\n );\n if (fallback) {\n context.writer.writeWarning(\n `Default server '${defaultServer}' is unreachable, falling back to '${fallback.serverName}'.`,\n );\n return executeOnServer(\n fallback.connection,\n fallback.serverName,\n fallback.descriptor,\n command,\n context,\n );\n }\n\n context.writer.writeError(\n 'No servers are reachable for this command.',\n );\n context.process.exit(1);\n return;\n }\n\n // No default — determine connected servers\n const connected = this.entries.filter(\n (e) => e.connection.connected,\n );\n\n if (connected.length === 0) {\n context.writer.writeError(\n 'No servers are reachable for this command.',\n );\n context.process.exit(1);\n return;\n }\n\n if (connected.length === 1) {\n return executeOnServer(\n connected[0].connection,\n connected[0].serverName,\n connected[0].descriptor,\n command,\n context,\n );\n }\n\n // Prompt the user to pick a server\n const selected = await context.reader.readSelectInline(\n `'${this.command}' exists on multiple servers:`,\n connected.map((e) => ({\n label: e.serverName,\n value: e.serverName,\n })),\n );\n\n if (!selected) {\n context.writer.writeInfo('Command cancelled.');\n return;\n }\n\n const entry = connected.find((e) => e.serverName === selected)!;\n return executeOnServer(\n entry.connection,\n entry.serverName,\n entry.descriptor,\n command,\n context,\n );\n }\n}\n","import {\n CliServerConfig,\n ICliBackgroundServiceRegistry,\n ICliCommandProcessorRegistry,\n} from '@qodalis/cli-core';\nimport { CliServerConnection } from './cli-server-connection';\nimport { CliServerProxyProcessor } from './cli-server-proxy-processor';\nimport {\n CliServerMultiProxyProcessor,\n DefaultServerProvider,\n} from './cli-server-multi-proxy-processor';\n\nexport const CliServerManager_TOKEN = 'cli-server-manager';\n\nexport class CliServerManager implements DefaultServerProvider {\n readonly connections = new Map<string, CliServerConnection>();\n private _logger?: { warn(msg: string): void; info(msg: string): void };\n private _defaultServer: string | null = null;\n private _backgroundServices?: ICliBackgroundServiceRegistry;\n\n constructor(private readonly registry: ICliCommandProcessorRegistry) {}\n\n get defaultServer(): string | null {\n return this._defaultServer;\n }\n\n setDefaultServer(name: string | null): void {\n if (name !== null && !this.connections.has(name)) {\n throw new Error(`Unknown server: ${name}`);\n }\n this._defaultServer = name;\n // Re-register bare aliases with the new preference\n this.unregisterBareAliases();\n this.registerBareAliases();\n }\n\n async connectAll(\n servers: CliServerConfig[],\n logger?: { warn(msg: string): void; info(msg: string): void },\n backgroundServices?: ICliBackgroundServiceRegistry,\n ): Promise<void> {\n this._logger = logger;\n this._backgroundServices = backgroundServices;\n\n for (const config of servers) {\n if (config.enabled === false) continue;\n\n const connection = new CliServerConnection(config, backgroundServices);\n this.connections.set(config.name, connection);\n\n connection.onDisconnect = () => {\n this.handleDisconnect(config.name);\n };\n\n await connection.connect();\n\n if (connection.connected) {\n logger?.info(\n `Connected to server '${config.name}' (${connection.commands.length} commands)`,\n );\n this.registerProxyProcessors(connection, config.name);\n } else {\n logger?.warn(\n `Could not connect to server '${config.name}' at ${config.url}. Commands from this server will not be available.`,\n );\n }\n }\n\n this.registerBareAliases();\n }\n\n async reconnect(\n name: string,\n ): Promise<{ success: boolean; commandCount: number }> {\n const connection = this.connections.get(name);\n if (!connection) {\n return { success: false, commandCount: 0 };\n }\n\n this.unregisterServerProcessors(name);\n\n connection.onDisconnect = () => {\n this.handleDisconnect(name);\n };\n\n await connection.connect();\n\n if (connection.connected) {\n this.registerProxyProcessors(connection, name);\n this.registerBareAliases();\n return { success: true, commandCount: connection.commands.length };\n }\n\n return { success: false, commandCount: 0 };\n }\n\n getConnection(name: string): CliServerConnection | undefined {\n return this.connections.get(name);\n }\n\n private handleDisconnect(name: string): void {\n this._logger?.warn(\n `Server '${name}' disconnected. Its commands are no longer available. Run 'server reconnect ${name}' to retry.`,\n );\n this.unregisterServerProcessors(name);\n }\n\n private unregisterServerProcessors(name: string): void {\n // Unregister namespaced processors\n const prefix = `${name}:`;\n const namespaced = this.registry.processors.filter((p) =>\n p.command.startsWith(prefix),\n );\n for (const p of namespaced) {\n this.registry.unregisterProcessor(p);\n }\n\n // Unregister bare aliases (single-server and multi-server)\n this.unregisterBareAliases();\n // Re-register bare aliases for remaining connected servers\n this.registerBareAliases();\n }\n\n private unregisterBareAliases(): void {\n for (const p of [...this.registry.processors]) {\n if (\n p.metadata?.module === 'server:multi' ||\n (p.metadata?.requireServer &&\n !p.command.includes(':'))\n ) {\n this.registry.unregisterProcessor(p);\n }\n }\n }\n\n private registerProxyProcessors(\n connection: CliServerConnection,\n serverName: string,\n ): void {\n for (const descriptor of connection.commands) {\n const proxy = new CliServerProxyProcessor(\n connection,\n descriptor,\n serverName,\n );\n this.registry.registerProcessor(proxy);\n }\n }\n\n private registerBareAliases(): void {\n const commandCounts = new Map<string, string[]>();\n\n for (const [serverName, connection] of this.connections) {\n if (!connection.connected) continue;\n for (const cmd of connection.commands) {\n const existing = commandCounts.get(cmd.command) ?? [];\n existing.push(serverName);\n commandCounts.set(cmd.command, existing);\n }\n }\n\n for (const [command, servers] of commandCounts) {\n const existingProcessor = this.registry.findProcessor(command, []);\n\n // Only register bare alias if no local processor owns this command\n if (existingProcessor && !existingProcessor.metadata?.requireServer)\n continue;\n\n if (servers.length === 1) {\n const serverName = servers[0];\n const namespacedCommand = `${serverName}:${command}`;\n\n const namespacedProcessor = this.registry.findProcessor(\n namespacedCommand,\n [],\n );\n if (!namespacedProcessor) continue;\n\n const connection = this.connections.get(serverName)!;\n const descriptor = connection.commands.find(\n (c) => c.command === command,\n )!;\n const alias = new CliServerProxyProcessor(\n connection,\n descriptor,\n serverName,\n );\n alias.command = command;\n alias.aliases = [namespacedCommand];\n\n this.registry.registerProcessor(alias);\n } else {\n // Command exists on multiple servers — register a multi-proxy\n const entries = servers.map((serverName) => {\n const connection = this.connections.get(serverName)!;\n const descriptor = connection.commands.find(\n (c) => c.command === command,\n )!;\n return { serverName, connection, descriptor };\n });\n const multi = new CliServerMultiProxyProcessor(entries, this);\n this.registry.registerProcessor(multi);\n }\n }\n }\n}\n","import { ICliWasmAccelerator } from './types';\n\n/**\n * Pure-JS implementation of ICliWasmAccelerator.\n * Used as the fallback when the WASM module is not available.\n */\nexport class JsFallbackAccelerator implements ICliWasmAccelerator {\n textSearch(\n text: string,\n needle: string,\n startRow: number,\n startCol: number,\n caseSensitive: boolean,\n wrap: boolean,\n ): [number, number] {\n if (!needle) return [-1, -1];\n\n const lines = text.split('\\n');\n const search = caseSensitive ? needle : needle.toLowerCase();\n\n // Search from current position to end\n for (let row = startRow; row < lines.length; row++) {\n const line = caseSensitive\n ? lines[row]\n : lines[row].toLowerCase();\n const col = row === startRow ? startCol + 1 : 0;\n const idx = line.indexOf(search, col);\n if (idx !== -1) {\n return [row, idx];\n }\n }\n\n if (!wrap) return [-1, -1];\n\n // Wrap around from the beginning\n for (let row = 0; row <= startRow; row++) {\n const line = caseSensitive\n ? lines[row]\n : lines[row].toLowerCase();\n const endCol =\n row === startRow ? startCol : line.length;\n const idx = line.indexOf(search);\n if (idx !== -1 && idx < endCol) {\n return [row, idx];\n }\n }\n\n return [-1, -1];\n }\n\n textReplaceAll(\n text: string,\n needle: string,\n replacement: string,\n caseSensitive: boolean,\n ): { count: number; text: string } {\n if (!needle) return { count: 0, text };\n\n const lines = text.split('\\n');\n let count = 0;\n\n for (let row = 0; row < lines.length; row++) {\n let line = lines[row];\n let newLine = '';\n let searchFrom = 0;\n\n while (searchFrom <= line.length) {\n const haystack = caseSensitive ? line : line.toLowerCase();\n const search = caseSensitive ? needle : needle.toLowerCase();\n const idx = haystack.indexOf(search, searchFrom);\n if (idx === -1) {\n newLine += line.slice(searchFrom);\n break;\n }\n newLine += line.slice(searchFrom, idx) + replacement;\n searchFrom = idx + needle.length;\n count++;\n }\n\n if (lines[row] !== newLine) {\n lines[row] = newLine;\n }\n }\n\n return { count, text: lines.join('\\n') };\n }\n\n prefixMatch(candidates: string[], prefix: string): string[] {\n const lowerPrefix = prefix.toLowerCase();\n const matches: string[] = [];\n\n for (const candidate of candidates) {\n if (candidate.toLowerCase().startsWith(lowerPrefix)) {\n matches.push(candidate);\n }\n }\n\n return matches.sort();\n }\n\n commonPrefix(strings: string[]): string {\n if (strings.length === 0) return '';\n let prefix = strings[0];\n for (let i = 1; i < strings.length; i++) {\n while (!strings[i].startsWith(prefix)) {\n prefix = prefix.slice(0, -1);\n if (prefix === '') return '';\n }\n }\n return prefix;\n }\n}\n","import { ICliWasmAccelerator } from './types';\nimport { JsFallbackAccelerator } from './fallback';\n\n/** Cached accelerator instance. */\nlet accelerator: ICliWasmAccelerator | null = null;\n\n/** Whether initialization has been attempted. */\nlet initialized = false;\n\n/** Whether the WASM module loaded successfully (vs JS fallback). */\nlet wasmLoaded = false;\n\n/** Default paths where the .wasm binary might be served from. */\nconst WASM_SEARCH_PATHS = [\n '/assets/wasm/qodalis_cli_wasm_bg.wasm',\n './assets/wasm/qodalis_cli_wasm_bg.wasm',\n '/wasm/qodalis_cli_wasm_bg.wasm',\n];\n\n// ── wasm-bindgen glue (inlined from wasm-pack output) ──────────────\n\nlet wasm: any;\nlet cachedDataViewMemory0: DataView | null = null;\nlet cachedInt32ArrayMemory0: Int32Array | null = null;\nlet cachedUint8ArrayMemory0: Uint8Array | null = null;\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\ncachedTextDecoder.decode();\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\n\nconst cachedTextEncoder: any = new TextEncoder();\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg: string, view: Uint8Array) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return { read: arg.length, written: buf.length };\n };\n}\n\nfunction getDataViewMemory0(): DataView {\n if (cachedDataViewMemory0 === null || (cachedDataViewMemory0.buffer as any).detached === true ||\n ((cachedDataViewMemory0.buffer as any).detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction getInt32ArrayMemory0(): Int32Array {\n if (cachedInt32ArrayMemory0 === null || cachedInt32ArrayMemory0.byteLength === 0) {\n cachedInt32ArrayMemory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32ArrayMemory0;\n}\n\nfunction getUint8ArrayMemory0(): Uint8Array {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction decodeText(ptr: number, len: number): string {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction getStringFromWasm0(ptr: number, len: number): string {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nfunction passStringToWasm0(arg: string, malloc: any, realloc: any): number {\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n const mem = getUint8ArrayMemory0();\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n offset += ret.written!;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction getArrayI32FromWasm0(ptr: number, len: number): Int32Array {\n ptr = ptr >>> 0;\n return getInt32ArrayMemory0().subarray(ptr / 4, ptr / 4 + len);\n}\n\n// ── WASM function wrappers ─────────────────────────────────────────\n\nfunction wasmTextSearch(\n text: string, needle: string,\n startRow: number, startCol: number,\n caseSensitive: boolean, wrap: boolean,\n): Int32Array {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(text, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(needle, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n wasm.text_search(retptr, ptr0, len0, ptr1, len1, startRow, startCol, caseSensitive, wrap);\n const r0 = getDataViewMemory0().getInt32(retptr + 0, true);\n const r1 = getDataViewMemory0().getInt32(retptr + 4, true);\n const v = getArrayI32FromWasm0(r0, r1).slice();\n wasm.__wbindgen_export3(r0, r1 * 4, 4);\n return v;\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n}\n\nfunction wasmTextReplaceAll(\n text: string, needle: string,\n replacement: string, caseSensitive: boolean,\n): string {\n let d0: number, d1: number;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(text, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(needle, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(replacement, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len2 = WASM_VECTOR_LEN;\n wasm.text_replace_all(retptr, ptr0, len0, ptr1, len1, ptr2, len2, caseSensitive);\n d0 = getDataViewMemory0().getInt32(retptr + 0, true);\n d1 = getDataViewMemory0().getInt32(retptr + 4, true);\n return getStringFromWasm0(d0, d1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export3(d0!, d1!, 1);\n }\n}\n\nfunction wasmPrefixMatch(candidates: string, prefix: string): string {\n let d0: number, d1: number;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(candidates, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(prefix, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n wasm.prefix_match(retptr, ptr0, len0, ptr1, len1);\n d0 = getDataViewMemory0().getInt32(retptr + 0, true);\n d1 = getDataViewMemory0().getInt32(retptr + 4, true);\n return getStringFromWasm0(d0, d1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export3(d0!, d1!, 1);\n }\n}\n\nfunction wasmCommonPrefix(strings: string): string {\n let d0: number, d1: number;\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(strings, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len0 = WASM_VECTOR_LEN;\n wasm.common_prefix(retptr, ptr0, len0);\n d0 = getDataViewMemory0().getInt32(retptr + 0, true);\n d1 = getDataViewMemory0().getInt32(retptr + 4, true);\n return getStringFromWasm0(d0, d1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_export3(d0!, d1!, 1);\n }\n}\n\n// ── WASM instantiation ─────────────────────────────────────────────\n\nasync function instantiateWasm(wasmBytes: ArrayBuffer): Promise<void> {\n const imports = { __proto__: null, './qodalis_cli_wasm_bg.js': { __proto__: null } };\n const { instance } = await WebAssembly.instantiate(wasmBytes, imports as any);\n wasm = instance.exports;\n cachedDataViewMemory0 = null;\n cachedInt32ArrayMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n}\n\nasync function fetchWasmBinary(paths: string[]): Promise<ArrayBuffer> {\n for (const path of paths) {\n try {\n const response = await fetch(path);\n if (response.ok) {\n return await response.arrayBuffer();\n }\n } catch {\n // try next path\n }\n }\n throw new Error('WASM binary not found');\n}\n\n// ── Public API ──────────────────────────────────────────────────────\n\nfunction createWasmAccelerator(): ICliWasmAccelerator {\n return {\n textSearch(text, needle, startRow, startCol, caseSensitive, wrap) {\n const result = wasmTextSearch(text, needle, startRow, startCol, caseSensitive, wrap);\n return [result[0], result[1]];\n },\n\n textReplaceAll(text, needle, replacement, caseSensitive) {\n const raw = wasmTextReplaceAll(text, needle, replacement, caseSensitive);\n const idx = raw.indexOf('\\n');\n return {\n count: parseInt(raw.slice(0, idx), 10),\n text: raw.slice(idx + 1),\n };\n },\n\n prefixMatch(candidates, prefix) {\n const result = wasmPrefixMatch(candidates.join('\\n'), prefix);\n return result === '' ? [] : result.split('\\n');\n },\n\n commonPrefix(strings) {\n return wasmCommonPrefix(strings.join('\\n'));\n },\n };\n}\n\n/**\n * Attempt to load the WASM accelerator module.\n * Searches for the .wasm binary at common asset paths.\n * Falls back silently to JsFallbackAccelerator on failure.\n * Safe to call multiple times — only the first call performs the load.\n *\n * @param wasmUrl Optional explicit URL to the .wasm binary.\n */\nexport async function initWasmAccelerator(wasmUrl?: string): Promise<ICliWasmAccelerator> {\n if (initialized && accelerator) {\n return accelerator;\n }\n\n try {\n const paths = wasmUrl ? [wasmUrl, ...WASM_SEARCH_PATHS] : WASM_SEARCH_PATHS;\n const bytes = await fetchWasmBinary(paths);\n await instantiateWasm(bytes);\n accelerator = createWasmAccelerator();\n wasmLoaded = true;\n } catch {\n accelerator = new JsFallbackAccelerator();\n }\n\n initialized = true;\n return accelerator;\n}\n\n/**\n * Synchronously return the cached accelerator.\n * If not yet initialized, creates a JsFallbackAccelerator immediately.\n * Intended for use in hot paths where async loading is not acceptable.\n */\nexport function getAccelerator(): ICliWasmAccelerator {\n if (!accelerator) {\n accelerator = new JsFallbackAccelerator();\n }\n return accelerator;\n}\n\n/**\n * Returns true if the WASM accelerator was loaded successfully.\n * Returns false if using the JS fallback.\n */\nexport function isWasmAccelerated(): boolean {\n return wasmLoaded;\n}\n","import {\n CliForegroundColor,\n CliIcon,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliCommandProcessorRegistry,\n ICliExecutionContext,\n ICliModule,\n CliModuleRegistry,\n LIBRARY_VERSION as CORE_VERSION,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION as CLI_VERSION } from '../../version';\nimport {\n CliCommandHistory_TOKEN,\n CliModuleRegistry_TOKEN,\n CliProcessorsRegistry_TOKEN,\n CliStateStoreManager_TOKEN,\n} from '../../tokens';\nimport { CliCommandHistory } from '../../services/cli-command-history';\nimport { CliStateStoreManager } from '../../state/cli-state-store-manager';\nimport { CliServiceContainer } from '../../services/cli-service-container';\nimport {\n CliServerManager,\n CliServerManager_TOKEN,\n} from '../../server/cli-server-manager';\nimport { isWasmAccelerated } from '../../wasm';\n\nexport class CliDebugCommandProcessor implements ICliCommandProcessor {\n command = 'debug';\n\n description = 'Displays detailed system diagnostics and CLI internals';\n\n author = DefaultLibraryAuthor;\n\n metadata?: CliProcessorMetadata = {\n sealed: true,\n icon: CliIcon.Bug,\n module: 'system',\n hidden: true,\n };\n\n processors?: ICliCommandProcessor[] = [\n {\n command: 'processors',\n description: 'List all registered command processors',\n metadata: { icon: CliIcon.Extension, module: 'system' },\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n const registry =\n context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n\n writer.writeln(\n writer.wrapInColor(\n 'Registered Processors:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n const rows: string[][] = [];\n for (const p of registry.processors) {\n // Arrow function captures `this` from class instance for countProcessors()\n const childCount = this.countProcessors(p.processors || []);\n rows.push([\n p.command,\n p.aliases?.join(', ') || '-',\n p.version || '-',\n p.metadata?.module || 'uncategorized',\n p.metadata?.sealed ? 'yes' : 'no',\n p.metadata?.hidden ? 'yes' : 'no',\n String(childCount),\n p.originalProcessor?.metadata?.module || '-',\n p.author?.name || '-',\n ]);\n }\n\n writer.writeTable(\n [\n 'Command',\n 'Aliases',\n 'Version',\n 'Module',\n 'Sealed',\n 'Hidden',\n 'Children',\n 'Extends',\n 'Author',\n ],\n rows,\n );\n\n writer.writeln();\n writer.writeln(\n `Total: ${writer.wrapInColor(String(registry.processors.length), CliForegroundColor.Cyan)} root processors`,\n );\n },\n } as ICliCommandProcessor,\n {\n command: 'modules',\n description: 'List all loaded CLI modules',\n metadata: { icon: CliIcon.Module, module: 'system' },\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n\n let moduleRegistry: CliModuleRegistry;\n try {\n moduleRegistry = context.services.get<CliModuleRegistry>(\n CliModuleRegistry_TOKEN,\n );\n } catch {\n writer.writeError('Module registry not available.');\n return;\n }\n\n const modules = moduleRegistry.getAll();\n\n writer.writeln(\n writer.wrapInColor(\n 'Loaded Modules:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n const rows: string[][] = modules.map((m: ICliModule) => [\n m.name,\n m.version || '-',\n m.description || '-',\n String(m.processors?.length || 0),\n m.dependencies?.join(', ') || '-',\n ]);\n\n writer.writeTable(\n [\n 'Name',\n 'Version',\n 'Description',\n 'Processors',\n 'Dependencies',\n ],\n rows,\n );\n\n writer.writeln();\n writer.writeln(\n `Total: ${writer.wrapInColor(String(modules.length), CliForegroundColor.Cyan)} modules`,\n );\n },\n } as ICliCommandProcessor,\n {\n command: 'state',\n description: 'Inspect all state stores and their values',\n metadata: { icon: CliIcon.Database, module: 'system' },\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n const storeManager = context.services.get<CliStateStoreManager>(\n CliStateStoreManager_TOKEN,\n );\n\n const entries = storeManager.getStoreEntries();\n\n writer.writeln(\n writer.wrapInColor(\n 'State Stores:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n if (entries.length === 0) {\n writer.writeln(' No state stores initialized yet.');\n } else {\n for (const entry of entries) {\n writer.writeln(\n ` ${writer.wrapInColor(entry.name, CliForegroundColor.Cyan)}:`,\n );\n writer.writeJson(entry.state);\n writer.writeln();\n }\n }\n\n writer.writeln(\n `Total: ${writer.wrapInColor(String(entries.length), CliForegroundColor.Cyan)} stores`,\n );\n },\n } as ICliCommandProcessor,\n {\n command: 'services',\n description: 'List all registered services in the DI container',\n metadata: { icon: CliIcon.Gear, module: 'system' },\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n\n const container = context.services as CliServiceContainer;\n if (!container.getRegisteredServiceDetails) {\n writer.writeError('Service introspection not available.');\n return;\n }\n\n const details = container.getRegisteredServiceDetails();\n\n writer.writeln(\n writer.wrapInColor(\n 'Registered Services:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n writer.writeTable(\n ['Token', 'Type', 'Multi'],\n details.map((d) => [\n d.token,\n d.type,\n d.multi ? 'yes' : 'no',\n ]),\n );\n\n writer.writeln();\n writer.writeln(\n `Total: ${writer.wrapInColor(String(details.length), CliForegroundColor.Cyan)} services`,\n );\n },\n } as ICliCommandProcessor,\n {\n command: 'environment',\n description: 'Show browser, terminal, and framework information',\n metadata: { icon: CliIcon.Network, module: 'system' },\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n\n writer.writeln(\n writer.wrapInColor(\n 'Environment:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n writer.writeln(\n ` ${writer.wrapInColor('Core Version:', CliForegroundColor.Cyan)} ${CORE_VERSION}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('CLI Version:', CliForegroundColor.Cyan)} ${CLI_VERSION}`,\n );\n\n let framework = 'vanilla';\n try {\n framework = context.services.get<string>('cli-framework');\n } catch {\n // standalone usage\n }\n writer.writeln(\n ` ${writer.wrapInColor('Framework:', CliForegroundColor.Cyan)} ${framework}`,\n );\n\n writer.writeln(\n ` ${writer.wrapInColor('Terminal Cols:', CliForegroundColor.Cyan)} ${context.terminal.cols}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Terminal Rows:', CliForegroundColor.Cyan)} ${context.terminal.rows}`,\n );\n\n writer.writeln(\n ` ${writer.wrapInColor('Log Level:', CliForegroundColor.Cyan)} ${context.options?.logLevel ?? 'default'}`,\n );\n\n writer.writeln();\n if (typeof navigator !== 'undefined') {\n writer.writeln(\n ` ${writer.wrapInColor('User Agent:', CliForegroundColor.Cyan)} ${navigator.userAgent}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Language:', CliForegroundColor.Cyan)} ${navigator.language}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Platform:', CliForegroundColor.Cyan)} ${navigator.platform}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Online:', CliForegroundColor.Cyan)} ${navigator.onLine}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Cookies Enabled:', CliForegroundColor.Cyan)} ${navigator.cookieEnabled}`,\n );\n } else {\n writer.writeln(' Browser information not available.');\n }\n },\n } as ICliCommandProcessor,\n {\n command: 'history',\n description: 'Show command history statistics',\n metadata: { icon: CliIcon.Logs, module: 'system' },\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n const history = context.services.get<CliCommandHistory>(\n CliCommandHistory_TOKEN,\n );\n\n const commands = history.getHistory();\n const total = commands.length;\n\n writer.writeln(\n writer.wrapInColor(\n 'Command History Stats:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('Total Commands:', CliForegroundColor.Cyan)} ${total}`,\n );\n\n if (total > 0) {\n const unique = new Set(\n commands.map((c) => c.split(' ')[0]),\n );\n writer.writeln(\n ` ${writer.wrapInColor('Unique Commands:', CliForegroundColor.Cyan)} ${unique.size}`,\n );\n\n const freq = new Map<string, number>();\n for (const cmd of commands) {\n const root = cmd.split(' ')[0];\n freq.set(root, (freq.get(root) || 0) + 1);\n }\n const sorted = Array.from(freq.entries()).sort(\n (a, b) => b[1] - a[1],\n );\n const top = sorted.slice(0, 10);\n\n writer.writeln();\n writer.writeln(\n writer.wrapInColor(\n ' Most Used:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeTable(\n ['Command', 'Count'],\n top.map(([cmd, count]) => [cmd, String(count)]),\n );\n\n writer.writeln();\n writer.writeln(\n writer.wrapInColor(\n ' Recent Commands:',\n CliForegroundColor.Yellow,\n ),\n );\n const recent = commands.slice(-10);\n for (let i = recent.length - 1; i >= 0; i--) {\n writer.writeln(\n ` ${writer.wrapInColor(String(commands.length - (recent.length - 1 - i)), CliForegroundColor.Green)} ${recent[i]}`,\n );\n }\n }\n },\n } as ICliCommandProcessor,\n {\n command: 'health',\n description:\n 'Check system health: storage, connectivity, processor status',\n metadata: { icon: CliIcon.Heart, module: 'system' },\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n\n writer.writeln(\n writer.wrapInColor(\n 'Health Check:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n const indexedDBAvailable = typeof indexedDB !== 'undefined';\n writer.writeln(\n ` ${indexedDBAvailable ? CliIcon.CheckIcon : CliIcon.CrossIcon} IndexedDB: ${indexedDBAvailable ? 'available' : 'unavailable'}`,\n );\n\n let localStorageAvailable = false;\n try {\n localStorage.setItem('__cli_health_test', '1');\n localStorage.removeItem('__cli_health_test');\n localStorageAvailable = true;\n } catch {\n // not available\n }\n writer.writeln(\n ` ${localStorageAvailable ? CliIcon.CheckIcon : CliIcon.CrossIcon} localStorage: ${localStorageAvailable ? 'available' : 'unavailable'}`,\n );\n\n const online =\n typeof navigator !== 'undefined' ? navigator.onLine : false;\n writer.writeln(\n ` ${online ? CliIcon.CheckIcon : CliIcon.CrossIcon} Network: ${online ? 'online' : 'offline'}`,\n );\n\n const registry =\n context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n writer.writeln(\n ` ${CliIcon.CheckIcon} Processors: ${registry.processors.length} loaded`,\n );\n\n try {\n const moduleRegistry =\n context.services.get<CliModuleRegistry>(\n CliModuleRegistry_TOKEN,\n );\n const modules = moduleRegistry.getAll();\n writer.writeln(\n ` ${CliIcon.CheckIcon} Modules: ${modules.length} loaded`,\n );\n } catch {\n writer.writeln(\n ` ${CliIcon.WarningIcon} Modules: registry not available`,\n );\n }\n\n const wasmActive = isWasmAccelerated();\n writer.writeln(\n ` ${wasmActive ? CliIcon.CheckIcon : CliIcon.WarningIcon} WASM Accelerator: ${wasmActive ? 'loaded' : 'using JS fallback'}`,\n );\n\n const historyService = context.services.get<CliCommandHistory>(\n CliCommandHistory_TOKEN,\n );\n writer.writeln(\n ` ${CliIcon.CheckIcon} History: ${historyService.getHistory().length} commands stored`,\n );\n },\n } as ICliCommandProcessor,\n {\n command: 'export',\n description: 'Export all debug info as JSON',\n metadata: { icon: CliIcon.Save, module: 'system' },\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n const registry =\n context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n const history = context.services.get<CliCommandHistory>(\n CliCommandHistory_TOKEN,\n );\n const storeManager = context.services.get<CliStateStoreManager>(\n CliStateStoreManager_TOKEN,\n );\n\n const report: Record<string, any> = {\n versions: {\n core: CORE_VERSION,\n cli: CLI_VERSION,\n },\n wasmAccelerated: isWasmAccelerated(),\n environment: {\n userAgent:\n typeof navigator !== 'undefined'\n ? navigator.userAgent\n : 'N/A',\n language:\n typeof navigator !== 'undefined'\n ? navigator.language\n : 'N/A',\n platform:\n typeof navigator !== 'undefined'\n ? navigator.platform\n : 'N/A',\n online:\n typeof navigator !== 'undefined'\n ? navigator.onLine\n : false,\n terminalCols: context.terminal.cols,\n terminalRows: context.terminal.rows,\n },\n processors: registry.processors.map((p) => ({\n command: p.command,\n aliases: p.aliases || [],\n version: p.version || null,\n module: p.metadata?.module || 'uncategorized',\n sealed: p.metadata?.sealed || false,\n hidden: p.metadata?.hidden || false,\n children: this.countProcessors(p.processors || []),\n extends: p.originalProcessor?.metadata?.module || null,\n })),\n history: {\n total: history.getHistory().length,\n },\n state: storeManager.getStoreEntries(),\n };\n\n try {\n const moduleRegistry =\n context.services.get<CliModuleRegistry>(\n CliModuleRegistry_TOKEN,\n );\n report['modules'] = moduleRegistry\n .getAll()\n .map((m: ICliModule) => ({\n name: m.name,\n version: m.version || null,\n description: m.description || null,\n processors: m.processors?.length || 0,\n dependencies: m.dependencies || [],\n }));\n } catch {\n report['modules'] = 'registry not available';\n }\n\n const container = context.services as CliServiceContainer;\n if (container.getRegisteredTokens) {\n report['services'] = container.getRegisteredTokens();\n }\n\n try {\n const serverManager =\n context.services.get<CliServerManager>(\n CliServerManager_TOKEN,\n );\n if (serverManager && serverManager.connections.size > 0) {\n report['servers'] = Array.from(\n serverManager.connections.entries(),\n ).map(([name, conn]) => ({\n name,\n url: conn.config.url,\n connected: conn.connected,\n commands: conn.connected ? conn.commands.length : 0,\n }));\n }\n } catch {\n // skip\n }\n\n writer.writeJson(report);\n },\n } as ICliCommandProcessor,\n {\n command: 'servers',\n description: 'List configured servers and their connection status',\n metadata: { icon: CliIcon.Server, module: 'system' },\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n\n let manager: CliServerManager | undefined;\n try {\n manager = context.services.get<CliServerManager>(\n CliServerManager_TOKEN,\n );\n } catch {\n // not available\n }\n\n if (!manager || manager.connections.size === 0) {\n writer.writeInfo('No servers configured.');\n return;\n }\n\n writer.writeln(\n writer.wrapInColor(\n 'Configured Servers:',\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeln();\n\n const rows: string[][] = [];\n for (const [name, connection] of manager.connections) {\n rows.push([\n name,\n connection.config.url,\n connection.connected ? 'Connected' : 'Disconnected',\n connection.connected\n ? String(connection.commands.length)\n : '-',\n connection.config.timeout\n ? `${connection.config.timeout}ms`\n : 'default',\n ]);\n }\n\n writer.writeTable(\n ['Name', 'URL', 'Status', 'Commands', 'Timeout'],\n rows,\n );\n\n writer.writeln();\n\n const connected = Array.from(\n manager.connections.values(),\n ).filter((c) => c.connected).length;\n const total = manager.connections.size;\n writer.writeln(\n `Total: ${writer.wrapInColor(String(total), CliForegroundColor.Cyan)} servers (${writer.wrapInColor(String(connected), CliForegroundColor.Green)} connected)`,\n );\n },\n } as ICliCommandProcessor,\n ];\n\n async processCommand(\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const { writer } = context;\n const registry = context.services.get<ICliCommandProcessorRegistry>(\n CliProcessorsRegistry_TOKEN,\n );\n\n writer.writeln(\n writer.wrapInColor(\n `${CliIcon.Bug} CLI Debug Info`,\n CliForegroundColor.Yellow,\n ),\n );\n writer.writeDivider({ char: '=' });\n\n writer.writeln(\n ` ${writer.wrapInColor('Core Version:', CliForegroundColor.Cyan)} ${CORE_VERSION}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('CLI Version:', CliForegroundColor.Cyan)} ${CLI_VERSION}`,\n );\n\n let framework = 'vanilla';\n try {\n framework = context.services.get<string>('cli-framework');\n } catch {\n // standalone\n }\n writer.writeln(\n ` ${writer.wrapInColor('Framework:', CliForegroundColor.Cyan)} ${framework}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Terminal:', CliForegroundColor.Cyan)} ${context.terminal.cols}x${context.terminal.rows}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Processors:', CliForegroundColor.Cyan)} ${registry.processors.length}`,\n );\n\n try {\n const moduleRegistry = context.services.get<CliModuleRegistry>(\n CliModuleRegistry_TOKEN,\n );\n writer.writeln(\n ` ${writer.wrapInColor('Modules:', CliForegroundColor.Cyan)} ${moduleRegistry.getAll().length}`,\n );\n } catch {\n // skip\n }\n\n try {\n const serverManager = context.services.get<CliServerManager>(\n CliServerManager_TOKEN,\n );\n if (serverManager && serverManager.connections.size > 0) {\n const connected = Array.from(\n serverManager.connections.values(),\n ).filter((c) => c.connected).length;\n writer.writeln(\n ` ${writer.wrapInColor('Servers:', CliForegroundColor.Cyan)} ${connected}/${serverManager.connections.size} connected`,\n );\n }\n } catch {\n // skip\n }\n\n const history = context.services.get<CliCommandHistory>(\n CliCommandHistory_TOKEN,\n );\n writer.writeln(\n ` ${writer.wrapInColor('History:', CliForegroundColor.Cyan)} ${history.getHistory().length} commands`,\n );\n\n const wasmStatus = isWasmAccelerated() ? 'active' : 'inactive (JS fallback)';\n writer.writeln(\n ` ${writer.wrapInColor('WASM Accelerator:', CliForegroundColor.Cyan)} ${wasmStatus}`,\n );\n\n writer.writeDivider({ char: '=' });\n writer.writeln();\n writer.writeln(`${CliIcon.Light} Subcommands:`);\n for (const sub of this.processors || []) {\n writer.writeln(\n ` ${writer.wrapInColor(`debug ${sub.command}`, CliForegroundColor.Cyan)} ${sub.description}`,\n );\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.debug.long_description', 'Displays detailed system diagnostics and CLI internals.'),\n );\n writer.writeln(\n t.t('cli.debug.hidden_note', 'This command is hidden from the help listing but accessible directly.'),\n );\n writer.writeln();\n writer.writeln(t.t('cli.common.usage', 'Usage:'));\n writer.writeln(\n ` ${writer.wrapInColor('debug', CliForegroundColor.Cyan)} ${t.t('cli.debug.summary', 'System summary')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('debug processors', CliForegroundColor.Cyan)} ${t.t('cli.debug.processors', 'All registered processors')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('debug modules', CliForegroundColor.Cyan)} ${t.t('cli.debug.modules', 'All loaded modules')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('debug state', CliForegroundColor.Cyan)} ${t.t('cli.debug.state', 'Inspect state stores')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('debug services', CliForegroundColor.Cyan)} List DI services`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('debug environment', CliForegroundColor.Cyan)} Browser/terminal info`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('debug history', CliForegroundColor.Cyan)} Command history stats`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('debug health', CliForegroundColor.Cyan)} System health check`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('debug export', CliForegroundColor.Cyan)} Export all as JSON`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('debug servers', CliForegroundColor.Cyan)} Server connections`,\n );\n }\n\n private countProcessors(processors: ICliCommandProcessor[]): number {\n let count = processors.length;\n for (const p of processors) {\n if (p.processors) {\n count += this.countProcessors(p.processors);\n }\n }\n return count;\n }\n}\n","import { getAccelerator } from '../wasm';\n\n/**\n * Text buffer for the nano-style editor.\n * Manages lines of text, cursor position, scroll offset, and edit operations.\n */\nexport class NanoEditorBuffer {\n lines: string[] = [''];\n cursorRow = 0;\n cursorCol = 0;\n scrollOffset = 0;\n dirty = false;\n\n /** Clipboard for cut/uncut (Ctrl+K / Ctrl+U). */\n clipboard: string[] = [];\n\n /** Load content into the buffer, replacing existing content. */\n load(content: string): void {\n this.lines = content.split('\\n');\n if (this.lines.length === 0) {\n this.lines = [''];\n }\n this.cursorRow = 0;\n this.cursorCol = 0;\n this.scrollOffset = 0;\n this.dirty = false;\n }\n\n /** Get the full buffer content as a single string. */\n getContent(): string {\n return this.lines.join('\\n');\n }\n\n /** Insert a character at the current cursor position. */\n insertChar(ch: string): void {\n const line = this.lines[this.cursorRow];\n this.lines[this.cursorRow] =\n line.slice(0, this.cursorCol) + ch + line.slice(this.cursorCol);\n this.cursorCol += ch.length;\n this.dirty = true;\n }\n\n /** Insert a newline, splitting the current line at the cursor. */\n insertNewline(): void {\n const line = this.lines[this.cursorRow];\n const before = line.slice(0, this.cursorCol);\n const after = line.slice(this.cursorCol);\n this.lines[this.cursorRow] = before;\n this.lines.splice(this.cursorRow + 1, 0, after);\n this.cursorRow++;\n this.cursorCol = 0;\n this.dirty = true;\n }\n\n /** Delete the character before the cursor (backspace). */\n deleteCharBefore(): void {\n if (this.cursorCol > 0) {\n const line = this.lines[this.cursorRow];\n this.lines[this.cursorRow] =\n line.slice(0, this.cursorCol - 1) + line.slice(this.cursorCol);\n this.cursorCol--;\n this.dirty = true;\n } else if (this.cursorRow > 0) {\n const prevLine = this.lines[this.cursorRow - 1];\n const curLine = this.lines[this.cursorRow];\n this.cursorCol = prevLine.length;\n this.lines[this.cursorRow - 1] = prevLine + curLine;\n this.lines.splice(this.cursorRow, 1);\n this.cursorRow--;\n this.dirty = true;\n }\n }\n\n /** Delete the character at the cursor (delete key). */\n deleteCharAt(): void {\n const line = this.lines[this.cursorRow];\n if (this.cursorCol < line.length) {\n this.lines[this.cursorRow] =\n line.slice(0, this.cursorCol) + line.slice(this.cursorCol + 1);\n this.dirty = true;\n } else if (this.cursorRow < this.lines.length - 1) {\n this.lines[this.cursorRow] = line + this.lines[this.cursorRow + 1];\n this.lines.splice(this.cursorRow + 1, 1);\n this.dirty = true;\n }\n }\n\n /** Cut the entire current line (Ctrl+K), storing it in the clipboard. */\n deleteLine(): void {\n const cut = this.lines[this.cursorRow];\n this.clipboard.push(cut);\n\n if (this.lines.length === 1) {\n this.lines[0] = '';\n this.cursorCol = 0;\n } else {\n this.lines.splice(this.cursorRow, 1);\n if (this.cursorRow >= this.lines.length) {\n this.cursorRow = this.lines.length - 1;\n }\n this.cursorCol = Math.min(\n this.cursorCol,\n this.lines[this.cursorRow].length,\n );\n }\n this.dirty = true;\n }\n\n /** Paste (uncut) clipboard contents at the current cursor row. */\n uncutLines(): boolean {\n if (this.clipboard.length === 0) {\n return false;\n }\n this.lines.splice(this.cursorRow, 0, ...this.clipboard);\n this.cursorRow += this.clipboard.length;\n this.cursorCol = Math.min(\n this.cursorCol,\n this.lines[this.cursorRow].length,\n );\n this.clipboard = [];\n this.dirty = true;\n return true;\n }\n\n /** Move cursor up one line. */\n moveUp(): void {\n if (this.cursorRow > 0) {\n this.cursorRow--;\n this.cursorCol = Math.min(\n this.cursorCol,\n this.lines[this.cursorRow].length,\n );\n }\n }\n\n /** Move cursor down one line. */\n moveDown(): void {\n if (this.cursorRow < this.lines.length - 1) {\n this.cursorRow++;\n this.cursorCol = Math.min(\n this.cursorCol,\n this.lines[this.cursorRow].length,\n );\n }\n }\n\n /** Move cursor left one character. */\n moveLeft(): void {\n if (this.cursorCol > 0) {\n this.cursorCol--;\n } else if (this.cursorRow > 0) {\n this.cursorRow--;\n this.cursorCol = this.lines[this.cursorRow].length;\n }\n }\n\n /** Move cursor right one character. */\n moveRight(): void {\n if (this.cursorCol < this.lines[this.cursorRow].length) {\n this.cursorCol++;\n } else if (this.cursorRow < this.lines.length - 1) {\n this.cursorRow++;\n this.cursorCol = 0;\n }\n }\n\n /** Move cursor to the start of the current line. */\n moveHome(): void {\n this.cursorCol = 0;\n }\n\n /** Move cursor to the end of the current line. */\n moveEnd(): void {\n this.cursorCol = this.lines[this.cursorRow].length;\n }\n\n /** Move cursor up by a page (viewport height). */\n pageUp(viewportHeight: number): void {\n this.cursorRow = Math.max(0, this.cursorRow - viewportHeight);\n this.cursorCol = Math.min(\n this.cursorCol,\n this.lines[this.cursorRow].length,\n );\n }\n\n /** Move cursor down by a page (viewport height). */\n pageDown(viewportHeight: number): void {\n this.cursorRow = Math.min(\n this.lines.length - 1,\n this.cursorRow + viewportHeight,\n );\n this.cursorCol = Math.min(\n this.cursorCol,\n this.lines[this.cursorRow].length,\n );\n }\n\n /** Move cursor to the very first position in the buffer. */\n moveToStart(): void {\n this.cursorRow = 0;\n this.cursorCol = 0;\n }\n\n /** Move cursor to the very last position in the buffer. */\n moveToEnd(): void {\n this.cursorRow = this.lines.length - 1;\n this.cursorCol = this.lines[this.cursorRow].length;\n }\n\n /**\n * Search forward for `needle` starting from the current cursor position.\n * Returns true if found (and moves cursor there), false otherwise.\n */\n searchForward(needle: string, caseSensitive = false): boolean {\n if (!needle) return false;\n\n const accel = getAccelerator();\n const text = this.lines.join('\\n');\n const [row, col] = accel.textSearch(\n text, needle, this.cursorRow, this.cursorCol, caseSensitive, true,\n );\n\n if (row === -1) return false;\n\n this.cursorRow = row;\n this.cursorCol = col;\n return true;\n }\n\n /**\n * Replace the next occurrence of `needle` with `replacement`.\n * Returns true if a replacement was made.\n */\n replaceNext(\n needle: string,\n replacement: string,\n caseSensitive = false,\n ): boolean {\n if (!needle) return false;\n\n const line = this.lines[this.cursorRow];\n const search = caseSensitive ? needle : needle.toLowerCase();\n const haystack = caseSensitive ? line : line.toLowerCase();\n\n if (haystack.startsWith(search, this.cursorCol)) {\n this.lines[this.cursorRow] =\n line.slice(0, this.cursorCol) +\n replacement +\n line.slice(this.cursorCol + needle.length);\n this.cursorCol += replacement.length;\n this.dirty = true;\n return true;\n }\n return false;\n }\n\n /**\n * Replace all occurrences of `needle` with `replacement`.\n * Returns the number of replacements made.\n */\n replaceAll(\n needle: string,\n replacement: string,\n caseSensitive = false,\n ): number {\n if (!needle) return 0;\n\n const accel = getAccelerator();\n const text = this.lines.join('\\n');\n const result = accel.textReplaceAll(text, needle, replacement, caseSensitive);\n\n if (result.count > 0) {\n this.lines = result.text.split('\\n');\n this.dirty = true;\n }\n\n return result.count;\n }\n\n /**\n * Ensure the cursor row is visible within the viewport.\n * @param viewportHeight Number of visible content rows\n */\n ensureVisible(viewportHeight: number): void {\n if (this.cursorRow < this.scrollOffset) {\n this.scrollOffset = this.cursorRow;\n } else if (this.cursorRow >= this.scrollOffset + viewportHeight) {\n this.scrollOffset = this.cursorRow - viewportHeight + 1;\n }\n }\n}\n","import { Terminal } from '@xterm/xterm';\nimport { NanoEditorBuffer } from './nano-editor-buffer';\n\n/**\n * Renders the nano-style editor UI to an xterm.js terminal.\n * Uses alternate screen buffer to preserve scroll history.\n */\nexport class NanoEditorRenderer {\n constructor(private readonly terminal: Terminal) {}\n\n /** Enter alternate screen buffer and hide default cursor. */\n enterAlternateScreen(): void {\n this.terminal.write('\\x1b[?1049h');\n this.terminal.write('\\x1b[?25l');\n }\n\n /** Leave alternate screen buffer and restore cursor. */\n leaveAlternateScreen(): void {\n this.terminal.write('\\x1b[?25h');\n this.terminal.write('\\x1b[?1049l');\n }\n\n /** Get the number of content rows available (total rows minus title and status bars). */\n get contentHeight(): number {\n return this.terminal.rows - 3;\n }\n\n /** Full redraw of the editor screen. */\n render(\n buffer: NanoEditorBuffer,\n fileName: string,\n statusMessage?: string,\n ): void {\n const { rows, cols } = this.terminal;\n\n buffer.ensureVisible(this.contentHeight);\n\n let output = '\\x1b[?25l';\n\n // Title bar (row 1)\n output += '\\x1b[H';\n output += this.renderTitleBar(fileName, buffer.dirty, cols);\n\n // Content area (rows 2 to rows-2)\n for (let i = 0; i < this.contentHeight; i++) {\n const lineIdx = buffer.scrollOffset + i;\n output += `\\x1b[${i + 2};1H`;\n output += '\\x1b[2K';\n\n if (lineIdx < buffer.lines.length) {\n const line = buffer.lines[lineIdx];\n output += line.length > cols ? line.slice(0, cols) : line;\n }\n }\n\n // Shortcut bar (row rows-1) and status bar (row rows)\n output += `\\x1b[${rows - 1};1H`;\n output += this.renderShortcutBar(cols);\n output += `\\x1b[${rows};1H`;\n output += this.renderStatusBar(statusMessage, cols);\n\n // Position cursor\n const screenRow = buffer.cursorRow - buffer.scrollOffset + 2;\n const screenCol = buffer.cursorCol + 1;\n output += `\\x1b[${screenRow};${screenCol}H`;\n output += '\\x1b[?25h';\n\n this.terminal.write(output);\n }\n\n /** Render just the status bar (for transient messages). */\n renderStatusOnly(buffer: NanoEditorBuffer, statusMessage: string): void {\n const { rows, cols } = this.terminal;\n\n let output = `\\x1b[${rows};1H`;\n output += this.renderStatusBar(statusMessage, cols);\n\n const screenRow = buffer.cursorRow - buffer.scrollOffset + 2;\n const screenCol = buffer.cursorCol + 1;\n output += `\\x1b[${screenRow};${screenCol}H`;\n\n this.terminal.write(output);\n }\n\n /** Render the help screen. */\n renderHelp(): void {\n const { rows, cols } = this.terminal;\n\n const helpLines = [\n '',\n ' CLI Nano Help',\n '',\n ' Main shortcuts:',\n '',\n ' ^G Help ^O Write Out ^F Search ^K Cut Line',\n ' ^X Exit ^R Read File ^\\\\ Replace ^U Paste Line',\n '',\n ' Navigation:',\n '',\n ' ^A Home ^E End ^Y Page Up ^V Page Down',\n ' ^P Prev Line ^N Next Line Arrow Keys ^B Backward',\n '',\n ' Other:',\n '',\n ' ^C Cur Pos ^S Save (alt) ^J Justify ^T To Spell',\n '',\n ' Arrow keys, Home, End, Page Up, Page Down also work.',\n '',\n '',\n ' [ Press any key to return ]',\n ];\n\n let output = '\\x1b[?25l\\x1b[H';\n\n // Title\n const title = ' CLI Nano Help';\n output += `\\x1b[7m${title.padEnd(cols)}\\x1b[0m`;\n\n for (let i = 0; i < rows - 2; i++) {\n output += `\\x1b[${i + 2};1H\\x1b[2K`;\n if (i < helpLines.length) {\n output += helpLines[i].slice(0, cols);\n }\n }\n\n // Bottom bar\n output += `\\x1b[${rows};1H`;\n output += `\\x1b[7m${' [ Press any key to return ]'.padEnd(cols)}\\x1b[0m`;\n\n this.terminal.write(output);\n }\n\n private renderTitleBar(\n fileName: string,\n dirty: boolean,\n cols: number,\n ): string {\n const title = ` CLI Nano ${fileName || 'New Buffer'}${dirty ? ' (modified)' : ''}`;\n const padded = title.padEnd(cols);\n return `\\x1b[7m${padded}\\x1b[0m`;\n }\n\n private renderShortcutBar(cols: number): string {\n const shortcuts =\n '^G Help ^O Write Out ^F Search ^K Cut ^C Cur Pos';\n const padded = shortcuts.padEnd(cols);\n return `\\x1b[7m${padded}\\x1b[0m`;\n }\n\n private renderStatusBar(\n statusMessage: string | undefined,\n cols: number,\n ): string {\n const text =\n statusMessage ||\n '^X Exit ^R Read File ^\\\\ Replace ^U Paste ^S Save';\n const padded = text.padEnd(cols);\n return `\\x1b[7m${padded}\\x1b[0m`;\n }\n}\n","import {\n CliProcessCommand,\n ICliCommandProcessor,\n ICliExecutionContext,\n CliProcessorMetadata,\n CliIcon,\n CliForegroundColor,\n DefaultLibraryAuthor,\n} from '@qodalis/cli-core';\nimport { NanoEditorBuffer } from '../../editor/nano-editor-buffer';\nimport { NanoEditorRenderer } from '../../editor/nano-editor-renderer';\n\n/** Token string for IFileSystemService — avoid hard dependency on files plugin. */\nconst FS_TOKEN = 'cli-file-system-service';\n\n/** Minimal interface for file operations (matches IFileSystemService). */\ninterface FileSystemLike {\n readFile(path: string): string | null;\n writeFile(path: string, content: string, append?: boolean): void;\n createFile(path: string, content?: string): void;\n exists(path: string): boolean;\n isDirectory(path: string): boolean;\n resolvePath(path: string): string;\n persist(): Promise<void>;\n}\n\n/** Tracks which interactive prompt is active. */\ntype InputMode =\n | 'normal'\n | 'help'\n | 'filename'\n | 'search'\n | 'replace-needle'\n | 'replace-with'\n | 'replace-confirm'\n | 'exit-save-prompt'\n | 'read-file';\n\nexport class CliNanoCommandProcessor implements ICliCommandProcessor {\n command = 'nano';\n aliases = ['edit'];\n description = 'Open the built-in text editor';\n author = DefaultLibraryAuthor;\n acceptsRawInput = true;\n metadata: CliProcessorMetadata = {\n icon: '📝',\n module: 'system',\n };\n\n private buffer!: NanoEditorBuffer;\n private renderer!: NanoEditorRenderer;\n private filePath: string | null = null;\n private fs: FileSystemLike | null = null;\n private context!: ICliExecutionContext;\n private resizeDisposable: { dispose(): void } | null = null;\n private statusMessage: string | undefined;\n private statusTimeout: ReturnType<typeof setTimeout> | null = null;\n\n private inputMode: InputMode = 'normal';\n private inputBuffer = '';\n private searchNeedle = '';\n private replaceWith = '';\n private replaceAllMode = false;\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n this.context = context;\n this.buffer = new NanoEditorBuffer();\n this.renderer = new NanoEditorRenderer(context.terminal);\n this.inputMode = 'normal';\n this.inputBuffer = '';\n this.searchNeedle = '';\n this.replaceWith = '';\n this.statusMessage = undefined;\n\n // Try to get filesystem service (optional)\n try {\n this.fs = context.services.get<FileSystemLike>(FS_TOKEN);\n } catch {\n this.fs = null;\n }\n\n // Parse file path from command\n const args = (command.value || '').trim();\n if (args) {\n this.filePath = args;\n\n if (this.fs) {\n try {\n const resolved = this.fs.resolvePath(this.filePath);\n if (\n this.fs.exists(resolved) &&\n !this.fs.isDirectory(resolved)\n ) {\n const content = this.fs.readFile(resolved);\n if (content !== null) {\n this.buffer.load(content);\n }\n this.filePath = resolved;\n } else if (\n this.fs.exists(resolved) &&\n this.fs.isDirectory(resolved)\n ) {\n context.writer.writeError(\n `${this.filePath} is a directory`,\n );\n return;\n } else {\n this.filePath = resolved;\n // New file — empty buffer is fine\n }\n } catch (e: any) {\n context.writer.writeError(\n e.message || 'Error opening file',\n );\n return;\n }\n }\n } else {\n this.filePath = null;\n }\n\n // Enter full-screen editor mode\n context.enterFullScreenMode(this);\n this.renderer.render(this.buffer, this.filePath || 'New Buffer');\n\n // Handle terminal resize\n this.resizeDisposable = context.terminal.onResize(() => {\n if (this.inputMode === 'help') {\n this.renderer.renderHelp();\n } else {\n this.renderer.render(\n this.buffer,\n this.filePath || 'New Buffer',\n this.statusMessage,\n );\n }\n });\n }\n\n async onData(data: string, context: ICliExecutionContext): Promise<void> {\n switch (this.inputMode) {\n case 'help':\n // Any key returns to editor\n this.inputMode = 'normal';\n this.render();\n return;\n\n case 'filename':\n this.handleTextPrompt(data, (name) => {\n if (name) {\n this.filePath = this.fs!.resolvePath(name);\n this.save();\n } else {\n this.showStatus('Cancelled');\n }\n });\n return;\n\n case 'search':\n this.handleTextPrompt(data, (query) => {\n if (query) {\n this.searchNeedle = query;\n if (this.buffer.searchForward(this.searchNeedle)) {\n this.render();\n } else {\n this.showStatus(`\"${this.searchNeedle}\" not found`);\n }\n } else {\n this.showStatus('Cancelled');\n }\n });\n return;\n\n case 'replace-needle':\n this.handleTextPrompt(data, (needle) => {\n if (needle) {\n this.searchNeedle = needle;\n this.inputMode = 'replace-with';\n this.inputBuffer = this.replaceWith;\n this.renderPrompt(`Replace with: ${this.inputBuffer}`);\n } else {\n this.showStatus('Cancelled');\n }\n });\n return;\n\n case 'replace-with':\n this.handleTextPrompt(data, (replacement) => {\n this.replaceWith = replacement ?? '';\n if (this.replaceAllMode) {\n const count = this.buffer.replaceAll(\n this.searchNeedle,\n this.replaceWith,\n );\n this.showStatus(\n count > 0\n ? `Replaced ${count} occurrence${count > 1 ? 's' : ''}`\n : `\"${this.searchNeedle}\" not found`,\n );\n } else {\n // Find first match and ask for confirmation\n if (this.buffer.searchForward(this.searchNeedle)) {\n this.inputMode = 'replace-confirm';\n this.render();\n this.renderPrompt(\n 'Replace this instance? [Y]es/[N]o/[A]ll/[C]ancel',\n );\n } else {\n this.showStatus(`\"${this.searchNeedle}\" not found`);\n }\n }\n });\n return;\n\n case 'replace-confirm':\n this.handleReplaceConfirm(data);\n return;\n\n case 'exit-save-prompt':\n this.handleExitSavePrompt(data);\n return;\n\n case 'read-file':\n this.handleTextPrompt(data, (path) => {\n if (path) {\n this.readFileIntoBuffer(path);\n } else {\n this.showStatus('Cancelled');\n }\n });\n return;\n\n default:\n break;\n }\n\n // ── Normal mode key handling ──\n\n // Ctrl+X — Exit\n if (data === '\\x18') {\n this.exitEditor();\n return;\n }\n\n // Ctrl+O — Write Out (save)\n if (data === '\\x0F') {\n await this.writeOut();\n return;\n }\n\n // Ctrl+S — Save (common alternative)\n if (data === '\\x13') {\n await this.save();\n return;\n }\n\n // Ctrl+G — Help\n if (data === '\\x07') {\n this.inputMode = 'help';\n this.renderer.renderHelp();\n return;\n }\n\n // Ctrl+W or Ctrl+F — Where Is (search)\n if (data === '\\x17' || data === '\\x06') {\n this.inputMode = 'search';\n this.inputBuffer = this.searchNeedle;\n this.renderPrompt(`Search: ${this.inputBuffer}`);\n return;\n }\n\n // Ctrl+\\ — Replace\n if (data === '\\x1C') {\n this.replaceAllMode = false;\n this.inputMode = 'replace-needle';\n this.inputBuffer = this.searchNeedle;\n this.renderPrompt(`Search (to replace): ${this.inputBuffer}`);\n return;\n }\n\n // Ctrl+K — Cut line\n if (data === '\\x0B') {\n this.buffer.deleteLine();\n this.render();\n return;\n }\n\n // Ctrl+U — Uncut (paste)\n if (data === '\\x15') {\n if (this.buffer.uncutLines()) {\n this.render();\n } else {\n this.showStatus('Clipboard is empty');\n }\n return;\n }\n\n // Ctrl+C — Cursor position\n if (data === '\\x03') {\n const row = this.buffer.cursorRow + 1;\n const col = this.buffer.cursorCol + 1;\n const total = this.buffer.lines.length;\n this.showStatus(`line ${row}/${total}, col ${col}`);\n return;\n }\n\n // Ctrl+R — Read File\n if (data === '\\x12') {\n if (!this.fs) {\n this.showStatus('No filesystem available');\n return;\n }\n this.inputMode = 'read-file';\n this.inputBuffer = '';\n this.renderPrompt('File to insert: ');\n return;\n }\n\n // Ctrl+A — Home (beginning of line)\n if (data === '\\x01') {\n this.buffer.moveHome();\n this.render();\n return;\n }\n\n // Ctrl+E — End (end of line)\n if (data === '\\x05') {\n this.buffer.moveEnd();\n this.render();\n return;\n }\n\n // Ctrl+P — Previous line\n if (data === '\\x10') {\n this.buffer.moveUp();\n this.render();\n return;\n }\n\n // Ctrl+N — Next line\n if (data === '\\x0E') {\n this.buffer.moveDown();\n this.render();\n return;\n }\n\n // Ctrl+F is remapped to Search (above) — use arrow keys for cursor movement\n\n // Ctrl+B — Backward (left)\n if (data === '\\x02') {\n this.buffer.moveLeft();\n this.render();\n return;\n }\n\n // Ctrl+Y — Page Up\n if (data === '\\x19') {\n this.buffer.pageUp(this.renderer.contentHeight);\n this.render();\n return;\n }\n\n // Ctrl+V — Page Down\n if (data === '\\x16') {\n this.buffer.pageDown(this.renderer.contentHeight);\n this.render();\n return;\n }\n\n // Enter\n if (data === '\\r') {\n this.buffer.insertNewline();\n this.render();\n return;\n }\n\n // Backspace\n if (data === '\\x7F') {\n this.buffer.deleteCharBefore();\n this.render();\n return;\n }\n\n // Delete key (escape sequence)\n if (data === '\\x1b[3~') {\n this.buffer.deleteCharAt();\n this.render();\n return;\n }\n\n // Arrow keys\n if (data === '\\x1b[A') {\n this.buffer.moveUp();\n this.render();\n return;\n }\n if (data === '\\x1b[B') {\n this.buffer.moveDown();\n this.render();\n return;\n }\n if (data === '\\x1b[C') {\n this.buffer.moveRight();\n this.render();\n return;\n }\n if (data === '\\x1b[D') {\n this.buffer.moveLeft();\n this.render();\n return;\n }\n\n // Home / End\n if (data === '\\x1b[H' || data === '\\x1b[1~') {\n this.buffer.moveHome();\n this.render();\n return;\n }\n if (data === '\\x1b[F' || data === '\\x1b[4~') {\n this.buffer.moveEnd();\n this.render();\n return;\n }\n\n // Page Up / Page Down\n if (data === '\\x1b[5~') {\n this.buffer.pageUp(this.renderer.contentHeight);\n this.render();\n return;\n }\n if (data === '\\x1b[6~') {\n this.buffer.pageDown(this.renderer.contentHeight);\n this.render();\n return;\n }\n\n // Ignore other escape sequences\n if (data.startsWith('\\x1b')) {\n return;\n }\n\n // Ignore other control characters\n if (data.length === 1 && data.charCodeAt(0) < 32) {\n return;\n }\n\n // Printable text — insert\n this.buffer.insertChar(data);\n this.render();\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.nano.long_description', 'Open the built-in nano-style text editor'));\n writer.writeln();\n writer.writeln(t.t('cli.common.usage', 'Usage:'));\n writer.writeln(\n ` ${writer.wrapInColor('nano', CliForegroundColor.Cyan)} ${t.t('cli.nano.open_empty', 'Open empty scratch buffer')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('nano <file>', CliForegroundColor.Cyan)} ${t.t('cli.nano.open_file', 'Open or create a file')}`,\n );\n writer.writeln();\n writer.writeln(t.t('cli.nano.keyboard_shortcuts', 'Keyboard shortcuts:'));\n writer.writeln(\n ` ${writer.wrapInColor('^X', CliForegroundColor.Yellow)} Exit ${writer.wrapInColor('^O', CliForegroundColor.Yellow)} Write Out (save)`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('^G', CliForegroundColor.Yellow)} Help ${writer.wrapInColor('^F', CliForegroundColor.Yellow)} Search`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('^K', CliForegroundColor.Yellow)} Cut line ${writer.wrapInColor('^U', CliForegroundColor.Yellow)} Paste line`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('^\\\\', CliForegroundColor.Yellow)} Replace ${writer.wrapInColor('^R', CliForegroundColor.Yellow)} Read File`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('^C', CliForegroundColor.Yellow)} Cursor position ${writer.wrapInColor('^S', CliForegroundColor.Yellow)} Save (quick)`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('^A', CliForegroundColor.Yellow)} Home ${writer.wrapInColor('^E', CliForegroundColor.Yellow)} End`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('^Y', CliForegroundColor.Yellow)} Page Up ${writer.wrapInColor('^V', CliForegroundColor.Yellow)} Page Down`,\n );\n }\n\n // ── Rendering helpers ──\n\n private render(): void {\n this.renderer.render(\n this.buffer,\n this.filePath || 'New Buffer',\n this.statusMessage,\n );\n }\n\n private renderPrompt(prompt: string): void {\n this.renderer.renderStatusOnly(this.buffer, ` ${prompt}`);\n }\n\n private showStatus(message: string, duration = 2000): void {\n this.statusMessage = ` ${message}`;\n this.renderer.renderStatusOnly(this.buffer, this.statusMessage);\n\n if (this.statusTimeout) {\n clearTimeout(this.statusTimeout);\n }\n this.statusTimeout = setTimeout(() => {\n this.statusMessage = undefined;\n this.render();\n }, duration);\n }\n\n // ── Generic text prompt handler ──\n\n private handleTextPrompt(\n data: string,\n onConfirm: (value: string | null) => void,\n ): void {\n if (data === '\\r') {\n // Enter — confirm\n this.inputMode = 'normal';\n onConfirm(this.inputBuffer.trim() || null);\n return;\n }\n\n if (data === '\\x1b' || data === '\\x03') {\n // Escape or Ctrl+C — cancel\n this.inputMode = 'normal';\n onConfirm(null);\n return;\n }\n\n if (data === '\\x7F') {\n // Backspace\n if (this.inputBuffer.length > 0) {\n this.inputBuffer = this.inputBuffer.slice(0, -1);\n }\n } else if (data.length === 1 && data.charCodeAt(0) >= 32) {\n // Printable character\n this.inputBuffer += data;\n } else {\n return;\n }\n\n // Re-render the current prompt with updated input\n const label = this.getPromptLabel();\n this.renderPrompt(`${label}${this.inputBuffer}`);\n }\n\n private getPromptLabel(): string {\n switch (this.inputMode) {\n case 'filename':\n return 'File Name to Write: ';\n case 'search':\n return 'Search: ';\n case 'replace-needle':\n return 'Search (to replace): ';\n case 'replace-with':\n return 'Replace with: ';\n case 'read-file':\n return 'File to insert: ';\n default:\n return '';\n }\n }\n\n // ── Replace confirmation handler ──\n\n private handleReplaceConfirm(data: string): void {\n const key = data.toLowerCase();\n\n if (key === 'y') {\n this.buffer.replaceNext(this.searchNeedle, this.replaceWith);\n // Search for next occurrence\n if (this.buffer.searchForward(this.searchNeedle)) {\n this.render();\n this.renderPrompt(\n 'Replace this instance? [Y]es/[N]o/[A]ll/[C]ancel',\n );\n } else {\n this.inputMode = 'normal';\n this.showStatus('No more occurrences');\n }\n } else if (key === 'n') {\n // Skip this occurrence, search for next\n if (this.buffer.searchForward(this.searchNeedle)) {\n this.render();\n this.renderPrompt(\n 'Replace this instance? [Y]es/[N]o/[A]ll/[C]ancel',\n );\n } else {\n this.inputMode = 'normal';\n this.showStatus('No more occurrences');\n }\n } else if (key === 'a') {\n // Replace all remaining\n const count = this.buffer.replaceAll(\n this.searchNeedle,\n this.replaceWith,\n );\n this.inputMode = 'normal';\n this.showStatus(\n `Replaced ${count} occurrence${count !== 1 ? 's' : ''}`,\n );\n } else if (key === 'c' || data === '\\x1b' || data === '\\x03') {\n // Cancel\n this.inputMode = 'normal';\n this.showStatus('Cancelled');\n }\n }\n\n // ── Exit handler (^X) — matches real nano behavior ──\n\n private exitEditor(): void {\n if (!this.buffer.dirty) {\n this.cleanup();\n return;\n }\n\n // Prompt: \"Save modified buffer?\"\n this.inputMode = 'exit-save-prompt';\n this.renderPrompt('Save modified buffer? [Y]es/[N]o/[C]ancel');\n }\n\n private handleExitSavePrompt(data: string): void {\n const key = data.toLowerCase();\n\n if (key === 'y') {\n this.inputMode = 'normal';\n // Save then exit\n this.save().then(() => {\n this.cleanup();\n });\n } else if (key === 'n') {\n // Discard and exit\n this.inputMode = 'normal';\n this.cleanup();\n } else if (key === 'c' || data === '\\x1b' || data === '\\x03') {\n // Cancel — return to editor\n this.inputMode = 'normal';\n this.render();\n }\n }\n\n // ── Write Out (^O) — save with filename prompt ──\n\n private async writeOut(): Promise<void> {\n if (!this.fs) {\n this.showStatus(\n 'No filesystem available — install @qodalis/cli-files',\n );\n return;\n }\n\n if (!this.filePath) {\n this.inputMode = 'filename';\n this.inputBuffer = '';\n this.renderPrompt('File Name to Write: ');\n return;\n }\n\n // Show filename in prompt, allow editing\n this.inputMode = 'filename';\n this.inputBuffer = this.filePath;\n this.renderPrompt(`File Name to Write: ${this.inputBuffer}`);\n }\n\n // ── Save (direct, no prompt if path is known) ──\n\n private async save(): Promise<void> {\n if (!this.fs) {\n this.showStatus(\n 'No filesystem available — install @qodalis/cli-files',\n );\n return;\n }\n\n if (!this.filePath) {\n this.inputMode = 'filename';\n this.inputBuffer = '';\n this.renderPrompt('File Name to Write: ');\n return;\n }\n\n try {\n const content = this.buffer.getContent();\n if (this.fs.exists(this.filePath)) {\n this.fs.writeFile(this.filePath, content);\n } else {\n this.fs.createFile(this.filePath, content);\n }\n await this.fs.persist();\n this.buffer.dirty = false;\n this.showStatus(\n `Wrote ${this.buffer.lines.length} lines to ${this.filePath}`,\n );\n } catch (e: any) {\n this.showStatus(`Error: ${e.message}`);\n }\n }\n\n // ── Read File (^R) — insert file contents at cursor ──\n\n private readFileIntoBuffer(path: string): void {\n if (!this.fs) {\n this.showStatus('No filesystem available');\n return;\n }\n\n try {\n const resolved = this.fs.resolvePath(path);\n if (!this.fs.exists(resolved)) {\n this.showStatus(`File not found: ${path}`);\n return;\n }\n if (this.fs.isDirectory(resolved)) {\n this.showStatus(`${path} is a directory`);\n return;\n }\n const content = this.fs.readFile(resolved);\n if (content === null) {\n this.showStatus(`Could not read: ${path}`);\n return;\n }\n\n const lines = content.split('\\n');\n // Insert lines at current cursor row\n this.buffer.lines.splice(this.buffer.cursorRow + 1, 0, ...lines);\n this.buffer.dirty = true;\n this.showStatus(`Read ${lines.length} lines from ${path}`);\n } catch (e: any) {\n this.showStatus(`Error: ${e.message}`);\n }\n }\n\n // ── Cleanup ──\n\n private cleanup(): void {\n if (this.statusTimeout) {\n clearTimeout(this.statusTimeout);\n }\n this.resizeDisposable?.dispose();\n this.context.exitFullScreenMode();\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n ICliBackgroundServiceInfo,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\n/**\n * Format an uptime value (in milliseconds) as a human-readable string.\n * Examples: \"12m 34s\", \"2h 15m\", \"3d 1h\".\n */\nfunction formatUptime(ms: number): string {\n const seconds = Math.floor(ms / 1000) % 60;\n const minutes = Math.floor(ms / (1000 * 60)) % 60;\n const hours = Math.floor(ms / (1000 * 60 * 60)) % 24;\n const days = Math.floor(ms / (1000 * 60 * 60 * 24));\n\n const parts: string[] = [];\n if (days > 0) parts.push(`${days}d`);\n if (hours > 0) parts.push(`${hours}h`);\n if (minutes > 0) parts.push(`${minutes}m`);\n parts.push(`${seconds}s`);\n\n return parts.join(' ');\n}\n\n/**\n * Return a color-coded status string.\n * running = Green, stopped = White, failed = Red, done = Cyan, pending = Yellow.\n */\nfunction colorStatus(\n status: string,\n wrapInColor: (text: string, color: CliForegroundColor) => string,\n): string {\n switch (status) {\n case 'running':\n return wrapInColor(status, CliForegroundColor.Green);\n case 'stopped':\n return wrapInColor(status, CliForegroundColor.White);\n case 'failed':\n return wrapInColor(status, CliForegroundColor.Red);\n case 'done':\n return wrapInColor(status, CliForegroundColor.Cyan);\n case 'pending':\n return wrapInColor(status, CliForegroundColor.Yellow);\n default:\n return status;\n }\n}\n\nexport class CliServicesCommandProcessor implements ICliCommandProcessor {\n command = 'services';\n\n aliases = ['svc'];\n\n description = 'Manage background services and jobs';\n\n author = DefaultLibraryAuthor;\n\n processors?: ICliCommandProcessor[] = [];\n\n metadata?: CliProcessorMetadata = {\n sealed: true,\n icon: '\\u2699',\n module: 'system',\n };\n\n constructor() {\n this.processors = [\n // ── list ──────────────────────────────────────────────\n {\n command: 'list',\n aliases: ['ls'],\n description: 'List all registered background services',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const { writer } = context;\n const services = context.backgroundServices.list();\n\n if (services.length === 0) {\n writer.writeInfo('No background services registered');\n return;\n }\n\n const rows = services.map(\n (svc: ICliBackgroundServiceInfo) => [\n svc.name,\n svc.type,\n colorStatus(\n svc.status,\n writer.wrapInColor.bind(writer),\n ),\n svc.executionMode,\n svc.status === 'running' && svc.uptime != null\n ? formatUptime(svc.uptime)\n : '-',\n ],\n );\n\n writer.writeTable(\n ['Name', 'Type', 'Status', 'Mode', 'Uptime'],\n rows,\n );\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'List all registered background services with their status',\n );\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('services list', CliForegroundColor.Cyan)}`,\n );\n },\n },\n\n // ── start ─────────────────────────────────────────────\n {\n command: 'start',\n description: 'Start a background service',\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const name = command.value as string;\n try {\n await context.backgroundServices.start(name);\n context.writer.writeSuccess(\n `Service '${name}' started`,\n );\n } catch (err: any) {\n context.writer.writeError(\n err?.message || `Failed to start service '${name}'`,\n );\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Start a registered background service');\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('services start <name>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n\n // ── stop ──────────────────────────────────────────────\n {\n command: 'stop',\n description: 'Stop a running background service',\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const name = command.value as string;\n try {\n await context.backgroundServices.stop(name);\n context.writer.writeSuccess(\n `Service '${name}' stopped`,\n );\n } catch (err: any) {\n context.writer.writeError(\n err?.message || `Failed to stop service '${name}'`,\n );\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln('Stop a running background service');\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('services stop <name>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n\n // ── restart ───────────────────────────────────────────\n {\n command: 'restart',\n description: 'Restart a background service',\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const name = command.value as string;\n try {\n await context.backgroundServices.restart(name);\n context.writer.writeSuccess(\n `Service '${name}' restarted`,\n );\n } catch (err: any) {\n context.writer.writeError(\n err?.message ||\n `Failed to restart service '${name}'`,\n );\n context.process.exit(-1);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Restart a background service (stop then start)',\n );\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('services restart <name>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n\n // ── logs ──────────────────────────────────────────────\n {\n command: 'logs',\n description: 'Show logs for a background service',\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const name = command.value as string;\n const limit =\n parseInt(command.args['limit'] || command.args['n']) ||\n 50;\n const { writer } = context;\n\n const entries = context.backgroundServices.getLogs(\n name,\n limit,\n );\n\n if (entries.length === 0) {\n writer.writeInfo(\n `No log entries for service '${name}'`,\n );\n return;\n }\n\n for (const entry of entries) {\n const ts = new Date(entry.timestamp).toLocaleString();\n let levelStr: string;\n switch (entry.level) {\n case 'error':\n levelStr = writer.wrapInColor(\n 'ERR',\n CliForegroundColor.Red,\n );\n break;\n case 'warn':\n levelStr = writer.wrapInColor(\n 'WRN',\n CliForegroundColor.Yellow,\n );\n break;\n default:\n levelStr = writer.wrapInColor(\n 'INF',\n CliForegroundColor.Cyan,\n );\n break;\n }\n writer.writeln(`[${ts}] ${levelStr} ${entry.message}`);\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Display recent log entries for a background service',\n );\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('services logs <name>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('services logs <name> --limit 100', CliForegroundColor.Cyan)}`,\n );\n },\n },\n\n // ── info ──────────────────────────────────────────────\n {\n command: 'info',\n description: 'Show detailed information about a service',\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const name = command.value as string;\n const { writer } = context;\n\n const info = context.backgroundServices.getStatus(name);\n if (!info) {\n writer.writeError(`Service '${name}' not found`);\n context.process.exit(-1);\n return;\n }\n\n writer.writeln(\n writer.wrapInColor(\n `Service: ${info.name}`,\n CliForegroundColor.Cyan,\n ),\n );\n writer.writeln(\n ` Description : ${info.description || '-'}`,\n );\n writer.writeln(` Type : ${info.type}`);\n writer.writeln(\n ` Status : ${colorStatus(info.status, writer.wrapInColor.bind(writer))}`,\n );\n writer.writeln(` Mode : ${info.executionMode}`);\n\n if (info.startedAt) {\n writer.writeln(\n ` Started at : ${new Date(info.startedAt).toLocaleString()}`,\n );\n }\n if (info.stoppedAt) {\n writer.writeln(\n ` Stopped at : ${new Date(info.stoppedAt).toLocaleString()}`,\n );\n }\n if (\n info.status === 'running' &&\n info.uptime != null\n ) {\n writer.writeln(\n ` Uptime : ${writer.wrapInColor(formatUptime(info.uptime), CliForegroundColor.Green)}`,\n );\n }\n if (info.error) {\n writer.writeln(\n ` Error : ${writer.wrapInColor(info.error, CliForegroundColor.Red)}`,\n );\n }\n },\n writeDescription: (context: ICliExecutionContext) => {\n const { writer } = context;\n writer.writeln(\n 'Show detailed information about a specific background service',\n );\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('services info <name>', CliForegroundColor.Cyan)}`,\n );\n },\n },\n ];\n }\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.executor.showHelp(command, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.services.long_description', 'Manage background services and jobs'));\n writer.writeln();\n writer.writeln(\n ` ${writer.wrapInColor('services list', CliForegroundColor.Cyan)} ${t.t('cli.services.list_desc', 'List all services')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('services start <name>', CliForegroundColor.Cyan)} ${t.t('cli.services.start_desc', 'Start a service')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('services stop <name>', CliForegroundColor.Cyan)} ${t.t('cli.services.stop_desc', 'Stop a service')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('services restart <name>', CliForegroundColor.Cyan)} ${t.t('cli.services.restart_desc', 'Restart a service')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('services logs <name>', CliForegroundColor.Cyan)} ${t.t('cli.services.logs_desc', 'View service logs')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('services info <name>', CliForegroundColor.Cyan)} ${t.t('cli.services.info_desc', 'Service details')}`,\n );\n }\n}\n","import { ICliProcessEntry, ICliProcessRegistry } from '@qodalis/cli-core';\n\nexport const CliProcessRegistry_TOKEN = 'cli-process-registry';\n\nexport class CliProcessRegistry implements ICliProcessRegistry {\n private nextPid = 1;\n private processes = new Map<number, ICliProcessEntry & { abortController: AbortController }>();\n private _currentPid: number | undefined;\n private maxHistory = 50;\n\n get currentPid(): number | undefined {\n return this._currentPid;\n }\n\n register(command: string): { pid: number; abortController: AbortController } {\n const pid = this.nextPid++;\n const abortController = new AbortController();\n this.processes.set(pid, {\n pid,\n command,\n startTime: Date.now(),\n status: 'running',\n abortController,\n });\n this._currentPid = pid;\n this.pruneHistory();\n return { pid, abortController };\n }\n\n complete(pid: number, exitCode: number): void {\n const entry = this.processes.get(pid);\n if (entry && entry.status === 'running') {\n entry.status = 'completed';\n entry.exitCode = exitCode;\n }\n if (this._currentPid === pid) {\n this._currentPid = undefined;\n }\n }\n\n fail(pid: number): void {\n const entry = this.processes.get(pid);\n if (entry && entry.status === 'running') {\n entry.status = 'failed';\n entry.exitCode = -1;\n }\n if (this._currentPid === pid) {\n this._currentPid = undefined;\n }\n }\n\n kill(pid: number): boolean {\n const entry = this.processes.get(pid);\n if (!entry || entry.status !== 'running') return false;\n entry.abortController.abort();\n entry.status = 'killed';\n entry.exitCode = -9;\n if (this._currentPid === pid) {\n this._currentPid = undefined;\n }\n return true;\n }\n\n list(): ICliProcessEntry[] {\n return Array.from(this.processes.values()).map(({ abortController, ...entry }) => entry);\n }\n\n private pruneHistory(): void {\n const entries = Array.from(this.processes.entries());\n const completed = entries.filter(([, e]) => e.status !== 'running');\n if (completed.length > this.maxHistory) {\n const toRemove = completed.slice(0, completed.length - this.maxHistory);\n for (const [pid] of toRemove) {\n this.processes.delete(pid);\n }\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n ICliProcessRegistry,\n} from '@qodalis/cli-core';\nimport { CliProcessRegistry_TOKEN } from '../../services/cli-process-registry';\n\nexport class CliPsCommandProcessor implements ICliCommandProcessor {\n command = 'ps';\n description = 'List running and recent processes';\n author = DefaultLibraryAuthor;\n metadata = { icon: '📋', sealed: true };\n\n async processCommand(\n _command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n let registry: ICliProcessRegistry;\n try {\n registry = context.services.get<ICliProcessRegistry>(\n CliProcessRegistry_TOKEN,\n );\n } catch {\n context.writer.writeInfo('Process registry not available');\n return;\n }\n const processes = registry.list();\n\n if (processes.length === 0) {\n context.writer.writeInfo('No processes');\n return;\n }\n\n const headers = ['PID', 'STATUS', 'EXIT', 'TIME', 'COMMAND'];\n const rows = processes.map((p) => {\n const elapsed = `${Math.round((Date.now() - p.startTime) / 1000)}s`;\n return [\n String(p.pid),\n p.status,\n p.exitCode !== undefined ? String(p.exitCode) : '-',\n elapsed,\n p.command,\n ];\n });\n\n context.writer.writeTable(headers, rows);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n ICliProcessRegistry,\n} from '@qodalis/cli-core';\nimport { CliProcessRegistry_TOKEN } from '../../services/cli-process-registry';\n\nexport class CliKillCommandProcessor implements ICliCommandProcessor {\n command = 'kill';\n description = 'Terminate a running process by PID';\n author = DefaultLibraryAuthor;\n valueRequired = true;\n metadata = { icon: '💀', sealed: true };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n let registry: ICliProcessRegistry;\n try {\n registry = context.services.get<ICliProcessRegistry>(\n CliProcessRegistry_TOKEN,\n );\n } catch {\n context.writer.writeError('Process registry not available');\n return;\n }\n const pidStr = command.value?.trim();\n if (!pidStr) {\n context.writer.writeError('kill: missing PID');\n return;\n }\n const pid = parseInt(pidStr, 10);\n if (isNaN(pid)) {\n context.writer.writeError(`kill: invalid PID: ${pidStr}`);\n return;\n }\n if (registry.kill(pid)) {\n context.writer.writeSuccess(`Killed process ${pid}`);\n } else {\n context.writer.writeError(`kill: no running process with PID ${pid}`);\n }\n }\n}\n","import { ICliCommandProcessor } from '@qodalis/cli-core';\nimport { CliHelpCommandProcessor } from './cli-help-command-processor';\nimport { CliVersionCommandProcessor } from './cli-version-command-processor';\nimport { CliFeedbackCommandProcessor } from './cli-feedback-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 { CliDebugCommandProcessor } from './cli-debug-command-processor';\nimport { CliNanoCommandProcessor } from './cli-nano-command-processor';\nimport { CliServicesCommandProcessor } from './cli-services-command-processor';\nimport { CliPsCommandProcessor } from './cli-ps-command-processor';\nimport { CliKillCommandProcessor } from './cli-kill-command-processor';\n\nexport { CliHelpCommandProcessor } from './cli-help-command-processor';\nexport { CliVersionCommandProcessor } from './cli-version-command-processor';\nexport { CliFeedbackCommandProcessor } from './cli-feedback-command-processor';\nexport { CliHistoryCommandProcessor } from './cli-history-command-processor';\nexport { CliHotKeysCommandProcessor } from './cli-hot-keys-command-processor';\nexport { CliPackagesCommandProcessor } from './cli-packages-command-processor';\nexport { CliDebugCommandProcessor } from './cli-debug-command-processor';\nexport { CliNanoCommandProcessor } from './cli-nano-command-processor';\nexport { CliServicesCommandProcessor } from './cli-services-command-processor';\nexport { CliPsCommandProcessor } from './cli-ps-command-processor';\nexport { CliKillCommandProcessor } from './cli-kill-command-processor';\n\nexport const systemProcessors: ICliCommandProcessor[] = [\n new CliHelpCommandProcessor(),\n new CliVersionCommandProcessor(),\n new CliFeedbackCommandProcessor(),\n new CliHistoryCommandProcessor(),\n new CliPackagesCommandProcessor(),\n new CliHotKeysCommandProcessor(),\n new CliDebugCommandProcessor(),\n new CliNanoCommandProcessor(),\n new CliServicesCommandProcessor(),\n new CliPsCommandProcessor(),\n new CliKillCommandProcessor(),\n];\n","import { DefaultThemes, DefaultThemeInfos, CliThemeInfo } 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\nexport const themeInfos: Record<string, CliThemeInfo> = {\n ...DefaultThemeInfos,\n};\n","import {\n CliForegroundColor,\n CliProcessCommand,\n CliProcessorMetadata,\n CliStateConfiguration,\n ICliCommandAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n CliThemeInfo,\n} from '@qodalis/cli-core';\n\nimport { DefaultLibraryAuthor } from '@qodalis/cli-core';\nimport { ITheme } from '@xterm/xterm';\nimport { themes, ThemeState, themeInfos } from './types';\n\n/** Convert a hex color string (#RRGGBB) to {r, g, b}. Returns null on invalid input. */\nfunction hexToRgb(hex: string): { r: number; g: number; b: number } | null {\n const m = /^#?([0-9A-Fa-f]{6})$/.exec(hex);\n if (!m) return null;\n const n = parseInt(m[1], 16);\n return { r: (n >> 16) & 0xff, g: (n >> 8) & 0xff, b: n & 0xff };\n}\n\n/** Render a colored block (██) using 24-bit ANSI true color for the given hex value. */\nfunction colorSwatch(hex: string | undefined): string {\n if (!hex) return ' ';\n const rgb = hexToRgb(hex);\n if (!rgb) return ' ';\n return `\\x1b[48;2;${rgb.r};${rgb.g};${rgb.b}m \\x1b[0m`;\n}\n\n/** Render text with a 24-bit ANSI foreground color. */\nfunction colorText(text: string, hex: string | undefined): string {\n if (!hex) return text;\n const rgb = hexToRgb(hex);\n if (!rgb) return text;\n return `\\x1b[38;2;${rgb.r};${rgb.g};${rgb.b}m${text}\\x1b[0m`;\n}\n\n/** The subset of ITheme color keys displayed as palette swatches. */\nconst PALETTE_KEYS: (keyof ITheme)[] = [\n 'black',\n 'red',\n 'green',\n 'yellow',\n 'blue',\n 'magenta',\n 'cyan',\n 'white',\n 'brightBlack',\n 'brightRed',\n 'brightGreen',\n 'brightYellow',\n 'brightBlue',\n 'brightMagenta',\n 'brightCyan',\n 'brightWhite',\n];\n\nexport class CliThemeCommandProcessor implements ICliCommandProcessor {\n command = 'theme';\n\n aliases = ['themes'];\n\n description = 'Interact with the theme';\n\n author?: ICliCommandAuthor | undefined = DefaultLibraryAuthor;\n\n version?: string | undefined = '2.0.0';\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 with color previews',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const state = context.state.getState<ThemeState>();\n const currentName = state.selectedTheme || '';\n\n const darkThemes = Object.entries(themeInfos).filter(\n ([, info]) => info.category === 'dark',\n );\n const lightThemes = Object.entries(themeInfos).filter(\n ([, info]) => info.category === 'light',\n );\n\n const renderGroup = (\n groupLabel: string,\n entries: [string, CliThemeInfo][],\n ) => {\n context.writer.writeln(\n context.writer.wrapInColor(\n ` ${groupLabel}`,\n CliForegroundColor.Yellow,\n ),\n );\n context.writer.writeln();\n for (const [name, info] of entries) {\n const active =\n name === currentName ? ' (active)' : '';\n const swatches = PALETTE_KEYS.map((k) =>\n colorSwatch(info.theme[k] as string),\n ).join('');\n const nameLabel = context.writer.wrapInColor(\n name.padEnd(22),\n CliForegroundColor.Cyan,\n );\n context.writer.writeln(\n ` ${swatches} ${nameLabel} ${info.description}${active}`,\n );\n }\n context.writer.writeln();\n };\n\n context.writer.writeln('Available themes:');\n context.writer.writeln();\n renderGroup('Dark', darkThemes);\n renderGroup('Light', lightThemes);\n\n context.writer.writeInfo(\n `Use ${context.writer.wrapInColor('theme apply <name>', CliForegroundColor.Cyan)} or ${context.writer.wrapInColor('theme apply', CliForegroundColor.Cyan)} to select interactively`,\n );\n },\n },\n {\n command: 'current',\n description: 'Show the current theme with color swatches',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const state = context.state.getState<ThemeState>();\n const themeName = state.selectedTheme || 'custom';\n const currentTheme = context.terminal.options.theme!;\n\n context.writer.writeln(\n `Current theme: ${context.writer.wrapInColor(themeName, CliForegroundColor.Cyan)}`,\n );\n context.writer.writeln();\n\n // Background and foreground\n const bg = currentTheme.background as string | undefined;\n const fg = currentTheme.foreground as string | undefined;\n context.writer.writeln(\n ` ${colorSwatch(bg)} background ${bg || 'default'}`,\n );\n context.writer.writeln(\n ` ${colorSwatch(fg)} foreground ${fg || 'default'}`,\n );\n if (currentTheme.cursor) {\n context.writer.writeln(\n ` ${colorSwatch(currentTheme.cursor as string)} cursor ${currentTheme.cursor}`,\n );\n }\n context.writer.writeln();\n\n // Color palette\n context.writer.writeln(' Normal colors:');\n const normal = PALETTE_KEYS.slice(0, 8);\n for (const key of normal) {\n const val = currentTheme[key] as string | undefined;\n if (val) {\n context.writer.writeln(\n ` ${colorSwatch(val)} ${String(key).padEnd(10)} ${val}`,\n );\n }\n }\n\n context.writer.writeln();\n context.writer.writeln(' Bright colors:');\n const bright = PALETTE_KEYS.slice(8);\n for (const key of bright) {\n const val = currentTheme[key] as string | undefined;\n if (val) {\n context.writer.writeln(\n ` ${colorSwatch(val)} ${String(key).padEnd(16)} ${val}`,\n );\n }\n }\n\n context.process.output({\n theme: themeName,\n colors: currentTheme,\n });\n },\n },\n {\n command: 'preview',\n description: 'Preview a theme without applying it',\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const name = command.value!;\n const t = themes[name];\n if (!t) {\n context.writer.writeError(\n `Theme not found: ${name}. Use ${context.writer.wrapInColor('theme list', CliForegroundColor.Cyan)} to see available themes.`,\n );\n return;\n }\n\n this.renderThemePreview(name, t, context);\n },\n },\n {\n command: 'apply',\n description:\n 'Apply a theme (interactive with live preview if no name given)',\n acceptsRawInput: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n let themeName = command.value?.trim();\n\n if (!themeName) {\n // Interactive selection with live preview\n const originalTheme = {\n ...context.terminal.options.theme,\n };\n const options = Object.keys(themes).map((name) => ({\n label: name,\n value: name,\n }));\n\n const selected = await context.reader.readSelect(\n 'Select a theme (live preview):',\n options,\n (value) => {\n // Live preview: apply theme as user navigates\n if (themes[value]) {\n context.terminal.options.theme =\n themes[value];\n this.applyStyles(context);\n }\n },\n );\n\n if (!selected) {\n // Cancelled — restore original theme\n context.terminal.options.theme = originalTheme;\n this.applyStyles(context);\n context.writer.writeInfo(\n 'Theme selection cancelled',\n );\n return;\n }\n themeName = selected;\n }\n\n if (!themes[themeName]) {\n context.writer.writeError(\n `Theme not found: ${themeName}. Use ${context.writer.wrapInColor('theme list', CliForegroundColor.Cyan)} to see available themes.`,\n );\n return;\n }\n\n context.terminal.options.theme = themes[themeName];\n\n context.state.updateState({\n selectedTheme: themeName,\n customOptions: null,\n });\n\n await context.state.persist();\n\n this.applyStyles(context);\n\n context.writer.writeSuccess(`Theme \"${themeName}\" applied`);\n },\n },\n {\n command: 'set',\n acceptsRawInput: 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 (!key || !value) {\n context.writer.writeError(\n `Usage: theme set <key> <value>`,\n );\n context.writer.writeln();\n context.writer.writeInfo(\n `Available keys: ${this.themeOptions.join(', ')}`,\n );\n return;\n }\n\n if (!this.themeOptions.includes(key)) {\n context.writer.writeError(`Unsupported key: ${key}`);\n context.writer.writeln();\n context.writer.writeInfo(\n `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 const swatch = colorSwatch(value);\n context.writer.writeSuccess(\n `Set ${key} to ${swatch} ${value}`,\n );\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 _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const state = context.state.getState<ThemeState>();\n\n // If we have a named theme, persist that reference;\n // otherwise persist the current terminal theme as custom options.\n if (!state.selectedTheme) {\n context.state.updateState({\n selectedTheme: null,\n customOptions: {\n ...context.terminal.options.theme,\n },\n });\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 _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n context.terminal.options.theme = { ...this.defaultTheme };\n context.state.reset();\n await context.state.persist();\n this.applyStyles(context);\n context.writer.writeSuccess('Theme reset to default');\n },\n },\n {\n command: 'search',\n description: 'Search themes by name, tag, or description',\n valueRequired: true,\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const query = command.value!.toLowerCase();\n const matches = Object.entries(themeInfos).filter(\n ([name, info]) =>\n name.toLowerCase().includes(query) ||\n info.description.toLowerCase().includes(query) ||\n info.tags.some((t) =>\n t.toLowerCase().includes(query),\n ),\n );\n\n if (matches.length === 0) {\n context.writer.writeWarning(\n `No themes matching \"${command.value}\"`,\n );\n return;\n }\n\n context.writer.writeln(\n `Found ${matches.length} theme${matches.length > 1 ? 's' : ''} matching \"${command.value}\":`,\n );\n context.writer.writeln();\n\n for (const [name, info] of matches) {\n const swatches = PALETTE_KEYS.map((k) =>\n colorSwatch(info.theme[k] as string),\n ).join('');\n const nameLabel = context.writer.wrapInColor(\n name.padEnd(22),\n CliForegroundColor.Cyan,\n );\n const tags = info.tags\n .map((t) =>\n context.writer.wrapInColor(\n `#${t}`,\n CliForegroundColor.Magenta,\n ),\n )\n .join(' ');\n context.writer.writeln(\n ` ${swatches} ${nameLabel} ${info.description} ${tags}`,\n );\n }\n },\n },\n {\n command: 'random',\n description:\n 'Apply a random theme (optionally filter by \"dark\" or \"light\")',\n processCommand: async (\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const filter = command.value?.toLowerCase() as\n | 'dark'\n | 'light'\n | undefined;\n let candidates = Object.entries(themeInfos);\n\n if (filter === 'dark' || filter === 'light') {\n candidates = candidates.filter(\n ([, info]) => info.category === filter,\n );\n }\n\n const [name, info] =\n candidates[\n Math.floor(Math.random() * candidates.length)\n ];\n\n context.terminal.options.theme = info.theme;\n\n context.state.updateState({\n selectedTheme: name,\n customOptions: null,\n });\n\n await context.state.persist();\n this.applyStyles(context);\n\n context.writer.writeSuccess(\n `Random theme \"${name}\" applied`,\n );\n },\n },\n {\n command: 'export',\n description: 'Export the current theme as JSON',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n const currentTheme = context.terminal.options.theme;\n const json = JSON.stringify(currentTheme, null, 2);\n\n context.writer.writeln(json);\n\n context.process.output({ json });\n },\n },\n {\n command: 'import',\n description: 'Import a theme from JSON',\n processCommand: async (\n _: CliProcessCommand,\n context: ICliExecutionContext,\n ) => {\n context.writer.writeln(\n 'Paste your theme JSON (single line or multi-line, then press Enter on an empty line):',\n );\n\n let jsonStr = '';\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const line =\n await context.reader.readLine('');\n if (line === null || line.trim() === '')\n break;\n jsonStr += line;\n }\n\n if (!jsonStr.trim()) {\n context.writer.writeWarning(\n 'Import cancelled - no input',\n );\n return;\n }\n\n let imported: ITheme;\n try {\n imported = JSON.parse(jsonStr);\n } catch {\n context.writer.writeError(\n 'Invalid JSON. Please provide a valid theme object.',\n );\n return;\n }\n\n if (\n typeof imported !== 'object' ||\n imported === null ||\n !imported.background ||\n !imported.foreground\n ) {\n context.writer.writeError(\n 'Theme must be an object with at least \"background\" and \"foreground\" properties.',\n );\n return;\n }\n\n context.terminal.options.theme = imported;\n\n context.state.updateState({\n selectedTheme: null,\n customOptions: imported,\n });\n\n await context.state.persist();\n this.applyStyles(context);\n\n context.writer.writeSuccess(\n 'Custom theme imported and applied',\n );\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 const theme = themes[state.selectedTheme];\n if (theme) {\n context.terminal.options.theme = theme;\n }\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 renderThemePreview(\n name: string,\n theme: ITheme,\n context: ICliExecutionContext,\n ): void {\n const { writer } = context;\n const bg = theme.background as string | undefined;\n const fg = theme.foreground as string | undefined;\n\n writer.writeln(\n `Theme: ${writer.wrapInColor(name, CliForegroundColor.Cyan)}`,\n );\n writer.writeln();\n\n // Background/foreground preview\n if (bg && fg) {\n const rgb = hexToRgb(bg);\n const frgb = hexToRgb(fg);\n if (rgb && frgb) {\n const sample = `\\x1b[48;2;${rgb.r};${rgb.g};${rgb.b}m\\x1b[38;2;${frgb.r};${frgb.g};${frgb.b}m ${name.padEnd(20)} Sample text \\x1b[0m`;\n writer.writeln(` ${sample}`);\n writer.writeln();\n }\n }\n\n // Color palette\n writer.writeln(' Normal:');\n const normal: (keyof ITheme)[] = [\n 'black',\n 'red',\n 'green',\n 'yellow',\n 'blue',\n 'magenta',\n 'cyan',\n 'white',\n ];\n let row = ' ';\n for (const key of normal) {\n const val = theme[key] as string | undefined;\n row += colorSwatch(val) + ' ';\n }\n writer.writeln(row);\n row = ' ';\n for (const key of normal) {\n const val = theme[key] as string | undefined;\n row += colorText(String(key).slice(0, 2).padEnd(2), val) + ' ';\n }\n writer.writeln(row);\n\n writer.writeln();\n writer.writeln(' Bright:');\n const bright: (keyof ITheme)[] = [\n 'brightBlack',\n 'brightRed',\n 'brightGreen',\n 'brightYellow',\n 'brightBlue',\n 'brightMagenta',\n 'brightCyan',\n 'brightWhite',\n ];\n row = ' ';\n for (const key of bright) {\n const val = theme[key] as string | undefined;\n row += colorSwatch(val) + ' ';\n }\n writer.writeln(row);\n row = ' ';\n for (const key of bright) {\n const val = theme[key] as string | undefined;\n // Show abbreviated label: \"bk\", \"rd\", \"gr\", \"yl\", \"bl\", \"mg\", \"cy\", \"wh\"\n const label = String(key)\n .replace('bright', '')\n .slice(0, 2)\n .toLowerCase();\n row += colorText(label.padEnd(2), val) + ' ';\n }\n writer.writeln(row);\n\n writer.writeln();\n writer.writeln(` ${colorSwatch(bg)} background ${bg || 'default'}`);\n writer.writeln(` ${colorSwatch(fg)} foreground ${fg || 'default'}`);\n if (theme.cursor) {\n writer.writeln(\n ` ${colorSwatch(theme.cursor as string)} cursor ${theme.cursor}`,\n );\n }\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 const { writer, translator: t } = context;\n writer.writeln(\n t.t('cli.theme.long_description', 'Customize the terminal appearance with themes and colors'),\n );\n writer.writeln();\n writer.writeln(t.t('cli.common.usage', 'Usage:'));\n writer.writeln(\n ` ${writer.wrapInColor('theme list', CliForegroundColor.Cyan)} List themes grouped by dark/light`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme apply', CliForegroundColor.Cyan)} Select a theme interactively`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme apply <name>', CliForegroundColor.Cyan)} Apply a theme by name`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme preview <name>', CliForegroundColor.Cyan)} Preview a theme without applying`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme search <keyword>', CliForegroundColor.Cyan)} Search by name, tag, or description`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme random [dark|light]', CliForegroundColor.Cyan)} Apply a random theme`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme current', CliForegroundColor.Cyan)} Show active theme with swatches`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme set <key> <value>', CliForegroundColor.Cyan)} Set a theme variable`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme export', CliForegroundColor.Cyan)} Export current theme as JSON`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme import', CliForegroundColor.Cyan)} Import a theme from JSON`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme save', CliForegroundColor.Cyan)} Save current settings`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('theme reset', CliForegroundColor.Cyan)} Reset to default`,\n );\n writer.writeln();\n writer.writeln(t.t('cli.common.examples', 'Examples:'));\n writer.writeln(\n ` theme apply dracula ${writer.wrapInColor('# Apply the Dracula theme', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` theme apply tokyoNight ${writer.wrapInColor('# Apply Tokyo Night', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` theme preview nord ${writer.wrapInColor('# Preview Nord palette', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` theme search retro ${writer.wrapInColor('# Find retro-style themes', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` theme random dark ${writer.wrapInColor('# Apply a random dark theme', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` theme set background #1a1a2e ${writer.wrapInColor('# Change background color', CliForegroundColor.Green)}`,\n );\n writer.writeln(\n ` theme export ${writer.wrapInColor('# Export theme as JSON', CliForegroundColor.Green)}`,\n );\n writer.writeln();\n writer.writeln(\n `Available color keys: ${writer.wrapInColor(this.themeOptions.join(', ') ?? '', CliForegroundColor.Blue)}`,\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 {\n CliForegroundColor,\n CliProcessorMetadata,\n DefaultLibraryAuthor,\n} from '@qodalis/cli-core';\nimport {\n CliProcessCommand,\n ICliCommandAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\nexport class CliPingCommandProcessor implements ICliCommandProcessor {\n command = 'ping';\n\n description = 'Send ICMP-like pings to a host';\n\n author: ICliCommandAuthor = DefaultLibraryAuthor;\n\n acceptsRawInput = true;\n\n metadata: CliProcessorMetadata = {\n icon: '🏓',\n };\n\n parameters = [\n {\n name: 'c',\n aliases: ['count'],\n description: 'Number of pings to send (default: 4, 0 = infinite)',\n required: false,\n type: 'number' as const,\n },\n {\n name: 'i',\n aliases: ['interval'],\n description: 'Interval between pings in seconds (default: 1)',\n required: false,\n type: 'number' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const host = (command.value || '').trim();\n\n if (!host) {\n context.writer.writeError(\n 'ping: missing host operand',\n );\n context.writer.writeln(\n `Usage: ${context.writer.wrapInColor('ping [-c count] [-i interval] <host>', CliForegroundColor.Cyan)}`,\n );\n context.process.exit(1, { silent: true });\n return;\n }\n\n const count = command.args['c'] ?? command.args['count'] ?? 4;\n const interval = command.args['i'] ?? command.args['interval'] ?? 1;\n const intervalMs = Math.max(200, interval * 1000);\n\n // Normalize host to a URL we can fetch\n const url = this.normalizeUrl(host);\n\n context.writer.writeln(\n `PING ${host} (${url}):`,\n );\n\n const times: number[] = [];\n let transmitted = 0;\n let received = 0;\n let seq = 0;\n let stopped = false;\n\n // Handle abort (Ctrl+C) — print stats and exit\n const abortSub = context.onAbort.subscribe(() => {\n stopped = true;\n });\n\n try {\n const maxCount = count === 0 ? Infinity : count;\n\n while (seq < maxCount && !stopped) {\n transmitted++;\n const start = performance.now();\n\n try {\n const response = await fetch(url, {\n method: 'HEAD',\n mode: 'no-cors',\n cache: 'no-store',\n signal: context.signal,\n });\n\n const elapsed = performance.now() - start;\n const ms = elapsed.toFixed(1);\n received++;\n times.push(elapsed);\n\n const status = response.type === 'opaque' ? 'ok' : `status=${response.status}`;\n context.writer.writeln(\n `${url}: seq=${seq} ${status} time=${ms} ms`,\n );\n } catch (e: any) {\n if (e?.name === 'AbortError') {\n stopped = true;\n break;\n }\n const elapsed = performance.now() - start;\n context.writer.writeln(\n `${url}: seq=${seq} request timed out (${elapsed.toFixed(1)} ms)`,\n );\n }\n\n seq++;\n\n // Wait for interval unless this is the last one or stopped\n if (seq < maxCount && !stopped) {\n await this.sleep(intervalMs, context);\n if (context.signal?.aborted) {\n stopped = true;\n }\n }\n }\n } finally {\n abortSub.unsubscribe();\n }\n\n // Print statistics (like Linux ping)\n context.writer.writeln('');\n context.writer.writeln(\n `--- ${host} ping statistics ---`,\n );\n\n const lost = transmitted - received;\n const lossPercent = transmitted > 0\n ? ((lost / transmitted) * 100).toFixed(0)\n : '0';\n context.writer.writeln(\n `${transmitted} packets transmitted, ${received} received, ${lossPercent}% packet loss`,\n );\n\n if (times.length > 0) {\n const min = Math.min(...times).toFixed(1);\n const max = Math.max(...times).toFixed(1);\n const avg = (\n times.reduce((a, b) => a + b, 0) / times.length\n ).toFixed(1);\n\n // Standard deviation\n const mean = times.reduce((a, b) => a + b, 0) / times.length;\n const variance =\n times.reduce((sum, t) => sum + (t - mean) ** 2, 0) /\n times.length;\n const stddev = Math.sqrt(variance).toFixed(1);\n\n context.writer.writeln(\n `rtt min/avg/max/mdev = ${min}/${avg}/${max}/${stddev} ms`,\n );\n }\n\n if (received === 0) {\n context.process.exit(1, { silent: true });\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.ping.long_description', 'Send ICMP-like HTTP pings to a host and display round-trip statistics'));\n writer.writeln();\n writer.writeln(t.t('cli.common.usage', 'Usage:'));\n writer.writeln(\n ` ${writer.wrapInColor('ping <host>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('ping -c 10 google.com', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('ping -c 0 -i 2 example.com', CliForegroundColor.Cyan)} (infinite, 2s interval)`,\n );\n writer.writeln();\n writer.writeln(t.t('cli.help.options', 'Options:'));\n writer.writeln(' -c, --count Number of pings (default: 4, 0 = infinite)');\n writer.writeln(' -i, --interval Seconds between pings (default: 1)');\n writer.writeln();\n writer.writeln(t.t('cli.ping.ctrl_c', 'Press Ctrl+C to stop and show statistics.'));\n }\n\n private normalizeUrl(host: string): string {\n if (host.startsWith('http://') || host.startsWith('https://')) {\n return host;\n }\n return `https://${host}`;\n }\n\n private sleep(\n ms: number,\n context: ICliExecutionContext,\n ): Promise<void> {\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n // If aborted during sleep, resolve immediately\n const onAbort = () => {\n clearTimeout(timer);\n resolve();\n };\n if (context.signal) {\n context.signal.addEventListener('abort', onAbort, { once: true });\n }\n });\n }\n}\n","/**\n * Global environment variable store for the CLI session.\n *\n * Variables set here are available to all commands via `$VAR` / `${VAR}`\n * substitution in the executor. Commands can also read/write the store\n * directly through the service provider.\n */\nexport interface ICliEnvironment {\n /** Get a variable value (undefined if not set). */\n get(name: string): string | undefined;\n\n /** Set a variable. */\n set(name: string, value: string): void;\n\n /** Remove a variable. */\n unset(name: string): void;\n\n /** Get all variables as a record. */\n getAll(): Record<string, string>;\n\n /** Check if a variable is set. */\n has(name: string): boolean;\n}\n\nexport const ICliEnvironment_TOKEN = 'cli-environment';\n\n/**\n * Default in-memory implementation.\n * Seeded with some standard variables on construction.\n */\nexport class CliEnvironment implements ICliEnvironment {\n private readonly vars: Map<string, string>;\n\n constructor() {\n this.vars = new Map<string, string>();\n\n // Seed with standard variables\n this.vars.set('SHELL', '/bin/sh');\n this.vars.set('TERM', 'xterm-256color');\n this.vars.set('LANG', 'en_US.UTF-8');\n this.vars.set('PWD', '/');\n this.vars.set('HOME', '/home/user');\n this.vars.set('USER', 'user');\n this.vars.set('PATH', '/usr/local/bin:/usr/bin:/bin');\n }\n\n get(name: string): string | undefined {\n return this.vars.get(name);\n }\n\n set(name: string, value: string): void {\n this.vars.set(name, value);\n }\n\n unset(name: string): void {\n this.vars.delete(name);\n }\n\n getAll(): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [k, v] of this.vars) {\n result[k] = v;\n }\n return result;\n }\n\n has(name: string): boolean {\n return this.vars.has(name);\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport {\n ICliEnvironment,\n ICliEnvironment_TOKEN,\n} from '../services/cli-environment';\n\n/**\n * `export` — set environment variables.\n *\n * Usage:\n * export VAR=value\n * export VAR=\"value with spaces\"\n */\nexport class CliExportCommandProcessor implements ICliCommandProcessor {\n command = 'export';\n description = 'Set environment variables';\n author = DefaultLibraryAuthor;\n acceptsRawInput = true;\n metadata = { icon: '📦', module: 'system' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const env = context.services.get<ICliEnvironment>(\n ICliEnvironment_TOKEN,\n );\n\n const raw = (command.value || '').trim();\n if (!raw) {\n // `export` with no args — show all variables (like bash)\n const vars = env.getAll();\n const keys = Object.keys(vars).sort();\n for (const key of keys) {\n context.writer.writeln(\n `declare -x ${key}=\"${vars[key]}\"`,\n );\n }\n return;\n }\n\n // Parse VAR=value (possibly multiple)\n const match = raw.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);\n if (!match) {\n context.writer.writeError(\n `export: invalid syntax: ${raw}`,\n );\n context.process.exit(1, { silent: true });\n return;\n }\n\n const varName = match[1];\n let varValue = match[2];\n\n // Strip surrounding quotes\n if (\n (varValue.startsWith('\"') && varValue.endsWith('\"')) ||\n (varValue.startsWith(\"'\") && varValue.endsWith(\"'\"))\n ) {\n varValue = varValue.slice(1, -1);\n }\n\n env.set(varName, varValue);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.export.long_description', 'Set or display environment variables'));\n writer.writeln();\n writer.writeln(t.t('cli.common.usage', 'Usage:'));\n writer.writeln(\n ` ${writer.wrapInColor('export', CliForegroundColor.Cyan)} ${t.t('cli.export.show_all', 'Show all variables')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('export VAR=value', CliForegroundColor.Cyan)} ${t.t('cli.export.set_var', 'Set a variable')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('export VAR=\"hello world\"', CliForegroundColor.Cyan)} ${t.t('cli.export.set_spaces', 'Set with spaces')}`,\n );\n }\n}\n\n/**\n * `unset` — remove environment variables.\n */\nexport class CliUnsetCommandProcessor implements ICliCommandProcessor {\n command = 'unset';\n description = 'Remove environment variables';\n author = DefaultLibraryAuthor;\n acceptsRawInput = true;\n metadata = { icon: '🗑️', module: 'system' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const env = context.services.get<ICliEnvironment>(\n ICliEnvironment_TOKEN,\n );\n\n const varName = (command.value || '').trim();\n if (!varName) {\n context.writer.writeError('unset: missing variable name');\n context.process.exit(1, { silent: true });\n return;\n }\n\n if (!env.has(varName)) {\n // Silently succeed like bash\n return;\n }\n\n env.unset(varName);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.unset.long_description', 'Remove an environment variable'));\n writer.writeln();\n writer.writeln(t.t('cli.common.usage', 'Usage:'));\n writer.writeln(\n ` ${writer.wrapInColor('unset VAR', CliForegroundColor.Cyan)}`,\n );\n }\n}\n\n/**\n * `env` / `printenv` — display environment variables.\n */\nexport class CliEnvCommandProcessor implements ICliCommandProcessor {\n command = 'env';\n aliases = ['printenv'];\n description = 'Display environment variables';\n author = DefaultLibraryAuthor;\n acceptsRawInput = true;\n metadata = { icon: '🌍', module: 'system' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const env = context.services.get<ICliEnvironment>(\n ICliEnvironment_TOKEN,\n );\n\n const varName = (command.value || '').trim();\n\n if (varName) {\n // printenv VAR — show single variable\n const val = env.get(varName);\n if (val !== undefined) {\n context.writer.writeln(val);\n context.process.output(val);\n } else {\n context.process.exit(1, { silent: true });\n }\n return;\n }\n\n // Show all variables\n const vars = env.getAll();\n const keys = Object.keys(vars).sort();\n const lines: string[] = [];\n for (const key of keys) {\n lines.push(`${key}=${vars[key]}`);\n }\n context.writer.writeln(lines.join('\\n'));\n context.process.output(lines.join('\\n'));\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer, translator: t } = context;\n writer.writeln(t.t('cli.env.long_description', 'Display environment variables'));\n writer.writeln();\n writer.writeln(t.t('cli.common.usage', 'Usage:'));\n writer.writeln(\n ` ${writer.wrapInColor('env', CliForegroundColor.Cyan)} ${t.t('cli.env.show_all', 'Show all variables')}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('printenv VAR', CliForegroundColor.Cyan)} ${t.t('cli.env.show_single', 'Show single variable')}`,\n );\n }\n}\n","import {\n ICliCommandProcessor,\n ICliExecutionContext,\n CliProcessCommand,\n ICliCommandAuthor,\n CliProcessorMetadata,\n CliIcon,\n CliStateConfiguration,\n DefaultLibraryAuthor,\n CliForegroundColor,\n} from '@qodalis/cli-core';\n\nconst DEFAULT_FONT_SIZE = 20;\nconst MIN_FONT_SIZE = 8;\nconst MAX_FONT_SIZE = 40;\nconst STEP = 2;\n\ninterface FontSizeState {\n fontSize: number;\n}\n\nexport class CliFontSizeCommandProcessor implements ICliCommandProcessor {\n command = 'font-size';\n description = 'Adjust the terminal font size';\n aliases = ['fontsize'];\n author: ICliCommandAuthor = DefaultLibraryAuthor;\n metadata: CliProcessorMetadata = { icon: CliIcon.Settings, module: 'system' };\n\n stateConfiguration: CliStateConfiguration = {\n storeName: 'font-size',\n initialState: { fontSize: DEFAULT_FONT_SIZE } as FontSizeState,\n };\n\n processors: ICliCommandProcessor[] = [\n {\n command: 'increase',\n description: `Increase font size by ${STEP}px (max ${MAX_FONT_SIZE})`,\n processCommand: async (_: CliProcessCommand, context: ICliExecutionContext) => {\n await this.setFontSize(context, this.getCurrent(context) + STEP);\n },\n },\n {\n command: 'decrease',\n description: `Decrease font size by ${STEP}px (min ${MIN_FONT_SIZE})`,\n processCommand: async (_: CliProcessCommand, context: ICliExecutionContext) => {\n await this.setFontSize(context, this.getCurrent(context) - STEP);\n },\n },\n {\n command: 'reset',\n description: `Reset font size to default (${DEFAULT_FONT_SIZE}px)`,\n processCommand: async (_: CliProcessCommand, context: ICliExecutionContext) => {\n await this.setFontSize(context, DEFAULT_FONT_SIZE);\n },\n },\n {\n command: 'set',\n description: 'Set font size to a specific value',\n valueRequired: true,\n acceptsRawInput: true,\n // Explicit range validation here (instead of relying solely on setFontSize's clamp)\n // so we can surface a clear error message to the user for out-of-range input.\n processCommand: async (cmd: CliProcessCommand, context: ICliExecutionContext) => {\n const n = parseInt(cmd.value ?? '', 10);\n if (isNaN(n) || n < MIN_FONT_SIZE || n > MAX_FONT_SIZE) {\n context.writer.writeError(\n `Font size must be between ${MIN_FONT_SIZE} and ${MAX_FONT_SIZE}`,\n );\n return;\n }\n await this.setFontSize(context, n);\n },\n },\n ];\n\n async initialize(context: ICliExecutionContext): Promise<void> {\n const state = context.state.getState<FontSizeState>();\n if (state?.fontSize != null && context.terminal?.options) {\n context.terminal.options.fontSize = state.fontSize;\n }\n }\n\n async processCommand(_: CliProcessCommand, context: ICliExecutionContext): Promise<void> {\n const current = this.getCurrent(context);\n context.writer.writeKeyValue({ 'Current font size': `${current}px` });\n context.writer.writeln();\n context.writer.writeln('Usage:');\n context.writer.writeln(\n ` ${context.writer.wrapInColor('font-size increase', CliForegroundColor.Cyan)} Increase by ${STEP}px`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('font-size decrease', CliForegroundColor.Cyan)} Decrease by ${STEP}px`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('font-size set <n>', CliForegroundColor.Cyan)} Set to exact size`,\n );\n context.writer.writeln(\n ` ${context.writer.wrapInColor('font-size reset', CliForegroundColor.Cyan)} Reset to default (${DEFAULT_FONT_SIZE}px)`,\n );\n }\n\n private getCurrent(context: ICliExecutionContext): number {\n const fromTerminal = context.terminal?.options?.fontSize as number | undefined;\n if (fromTerminal != null) {\n return fromTerminal;\n }\n const state = context.state.getState<FontSizeState>();\n return state?.fontSize ?? DEFAULT_FONT_SIZE;\n }\n\n private async setFontSize(context: ICliExecutionContext, size: number): Promise<void> {\n const clamped = Math.min(MAX_FONT_SIZE, Math.max(MIN_FONT_SIZE, size));\n if (context.terminal?.options) {\n context.terminal.options.fontSize = clamped;\n }\n context.state.updateState({ fontSize: clamped } as FontSizeState);\n await context.state.persist();\n context.writer.writeSuccess(`Font size set to ${clamped}px`);\n }\n}\n","import { CliAliasCommandProcessor } from './cli-alias-command-processor';\nimport { CliCaptureCommandProcessor } from './cli-capture-command-processor';\nimport { CliBase64CommandProcessor } from './cli-base64-command-processor';\nimport { CliCalCommandProcessor } from './cli-cal-command-processor';\nimport { CliClearCommandProcessor } from './cli-clear-command-processor';\nimport { CliClipboardCommandProcessor } from './cli-clipboard-command-processor';\nimport { CliColorCommandProcessor } from './cli-color-command-processor';\nimport { CliConvertCommandProcessor } from './cli-convert-command-processor';\nimport { CliEchoCommandProcessor } from './cli-echo-command-processor';\nimport { CliEvalCommandProcessor } from './cli-eval-command-processor';\nimport { CliHashCommandProcessor } from './cli-hash-command-processor';\nimport { CliHexCommandProcessor } from './cli-hex-command-processor';\nimport { CliJsonCommandProcessor } from './cli-json-command-processor';\nimport { CliJwtCommandProcessor } from './cli-jwt-command-processor';\nimport { CliLoremCommandProcessor } from './cli-lorem-command-processor';\nimport { CliOpenCommandProcessor } from './cli-open-command-processor';\nimport { CliRandomCommandProcessor } from './cli-random-command-processor';\nimport { CliScreenCommandProcessor } from './cli-screen-command-processor';\nimport { CliSeqCommandProcessor } from './cli-seq-command-processor';\nimport { CliSleepCommandProcessor } from './cli-sleep-command-processor';\nimport { CliTimeCommandProcessor } from './cli-time-command-processor';\nimport { CliTimestampCommandProcessor } from './cli-timestamp-command-processor';\nimport { CliUnAliasCommandProcessor } from './cli-unalias-command-processor';\nimport { CliUnameCommandProcessor } from './cli-uname-command-processor';\nimport { CliUptimeCommandProcessor } from './cli-uptime-command-processor';\nimport { CliUrlCommandProcessor } from './cli-url-command-processor';\nimport { CliYesCommandProcessor } from './cli-yes-command-processor';\nimport { CliConfigureCommandProcessor } from './configure/cli-configure-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';\nexport * from './cli-time-command-processor';\nexport * from './cli-base64-command-processor';\nexport * from './cli-json-command-processor';\nexport * from './cli-url-command-processor';\nexport * from './cli-hash-command-processor';\nexport * from './cli-random-command-processor';\nexport * from './cli-uptime-command-processor';\nexport * from './cli-open-command-processor';\nexport * from './cli-lorem-command-processor';\nexport * from './cli-timestamp-command-processor';\nexport * from './cli-color-command-processor';\nexport * from './cli-jwt-command-processor';\nexport * from './cli-cal-command-processor';\nexport * from './cli-seq-command-processor';\nexport * from './cli-screen-command-processor';\nexport * from './cli-hex-command-processor';\nexport * from './cli-clipboard-command-processor';\nexport * from './cli-convert-command-processor';\nexport * from './cli-yes-command-processor';\nexport * from './cli-eval-command-processor';\nexport * from './cli-uname-command-processor';\nexport * from './cli-capture-command-processor';\nexport * from './cli-snippet-command-processor';\nexport * from './cli-diff-command-processor';\nexport * from './diff-utils';\n\nexport * from './system';\nexport * from './theme/cli-theme-command-processor';\nexport * from './theme/types';\nexport * from './configure/cli-configure-command-processor';\nexport * from './configure/types';\nexport * from './cli-ping-command-processor';\nexport * from './cli-env-command-processor';\nexport * from './cli-font-size-command-processor';\n\nimport { ICliCommandProcessor } from '@qodalis/cli-core';\nimport { systemProcessors } from './system';\nimport { CliThemeCommandProcessor } from './theme/cli-theme-command-processor';\nimport { CliPingCommandProcessor } from './cli-ping-command-processor';\nimport {\n CliExportCommandProcessor,\n CliUnsetCommandProcessor,\n CliEnvCommandProcessor,\n} from './cli-env-command-processor';\nimport { CliFontSizeCommandProcessor } from './cli-font-size-command-processor';\nimport { CliSnippetCommandProcessor } from './cli-snippet-command-processor';\nimport { CliDiffCommandProcessor } from './cli-diff-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 new CliTimeCommandProcessor(),\n new CliBase64CommandProcessor(),\n new CliJsonCommandProcessor(),\n new CliUrlCommandProcessor(),\n new CliHashCommandProcessor(),\n new CliRandomCommandProcessor(),\n new CliUptimeCommandProcessor(),\n new CliOpenCommandProcessor(),\n new CliLoremCommandProcessor(),\n new CliTimestampCommandProcessor(),\n new CliColorCommandProcessor(),\n new CliJwtCommandProcessor(),\n new CliCalCommandProcessor(),\n new CliSeqCommandProcessor(),\n new CliScreenCommandProcessor(),\n new CliHexCommandProcessor(),\n new CliClipboardCommandProcessor(),\n new CliConvertCommandProcessor(),\n new CliYesCommandProcessor(),\n];\n\nexport const builtinProcessors: ICliCommandProcessor[] = [\n ...miscProcessors,\n ...systemProcessors,\n new CliThemeCommandProcessor(),\n new CliConfigureCommandProcessor(),\n new CliPingCommandProcessor(),\n new CliExportCommandProcessor(),\n new CliUnsetCommandProcessor(),\n new CliEnvCommandProcessor(),\n new CliFontSizeCommandProcessor(),\n new CliCaptureCommandProcessor(),\n new CliSnippetCommandProcessor(),\n new CliDiffCommandProcessor(),\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 /**\n * Whether `output()` was explicitly called during this command's execution.\n * Used by the executor to decide whether to auto-capture terminal output.\n */\n outputCalled = false;\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 this.running = false;\n\n if (!options?.silent) {\n throw new ProcessExitedError(code);\n }\n }\n\n output(data: any) {\n this.data = data;\n this.outputCalled = true;\n }\n\n start() {\n this.exited = undefined;\n this.exitCode = undefined;\n this.data = undefined;\n this.outputCalled = false;\n this.running = true;\n }\n\n end() {\n this.running = false;\n if (!this.exited) {\n this.exitCode = 0;\n }\n }\n}\n","import {\n CliOptions,\n ICliClipboard,\n ICliCommandExecutorService,\n ICliCommandProcessor,\n ICliCommandProcessorRegistry,\n ICliServiceProvider,\n ICliExecutionContext,\n ICliExecutionProcess,\n ICliLogger,\n ICliInputReader,\n ICliManagedInterval,\n ICliManagedTimer,\n ICliPercentageProgressBar,\n ICliSpinner,\n ICliStateStore,\n ICliTerminalWriter,\n ICliUserSession,\n ICliTextAnimator,\n ICliBackgroundServiceRegistry,\n ICliTranslationService,\n} from '@qodalis/cli-core';\nimport { Terminal } from '@xterm/xterm';\nimport { Subject } from 'rxjs';\nimport {\n CliProcessorsRegistry_TOKEN,\n CliStateStoreManager_TOKEN,\n} from '../tokens';\nimport { ICliStateStoreManager } 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 signal?: AbortSignal;\n terminal: Terminal;\n writer: ICliTerminalWriter;\n executor: ICliCommandExecutorService;\n clipboard: ICliClipboard;\n state: ICliStateStore;\n options?: CliOptions | undefined;\n setContextProcessor: (\n processor: ICliCommandProcessor | undefined,\n silent?: boolean,\n fullScreen?: boolean,\n ) => void;\n process: ICliExecutionProcess;\n logger: ICliLogger;\n services: ICliServiceProvider;\n translator: ICliTranslationService;\n reader: ICliInputReader;\n readonly backgroundServices: ICliBackgroundServiceRegistry;\n\n get promptLength(): number {\n return this.context.promptLength;\n }\n set promptLength(value: number) {\n this.context.promptLength = value;\n }\n\n get currentLine(): string {\n return this.context.currentLine;\n }\n\n setCurrentLine = (line: string): void => {\n this.context.setCurrentLine(line);\n };\n\n get cursorPosition(): number {\n return this.context.cursorPosition;\n }\n set cursorPosition(value: number) {\n this.context.cursorPosition = value;\n }\n\n clearLine: () => void;\n showPrompt: (options?: {\n reset?: boolean;\n newLine?: boolean;\n keepCurrentLine?: boolean;\n }) => void;\n clearCurrentLine: () => void;\n refreshCurrentLine: () => void;\n enterFullScreenMode: (processor: ICliCommandProcessor) => void;\n exitFullScreenMode: () => void;\n createInterval: (callback: () => void, ms: number) => ICliManagedInterval;\n createTimeout: (callback: () => void, ms: number) => ICliManagedTimer;\n\n constructor(\n public readonly context: ICliExecutionContext,\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.signal = context.signal;\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.setContextProcessor = context.setContextProcessor;\n this.clearLine = () => context.clearLine();\n this.showPrompt = (options) => context.showPrompt(options);\n this.clearCurrentLine = () => context.clearCurrentLine();\n this.refreshCurrentLine = () => context.refreshCurrentLine();\n this.process = context.process;\n this.logger = context.logger;\n this.services = context.services;\n this.translator = context.translator;\n this.reader = context.reader;\n\n this.enterFullScreenMode = (p) => context.enterFullScreenMode(p);\n this.exitFullScreenMode = () => context.exitFullScreenMode();\n this.createInterval = (cb, ms) => context.createInterval(cb, ms);\n this.createTimeout = (cb, ms) => context.createTimeout(cb, ms);\n this.backgroundServices = context.backgroundServices;\n\n this.state = context.services\n .get<ICliStateStoreManager>(CliStateStoreManager_TOKEN)\n .getProcessorStateStore(processor);\n }\n}\n","import { ICliServiceLogEntry } from '@qodalis/cli-core';\n\n/**\n * Circular buffer for background service log entries.\n */\nexport class ServiceLogBuffer {\n private entries: ICliServiceLogEntry[] = [];\n\n constructor(private maxSize = 1000) {}\n\n add(message: string, level: 'info' | 'warn' | 'error' = 'info'): void {\n this.entries.push({ timestamp: new Date(), level, message });\n if (this.entries.length > this.maxSize) {\n this.entries.shift();\n }\n }\n\n get(limit?: number): ICliServiceLogEntry[] {\n if (limit === undefined) {\n return [...this.entries];\n }\n return this.entries.slice(-limit);\n }\n\n clear(): void {\n this.entries = [];\n }\n}\n","import {\n ICliBackgroundService,\n ICliServiceContext,\n ICliManagedInterval,\n ICliManagedTimer,\n ICliServiceEvent,\n CliServiceExecutionMode,\n ICliStateStore,\n ICliServiceProvider,\n} from '@qodalis/cli-core';\nimport { ServiceLogBuffer } from './service-log-buffer';\n\n/**\n * Runs a background service on the main thread.\n */\nexport class CliMainThreadServiceRunner {\n readonly mode: CliServiceExecutionMode = 'main-thread';\n\n private readonly timers = new Set<{ clear(): void }>();\n private abortController: AbortController | null = null;\n\n constructor(\n private readonly service: ICliBackgroundService,\n private readonly logBuffer: ServiceLogBuffer,\n private readonly emitEvent: (event: ICliServiceEvent) => void,\n private readonly sharedState: ICliStateStore,\n private readonly sharedServices: ICliServiceProvider,\n ) {}\n\n async start(): Promise<void> {\n this.abortController = new AbortController();\n\n const context: ICliServiceContext = {\n signal: this.abortController.signal,\n emit: (event) => {\n this.emitEvent({ ...event, timestamp: new Date() });\n },\n log: (message, level = 'info') => {\n this.logBuffer.add(message, level);\n },\n createInterval: (callback, ms) => {\n let timerId = setInterval(callback, ms);\n const handle: ICliManagedInterval = {\n clear: () => {\n clearInterval(timerId);\n this.timers.delete(handle);\n },\n setDelay: (newMs) => {\n clearInterval(timerId);\n timerId = setInterval(callback, newMs);\n },\n };\n this.timers.add(handle);\n return handle;\n },\n createTimeout: (callback, ms) => {\n const timerId = setTimeout(() => {\n this.timers.delete(handle);\n callback();\n }, ms);\n const handle: ICliManagedTimer = {\n clear: () => {\n clearTimeout(timerId);\n this.timers.delete(handle);\n },\n };\n this.timers.add(handle);\n return handle;\n },\n state: this.sharedState,\n services: this.sharedServices,\n };\n\n await this.service.onStart(context);\n }\n\n async stop(): Promise<void> {\n this.clearAllTimers();\n this.abortController?.abort();\n\n if (this.service.onStop && this.abortController) {\n const ctx: ICliServiceContext = {\n signal: this.abortController.signal,\n emit: (event) => this.emitEvent({ ...event, timestamp: new Date() }),\n log: (message, level = 'info') => this.logBuffer.add(message, level),\n createInterval: () => { throw new Error('Cannot create timers during stop'); },\n createTimeout: () => { throw new Error('Cannot create timers during stop'); },\n state: this.sharedState,\n services: this.sharedServices,\n };\n await this.service.onStop(ctx);\n }\n\n this.abortController = null;\n }\n\n private clearAllTimers(): void {\n for (const timer of this.timers) {\n timer.clear();\n }\n this.timers.clear();\n }\n}\n","import {\n ICliBackgroundService,\n ICliServiceEvent,\n CliServiceExecutionMode,\n CliBackgroundServiceStatus,\n CliWorkerInboundMessage,\n CliWorkerOutboundMessage,\n ICliStateStore,\n} from '@qodalis/cli-core';\nimport { ServiceLogBuffer } from './service-log-buffer';\n\n/**\n * Runs a background service in a dedicated Web Worker.\n */\nexport class CliWorkerServiceRunner {\n readonly mode: CliServiceExecutionMode = 'worker';\n\n private worker: Worker | null = null;\n\n constructor(\n private readonly service: ICliBackgroundService,\n private readonly logBuffer: ServiceLogBuffer,\n private readonly emitEvent: (event: ICliServiceEvent) => void,\n private readonly onStatusChange: (status: CliBackgroundServiceStatus) => void,\n private readonly sharedState: ICliStateStore,\n ) {}\n\n async start(config?: Record<string, unknown>): Promise<void> {\n if (!this.service.workerFactory) {\n throw new Error(\n `Service \"${this.service.name}\" is workerCompatible but has no workerFactory`,\n );\n }\n\n this.worker = this.service.workerFactory();\n\n this.worker.onmessage = (ev: MessageEvent<CliWorkerOutboundMessage>) => {\n const msg = ev.data;\n\n switch (msg.type) {\n case 'log':\n this.logBuffer.add(msg.message, msg.level);\n break;\n\n case 'event':\n this.emitEvent({\n ...msg.event,\n timestamp: new Date(),\n });\n break;\n\n case 'state-update':\n this.sharedState.updateState(msg.patch);\n break;\n\n case 'status':\n this.onStatusChange(msg.status);\n break;\n\n case 'error':\n this.logBuffer.add(msg.message, 'error');\n this.emitEvent({\n source: this.service.name,\n type: 'service-error',\n data: { error: msg.message, stack: msg.stack },\n timestamp: new Date(),\n });\n this.onStatusChange('failed');\n break;\n }\n };\n\n this.worker.onerror = (ev) => {\n this.logBuffer.add(`Worker error: ${ev.message}`, 'error');\n this.onStatusChange('failed');\n };\n\n const startMsg: CliWorkerInboundMessage = { type: 'start', config };\n this.worker.postMessage(startMsg);\n }\n\n async stop(): Promise<void> {\n if (!this.worker) return;\n\n const stopMsg: CliWorkerInboundMessage = { type: 'stop' };\n this.worker.postMessage(stopMsg);\n\n // Give the worker 5 seconds to clean up, then terminate\n await Promise.race([\n new Promise<void>((resolve) => {\n const originalOnMessage = this.worker!.onmessage;\n this.worker!.onmessage = (ev: MessageEvent<CliWorkerOutboundMessage>) => {\n if (ev.data.type === 'status' && ev.data.status === 'stopped') {\n resolve();\n }\n if (originalOnMessage) {\n (originalOnMessage as (ev: MessageEvent) => void)(ev);\n }\n };\n }),\n new Promise<void>((resolve) => setTimeout(resolve, 5000)),\n ]);\n\n this.terminate();\n }\n\n terminate(): void {\n this.worker?.terminate();\n this.worker = null;\n }\n}\n","import {\n ICliBackgroundService,\n ICliBackgroundServiceInfo,\n ICliBackgroundServiceRegistry,\n ICliServiceContext,\n ICliServiceEvent,\n ICliServiceLogEntry,\n CliBackgroundServiceStatus,\n CliServiceEventHandler,\n ICliStateStore,\n ICliServiceProvider,\n ICliTerminalWriter,\n} from '@qodalis/cli-core';\nimport { ServiceLogBuffer } from './service-log-buffer';\nimport { CliMainThreadServiceRunner } from './cli-main-thread-service-runner';\nimport { CliWorkerServiceRunner } from './cli-worker-service-runner';\n\ninterface ServiceEntry {\n service: ICliBackgroundService;\n status: CliBackgroundServiceStatus;\n startedAt?: Date;\n stoppedAt?: Date;\n error?: string;\n logBuffer: ServiceLogBuffer;\n runner: CliMainThreadServiceRunner | CliWorkerServiceRunner | null;\n}\n\n/**\n * Per-session registry that manages background service lifecycle.\n */\nexport class CliBackgroundServiceRegistry implements ICliBackgroundServiceRegistry {\n private readonly entries = new Map<string, ServiceEntry>();\n private readonly handlers: Array<{\n handler: CliServiceEventHandler;\n filter?: { source?: string; type?: string };\n }> = [];\n private isFullScreen = false;\n private notificationQueue: ICliServiceEvent[] = [];\n\n constructor(\n private readonly state: ICliStateStore,\n private readonly services: ICliServiceProvider,\n private readonly writer?: ICliTerminalWriter,\n ) {}\n\n register(service: ICliBackgroundService): void {\n if (this.entries.has(service.name)) {\n throw new Error(`Service \"${service.name}\" is already registered`);\n }\n\n this.entries.set(service.name, {\n service,\n status: 'pending',\n logBuffer: new ServiceLogBuffer(),\n runner: null,\n });\n\n this.emitLifecycleEvent('service-registered', service.name, {\n name: service.name,\n type: service.type,\n });\n }\n\n async start(name: string): Promise<void> {\n const entry = this.getEntry(name);\n\n if (entry.status === 'running') {\n throw new Error(`Service \"${name}\" is already running`);\n }\n\n const useWorker =\n entry.service.workerCompatible &&\n entry.service.workerFactory &&\n typeof Worker !== 'undefined';\n\n if (useWorker) {\n const workerRunner = new CliWorkerServiceRunner(\n entry.service,\n entry.logBuffer,\n (event) => this.dispatchEvent(event),\n (status) => this.updateStatus(name, status),\n this.state,\n );\n entry.runner = workerRunner;\n entry.status = 'running';\n entry.startedAt = new Date();\n entry.stoppedAt = undefined;\n entry.error = undefined;\n\n try {\n await workerRunner.start();\n this.emitLifecycleEvent('service-started', name, {\n name,\n mode: 'worker',\n });\n } catch (e) {\n this.handleStartError(entry, name, e);\n }\n } else {\n const mainRunner = new CliMainThreadServiceRunner(\n entry.service,\n entry.logBuffer,\n (event) => this.dispatchEvent(event),\n this.state,\n this.services,\n );\n entry.runner = mainRunner;\n entry.status = 'running';\n entry.startedAt = new Date();\n entry.stoppedAt = undefined;\n entry.error = undefined;\n\n try {\n await mainRunner.start();\n this.emitLifecycleEvent('service-started', name, {\n name,\n mode: 'main-thread',\n });\n } catch (e) {\n this.handleStartError(entry, name, e);\n }\n }\n }\n\n async stop(name: string): Promise<void> {\n const entry = this.getEntry(name);\n\n if (entry.status !== 'running') {\n throw new Error(`Service \"${name}\" is not running (status: ${entry.status})`);\n }\n\n if (entry.runner) {\n await entry.runner.stop();\n }\n\n entry.status = 'stopped';\n entry.stoppedAt = new Date();\n entry.runner = null;\n\n this.emitLifecycleEvent('service-stopped', name, { name });\n }\n\n async restart(name: string): Promise<void> {\n const entry = this.getEntry(name);\n\n if (entry.service.type !== 'daemon') {\n throw new Error(`Cannot restart \"${name}\": only daemon services can be restarted`);\n }\n\n if (entry.status === 'running') {\n await this.stop(name);\n }\n\n await this.start(name);\n }\n\n startJob(\n name: string,\n task: (context: ICliServiceContext) => Promise<void>,\n _options?: { workerCompatible?: boolean },\n ): void {\n const jobService: ICliBackgroundService = {\n name,\n type: 'job',\n async onStart(ctx) {\n await task(ctx);\n },\n };\n\n this.register(jobService);\n\n this.start(name).then(() => {\n const entry = this.entries.get(name);\n if (entry && entry.status === 'running') {\n const duration = entry.startedAt\n ? Date.now() - entry.startedAt.getTime()\n : 0;\n entry.status = 'done';\n entry.stoppedAt = new Date();\n entry.runner = null;\n this.emitLifecycleEvent('service-completed', name, {\n name,\n duration,\n });\n }\n }).catch((e) => {\n const entry = this.entries.get(name);\n if (entry) {\n const error = e instanceof Error ? e : new Error(String(e));\n entry.status = 'failed';\n entry.error = error.message;\n entry.stoppedAt = new Date();\n entry.runner = null;\n this.emitLifecycleEvent('service-failed', name, {\n name,\n error: error.message,\n });\n }\n });\n }\n\n getStatus(name: string): ICliBackgroundServiceInfo | undefined {\n const entry = this.entries.get(name);\n if (!entry) return undefined;\n return this.toInfo(entry);\n }\n\n list(): ICliBackgroundServiceInfo[] {\n return Array.from(this.entries.values()).map((e) => this.toInfo(e));\n }\n\n getLogs(name: string, limit?: number): ICliServiceLogEntry[] {\n const entry = this.getEntry(name);\n return entry.logBuffer.get(limit);\n }\n\n on(\n handler: CliServiceEventHandler,\n filter?: { source?: string; type?: string },\n ): () => void {\n const registration = { handler, filter };\n this.handlers.push(registration);\n return () => {\n const idx = this.handlers.indexOf(registration);\n if (idx >= 0) {\n this.handlers.splice(idx, 1);\n }\n };\n }\n\n async destroyAll(): Promise<void> {\n const running = Array.from(this.entries.values()).filter(\n (e) => e.status === 'running',\n );\n\n await Promise.allSettled(\n running.map(async (entry) => {\n try {\n if (entry.runner) {\n await Promise.race([\n entry.runner.stop(),\n new Promise<void>((resolve) => setTimeout(resolve, 5000)),\n ]);\n\n if (entry.runner instanceof CliWorkerServiceRunner) {\n entry.runner.terminate();\n }\n }\n } catch {\n // Best effort during teardown\n }\n entry.status = 'stopped';\n entry.stoppedAt = new Date();\n entry.runner = null;\n }),\n );\n\n this.entries.clear();\n this.handlers.length = 0;\n }\n\n /** Called by the execution context when entering/exiting full-screen mode */\n setFullScreen(isFullScreen: boolean): void {\n this.isFullScreen = isFullScreen;\n if (!isFullScreen) {\n this.flushNotificationQueue();\n }\n }\n\n // --- Private ---\n\n private getEntry(name: string): ServiceEntry {\n const entry = this.entries.get(name);\n if (!entry) {\n throw new Error(`No service registered with name \"${name}\"`);\n }\n return entry;\n }\n\n private toInfo(entry: ServiceEntry): ICliBackgroundServiceInfo {\n const executionMode = entry.runner\n ? entry.runner.mode\n : 'main-thread';\n\n const uptime =\n entry.status === 'running' && entry.startedAt\n ? Date.now() - entry.startedAt.getTime()\n : undefined;\n\n return {\n name: entry.service.name,\n description: entry.service.description,\n type: entry.service.type,\n status: entry.status,\n executionMode,\n startedAt: entry.startedAt,\n stoppedAt: entry.stoppedAt,\n error: entry.error,\n uptime,\n };\n }\n\n private updateStatus(name: string, status: CliBackgroundServiceStatus): void {\n const entry = this.entries.get(name);\n if (!entry) return;\n\n const from = entry.status;\n entry.status = status;\n\n if (status === 'stopped' || status === 'failed' || status === 'done') {\n entry.stoppedAt = new Date();\n entry.runner = null;\n }\n\n this.emitLifecycleEvent('status-change', name, { name, from, to: status });\n }\n\n private handleStartError(entry: ServiceEntry, name: string, e: unknown): void {\n const error = e instanceof Error ? e : new Error(String(e));\n entry.status = 'failed';\n entry.error = error.message;\n entry.stoppedAt = new Date();\n entry.runner = null;\n entry.logBuffer.add(`Failed to start: ${error.message}`, 'error');\n\n if (entry.service.onError) {\n entry.service.onError(error, {} as ICliServiceContext);\n }\n\n this.emitLifecycleEvent('service-failed', name, {\n name,\n error: error.message,\n });\n }\n\n private dispatchEvent(event: ICliServiceEvent): void {\n const eventWithTimestamp = event.timestamp ? event : { ...event, timestamp: new Date() };\n\n for (const { handler, filter } of this.handlers) {\n if (filter?.source && filter.source !== eventWithTimestamp.source) continue;\n if (filter?.type && filter.type !== eventWithTimestamp.type) continue;\n try {\n handler(eventWithTimestamp);\n } catch {\n // Don't let a handler error break event dispatch\n }\n }\n\n const data = eventWithTimestamp.data as Record<string, unknown> | undefined;\n if (data?.['notify']) {\n this.notify(eventWithTimestamp);\n }\n }\n\n private emitLifecycleEvent(type: string, source: string, data: unknown): void {\n this.dispatchEvent({\n source,\n type,\n data,\n timestamp: new Date(),\n });\n }\n\n private notify(event: ICliServiceEvent): void {\n if (this.isFullScreen) {\n this.notificationQueue.push(event);\n return;\n }\n this.writeNotification(event);\n }\n\n private flushNotificationQueue(): void {\n for (const event of this.notificationQueue) {\n this.writeNotification(event);\n }\n this.notificationQueue = [];\n }\n\n private writeNotification(event: ICliServiceEvent): void {\n if (!this.writer) return;\n\n const data = event.data as Record<string, unknown> | undefined;\n const message = data?.['message'] ?? data?.['error'] ?? event.type;\n this.writer.writeln('');\n this.writer.writeln(`\\u250C\\u2500 [${event.source}] ${message}`);\n this.writer.writeln('\\u2514' + '\\u2500'.repeat(40));\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\n/**\n * Regex that matches ANSI SGR escape sequences (colors, bold, reset, etc.)\n */\nconst ANSI_RE = /\\x1b\\[[0-9;]*m/g;\n\n/**\n * Return the visible length of a string, ignoring ANSI escape codes.\n */\nfunction visibleLength(text: string): number {\n return text.replace(ANSI_RE, '').length;\n}\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 const 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 writeList(\n items: string[],\n options?: {\n ordered?: boolean;\n prefix?: string;\n color?: CliForegroundColor;\n },\n ): void {\n const { ordered, prefix, color } = options || {};\n items.forEach((item, i) => {\n const marker = prefix ?? (ordered ? `${i + 1}.` : '\\u2022');\n const text = ` ${marker} ${item}`;\n this.writeln(color ? this.wrapInColor(text, color) : text);\n });\n }\n\n public writeKeyValue(\n entries: Record<string, string> | [string, string][],\n options?: { separator?: string; keyColor?: CliForegroundColor },\n ): void {\n const pairs = Array.isArray(entries)\n ? entries\n : Object.entries(entries);\n const maxKeyLen = Math.max(...pairs.map(([k]) => k.length));\n const sep = options?.separator ?? ':';\n const keyColor = options?.keyColor ?? CliForegroundColor.Yellow;\n for (const [key, value] of pairs) {\n const paddedKey = key.padEnd(maxKeyLen);\n this.writeln(\n ` ${this.wrapInColor(paddedKey, keyColor)} ${sep} ${value}`,\n );\n }\n }\n\n public writeColumns(\n items: string[],\n options?: { columns?: number; padding?: number },\n ): void {\n const cols = options?.columns ?? 3;\n const pad = options?.padding ?? 2;\n const colWidth = Math.max(...items.map((s) => s.length)) + pad;\n for (let i = 0; i < items.length; i += cols) {\n const row = items.slice(i, i + cols);\n this.writeln(row.map((item) => item.padEnd(colWidth)).join(''));\n }\n }\n\n public writeTable(headers: string[], rows: string[][]): void {\n // Calculate column widths using visible length (ignoring ANSI codes)\n const colWidths = headers.map((header, colIndex) =>\n Math.max(\n visibleLength(header),\n ...rows.map((row) => visibleLength(row[colIndex] ?? '')),\n ),\n );\n\n // Pad text to a visible width, accounting for invisible ANSI sequences\n const padText = (text: string, width: number) => {\n const visible = visibleLength(text ?? '');\n const padding = Math.max(0, width - visible);\n return (text ?? '') + ' '.repeat(padding);\n };\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 { ICliExecutionContext, ICliSpinner } from '@qodalis/cli-core';\n\nexport class CliTerminalSpinner implements ICliSpinner {\n isRunning: boolean = false;\n\n text: string = '';\n\n context?: ICliExecutionContext;\n\n constructor(private terminal: Terminal) {}\n\n private spinnerInterval?: ReturnType<typeof setInterval> | null;\n private spinnerFrames = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n private spinnerColors = [\n '\\x1b[38;5;39m', // blue\n '\\x1b[38;5;45m', // cyan\n '\\x1b[38;5;49m', // teal\n '\\x1b[38;5;48m', // green-cyan\n '\\x1b[38;5;83m', // green\n '\\x1b[38;5;118m', // lime\n '\\x1b[38;5;154m', // yellow-green\n '\\x1b[38;5;220m', // yellow\n '\\x1b[38;5;214m', // orange\n '\\x1b[38;5;171m', // purple\n ];\n private spinnerIndex = 0;\n private savedCurrentLine = '';\n private lastContentLength = 0;\n private lastLineCount = 1;\n private resizeDisposable?: { dispose(): void };\n\n public show(text?: string): void {\n if (text) {\n this.text = text;\n }\n\n // If already running, just update the text — the existing\n // interval will pick it up on the next tick.\n if (this.isRunning) {\n return;\n }\n\n if (this.context) {\n this.savedCurrentLine = this.context.currentLine;\n this.context.setCurrentLine('');\n }\n\n this.lastContentLength = 0;\n this.lastLineCount = 1;\n this.isRunning = true;\n\n this.resizeDisposable = this.terminal.onResize(() => {\n this.lastLineCount = Math.max(\n this.lastLineCount,\n this.calcLineCount(this.lastContentLength),\n );\n });\n\n this.spinnerInterval = setInterval(() => {\n this.clearCurrentLine();\n\n const RESET = '\\x1b[0m';\n const frame = this.spinnerFrames[this.spinnerIndex];\n const color =\n this.spinnerColors[\n this.spinnerIndex % this.spinnerColors.length\n ];\n const textSuffix = this.text.length > 0 ? ` ${this.text}` : '';\n\n const content = `${color}${frame}${RESET}${textSuffix}`;\n // Plain length: 1 char for frame + text suffix\n const plainLength = 1 + textSuffix.length;\n\n this.terminal.write(content);\n this.lastContentLength = plainLength;\n this.lastLineCount = this.calcLineCount(plainLength);\n if (this.context) {\n this.context.setCurrentLine(content);\n }\n\n this.spinnerIndex =\n (this.spinnerIndex + 1) % this.spinnerFrames.length;\n }, 80);\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 this.resizeDisposable?.dispose();\n this.resizeDisposable = undefined;\n\n this.clearCurrentLine();\n\n if (this.context) {\n this.context.setCurrentLine(this.savedCurrentLine);\n }\n\n this.text = '';\n this.savedCurrentLine = '';\n this.lastContentLength = 0;\n this.lastLineCount = 1;\n }\n\n public setText(text: string) {\n this.text = text;\n }\n\n private clearCurrentLine(): void {\n const lines = Math.max(\n this.lastLineCount,\n this.calcLineCount(this.lastContentLength),\n );\n\n for (let i = 0; i < lines; i++) {\n this.terminal.write('\\x1b[2K');\n if (i < lines - 1) {\n this.terminal.write('\\x1b[A');\n }\n }\n\n this.terminal.write('\\r');\n }\n\n private calcLineCount(contentLength: number): number {\n return Math.max(1, Math.ceil(contentLength / this.terminal.cols));\n }\n}\n","import { Terminal } from '@xterm/xterm';\nimport {\n CliPercentageProgressBarUpdateValueOptions,\n ICliExecutionContext,\n ICliPercentageProgressBar,\n} from '@qodalis/cli-core';\n\nexport class CliTerminalProgressBar implements ICliPercentageProgressBar {\n isRunning: boolean = false;\n\n context?: ICliExecutionContext;\n\n private text: string = '';\n private progressBarInterval?: ReturnType<typeof setInterval> | null;\n private progress = 0;\n private total = 100;\n private progressText = '';\n private progressTextPlainLength = 0;\n private savedCurrentLine = '';\n private tickCount = 0;\n private lastLineCount = 1;\n private resizeDisposable?: { dispose(): void };\n\n constructor(private terminal: Terminal) {}\n\n public show(text?: string): void {\n this.isRunning = true;\n this.progress = 0;\n this.tickCount = 0;\n this.lastLineCount = 1;\n this.text = text || '';\n\n if (this.context) {\n this.savedCurrentLine = this.context.currentLine;\n this.context.setCurrentLine('');\n }\n\n this.resizeDisposable = this.terminal.onResize(() => {\n this.lastLineCount = Math.max(\n this.lastLineCount,\n this.calcLineCount(this.progressTextPlainLength),\n );\n });\n\n // Update progress bar every 100ms\n this.progressBarInterval = setInterval(() => {\n this.tickCount++;\n\n // Auto-increment for smooth animation, slowing down as progress increases\n if (this.tickCount % 3 === 0 && this.progress < 90) {\n const step =\n this.progress < 30 ? 2 : this.progress < 60 ? 1 : 0.5;\n this.progress = Math.min(90, this.progress + step);\n }\n\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.resizeDisposable?.dispose();\n this.resizeDisposable = undefined;\n\n this.clearCurrentLine();\n\n if (this.context) {\n this.context.setCurrentLine(this.savedCurrentLine);\n }\n\n this.text = '';\n this.progressText = '';\n this.progressTextPlainLength = 0;\n this.savedCurrentLine = '';\n this.lastLineCount = 1;\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 displayProgress = Math.round(this.progress);\n const totalBars = 50; // Length of the progress bar\n const filledBars = Math.round(\n (displayProgress / this.total) * totalBars,\n );\n const emptyBars = totalBars - filledBars;\n\n // Build color-animated filled portion\n const RESET = '\\x1b[0m';\n const DIM = '\\x1b[2m';\n let filledStr = '';\n const shimmerPos = this.tickCount % (filledBars + 6);\n\n for (let i = 0; i < filledBars; i++) {\n const ratio = filledBars > 1 ? i / (filledBars - 1) : 1;\n const color = this.progressGradientColor(ratio);\n const isShimmer = i >= shimmerPos - 2 && i <= shimmerPos;\n const bright = isShimmer ? '\\x1b[1m' : '';\n filledStr += `${color}${bright}#${RESET}`;\n }\n\n const emptyStr = `${DIM}${'.'.repeat(emptyBars)}${RESET}`;\n\n const progressBar = `[${filledStr}${emptyStr}]`;\n const percentage = `${displayProgress}%`.padStart(4, ' ');\n const text = this.text.length > 0 ? ` ${this.text}` : '';\n\n this.clearCurrentLine();\n this.progressText = `${progressBar} ${percentage} ${text}`;\n // Plain-text length for line-wrap calculation (no ANSI codes)\n this.progressTextPlainLength =\n 1 + totalBars + 1 + 1 + 4 + 1 + text.length;\n\n this.terminal.write(this.progressText);\n this.lastLineCount = this.calcLineCount(this.progressTextPlainLength);\n\n if (this.context) {\n this.context.setCurrentLine(this.progressText);\n }\n }\n\n /**\n * Returns an ANSI 256-color escape for a position in the progress bar.\n * Gradient: red (0%) -> yellow (50%) -> green (100%).\n */\n private progressGradientColor(ratio: number): string {\n let r: number, g: number;\n if (ratio < 0.5) {\n // red -> yellow\n r = 5;\n g = Math.round((ratio / 0.5) * 5);\n } else {\n // yellow -> green\n r = Math.round(((1 - ratio) / 0.5) * 5);\n g = 5;\n }\n // 256-color: 16 + 36*r + 6*g + b\n const colorIndex = 16 + 36 * r + 6 * g + 0;\n return `\\x1b[38;5;${colorIndex}m`;\n }\n\n private clearCurrentLine(): void {\n const lines = Math.max(\n this.lastLineCount,\n this.calcLineCount(this.progressTextPlainLength),\n );\n\n for (let i = 0; i < lines; i++) {\n this.terminal.write('\\x1b[2K');\n if (i < lines - 1) {\n this.terminal.write('\\x1b[A');\n }\n }\n\n this.terminal.write('\\r');\n }\n\n private calcLineCount(contentLength: number): number {\n return Math.max(1, Math.ceil(contentLength / this.terminal.cols));\n }\n}\n","import { Terminal } from '@xterm/xterm';\nimport {\n CliTextAnimatorOptions,\n delay,\n ICliExecutionContext,\n ICliTextAnimator,\n} from '@qodalis/cli-core';\n\nexport class CliTerminalTextAnimator implements ICliTextAnimator {\n isRunning: boolean = false;\n\n context?: ICliExecutionContext;\n\n private animationInterval?: ReturnType<typeof setInterval> | null;\n private text: string = '';\n private textColor = '\\x1b[38;5;249m'; // light gray\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): Promise<void> {\n const { speed, removeAfterTyping } = options || {};\n\n if (this.isRunning) {\n return Promise.resolve();\n }\n\n this.isRunning = true;\n this.text = text || this.text;\n\n const savedCurrentLine = this.context?.currentLine || '';\n let index = 0;\n let isTyping = true;\n\n const RESET = '\\x1b[0m';\n\n return new Promise<void>((resolve) => {\n this.animationInterval = setInterval(() => {\n if (isTyping) {\n // Write text character by character with wave color\n const ch = this.text[index];\n this.terminal.write(`${this.textColor}${ch}${RESET}`);\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 if (this.context) {\n this.context.setCurrentLine(\n savedCurrentLine + this.text,\n );\n this.context.clearCurrentLine();\n }\n this.isRunning = false;\n resolve();\n });\n } else {\n // Erase text character by character\n this.terminal.write('\\b \\b');\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 resolve();\n }\n }\n }, speed || 100);\n });\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 { 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","import {\n ICliInputReader,\n CliSelectOption,\n CliMultiSelectOption,\n} from '@qodalis/cli-core';\n\nexport type ActiveInputRequestType =\n | 'line'\n | 'password'\n | 'confirm'\n | 'select'\n | 'select-inline'\n | 'multi-select'\n | 'number';\n\nexport interface ActiveInputRequest {\n type: ActiveInputRequestType;\n promptText: string;\n resolve: (value: any) => void;\n buffer: string;\n cursorPosition: number;\n defaultValue?: boolean;\n options?: CliSelectOption[];\n selectedIndex?: number;\n onChange?: (value: string) => void;\n checkedIndices?: Set<number>;\n numberOptions?: { min?: number; max?: number; default?: number };\n scrollOffset?: number;\n maxVisible?: number;\n displayLines?: number;\n}\n\nexport interface CliInputReaderHost {\n readonly activeInputRequest: ActiveInputRequest | null;\n setActiveInputRequest(request: ActiveInputRequest | null): void;\n writeToTerminal(text: string): void;\n getTerminalRows?(): number;\n}\n\nexport class CliInputReader implements ICliInputReader {\n constructor(private readonly host: CliInputReaderHost) {}\n\n readLine(prompt: string): Promise<string | null> {\n return this.createInputRequest('line', prompt);\n }\n\n readPassword(prompt: string): Promise<string | null> {\n return this.createInputRequest('password', prompt);\n }\n\n readConfirm(\n prompt: string,\n defaultValue: boolean = false,\n ): Promise<boolean | null> {\n const hint = defaultValue ? '(Y/n)' : '(y/N)';\n const displayPrompt = `${prompt} ${hint}: `;\n\n return new Promise<boolean | null>((resolve) => {\n if (this.host.activeInputRequest) {\n throw new Error('Another input request is already active');\n }\n\n this.host.writeToTerminal(displayPrompt);\n\n this.host.setActiveInputRequest({\n type: 'confirm',\n promptText: displayPrompt,\n resolve,\n buffer: '',\n cursorPosition: 0,\n defaultValue,\n });\n });\n }\n\n readSelect(\n prompt: string,\n options: CliSelectOption[],\n onChange?: (value: string) => void,\n ): Promise<string | null> {\n if (!options || options.length === 0) {\n return Promise.reject(\n new Error('readSelect requires at least one option'),\n );\n }\n\n return new Promise<string | null>((resolve) => {\n if (this.host.activeInputRequest) {\n throw new Error('Another input request is already active');\n }\n\n // Calculate how many options fit on screen (reserve 2 rows for prompt + padding)\n const termRows = this.host.getTerminalRows?.() ?? 24;\n const maxVisible = Math.max(3, termRows - 2);\n\n // Write prompt and render options\n this.host.writeToTerminal(prompt + '\\r\\n');\n const displayLines = this.renderSelectOptions(options, 0, 0, maxVisible);\n\n // Fire onChange for the initial selection\n onChange?.(options[0].value);\n\n this.host.setActiveInputRequest({\n type: 'select',\n promptText: prompt,\n resolve,\n buffer: '',\n cursorPosition: 0,\n options,\n selectedIndex: 0,\n onChange,\n scrollOffset: 0,\n maxVisible,\n displayLines,\n });\n });\n }\n\n readSelectInline(\n prompt: string,\n options: CliSelectOption[],\n onChange?: (value: string) => void,\n ): Promise<string | null> {\n if (!options || options.length === 0) {\n return Promise.reject(\n new Error('readSelectInline requires at least one option'),\n );\n }\n\n return new Promise<string | null>((resolve) => {\n if (this.host.activeInputRequest) {\n throw new Error('Another input request is already active');\n }\n\n // Write prompt + inline options on one line\n const inlineText = this.renderInlineSelectOptions(options, 0);\n this.host.writeToTerminal(`${prompt} ${inlineText}`);\n\n // Fire onChange for the initial selection\n onChange?.(options[0].value);\n\n this.host.setActiveInputRequest({\n type: 'select-inline',\n promptText: prompt,\n resolve,\n buffer: '',\n cursorPosition: 0,\n options,\n selectedIndex: 0,\n onChange,\n });\n });\n }\n\n readMultiSelect(\n prompt: string,\n options: CliMultiSelectOption[],\n ): Promise<string[] | null> {\n if (!options || options.length === 0) {\n return Promise.reject(\n new Error('readMultiSelect requires at least one option'),\n );\n }\n\n return new Promise<string[] | null>((resolve) => {\n if (this.host.activeInputRequest) {\n throw new Error('Another input request is already active');\n }\n\n // Initialize checked indices from options with checked: true\n const checkedIndices = new Set<number>();\n options.forEach((opt, i) => {\n if (opt.checked) {\n checkedIndices.add(i);\n }\n });\n\n const termRows = this.host.getTerminalRows?.() ?? 24;\n const maxVisible = Math.max(3, termRows - 2);\n\n // Write prompt and render checkbox options\n this.host.writeToTerminal(prompt + '\\r\\n');\n const displayLines = this.renderMultiSelectOptions(options, 0, checkedIndices, 0, maxVisible);\n\n this.host.setActiveInputRequest({\n type: 'multi-select',\n promptText: prompt,\n resolve,\n buffer: '',\n cursorPosition: 0,\n options,\n selectedIndex: 0,\n checkedIndices,\n scrollOffset: 0,\n maxVisible,\n displayLines,\n });\n });\n }\n\n readNumber(\n prompt: string,\n options?: { min?: number; max?: number; default?: number },\n ): Promise<number | null> {\n return new Promise<number | null>((resolve) => {\n if (this.host.activeInputRequest) {\n throw new Error('Another input request is already active');\n }\n\n // Build display prompt with bounds hint\n let displayPrompt = prompt;\n const hints: string[] = [];\n if (options?.min !== undefined || options?.max !== undefined) {\n const minStr =\n options?.min !== undefined ? String(options.min) : '';\n const maxStr =\n options?.max !== undefined ? String(options.max) : '';\n if (minStr && maxStr) {\n hints.push(`${minStr}-${maxStr}`);\n } else if (minStr) {\n hints.push(`>=${minStr}`);\n } else if (maxStr) {\n hints.push(`<=${maxStr}`);\n }\n }\n if (options?.default !== undefined) {\n hints.push(`default: ${options.default}`);\n }\n if (hints.length > 0) {\n displayPrompt += ` (${hints.join(', ')}): `;\n } else {\n displayPrompt += ': ';\n }\n\n this.host.writeToTerminal(displayPrompt);\n\n this.host.setActiveInputRequest({\n type: 'number',\n promptText: displayPrompt,\n resolve,\n buffer: '',\n cursorPosition: 0,\n numberOptions: options,\n });\n });\n }\n\n renderSelectOptions(\n options: CliSelectOption[],\n selectedIndex: number,\n scrollOffset: number = 0,\n maxVisible: number = options.length,\n ): number {\n const needsScroll = options.length > maxVisible;\n // Reserve lines for scroll indicators when scrolling is needed\n const itemSlots = needsScroll ? maxVisible - 2 : options.length;\n const visibleCount = Math.max(1, Math.min(itemSlots, options.length));\n const end = Math.min(scrollOffset + visibleCount, options.length);\n let lines = 0;\n\n if (needsScroll) {\n const upLabel = scrollOffset > 0 ? '↑ more' : '';\n this.host.writeToTerminal(` \\x1b[2m${upLabel}\\x1b[0m\\r\\n`);\n lines++;\n }\n\n for (let i = scrollOffset; i < end; i++) {\n const prefix = i === selectedIndex ? ' \\x1b[36m> ' : ' ';\n const suffix = i === selectedIndex ? '\\x1b[0m' : '';\n this.host.writeToTerminal(\n `${prefix}${options[i].label}${suffix}\\r\\n`,\n );\n lines++;\n }\n\n if (needsScroll) {\n const downLabel = end < options.length ? '↓ more' : '';\n this.host.writeToTerminal(` \\x1b[2m${downLabel}\\x1b[0m\\r\\n`);\n lines++;\n }\n\n return lines;\n }\n\n renderInlineSelectOptions(\n options: CliSelectOption[],\n selectedIndex: number,\n ): string {\n return options\n .map((opt, i) => {\n if (i === selectedIndex) {\n return `\\x1b[36m[ ${opt.label} ]\\x1b[0m`;\n }\n return ` ${opt.label} `;\n })\n .join('');\n }\n\n renderMultiSelectOptions(\n options: CliSelectOption[],\n selectedIndex: number,\n checkedIndices: Set<number>,\n scrollOffset: number = 0,\n maxVisible: number = options.length,\n ): number {\n const needsScroll = options.length > maxVisible;\n const itemSlots = needsScroll ? maxVisible - 2 : options.length;\n const visibleCount = Math.max(1, Math.min(itemSlots, options.length));\n const end = Math.min(scrollOffset + visibleCount, options.length);\n let lines = 0;\n\n if (needsScroll) {\n const upLabel = scrollOffset > 0 ? '↑ more' : '';\n this.host.writeToTerminal(` \\x1b[2m${upLabel}\\x1b[0m\\r\\n`);\n lines++;\n }\n\n for (let i = scrollOffset; i < end; i++) {\n const checkbox = checkedIndices.has(i) ? '[x]' : '[ ]';\n const prefix =\n i === selectedIndex\n ? ` \\x1b[36m> ${checkbox} `\n : ` ${checkbox} `;\n const suffix = i === selectedIndex ? '\\x1b[0m' : '';\n this.host.writeToTerminal(\n `${prefix}${options[i].label}${suffix}\\r\\n`,\n );\n lines++;\n }\n\n if (needsScroll) {\n const downLabel = end < options.length ? '↓ more' : '';\n this.host.writeToTerminal(` \\x1b[2m${downLabel}\\x1b[0m\\r\\n`);\n lines++;\n }\n\n return lines;\n }\n\n private createInputRequest(\n type: 'line' | 'password',\n prompt: string,\n ): Promise<string | null> {\n return new Promise<string | null>((resolve) => {\n if (this.host.activeInputRequest) {\n throw new Error('Another input request is already active');\n }\n\n this.host.writeToTerminal(prompt);\n\n this.host.setActiveInputRequest({\n type,\n promptText: prompt,\n resolve,\n buffer: '',\n cursorPosition: 0,\n });\n });\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n} from '@qodalis/cli-core';\nimport { getAccelerator } from '../wasm';\n\nexport interface CompletionResult {\n /** Matching candidates */\n candidates: string[];\n /** The token being completed */\n token: string;\n /** Start index of the token in the input */\n tokenStart: number;\n}\n\n/**\n * Manages tab-completion by querying registered providers in priority order.\n * Implements bash-style behavior:\n * - First Tab: complete common prefix (or single match fully)\n * - Second Tab: display all candidates\n */\nexport class CliCompletionEngine {\n private providers: ICliCompletionProvider[] = [];\n private lastCandidates: string[] = [];\n private tabCount = 0;\n private lastInput = '';\n\n setProviders(providers: ICliCompletionProvider[]): void {\n this.providers = [...providers].sort((a, b) => a.priority - b.priority);\n }\n\n addProvider(provider: ICliCompletionProvider): void {\n this.providers.push(provider);\n this.providers.sort((a, b) => a.priority - b.priority);\n }\n\n /**\n * Reset tab state. Call on any non-tab keypress.\n */\n resetState(): void {\n this.tabCount = 0;\n this.lastCandidates = [];\n this.lastInput = '';\n }\n\n /**\n * Process a tab press. Returns the completion result.\n */\n async complete(\n input: string,\n cursor: number,\n ): Promise<{\n /** What to do */\n action: 'complete' | 'show-candidates' | 'none';\n /** Replacement text for the token (when action = 'complete') */\n replacement?: string;\n /** Where the token starts in the input */\n tokenStart?: number;\n /** The original token */\n token?: string;\n /** All candidates (when action = 'show-candidates') */\n candidates?: string[];\n }> {\n // Parse input into completion context\n const ctx = this.buildContext(input, cursor);\n\n // Track consecutive tabs on the same input\n if (input === this.lastInput) {\n this.tabCount++;\n } else {\n this.tabCount = 1;\n this.lastInput = input;\n this.lastCandidates = [];\n }\n\n // On first tab (or input changed), fetch completions\n if (this.tabCount === 1) {\n const candidates = await this.fetchCompletions(ctx);\n this.lastCandidates = candidates;\n\n if (candidates.length === 0) {\n return { action: 'none' };\n }\n\n if (candidates.length === 1) {\n // Single match — complete fully with trailing space\n this.lastInput = ''; // Reset so next tab re-evaluates\n this.tabCount = 0;\n return {\n action: 'complete',\n replacement: candidates[0],\n tokenStart: ctx.tokenStart,\n token: ctx.token,\n };\n }\n\n // Multiple matches — complete common prefix\n const common = this.commonPrefix(candidates);\n if (common.length > ctx.token.length) {\n // We can extend the current token\n this.lastInput =\n input.slice(0, ctx.tokenStart) +\n common +\n input.slice(ctx.tokenStart + ctx.token.length);\n return {\n action: 'complete',\n replacement: common,\n tokenStart: ctx.tokenStart,\n token: ctx.token,\n };\n }\n\n // Common prefix = current token, nothing more to complete on first tab\n return { action: 'none' };\n }\n\n // Second tab — show all candidates\n if (this.tabCount >= 2 && this.lastCandidates.length > 1) {\n return {\n action: 'show-candidates',\n candidates: this.lastCandidates,\n };\n }\n\n return { action: 'none' };\n }\n\n private buildContext(input: string, cursor: number): ICliCompletionContext {\n // Tokenize input up to cursor\n const beforeCursor = input.slice(0, cursor);\n const tokens = this.tokenize(beforeCursor);\n const allTokens = this.tokenize(input);\n\n // Find which token the cursor is in\n let tokenStart = 0;\n let token = '';\n let tokenIndex = 0;\n\n if (tokens.length === 0 || beforeCursor.endsWith(' ')) {\n // Cursor is at a new token position (after a space or empty input)\n token = '';\n tokenStart = cursor;\n tokenIndex = tokens.length;\n } else {\n // Cursor is within the last token\n token = tokens[tokens.length - 1];\n tokenStart = beforeCursor.lastIndexOf(token);\n tokenIndex = tokens.length - 1;\n }\n\n return {\n input,\n cursor,\n token,\n tokenStart,\n tokenIndex,\n tokens: allTokens,\n };\n }\n\n private tokenize(input: string): string[] {\n return input.split(/\\s+/).filter(Boolean);\n }\n\n private async fetchCompletions(\n ctx: ICliCompletionContext,\n ): Promise<string[]> {\n for (const provider of this.providers) {\n const result = await provider.getCompletions(ctx);\n if (result.length > 0) {\n return result;\n }\n }\n return [];\n }\n\n /**\n * Return the single best completion string for ghost-text display.\n * Returns null if there is no clear best match or multiple candidates.\n */\n async completeSingle(input: string, cursor: number): Promise<string | null> {\n if (!input) return null;\n const ctx = this.buildContext(input, cursor);\n const candidates = await this.fetchCompletions(ctx);\n if (candidates.length !== 1) return null;\n const match = candidates[0];\n if (!match.startsWith(ctx.token)) return null;\n return input.slice(0, ctx.tokenStart) + match;\n }\n\n private commonPrefix(strings: string[]): string {\n return getAccelerator().commonPrefix(strings);\n }\n}\n","/**\n * Reusable text buffer with cursor management.\n * Eliminates duplicated line-editing logic across CommandLineMode,\n * ReaderMode, and any future input mode.\n */\nexport class CliLineBuffer {\n private _text = '';\n private _cursorPosition = 0;\n\n get text(): string {\n return this._text;\n }\n\n get cursorPosition(): number {\n return this._cursorPosition;\n }\n\n set cursorPosition(value: number) {\n this._cursorPosition = Math.max(0, Math.min(value, this._text.length));\n }\n\n insert(str: string): void {\n this._text =\n this._text.slice(0, this._cursorPosition) +\n str +\n this._text.slice(this._cursorPosition);\n this._cursorPosition += str.length;\n }\n\n deleteCharBefore(): void {\n if (this._cursorPosition > 0) {\n this._text =\n this._text.slice(0, this._cursorPosition - 1) +\n this._text.slice(this._cursorPosition);\n this._cursorPosition--;\n }\n }\n\n deleteCharAt(): void {\n if (this._cursorPosition < this._text.length) {\n this._text =\n this._text.slice(0, this._cursorPosition) +\n this._text.slice(this._cursorPosition + 1);\n }\n }\n\n moveCursorLeft(): void {\n if (this._cursorPosition > 0) {\n this._cursorPosition--;\n }\n }\n\n moveCursorRight(): void {\n if (this._cursorPosition < this._text.length) {\n this._cursorPosition++;\n }\n }\n\n moveHome(): void {\n this._cursorPosition = 0;\n }\n\n moveEnd(): void {\n this._cursorPosition = this._text.length;\n }\n\n clear(): void {\n this._text = '';\n this._cursorPosition = 0;\n }\n\n setText(str: string): void {\n this._text = str;\n this._cursorPosition = str.length;\n }\n}\n","import { IInputMode } from './input-mode';\nimport { CliLineBuffer } from './cli-line-buffer';\nimport {\n CliTerminalLineRenderer,\n PromptOptions,\n} from './cli-terminal-line-renderer';\nimport { CliCompletionEngine } from '../completion/cli-completion-engine';\nimport { CliCommandHistory } from '../services/cli-command-history';\nimport { Terminal } from '@xterm/xterm';\nimport {\n ICliCommandExecutorService,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\n\n/**\n * Host interface for CommandLineMode — provides access to\n * the execution context's services without a circular dependency.\n */\nexport interface CommandLineModeHost {\n readonly terminal: Terminal;\n readonly lineBuffer: CliLineBuffer;\n readonly lineRenderer: CliTerminalLineRenderer;\n readonly completionEngine: CliCompletionEngine;\n readonly commandHistory: CliCommandHistory;\n getPromptOptions(): PromptOptions;\n getPromptLength(): number;\n setPromptLength(value: number): void;\n getExecutionContext(): ICliExecutionContext;\n isProgressRunning(): boolean;\n isRawModeActive(): boolean;\n abort(): void;\n showPrompt(options?: {\n reset?: boolean;\n newLine?: boolean;\n keepCurrentLine?: boolean;\n }): void;\n}\n\nexport class CommandLineMode implements IInputMode {\n private historyIndex = 0;\n private isExecutingCommand = false;\n private selectionStart: { x: number; y: number } | null = null;\n private selectionEnd: { x: number; y: number } | null = null;\n private ghostText = '';\n private ghostDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n /** Non-null while the user is doing prefix-based history search (Up arrow with text in buffer). */\n private historySearchPrefix: string | null = null;\n /** True when the buffer text was set by history navigation (not typed by user). */\n private bufferSetByHistory = false;\n\n constructor(private readonly host: CommandLineModeHost) {}\n\n activate(): void {\n this.host.commandHistory.initialize().then(() => {\n this.historyIndex = this.host.commandHistory.getLastIndex();\n });\n }\n\n async handleInput(data: string): Promise<void> {\n const buffer = this.host.lineBuffer;\n\n if (data === '\\u0009') {\n this.clearGhostText();\n await this.handleTabCompletion();\n return;\n }\n\n this.host.completionEngine.resetState();\n\n if (data === '\\r') {\n this.clearGhostText();\n this.host.terminal.write('\\r\\n');\n\n if (buffer.text) {\n await this.host.commandHistory.addCommand(buffer.text);\n this.historyIndex = this.host.commandHistory.getLastIndex();\n this.bufferSetByHistory = false;\n\n this.isExecutingCommand = true;\n const ctx = this.host.getExecutionContext();\n await ctx.executor.executeCommand(buffer.text, ctx);\n this.isExecutingCommand = false;\n\n // Don't write post-command messages if we switched to full-screen mode\n if (!this.host.isRawModeActive()) {\n if (ctx.onAbort.observed) {\n this.host.terminal.write(\n '\\x1b[33mPress Ctrl+C to cancel\\x1b[0m\\r\\n',\n );\n }\n }\n }\n\n if (!this.host.isRawModeActive()) {\n this.host.showPrompt();\n }\n } else if (data === '\\u001B[A') {\n this.showPreviousCommand();\n } else if (data === '\\u001B[B') {\n this.showNextCommand();\n } else if (data === '\\u001B[D') {\n if (buffer.cursorPosition > 0) {\n buffer.moveCursorLeft();\n this.host.terminal.write(data);\n }\n } else if (data === '\\u001B[C') {\n if (this.ghostText && buffer.cursorPosition === buffer.text.length) {\n // Accept ghost text suggestion\n buffer.insert(this.ghostText);\n this.ghostText = '';\n this.refreshLine();\n } else if (buffer.cursorPosition < buffer.text.length) {\n buffer.moveCursorRight();\n this.host.terminal.write(data);\n }\n } else if (data === '\\u007F') {\n this.handleBackspace();\n } else {\n this.handleInputText(data);\n }\n }\n\n handleKeyEvent(event: KeyboardEvent): boolean {\n if (event.code === 'KeyC' && event.ctrlKey) {\n this.host.abort();\n this.host.terminal.writeln('Ctrl+C');\n\n // Clear context processor if one is active (e.g. --context mode)\n this.host.getExecutionContext().setContextProcessor(undefined);\n\n if (!this.isExecutingCommand) {\n this.host.showPrompt();\n }\n\n return false;\n }\n\n if (event.code === 'Escape') {\n this.host.abort();\n this.host.showPrompt({ newLine: true });\n return false;\n }\n\n if (event.code === 'KeyV' && event.ctrlKey) {\n return false;\n }\n\n if (event.code === 'KeyL' && event.ctrlKey) {\n event.preventDefault();\n this.host.lineBuffer.clear();\n this.host.terminal.clear();\n this.host.showPrompt({ reset: true });\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 const buffer = this.host.lineBuffer;\n if (event.code === 'ArrowLeft') {\n buffer.moveCursorLeft();\n } else {\n buffer.moveCursorRight();\n }\n\n this.selectionEnd = this.getTerminalCursorPosition();\n this.updateSelection();\n return false;\n } else {\n this.selectionStart = null;\n }\n\n return true;\n }\n\n private handleInputText(text: string): void {\n text = text.replace(/[\\r\\n\\t]+/g, '');\n this.clearGhostText();\n this.clearHistorySearch();\n this.bufferSetByHistory = false;\n this.host.lineBuffer.insert(text);\n this.refreshLine();\n this.scheduleGhostText();\n }\n\n private clearGhostText(): void {\n this.ghostText = '';\n if (this.ghostDebounceTimer !== null) {\n clearTimeout(this.ghostDebounceTimer);\n this.ghostDebounceTimer = null;\n }\n }\n\n private scheduleGhostText(): void {\n this.ghostDebounceTimer = setTimeout(() => {\n this.computeAndShowGhostText();\n }, 120);\n }\n\n private async computeAndShowGhostText(): Promise<void> {\n const buffer = this.host.lineBuffer;\n if (!buffer.text || buffer.cursorPosition < buffer.text.length) return;\n\n try {\n const result = await this.host.completionEngine.completeSingle(\n buffer.text,\n buffer.cursorPosition,\n );\n if (result && result.startsWith(buffer.text)) {\n this.ghostText = result.slice(buffer.text.length);\n this.renderGhostText();\n }\n } catch {\n // silently ignore completion errors\n }\n }\n\n private handleBackspace(): void {\n const buffer = this.host.lineBuffer;\n this.clearGhostText();\n this.clearHistorySearch();\n if (buffer.cursorPosition > 0) {\n buffer.deleteCharBefore();\n this.refreshLine();\n }\n }\n\n private async handleTabCompletion(): Promise<void> {\n const buffer = this.host.lineBuffer;\n const result = await this.host.completionEngine.complete(\n buffer.text,\n buffer.cursorPosition,\n );\n\n switch (result.action) {\n case 'complete': {\n const { replacement, tokenStart, token } = result;\n if (\n replacement === undefined ||\n tokenStart === undefined ||\n token === undefined\n ) {\n break;\n }\n\n const before = buffer.text.slice(0, tokenStart);\n const after = buffer.text.slice(tokenStart + token.length);\n const suffix =\n after.length === 0 && !replacement.endsWith('/') ? ' ' : '';\n buffer.setText(before + replacement + suffix + after);\n buffer.cursorPosition =\n tokenStart + replacement.length + suffix.length;\n this.refreshLine();\n break;\n }\n case 'show-candidates': {\n const candidates = result.candidates ?? [];\n if (candidates.length === 0) break;\n\n this.host.terminal.write('\\r\\n');\n\n const maxLen = Math.max(...candidates.map((c) => c.length));\n const cols = Math.max(\n 1,\n Math.floor((this.host.terminal.cols || 80) / (maxLen + 2)),\n );\n let line = '';\n for (let i = 0; i < candidates.length; i++) {\n line += candidates[i].padEnd(maxLen + 2);\n if ((i + 1) % cols === 0) {\n this.host.terminal.write(line + '\\r\\n');\n line = '';\n }\n }\n if (line) {\n this.host.terminal.write(line + '\\r\\n');\n }\n\n const promptStr = this.host.lineRenderer.getPromptString(\n this.host.getPromptOptions(),\n );\n this.host.terminal.write(promptStr);\n this.host.setPromptLength(\n this.host.terminal.buffer.active.cursorX,\n );\n this.host.terminal.write(buffer.text);\n\n const charsAfterCursor =\n buffer.text.length - buffer.cursorPosition;\n if (charsAfterCursor > 0) {\n this.host.terminal.write(`\\x1b[${charsAfterCursor}D`);\n }\n break;\n }\n }\n }\n\n private showPreviousCommand(): void {\n this.clearGhostText();\n const buffer = this.host.lineBuffer;\n\n // If the buffer has user-typed text and we haven't started a prefix search, begin one.\n if (buffer.text && !this.bufferSetByHistory && this.historySearchPrefix === null) {\n this.historySearchPrefix = buffer.text;\n this.historyIndex = this.host.commandHistory.getLastIndex();\n }\n\n if (this.historySearchPrefix !== null) {\n const found = this.host.commandHistory.searchBackward(\n this.historySearchPrefix,\n this.historyIndex,\n );\n if (found !== -1) {\n this.historyIndex = found;\n this.displayCommandFromHistory();\n }\n return;\n }\n\n if (this.historyIndex > 0) {\n this.historyIndex--;\n this.displayCommandFromHistory();\n }\n }\n\n private showNextCommand(): void {\n this.clearGhostText();\n const buffer = this.host.lineBuffer;\n\n if (this.historySearchPrefix !== null) {\n const found = this.host.commandHistory.searchForward(\n this.historySearchPrefix,\n this.historyIndex,\n );\n if (found !== -1) {\n this.historyIndex = found;\n this.displayCommandFromHistory();\n } else {\n // Restore the original search prefix in the buffer\n const previousContentLength =\n this.host.getPromptLength() + buffer.text.length;\n const prefix = this.historySearchPrefix;\n this.clearHistorySearch();\n buffer.setText(prefix);\n this.refreshLine(previousContentLength);\n }\n return;\n }\n\n if (this.historyIndex < this.host.commandHistory.getLastIndex() - 1) {\n this.historyIndex++;\n this.displayCommandFromHistory();\n } else {\n this.historyIndex = this.host.commandHistory.getLastIndex();\n const previousContentLength =\n this.host.getPromptLength() + buffer.text.length;\n buffer.clear();\n this.refreshLine(previousContentLength);\n }\n }\n\n private clearHistorySearch(): void {\n this.historySearchPrefix = null;\n this.bufferSetByHistory = false;\n this.historyIndex = this.host.commandHistory.getLastIndex();\n }\n\n private displayCommandFromHistory(): void {\n const buffer = this.host.lineBuffer;\n const previousContentLength =\n this.host.getPromptLength() + buffer.text.length;\n const cmd =\n this.host.commandHistory.getCommand(this.historyIndex) || '';\n buffer.setText(cmd);\n this.bufferSetByHistory = true;\n this.refreshLine(previousContentLength);\n }\n\n private refreshLine(previousContentLength?: number): void {\n const promptStr = this.host.lineRenderer.getPromptString(\n this.host.getPromptOptions(),\n );\n this.host.lineRenderer.refreshLine(\n this.host.lineBuffer.text,\n this.host.lineBuffer.cursorPosition,\n this.host.getPromptLength(),\n promptStr,\n previousContentLength,\n );\n this.renderGhostText();\n }\n\n private renderGhostText(): void {\n if (!this.ghostText) return;\n const buffer = this.host.lineBuffer;\n // Only show ghost text when cursor is at end of input\n if (buffer.cursorPosition < buffer.text.length) return;\n const ghost = this.ghostText;\n this.host.terminal.write(\n `\\x1b[2m\\x1b[38;5;240m${ghost}\\x1b[0m\\x1b[${ghost.length}D`,\n );\n }\n\n private getTerminalCursorPosition(): { x: number; y: number } {\n const x: number = (this.host.terminal as any)._core.buffer.x;\n const y: number = (this.host.terminal as any)._core.buffer.y;\n return { x, y };\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 this.host.terminal.select(\n startCol,\n startRow,\n Math.abs(endCol - startCol),\n );\n } else {\n this.host.terminal.selectLines(startRow, endRow);\n }\n }\n }\n}\n","import { Terminal } from '@xterm/xterm';\nimport { IInputMode } from './input-mode';\nimport { ActiveInputRequest } from '../services/cli-input-reader';\n\n/**\n * Host interface for ReaderMode — provides access to the active input request.\n */\nexport interface ReaderModeHost {\n readonly terminal: Terminal;\n getActiveInputRequest(): ActiveInputRequest | null;\n setActiveInputRequest(request: ActiveInputRequest | null): void;\n popMode(): void;\n}\n\n/**\n * Input mode for interactive reader prompts (readLine, readPassword,\n * readConfirm, readSelect). Pushed on top of CommandLineMode when\n * a reader request starts, pops itself when the request completes.\n */\nexport class ReaderMode implements IInputMode {\n constructor(private readonly host: ReaderModeHost) {}\n\n async handleInput(data: string): Promise<void> {\n const request = this.host.getActiveInputRequest();\n if (!request) {\n return;\n }\n\n switch (request.type) {\n case 'line':\n this.handleLineInput(request, data);\n break;\n case 'password':\n this.handlePasswordInput(request, data);\n break;\n case 'confirm':\n this.handleConfirmInput(request, data);\n break;\n case 'select':\n this.handleSelectInput(request, data);\n break;\n case 'select-inline':\n this.handleSelectInlineInput(request, data);\n break;\n case 'multi-select':\n this.handleMultiSelectInput(request, data);\n break;\n case 'number':\n this.handleNumberInput(request, data);\n break;\n }\n }\n\n handleKeyEvent(event: KeyboardEvent): boolean {\n if (event.code === 'KeyC' && event.ctrlKey) {\n const request = this.host.getActiveInputRequest();\n if (request) {\n request.resolve(null);\n this.host.setActiveInputRequest(null);\n this.host.terminal.writeln('');\n this.host.popMode();\n }\n return false;\n }\n\n if (event.code === 'Escape') {\n const request = this.host.getActiveInputRequest();\n if (request) {\n request.resolve(null);\n this.host.setActiveInputRequest(null);\n this.host.terminal.writeln('');\n this.host.popMode();\n }\n return false;\n }\n\n return true;\n }\n\n private handleLineInput(request: ActiveInputRequest, data: string): void {\n if (data === '\\r') {\n this.host.terminal.write('\\r\\n');\n const value = request.buffer;\n this.host.setActiveInputRequest(null);\n this.host.popMode();\n request.resolve(value);\n } else if (data === '\\u007F') {\n if (request.cursorPosition > 0) {\n request.buffer =\n request.buffer.slice(0, request.cursorPosition - 1) +\n request.buffer.slice(request.cursorPosition);\n request.cursorPosition--;\n this.redrawReaderLine(request, request.buffer);\n }\n } else if (data === '\\u001B[D') {\n if (request.cursorPosition > 0) {\n request.cursorPosition--;\n this.host.terminal.write(data);\n }\n } else if (data === '\\u001B[C') {\n if (request.cursorPosition < request.buffer.length) {\n request.cursorPosition++;\n this.host.terminal.write(data);\n }\n } else if (data.startsWith('\\u001B')) {\n // Ignore other escape sequences\n } else {\n const text = data.replace(/[\\r\\n]+/g, '');\n request.buffer =\n request.buffer.slice(0, request.cursorPosition) +\n text +\n request.buffer.slice(request.cursorPosition);\n request.cursorPosition += text.length;\n this.redrawReaderLine(request, request.buffer);\n }\n }\n\n private handlePasswordInput(\n request: ActiveInputRequest,\n data: string,\n ): void {\n if (data === '\\r') {\n this.host.terminal.write('\\r\\n');\n const value = request.buffer;\n this.host.setActiveInputRequest(null);\n this.host.popMode();\n request.resolve(value);\n } else if (data === '\\u007F') {\n if (request.cursorPosition > 0) {\n request.buffer =\n request.buffer.slice(0, request.cursorPosition - 1) +\n request.buffer.slice(request.cursorPosition);\n request.cursorPosition--;\n this.redrawReaderLine(\n request,\n '*'.repeat(request.buffer.length),\n );\n }\n } else if (data.startsWith('\\u001B')) {\n // Ignore all escape sequences for password\n } else {\n const text = data.replace(/[\\r\\n]+/g, '');\n request.buffer =\n request.buffer.slice(0, request.cursorPosition) +\n text +\n request.buffer.slice(request.cursorPosition);\n request.cursorPosition += text.length;\n this.redrawReaderLine(request, '*'.repeat(request.buffer.length));\n }\n }\n\n private handleConfirmInput(\n request: ActiveInputRequest,\n data: string,\n ): void {\n if (data === '\\r') {\n this.host.terminal.write('\\r\\n');\n this.host.setActiveInputRequest(null);\n this.host.popMode();\n const buf = request.buffer.toLowerCase();\n if (buf === 'y') {\n request.resolve(true);\n } else if (buf === 'n') {\n request.resolve(false);\n } else {\n request.resolve(request.defaultValue ?? false);\n }\n } else if (data === '\\u007F') {\n if (request.cursorPosition > 0) {\n request.buffer = request.buffer.slice(0, -1);\n request.cursorPosition--;\n this.redrawReaderLine(request, request.buffer);\n }\n } else if (data.startsWith('\\u001B')) {\n // Ignore escape sequences\n } else {\n const char = data.toLowerCase();\n if (char === 'y' || char === 'n') {\n request.buffer = data;\n request.cursorPosition = 1;\n this.redrawReaderLine(request, request.buffer);\n }\n }\n }\n\n private handleSelectInput(request: ActiveInputRequest, data: string): void {\n const options = request.options!;\n const selectedIndex = request.selectedIndex!;\n\n if (data === '\\r') {\n this.host.terminal.write('\\r\\n');\n this.host.setActiveInputRequest(null);\n this.host.popMode();\n request.resolve(options[selectedIndex].value);\n } else if (data === '\\u001B[A') {\n if (selectedIndex > 0) {\n request.selectedIndex = selectedIndex - 1;\n this.adjustScrollOffset(request);\n this.redrawSelectOptions(request);\n request.onChange?.(options[request.selectedIndex!].value);\n }\n } else if (data === '\\u001B[B') {\n if (selectedIndex < options.length - 1) {\n request.selectedIndex = selectedIndex + 1;\n this.adjustScrollOffset(request);\n this.redrawSelectOptions(request);\n request.onChange?.(options[request.selectedIndex!].value);\n }\n }\n }\n\n private adjustScrollOffset(request: ActiveInputRequest): void {\n const options = request.options!;\n const maxVisible = request.maxVisible ?? options.length;\n const needsScroll = options.length > maxVisible;\n const itemSlots = needsScroll ? maxVisible - 2 : options.length;\n const visibleCount = Math.max(1, Math.min(itemSlots, options.length));\n const scrollOffset = request.scrollOffset ?? 0;\n const selectedIndex = request.selectedIndex!;\n\n if (selectedIndex < scrollOffset) {\n request.scrollOffset = selectedIndex;\n } else if (selectedIndex >= scrollOffset + visibleCount) {\n request.scrollOffset = selectedIndex - visibleCount + 1;\n }\n }\n\n private redrawReaderLine(\n request: ActiveInputRequest,\n displayText: string,\n ): void {\n this.host.terminal.write('\\x1b[2K\\r');\n this.host.terminal.write(request.promptText + displayText);\n\n const cursorOffset = request.buffer.length - request.cursorPosition;\n if (cursorOffset > 0) {\n this.host.terminal.write(`\\x1b[${cursorOffset}D`);\n }\n }\n\n private redrawSelectOptions(request: ActiveInputRequest): void {\n const options = request.options!;\n const selectedIndex = request.selectedIndex!;\n const maxVisible = request.maxVisible ?? options.length;\n const scrollOffset = request.scrollOffset ?? 0;\n const displayLines = request.displayLines ?? options.length;\n const needsScroll = options.length > maxVisible;\n const itemSlots = needsScroll ? maxVisible - 2 : options.length;\n const visibleCount = Math.max(1, Math.min(itemSlots, options.length));\n const end = Math.min(scrollOffset + visibleCount, options.length);\n\n // Move cursor up to the start of the rendered block\n if (displayLines > 0) {\n this.host.terminal.write(`\\x1b[${displayLines}A`);\n }\n\n if (needsScroll) {\n this.host.terminal.write('\\x1b[2K\\r');\n const upLabel = scrollOffset > 0 ? '↑ more' : '';\n this.host.terminal.write(` \\x1b[2m${upLabel}\\x1b[0m\\r\\n`);\n }\n\n for (let i = scrollOffset; i < end; i++) {\n this.host.terminal.write('\\x1b[2K\\r');\n const prefix = i === selectedIndex ? ' \\x1b[36m> ' : ' ';\n const suffix = i === selectedIndex ? '\\x1b[0m' : '';\n this.host.terminal.write(\n `${prefix}${options[i].label}${suffix}\\r\\n`,\n );\n }\n\n if (needsScroll) {\n this.host.terminal.write('\\x1b[2K\\r');\n const downLabel = end < options.length ? '↓ more' : '';\n this.host.terminal.write(` \\x1b[2m${downLabel}\\x1b[0m\\r\\n`);\n }\n }\n\n private handleSelectInlineInput(\n request: ActiveInputRequest,\n data: string,\n ): void {\n const options = request.options!;\n const selectedIndex = request.selectedIndex!;\n\n if (data === '\\r') {\n this.host.terminal.write('\\r\\n');\n this.host.setActiveInputRequest(null);\n this.host.popMode();\n request.resolve(options[selectedIndex].value);\n } else if (data === '\\u001B[D') {\n // Left arrow\n if (selectedIndex > 0) {\n request.selectedIndex = selectedIndex - 1;\n this.redrawInlineSelectOptions(request);\n request.onChange?.(options[request.selectedIndex!].value);\n }\n } else if (data === '\\u001B[C') {\n // Right arrow\n if (selectedIndex < options.length - 1) {\n request.selectedIndex = selectedIndex + 1;\n this.redrawInlineSelectOptions(request);\n request.onChange?.(options[request.selectedIndex!].value);\n }\n }\n // Ignore Up/Down arrows and other input\n }\n\n private redrawInlineSelectOptions(request: ActiveInputRequest): void {\n const options = request.options!;\n const selectedIndex = request.selectedIndex!;\n\n this.host.terminal.write('\\x1b[2K\\r');\n const inlineText = options\n .map((opt, i) => {\n if (i === selectedIndex) {\n return `\\x1b[36m[ ${opt.label} ]\\x1b[0m`;\n }\n return ` ${opt.label} `;\n })\n .join('');\n this.host.terminal.write(`${request.promptText} ${inlineText}`);\n }\n\n private handleMultiSelectInput(\n request: ActiveInputRequest,\n data: string,\n ): void {\n const options = request.options!;\n const selectedIndex = request.selectedIndex!;\n const checkedIndices = request.checkedIndices!;\n\n if (data === '\\r') {\n this.host.terminal.write('\\r\\n');\n this.host.setActiveInputRequest(null);\n this.host.popMode();\n const selected = options\n .filter((_, i) => checkedIndices.has(i))\n .map((opt) => opt.value);\n request.resolve(selected);\n } else if (data === ' ') {\n // Toggle checkbox\n if (checkedIndices.has(selectedIndex)) {\n checkedIndices.delete(selectedIndex);\n } else {\n checkedIndices.add(selectedIndex);\n }\n this.redrawMultiSelectOptions(request);\n } else if (data === '\\u001B[A') {\n // Up arrow\n if (selectedIndex > 0) {\n request.selectedIndex = selectedIndex - 1;\n this.adjustScrollOffset(request);\n this.redrawMultiSelectOptions(request);\n }\n } else if (data === '\\u001B[B') {\n // Down arrow\n if (selectedIndex < options.length - 1) {\n request.selectedIndex = selectedIndex + 1;\n this.adjustScrollOffset(request);\n this.redrawMultiSelectOptions(request);\n }\n }\n // Ignore Left/Right arrows and other input\n }\n\n private redrawMultiSelectOptions(request: ActiveInputRequest): void {\n const options = request.options!;\n const selectedIndex = request.selectedIndex!;\n const checkedIndices = request.checkedIndices!;\n const maxVisible = request.maxVisible ?? options.length;\n const scrollOffset = request.scrollOffset ?? 0;\n const displayLines = request.displayLines ?? options.length;\n const needsScroll = options.length > maxVisible;\n const itemSlots = needsScroll ? maxVisible - 2 : options.length;\n const visibleCount = Math.max(1, Math.min(itemSlots, options.length));\n const end = Math.min(scrollOffset + visibleCount, options.length);\n\n if (displayLines > 0) {\n this.host.terminal.write(`\\x1b[${displayLines}A`);\n }\n\n if (needsScroll) {\n this.host.terminal.write('\\x1b[2K\\r');\n const upLabel = scrollOffset > 0 ? '↑ more' : '';\n this.host.terminal.write(` \\x1b[2m${upLabel}\\x1b[0m\\r\\n`);\n }\n\n for (let i = scrollOffset; i < end; i++) {\n this.host.terminal.write('\\x1b[2K\\r');\n const checkbox = checkedIndices.has(i) ? '[x]' : '[ ]';\n const prefix =\n i === selectedIndex\n ? ` \\x1b[36m> ${checkbox} `\n : ` ${checkbox} `;\n const suffix = i === selectedIndex ? '\\x1b[0m' : '';\n this.host.terminal.write(\n `${prefix}${options[i].label}${suffix}\\r\\n`,\n );\n }\n\n if (needsScroll) {\n this.host.terminal.write('\\x1b[2K\\r');\n const downLabel = end < options.length ? '↓ more' : '';\n this.host.terminal.write(` \\x1b[2m${downLabel}\\x1b[0m\\r\\n`);\n }\n }\n\n private handleNumberInput(request: ActiveInputRequest, data: string): void {\n if (data === '\\r') {\n const numOptions = request.numberOptions;\n if (request.buffer === '') {\n // Use default if available\n if (numOptions?.default !== undefined) {\n this.host.terminal.write('\\r\\n');\n this.host.setActiveInputRequest(null);\n this.host.popMode();\n request.resolve(numOptions.default);\n } else {\n // No input and no default — stay active, show error\n this.host.terminal.write('\\r\\n');\n this.host.terminal.write(\n '\\x1b[31mPlease enter a number.\\x1b[0m\\r\\n',\n );\n this.host.terminal.write(request.promptText);\n }\n return;\n }\n\n const value = Number(request.buffer);\n if (isNaN(value)) {\n this.host.terminal.write('\\r\\n');\n this.host.terminal.write('\\x1b[31mInvalid number.\\x1b[0m\\r\\n');\n request.buffer = '';\n request.cursorPosition = 0;\n this.host.terminal.write(request.promptText);\n return;\n }\n\n if (numOptions?.min !== undefined && value < numOptions.min) {\n this.host.terminal.write('\\r\\n');\n this.host.terminal.write(\n `\\x1b[31mValue must be at least ${numOptions.min}.\\x1b[0m\\r\\n`,\n );\n request.buffer = '';\n request.cursorPosition = 0;\n this.host.terminal.write(request.promptText);\n return;\n }\n\n if (numOptions?.max !== undefined && value > numOptions.max) {\n this.host.terminal.write('\\r\\n');\n this.host.terminal.write(\n `\\x1b[31mValue must be at most ${numOptions.max}.\\x1b[0m\\r\\n`,\n );\n request.buffer = '';\n request.cursorPosition = 0;\n this.host.terminal.write(request.promptText);\n return;\n }\n\n this.host.terminal.write('\\r\\n');\n this.host.setActiveInputRequest(null);\n this.host.popMode();\n request.resolve(value);\n } else if (data === '\\u007F') {\n // Backspace\n if (request.cursorPosition > 0) {\n request.buffer =\n request.buffer.slice(0, request.cursorPosition - 1) +\n request.buffer.slice(request.cursorPosition);\n request.cursorPosition--;\n this.redrawReaderLine(request, request.buffer);\n }\n } else if (data === '-') {\n // Only allow minus at the start\n if (request.cursorPosition === 0 && !request.buffer.includes('-')) {\n request.buffer = '-' + request.buffer;\n request.cursorPosition = 1;\n this.redrawReaderLine(request, request.buffer);\n }\n } else if (/^\\d$/.test(data)) {\n request.buffer =\n request.buffer.slice(0, request.cursorPosition) +\n data +\n request.buffer.slice(request.cursorPosition);\n request.cursorPosition += 1;\n this.redrawReaderLine(request, request.buffer);\n }\n // Ignore all other input (letters, escape sequences, etc.)\n }\n}\n","import { IInputMode } from './input-mode';\nimport { ICliCommandProcessor, ICliExecutionContext } from '@qodalis/cli-core';\n\n/**\n * Input mode for raw command processors (full-screen games, --context, etc.).\n * Bypasses most default key handling — routes everything to the processor's onData.\n *\n * When `fullScreen` is false (i.e. --context mode), Ctrl+C exits the context\n * and returns to the command line. When `fullScreen` is true, Ctrl+C is passed\n * through to the processor (full-screen apps manage their own exit).\n */\nexport class RawMode implements IInputMode {\n constructor(\n private readonly processor: ICliCommandProcessor,\n private readonly context: ICliExecutionContext,\n private readonly fullScreen = false,\n ) {}\n\n async handleInput(data: string): Promise<void> {\n if (this.processor.onData) {\n await this.processor.onData(data, this.context);\n }\n }\n\n handleKeyEvent(event: KeyboardEvent): boolean {\n // In --context mode (not full-screen), Ctrl+C exits the context\n if (\n !this.fullScreen &&\n event.code === 'KeyC' &&\n event.ctrlKey\n ) {\n this.context.setContextProcessor(undefined);\n this.context.writer.writeln('');\n this.context.showPrompt();\n return false;\n }\n\n // Prevent browser defaults for Ctrl key combos (Ctrl+S, Ctrl+Q, etc.)\n if (event.ctrlKey) {\n event.preventDefault();\n }\n // Let all keys pass through to onData\n return true;\n }\n}\n","import { Terminal } from '@xterm/xterm';\nimport {\n clearTerminalLine,\n CliForegroundColor,\n colorFirstWord,\n ICliTerminalWriter,\n} from '@qodalis/cli-core';\n\nexport interface PromptOptions {\n userName?: string;\n hideUserName?: boolean;\n contextProcessor?: string;\n pathProvider?: () => string | null;\n}\n\n/**\n * Handles prompt rendering and line display for the CLI.\n * Encapsulates all terminal escape sequences for line editing.\n */\nexport class CliTerminalLineRenderer {\n constructor(\n private readonly terminal: Terminal,\n private readonly writer: ICliTerminalWriter,\n ) {}\n\n /**\n * Builds the prompt string (user:path$ ) with ANSI color codes.\n */\n getPromptString(options: PromptOptions): string {\n let promptStart = options.hideUserName\n ? ''\n : `\\x1b[32m${options.userName ?? ''}\\x1b[0m:`;\n\n if (options.contextProcessor) {\n promptStart = `${options.contextProcessor}`;\n }\n\n const path = options.pathProvider?.() ?? null;\n const pathSegment =\n path !== null ? `\\x1b[34m${path}\\x1b[0m` : '\\x1b[34m~\\x1b[0m';\n return `${promptStart}${pathSegment}$ `;\n }\n\n /**\n * Writes the prompt to the terminal and returns the visible prompt length\n * (number of columns the prompt occupies).\n */\n renderPrompt(options: PromptOptions): number {\n const promptString = this.getPromptString(options);\n this.terminal.write(promptString);\n // Calculate visible length by stripping ANSI escape codes.\n // terminal.write() is async so cursorX is unreliable here.\n // eslint-disable-next-line no-control-regex\n return promptString.replace(/\\x1b\\[[0-9;]*[A-Za-z]/g, '').length;\n }\n\n /**\n * Clears and redraws the current line (prompt + user input + cursor positioning).\n */\n refreshLine(\n currentLine: string,\n cursorPosition: number,\n promptLength: number,\n promptString: string,\n previousContentLength?: number,\n ): void {\n const contentLength = promptLength + currentLine.length;\n const cols = this.terminal.cols;\n const clearLength =\n previousContentLength !== undefined\n ? Math.max(contentLength, previousContentLength)\n : contentLength;\n const lines = Math.max(1, Math.ceil(clearLength / cols));\n\n let output = '';\n\n // 1. Move cursor up to the first line of content, then clear\n // everything from there to end of screen. Using \\x1b[J instead\n // of clearing individual lines avoids stale artifacts left by\n // xterm reflow (e.g. after browser zoom changes).\n for (let i = 1; i < lines; i++) {\n output += '\\x1b[A';\n }\n output += '\\r\\x1b[J';\n\n // 2. Prompt\n output += promptString;\n\n // 3. Current line with syntax coloring\n output += colorFirstWord(\n currentLine,\n (word) =>\n this.writer.wrapInColor(word, CliForegroundColor.Yellow) ??\n currentLine,\n );\n\n // 4. Cursor positioning\n const cursorOffset = currentLine.length - cursorPosition;\n if (cursorOffset > 0) {\n output += `\\x1b[${cursorOffset}D`;\n }\n\n this.terminal.write(output);\n }\n\n /**\n * Clears the current terminal line.\n */\n clearLine(contentLength: number): void {\n clearTerminalLine(this.terminal, contentLength);\n }\n}\n","import { Terminal } from '@xterm/xterm';\nimport { Subject } from 'rxjs';\nimport {\n ICliExecutionContext,\n ICliManagedInterval,\n ICliManagedTimer,\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 ICliCommandExecutorService,\n ICliInputReader,\n ICliBackgroundServiceRegistry,\n ICliTranslationService,\n} from '@qodalis/cli-core';\nimport { CliBackgroundServiceRegistry } from '../services/background';\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 { CliTerminalTextAnimator } from '../services/progress-bars/cli-terminal-text-animator';\nimport { CliClipboard } from '../services/cli-clipboard';\nimport { CliCommandHistory } from '../services/cli-command-history';\nimport { CliExecutionProcess } from './cli-execution-process';\nimport { CliStateStoreManager } from '../state/cli-state-store-manager';\nimport {\n CliInputReader,\n ActiveInputRequest,\n CliInputReaderHost,\n} from '../services/cli-input-reader';\nimport { CliCompletionEngine } from '../completion/cli-completion-engine';\nimport {\n CliLineBuffer,\n IInputMode,\n CommandLineMode,\n CommandLineModeHost,\n ReaderMode,\n ReaderModeHost,\n RawMode,\n CliTerminalLineRenderer,\n PromptOptions,\n} from '../input';\n\nexport interface CliExecutionContextDeps {\n services: ICliServiceProvider;\n logger: ICliLogger;\n commandHistory: CliCommandHistory;\n stateStoreManager: CliStateStoreManager;\n translator: ICliTranslationService;\n}\n\nexport class CliExecutionContext\n implements\n ICliExecutionContext,\n CliInputReaderHost,\n CommandLineModeHost,\n ReaderModeHost\n{\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 public readonly translator: ICliTranslationService;\n\n public readonly backgroundServices: ICliBackgroundServiceRegistry;\n\n public promptPathProvider?: () => string | null;\n\n public readonly completionEngine = new CliCompletionEngine();\n\n public promptLength: number = 0;\n\n public readonly reader: ICliInputReader;\n\n public readonly lineBuffer = new CliLineBuffer();\n\n public readonly lineRenderer: CliTerminalLineRenderer;\n\n public readonly commandHistory: CliCommandHistory;\n\n private _activeInputRequest: ActiveInputRequest | null = null;\n\n private readonly modeStack: IInputMode[] = [];\n\n private readonly managedTimers = new Set<{ clear(): void }>();\n\n private resizeDisposable: { dispose(): void } | null = null;\n\n constructor(\n deps: CliExecutionContextDeps,\n public terminal: Terminal,\n public executor: ICliCommandExecutorService,\n cliOptions?: CliOptions,\n ) {\n //initialize services\n this.services = deps.services;\n this.translator = deps.translator;\n\n //initialize state store\n const stateStoreManager = deps.stateStoreManager;\n this.state = stateStoreManager.getStateStore('shared');\n\n this.options = cliOptions;\n this.writer = new CliTerminalWriter(terminal);\n\n const spinner = new CliTerminalSpinner(terminal);\n const progressBar = new CliTerminalProgressBar(terminal);\n const textAnimator = new CliTerminalTextAnimator(terminal);\n\n spinner.context = this;\n progressBar.context = this;\n textAnimator.context = this;\n\n this.spinner = spinner;\n this.progressBar = progressBar;\n this.textAnimator = textAnimator;\n\n this.clipboard = new CliClipboard(this);\n this.process = new CliExecutionProcess(this);\n\n this.reader = new CliInputReader(this);\n\n //initialize logger\n this.logger = deps.logger;\n this.logger.setCliLogLevel(cliOptions?.logLevel || CliLogLevel.ERROR);\n\n this.commandHistory = deps.commandHistory;\n this.lineRenderer = new CliTerminalLineRenderer(terminal, this.writer);\n\n this.backgroundServices = new CliBackgroundServiceRegistry(\n this.state,\n deps.services,\n this.writer,\n );\n }\n\n // -- Public API (ICliExecutionContext) --\n\n public get activeInputRequest(): ActiveInputRequest | null {\n return this._activeInputRequest;\n }\n\n /**\n * Sets the active input request. When a non-null request is provided,\n * pushes ReaderMode onto the mode stack. ReaderMode pops itself on\n * completion, so passing null here does NOT pop the mode.\n */\n public setActiveInputRequest(request: ActiveInputRequest | null): void {\n this._activeInputRequest = request;\n if (request !== null) {\n this.pushMode(new ReaderMode(this));\n }\n }\n\n public writeToTerminal(text: string): void {\n this.terminal.write(text);\n }\n\n public getTerminalRows(): number {\n return this.terminal.rows;\n }\n\n public get currentLine(): string {\n return this.lineBuffer.text;\n }\n\n public get cursorPosition(): number {\n return this.lineBuffer.cursorPosition;\n }\n\n public set cursorPosition(value: number) {\n this.lineBuffer.cursorPosition = value;\n }\n\n initializeTerminalListeners(): void {\n // Push CommandLineMode as the base mode\n const commandLineMode = new CommandLineMode(this);\n this.pushMode(commandLineMode);\n\n this.terminal.onData(async (data) => {\n if (this.isProgressRunning()) {\n return;\n }\n const mode = this.currentMode;\n if (mode) {\n await mode.handleInput(data);\n }\n });\n\n this.terminal.onKey(async (_event) => {});\n\n this.terminal.attachCustomKeyEventHandler((event) => {\n if (event.type === 'keydown') {\n const mode = this.currentMode;\n if (mode) {\n return mode.handleKeyEvent(event);\n }\n }\n return true;\n });\n\n // Window-level capture listener to intercept browser shortcuts that\n // conflict with terminal keybindings when the terminal has focus.\n // Note: Ctrl+W cannot be intercepted (browser closes tab before JS runs).\n const termEl = this.terminal.element;\n if (termEl) {\n window.addEventListener('keydown', (event) => {\n if (!termEl.contains(document.activeElement)) return;\n if (event.ctrlKey && !event.altKey && !event.metaKey) {\n const key = event.key.toLowerCase();\n if (['f', 's', 'q', 'o', 'k', 'u', 'g', 'r', 'n', 'h'].includes(key)) {\n event.preventDefault();\n }\n }\n }, true);\n }\n }\n\n setContextProcessor = (\n processor: ICliCommandProcessor | undefined,\n silent?: boolean,\n fullScreen?: boolean,\n ): void => {\n if (!processor) {\n // Clearing the context processor — pop RawMode if one was active\n if (this.contextProcessor?.onData) {\n this.popMode();\n }\n this.contextProcessor = undefined;\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 // If processor has onData, push a RawMode to intercept all input\n if (processor.onData) {\n this.pushMode(new RawMode(processor, this, fullScreen));\n }\n };\n\n setCurrentLine(line: string): void {\n this.lineBuffer.setText(line);\n }\n\n clearLine(): void {\n this.lineRenderer.clearLine(\n this.promptLength + this.lineBuffer.text.length,\n );\n }\n\n showPrompt(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.lineBuffer.clear();\n }\n\n this.promptLength = this.lineRenderer.renderPrompt(\n this.getPromptOptions(),\n );\n }\n\n clearCurrentLine(): void {\n this.clearLine();\n this.showPrompt();\n }\n\n refreshCurrentLine(previousContentLength?: number): void {\n const promptStr = this.lineRenderer.getPromptString(\n this.getPromptOptions(),\n );\n this.lineRenderer.refreshLine(\n this.lineBuffer.text,\n this.lineBuffer.cursorPosition,\n this.promptLength,\n promptStr,\n previousContentLength,\n );\n }\n\n /**\n * Redraw the prompt after a terminal resize.\n * Called by CliEngine.safeFit() when terminal columns change.\n * No-op when progress indicators, raw mode, or input requests are active.\n *\n * Uses the buffer's `isWrapped` flags to walk backwards from the cursor\n * and find the first visual line of the current logical line. This tells\n * us exactly how many rows the prompt (+ user input) spans after xterm\n * reflow, so we can clear them all — including reflow artefacts that the\n * simple `ceil(contentLength / cols)` calculation would miss.\n */\n handleTerminalResize(): void {\n // When in raw/fullscreen mode, forward to the processor's onResize\n if (this.isRawModeActive() && this.contextProcessor?.onResize) {\n this.contextProcessor.onResize(\n this.terminal.cols,\n this.terminal.rows,\n this,\n );\n return;\n }\n\n if (\n this.isProgressRunning() ||\n this.isRawModeActive() ||\n this._activeInputRequest\n ) {\n return;\n }\n\n const buf = this.terminal.buffer.active;\n let startRow = buf.cursorY;\n while (startRow > 0) {\n const line = buf.getLine(buf.baseY + startRow);\n if (!line?.isWrapped) break;\n startRow--;\n }\n\n const linesToClear = buf.cursorY - startRow + 1;\n this.refreshCurrentLine(linesToClear * this.terminal.cols);\n }\n\n public isRawModeActive(): boolean {\n return !!this.contextProcessor?.onData;\n }\n\n public enterFullScreenMode(processor: ICliCommandProcessor): void {\n this.terminal.write('\\x1b[?1049h'); // alternate screen buffer\n this.terminal.write('\\x1b[?25l'); // hide cursor\n (this.backgroundServices as CliBackgroundServiceRegistry).setFullScreen(true);\n this.setContextProcessor(processor, true, true);\n\n // Subscribe to terminal resize events and forward to the processor\n if (processor.onResize) {\n this.resizeDisposable = this.terminal.onResize(\n ({ cols, rows }) => {\n processor.onResize!(cols, rows, this);\n },\n );\n }\n }\n\n public exitFullScreenMode(): void {\n const processor = this.contextProcessor;\n\n (this.backgroundServices as CliBackgroundServiceRegistry).setFullScreen(false);\n\n // Clean up managed timers\n this.clearAllManagedTimers();\n\n // Dispose resize subscription\n this.resizeDisposable?.dispose();\n this.resizeDisposable = null;\n\n // Notify processor of disposal\n if (processor?.onDispose) {\n processor.onDispose(this);\n }\n\n this.terminal.write('\\x1b[?25h'); // show cursor\n this.terminal.write('\\x1b[?1049l'); // leave alternate screen buffer\n this.setContextProcessor(undefined);\n this.showPrompt();\n }\n\n public createInterval(\n callback: () => void,\n ms: number,\n ): ICliManagedInterval {\n let timerId = setInterval(callback, ms);\n\n const handle: ICliManagedInterval = {\n clear: () => {\n clearInterval(timerId);\n this.managedTimers.delete(handle);\n },\n setDelay: (newMs: number) => {\n clearInterval(timerId);\n timerId = setInterval(callback, newMs);\n },\n };\n\n this.managedTimers.add(handle);\n return handle;\n }\n\n public createTimeout(\n callback: () => void,\n ms: number,\n ): ICliManagedTimer {\n const timerId = setTimeout(() => {\n this.managedTimers.delete(handle);\n callback();\n }, ms);\n\n const handle: ICliManagedTimer = {\n clear: () => {\n clearTimeout(timerId);\n this.managedTimers.delete(handle);\n },\n };\n\n this.managedTimers.add(handle);\n return handle;\n }\n\n public isProgressRunning(): boolean {\n return (\n this.progressBar.isRunning ||\n this.spinner.isRunning ||\n this.textAnimator.isRunning\n );\n }\n\n public abort(): void {\n if (this.progressBar.isRunning) {\n this.progressBar.complete();\n }\n\n if (this.spinner?.isRunning) {\n this.spinner.hide();\n }\n\n if (this.textAnimator?.isRunning) {\n this.textAnimator.hide();\n }\n\n this.onAbort.next();\n }\n\n public setSession(session: ICliUserSession): void {\n this.userSession = session;\n }\n\n // -- CommandLineModeHost interface --\n\n getPromptOptions(): PromptOptions {\n let hideUserName = false;\n try {\n const config = this.services.get<any>('cli-users-module-config');\n hideUserName = config?.hideUserName ?? false;\n } catch {\n // Users module not loaded — default to showing username\n }\n\n return {\n userName: this.userSession?.displayName,\n hideUserName,\n contextProcessor: this.contextProcessor?.command,\n pathProvider: this.promptPathProvider,\n };\n }\n\n getPromptLength(): number {\n return this.promptLength;\n }\n\n setPromptLength(value: number): void {\n this.promptLength = value;\n }\n\n getExecutionContext(): ICliExecutionContext {\n return this;\n }\n\n // -- ReaderModeHost interface --\n\n getActiveInputRequest(): ActiveInputRequest | null {\n return this._activeInputRequest;\n }\n\n // -- Managed timer cleanup --\n\n private clearAllManagedTimers(): void {\n for (const timer of this.managedTimers) {\n timer.clear();\n }\n this.managedTimers.clear();\n }\n\n /**\n * Dispose all resources. Called by CliEngine.destroy() when the\n * CLI component is being torn down.\n */\n public dispose(): void {\n // Notify the active fullscreen processor\n if (this.contextProcessor?.onDispose) {\n this.contextProcessor.onDispose(this);\n }\n\n (this.backgroundServices as CliBackgroundServiceRegistry).destroyAll().catch(() => {});\n\n this.clearAllManagedTimers();\n this.resizeDisposable?.dispose();\n this.resizeDisposable = null;\n }\n\n // -- Mode stack management --\n\n private get currentMode(): IInputMode | undefined {\n return this.modeStack.length > 0\n ? this.modeStack[this.modeStack.length - 1]\n : undefined;\n }\n\n pushMode(mode: IInputMode): void {\n const previous = this.currentMode;\n if (previous?.deactivate) {\n previous.deactivate();\n }\n this.modeStack.push(mode);\n if (mode.activate) {\n mode.activate();\n }\n }\n\n popMode(): void {\n const removed = this.modeStack.pop();\n if (removed?.deactivate) {\n removed.deactivate();\n }\n const current = this.currentMode;\n if (current?.activate) {\n current.activate();\n }\n }\n}\n","import {\n CliBackgroundColor,\n CliForegroundColor,\n ICliTerminalWriter,\n} from '@qodalis/cli-core';\n\n/**\n * Regex that matches ANSI SGR escape sequences (colors, bold, reset, etc.)\n */\nconst ANSI_RE = /\\x1b\\[[0-9;]*m/g;\n\n/**\n * Strip ANSI escape codes from a string so downstream commands receive clean text.\n */\nfunction stripAnsi(text: string): string {\n return text.replace(ANSI_RE, '');\n}\n\n/**\n * A terminal writer wrapper that captures \"stdout-equivalent\" output\n * (`write`, `writeln`, `writeJson`, `writeObjectsAsTable`, `writeTable`)\n * while passing everything through to the underlying writer unchanged.\n *\n * Diagnostic methods (`writeError`, `writeWarning`, `writeInfo`, `writeSuccess`)\n * are NOT captured — they are the equivalent of stderr.\n *\n * After a command finishes, the executor can retrieve the captured data to use\n * as implicit pipeline output when the command did not call `process.output()`.\n */\nexport class CapturingTerminalWriter implements ICliTerminalWriter {\n /** Raw text lines captured from write/writeln calls. */\n private _lines: string[] = [];\n\n /** Structured data captured from writeJson calls. */\n private _jsonValues: any[] = [];\n\n /** Structured data captured from writeObjectsAsTable calls. */\n private _tableObjects: any[][] = [];\n\n /** Raw text lines captured from writeError/writeWarning calls. */\n private _stderrLines: string[] = [];\n\n constructor(private readonly inner: ICliTerminalWriter) {}\n\n // -- stdout-equivalent methods (captured) --------------------------------\n\n write(text: string): void {\n this._lines.push(stripAnsi(text));\n this.inner.write(text);\n }\n\n writeln(text?: string): void {\n if (text !== undefined && text !== '') {\n this._lines.push(stripAnsi(text));\n }\n this.inner.writeln(text);\n }\n\n writeJson(json: any): void {\n this._jsonValues.push(json);\n this.inner.writeJson(json);\n }\n\n writeObjectsAsTable(objects: any[]): void {\n this._tableObjects.push(objects);\n this.inner.writeObjectsAsTable(objects);\n }\n\n writeTable(headers: string[], rows: string[][]): void {\n // Table text is hard to reconstruct as structured data.\n // We still delegate but don't capture — commands that write tables\n // and want pipeline output should call process.output() explicitly.\n this.inner.writeTable(headers, rows);\n }\n\n // -- stderr-equivalent methods (NOT captured) ----------------------------\n\n writeSuccess(message: string): void {\n this.inner.writeSuccess(message);\n }\n\n writeInfo(message: string): void {\n this.inner.writeInfo(message);\n }\n\n writeWarning(message: string): void {\n this._stderrLines.push(stripAnsi(message));\n this.inner.writeWarning(message);\n }\n\n writeError(message: string): void {\n this._stderrLines.push(stripAnsi(message));\n this.inner.writeError(message);\n }\n\n // -- pass-through methods ------------------------------------------------\n\n wrapInColor(text: string, color: CliForegroundColor): string {\n return this.inner.wrapInColor(text, color);\n }\n\n wrapInBackgroundColor(text: string, color: CliBackgroundColor): string {\n return this.inner.wrapInBackgroundColor(text, color);\n }\n\n writeToFile(fileName: string, content: string): void {\n this.inner.writeToFile(fileName, content);\n }\n\n writeDivider(options?: {\n color?: CliForegroundColor;\n length?: number;\n char?: string;\n }): void {\n this.inner.writeDivider(options);\n }\n\n writeList(\n items: string[],\n options?: {\n ordered?: boolean;\n prefix?: string;\n color?: CliForegroundColor;\n },\n ): void {\n this.inner.writeList(items, options);\n }\n\n writeKeyValue(\n entries: Record<string, string> | [string, string][],\n options?: { separator?: string; keyColor?: CliForegroundColor },\n ): void {\n this.inner.writeKeyValue(entries, options);\n }\n\n writeColumns(\n items: string[],\n options?: { columns?: number; padding?: number },\n ): void {\n this.inner.writeColumns(items, options);\n }\n\n // -- captured data accessors ---------------------------------------------\n\n /**\n * Returns true if any stdout-equivalent output was captured.\n */\n hasOutput(): boolean {\n return (\n this._lines.length > 0 ||\n this._jsonValues.length > 0 ||\n this._tableObjects.length > 0\n );\n }\n\n /**\n * Returns the captured data in the most useful form:\n *\n * 1. If structured JSON was written (via `writeJson`), return the last\n * JSON value (preserving its original type — object, array, etc.).\n * 2. If objects were written as a table, return the last array of objects.\n * 3. Otherwise return the captured text lines joined with newlines,\n * with ANSI codes stripped and whitespace trimmed.\n * 4. Returns `undefined` if nothing was captured.\n */\n getCapturedData(): any | undefined {\n // Prefer structured data over raw text\n if (this._jsonValues.length > 0) {\n return this._jsonValues.length === 1\n ? this._jsonValues[0]\n : this._jsonValues;\n }\n\n if (this._tableObjects.length > 0) {\n return this._tableObjects.length === 1\n ? this._tableObjects[0]\n : this._tableObjects.flat();\n }\n\n if (this._lines.length > 0) {\n const text = this._lines.join('\\n').replace(/\\r\\n/g, '\\n').trim();\n return text || undefined;\n }\n\n return undefined;\n }\n\n /**\n * Returns true if any stderr-equivalent output was captured.\n */\n hasStderr(): boolean {\n return this._stderrLines.length > 0;\n }\n\n /**\n * Returns captured stderr text joined with newlines, or undefined if empty.\n */\n getCapturedStderr(): string | undefined {\n if (this._stderrLines.length === 0) return undefined;\n return this._stderrLines.join('\\n').trim() || undefined;\n }\n}\n","import {\n ICliGlobalParameterHandler,\n ICliCommandProcessor,\n ICliExecutionContext,\n CliProcessCommand,\n CliForegroundColor,\n} from '@qodalis/cli-core';\n\n/**\n * --version / -v : prints the processor's version and halts execution.\n */\nexport const versionGlobalParameter: ICliGlobalParameterHandler = {\n parameter: {\n name: 'version',\n aliases: ['v'],\n type: 'boolean',\n description: 'Displays the version of the command',\n required: false,\n },\n priority: 0,\n handle(\n args: Record<string, any>,\n processor: ICliCommandProcessor,\n _command: CliProcessCommand,\n context: ICliExecutionContext,\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 return false;\n },\n};\n\n/**\n * --help / -h : shows help for the current command and halts execution.\n */\nexport const helpGlobalParameter: ICliGlobalParameterHandler = {\n parameter: {\n name: 'help',\n aliases: ['h'],\n type: 'boolean',\n description: 'Displays help for the command',\n required: false,\n },\n priority: 10,\n async handle(\n args: Record<string, any>,\n _processor: ICliCommandProcessor,\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<boolean> {\n if (command.command?.startsWith('help')) {\n return false;\n }\n\n if (args['h'] || args['help']) {\n await context.executor.showHelp(command, context);\n return true;\n }\n return false;\n },\n};\n\n/**\n * --context : sets the processor as the active context processor and halts execution.\n */\nexport const contextGlobalParameter: ICliGlobalParameterHandler = {\n parameter: {\n name: 'context',\n aliases: [],\n type: 'boolean',\n description: 'Sets the command as the active context',\n required: false,\n },\n priority: 20,\n handle(\n args: Record<string, any>,\n processor: ICliCommandProcessor,\n _command: CliProcessCommand,\n context: ICliExecutionContext,\n ): boolean {\n if (args['context']) {\n context.setContextProcessor(processor);\n return true;\n }\n return false;\n },\n};\n","import {\n ICliExecutionContext,\n ICliCommandProcessor,\n CliProcessCommand,\n getRightOfWord,\n getParameterValue,\n ICliCommandExecutorService,\n ICliCommandParameterDescriptor,\n ICliGlobalParameterHandler,\n CancellablePromise,\n CliForegroundColor,\n ICliCommandProcessorRegistry,\n ICliProcessRegistry,\n} from '@qodalis/cli-core';\nimport { CliProcessRegistry_TOKEN } from '../services/cli-process-registry';\nimport { CommandParser, CommandPart } from '../parsers';\nimport { reconcileArgs } from '../parsers/reconcile-args';\nimport { CliExecutionProcess } from '../context/cli-execution-process';\nimport { CliArgsParser } from '../parsers/args-parser';\nimport { ProcessExitedError } from '../errors';\nimport { CliCommandExecutionContext } from '../context/cli-command-execution-context';\nimport { CliAliasCommandProcessor } from '../processors';\nimport { CapturingTerminalWriter } from '../services/capturing-terminal-writer';\nimport { ICliEnvironment, ICliEnvironment_TOKEN } from '../services/cli-environment';\nimport {\n versionGlobalParameter,\n helpGlobalParameter,\n contextGlobalParameter,\n} from './global-parameters';\n\n/**\n * Extended execution context interface used internally by the command executor.\n * The concrete implementation (e.g. CliExecutionContext in angular-cli) provides these.\n */\nexport interface ICliExecutionHost extends ICliExecutionContext {\n contextProcessor?: ICliCommandProcessor;\n abort?(): void;\n}\n\nexport class CliCommandExecutor implements ICliCommandExecutorService {\n private commandParser: CommandParser = new CommandParser();\n private globalParameters: ICliGlobalParameterHandler[] = [];\n private lastCapturingWriter?: CapturingTerminalWriter;\n\n constructor(protected readonly registry: ICliCommandProcessorRegistry) {\n this.registerGlobalParameter(versionGlobalParameter);\n this.registerGlobalParameter(helpGlobalParameter);\n this.registerGlobalParameter(contextGlobalParameter);\n }\n\n registerGlobalParameter(handler: ICliGlobalParameterHandler): void {\n this.globalParameters.push(handler);\n this.globalParameters.sort(\n (a, b) => (a.priority ?? 0) - (b.priority ?? 0),\n );\n }\n\n getGlobalParameters(): ICliCommandParameterDescriptor[] {\n return this.globalParameters.map((h) => h.parameter);\n }\n\n public async executeCommand(\n command: string,\n context: ICliExecutionContext,\n ): Promise<void> {\n const parts = CommandParser.splitByOperators(command);\n\n let rootContext: ICliExecutionHost;\n if (context instanceof CliCommandExecutionContext) {\n rootContext = context.context as ICliExecutionHost;\n } else {\n rootContext = context as ICliExecutionHost;\n }\n\n // Track the last *executed* command's success — skipped commands don't change this.\n let lastExitSuccess = true;\n // Whether the next command part should be executed.\n let shouldRunNext = true;\n // Data flowing through the pipeline — explicitly tracked so it survives\n // process.start() resets and failed commands.\n let pipelineData: any = undefined;\n\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n\n if (part.type === '&&') {\n shouldRunNext = lastExitSuccess;\n continue;\n } else if (part.type === '||') {\n shouldRunNext = !lastExitSuccess;\n continue;\n } else if (part.type === '|') {\n // Pipe: always run next command with previous output\n shouldRunNext = true;\n continue;\n } else if (part.type === ';') {\n // Sequential: always run next, reset pipeline data\n shouldRunNext = true;\n pipelineData = undefined;\n continue;\n } else if (part.type === '>>') {\n const nextPart = parts[i + 1];\n i++;\n if (!nextPart || nextPart.type !== 'command') {\n context.writer.writeError('Missing file path after >>');\n lastExitSuccess = false;\n continue;\n }\n if (shouldRunNext) {\n await this.appendOutputToFile(nextPart.value, context);\n // Data was consumed by the redirect — clear it\n pipelineData = undefined;\n }\n continue;\n } else if (part.type === '>') {\n const nextPart = parts[i + 1];\n i++;\n if (!nextPart || nextPart.type !== 'command') {\n context.writer.writeError('Missing file path after >');\n lastExitSuccess = false;\n continue;\n }\n if (shouldRunNext) {\n await this.writeOutputToFile(nextPart.value, context);\n pipelineData = undefined;\n }\n continue;\n } else if (part.type === '2>>') {\n const nextPart = parts[i + 1];\n i++;\n if (!nextPart || nextPart.type !== 'command') {\n context.writer.writeError('Missing file path after 2>>');\n lastExitSuccess = false;\n continue;\n }\n if (shouldRunNext) {\n await this.appendStderrToFile(nextPart.value, context);\n }\n continue;\n } else if (part.type === '2>') {\n const nextPart = parts[i + 1];\n i++;\n if (!nextPart || nextPart.type !== 'command') {\n context.writer.writeError('Missing file path after 2>');\n lastExitSuccess = false;\n continue;\n }\n if (shouldRunNext) {\n await this.writeStderrToFile(nextPart.value, context);\n }\n continue;\n }\n\n // Command part — only execute if shouldRunNext\n if (!shouldRunNext) {\n // Skipped: do NOT update lastExitSuccess or pipelineData\n continue;\n }\n\n try {\n await this.executeSingleCommand(\n part.value,\n pipelineData,\n rootContext,\n );\n\n lastExitSuccess =\n context.process.exitCode === undefined ||\n context.process.exitCode === 0;\n\n // Capture output for the next command in the chain\n pipelineData = context.process.data;\n } catch (e) {\n lastExitSuccess = false;\n // Failed command didn't produce usable output — preserve\n // whatever data was available before the failure so that\n // a >> redirect after || can still access it.\n\n context.writer.writeError(`Command ${part.value} failed: ${e}`);\n }\n\n // Default: next command runs unless an operator says otherwise\n shouldRunNext = true;\n }\n }\n\n private async appendOutputToFile(\n filePath: string,\n context: ICliExecutionContext,\n ): Promise<void> {\n const FS_TOKEN = 'cli-file-system-service';\n\n let fs: any;\n try {\n fs = context.services.get(FS_TOKEN);\n } catch {\n context.writer.writeError(\n '>> redirect requires @qodalis/cli-files plugin',\n );\n return;\n }\n\n const output = context.process.data;\n if (output === undefined || output === null) {\n return;\n }\n\n try {\n const resolved = fs.resolvePath(filePath.trim());\n const content =\n typeof output === 'string' ? output : JSON.stringify(output);\n if (fs.exists(resolved)) {\n fs.writeFile(resolved, content, true); // append\n } else {\n fs.createFile(resolved, content);\n }\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(`>> failed: ${e.message || e}`);\n }\n }\n\n private async writeOutputToFile(\n filePath: string,\n context: ICliExecutionContext,\n ): Promise<void> {\n const FS_TOKEN = 'cli-file-system-service';\n\n let fs: any;\n try {\n fs = context.services.get(FS_TOKEN);\n } catch {\n context.writer.writeError(\n '> redirect requires @qodalis/cli-files plugin',\n );\n return;\n }\n\n const output = context.process.data;\n if (output === undefined || output === null) {\n return;\n }\n\n try {\n const resolved = fs.resolvePath(filePath.trim());\n const content =\n typeof output === 'string' ? output : JSON.stringify(output);\n if (fs.exists(resolved)) {\n fs.writeFile(resolved, content); // overwrite (no append flag)\n } else {\n fs.createFile(resolved, content);\n }\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(`> failed: ${e.message || e}`);\n }\n }\n\n private async executeSingleCommand(\n command: string,\n data: any | undefined,\n context: ICliExecutionHost,\n ): Promise<void> {\n const process = context.process as CliExecutionProcess;\n\n // Substitute environment variables ($VAR / ${VAR}) before parsing\n command = this.expandEnvironmentVars(command, context);\n\n // Handle inline variable assignment: VAR=value (no command after it)\n const assignMatch = command.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);\n if (assignMatch) {\n try {\n const env = context.services.get<ICliEnvironment>(ICliEnvironment_TOKEN);\n let val = assignMatch[2];\n if (\n (val.startsWith('\"') && val.endsWith('\"')) ||\n (val.startsWith(\"'\") && val.endsWith(\"'\"))\n ) {\n val = val.slice(1, -1);\n }\n env.set(assignMatch[1], val);\n process.start();\n process.end();\n return;\n } catch {\n // Environment service not available — treat as command\n }\n }\n\n process.start();\n\n let processEntry: { pid: number; abortController: AbortController } | undefined;\n try {\n const procRegistry = context.services.get<ICliProcessRegistry>(CliProcessRegistry_TOKEN);\n processEntry = procRegistry.register(command);\n } catch {\n // Registry not available — proceed without it\n }\n\n const parsed = this.commandParser.parse(command);\n let { commandName } = parsed;\n let parsedArgs = parsed.args;\n\n const [mainCommand, ...other] = commandName.split(' ');\n\n let 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 // Reconcile space-separated args (e.g. --server dotnet)\n // using the processor's parameter descriptors.\n // Update both parsedArgs AND commandName so that consumed\n // flag values (e.g. \"5\" in \"-n 5\") are excluded from\n // the positional value passed to the processor.\n if (processor?.parameters?.length) {\n const reconciled = reconcileArgs(\n parsed.tokens,\n processor.parameters,\n );\n parsedArgs = reconciled.args;\n commandName = reconciled.commandParts.join(' ');\n }\n\n if (!processor) {\n const aliasProcessor = this.registry.findProcessor('alias', []) as\n | CliAliasCommandProcessor\n | undefined;\n const aliases = aliasProcessor?.userAliases ?? {};\n\n if (aliases[mainCommand]) {\n return await this.executeSingleCommand(\n aliases[mainCommand],\n data,\n context,\n );\n }\n\n // Try executing as a script file (./path or /path)\n if (mainCommand.startsWith('./') || mainCommand.startsWith('/')) {\n const executed = await this.tryExecuteScript(\n mainCommand,\n context,\n );\n if (executed) {\n process.end();\n return;\n }\n }\n\n context.writer.writeError(\n `Command not found: ${context.writer.wrapInColor(commandName, CliForegroundColor.Cyan)}`,\n );\n\n context.writer.writeln();\n\n context.writer.writeInfo(\n `💡 Type ${context.writer.wrapInColor('help', CliForegroundColor.Cyan)} for a list of available commands`,\n );\n context.writer.writeInfo(\n `📦 Use ${context.writer.wrapInColor('pkg add <name>', CliForegroundColor.Cyan)} 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 for (const handler of this.globalParameters) {\n // Skip global handler if the processor declares its own parameter\n // with the same name or overlapping alias (e.g. curl's -v for verbose)\n if (this.processorOwnsParameter(processor, handler.parameter)) {\n continue;\n }\n if (await handler.handle(args, processor, commandToProcess, context)) {\n process.end();\n return;\n }\n }\n\n // Extract positional value BEFORE parameter validation so that\n // we can distinguish positional-mode from named-arg-mode.\n const value =\n processor.acceptsRawInput || processor.valueRequired\n ? getRightOfWord(commandName, processor.command)\n : undefined;\n\n commandToProcess.value = value;\n\n const hasPositionalInput = !!value || !!data;\n const hasNamedArgs = Object.keys(args).length > 0;\n\n // valueRequired is satisfied by: positional value, piped data, or named args\n if (processor.valueRequired && !hasPositionalInput && !hasNamedArgs) {\n context.writer.writeError(\n `Value required: ${context.writer.wrapInColor(`${commandName} <value>`, CliForegroundColor.Cyan)}`,\n );\n\n context.process.exit(-1);\n\n return;\n }\n\n // Required parameter validation only applies in named-arg mode.\n // When positional input is present the processor parses it internally.\n if (!this.validateBeforeExecution(context, processor, args, hasPositionalInput)) {\n process.end();\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 const commandAbortController = new AbortController();\n commandContext.signal = commandAbortController.signal;\n\n const abortSub = context.onAbort.subscribe(() => {\n commandAbortController.abort();\n });\n\n // Wrap the writer to capture stdout-equivalent output.\n // If the command doesn't call process.output() explicitly,\n // the captured text becomes the implicit pipeline data.\n const capturingWriter = new CapturingTerminalWriter(\n commandContext.writer,\n );\n commandContext.writer = capturingWriter;\n this.lastCapturingWriter = capturingWriter;\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 // Auto-capture: if the command didn't call process.output()\n // but did write to the terminal, use that output as pipeline data.\n if (!process.outputCalled && capturingWriter.hasOutput()) {\n process.data = capturingWriter.getCapturedData();\n }\n\n if (processEntry) {\n try {\n const procRegistry = context.services.get<ICliProcessRegistry>(CliProcessRegistry_TOKEN);\n procRegistry.complete(processEntry.pid, context.process.exitCode ?? 0);\n } catch { /* ignore */ }\n }\n\n if (!process.exited) {\n process.end();\n }\n } catch (e) {\n context.spinner?.hide();\n\n if (processEntry) {\n try {\n const procRegistry = context.services.get<ICliProcessRegistry>(CliProcessRegistry_TOKEN);\n procRegistry.fail(processEntry.pid);\n } catch { /* ignore */ }\n }\n\n if (e instanceof ProcessExitedError) {\n cancellable?.cancel();\n\n context.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 } finally {\n abortSub.unsubscribe();\n }\n }\n\n private async writeStderrToFile(\n filePath: string,\n context: ICliExecutionContext,\n ): Promise<void> {\n const stderr = this.lastCapturingWriter?.getCapturedStderr();\n if (!stderr) return;\n\n const FS_TOKEN = 'cli-file-system-service';\n let fs: any;\n try {\n fs = context.services.get(FS_TOKEN);\n } catch {\n context.writer.writeError(\n '2> redirect requires @qodalis/cli-files plugin',\n );\n return;\n }\n\n try {\n const resolved = fs.resolvePath(filePath.trim());\n if (fs.exists(resolved)) {\n fs.writeFile(resolved, stderr);\n } else {\n fs.createFile(resolved, stderr);\n }\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(`2> failed: ${e.message || e}`);\n }\n }\n\n private async appendStderrToFile(\n filePath: string,\n context: ICliExecutionContext,\n ): Promise<void> {\n const stderr = this.lastCapturingWriter?.getCapturedStderr();\n if (!stderr) return;\n\n const FS_TOKEN = 'cli-file-system-service';\n let fs: any;\n try {\n fs = context.services.get(FS_TOKEN);\n } catch {\n context.writer.writeError(\n '2>> redirect requires @qodalis/cli-files plugin',\n );\n return;\n }\n\n try {\n const resolved = fs.resolvePath(filePath.trim());\n if (fs.exists(resolved)) {\n fs.writeFile(resolved, stderr, true); // append\n } else {\n fs.createFile(resolved, stderr);\n }\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(`2>> failed: ${e.message || e}`);\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 /**\n * Attempt to execute a file path as a script.\n * Returns true if the file was found and executed, false otherwise.\n * Requires the @qodalis/cli-files plugin for filesystem access.\n */\n private async tryExecuteScript(\n filePath: string,\n context: ICliExecutionHost,\n ): Promise<boolean> {\n const FS_TOKEN = 'cli-file-system-service';\n\n let fs: any;\n try {\n fs = context.services.get(FS_TOKEN);\n } catch {\n return false;\n }\n\n const resolved = fs.resolvePath(filePath);\n const node = fs.getNode(resolved);\n\n if (!node || node.type !== 'file') {\n return false;\n }\n\n // Check execute permission (owner 'x' bit — position 2 in rwxr-xr-x)\n const perms = node.permissions || 'rw-r--r--';\n const ownerExecute = perms.length >= 3 && perms[2] === 'x';\n\n if (!ownerExecute) {\n context.writer.writeError(\n `${filePath}: Permission denied (missing execute permission)`,\n );\n context.writer.writeInfo(\n `Use ${context.writer.wrapInColor(`chmod u+x ${filePath}`, CliForegroundColor.Cyan)} to make it executable, or run with ${context.writer.wrapInColor(`sh ${filePath}`, CliForegroundColor.Cyan)}`,\n );\n context.process.exit(126, { silent: true });\n return true;\n }\n\n const content = fs.readFile(resolved);\n if (content === null || content === undefined) {\n context.writer.writeError(`${filePath}: Cannot read file`);\n context.process.exit(1, { silent: true });\n return true;\n }\n\n // Execute the script content line by line\n const lines = content.split('\\n');\n const variables: Record<string, string> = {};\n let stopOnError = true;\n\n for (const rawLine of lines) {\n const line = rawLine.trim();\n\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n if (line === 'set -e') {\n stopOnError = true;\n continue;\n }\n if (line === 'set +e') {\n stopOnError = false;\n continue;\n }\n\n // Variable assignment\n const assignMatch = line.match(/^([A-Za-z_][A-Za-z0-9_]*)=(.*)$/);\n if (assignMatch) {\n const varName = assignMatch[1];\n let varValue = assignMatch[2];\n if (\n (varValue.startsWith('\"') && varValue.endsWith('\"')) ||\n (varValue.startsWith(\"'\") && varValue.endsWith(\"'\"))\n ) {\n varValue = varValue.slice(1, -1);\n }\n varValue = this.substituteVars(varValue, variables);\n variables[varName] = varValue;\n continue;\n }\n\n const expanded = this.substituteVars(line, variables);\n await this.executeCommand(expanded, context);\n\n const exitCode = context.process.exitCode;\n if (stopOnError && exitCode !== undefined && exitCode !== 0) {\n context.writer.writeError(\n `${filePath}: script aborted at line: ${line}`,\n );\n return true;\n }\n }\n\n return true;\n }\n\n private substituteVars(\n input: string,\n variables: Record<string, string>,\n ): string {\n let result = input.replace(\n /\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g,\n (_, name) => variables[name] ?? '',\n );\n result = result.replace(\n /\\$([A-Za-z_][A-Za-z0-9_]*)/g,\n (_, name) => variables[name] ?? '',\n );\n return result;\n }\n\n /**\n * Expand $VAR and ${VAR} references using the global environment store.\n * Variables inside single-quoted strings are NOT expanded (like bash).\n */\n private expandEnvironmentVars(\n command: string,\n context: ICliExecutionHost,\n ): string {\n let env: ICliEnvironment;\n try {\n env = context.services.get<ICliEnvironment>(ICliEnvironment_TOKEN);\n } catch {\n return command;\n }\n\n // Don't expand inside single-quoted strings\n // Split by single quotes, expand only outside quotes\n const parts = command.split(\"'\");\n for (let i = 0; i < parts.length; i++) {\n if (i % 2 === 0) {\n // Outside single quotes — expand variables\n parts[i] = parts[i].replace(\n /\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g,\n (_, name) => env.get(name) ?? '',\n );\n parts[i] = parts[i].replace(\n /\\$([A-Za-z_][A-Za-z0-9_]*)/g,\n (_, name) => env.get(name) ?? '',\n );\n }\n }\n\n return parts.join(\"'\");\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 * @param hasPositionalInput Whether the command has positional or piped input.\n * When true, required-parameter checks are skipped because the processor\n * will parse the positional text itself.\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 hasPositionalInput: boolean,\n ): boolean {\n // When the user provides positional input (e.g. `scp cat node /app`)\n // the processor is responsible for parsing that text into individual\n // values. Required-parameter checks only apply in named-arg mode\n // (e.g. `scp cat --server=node --path=/app`).\n if (!hasPositionalInput && 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) =>\n context.writer.wrapInColor(\n `--${p.name}`,\n CliForegroundColor.Cyan,\n ),\n )\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 .map((p) => ({\n name: p.parameter.name,\n result: p.parameter.validator!(p.value),\n }))\n .filter((p) => !p.result.valid)\n .map((p) => ({\n name: p.name,\n message: p.result.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}. ${context.writer.wrapInColor(`--${p.name}`, CliForegroundColor.Cyan)} = \"${args[p.name]}\" → ${p.message}`,\n );\n });\n\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Returns true when the processor (or one of its ancestors) declares a\n * parameter whose name or aliases overlap with the global handler's\n * parameter. In that case the global handler must be skipped so the\n * processor can handle the flag itself.\n */\n private processorOwnsParameter(\n processor: ICliCommandProcessor,\n globalParam: ICliCommandParameterDescriptor,\n ): boolean {\n const globalNames = new Set<string>([\n globalParam.name,\n ...(globalParam.aliases ?? []),\n ]);\n\n const params = processor.parameters;\n if (!params) return false;\n\n return params.some(\n (p) =>\n globalNames.has(p.name) ||\n p.aliases?.some((a) => globalNames.has(a)),\n );\n }\n}\n","import { CliProvider, ICliServiceProvider } from '@qodalis/cli-core';\n\n/**\n * A simple Map-based service container implementing ICliServiceProvider.\n *\n * Supports three provider types:\n * - `useValue` : registers a static value\n * - `useFactory` : registers a factory function, invoked once on first `get`\n * - `useClass` : registers a class constructor, instantiated once on first `get`\n *\n * When `multi: true`, multiple providers for the same token are accumulated\n * and `get()` returns an array of resolved values.\n */\nexport class CliServiceContainer implements ICliServiceProvider {\n /** Stores single-value providers (resolved or pending). */\n private readonly services = new Map<any, any>();\n\n /** Stores multi-provider arrays. */\n private readonly multiServices = new Map<any, any[]>();\n\n /**\n * Retrieve a service by its token.\n *\n * @param token The token used to register the service.\n * @returns The resolved service instance (or array for multi providers).\n * @throws Error if the token has not been registered.\n */\n get<T>(token: any): T {\n if (this.multiServices.has(token)) {\n return this.multiServices.get(token) as T;\n }\n\n if (this.services.has(token)) {\n return this.services.get(token) as T;\n }\n\n const tokenName =\n typeof token === 'string'\n ? token\n : typeof token === 'function'\n ? token.name\n : String(token);\n\n throw new Error(\n `CliServiceContainer: No provider found for token \"${tokenName}\".`,\n );\n }\n\n /**\n * Register one or more providers.\n *\n * @param definition A single CliProvider or an array of CliProviders.\n */\n set(definition: CliProvider | CliProvider[]): void {\n if (Array.isArray(definition)) {\n for (const provider of definition) {\n this.registerProvider(provider);\n }\n } else {\n this.registerProvider(definition);\n }\n }\n\n /**\n * Returns all registered service tokens (single + multi providers).\n */\n getRegisteredTokens(): string[] {\n const tokens: string[] = [];\n for (const key of this.services.keys()) {\n tokens.push(\n typeof key === 'string'\n ? key\n : typeof key === 'function'\n ? key.name\n : String(key),\n );\n }\n for (const key of this.multiServices.keys()) {\n const name =\n typeof key === 'string'\n ? key\n : typeof key === 'function'\n ? key.name\n : String(key);\n tokens.push(`${name} (multi)`);\n }\n return tokens;\n }\n\n /**\n * Returns detailed info for each registered service: token name, value type, and multi flag.\n */\n getRegisteredServiceDetails(): {\n token: string;\n type: string;\n multi: boolean;\n }[] {\n const details: { token: string; type: string; multi: boolean }[] = [];\n\n for (const [key, value] of this.services.entries()) {\n details.push({\n token:\n typeof key === 'string'\n ? key\n : typeof key === 'function'\n ? key.name\n : String(key),\n type: this.describeValue(value),\n multi: false,\n });\n }\n\n for (const [key, values] of this.multiServices.entries()) {\n details.push({\n token:\n typeof key === 'string'\n ? key\n : typeof key === 'function'\n ? key.name\n : String(key),\n type: `[${values.map((v: any) => this.describeValue(v)).join(', ')}]`,\n multi: true,\n });\n }\n\n return details;\n }\n\n /**\n * Describe a resolved value for diagnostic display.\n */\n private describeValue(value: any): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'string')\n return `string(\"${value.length > 30 ? value.slice(0, 30) + '...' : value}\")`;\n if (typeof value === 'number') return `number(${value})`;\n if (typeof value === 'boolean') return `boolean(${value})`;\n if (Array.isArray(value)) return `Array(${value.length})`;\n if (typeof value === 'object' && value.constructor?.name)\n return value.constructor.name;\n return typeof value;\n }\n\n /**\n * Register a single provider.\n */\n private registerProvider(provider: CliProvider): void {\n const value = this.resolveProvider(provider);\n\n if (provider.multi) {\n const existing = this.multiServices.get(provider.provide) ?? [];\n existing.push(value);\n this.multiServices.set(provider.provide, existing);\n } else {\n this.services.set(provider.provide, value);\n }\n }\n\n /**\n * Resolve a provider definition to a concrete value.\n */\n private resolveProvider(provider: CliProvider): any {\n if ('useValue' in provider) {\n return provider.useValue;\n }\n\n if ('useFactory' in provider) {\n return provider.useFactory();\n }\n\n if ('useClass' in provider) {\n return new provider.useClass();\n }\n\n throw new Error(\n 'CliServiceContainer: Provider must specify useValue, useFactory, or useClass.',\n );\n }\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 { ICliKeyValueStore } from '@qodalis/cli-core';\n\nexport class CliCommandHistory {\n private readonly storageKey = 'cli-command-history';\n private commandHistory: string[] = [];\n\n constructor(private readonly store: ICliKeyValueStore) {}\n\n public async addCommand(command: string): Promise<void> {\n const normalizedCommand = command.trim();\n if (!normalizedCommand) return;\n\n // Move-to-end deduplication: remove any existing occurrence, then append.\n // This matches zsh/fish behavior — the most-recently used command is always last.\n const existingIndex = this.commandHistory.indexOf(normalizedCommand);\n if (existingIndex !== -1) {\n this.commandHistory.splice(existingIndex, 1);\n }\n\n this.commandHistory.push(normalizedCommand);\n await this.saveHistory();\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 async setHistory(commands: string[]): Promise<void> {\n this.commandHistory = [...commands];\n await this.saveHistory();\n }\n\n public getCommand(index: number): string | undefined {\n return this.commandHistory[index];\n }\n\n /**\n * Search history for commands containing the query string (case-insensitive).\n * Returns matching commands in chronological order (oldest first).\n */\n public search(query: string): string[] {\n if (!query) return [...this.commandHistory];\n const lower = query.toLowerCase();\n return this.commandHistory.filter((cmd) =>\n cmd.toLowerCase().includes(lower),\n );\n }\n\n /**\n * Find the index of the most recent command that starts with the given prefix,\n * searching backward from `fromIndex` (exclusive).\n * Returns -1 if no match found.\n */\n public searchBackward(prefix: string, fromIndex: number): number {\n for (let i = fromIndex - 1; i >= 0; i--) {\n if (this.commandHistory[i].startsWith(prefix)) {\n return i;\n }\n }\n return -1;\n }\n\n /**\n * Find the index of the next command that starts with the given prefix,\n * searching forward from `fromIndex` (exclusive).\n * Returns -1 if no match found.\n */\n public searchForward(prefix: string, fromIndex: number): number {\n for (let i = fromIndex + 1; i < this.commandHistory.length; i++) {\n if (this.commandHistory[i].startsWith(prefix)) {\n return i;\n }\n }\n return -1;\n }\n\n private async saveHistory(): Promise<void> {\n // Save only the 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 { LIBRARY_VERSION } from '../version';\nimport { getCliNameArt } from '../constants';\nimport {\n CliForegroundColor,\n ICliModule,\n CLI_CONFIGURE_STORE_NAME,\n} from '@qodalis/cli-core';\nimport { getGreetingBasedOnTime } from '../utils';\nimport { CliStateStoreManager_TOKEN } from '../tokens';\nimport { ICliStateStoreManager } from '../state/cli-state-store-manager';\n\nexport interface CliWelcomeMessageConfig {\n /** Custom message to display instead of the default */\n message?: string;\n /** When to show the welcome message (default: 'always') */\n show?: 'always' | 'once' | 'daily' | 'never';\n}\n\ninterface ICliWelcomeModule extends ICliModule {\n configure(config: CliWelcomeMessageConfig): ICliModule;\n}\n\nexport const welcomeModule: ICliWelcomeModule = {\n apiVersion: 2,\n name: '@qodalis/cli-welcome',\n priority: -1,\n\n configure(config: CliWelcomeMessageConfig): ICliModule {\n return { ...this, config };\n },\n\n async onAfterBoot(context) {\n const config = (this.config || {}) as CliWelcomeMessageConfig;\n\n // Check the configure command's persisted state first, then fall back to module config\n let showOption = config.show;\n try {\n const storeManager = context.services.get<ICliStateStoreManager>(\n CliStateStoreManager_TOKEN,\n );\n const configureStore = storeManager.getStateStore(\n CLI_CONFIGURE_STORE_NAME,\n );\n await configureStore.initialize();\n const state = configureStore.getState<Record<string, any>>();\n if (state?.['system']?.['welcomeMessage']) {\n showOption = state['system']['welcomeMessage'];\n }\n } catch {\n // Configure store not available — use module config\n }\n\n if (showOption) {\n if (!shouldDisplayWelcomeMessage(showOption)) {\n context.showPrompt();\n return;\n }\n }\n\n if (config.message) {\n context.terminal.writeln(config.message);\n } else {\n const lines = [\n `🚀 Welcome to Web CLI [Version ${context.writer.wrapInColor(LIBRARY_VERSION, CliForegroundColor.Green)}]`,\n `(c) ${new Date().getFullYear()} Qodalis Solutions. All rights reserved.`,\n getCliNameArt(context.terminal.cols),\n '',\n `📖 ${context.writer.wrapInColor('Documentation:', CliForegroundColor.Green)} https://cli.qodalis.com/docs/`,\n '',\n `💡 Type ${context.writer.wrapInColor(\"'help'\", CliForegroundColor.Cyan)} to see available commands`,\n '',\n ];\n\n lines.forEach((line) => {\n context.terminal.write(line + '\\r\\n');\n });\n }\n\n recordWelcomeMessageDisplay();\n context.showPrompt();\n await context.textAnimator?.showText(getGreetingBasedOnTime(), {\n speed: 60,\n removeAfterTyping: true,\n });\n },\n};\n\nfunction shouldDisplayWelcomeMessage(\n showOption: 'always' | 'once' | 'daily' | 'never',\n): boolean {\n const lastDisplayed = localStorage.getItem(\n 'cliWelcomeMessageLastDisplayed',\n );\n\n switch (showOption) {\n case 'always':\n return true;\n case 'once':\n return !lastDisplayed;\n case 'daily':\n if (!lastDisplayed) return true;\n const now = new Date();\n const lastDate = new Date(lastDisplayed);\n return now.toDateString() !== lastDate.toDateString();\n case 'never':\n return false;\n default:\n return true;\n }\n}\n\nfunction recordWelcomeMessageDisplay(): void {\n localStorage.setItem(\n 'cliWelcomeMessageLastDisplayed',\n new Date().toISOString(),\n );\n}\n","import {\n CliIcon,\n delay,\n ICliCommandChildProcessor,\n ICliCommandProcessor,\n ICliCommandProcessorRegistry,\n ICliKeyValueStore,\n ICliModule,\n ICliServiceProvider,\n CliModuleRegistry,\n initializeBrowserEnvironment,\n LIBRARY_VERSION as CORE_VERSION,\n satisfiesVersionRange,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION as CLI_VERSION, API_VERSION } from '../version';\nimport { CliExecutionContext } from '../context/cli-execution-context';\nimport { CliCommandExecutionContext } from '../context/cli-command-execution-context';\nimport { builtinProcessors } from '../processors';\n\nexport class CliBoot {\n private initialized = false;\n private initializing = false;\n private readonly moduleRegistry: CliModuleRegistry;\n private readonly bootedModules = new Set<string>();\n\n constructor(\n private readonly registry: ICliCommandProcessorRegistry,\n private readonly services: ICliServiceProvider,\n ) {\n this.moduleRegistry = new CliModuleRegistry();\n }\n\n /**\n * Get the module registry for external access.\n */\n getModuleRegistry(): CliModuleRegistry {\n return this.moduleRegistry;\n }\n\n public async boot(\n context: CliExecutionContext,\n modules: ICliModule[],\n ): Promise<void> {\n context.spinner?.show(CliIcon.Rocket + ' Booting...');\n\n if (this.initialized || this.initializing) {\n await this.bootShared(context);\n context.spinner?.hide();\n return;\n }\n\n this.initializing = true;\n\n // 1. Set up browser environment for dynamic UMD loading\n initializeBrowserEnvironment({\n context,\n registry: this.moduleRegistry,\n });\n\n // 2. Wire handler so dynamically loaded UMD modules go through the same pipeline\n this.moduleRegistry.onModuleBoot(async (module: ICliModule) => {\n await this.bootModule(module, context);\n });\n\n // 3. Boot core module first (implicit dependency for all others)\n const coreModule = this.buildCoreModule();\n await this.bootModule(coreModule, context);\n\n // 4. Filter out modules that do not meet the required API version\n const compatible = modules.filter((module) => {\n const modApiVersion = module.apiVersion;\n if (typeof modApiVersion !== 'number' || modApiVersion < API_VERSION) {\n context.writer.writeWarning(\n `Plugin \"${module.name}\" targets API version ${modApiVersion ?? 'unknown'}, ` +\n `but this runtime requires API version ${API_VERSION}. Skipping. ` +\n `See https://qodalis.com/docs/upgrade-v2`,\n );\n return false;\n }\n return true;\n });\n\n // 5. Topologically sort remaining modules by dependencies\n const sorted = this.topologicalSort(compatible, context);\n\n // 6. Boot each module in order\n for (const module of sorted) {\n await this.bootModule(module, context);\n }\n\n await this.bootShared(context);\n\n context.spinner?.hide();\n\n this.initialized = true;\n }\n\n private async bootModule(\n module: ICliModule,\n context: CliExecutionContext,\n ): Promise<void> {\n // Skip if already booted\n if (this.bootedModules.has(module.name)) {\n return;\n }\n\n // Check dependencies are satisfied\n for (const dep of module.dependencies ?? []) {\n if (!this.bootedModules.has(dep)) {\n context.writer.writeWarning(\n `Module \"${module.name}\" requires \"${dep}\" which is not loaded. Skipping.`,\n );\n return;\n }\n }\n\n context.logger.info(`Booting module: ${module.name}`);\n\n // Register services into the shared container\n if (module.services && module.services.length > 0) {\n this.services.set(module.services);\n }\n\n // Auto-register module translations (before onInit so modules can override)\n if (module.translations) {\n for (const [locale, translations] of Object.entries(module.translations)) {\n context.translator.addTranslations(locale, translations);\n }\n }\n\n // Module lifecycle: onInit (before processors)\n if (module.onInit) {\n try {\n await module.onInit(context);\n } catch (e) {\n console.error(\n `Error in onInit for module \"${module.name}\":`,\n e,\n );\n }\n }\n\n // Module lifecycle: onSetup (first-run setup flow)\n if (module.onSetup) {\n const kvStore = context.services.get<ICliKeyValueStore>(\n 'cli-key-value-store',\n );\n const setupKey = `cli-module-setup:${module.name}`;\n const setupState = await kvStore.get<{\n installed: boolean;\n installedAt: number;\n }>(setupKey);\n\n if (!setupState?.installed) {\n try {\n context.spinner?.hide();\n const success = await module.onSetup(context);\n if (success) {\n await kvStore.set(setupKey, {\n installed: true,\n installedAt: Date.now(),\n });\n }\n } catch (e) {\n console.error(\n `Setup failed for module \"${module.name}\":`,\n e,\n );\n } finally {\n context.spinner?.show();\n }\n }\n }\n\n // Register and initialize processors\n if (module.processors && module.processors.length > 0) {\n const filtered = this.filterByVersion(module.processors, context);\n for (const processor of filtered) {\n this.registry.registerProcessor(processor);\n }\n await this.initializeProcessorsInternal(context, filtered);\n }\n\n this.bootedModules.add(module.name);\n\n // Track in module registry for introspection (without triggering boot handlers)\n if (!this.moduleRegistry.has(module.name)) {\n this.moduleRegistry.track(module);\n }\n }\n\n private buildCoreModule(): ICliModule {\n return {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-core',\n version: CORE_VERSION,\n description: 'Core CLI services and utilities',\n processors: [...builtinProcessors],\n };\n }\n\n /**\n * Topologically sort modules by their dependencies using DFS.\n * Modules with no dependencies come first.\n * Circular dependencies are detected and reported. Missing dependencies\n * cause the dependent module to be skipped.\n */\n private topologicalSort(\n modules: ICliModule[],\n context: CliExecutionContext,\n ): ICliModule[] {\n const moduleMap = new Map(modules.map((m) => [m.name, m]));\n const visited = new Set<string>();\n const visiting = new Set<string>();\n const sorted: ICliModule[] = [];\n\n const visit = (name: string): void => {\n if (visited.has(name)) return;\n if (visiting.has(name)) {\n context.writer.writeError(\n `Circular dependency detected involving module \"${name}\". Aborting module loading.`,\n );\n return;\n }\n\n const mod = moduleMap.get(name);\n if (!mod) return;\n\n visiting.add(name);\n for (const dep of mod.dependencies ?? []) {\n if (!moduleMap.has(dep) && !this.bootedModules.has(dep)) {\n context.writer.writeWarning(\n `Module \"${name}\" depends on \"${dep}\" which is not loaded. Skipping \"${name}\".`,\n );\n visiting.delete(name);\n return;\n }\n visit(dep);\n }\n visiting.delete(name);\n visited.add(name);\n sorted.push(mod);\n };\n\n for (const mod of modules) {\n visit(mod.name);\n }\n\n return sorted;\n }\n\n private filterByVersion(\n processors: ICliCommandProcessor[],\n context: CliExecutionContext,\n ): ICliCommandProcessor[] {\n return processors.filter((p) => {\n const meta = p.metadata;\n if (\n meta?.requiredCoreVersion &&\n !satisfiesVersionRange(CORE_VERSION, meta.requiredCoreVersion)\n ) {\n context.writer.writeWarning(\n `Plugin \"${p.command}\" requires cli-core ${meta.requiredCoreVersion} but ${CORE_VERSION} is installed. Skipping.`,\n );\n return false;\n }\n if (\n meta?.requiredCliVersion &&\n !satisfiesVersionRange(CLI_VERSION, meta.requiredCliVersion)\n ) {\n context.writer.writeWarning(\n `Plugin \"${p.command}\" requires cli ${meta.requiredCliVersion} but ${CLI_VERSION} is installed. Skipping.`,\n );\n return false;\n }\n return true;\n });\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 for (const p of processors) {\n try {\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 } catch (e) {\n console.error(\n `Error initializing processor \"${p.command}\":`,\n e,\n );\n }\n }\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 { Observable, Subject } from 'rxjs';\nimport { ICliDragDropService } from '@qodalis/cli-core';\n\nexport class CliDragDropService implements ICliDragDropService {\n private readonly _subject = new Subject<File[]>();\n private readonly _dragOver: (e: DragEvent) => void;\n private readonly _drop: (e: DragEvent) => void;\n\n constructor(private readonly _container: HTMLElement) {\n this._dragOver = (e: DragEvent) => e.preventDefault();\n this._drop = (e: DragEvent) => {\n e.preventDefault();\n const files = Array.from(e.dataTransfer?.files ?? []);\n if (files.length > 0) {\n this._subject.next(files);\n }\n };\n\n this._container.addEventListener('dragover', this._dragOver);\n this._container.addEventListener('drop', this._drop);\n }\n\n get onFileDrop(): Observable<File[]> {\n return this._subject.asObservable();\n }\n\n destroy(): void {\n this._container.removeEventListener('dragover', this._dragOver);\n this._container.removeEventListener('drop', this._drop);\n this._subject.complete();\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 { ICliKeyValueStore } from '@qodalis/cli-core';\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 {\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 try {\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 } catch (e) {\n console.error(\n `CliStateStore: Failed to load state for \"${this.name}\":`,\n e,\n );\n }\n }\n}\n","import {\n ICliCommandProcessor,\n ICliCommandProcessorRegistry,\n ICliServiceProvider,\n ICliStateStore,\n} from '@qodalis/cli-core';\nimport { CliStateStore } from './cli-state-store';\n\nexport interface ICliStateStoreManager {\n getProcessorStateStore(processor: ICliCommandProcessor): ICliStateStore;\n getStateStore(\n name: string,\n defaultState?: Record<string, any>,\n ): ICliStateStore;\n getStoreEntries(): { name: string; state: Record<string, any> }[];\n}\n\nexport class CliStateStoreManager implements ICliStateStoreManager {\n private stores = new Map<string, ICliStateStore>();\n\n constructor(\n private readonly services: ICliServiceProvider,\n private readonly registry: ICliCommandProcessorRegistry,\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 return this.stores.get(name)!;\n }\n\n public getProcessorStateStore(\n processor: ICliCommandProcessor,\n ): ICliStateStore {\n const rootProcessor = this.registry.getRootProcessor(processor);\n return this.getStateStore(\n rootProcessor.stateConfiguration?.storeName ||\n rootProcessor.command,\n rootProcessor.stateConfiguration?.initialState,\n );\n }\n\n /**\n * Returns all store names and their current state values.\n */\n getStoreEntries(): { name: string; state: Record<string, any> }[] {\n const entries: { name: string; state: Record<string, any> }[] = [];\n this.stores.forEach((store, name) => {\n entries.push({ name, state: store.getState() });\n });\n return entries;\n }\n}\n","import { ICliTranslationService } from '@qodalis/cli-core';\n\n/**\n * Default implementation of the translation service.\n *\n * Maintains a map of locale -> flat key-value translations.\n * The 'en' locale is always implicitly available via defaultValue fallbacks.\n * Supports simple {param} interpolation.\n */\nexport class CliTranslationService implements ICliTranslationService {\n private locale = 'en';\n private readonly translations = new Map<string, Record<string, string>>();\n\n t(\n key: string,\n defaultValue: string,\n params?: Record<string, string | number>,\n ): string {\n let result: string | undefined;\n\n // 1. Try current locale\n if (this.locale !== 'en') {\n result = this.translations.get(this.locale)?.[key];\n }\n\n // 2. Try 'en' translations (if explicitly registered)\n if (result === undefined) {\n result = this.translations.get('en')?.[key];\n }\n\n // 3. Fall back to the default value\n if (result === undefined) {\n result = defaultValue;\n }\n\n // 4. Interpolate params\n if (params) {\n for (const [paramKey, paramValue] of Object.entries(params)) {\n result = result.replace(\n new RegExp(`\\\\{${paramKey}\\\\}`, 'g'),\n String(paramValue),\n );\n }\n }\n\n return result;\n }\n\n getLocale(): string {\n return this.locale;\n }\n\n setLocale(locale: string): void {\n this.locale = locale;\n }\n\n addTranslations(locale: string, translations: Record<string, string>): void {\n const existing = this.translations.get(locale) || {};\n this.translations.set(locale, { ...existing, ...translations });\n }\n\n getAvailableLocales(): string[] {\n const locales = new Set<string>(['en', ...this.translations.keys()]);\n return [...locales].sort();\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n ICliCommandProcessorRegistry,\n ICliCommandProcessor,\n} from '@qodalis/cli-core';\nimport { getAccelerator } from '../wasm';\n\n/**\n * Provides tab-completion for command names and sub-command names.\n * Priority 100 (default).\n */\nexport class CliCommandCompletionProvider implements ICliCompletionProvider {\n priority = 100;\n\n constructor(private readonly registry: ICliCommandProcessorRegistry) {}\n\n getCompletions(context: ICliCompletionContext): string[] {\n const { tokens, tokenIndex, token } = context;\n\n if (tokenIndex === 0) {\n // Complete top-level command names + aliases\n return this.getCommandNames(this.registry.processors, token);\n }\n\n // Complete sub-commands: find the parent processor\n const mainCommand = tokens[0];\n const processor = this.registry.findProcessor(mainCommand, []);\n if (!processor?.processors?.length) {\n return [];\n }\n\n // Walk the chain for nested sub-commands\n let current: ICliCommandProcessor = processor;\n for (let i = 1; i < tokenIndex; i++) {\n const sub = current.processors?.find(\n (p) => p.command === tokens[i],\n );\n if (!sub?.processors?.length) {\n return [];\n }\n current = sub;\n }\n\n return this.getCommandNames(current.processors ?? [], token);\n }\n\n private getCommandNames(\n processors: ICliCommandProcessor[],\n prefix: string,\n ): string[] {\n const names: string[] = [];\n for (const p of processors) {\n names.push(p.command);\n if (p.aliases) {\n names.push(...p.aliases);\n }\n }\n return getAccelerator().prefixMatch(names, prefix);\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n ICliCommandProcessorRegistry,\n ICliCommandExecutorService,\n ICliCommandParameterDescriptor,\n} from '@qodalis/cli-core';\nimport { getAccelerator } from '../wasm';\n\n/**\n * Provides tab-completion for parameter/flag names (e.g. --recursive, -r).\n * Priority 200 (checked after command completion).\n */\nexport class CliParameterCompletionProvider implements ICliCompletionProvider {\n priority = 200;\n\n constructor(\n private readonly registry: ICliCommandProcessorRegistry,\n private readonly executor: ICliCommandExecutorService,\n ) {}\n\n getCompletions(context: ICliCompletionContext): string[] {\n const { tokens, token } = context;\n\n // Only complete tokens that start with -\n if (!token.startsWith('-')) {\n return [];\n }\n\n if (tokens.length === 0) {\n return [];\n }\n\n // Find the processor for the command\n const mainCommand = tokens[0];\n const chainCommands = tokens.slice(1).filter((t) => !t.startsWith('-'));\n\n const processor = this.registry.findProcessorInCollection(\n mainCommand,\n chainCommands,\n this.registry.processors,\n );\n\n // Merge processor-specific parameters with global parameters\n const allParameters: ICliCommandParameterDescriptor[] = [\n ...(processor?.parameters ?? []),\n ...this.executor.getGlobalParameters(),\n ];\n\n if (allParameters.length === 0) {\n return [];\n }\n\n const isDoubleDash = token.startsWith('--');\n const prefix = isDoubleDash ? token.slice(2) : token.slice(1);\n\n const candidates: string[] = [];\n for (const param of allParameters) {\n if (isDoubleDash) {\n candidates.push(`--${param.name}`);\n } else {\n if (param.aliases) {\n for (const alias of param.aliases) {\n candidates.push(`-${alias}`);\n }\n }\n candidates.push(`--${param.name}`);\n }\n }\n\n const dashPrefix = isDoubleDash ? `--${prefix}` : `-${prefix}`;\n return getAccelerator().prefixMatch(candidates, dashPrefix);\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n ICliBackgroundServiceRegistry,\n} from '@qodalis/cli-core';\n\n/**\n * Sub-commands of `services` (and alias `svc`) that accept a service name value.\n */\nconst SERVICE_NAME_SUBCOMMANDS = new Set([\n 'start',\n 'stop',\n 'restart',\n 'logs',\n 'info',\n]);\n\n/**\n * Provides tab-completion for background service names when typing\n * `services <subcommand> <name>` (or `svc <subcommand> <name>`).\n *\n * Priority 50 — checked before command and parameter completion so that\n * service names are suggested instead of treating the value position as\n * a sub-command or flag.\n */\nexport class CliServiceNameCompletionProvider\n implements ICliCompletionProvider\n{\n priority = 50;\n\n constructor(\n private readonly backgroundServices: ICliBackgroundServiceRegistry,\n ) {}\n\n getCompletions(context: ICliCompletionContext): string[] {\n const { tokens, tokenIndex, token } = context;\n\n // We need at least the root command + sub-command already typed,\n // and the cursor positioned at token index 2 (the value position).\n if (tokenIndex !== 2 || tokens.length < 2) {\n return [];\n }\n\n const rootCommand = tokens[0].toLowerCase();\n if (rootCommand !== 'services' && rootCommand !== 'svc') {\n return [];\n }\n\n const subCommand = tokens[1].toLowerCase();\n if (!SERVICE_NAME_SUBCOMMANDS.has(subCommand)) {\n return [];\n }\n\n const lowerPrefix = token.toLowerCase();\n const services = this.backgroundServices.list();\n\n return services\n .map((svc) => svc.name)\n .filter((name) => name.toLowerCase().startsWith(lowerPrefix))\n .sort();\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n ICliServiceProvider,\n} from '@qodalis/cli-core';\nimport { CliPackageManagerService } from '../services/cli-package-manager';\nimport { CliPackageManagerService_TOKEN } from '../tokens';\n\n/**\n * Sub-commands of `pkg` (and alias `packages`) that accept an installed\n * package name as their value argument.\n */\nconst INSTALLED_PKG_SUBCOMMANDS = new Set([\n 'remove',\n 'rm',\n 'update',\n]);\n\n/**\n * Provides tab-completion for installed package names when typing\n * `pkg remove <name>`, `pkg update <name>`, etc.\n *\n * Both full names (`@qodalis/cli-guid`) and short names (`guid`) are\n * offered as candidates so the user can type whichever form they prefer.\n *\n * Priority 50 — checked before command and parameter completion.\n */\nexport class CliPackageNameCompletionProvider\n implements ICliCompletionProvider\n{\n priority = 50;\n\n private readonly QODALIS_PREFIX = '@qodalis/cli-';\n\n constructor(private readonly services: ICliServiceProvider) {}\n\n async getCompletions(context: ICliCompletionContext): Promise<string[]> {\n const { tokens, tokenIndex, token } = context;\n\n if (tokenIndex < 2 || tokens.length < 2) {\n return [];\n }\n\n const rootCommand = tokens[0].toLowerCase();\n if (rootCommand !== 'pkg' && rootCommand !== 'packages') {\n return [];\n }\n\n const subCommand = tokens[1].toLowerCase();\n if (!INSTALLED_PKG_SUBCOMMANDS.has(subCommand)) {\n return [];\n }\n\n let manager: CliPackageManagerService;\n try {\n manager = this.services.get<CliPackageManagerService>(\n CliPackageManagerService_TOKEN,\n );\n } catch {\n return [];\n }\n\n const packages = await manager.getPackages();\n const lowerPrefix = token.toLowerCase();\n\n // Collect already-mentioned package names so we don't re-suggest them\n const alreadyMentioned = new Set(\n tokens.slice(2, tokenIndex).map((t) => t.toLowerCase()),\n );\n\n const results: string[] = [];\n\n for (const pkg of packages) {\n const fullName = pkg.name;\n const shortName = fullName.startsWith(this.QODALIS_PREFIX)\n ? fullName.slice(this.QODALIS_PREFIX.length)\n : null;\n\n if (alreadyMentioned.has(fullName.toLowerCase())) continue;\n if (shortName && alreadyMentioned.has(shortName.toLowerCase())) continue;\n\n if (fullName.toLowerCase().startsWith(lowerPrefix)) {\n results.push(fullName);\n }\n if (shortName && shortName.toLowerCase().startsWith(lowerPrefix)) {\n results.push(shortName);\n }\n }\n\n return results.sort();\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n DefaultThemes,\n} from '@qodalis/cli-core';\n\nconst THEME_NAME_SUBCOMMANDS = new Set(['preview', 'apply']);\nconst RANDOM_FILTER_VALUES = ['dark', 'light'];\nconst SEARCH_TAGS = [\n 'popular',\n 'retro',\n 'fun',\n 'pastel',\n 'accessibility',\n 'built-in',\n 'dark',\n 'light',\n];\n\nexport class CliThemeNameCompletionProvider\n implements ICliCompletionProvider\n{\n priority = 50;\n\n private readonly themeNames = Object.keys(DefaultThemes);\n\n getCompletions(context: ICliCompletionContext): string[] {\n const { tokens, tokenIndex, token } = context;\n\n if (tokenIndex !== 2 || tokens.length < 2) {\n return [];\n }\n\n const rootCommand = tokens[0].toLowerCase();\n if (rootCommand !== 'theme' && rootCommand !== 'themes') {\n return [];\n }\n\n const subCommand = tokens[1].toLowerCase();\n const lowerPrefix = token.toLowerCase();\n\n if (THEME_NAME_SUBCOMMANDS.has(subCommand)) {\n return this.themeNames\n .filter((name) =>\n name.toLowerCase().startsWith(lowerPrefix),\n )\n .sort();\n }\n\n if (subCommand === 'random') {\n return RANDOM_FILTER_VALUES.filter((v) =>\n v.startsWith(lowerPrefix),\n );\n }\n\n if (subCommand === 'search') {\n return SEARCH_TAGS.filter((t) =>\n t.startsWith(lowerPrefix),\n );\n }\n\n return [];\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n} from '@qodalis/cli-core';\nimport { ICliStateStoreManager } from '../state/cli-state-store-manager';\n\n/**\n * Provides tab-completion for alias names when typing `unalias <name>`.\n *\n * Priority 50 — checked before command and parameter completion.\n */\nexport class CliAliasNameCompletionProvider\n implements ICliCompletionProvider\n{\n priority = 50;\n\n constructor(\n private readonly stateStoreManager: ICliStateStoreManager,\n ) {}\n\n getCompletions(context: ICliCompletionContext): string[] {\n const { tokens, tokenIndex, token } = context;\n\n if (tokenIndex !== 1 || tokens.length < 1) {\n return [];\n }\n\n const rootCommand = tokens[0].toLowerCase();\n if (rootCommand !== 'unalias') {\n return [];\n }\n\n const store = this.stateStoreManager.getStateStore('aliases');\n const state = store.getState<Record<string, any>>();\n const aliases = state?.aliases;\n\n if (!aliases || typeof aliases !== 'object') {\n return [];\n }\n\n const lowerPrefix = token.toLowerCase();\n\n return Object.keys(aliases)\n .filter((name) => name.toLowerCase().startsWith(lowerPrefix))\n .sort();\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n} from '@qodalis/cli-core';\nimport { CliServerManager } from '../server/cli-server-manager';\n\n/**\n * Sub-commands of `server` that accept a server name value.\n */\nconst SERVER_NAME_SUBCOMMANDS = new Set([\n 'status',\n 'reconnect',\n 'default',\n]);\n\n/**\n * Provides tab-completion for server names when typing\n * `server status|reconnect|default <name>` or `ssh <name>`.\n *\n * Priority 50 — checked before command and parameter completion.\n */\nexport class CliServerNameCompletionProvider\n implements ICliCompletionProvider\n{\n priority = 50;\n\n constructor(private readonly serverManager: CliServerManager) {}\n\n getCompletions(context: ICliCompletionContext): string[] {\n const { tokens, tokenIndex, token } = context;\n const rootCommand = tokens[0]?.toLowerCase();\n\n // ssh <name>\n if (rootCommand === 'ssh' && tokenIndex === 1) {\n return this.matchServerNames(token, true);\n }\n\n // server status|reconnect|default <name>\n if (\n rootCommand === 'server' &&\n tokenIndex === 2 &&\n tokens.length >= 2\n ) {\n const subCommand = tokens[1].toLowerCase();\n if (SERVER_NAME_SUBCOMMANDS.has(subCommand)) {\n return this.matchServerNames(token);\n }\n }\n\n return [];\n }\n\n private matchServerNames(\n prefix: string,\n shellOnly = false,\n ): string[] {\n const lowerPrefix = prefix.toLowerCase();\n const results: string[] = [];\n\n for (const [name, connection] of this.serverManager.connections) {\n if (shellOnly && !connection.capabilities?.shell) {\n continue;\n }\n if (name.toLowerCase().startsWith(lowerPrefix)) {\n results.push(name);\n }\n }\n\n return results.sort();\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n ICliCommandProcessorRegistry,\n resolveConfigurationCategories,\n} from '@qodalis/cli-core';\n\n/**\n * Sub-commands of `configure` that accept a config key value.\n */\nconst CONFIG_KEY_SUBCOMMANDS = new Set(['get', 'set']);\n\n/**\n * Built-in system configuration keys (must stay in sync with\n * CliConfigureCommandProcessor's SYSTEM_OPTIONS).\n */\nconst SYSTEM_KEYS = ['logLevel', 'welcomeMessage'];\n\n/**\n * Provides tab-completion for configuration keys when typing\n * `configure get <category.key>` or `configure set <category.key>`.\n *\n * Priority 50 — checked before command and parameter completion.\n */\nexport class CliConfigKeyCompletionProvider\n implements ICliCompletionProvider\n{\n priority = 50;\n\n constructor(\n private readonly registry: ICliCommandProcessorRegistry,\n ) {}\n\n getCompletions(context: ICliCompletionContext): string[] {\n const { tokens, tokenIndex, token } = context;\n\n if (tokenIndex !== 2 || tokens.length < 2) {\n return [];\n }\n\n const rootCommand = tokens[0].toLowerCase();\n if (rootCommand !== 'configure') {\n return [];\n }\n\n const subCommand = tokens[1].toLowerCase();\n if (!CONFIG_KEY_SUBCOMMANDS.has(subCommand)) {\n return [];\n }\n\n const keys = this.getAllConfigKeys();\n const lowerPrefix = token.toLowerCase();\n\n return keys\n .filter((key) => key.toLowerCase().startsWith(lowerPrefix))\n .sort();\n }\n\n private getAllConfigKeys(): string[] {\n const keys: string[] = [];\n\n // System keys\n for (const key of SYSTEM_KEYS) {\n keys.push(`system.${key}`);\n }\n\n // Plugin keys\n const categories = resolveConfigurationCategories(this.registry);\n for (const [category, { options }] of categories) {\n for (const option of options) {\n keys.push(`${category}.${option.key}`);\n }\n }\n\n return keys;\n }\n}\n","import {\n CliProcessCommand,\n CliIcon,\n ICliCommandProcessor,\n ICliCommandChildProcessor,\n ICliCommandParameterDescriptor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { CliServerManager, CliServerManager_TOKEN } from './cli-server-manager';\n\nexport class CliServerCommandProcessor implements ICliCommandProcessor {\n command = 'server';\n description = 'Manage remote CLI server connections';\n metadata = {\n icon: CliIcon.Server,\n module: '@qodalis/cli-server',\n sealed: true,\n };\n processors: ICliCommandChildProcessor[] = [\n new ServerListProcessor(),\n new ServerStatusProcessor(),\n new ServerReconnectProcessor(),\n new ServerDefaultProcessor(),\n ];\n\n async processCommand(\n _command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n context.writer.writeln(\n 'Usage: server <list|status|reconnect|default>',\n );\n context.writer.writeln('Run \"help server\" for details.');\n }\n}\n\nclass ServerListProcessor implements ICliCommandChildProcessor {\n command = 'list';\n description = 'Show configured servers and their connection status';\n parent?: ICliCommandProcessor;\n\n async processCommand(\n _command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const manager = context.services.get<CliServerManager>(\n CliServerManager_TOKEN,\n );\n\n if (!manager || manager.connections.size === 0) {\n context.writer.writeInfo('No servers configured.');\n return;\n }\n\n const headers = ['Name', 'URL', 'Status', 'Commands'];\n const rows: string[][] = [];\n const defaultServer = manager.defaultServer;\n\n for (const [name, connection] of manager.connections) {\n const isDefault = name === defaultServer;\n rows.push([\n isDefault ? `${name} *` : name,\n connection.config.url,\n connection.connected ? 'Connected' : 'Disconnected',\n connection.connected ? String(connection.commands.length) : '-',\n ]);\n }\n\n context.writer.writeTable(headers, rows);\n\n if (defaultServer) {\n context.writer.writeInfo('* = default server');\n }\n }\n}\n\nclass ServerStatusProcessor implements ICliCommandChildProcessor {\n command = 'status';\n description = 'Ping a server and show its version';\n valueRequired = true;\n parent?: ICliCommandProcessor;\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const serverName = command.value;\n if (!serverName) {\n context.writer.writeError('Usage: server status <server-name>');\n context.process.exit(1);\n return;\n }\n\n const manager = context.services.get<CliServerManager>(\n CliServerManager_TOKEN,\n );\n const connection = manager?.getConnection(serverName);\n\n if (!connection) {\n context.writer.writeError(`Unknown server: ${serverName}`);\n context.process.exit(1);\n return;\n }\n\n context.spinner?.show(`Pinging ${serverName}...`);\n const reachable = await connection.ping();\n context.spinner?.hide();\n\n if (reachable) {\n context.writer.writeSuccess(`Server '${serverName}' is reachable`);\n context.writer.writeKeyValue({\n URL: connection.config.url,\n Connected: String(connection.connected),\n Commands: String(connection.commands.length),\n });\n } else {\n context.writer.writeError(\n `Server '${serverName}' is not reachable at ${connection.config.url}`,\n );\n }\n }\n}\n\nclass ServerReconnectProcessor implements ICliCommandChildProcessor {\n command = 'reconnect';\n description = 'Re-fetch commands from a server';\n valueRequired = true;\n parent?: ICliCommandProcessor;\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const serverName = command.value;\n if (!serverName) {\n context.writer.writeError('Usage: server reconnect <server-name>');\n context.process.exit(1);\n return;\n }\n\n const manager = context.services.get<CliServerManager>(\n CliServerManager_TOKEN,\n );\n\n if (!manager) {\n context.writer.writeError('Server manager not available.');\n context.process.exit(1);\n return;\n }\n\n context.spinner?.show(`Reconnecting to ${serverName}...`);\n const result = await manager.reconnect(serverName);\n context.spinner?.hide();\n\n if (result.success) {\n context.writer.writeSuccess(\n `Reconnected to '${serverName}'. ${result.commandCount} commands available.`,\n );\n } else {\n context.writer.writeError(\n `Could not reconnect to '${serverName}'.`,\n );\n context.process.exit(1);\n }\n }\n}\n\nclass ServerDefaultProcessor implements ICliCommandChildProcessor {\n command = 'default';\n description = 'Get or set the default server for ambiguous commands';\n acceptsRawInput = true;\n parent?: ICliCommandProcessor;\n parameters?: ICliCommandParameterDescriptor[] = [\n {\n name: '--clear',\n description: 'Remove default server preference',\n required: false,\n type: 'boolean',\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const manager = context.services.get<CliServerManager>(\n CliServerManager_TOKEN,\n );\n\n if (!manager) {\n context.writer.writeError('Server manager not available.');\n context.process.exit(1);\n return;\n }\n\n if (command.args?.['clear']) {\n manager.setDefaultServer(null);\n context.writer.writeSuccess('Default server cleared.');\n return;\n }\n\n const serverName = command.value;\n if (!serverName) {\n const current = manager.defaultServer;\n if (current) {\n context.writer.writeInfo(`Default server: ${current}`);\n } else {\n context.writer.writeInfo(\n 'No default server set. Run \"server default <name>\" to set one.',\n );\n }\n return;\n }\n\n try {\n manager.setDefaultServer(serverName);\n context.writer.writeSuccess(\n `Default server set to '${serverName}'.`,\n );\n } catch {\n context.writer.writeError(`Unknown server: ${serverName}`);\n context.process.exit(1);\n }\n }\n}\n","import {\n CliProcessCommand,\n CliProcessorMetadata,\n ICliCommandParameterDescriptor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { CliServerConnection } from './cli-server-connection';\nimport { CliServerManager, CliServerManager_TOKEN } from './cli-server-manager';\n\ntype ShellMessage =\n | { type: 'stdin'; data: string }\n | { type: 'resize'; cols: number; rows: number };\n\ntype ServerShellMessage =\n | { type: 'stdout'; data: string }\n | { type: 'stderr'; data: string }\n | { type: 'exit'; code: number }\n | { type: 'error'; message: string }\n | { type: 'ready'; shell: string; os: string };\n\nexport class CliSshCommandProcessor implements ICliCommandProcessor {\n command = 'ssh';\n description = 'Open a remote shell session on a server';\n acceptsRawInput = true;\n valueRequired = false;\n metadata: CliProcessorMetadata = {\n module: '@qodalis/cli-server',\n icon: '\\u{1F5A5}',\n };\n parameters?: ICliCommandParameterDescriptor[] = [\n {\n name: 'server',\n description: 'Name of the server to connect to',\n required: false,\n type: 'string',\n },\n ];\n\n private socket: WebSocket | null = null;\n private context: ICliExecutionContext | null = null;\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const manager = context.services.get<CliServerManager>(\n CliServerManager_TOKEN,\n );\n if (!manager) {\n context.writer.writeError('Server manager not available.');\n context.process.exit(1);\n return;\n }\n\n // Find shell-capable servers\n const shellServers: Array<{\n name: string;\n connection: CliServerConnection;\n }> = [];\n for (const [name, connection] of manager.connections) {\n if (connection.connected && connection.capabilities?.shell) {\n shellServers.push({ name, connection });\n }\n }\n\n if (shellServers.length === 0) {\n context.writer.writeError(\n 'No servers with shell access are available.',\n );\n context.process.exit(1);\n return;\n }\n\n // Resolve server name from: --server=name, positional arg, or interactive menu\n const { serverName, oneShotCmd, connection } =\n await this.resolveServer(command, shellServers, context);\n\n if (!serverName || !connection) return;\n\n if (oneShotCmd) {\n await this.executeOneShot(connection, serverName, oneShotCmd, context);\n } else {\n await this.executeInteractive(connection, serverName, context);\n }\n }\n\n async onData(data: string, context: ICliExecutionContext): Promise<void> {\n if (this.socket?.readyState === WebSocket.OPEN) {\n const msg: ShellMessage = { type: 'stdin', data };\n this.socket.send(JSON.stringify(msg));\n }\n }\n\n onResize(\n cols: number,\n rows: number,\n _context: ICliExecutionContext,\n ): void {\n if (this.socket?.readyState === WebSocket.OPEN) {\n const msg: ShellMessage = { type: 'resize', cols, rows };\n this.socket.send(JSON.stringify(msg));\n }\n }\n\n onDispose(_context: ICliExecutionContext): void {\n if (this.socket) {\n if (\n this.socket.readyState === WebSocket.OPEN ||\n this.socket.readyState === WebSocket.CONNECTING\n ) {\n this.socket.close();\n }\n this.socket = null;\n }\n this.context = null;\n }\n\n private async resolveServer(\n command: CliProcessCommand,\n shellServers: Array<{ name: string; connection: CliServerConnection }>,\n context: ICliExecutionContext,\n ): Promise<{\n serverName: string | null;\n oneShotCmd: string | null;\n connection: CliServerConnection | null;\n }> {\n const empty = { serverName: null, oneShotCmd: null, connection: null };\n\n // 1. Check --server=name parameter\n const argServer = command.args?.['server'] as string | undefined;\n if (argServer && typeof argServer === 'string') {\n const entry = shellServers.find((s) => s.name === argServer);\n if (!entry) {\n context.writer.writeError(\n `Server '${argServer}' not found or does not support shell access.`,\n );\n context.process.exit(1);\n return empty;\n }\n // One-shot command comes from command.value (text after \"ssh\" excluding flags)\n // Not applicable with --server=name since value would be empty\n return {\n serverName: argServer,\n oneShotCmd: null,\n connection: entry.connection,\n };\n }\n\n // 2. Check positional value: \"ssh dotnet\" or \"ssh dotnet ls -la\"\n const value = command.value?.trim();\n if (value) {\n const parts = value.split(/\\s+/);\n const candidateName = parts[0];\n const entry = shellServers.find((s) => s.name === candidateName);\n if (entry) {\n const oneShotCmd = parts.slice(1).join(' ') || null;\n return {\n serverName: candidateName,\n oneShotCmd,\n connection: entry.connection,\n };\n }\n // Value doesn't match any server — treat as error\n context.writer.writeError(\n `Server '${candidateName}' not found or does not support shell access.`,\n );\n context.process.exit(1);\n return empty;\n }\n\n // 3. No server specified — auto-select single server\n if (shellServers.length === 1) {\n return {\n serverName: shellServers[0].name,\n oneShotCmd: null,\n connection: shellServers[0].connection,\n };\n }\n\n // 4. Use default server if set and shell-capable\n const manager = context.services.get<CliServerManager>(\n CliServerManager_TOKEN,\n );\n if (manager?.defaultServer) {\n const entry = shellServers.find(\n (s) => s.name === manager.defaultServer,\n );\n if (entry) {\n return {\n serverName: entry.name,\n oneShotCmd: null,\n connection: entry.connection,\n };\n }\n }\n\n // 5. Multiple servers, no default — show interactive menu\n const selected = await context.reader.readSelectInline(\n 'Select a server for shell access:',\n shellServers.map((s) => ({\n label: s.name,\n value: s.name,\n })),\n );\n if (!selected) {\n context.writer.writeInfo('Shell cancelled.');\n return empty;\n }\n const entry = shellServers.find((s) => s.name === selected)!;\n return {\n serverName: selected,\n oneShotCmd: null,\n connection: entry.connection,\n };\n }\n\n private async executeInteractive(\n connection: CliServerConnection,\n serverName: string,\n context: ICliExecutionContext,\n ): Promise<void> {\n this.context = context;\n\n const cols = context.terminal.cols;\n const rows = context.terminal.rows;\n const wsUrl = this.buildShellUrl(connection, cols, rows);\n\n context.spinner?.show(`Connecting to ${serverName}...`);\n\n return new Promise<void>((resolve) => {\n try {\n this.socket = new WebSocket(wsUrl);\n } catch (e: any) {\n context.spinner?.hide();\n context.writer.writeError(\n `Failed to connect to '${serverName}': ${e.message}`,\n );\n context.process.exit(1);\n resolve();\n return;\n }\n\n this.socket.onopen = () => {\n // Wait for 'ready' message before entering full-screen\n };\n\n this.socket.onmessage = (event) => {\n const msg = JSON.parse(event.data) as ServerShellMessage;\n\n switch (msg.type) {\n case 'ready':\n context.spinner?.hide();\n context.writer.writeInfo(\n `Connected to ${serverName} (${msg.os}, ${msg.shell})`,\n );\n context.enterFullScreenMode(this);\n // Reset terminal for shell: clear screen, cursor home, show cursor\n context.terminal.write('\\x1b[2J\\x1b[H\\x1b[?25h');\n break;\n\n case 'stdout':\n context.terminal.write(msg.data);\n break;\n\n case 'stderr':\n context.terminal.write(msg.data);\n break;\n\n case 'exit':\n context.exitFullScreenMode();\n context.writer.writeInfo(\n `Shell exited with code ${msg.code}.`,\n );\n if (msg.code !== 0) {\n context.process.exit(msg.code);\n }\n this.cleanup();\n resolve();\n break;\n\n case 'error':\n context.spinner?.hide();\n context.exitFullScreenMode();\n context.writer.writeError(\n `Server error: ${msg.message}`,\n );\n context.process.exit(1);\n this.cleanup();\n resolve();\n break;\n }\n };\n\n this.socket.onclose = () => {\n context.spinner?.hide();\n if (this.context) {\n context.exitFullScreenMode();\n context.writer.writeWarning(\n `Connection to '${serverName}' closed.`,\n );\n }\n this.cleanup();\n resolve();\n };\n\n this.socket.onerror = () => {\n context.spinner?.hide();\n context.writer.writeError(\n `WebSocket error connecting to '${serverName}'.`,\n );\n context.process.exit(1);\n this.cleanup();\n resolve();\n };\n });\n }\n\n private async executeOneShot(\n connection: CliServerConnection,\n serverName: string,\n cmd: string,\n context: ICliExecutionContext,\n ): Promise<void> {\n const cols = context.terminal.cols;\n const rows = context.terminal.rows;\n const wsUrl = this.buildShellUrl(connection, cols, rows, cmd);\n\n context.spinner?.show(`Running on ${serverName}...`);\n\n return new Promise<void>((resolve) => {\n try {\n this.socket = new WebSocket(wsUrl);\n } catch (e: any) {\n context.spinner?.hide();\n context.writer.writeError(\n `Failed to connect to '${serverName}': ${e.message}`,\n );\n context.process.exit(1);\n resolve();\n return;\n }\n\n this.socket.onmessage = (event) => {\n const msg = JSON.parse(event.data) as ServerShellMessage;\n\n switch (msg.type) {\n case 'ready':\n context.spinner?.hide();\n break;\n\n case 'stdout':\n context.writer.writeln(msg.data);\n break;\n\n case 'stderr':\n context.writer.writeError(msg.data);\n break;\n\n case 'exit':\n if (msg.code !== 0) {\n context.process.exit(msg.code);\n }\n this.cleanup();\n resolve();\n break;\n\n case 'error':\n context.spinner?.hide();\n context.writer.writeError(\n `Server error: ${msg.message}`,\n );\n context.process.exit(1);\n this.cleanup();\n resolve();\n break;\n }\n };\n\n this.socket.onclose = () => {\n context.spinner?.hide();\n this.cleanup();\n resolve();\n };\n\n this.socket.onerror = () => {\n context.spinner?.hide();\n context.writer.writeError(\n `WebSocket error connecting to '${serverName}'.`,\n );\n context.process.exit(1);\n this.cleanup();\n resolve();\n };\n });\n }\n\n private buildShellUrl(\n connection: CliServerConnection,\n cols: number,\n rows: number,\n cmd?: string,\n ): string {\n const baseUrl = connection.config.url.endsWith('/')\n ? connection.config.url.slice(0, -1)\n : connection.config.url;\n const wsBase = baseUrl\n .replace(/^https:/, 'wss:')\n .replace(/^http:/, 'ws:');\n\n let url = `${wsBase}/ws/v1/cli/shell?cols=${cols}&rows=${rows}`;\n if (cmd) {\n url += `&cmd=${encodeURIComponent(cmd)}`;\n }\n return url;\n }\n\n private cleanup(): void {\n if (this.socket) {\n this.socket.onmessage = null;\n this.socket.onclose = null;\n this.socket.onerror = null;\n if (\n this.socket.readyState === WebSocket.OPEN ||\n this.socket.readyState === WebSocket.CONNECTING\n ) {\n this.socket.close();\n }\n this.socket = null;\n }\n this.context = null;\n }\n}\n","import { ICliModule, CliProvider } from '@qodalis/cli-core';\nimport { CliServerCommandProcessor } from './cli-server-command-processor';\nimport { CliSshCommandProcessor } from './cli-ssh-command-processor';\n\nexport function createServerModule(): ICliModule {\n return {\n apiVersion: 2,\n name: '@qodalis/cli-server',\n description: 'Remote server command integration',\n priority: -10,\n processors: [new CliServerCommandProcessor(), new CliSshCommandProcessor()],\n services: [] as CliProvider[],\n };\n}\n","import {\n ITerminalOptions,\n ITerminalInitOnlyOptions,\n Terminal,\n} from '@xterm/xterm';\nimport { FitAddon } from '@xterm/addon-fit';\nimport { WebLinksAddon } from '@xterm/addon-web-links';\nimport { Unicode11Addon } from '@xterm/addon-unicode11';\nimport { SerializeAddon } from '@xterm/addon-serialize';\nimport {\n CliOptions,\n CliProvider,\n CliEngineSnapshot,\n ICliCommandProcessor,\n ICliModule,\n DefaultThemes,\n ICliCompletionProvider,\n ICliCompletionProvider_TOKEN,\n ICliTranslationService_TOKEN,\n} from '@qodalis/cli-core';\nimport { CliCommandExecutor } from '../executor/cli-command-executor';\nimport { CliCommandProcessorRegistry } from '../registry/cli-command-processor-registry';\nimport { CliExecutionContext } from '../context/cli-execution-context';\nimport { CliServiceContainer } from '../services/cli-service-container';\nimport { CliLogger } from '../services/cli-logger';\nimport { CliCommandHistory } from '../services/cli-command-history';\nimport {\n CliStateStoreManager,\n ICliStateStoreManager,\n} from '../state/cli-state-store-manager';\nimport { CliKeyValueStore } from '../storage/cli-key-value-store';\nimport { CliBoot } from '../services/cli-boot';\nimport { welcomeModule } from '../services/cli-welcome-message';\nimport { OverlayAddon } from '../addons/overlay';\nimport {\n CliBackgroundServiceRegistry_TOKEN,\n CliCommandHistory_TOKEN,\n CliModuleRegistry_TOKEN,\n CliProcessorsRegistry_TOKEN,\n CliStateStoreManager_TOKEN,\n ICliPingServerService_TOKEN,\n} from '../tokens';\nimport { CliDefaultPingServerService } from '../services/defaults/cli-default-ping-server.service';\nimport { CliEnvironment, ICliEnvironment_TOKEN } from '../services/cli-environment';\nimport { CliProcessRegistry, CliProcessRegistry_TOKEN } from '../services/cli-process-registry';\nimport { CliDragDropService } from '../services/cli-drag-drop.service';\nimport { ICliDragDropService_TOKEN } from '@qodalis/cli-core';\nimport { CliTranslationService } from '../services/cli-translation-service';\nimport { CliCommandCompletionProvider } from '../completion/cli-command-completion-provider';\nimport { CliParameterCompletionProvider } from '../completion/cli-parameter-completion-provider';\nimport { CliServiceNameCompletionProvider } from '../completion/cli-service-name-completion-provider';\nimport { CliPackageNameCompletionProvider } from '../completion/cli-package-name-completion-provider';\nimport { CliThemeNameCompletionProvider } from '../completion/cli-theme-name-completion-provider';\nimport { CliAliasNameCompletionProvider } from '../completion/cli-alias-name-completion-provider';\nimport { CliServerNameCompletionProvider } from '../completion/cli-server-name-completion-provider';\nimport { CliConfigKeyCompletionProvider } from '../completion/cli-config-key-completion-provider';\nimport {\n CliServerManager,\n CliServerManager_TOKEN,\n} from '../server/cli-server-manager';\nimport { createServerModule } from '../server/cli-server-module';\nimport { initWasmAccelerator } from '../wasm';\n\nexport interface CliEngineOptions extends CliOptions {\n terminalOptions?: Partial<ITerminalOptions & ITerminalInitOnlyOptions>;\n /** Optional snapshot to restore on start() */\n snapshot?: CliEngineSnapshot;\n}\n\nexport class CliEngine {\n private terminal!: Terminal;\n private fitAddon!: FitAddon;\n private serializeAddon!: SerializeAddon;\n private executionContext!: CliExecutionContext;\n private registry: CliCommandProcessorRegistry;\n private userModules: ICliModule[] = [];\n private pendingServices: CliProvider[] = [];\n private resizeObserver?: ResizeObserver;\n private resizeListener?: () => void;\n private wheelListener?: (e: WheelEvent) => void;\n private resizeVersion = 0;\n private resizeScheduled = false;\n private bootService?: CliBoot;\n private dragDropService?: CliDragDropService;\n\n constructor(\n private readonly container: HTMLElement,\n private readonly options?: CliEngineOptions,\n ) {\n this.registry = new CliCommandProcessorRegistry();\n }\n\n /**\n * Register a CLI module to be loaded on start().\n */\n registerModule(module: ICliModule): void {\n this.userModules.push(module);\n }\n\n /**\n * Register multiple CLI modules to be loaded on start().\n */\n registerModules(modules: ICliModule[]): void {\n this.userModules.push(...modules);\n }\n\n /**\n * Register a command processor to be loaded on start().\n * @deprecated Use registerModule() instead.\n */\n registerProcessor(processor: ICliCommandProcessor): void {\n this.userModules.push({\n apiVersion: 2,\n name: `__inline_${processor.command}`,\n processors: [processor],\n });\n }\n\n /**\n * Register multiple command processors to be loaded on start().\n * @deprecated Use registerModule() instead.\n */\n registerProcessors(processors: ICliCommandProcessor[]): void {\n this.userModules.push({\n apiVersion: 2,\n name: '__inline_processors',\n processors,\n });\n }\n\n /**\n * Register a service to be available in the service container.\n * Must be called before start().\n * @deprecated Use registerModule() with services instead.\n */\n registerService(token: string, value: any): void {\n this.pendingServices.push({ provide: token, useValue: value });\n }\n\n /**\n * Initialize the terminal, wire up services, boot modules, and show welcome message.\n */\n async start(): Promise<void> {\n // 0. Eagerly load WASM accelerator (fire-and-forget — JS fallback if unavailable)\n initWasmAccelerator().catch(() => {});\n\n // 1. Wait for container to have layout, then initialize xterm.js\n await this.waitForLayout();\n this.initializeTerminal();\n\n // 2. Initialize storage (IndexedDB)\n const store = new CliKeyValueStore();\n await store.initialize();\n\n // 3. Build service container\n const services = new CliServiceContainer();\n const logger = new CliLogger();\n const commandHistory = new CliCommandHistory(store);\n await commandHistory.initialize();\n\n services.set([{ provide: 'cli-key-value-store', useValue: store }]);\n\n const stateStoreManager = new CliStateStoreManager(\n services,\n this.registry,\n );\n\n const processRegistry = new CliProcessRegistry();\n\n services.set([\n {\n provide: CliStateStoreManager_TOKEN,\n useValue: stateStoreManager,\n },\n { provide: CliProcessorsRegistry_TOKEN, useValue: this.registry },\n { provide: CliCommandHistory_TOKEN, useValue: commandHistory },\n {\n provide: CliProcessRegistry_TOKEN,\n useValue: processRegistry,\n },\n ]);\n\n // Apply pending services registered before start()\n if (this.pendingServices.length > 0) {\n services.set(this.pendingServices);\n }\n\n // Register default services only if not already provided\n const pendingTokens = new Set(\n this.pendingServices.map((s) => s.provide),\n );\n\n if (!pendingTokens.has(ICliPingServerService_TOKEN)) {\n services.set([\n {\n provide: ICliPingServerService_TOKEN,\n useValue: new CliDefaultPingServerService(),\n },\n ]);\n }\n\n if (!pendingTokens.has(ICliEnvironment_TOKEN)) {\n services.set([\n {\n provide: ICliEnvironment_TOKEN,\n useValue: new CliEnvironment(),\n },\n ]);\n }\n\n services.set([{\n provide: ICliDragDropService_TOKEN,\n useValue: this.dragDropService,\n }]);\n\n const translator = new CliTranslationService();\n services.set([\n { provide: ICliTranslationService_TOKEN, useValue: translator },\n ]);\n\n // 4. Create boot service with registry and services\n this.bootService = new CliBoot(this.registry, services);\n\n // Register the module registry so debug/introspection commands can access it\n services.set([\n {\n provide: CliModuleRegistry_TOKEN,\n useValue: this.bootService.getModuleRegistry(),\n },\n ]);\n\n // 5. Create executor and execution context\n const executor = new CliCommandExecutor(this.registry);\n const terminalOptions = this.getTerminalOptions();\n\n this.executionContext = new CliExecutionContext(\n { services, logger, commandHistory, stateStoreManager, translator },\n this.terminal,\n executor,\n { ...(this.options ?? {}), terminalOptions },\n );\n\n this.executionContext.initializeTerminalListeners();\n\n // 5.5. Register background services registry in the service container\n services.set([{\n provide: CliBackgroundServiceRegistry_TOKEN,\n useValue: this.executionContext.backgroundServices,\n }]);\n\n // 6. Connect to configured servers (if any)\n const serverManager = new CliServerManager(this.registry);\n services.set([\n { provide: CliServerManager_TOKEN, useValue: serverManager },\n ]);\n\n if (this.options?.servers && this.options.servers.length > 0) {\n await serverManager.connectAll(this.options.servers, {\n warn: (msg) => console.warn(msg),\n info: (msg) => console.log(msg),\n }, this.executionContext.backgroundServices);\n }\n\n // 6.5. Prepend welcome module and server module\n const serverModule = createServerModule();\n const allModules = this.options?.snapshot\n ? [serverModule, ...this.userModules]\n : [welcomeModule, serverModule, ...this.userModules];\n\n // 7. Boot all modules (core + welcome + user modules)\n await this.bootService.boot(this.executionContext, allModules);\n\n // 8. Set up tab-completion providers\n const defaultProviders: ICliCompletionProvider[] = [\n new CliServiceNameCompletionProvider(this.executionContext.backgroundServices),\n new CliPackageNameCompletionProvider(services),\n new CliThemeNameCompletionProvider(),\n new CliAliasNameCompletionProvider(stateStoreManager),\n new CliServerNameCompletionProvider(serverManager),\n new CliConfigKeyCompletionProvider(this.registry),\n new CliCommandCompletionProvider(this.registry),\n new CliParameterCompletionProvider(this.registry, executor),\n ];\n\n // Collect plugin-registered providers (multi-service)\n let pluginProviders: ICliCompletionProvider[] = [];\n try {\n pluginProviders =\n services.get<ICliCompletionProvider[]>(\n ICliCompletionProvider_TOKEN,\n ) ?? [];\n } catch {\n // No plugin providers registered — that's fine\n }\n\n this.executionContext.completionEngine.setProviders([\n ...pluginProviders,\n ...defaultProviders,\n ]);\n\n // 9. Run onAfterBoot hooks sorted by priority (lower first)\n const sorted = [...allModules].sort(\n (a, b) => (a.priority ?? 0) - (b.priority ?? 0),\n );\n for (const module of sorted) {\n if (module.onAfterBoot) {\n try {\n await module.onAfterBoot(this.executionContext);\n } catch (e) {\n console.error(\n `Error in onAfterBoot for module \"${module.name}\":`,\n e,\n );\n }\n }\n }\n\n // 10. Restore from snapshot if provided\n if (this.options?.snapshot) {\n await this.restoreSnapshot(this.options.snapshot);\n }\n }\n\n /**\n * Clean up terminal and event listeners.\n */\n destroy(): void {\n // 1. Dispose execution context (stops background services, cleans up managed timers)\n this.executionContext?.dispose();\n\n // 2. Call onDestroy on all registered modules\n if (this.bootService && this.executionContext) {\n const modules = this.bootService.getModuleRegistry().getAll();\n for (const module of modules) {\n if (module.onDestroy) {\n try {\n module.onDestroy(this.executionContext);\n } catch (e) {\n console.error(`Error in onDestroy for module \"${module.name}\":`, e);\n }\n }\n }\n }\n\n if (this.resizeListener) {\n window.removeEventListener('resize', this.resizeListener);\n }\n if (this.wheelListener) {\n this.container.removeEventListener('wheel', this.wheelListener);\n }\n this.resizeVersion = -1;\n this.resizeScheduled = false;\n this.resizeObserver?.disconnect();\n this.dragDropService?.destroy();\n this.terminal?.dispose();\n }\n\n /**\n * Focus the terminal and fit to container.\n */\n focus(): void {\n requestAnimationFrame(() => {\n this.safeFit();\n this.terminal?.focus();\n });\n }\n\n /**\n * Get the underlying xterm.js Terminal instance.\n */\n getTerminal(): Terminal {\n return this.terminal;\n }\n\n /**\n * Get the execution context.\n */\n getContext(): CliExecutionContext {\n return this.executionContext;\n }\n\n /**\n * Get the command processor registry.\n */\n getRegistry(): CliCommandProcessorRegistry {\n return this.registry;\n }\n\n /**\n * Execute a command programmatically.\n */\n async execute(command: string): Promise<void> {\n if (this.executionContext) {\n await this.executionContext.executor.executeCommand(\n command,\n this.executionContext,\n );\n }\n }\n\n /**\n * Capture a snapshot of the current engine state.\n * Can only be called after start().\n */\n snapshot(): CliEngineSnapshot {\n if (!this.executionContext) {\n throw new Error('Cannot snapshot before engine has started');\n }\n\n const stateStoreManager = this.executionContext.services.get<ICliStateStoreManager>(\n CliStateStoreManager_TOKEN,\n );\n\n return {\n version: 1,\n timestamp: Date.now(),\n terminal: {\n serializedBuffer: this.serializeAddon.serialize(),\n cols: this.terminal.cols,\n rows: this.terminal.rows,\n },\n commandHistory: this.executionContext.commandHistory.getHistory(),\n stateStores: stateStoreManager.getStoreEntries(),\n };\n }\n\n /**\n * Restore engine state from a snapshot.\n * Note: If the target terminal has different dimensions than the snapshot\n * source, the restored content may reflow differently.\n */\n private async restoreSnapshot(snap: CliEngineSnapshot): Promise<void> {\n // Restore terminal buffer (await the write to ensure buffer is fully applied)\n if (snap.terminal.serializedBuffer) {\n await new Promise<void>((resolve) => {\n this.terminal.write(snap.terminal.serializedBuffer, resolve);\n });\n }\n\n // Restore command history\n await this.executionContext.commandHistory.setHistory(snap.commandHistory);\n\n // Restore state stores\n const stateStoreManager = this.executionContext.services.get<ICliStateStoreManager>(\n CliStateStoreManager_TOKEN,\n );\n for (const entry of snap.stateStores) {\n const store = stateStoreManager.getStateStore(entry.name);\n store.updateState(entry.state);\n }\n\n // No showPrompt() here — the serialized buffer already contains\n // the prompt visually. The execution context's CommandLineMode\n // (set up by initializeTerminalListeners) handles new input.\n }\n\n private getTerminalOptions(): ITerminalOptions & ITerminalInitOnlyOptions {\n return {\n cursorBlink: true,\n allowProposedApi: true,\n fontSize: 20,\n theme: DefaultThemes.default,\n convertEol: true,\n ...(this.options?.terminalOptions ?? {}),\n };\n }\n\n private initializeTerminal(): void {\n const opts = this.getTerminalOptions();\n this.terminal = new Terminal(opts);\n\n this.fitAddon = new FitAddon();\n this.terminal.loadAddon(this.fitAddon);\n this.terminal.loadAddon(new WebLinksAddon());\n this.terminal.loadAddon(new OverlayAddon());\n this.terminal.loadAddon(new Unicode11Addon());\n this.serializeAddon = new SerializeAddon();\n this.terminal.loadAddon(this.serializeAddon);\n\n this.terminal.open(this.container);\n this.fitAddon.fit();\n\n // Mark the container so the theme processor can update its background\n // when the theme changes, and set the initial background to match.\n this.container.classList.add('terminal-container');\n this.container.style.background = opts.theme?.background ?? '#000';\n\n // Prevent wheel events from scrolling the host page\n this.wheelListener = (e: WheelEvent) => e.preventDefault();\n this.container.addEventListener('wheel', this.wheelListener, {\n passive: false,\n });\n\n this.terminal.focus();\n this.handleResize();\n this.dragDropService = new CliDragDropService(this.container);\n }\n\n private handleResize(): void {\n this.resizeListener = () => this.safeFit();\n window.addEventListener('resize', this.resizeListener);\n\n this.resizeObserver = new ResizeObserver(() => this.safeFit());\n this.resizeObserver.observe(this.container);\n }\n\n /**\n * Call fitAddon.fit() only when the container has non-zero dimensions.\n * Prevents xterm from reflowing to minimal columns when the container\n * is hidden (e.g., via [hidden] or display:none on an ancestor).\n */\n private safeFit(): void {\n if (\n this.container.offsetWidth > 0 &&\n this.container.offsetHeight > 0\n ) {\n const oldCols = this.terminal.cols;\n this.fitAddon.fit();\n if (this.executionContext && oldCols !== this.terminal.cols) {\n this.resizeVersion++;\n if (!this.resizeScheduled) {\n this.resizeScheduled = true;\n this.deferResizeFix();\n }\n }\n }\n }\n\n /**\n * Chain write callbacks until the resize version stabilises.\n * Only the very last callback (version match) applies the fix,\n * so intermediate resize events cannot leave stale artefacts.\n */\n private deferResizeFix(): void {\n if (this.resizeVersion < 0) return; // destroyed\n const version = this.resizeVersion;\n this.terminal.write('', () => {\n if (this.resizeVersion < 0) return; // destroyed during wait\n if (this.resizeVersion !== version) {\n // Another resize happened — keep deferring\n this.deferResizeFix();\n return;\n }\n this.resizeScheduled = false;\n this.executionContext?.handleTerminalResize();\n });\n }\n\n /**\n * Wait until the container element has non-zero dimensions.\n * xterm.js requires the host element to be laid out before open() is called.\n */\n private waitForLayout(): Promise<void> {\n return new Promise<void>((resolve) => {\n const check = () => {\n if (\n this.container.offsetWidth > 0 &&\n this.container.offsetHeight > 0\n ) {\n resolve();\n return;\n }\n requestAnimationFrame(check);\n };\n check();\n });\n }\n}\n","import { Subject } from 'rxjs';\nimport {\n CliBackgroundColor,\n CliForegroundColor,\n ICliCommandProcessor,\n ICliExecutionContext,\n ICliExecutionProcess,\n ICliServiceProvider,\n ICliSpinner,\n ICliPercentageProgressBar,\n ICliTerminalWriter,\n ICliClipboard,\n ICliLogger,\n ICliStateStore,\n ICliInputReader,\n ICliTextAnimator,\n ICliManagedInterval,\n ICliManagedTimer,\n ICliBackgroundServiceRegistry,\n ICliUserSession,\n ICliKeyValueStore,\n ICliTranslationService,\n} from '@qodalis/cli-core';\n\nimport { CliCommandExecutor, ICliExecutionHost } from '../executor/cli-command-executor';\nimport { CliCommandProcessorRegistry } from '../registry/cli-command-processor-registry';\nimport { CliExecutionProcess } from '../context/cli-execution-process';\nimport { CliServiceContainer } from '../services/cli-service-container';\nimport { CliStateStoreManager } from '../state/cli-state-store-manager';\nimport { CliStateStoreManager_TOKEN, CliProcessorsRegistry_TOKEN } from '../tokens';\nimport { CliProcessRegistry, CliProcessRegistry_TOKEN } from '../services/cli-process-registry';\nimport { CliTranslationService } from '../services/cli-translation-service';\nimport { CliEnvironment, ICliEnvironment_TOKEN } from '../services/cli-environment';\n\n/**\n * Result of executing a command through the test harness.\n */\nexport interface CliTestResult {\n /** All stdout-equivalent lines (write, writeln, writeJson, etc.) */\n stdout: string[];\n /** All stderr-equivalent lines (writeError, writeWarning) */\n stderr: string[];\n /** The full stdout joined with newlines */\n output: string;\n /** The exit code of the last command (0 = success) */\n exitCode: number | undefined;\n /** Pipeline data produced by process.output() or auto-captured */\n data: any;\n /** Captured table outputs from writeTable() calls */\n tables: { headers: string[]; rows: string[][] }[];\n /** Captured list outputs from writeList() calls */\n lists: string[][];\n}\n\n/**\n * A headless CLI test harness that enables integration testing of the full\n * command execution pipeline without xterm.js or DOM dependencies.\n *\n * Usage:\n * ```typescript\n * const harness = new CliTestHarness();\n * harness.registerProcessor(new MyProcessor());\n * const result = await harness.execute('mycommand --flag value');\n * expect(result.output).toContain('expected text');\n * ```\n *\n * For pipes:\n * ```typescript\n * const result = await harness.execute('echo hello world | grep hello');\n * expect(result.output).toContain('hello world');\n * ```\n */\nexport class CliTestHarness {\n readonly registry: CliCommandProcessorRegistry;\n readonly executor: CliCommandExecutor;\n readonly services: CliServiceContainer;\n\n private readonly stateStoreManager: CliStateStoreManager;\n private readonly processRegistry: CliProcessRegistry;\n\n /** Current user session — set via setUserSession() */\n userSession?: ICliUserSession;\n\n /** Reader responses — set via setReaderResponses() for interactive commands */\n private readerResponses: any[] = [];\n\n constructor() {\n this.registry = new CliCommandProcessorRegistry();\n this.executor = new CliCommandExecutor(this.registry);\n this.services = new CliServiceContainer();\n this.processRegistry = new CliProcessRegistry();\n\n // Register an in-memory KV store\n this.services.set({\n provide: 'cli-key-value-store',\n useValue: createInMemoryKvStore(),\n });\n\n // Register core services\n this.services.set({\n provide: CliProcessRegistry_TOKEN,\n useValue: this.processRegistry,\n });\n\n this.services.set({\n provide: CliProcessorsRegistry_TOKEN,\n useValue: this.registry,\n });\n\n this.stateStoreManager = new CliStateStoreManager(\n this.services,\n this.registry,\n );\n\n this.services.set({\n provide: CliStateStoreManager_TOKEN,\n useValue: this.stateStoreManager,\n });\n\n // Register environment variable store\n this.services.set({\n provide: ICliEnvironment_TOKEN,\n useValue: new CliEnvironment(),\n });\n }\n\n /**\n * Register a service in the test container.\n */\n registerService(token: any, value: any): void {\n this.services.set({ provide: token, useValue: value });\n }\n\n /**\n * Register a command processor. If the processor has an `initialize()`\n * method, it will be called with a context wired to the harness services.\n */\n registerProcessor(processor: ICliCommandProcessor): void {\n this.registry.registerProcessor(processor);\n }\n\n /**\n * Register multiple command processors.\n */\n registerProcessors(processors: ICliCommandProcessor[]): void {\n for (const p of processors) {\n this.registry.registerProcessor(p);\n }\n }\n\n /**\n * Initialize all registered processors that have an `initialize()` method.\n * Call this after registering all services and processors.\n */\n async initializeProcessors(): Promise<void> {\n const ctx = this.createContext(createTestWriter());\n for (const p of this.registry.processors) {\n if (p.initialize) {\n await p.initialize(ctx);\n }\n }\n }\n\n /**\n * Set the active user session. Commands that check `context.userSession`\n * will see this session.\n */\n setUserSession(session: ICliUserSession): void {\n this.userSession = session;\n }\n\n /**\n * Queue reader responses for interactive prompts (readLine, readPassword, etc.).\n * Responses are consumed in order.\n */\n setReaderResponses(...responses: any[]): void {\n this.readerResponses = [...responses];\n }\n\n /**\n * Execute a command string through the full parsing → execution → piping pipeline.\n * Returns captured stdout, stderr, exit code, and pipeline data.\n */\n async execute(command: string): Promise<CliTestResult> {\n const writer = createTestWriter();\n const context = this.createContext(writer);\n\n await this.executor.executeCommand(command, context);\n\n return {\n stdout: writer.stdout,\n stderr: writer.stderr,\n output: writer.stdout.join('\\n'),\n exitCode: context.process.exitCode,\n data: context.process.data,\n tables: writer.tables,\n lists: writer.lists,\n };\n }\n\n private createContext(\n writer: TestWriter,\n ): ICliExecutionHost {\n const process = new CliExecutionProcess(null as any);\n const reader = createQueuedReader(this.readerResponses);\n\n const context: ICliExecutionHost = {\n writer,\n services: this.services,\n translator: new CliTranslationService(),\n spinner: createNoopSpinner(),\n progressBar: createNoopProgressBar(),\n textAnimator: createNoopTextAnimator(),\n onAbort: new Subject<void>(),\n terminal: {} as any,\n reader,\n executor: this.executor,\n clipboard: createNoopClipboard(),\n options: undefined,\n logger: createNoopLogger(),\n process,\n userSession: this.userSession,\n state: this.stateStoreManager.getStateStore('shared'),\n backgroundServices: createNoopBackgroundServices(),\n promptLength: 0,\n currentLine: '',\n cursorPosition: 0,\n showPrompt: () => {},\n setContextProcessor: () => {},\n setCurrentLine: () => {},\n clearLine: () => {},\n clearCurrentLine: () => {},\n refreshCurrentLine: () => {},\n enterFullScreenMode: () => {},\n exitFullScreenMode: () => {},\n createInterval: (cb: () => void, ms: number): ICliManagedInterval => {\n const id = setInterval(cb, ms);\n return {\n clear: () => clearInterval(id),\n setDelay: (newMs: number) => {\n clearInterval(id);\n setInterval(cb, newMs);\n },\n };\n },\n createTimeout: (cb: () => void, ms: number): ICliManagedTimer => {\n const id = setTimeout(cb, ms);\n return { clear: () => clearTimeout(id) };\n },\n };\n\n // Wire process back to context\n (process as any).context = context;\n\n return context;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Test writer — captures stdout and stderr\n// ---------------------------------------------------------------------------\n\ninterface TestWriter extends ICliTerminalWriter {\n stdout: string[];\n stderr: string[];\n tables: { headers: string[]; rows: string[][] }[];\n lists: string[][];\n}\n\nfunction createTestWriter(): TestWriter {\n const stdout: string[] = [];\n const stderr: string[] = [];\n const tables: { headers: string[]; rows: string[][] }[] = [];\n const lists: string[][] = [];\n\n return {\n stdout,\n stderr,\n tables,\n lists,\n write(text: string) { stdout.push(text); },\n writeln(text?: string) { stdout.push(text ?? ''); },\n writeSuccess(msg: string) { stdout.push(`[success] ${msg}`); },\n writeInfo(msg: string) { stdout.push(`[info] ${msg}`); },\n writeWarning(msg: string) { stderr.push(`[warn] ${msg}`); },\n writeError(msg: string) { stderr.push(`[error] ${msg}`); },\n wrapInColor(text: string, _color: CliForegroundColor) { return text; },\n wrapInBackgroundColor(text: string, _color: CliBackgroundColor) { return text; },\n writeJson(json: any) { stdout.push(JSON.stringify(json)); },\n writeToFile(_fn: string, _content: string) {},\n writeObjectsAsTable(objects: any[]) { stdout.push(JSON.stringify(objects)); },\n writeTable(headers: string[], rows: string[][]) {\n tables.push({ headers, rows });\n // Also push to stdout so output assertions can find table data\n stdout.push(headers.join('\\t'));\n for (const row of rows) {\n stdout.push(row.join('\\t'));\n }\n },\n writeDivider() {},\n writeList(items: string[], _options?: any) {\n lists.push(items);\n for (const item of items) {\n stdout.push(item);\n }\n },\n writeKeyValue(entries: any, _options?: any) {\n if (typeof entries === 'object' && !Array.isArray(entries)) {\n for (const [k, v] of Object.entries(entries)) {\n stdout.push(`${k}: ${v}`);\n }\n }\n },\n writeColumns(items: string[], _options?: any) {\n for (const item of items) {\n stdout.push(item);\n }\n },\n };\n}\n\n// ---------------------------------------------------------------------------\n// Noop stubs for context dependencies\n// ---------------------------------------------------------------------------\n\nfunction createNoopSpinner(): ICliSpinner {\n return {\n show() {},\n hide() {},\n setText() {},\n isRunning: false,\n };\n}\n\nfunction createNoopProgressBar(): ICliPercentageProgressBar {\n return {\n show() {},\n update() {},\n hide() {},\n complete() {},\n setText() {},\n isRunning: false,\n };\n}\n\nfunction createNoopTextAnimator(): ICliTextAnimator {\n return {\n show() {},\n hide() {},\n showText: async () => {},\n isRunning: false,\n };\n}\n\nfunction createNoopLogger(): ICliLogger {\n return {\n log() {},\n info() {},\n warn() {},\n error() {},\n debug() {},\n setCliLogLevel() {},\n };\n}\n\nfunction createNoopClipboard(): ICliClipboard {\n return {\n write: async () => {},\n read: async () => '',\n };\n}\n\nfunction createQueuedReader(queue: any[]): ICliInputReader {\n let index = 0;\n const next = () => queue[index++];\n return {\n readLine: async () => next() ?? '',\n readPassword: async () => next() ?? '',\n readConfirm: async () => next() ?? false,\n readSelect: async () => next() ?? '',\n readSelectInline: async () => next() ?? '',\n readMultiSelect: async () => next() ?? [],\n readNumber: async () => next() ?? 0,\n };\n}\n\nfunction createNoopBackgroundServices(): ICliBackgroundServiceRegistry {\n return {\n register: () => {},\n unregister: () => {},\n get: () => undefined as any,\n getAll: () => [],\n destroyAll: async () => {},\n } as any;\n}\n\nfunction createInMemoryKvStore(): ICliKeyValueStore {\n const store = new Map<string, any>();\n return {\n get: async <T = any>(key: string) => store.get(key) as T | undefined,\n set: async (key: string, value: any) => { store.set(key, value); },\n remove: async (key: string) => { store.delete(key); },\n clear: async () => { store.clear(); },\n };\n}\n"]}