@qodalis/cli-files 2.0.0-beta.3 → 2.0.0-beta.5
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.
- package/package.json +2 -2
- package/public-api.js +1 -1
- package/public-api.js.map +1 -1
- package/public-api.mjs +1 -1
- package/public-api.mjs.map +1 -1
- package/umd/index.global.js +1 -1
package/public-api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../packages/plugins/files/src/lib/interfaces/i-file-system-service.ts","../../packages/plugins/files/src/lib/version.ts","../../packages/plugins/files/src/lib/processors/cli-ls-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-cd-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-pwd-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-mkdir-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-rmdir-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-touch-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-cat-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-echo-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-rm-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-cp-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-mv-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tree-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-head-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tail-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-wc-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-find-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-grep-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tac-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-basename-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-dirname-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-sort-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-uniq-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-cut-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-paste-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tr-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-stat-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-chmod-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-chown-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-du-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-ln-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-sed-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-awk-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-diff-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tee-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-xargs-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-sh-command-processor.ts","../../packages/plugins/files/src/lib/services/indexed-db-file-system.service.ts","../../packages/plugins/files/src/lib/services/server-file-system.service.ts","../../packages/plugins/files/src/lib/services/virtual-fs-file-transfer.service.ts","../../packages/plugins/files/src/lib/completion/file-path-completion-provider.ts","../../packages/plugins/files/src/public-api.ts"],"names":["DefaultLibraryAuthor","CliForegroundColor","regex","token","idx","i","j","DEFAULT_HOME","createSeedFileSystem","BrowserFileTransferService","ICliCompletionProvider_TOKEN","ICliFileTransferService_TOKEN","ICliDragDropService_TOKEN"],"mappings":"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","file":"public-api.js","sourcesContent":["import { ICliOwnership } from '@qodalis/cli-core';\nimport { IFileNode } from './i-file-node';\n\nexport const IFileSystemService_TOKEN = 'cli-file-system-service';\n\n/**\n * Abstraction for virtual filesystem operations.\n */\nexport interface IFileSystemService {\n // Navigation\n getCurrentDirectory(): string;\n setCurrentDirectory(path: string): void;\n resolvePath(path: string): string;\n\n // Home directory (used for ~ resolution)\n getHomePath(): string;\n setHomePath(path: string): void;\n\n // User context (used for ownership defaults and permission checks)\n setCurrentUser(uid: string, groups: string[]): void;\n\n // Read operations\n getNode(path: string): IFileNode | null;\n listDirectory(path: string): IFileNode[];\n readFile(path: string): string | null;\n exists(path: string): boolean;\n isDirectory(path: string): boolean;\n\n // Write operations\n createDirectory(path: string, recursive?: boolean): void;\n createFile(path: string, content?: string): void;\n writeFile(path: string, content: string, append?: boolean): void;\n remove(path: string, recursive?: boolean): void;\n copy(src: string, dest: string, recursive?: boolean): void;\n move(src: string, dest: string): void;\n\n // Permissions\n chmod(path: string, permissions: string): void;\n chown(path: string, ownership: ICliOwnership): void;\n\n // Persistence\n initialize(): Promise<void>;\n persist(): Promise<void>;\n}\n","\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.3';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport {\n IFileSystemService,\n IFileSystemService_TOKEN,\n IFileNode,\n} from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliLsCommandProcessor implements ICliCommandProcessor {\n command = 'ls';\n description = 'List directory contents';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📋', module: 'file management' };\n\n parameters = [\n {\n name: 'all',\n aliases: ['a'],\n description: 'Show hidden files (starting with .)',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'long',\n aliases: ['l'],\n description: 'Use long listing format',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const targetPath = command.value || fs.getCurrentDirectory();\n const showAll = command.args['all'] || command.args['a'];\n const longFormat = command.args['long'] || command.args['l'];\n\n try {\n const entries = fs.listDirectory(targetPath);\n const filtered = showAll\n ? entries\n : entries.filter((e) => !e.name.startsWith('.'));\n\n if (filtered.length === 0) {\n return;\n }\n\n filtered.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'directory' ? -1 : 1;\n }\n return a.name.localeCompare(b.name);\n });\n\n if (longFormat) {\n this.writeLongFormat(filtered, context);\n } else {\n this.writeShortFormat(filtered, context);\n }\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n context.writer.writeln(this.description!);\n context.writer.writeln();\n context.writer.writeln('Usage: ls [path] [--all] [--long]');\n }\n\n private writeLongFormat(\n entries: IFileNode[],\n context: ICliExecutionContext,\n ): void {\n const { writer } = context;\n for (const entry of entries) {\n const typeChar = entry.type === 'directory' ? 'd' : '-';\n const perms =\n entry.permissions ||\n (entry.type === 'directory' ? 'rwxr-xr-x' : 'rw-r--r--');\n const owner = entry.ownership?.uid || '-';\n const group = entry.ownership?.gid || '-';\n const size = entry.type === 'file' ? entry.size.toString() : '-';\n const date = new Date(entry.modifiedAt);\n const dateStr = date.toLocaleDateString('en-US', {\n month: 'short',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n });\n const name =\n entry.type === 'directory'\n ? writer.wrapInColor(entry.name, CliForegroundColor.Cyan)\n : entry.name;\n\n writer.writeln(\n `${typeChar}${perms} ${owner.padEnd(8)} ${group.padEnd(8)} ${size.padStart(6)} ${dateStr} ${name}`,\n );\n }\n }\n\n private writeShortFormat(\n entries: IFileNode[],\n context: ICliExecutionContext,\n ): void {\n const { writer } = context;\n const names = entries.map((e) =>\n e.type === 'directory'\n ? writer.wrapInColor(e.name, CliForegroundColor.Cyan)\n : e.name,\n );\n writer.writeln(names.join(' '));\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliCdCommandProcessor implements ICliCommandProcessor {\n command = 'cd';\n description = 'Change the current working directory';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📁', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const target = command.value || '~';\n\n try {\n fs.setCurrentDirectory(target);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliPwdCommandProcessor implements ICliCommandProcessor {\n command = 'pwd';\n description = 'Print the current working directory';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n metadata = { icon: '📂', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n context.writer.writeln(fs.getCurrentDirectory());\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliMkdirCommandProcessor implements ICliCommandProcessor {\n command = 'mkdir';\n description = 'Create directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📁', module: 'file management' };\n\n parameters = [\n {\n name: 'parents',\n aliases: ['p'],\n description: 'Create parent directories as needed',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n const recursive = command.args['parents'] || command.args['p'];\n\n if (!path) {\n context.writer.writeError('mkdir: missing operand');\n return;\n }\n\n try {\n fs.createDirectory(path, recursive);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliRmdirCommandProcessor implements ICliCommandProcessor {\n command = 'rmdir';\n description = 'Remove empty directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🗑', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n\n if (!path) {\n context.writer.writeError('rmdir: missing operand');\n return;\n }\n\n try {\n const node = fs.getNode(path);\n if (!node) {\n context.writer.writeError(\n `rmdir: ${path}: No such file or directory`,\n );\n return;\n }\n if (node.type !== 'directory') {\n context.writer.writeError(`rmdir: ${path}: Not a directory`);\n return;\n }\n if (node.children && node.children.length > 0) {\n context.writer.writeError(\n `rmdir: ${path}: Directory not empty`,\n );\n return;\n }\n fs.remove(path);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTouchCommandProcessor implements ICliCommandProcessor {\n command = 'touch';\n description = 'Create an empty file or update its timestamp';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📄', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n\n if (!path) {\n context.writer.writeError('touch: missing file operand');\n return;\n }\n\n try {\n fs.createFile(path);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliCatCommandProcessor implements ICliCommandProcessor {\n command = 'cat';\n description = 'Display file contents';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📖', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n\n if (!path) {\n context.writer.writeError('cat: missing file operand');\n return;\n }\n\n try {\n const content = fs.readFile(path);\n if (content !== null) {\n context.writer.writeln(content);\n }\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliEchoCommandProcessor implements ICliCommandProcessor {\n command = 'echo';\n description = 'Display text or redirect output to a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n extendsProcessor = true;\n originalProcessor?: ICliCommandProcessor;\n metadata = { icon: '💬', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const afterEcho = command.value || '';\n\n // Check for file redirection syntax\n const hasRedirection = />>?\\s*.+$/.test(afterEcho);\n\n if (!hasRedirection) {\n // No redirection — delegate to the original echo processor\n if (this.originalProcessor) {\n await this.originalProcessor.processCommand(command, context);\n } else {\n context.writer.writeln(afterEcho);\n }\n return;\n }\n\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n let text: string;\n let filePath: string;\n let append = false;\n\n const appendMatch = afterEcho.match(/^(.*?)\\s*>>\\s*(.+)$/);\n const overwriteMatch = afterEcho.match(/^(.*?)\\s*>\\s*(.+)$/);\n\n if (appendMatch) {\n text = appendMatch[1].trim();\n filePath = appendMatch[2].trim();\n append = true;\n } else {\n text = overwriteMatch![1].trim();\n filePath = overwriteMatch![2].trim();\n }\n\n // Remove surrounding quotes\n if (\n (text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))\n ) {\n text = text.slice(1, -1);\n }\n\n // Interpret escape sequences (\\n, \\t, etc.)\n text = text.replace(/\\\\([\\\\nrtv0])/g, (_, ch: string) => {\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 try {\n fs.writeFile(filePath, text + '\\n', append);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliRmCommandProcessor implements ICliCommandProcessor {\n command = 'rm';\n description = 'Remove files or directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🗑', module: 'file management' };\n\n parameters = [\n {\n name: 'recursive',\n aliases: ['r', 'R'],\n description: 'Remove directories and their contents recursively',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'force',\n aliases: ['f'],\n description: 'Ignore nonexistent files, never prompt',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n const recursive =\n command.args['recursive'] || command.args['r'] || command.args['R'];\n const force = command.args['force'] || command.args['f'];\n\n if (!path) {\n context.writer.writeError('rm: missing operand');\n return;\n }\n\n try {\n if (!fs.exists(path)) {\n if (!force) {\n context.writer.writeError(\n `rm: ${path}: No such file or directory`,\n );\n }\n return;\n }\n\n if (fs.isDirectory(path) && !recursive) {\n context.writer.writeError(`rm: ${path}: Is a directory`);\n return;\n }\n\n fs.remove(path, recursive);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliCpCommandProcessor implements ICliCommandProcessor {\n command = 'cp';\n description = 'Copy files and directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📋', module: 'file management' };\n\n parameters = [\n {\n name: 'recursive',\n aliases: ['r', 'R'],\n description: 'Copy directories recursively',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const recursive =\n command.args['recursive'] || command.args['r'] || command.args['R'];\n\n const parts = this.parseArgs(command);\n\n if (parts.length < 2) {\n context.writer.writeError('cp: missing destination file operand');\n context.writer.writeln(\n 'Usage: cp [--recursive] <source> <destination>',\n );\n return;\n }\n\n const src = parts[0];\n const dest = parts[1];\n\n try {\n fs.copy(src, dest, recursive);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n\n private parseArgs(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter((t) => t && !t.startsWith('--') && !t.startsWith('-'));\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliMvCommandProcessor implements ICliCommandProcessor {\n command = 'mv';\n description = 'Move or rename files and directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📦', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const parts = this.parseArgs(command);\n\n if (parts.length < 2) {\n context.writer.writeError('mv: missing destination file operand');\n context.writer.writeln('Usage: mv <source> <destination>');\n return;\n }\n\n const src = parts[0];\n const dest = parts[1];\n\n try {\n fs.move(src, dest);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n\n private parseArgs(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter((t) => t && !t.startsWith('--') && !t.startsWith('-'));\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport {\n IFileSystemService,\n IFileSystemService_TOKEN,\n IFileNode,\n} from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTreeCommandProcessor implements ICliCommandProcessor {\n command = 'tree';\n description = 'Display directory tree structure';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '🌳', module: 'file management' };\n\n parameters = [\n {\n name: 'depth',\n aliases: ['L'],\n description: 'Max display depth of the directory tree',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const targetPath = command.value || fs.getCurrentDirectory();\n const maxDepth = command.args['depth']\n ? parseInt(command.args['depth'])\n : command.args['L']\n ? parseInt(command.args['L'])\n : Infinity;\n\n try {\n const node = fs.getNode(targetPath);\n if (!node) {\n context.writer.writeError(\n `tree: ${targetPath}: No such file or directory`,\n );\n return;\n }\n if (node.type !== 'directory') {\n context.writer.writeError(\n `tree: ${targetPath}: Not a directory`,\n );\n return;\n }\n\n const resolvedPath = fs.resolvePath(targetPath);\n context.writer.writeln(\n context.writer.wrapInColor(\n resolvedPath,\n CliForegroundColor.Cyan,\n ),\n );\n\n const counts = { dirs: 0, files: 0 };\n this.printTree(node, '', true, 0, maxDepth, context, counts);\n\n context.writer.writeln();\n context.writer.writeln(\n `${counts.dirs} directories, ${counts.files} files`,\n );\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n\n private printTree(\n node: IFileNode,\n prefix: string,\n isRoot: boolean,\n depth: number,\n maxDepth: number,\n context: ICliExecutionContext,\n counts: { dirs: number; files: number },\n ): void {\n if (!node.children || depth >= maxDepth) {\n return;\n }\n\n const children = [...node.children].sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'directory' ? -1 : 1;\n }\n return a.name.localeCompare(b.name);\n });\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const isLast = i === children.length - 1;\n const connector = isLast ? '└── ' : '├── ';\n const childPrefix = isLast ? ' ' : '│ ';\n\n const displayName =\n child.type === 'directory'\n ? context.writer.wrapInColor(\n child.name,\n CliForegroundColor.Cyan,\n )\n : child.name;\n\n context.writer.writeln(`${prefix}${connector}${displayName}`);\n\n if (child.type === 'directory') {\n counts.dirs++;\n this.printTree(\n child,\n prefix + childPrefix,\n false,\n depth + 1,\n maxDepth,\n context,\n counts,\n );\n } else {\n counts.files++;\n }\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliHeadCommandProcessor implements ICliCommandProcessor {\n command = 'head';\n description = 'Display the first lines of a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '⬆️', module: 'file management' };\n\n parameters = [\n {\n name: 'lines',\n aliases: ['n'],\n description: 'Number of lines to display (default: 10)',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const count = parseInt(\n command.args['lines'] || command.args['n'] || '10',\n 10,\n );\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n const lines = content.split('\\n');\n const selected = lines.slice(0, count);\n context.writer.writeln(selected.join('\\n'));\n return;\n }\n context.writer.writeError('head: missing file operand');\n return;\n }\n\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`head: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) continue;\n\n if (paths.length > 1) {\n if (i > 0) context.writer.writeln();\n context.writer.writeln(`==> ${path} <==`);\n }\n\n const lines = content.split('\\n');\n const selected = lines.slice(0, count);\n context.writer.writeln(selected.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`head: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTailCommandProcessor implements ICliCommandProcessor {\n command = 'tail';\n description = 'Display the last lines of a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '⬇️', module: 'file management' };\n\n parameters = [\n {\n name: 'lines',\n aliases: ['n'],\n description: 'Number of lines to display (default: 10)',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const count = parseInt(\n command.args['lines'] || command.args['n'] || '10',\n 10,\n );\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n const lines = content.split('\\n');\n const selected = lines.slice(-count);\n context.writer.writeln(selected.join('\\n'));\n return;\n }\n context.writer.writeError('tail: missing file operand');\n return;\n }\n\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`tail: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) continue;\n\n if (paths.length > 1) {\n if (i > 0) context.writer.writeln();\n context.writer.writeln(`==> ${path} <==`);\n }\n\n const lines = content.split('\\n');\n const selected = lines.slice(-count);\n context.writer.writeln(selected.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`tail: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliWcCommandProcessor implements ICliCommandProcessor {\n command = 'wc';\n description = 'Print line, word, and character counts';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '#️⃣', module: 'file management' };\n\n parameters = [\n {\n name: 'lines',\n aliases: ['l'],\n description: 'Print only the line count',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'words',\n aliases: ['w'],\n description: 'Print only the word count',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'chars',\n aliases: ['c'],\n description: 'Print only the character count',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const showLines =\n command.args['lines'] || command.args['l'] || false;\n const showWords =\n command.args['words'] || command.args['w'] || false;\n const showChars =\n command.args['chars'] || command.args['c'] || false;\n const showAll = !showLines && !showWords && !showChars;\n\n const paths = this.parsePaths(command);\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n const lineCount = content === '' ? 0 : content.split('\\n').length;\n const wordCount =\n content.trim() === ''\n ? 0\n : content.trim().split(/\\s+/).length;\n const charCount = content.length;\n\n const parts: string[] = [];\n if (showAll || showLines) parts.push(String(lineCount).padStart(8));\n if (showAll || showWords) parts.push(String(wordCount).padStart(8));\n if (showAll || showChars) parts.push(String(charCount).padStart(8));\n\n context.writer.writeln(parts.join(''));\n return;\n }\n context.writer.writeError('wc: missing file operand');\n return;\n }\n\n let totalLines = 0;\n let totalWords = 0;\n let totalChars = 0;\n\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`wc: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path) ?? '';\n const lineCount = content === '' ? 0 : content.split('\\n').length;\n const wordCount =\n content.trim() === ''\n ? 0\n : content.trim().split(/\\s+/).length;\n const charCount = content.length;\n\n totalLines += lineCount;\n totalWords += wordCount;\n totalChars += charCount;\n\n const parts: string[] = [];\n if (showAll || showLines) parts.push(String(lineCount).padStart(8));\n if (showAll || showWords) parts.push(String(wordCount).padStart(8));\n if (showAll || showChars) parts.push(String(charCount).padStart(8));\n parts.push(` ${path}`);\n\n context.writer.writeln(parts.join(''));\n } catch (e: any) {\n context.writer.writeError(`wc: ${e.message}`);\n }\n }\n\n if (paths.length > 1) {\n const parts: string[] = [];\n if (showAll || showLines) parts.push(String(totalLines).padStart(8));\n if (showAll || showWords) parts.push(String(totalWords).padStart(8));\n if (showAll || showChars) parts.push(String(totalChars).padStart(8));\n parts.push(' total');\n context.writer.writeln(parts.join(''));\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport {\n IFileSystemService,\n IFileSystemService_TOKEN,\n IFileNode,\n} from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliFindCommandProcessor implements ICliCommandProcessor {\n command = 'find';\n description = 'Search for files and directories by name or type';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '🔍', module: 'file management' };\n\n parameters = [\n {\n name: 'name',\n description: 'Match filename pattern (glob: * and ? supported)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'type',\n description: 'Filter by type: f (file) or d (directory)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'maxdepth',\n description: 'Maximum directory depth to search',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const searchPath = this.parseSearchPath(command) || fs.getCurrentDirectory();\n const namePattern = command.args['name'] || null;\n const typeFilter = command.args['type'] || null;\n const maxDepth = command.args['maxdepth']\n ? parseInt(command.args['maxdepth'], 10)\n : Infinity;\n\n try {\n const node = fs.getNode(searchPath);\n if (!node) {\n context.writer.writeError(\n `find: '${searchPath}': No such file or directory`,\n );\n return;\n }\n if (node.type !== 'directory') {\n context.writer.writeError(\n `find: '${searchPath}': Not a directory`,\n );\n return;\n }\n\n const resolvedBase = fs.resolvePath(searchPath);\n const nameRegex = namePattern ? this.globToRegex(namePattern) : null;\n\n const results: string[] = [];\n this.walk(\n node,\n resolvedBase,\n 0,\n maxDepth,\n nameRegex,\n typeFilter,\n results,\n );\n\n for (const r of results) {\n context.writer.writeln(r);\n }\n } catch (e: any) {\n context.writer.writeError(`find: ${e.message}`);\n }\n }\n\n private parseSearchPath(command: CliProcessCommand): string | null {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n return tokens.length > 0 ? tokens[0] : null;\n }\n\n private globToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&');\n const regexStr = escaped.replace(/\\*/g, '.*').replace(/\\?/g, '.');\n return new RegExp(`^${regexStr}$`, 'i');\n }\n\n private walk(\n node: IFileNode,\n currentPath: string,\n depth: number,\n maxDepth: number,\n nameRegex: RegExp | null,\n typeFilter: string | null,\n results: string[],\n ): void {\n if (!node.children) return;\n\n for (const child of node.children) {\n const childPath =\n currentPath === '/'\n ? `/${child.name}`\n : `${currentPath}/${child.name}`;\n\n let matches = true;\n if (nameRegex && !nameRegex.test(child.name)) {\n matches = false;\n }\n if (typeFilter === 'f' && child.type !== 'file') {\n matches = false;\n }\n if (typeFilter === 'd' && child.type !== 'directory') {\n matches = false;\n }\n\n if (matches) {\n results.push(childPath);\n }\n\n if (child.type === 'directory' && depth < maxDepth) {\n this.walk(\n child,\n childPath,\n depth + 1,\n maxDepth,\n nameRegex,\n typeFilter,\n results,\n );\n }\n }\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport {\n IFileSystemService,\n IFileSystemService_TOKEN,\n IFileNode,\n} from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliGrepCommandProcessor implements ICliCommandProcessor {\n command = 'grep';\n description = 'Search file contents for a pattern';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '🔎', module: 'file management' };\n\n parameters = [\n {\n name: 'ignore-case',\n aliases: ['i'],\n description: 'Case-insensitive matching',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'recursive',\n aliases: ['r', 'R'],\n description: 'Recursively search directories',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'line-number',\n aliases: ['n'],\n description: 'Show line numbers',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'count',\n aliases: ['c'],\n description: 'Show only a count of matching lines per file',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'files-with-matches',\n aliases: ['l'],\n description: 'Show only filenames containing matches',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'invert-match',\n aliases: ['v'],\n description: 'Select non-matching lines',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const ignoreCase =\n command.args['ignore-case'] || command.args['i'] || false;\n const recursive =\n command.args['recursive'] ||\n command.args['r'] ||\n command.args['R'] ||\n false;\n const showLineNum =\n command.args['line-number'] || command.args['n'] || false;\n const countOnly =\n command.args['count'] || command.args['c'] || false;\n const filesOnly =\n command.args['files-with-matches'] || command.args['l'] || false;\n const invert =\n command.args['invert-match'] || command.args['v'] || false;\n\n const { pattern, paths } = this.parseArgs(command);\n if (!pattern) {\n context.writer.writeError(\n 'grep: missing pattern. Usage: grep [options] <pattern> <file>',\n );\n return;\n }\n if (paths.length === 0) {\n if (command.data != null) {\n let regex: RegExp;\n try {\n regex = new RegExp(pattern, ignoreCase ? 'gi' : 'g');\n } catch {\n context.writer.writeError(`grep: invalid pattern '${pattern}'`);\n return;\n }\n const content = typeof command.data === 'string'\n ? command.data\n : JSON.stringify(command.data);\n this.grepContent(content, null, regex, {\n ignoreCase, showLineNum, countOnly, filesOnly, invert,\n }, context, false);\n return;\n }\n context.writer.writeError(\n 'grep: missing file operand. Usage: grep [options] <pattern> <file>',\n );\n return;\n }\n\n let regex: RegExp;\n try {\n regex = new RegExp(pattern, ignoreCase ? 'gi' : 'g');\n } catch {\n context.writer.writeError(`grep: invalid pattern '${pattern}'`);\n return;\n }\n\n const filePaths: string[] = [];\n for (const p of paths) {\n try {\n if (!fs.exists(p)) {\n context.writer.writeError(\n `grep: ${p}: No such file or directory`,\n );\n continue;\n }\n if (fs.isDirectory(p)) {\n if (!recursive) {\n context.writer.writeError(\n `grep: ${p}: Is a directory`,\n );\n continue;\n }\n this.collectFiles(fs, fs.resolvePath(p), fs.getNode(p)!, filePaths);\n } else {\n filePaths.push(fs.resolvePath(p));\n }\n } catch (e: any) {\n context.writer.writeError(`grep: ${e.message}`);\n }\n }\n\n const multiFile = filePaths.length > 1;\n\n for (const filePath of filePaths) {\n try {\n const content = fs.readFile(filePath) ?? '';\n this.grepContent(content, filePath, regex, {\n ignoreCase, showLineNum, countOnly, filesOnly, invert,\n }, context, multiFile);\n } catch (e: any) {\n context.writer.writeError(`grep: ${filePath}: ${e.message}`);\n }\n }\n }\n\n private grepContent(\n content: string,\n filePath: string | null,\n regex: RegExp,\n options: {\n ignoreCase: boolean;\n showLineNum: boolean;\n countOnly: boolean;\n filesOnly: boolean;\n invert: boolean;\n },\n context: ICliExecutionContext,\n multiFile: boolean,\n ): void {\n const lines = content.split('\\n');\n let matchCount = 0;\n const matchingLines: { num: number; text: string }[] = [];\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const line = lines[lineIdx];\n regex.lastIndex = 0;\n const hasMatch = regex.test(line);\n const isMatch = options.invert ? !hasMatch : hasMatch;\n\n if (isMatch) {\n matchCount++;\n matchingLines.push({ num: lineIdx + 1, text: line });\n }\n }\n\n if (options.filesOnly) {\n if (matchCount > 0 && filePath) {\n context.writer.writeln(filePath);\n }\n } else if (options.countOnly) {\n const prefix = multiFile && filePath ? `${filePath}:` : '';\n context.writer.writeln(`${prefix}${matchCount}`);\n } else {\n for (const m of matchingLines) {\n const parts: string[] = [];\n if (multiFile && filePath) {\n parts.push(context.writer.wrapInColor(filePath, CliForegroundColor.Magenta));\n parts.push(':');\n }\n if (options.showLineNum) {\n parts.push(context.writer.wrapInColor(String(m.num), CliForegroundColor.Green));\n parts.push(':');\n }\n if (!options.invert) {\n regex.lastIndex = 0;\n const highlighted = m.text.replace(regex, (match) =>\n context.writer.wrapInColor(match, CliForegroundColor.Red),\n );\n parts.push(highlighted);\n } else {\n parts.push(m.text);\n }\n context.writer.writeln(parts.join(''));\n }\n }\n }\n\n private parseArgs(\n command: CliProcessCommand,\n ): { pattern: string | null; paths: string[] } {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n\n if (tokens.length === 0) {\n return { pattern: null, paths: [] };\n }\n if (tokens.length === 1) {\n return { pattern: tokens[0], paths: [] };\n }\n\n return {\n pattern: tokens[0],\n paths: tokens.slice(1),\n };\n }\n\n private collectFiles(\n fs: IFileSystemService,\n basePath: string,\n node: IFileNode,\n result: string[],\n ): void {\n if (!node.children) return;\n for (const child of node.children) {\n const childPath =\n basePath === '/'\n ? `/${child.name}`\n : `${basePath}/${child.name}`;\n if (child.type === 'file') {\n result.push(childPath);\n } else if (child.type === 'directory') {\n this.collectFiles(fs, childPath, child, result);\n }\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTacCommandProcessor implements ICliCommandProcessor {\n command = 'tac';\n description = 'Print file in reverse line order';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔄', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n const lines = content.split('\\n');\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n lines.reverse();\n context.writer.writeln(lines.join('\\n'));\n return;\n }\n context.writer.writeError('tac: missing file operand');\n return;\n }\n\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`tac: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) continue;\n\n if (paths.length > 1) {\n if (i > 0) context.writer.writeln();\n context.writer.writeln(`==> ${path} <==`);\n }\n\n const lines = content.split('\\n');\n // Filter trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n lines.reverse();\n context.writer.writeln(lines.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`tac: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliBasenameCommandProcessor implements ICliCommandProcessor {\n command = 'basename';\n description = 'Strip directory from path';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📛', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const tokens = this.parseTokens(command);\n\n if (tokens.length === 0) {\n context.writer.writeError('basename: missing operand');\n return;\n }\n\n const path = tokens[0];\n const suffix = tokens.length > 1 ? tokens[1] : undefined;\n\n // Handle root path\n if (path === '/') {\n context.writer.writeln('/');\n return;\n }\n\n // Remove trailing slashes\n const cleaned = path.replace(/\\/+$/, '') || '/';\n const parts = cleaned.split('/');\n let name = parts[parts.length - 1];\n\n // If after cleaning we got empty (shouldn't happen), fallback\n if (!name) {\n name = '/';\n }\n\n // Strip suffix if provided and name ends with it\n if (suffix && name.endsWith(suffix) && name !== suffix) {\n name = name.slice(0, -suffix.length);\n }\n\n context.writer.writeln(name);\n }\n\n private parseTokens(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliDirnameCommandProcessor implements ICliCommandProcessor {\n command = 'dirname';\n description = 'Strip last component from path';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📂', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const tokens = this.parseTokens(command);\n\n if (tokens.length === 0) {\n context.writer.writeError('dirname: missing operand');\n return;\n }\n\n const path = tokens[0];\n\n // Handle root path\n if (path === '/') {\n context.writer.writeln('/');\n return;\n }\n\n // Remove trailing slashes\n const cleaned = path.replace(/\\/+$/, '') || '/';\n\n // No slash at all => bare filename => return '.'\n if (!cleaned.includes('/')) {\n context.writer.writeln('.');\n return;\n }\n\n const parts = cleaned.split('/');\n parts.pop(); // remove last component\n\n let dir = parts.join('/');\n // If dir is empty after removing last component (e.g. \"/home\" -> \"\")\n if (!dir) {\n dir = '/';\n }\n\n context.writer.writeln(dir);\n }\n\n private parseTokens(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliSortCommandProcessor implements ICliCommandProcessor {\n command = 'sort';\n description = 'Sort lines of text files';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '\\u{1F524}', module: 'file management' };\n\n parameters = [\n {\n name: 'reverse',\n aliases: ['r'],\n description: 'Reverse the result of comparisons',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'numeric-sort',\n aliases: ['n'],\n description: 'Compare according to string numerical value',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'unique',\n aliases: ['u'],\n description: 'Output only unique lines',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'key',\n aliases: ['k'],\n description: 'Sort by a specific field (1-indexed)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'field-separator',\n aliases: ['t'],\n description: 'Use a specific field delimiter',\n required: false,\n type: 'string' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const reverse = !!command.args['r'] || !!command.args['reverse'];\n const numeric = !!command.args['n'] || !!command.args['numeric-sort'];\n const unique = !!command.args['u'] || !!command.args['unique'];\n const keyField = command.args['k'] || command.args['key'];\n const delimiter = command.args['t'] || command.args['field-separator'];\n\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n let lines = content.split('\\n');\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const keyIndex = keyField\n ? parseInt(keyField, 10) - 1\n : undefined;\n\n lines.sort((a, b) => {\n let va: string | number = a;\n let vb: string | number = b;\n\n if (keyIndex !== undefined && keyIndex >= 0) {\n const sepRegex = delimiter\n ? new RegExp(\n delimiter.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&',\n ),\n )\n : /\\s+/;\n const fieldsA = a.split(sepRegex);\n const fieldsB = b.split(sepRegex);\n va = fieldsA[keyIndex] || '';\n vb = fieldsB[keyIndex] || '';\n }\n\n if (numeric) {\n const na = parseFloat(va as string) || 0;\n const nb = parseFloat(vb as string) || 0;\n return na - nb;\n }\n\n return (va as string).localeCompare(vb as string);\n });\n\n if (unique) {\n lines = lines.filter(\n (line, i, arr) => i === 0 || line !== arr[i - 1],\n );\n }\n\n if (reverse) {\n lines.reverse();\n }\n\n context.writer.writeln(lines.join('\\n'));\n return;\n }\n context.writer.writeError('sort: missing file operand');\n return;\n }\n\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`sort: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) {\n context.writer.writeError(\n `sort: ${path}: No such file or directory`,\n );\n continue;\n }\n\n let lines = content.split('\\n');\n // Remove trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const keyIndex = keyField\n ? parseInt(keyField, 10) - 1\n : undefined;\n\n lines.sort((a, b) => {\n let va: string | number = a;\n let vb: string | number = b;\n\n if (keyIndex !== undefined && keyIndex >= 0) {\n const sepRegex = delimiter\n ? new RegExp(\n delimiter.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&',\n ),\n )\n : /\\s+/;\n const fieldsA = a.split(sepRegex);\n const fieldsB = b.split(sepRegex);\n va = fieldsA[keyIndex] || '';\n vb = fieldsB[keyIndex] || '';\n }\n\n if (numeric) {\n const na = parseFloat(va as string) || 0;\n const nb = parseFloat(vb as string) || 0;\n return na - nb;\n }\n\n return (va as string).localeCompare(vb as string);\n });\n\n if (unique) {\n lines = lines.filter(\n (line, i, arr) => i === 0 || line !== arr[i - 1],\n );\n }\n\n if (reverse) {\n lines.reverse();\n }\n\n context.writer.writeln(lines.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`sort: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliUniqCommandProcessor implements ICliCommandProcessor {\n command = 'uniq';\n description = 'Filter adjacent duplicate lines from a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '\\u{1F501}', module: 'file management' };\n\n parameters = [\n {\n name: 'count',\n aliases: ['c'],\n description: 'Prefix lines by the number of occurrences',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'repeated',\n aliases: ['d'],\n description: 'Only print duplicate lines',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'ignore-case',\n aliases: ['i'],\n description: 'Ignore differences in case when comparing',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'unique',\n aliases: ['u'],\n description: 'Only print unique lines',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const showCount = !!command.args['c'] || !!command.args['count'];\n const onlyDuplicates =\n !!command.args['d'] || !!command.args['repeated'];\n const ignoreCase =\n !!command.args['i'] || !!command.args['ignore-case'];\n const onlyUnique = !!command.args['u'] || !!command.args['unique'];\n\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n let lines = content.split('\\n');\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const groups: { line: string; count: number }[] = [];\n for (const line of lines) {\n const last = groups[groups.length - 1];\n const compare = ignoreCase\n ? (a: string, b: string) =>\n a.toLowerCase() === b.toLowerCase()\n : (a: string, b: string) => a === b;\n if (last && compare(last.line, line)) {\n last.count++;\n } else {\n groups.push({ line, count: 1 });\n }\n }\n\n let filtered = groups;\n if (onlyDuplicates) {\n filtered = filtered.filter((g) => g.count > 1);\n }\n if (onlyUnique) {\n filtered = filtered.filter((g) => g.count === 1);\n }\n\n const output = filtered.map((g) => {\n if (showCount) {\n return `${String(g.count).padStart(7)} ${g.line}`;\n }\n return g.line;\n });\n\n context.writer.writeln(output.join('\\n'));\n return;\n }\n context.writer.writeError('uniq: missing file operand');\n return;\n }\n\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(\n `uniq: ${path}: Is a directory`,\n );\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) {\n context.writer.writeError(\n `uniq: ${path}: No such file or directory`,\n );\n continue;\n }\n\n let lines = content.split('\\n');\n // Remove trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n // Group consecutive identical lines\n const groups: { line: string; count: number }[] = [];\n for (const line of lines) {\n const last = groups[groups.length - 1];\n const compare = ignoreCase\n ? (a: string, b: string) =>\n a.toLowerCase() === b.toLowerCase()\n : (a: string, b: string) => a === b;\n if (last && compare(last.line, line)) {\n last.count++;\n } else {\n groups.push({ line, count: 1 });\n }\n }\n\n // Filter based on flags\n let filtered = groups;\n if (onlyDuplicates) {\n filtered = filtered.filter((g) => g.count > 1);\n }\n if (onlyUnique) {\n filtered = filtered.filter((g) => g.count === 1);\n }\n\n // Format output\n const output = filtered.map((g) => {\n if (showCount) {\n return `${String(g.count).padStart(7)} ${g.line}`;\n }\n return g.line;\n });\n\n context.writer.writeln(output.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`uniq: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliCutCommandProcessor implements ICliCommandProcessor {\n command = 'cut';\n description = 'Extract columns or fields from each line of a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '\\u2702\\uFE0F', module: 'file management' };\n\n parameters = [\n {\n name: 'delimiter',\n aliases: ['d'],\n description: 'Use a specific field delimiter (default: tab)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'fields',\n aliases: ['f'],\n description: 'Select only these fields (e.g., 1,3 or 1-3)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'characters',\n aliases: ['c'],\n description:\n 'Select only these character positions (e.g., 1-5 or 3)',\n required: false,\n type: 'string' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const delimiter = command.args['d'] || command.args['delimiter'] || '\\t';\n const fieldsSpec = command.args['f'] || command.args['fields'];\n const charsSpec = command.args['c'] || command.args['characters'];\n\n if (!fieldsSpec && !charsSpec) {\n context.writer.writeError(\n 'cut: you must specify either -f (fields) or -c (characters)',\n );\n return;\n }\n\n const spec = fieldsSpec || charsSpec!;\n const indices = this.parseSpec(spec);\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n let lines = content.split('\\n');\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const output = lines.map((line) => {\n if (fieldsSpec) {\n const fields = line.split(delimiter);\n const resolved = this.resolveIndices(\n indices,\n fields.length,\n );\n return resolved\n .map((idx) => fields[idx] || '')\n .join(delimiter);\n } else {\n const chars = line.split('');\n const resolved = this.resolveIndices(\n indices,\n chars.length,\n );\n return resolved.map((idx) => chars[idx] || '').join('');\n }\n });\n\n context.writer.writeln(output.join('\\n'));\n return;\n }\n context.writer.writeError('cut: missing file operand');\n return;\n }\n\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(\n `cut: ${path}: Is a directory`,\n );\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) {\n context.writer.writeError(\n `cut: ${path}: No such file or directory`,\n );\n continue;\n }\n\n let lines = content.split('\\n');\n // Remove trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const output = lines.map((line) => {\n if (fieldsSpec) {\n const fields = line.split(delimiter);\n const resolved = this.resolveIndices(\n indices,\n fields.length,\n );\n return resolved\n .map((idx) => fields[idx] || '')\n .join(delimiter);\n } else {\n // character mode\n const chars = line.split('');\n const resolved = this.resolveIndices(\n indices,\n chars.length,\n );\n return resolved.map((idx) => chars[idx] || '').join('');\n }\n });\n\n context.writer.writeln(output.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`cut: ${e.message}`);\n }\n }\n }\n\n private parseSpec(\n spec: string,\n ): Array<{ type: 'index'; value: number } | { type: 'range'; start: number | null; end: number | null }> {\n const parts = spec.split(',');\n const result: Array<\n | { type: 'index'; value: number }\n | { type: 'range'; start: number | null; end: number | null }\n > = [];\n\n for (const part of parts) {\n const trimmed = part.trim();\n if (trimmed.includes('-')) {\n const [startStr, endStr] = trimmed.split('-');\n const start = startStr ? parseInt(startStr, 10) : null;\n const end = endStr ? parseInt(endStr, 10) : null;\n result.push({ type: 'range', start, end });\n } else {\n result.push({ type: 'index', value: parseInt(trimmed, 10) });\n }\n }\n\n return result;\n }\n\n private resolveIndices(\n specs: Array<\n | { type: 'index'; value: number }\n | { type: 'range'; start: number | null; end: number | null }\n >,\n total: number,\n ): number[] {\n const indices: number[] = [];\n\n for (const spec of specs) {\n if (spec.type === 'index') {\n indices.push(spec.value - 1);\n } else {\n const start = spec.start ? spec.start - 1 : 0;\n const end = spec.end ? spec.end - 1 : total - 1;\n for (let i = start; i <= end; i++) {\n indices.push(i);\n }\n }\n }\n\n return indices;\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliPasteCommandProcessor implements ICliCommandProcessor {\n command = 'paste';\n description = 'Merge lines of files side by side';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '\\u{1F4CB}', module: 'file management' };\n\n parameters = [\n {\n name: 'delimiters',\n aliases: ['d'],\n description: 'Use a specific delimiter (default: tab)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'serial',\n aliases: ['s'],\n description:\n 'Paste one file at a time instead of in parallel',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const delimiter = command.args['d'] || command.args['delimiters'] || '\\t';\n const serial = !!command.args['s'] || !!command.args['serial'];\n\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n context.writer.writeError('paste: missing file operand');\n return;\n }\n\n if (!serial && paths.length < 2) {\n context.writer.writeError('paste: missing file operand');\n return;\n }\n\n // Read all files\n const fileLines: string[][] = [];\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(\n `paste: ${path}: Is a directory`,\n );\n return;\n }\n const content = fs.readFile(path);\n if (content === null) {\n context.writer.writeError(\n `paste: ${path}: No such file or directory`,\n );\n return;\n }\n let lines = content.split('\\n');\n // Remove trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n fileLines.push(lines);\n } catch (e: any) {\n context.writer.writeError(`paste: ${e.message}`);\n return;\n }\n }\n\n if (serial) {\n // Serial mode: each file's lines joined on one output line\n const output = fileLines.map((lines) =>\n lines.join(delimiter),\n );\n context.writer.writeln(output.join('\\n'));\n } else {\n // Parallel mode: zip lines from all files\n const maxLines = Math.max(\n ...fileLines.map((lines) => lines.length),\n );\n const output: string[] = [];\n for (let i = 0; i < maxLines; i++) {\n const parts = fileLines.map((lines) => lines[i] || '');\n output.push(parts.join(delimiter));\n }\n context.writer.writeln(output.join('\\n'));\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\n/**\n * Expand character set notation (ranges like a-z, character classes like [:upper:])\n * into an array of individual characters.\n */\nfunction expandSet(set: string): string[] {\n const chars: string[] = [];\n let i = 0;\n while (i < set.length) {\n // Character classes\n if (set[i] === '[' && set[i + 1] === ':') {\n const end = set.indexOf(':]', i + 2);\n if (end !== -1) {\n const className = set.substring(i + 2, end);\n chars.push(...getCharClass(className));\n i = end + 2;\n continue;\n }\n }\n // Ranges like a-z\n if (\n i + 2 < set.length &&\n set[i + 1] === '-' &&\n set[i + 2] !== undefined\n ) {\n const start = set.charCodeAt(i);\n const finish = set.charCodeAt(i + 2);\n if (start <= finish) {\n for (let c = start; c <= finish; c++) {\n chars.push(String.fromCharCode(c));\n }\n } else {\n for (let c = start; c >= finish; c--) {\n chars.push(String.fromCharCode(c));\n }\n }\n i += 3;\n continue;\n }\n chars.push(set[i]);\n i++;\n }\n return chars;\n}\n\nfunction getCharClass(name: string): string[] {\n switch (name) {\n case 'upper':\n return expandSet('A-Z');\n case 'lower':\n return expandSet('a-z');\n case 'digit':\n return expandSet('0-9');\n case 'alpha':\n return [...expandSet('a-z'), ...expandSet('A-Z')];\n case 'alnum':\n return [...expandSet('a-z'), ...expandSet('A-Z'), ...expandSet('0-9')];\n case 'space':\n return [' ', '\\t', '\\n', '\\r', '\\x0b', '\\x0c'];\n default:\n return [];\n }\n}\n\n/**\n * Parse quoted or unquoted tokens from a raw command string.\n * Returns an array of parsed tokens (flags, SET1, SET2, file path).\n */\nfunction parseTokens(raw: string): string[] {\n const tokens: string[] = [];\n let i = 0;\n while (i < raw.length) {\n // Skip whitespace\n if (/\\s/.test(raw[i])) {\n i++;\n continue;\n }\n // Quoted string\n if (raw[i] === \"'\" || raw[i] === '\"') {\n const quote = raw[i];\n i++;\n let token = '';\n while (i < raw.length && raw[i] !== quote) {\n token += raw[i];\n i++;\n }\n i++; // skip closing quote\n tokens.push(token);\n continue;\n }\n // Unquoted token\n let token = '';\n while (i < raw.length && !/\\s/.test(raw[i])) {\n token += raw[i];\n i++;\n }\n tokens.push(token);\n }\n return tokens;\n}\n\nexport class CliTrCommandProcessor implements ICliCommandProcessor {\n command = 'tr';\n description = 'Translate or delete characters in a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔀', module: 'file management' };\n\n parameters = [\n {\n name: 'd',\n description: 'Delete characters in SET1',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 's',\n description: 'Squeeze repeated characters in last operand set',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const raw = command.value || '';\n const positional = parseTokens(raw);\n\n const deleteMode = !!command.args['d'];\n const squeezeMode = !!command.args['s'];\n\n if (positional.length === 0) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n\n let set1Str: string | undefined;\n let set2Str: string | undefined;\n let filePath: string | undefined;\n\n if (deleteMode && squeezeMode) {\n // -d -s SET1 SET2 [file]\n if (positional.length < 2) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n set1Str = positional[0];\n set2Str = positional[1];\n if (positional.length >= 3) {\n filePath = positional[2];\n }\n } else if (deleteMode) {\n // -d SET1 [file]\n if (positional.length < 1) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n set1Str = positional[0];\n if (positional.length >= 2) {\n filePath = positional[1];\n }\n } else if (squeezeMode) {\n if (positional.length < 1) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n if (positional.length >= 3) {\n // -s SET1 SET2 file => translate + squeeze\n set1Str = positional[0];\n set2Str = positional[1];\n filePath = positional[2];\n } else if (positional.length === 2) {\n // -s SET1 file OR -s SET1 SET2 (piped)\n // If piped data exists and there's no file at positional[1], treat as SET1 + file\n set1Str = positional[0];\n filePath = positional[1];\n } else {\n // -s SET1 (piped)\n set1Str = positional[0];\n }\n } else {\n // translate: SET1 SET2 [file]\n if (positional.length < 2) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n set1Str = positional[0];\n set2Str = positional[1];\n if (positional.length >= 3) {\n filePath = positional[2];\n }\n }\n\n let content: string | null;\n if (filePath) {\n try {\n if (fs.isDirectory(filePath)) {\n context.writer.writeError(`tr: ${filePath}: Is a directory`);\n return;\n }\n content = fs.readFile(filePath);\n if (content === null) {\n context.writer.writeError(\n `tr: ${filePath}: No such file or directory`,\n );\n return;\n }\n } catch (e: any) {\n context.writer.writeError(`tr: ${e.message}`);\n return;\n }\n } else if (command.data != null) {\n content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n } else {\n context.writer.writeError('tr: missing file operand');\n return;\n }\n\n try {\n\n const set1 = expandSet(set1Str!);\n const set1Set = new Set(set1);\n const set2 = set2Str ? expandSet(set2Str) : [];\n\n let result = content;\n\n if (deleteMode && squeezeMode) {\n // Delete SET1 chars, then squeeze SET2 chars\n result = this.deleteChars(result, set1Set);\n const squeezeSet = new Set(set2);\n result = this.squeezeChars(result, squeezeSet);\n } else if (deleteMode) {\n result = this.deleteChars(result, set1Set);\n } else if (squeezeMode && set2.length > 0) {\n // Translate then squeeze\n result = this.translateChars(result, set1, set2);\n const squeezeSet = new Set(set2);\n result = this.squeezeChars(result, squeezeSet);\n } else if (squeezeMode) {\n result = this.squeezeChars(result, set1Set);\n } else {\n result = this.translateChars(result, set1, set2);\n }\n\n context.writer.writeln(result);\n } catch (e: any) {\n context.writer.writeError(`tr: ${e.message}`);\n }\n }\n\n private deleteChars(content: string, deleteSet: Set<string>): string {\n let result = '';\n for (const ch of content) {\n if (!deleteSet.has(ch)) {\n result += ch;\n }\n }\n return result;\n }\n\n private squeezeChars(content: string, squeezeSet: Set<string>): string {\n let result = '';\n let prevChar = '';\n for (const ch of content) {\n if (squeezeSet.has(ch) && ch === prevChar) {\n continue;\n }\n result += ch;\n prevChar = ch;\n }\n return result;\n }\n\n private translateChars(\n content: string,\n set1: string[],\n set2: string[],\n ): string {\n if (set2.length === 0) return content;\n\n // Build translation map; if SET2 is shorter, last char repeats\n const map = new Map<string, string>();\n for (let i = 0; i < set1.length; i++) {\n const replacement =\n i < set2.length ? set2[i] : set2[set2.length - 1];\n map.set(set1[i], replacement);\n }\n\n let result = '';\n for (const ch of content) {\n result += map.has(ch) ? map.get(ch)! : ch;\n }\n return result;\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliStatCommandProcessor implements ICliCommandProcessor {\n command = 'stat';\n description = 'Display file/directory metadata';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📊', module: 'file management' };\n\n parameters = [];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n context.writer.writeError('stat: missing operand');\n return;\n }\n\n for (const path of paths) {\n const resolved = fs.resolvePath(path);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `stat: cannot stat '${path}': No such file or directory`,\n );\n continue;\n }\n\n context.writer.writeKeyValue({\n File: resolved,\n Size: `${node.size}`,\n Type: node.type,\n Permissions: node.permissions || 'rw-r--r--',\n Owner: node.ownership?.uid || '-',\n Group: node.ownership?.gid || '-',\n Created: new Date(node.createdAt).toLocaleString(),\n Modified: new Date(node.modifiedAt).toLocaleString(),\n });\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliChmodCommandProcessor implements ICliCommandProcessor {\n command = 'chmod';\n description = 'Change file permissions';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔒', module: 'file management' };\n\n parameters = [\n {\n name: 'R',\n description: 'Change files and directories recursively',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const { recursive, mode, paths } = this.parseArgs(command);\n\n if (!mode || paths.length === 0) {\n context.writer.writeError(\n 'chmod: missing operand',\n );\n return;\n }\n\n for (const path of paths) {\n const resolved = fs.resolvePath(path);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `chmod: cannot access '${path}': No such file or directory`,\n );\n continue;\n }\n\n const perms = this.resolvePermissions(mode, node.permissions || 'rw-r--r--');\n if (perms === null) {\n context.writer.writeError(\n `chmod: invalid mode: '${mode}'`,\n );\n return;\n }\n\n this.applyPermissions(fs, resolved, node, perms, recursive);\n }\n\n await fs.persist();\n }\n\n private parseArgs(command: CliProcessCommand): {\n recursive: boolean;\n mode: string | null;\n paths: string[];\n } {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n const recursive = command.args['R'] || false;\n const mode = tokens.length > 0 ? tokens[0] : null;\n const paths = tokens.slice(1);\n return { recursive, mode, paths };\n }\n\n private resolvePermissions(\n mode: string,\n current: string,\n ): string | null {\n // Octal mode (e.g., 755, 644)\n if (/^[0-7]{3}$/.test(mode)) {\n return this.octalToPermString(mode);\n }\n\n // Symbolic mode (e.g., u+x, go-w, a+r)\n const match = mode.match(/^([ugoa]+)([+\\-=])([rwx]+)$/);\n if (!match) {\n return null;\n }\n\n const who = match[1];\n const op = match[2];\n const perms = match[3];\n const chars = current.split('');\n\n // Map who to indices: u=0-2, g=3-5, o=6-8\n const indices: number[] = [];\n const addIndices = (start: number) => {\n if (perms.includes('r')) indices.push(start);\n if (perms.includes('w')) indices.push(start + 1);\n if (perms.includes('x')) indices.push(start + 2);\n };\n\n if (who.includes('u') || who.includes('a')) addIndices(0);\n if (who.includes('g') || who.includes('a')) addIndices(3);\n if (who.includes('o') || who.includes('a')) addIndices(6);\n\n for (const idx of indices) {\n const permChar = idx % 3 === 0 ? 'r' : idx % 3 === 1 ? 'w' : 'x';\n if (op === '+') {\n chars[idx] = permChar;\n } else if (op === '-') {\n chars[idx] = '-';\n } else if (op === '=') {\n chars[idx] = permChar;\n }\n }\n\n // For '=' operation, clear bits not mentioned\n if (op === '=') {\n const clearIndices: number[] = [];\n const clearGroup = (start: number) => {\n if (!perms.includes('r')) clearIndices.push(start);\n if (!perms.includes('w')) clearIndices.push(start + 1);\n if (!perms.includes('x')) clearIndices.push(start + 2);\n };\n\n if (who.includes('u') || who.includes('a')) clearGroup(0);\n if (who.includes('g') || who.includes('a')) clearGroup(3);\n if (who.includes('o') || who.includes('a')) clearGroup(6);\n\n for (const idx of clearIndices) {\n chars[idx] = '-';\n }\n }\n\n return chars.join('');\n }\n\n private octalToPermString(octal: string): string {\n const digitToPerms = (d: number): string => {\n return (\n ((d & 4) ? 'r' : '-') +\n ((d & 2) ? 'w' : '-') +\n ((d & 1) ? 'x' : '-')\n );\n };\n return (\n digitToPerms(parseInt(octal[0], 10)) +\n digitToPerms(parseInt(octal[1], 10)) +\n digitToPerms(parseInt(octal[2], 10))\n );\n }\n\n private applyPermissions(\n fs: IFileSystemService,\n basePath: string,\n node: IFileNode,\n perms: string,\n recursive: boolean,\n ): void {\n fs.chmod(basePath, perms);\n if (recursive && node.type === 'directory' && node.children) {\n for (const child of node.children) {\n const childPath =\n basePath === '/'\n ? `/${child.name}`\n : `${basePath}/${child.name}`;\n this.applyPermissions(fs, childPath, child, perms, recursive);\n }\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliChownCommandProcessor implements ICliCommandProcessor {\n command = 'chown';\n description = 'Change file owner and group';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔑', module: 'file management' };\n\n parameters = [\n {\n name: 'R',\n description: 'Change files and directories recursively',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const { recursive, ownerSpec, paths } = this.parseArgs(command);\n\n if (!ownerSpec || paths.length === 0) {\n context.writer.writeError(\n 'chown: missing operand. Usage: chown [user][:group] <file>',\n );\n return;\n }\n\n const { uid, gid } = this.parseOwnerSpec(ownerSpec);\n if (!uid && !gid) {\n context.writer.writeError(\n `chown: invalid owner: '${ownerSpec}'`,\n );\n return;\n }\n\n for (const path of paths) {\n const resolved = fs.resolvePath(path);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `chown: cannot access '${path}': No such file or directory`,\n );\n continue;\n }\n\n this.applyOwnership(fs, resolved, node, uid, gid, recursive);\n }\n\n await fs.persist();\n }\n\n private parseArgs(command: CliProcessCommand): {\n recursive: boolean;\n ownerSpec: string | null;\n paths: string[];\n } {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n const recursive = command.args['R'] || false;\n const ownerSpec = tokens.length > 0 ? tokens[0] : null;\n const paths = tokens.slice(1);\n return { recursive, ownerSpec, paths };\n }\n\n /** Parse \"user:group\", \"user:\", \":group\", or \"user\" */\n private parseOwnerSpec(spec: string): { uid: string | null; gid: string | null } {\n if (spec.includes(':')) {\n const [uid, gid] = spec.split(':', 2);\n return {\n uid: uid || null,\n gid: gid || null,\n };\n }\n return { uid: spec, gid: null };\n }\n\n private applyOwnership(\n fs: IFileSystemService,\n basePath: string,\n node: IFileNode,\n uid: string | null,\n gid: string | null,\n recursive: boolean,\n ): void {\n const current = node.ownership || { uid: 'root', gid: 'admin' };\n fs.chown(basePath, {\n uid: uid ?? current.uid,\n gid: gid ?? current.gid,\n });\n\n if (recursive && node.type === 'directory' && node.children) {\n for (const child of node.children) {\n const childPath =\n basePath === '/'\n ? `/${child.name}`\n : `${basePath}/${child.name}`;\n this.applyOwnership(fs, childPath, child, uid, gid, recursive);\n }\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliDuCommandProcessor implements ICliCommandProcessor {\n command = 'du';\n description = 'Estimate file space usage';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📏', module: 'file management' };\n\n parameters = [\n {\n name: 'h',\n description: 'Human-readable sizes (e.g. 1K, 2M)',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 's',\n description: 'Display only a total for each argument',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'max-depth',\n aliases: ['d'],\n description: 'Print total for a directory only if it is N or fewer levels below the argument',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const { humanReadable, summaryOnly, maxDepth, paths } =\n this.parseArgs(command);\n\n if (paths.length === 0) {\n context.writer.writeError('du: missing operand');\n return;\n }\n\n for (const path of paths) {\n const resolved = fs.resolvePath(path);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `du: cannot access '${path}': No such file or directory`,\n );\n continue;\n }\n\n if (node.type === 'file') {\n context.writer.writeln(\n `${this.formatSize(node.size, humanReadable)}\\t${resolved}`,\n );\n } else {\n const entries: { size: number; path: string }[] = [];\n this.collectSizes(node, resolved, 0, maxDepth, summaryOnly, entries);\n\n for (const entry of entries) {\n context.writer.writeln(\n `${this.formatSize(entry.size, humanReadable)}\\t${entry.path}`,\n );\n }\n }\n }\n }\n\n private parseArgs(command: CliProcessCommand): {\n humanReadable: boolean;\n summaryOnly: boolean;\n maxDepth: number;\n paths: string[];\n } {\n const raw = command.value || '';\n const paths = raw.split(/\\s+/).filter(Boolean);\n const humanReadable = !!command.args['h'];\n const summaryOnly = !!command.args['s'];\n const maxDepth = command.args['d'] || command.args['max-depth']\n ? parseInt(command.args['d'] || command.args['max-depth'] || '0', 10)\n : Infinity;\n\n return { humanReadable, summaryOnly, maxDepth, paths };\n }\n\n private collectSizes(\n node: IFileNode,\n path: string,\n depth: number,\n maxDepth: number,\n summaryOnly: boolean,\n entries: { size: number; path: string }[],\n ): number {\n if (node.type === 'file') {\n return node.size;\n }\n\n let total = 0;\n if (node.children) {\n for (const child of node.children) {\n const childPath = path === '/' ? `/${child.name}` : `${path}/${child.name}`;\n total += this.collectSizes(\n child,\n childPath,\n depth + 1,\n maxDepth,\n summaryOnly,\n entries,\n );\n }\n }\n\n if (summaryOnly) {\n if (depth === 0) {\n entries.push({ size: total, path });\n }\n } else if (depth <= maxDepth) {\n entries.push({ size: total, path });\n }\n\n return total;\n }\n\n private formatSize(bytes: number, humanReadable: boolean): string {\n if (!humanReadable) {\n return String(bytes);\n }\n\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}K`;\n if (bytes < 1024 * 1024 * 1024)\n return `${(bytes / (1024 * 1024)).toFixed(1)}M`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}G`;\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliLnCommandProcessor implements ICliCommandProcessor {\n command = 'ln';\n description = 'Create symbolic links';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔗', module: 'file management' };\n\n parameters = [\n {\n name: 's',\n description: 'Create a symbolic link',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const { symbolic, target, linkName } = this.parseArgs(command);\n\n if (!symbolic) {\n context.writer.writeError(\n 'ln: hard links not supported in virtual filesystem',\n );\n return;\n }\n\n if (!target || !linkName) {\n context.writer.writeError('ln: missing operand');\n return;\n }\n\n const resolvedLink = fs.resolvePath(linkName);\n const resolvedTarget = fs.resolvePath(target);\n\n // Check if the link already exists\n if (fs.exists(resolvedLink)) {\n context.writer.writeError(\n `ln: failed to create symbolic link '${linkName}': File exists`,\n );\n return;\n }\n\n // Create the symlink as a file node with linkTarget set\n // We allow dangling symlinks so we don't check if target exists\n fs.createFile(resolvedLink, '');\n const node = fs.getNode(resolvedLink);\n if (node) {\n node.linkTarget = resolvedTarget;\n node.size = 0;\n }\n\n await fs.persist();\n }\n\n private parseArgs(command: CliProcessCommand): {\n symbolic: boolean;\n target: string | null;\n linkName: string | null;\n } {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n const symbolic = command.args['s'] || false;\n\n return {\n symbolic,\n target: tokens[0] || null,\n linkName: tokens[1] || null,\n };\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\ninterface SedExpression {\n address: SedAddress | null;\n command: string; // 's', 'd', 'p'\n // For substitution:\n pattern?: RegExp;\n replacement?: string;\n globalFlag?: boolean;\n printFlag?: boolean;\n}\n\ninterface SedAddress {\n type: 'line' | 'last' | 'range' | 'regex';\n line?: number;\n startLine?: number;\n endLine?: number;\n endIsLast?: boolean;\n regex?: RegExp;\n}\n\nexport class CliSedCommandProcessor implements ICliCommandProcessor {\n command = 'sed';\n description = 'Stream editor for filtering and transforming text';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '✏️', module: 'file management' };\n\n parameters = [\n {\n name: 'in-place',\n aliases: ['i'],\n description: 'Edit file in place',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'quiet',\n aliases: ['n'],\n description: 'Suppress automatic printing of pattern space',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'expression',\n aliases: ['e'],\n description: 'Add the expression to the commands to be executed',\n required: false,\n type: 'string' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const { inPlace, suppress, expressions, filePath } =\n this.parseRawCommand(command);\n\n if (expressions.length === 0) {\n context.writer.writeError(\n 'sed: missing expression. Usage: sed [options] \\'expression\\' <file>',\n );\n return;\n }\n\n let content: string;\n if (filePath) {\n const resolved = fs.resolvePath(filePath);\n\n if (!fs.exists(resolved)) {\n context.writer.writeError(\n `sed: ${filePath}: No such file or directory`,\n );\n return;\n }\n\n if (fs.isDirectory(resolved)) {\n context.writer.writeError(`sed: ${filePath}: Is a directory`);\n return;\n }\n\n content = fs.readFile(resolved) ?? '';\n } else if (command.data != null) {\n content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n } else {\n context.writer.writeError(\n 'sed: missing file operand. Usage: sed [options] \\'expression\\' <file>',\n );\n return;\n }\n\n // Parse expressions\n const parsedExpressions: SedExpression[] = [];\n for (const expr of expressions) {\n try {\n const parsed = this.parseExpression(expr);\n parsedExpressions.push(parsed);\n } catch (e: any) {\n context.writer.writeError(`sed: ${e.message}`);\n return;\n }\n }\n const lines = content.split('\\n');\n const outputLines: string[] = [];\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n let line = lines[lineIdx];\n let deleted = false;\n let printed = false;\n\n for (const expr of parsedExpressions) {\n if (deleted) break;\n\n if (\n !this.addressMatches(\n expr.address,\n lineIdx + 1,\n lines.length,\n line,\n )\n ) {\n continue;\n }\n\n switch (expr.command) {\n case 's': {\n const pattern = expr.pattern!;\n pattern.lastIndex = 0;\n const newLine = line.replace(pattern, (...args) => {\n const match = args[0];\n return expr.replacement!.replace(/&/g, match);\n });\n const matched = newLine !== line;\n line = newLine;\n if (matched && expr.printFlag) {\n printed = true;\n }\n break;\n }\n case 'd':\n deleted = true;\n break;\n case 'p':\n printed = true;\n break;\n }\n }\n\n if (!deleted) {\n if (suppress) {\n if (printed) {\n outputLines.push(line);\n }\n } else {\n outputLines.push(line);\n }\n }\n }\n\n const result = outputLines.join('\\n');\n\n if (inPlace && filePath) {\n const resolved = fs.resolvePath(filePath);\n fs.writeFile(resolved, result);\n await fs.persist();\n } else {\n // Print the result\n const resultLines = result.split('\\n');\n for (const line of resultLines) {\n context.writer.writeln(line);\n }\n }\n }\n\n private parseRawCommand(command: CliProcessCommand): {\n inPlace: boolean;\n suppress: boolean;\n expressions: string[];\n filePath: string | null;\n } {\n const raw = command.value || '';\n const tokens = this.tokenize(raw);\n\n const inPlace = !!command.args['in-place'] || !!command.args['i'];\n const suppress = !!command.args['quiet'] || !!command.args['n'];\n const expressions: string[] = [];\n let filePath: string | null = null;\n const nonFlagTokens: string[] = [];\n\n // Check for -e expressions from args\n if (command.args['expression'] || command.args['e']) {\n const eValue = command.args['expression'] || command.args['e'];\n if (Array.isArray(eValue)) {\n for (const v of eValue) {\n if (v && typeof v === 'string') {\n expressions.push(v);\n }\n }\n } else if (eValue && typeof eValue === 'string') {\n expressions.push(eValue);\n }\n }\n\n for (const t of tokens) {\n nonFlagTokens.push(t);\n }\n\n // If no -e expressions, first non-flag token is the expression\n if (expressions.length === 0 && nonFlagTokens.length > 0) {\n expressions.push(nonFlagTokens.shift()!);\n }\n\n // Remaining non-flag token is the file path\n if (nonFlagTokens.length > 0) {\n filePath = nonFlagTokens[nonFlagTokens.length - 1];\n }\n\n return { inPlace, suppress, expressions, filePath };\n }\n\n private tokenize(raw: string): string[] {\n const tokens: string[] = [];\n let i = 0;\n while (i < raw.length) {\n // Skip whitespace\n if (raw[i] === ' ' || raw[i] === '\\t') {\n i++;\n continue;\n }\n\n // Handle quoted strings\n if (raw[i] === \"'\" || raw[i] === '\"') {\n const quote = raw[i];\n i++;\n let token = '';\n while (i < raw.length && raw[i] !== quote) {\n token += raw[i];\n i++;\n }\n if (i < raw.length) i++; // skip closing quote\n tokens.push(token);\n continue;\n }\n\n // Regular token\n let token = '';\n while (i < raw.length && raw[i] !== ' ' && raw[i] !== '\\t') {\n token += raw[i];\n i++;\n }\n tokens.push(token);\n }\n return tokens;\n }\n\n private parseExpression(expr: string): SedExpression {\n let pos = 0;\n\n // Parse optional address\n let address: SedAddress | null = null;\n if (pos < expr.length) {\n const addrResult = this.parseAddress(expr, pos);\n if (addrResult) {\n address = addrResult.address;\n pos = addrResult.pos;\n\n // Check for range address\n if (pos < expr.length && expr[pos] === ',') {\n pos++;\n const endResult = this.parseAddress(expr, pos);\n if (endResult) {\n if (endResult.address.type === 'last') {\n address = {\n type: 'range',\n startLine: address.line,\n endLine: 0,\n endIsLast: true,\n };\n } else {\n address = {\n type: 'range',\n startLine: address.line,\n endLine: endResult.address.line,\n };\n }\n pos = endResult.pos;\n }\n }\n }\n }\n\n if (pos >= expr.length) {\n throw new Error(`invalid expression: '${expr}'`);\n }\n\n const cmd = expr[pos];\n\n if (cmd === 's') {\n return this.parseSubstitution(expr, pos, address);\n } else if (cmd === 'd') {\n return { address, command: 'd' };\n } else if (cmd === 'p') {\n return { address, command: 'p' };\n } else {\n throw new Error(`unknown command: '${cmd}'`);\n }\n }\n\n private parseAddress(\n expr: string,\n pos: number,\n ): { address: SedAddress; pos: number } | null {\n if (pos >= expr.length) return null;\n\n // Line number\n if (expr[pos] >= '0' && expr[pos] <= '9') {\n let numStr = '';\n while (pos < expr.length && expr[pos] >= '0' && expr[pos] <= '9') {\n numStr += expr[pos];\n pos++;\n }\n return {\n address: { type: 'line', line: parseInt(numStr, 10) },\n pos,\n };\n }\n\n // Last line\n if (expr[pos] === '$') {\n return { address: { type: 'last' }, pos: pos + 1 };\n }\n\n // Regex address\n if (expr[pos] === '/') {\n pos++; // skip opening /\n let pattern = '';\n while (pos < expr.length && expr[pos] !== '/') {\n if (expr[pos] === '\\\\' && pos + 1 < expr.length) {\n pattern += expr[pos + 1];\n pos += 2;\n } else {\n pattern += expr[pos];\n pos++;\n }\n }\n if (pos < expr.length) pos++; // skip closing /\n try {\n return {\n address: { type: 'regex', regex: new RegExp(pattern) },\n pos,\n };\n } catch {\n throw new Error(`invalid regex in address: '${pattern}'`);\n }\n }\n\n return null;\n }\n\n private parseSubstitution(\n expr: string,\n pos: number,\n address: SedAddress | null,\n ): SedExpression {\n pos++; // skip 's'\n if (pos >= expr.length) {\n throw new Error(`invalid substitution expression: '${expr}'`);\n }\n\n const delimiter = expr[pos];\n pos++;\n\n // Parse pattern\n let pattern = '';\n while (pos < expr.length && expr[pos] !== delimiter) {\n if (expr[pos] === '\\\\' && pos + 1 < expr.length) {\n pattern += '\\\\' + expr[pos + 1];\n pos += 2;\n } else {\n pattern += expr[pos];\n pos++;\n }\n }\n if (pos < expr.length) pos++; // skip delimiter\n\n // Parse replacement\n let replacement = '';\n while (pos < expr.length && expr[pos] !== delimiter) {\n if (expr[pos] === '\\\\' && pos + 1 < expr.length) {\n replacement += expr[pos + 1];\n pos += 2;\n } else {\n replacement += expr[pos];\n pos++;\n }\n }\n if (pos < expr.length) pos++; // skip delimiter\n\n // Parse flags\n let globalFlag = false;\n let caseInsensitive = false;\n let printFlag = false;\n while (pos < expr.length) {\n const f = expr[pos];\n if (f === 'g') globalFlag = true;\n else if (f === 'i') caseInsensitive = true;\n else if (f === 'p') printFlag = true;\n pos++;\n }\n\n let regexFlags = '';\n if (caseInsensitive) regexFlags += 'i';\n if (globalFlag) regexFlags += 'g';\n\n let regex: RegExp;\n try {\n regex = new RegExp(pattern, regexFlags);\n } catch {\n throw new Error(`invalid regex: '${pattern}'`);\n }\n\n return {\n address,\n command: 's',\n pattern: regex,\n replacement,\n globalFlag,\n printFlag,\n };\n }\n\n private addressMatches(\n address: SedAddress | null,\n lineNum: number,\n totalLines: number,\n lineText: string,\n ): boolean {\n if (!address) return true;\n\n switch (address.type) {\n case 'line':\n return lineNum === address.line!;\n case 'last':\n return lineNum === totalLines;\n case 'range': {\n const start = address.startLine!;\n const end = address.endIsLast\n ? totalLines\n : address.endLine!;\n return lineNum >= start && lineNum <= end;\n }\n case 'regex':\n return address.regex!.test(lineText);\n default:\n return true;\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\ninterface AwkRule {\n pattern: AwkPattern;\n action: string;\n}\n\ntype AwkPattern =\n | { type: 'all' }\n | { type: 'begin' }\n | { type: 'end' }\n | { type: 'regex'; regex: RegExp }\n | { type: 'comparison'; field: string; op: string; value: string };\n\nexport class CliAwkCommandProcessor implements ICliCommandProcessor {\n command = 'awk';\n description = 'Pattern scanning and text processing';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '🔧', module: 'file management' };\n\n parameters = [\n {\n name: 'F',\n aliases: [] as string[],\n description: 'Field separator (default: whitespace)',\n required: false,\n type: 'string' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const { program, filePath, fieldSep } = this.parseArgs(command);\n\n if (!program) {\n context.writer.writeError(\n \"awk: missing program. Usage: awk [-F sep] 'program' file\",\n );\n return;\n }\n\n let content = '';\n if (filePath) {\n try {\n if (!fs.exists(filePath)) {\n context.writer.writeError(\n `awk: ${filePath}: No such file or directory`,\n );\n return;\n }\n content = fs.readFile(filePath) ?? '';\n } catch (e: any) {\n context.writer.writeError(`awk: ${e.message}`);\n return;\n }\n } else if (command.data != null) {\n content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n }\n\n const rules = this.parseProgram(program);\n const lines = content\n ? content.replace(/\\n$/, '').split('\\n')\n : [];\n const fs_regex = fieldSep\n ? new RegExp(this.escapeRegex(fieldSep))\n : /\\s+/;\n\n const variables: Record<string, string | number> = {};\n const output: string[] = [];\n\n // Execute BEGIN rules\n for (const rule of rules) {\n if (rule.pattern.type === 'begin') {\n this.executeAction(\n rule.action,\n [],\n '',\n 0,\n 0,\n variables,\n output,\n );\n }\n }\n\n // Process each line\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const fields = line.split(fs_regex).filter((f) => f !== '');\n const nr = i + 1;\n const nf = fields.length;\n\n for (const rule of rules) {\n if (\n rule.pattern.type === 'begin' ||\n rule.pattern.type === 'end'\n ) {\n continue;\n }\n\n if (this.matchesPattern(rule.pattern, line, fields, nr)) {\n this.executeAction(\n rule.action,\n fields,\n line,\n nr,\n nf,\n variables,\n output,\n );\n }\n }\n }\n\n // Execute END rules\n for (const rule of rules) {\n if (rule.pattern.type === 'end') {\n this.executeAction(\n rule.action,\n [],\n '',\n lines.length,\n 0,\n variables,\n output,\n );\n }\n }\n\n for (const line of output) {\n context.writer.writeln(line);\n }\n }\n\n private parseArgs(\n command: CliProcessCommand,\n ): { program: string | null; filePath: string | null; fieldSep: string | null } {\n const raw = command.value || '';\n\n const fieldSep: string | null = command.args['F'] || null;\n let rest = raw;\n\n // Extract program (in quotes)\n let program: string | null = null;\n const sqMatch = rest.match(/^'((?:[^'\\\\]|\\\\.)*)'\\s*/);\n if (sqMatch) {\n program = sqMatch[1];\n rest = rest.slice(sqMatch[0].length);\n } else {\n const dqMatch = rest.match(/^\"((?:[^\"\\\\]|\\\\.)*)\"\\s*/);\n if (dqMatch) {\n program = dqMatch[1];\n rest = rest.slice(dqMatch[0].length);\n }\n }\n\n const filePath = rest.trim() || null;\n\n return { program, filePath, fieldSep };\n }\n\n private parseProgram(program: string): AwkRule[] {\n const rules: AwkRule[] = [];\n let pos = 0;\n\n while (pos < program.length) {\n // Skip whitespace\n while (pos < program.length && /\\s/.test(program[pos])) pos++;\n if (pos >= program.length) break;\n\n let pattern: AwkPattern = { type: 'all' };\n let action = 'print $0';\n\n // Check for BEGIN\n if (program.slice(pos).startsWith('BEGIN')) {\n pattern = { type: 'begin' };\n pos += 5;\n while (pos < program.length && /\\s/.test(program[pos])) pos++;\n }\n // Check for END\n else if (program.slice(pos).startsWith('END')) {\n pattern = { type: 'end' };\n pos += 3;\n while (pos < program.length && /\\s/.test(program[pos])) pos++;\n }\n // Check for /regex/\n else if (program[pos] === '/') {\n const endSlash = program.indexOf('/', pos + 1);\n if (endSlash !== -1) {\n const regexStr = program.slice(pos + 1, endSlash);\n pattern = { type: 'regex', regex: new RegExp(regexStr) };\n pos = endSlash + 1;\n while (pos < program.length && /\\s/.test(program[pos]))\n pos++;\n }\n }\n // Check for field comparison ($N op value)\n else if (program[pos] === '$' && program[pos + 1] !== '0') {\n const compMatch = program\n .slice(pos)\n .match(\n /^\\$(\\w+)\\s*(>=|<=|!=|==|>|<)\\s*(?:\"([^\"]*)\"|'([^']*)'|(\\S+))/,\n );\n if (compMatch) {\n pattern = {\n type: 'comparison',\n field: compMatch[1],\n op: compMatch[2],\n value:\n compMatch[3] ?? compMatch[4] ?? compMatch[5],\n };\n pos += compMatch[0].length;\n while (pos < program.length && /\\s/.test(program[pos]))\n pos++;\n }\n }\n\n // Extract action block\n if (pos < program.length && program[pos] === '{') {\n const actionEnd = this.findMatchingBrace(program, pos);\n action = program.slice(pos + 1, actionEnd).trim();\n pos = actionEnd + 1;\n } else if (pattern.type === 'all' && pos < program.length) {\n // No pattern matched and no brace — might be just an action block\n // or something unparseable, skip a char\n pos++;\n continue;\n }\n\n rules.push({ pattern, action });\n }\n\n return rules;\n }\n\n private findMatchingBrace(str: string, start: number): number {\n let depth = 0;\n let inSingleQuote = false;\n let inDoubleQuote = false;\n\n for (let i = start; i < str.length; i++) {\n const ch = str[i];\n if (inSingleQuote) {\n if (ch === \"'\") inSingleQuote = false;\n continue;\n }\n if (inDoubleQuote) {\n if (ch === '\"') inDoubleQuote = false;\n continue;\n }\n if (ch === \"'\") {\n inSingleQuote = true;\n } else if (ch === '\"') {\n inDoubleQuote = true;\n } else if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) return i;\n }\n }\n return str.length - 1;\n }\n\n private matchesPattern(\n pattern: AwkPattern,\n line: string,\n fields: string[],\n _nr: number,\n ): boolean {\n switch (pattern.type) {\n case 'all':\n return true;\n case 'regex':\n return pattern.regex.test(line);\n case 'comparison': {\n const fieldVal = this.getFieldValue(\n pattern.field,\n fields,\n line,\n );\n return this.compareValues(fieldVal, pattern.op, pattern.value);\n }\n default:\n return false;\n }\n }\n\n private getFieldValue(\n field: string,\n fields: string[],\n line: string,\n ): string {\n if (field === '0') return line;\n const idx = parseInt(field, 10);\n if (!isNaN(idx) && idx >= 1 && idx <= fields.length) {\n return fields[idx - 1];\n }\n return '';\n }\n\n private compareValues(a: string, op: string, b: string): boolean {\n const numA = Number(a);\n const numB = Number(b);\n const useNumeric = !isNaN(numA) && !isNaN(numB) && a !== '' && b !== '';\n\n switch (op) {\n case '==':\n return useNumeric ? numA === numB : a === b;\n case '!=':\n return useNumeric ? numA !== numB : a !== b;\n case '>':\n return useNumeric ? numA > numB : a > b;\n case '<':\n return useNumeric ? numA < numB : a < b;\n case '>=':\n return useNumeric ? numA >= numB : a >= b;\n case '<=':\n return useNumeric ? numA <= numB : a <= b;\n default:\n return false;\n }\n }\n\n private executeAction(\n action: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n output: string[],\n ): void {\n const statements = action.split(/\\s*;\\s*/);\n\n for (const stmt of statements) {\n const trimmed = stmt.trim();\n if (!trimmed) continue;\n\n if (trimmed.startsWith('print')) {\n this.executePrint(\n trimmed,\n fields,\n line,\n nr,\n nf,\n variables,\n output,\n );\n } else {\n // Assignment: variable op= expression or variable = expression\n this.executeAssignment(\n trimmed,\n fields,\n line,\n nr,\n nf,\n variables,\n );\n }\n }\n }\n\n private executePrint(\n stmt: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n output: string[],\n ): void {\n const argStr = stmt.slice(5).trim();\n\n if (!argStr) {\n output.push(line);\n return;\n }\n\n // Split by comma for OFS-separated output\n const commaParts = this.splitByComma(argStr);\n\n if (commaParts.length > 1) {\n // Comma-separated: each part printed with OFS (space)\n const values = commaParts.map((part) =>\n this.evaluateConcatExpr(\n part.trim(),\n fields,\n line,\n nr,\n nf,\n variables,\n ),\n );\n output.push(values.join(' '));\n } else {\n // Single expression (may contain concatenation)\n output.push(\n this.evaluateConcatExpr(\n argStr,\n fields,\n line,\n nr,\n nf,\n variables,\n ),\n );\n }\n }\n\n private splitByComma(expr: string): string[] {\n const parts: string[] = [];\n let current = '';\n let inQuote: string | null = null;\n\n for (let i = 0; i < expr.length; i++) {\n const ch = expr[i];\n if (inQuote) {\n current += ch;\n if (ch === inQuote) inQuote = null;\n } else if (ch === '\"' || ch === \"'\") {\n current += ch;\n inQuote = ch;\n } else if (ch === ',') {\n parts.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current) parts.push(current);\n return parts;\n }\n\n private evaluateConcatExpr(\n expr: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n ): string {\n // Tokenize the expression into parts, then concatenate\n const tokens = this.tokenizeExpr(expr);\n return tokens\n .map((t) => this.resolveToken(t, fields, line, nr, nf, variables))\n .join('');\n }\n\n private tokenizeExpr(expr: string): string[] {\n const tokens: string[] = [];\n let pos = 0;\n\n while (pos < expr.length) {\n // Skip spaces (they act as concatenation separator)\n while (pos < expr.length && expr[pos] === ' ') pos++;\n if (pos >= expr.length) break;\n\n // Quoted string\n if (expr[pos] === '\"') {\n const end = expr.indexOf('\"', pos + 1);\n if (end !== -1) {\n tokens.push(expr.slice(pos, end + 1));\n pos = end + 1;\n } else {\n tokens.push(expr.slice(pos));\n break;\n }\n }\n // Field reference $N\n else if (expr[pos] === '$') {\n const match = expr.slice(pos).match(/^\\$(\\w+)/);\n if (match) {\n tokens.push(match[0]);\n pos += match[0].length;\n } else {\n tokens.push('$');\n pos++;\n }\n }\n // Identifier or number\n else {\n const match = expr.slice(pos).match(/^[\\w.]+/);\n if (match) {\n tokens.push(match[0]);\n pos += match[0].length;\n } else {\n // Other character (operator, etc.)\n tokens.push(expr[pos]);\n pos++;\n }\n }\n }\n\n return tokens;\n }\n\n private resolveToken(\n token: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n ): string {\n // Quoted string\n if (token.startsWith('\"') && token.endsWith('\"')) {\n return token.slice(1, -1);\n }\n\n // Field reference\n if (token.startsWith('$')) {\n const fieldRef = token.slice(1);\n if (fieldRef === '0') return line;\n if (fieldRef === 'NF') {\n const idx = nf;\n return idx >= 1 && idx <= fields.length\n ? fields[idx - 1]\n : '';\n }\n const idx = parseInt(fieldRef, 10);\n if (!isNaN(idx)) {\n return idx >= 1 && idx <= fields.length\n ? fields[idx - 1]\n : '';\n }\n return '';\n }\n\n // Built-in variables\n if (token === 'NR') return String(nr);\n if (token === 'NF') return String(nf);\n\n // User variable\n if (/^[a-zA-Z_]\\w*$/.test(token) && token in variables) {\n return String(variables[token]);\n }\n\n // Literal (number or unresolved)\n return token;\n }\n\n private executeAssignment(\n stmt: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n ): void {\n // Match: variable += expression\n const addAssign = stmt.match(/^([a-zA-Z_]\\w*)\\s*\\+=\\s*(.+)$/);\n if (addAssign) {\n const varName = addAssign[1];\n const exprVal = this.evaluateNumericExpr(\n addAssign[2].trim(),\n fields,\n line,\n nr,\n nf,\n variables,\n );\n if (!(varName in variables)) {\n variables[varName] = 0;\n }\n variables[varName] =\n (Number(variables[varName]) || 0) + exprVal;\n return;\n }\n\n // Match: variable -= expression\n const subAssign = stmt.match(/^([a-zA-Z_]\\w*)\\s*-=\\s*(.+)$/);\n if (subAssign) {\n const varName = subAssign[1];\n const exprVal = this.evaluateNumericExpr(\n subAssign[2].trim(),\n fields,\n line,\n nr,\n nf,\n variables,\n );\n if (!(varName in variables)) {\n variables[varName] = 0;\n }\n variables[varName] =\n (Number(variables[varName]) || 0) - exprVal;\n return;\n }\n\n // Match: variable = expression\n const assign = stmt.match(/^([a-zA-Z_]\\w*)\\s*=\\s*(.+)$/);\n if (assign) {\n const varName = assign[1];\n const exprStr = assign[2].trim();\n // Try numeric first\n const numVal = this.evaluateNumericExpr(\n exprStr,\n fields,\n line,\n nr,\n nf,\n variables,\n );\n variables[varName] = numVal;\n return;\n }\n\n // Variable increment: variable++\n const increment = stmt.match(/^([a-zA-Z_]\\w*)\\+\\+$/);\n if (increment) {\n const varName = increment[1];\n if (!(varName in variables)) variables[varName] = 0;\n variables[varName] = (Number(variables[varName]) || 0) + 1;\n return;\n }\n }\n\n private evaluateNumericExpr(\n expr: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n ): number {\n const resolved = this.resolveToken(\n expr.trim(),\n fields,\n line,\n nr,\n nf,\n variables,\n );\n return Number(resolved) || 0;\n }\n\n private escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n}\n","import {\n CliProcessCommand,\n CliForegroundColor,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliDiffCommandProcessor implements ICliCommandProcessor {\n command = 'diff';\n description = 'Compare files line by line';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📝', module: 'file management' };\n\n parameters = [\n {\n name: 'unified',\n aliases: ['u'],\n description: 'Output in unified format',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'ignore-case',\n aliases: ['i'],\n description: 'Ignore case differences',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const unified = command.args['unified'] || command.args['u'] || false;\n const ignoreCase =\n command.args['ignore-case'] || command.args['i'] || false;\n const paths = this.parsePaths(command);\n\n if (paths.length < 2) {\n context.writer.writeError('diff: missing operand');\n return;\n }\n\n const file1 = paths[0];\n const file2 = paths[1];\n\n if (!fs.exists(file1)) {\n context.writer.writeError(\n `diff: ${file1}: No such file or directory`,\n );\n return;\n }\n if (!fs.exists(file2)) {\n context.writer.writeError(\n `diff: ${file2}: No such file or directory`,\n );\n return;\n }\n\n const content1 = fs.readFile(file1) || '';\n const content2 = fs.readFile(file2) || '';\n\n const lines1 = content1.split('\\n');\n const lines2 = content2.split('\\n');\n\n const lcs = this.computeLCS(lines1, lines2, ignoreCase);\n\n if (unified) {\n this.outputUnified(file1, file2, lines1, lines2, lcs, ignoreCase, context);\n } else {\n this.outputNormal(lines1, lines2, lcs, ignoreCase, context);\n }\n }\n\n private linesEqual(\n a: string,\n b: string,\n ignoreCase: boolean,\n ): boolean {\n if (ignoreCase) {\n return a.toLowerCase() === b.toLowerCase();\n }\n return a === b;\n }\n\n private computeLCS(\n lines1: string[],\n lines2: string[],\n ignoreCase: boolean,\n ): string[] {\n const m = lines1.length;\n const n = lines2.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () =>\n new Array(n + 1).fill(0),\n );\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (this.linesEqual(lines1[i - 1], lines2[j - 1], ignoreCase)) {\n dp[i][j] = dp[i - 1][j - 1] + 1;\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n\n // Backtrack to find LCS\n const result: string[] = [];\n let i = m;\n let j = n;\n while (i > 0 && j > 0) {\n if (this.linesEqual(lines1[i - 1], lines2[j - 1], ignoreCase)) {\n result.unshift(lines1[i - 1]);\n i--;\n j--;\n } else if (dp[i - 1][j] >= dp[i][j - 1]) {\n i--;\n } else {\n j--;\n }\n }\n\n return result;\n }\n\n private outputNormal(\n lines1: string[],\n lines2: string[],\n lcs: string[],\n ignoreCase: boolean,\n context: ICliExecutionContext,\n ): void {\n let i1 = 0;\n let i2 = 0;\n let il = 0;\n\n while (i1 < lines1.length || i2 < lines2.length) {\n if (\n il < lcs.length &&\n i1 < lines1.length &&\n this.linesEqual(lines1[i1], lcs[il], ignoreCase)\n ) {\n if (i2 < lines2.length && this.linesEqual(lines2[i2], lcs[il], ignoreCase)) {\n i1++;\n i2++;\n il++;\n } else {\n const line = context.writer.wrapInColor(\n `> ${lines2[i2]}`,\n CliForegroundColor.Green,\n );\n context.writer.writeln(line);\n i2++;\n }\n } else if (i1 < lines1.length && (il >= lcs.length || !this.linesEqual(lines1[i1], lcs[il], ignoreCase))) {\n const line = context.writer.wrapInColor(\n `< ${lines1[i1]}`,\n CliForegroundColor.Red,\n );\n context.writer.writeln(line);\n i1++;\n } else if (i2 < lines2.length) {\n const line = context.writer.wrapInColor(\n `> ${lines2[i2]}`,\n CliForegroundColor.Green,\n );\n context.writer.writeln(line);\n i2++;\n } else {\n break;\n }\n }\n }\n\n private outputUnified(\n file1: string,\n file2: string,\n lines1: string[],\n lines2: string[],\n lcs: string[],\n ignoreCase: boolean,\n context: ICliExecutionContext,\n ): void {\n // Build diff entries\n const entries: Array<{ type: 'same' | 'remove' | 'add'; line: string }> = [];\n\n let i1 = 0;\n let i2 = 0;\n let il = 0;\n\n while (i1 < lines1.length || i2 < lines2.length) {\n if (\n il < lcs.length &&\n i1 < lines1.length &&\n this.linesEqual(lines1[i1], lcs[il], ignoreCase)\n ) {\n if (i2 < lines2.length && this.linesEqual(lines2[i2], lcs[il], ignoreCase)) {\n entries.push({ type: 'same', line: lines1[i1] });\n i1++;\n i2++;\n il++;\n } else {\n entries.push({ type: 'add', line: lines2[i2] });\n i2++;\n }\n } else if (i1 < lines1.length && (il >= lcs.length || !this.linesEqual(lines1[i1], lcs[il], ignoreCase))) {\n entries.push({ type: 'remove', line: lines1[i1] });\n i1++;\n } else if (i2 < lines2.length) {\n entries.push({ type: 'add', line: lines2[i2] });\n i2++;\n } else {\n break;\n }\n }\n\n // Check if there are any changes\n const hasChanges = entries.some((e) => e.type !== 'same');\n if (!hasChanges) return;\n\n // Output header\n context.writer.writeln(`--- ${file1}`);\n context.writer.writeln(`+++ ${file2}`);\n\n // Output hunk header\n context.writer.writeln(\n `@@ -1,${lines1.length} +1,${lines2.length} @@`,\n );\n\n // Output entries\n for (const entry of entries) {\n if (entry.type === 'same') {\n context.writer.writeln(` ${entry.line}`);\n } else if (entry.type === 'remove') {\n const line = context.writer.wrapInColor(\n `-${entry.line}`,\n CliForegroundColor.Red,\n );\n context.writer.writeln(line);\n } else {\n const line = context.writer.wrapInColor(\n `+${entry.line}`,\n CliForegroundColor.Green,\n );\n context.writer.writeln(line);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTeeCommandProcessor implements ICliCommandProcessor {\n command = 'tee';\n description = 'Read from a file and write to output files and stdout';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔀', module: 'file management' };\n\n parameters = [\n {\n name: 'append',\n aliases: ['a'],\n description: 'Append to the given files, do not overwrite',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const append = command.args['append'] || command.args['a'] || false;\n const parsed = this.parseArgs(command);\n\n let content: string;\n\n if (command.data != null) {\n // Piped mode: all positional args are output files\n content =\n typeof command.data === 'string'\n ? command.data\n : JSON.stringify(command.data);\n const outputFiles = this.getAllPaths(command);\n\n // Write to stdout\n context.writer.writeln(content);\n\n // Write to each output file\n for (const outFile of outputFiles) {\n if (append && fs.exists(outFile)) {\n fs.writeFile(outFile, content, true);\n } else {\n fs.writeFile(outFile, content);\n }\n }\n await fs.persist();\n } else {\n // File mode: last arg is input, rest are output\n if (parsed.outputFiles.length === 0 && !parsed.inputFile) {\n context.writer.writeError('tee: missing operand');\n return;\n }\n\n if (!parsed.inputFile) {\n context.writer.writeError('tee: missing input file');\n return;\n }\n\n if (parsed.outputFiles.length === 0) {\n context.writer.writeError('tee: missing output file');\n return;\n }\n\n if (!fs.exists(parsed.inputFile)) {\n context.writer.writeError(\n `tee: ${parsed.inputFile}: No such file or directory`,\n );\n return;\n }\n\n content = fs.readFile(parsed.inputFile) || '';\n\n // Write to stdout\n context.writer.writeln(content);\n\n // Write to each output file\n for (const outFile of parsed.outputFiles) {\n if (append && fs.exists(outFile)) {\n fs.writeFile(outFile, content, true);\n } else {\n fs.writeFile(outFile, content);\n }\n }\n\n await fs.persist();\n }\n }\n\n private getAllPaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n\n private parseArgs(command: CliProcessCommand): {\n outputFiles: string[];\n inputFile: string | null;\n } {\n const raw = command.value || '';\n const paths = raw.split(/\\s+/).filter(Boolean);\n\n // Last path is input file, rest are output files\n if (paths.length < 2) {\n return {\n outputFiles: [],\n inputFile: paths[0] || null,\n };\n }\n\n const inputFile = paths[paths.length - 1];\n const outputFiles = paths.slice(0, paths.length - 1);\n return { outputFiles, inputFile };\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliXargsCommandProcessor implements ICliCommandProcessor {\n command = 'xargs';\n description = 'Build and execute commands from file input';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '⚡', module: 'file management' };\n\n parameters = [\n {\n name: 'replace',\n aliases: ['I'],\n description: 'Replace string in command template (e.g., -I {})',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'max-args',\n aliases: ['n'],\n description: 'Maximum number of arguments per command',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const replaceStr =\n command.args['replace'] || command.args['I'] || null;\n const maxArgs = parseInt(\n command.args['max-args'] || command.args['n'] || '0',\n 10,\n );\n const parsed = this.parseArgs(command);\n\n let commandTemplate: string;\n let argContent: string;\n\n if (command.data != null) {\n // Piped mode: all non-flag tokens form the command template\n commandTemplate = this.getAllNonFlagTokens(command).join(' ');\n if (!commandTemplate) {\n context.writer.writeError('xargs: missing command');\n return;\n }\n argContent =\n typeof command.data === 'string'\n ? command.data\n : JSON.stringify(command.data);\n } else {\n if (!parsed.commandTemplate) {\n context.writer.writeError('xargs: missing command');\n return;\n }\n commandTemplate = parsed.commandTemplate;\n\n if (!parsed.inputFile) {\n context.writer.writeError('xargs: missing input file');\n return;\n }\n if (!fs.exists(parsed.inputFile)) {\n context.writer.writeError(\n `xargs: ${parsed.inputFile}: No such file or directory`,\n );\n return;\n }\n argContent = fs.readFile(parsed.inputFile) || '';\n }\n\n const args = argContent\n .split('\\n')\n .map((l) => l.trim())\n .filter(Boolean);\n\n if (args.length === 0) return;\n\n const commands: string[] = [];\n\n if (replaceStr) {\n // Replace mode: one command per arg\n for (const arg of args) {\n const cmd = commandTemplate.replace(\n new RegExp(this.escapeRegex(replaceStr), 'g'),\n arg,\n );\n commands.push(cmd);\n }\n } else if (maxArgs > 0) {\n // Group mode\n for (let i = 0; i < args.length; i += maxArgs) {\n const group = args.slice(i, i + maxArgs);\n commands.push(\n `${commandTemplate} ${group.join(' ')}`,\n );\n }\n } else {\n // All args at once\n commands.push(\n `${commandTemplate} ${args.join(' ')}`,\n );\n }\n\n // Try to execute via executor, or just output the commands\n const executor = context.executor;\n for (const cmd of commands) {\n if (executor && typeof executor.executeCommand === 'function') {\n try {\n await executor.executeCommand(cmd, context);\n } catch {\n context.writer.writeln(cmd);\n }\n } else {\n context.writer.writeln(cmd);\n }\n }\n }\n\n private getAllNonFlagTokens(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n\n private escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n private parseArgs(command: CliProcessCommand): {\n commandTemplate: string | null;\n inputFile: string | null;\n } {\n const raw = command.value || '';\n const nonFlagTokens = raw.split(/\\s+/).filter(Boolean);\n\n // Last token is input file, rest form the command template\n if (nonFlagTokens.length < 2) {\n return {\n commandTemplate: nonFlagTokens[0] || null,\n inputFile: null,\n };\n }\n\n const inputFile = nonFlagTokens[nonFlagTokens.length - 1];\n const commandTemplate = nonFlagTokens\n .slice(0, nonFlagTokens.length - 1)\n .join(' ');\n return { commandTemplate, inputFile };\n }\n}\n","import {\n CliProcessCommand,\n CliForegroundColor,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\n/**\n * Execute a script file containing CLI commands.\n *\n * Supported syntax inside scripts:\n * - One command per line (pipes, operators, redirects all work)\n * - `# comment` lines and blank lines are ignored\n * - `set -e` (default) — stop on first error\n * - `set +e` — continue on errors\n * - `VAR=value` — variable assignment (script-scoped)\n * - `$VAR` / `${VAR}` — variable substitution\n */\nexport class CliShCommandProcessor implements ICliCommandProcessor {\n command = 'sh';\n aliases = ['source', '.'];\n description = 'Execute a script file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📜', module: 'file management' };\n\n parameters = [\n {\n name: 'e',\n aliases: ['stop-on-error'],\n description: 'Stop execution on first error (default)',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n let filePath = (command.value || '').trim();\n\n // When invoked via alias (source, .), getRightOfWord fails to extract\n // the value because it looks for 'sh' in the command string. Fall back\n // to parsing the raw command.\n if (!filePath && command.rawCommand) {\n const raw = command.rawCommand.trim();\n const firstSpace = raw.indexOf(' ');\n if (firstSpace > -1) {\n filePath = raw.slice(firstSpace + 1).trim();\n }\n }\n\n if (!filePath) {\n context.writer.writeError('sh: missing file operand');\n context.process.exit(1, { silent: true });\n return;\n }\n\n const resolved = fs.resolvePath(filePath);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `sh: ${filePath}: No such file or directory`,\n );\n context.process.exit(1, { silent: true });\n return;\n }\n\n if (node.type !== 'file') {\n context.writer.writeError(\n `sh: ${filePath}: Is a directory`,\n );\n context.process.exit(1, { silent: true });\n return;\n }\n\n const content = fs.readFile(resolved);\n if (content === null || content === undefined) {\n context.writer.writeError(\n `sh: ${filePath}: Cannot read file`,\n );\n context.process.exit(1, { silent: true });\n return;\n }\n\n await executeScript(content, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln(this.description);\n writer.writeln();\n writer.writeln('Usage:');\n writer.writeln(\n ` ${writer.wrapInColor('sh <script.sh>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('source <script.sh>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('. <script.sh>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('./script.sh', CliForegroundColor.Cyan)} (requires execute permission)`,\n );\n writer.writeln();\n writer.writeln('Script syntax:');\n writer.writeln(' # Lines starting with # are comments');\n writer.writeln(' VAR=value # Variable assignment');\n writer.writeln(' echo $VAR # Variable substitution');\n writer.writeln(' set -e # Stop on error (default)');\n writer.writeln(' set +e # Continue on errors');\n writer.writeln();\n writer.writeln('Example script:');\n writer.writeln(\n writer.wrapInColor(\n ' #!/bin/sh\\n' +\n ' # Setup script\\n' +\n ' NAME=world\\n' +\n ' echo Hello $NAME\\n' +\n ' mkdir -p /tmp/test\\n' +\n ' echo done > /tmp/test/status.txt',\n CliForegroundColor.Green,\n ),\n );\n }\n}\n\n/**\n * Parse and execute script content line by line.\n *\n * Exported so the executor can reuse it for `./script.sh` execution.\n */\nexport async function executeScript(\n content: string,\n context: ICliExecutionContext,\n): Promise<void> {\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 // Skip empty lines and comments\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n // Handle set -e / set +e\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: VAR=value (no spaces around =)\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 // Strip surrounding quotes\n if (\n (varValue.startsWith('\"') && varValue.endsWith('\"')) ||\n (varValue.startsWith(\"'\") && varValue.endsWith(\"'\"))\n ) {\n varValue = varValue.slice(1, -1);\n }\n // Substitute variables in the value itself\n varValue = substituteVariables(varValue, variables);\n variables[varName] = varValue;\n continue;\n }\n\n // Substitute variables in the command line\n const expanded = substituteVariables(line, variables);\n\n // Execute the command\n await context.executor.executeCommand(expanded, context);\n\n const exitCode = context.process.exitCode;\n if (stopOnError && exitCode !== undefined && exitCode !== 0) {\n context.writer.writeError(\n `sh: script aborted at line: ${line}`,\n );\n return;\n }\n }\n}\n\n/**\n * Replace `$VAR` and `${VAR}` with values from the variables map.\n * Undefined variables expand to empty string.\n */\nfunction substituteVariables(\n input: string,\n variables: Record<string, string>,\n): string {\n // ${VAR} form\n let result = input.replace(\n /\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g,\n (_, name) => variables[name] ?? '',\n );\n // $VAR form (must not be followed by { which was already handled)\n result = result.replace(\n /\\$([A-Za-z_][A-Za-z0-9_]*)/g,\n (_, name) => variables[name] ?? '',\n );\n return result;\n}\n","import { ICliOwnership } from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService } from '../interfaces/i-file-system-service';\n\nconst DB_NAME = 'qodalis-cli-filesystem';\nconst STORE_NAME = 'filesystem';\nconst ROOT_KEY = 'root';\nconst CWD_KEY = 'cwd';\nconst HOME_KEY = 'home';\nconst DEFAULT_HOME = '/';\n\nfunction createSeedFileSystem(): IFileNode {\n const now = Date.now();\n return {\n name: '',\n type: 'directory',\n children: [\n {\n name: 'home',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n },\n {\n name: 'tmp',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxrwxrwx',\n },\n {\n name: 'etc',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n },\n ],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n };\n}\n\nexport class IndexedDbFileSystemService implements IFileSystemService {\n private root: IFileNode = createSeedFileSystem();\n private cwd: string = DEFAULT_HOME;\n private homePath: string = DEFAULT_HOME;\n private currentUid: string | null = null;\n private currentGroups: string[] = [];\n\n // --- User context ---\n\n setCurrentUser(uid: string, groups: string[]): void {\n this.currentUid = uid;\n this.currentGroups = groups;\n }\n\n private getDefaultOwnership(): ICliOwnership | undefined {\n if (!this.currentUid) return undefined;\n return {\n uid: this.currentUid,\n gid: this.currentGroups[0] || 'users',\n };\n }\n\n // --- Navigation ---\n\n getCurrentDirectory(): string {\n return this.cwd;\n }\n\n setCurrentDirectory(path: string): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`cd: ${path}: No such file or directory`);\n }\n if (node.type !== 'directory') {\n throw new Error(`cd: ${path}: Not a directory`);\n }\n this.cwd = resolved;\n }\n\n getHomePath(): string {\n return this.homePath;\n }\n\n setHomePath(path: string): void {\n this.homePath = path;\n }\n\n resolvePath(path: string): string {\n if (path === '~' || path === '') {\n return this.homePath;\n }\n if (path.startsWith('~/')) {\n path = this.homePath + path.substring(1);\n }\n\n const parts = path.startsWith('/')\n ? path.split('/')\n : (this.cwd + '/' + path).split('/');\n\n const resolved: string[] = [];\n for (const part of parts) {\n if (part === '' || part === '.') {\n continue;\n } else if (part === '..') {\n resolved.pop();\n } else {\n resolved.push(part);\n }\n }\n\n return '/' + resolved.join('/');\n }\n\n // --- Read operations ---\n\n getNode(path: string): IFileNode | null {\n const resolved = path === '/' ? '/' : this.resolvePath(path);\n if (resolved === '/') {\n return this.root;\n }\n\n const parts = resolved.split('/').filter(Boolean);\n let current = this.root;\n\n for (const part of parts) {\n if (current.type !== 'directory' || !current.children) {\n return null;\n }\n const child = current.children.find((c) => c.name === part);\n if (!child) {\n return null;\n }\n current = child;\n }\n\n return current;\n }\n\n listDirectory(path: string): IFileNode[] {\n const node = this.getNode(path);\n if (!node) {\n throw new Error(`ls: ${path}: No such file or directory`);\n }\n if (node.type !== 'directory') {\n throw new Error(`ls: ${path}: Not a directory`);\n }\n return node.children || [];\n }\n\n readFile(path: string): string | null {\n const node = this.getNode(path);\n if (!node) {\n throw new Error(`cat: ${path}: No such file or directory`);\n }\n if (node.type === 'directory') {\n throw new Error(`cat: ${path}: Is a directory`);\n }\n return node.content ?? '';\n }\n\n exists(path: string): boolean {\n return this.getNode(path) !== null;\n }\n\n isDirectory(path: string): boolean {\n const node = this.getNode(path);\n return node !== null && node.type === 'directory';\n }\n\n // --- Write operations ---\n\n createDirectory(path: string, recursive = false): void {\n const resolved = this.resolvePath(path);\n const parts = resolved.split('/').filter(Boolean);\n\n if (parts.length === 0) {\n throw new Error(`mkdir: cannot create directory '/': File exists`);\n }\n\n if (recursive) {\n let current = this.root;\n for (const part of parts) {\n if (!current.children) {\n current.children = [];\n }\n let child = current.children.find((c) => c.name === part);\n if (!child) {\n const now = Date.now();\n child = {\n name: part,\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n ownership: this.getDefaultOwnership(),\n };\n current.children.push(child);\n current.modifiedAt = now;\n } else if (child.type !== 'directory') {\n throw new Error(`mkdir: ${part}: Not a directory`);\n }\n current = child;\n }\n } else {\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const dirName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent) {\n throw new Error(\n `mkdir: ${parentPath}: No such file or directory`,\n );\n }\n if (parent.type !== 'directory') {\n throw new Error(`mkdir: ${parentPath}: Not a directory`);\n }\n if (parent.children?.find((c) => c.name === dirName)) {\n throw new Error(`mkdir: ${path}: File exists`);\n }\n\n const now = Date.now();\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push({\n name: dirName,\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n ownership: this.getDefaultOwnership(),\n });\n parent.modifiedAt = now;\n }\n }\n\n createFile(path: string, content = ''): void {\n const resolved = this.resolvePath(path);\n const parts = resolved.split('/').filter(Boolean);\n\n if (parts.length === 0) {\n throw new Error(`touch: cannot create file at root`);\n }\n\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const fileName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent) {\n throw new Error(`touch: ${parentPath}: No such file or directory`);\n }\n if (parent.type !== 'directory') {\n throw new Error(`touch: ${parentPath}: Not a directory`);\n }\n\n const existing = parent.children?.find((c) => c.name === fileName);\n const now = Date.now();\n\n if (existing) {\n existing.modifiedAt = now;\n } else {\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push({\n name: fileName,\n type: 'file',\n content,\n createdAt: now,\n modifiedAt: now,\n size: new Blob([content]).size,\n permissions: 'rw-r--r--',\n ownership: this.getDefaultOwnership(),\n });\n parent.modifiedAt = now;\n }\n }\n\n writeFile(path: string, content: string, append = false): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n\n if (node) {\n if (node.type === 'directory') {\n throw new Error(`write: ${path}: Is a directory`);\n }\n const now = Date.now();\n node.content = append ? (node.content ?? '') + content : content;\n node.size = new Blob([node.content]).size;\n node.modifiedAt = now;\n } else {\n this.createFile(resolved, content);\n }\n }\n\n remove(path: string, recursive = false): void {\n const resolved = this.resolvePath(path);\n if (resolved === '/') {\n throw new Error(`rm: cannot remove root directory`);\n }\n\n const parts = resolved.split('/').filter(Boolean);\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const name = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent || !parent.children) {\n throw new Error(`rm: ${path}: No such file or directory`);\n }\n\n const index = parent.children.findIndex((c) => c.name === name);\n if (index === -1) {\n throw new Error(`rm: ${path}: No such file or directory`);\n }\n\n const target = parent.children[index];\n if (target.type === 'directory' && !recursive) {\n throw new Error(`rm: ${path}: Is a directory`);\n }\n\n parent.children.splice(index, 1);\n parent.modifiedAt = Date.now();\n }\n\n copy(src: string, dest: string, recursive = false): void {\n const srcResolved = this.resolvePath(src);\n const srcNode = this.getNode(srcResolved);\n\n if (!srcNode) {\n throw new Error(`cp: ${src}: No such file or directory`);\n }\n if (srcNode.type === 'directory' && !recursive) {\n throw new Error(\n `cp: -r not specified; omitting directory '${src}'`,\n );\n }\n\n const destResolved = this.resolvePath(dest);\n const destNode = this.getNode(destResolved);\n\n if (destNode && destNode.type === 'directory') {\n const clone = this.cloneNode(srcNode);\n if (!destNode.children) {\n destNode.children = [];\n }\n const existingIdx = destNode.children.findIndex(\n (c) => c.name === clone.name,\n );\n if (existingIdx !== -1) {\n destNode.children.splice(existingIdx, 1);\n }\n destNode.children.push(clone);\n destNode.modifiedAt = Date.now();\n } else {\n const parts = destResolved.split('/').filter(Boolean);\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const newName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent || parent.type !== 'directory') {\n throw new Error(`cp: ${parentPath}: No such file or directory`);\n }\n\n const clone = this.cloneNode(srcNode);\n clone.name = newName;\n if (!parent.children) {\n parent.children = [];\n }\n const existingIdx = parent.children.findIndex(\n (c) => c.name === newName,\n );\n if (existingIdx !== -1) {\n parent.children.splice(existingIdx, 1);\n }\n parent.children.push(clone);\n parent.modifiedAt = Date.now();\n }\n }\n\n move(src: string, dest: string): void {\n const srcResolved = this.resolvePath(src);\n if (srcResolved === '/') {\n throw new Error(`mv: cannot move root directory`);\n }\n\n const srcNode = this.getNode(srcResolved);\n if (!srcNode) {\n throw new Error(`mv: ${src}: No such file or directory`);\n }\n\n const destResolved = this.resolvePath(dest);\n const destNode = this.getNode(destResolved);\n\n const srcParts = srcResolved.split('/').filter(Boolean);\n const srcParentPath = '/' + srcParts.slice(0, -1).join('/');\n const srcParent = this.getNode(srcParentPath);\n\n if (!srcParent || !srcParent.children) {\n throw new Error(`mv: ${src}: No such file or directory`);\n }\n\n const srcIndex = srcParent.children.findIndex(\n (c) => c.name === srcNode.name,\n );\n\n if (destNode && destNode.type === 'directory') {\n if (!destNode.children) {\n destNode.children = [];\n }\n const existingIdx = destNode.children.findIndex(\n (c) => c.name === srcNode.name,\n );\n if (existingIdx !== -1) {\n destNode.children.splice(existingIdx, 1);\n }\n srcParent.children.splice(srcIndex, 1);\n destNode.children.push(srcNode);\n destNode.modifiedAt = Date.now();\n } else {\n const destParts = destResolved.split('/').filter(Boolean);\n const destParentPath = '/' + destParts.slice(0, -1).join('/');\n const newName = destParts[destParts.length - 1];\n const destParent = this.getNode(destParentPath);\n\n if (!destParent || destParent.type !== 'directory') {\n throw new Error(\n `mv: ${destParentPath}: No such file or directory`,\n );\n }\n\n srcParent.children.splice(srcIndex, 1);\n srcNode.name = newName;\n if (!destParent.children) {\n destParent.children = [];\n }\n const existingIdx = destParent.children.findIndex(\n (c) => c.name === newName,\n );\n if (existingIdx !== -1) {\n destParent.children.splice(existingIdx, 1);\n }\n destParent.children.push(srcNode);\n destParent.modifiedAt = Date.now();\n }\n\n srcParent.modifiedAt = Date.now();\n }\n\n // --- Permissions ---\n\n chmod(path: string, permissions: string): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`chmod: ${path}: No such file or directory`);\n }\n node.permissions = permissions;\n }\n\n chown(path: string, ownership: ICliOwnership): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`chown: ${path}: No such file or directory`);\n }\n node.ownership = ownership;\n }\n\n // --- Persistence ---\n\n async initialize(): Promise<void> {\n const db = await this.openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readonly');\n const store = tx.objectStore(STORE_NAME);\n\n const rootData = await this.idbGet<IFileNode>(store, ROOT_KEY);\n const cwdData = await this.idbGet<string>(store, CWD_KEY);\n const homeData = await this.idbGet<string>(store, HOME_KEY);\n\n if (rootData) {\n this.root = rootData;\n }\n if (cwdData) {\n this.cwd = cwdData;\n }\n if (homeData) {\n this.homePath = homeData;\n }\n } finally {\n db.close();\n }\n }\n\n async persist(): Promise<void> {\n const db = await this.openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n\n store.put(this.root, ROOT_KEY);\n store.put(this.cwd, CWD_KEY);\n store.put(this.homePath, HOME_KEY);\n\n await new Promise<void>((resolve, reject) => {\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n } finally {\n db.close();\n }\n }\n\n // --- Private helpers ---\n\n private cloneNode(node: IFileNode): IFileNode {\n const now = Date.now();\n const clone: IFileNode = {\n name: node.name,\n type: node.type,\n createdAt: now,\n modifiedAt: now,\n size: node.size,\n permissions: node.permissions,\n ownership: node.ownership ? { ...node.ownership } : undefined,\n };\n\n if (node.type === 'file') {\n clone.content = node.content;\n } else {\n clone.children = (node.children || []).map((c) =>\n this.cloneNode(c),\n );\n }\n\n return clone;\n }\n\n private openDb(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME);\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n }\n\n private idbGet<T>(store: IDBObjectStore, key: string): Promise<T | null> {\n return new Promise((resolve, reject) => {\n const request = store.get(key);\n request.onsuccess = () => resolve(request.result ?? null);\n request.onerror = () => reject(request.error);\n });\n }\n}\n","import { ICliOwnership } from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService } from '../interfaces/i-file-system-service';\n\nconst DEFAULT_HOME = '/home/user';\n\n/**\n * Configuration options for the ServerFileSystemService.\n */\nexport interface ServerFileSystemOptions {\n /** Base URL of the CLI server, e.g. 'http://localhost:8047' */\n baseUrl: string;\n}\n\n/**\n * Response shape from GET /api/qcli/fs/ls\n */\ninterface LsResponse {\n entries: Array<{\n name: string;\n type: 'file' | 'directory';\n size: number;\n modified: string;\n permissions?: string;\n }>;\n}\n\n/**\n * Response shape from GET /api/qcli/fs/cat\n */\ninterface CatResponse {\n content: string;\n}\n\n/**\n * Response shape from GET /api/qcli/fs/stat\n */\ninterface StatResponse {\n name: string;\n type: 'file' | 'directory';\n size: number;\n created: string;\n modified: string;\n permissions?: string;\n}\n\n/**\n * Creates a minimal root seed filesystem for initial local state.\n */\nfunction createSeedFileSystem(): IFileNode {\n const now = Date.now();\n return {\n name: '',\n type: 'directory',\n children: [\n {\n name: 'home',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n },\n {\n name: 'tmp',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxrwxrwx',\n },\n {\n name: 'etc',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n },\n ],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n };\n}\n\n/**\n * IFileSystemService implementation that delegates operations to a CLI server's\n * `/api/qcli/fs/*` REST endpoints.\n *\n * Because the IFileSystemService interface is synchronous, this service maintains\n * an in-memory file tree that is returned immediately by read operations. Write\n * operations update the local tree first (for instant feedback) and then fire\n * asynchronous requests to the server for persistence. The `initialize()` method\n * fetches the initial directory listing from the server.\n */\nexport class ServerFileSystemService implements IFileSystemService {\n private root: IFileNode = createSeedFileSystem();\n private cwd: string = DEFAULT_HOME;\n private homePath: string = DEFAULT_HOME;\n private currentUid: string | null = null;\n private currentGroups: string[] = [];\n private readonly baseUrl: string;\n\n constructor(options: ServerFileSystemOptions) {\n // Strip trailing slash for consistent URL building\n this.baseUrl = options.baseUrl.replace(/\\/+$/, '');\n }\n\n // --- User context ---\n\n setCurrentUser(uid: string, groups: string[]): void {\n this.currentUid = uid;\n this.currentGroups = groups;\n }\n\n private getDefaultOwnership(): ICliOwnership | undefined {\n if (!this.currentUid) return undefined;\n return {\n uid: this.currentUid,\n gid: this.currentGroups[0] || 'users',\n };\n }\n\n // --- Navigation ---\n\n getCurrentDirectory(): string {\n return this.cwd;\n }\n\n setCurrentDirectory(path: string): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`cd: ${path}: No such file or directory`);\n }\n if (node.type !== 'directory') {\n throw new Error(`cd: ${path}: Not a directory`);\n }\n this.cwd = resolved;\n }\n\n getHomePath(): string {\n return this.homePath;\n }\n\n setHomePath(path: string): void {\n this.homePath = path;\n }\n\n resolvePath(path: string): string {\n if (path === '~' || path === '') {\n return this.homePath;\n }\n if (path.startsWith('~/')) {\n path = this.homePath + path.substring(1);\n }\n\n const parts = path.startsWith('/')\n ? path.split('/')\n : (this.cwd + '/' + path).split('/');\n\n const resolved: string[] = [];\n for (const part of parts) {\n if (part === '' || part === '.') {\n continue;\n } else if (part === '..') {\n resolved.pop();\n } else {\n resolved.push(part);\n }\n }\n\n return '/' + resolved.join('/');\n }\n\n // --- Read operations (synchronous, from local cache) ---\n\n getNode(path: string): IFileNode | null {\n const resolved = path === '/' ? '/' : this.resolvePath(path);\n if (resolved === '/') {\n return this.root;\n }\n\n const parts = resolved.split('/').filter(Boolean);\n let current = this.root;\n\n for (const part of parts) {\n if (current.type !== 'directory' || !current.children) {\n return null;\n }\n const child = current.children.find((c) => c.name === part);\n if (!child) {\n return null;\n }\n current = child;\n }\n\n return current;\n }\n\n listDirectory(path: string): IFileNode[] {\n const node = this.getNode(path);\n if (!node) {\n throw new Error(`ls: ${path}: No such file or directory`);\n }\n if (node.type !== 'directory') {\n throw new Error(`ls: ${path}: Not a directory`);\n }\n return node.children || [];\n }\n\n readFile(path: string): string | null {\n const node = this.getNode(path);\n if (!node) {\n throw new Error(`cat: ${path}: No such file or directory`);\n }\n if (node.type === 'directory') {\n throw new Error(`cat: ${path}: Is a directory`);\n }\n return node.content ?? '';\n }\n\n exists(path: string): boolean {\n return this.getNode(path) !== null;\n }\n\n isDirectory(path: string): boolean {\n const node = this.getNode(path);\n return node !== null && node.type === 'directory';\n }\n\n // --- Write operations (update local cache + fire-and-forget server call) ---\n\n createDirectory(path: string, recursive = false): void {\n const resolved = this.resolvePath(path);\n const parts = resolved.split('/').filter(Boolean);\n\n if (parts.length === 0) {\n throw new Error(`mkdir: cannot create directory '/': File exists`);\n }\n\n if (recursive) {\n let current = this.root;\n for (const part of parts) {\n if (!current.children) {\n current.children = [];\n }\n let child = current.children.find((c) => c.name === part);\n if (!child) {\n const now = Date.now();\n child = {\n name: part,\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n ownership: this.getDefaultOwnership(),\n };\n current.children.push(child);\n current.modifiedAt = now;\n } else if (child.type !== 'directory') {\n throw new Error(`mkdir: ${part}: Not a directory`);\n }\n current = child;\n }\n } else {\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const dirName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent) {\n throw new Error(\n `mkdir: ${parentPath}: No such file or directory`,\n );\n }\n if (parent.type !== 'directory') {\n throw new Error(`mkdir: ${parentPath}: Not a directory`);\n }\n if (parent.children?.find((c) => c.name === dirName)) {\n throw new Error(`mkdir: ${path}: File exists`);\n }\n\n const now = Date.now();\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push({\n name: dirName,\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n ownership: this.getDefaultOwnership(),\n });\n parent.modifiedAt = now;\n }\n\n // Fire-and-forget server call\n this.serverMkdir(resolved).catch((err) =>\n console.error('[ServerFS] mkdir failed:', err),\n );\n }\n\n createFile(path: string, content = ''): void {\n const resolved = this.resolvePath(path);\n const parts = resolved.split('/').filter(Boolean);\n\n if (parts.length === 0) {\n throw new Error(`touch: cannot create file at root`);\n }\n\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const fileName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent) {\n throw new Error(`touch: ${parentPath}: No such file or directory`);\n }\n if (parent.type !== 'directory') {\n throw new Error(`touch: ${parentPath}: Not a directory`);\n }\n\n const existing = parent.children?.find((c) => c.name === fileName);\n const now = Date.now();\n\n if (existing) {\n existing.modifiedAt = now;\n } else {\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push({\n name: fileName,\n type: 'file',\n content,\n createdAt: now,\n modifiedAt: now,\n size: new Blob([content]).size,\n permissions: 'rw-r--r--',\n ownership: this.getDefaultOwnership(),\n });\n parent.modifiedAt = now;\n }\n\n // Fire-and-forget server upload\n this.serverUpload(resolved, content).catch((err) =>\n console.error('[ServerFS] createFile upload failed:', err),\n );\n }\n\n writeFile(path: string, content: string, append = false): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n\n if (node) {\n if (node.type === 'directory') {\n throw new Error(`write: ${path}: Is a directory`);\n }\n const now = Date.now();\n node.content = append ? (node.content ?? '') + content : content;\n node.size = new Blob([node.content]).size;\n node.modifiedAt = now;\n } else {\n this.createFile(resolved, content);\n return; // createFile already handles server upload\n }\n\n // Fire-and-forget server upload with full content\n this.serverUpload(resolved, node.content!).catch((err) =>\n console.error('[ServerFS] writeFile upload failed:', err),\n );\n }\n\n remove(path: string, recursive = false): void {\n const resolved = this.resolvePath(path);\n if (resolved === '/') {\n throw new Error(`rm: cannot remove root directory`);\n }\n\n const parts = resolved.split('/').filter(Boolean);\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const name = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent || !parent.children) {\n throw new Error(`rm: ${path}: No such file or directory`);\n }\n\n const index = parent.children.findIndex((c) => c.name === name);\n if (index === -1) {\n throw new Error(`rm: ${path}: No such file or directory`);\n }\n\n const target = parent.children[index];\n if (target.type === 'directory' && !recursive) {\n throw new Error(`rm: ${path}: Is a directory`);\n }\n\n parent.children.splice(index, 1);\n parent.modifiedAt = Date.now();\n\n // Fire-and-forget server call\n this.serverRm(resolved).catch((err) =>\n console.error('[ServerFS] rm failed:', err),\n );\n }\n\n copy(src: string, dest: string, recursive = false): void {\n const srcResolved = this.resolvePath(src);\n const srcNode = this.getNode(srcResolved);\n\n if (!srcNode) {\n throw new Error(`cp: ${src}: No such file or directory`);\n }\n if (srcNode.type === 'directory' && !recursive) {\n throw new Error(\n `cp: -r not specified; omitting directory '${src}'`,\n );\n }\n\n const destResolved = this.resolvePath(dest);\n const destNode = this.getNode(destResolved);\n\n if (destNode && destNode.type === 'directory') {\n const clone = this.cloneNode(srcNode);\n if (!destNode.children) {\n destNode.children = [];\n }\n const existingIdx = destNode.children.findIndex(\n (c) => c.name === clone.name,\n );\n if (existingIdx !== -1) {\n destNode.children.splice(existingIdx, 1);\n }\n destNode.children.push(clone);\n destNode.modifiedAt = Date.now();\n } else {\n const parts = destResolved.split('/').filter(Boolean);\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const newName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent || parent.type !== 'directory') {\n throw new Error(`cp: ${parentPath}: No such file or directory`);\n }\n\n const clone = this.cloneNode(srcNode);\n clone.name = newName;\n if (!parent.children) {\n parent.children = [];\n }\n const existingIdx = parent.children.findIndex(\n (c) => c.name === newName,\n );\n if (existingIdx !== -1) {\n parent.children.splice(existingIdx, 1);\n }\n parent.children.push(clone);\n parent.modifiedAt = Date.now();\n }\n\n // Sync copied files to server (upload all file nodes in the clone)\n this.syncTreeToServer(destResolved).catch((err) =>\n console.error('[ServerFS] copy sync failed:', err),\n );\n }\n\n move(src: string, dest: string): void {\n const srcResolved = this.resolvePath(src);\n if (srcResolved === '/') {\n throw new Error(`mv: cannot move root directory`);\n }\n\n const srcNode = this.getNode(srcResolved);\n if (!srcNode) {\n throw new Error(`mv: ${src}: No such file or directory`);\n }\n\n const destResolved = this.resolvePath(dest);\n const destNode = this.getNode(destResolved);\n\n const srcParts = srcResolved.split('/').filter(Boolean);\n const srcParentPath = '/' + srcParts.slice(0, -1).join('/');\n const srcParent = this.getNode(srcParentPath);\n\n if (!srcParent || !srcParent.children) {\n throw new Error(`mv: ${src}: No such file or directory`);\n }\n\n const srcIndex = srcParent.children.findIndex(\n (c) => c.name === srcNode.name,\n );\n\n if (destNode && destNode.type === 'directory') {\n if (!destNode.children) {\n destNode.children = [];\n }\n const existingIdx = destNode.children.findIndex(\n (c) => c.name === srcNode.name,\n );\n if (existingIdx !== -1) {\n destNode.children.splice(existingIdx, 1);\n }\n srcParent.children.splice(srcIndex, 1);\n destNode.children.push(srcNode);\n destNode.modifiedAt = Date.now();\n } else {\n const destParts = destResolved.split('/').filter(Boolean);\n const destParentPath = '/' + destParts.slice(0, -1).join('/');\n const newName = destParts[destParts.length - 1];\n const destParent = this.getNode(destParentPath);\n\n if (!destParent || destParent.type !== 'directory') {\n throw new Error(\n `mv: ${destParentPath}: No such file or directory`,\n );\n }\n\n srcParent.children.splice(srcIndex, 1);\n srcNode.name = newName;\n if (!destParent.children) {\n destParent.children = [];\n }\n const existingIdx = destParent.children.findIndex(\n (c) => c.name === newName,\n );\n if (existingIdx !== -1) {\n destParent.children.splice(existingIdx, 1);\n }\n destParent.children.push(srcNode);\n destParent.modifiedAt = Date.now();\n }\n\n srcParent.modifiedAt = Date.now();\n\n // Server-side: remove old, upload to new location\n this.serverRm(srcResolved)\n .then(() => this.syncTreeToServer(destResolved))\n .catch((err) =>\n console.error('[ServerFS] move sync failed:', err),\n );\n }\n\n // --- Permissions (local-only, server has no endpoints) ---\n\n chmod(path: string, permissions: string): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`chmod: ${path}: No such file or directory`);\n }\n node.permissions = permissions;\n }\n\n chown(path: string, ownership: ICliOwnership): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`chown: ${path}: No such file or directory`);\n }\n node.ownership = ownership;\n }\n\n // --- Persistence ---\n\n /**\n * Fetches the root directory listing from the server and populates the\n * local in-memory file tree. Recursively loads subdirectories.\n */\n async initialize(): Promise<void> {\n try {\n await this.loadDirectoryFromServer('/', this.root);\n } catch (err) {\n console.error(\n '[ServerFS] Failed to initialize from server, using seed filesystem:',\n err,\n );\n }\n }\n\n /**\n * No-op for server-backed storage — the server persists automatically.\n */\n async persist(): Promise<void> {\n // Server handles persistence; nothing to do locally.\n }\n\n // --- Private: server communication ---\n\n private async serverFetch<T>(\n endpoint: string,\n options?: RequestInit,\n ): Promise<T> {\n const url = `${this.baseUrl}/api/qcli/fs${endpoint}`;\n const response = await fetch(url, options);\n if (!response.ok) {\n const body = await response.text();\n throw new Error(\n `Server responded with ${response.status}: ${body}`,\n );\n }\n return response.json();\n }\n\n private async serverLs(path: string): Promise<LsResponse> {\n return this.serverFetch<LsResponse>(\n `/ls?path=${encodeURIComponent(path)}`,\n );\n }\n\n private async serverCat(path: string): Promise<CatResponse> {\n return this.serverFetch<CatResponse>(\n `/cat?path=${encodeURIComponent(path)}`,\n );\n }\n\n private async serverStat(path: string): Promise<StatResponse> {\n return this.serverFetch<StatResponse>(\n `/stat?path=${encodeURIComponent(path)}`,\n );\n }\n\n private async serverMkdir(path: string): Promise<void> {\n await this.serverFetch<{ path: string }>('/mkdir', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path }),\n });\n }\n\n private async serverUpload(path: string, content: string): Promise<void> {\n const formData = new FormData();\n formData.append('path', path);\n formData.append(\n 'file',\n new Blob([content], { type: 'application/octet-stream' }),\n path.split('/').pop() || 'file',\n );\n await this.serverFetch<{ path: string; size: number }>('/upload', {\n method: 'POST',\n body: formData,\n });\n }\n\n private async serverRm(path: string): Promise<void> {\n await this.serverFetch<{ deleted: string }>(\n `/rm?path=${encodeURIComponent(path)}`,\n { method: 'DELETE' },\n );\n }\n\n /**\n * Recursively loads directory contents from the server into a local node.\n */\n private async loadDirectoryFromServer(\n path: string,\n node: IFileNode,\n ): Promise<void> {\n const response = await this.serverLs(path);\n const now = Date.now();\n\n node.children = [];\n\n for (const entry of response.entries) {\n const childPath =\n path === '/' ? `/${entry.name}` : `${path}/${entry.name}`;\n\n if (entry.type === 'directory') {\n const dirNode: IFileNode = {\n name: entry.name,\n type: 'directory',\n children: [],\n createdAt: new Date(entry.modified).getTime() || now,\n modifiedAt: new Date(entry.modified).getTime() || now,\n size: entry.size,\n permissions: entry.permissions || 'rwxr-xr-x',\n };\n node.children.push(dirNode);\n\n // Recursively load subdirectory contents\n try {\n await this.loadDirectoryFromServer(childPath, dirNode);\n } catch {\n // If a subdirectory fails to load, keep it empty\n }\n } else {\n // For files, fetch content eagerly so readFile() works synchronously\n let content = '';\n try {\n const catResponse = await this.serverCat(childPath);\n content = catResponse.content;\n } catch {\n // If content fetch fails, store empty string\n }\n\n node.children.push({\n name: entry.name,\n type: 'file',\n content,\n createdAt: new Date(entry.modified).getTime() || now,\n modifiedAt: new Date(entry.modified).getTime() || now,\n size: entry.size,\n permissions: entry.permissions || 'rw-r--r--',\n });\n }\n }\n }\n\n /**\n * Uploads all file nodes under the given path to the server.\n * Used after copy/move to sync the local tree to the server.\n */\n private async syncTreeToServer(path: string): Promise<void> {\n const node = this.getNode(path);\n if (!node) return;\n\n if (node.type === 'file') {\n await this.serverUpload(path, node.content ?? '');\n } else if (node.type === 'directory') {\n await this.serverMkdir(path);\n if (node.children) {\n for (const child of node.children) {\n const childPath = path === '/'\n ? `/${child.name}`\n : `${path}/${child.name}`;\n await this.syncTreeToServer(childPath);\n }\n }\n }\n }\n\n // --- Private: tree helpers ---\n\n private cloneNode(node: IFileNode): IFileNode {\n const now = Date.now();\n const clone: IFileNode = {\n name: node.name,\n type: node.type,\n createdAt: now,\n modifiedAt: now,\n size: node.size,\n permissions: node.permissions,\n ownership: node.ownership ? { ...node.ownership } : undefined,\n };\n\n if (node.type === 'file') {\n clone.content = node.content;\n } else {\n clone.children = (node.children || []).map((c) =>\n this.cloneNode(c),\n );\n }\n\n return clone;\n }\n}\n","import {\n ICliFileTransferService,\n ICliFileEntry,\n BrowserFileTransferService,\n} from '@qodalis/cli-core';\nimport { IFileSystemService } from '../interfaces';\n\nexport class VirtualFsFileTransferService implements ICliFileTransferService {\n private readonly _browserService = new BrowserFileTransferService();\n\n constructor(private readonly _fs: IFileSystemService) {}\n\n async readFile(path: string): Promise<string | null> {\n const resolved = this._fs.resolvePath(path);\n return this._fs.readFile(resolved);\n }\n\n async writeFile(path: string, content: string): Promise<void> {\n const resolved = this._fs.resolvePath(path);\n this._fs.writeFile(resolved, content);\n await this._fs.persist();\n }\n\n async listFiles(path: string): Promise<ICliFileEntry[]> {\n const resolved = this._fs.resolvePath(path);\n const nodes = this._fs.listDirectory(resolved);\n return nodes.map((node) => ({\n name: node.name,\n type: node.type === 'directory' ? ('directory' as const) : ('file' as const),\n size: node.size || 0,\n modified: node.modifiedAt\n ? new Date(node.modifiedAt).toISOString()\n : new Date().toISOString(),\n }));\n }\n\n async exists(path: string): Promise<boolean> {\n const resolved = this._fs.resolvePath(path);\n return this._fs.exists(resolved);\n }\n\n downloadToBrowser(filename: string, content: string | Blob): void {\n this._browserService.downloadToBrowser(filename, content);\n }\n\n async uploadFromBrowser(accept?: string): Promise<{ name: string; content: string } | null> {\n return this._browserService.uploadFromBrowser(accept);\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService } from '../interfaces/i-file-system-service';\n\n/** Commands that accept file/directory path arguments. */\nconst FILE_COMMANDS = new Set([\n 'ls',\n 'cd',\n 'cat',\n 'cp',\n 'mv',\n 'rm',\n 'touch',\n 'mkdir',\n 'rmdir',\n 'tree',\n 'echo',\n 'nano',\n 'edit',\n 'grep',\n 'find',\n 'head',\n 'tail',\n 'wc',\n]);\n\n/**\n * Provides tab-completion for file and directory names from the virtual filesystem.\n * Priority 50 (checked before command/parameter providers for file-related commands).\n */\nexport class FilePathCompletionProvider implements ICliCompletionProvider {\n priority = 50;\n\n constructor(private readonly fs: IFileSystemService) {}\n\n getCompletions(context: ICliCompletionContext): string[] {\n const { tokens, tokenIndex, token } = context;\n\n // Only activate when the command is a file command and we're completing an argument\n if (tokenIndex === 0) {\n return []; // Let command completion handle the first token\n }\n\n const command = tokens[0];\n if (!FILE_COMMANDS.has(command)) {\n return [];\n }\n\n // Skip flag tokens\n if (token.startsWith('-')) {\n return [];\n }\n\n return this.completePath(token);\n }\n\n private completePath(partial: string): string[] {\n // Split into directory part and name prefix\n let dirPath: string;\n let namePrefix: string;\n\n if (partial.includes('/')) {\n const lastSlash = partial.lastIndexOf('/');\n dirPath = partial.slice(0, lastSlash) || '/';\n namePrefix = partial.slice(lastSlash + 1);\n } else {\n dirPath = this.fs.getCurrentDirectory();\n namePrefix = partial;\n }\n\n // Resolve the directory\n let resolvedDir: string;\n try {\n resolvedDir = this.fs.resolvePath(dirPath);\n } catch {\n return [];\n }\n\n if (!this.fs.exists(resolvedDir) || !this.fs.isDirectory(resolvedDir)) {\n return [];\n }\n\n // List entries and filter by prefix\n const entries = this.fs.listDirectory(resolvedDir);\n const lowerPrefix = namePrefix.toLowerCase();\n\n const results: string[] = [];\n for (const entry of entries) {\n if (entry.name.toLowerCase().startsWith(lowerPrefix)) {\n // Build the completion string preserving the directory prefix\n let completion: string;\n if (partial.includes('/')) {\n const lastSlash = partial.lastIndexOf('/');\n completion = partial.slice(0, lastSlash + 1) + entry.name;\n } else {\n completion = entry.name;\n }\n\n // Append / for directories\n if (entry.type === 'directory') {\n completion += '/';\n }\n\n results.push(completion);\n }\n }\n\n return results.sort();\n }\n}\n","/*\n * Public API Surface of files\n */\n\nexport * from './lib/index';\n\nimport { ICliModule, ICliCompletionProvider_TOKEN, ICliFileTransferService_TOKEN, ICliDragDropService, ICliDragDropService_TOKEN, ICliExecutionContext } from '@qodalis/cli-core';\nimport { Subscription } from 'rxjs';\nimport { API_VERSION } from './lib/version';\nimport { IFileSystemService_TOKEN } from './lib/interfaces';\nimport { IndexedDbFileSystemService, VirtualFsFileTransferService } from './lib/services';\nimport { IFileSystemService } from './lib/interfaces';\nimport { FilePathCompletionProvider } from './lib/completion/file-path-completion-provider';\nimport { CliLsCommandProcessor } from './lib/processors/cli-ls-command-processor';\nimport { CliCdCommandProcessor } from './lib/processors/cli-cd-command-processor';\nimport { CliPwdCommandProcessor } from './lib/processors/cli-pwd-command-processor';\nimport { CliMkdirCommandProcessor } from './lib/processors/cli-mkdir-command-processor';\nimport { CliRmdirCommandProcessor } from './lib/processors/cli-rmdir-command-processor';\nimport { CliTouchCommandProcessor } from './lib/processors/cli-touch-command-processor';\nimport { CliCatCommandProcessor } from './lib/processors/cli-cat-command-processor';\nimport { CliEchoCommandProcessor } from './lib/processors/cli-echo-command-processor';\nimport { CliRmCommandProcessor } from './lib/processors/cli-rm-command-processor';\nimport { CliCpCommandProcessor } from './lib/processors/cli-cp-command-processor';\nimport { CliMvCommandProcessor } from './lib/processors/cli-mv-command-processor';\nimport { CliTreeCommandProcessor } from './lib/processors/cli-tree-command-processor';\nimport { CliHeadCommandProcessor } from './lib/processors/cli-head-command-processor';\nimport { CliTailCommandProcessor } from './lib/processors/cli-tail-command-processor';\nimport { CliWcCommandProcessor } from './lib/processors/cli-wc-command-processor';\nimport { CliFindCommandProcessor } from './lib/processors/cli-find-command-processor';\nimport { CliGrepCommandProcessor } from './lib/processors/cli-grep-command-processor';\nimport { CliTacCommandProcessor } from './lib/processors/cli-tac-command-processor';\nimport { CliBasenameCommandProcessor } from './lib/processors/cli-basename-command-processor';\nimport { CliDirnameCommandProcessor } from './lib/processors/cli-dirname-command-processor';\nimport { CliSortCommandProcessor } from './lib/processors/cli-sort-command-processor';\nimport { CliUniqCommandProcessor } from './lib/processors/cli-uniq-command-processor';\nimport { CliCutCommandProcessor } from './lib/processors/cli-cut-command-processor';\nimport { CliPasteCommandProcessor } from './lib/processors/cli-paste-command-processor';\nimport { CliTrCommandProcessor } from './lib/processors/cli-tr-command-processor';\nimport { CliStatCommandProcessor } from './lib/processors/cli-stat-command-processor';\nimport { CliChmodCommandProcessor } from './lib/processors/cli-chmod-command-processor';\nimport { CliChownCommandProcessor } from './lib/processors/cli-chown-command-processor';\nimport { CliDuCommandProcessor } from './lib/processors/cli-du-command-processor';\nimport { CliLnCommandProcessor } from './lib/processors/cli-ln-command-processor';\nimport { CliSedCommandProcessor } from './lib/processors/cli-sed-command-processor';\nimport { CliAwkCommandProcessor } from './lib/processors/cli-awk-command-processor';\nimport { CliDiffCommandProcessor } from './lib/processors/cli-diff-command-processor';\nimport { CliTeeCommandProcessor } from './lib/processors/cli-tee-command-processor';\nimport { CliXargsCommandProcessor } from './lib/processors/cli-xargs-command-processor';\nimport { CliShCommandProcessor } from './lib/processors/cli-sh-command-processor';\n\n/**\n * Configuration options for the files module.\n */\nexport interface CliFilesModuleConfig {\n /**\n * Whether to show the current working directory in the CLI prompt.\n * @default true\n */\n showPathInPrompt?: boolean;\n}\n\ninterface ICliFilesModule extends ICliModule {\n configure(config: CliFilesModuleConfig): ICliModule;\n}\n\nconst fsService = new IndexedDbFileSystemService();\n\nexport const filesModule: ICliFilesModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-files',\n processors: [\n new CliLsCommandProcessor(),\n new CliCdCommandProcessor(),\n new CliPwdCommandProcessor(),\n new CliMkdirCommandProcessor(),\n new CliRmdirCommandProcessor(),\n new CliTouchCommandProcessor(),\n new CliCatCommandProcessor(),\n new CliEchoCommandProcessor(),\n new CliRmCommandProcessor(),\n new CliCpCommandProcessor(),\n new CliMvCommandProcessor(),\n new CliTreeCommandProcessor(),\n new CliHeadCommandProcessor(),\n new CliTailCommandProcessor(),\n new CliWcCommandProcessor(),\n new CliFindCommandProcessor(),\n new CliGrepCommandProcessor(),\n new CliTacCommandProcessor(),\n new CliBasenameCommandProcessor(),\n new CliDirnameCommandProcessor(),\n new CliSortCommandProcessor(),\n new CliUniqCommandProcessor(),\n new CliCutCommandProcessor(),\n new CliPasteCommandProcessor(),\n new CliTrCommandProcessor(),\n new CliStatCommandProcessor(),\n new CliChmodCommandProcessor(),\n new CliChownCommandProcessor(),\n new CliDuCommandProcessor(),\n new CliLnCommandProcessor(),\n new CliSedCommandProcessor(),\n new CliAwkCommandProcessor(),\n new CliDiffCommandProcessor(),\n new CliTeeCommandProcessor(),\n new CliXargsCommandProcessor(),\n new CliShCommandProcessor(),\n ],\n services: [\n {\n provide: IFileSystemService_TOKEN,\n useValue: fsService,\n },\n {\n provide: ICliCompletionProvider_TOKEN,\n useValue: new FilePathCompletionProvider(fsService),\n multi: true,\n },\n {\n provide: ICliFileTransferService_TOKEN,\n useValue: new VirtualFsFileTransferService(fsService),\n },\n ],\n\n translations: {\n es: { 'cli.files.description': 'Sistema de archivos virtual en el navegador' },\n fr: { 'cli.files.description': 'Système de fichiers virtuel dans le navigateur' },\n de: { 'cli.files.description': 'Virtuelles Dateisystem im Browser' },\n pt: { 'cli.files.description': 'Sistema de arquivos virtual no navegador' },\n it: { 'cli.files.description': 'File system virtuale nel browser' },\n ja: { 'cli.files.description': 'ブラウザ内仮想ファイルシステム' },\n ko: { 'cli.files.description': '브라우저 내 가상 파일 시스템' },\n zh: { 'cli.files.description': '浏览器内虚拟文件系统' },\n ru: { 'cli.files.description': 'Виртуальная файловая система в браузере' },\n ro: { 'cli.files.description': 'Sistem de fișiere virtual în browser' },\n },\n\n configure(config: CliFilesModuleConfig): ICliModule {\n return { ...this, config };\n },\n\n async onInit(context) {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n await fs.initialize();\n\n const moduleConfig = (this.config || {}) as CliFilesModuleConfig;\n const showPath = moduleConfig.showPathInPrompt !== false;\n\n if (showPath) {\n context.promptPathProvider = () => fs.getCurrentDirectory();\n }\n\n let dragDrop: ICliDragDropService | undefined;\n try {\n dragDrop = context.services.get<ICliDragDropService>(ICliDragDropService_TOKEN);\n } catch {\n // service not registered (e.g. test environment) — skip\n }\n\n if (dragDrop) {\n (this as any)._dragDropSubscription = dragDrop.onFileDrop.subscribe((files) => {\n files.forEach((file) => {\n const reader = new FileReader();\n reader.onload = async () => {\n const content = reader.result as string;\n const dest = fs.resolvePath(\n fs.getCurrentDirectory() + '/' + file.name,\n );\n await fs.writeFile(dest, content);\n await fs.persist();\n context.writer.writeSuccess(\n `Uploaded: ${file.name} (${file.size} bytes) → ${dest}`,\n );\n };\n reader.onerror = () => {\n context.writer.writeError(`Failed to read dropped file: ${file.name}`);\n };\n if (file.type && !file.type.startsWith('text/') && file.type !== 'application/json') {\n context.writer.writeWarning(`${file.name}: may be a binary file — uploading as text (content may be corrupted)`);\n }\n reader.readAsText(file);\n });\n });\n }\n },\n\n async onDestroy(_context: ICliExecutionContext): Promise<void> {\n const sub: Subscription | undefined = (this as any)._dragDropSubscription;\n sub?.unsubscribe();\n (this as any)._dragDropSubscription = undefined;\n },\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../../packages/plugins/files/src/lib/interfaces/i-file-system-service.ts","../../packages/plugins/files/src/lib/version.ts","../../packages/plugins/files/src/lib/processors/cli-ls-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-cd-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-pwd-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-mkdir-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-rmdir-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-touch-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-cat-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-echo-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-rm-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-cp-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-mv-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tree-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-head-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tail-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-wc-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-find-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-grep-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tac-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-basename-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-dirname-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-sort-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-uniq-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-cut-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-paste-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tr-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-stat-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-chmod-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-chown-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-du-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-ln-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-sed-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-awk-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-diff-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-tee-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-xargs-command-processor.ts","../../packages/plugins/files/src/lib/processors/cli-sh-command-processor.ts","../../packages/plugins/files/src/lib/services/indexed-db-file-system.service.ts","../../packages/plugins/files/src/lib/services/server-file-system.service.ts","../../packages/plugins/files/src/lib/services/virtual-fs-file-transfer.service.ts","../../packages/plugins/files/src/lib/completion/file-path-completion-provider.ts","../../packages/plugins/files/src/public-api.ts"],"names":["DefaultLibraryAuthor","CliForegroundColor","regex","token","idx","i","j","DEFAULT_HOME","createSeedFileSystem","BrowserFileTransferService","ICliCompletionProvider_TOKEN","ICliFileTransferService_TOKEN","ICliDragDropService_TOKEN"],"mappings":"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","file":"public-api.js","sourcesContent":["import { ICliOwnership } from '@qodalis/cli-core';\nimport { IFileNode } from './i-file-node';\n\nexport const IFileSystemService_TOKEN = 'cli-file-system-service';\n\n/**\n * Abstraction for virtual filesystem operations.\n */\nexport interface IFileSystemService {\n // Navigation\n getCurrentDirectory(): string;\n setCurrentDirectory(path: string): void;\n resolvePath(path: string): string;\n\n // Home directory (used for ~ resolution)\n getHomePath(): string;\n setHomePath(path: string): void;\n\n // User context (used for ownership defaults and permission checks)\n setCurrentUser(uid: string, groups: string[]): void;\n\n // Read operations\n getNode(path: string): IFileNode | null;\n listDirectory(path: string): IFileNode[];\n readFile(path: string): string | null;\n exists(path: string): boolean;\n isDirectory(path: string): boolean;\n\n // Write operations\n createDirectory(path: string, recursive?: boolean): void;\n createFile(path: string, content?: string): void;\n writeFile(path: string, content: string, append?: boolean): void;\n remove(path: string, recursive?: boolean): void;\n copy(src: string, dest: string, recursive?: boolean): void;\n move(src: string, dest: string): void;\n\n // Permissions\n chmod(path: string, permissions: string): void;\n chown(path: string, ownership: ICliOwnership): void;\n\n // Persistence\n initialize(): Promise<void>;\n persist(): Promise<void>;\n}\n","\n// Automatically generated during build\nexport const LIBRARY_VERSION = '2.0.0-beta.5';\nexport const API_VERSION = 2;\n ","import {\n CliForegroundColor,\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport {\n IFileSystemService,\n IFileSystemService_TOKEN,\n IFileNode,\n} from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliLsCommandProcessor implements ICliCommandProcessor {\n command = 'ls';\n description = 'List directory contents';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📋', module: 'file management' };\n\n parameters = [\n {\n name: 'all',\n aliases: ['a'],\n description: 'Show hidden files (starting with .)',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'long',\n aliases: ['l'],\n description: 'Use long listing format',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const targetPath = command.value || fs.getCurrentDirectory();\n const showAll = command.args['all'] || command.args['a'];\n const longFormat = command.args['long'] || command.args['l'];\n\n try {\n const entries = fs.listDirectory(targetPath);\n const filtered = showAll\n ? entries\n : entries.filter((e) => !e.name.startsWith('.'));\n\n if (filtered.length === 0) {\n return;\n }\n\n filtered.sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'directory' ? -1 : 1;\n }\n return a.name.localeCompare(b.name);\n });\n\n if (longFormat) {\n this.writeLongFormat(filtered, context);\n } else {\n this.writeShortFormat(filtered, context);\n }\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n\n writeDescription(context: ICliExecutionContext): void {\n context.writer.writeln(this.description!);\n context.writer.writeln();\n context.writer.writeln('Usage: ls [path] [--all] [--long]');\n }\n\n private writeLongFormat(\n entries: IFileNode[],\n context: ICliExecutionContext,\n ): void {\n const { writer } = context;\n for (const entry of entries) {\n const typeChar = entry.type === 'directory' ? 'd' : '-';\n const perms =\n entry.permissions ||\n (entry.type === 'directory' ? 'rwxr-xr-x' : 'rw-r--r--');\n const owner = entry.ownership?.uid || '-';\n const group = entry.ownership?.gid || '-';\n const size = entry.type === 'file' ? entry.size.toString() : '-';\n const date = new Date(entry.modifiedAt);\n const dateStr = date.toLocaleDateString('en-US', {\n month: 'short',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n });\n const name =\n entry.type === 'directory'\n ? writer.wrapInColor(entry.name, CliForegroundColor.Cyan)\n : entry.name;\n\n writer.writeln(\n `${typeChar}${perms} ${owner.padEnd(8)} ${group.padEnd(8)} ${size.padStart(6)} ${dateStr} ${name}`,\n );\n }\n }\n\n private writeShortFormat(\n entries: IFileNode[],\n context: ICliExecutionContext,\n ): void {\n const { writer } = context;\n const names = entries.map((e) =>\n e.type === 'directory'\n ? writer.wrapInColor(e.name, CliForegroundColor.Cyan)\n : e.name,\n );\n writer.writeln(names.join(' '));\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliCdCommandProcessor implements ICliCommandProcessor {\n command = 'cd';\n description = 'Change the current working directory';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📁', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const target = command.value || '~';\n\n try {\n fs.setCurrentDirectory(target);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliPwdCommandProcessor implements ICliCommandProcessor {\n command = 'pwd';\n description = 'Print the current working directory';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n metadata = { icon: '📂', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n context.writer.writeln(fs.getCurrentDirectory());\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliMkdirCommandProcessor implements ICliCommandProcessor {\n command = 'mkdir';\n description = 'Create directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📁', module: 'file management' };\n\n parameters = [\n {\n name: 'parents',\n aliases: ['p'],\n description: 'Create parent directories as needed',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n const recursive = command.args['parents'] || command.args['p'];\n\n if (!path) {\n context.writer.writeError('mkdir: missing operand');\n return;\n }\n\n try {\n fs.createDirectory(path, recursive);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliRmdirCommandProcessor implements ICliCommandProcessor {\n command = 'rmdir';\n description = 'Remove empty directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🗑', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n\n if (!path) {\n context.writer.writeError('rmdir: missing operand');\n return;\n }\n\n try {\n const node = fs.getNode(path);\n if (!node) {\n context.writer.writeError(\n `rmdir: ${path}: No such file or directory`,\n );\n return;\n }\n if (node.type !== 'directory') {\n context.writer.writeError(`rmdir: ${path}: Not a directory`);\n return;\n }\n if (node.children && node.children.length > 0) {\n context.writer.writeError(\n `rmdir: ${path}: Directory not empty`,\n );\n return;\n }\n fs.remove(path);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTouchCommandProcessor implements ICliCommandProcessor {\n command = 'touch';\n description = 'Create an empty file or update its timestamp';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📄', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n\n if (!path) {\n context.writer.writeError('touch: missing file operand');\n return;\n }\n\n try {\n fs.createFile(path);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliCatCommandProcessor implements ICliCommandProcessor {\n command = 'cat';\n description = 'Display file contents';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📖', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n\n if (!path) {\n context.writer.writeError('cat: missing file operand');\n return;\n }\n\n try {\n const content = fs.readFile(path);\n if (content !== null) {\n context.writer.writeln(content);\n }\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliEchoCommandProcessor implements ICliCommandProcessor {\n command = 'echo';\n description = 'Display text or redirect output to a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n extendsProcessor = true;\n originalProcessor?: ICliCommandProcessor;\n metadata = { icon: '💬', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const afterEcho = command.value || '';\n\n // Check for file redirection syntax\n const hasRedirection = />>?\\s*.+$/.test(afterEcho);\n\n if (!hasRedirection) {\n // No redirection — delegate to the original echo processor\n if (this.originalProcessor) {\n await this.originalProcessor.processCommand(command, context);\n } else {\n context.writer.writeln(afterEcho);\n }\n return;\n }\n\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n let text: string;\n let filePath: string;\n let append = false;\n\n const appendMatch = afterEcho.match(/^(.*?)\\s*>>\\s*(.+)$/);\n const overwriteMatch = afterEcho.match(/^(.*?)\\s*>\\s*(.+)$/);\n\n if (appendMatch) {\n text = appendMatch[1].trim();\n filePath = appendMatch[2].trim();\n append = true;\n } else {\n text = overwriteMatch![1].trim();\n filePath = overwriteMatch![2].trim();\n }\n\n // Remove surrounding quotes\n if (\n (text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))\n ) {\n text = text.slice(1, -1);\n }\n\n // Interpret escape sequences (\\n, \\t, etc.)\n text = text.replace(/\\\\([\\\\nrtv0])/g, (_, ch: string) => {\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 try {\n fs.writeFile(filePath, text + '\\n', append);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliRmCommandProcessor implements ICliCommandProcessor {\n command = 'rm';\n description = 'Remove files or directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🗑', module: 'file management' };\n\n parameters = [\n {\n name: 'recursive',\n aliases: ['r', 'R'],\n description: 'Remove directories and their contents recursively',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'force',\n aliases: ['f'],\n description: 'Ignore nonexistent files, never prompt',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const path = command.value;\n const recursive =\n command.args['recursive'] || command.args['r'] || command.args['R'];\n const force = command.args['force'] || command.args['f'];\n\n if (!path) {\n context.writer.writeError('rm: missing operand');\n return;\n }\n\n try {\n if (!fs.exists(path)) {\n if (!force) {\n context.writer.writeError(\n `rm: ${path}: No such file or directory`,\n );\n }\n return;\n }\n\n if (fs.isDirectory(path) && !recursive) {\n context.writer.writeError(`rm: ${path}: Is a directory`);\n return;\n }\n\n fs.remove(path, recursive);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliCpCommandProcessor implements ICliCommandProcessor {\n command = 'cp';\n description = 'Copy files and directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📋', module: 'file management' };\n\n parameters = [\n {\n name: 'recursive',\n aliases: ['r', 'R'],\n description: 'Copy directories recursively',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const recursive =\n command.args['recursive'] || command.args['r'] || command.args['R'];\n\n const parts = this.parseArgs(command);\n\n if (parts.length < 2) {\n context.writer.writeError('cp: missing destination file operand');\n context.writer.writeln(\n 'Usage: cp [--recursive] <source> <destination>',\n );\n return;\n }\n\n const src = parts[0];\n const dest = parts[1];\n\n try {\n fs.copy(src, dest, recursive);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n\n private parseArgs(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter((t) => t && !t.startsWith('--') && !t.startsWith('-'));\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliMvCommandProcessor implements ICliCommandProcessor {\n command = 'mv';\n description = 'Move or rename files and directories';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📦', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const parts = this.parseArgs(command);\n\n if (parts.length < 2) {\n context.writer.writeError('mv: missing destination file operand');\n context.writer.writeln('Usage: mv <source> <destination>');\n return;\n }\n\n const src = parts[0];\n const dest = parts[1];\n\n try {\n fs.move(src, dest);\n await fs.persist();\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n\n private parseArgs(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter((t) => t && !t.startsWith('--') && !t.startsWith('-'));\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport {\n IFileSystemService,\n IFileSystemService_TOKEN,\n IFileNode,\n} from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTreeCommandProcessor implements ICliCommandProcessor {\n command = 'tree';\n description = 'Display directory tree structure';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '🌳', module: 'file management' };\n\n parameters = [\n {\n name: 'depth',\n aliases: ['L'],\n description: 'Max display depth of the directory tree',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const targetPath = command.value || fs.getCurrentDirectory();\n const maxDepth = command.args['depth']\n ? parseInt(command.args['depth'])\n : command.args['L']\n ? parseInt(command.args['L'])\n : Infinity;\n\n try {\n const node = fs.getNode(targetPath);\n if (!node) {\n context.writer.writeError(\n `tree: ${targetPath}: No such file or directory`,\n );\n return;\n }\n if (node.type !== 'directory') {\n context.writer.writeError(\n `tree: ${targetPath}: Not a directory`,\n );\n return;\n }\n\n const resolvedPath = fs.resolvePath(targetPath);\n context.writer.writeln(\n context.writer.wrapInColor(\n resolvedPath,\n CliForegroundColor.Cyan,\n ),\n );\n\n const counts = { dirs: 0, files: 0 };\n this.printTree(node, '', true, 0, maxDepth, context, counts);\n\n context.writer.writeln();\n context.writer.writeln(\n `${counts.dirs} directories, ${counts.files} files`,\n );\n } catch (e: any) {\n context.writer.writeError(e.message);\n }\n }\n\n private printTree(\n node: IFileNode,\n prefix: string,\n isRoot: boolean,\n depth: number,\n maxDepth: number,\n context: ICliExecutionContext,\n counts: { dirs: number; files: number },\n ): void {\n if (!node.children || depth >= maxDepth) {\n return;\n }\n\n const children = [...node.children].sort((a, b) => {\n if (a.type !== b.type) {\n return a.type === 'directory' ? -1 : 1;\n }\n return a.name.localeCompare(b.name);\n });\n\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const isLast = i === children.length - 1;\n const connector = isLast ? '└── ' : '├── ';\n const childPrefix = isLast ? ' ' : '│ ';\n\n const displayName =\n child.type === 'directory'\n ? context.writer.wrapInColor(\n child.name,\n CliForegroundColor.Cyan,\n )\n : child.name;\n\n context.writer.writeln(`${prefix}${connector}${displayName}`);\n\n if (child.type === 'directory') {\n counts.dirs++;\n this.printTree(\n child,\n prefix + childPrefix,\n false,\n depth + 1,\n maxDepth,\n context,\n counts,\n );\n } else {\n counts.files++;\n }\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliHeadCommandProcessor implements ICliCommandProcessor {\n command = 'head';\n description = 'Display the first lines of a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '⬆️', module: 'file management' };\n\n parameters = [\n {\n name: 'lines',\n aliases: ['n'],\n description: 'Number of lines to display (default: 10)',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const count = parseInt(\n command.args['lines'] || command.args['n'] || '10',\n 10,\n );\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n const lines = content.split('\\n');\n const selected = lines.slice(0, count);\n context.writer.writeln(selected.join('\\n'));\n return;\n }\n context.writer.writeError('head: missing file operand');\n return;\n }\n\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`head: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) continue;\n\n if (paths.length > 1) {\n if (i > 0) context.writer.writeln();\n context.writer.writeln(`==> ${path} <==`);\n }\n\n const lines = content.split('\\n');\n const selected = lines.slice(0, count);\n context.writer.writeln(selected.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`head: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTailCommandProcessor implements ICliCommandProcessor {\n command = 'tail';\n description = 'Display the last lines of a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '⬇️', module: 'file management' };\n\n parameters = [\n {\n name: 'lines',\n aliases: ['n'],\n description: 'Number of lines to display (default: 10)',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const count = parseInt(\n command.args['lines'] || command.args['n'] || '10',\n 10,\n );\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n const lines = content.split('\\n');\n const selected = lines.slice(-count);\n context.writer.writeln(selected.join('\\n'));\n return;\n }\n context.writer.writeError('tail: missing file operand');\n return;\n }\n\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`tail: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) continue;\n\n if (paths.length > 1) {\n if (i > 0) context.writer.writeln();\n context.writer.writeln(`==> ${path} <==`);\n }\n\n const lines = content.split('\\n');\n const selected = lines.slice(-count);\n context.writer.writeln(selected.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`tail: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliWcCommandProcessor implements ICliCommandProcessor {\n command = 'wc';\n description = 'Print line, word, and character counts';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '#️⃣', module: 'file management' };\n\n parameters = [\n {\n name: 'lines',\n aliases: ['l'],\n description: 'Print only the line count',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'words',\n aliases: ['w'],\n description: 'Print only the word count',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'chars',\n aliases: ['c'],\n description: 'Print only the character count',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const showLines =\n command.args['lines'] || command.args['l'] || false;\n const showWords =\n command.args['words'] || command.args['w'] || false;\n const showChars =\n command.args['chars'] || command.args['c'] || false;\n const showAll = !showLines && !showWords && !showChars;\n\n const paths = this.parsePaths(command);\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n const lineCount = content === '' ? 0 : content.split('\\n').length;\n const wordCount =\n content.trim() === ''\n ? 0\n : content.trim().split(/\\s+/).length;\n const charCount = content.length;\n\n const parts: string[] = [];\n if (showAll || showLines) parts.push(String(lineCount).padStart(8));\n if (showAll || showWords) parts.push(String(wordCount).padStart(8));\n if (showAll || showChars) parts.push(String(charCount).padStart(8));\n\n context.writer.writeln(parts.join(''));\n return;\n }\n context.writer.writeError('wc: missing file operand');\n return;\n }\n\n let totalLines = 0;\n let totalWords = 0;\n let totalChars = 0;\n\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`wc: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path) ?? '';\n const lineCount = content === '' ? 0 : content.split('\\n').length;\n const wordCount =\n content.trim() === ''\n ? 0\n : content.trim().split(/\\s+/).length;\n const charCount = content.length;\n\n totalLines += lineCount;\n totalWords += wordCount;\n totalChars += charCount;\n\n const parts: string[] = [];\n if (showAll || showLines) parts.push(String(lineCount).padStart(8));\n if (showAll || showWords) parts.push(String(wordCount).padStart(8));\n if (showAll || showChars) parts.push(String(charCount).padStart(8));\n parts.push(` ${path}`);\n\n context.writer.writeln(parts.join(''));\n } catch (e: any) {\n context.writer.writeError(`wc: ${e.message}`);\n }\n }\n\n if (paths.length > 1) {\n const parts: string[] = [];\n if (showAll || showLines) parts.push(String(totalLines).padStart(8));\n if (showAll || showWords) parts.push(String(totalWords).padStart(8));\n if (showAll || showChars) parts.push(String(totalChars).padStart(8));\n parts.push(' total');\n context.writer.writeln(parts.join(''));\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport {\n IFileSystemService,\n IFileSystemService_TOKEN,\n IFileNode,\n} from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliFindCommandProcessor implements ICliCommandProcessor {\n command = 'find';\n description = 'Search for files and directories by name or type';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '🔍', module: 'file management' };\n\n parameters = [\n {\n name: 'name',\n description: 'Match filename pattern (glob: * and ? supported)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'type',\n description: 'Filter by type: f (file) or d (directory)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'maxdepth',\n description: 'Maximum directory depth to search',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const searchPath = this.parseSearchPath(command) || fs.getCurrentDirectory();\n const namePattern = command.args['name'] || null;\n const typeFilter = command.args['type'] || null;\n const maxDepth = command.args['maxdepth']\n ? parseInt(command.args['maxdepth'], 10)\n : Infinity;\n\n try {\n const node = fs.getNode(searchPath);\n if (!node) {\n context.writer.writeError(\n `find: '${searchPath}': No such file or directory`,\n );\n return;\n }\n if (node.type !== 'directory') {\n context.writer.writeError(\n `find: '${searchPath}': Not a directory`,\n );\n return;\n }\n\n const resolvedBase = fs.resolvePath(searchPath);\n const nameRegex = namePattern ? this.globToRegex(namePattern) : null;\n\n const results: string[] = [];\n this.walk(\n node,\n resolvedBase,\n 0,\n maxDepth,\n nameRegex,\n typeFilter,\n results,\n );\n\n for (const r of results) {\n context.writer.writeln(r);\n }\n } catch (e: any) {\n context.writer.writeError(`find: ${e.message}`);\n }\n }\n\n private parseSearchPath(command: CliProcessCommand): string | null {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n return tokens.length > 0 ? tokens[0] : null;\n }\n\n private globToRegex(pattern: string): RegExp {\n const escaped = pattern.replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&');\n const regexStr = escaped.replace(/\\*/g, '.*').replace(/\\?/g, '.');\n return new RegExp(`^${regexStr}$`, 'i');\n }\n\n private walk(\n node: IFileNode,\n currentPath: string,\n depth: number,\n maxDepth: number,\n nameRegex: RegExp | null,\n typeFilter: string | null,\n results: string[],\n ): void {\n if (!node.children) return;\n\n for (const child of node.children) {\n const childPath =\n currentPath === '/'\n ? `/${child.name}`\n : `${currentPath}/${child.name}`;\n\n let matches = true;\n if (nameRegex && !nameRegex.test(child.name)) {\n matches = false;\n }\n if (typeFilter === 'f' && child.type !== 'file') {\n matches = false;\n }\n if (typeFilter === 'd' && child.type !== 'directory') {\n matches = false;\n }\n\n if (matches) {\n results.push(childPath);\n }\n\n if (child.type === 'directory' && depth < maxDepth) {\n this.walk(\n child,\n childPath,\n depth + 1,\n maxDepth,\n nameRegex,\n typeFilter,\n results,\n );\n }\n }\n }\n}\n","import {\n CliForegroundColor,\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport {\n IFileSystemService,\n IFileSystemService_TOKEN,\n IFileNode,\n} from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliGrepCommandProcessor implements ICliCommandProcessor {\n command = 'grep';\n description = 'Search file contents for a pattern';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '🔎', module: 'file management' };\n\n parameters = [\n {\n name: 'ignore-case',\n aliases: ['i'],\n description: 'Case-insensitive matching',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'recursive',\n aliases: ['r', 'R'],\n description: 'Recursively search directories',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'line-number',\n aliases: ['n'],\n description: 'Show line numbers',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'count',\n aliases: ['c'],\n description: 'Show only a count of matching lines per file',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'files-with-matches',\n aliases: ['l'],\n description: 'Show only filenames containing matches',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'invert-match',\n aliases: ['v'],\n description: 'Select non-matching lines',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const ignoreCase =\n command.args['ignore-case'] || command.args['i'] || false;\n const recursive =\n command.args['recursive'] ||\n command.args['r'] ||\n command.args['R'] ||\n false;\n const showLineNum =\n command.args['line-number'] || command.args['n'] || false;\n const countOnly =\n command.args['count'] || command.args['c'] || false;\n const filesOnly =\n command.args['files-with-matches'] || command.args['l'] || false;\n const invert =\n command.args['invert-match'] || command.args['v'] || false;\n\n const { pattern, paths } = this.parseArgs(command);\n if (!pattern) {\n context.writer.writeError(\n 'grep: missing pattern. Usage: grep [options] <pattern> <file>',\n );\n return;\n }\n if (paths.length === 0) {\n if (command.data != null) {\n let regex: RegExp;\n try {\n regex = new RegExp(pattern, ignoreCase ? 'gi' : 'g');\n } catch {\n context.writer.writeError(`grep: invalid pattern '${pattern}'`);\n return;\n }\n const content = typeof command.data === 'string'\n ? command.data\n : JSON.stringify(command.data);\n this.grepContent(content, null, regex, {\n ignoreCase, showLineNum, countOnly, filesOnly, invert,\n }, context, false);\n return;\n }\n context.writer.writeError(\n 'grep: missing file operand. Usage: grep [options] <pattern> <file>',\n );\n return;\n }\n\n let regex: RegExp;\n try {\n regex = new RegExp(pattern, ignoreCase ? 'gi' : 'g');\n } catch {\n context.writer.writeError(`grep: invalid pattern '${pattern}'`);\n return;\n }\n\n const filePaths: string[] = [];\n for (const p of paths) {\n try {\n if (!fs.exists(p)) {\n context.writer.writeError(\n `grep: ${p}: No such file or directory`,\n );\n continue;\n }\n if (fs.isDirectory(p)) {\n if (!recursive) {\n context.writer.writeError(\n `grep: ${p}: Is a directory`,\n );\n continue;\n }\n this.collectFiles(fs, fs.resolvePath(p), fs.getNode(p)!, filePaths);\n } else {\n filePaths.push(fs.resolvePath(p));\n }\n } catch (e: any) {\n context.writer.writeError(`grep: ${e.message}`);\n }\n }\n\n const multiFile = filePaths.length > 1;\n\n for (const filePath of filePaths) {\n try {\n const content = fs.readFile(filePath) ?? '';\n this.grepContent(content, filePath, regex, {\n ignoreCase, showLineNum, countOnly, filesOnly, invert,\n }, context, multiFile);\n } catch (e: any) {\n context.writer.writeError(`grep: ${filePath}: ${e.message}`);\n }\n }\n }\n\n private grepContent(\n content: string,\n filePath: string | null,\n regex: RegExp,\n options: {\n ignoreCase: boolean;\n showLineNum: boolean;\n countOnly: boolean;\n filesOnly: boolean;\n invert: boolean;\n },\n context: ICliExecutionContext,\n multiFile: boolean,\n ): void {\n const lines = content.split('\\n');\n let matchCount = 0;\n const matchingLines: { num: number; text: string }[] = [];\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n const line = lines[lineIdx];\n regex.lastIndex = 0;\n const hasMatch = regex.test(line);\n const isMatch = options.invert ? !hasMatch : hasMatch;\n\n if (isMatch) {\n matchCount++;\n matchingLines.push({ num: lineIdx + 1, text: line });\n }\n }\n\n if (options.filesOnly) {\n if (matchCount > 0 && filePath) {\n context.writer.writeln(filePath);\n }\n } else if (options.countOnly) {\n const prefix = multiFile && filePath ? `${filePath}:` : '';\n context.writer.writeln(`${prefix}${matchCount}`);\n } else {\n for (const m of matchingLines) {\n const parts: string[] = [];\n if (multiFile && filePath) {\n parts.push(context.writer.wrapInColor(filePath, CliForegroundColor.Magenta));\n parts.push(':');\n }\n if (options.showLineNum) {\n parts.push(context.writer.wrapInColor(String(m.num), CliForegroundColor.Green));\n parts.push(':');\n }\n if (!options.invert) {\n regex.lastIndex = 0;\n const highlighted = m.text.replace(regex, (match) =>\n context.writer.wrapInColor(match, CliForegroundColor.Red),\n );\n parts.push(highlighted);\n } else {\n parts.push(m.text);\n }\n context.writer.writeln(parts.join(''));\n }\n }\n }\n\n private parseArgs(\n command: CliProcessCommand,\n ): { pattern: string | null; paths: string[] } {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n\n if (tokens.length === 0) {\n return { pattern: null, paths: [] };\n }\n if (tokens.length === 1) {\n return { pattern: tokens[0], paths: [] };\n }\n\n return {\n pattern: tokens[0],\n paths: tokens.slice(1),\n };\n }\n\n private collectFiles(\n fs: IFileSystemService,\n basePath: string,\n node: IFileNode,\n result: string[],\n ): void {\n if (!node.children) return;\n for (const child of node.children) {\n const childPath =\n basePath === '/'\n ? `/${child.name}`\n : `${basePath}/${child.name}`;\n if (child.type === 'file') {\n result.push(childPath);\n } else if (child.type === 'directory') {\n this.collectFiles(fs, childPath, child, result);\n }\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTacCommandProcessor implements ICliCommandProcessor {\n command = 'tac';\n description = 'Print file in reverse line order';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔄', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n const lines = content.split('\\n');\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n lines.reverse();\n context.writer.writeln(lines.join('\\n'));\n return;\n }\n context.writer.writeError('tac: missing file operand');\n return;\n }\n\n for (let i = 0; i < paths.length; i++) {\n const path = paths[i];\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`tac: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) continue;\n\n if (paths.length > 1) {\n if (i > 0) context.writer.writeln();\n context.writer.writeln(`==> ${path} <==`);\n }\n\n const lines = content.split('\\n');\n // Filter trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n lines.reverse();\n context.writer.writeln(lines.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`tac: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliBasenameCommandProcessor implements ICliCommandProcessor {\n command = 'basename';\n description = 'Strip directory from path';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📛', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const tokens = this.parseTokens(command);\n\n if (tokens.length === 0) {\n context.writer.writeError('basename: missing operand');\n return;\n }\n\n const path = tokens[0];\n const suffix = tokens.length > 1 ? tokens[1] : undefined;\n\n // Handle root path\n if (path === '/') {\n context.writer.writeln('/');\n return;\n }\n\n // Remove trailing slashes\n const cleaned = path.replace(/\\/+$/, '') || '/';\n const parts = cleaned.split('/');\n let name = parts[parts.length - 1];\n\n // If after cleaning we got empty (shouldn't happen), fallback\n if (!name) {\n name = '/';\n }\n\n // Strip suffix if provided and name ends with it\n if (suffix && name.endsWith(suffix) && name !== suffix) {\n name = name.slice(0, -suffix.length);\n }\n\n context.writer.writeln(name);\n }\n\n private parseTokens(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliDirnameCommandProcessor implements ICliCommandProcessor {\n command = 'dirname';\n description = 'Strip last component from path';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📂', module: 'file management' };\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const tokens = this.parseTokens(command);\n\n if (tokens.length === 0) {\n context.writer.writeError('dirname: missing operand');\n return;\n }\n\n const path = tokens[0];\n\n // Handle root path\n if (path === '/') {\n context.writer.writeln('/');\n return;\n }\n\n // Remove trailing slashes\n const cleaned = path.replace(/\\/+$/, '') || '/';\n\n // No slash at all => bare filename => return '.'\n if (!cleaned.includes('/')) {\n context.writer.writeln('.');\n return;\n }\n\n const parts = cleaned.split('/');\n parts.pop(); // remove last component\n\n let dir = parts.join('/');\n // If dir is empty after removing last component (e.g. \"/home\" -> \"\")\n if (!dir) {\n dir = '/';\n }\n\n context.writer.writeln(dir);\n }\n\n private parseTokens(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliSortCommandProcessor implements ICliCommandProcessor {\n command = 'sort';\n description = 'Sort lines of text files';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '\\u{1F524}', module: 'file management' };\n\n parameters = [\n {\n name: 'reverse',\n aliases: ['r'],\n description: 'Reverse the result of comparisons',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'numeric-sort',\n aliases: ['n'],\n description: 'Compare according to string numerical value',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'unique',\n aliases: ['u'],\n description: 'Output only unique lines',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'key',\n aliases: ['k'],\n description: 'Sort by a specific field (1-indexed)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'field-separator',\n aliases: ['t'],\n description: 'Use a specific field delimiter',\n required: false,\n type: 'string' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const reverse = !!command.args['r'] || !!command.args['reverse'];\n const numeric = !!command.args['n'] || !!command.args['numeric-sort'];\n const unique = !!command.args['u'] || !!command.args['unique'];\n const keyField = command.args['k'] || command.args['key'];\n const delimiter = command.args['t'] || command.args['field-separator'];\n\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n let lines = content.split('\\n');\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const keyIndex = keyField\n ? parseInt(keyField, 10) - 1\n : undefined;\n\n lines.sort((a, b) => {\n let va: string | number = a;\n let vb: string | number = b;\n\n if (keyIndex !== undefined && keyIndex >= 0) {\n const sepRegex = delimiter\n ? new RegExp(\n delimiter.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&',\n ),\n )\n : /\\s+/;\n const fieldsA = a.split(sepRegex);\n const fieldsB = b.split(sepRegex);\n va = fieldsA[keyIndex] || '';\n vb = fieldsB[keyIndex] || '';\n }\n\n if (numeric) {\n const na = parseFloat(va as string) || 0;\n const nb = parseFloat(vb as string) || 0;\n return na - nb;\n }\n\n return (va as string).localeCompare(vb as string);\n });\n\n if (unique) {\n lines = lines.filter(\n (line, i, arr) => i === 0 || line !== arr[i - 1],\n );\n }\n\n if (reverse) {\n lines.reverse();\n }\n\n context.writer.writeln(lines.join('\\n'));\n return;\n }\n context.writer.writeError('sort: missing file operand');\n return;\n }\n\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(`sort: ${path}: Is a directory`);\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) {\n context.writer.writeError(\n `sort: ${path}: No such file or directory`,\n );\n continue;\n }\n\n let lines = content.split('\\n');\n // Remove trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const keyIndex = keyField\n ? parseInt(keyField, 10) - 1\n : undefined;\n\n lines.sort((a, b) => {\n let va: string | number = a;\n let vb: string | number = b;\n\n if (keyIndex !== undefined && keyIndex >= 0) {\n const sepRegex = delimiter\n ? new RegExp(\n delimiter.replace(\n /[.*+?^${}()|[\\]\\\\]/g,\n '\\\\$&',\n ),\n )\n : /\\s+/;\n const fieldsA = a.split(sepRegex);\n const fieldsB = b.split(sepRegex);\n va = fieldsA[keyIndex] || '';\n vb = fieldsB[keyIndex] || '';\n }\n\n if (numeric) {\n const na = parseFloat(va as string) || 0;\n const nb = parseFloat(vb as string) || 0;\n return na - nb;\n }\n\n return (va as string).localeCompare(vb as string);\n });\n\n if (unique) {\n lines = lines.filter(\n (line, i, arr) => i === 0 || line !== arr[i - 1],\n );\n }\n\n if (reverse) {\n lines.reverse();\n }\n\n context.writer.writeln(lines.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`sort: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliUniqCommandProcessor implements ICliCommandProcessor {\n command = 'uniq';\n description = 'Filter adjacent duplicate lines from a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '\\u{1F501}', module: 'file management' };\n\n parameters = [\n {\n name: 'count',\n aliases: ['c'],\n description: 'Prefix lines by the number of occurrences',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'repeated',\n aliases: ['d'],\n description: 'Only print duplicate lines',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'ignore-case',\n aliases: ['i'],\n description: 'Ignore differences in case when comparing',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'unique',\n aliases: ['u'],\n description: 'Only print unique lines',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const showCount = !!command.args['c'] || !!command.args['count'];\n const onlyDuplicates =\n !!command.args['d'] || !!command.args['repeated'];\n const ignoreCase =\n !!command.args['i'] || !!command.args['ignore-case'];\n const onlyUnique = !!command.args['u'] || !!command.args['unique'];\n\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n let lines = content.split('\\n');\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const groups: { line: string; count: number }[] = [];\n for (const line of lines) {\n const last = groups[groups.length - 1];\n const compare = ignoreCase\n ? (a: string, b: string) =>\n a.toLowerCase() === b.toLowerCase()\n : (a: string, b: string) => a === b;\n if (last && compare(last.line, line)) {\n last.count++;\n } else {\n groups.push({ line, count: 1 });\n }\n }\n\n let filtered = groups;\n if (onlyDuplicates) {\n filtered = filtered.filter((g) => g.count > 1);\n }\n if (onlyUnique) {\n filtered = filtered.filter((g) => g.count === 1);\n }\n\n const output = filtered.map((g) => {\n if (showCount) {\n return `${String(g.count).padStart(7)} ${g.line}`;\n }\n return g.line;\n });\n\n context.writer.writeln(output.join('\\n'));\n return;\n }\n context.writer.writeError('uniq: missing file operand');\n return;\n }\n\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(\n `uniq: ${path}: Is a directory`,\n );\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) {\n context.writer.writeError(\n `uniq: ${path}: No such file or directory`,\n );\n continue;\n }\n\n let lines = content.split('\\n');\n // Remove trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n // Group consecutive identical lines\n const groups: { line: string; count: number }[] = [];\n for (const line of lines) {\n const last = groups[groups.length - 1];\n const compare = ignoreCase\n ? (a: string, b: string) =>\n a.toLowerCase() === b.toLowerCase()\n : (a: string, b: string) => a === b;\n if (last && compare(last.line, line)) {\n last.count++;\n } else {\n groups.push({ line, count: 1 });\n }\n }\n\n // Filter based on flags\n let filtered = groups;\n if (onlyDuplicates) {\n filtered = filtered.filter((g) => g.count > 1);\n }\n if (onlyUnique) {\n filtered = filtered.filter((g) => g.count === 1);\n }\n\n // Format output\n const output = filtered.map((g) => {\n if (showCount) {\n return `${String(g.count).padStart(7)} ${g.line}`;\n }\n return g.line;\n });\n\n context.writer.writeln(output.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`uniq: ${e.message}`);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliCutCommandProcessor implements ICliCommandProcessor {\n command = 'cut';\n description = 'Extract columns or fields from each line of a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '\\u2702\\uFE0F', module: 'file management' };\n\n parameters = [\n {\n name: 'delimiter',\n aliases: ['d'],\n description: 'Use a specific field delimiter (default: tab)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'fields',\n aliases: ['f'],\n description: 'Select only these fields (e.g., 1,3 or 1-3)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'characters',\n aliases: ['c'],\n description:\n 'Select only these character positions (e.g., 1-5 or 3)',\n required: false,\n type: 'string' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const delimiter = command.args['d'] || command.args['delimiter'] || '\\t';\n const fieldsSpec = command.args['f'] || command.args['fields'];\n const charsSpec = command.args['c'] || command.args['characters'];\n\n if (!fieldsSpec && !charsSpec) {\n context.writer.writeError(\n 'cut: you must specify either -f (fields) or -c (characters)',\n );\n return;\n }\n\n const spec = fieldsSpec || charsSpec!;\n const indices = this.parseSpec(spec);\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n if (command.data != null) {\n const content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n let lines = content.split('\\n');\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const output = lines.map((line) => {\n if (fieldsSpec) {\n const fields = line.split(delimiter);\n const resolved = this.resolveIndices(\n indices,\n fields.length,\n );\n return resolved\n .map((idx) => fields[idx] || '')\n .join(delimiter);\n } else {\n const chars = line.split('');\n const resolved = this.resolveIndices(\n indices,\n chars.length,\n );\n return resolved.map((idx) => chars[idx] || '').join('');\n }\n });\n\n context.writer.writeln(output.join('\\n'));\n return;\n }\n context.writer.writeError('cut: missing file operand');\n return;\n }\n\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(\n `cut: ${path}: Is a directory`,\n );\n continue;\n }\n const content = fs.readFile(path);\n if (content === null) {\n context.writer.writeError(\n `cut: ${path}: No such file or directory`,\n );\n continue;\n }\n\n let lines = content.split('\\n');\n // Remove trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n const output = lines.map((line) => {\n if (fieldsSpec) {\n const fields = line.split(delimiter);\n const resolved = this.resolveIndices(\n indices,\n fields.length,\n );\n return resolved\n .map((idx) => fields[idx] || '')\n .join(delimiter);\n } else {\n // character mode\n const chars = line.split('');\n const resolved = this.resolveIndices(\n indices,\n chars.length,\n );\n return resolved.map((idx) => chars[idx] || '').join('');\n }\n });\n\n context.writer.writeln(output.join('\\n'));\n } catch (e: any) {\n context.writer.writeError(`cut: ${e.message}`);\n }\n }\n }\n\n private parseSpec(\n spec: string,\n ): Array<{ type: 'index'; value: number } | { type: 'range'; start: number | null; end: number | null }> {\n const parts = spec.split(',');\n const result: Array<\n | { type: 'index'; value: number }\n | { type: 'range'; start: number | null; end: number | null }\n > = [];\n\n for (const part of parts) {\n const trimmed = part.trim();\n if (trimmed.includes('-')) {\n const [startStr, endStr] = trimmed.split('-');\n const start = startStr ? parseInt(startStr, 10) : null;\n const end = endStr ? parseInt(endStr, 10) : null;\n result.push({ type: 'range', start, end });\n } else {\n result.push({ type: 'index', value: parseInt(trimmed, 10) });\n }\n }\n\n return result;\n }\n\n private resolveIndices(\n specs: Array<\n | { type: 'index'; value: number }\n | { type: 'range'; start: number | null; end: number | null }\n >,\n total: number,\n ): number[] {\n const indices: number[] = [];\n\n for (const spec of specs) {\n if (spec.type === 'index') {\n indices.push(spec.value - 1);\n } else {\n const start = spec.start ? spec.start - 1 : 0;\n const end = spec.end ? spec.end - 1 : total - 1;\n for (let i = start; i <= end; i++) {\n indices.push(i);\n }\n }\n }\n\n return indices;\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliPasteCommandProcessor implements ICliCommandProcessor {\n command = 'paste';\n description = 'Merge lines of files side by side';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '\\u{1F4CB}', module: 'file management' };\n\n parameters = [\n {\n name: 'delimiters',\n aliases: ['d'],\n description: 'Use a specific delimiter (default: tab)',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'serial',\n aliases: ['s'],\n description:\n 'Paste one file at a time instead of in parallel',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const delimiter = command.args['d'] || command.args['delimiters'] || '\\t';\n const serial = !!command.args['s'] || !!command.args['serial'];\n\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n context.writer.writeError('paste: missing file operand');\n return;\n }\n\n if (!serial && paths.length < 2) {\n context.writer.writeError('paste: missing file operand');\n return;\n }\n\n // Read all files\n const fileLines: string[][] = [];\n for (const path of paths) {\n try {\n if (fs.isDirectory(path)) {\n context.writer.writeError(\n `paste: ${path}: Is a directory`,\n );\n return;\n }\n const content = fs.readFile(path);\n if (content === null) {\n context.writer.writeError(\n `paste: ${path}: No such file or directory`,\n );\n return;\n }\n let lines = content.split('\\n');\n // Remove trailing empty line from trailing newline\n if (lines.length > 0 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n fileLines.push(lines);\n } catch (e: any) {\n context.writer.writeError(`paste: ${e.message}`);\n return;\n }\n }\n\n if (serial) {\n // Serial mode: each file's lines joined on one output line\n const output = fileLines.map((lines) =>\n lines.join(delimiter),\n );\n context.writer.writeln(output.join('\\n'));\n } else {\n // Parallel mode: zip lines from all files\n const maxLines = Math.max(\n ...fileLines.map((lines) => lines.length),\n );\n const output: string[] = [];\n for (let i = 0; i < maxLines; i++) {\n const parts = fileLines.map((lines) => lines[i] || '');\n output.push(parts.join(delimiter));\n }\n context.writer.writeln(output.join('\\n'));\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\n/**\n * Expand character set notation (ranges like a-z, character classes like [:upper:])\n * into an array of individual characters.\n */\nfunction expandSet(set: string): string[] {\n const chars: string[] = [];\n let i = 0;\n while (i < set.length) {\n // Character classes\n if (set[i] === '[' && set[i + 1] === ':') {\n const end = set.indexOf(':]', i + 2);\n if (end !== -1) {\n const className = set.substring(i + 2, end);\n chars.push(...getCharClass(className));\n i = end + 2;\n continue;\n }\n }\n // Ranges like a-z\n if (\n i + 2 < set.length &&\n set[i + 1] === '-' &&\n set[i + 2] !== undefined\n ) {\n const start = set.charCodeAt(i);\n const finish = set.charCodeAt(i + 2);\n if (start <= finish) {\n for (let c = start; c <= finish; c++) {\n chars.push(String.fromCharCode(c));\n }\n } else {\n for (let c = start; c >= finish; c--) {\n chars.push(String.fromCharCode(c));\n }\n }\n i += 3;\n continue;\n }\n chars.push(set[i]);\n i++;\n }\n return chars;\n}\n\nfunction getCharClass(name: string): string[] {\n switch (name) {\n case 'upper':\n return expandSet('A-Z');\n case 'lower':\n return expandSet('a-z');\n case 'digit':\n return expandSet('0-9');\n case 'alpha':\n return [...expandSet('a-z'), ...expandSet('A-Z')];\n case 'alnum':\n return [...expandSet('a-z'), ...expandSet('A-Z'), ...expandSet('0-9')];\n case 'space':\n return [' ', '\\t', '\\n', '\\r', '\\x0b', '\\x0c'];\n default:\n return [];\n }\n}\n\n/**\n * Parse quoted or unquoted tokens from a raw command string.\n * Returns an array of parsed tokens (flags, SET1, SET2, file path).\n */\nfunction parseTokens(raw: string): string[] {\n const tokens: string[] = [];\n let i = 0;\n while (i < raw.length) {\n // Skip whitespace\n if (/\\s/.test(raw[i])) {\n i++;\n continue;\n }\n // Quoted string\n if (raw[i] === \"'\" || raw[i] === '\"') {\n const quote = raw[i];\n i++;\n let token = '';\n while (i < raw.length && raw[i] !== quote) {\n token += raw[i];\n i++;\n }\n i++; // skip closing quote\n tokens.push(token);\n continue;\n }\n // Unquoted token\n let token = '';\n while (i < raw.length && !/\\s/.test(raw[i])) {\n token += raw[i];\n i++;\n }\n tokens.push(token);\n }\n return tokens;\n}\n\nexport class CliTrCommandProcessor implements ICliCommandProcessor {\n command = 'tr';\n description = 'Translate or delete characters in a file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔀', module: 'file management' };\n\n parameters = [\n {\n name: 'd',\n description: 'Delete characters in SET1',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 's',\n description: 'Squeeze repeated characters in last operand set',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const raw = command.value || '';\n const positional = parseTokens(raw);\n\n const deleteMode = !!command.args['d'];\n const squeezeMode = !!command.args['s'];\n\n if (positional.length === 0) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n\n let set1Str: string | undefined;\n let set2Str: string | undefined;\n let filePath: string | undefined;\n\n if (deleteMode && squeezeMode) {\n // -d -s SET1 SET2 [file]\n if (positional.length < 2) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n set1Str = positional[0];\n set2Str = positional[1];\n if (positional.length >= 3) {\n filePath = positional[2];\n }\n } else if (deleteMode) {\n // -d SET1 [file]\n if (positional.length < 1) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n set1Str = positional[0];\n if (positional.length >= 2) {\n filePath = positional[1];\n }\n } else if (squeezeMode) {\n if (positional.length < 1) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n if (positional.length >= 3) {\n // -s SET1 SET2 file => translate + squeeze\n set1Str = positional[0];\n set2Str = positional[1];\n filePath = positional[2];\n } else if (positional.length === 2) {\n // -s SET1 file OR -s SET1 SET2 (piped)\n // If piped data exists and there's no file at positional[1], treat as SET1 + file\n set1Str = positional[0];\n filePath = positional[1];\n } else {\n // -s SET1 (piped)\n set1Str = positional[0];\n }\n } else {\n // translate: SET1 SET2 [file]\n if (positional.length < 2) {\n context.writer.writeError('tr: missing operand');\n return;\n }\n set1Str = positional[0];\n set2Str = positional[1];\n if (positional.length >= 3) {\n filePath = positional[2];\n }\n }\n\n let content: string | null;\n if (filePath) {\n try {\n if (fs.isDirectory(filePath)) {\n context.writer.writeError(`tr: ${filePath}: Is a directory`);\n return;\n }\n content = fs.readFile(filePath);\n if (content === null) {\n context.writer.writeError(\n `tr: ${filePath}: No such file or directory`,\n );\n return;\n }\n } catch (e: any) {\n context.writer.writeError(`tr: ${e.message}`);\n return;\n }\n } else if (command.data != null) {\n content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n } else {\n context.writer.writeError('tr: missing file operand');\n return;\n }\n\n try {\n\n const set1 = expandSet(set1Str!);\n const set1Set = new Set(set1);\n const set2 = set2Str ? expandSet(set2Str) : [];\n\n let result = content;\n\n if (deleteMode && squeezeMode) {\n // Delete SET1 chars, then squeeze SET2 chars\n result = this.deleteChars(result, set1Set);\n const squeezeSet = new Set(set2);\n result = this.squeezeChars(result, squeezeSet);\n } else if (deleteMode) {\n result = this.deleteChars(result, set1Set);\n } else if (squeezeMode && set2.length > 0) {\n // Translate then squeeze\n result = this.translateChars(result, set1, set2);\n const squeezeSet = new Set(set2);\n result = this.squeezeChars(result, squeezeSet);\n } else if (squeezeMode) {\n result = this.squeezeChars(result, set1Set);\n } else {\n result = this.translateChars(result, set1, set2);\n }\n\n context.writer.writeln(result);\n } catch (e: any) {\n context.writer.writeError(`tr: ${e.message}`);\n }\n }\n\n private deleteChars(content: string, deleteSet: Set<string>): string {\n let result = '';\n for (const ch of content) {\n if (!deleteSet.has(ch)) {\n result += ch;\n }\n }\n return result;\n }\n\n private squeezeChars(content: string, squeezeSet: Set<string>): string {\n let result = '';\n let prevChar = '';\n for (const ch of content) {\n if (squeezeSet.has(ch) && ch === prevChar) {\n continue;\n }\n result += ch;\n prevChar = ch;\n }\n return result;\n }\n\n private translateChars(\n content: string,\n set1: string[],\n set2: string[],\n ): string {\n if (set2.length === 0) return content;\n\n // Build translation map; if SET2 is shorter, last char repeats\n const map = new Map<string, string>();\n for (let i = 0; i < set1.length; i++) {\n const replacement =\n i < set2.length ? set2[i] : set2[set2.length - 1];\n map.set(set1[i], replacement);\n }\n\n let result = '';\n for (const ch of content) {\n result += map.has(ch) ? map.get(ch)! : ch;\n }\n return result;\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliStatCommandProcessor implements ICliCommandProcessor {\n command = 'stat';\n description = 'Display file/directory metadata';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📊', module: 'file management' };\n\n parameters = [];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const paths = this.parsePaths(command);\n\n if (paths.length === 0) {\n context.writer.writeError('stat: missing operand');\n return;\n }\n\n for (const path of paths) {\n const resolved = fs.resolvePath(path);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `stat: cannot stat '${path}': No such file or directory`,\n );\n continue;\n }\n\n context.writer.writeKeyValue({\n File: resolved,\n Size: `${node.size}`,\n Type: node.type,\n Permissions: node.permissions || 'rw-r--r--',\n Owner: node.ownership?.uid || '-',\n Group: node.ownership?.gid || '-',\n Created: new Date(node.createdAt).toLocaleString(),\n Modified: new Date(node.modifiedAt).toLocaleString(),\n });\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliChmodCommandProcessor implements ICliCommandProcessor {\n command = 'chmod';\n description = 'Change file permissions';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔒', module: 'file management' };\n\n parameters = [\n {\n name: 'R',\n description: 'Change files and directories recursively',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const { recursive, mode, paths } = this.parseArgs(command);\n\n if (!mode || paths.length === 0) {\n context.writer.writeError(\n 'chmod: missing operand',\n );\n return;\n }\n\n for (const path of paths) {\n const resolved = fs.resolvePath(path);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `chmod: cannot access '${path}': No such file or directory`,\n );\n continue;\n }\n\n const perms = this.resolvePermissions(mode, node.permissions || 'rw-r--r--');\n if (perms === null) {\n context.writer.writeError(\n `chmod: invalid mode: '${mode}'`,\n );\n return;\n }\n\n this.applyPermissions(fs, resolved, node, perms, recursive);\n }\n\n await fs.persist();\n }\n\n private parseArgs(command: CliProcessCommand): {\n recursive: boolean;\n mode: string | null;\n paths: string[];\n } {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n const recursive = command.args['R'] || false;\n const mode = tokens.length > 0 ? tokens[0] : null;\n const paths = tokens.slice(1);\n return { recursive, mode, paths };\n }\n\n private resolvePermissions(\n mode: string,\n current: string,\n ): string | null {\n // Octal mode (e.g., 755, 644)\n if (/^[0-7]{3}$/.test(mode)) {\n return this.octalToPermString(mode);\n }\n\n // Symbolic mode (e.g., u+x, go-w, a+r)\n const match = mode.match(/^([ugoa]+)([+\\-=])([rwx]+)$/);\n if (!match) {\n return null;\n }\n\n const who = match[1];\n const op = match[2];\n const perms = match[3];\n const chars = current.split('');\n\n // Map who to indices: u=0-2, g=3-5, o=6-8\n const indices: number[] = [];\n const addIndices = (start: number) => {\n if (perms.includes('r')) indices.push(start);\n if (perms.includes('w')) indices.push(start + 1);\n if (perms.includes('x')) indices.push(start + 2);\n };\n\n if (who.includes('u') || who.includes('a')) addIndices(0);\n if (who.includes('g') || who.includes('a')) addIndices(3);\n if (who.includes('o') || who.includes('a')) addIndices(6);\n\n for (const idx of indices) {\n const permChar = idx % 3 === 0 ? 'r' : idx % 3 === 1 ? 'w' : 'x';\n if (op === '+') {\n chars[idx] = permChar;\n } else if (op === '-') {\n chars[idx] = '-';\n } else if (op === '=') {\n chars[idx] = permChar;\n }\n }\n\n // For '=' operation, clear bits not mentioned\n if (op === '=') {\n const clearIndices: number[] = [];\n const clearGroup = (start: number) => {\n if (!perms.includes('r')) clearIndices.push(start);\n if (!perms.includes('w')) clearIndices.push(start + 1);\n if (!perms.includes('x')) clearIndices.push(start + 2);\n };\n\n if (who.includes('u') || who.includes('a')) clearGroup(0);\n if (who.includes('g') || who.includes('a')) clearGroup(3);\n if (who.includes('o') || who.includes('a')) clearGroup(6);\n\n for (const idx of clearIndices) {\n chars[idx] = '-';\n }\n }\n\n return chars.join('');\n }\n\n private octalToPermString(octal: string): string {\n const digitToPerms = (d: number): string => {\n return (\n ((d & 4) ? 'r' : '-') +\n ((d & 2) ? 'w' : '-') +\n ((d & 1) ? 'x' : '-')\n );\n };\n return (\n digitToPerms(parseInt(octal[0], 10)) +\n digitToPerms(parseInt(octal[1], 10)) +\n digitToPerms(parseInt(octal[2], 10))\n );\n }\n\n private applyPermissions(\n fs: IFileSystemService,\n basePath: string,\n node: IFileNode,\n perms: string,\n recursive: boolean,\n ): void {\n fs.chmod(basePath, perms);\n if (recursive && node.type === 'directory' && node.children) {\n for (const child of node.children) {\n const childPath =\n basePath === '/'\n ? `/${child.name}`\n : `${basePath}/${child.name}`;\n this.applyPermissions(fs, childPath, child, perms, recursive);\n }\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliChownCommandProcessor implements ICliCommandProcessor {\n command = 'chown';\n description = 'Change file owner and group';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔑', module: 'file management' };\n\n parameters = [\n {\n name: 'R',\n description: 'Change files and directories recursively',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const { recursive, ownerSpec, paths } = this.parseArgs(command);\n\n if (!ownerSpec || paths.length === 0) {\n context.writer.writeError(\n 'chown: missing operand. Usage: chown [user][:group] <file>',\n );\n return;\n }\n\n const { uid, gid } = this.parseOwnerSpec(ownerSpec);\n if (!uid && !gid) {\n context.writer.writeError(\n `chown: invalid owner: '${ownerSpec}'`,\n );\n return;\n }\n\n for (const path of paths) {\n const resolved = fs.resolvePath(path);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `chown: cannot access '${path}': No such file or directory`,\n );\n continue;\n }\n\n this.applyOwnership(fs, resolved, node, uid, gid, recursive);\n }\n\n await fs.persist();\n }\n\n private parseArgs(command: CliProcessCommand): {\n recursive: boolean;\n ownerSpec: string | null;\n paths: string[];\n } {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n const recursive = command.args['R'] || false;\n const ownerSpec = tokens.length > 0 ? tokens[0] : null;\n const paths = tokens.slice(1);\n return { recursive, ownerSpec, paths };\n }\n\n /** Parse \"user:group\", \"user:\", \":group\", or \"user\" */\n private parseOwnerSpec(spec: string): { uid: string | null; gid: string | null } {\n if (spec.includes(':')) {\n const [uid, gid] = spec.split(':', 2);\n return {\n uid: uid || null,\n gid: gid || null,\n };\n }\n return { uid: spec, gid: null };\n }\n\n private applyOwnership(\n fs: IFileSystemService,\n basePath: string,\n node: IFileNode,\n uid: string | null,\n gid: string | null,\n recursive: boolean,\n ): void {\n const current = node.ownership || { uid: 'root', gid: 'admin' };\n fs.chown(basePath, {\n uid: uid ?? current.uid,\n gid: gid ?? current.gid,\n });\n\n if (recursive && node.type === 'directory' && node.children) {\n for (const child of node.children) {\n const childPath =\n basePath === '/'\n ? `/${child.name}`\n : `${basePath}/${child.name}`;\n this.applyOwnership(fs, childPath, child, uid, gid, recursive);\n }\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliDuCommandProcessor implements ICliCommandProcessor {\n command = 'du';\n description = 'Estimate file space usage';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📏', module: 'file management' };\n\n parameters = [\n {\n name: 'h',\n description: 'Human-readable sizes (e.g. 1K, 2M)',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 's',\n description: 'Display only a total for each argument',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'max-depth',\n aliases: ['d'],\n description: 'Print total for a directory only if it is N or fewer levels below the argument',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const { humanReadable, summaryOnly, maxDepth, paths } =\n this.parseArgs(command);\n\n if (paths.length === 0) {\n context.writer.writeError('du: missing operand');\n return;\n }\n\n for (const path of paths) {\n const resolved = fs.resolvePath(path);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `du: cannot access '${path}': No such file or directory`,\n );\n continue;\n }\n\n if (node.type === 'file') {\n context.writer.writeln(\n `${this.formatSize(node.size, humanReadable)}\\t${resolved}`,\n );\n } else {\n const entries: { size: number; path: string }[] = [];\n this.collectSizes(node, resolved, 0, maxDepth, summaryOnly, entries);\n\n for (const entry of entries) {\n context.writer.writeln(\n `${this.formatSize(entry.size, humanReadable)}\\t${entry.path}`,\n );\n }\n }\n }\n }\n\n private parseArgs(command: CliProcessCommand): {\n humanReadable: boolean;\n summaryOnly: boolean;\n maxDepth: number;\n paths: string[];\n } {\n const raw = command.value || '';\n const paths = raw.split(/\\s+/).filter(Boolean);\n const humanReadable = !!command.args['h'];\n const summaryOnly = !!command.args['s'];\n const maxDepth = command.args['d'] || command.args['max-depth']\n ? parseInt(command.args['d'] || command.args['max-depth'] || '0', 10)\n : Infinity;\n\n return { humanReadable, summaryOnly, maxDepth, paths };\n }\n\n private collectSizes(\n node: IFileNode,\n path: string,\n depth: number,\n maxDepth: number,\n summaryOnly: boolean,\n entries: { size: number; path: string }[],\n ): number {\n if (node.type === 'file') {\n return node.size;\n }\n\n let total = 0;\n if (node.children) {\n for (const child of node.children) {\n const childPath = path === '/' ? `/${child.name}` : `${path}/${child.name}`;\n total += this.collectSizes(\n child,\n childPath,\n depth + 1,\n maxDepth,\n summaryOnly,\n entries,\n );\n }\n }\n\n if (summaryOnly) {\n if (depth === 0) {\n entries.push({ size: total, path });\n }\n } else if (depth <= maxDepth) {\n entries.push({ size: total, path });\n }\n\n return total;\n }\n\n private formatSize(bytes: number, humanReadable: boolean): string {\n if (!humanReadable) {\n return String(bytes);\n }\n\n if (bytes < 1024) return `${bytes}B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)}K`;\n if (bytes < 1024 * 1024 * 1024)\n return `${(bytes / (1024 * 1024)).toFixed(1)}M`;\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)}G`;\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliLnCommandProcessor implements ICliCommandProcessor {\n command = 'ln';\n description = 'Create symbolic links';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔗', module: 'file management' };\n\n parameters = [\n {\n name: 's',\n description: 'Create a symbolic link',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const { symbolic, target, linkName } = this.parseArgs(command);\n\n if (!symbolic) {\n context.writer.writeError(\n 'ln: hard links not supported in virtual filesystem',\n );\n return;\n }\n\n if (!target || !linkName) {\n context.writer.writeError('ln: missing operand');\n return;\n }\n\n const resolvedLink = fs.resolvePath(linkName);\n const resolvedTarget = fs.resolvePath(target);\n\n // Check if the link already exists\n if (fs.exists(resolvedLink)) {\n context.writer.writeError(\n `ln: failed to create symbolic link '${linkName}': File exists`,\n );\n return;\n }\n\n // Create the symlink as a file node with linkTarget set\n // We allow dangling symlinks so we don't check if target exists\n fs.createFile(resolvedLink, '');\n const node = fs.getNode(resolvedLink);\n if (node) {\n node.linkTarget = resolvedTarget;\n node.size = 0;\n }\n\n await fs.persist();\n }\n\n private parseArgs(command: CliProcessCommand): {\n symbolic: boolean;\n target: string | null;\n linkName: string | null;\n } {\n const raw = command.value || '';\n const tokens = raw.split(/\\s+/).filter(Boolean);\n const symbolic = command.args['s'] || false;\n\n return {\n symbolic,\n target: tokens[0] || null,\n linkName: tokens[1] || null,\n };\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\ninterface SedExpression {\n address: SedAddress | null;\n command: string; // 's', 'd', 'p'\n // For substitution:\n pattern?: RegExp;\n replacement?: string;\n globalFlag?: boolean;\n printFlag?: boolean;\n}\n\ninterface SedAddress {\n type: 'line' | 'last' | 'range' | 'regex';\n line?: number;\n startLine?: number;\n endLine?: number;\n endIsLast?: boolean;\n regex?: RegExp;\n}\n\nexport class CliSedCommandProcessor implements ICliCommandProcessor {\n command = 'sed';\n description = 'Stream editor for filtering and transforming text';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '✏️', module: 'file management' };\n\n parameters = [\n {\n name: 'in-place',\n aliases: ['i'],\n description: 'Edit file in place',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'quiet',\n aliases: ['n'],\n description: 'Suppress automatic printing of pattern space',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'expression',\n aliases: ['e'],\n description: 'Add the expression to the commands to be executed',\n required: false,\n type: 'string' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const { inPlace, suppress, expressions, filePath } =\n this.parseRawCommand(command);\n\n if (expressions.length === 0) {\n context.writer.writeError(\n 'sed: missing expression. Usage: sed [options] \\'expression\\' <file>',\n );\n return;\n }\n\n let content: string;\n if (filePath) {\n const resolved = fs.resolvePath(filePath);\n\n if (!fs.exists(resolved)) {\n context.writer.writeError(\n `sed: ${filePath}: No such file or directory`,\n );\n return;\n }\n\n if (fs.isDirectory(resolved)) {\n context.writer.writeError(`sed: ${filePath}: Is a directory`);\n return;\n }\n\n content = fs.readFile(resolved) ?? '';\n } else if (command.data != null) {\n content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n } else {\n context.writer.writeError(\n 'sed: missing file operand. Usage: sed [options] \\'expression\\' <file>',\n );\n return;\n }\n\n // Parse expressions\n const parsedExpressions: SedExpression[] = [];\n for (const expr of expressions) {\n try {\n const parsed = this.parseExpression(expr);\n parsedExpressions.push(parsed);\n } catch (e: any) {\n context.writer.writeError(`sed: ${e.message}`);\n return;\n }\n }\n const lines = content.split('\\n');\n const outputLines: string[] = [];\n\n for (let lineIdx = 0; lineIdx < lines.length; lineIdx++) {\n let line = lines[lineIdx];\n let deleted = false;\n let printed = false;\n\n for (const expr of parsedExpressions) {\n if (deleted) break;\n\n if (\n !this.addressMatches(\n expr.address,\n lineIdx + 1,\n lines.length,\n line,\n )\n ) {\n continue;\n }\n\n switch (expr.command) {\n case 's': {\n const pattern = expr.pattern!;\n pattern.lastIndex = 0;\n const newLine = line.replace(pattern, (...args) => {\n const match = args[0];\n return expr.replacement!.replace(/&/g, match);\n });\n const matched = newLine !== line;\n line = newLine;\n if (matched && expr.printFlag) {\n printed = true;\n }\n break;\n }\n case 'd':\n deleted = true;\n break;\n case 'p':\n printed = true;\n break;\n }\n }\n\n if (!deleted) {\n if (suppress) {\n if (printed) {\n outputLines.push(line);\n }\n } else {\n outputLines.push(line);\n }\n }\n }\n\n const result = outputLines.join('\\n');\n\n if (inPlace && filePath) {\n const resolved = fs.resolvePath(filePath);\n fs.writeFile(resolved, result);\n await fs.persist();\n } else {\n // Print the result\n const resultLines = result.split('\\n');\n for (const line of resultLines) {\n context.writer.writeln(line);\n }\n }\n }\n\n private parseRawCommand(command: CliProcessCommand): {\n inPlace: boolean;\n suppress: boolean;\n expressions: string[];\n filePath: string | null;\n } {\n const raw = command.value || '';\n const tokens = this.tokenize(raw);\n\n const inPlace = !!command.args['in-place'] || !!command.args['i'];\n const suppress = !!command.args['quiet'] || !!command.args['n'];\n const expressions: string[] = [];\n let filePath: string | null = null;\n const nonFlagTokens: string[] = [];\n\n // Check for -e expressions from args\n if (command.args['expression'] || command.args['e']) {\n const eValue = command.args['expression'] || command.args['e'];\n if (Array.isArray(eValue)) {\n for (const v of eValue) {\n if (v && typeof v === 'string') {\n expressions.push(v);\n }\n }\n } else if (eValue && typeof eValue === 'string') {\n expressions.push(eValue);\n }\n }\n\n for (const t of tokens) {\n nonFlagTokens.push(t);\n }\n\n // If no -e expressions, first non-flag token is the expression\n if (expressions.length === 0 && nonFlagTokens.length > 0) {\n expressions.push(nonFlagTokens.shift()!);\n }\n\n // Remaining non-flag token is the file path\n if (nonFlagTokens.length > 0) {\n filePath = nonFlagTokens[nonFlagTokens.length - 1];\n }\n\n return { inPlace, suppress, expressions, filePath };\n }\n\n private tokenize(raw: string): string[] {\n const tokens: string[] = [];\n let i = 0;\n while (i < raw.length) {\n // Skip whitespace\n if (raw[i] === ' ' || raw[i] === '\\t') {\n i++;\n continue;\n }\n\n // Handle quoted strings\n if (raw[i] === \"'\" || raw[i] === '\"') {\n const quote = raw[i];\n i++;\n let token = '';\n while (i < raw.length && raw[i] !== quote) {\n token += raw[i];\n i++;\n }\n if (i < raw.length) i++; // skip closing quote\n tokens.push(token);\n continue;\n }\n\n // Regular token\n let token = '';\n while (i < raw.length && raw[i] !== ' ' && raw[i] !== '\\t') {\n token += raw[i];\n i++;\n }\n tokens.push(token);\n }\n return tokens;\n }\n\n private parseExpression(expr: string): SedExpression {\n let pos = 0;\n\n // Parse optional address\n let address: SedAddress | null = null;\n if (pos < expr.length) {\n const addrResult = this.parseAddress(expr, pos);\n if (addrResult) {\n address = addrResult.address;\n pos = addrResult.pos;\n\n // Check for range address\n if (pos < expr.length && expr[pos] === ',') {\n pos++;\n const endResult = this.parseAddress(expr, pos);\n if (endResult) {\n if (endResult.address.type === 'last') {\n address = {\n type: 'range',\n startLine: address.line,\n endLine: 0,\n endIsLast: true,\n };\n } else {\n address = {\n type: 'range',\n startLine: address.line,\n endLine: endResult.address.line,\n };\n }\n pos = endResult.pos;\n }\n }\n }\n }\n\n if (pos >= expr.length) {\n throw new Error(`invalid expression: '${expr}'`);\n }\n\n const cmd = expr[pos];\n\n if (cmd === 's') {\n return this.parseSubstitution(expr, pos, address);\n } else if (cmd === 'd') {\n return { address, command: 'd' };\n } else if (cmd === 'p') {\n return { address, command: 'p' };\n } else {\n throw new Error(`unknown command: '${cmd}'`);\n }\n }\n\n private parseAddress(\n expr: string,\n pos: number,\n ): { address: SedAddress; pos: number } | null {\n if (pos >= expr.length) return null;\n\n // Line number\n if (expr[pos] >= '0' && expr[pos] <= '9') {\n let numStr = '';\n while (pos < expr.length && expr[pos] >= '0' && expr[pos] <= '9') {\n numStr += expr[pos];\n pos++;\n }\n return {\n address: { type: 'line', line: parseInt(numStr, 10) },\n pos,\n };\n }\n\n // Last line\n if (expr[pos] === '$') {\n return { address: { type: 'last' }, pos: pos + 1 };\n }\n\n // Regex address\n if (expr[pos] === '/') {\n pos++; // skip opening /\n let pattern = '';\n while (pos < expr.length && expr[pos] !== '/') {\n if (expr[pos] === '\\\\' && pos + 1 < expr.length) {\n pattern += expr[pos + 1];\n pos += 2;\n } else {\n pattern += expr[pos];\n pos++;\n }\n }\n if (pos < expr.length) pos++; // skip closing /\n try {\n return {\n address: { type: 'regex', regex: new RegExp(pattern) },\n pos,\n };\n } catch {\n throw new Error(`invalid regex in address: '${pattern}'`);\n }\n }\n\n return null;\n }\n\n private parseSubstitution(\n expr: string,\n pos: number,\n address: SedAddress | null,\n ): SedExpression {\n pos++; // skip 's'\n if (pos >= expr.length) {\n throw new Error(`invalid substitution expression: '${expr}'`);\n }\n\n const delimiter = expr[pos];\n pos++;\n\n // Parse pattern\n let pattern = '';\n while (pos < expr.length && expr[pos] !== delimiter) {\n if (expr[pos] === '\\\\' && pos + 1 < expr.length) {\n pattern += '\\\\' + expr[pos + 1];\n pos += 2;\n } else {\n pattern += expr[pos];\n pos++;\n }\n }\n if (pos < expr.length) pos++; // skip delimiter\n\n // Parse replacement\n let replacement = '';\n while (pos < expr.length && expr[pos] !== delimiter) {\n if (expr[pos] === '\\\\' && pos + 1 < expr.length) {\n replacement += expr[pos + 1];\n pos += 2;\n } else {\n replacement += expr[pos];\n pos++;\n }\n }\n if (pos < expr.length) pos++; // skip delimiter\n\n // Parse flags\n let globalFlag = false;\n let caseInsensitive = false;\n let printFlag = false;\n while (pos < expr.length) {\n const f = expr[pos];\n if (f === 'g') globalFlag = true;\n else if (f === 'i') caseInsensitive = true;\n else if (f === 'p') printFlag = true;\n pos++;\n }\n\n let regexFlags = '';\n if (caseInsensitive) regexFlags += 'i';\n if (globalFlag) regexFlags += 'g';\n\n let regex: RegExp;\n try {\n regex = new RegExp(pattern, regexFlags);\n } catch {\n throw new Error(`invalid regex: '${pattern}'`);\n }\n\n return {\n address,\n command: 's',\n pattern: regex,\n replacement,\n globalFlag,\n printFlag,\n };\n }\n\n private addressMatches(\n address: SedAddress | null,\n lineNum: number,\n totalLines: number,\n lineText: string,\n ): boolean {\n if (!address) return true;\n\n switch (address.type) {\n case 'line':\n return lineNum === address.line!;\n case 'last':\n return lineNum === totalLines;\n case 'range': {\n const start = address.startLine!;\n const end = address.endIsLast\n ? totalLines\n : address.endLine!;\n return lineNum >= start && lineNum <= end;\n }\n case 'regex':\n return address.regex!.test(lineText);\n default:\n return true;\n }\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\ninterface AwkRule {\n pattern: AwkPattern;\n action: string;\n}\n\ntype AwkPattern =\n | { type: 'all' }\n | { type: 'begin' }\n | { type: 'end' }\n | { type: 'regex'; regex: RegExp }\n | { type: 'comparison'; field: string; op: string; value: string };\n\nexport class CliAwkCommandProcessor implements ICliCommandProcessor {\n command = 'awk';\n description = 'Pattern scanning and text processing';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '🔧', module: 'file management' };\n\n parameters = [\n {\n name: 'F',\n aliases: [] as string[],\n description: 'Field separator (default: whitespace)',\n required: false,\n type: 'string' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n const { program, filePath, fieldSep } = this.parseArgs(command);\n\n if (!program) {\n context.writer.writeError(\n \"awk: missing program. Usage: awk [-F sep] 'program' file\",\n );\n return;\n }\n\n let content = '';\n if (filePath) {\n try {\n if (!fs.exists(filePath)) {\n context.writer.writeError(\n `awk: ${filePath}: No such file or directory`,\n );\n return;\n }\n content = fs.readFile(filePath) ?? '';\n } catch (e: any) {\n context.writer.writeError(`awk: ${e.message}`);\n return;\n }\n } else if (command.data != null) {\n content = typeof command.data === 'string'\n ? command.data : JSON.stringify(command.data);\n }\n\n const rules = this.parseProgram(program);\n const lines = content\n ? content.replace(/\\n$/, '').split('\\n')\n : [];\n const fs_regex = fieldSep\n ? new RegExp(this.escapeRegex(fieldSep))\n : /\\s+/;\n\n const variables: Record<string, string | number> = {};\n const output: string[] = [];\n\n // Execute BEGIN rules\n for (const rule of rules) {\n if (rule.pattern.type === 'begin') {\n this.executeAction(\n rule.action,\n [],\n '',\n 0,\n 0,\n variables,\n output,\n );\n }\n }\n\n // Process each line\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const fields = line.split(fs_regex).filter((f) => f !== '');\n const nr = i + 1;\n const nf = fields.length;\n\n for (const rule of rules) {\n if (\n rule.pattern.type === 'begin' ||\n rule.pattern.type === 'end'\n ) {\n continue;\n }\n\n if (this.matchesPattern(rule.pattern, line, fields, nr)) {\n this.executeAction(\n rule.action,\n fields,\n line,\n nr,\n nf,\n variables,\n output,\n );\n }\n }\n }\n\n // Execute END rules\n for (const rule of rules) {\n if (rule.pattern.type === 'end') {\n this.executeAction(\n rule.action,\n [],\n '',\n lines.length,\n 0,\n variables,\n output,\n );\n }\n }\n\n for (const line of output) {\n context.writer.writeln(line);\n }\n }\n\n private parseArgs(\n command: CliProcessCommand,\n ): { program: string | null; filePath: string | null; fieldSep: string | null } {\n const raw = command.value || '';\n\n const fieldSep: string | null = command.args['F'] || null;\n let rest = raw;\n\n // Extract program (in quotes)\n let program: string | null = null;\n const sqMatch = rest.match(/^'((?:[^'\\\\]|\\\\.)*)'\\s*/);\n if (sqMatch) {\n program = sqMatch[1];\n rest = rest.slice(sqMatch[0].length);\n } else {\n const dqMatch = rest.match(/^\"((?:[^\"\\\\]|\\\\.)*)\"\\s*/);\n if (dqMatch) {\n program = dqMatch[1];\n rest = rest.slice(dqMatch[0].length);\n }\n }\n\n const filePath = rest.trim() || null;\n\n return { program, filePath, fieldSep };\n }\n\n private parseProgram(program: string): AwkRule[] {\n const rules: AwkRule[] = [];\n let pos = 0;\n\n while (pos < program.length) {\n // Skip whitespace\n while (pos < program.length && /\\s/.test(program[pos])) pos++;\n if (pos >= program.length) break;\n\n let pattern: AwkPattern = { type: 'all' };\n let action = 'print $0';\n\n // Check for BEGIN\n if (program.slice(pos).startsWith('BEGIN')) {\n pattern = { type: 'begin' };\n pos += 5;\n while (pos < program.length && /\\s/.test(program[pos])) pos++;\n }\n // Check for END\n else if (program.slice(pos).startsWith('END')) {\n pattern = { type: 'end' };\n pos += 3;\n while (pos < program.length && /\\s/.test(program[pos])) pos++;\n }\n // Check for /regex/\n else if (program[pos] === '/') {\n const endSlash = program.indexOf('/', pos + 1);\n if (endSlash !== -1) {\n const regexStr = program.slice(pos + 1, endSlash);\n pattern = { type: 'regex', regex: new RegExp(regexStr) };\n pos = endSlash + 1;\n while (pos < program.length && /\\s/.test(program[pos]))\n pos++;\n }\n }\n // Check for field comparison ($N op value)\n else if (program[pos] === '$' && program[pos + 1] !== '0') {\n const compMatch = program\n .slice(pos)\n .match(\n /^\\$(\\w+)\\s*(>=|<=|!=|==|>|<)\\s*(?:\"([^\"]*)\"|'([^']*)'|(\\S+))/,\n );\n if (compMatch) {\n pattern = {\n type: 'comparison',\n field: compMatch[1],\n op: compMatch[2],\n value:\n compMatch[3] ?? compMatch[4] ?? compMatch[5],\n };\n pos += compMatch[0].length;\n while (pos < program.length && /\\s/.test(program[pos]))\n pos++;\n }\n }\n\n // Extract action block\n if (pos < program.length && program[pos] === '{') {\n const actionEnd = this.findMatchingBrace(program, pos);\n action = program.slice(pos + 1, actionEnd).trim();\n pos = actionEnd + 1;\n } else if (pattern.type === 'all' && pos < program.length) {\n // No pattern matched and no brace — might be just an action block\n // or something unparseable, skip a char\n pos++;\n continue;\n }\n\n rules.push({ pattern, action });\n }\n\n return rules;\n }\n\n private findMatchingBrace(str: string, start: number): number {\n let depth = 0;\n let inSingleQuote = false;\n let inDoubleQuote = false;\n\n for (let i = start; i < str.length; i++) {\n const ch = str[i];\n if (inSingleQuote) {\n if (ch === \"'\") inSingleQuote = false;\n continue;\n }\n if (inDoubleQuote) {\n if (ch === '\"') inDoubleQuote = false;\n continue;\n }\n if (ch === \"'\") {\n inSingleQuote = true;\n } else if (ch === '\"') {\n inDoubleQuote = true;\n } else if (ch === '{') {\n depth++;\n } else if (ch === '}') {\n depth--;\n if (depth === 0) return i;\n }\n }\n return str.length - 1;\n }\n\n private matchesPattern(\n pattern: AwkPattern,\n line: string,\n fields: string[],\n _nr: number,\n ): boolean {\n switch (pattern.type) {\n case 'all':\n return true;\n case 'regex':\n return pattern.regex.test(line);\n case 'comparison': {\n const fieldVal = this.getFieldValue(\n pattern.field,\n fields,\n line,\n );\n return this.compareValues(fieldVal, pattern.op, pattern.value);\n }\n default:\n return false;\n }\n }\n\n private getFieldValue(\n field: string,\n fields: string[],\n line: string,\n ): string {\n if (field === '0') return line;\n const idx = parseInt(field, 10);\n if (!isNaN(idx) && idx >= 1 && idx <= fields.length) {\n return fields[idx - 1];\n }\n return '';\n }\n\n private compareValues(a: string, op: string, b: string): boolean {\n const numA = Number(a);\n const numB = Number(b);\n const useNumeric = !isNaN(numA) && !isNaN(numB) && a !== '' && b !== '';\n\n switch (op) {\n case '==':\n return useNumeric ? numA === numB : a === b;\n case '!=':\n return useNumeric ? numA !== numB : a !== b;\n case '>':\n return useNumeric ? numA > numB : a > b;\n case '<':\n return useNumeric ? numA < numB : a < b;\n case '>=':\n return useNumeric ? numA >= numB : a >= b;\n case '<=':\n return useNumeric ? numA <= numB : a <= b;\n default:\n return false;\n }\n }\n\n private executeAction(\n action: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n output: string[],\n ): void {\n const statements = action.split(/\\s*;\\s*/);\n\n for (const stmt of statements) {\n const trimmed = stmt.trim();\n if (!trimmed) continue;\n\n if (trimmed.startsWith('print')) {\n this.executePrint(\n trimmed,\n fields,\n line,\n nr,\n nf,\n variables,\n output,\n );\n } else {\n // Assignment: variable op= expression or variable = expression\n this.executeAssignment(\n trimmed,\n fields,\n line,\n nr,\n nf,\n variables,\n );\n }\n }\n }\n\n private executePrint(\n stmt: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n output: string[],\n ): void {\n const argStr = stmt.slice(5).trim();\n\n if (!argStr) {\n output.push(line);\n return;\n }\n\n // Split by comma for OFS-separated output\n const commaParts = this.splitByComma(argStr);\n\n if (commaParts.length > 1) {\n // Comma-separated: each part printed with OFS (space)\n const values = commaParts.map((part) =>\n this.evaluateConcatExpr(\n part.trim(),\n fields,\n line,\n nr,\n nf,\n variables,\n ),\n );\n output.push(values.join(' '));\n } else {\n // Single expression (may contain concatenation)\n output.push(\n this.evaluateConcatExpr(\n argStr,\n fields,\n line,\n nr,\n nf,\n variables,\n ),\n );\n }\n }\n\n private splitByComma(expr: string): string[] {\n const parts: string[] = [];\n let current = '';\n let inQuote: string | null = null;\n\n for (let i = 0; i < expr.length; i++) {\n const ch = expr[i];\n if (inQuote) {\n current += ch;\n if (ch === inQuote) inQuote = null;\n } else if (ch === '\"' || ch === \"'\") {\n current += ch;\n inQuote = ch;\n } else if (ch === ',') {\n parts.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current) parts.push(current);\n return parts;\n }\n\n private evaluateConcatExpr(\n expr: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n ): string {\n // Tokenize the expression into parts, then concatenate\n const tokens = this.tokenizeExpr(expr);\n return tokens\n .map((t) => this.resolveToken(t, fields, line, nr, nf, variables))\n .join('');\n }\n\n private tokenizeExpr(expr: string): string[] {\n const tokens: string[] = [];\n let pos = 0;\n\n while (pos < expr.length) {\n // Skip spaces (they act as concatenation separator)\n while (pos < expr.length && expr[pos] === ' ') pos++;\n if (pos >= expr.length) break;\n\n // Quoted string\n if (expr[pos] === '\"') {\n const end = expr.indexOf('\"', pos + 1);\n if (end !== -1) {\n tokens.push(expr.slice(pos, end + 1));\n pos = end + 1;\n } else {\n tokens.push(expr.slice(pos));\n break;\n }\n }\n // Field reference $N\n else if (expr[pos] === '$') {\n const match = expr.slice(pos).match(/^\\$(\\w+)/);\n if (match) {\n tokens.push(match[0]);\n pos += match[0].length;\n } else {\n tokens.push('$');\n pos++;\n }\n }\n // Identifier or number\n else {\n const match = expr.slice(pos).match(/^[\\w.]+/);\n if (match) {\n tokens.push(match[0]);\n pos += match[0].length;\n } else {\n // Other character (operator, etc.)\n tokens.push(expr[pos]);\n pos++;\n }\n }\n }\n\n return tokens;\n }\n\n private resolveToken(\n token: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n ): string {\n // Quoted string\n if (token.startsWith('\"') && token.endsWith('\"')) {\n return token.slice(1, -1);\n }\n\n // Field reference\n if (token.startsWith('$')) {\n const fieldRef = token.slice(1);\n if (fieldRef === '0') return line;\n if (fieldRef === 'NF') {\n const idx = nf;\n return idx >= 1 && idx <= fields.length\n ? fields[idx - 1]\n : '';\n }\n const idx = parseInt(fieldRef, 10);\n if (!isNaN(idx)) {\n return idx >= 1 && idx <= fields.length\n ? fields[idx - 1]\n : '';\n }\n return '';\n }\n\n // Built-in variables\n if (token === 'NR') return String(nr);\n if (token === 'NF') return String(nf);\n\n // User variable\n if (/^[a-zA-Z_]\\w*$/.test(token) && token in variables) {\n return String(variables[token]);\n }\n\n // Literal (number or unresolved)\n return token;\n }\n\n private executeAssignment(\n stmt: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n ): void {\n // Match: variable += expression\n const addAssign = stmt.match(/^([a-zA-Z_]\\w*)\\s*\\+=\\s*(.+)$/);\n if (addAssign) {\n const varName = addAssign[1];\n const exprVal = this.evaluateNumericExpr(\n addAssign[2].trim(),\n fields,\n line,\n nr,\n nf,\n variables,\n );\n if (!(varName in variables)) {\n variables[varName] = 0;\n }\n variables[varName] =\n (Number(variables[varName]) || 0) + exprVal;\n return;\n }\n\n // Match: variable -= expression\n const subAssign = stmt.match(/^([a-zA-Z_]\\w*)\\s*-=\\s*(.+)$/);\n if (subAssign) {\n const varName = subAssign[1];\n const exprVal = this.evaluateNumericExpr(\n subAssign[2].trim(),\n fields,\n line,\n nr,\n nf,\n variables,\n );\n if (!(varName in variables)) {\n variables[varName] = 0;\n }\n variables[varName] =\n (Number(variables[varName]) || 0) - exprVal;\n return;\n }\n\n // Match: variable = expression\n const assign = stmt.match(/^([a-zA-Z_]\\w*)\\s*=\\s*(.+)$/);\n if (assign) {\n const varName = assign[1];\n const exprStr = assign[2].trim();\n // Try numeric first\n const numVal = this.evaluateNumericExpr(\n exprStr,\n fields,\n line,\n nr,\n nf,\n variables,\n );\n variables[varName] = numVal;\n return;\n }\n\n // Variable increment: variable++\n const increment = stmt.match(/^([a-zA-Z_]\\w*)\\+\\+$/);\n if (increment) {\n const varName = increment[1];\n if (!(varName in variables)) variables[varName] = 0;\n variables[varName] = (Number(variables[varName]) || 0) + 1;\n return;\n }\n }\n\n private evaluateNumericExpr(\n expr: string,\n fields: string[],\n line: string,\n nr: number,\n nf: number,\n variables: Record<string, string | number>,\n ): number {\n const resolved = this.resolveToken(\n expr.trim(),\n fields,\n line,\n nr,\n nf,\n variables,\n );\n return Number(resolved) || 0;\n }\n\n private escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n}\n","import {\n CliProcessCommand,\n CliForegroundColor,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliDiffCommandProcessor implements ICliCommandProcessor {\n command = 'diff';\n description = 'Compare files line by line';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '📝', module: 'file management' };\n\n parameters = [\n {\n name: 'unified',\n aliases: ['u'],\n description: 'Output in unified format',\n required: false,\n type: 'boolean' as const,\n },\n {\n name: 'ignore-case',\n aliases: ['i'],\n description: 'Ignore case differences',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const unified = command.args['unified'] || command.args['u'] || false;\n const ignoreCase =\n command.args['ignore-case'] || command.args['i'] || false;\n const paths = this.parsePaths(command);\n\n if (paths.length < 2) {\n context.writer.writeError('diff: missing operand');\n return;\n }\n\n const file1 = paths[0];\n const file2 = paths[1];\n\n if (!fs.exists(file1)) {\n context.writer.writeError(\n `diff: ${file1}: No such file or directory`,\n );\n return;\n }\n if (!fs.exists(file2)) {\n context.writer.writeError(\n `diff: ${file2}: No such file or directory`,\n );\n return;\n }\n\n const content1 = fs.readFile(file1) || '';\n const content2 = fs.readFile(file2) || '';\n\n const lines1 = content1.split('\\n');\n const lines2 = content2.split('\\n');\n\n const lcs = this.computeLCS(lines1, lines2, ignoreCase);\n\n if (unified) {\n this.outputUnified(file1, file2, lines1, lines2, lcs, ignoreCase, context);\n } else {\n this.outputNormal(lines1, lines2, lcs, ignoreCase, context);\n }\n }\n\n private linesEqual(\n a: string,\n b: string,\n ignoreCase: boolean,\n ): boolean {\n if (ignoreCase) {\n return a.toLowerCase() === b.toLowerCase();\n }\n return a === b;\n }\n\n private computeLCS(\n lines1: string[],\n lines2: string[],\n ignoreCase: boolean,\n ): string[] {\n const m = lines1.length;\n const n = lines2.length;\n const dp: number[][] = Array.from({ length: m + 1 }, () =>\n new Array(n + 1).fill(0),\n );\n\n for (let i = 1; i <= m; i++) {\n for (let j = 1; j <= n; j++) {\n if (this.linesEqual(lines1[i - 1], lines2[j - 1], ignoreCase)) {\n dp[i][j] = dp[i - 1][j - 1] + 1;\n } else {\n dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);\n }\n }\n }\n\n // Backtrack to find LCS\n const result: string[] = [];\n let i = m;\n let j = n;\n while (i > 0 && j > 0) {\n if (this.linesEqual(lines1[i - 1], lines2[j - 1], ignoreCase)) {\n result.unshift(lines1[i - 1]);\n i--;\n j--;\n } else if (dp[i - 1][j] >= dp[i][j - 1]) {\n i--;\n } else {\n j--;\n }\n }\n\n return result;\n }\n\n private outputNormal(\n lines1: string[],\n lines2: string[],\n lcs: string[],\n ignoreCase: boolean,\n context: ICliExecutionContext,\n ): void {\n let i1 = 0;\n let i2 = 0;\n let il = 0;\n\n while (i1 < lines1.length || i2 < lines2.length) {\n if (\n il < lcs.length &&\n i1 < lines1.length &&\n this.linesEqual(lines1[i1], lcs[il], ignoreCase)\n ) {\n if (i2 < lines2.length && this.linesEqual(lines2[i2], lcs[il], ignoreCase)) {\n i1++;\n i2++;\n il++;\n } else {\n const line = context.writer.wrapInColor(\n `> ${lines2[i2]}`,\n CliForegroundColor.Green,\n );\n context.writer.writeln(line);\n i2++;\n }\n } else if (i1 < lines1.length && (il >= lcs.length || !this.linesEqual(lines1[i1], lcs[il], ignoreCase))) {\n const line = context.writer.wrapInColor(\n `< ${lines1[i1]}`,\n CliForegroundColor.Red,\n );\n context.writer.writeln(line);\n i1++;\n } else if (i2 < lines2.length) {\n const line = context.writer.wrapInColor(\n `> ${lines2[i2]}`,\n CliForegroundColor.Green,\n );\n context.writer.writeln(line);\n i2++;\n } else {\n break;\n }\n }\n }\n\n private outputUnified(\n file1: string,\n file2: string,\n lines1: string[],\n lines2: string[],\n lcs: string[],\n ignoreCase: boolean,\n context: ICliExecutionContext,\n ): void {\n // Build diff entries\n const entries: Array<{ type: 'same' | 'remove' | 'add'; line: string }> = [];\n\n let i1 = 0;\n let i2 = 0;\n let il = 0;\n\n while (i1 < lines1.length || i2 < lines2.length) {\n if (\n il < lcs.length &&\n i1 < lines1.length &&\n this.linesEqual(lines1[i1], lcs[il], ignoreCase)\n ) {\n if (i2 < lines2.length && this.linesEqual(lines2[i2], lcs[il], ignoreCase)) {\n entries.push({ type: 'same', line: lines1[i1] });\n i1++;\n i2++;\n il++;\n } else {\n entries.push({ type: 'add', line: lines2[i2] });\n i2++;\n }\n } else if (i1 < lines1.length && (il >= lcs.length || !this.linesEqual(lines1[i1], lcs[il], ignoreCase))) {\n entries.push({ type: 'remove', line: lines1[i1] });\n i1++;\n } else if (i2 < lines2.length) {\n entries.push({ type: 'add', line: lines2[i2] });\n i2++;\n } else {\n break;\n }\n }\n\n // Check if there are any changes\n const hasChanges = entries.some((e) => e.type !== 'same');\n if (!hasChanges) return;\n\n // Output header\n context.writer.writeln(`--- ${file1}`);\n context.writer.writeln(`+++ ${file2}`);\n\n // Output hunk header\n context.writer.writeln(\n `@@ -1,${lines1.length} +1,${lines2.length} @@`,\n );\n\n // Output entries\n for (const entry of entries) {\n if (entry.type === 'same') {\n context.writer.writeln(` ${entry.line}`);\n } else if (entry.type === 'remove') {\n const line = context.writer.wrapInColor(\n `-${entry.line}`,\n CliForegroundColor.Red,\n );\n context.writer.writeln(line);\n } else {\n const line = context.writer.wrapInColor(\n `+${entry.line}`,\n CliForegroundColor.Green,\n );\n context.writer.writeln(line);\n }\n }\n }\n\n private parsePaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliTeeCommandProcessor implements ICliCommandProcessor {\n command = 'tee';\n description = 'Read from a file and write to output files and stdout';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '🔀', module: 'file management' };\n\n parameters = [\n {\n name: 'append',\n aliases: ['a'],\n description: 'Append to the given files, do not overwrite',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const append = command.args['append'] || command.args['a'] || false;\n const parsed = this.parseArgs(command);\n\n let content: string;\n\n if (command.data != null) {\n // Piped mode: all positional args are output files\n content =\n typeof command.data === 'string'\n ? command.data\n : JSON.stringify(command.data);\n const outputFiles = this.getAllPaths(command);\n\n // Write to stdout\n context.writer.writeln(content);\n\n // Write to each output file\n for (const outFile of outputFiles) {\n if (append && fs.exists(outFile)) {\n fs.writeFile(outFile, content, true);\n } else {\n fs.writeFile(outFile, content);\n }\n }\n await fs.persist();\n } else {\n // File mode: last arg is input, rest are output\n if (parsed.outputFiles.length === 0 && !parsed.inputFile) {\n context.writer.writeError('tee: missing operand');\n return;\n }\n\n if (!parsed.inputFile) {\n context.writer.writeError('tee: missing input file');\n return;\n }\n\n if (parsed.outputFiles.length === 0) {\n context.writer.writeError('tee: missing output file');\n return;\n }\n\n if (!fs.exists(parsed.inputFile)) {\n context.writer.writeError(\n `tee: ${parsed.inputFile}: No such file or directory`,\n );\n return;\n }\n\n content = fs.readFile(parsed.inputFile) || '';\n\n // Write to stdout\n context.writer.writeln(content);\n\n // Write to each output file\n for (const outFile of parsed.outputFiles) {\n if (append && fs.exists(outFile)) {\n fs.writeFile(outFile, content, true);\n } else {\n fs.writeFile(outFile, content);\n }\n }\n\n await fs.persist();\n }\n }\n\n private getAllPaths(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n\n private parseArgs(command: CliProcessCommand): {\n outputFiles: string[];\n inputFile: string | null;\n } {\n const raw = command.value || '';\n const paths = raw.split(/\\s+/).filter(Boolean);\n\n // Last path is input file, rest are output files\n if (paths.length < 2) {\n return {\n outputFiles: [],\n inputFile: paths[0] || null,\n };\n }\n\n const inputFile = paths[paths.length - 1];\n const outputFiles = paths.slice(0, paths.length - 1);\n return { outputFiles, inputFile };\n }\n}\n","import {\n CliProcessCommand,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\nexport class CliXargsCommandProcessor implements ICliCommandProcessor {\n command = 'xargs';\n description = 'Build and execute commands from file input';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n valueRequired = true;\n metadata = { icon: '⚡', module: 'file management' };\n\n parameters = [\n {\n name: 'replace',\n aliases: ['I'],\n description: 'Replace string in command template (e.g., -I {})',\n required: false,\n type: 'string' as const,\n },\n {\n name: 'max-args',\n aliases: ['n'],\n description: 'Maximum number of arguments per command',\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 fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n const replaceStr =\n command.args['replace'] || command.args['I'] || null;\n const maxArgs = parseInt(\n command.args['max-args'] || command.args['n'] || '0',\n 10,\n );\n const parsed = this.parseArgs(command);\n\n let commandTemplate: string;\n let argContent: string;\n\n if (command.data != null) {\n // Piped mode: all non-flag tokens form the command template\n commandTemplate = this.getAllNonFlagTokens(command).join(' ');\n if (!commandTemplate) {\n context.writer.writeError('xargs: missing command');\n return;\n }\n argContent =\n typeof command.data === 'string'\n ? command.data\n : JSON.stringify(command.data);\n } else {\n if (!parsed.commandTemplate) {\n context.writer.writeError('xargs: missing command');\n return;\n }\n commandTemplate = parsed.commandTemplate;\n\n if (!parsed.inputFile) {\n context.writer.writeError('xargs: missing input file');\n return;\n }\n if (!fs.exists(parsed.inputFile)) {\n context.writer.writeError(\n `xargs: ${parsed.inputFile}: No such file or directory`,\n );\n return;\n }\n argContent = fs.readFile(parsed.inputFile) || '';\n }\n\n const args = argContent\n .split('\\n')\n .map((l) => l.trim())\n .filter(Boolean);\n\n if (args.length === 0) return;\n\n const commands: string[] = [];\n\n if (replaceStr) {\n // Replace mode: one command per arg\n for (const arg of args) {\n const cmd = commandTemplate.replace(\n new RegExp(this.escapeRegex(replaceStr), 'g'),\n arg,\n );\n commands.push(cmd);\n }\n } else if (maxArgs > 0) {\n // Group mode\n for (let i = 0; i < args.length; i += maxArgs) {\n const group = args.slice(i, i + maxArgs);\n commands.push(\n `${commandTemplate} ${group.join(' ')}`,\n );\n }\n } else {\n // All args at once\n commands.push(\n `${commandTemplate} ${args.join(' ')}`,\n );\n }\n\n // Try to execute via executor, or just output the commands\n const executor = context.executor;\n for (const cmd of commands) {\n if (executor && typeof executor.executeCommand === 'function') {\n try {\n await executor.executeCommand(cmd, context);\n } catch {\n context.writer.writeln(cmd);\n }\n } else {\n context.writer.writeln(cmd);\n }\n }\n }\n\n private getAllNonFlagTokens(command: CliProcessCommand): string[] {\n const raw = command.value || '';\n return raw.split(/\\s+/).filter(Boolean);\n }\n\n private escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n private parseArgs(command: CliProcessCommand): {\n commandTemplate: string | null;\n inputFile: string | null;\n } {\n const raw = command.value || '';\n const nonFlagTokens = raw.split(/\\s+/).filter(Boolean);\n\n // Last token is input file, rest form the command template\n if (nonFlagTokens.length < 2) {\n return {\n commandTemplate: nonFlagTokens[0] || null,\n inputFile: null,\n };\n }\n\n const inputFile = nonFlagTokens[nonFlagTokens.length - 1];\n const commandTemplate = nonFlagTokens\n .slice(0, nonFlagTokens.length - 1)\n .join(' ');\n return { commandTemplate, inputFile };\n }\n}\n","import {\n CliProcessCommand,\n CliForegroundColor,\n DefaultLibraryAuthor,\n ICliCommandProcessor,\n ICliExecutionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService, IFileSystemService_TOKEN } from '../interfaces';\nimport { LIBRARY_VERSION } from '../version';\n\n/**\n * Execute a script file containing CLI commands.\n *\n * Supported syntax inside scripts:\n * - One command per line (pipes, operators, redirects all work)\n * - `# comment` lines and blank lines are ignored\n * - `set -e` (default) — stop on first error\n * - `set +e` — continue on errors\n * - `VAR=value` — variable assignment (script-scoped)\n * - `$VAR` / `${VAR}` — variable substitution\n */\nexport class CliShCommandProcessor implements ICliCommandProcessor {\n command = 'sh';\n aliases = ['source', '.'];\n description = 'Execute a script file';\n author = DefaultLibraryAuthor;\n version = LIBRARY_VERSION;\n acceptsRawInput = true;\n metadata = { icon: '📜', module: 'file management' };\n\n parameters = [\n {\n name: 'e',\n aliases: ['stop-on-error'],\n description: 'Stop execution on first error (default)',\n required: false,\n type: 'boolean' as const,\n },\n ];\n\n async processCommand(\n command: CliProcessCommand,\n context: ICliExecutionContext,\n ): Promise<void> {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n\n let filePath = (command.value || '').trim();\n\n // When invoked via alias (source, .), getRightOfWord fails to extract\n // the value because it looks for 'sh' in the command string. Fall back\n // to parsing the raw command.\n if (!filePath && command.rawCommand) {\n const raw = command.rawCommand.trim();\n const firstSpace = raw.indexOf(' ');\n if (firstSpace > -1) {\n filePath = raw.slice(firstSpace + 1).trim();\n }\n }\n\n if (!filePath) {\n context.writer.writeError('sh: missing file operand');\n context.process.exit(1, { silent: true });\n return;\n }\n\n const resolved = fs.resolvePath(filePath);\n const node = fs.getNode(resolved);\n\n if (!node) {\n context.writer.writeError(\n `sh: ${filePath}: No such file or directory`,\n );\n context.process.exit(1, { silent: true });\n return;\n }\n\n if (node.type !== 'file') {\n context.writer.writeError(\n `sh: ${filePath}: Is a directory`,\n );\n context.process.exit(1, { silent: true });\n return;\n }\n\n const content = fs.readFile(resolved);\n if (content === null || content === undefined) {\n context.writer.writeError(\n `sh: ${filePath}: Cannot read file`,\n );\n context.process.exit(1, { silent: true });\n return;\n }\n\n await executeScript(content, context);\n }\n\n writeDescription(context: ICliExecutionContext): void {\n const { writer } = context;\n writer.writeln(this.description);\n writer.writeln();\n writer.writeln('Usage:');\n writer.writeln(\n ` ${writer.wrapInColor('sh <script.sh>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('source <script.sh>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('. <script.sh>', CliForegroundColor.Cyan)}`,\n );\n writer.writeln(\n ` ${writer.wrapInColor('./script.sh', CliForegroundColor.Cyan)} (requires execute permission)`,\n );\n writer.writeln();\n writer.writeln('Script syntax:');\n writer.writeln(' # Lines starting with # are comments');\n writer.writeln(' VAR=value # Variable assignment');\n writer.writeln(' echo $VAR # Variable substitution');\n writer.writeln(' set -e # Stop on error (default)');\n writer.writeln(' set +e # Continue on errors');\n writer.writeln();\n writer.writeln('Example script:');\n writer.writeln(\n writer.wrapInColor(\n ' #!/bin/sh\\n' +\n ' # Setup script\\n' +\n ' NAME=world\\n' +\n ' echo Hello $NAME\\n' +\n ' mkdir -p /tmp/test\\n' +\n ' echo done > /tmp/test/status.txt',\n CliForegroundColor.Green,\n ),\n );\n }\n}\n\n/**\n * Parse and execute script content line by line.\n *\n * Exported so the executor can reuse it for `./script.sh` execution.\n */\nexport async function executeScript(\n content: string,\n context: ICliExecutionContext,\n): Promise<void> {\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 // Skip empty lines and comments\n if (!line || line.startsWith('#')) {\n continue;\n }\n\n // Handle set -e / set +e\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: VAR=value (no spaces around =)\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 // Strip surrounding quotes\n if (\n (varValue.startsWith('\"') && varValue.endsWith('\"')) ||\n (varValue.startsWith(\"'\") && varValue.endsWith(\"'\"))\n ) {\n varValue = varValue.slice(1, -1);\n }\n // Substitute variables in the value itself\n varValue = substituteVariables(varValue, variables);\n variables[varName] = varValue;\n continue;\n }\n\n // Substitute variables in the command line\n const expanded = substituteVariables(line, variables);\n\n // Execute the command\n await context.executor.executeCommand(expanded, context);\n\n const exitCode = context.process.exitCode;\n if (stopOnError && exitCode !== undefined && exitCode !== 0) {\n context.writer.writeError(\n `sh: script aborted at line: ${line}`,\n );\n return;\n }\n }\n}\n\n/**\n * Replace `$VAR` and `${VAR}` with values from the variables map.\n * Undefined variables expand to empty string.\n */\nfunction substituteVariables(\n input: string,\n variables: Record<string, string>,\n): string {\n // ${VAR} form\n let result = input.replace(\n /\\$\\{([A-Za-z_][A-Za-z0-9_]*)\\}/g,\n (_, name) => variables[name] ?? '',\n );\n // $VAR form (must not be followed by { which was already handled)\n result = result.replace(\n /\\$([A-Za-z_][A-Za-z0-9_]*)/g,\n (_, name) => variables[name] ?? '',\n );\n return result;\n}\n","import { ICliOwnership } from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService } from '../interfaces/i-file-system-service';\n\nconst DB_NAME = 'qodalis-cli-filesystem';\nconst STORE_NAME = 'filesystem';\nconst ROOT_KEY = 'root';\nconst CWD_KEY = 'cwd';\nconst HOME_KEY = 'home';\nconst DEFAULT_HOME = '/';\n\nfunction createSeedFileSystem(): IFileNode {\n const now = Date.now();\n return {\n name: '',\n type: 'directory',\n children: [\n {\n name: 'home',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n },\n {\n name: 'tmp',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxrwxrwx',\n },\n {\n name: 'etc',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n },\n ],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n };\n}\n\nexport class IndexedDbFileSystemService implements IFileSystemService {\n private root: IFileNode = createSeedFileSystem();\n private cwd: string = DEFAULT_HOME;\n private homePath: string = DEFAULT_HOME;\n private currentUid: string | null = null;\n private currentGroups: string[] = [];\n\n // --- User context ---\n\n setCurrentUser(uid: string, groups: string[]): void {\n this.currentUid = uid;\n this.currentGroups = groups;\n }\n\n private getDefaultOwnership(): ICliOwnership | undefined {\n if (!this.currentUid) return undefined;\n return {\n uid: this.currentUid,\n gid: this.currentGroups[0] || 'users',\n };\n }\n\n // --- Navigation ---\n\n getCurrentDirectory(): string {\n return this.cwd;\n }\n\n setCurrentDirectory(path: string): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`cd: ${path}: No such file or directory`);\n }\n if (node.type !== 'directory') {\n throw new Error(`cd: ${path}: Not a directory`);\n }\n this.cwd = resolved;\n }\n\n getHomePath(): string {\n return this.homePath;\n }\n\n setHomePath(path: string): void {\n this.homePath = path;\n }\n\n resolvePath(path: string): string {\n if (path === '~' || path === '') {\n return this.homePath;\n }\n if (path.startsWith('~/')) {\n path = this.homePath + path.substring(1);\n }\n\n const parts = path.startsWith('/')\n ? path.split('/')\n : (this.cwd + '/' + path).split('/');\n\n const resolved: string[] = [];\n for (const part of parts) {\n if (part === '' || part === '.') {\n continue;\n } else if (part === '..') {\n resolved.pop();\n } else {\n resolved.push(part);\n }\n }\n\n return '/' + resolved.join('/');\n }\n\n // --- Read operations ---\n\n getNode(path: string): IFileNode | null {\n const resolved = path === '/' ? '/' : this.resolvePath(path);\n if (resolved === '/') {\n return this.root;\n }\n\n const parts = resolved.split('/').filter(Boolean);\n let current = this.root;\n\n for (const part of parts) {\n if (current.type !== 'directory' || !current.children) {\n return null;\n }\n const child = current.children.find((c) => c.name === part);\n if (!child) {\n return null;\n }\n current = child;\n }\n\n return current;\n }\n\n listDirectory(path: string): IFileNode[] {\n const node = this.getNode(path);\n if (!node) {\n throw new Error(`ls: ${path}: No such file or directory`);\n }\n if (node.type !== 'directory') {\n throw new Error(`ls: ${path}: Not a directory`);\n }\n return node.children || [];\n }\n\n readFile(path: string): string | null {\n const node = this.getNode(path);\n if (!node) {\n throw new Error(`cat: ${path}: No such file or directory`);\n }\n if (node.type === 'directory') {\n throw new Error(`cat: ${path}: Is a directory`);\n }\n return node.content ?? '';\n }\n\n exists(path: string): boolean {\n return this.getNode(path) !== null;\n }\n\n isDirectory(path: string): boolean {\n const node = this.getNode(path);\n return node !== null && node.type === 'directory';\n }\n\n // --- Write operations ---\n\n createDirectory(path: string, recursive = false): void {\n const resolved = this.resolvePath(path);\n const parts = resolved.split('/').filter(Boolean);\n\n if (parts.length === 0) {\n throw new Error(`mkdir: cannot create directory '/': File exists`);\n }\n\n if (recursive) {\n let current = this.root;\n for (const part of parts) {\n if (!current.children) {\n current.children = [];\n }\n let child = current.children.find((c) => c.name === part);\n if (!child) {\n const now = Date.now();\n child = {\n name: part,\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n ownership: this.getDefaultOwnership(),\n };\n current.children.push(child);\n current.modifiedAt = now;\n } else if (child.type !== 'directory') {\n throw new Error(`mkdir: ${part}: Not a directory`);\n }\n current = child;\n }\n } else {\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const dirName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent) {\n throw new Error(\n `mkdir: ${parentPath}: No such file or directory`,\n );\n }\n if (parent.type !== 'directory') {\n throw new Error(`mkdir: ${parentPath}: Not a directory`);\n }\n if (parent.children?.find((c) => c.name === dirName)) {\n throw new Error(`mkdir: ${path}: File exists`);\n }\n\n const now = Date.now();\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push({\n name: dirName,\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n ownership: this.getDefaultOwnership(),\n });\n parent.modifiedAt = now;\n }\n }\n\n createFile(path: string, content = ''): void {\n const resolved = this.resolvePath(path);\n const parts = resolved.split('/').filter(Boolean);\n\n if (parts.length === 0) {\n throw new Error(`touch: cannot create file at root`);\n }\n\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const fileName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent) {\n throw new Error(`touch: ${parentPath}: No such file or directory`);\n }\n if (parent.type !== 'directory') {\n throw new Error(`touch: ${parentPath}: Not a directory`);\n }\n\n const existing = parent.children?.find((c) => c.name === fileName);\n const now = Date.now();\n\n if (existing) {\n existing.modifiedAt = now;\n } else {\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push({\n name: fileName,\n type: 'file',\n content,\n createdAt: now,\n modifiedAt: now,\n size: new Blob([content]).size,\n permissions: 'rw-r--r--',\n ownership: this.getDefaultOwnership(),\n });\n parent.modifiedAt = now;\n }\n }\n\n writeFile(path: string, content: string, append = false): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n\n if (node) {\n if (node.type === 'directory') {\n throw new Error(`write: ${path}: Is a directory`);\n }\n const now = Date.now();\n node.content = append ? (node.content ?? '') + content : content;\n node.size = new Blob([node.content]).size;\n node.modifiedAt = now;\n } else {\n this.createFile(resolved, content);\n }\n }\n\n remove(path: string, recursive = false): void {\n const resolved = this.resolvePath(path);\n if (resolved === '/') {\n throw new Error(`rm: cannot remove root directory`);\n }\n\n const parts = resolved.split('/').filter(Boolean);\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const name = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent || !parent.children) {\n throw new Error(`rm: ${path}: No such file or directory`);\n }\n\n const index = parent.children.findIndex((c) => c.name === name);\n if (index === -1) {\n throw new Error(`rm: ${path}: No such file or directory`);\n }\n\n const target = parent.children[index];\n if (target.type === 'directory' && !recursive) {\n throw new Error(`rm: ${path}: Is a directory`);\n }\n\n parent.children.splice(index, 1);\n parent.modifiedAt = Date.now();\n }\n\n copy(src: string, dest: string, recursive = false): void {\n const srcResolved = this.resolvePath(src);\n const srcNode = this.getNode(srcResolved);\n\n if (!srcNode) {\n throw new Error(`cp: ${src}: No such file or directory`);\n }\n if (srcNode.type === 'directory' && !recursive) {\n throw new Error(\n `cp: -r not specified; omitting directory '${src}'`,\n );\n }\n\n const destResolved = this.resolvePath(dest);\n const destNode = this.getNode(destResolved);\n\n if (destNode && destNode.type === 'directory') {\n const clone = this.cloneNode(srcNode);\n if (!destNode.children) {\n destNode.children = [];\n }\n const existingIdx = destNode.children.findIndex(\n (c) => c.name === clone.name,\n );\n if (existingIdx !== -1) {\n destNode.children.splice(existingIdx, 1);\n }\n destNode.children.push(clone);\n destNode.modifiedAt = Date.now();\n } else {\n const parts = destResolved.split('/').filter(Boolean);\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const newName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent || parent.type !== 'directory') {\n throw new Error(`cp: ${parentPath}: No such file or directory`);\n }\n\n const clone = this.cloneNode(srcNode);\n clone.name = newName;\n if (!parent.children) {\n parent.children = [];\n }\n const existingIdx = parent.children.findIndex(\n (c) => c.name === newName,\n );\n if (existingIdx !== -1) {\n parent.children.splice(existingIdx, 1);\n }\n parent.children.push(clone);\n parent.modifiedAt = Date.now();\n }\n }\n\n move(src: string, dest: string): void {\n const srcResolved = this.resolvePath(src);\n if (srcResolved === '/') {\n throw new Error(`mv: cannot move root directory`);\n }\n\n const srcNode = this.getNode(srcResolved);\n if (!srcNode) {\n throw new Error(`mv: ${src}: No such file or directory`);\n }\n\n const destResolved = this.resolvePath(dest);\n const destNode = this.getNode(destResolved);\n\n const srcParts = srcResolved.split('/').filter(Boolean);\n const srcParentPath = '/' + srcParts.slice(0, -1).join('/');\n const srcParent = this.getNode(srcParentPath);\n\n if (!srcParent || !srcParent.children) {\n throw new Error(`mv: ${src}: No such file or directory`);\n }\n\n const srcIndex = srcParent.children.findIndex(\n (c) => c.name === srcNode.name,\n );\n\n if (destNode && destNode.type === 'directory') {\n if (!destNode.children) {\n destNode.children = [];\n }\n const existingIdx = destNode.children.findIndex(\n (c) => c.name === srcNode.name,\n );\n if (existingIdx !== -1) {\n destNode.children.splice(existingIdx, 1);\n }\n srcParent.children.splice(srcIndex, 1);\n destNode.children.push(srcNode);\n destNode.modifiedAt = Date.now();\n } else {\n const destParts = destResolved.split('/').filter(Boolean);\n const destParentPath = '/' + destParts.slice(0, -1).join('/');\n const newName = destParts[destParts.length - 1];\n const destParent = this.getNode(destParentPath);\n\n if (!destParent || destParent.type !== 'directory') {\n throw new Error(\n `mv: ${destParentPath}: No such file or directory`,\n );\n }\n\n srcParent.children.splice(srcIndex, 1);\n srcNode.name = newName;\n if (!destParent.children) {\n destParent.children = [];\n }\n const existingIdx = destParent.children.findIndex(\n (c) => c.name === newName,\n );\n if (existingIdx !== -1) {\n destParent.children.splice(existingIdx, 1);\n }\n destParent.children.push(srcNode);\n destParent.modifiedAt = Date.now();\n }\n\n srcParent.modifiedAt = Date.now();\n }\n\n // --- Permissions ---\n\n chmod(path: string, permissions: string): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`chmod: ${path}: No such file or directory`);\n }\n node.permissions = permissions;\n }\n\n chown(path: string, ownership: ICliOwnership): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`chown: ${path}: No such file or directory`);\n }\n node.ownership = ownership;\n }\n\n // --- Persistence ---\n\n async initialize(): Promise<void> {\n const db = await this.openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readonly');\n const store = tx.objectStore(STORE_NAME);\n\n const rootData = await this.idbGet<IFileNode>(store, ROOT_KEY);\n const cwdData = await this.idbGet<string>(store, CWD_KEY);\n const homeData = await this.idbGet<string>(store, HOME_KEY);\n\n if (rootData) {\n this.root = rootData;\n }\n if (cwdData) {\n this.cwd = cwdData;\n }\n if (homeData) {\n this.homePath = homeData;\n }\n } finally {\n db.close();\n }\n }\n\n async persist(): Promise<void> {\n const db = await this.openDb();\n try {\n const tx = db.transaction(STORE_NAME, 'readwrite');\n const store = tx.objectStore(STORE_NAME);\n\n store.put(this.root, ROOT_KEY);\n store.put(this.cwd, CWD_KEY);\n store.put(this.homePath, HOME_KEY);\n\n await new Promise<void>((resolve, reject) => {\n tx.oncomplete = () => resolve();\n tx.onerror = () => reject(tx.error);\n });\n } finally {\n db.close();\n }\n }\n\n // --- Private helpers ---\n\n private cloneNode(node: IFileNode): IFileNode {\n const now = Date.now();\n const clone: IFileNode = {\n name: node.name,\n type: node.type,\n createdAt: now,\n modifiedAt: now,\n size: node.size,\n permissions: node.permissions,\n ownership: node.ownership ? { ...node.ownership } : undefined,\n };\n\n if (node.type === 'file') {\n clone.content = node.content;\n } else {\n clone.children = (node.children || []).map((c) =>\n this.cloneNode(c),\n );\n }\n\n return clone;\n }\n\n private openDb(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME);\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n }\n\n private idbGet<T>(store: IDBObjectStore, key: string): Promise<T | null> {\n return new Promise((resolve, reject) => {\n const request = store.get(key);\n request.onsuccess = () => resolve(request.result ?? null);\n request.onerror = () => reject(request.error);\n });\n }\n}\n","import { ICliOwnership } from '@qodalis/cli-core';\nimport { IFileNode } from '../interfaces/i-file-node';\nimport { IFileSystemService } from '../interfaces/i-file-system-service';\n\nconst DEFAULT_HOME = '/home/user';\n\n/**\n * Configuration options for the ServerFileSystemService.\n */\nexport interface ServerFileSystemOptions {\n /** Base URL of the CLI server, e.g. 'http://localhost:8047' */\n baseUrl: string;\n}\n\n/**\n * Response shape from GET /api/qcli/fs/ls\n */\ninterface LsResponse {\n entries: Array<{\n name: string;\n type: 'file' | 'directory';\n size: number;\n modified: string;\n permissions?: string;\n }>;\n}\n\n/**\n * Response shape from GET /api/qcli/fs/cat\n */\ninterface CatResponse {\n content: string;\n}\n\n/**\n * Response shape from GET /api/qcli/fs/stat\n */\ninterface StatResponse {\n name: string;\n type: 'file' | 'directory';\n size: number;\n created: string;\n modified: string;\n permissions?: string;\n}\n\n/**\n * Creates a minimal root seed filesystem for initial local state.\n */\nfunction createSeedFileSystem(): IFileNode {\n const now = Date.now();\n return {\n name: '',\n type: 'directory',\n children: [\n {\n name: 'home',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n },\n {\n name: 'tmp',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxrwxrwx',\n },\n {\n name: 'etc',\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n },\n ],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n };\n}\n\n/**\n * IFileSystemService implementation that delegates operations to a CLI server's\n * `/api/qcli/fs/*` REST endpoints.\n *\n * Because the IFileSystemService interface is synchronous, this service maintains\n * an in-memory file tree that is returned immediately by read operations. Write\n * operations update the local tree first (for instant feedback) and then fire\n * asynchronous requests to the server for persistence. The `initialize()` method\n * fetches the initial directory listing from the server.\n */\nexport class ServerFileSystemService implements IFileSystemService {\n private root: IFileNode = createSeedFileSystem();\n private cwd: string = DEFAULT_HOME;\n private homePath: string = DEFAULT_HOME;\n private currentUid: string | null = null;\n private currentGroups: string[] = [];\n private readonly baseUrl: string;\n\n constructor(options: ServerFileSystemOptions) {\n // Strip trailing slash for consistent URL building\n this.baseUrl = options.baseUrl.replace(/\\/+$/, '');\n }\n\n // --- User context ---\n\n setCurrentUser(uid: string, groups: string[]): void {\n this.currentUid = uid;\n this.currentGroups = groups;\n }\n\n private getDefaultOwnership(): ICliOwnership | undefined {\n if (!this.currentUid) return undefined;\n return {\n uid: this.currentUid,\n gid: this.currentGroups[0] || 'users',\n };\n }\n\n // --- Navigation ---\n\n getCurrentDirectory(): string {\n return this.cwd;\n }\n\n setCurrentDirectory(path: string): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`cd: ${path}: No such file or directory`);\n }\n if (node.type !== 'directory') {\n throw new Error(`cd: ${path}: Not a directory`);\n }\n this.cwd = resolved;\n }\n\n getHomePath(): string {\n return this.homePath;\n }\n\n setHomePath(path: string): void {\n this.homePath = path;\n }\n\n resolvePath(path: string): string {\n if (path === '~' || path === '') {\n return this.homePath;\n }\n if (path.startsWith('~/')) {\n path = this.homePath + path.substring(1);\n }\n\n const parts = path.startsWith('/')\n ? path.split('/')\n : (this.cwd + '/' + path).split('/');\n\n const resolved: string[] = [];\n for (const part of parts) {\n if (part === '' || part === '.') {\n continue;\n } else if (part === '..') {\n resolved.pop();\n } else {\n resolved.push(part);\n }\n }\n\n return '/' + resolved.join('/');\n }\n\n // --- Read operations (synchronous, from local cache) ---\n\n getNode(path: string): IFileNode | null {\n const resolved = path === '/' ? '/' : this.resolvePath(path);\n if (resolved === '/') {\n return this.root;\n }\n\n const parts = resolved.split('/').filter(Boolean);\n let current = this.root;\n\n for (const part of parts) {\n if (current.type !== 'directory' || !current.children) {\n return null;\n }\n const child = current.children.find((c) => c.name === part);\n if (!child) {\n return null;\n }\n current = child;\n }\n\n return current;\n }\n\n listDirectory(path: string): IFileNode[] {\n const node = this.getNode(path);\n if (!node) {\n throw new Error(`ls: ${path}: No such file or directory`);\n }\n if (node.type !== 'directory') {\n throw new Error(`ls: ${path}: Not a directory`);\n }\n return node.children || [];\n }\n\n readFile(path: string): string | null {\n const node = this.getNode(path);\n if (!node) {\n throw new Error(`cat: ${path}: No such file or directory`);\n }\n if (node.type === 'directory') {\n throw new Error(`cat: ${path}: Is a directory`);\n }\n return node.content ?? '';\n }\n\n exists(path: string): boolean {\n return this.getNode(path) !== null;\n }\n\n isDirectory(path: string): boolean {\n const node = this.getNode(path);\n return node !== null && node.type === 'directory';\n }\n\n // --- Write operations (update local cache + fire-and-forget server call) ---\n\n createDirectory(path: string, recursive = false): void {\n const resolved = this.resolvePath(path);\n const parts = resolved.split('/').filter(Boolean);\n\n if (parts.length === 0) {\n throw new Error(`mkdir: cannot create directory '/': File exists`);\n }\n\n if (recursive) {\n let current = this.root;\n for (const part of parts) {\n if (!current.children) {\n current.children = [];\n }\n let child = current.children.find((c) => c.name === part);\n if (!child) {\n const now = Date.now();\n child = {\n name: part,\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n ownership: this.getDefaultOwnership(),\n };\n current.children.push(child);\n current.modifiedAt = now;\n } else if (child.type !== 'directory') {\n throw new Error(`mkdir: ${part}: Not a directory`);\n }\n current = child;\n }\n } else {\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const dirName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent) {\n throw new Error(\n `mkdir: ${parentPath}: No such file or directory`,\n );\n }\n if (parent.type !== 'directory') {\n throw new Error(`mkdir: ${parentPath}: Not a directory`);\n }\n if (parent.children?.find((c) => c.name === dirName)) {\n throw new Error(`mkdir: ${path}: File exists`);\n }\n\n const now = Date.now();\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push({\n name: dirName,\n type: 'directory',\n children: [],\n createdAt: now,\n modifiedAt: now,\n size: 0,\n permissions: 'rwxr-xr-x',\n ownership: this.getDefaultOwnership(),\n });\n parent.modifiedAt = now;\n }\n\n // Fire-and-forget server call\n this.serverMkdir(resolved).catch((err) =>\n console.error('[ServerFS] mkdir failed:', err),\n );\n }\n\n createFile(path: string, content = ''): void {\n const resolved = this.resolvePath(path);\n const parts = resolved.split('/').filter(Boolean);\n\n if (parts.length === 0) {\n throw new Error(`touch: cannot create file at root`);\n }\n\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const fileName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent) {\n throw new Error(`touch: ${parentPath}: No such file or directory`);\n }\n if (parent.type !== 'directory') {\n throw new Error(`touch: ${parentPath}: Not a directory`);\n }\n\n const existing = parent.children?.find((c) => c.name === fileName);\n const now = Date.now();\n\n if (existing) {\n existing.modifiedAt = now;\n } else {\n if (!parent.children) {\n parent.children = [];\n }\n parent.children.push({\n name: fileName,\n type: 'file',\n content,\n createdAt: now,\n modifiedAt: now,\n size: new Blob([content]).size,\n permissions: 'rw-r--r--',\n ownership: this.getDefaultOwnership(),\n });\n parent.modifiedAt = now;\n }\n\n // Fire-and-forget server upload\n this.serverUpload(resolved, content).catch((err) =>\n console.error('[ServerFS] createFile upload failed:', err),\n );\n }\n\n writeFile(path: string, content: string, append = false): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n\n if (node) {\n if (node.type === 'directory') {\n throw new Error(`write: ${path}: Is a directory`);\n }\n const now = Date.now();\n node.content = append ? (node.content ?? '') + content : content;\n node.size = new Blob([node.content]).size;\n node.modifiedAt = now;\n } else {\n this.createFile(resolved, content);\n return; // createFile already handles server upload\n }\n\n // Fire-and-forget server upload with full content\n this.serverUpload(resolved, node.content!).catch((err) =>\n console.error('[ServerFS] writeFile upload failed:', err),\n );\n }\n\n remove(path: string, recursive = false): void {\n const resolved = this.resolvePath(path);\n if (resolved === '/') {\n throw new Error(`rm: cannot remove root directory`);\n }\n\n const parts = resolved.split('/').filter(Boolean);\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const name = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent || !parent.children) {\n throw new Error(`rm: ${path}: No such file or directory`);\n }\n\n const index = parent.children.findIndex((c) => c.name === name);\n if (index === -1) {\n throw new Error(`rm: ${path}: No such file or directory`);\n }\n\n const target = parent.children[index];\n if (target.type === 'directory' && !recursive) {\n throw new Error(`rm: ${path}: Is a directory`);\n }\n\n parent.children.splice(index, 1);\n parent.modifiedAt = Date.now();\n\n // Fire-and-forget server call\n this.serverRm(resolved).catch((err) =>\n console.error('[ServerFS] rm failed:', err),\n );\n }\n\n copy(src: string, dest: string, recursive = false): void {\n const srcResolved = this.resolvePath(src);\n const srcNode = this.getNode(srcResolved);\n\n if (!srcNode) {\n throw new Error(`cp: ${src}: No such file or directory`);\n }\n if (srcNode.type === 'directory' && !recursive) {\n throw new Error(\n `cp: -r not specified; omitting directory '${src}'`,\n );\n }\n\n const destResolved = this.resolvePath(dest);\n const destNode = this.getNode(destResolved);\n\n if (destNode && destNode.type === 'directory') {\n const clone = this.cloneNode(srcNode);\n if (!destNode.children) {\n destNode.children = [];\n }\n const existingIdx = destNode.children.findIndex(\n (c) => c.name === clone.name,\n );\n if (existingIdx !== -1) {\n destNode.children.splice(existingIdx, 1);\n }\n destNode.children.push(clone);\n destNode.modifiedAt = Date.now();\n } else {\n const parts = destResolved.split('/').filter(Boolean);\n const parentPath = '/' + parts.slice(0, -1).join('/');\n const newName = parts[parts.length - 1];\n const parent = this.getNode(parentPath);\n\n if (!parent || parent.type !== 'directory') {\n throw new Error(`cp: ${parentPath}: No such file or directory`);\n }\n\n const clone = this.cloneNode(srcNode);\n clone.name = newName;\n if (!parent.children) {\n parent.children = [];\n }\n const existingIdx = parent.children.findIndex(\n (c) => c.name === newName,\n );\n if (existingIdx !== -1) {\n parent.children.splice(existingIdx, 1);\n }\n parent.children.push(clone);\n parent.modifiedAt = Date.now();\n }\n\n // Sync copied files to server (upload all file nodes in the clone)\n this.syncTreeToServer(destResolved).catch((err) =>\n console.error('[ServerFS] copy sync failed:', err),\n );\n }\n\n move(src: string, dest: string): void {\n const srcResolved = this.resolvePath(src);\n if (srcResolved === '/') {\n throw new Error(`mv: cannot move root directory`);\n }\n\n const srcNode = this.getNode(srcResolved);\n if (!srcNode) {\n throw new Error(`mv: ${src}: No such file or directory`);\n }\n\n const destResolved = this.resolvePath(dest);\n const destNode = this.getNode(destResolved);\n\n const srcParts = srcResolved.split('/').filter(Boolean);\n const srcParentPath = '/' + srcParts.slice(0, -1).join('/');\n const srcParent = this.getNode(srcParentPath);\n\n if (!srcParent || !srcParent.children) {\n throw new Error(`mv: ${src}: No such file or directory`);\n }\n\n const srcIndex = srcParent.children.findIndex(\n (c) => c.name === srcNode.name,\n );\n\n if (destNode && destNode.type === 'directory') {\n if (!destNode.children) {\n destNode.children = [];\n }\n const existingIdx = destNode.children.findIndex(\n (c) => c.name === srcNode.name,\n );\n if (existingIdx !== -1) {\n destNode.children.splice(existingIdx, 1);\n }\n srcParent.children.splice(srcIndex, 1);\n destNode.children.push(srcNode);\n destNode.modifiedAt = Date.now();\n } else {\n const destParts = destResolved.split('/').filter(Boolean);\n const destParentPath = '/' + destParts.slice(0, -1).join('/');\n const newName = destParts[destParts.length - 1];\n const destParent = this.getNode(destParentPath);\n\n if (!destParent || destParent.type !== 'directory') {\n throw new Error(\n `mv: ${destParentPath}: No such file or directory`,\n );\n }\n\n srcParent.children.splice(srcIndex, 1);\n srcNode.name = newName;\n if (!destParent.children) {\n destParent.children = [];\n }\n const existingIdx = destParent.children.findIndex(\n (c) => c.name === newName,\n );\n if (existingIdx !== -1) {\n destParent.children.splice(existingIdx, 1);\n }\n destParent.children.push(srcNode);\n destParent.modifiedAt = Date.now();\n }\n\n srcParent.modifiedAt = Date.now();\n\n // Server-side: remove old, upload to new location\n this.serverRm(srcResolved)\n .then(() => this.syncTreeToServer(destResolved))\n .catch((err) =>\n console.error('[ServerFS] move sync failed:', err),\n );\n }\n\n // --- Permissions (local-only, server has no endpoints) ---\n\n chmod(path: string, permissions: string): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`chmod: ${path}: No such file or directory`);\n }\n node.permissions = permissions;\n }\n\n chown(path: string, ownership: ICliOwnership): void {\n const resolved = this.resolvePath(path);\n const node = this.getNode(resolved);\n if (!node) {\n throw new Error(`chown: ${path}: No such file or directory`);\n }\n node.ownership = ownership;\n }\n\n // --- Persistence ---\n\n /**\n * Fetches the root directory listing from the server and populates the\n * local in-memory file tree. Recursively loads subdirectories.\n */\n async initialize(): Promise<void> {\n try {\n await this.loadDirectoryFromServer('/', this.root);\n } catch (err) {\n console.error(\n '[ServerFS] Failed to initialize from server, using seed filesystem:',\n err,\n );\n }\n }\n\n /**\n * No-op for server-backed storage — the server persists automatically.\n */\n async persist(): Promise<void> {\n // Server handles persistence; nothing to do locally.\n }\n\n // --- Private: server communication ---\n\n private async serverFetch<T>(\n endpoint: string,\n options?: RequestInit,\n ): Promise<T> {\n const url = `${this.baseUrl}/api/qcli/fs${endpoint}`;\n const response = await fetch(url, options);\n if (!response.ok) {\n const body = await response.text();\n throw new Error(\n `Server responded with ${response.status}: ${body}`,\n );\n }\n return response.json();\n }\n\n private async serverLs(path: string): Promise<LsResponse> {\n return this.serverFetch<LsResponse>(\n `/ls?path=${encodeURIComponent(path)}`,\n );\n }\n\n private async serverCat(path: string): Promise<CatResponse> {\n return this.serverFetch<CatResponse>(\n `/cat?path=${encodeURIComponent(path)}`,\n );\n }\n\n private async serverStat(path: string): Promise<StatResponse> {\n return this.serverFetch<StatResponse>(\n `/stat?path=${encodeURIComponent(path)}`,\n );\n }\n\n private async serverMkdir(path: string): Promise<void> {\n await this.serverFetch<{ path: string }>('/mkdir', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ path }),\n });\n }\n\n private async serverUpload(path: string, content: string): Promise<void> {\n const formData = new FormData();\n formData.append('path', path);\n formData.append(\n 'file',\n new Blob([content], { type: 'application/octet-stream' }),\n path.split('/').pop() || 'file',\n );\n await this.serverFetch<{ path: string; size: number }>('/upload', {\n method: 'POST',\n body: formData,\n });\n }\n\n private async serverRm(path: string): Promise<void> {\n await this.serverFetch<{ deleted: string }>(\n `/rm?path=${encodeURIComponent(path)}`,\n { method: 'DELETE' },\n );\n }\n\n /**\n * Recursively loads directory contents from the server into a local node.\n */\n private async loadDirectoryFromServer(\n path: string,\n node: IFileNode,\n ): Promise<void> {\n const response = await this.serverLs(path);\n const now = Date.now();\n\n node.children = [];\n\n for (const entry of response.entries) {\n const childPath =\n path === '/' ? `/${entry.name}` : `${path}/${entry.name}`;\n\n if (entry.type === 'directory') {\n const dirNode: IFileNode = {\n name: entry.name,\n type: 'directory',\n children: [],\n createdAt: new Date(entry.modified).getTime() || now,\n modifiedAt: new Date(entry.modified).getTime() || now,\n size: entry.size,\n permissions: entry.permissions || 'rwxr-xr-x',\n };\n node.children.push(dirNode);\n\n // Recursively load subdirectory contents\n try {\n await this.loadDirectoryFromServer(childPath, dirNode);\n } catch {\n // If a subdirectory fails to load, keep it empty\n }\n } else {\n // For files, fetch content eagerly so readFile() works synchronously\n let content = '';\n try {\n const catResponse = await this.serverCat(childPath);\n content = catResponse.content;\n } catch {\n // If content fetch fails, store empty string\n }\n\n node.children.push({\n name: entry.name,\n type: 'file',\n content,\n createdAt: new Date(entry.modified).getTime() || now,\n modifiedAt: new Date(entry.modified).getTime() || now,\n size: entry.size,\n permissions: entry.permissions || 'rw-r--r--',\n });\n }\n }\n }\n\n /**\n * Uploads all file nodes under the given path to the server.\n * Used after copy/move to sync the local tree to the server.\n */\n private async syncTreeToServer(path: string): Promise<void> {\n const node = this.getNode(path);\n if (!node) return;\n\n if (node.type === 'file') {\n await this.serverUpload(path, node.content ?? '');\n } else if (node.type === 'directory') {\n await this.serverMkdir(path);\n if (node.children) {\n for (const child of node.children) {\n const childPath = path === '/'\n ? `/${child.name}`\n : `${path}/${child.name}`;\n await this.syncTreeToServer(childPath);\n }\n }\n }\n }\n\n // --- Private: tree helpers ---\n\n private cloneNode(node: IFileNode): IFileNode {\n const now = Date.now();\n const clone: IFileNode = {\n name: node.name,\n type: node.type,\n createdAt: now,\n modifiedAt: now,\n size: node.size,\n permissions: node.permissions,\n ownership: node.ownership ? { ...node.ownership } : undefined,\n };\n\n if (node.type === 'file') {\n clone.content = node.content;\n } else {\n clone.children = (node.children || []).map((c) =>\n this.cloneNode(c),\n );\n }\n\n return clone;\n }\n}\n","import {\n ICliFileTransferService,\n ICliFileEntry,\n BrowserFileTransferService,\n} from '@qodalis/cli-core';\nimport { IFileSystemService } from '../interfaces';\n\nexport class VirtualFsFileTransferService implements ICliFileTransferService {\n private readonly _browserService = new BrowserFileTransferService();\n\n constructor(private readonly _fs: IFileSystemService) {}\n\n async readFile(path: string): Promise<string | null> {\n const resolved = this._fs.resolvePath(path);\n return this._fs.readFile(resolved);\n }\n\n async writeFile(path: string, content: string): Promise<void> {\n const resolved = this._fs.resolvePath(path);\n this._fs.writeFile(resolved, content);\n await this._fs.persist();\n }\n\n async listFiles(path: string): Promise<ICliFileEntry[]> {\n const resolved = this._fs.resolvePath(path);\n const nodes = this._fs.listDirectory(resolved);\n return nodes.map((node) => ({\n name: node.name,\n type: node.type === 'directory' ? ('directory' as const) : ('file' as const),\n size: node.size || 0,\n modified: node.modifiedAt\n ? new Date(node.modifiedAt).toISOString()\n : new Date().toISOString(),\n }));\n }\n\n async exists(path: string): Promise<boolean> {\n const resolved = this._fs.resolvePath(path);\n return this._fs.exists(resolved);\n }\n\n downloadToBrowser(filename: string, content: string | Blob): void {\n this._browserService.downloadToBrowser(filename, content);\n }\n\n async uploadFromBrowser(accept?: string): Promise<{ name: string; content: string } | null> {\n return this._browserService.uploadFromBrowser(accept);\n }\n}\n","import {\n ICliCompletionProvider,\n ICliCompletionContext,\n} from '@qodalis/cli-core';\nimport { IFileSystemService } from '../interfaces/i-file-system-service';\n\n/** Commands that accept file/directory path arguments. */\nconst FILE_COMMANDS = new Set([\n 'ls',\n 'cd',\n 'cat',\n 'cp',\n 'mv',\n 'rm',\n 'touch',\n 'mkdir',\n 'rmdir',\n 'tree',\n 'echo',\n 'nano',\n 'edit',\n 'grep',\n 'find',\n 'head',\n 'tail',\n 'wc',\n]);\n\n/**\n * Provides tab-completion for file and directory names from the virtual filesystem.\n * Priority 50 (checked before command/parameter providers for file-related commands).\n */\nexport class FilePathCompletionProvider implements ICliCompletionProvider {\n priority = 50;\n\n constructor(private readonly fs: IFileSystemService) {}\n\n getCompletions(context: ICliCompletionContext): string[] {\n const { tokens, tokenIndex, token } = context;\n\n // Only activate when the command is a file command and we're completing an argument\n if (tokenIndex === 0) {\n return []; // Let command completion handle the first token\n }\n\n const command = tokens[0];\n if (!FILE_COMMANDS.has(command)) {\n return [];\n }\n\n // Skip flag tokens\n if (token.startsWith('-')) {\n return [];\n }\n\n return this.completePath(token);\n }\n\n private completePath(partial: string): string[] {\n // Split into directory part and name prefix\n let dirPath: string;\n let namePrefix: string;\n\n if (partial.includes('/')) {\n const lastSlash = partial.lastIndexOf('/');\n dirPath = partial.slice(0, lastSlash) || '/';\n namePrefix = partial.slice(lastSlash + 1);\n } else {\n dirPath = this.fs.getCurrentDirectory();\n namePrefix = partial;\n }\n\n // Resolve the directory\n let resolvedDir: string;\n try {\n resolvedDir = this.fs.resolvePath(dirPath);\n } catch {\n return [];\n }\n\n if (!this.fs.exists(resolvedDir) || !this.fs.isDirectory(resolvedDir)) {\n return [];\n }\n\n // List entries and filter by prefix\n const entries = this.fs.listDirectory(resolvedDir);\n const lowerPrefix = namePrefix.toLowerCase();\n\n const results: string[] = [];\n for (const entry of entries) {\n if (entry.name.toLowerCase().startsWith(lowerPrefix)) {\n // Build the completion string preserving the directory prefix\n let completion: string;\n if (partial.includes('/')) {\n const lastSlash = partial.lastIndexOf('/');\n completion = partial.slice(0, lastSlash + 1) + entry.name;\n } else {\n completion = entry.name;\n }\n\n // Append / for directories\n if (entry.type === 'directory') {\n completion += '/';\n }\n\n results.push(completion);\n }\n }\n\n return results.sort();\n }\n}\n","/*\n * Public API Surface of files\n */\n\nexport * from './lib/index';\n\nimport { ICliModule, ICliCompletionProvider_TOKEN, ICliFileTransferService_TOKEN, ICliDragDropService, ICliDragDropService_TOKEN, ICliExecutionContext } from '@qodalis/cli-core';\nimport { Subscription } from 'rxjs';\nimport { API_VERSION } from './lib/version';\nimport { IFileSystemService_TOKEN } from './lib/interfaces';\nimport { IndexedDbFileSystemService, VirtualFsFileTransferService } from './lib/services';\nimport { IFileSystemService } from './lib/interfaces';\nimport { FilePathCompletionProvider } from './lib/completion/file-path-completion-provider';\nimport { CliLsCommandProcessor } from './lib/processors/cli-ls-command-processor';\nimport { CliCdCommandProcessor } from './lib/processors/cli-cd-command-processor';\nimport { CliPwdCommandProcessor } from './lib/processors/cli-pwd-command-processor';\nimport { CliMkdirCommandProcessor } from './lib/processors/cli-mkdir-command-processor';\nimport { CliRmdirCommandProcessor } from './lib/processors/cli-rmdir-command-processor';\nimport { CliTouchCommandProcessor } from './lib/processors/cli-touch-command-processor';\nimport { CliCatCommandProcessor } from './lib/processors/cli-cat-command-processor';\nimport { CliEchoCommandProcessor } from './lib/processors/cli-echo-command-processor';\nimport { CliRmCommandProcessor } from './lib/processors/cli-rm-command-processor';\nimport { CliCpCommandProcessor } from './lib/processors/cli-cp-command-processor';\nimport { CliMvCommandProcessor } from './lib/processors/cli-mv-command-processor';\nimport { CliTreeCommandProcessor } from './lib/processors/cli-tree-command-processor';\nimport { CliHeadCommandProcessor } from './lib/processors/cli-head-command-processor';\nimport { CliTailCommandProcessor } from './lib/processors/cli-tail-command-processor';\nimport { CliWcCommandProcessor } from './lib/processors/cli-wc-command-processor';\nimport { CliFindCommandProcessor } from './lib/processors/cli-find-command-processor';\nimport { CliGrepCommandProcessor } from './lib/processors/cli-grep-command-processor';\nimport { CliTacCommandProcessor } from './lib/processors/cli-tac-command-processor';\nimport { CliBasenameCommandProcessor } from './lib/processors/cli-basename-command-processor';\nimport { CliDirnameCommandProcessor } from './lib/processors/cli-dirname-command-processor';\nimport { CliSortCommandProcessor } from './lib/processors/cli-sort-command-processor';\nimport { CliUniqCommandProcessor } from './lib/processors/cli-uniq-command-processor';\nimport { CliCutCommandProcessor } from './lib/processors/cli-cut-command-processor';\nimport { CliPasteCommandProcessor } from './lib/processors/cli-paste-command-processor';\nimport { CliTrCommandProcessor } from './lib/processors/cli-tr-command-processor';\nimport { CliStatCommandProcessor } from './lib/processors/cli-stat-command-processor';\nimport { CliChmodCommandProcessor } from './lib/processors/cli-chmod-command-processor';\nimport { CliChownCommandProcessor } from './lib/processors/cli-chown-command-processor';\nimport { CliDuCommandProcessor } from './lib/processors/cli-du-command-processor';\nimport { CliLnCommandProcessor } from './lib/processors/cli-ln-command-processor';\nimport { CliSedCommandProcessor } from './lib/processors/cli-sed-command-processor';\nimport { CliAwkCommandProcessor } from './lib/processors/cli-awk-command-processor';\nimport { CliDiffCommandProcessor } from './lib/processors/cli-diff-command-processor';\nimport { CliTeeCommandProcessor } from './lib/processors/cli-tee-command-processor';\nimport { CliXargsCommandProcessor } from './lib/processors/cli-xargs-command-processor';\nimport { CliShCommandProcessor } from './lib/processors/cli-sh-command-processor';\n\n/**\n * Configuration options for the files module.\n */\nexport interface CliFilesModuleConfig {\n /**\n * Whether to show the current working directory in the CLI prompt.\n * @default true\n */\n showPathInPrompt?: boolean;\n}\n\ninterface ICliFilesModule extends ICliModule {\n configure(config: CliFilesModuleConfig): ICliModule;\n}\n\nconst fsService = new IndexedDbFileSystemService();\n\nexport const filesModule: ICliFilesModule = {\n apiVersion: API_VERSION,\n name: '@qodalis/cli-files',\n processors: [\n new CliLsCommandProcessor(),\n new CliCdCommandProcessor(),\n new CliPwdCommandProcessor(),\n new CliMkdirCommandProcessor(),\n new CliRmdirCommandProcessor(),\n new CliTouchCommandProcessor(),\n new CliCatCommandProcessor(),\n new CliEchoCommandProcessor(),\n new CliRmCommandProcessor(),\n new CliCpCommandProcessor(),\n new CliMvCommandProcessor(),\n new CliTreeCommandProcessor(),\n new CliHeadCommandProcessor(),\n new CliTailCommandProcessor(),\n new CliWcCommandProcessor(),\n new CliFindCommandProcessor(),\n new CliGrepCommandProcessor(),\n new CliTacCommandProcessor(),\n new CliBasenameCommandProcessor(),\n new CliDirnameCommandProcessor(),\n new CliSortCommandProcessor(),\n new CliUniqCommandProcessor(),\n new CliCutCommandProcessor(),\n new CliPasteCommandProcessor(),\n new CliTrCommandProcessor(),\n new CliStatCommandProcessor(),\n new CliChmodCommandProcessor(),\n new CliChownCommandProcessor(),\n new CliDuCommandProcessor(),\n new CliLnCommandProcessor(),\n new CliSedCommandProcessor(),\n new CliAwkCommandProcessor(),\n new CliDiffCommandProcessor(),\n new CliTeeCommandProcessor(),\n new CliXargsCommandProcessor(),\n new CliShCommandProcessor(),\n ],\n services: [\n {\n provide: IFileSystemService_TOKEN,\n useValue: fsService,\n },\n {\n provide: ICliCompletionProvider_TOKEN,\n useValue: new FilePathCompletionProvider(fsService),\n multi: true,\n },\n {\n provide: ICliFileTransferService_TOKEN,\n useValue: new VirtualFsFileTransferService(fsService),\n },\n ],\n\n translations: {\n es: { 'cli.files.description': 'Sistema de archivos virtual en el navegador' },\n fr: { 'cli.files.description': 'Système de fichiers virtuel dans le navigateur' },\n de: { 'cli.files.description': 'Virtuelles Dateisystem im Browser' },\n pt: { 'cli.files.description': 'Sistema de arquivos virtual no navegador' },\n it: { 'cli.files.description': 'File system virtuale nel browser' },\n ja: { 'cli.files.description': 'ブラウザ内仮想ファイルシステム' },\n ko: { 'cli.files.description': '브라우저 내 가상 파일 시스템' },\n zh: { 'cli.files.description': '浏览器内虚拟文件系统' },\n ru: { 'cli.files.description': 'Виртуальная файловая система в браузере' },\n ro: { 'cli.files.description': 'Sistem de fișiere virtual în browser' },\n },\n\n configure(config: CliFilesModuleConfig): ICliModule {\n return { ...this, config };\n },\n\n async onInit(context) {\n const fs = context.services.get<IFileSystemService>(\n IFileSystemService_TOKEN,\n );\n await fs.initialize();\n\n const moduleConfig = (this.config || {}) as CliFilesModuleConfig;\n const showPath = moduleConfig.showPathInPrompt !== false;\n\n if (showPath) {\n context.promptPathProvider = () => fs.getCurrentDirectory();\n }\n\n let dragDrop: ICliDragDropService | undefined;\n try {\n dragDrop = context.services.get<ICliDragDropService>(ICliDragDropService_TOKEN);\n } catch {\n // service not registered (e.g. test environment) — skip\n }\n\n if (dragDrop) {\n (this as any)._dragDropSubscription = dragDrop.onFileDrop.subscribe((files) => {\n files.forEach((file) => {\n const reader = new FileReader();\n reader.onload = async () => {\n const content = reader.result as string;\n const dest = fs.resolvePath(\n fs.getCurrentDirectory() + '/' + file.name,\n );\n await fs.writeFile(dest, content);\n await fs.persist();\n context.writer.writeSuccess(\n `Uploaded: ${file.name} (${file.size} bytes) → ${dest}`,\n );\n };\n reader.onerror = () => {\n context.writer.writeError(`Failed to read dropped file: ${file.name}`);\n };\n if (file.type && !file.type.startsWith('text/') && file.type !== 'application/json') {\n context.writer.writeWarning(`${file.name}: may be a binary file — uploading as text (content may be corrupted)`);\n }\n reader.readAsText(file);\n });\n });\n }\n },\n\n async onDestroy(_context: ICliExecutionContext): Promise<void> {\n const sub: Subscription | undefined = (this as any)._dragDropSubscription;\n sub?.unsubscribe();\n (this as any)._dragDropSubscription = undefined;\n },\n};\n"]}
|