@computesdk/cmd 0.3.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1046,10 +1046,15 @@ __export(compute_exports, {
1046
1046
  stop: () => stop,
1047
1047
  version: () => version
1048
1048
  });
1049
+ var isTTYEnvironment = () => {
1050
+ if (typeof process === "undefined") return false;
1051
+ return Boolean(process.stdin?.isTTY || process.stdout?.isTTY);
1052
+ };
1049
1053
  var install = (options) => {
1050
1054
  const installUrl = options?.version ? `https://computesdk.com/install.sh?version=${options.version}` : "https://computesdk.com/install.sh";
1051
1055
  const curlFlags = options?.silent ? "-fsSL" : "-fSL";
1052
- let installCmd = `curl ${curlFlags} ${installUrl} | bash`;
1056
+ const isInteractive = options?.interactive ?? isTTYEnvironment();
1057
+ let installCmd = isInteractive ? `curl ${curlFlags} ${installUrl} | bash -s` : `curl ${curlFlags} ${installUrl} | bash -s -- --non-interactive`;
1053
1058
  if (options?.apiKey) {
1054
1059
  installCmd = `COMPUTESDK_API_KEY="${options.apiKey}" ${installCmd}`;
1055
1060
  } else if (typeof process !== "undefined" && process.env?.COMPUTESDK_API_KEY) {
@@ -1078,6 +1083,12 @@ var start = (options) => {
1078
1083
  if (options?.logLevel === "debug") {
1079
1084
  args.push("--verbose");
1080
1085
  }
1086
+ if (options?.wait) {
1087
+ args.push("--wait");
1088
+ if (options.waitTimeout) {
1089
+ args.push("--wait-timeout", String(options.waitTimeout));
1090
+ }
1091
+ }
1081
1092
  return args;
1082
1093
  };
1083
1094
  var stop = () => {
@@ -1106,7 +1117,8 @@ var setup = (options) => {
1106
1117
  const accessToken = options?.accessToken;
1107
1118
  const installUrl = options?.version ? `https://computesdk.com/install.sh?version=${options.version}` : "https://computesdk.com/install.sh";
1108
1119
  const curlFlags = options?.silent ? "-fsSL" : "-fSL";
1109
- let installCmd = `curl ${curlFlags} ${installUrl} | bash`;
1120
+ const isInteractive = options?.interactive ?? isTTYEnvironment();
1121
+ let installCmd = isInteractive ? `curl ${curlFlags} ${installUrl} | bash -s` : `curl ${curlFlags} ${installUrl} | bash -s -- --non-interactive`;
1110
1122
  if (apiKey) {
1111
1123
  installCmd = `COMPUTESDK_API_KEY="${apiKey}" ${installCmd}`;
1112
1124
  }
@@ -1119,7 +1131,13 @@ var setup = (options) => {
1119
1131
  if (options?.port) {
1120
1132
  startCmd += ` --port ${options.port}`;
1121
1133
  }
1122
- const fullCmd = `${installCmd} && ${startCmd} > /dev/null 2>&1 &`;
1134
+ if (options?.wait) {
1135
+ startCmd += " --wait";
1136
+ if (options.waitTimeout) {
1137
+ startCmd += ` --wait-timeout ${options.waitTimeout}`;
1138
+ }
1139
+ }
1140
+ const fullCmd = options?.wait ? `${installCmd} && ${startCmd}` : `${installCmd} && ${startCmd} > /dev/null 2>&1 &`;
1123
1141
  return ["sh", "-c", fullCmd];
1124
1142
  };
1125
1143
  var compute = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/shell.ts","../src/commands/filesystem.ts","../src/commands/process.ts","../src/commands/packages.ts","../src/commands/git.ts","../src/commands/network.ts","../src/commands/text.ts","../src/commands/archive.ts","../src/commands/system.ts","../src/commands/compute.ts"],"sourcesContent":["/**\n * @computesdk/cmd - Type-safe shell command builders\n *\n * Build shell commands as tuples for use with sandbox.runCommand()\n *\n * @example\n * ```typescript\n * import { cmd, npm, node } from '@computesdk/cmd';\n *\n * await sandbox.runCommand(npm.install('express'));\n * await sandbox.runCommand(cmd.mkdir('/app/src'));\n * await sandbox.runCommand(node('server.js'), { background: true });\n * ```\n */\n\n// Re-export types\nexport type { Command, ShellOptions } from './types.js';\n\n// Re-export utilities\nexport { esc, shellEscape, escapeArgs, buildShellCommand } from './utils.js';\n\n// Re-export shell wrappers\nexport { shell, sh, bash, zsh } from './shell.js';\n\n// Import all commands for assembly\nimport * as filesystem from './commands/filesystem.js';\nimport * as process from './commands/process.js';\nimport * as packages from './commands/packages.js';\nimport * as gitCommands from './commands/git.js';\nimport * as network from './commands/network.js';\nimport * as text from './commands/text.js';\nimport * as archive from './commands/archive.js';\nimport * as system from './commands/system.js';\nimport * as computeCommands from './commands/compute.js';\n\nimport type { Command } from './types.js';\nimport { buildShellCommand } from './utils.js';\n\n/**\n * Command builders for common shell operations - callable with shell wrapper + command methods\n *\n * @example\n * // As shell wrapper (default: sh)\n * cmd(npm.install(), { cwd: '/app' })\n * // => ['sh', '-c', 'cd '/app' && npm install']\n *\n * @example\n * // As command builders\n * cmd.npm.install('express')\n * // => ['npm', 'install', 'express']\n */\nexport const cmd = Object.assign(\n // Callable: shell wrapper with sh default\n (command: Command, options?: { cwd?: string; background?: boolean }): Command => {\n return buildShellCommand('sh', command, options);\n },\n {\n // Filesystem\n ...filesystem,\n // Process\n ...process,\n // Package managers\n ...packages,\n // Git\n ...gitCommands,\n // Network\n ...network,\n // Text processing\n ...text,\n // Archives\n ...archive,\n // System\n ...system,\n // Compute\n ...computeCommands,\n }\n);\n\n// Export individual command builders for destructured imports\n// Filesystem\nexport const {\n mkdir, rm, cp, mv, ls, pwd, chmod, chown, touch, cat, ln, readlink, test, rsync,\n} = filesystem;\n\n// Process\nexport const { node, python, kill, pkill, ps, timeout } = process;\n\n// Package managers\nexport const { npm, pnpm, yarn, pip, bun, deno, npx, bunx, uv, poetry, pipx } = packages;\n\n// Git\nexport const { git } = gitCommands;\n\n// Network\nexport const { curl, wget, port, net } = network;\n\n// Text processing\nexport const { grep, sed, head, tail, wc, sort, uniq, jq, xargs, awk, cut, tr } = text;\n\n// Archives\nexport const { tar, unzip } = archive;\n\n// System\nexport const {\n echo, env, printenv, which, whoami, uname, hostname,\n df, du, sleep, date, find, tee, diff, parallel, raw,\n base64, md5sum, sha256sum, sha1sum,\n} = system;\n\n// Compute\nexport const { compute } = computeCommands;\n\n// Default export for convenience\nexport default cmd;\n","import type { Command, ShellOptions } from './types.js';\n\n/**\n * Escape a string for safe use in shell commands using single quotes.\n * This is the safest method as single quotes preserve all characters literally,\n * except for single quotes themselves which must be handled specially.\n *\n * @example shellEscape(\"hello world\") // \"'hello world'\"\n * @example shellEscape(\"it's here\") // \"'it'\\\\''s here'\"\n * @example shellEscape(\"$HOME\") // \"'$HOME'\" (no variable expansion)\n */\nexport function shellEscape(s: string): string {\n // Wrap in single quotes and escape any embedded single quotes\n // 'foo'bar' becomes 'foo'\\''bar' (end quote, escaped quote, start quote)\n return \"'\" + s.replace(/'/g, \"'\\\\''\") + \"'\";\n}\n\n/**\n * Escape a string for use inside double quotes.\n *\n * This is a legacy helper kept for backward compatibility; for new code,\n * prefer {@link shellEscape} which uses single-quoted, safer shell escaping.\n *\n * @example esc('path with \"quotes\"') // 'path with \\\\\"quotes\\\\\"'\n * @deprecated Use {@link shellEscape} for safer escaping. This function only escapes\n * double quotes and may not be safe for all shell contexts. Migration: replace\n * `esc(str)` with `shellEscape(str)`.\n */\nexport function esc(s: string): string {\n return s.replace(/\"/g, '\\\\\"');\n}\n\n/**\n * Escape each argument in a command array and join them with spaces.\n * Arguments that are safe (alphanumeric, dash, underscore, dot, slash, colon, equals)\n * are left unquoted for readability.\n *\n * @example escapeArgs(['npm', 'install', 'express']) // 'npm install express'\n * @example escapeArgs(['echo', 'hello world']) // \"echo 'hello world'\"\n * @example escapeArgs(['cp', 'file with spaces.txt', '/dest']) // \"cp 'file with spaces.txt' /dest\"\n */\nexport function escapeArgs(args: string[]): string {\n return args.map(arg => {\n // If arg contains only safe characters, no escaping needed\n if (/^[a-zA-Z0-9_./:=@-]+$/.test(arg) && arg.length > 0) {\n return arg;\n }\n // Otherwise, use shellEscape for safety\n return shellEscape(arg);\n }).join(' ');\n}\n\n/**\n * Internal helper to build shell command with proper escaping\n */\nexport function buildShellCommand(shellBin: string, command: Command, options?: ShellOptions): Command {\n if (!options?.cwd && !options?.background) {\n return command;\n }\n\n let cmdStr = escapeArgs(command);\n\n // Build command: first wrap with nohup if background, then prepend cd if cwd\n // Result: cd '/path' && nohup cmd > /dev/null 2>&1 &\n if (options.background) {\n cmdStr = `nohup ${cmdStr} > /dev/null 2>&1 &`;\n }\n\n if (options.cwd) {\n cmdStr = `cd ${shellEscape(options.cwd)} && ${cmdStr}`;\n }\n\n return [shellBin, '-c', cmdStr];\n}\n","import type { Command, ShellOptions } from './types.js';\nimport { buildShellCommand } from './utils.js';\n\n/**\n * Shell wrapper - callable function with shell-specific methods\n *\n * @example\n * // Default (sh)\n * shell(cmd.npm.install(), { cwd: '/app' })\n * // => ['sh', '-c', 'cd \"/app\" && npm install']\n *\n * @example\n * // Shell-specific\n * shell.bash(cmd.node('server.js'), { background: true })\n * // => ['bash', '-c', 'nohup node server.js > /dev/null 2>&1 &']\n *\n * @example\n * shell.zsh(cmd.npm.run('dev'), { cwd: '/app' })\n * // => ['zsh', '-c', 'cd \"/app\" && npm run dev']\n */\nexport const shell = Object.assign(\n // Default: use sh\n (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('sh', command, options);\n },\n {\n /** Wrap with sh (POSIX shell) */\n sh: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('sh', command, options);\n },\n /** Wrap with bash */\n bash: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('bash', command, options);\n },\n /** Wrap with zsh */\n zsh: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('zsh', command, options);\n },\n }\n);\n\n// Individual shell exports\nexport const sh = shell.sh;\nexport const bash = shell.bash;\nexport const zsh = shell.zsh;\n","import type { Command } from '../types.js';\n\n/**\n * Create directory\n *\n * By default, recursive is true (includes -p flag to create parent directories).\n * This differs from standard shell mkdir which requires explicit -p flag.\n *\n * @example mkdir('/app/src') // ['mkdir', '-p', '/app/src']\n * @example mkdir('/app/src', { recursive: false }) // ['mkdir', '/app/src']\n */\nexport const mkdir = (path: string, options?: { recursive?: boolean }): Command => {\n const recursive = options?.recursive ?? true;\n return recursive ? ['mkdir', '-p', path] : ['mkdir', path];\n};\n\n/**\n * Remove file or directory\n * @example rm('/app/file.txt') // ['rm', '/app/file.txt']\n * @example rm('/app/tmp', { recursive: true }) // ['rm', '-r', '/app/tmp']\n * @example rm('/app/tmp', { recursive: true, force: true }) // ['rm', '-rf', '/app/tmp']\n * @example rm.rf('/app/tmp') // ['rm', '-rf', '/app/tmp']\n * @example rm.auto('/app/anything') // Automatically detects file vs directory\n */\nexport const rm = Object.assign(\n (path: string, options?: { recursive?: boolean; force?: boolean }): Command => {\n const flags: string[] = [];\n if (options?.recursive) flags.push('r');\n if (options?.force) flags.push('f');\n return flags.length > 0 ? ['rm', `-${flags.join('')}`, path] : ['rm', path];\n },\n {\n /**\n * Force remove file or directory (always uses -rf)\n * @example rm.rf('/app/tmp')\n */\n rf: (path: string): Command => ['rm', '-rf', path],\n \n /**\n * Smart remove - automatically detects if path is a directory and uses appropriate flags\n * Uses a shell one-liner to check if directory and apply -r flag accordingly\n * @example rm.auto('/app/tmp')\n */\n auto: (path: string): Command => {\n // Shell one-liner: if it's a directory, use -rf, otherwise just rm -f\n return ['sh', '-c', `if [ -d \"${path}\" ]; then rm -rf \"${path}\"; else rm -f \"${path}\"; fi`];\n }\n }\n);\n\n/**\n * Copy file or directory\n * @example cp('/src/file.txt', '/dest/file.txt')\n */\nexport const cp = (src: string, dest: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['cp', '-r', src, dest] : ['cp', src, dest];\n};\n\n/**\n * Move/rename file or directory\n * @example mv('/old/path', '/new/path')\n */\nexport const mv = (src: string, dest: string): Command => ['mv', src, dest];\n\n/**\n * List directory contents\n * @example ls('/app') // ['ls', '/app']\n * @example ls('/app', { all: true, long: true }) // ['ls', '-la', '/app']\n */\nexport const ls = (path?: string, options?: { all?: boolean; long?: boolean }): Command => {\n const flags: string[] = [];\n if (options?.long) flags.push('l');\n if (options?.all) flags.push('a');\n const flagStr = flags.length > 0 ? `-${flags.join('')}` : '';\n if (flagStr && path) return ['ls', flagStr, path];\n if (flagStr) return ['ls', flagStr];\n if (path) return ['ls', path];\n return ['ls'];\n};\n\n/**\n * Print working directory\n * @example pwd() // ['pwd']\n */\nexport const pwd = (): Command => ['pwd'];\n\n/**\n * Change file permissions\n * @example chmod('755', '/app/script.sh')\n */\nexport const chmod = (mode: string, path: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['chmod', '-R', mode, path] : ['chmod', mode, path];\n};\n\n/**\n * Change file owner/group\n * @example chown('user', '/app/file.txt')\n * @example chown('user:group', '/app', { recursive: true })\n */\nexport const chown = (owner: string, path: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['chown', '-R', owner, path] : ['chown', owner, path];\n};\n\n/**\n * Create empty file or update timestamp\n * @example touch('/app/newfile.txt')\n */\nexport const touch = (path: string): Command => ['touch', path];\n\n/**\n * Read file contents\n * @example cat('/app/file.txt')\n */\nexport const cat = (path: string): Command => ['cat', path];\n\n/**\n * Create symbolic link\n * @example ln('/app/config', '/etc/app/config')\n * @example ln('/app/config', '/etc/app/config', { symbolic: true, force: true })\n */\nexport const ln = (target: string, link: string, options?: { symbolic?: boolean; force?: boolean }): Command => {\n const args = ['ln'];\n if (options?.symbolic !== false) args.push('-s'); // symbolic by default\n if (options?.force) args.push('-f');\n args.push(target, link);\n return args as Command;\n};\n\n/**\n * Resolve symbolic link\n * @example readlink('/usr/bin/python')\n * @example readlink('/usr/bin/python', { canonical: true })\n */\nexport const readlink = (path: string, options?: { canonical?: boolean }): Command => {\n return options?.canonical ? ['readlink', '-f', path] : ['readlink', path];\n};\n\n/**\n * Filesystem checks (exit 0 if true, 1 if false)\n * @example test.exists('/app/file.txt')\n * @example test.isDir('/app')\n */\nexport const test = {\n exists: (path: string): Command => ['test', '-e', path],\n isFile: (path: string): Command => ['test', '-f', path],\n isDir: (path: string): Command => ['test', '-d', path],\n isReadable: (path: string): Command => ['test', '-r', path],\n isWritable: (path: string): Command => ['test', '-w', path],\n isExecutable: (path: string): Command => ['test', '-x', path],\n notEmpty: (path: string): Command => ['test', '-s', path],\n isSymlink: (path: string): Command => ['test', '-L', path],\n};\n\n/**\n * Sync files/directories with rsync\n * @example rsync('/src/', '/dest/')\n * @example rsync('/src/', 'user@host:/dest/', { archive: true, compress: true })\n */\nexport const rsync = (src: string, dest: string, options?: {\n archive?: boolean;\n verbose?: boolean;\n compress?: boolean;\n delete?: boolean;\n dryRun?: boolean;\n exclude?: string[];\n}): Command => {\n const args = ['rsync'];\n if (options?.archive) args.push('-a');\n if (options?.verbose) args.push('-v');\n if (options?.compress) args.push('-z');\n if (options?.delete) args.push('--delete');\n if (options?.dryRun) args.push('--dry-run');\n if (options?.exclude) {\n for (const pattern of options.exclude) {\n args.push('--exclude', pattern);\n }\n }\n args.push(src, dest);\n return args as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * Run Node.js script\n * @example node('server.js')\n * @example node('server.js', ['--port', '3000'])\n */\nexport const node = (script: string, args?: string[]): Command => {\n return args ? ['node', script, ...args] : ['node', script];\n};\n\n/**\n * Run Python script\n * @example python('script.py')\n * @example python('script.py', ['--verbose'])\n */\nexport const python = (script: string, args?: string[]): Command => {\n return args ? ['python3', script, ...args] : ['python3', script];\n};\n\n/**\n * Kill process by PID\n * @example kill(1234)\n * @example kill(1234, 9) // SIGKILL\n */\nexport const kill = (pid: number, signal?: number): Command => {\n return signal ? ['kill', `-${signal}`, String(pid)] : ['kill', String(pid)];\n};\n\n/**\n * Kill processes by name\n * @example pkill('node')\n * @example pkill('python', { signal: 9 })\n */\nexport const pkill = (name: string, options?: { signal?: number }): Command => {\n return options?.signal\n ? ['pkill', `-${options.signal}`, name]\n : ['pkill', name];\n};\n\n/**\n * List processes\n * @example ps()\n * @example ps({ all: true })\n */\nexport const ps = (options?: { all?: boolean }): Command => {\n return options?.all ? ['ps', 'aux'] : ['ps'];\n};\n\n/**\n * Run command with timeout\n * @example timeout(30, 'npm', ['test'])\n * @example timeout(10, 'curl', ['https://example.com'])\n */\nexport const timeout = (seconds: number, command: string, args?: string[]): Command => {\n const base: string[] = ['timeout', String(seconds), command];\n return args ? [...base, ...args] as Command : base as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * npm package manager commands\n */\nexport const npm = {\n /**\n * Install packages\n * @example npm.install() // ['npm', 'install']\n * @example npm.install('express') // ['npm', 'install', 'express']\n * @example npm.install('express', { dev: true }) // ['npm', 'install', '-D', 'express']\n */\n install: (pkg?: string, options?: { dev?: boolean; global?: boolean }): Command => {\n const args = ['npm', 'install'];\n if (options?.dev) args.push('-D');\n if (options?.global) args.push('-g');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run npm script\n * @example npm.run('build')\n * @example npm.run('test', ['--coverage'])\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['npm', 'run', script, '--', ...args] : ['npm', 'run', script];\n },\n\n /**\n * Initialize new package\n * @example npm.init() // ['npm', 'init', '-y']\n */\n init: (): Command => ['npm', 'init', '-y'],\n\n /**\n * Uninstall package\n * @example npm.uninstall('lodash')\n */\n uninstall: (pkg: string): Command => ['npm', 'uninstall', pkg],\n};\n\n/**\n * pnpm package manager commands\n */\nexport const pnpm = {\n /**\n * Install packages with pnpm\n * @example pnpm.install()\n * @example pnpm.install('express')\n */\n install: (pkg?: string, options?: { dev?: boolean }): Command => {\n const args = ['pnpm', 'install'];\n if (options?.dev) args.push('-D');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run pnpm script\n * @example pnpm.run('build')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['pnpm', 'run', script, '--', ...args] : ['pnpm', 'run', script];\n },\n};\n\n/**\n * yarn package manager commands\n */\nexport const yarn = {\n /**\n * Install packages with yarn\n * @example yarn.install()\n */\n install: (): Command => ['yarn', 'install'],\n\n /**\n * Add package\n * @example yarn.add('express')\n * @example yarn.add('typescript', { dev: true })\n */\n add: (pkg: string, options?: { dev?: boolean }): Command => {\n return options?.dev ? ['yarn', 'add', '-D', pkg] : ['yarn', 'add', pkg];\n },\n\n /**\n * Run yarn script\n * @example yarn.run('build')\n */\n run: (script: string): Command => ['yarn', 'run', script],\n};\n\n/**\n * pip Python package manager commands\n */\nexport const pip = {\n /**\n * Install Python package\n * @example pip.install('requests')\n * @example pip.install('-r requirements.txt')\n */\n install: (pkg: string): Command => ['pip', 'install', pkg],\n\n /**\n * Uninstall Python package\n * @example pip.uninstall('requests')\n */\n uninstall: (pkg: string): Command => ['pip', 'uninstall', '-y', pkg],\n};\n\n/**\n * bun runtime commands\n */\nexport const bun = {\n /**\n * Install packages with bun\n * @example bun.install()\n * @example bun.install('express')\n */\n install: (pkg?: string, options?: { dev?: boolean }): Command => {\n const args = ['bun', 'install'];\n if (options?.dev) args.push('-D');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run bun script\n * @example bun.run('build')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['bun', 'run', script, ...args] : ['bun', 'run', script];\n },\n\n /**\n * Run file with bun\n * @example bun.exec('server.ts')\n */\n exec: (file: string, args?: string[]): Command => {\n return args ? ['bun', file, ...args] : ['bun', file];\n },\n};\n\n/**\n * deno runtime commands\n */\nexport const deno = {\n /**\n * Run deno script\n * @example deno.run('server.ts')\n * @example deno.run('server.ts', { allow: ['net', 'read'] })\n */\n run: (file: string, options?: { allow?: string[] }): Command => {\n const args = ['deno', 'run'];\n if (options?.allow) {\n for (const perm of options.allow) {\n args.push(`--allow-${perm}`);\n }\n }\n args.push(file);\n return args as Command;\n },\n\n /**\n * Install deno package\n * @example deno.install('https://deno.land/std/http/file_server.ts')\n */\n install: (url: string, options?: { name?: string }): Command => {\n const args = ['deno', 'install'];\n if (options?.name) args.push('-n', options.name);\n args.push(url);\n return args as Command;\n },\n};\n\n/**\n * Run packages with npx - callable function with additional methods\n * @example npx('create-react-app', ['my-app']) // run package directly\n * @example npx.concurrently(['npm:dev', 'npm:watch']) // run concurrently\n */\nexport const npx = Object.assign(\n (pkg: string, args?: string[]): Command => {\n return args ? ['npx', pkg, ...args] : ['npx', pkg];\n },\n {\n /**\n * Run commands in parallel with concurrently (requires npx)\n * @example npx.concurrently(['npm:dev', 'npm:watch'])\n * @example npx.concurrently(['npm run dev', 'npm run watch'], { names: ['dev', 'watch'], killOthers: true })\n */\n concurrently: (commands: string[], options?: { names?: string[]; killOthers?: boolean }): Command => {\n const args = ['npx', 'concurrently'];\n if (options?.killOthers) args.push('--kill-others');\n if (options?.names) args.push('--names', options.names.join(','));\n args.push(...commands);\n return args as Command;\n },\n }\n);\n\n/**\n * Run packages with bunx - callable function with additional methods\n * @example bunx('create-next-app', ['my-app']) // run package directly\n * @example bunx.concurrently(['npm:dev', 'npm:watch']) // run concurrently\n */\nexport const bunx = Object.assign(\n (pkg: string, args?: string[]): Command => {\n return args ? ['bunx', pkg, ...args] : ['bunx', pkg];\n },\n {\n /**\n * Run commands in parallel with concurrently (requires bunx)\n * @example bunx.concurrently(['npm:dev', 'npm:watch'])\n */\n concurrently: (commands: string[], options?: { names?: string[]; killOthers?: boolean }): Command => {\n const args = ['bunx', 'concurrently'];\n if (options?.killOthers) args.push('--kill-others');\n if (options?.names) args.push('--names', options.names.join(','));\n args.push(...commands);\n return args as Command;\n },\n }\n);\n\n/**\n * uv - Fast Python package manager\n */\nexport const uv = {\n /**\n * Install Python packages with uv\n * @example uv.install('requests')\n * @example uv.install('-r requirements.txt')\n */\n install: (pkg: string): Command => ['uv', 'pip', 'install', pkg],\n\n /**\n * Run Python script with uv\n * @example uv.run('script.py')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['uv', 'run', script, ...args] : ['uv', 'run', script];\n },\n\n /**\n * Sync dependencies from pyproject.toml\n * @example uv.sync()\n */\n sync: (): Command => ['uv', 'sync'],\n\n /**\n * Create virtual environment\n * @example uv.venv()\n * @example uv.venv('.venv')\n */\n venv: (path?: string): Command => {\n return path ? ['uv', 'venv', path] : ['uv', 'venv'];\n },\n};\n\n/**\n * poetry - Python dependency management\n */\nexport const poetry = {\n /**\n * Install dependencies\n * @example poetry.install()\n */\n install: (options?: { noRoot?: boolean }): Command => {\n const args = ['poetry', 'install'];\n if (options?.noRoot) args.push('--no-root');\n return args as Command;\n },\n\n /**\n * Add a dependency\n * @example poetry.add('requests')\n * @example poetry.add('pytest', { dev: true })\n */\n add: (pkg: string, options?: { dev?: boolean }): Command => {\n return options?.dev\n ? ['poetry', 'add', '--group', 'dev', pkg]\n : ['poetry', 'add', pkg];\n },\n\n /**\n * Run command in poetry environment\n * @example poetry.run('python', ['script.py'])\n */\n run: (command: string, args?: string[]): Command => {\n return args ? ['poetry', 'run', command, ...args] : ['poetry', 'run', command];\n },\n\n /**\n * Build package\n * @example poetry.build()\n */\n build: (): Command => ['poetry', 'build'],\n};\n\n/**\n * pipx - Install and run Python applications\n */\nexport const pipx = {\n /**\n * Install application globally\n * @example pipx.install('black')\n */\n install: (pkg: string): Command => ['pipx', 'install', pkg],\n\n /**\n * Run application without installing\n * @example pipx.run('black', ['--check', '.'])\n */\n run: (pkg: string, args?: string[]): Command => {\n return args ? ['pipx', 'run', pkg, ...args] : ['pipx', 'run', pkg];\n },\n\n /**\n * Uninstall application\n * @example pipx.uninstall('black')\n */\n uninstall: (pkg: string): Command => ['pipx', 'uninstall', pkg],\n\n /**\n * Upgrade application\n * @example pipx.upgrade('black')\n */\n upgrade: (pkg: string): Command => ['pipx', 'upgrade', pkg],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Git version control commands\n */\nexport const git = {\n /**\n * Clone repository\n * @example git.clone('https://github.com/user/repo.git')\n * @example git.clone('https://github.com/user/repo.git', { depth: 1 })\n */\n clone: (url: string, options?: { depth?: number; branch?: string; dir?: string }): Command => {\n const args = ['git', 'clone'];\n if (options?.depth) args.push('--depth', String(options.depth));\n if (options?.branch) args.push('-b', options.branch);\n args.push(url);\n if (options?.dir) args.push(options.dir);\n return args as Command;\n },\n\n /**\n * Pull latest changes\n * @example git.pull()\n */\n pull: (): Command => ['git', 'pull'],\n\n /**\n * Checkout branch\n * @example git.checkout('main')\n * @example git.checkout('feature', { create: true })\n */\n checkout: (branch: string, options?: { create?: boolean }): Command => {\n return options?.create\n ? ['git', 'checkout', '-b', branch]\n : ['git', 'checkout', branch];\n },\n\n /**\n * Git status\n * @example git.status()\n */\n status: (): Command => ['git', 'status'],\n\n /**\n * Stage files\n * @example git.add('.')\n * @example git.add('src/index.ts')\n */\n add: (path: string, options?: { all?: boolean }): Command => {\n return options?.all ? ['git', 'add', '-A', path] : ['git', 'add', path];\n },\n\n /**\n * Commit staged changes\n * @example git.commit('feat: add new feature')\n * @example git.commit('fix: bug fix', { all: true })\n */\n commit: (message: string, options?: { all?: boolean }): Command => {\n return options?.all\n ? ['git', 'commit', '-a', '-m', message]\n : ['git', 'commit', '-m', message];\n },\n\n /**\n * Push to remote\n * @example git.push()\n * @example git.push({ remote: 'origin', branch: 'main' })\n * @example git.push({ setUpstream: true, branch: 'feature' })\n */\n push: (options?: { remote?: string; branch?: string; setUpstream?: boolean; force?: boolean }): Command => {\n const args = ['git', 'push'];\n if (options?.setUpstream) args.push('-u');\n if (options?.force) args.push('--force');\n if (options?.remote) args.push(options.remote);\n if (options?.branch) args.push(options.branch);\n return args as Command;\n },\n\n /**\n * List or create branches\n * @example git.branch()\n * @example git.branch({ all: true })\n * @example git.branch('new-feature', { create: true })\n */\n branch: (name?: string, options?: { all?: boolean; delete?: boolean; create?: boolean }): Command => {\n const args = ['git', 'branch'];\n if (options?.all) args.push('-a');\n if (options?.delete) args.push('-d');\n if (name) args.push(name);\n return args as Command;\n },\n\n /**\n * Show changes\n * @example git.diff()\n * @example git.diff({ staged: true })\n * @example git.diff({ file: 'src/index.ts' })\n */\n diff: (options?: { staged?: boolean; file?: string }): Command => {\n const args = ['git', 'diff'];\n if (options?.staged) args.push('--staged');\n if (options?.file) args.push(options.file);\n return args as Command;\n },\n\n /**\n * Show commit history\n * @example git.log()\n * @example git.log({ oneline: true, count: 10 })\n */\n log: (options?: { oneline?: boolean; count?: number }): Command => {\n const args = ['git', 'log'];\n if (options?.oneline) args.push('--oneline');\n if (options?.count) args.push('-n', String(options.count));\n return args as Command;\n },\n\n /**\n * Stash changes\n * @example git.stash()\n * @example git.stash({ pop: true })\n * @example git.stash({ list: true })\n */\n stash: (options?: { pop?: boolean; list?: boolean; drop?: boolean; message?: string }): Command => {\n const args = ['git', 'stash'];\n if (options?.pop) args.push('pop');\n else if (options?.list) args.push('list');\n else if (options?.drop) args.push('drop');\n else if (options?.message) args.push('push', '-m', options.message);\n return args as Command;\n },\n\n /**\n * Fetch from remote\n * @example git.fetch()\n * @example git.fetch({ all: true })\n */\n fetch: (options?: { remote?: string; all?: boolean; prune?: boolean }): Command => {\n const args = ['git', 'fetch'];\n if (options?.all) args.push('--all');\n if (options?.prune) args.push('--prune');\n if (options?.remote) args.push(options.remote);\n return args as Command;\n },\n\n /**\n * Reset changes\n * @example git.reset()\n * @example git.reset({ hard: true })\n * @example git.reset({ ref: 'HEAD~1' })\n */\n reset: (options?: { hard?: boolean; soft?: boolean; ref?: string }): Command => {\n const args = ['git', 'reset'];\n if (options?.hard) args.push('--hard');\n if (options?.soft) args.push('--soft');\n if (options?.ref) args.push(options.ref);\n return args as Command;\n },\n\n /**\n * Initialize repository\n * @example git.init()\n */\n init: (): Command => ['git', 'init'],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Download file with curl\n * @example curl('https://example.com/file.tar.gz')\n * @example curl('https://example.com/file.tar.gz', { output: 'file.tar.gz' })\n */\nexport const curl = (url: string, options?: { output?: string; silent?: boolean }): Command => {\n const args = ['curl'];\n if (options?.silent) args.push('-s');\n args.push('-L'); // follow redirects\n if (options?.output) {\n args.push('-o', options.output);\n }\n args.push(url);\n return args as Command;\n};\n\n/**\n * Download file with wget\n * @example wget('https://example.com/file.tar.gz')\n * @example wget('https://example.com/file.tar.gz', { output: 'file.tar.gz' })\n */\nexport const wget = (url: string, options?: { output?: string; quiet?: boolean }): Command => {\n const args = ['wget'];\n if (options?.quiet) args.push('-q');\n if (options?.output) {\n args.push('-O', options.output);\n }\n args.push(url);\n return args as Command;\n};\n\n/**\n * Port management utilities\n */\nexport const port = {\n /**\n * Find process using a port (using lsof)\n * @example port.find(3000)\n */\n find: (p: number): Command => ['lsof', '-i', `:${p}`],\n\n /**\n * Kill process on a port\n * @example port.kill(3000)\n */\n kill: (p: number): Command => ['sh', '-c', `lsof -ti :${p} | xargs kill -9 2>/dev/null || true`],\n\n /**\n * Check if port is in use (exits 0 if in use)\n * @example port.isUsed(3000)\n */\n isUsed: (p: number): Command => ['sh', '-c', `lsof -i :${p} >/dev/null 2>&1`],\n\n /**\n * List all listening ports\n * @example port.list()\n */\n list: (): Command => ['ss', '-tlnp'],\n\n /**\n * Wait for port to be available (with timeout)\n * @example port.waitFor(3000, 30)\n */\n waitFor: (p: number, timeoutSeconds?: number): Command => {\n const timeout = timeoutSeconds ?? 30;\n return ['sh', '-c', `for i in $(seq 1 ${timeout}); do nc -z localhost ${p} && exit 0 || sleep 1; done; exit 1`];\n },\n};\n\n/**\n * Network utilities\n */\nexport const net = {\n /**\n * Check connectivity to host\n * @example net.ping('google.com')\n * @example net.ping('google.com', 3)\n */\n ping: (host: string, count?: number): Command => {\n return count ? ['ping', '-c', String(count), host] : ['ping', '-c', '1', host];\n },\n\n /**\n * Check if host:port is reachable\n * @example net.check('localhost', 3000)\n */\n check: (host: string, p: number): Command => ['nc', '-z', host, String(p)],\n\n /**\n * Get public IP\n * @example net.publicIp()\n */\n publicIp: (): Command => ['curl', '-s', 'ifconfig.me'],\n\n /**\n * Show network interfaces\n * @example net.interfaces()\n */\n interfaces: (): Command => ['ip', 'addr'],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Search for pattern in files\n * @example grep('TODO', 'src/*.ts')\n * @example grep('error', undefined, { recursive: true, ignoreCase: true })\n */\nexport const grep = (pattern: string, file?: string, options?: { recursive?: boolean; ignoreCase?: boolean; lineNumber?: boolean }): Command => {\n const args = ['grep'];\n if (options?.recursive) args.push('-r');\n if (options?.ignoreCase) args.push('-i');\n if (options?.lineNumber) args.push('-n');\n args.push(pattern);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Stream editor for filtering and transforming text\n * @example sed('s/foo/bar/g', 'file.txt')\n * @example sed('s/foo/bar/g', 'file.txt', { inPlace: true })\n */\nexport const sed = (expression: string, file: string, options?: { inPlace?: boolean }): Command => {\n return options?.inPlace\n ? ['sed', '-i', expression, file]\n : ['sed', expression, file];\n};\n\n/**\n * Output first lines of file\n * @example head('file.txt')\n * @example head('file.txt', 20)\n */\nexport const head = (file: string, lines?: number): Command => {\n return lines ? ['head', '-n', String(lines), file] : ['head', file];\n};\n\n/**\n * Output last lines of file\n * @example tail('file.txt')\n * @example tail('file.txt', 20)\n * @example tail('app.log', undefined, { follow: true })\n */\nexport const tail = (file: string, lines?: number, options?: { follow?: boolean }): Command => {\n const args = ['tail'];\n if (options?.follow) args.push('-f');\n if (lines) args.push('-n', String(lines));\n args.push(file);\n return args as Command;\n};\n\n/**\n * Word, line, character count\n * @example wc('file.txt')\n * @example wc('file.txt', { lines: true })\n */\nexport const wc = (file: string, options?: { lines?: boolean; words?: boolean; chars?: boolean }): Command => {\n const args = ['wc'];\n if (options?.lines) args.push('-l');\n if (options?.words) args.push('-w');\n if (options?.chars) args.push('-c');\n args.push(file);\n return args as Command;\n};\n\n/**\n * Sort lines of text\n * @example sort('file.txt')\n * @example sort('file.txt', { reverse: true, numeric: true })\n */\nexport const sort = (file: string, options?: { reverse?: boolean; numeric?: boolean; unique?: boolean }): Command => {\n const args = ['sort'];\n if (options?.reverse) args.push('-r');\n if (options?.numeric) args.push('-n');\n if (options?.unique) args.push('-u');\n args.push(file);\n return args as Command;\n};\n\n/**\n * Report or filter out repeated lines\n * @example uniq('file.txt')\n * @example uniq('file.txt', { count: true })\n */\nexport const uniq = (file: string, options?: { count?: boolean }): Command => {\n return options?.count ? ['uniq', '-c', file] : ['uniq', file];\n};\n\n/**\n * Process JSON with jq\n * @example jq('.name', 'data.json')\n * @example jq('.[] | .id') // for piping\n */\nexport const jq = (filter: string, file?: string, options?: { raw?: boolean; compact?: boolean }): Command => {\n const args = ['jq'];\n if (options?.raw) args.push('-r');\n if (options?.compact) args.push('-c');\n args.push(filter);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Build and execute commands from stdin\n * @example xargs('rm') // pipe file list to rm\n * @example xargs('grep', ['pattern'], { parallel: 4 })\n */\nexport const xargs = (command: string, args?: string[], options?: { parallel?: number; nullDelimited?: boolean }): Command => {\n const xargsArgs = ['xargs'];\n if (options?.nullDelimited) xargsArgs.push('-0');\n if (options?.parallel) xargsArgs.push('-P', String(options.parallel));\n xargsArgs.push(command);\n if (args) xargsArgs.push(...args);\n return xargsArgs as Command;\n};\n\n/**\n * Pattern scanning and processing\n * @example awk('{print $1}', 'file.txt')\n * @example awk('BEGIN {sum=0} {sum+=$1} END {print sum}', 'numbers.txt')\n */\nexport const awk = (program: string, file?: string, options?: { fieldSeparator?: string }): Command => {\n const args = ['awk'];\n if (options?.fieldSeparator) args.push('-F', options.fieldSeparator);\n args.push(program);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Extract columns/fields from lines\n * @example cut('file.txt', { fields: '1,3', delimiter: ',' })\n * @example cut('file.txt', { characters: '1-10' })\n */\nexport const cut = (file: string, options: { fields?: string; delimiter?: string; characters?: string }): Command => {\n const args = ['cut'];\n if (options.delimiter) args.push('-d', options.delimiter);\n if (options.fields) args.push('-f', options.fields);\n if (options.characters) args.push('-c', options.characters);\n args.push(file);\n return args as Command;\n};\n\n/**\n * Translate or delete characters\n * @example tr('a-z', 'A-Z') // uppercase\n * @example tr('\\n', ' ') // newlines to spaces\n * @example tr('', '', { delete: 'abc' }) // delete chars\n */\nexport const tr = (set1: string, set2?: string, options?: { delete?: string; squeeze?: boolean }): Command => {\n const args = ['tr'];\n if (options?.delete) {\n args.push('-d', options.delete);\n } else {\n if (options?.squeeze) args.push('-s');\n args.push(set1);\n if (set2) args.push(set2);\n }\n return args as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * Tar archive operations\n */\nexport const tar = {\n /**\n * Extract tar archive\n * @example tar.extract('archive.tar.gz')\n * @example tar.extract('archive.tar.gz', { dir: '/app' })\n */\n extract: (file: string, options?: { dir?: string }): Command => {\n const args = ['tar', '-xzf', file];\n if (options?.dir) args.push('-C', options.dir);\n return args as Command;\n },\n\n /**\n * Create tar archive\n * @example tar.create('archive.tar.gz', '/app/dist')\n */\n create: (output: string, source: string): Command => {\n return ['tar', '-czf', output, source];\n },\n};\n\n/**\n * Unzip archive\n * @example unzip('archive.zip')\n * @example unzip('archive.zip', { dir: '/app' })\n */\nexport const unzip = (file: string, options?: { dir?: string }): Command => {\n return options?.dir ? ['unzip', '-o', file, '-d', options.dir] : ['unzip', '-o', file];\n};\n","import type { Command } from '../types.js';\n\n/**\n * Print environment variable\n * @example echo('$HOME')\n * @example echo('Hello World')\n */\nexport const echo = (text: string): Command => ['echo', text];\n\n/**\n * Print environment variables\n * @example env()\n */\nexport const env = (): Command => ['env'];\n\n/**\n * Print specific environment variable\n * @example printenv('PATH')\n * @example printenv() // prints all\n */\nexport const printenv = (name?: string): Command => {\n return name ? ['printenv', name] : ['printenv'];\n};\n\n/**\n * Which command location\n * @example which('node')\n */\nexport const which = (command: string): Command => ['which', command];\n\n/**\n * Print current user\n * @example whoami()\n */\nexport const whoami = (): Command => ['whoami'];\n\n/**\n * Print system information\n * @example uname()\n * @example uname({ all: true })\n */\nexport const uname = (options?: { all?: boolean }): Command => {\n return options?.all ? ['uname', '-a'] : ['uname'];\n};\n\n/**\n * Print hostname\n * @example hostname()\n */\nexport const hostname = (): Command => ['hostname'];\n\n/**\n * Report disk space usage\n * @example df()\n * @example df('/app')\n */\nexport const df = (path?: string, options?: { human?: boolean }): Command => {\n const args = ['df'];\n if (options?.human) args.push('-h');\n if (path) args.push(path);\n return args as Command;\n};\n\n/**\n * Estimate file/directory space usage\n * @example du('/app')\n * @example du('/app', { human: true, summarize: true })\n */\nexport const du = (path: string, options?: { human?: boolean; summarize?: boolean }): Command => {\n const args = ['du'];\n if (options?.human) args.push('-h');\n if (options?.summarize) args.push('-s');\n args.push(path);\n return args as Command;\n};\n\n/**\n * Delay for specified seconds\n * @example sleep(5)\n */\nexport const sleep = (seconds: number): Command => ['sleep', String(seconds)];\n\n/**\n * Print date/time\n * @example date()\n * @example date('+%Y-%m-%d')\n */\nexport const date = (format?: string): Command => {\n return format ? ['date', format] : ['date'];\n};\n\n/**\n * Find files\n * @example find('/app', { name: '*.ts' })\n * @example find('/app', { type: 'f', name: '*.js' })\n */\nexport const find = (path: string, options?: { name?: string; type?: 'f' | 'd' }): Command => {\n const args = ['find', path];\n if (options?.type) args.push('-type', options.type);\n if (options?.name) args.push('-name', options.name);\n return args as Command;\n};\n\n/**\n * Write to file and stdout\n * @example tee('/app/output.log')\n * @example tee('/app/output.log', { append: true })\n */\nexport const tee = (file: string, options?: { append?: boolean }): Command => {\n return options?.append ? ['tee', '-a', file] : ['tee', file];\n};\n\n/**\n * Compare files\n * @example diff('file1.txt', 'file2.txt')\n * @example diff('file1.txt', 'file2.txt', { unified: true })\n */\nexport const diff = (file1: string, file2: string, options?: { unified?: boolean; brief?: boolean }): Command => {\n const args = ['diff'];\n if (options?.unified) args.push('-u');\n if (options?.brief) args.push('-q');\n args.push(file1, file2);\n return args as Command;\n};\n\n/**\n * Run multiple commands in parallel\n * @example parallel(['npm run dev', 'npm run watch'])\n */\nexport const parallel = (commands: string[], options?: { killOthers?: boolean }): Command => {\n const joined = commands.join(' & ');\n if (options?.killOthers) {\n // trap EXIT to kill all background jobs when any exits\n return ['sh', '-c', `trap \"kill 0\" EXIT; ${joined} & wait`];\n }\n return ['sh', '-c', `${joined} & wait`];\n};\n\n/**\n * Build a custom command from parts\n * @example raw('my-cli', ['--flag', 'value'])\n */\nexport const raw = (command: string, args?: string[]): Command => {\n return args ? [command, ...args] : [command];\n};\n\n/**\n * Base64 encoding/decoding utilities\n */\nexport const base64 = {\n /**\n * Encode to base64\n * @example base64.encode('file.txt')\n */\n encode: (file?: string): Command => {\n return file ? ['base64', file] : ['base64'];\n },\n\n /**\n * Decode from base64\n * @example base64.decode('encoded.txt')\n */\n decode: (file?: string): Command => {\n return file ? ['base64', '-d', file] : ['base64', '-d'];\n },\n};\n\n/**\n * Compute MD5 checksum\n * @example md5sum('file.txt')\n * @example md5sum('file.txt', { check: true })\n */\nexport const md5sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['md5sum', '-c', file] : ['md5sum', file];\n};\n\n/**\n * Compute SHA256 checksum\n * @example sha256sum('file.txt')\n * @example sha256sum('file.txt', { check: true })\n */\nexport const sha256sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['sha256sum', '-c', file] : ['sha256sum', file];\n};\n\n/**\n * Compute SHA1 checksum\n * @example sha1sum('file.txt')\n */\nexport const sha1sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['sha1sum', '-c', file] : ['sha1sum', file];\n};\n","import type { Command } from '../types.js';\n\n/**\n * ComputeSDK CLI installation and management utilities\n */\n\n/**\n * Install the ComputeSDK CLI in a sandbox\n * \n * This command downloads and runs the official ComputeSDK installer.\n * The CLI provides the full ComputeSDK API (terminals, watchers, signals, etc.)\n * in any sandbox environment.\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // Install compute in a raw E2B/Daytona/etc sandbox\n * await sandbox.runCommand(compute.install({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * ```\n * \n * @param options Installation options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.version Specific version to install (default: latest)\n * @param options.silent Suppress installation output (default: false)\n * @returns Command tuple for installing the compute CLI\n */\nexport const install = (options?: {\n apiKey?: string;\n version?: string;\n silent?: boolean;\n}): Command => {\n const installUrl = options?.version\n ? `https://computesdk.com/install.sh?version=${options.version}`\n : 'https://computesdk.com/install.sh';\n \n const curlFlags = options?.silent ? '-fsSL' : '-fSL';\n \n // Build the install command with optional API key\n let installCmd = `curl ${curlFlags} ${installUrl} | bash`;\n \n // If API key is provided, set it as environment variable for the install script\n if (options?.apiKey) {\n installCmd = `COMPUTESDK_API_KEY=\"${options.apiKey}\" ${installCmd}`;\n } else if (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY) {\n // Fallback to process.env if available\n installCmd = `COMPUTESDK_API_KEY=\"${process.env.COMPUTESDK_API_KEY}\" ${installCmd}`;\n }\n \n // Use sh -c to pipe curl output to bash\n return ['sh', '-c', installCmd];\n};\n\n/**\n * Check if the ComputeSDK CLI is installed\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.isInstalled());\n * const installed = result.exitCode === 0;\n * ```\n * \n * @returns Command tuple that exits 0 if installed, 1 if not\n */\nexport const isInstalled = (): Command => {\n return ['sh', '-c', 'which compute > /dev/null 2>&1'];\n};\n\n/**\n * Get the installed compute version\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.version());\n * console.log('Version:', result.stdout.trim());\n * ```\n * \n * @returns Command tuple to get compute version\n */\nexport const version = (): Command => {\n return ['compute', '--version'];\n};\n\n/**\n * Start the ComputeSDK daemon\n * \n * Note: The daemon usually auto-starts after installation.\n * This is mainly useful for restarting or manual control.\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // With API key\n * await sandbox.runCommand(compute.start({ apiKey: process.env.COMPUTESDK_API_KEY }), { background: true });\n * \n * // With access token\n * await sandbox.runCommand(compute.start({ accessToken: process.env.ACCESS_TOKEN }), { background: true });\n * ```\n * \n * @param options Start options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.accessToken Access token for authentication (alternative to apiKey)\n * @param options.port Port to listen on (default: 18080)\n * @param options.logLevel Log level (default: 'info')\n * @returns Command tuple to start the daemon\n */\nexport const start = (options?: {\n apiKey?: string;\n accessToken?: string;\n port?: number;\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\n}): Command => {\n const args = ['compute', 'start'];\n \n const apiKey = options?.apiKey || (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n const accessToken = options?.accessToken;\n \n // Prefer access token over API key if both are provided\n if (accessToken) {\n args.push('--access-token', accessToken);\n } else if (apiKey) {\n args.push('--api-key', apiKey);\n }\n \n if (options?.port) {\n args.push('--port', String(options.port));\n }\n \n if (options?.logLevel === 'debug') {\n args.push('--verbose');\n }\n \n return args as Command;\n};\n\n/**\n * Stop the ComputeSDK daemon\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * await sandbox.runCommand(compute.stop());\n * ```\n * \n * @returns Command tuple to stop the daemon\n */\nexport const stop = (): Command => {\n return ['pkill', '-f', 'compute start'];\n};\n\n/**\n * Check daemon health status\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.health());\n * const healthy = result.exitCode === 0;\n * ```\n * \n * @param options Health check options\n * @param options.host Host to check (default: 'localhost')\n * @param options.port Port to check (default: 18080)\n * @returns Command tuple to check daemon health\n */\nexport const health = (options?: {\n host?: string;\n port?: number;\n}): Command => {\n const host = options?.host || 'localhost';\n const port = options?.port || 18080;\n return ['sh', '-c', `curl -f http://${host}:${port}/health > /dev/null 2>&1`];\n};\n\n/**\n * Check if compute daemon is set up and running\n * \n * Returns exit code 0 if daemon is installed and running (ready to use)\n * Returns exit code 1 if setup is needed (not installed or not running)\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.isSetup());\n * if (result.exitCode === 0) {\n * console.log('Daemon is ready!');\n * } else {\n * console.log('Setup needed');\n * await sandbox.runCommand(compute.setup({ apiKey: 'key' }));\n * }\n * ```\n * \n * @param options Setup check options\n * @param options.host Host to check (default: 'localhost')\n * @param options.port Port to check (default: 18080)\n * @returns Command that exits 0 if setup, 1 if setup needed\n */\nexport const isSetup = (options?: {\n host?: string;\n port?: number;\n}): Command => {\n const host = options?.host || 'localhost';\n const port = options?.port || 18080;\n \n return ['sh', '-c', `\n if ! which compute > /dev/null 2>&1; then\n exit 1\n fi\n if ! curl -f http://${host}:${port}/health > /dev/null 2>&1; then\n exit 1\n fi\n exit 0\n `.trim()];\n};\n\n/**\n * Install and start the ComputeSDK daemon in one command\n * \n * This is a convenience method that installs the compute CLI and starts the daemon.\n * Useful for quickly setting up a sandbox with ComputeSDK capabilities.\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // Quick setup with API key\n * await sandbox.runCommand(compute.setup({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * ```\n * \n * @param options Setup options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.accessToken Access token for authentication (alternative to apiKey)\n * @param options.port Port to listen on (default: 18080)\n * @param options.version Specific version to install (default: latest)\n * @param options.silent Suppress installation output (default: false)\n * @returns Command tuple for installing and starting the daemon\n */\nexport const setup = (options?: {\n apiKey?: string;\n accessToken?: string;\n port?: number;\n version?: string;\n silent?: boolean;\n}): Command => {\n const apiKey = options?.apiKey || (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n const accessToken = options?.accessToken;\n \n const installUrl = options?.version\n ? `https://computesdk.com/install.sh?version=${options.version}`\n : 'https://computesdk.com/install.sh';\n \n const curlFlags = options?.silent ? '-fsSL' : '-fSL';\n \n // Build install command\n let installCmd = `curl ${curlFlags} ${installUrl} | bash`;\n \n // Add API key to install if provided\n if (apiKey) {\n installCmd = `COMPUTESDK_API_KEY=\"${apiKey}\" ${installCmd}`;\n }\n \n // Build start command\n let startCmd = 'compute start';\n \n // Add authentication flags\n if (accessToken) {\n startCmd += ` --access-token \"${accessToken}\"`;\n } else if (apiKey) {\n startCmd += ` --api-key \"${apiKey}\"`;\n }\n \n if (options?.port) {\n startCmd += ` --port ${options.port}`;\n }\n \n // Combine: install, then start in background\n const fullCmd = `${installCmd} && ${startCmd} > /dev/null 2>&1 &`;\n \n return ['sh', '-c', fullCmd];\n};\n\n/**\n * ComputeSDK CLI management utilities\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // Quick setup (install + start)\n * await sandbox.runCommand(compute.setup({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * \n * // Or install and start separately\n * await sandbox.runCommand(compute.install());\n * await sandbox.runCommand(compute.start({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * \n * // Check if installed\n * const result = await sandbox.runCommand(compute.isInstalled());\n * if (result.exitCode === 0) {\n * console.log('Compute is installed!');\n * }\n * \n * // Get version\n * const versionResult = await sandbox.runCommand(compute.version());\n * console.log('Version:', versionResult.stdout);\n * ```\n */\nexport const compute = {\n install,\n isInstalled,\n version,\n start,\n stop,\n health,\n setup,\n isSetup,\n};\n"],"mappings":"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","names":["awk","base64","bun","bunx","cat","chmod","chown","compute","cp","curl","cut","date","deno","df","diff","du","echo","env","find","git","grep","head","hostname","jq","kill","ln","ls","md5sum","mkdir","mv","net","node","npm","npx","parallel","pip","pipx","pkill","pnpm","poetry","port","printenv","ps","pwd","python","raw","readlink","rm","rsync","sed","sha1sum","sha256sum","sleep","sort","tail","tar","tee","test","timeout","touch","tr","uname","uniq","unzip","uv","wc","wget","which","whoami","xargs","yarn","timeout","port","mkdir","rm","cp","mv","ls","pwd","chmod","chown","touch","cat","ln","readlink","test","rsync","node","python","kill","pkill","ps","timeout","npm","pnpm","yarn","pip","bun","deno","npx","bunx","uv","poetry","pipx","git","curl","wget","port","net","grep","sed","head","tail","wc","sort","uniq","jq","xargs","awk","cut","tr","tar","unzip","echo","env","printenv","which","whoami","uname","hostname","df","du","sleep","date","find","tee","diff","parallel","raw","base64","md5sum","sha256sum","sha1sum","compute"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/shell.ts","../src/commands/filesystem.ts","../src/commands/process.ts","../src/commands/packages.ts","../src/commands/git.ts","../src/commands/network.ts","../src/commands/text.ts","../src/commands/archive.ts","../src/commands/system.ts","../src/commands/compute.ts"],"sourcesContent":["/**\n * @computesdk/cmd - Type-safe shell command builders\n *\n * Build shell commands as tuples for use with sandbox.runCommand()\n *\n * @example\n * ```typescript\n * import { cmd, npm, node } from '@computesdk/cmd';\n *\n * await sandbox.runCommand(npm.install('express'));\n * await sandbox.runCommand(cmd.mkdir('/app/src'));\n * await sandbox.runCommand(node('server.js'), { background: true });\n * ```\n */\n\n// Re-export types\nexport type { Command, ShellOptions } from './types.js';\n\n// Re-export utilities\nexport { esc, shellEscape, escapeArgs, buildShellCommand } from './utils.js';\n\n// Re-export shell wrappers\nexport { shell, sh, bash, zsh } from './shell.js';\n\n// Import all commands for assembly\nimport * as filesystem from './commands/filesystem.js';\nimport * as process from './commands/process.js';\nimport * as packages from './commands/packages.js';\nimport * as gitCommands from './commands/git.js';\nimport * as network from './commands/network.js';\nimport * as text from './commands/text.js';\nimport * as archive from './commands/archive.js';\nimport * as system from './commands/system.js';\nimport * as computeCommands from './commands/compute.js';\n\nimport type { Command } from './types.js';\nimport { buildShellCommand } from './utils.js';\n\n/**\n * Command builders for common shell operations - callable with shell wrapper + command methods\n *\n * @example\n * // As shell wrapper (default: sh)\n * cmd(npm.install(), { cwd: '/app' })\n * // => ['sh', '-c', 'cd '/app' && npm install']\n *\n * @example\n * // As command builders\n * cmd.npm.install('express')\n * // => ['npm', 'install', 'express']\n */\nexport const cmd = Object.assign(\n // Callable: shell wrapper with sh default\n (command: Command, options?: { cwd?: string; background?: boolean }): Command => {\n return buildShellCommand('sh', command, options);\n },\n {\n // Filesystem\n ...filesystem,\n // Process\n ...process,\n // Package managers\n ...packages,\n // Git\n ...gitCommands,\n // Network\n ...network,\n // Text processing\n ...text,\n // Archives\n ...archive,\n // System\n ...system,\n // Compute\n ...computeCommands,\n }\n);\n\n// Export individual command builders for destructured imports\n// Filesystem\nexport const {\n mkdir, rm, cp, mv, ls, pwd, chmod, chown, touch, cat, ln, readlink, test, rsync,\n} = filesystem;\n\n// Process\nexport const { node, python, kill, pkill, ps, timeout } = process;\n\n// Package managers\nexport const { npm, pnpm, yarn, pip, bun, deno, npx, bunx, uv, poetry, pipx } = packages;\n\n// Git\nexport const { git } = gitCommands;\n\n// Network\nexport const { curl, wget, port, net } = network;\n\n// Text processing\nexport const { grep, sed, head, tail, wc, sort, uniq, jq, xargs, awk, cut, tr } = text;\n\n// Archives\nexport const { tar, unzip } = archive;\n\n// System\nexport const {\n echo, env, printenv, which, whoami, uname, hostname,\n df, du, sleep, date, find, tee, diff, parallel, raw,\n base64, md5sum, sha256sum, sha1sum,\n} = system;\n\n// Compute\nexport const { compute } = computeCommands;\n\n// Default export for convenience\nexport default cmd;\n","import type { Command, ShellOptions } from './types.js';\n\n/**\n * Escape a string for safe use in shell commands using single quotes.\n * This is the safest method as single quotes preserve all characters literally,\n * except for single quotes themselves which must be handled specially.\n *\n * @example shellEscape(\"hello world\") // \"'hello world'\"\n * @example shellEscape(\"it's here\") // \"'it'\\\\''s here'\"\n * @example shellEscape(\"$HOME\") // \"'$HOME'\" (no variable expansion)\n */\nexport function shellEscape(s: string): string {\n // Wrap in single quotes and escape any embedded single quotes\n // 'foo'bar' becomes 'foo'\\''bar' (end quote, escaped quote, start quote)\n return \"'\" + s.replace(/'/g, \"'\\\\''\") + \"'\";\n}\n\n/**\n * Escape a string for use inside double quotes.\n *\n * This is a legacy helper kept for backward compatibility; for new code,\n * prefer {@link shellEscape} which uses single-quoted, safer shell escaping.\n *\n * @example esc('path with \"quotes\"') // 'path with \\\\\"quotes\\\\\"'\n * @deprecated Use {@link shellEscape} for safer escaping. This function only escapes\n * double quotes and may not be safe for all shell contexts. Migration: replace\n * `esc(str)` with `shellEscape(str)`.\n */\nexport function esc(s: string): string {\n return s.replace(/\"/g, '\\\\\"');\n}\n\n/**\n * Escape each argument in a command array and join them with spaces.\n * Arguments that are safe (alphanumeric, dash, underscore, dot, slash, colon, equals)\n * are left unquoted for readability.\n *\n * @example escapeArgs(['npm', 'install', 'express']) // 'npm install express'\n * @example escapeArgs(['echo', 'hello world']) // \"echo 'hello world'\"\n * @example escapeArgs(['cp', 'file with spaces.txt', '/dest']) // \"cp 'file with spaces.txt' /dest\"\n */\nexport function escapeArgs(args: string[]): string {\n return args.map(arg => {\n // If arg contains only safe characters, no escaping needed\n if (/^[a-zA-Z0-9_./:=@-]+$/.test(arg) && arg.length > 0) {\n return arg;\n }\n // Otherwise, use shellEscape for safety\n return shellEscape(arg);\n }).join(' ');\n}\n\n/**\n * Internal helper to build shell command with proper escaping\n */\nexport function buildShellCommand(shellBin: string, command: Command, options?: ShellOptions): Command {\n if (!options?.cwd && !options?.background) {\n return command;\n }\n\n let cmdStr = escapeArgs(command);\n\n // Build command: first wrap with nohup if background, then prepend cd if cwd\n // Result: cd '/path' && nohup cmd > /dev/null 2>&1 &\n if (options.background) {\n cmdStr = `nohup ${cmdStr} > /dev/null 2>&1 &`;\n }\n\n if (options.cwd) {\n cmdStr = `cd ${shellEscape(options.cwd)} && ${cmdStr}`;\n }\n\n return [shellBin, '-c', cmdStr];\n}\n","import type { Command, ShellOptions } from './types.js';\nimport { buildShellCommand } from './utils.js';\n\n/**\n * Shell wrapper - callable function with shell-specific methods\n *\n * @example\n * // Default (sh)\n * shell(cmd.npm.install(), { cwd: '/app' })\n * // => ['sh', '-c', 'cd \"/app\" && npm install']\n *\n * @example\n * // Shell-specific\n * shell.bash(cmd.node('server.js'), { background: true })\n * // => ['bash', '-c', 'nohup node server.js > /dev/null 2>&1 &']\n *\n * @example\n * shell.zsh(cmd.npm.run('dev'), { cwd: '/app' })\n * // => ['zsh', '-c', 'cd \"/app\" && npm run dev']\n */\nexport const shell = Object.assign(\n // Default: use sh\n (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('sh', command, options);\n },\n {\n /** Wrap with sh (POSIX shell) */\n sh: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('sh', command, options);\n },\n /** Wrap with bash */\n bash: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('bash', command, options);\n },\n /** Wrap with zsh */\n zsh: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('zsh', command, options);\n },\n }\n);\n\n// Individual shell exports\nexport const sh = shell.sh;\nexport const bash = shell.bash;\nexport const zsh = shell.zsh;\n","import type { Command } from '../types.js';\n\n/**\n * Create directory\n *\n * By default, recursive is true (includes -p flag to create parent directories).\n * This differs from standard shell mkdir which requires explicit -p flag.\n *\n * @example mkdir('/app/src') // ['mkdir', '-p', '/app/src']\n * @example mkdir('/app/src', { recursive: false }) // ['mkdir', '/app/src']\n */\nexport const mkdir = (path: string, options?: { recursive?: boolean }): Command => {\n const recursive = options?.recursive ?? true;\n return recursive ? ['mkdir', '-p', path] : ['mkdir', path];\n};\n\n/**\n * Remove file or directory\n * @example rm('/app/file.txt') // ['rm', '/app/file.txt']\n * @example rm('/app/tmp', { recursive: true }) // ['rm', '-r', '/app/tmp']\n * @example rm('/app/tmp', { recursive: true, force: true }) // ['rm', '-rf', '/app/tmp']\n * @example rm.rf('/app/tmp') // ['rm', '-rf', '/app/tmp']\n * @example rm.auto('/app/anything') // Automatically detects file vs directory\n */\nexport const rm = Object.assign(\n (path: string, options?: { recursive?: boolean; force?: boolean }): Command => {\n const flags: string[] = [];\n if (options?.recursive) flags.push('r');\n if (options?.force) flags.push('f');\n return flags.length > 0 ? ['rm', `-${flags.join('')}`, path] : ['rm', path];\n },\n {\n /**\n * Force remove file or directory (always uses -rf)\n * @example rm.rf('/app/tmp')\n */\n rf: (path: string): Command => ['rm', '-rf', path],\n \n /**\n * Smart remove - automatically detects if path is a directory and uses appropriate flags\n * Uses a shell one-liner to check if directory and apply -r flag accordingly\n * @example rm.auto('/app/tmp')\n */\n auto: (path: string): Command => {\n // Shell one-liner: if it's a directory, use -rf, otherwise just rm -f\n return ['sh', '-c', `if [ -d \"${path}\" ]; then rm -rf \"${path}\"; else rm -f \"${path}\"; fi`];\n }\n }\n);\n\n/**\n * Copy file or directory\n * @example cp('/src/file.txt', '/dest/file.txt')\n */\nexport const cp = (src: string, dest: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['cp', '-r', src, dest] : ['cp', src, dest];\n};\n\n/**\n * Move/rename file or directory\n * @example mv('/old/path', '/new/path')\n */\nexport const mv = (src: string, dest: string): Command => ['mv', src, dest];\n\n/**\n * List directory contents\n * @example ls('/app') // ['ls', '/app']\n * @example ls('/app', { all: true, long: true }) // ['ls', '-la', '/app']\n */\nexport const ls = (path?: string, options?: { all?: boolean; long?: boolean }): Command => {\n const flags: string[] = [];\n if (options?.long) flags.push('l');\n if (options?.all) flags.push('a');\n const flagStr = flags.length > 0 ? `-${flags.join('')}` : '';\n if (flagStr && path) return ['ls', flagStr, path];\n if (flagStr) return ['ls', flagStr];\n if (path) return ['ls', path];\n return ['ls'];\n};\n\n/**\n * Print working directory\n * @example pwd() // ['pwd']\n */\nexport const pwd = (): Command => ['pwd'];\n\n/**\n * Change file permissions\n * @example chmod('755', '/app/script.sh')\n */\nexport const chmod = (mode: string, path: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['chmod', '-R', mode, path] : ['chmod', mode, path];\n};\n\n/**\n * Change file owner/group\n * @example chown('user', '/app/file.txt')\n * @example chown('user:group', '/app', { recursive: true })\n */\nexport const chown = (owner: string, path: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['chown', '-R', owner, path] : ['chown', owner, path];\n};\n\n/**\n * Create empty file or update timestamp\n * @example touch('/app/newfile.txt')\n */\nexport const touch = (path: string): Command => ['touch', path];\n\n/**\n * Read file contents\n * @example cat('/app/file.txt')\n */\nexport const cat = (path: string): Command => ['cat', path];\n\n/**\n * Create symbolic link\n * @example ln('/app/config', '/etc/app/config')\n * @example ln('/app/config', '/etc/app/config', { symbolic: true, force: true })\n */\nexport const ln = (target: string, link: string, options?: { symbolic?: boolean; force?: boolean }): Command => {\n const args = ['ln'];\n if (options?.symbolic !== false) args.push('-s'); // symbolic by default\n if (options?.force) args.push('-f');\n args.push(target, link);\n return args as Command;\n};\n\n/**\n * Resolve symbolic link\n * @example readlink('/usr/bin/python')\n * @example readlink('/usr/bin/python', { canonical: true })\n */\nexport const readlink = (path: string, options?: { canonical?: boolean }): Command => {\n return options?.canonical ? ['readlink', '-f', path] : ['readlink', path];\n};\n\n/**\n * Filesystem checks (exit 0 if true, 1 if false)\n * @example test.exists('/app/file.txt')\n * @example test.isDir('/app')\n */\nexport const test = {\n exists: (path: string): Command => ['test', '-e', path],\n isFile: (path: string): Command => ['test', '-f', path],\n isDir: (path: string): Command => ['test', '-d', path],\n isReadable: (path: string): Command => ['test', '-r', path],\n isWritable: (path: string): Command => ['test', '-w', path],\n isExecutable: (path: string): Command => ['test', '-x', path],\n notEmpty: (path: string): Command => ['test', '-s', path],\n isSymlink: (path: string): Command => ['test', '-L', path],\n};\n\n/**\n * Sync files/directories with rsync\n * @example rsync('/src/', '/dest/')\n * @example rsync('/src/', 'user@host:/dest/', { archive: true, compress: true })\n */\nexport const rsync = (src: string, dest: string, options?: {\n archive?: boolean;\n verbose?: boolean;\n compress?: boolean;\n delete?: boolean;\n dryRun?: boolean;\n exclude?: string[];\n}): Command => {\n const args = ['rsync'];\n if (options?.archive) args.push('-a');\n if (options?.verbose) args.push('-v');\n if (options?.compress) args.push('-z');\n if (options?.delete) args.push('--delete');\n if (options?.dryRun) args.push('--dry-run');\n if (options?.exclude) {\n for (const pattern of options.exclude) {\n args.push('--exclude', pattern);\n }\n }\n args.push(src, dest);\n return args as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * Run Node.js script\n * @example node('server.js')\n * @example node('server.js', ['--port', '3000'])\n */\nexport const node = (script: string, args?: string[]): Command => {\n return args ? ['node', script, ...args] : ['node', script];\n};\n\n/**\n * Run Python script\n * @example python('script.py')\n * @example python('script.py', ['--verbose'])\n */\nexport const python = (script: string, args?: string[]): Command => {\n return args ? ['python3', script, ...args] : ['python3', script];\n};\n\n/**\n * Kill process by PID\n * @example kill(1234)\n * @example kill(1234, 9) // SIGKILL\n */\nexport const kill = (pid: number, signal?: number): Command => {\n return signal ? ['kill', `-${signal}`, String(pid)] : ['kill', String(pid)];\n};\n\n/**\n * Kill processes by name\n * @example pkill('node')\n * @example pkill('python', { signal: 9 })\n */\nexport const pkill = (name: string, options?: { signal?: number }): Command => {\n return options?.signal\n ? ['pkill', `-${options.signal}`, name]\n : ['pkill', name];\n};\n\n/**\n * List processes\n * @example ps()\n * @example ps({ all: true })\n */\nexport const ps = (options?: { all?: boolean }): Command => {\n return options?.all ? ['ps', 'aux'] : ['ps'];\n};\n\n/**\n * Run command with timeout\n * @example timeout(30, 'npm', ['test'])\n * @example timeout(10, 'curl', ['https://example.com'])\n */\nexport const timeout = (seconds: number, command: string, args?: string[]): Command => {\n const base: string[] = ['timeout', String(seconds), command];\n return args ? [...base, ...args] as Command : base as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * npm package manager commands\n */\nexport const npm = {\n /**\n * Install packages\n * @example npm.install() // ['npm', 'install']\n * @example npm.install('express') // ['npm', 'install', 'express']\n * @example npm.install('express', { dev: true }) // ['npm', 'install', '-D', 'express']\n */\n install: (pkg?: string, options?: { dev?: boolean; global?: boolean }): Command => {\n const args = ['npm', 'install'];\n if (options?.dev) args.push('-D');\n if (options?.global) args.push('-g');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run npm script\n * @example npm.run('build')\n * @example npm.run('test', ['--coverage'])\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['npm', 'run', script, '--', ...args] : ['npm', 'run', script];\n },\n\n /**\n * Initialize new package\n * @example npm.init() // ['npm', 'init', '-y']\n */\n init: (): Command => ['npm', 'init', '-y'],\n\n /**\n * Uninstall package\n * @example npm.uninstall('lodash')\n */\n uninstall: (pkg: string): Command => ['npm', 'uninstall', pkg],\n};\n\n/**\n * pnpm package manager commands\n */\nexport const pnpm = {\n /**\n * Install packages with pnpm\n * @example pnpm.install()\n * @example pnpm.install('express')\n */\n install: (pkg?: string, options?: { dev?: boolean }): Command => {\n const args = ['pnpm', 'install'];\n if (options?.dev) args.push('-D');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run pnpm script\n * @example pnpm.run('build')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['pnpm', 'run', script, '--', ...args] : ['pnpm', 'run', script];\n },\n};\n\n/**\n * yarn package manager commands\n */\nexport const yarn = {\n /**\n * Install packages with yarn\n * @example yarn.install()\n */\n install: (): Command => ['yarn', 'install'],\n\n /**\n * Add package\n * @example yarn.add('express')\n * @example yarn.add('typescript', { dev: true })\n */\n add: (pkg: string, options?: { dev?: boolean }): Command => {\n return options?.dev ? ['yarn', 'add', '-D', pkg] : ['yarn', 'add', pkg];\n },\n\n /**\n * Run yarn script\n * @example yarn.run('build')\n */\n run: (script: string): Command => ['yarn', 'run', script],\n};\n\n/**\n * pip Python package manager commands\n */\nexport const pip = {\n /**\n * Install Python package\n * @example pip.install('requests')\n * @example pip.install('-r requirements.txt')\n */\n install: (pkg: string): Command => ['pip', 'install', pkg],\n\n /**\n * Uninstall Python package\n * @example pip.uninstall('requests')\n */\n uninstall: (pkg: string): Command => ['pip', 'uninstall', '-y', pkg],\n};\n\n/**\n * bun runtime commands\n */\nexport const bun = {\n /**\n * Install packages with bun\n * @example bun.install()\n * @example bun.install('express')\n */\n install: (pkg?: string, options?: { dev?: boolean }): Command => {\n const args = ['bun', 'install'];\n if (options?.dev) args.push('-D');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run bun script\n * @example bun.run('build')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['bun', 'run', script, ...args] : ['bun', 'run', script];\n },\n\n /**\n * Run file with bun\n * @example bun.exec('server.ts')\n */\n exec: (file: string, args?: string[]): Command => {\n return args ? ['bun', file, ...args] : ['bun', file];\n },\n};\n\n/**\n * deno runtime commands\n */\nexport const deno = {\n /**\n * Run deno script\n * @example deno.run('server.ts')\n * @example deno.run('server.ts', { allow: ['net', 'read'] })\n */\n run: (file: string, options?: { allow?: string[] }): Command => {\n const args = ['deno', 'run'];\n if (options?.allow) {\n for (const perm of options.allow) {\n args.push(`--allow-${perm}`);\n }\n }\n args.push(file);\n return args as Command;\n },\n\n /**\n * Install deno package\n * @example deno.install('https://deno.land/std/http/file_server.ts')\n */\n install: (url: string, options?: { name?: string }): Command => {\n const args = ['deno', 'install'];\n if (options?.name) args.push('-n', options.name);\n args.push(url);\n return args as Command;\n },\n};\n\n/**\n * Run packages with npx - callable function with additional methods\n * @example npx('create-react-app', ['my-app']) // run package directly\n * @example npx.concurrently(['npm:dev', 'npm:watch']) // run concurrently\n */\nexport const npx = Object.assign(\n (pkg: string, args?: string[]): Command => {\n return args ? ['npx', pkg, ...args] : ['npx', pkg];\n },\n {\n /**\n * Run commands in parallel with concurrently (requires npx)\n * @example npx.concurrently(['npm:dev', 'npm:watch'])\n * @example npx.concurrently(['npm run dev', 'npm run watch'], { names: ['dev', 'watch'], killOthers: true })\n */\n concurrently: (commands: string[], options?: { names?: string[]; killOthers?: boolean }): Command => {\n const args = ['npx', 'concurrently'];\n if (options?.killOthers) args.push('--kill-others');\n if (options?.names) args.push('--names', options.names.join(','));\n args.push(...commands);\n return args as Command;\n },\n }\n);\n\n/**\n * Run packages with bunx - callable function with additional methods\n * @example bunx('create-next-app', ['my-app']) // run package directly\n * @example bunx.concurrently(['npm:dev', 'npm:watch']) // run concurrently\n */\nexport const bunx = Object.assign(\n (pkg: string, args?: string[]): Command => {\n return args ? ['bunx', pkg, ...args] : ['bunx', pkg];\n },\n {\n /**\n * Run commands in parallel with concurrently (requires bunx)\n * @example bunx.concurrently(['npm:dev', 'npm:watch'])\n */\n concurrently: (commands: string[], options?: { names?: string[]; killOthers?: boolean }): Command => {\n const args = ['bunx', 'concurrently'];\n if (options?.killOthers) args.push('--kill-others');\n if (options?.names) args.push('--names', options.names.join(','));\n args.push(...commands);\n return args as Command;\n },\n }\n);\n\n/**\n * uv - Fast Python package manager\n */\nexport const uv = {\n /**\n * Install Python packages with uv\n * @example uv.install('requests')\n * @example uv.install('-r requirements.txt')\n */\n install: (pkg: string): Command => ['uv', 'pip', 'install', pkg],\n\n /**\n * Run Python script with uv\n * @example uv.run('script.py')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['uv', 'run', script, ...args] : ['uv', 'run', script];\n },\n\n /**\n * Sync dependencies from pyproject.toml\n * @example uv.sync()\n */\n sync: (): Command => ['uv', 'sync'],\n\n /**\n * Create virtual environment\n * @example uv.venv()\n * @example uv.venv('.venv')\n */\n venv: (path?: string): Command => {\n return path ? ['uv', 'venv', path] : ['uv', 'venv'];\n },\n};\n\n/**\n * poetry - Python dependency management\n */\nexport const poetry = {\n /**\n * Install dependencies\n * @example poetry.install()\n */\n install: (options?: { noRoot?: boolean }): Command => {\n const args = ['poetry', 'install'];\n if (options?.noRoot) args.push('--no-root');\n return args as Command;\n },\n\n /**\n * Add a dependency\n * @example poetry.add('requests')\n * @example poetry.add('pytest', { dev: true })\n */\n add: (pkg: string, options?: { dev?: boolean }): Command => {\n return options?.dev\n ? ['poetry', 'add', '--group', 'dev', pkg]\n : ['poetry', 'add', pkg];\n },\n\n /**\n * Run command in poetry environment\n * @example poetry.run('python', ['script.py'])\n */\n run: (command: string, args?: string[]): Command => {\n return args ? ['poetry', 'run', command, ...args] : ['poetry', 'run', command];\n },\n\n /**\n * Build package\n * @example poetry.build()\n */\n build: (): Command => ['poetry', 'build'],\n};\n\n/**\n * pipx - Install and run Python applications\n */\nexport const pipx = {\n /**\n * Install application globally\n * @example pipx.install('black')\n */\n install: (pkg: string): Command => ['pipx', 'install', pkg],\n\n /**\n * Run application without installing\n * @example pipx.run('black', ['--check', '.'])\n */\n run: (pkg: string, args?: string[]): Command => {\n return args ? ['pipx', 'run', pkg, ...args] : ['pipx', 'run', pkg];\n },\n\n /**\n * Uninstall application\n * @example pipx.uninstall('black')\n */\n uninstall: (pkg: string): Command => ['pipx', 'uninstall', pkg],\n\n /**\n * Upgrade application\n * @example pipx.upgrade('black')\n */\n upgrade: (pkg: string): Command => ['pipx', 'upgrade', pkg],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Git version control commands\n */\nexport const git = {\n /**\n * Clone repository\n * @example git.clone('https://github.com/user/repo.git')\n * @example git.clone('https://github.com/user/repo.git', { depth: 1 })\n */\n clone: (url: string, options?: { depth?: number; branch?: string; dir?: string }): Command => {\n const args = ['git', 'clone'];\n if (options?.depth) args.push('--depth', String(options.depth));\n if (options?.branch) args.push('-b', options.branch);\n args.push(url);\n if (options?.dir) args.push(options.dir);\n return args as Command;\n },\n\n /**\n * Pull latest changes\n * @example git.pull()\n */\n pull: (): Command => ['git', 'pull'],\n\n /**\n * Checkout branch\n * @example git.checkout('main')\n * @example git.checkout('feature', { create: true })\n */\n checkout: (branch: string, options?: { create?: boolean }): Command => {\n return options?.create\n ? ['git', 'checkout', '-b', branch]\n : ['git', 'checkout', branch];\n },\n\n /**\n * Git status\n * @example git.status()\n */\n status: (): Command => ['git', 'status'],\n\n /**\n * Stage files\n * @example git.add('.')\n * @example git.add('src/index.ts')\n */\n add: (path: string, options?: { all?: boolean }): Command => {\n return options?.all ? ['git', 'add', '-A', path] : ['git', 'add', path];\n },\n\n /**\n * Commit staged changes\n * @example git.commit('feat: add new feature')\n * @example git.commit('fix: bug fix', { all: true })\n */\n commit: (message: string, options?: { all?: boolean }): Command => {\n return options?.all\n ? ['git', 'commit', '-a', '-m', message]\n : ['git', 'commit', '-m', message];\n },\n\n /**\n * Push to remote\n * @example git.push()\n * @example git.push({ remote: 'origin', branch: 'main' })\n * @example git.push({ setUpstream: true, branch: 'feature' })\n */\n push: (options?: { remote?: string; branch?: string; setUpstream?: boolean; force?: boolean }): Command => {\n const args = ['git', 'push'];\n if (options?.setUpstream) args.push('-u');\n if (options?.force) args.push('--force');\n if (options?.remote) args.push(options.remote);\n if (options?.branch) args.push(options.branch);\n return args as Command;\n },\n\n /**\n * List or create branches\n * @example git.branch()\n * @example git.branch({ all: true })\n * @example git.branch('new-feature', { create: true })\n */\n branch: (name?: string, options?: { all?: boolean; delete?: boolean; create?: boolean }): Command => {\n const args = ['git', 'branch'];\n if (options?.all) args.push('-a');\n if (options?.delete) args.push('-d');\n if (name) args.push(name);\n return args as Command;\n },\n\n /**\n * Show changes\n * @example git.diff()\n * @example git.diff({ staged: true })\n * @example git.diff({ file: 'src/index.ts' })\n */\n diff: (options?: { staged?: boolean; file?: string }): Command => {\n const args = ['git', 'diff'];\n if (options?.staged) args.push('--staged');\n if (options?.file) args.push(options.file);\n return args as Command;\n },\n\n /**\n * Show commit history\n * @example git.log()\n * @example git.log({ oneline: true, count: 10 })\n */\n log: (options?: { oneline?: boolean; count?: number }): Command => {\n const args = ['git', 'log'];\n if (options?.oneline) args.push('--oneline');\n if (options?.count) args.push('-n', String(options.count));\n return args as Command;\n },\n\n /**\n * Stash changes\n * @example git.stash()\n * @example git.stash({ pop: true })\n * @example git.stash({ list: true })\n */\n stash: (options?: { pop?: boolean; list?: boolean; drop?: boolean; message?: string }): Command => {\n const args = ['git', 'stash'];\n if (options?.pop) args.push('pop');\n else if (options?.list) args.push('list');\n else if (options?.drop) args.push('drop');\n else if (options?.message) args.push('push', '-m', options.message);\n return args as Command;\n },\n\n /**\n * Fetch from remote\n * @example git.fetch()\n * @example git.fetch({ all: true })\n */\n fetch: (options?: { remote?: string; all?: boolean; prune?: boolean }): Command => {\n const args = ['git', 'fetch'];\n if (options?.all) args.push('--all');\n if (options?.prune) args.push('--prune');\n if (options?.remote) args.push(options.remote);\n return args as Command;\n },\n\n /**\n * Reset changes\n * @example git.reset()\n * @example git.reset({ hard: true })\n * @example git.reset({ ref: 'HEAD~1' })\n */\n reset: (options?: { hard?: boolean; soft?: boolean; ref?: string }): Command => {\n const args = ['git', 'reset'];\n if (options?.hard) args.push('--hard');\n if (options?.soft) args.push('--soft');\n if (options?.ref) args.push(options.ref);\n return args as Command;\n },\n\n /**\n * Initialize repository\n * @example git.init()\n */\n init: (): Command => ['git', 'init'],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Download file with curl\n * @example curl('https://example.com/file.tar.gz')\n * @example curl('https://example.com/file.tar.gz', { output: 'file.tar.gz' })\n */\nexport const curl = (url: string, options?: { output?: string; silent?: boolean }): Command => {\n const args = ['curl'];\n if (options?.silent) args.push('-s');\n args.push('-L'); // follow redirects\n if (options?.output) {\n args.push('-o', options.output);\n }\n args.push(url);\n return args as Command;\n};\n\n/**\n * Download file with wget\n * @example wget('https://example.com/file.tar.gz')\n * @example wget('https://example.com/file.tar.gz', { output: 'file.tar.gz' })\n */\nexport const wget = (url: string, options?: { output?: string; quiet?: boolean }): Command => {\n const args = ['wget'];\n if (options?.quiet) args.push('-q');\n if (options?.output) {\n args.push('-O', options.output);\n }\n args.push(url);\n return args as Command;\n};\n\n/**\n * Port management utilities\n */\nexport const port = {\n /**\n * Find process using a port (using lsof)\n * @example port.find(3000)\n */\n find: (p: number): Command => ['lsof', '-i', `:${p}`],\n\n /**\n * Kill process on a port\n * @example port.kill(3000)\n */\n kill: (p: number): Command => ['sh', '-c', `lsof -ti :${p} | xargs kill -9 2>/dev/null || true`],\n\n /**\n * Check if port is in use (exits 0 if in use)\n * @example port.isUsed(3000)\n */\n isUsed: (p: number): Command => ['sh', '-c', `lsof -i :${p} >/dev/null 2>&1`],\n\n /**\n * List all listening ports\n * @example port.list()\n */\n list: (): Command => ['ss', '-tlnp'],\n\n /**\n * Wait for port to be available (with timeout)\n * @example port.waitFor(3000, 30)\n */\n waitFor: (p: number, timeoutSeconds?: number): Command => {\n const timeout = timeoutSeconds ?? 30;\n return ['sh', '-c', `for i in $(seq 1 ${timeout}); do nc -z localhost ${p} && exit 0 || sleep 1; done; exit 1`];\n },\n};\n\n/**\n * Network utilities\n */\nexport const net = {\n /**\n * Check connectivity to host\n * @example net.ping('google.com')\n * @example net.ping('google.com', 3)\n */\n ping: (host: string, count?: number): Command => {\n return count ? ['ping', '-c', String(count), host] : ['ping', '-c', '1', host];\n },\n\n /**\n * Check if host:port is reachable\n * @example net.check('localhost', 3000)\n */\n check: (host: string, p: number): Command => ['nc', '-z', host, String(p)],\n\n /**\n * Get public IP\n * @example net.publicIp()\n */\n publicIp: (): Command => ['curl', '-s', 'ifconfig.me'],\n\n /**\n * Show network interfaces\n * @example net.interfaces()\n */\n interfaces: (): Command => ['ip', 'addr'],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Search for pattern in files\n * @example grep('TODO', 'src/*.ts')\n * @example grep('error', undefined, { recursive: true, ignoreCase: true })\n */\nexport const grep = (pattern: string, file?: string, options?: { recursive?: boolean; ignoreCase?: boolean; lineNumber?: boolean }): Command => {\n const args = ['grep'];\n if (options?.recursive) args.push('-r');\n if (options?.ignoreCase) args.push('-i');\n if (options?.lineNumber) args.push('-n');\n args.push(pattern);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Stream editor for filtering and transforming text\n * @example sed('s/foo/bar/g', 'file.txt')\n * @example sed('s/foo/bar/g', 'file.txt', { inPlace: true })\n */\nexport const sed = (expression: string, file: string, options?: { inPlace?: boolean }): Command => {\n return options?.inPlace\n ? ['sed', '-i', expression, file]\n : ['sed', expression, file];\n};\n\n/**\n * Output first lines of file\n * @example head('file.txt')\n * @example head('file.txt', 20)\n */\nexport const head = (file: string, lines?: number): Command => {\n return lines ? ['head', '-n', String(lines), file] : ['head', file];\n};\n\n/**\n * Output last lines of file\n * @example tail('file.txt')\n * @example tail('file.txt', 20)\n * @example tail('app.log', undefined, { follow: true })\n */\nexport const tail = (file: string, lines?: number, options?: { follow?: boolean }): Command => {\n const args = ['tail'];\n if (options?.follow) args.push('-f');\n if (lines) args.push('-n', String(lines));\n args.push(file);\n return args as Command;\n};\n\n/**\n * Word, line, character count\n * @example wc('file.txt')\n * @example wc('file.txt', { lines: true })\n */\nexport const wc = (file: string, options?: { lines?: boolean; words?: boolean; chars?: boolean }): Command => {\n const args = ['wc'];\n if (options?.lines) args.push('-l');\n if (options?.words) args.push('-w');\n if (options?.chars) args.push('-c');\n args.push(file);\n return args as Command;\n};\n\n/**\n * Sort lines of text\n * @example sort('file.txt')\n * @example sort('file.txt', { reverse: true, numeric: true })\n */\nexport const sort = (file: string, options?: { reverse?: boolean; numeric?: boolean; unique?: boolean }): Command => {\n const args = ['sort'];\n if (options?.reverse) args.push('-r');\n if (options?.numeric) args.push('-n');\n if (options?.unique) args.push('-u');\n args.push(file);\n return args as Command;\n};\n\n/**\n * Report or filter out repeated lines\n * @example uniq('file.txt')\n * @example uniq('file.txt', { count: true })\n */\nexport const uniq = (file: string, options?: { count?: boolean }): Command => {\n return options?.count ? ['uniq', '-c', file] : ['uniq', file];\n};\n\n/**\n * Process JSON with jq\n * @example jq('.name', 'data.json')\n * @example jq('.[] | .id') // for piping\n */\nexport const jq = (filter: string, file?: string, options?: { raw?: boolean; compact?: boolean }): Command => {\n const args = ['jq'];\n if (options?.raw) args.push('-r');\n if (options?.compact) args.push('-c');\n args.push(filter);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Build and execute commands from stdin\n * @example xargs('rm') // pipe file list to rm\n * @example xargs('grep', ['pattern'], { parallel: 4 })\n */\nexport const xargs = (command: string, args?: string[], options?: { parallel?: number; nullDelimited?: boolean }): Command => {\n const xargsArgs = ['xargs'];\n if (options?.nullDelimited) xargsArgs.push('-0');\n if (options?.parallel) xargsArgs.push('-P', String(options.parallel));\n xargsArgs.push(command);\n if (args) xargsArgs.push(...args);\n return xargsArgs as Command;\n};\n\n/**\n * Pattern scanning and processing\n * @example awk('{print $1}', 'file.txt')\n * @example awk('BEGIN {sum=0} {sum+=$1} END {print sum}', 'numbers.txt')\n */\nexport const awk = (program: string, file?: string, options?: { fieldSeparator?: string }): Command => {\n const args = ['awk'];\n if (options?.fieldSeparator) args.push('-F', options.fieldSeparator);\n args.push(program);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Extract columns/fields from lines\n * @example cut('file.txt', { fields: '1,3', delimiter: ',' })\n * @example cut('file.txt', { characters: '1-10' })\n */\nexport const cut = (file: string, options: { fields?: string; delimiter?: string; characters?: string }): Command => {\n const args = ['cut'];\n if (options.delimiter) args.push('-d', options.delimiter);\n if (options.fields) args.push('-f', options.fields);\n if (options.characters) args.push('-c', options.characters);\n args.push(file);\n return args as Command;\n};\n\n/**\n * Translate or delete characters\n * @example tr('a-z', 'A-Z') // uppercase\n * @example tr('\\n', ' ') // newlines to spaces\n * @example tr('', '', { delete: 'abc' }) // delete chars\n */\nexport const tr = (set1: string, set2?: string, options?: { delete?: string; squeeze?: boolean }): Command => {\n const args = ['tr'];\n if (options?.delete) {\n args.push('-d', options.delete);\n } else {\n if (options?.squeeze) args.push('-s');\n args.push(set1);\n if (set2) args.push(set2);\n }\n return args as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * Tar archive operations\n */\nexport const tar = {\n /**\n * Extract tar archive\n * @example tar.extract('archive.tar.gz')\n * @example tar.extract('archive.tar.gz', { dir: '/app' })\n */\n extract: (file: string, options?: { dir?: string }): Command => {\n const args = ['tar', '-xzf', file];\n if (options?.dir) args.push('-C', options.dir);\n return args as Command;\n },\n\n /**\n * Create tar archive\n * @example tar.create('archive.tar.gz', '/app/dist')\n */\n create: (output: string, source: string): Command => {\n return ['tar', '-czf', output, source];\n },\n};\n\n/**\n * Unzip archive\n * @example unzip('archive.zip')\n * @example unzip('archive.zip', { dir: '/app' })\n */\nexport const unzip = (file: string, options?: { dir?: string }): Command => {\n return options?.dir ? ['unzip', '-o', file, '-d', options.dir] : ['unzip', '-o', file];\n};\n","import type { Command } from '../types.js';\n\n/**\n * Print environment variable\n * @example echo('$HOME')\n * @example echo('Hello World')\n */\nexport const echo = (text: string): Command => ['echo', text];\n\n/**\n * Print environment variables\n * @example env()\n */\nexport const env = (): Command => ['env'];\n\n/**\n * Print specific environment variable\n * @example printenv('PATH')\n * @example printenv() // prints all\n */\nexport const printenv = (name?: string): Command => {\n return name ? ['printenv', name] : ['printenv'];\n};\n\n/**\n * Which command location\n * @example which('node')\n */\nexport const which = (command: string): Command => ['which', command];\n\n/**\n * Print current user\n * @example whoami()\n */\nexport const whoami = (): Command => ['whoami'];\n\n/**\n * Print system information\n * @example uname()\n * @example uname({ all: true })\n */\nexport const uname = (options?: { all?: boolean }): Command => {\n return options?.all ? ['uname', '-a'] : ['uname'];\n};\n\n/**\n * Print hostname\n * @example hostname()\n */\nexport const hostname = (): Command => ['hostname'];\n\n/**\n * Report disk space usage\n * @example df()\n * @example df('/app')\n */\nexport const df = (path?: string, options?: { human?: boolean }): Command => {\n const args = ['df'];\n if (options?.human) args.push('-h');\n if (path) args.push(path);\n return args as Command;\n};\n\n/**\n * Estimate file/directory space usage\n * @example du('/app')\n * @example du('/app', { human: true, summarize: true })\n */\nexport const du = (path: string, options?: { human?: boolean; summarize?: boolean }): Command => {\n const args = ['du'];\n if (options?.human) args.push('-h');\n if (options?.summarize) args.push('-s');\n args.push(path);\n return args as Command;\n};\n\n/**\n * Delay for specified seconds\n * @example sleep(5)\n */\nexport const sleep = (seconds: number): Command => ['sleep', String(seconds)];\n\n/**\n * Print date/time\n * @example date()\n * @example date('+%Y-%m-%d')\n */\nexport const date = (format?: string): Command => {\n return format ? ['date', format] : ['date'];\n};\n\n/**\n * Find files\n * @example find('/app', { name: '*.ts' })\n * @example find('/app', { type: 'f', name: '*.js' })\n */\nexport const find = (path: string, options?: { name?: string; type?: 'f' | 'd' }): Command => {\n const args = ['find', path];\n if (options?.type) args.push('-type', options.type);\n if (options?.name) args.push('-name', options.name);\n return args as Command;\n};\n\n/**\n * Write to file and stdout\n * @example tee('/app/output.log')\n * @example tee('/app/output.log', { append: true })\n */\nexport const tee = (file: string, options?: { append?: boolean }): Command => {\n return options?.append ? ['tee', '-a', file] : ['tee', file];\n};\n\n/**\n * Compare files\n * @example diff('file1.txt', 'file2.txt')\n * @example diff('file1.txt', 'file2.txt', { unified: true })\n */\nexport const diff = (file1: string, file2: string, options?: { unified?: boolean; brief?: boolean }): Command => {\n const args = ['diff'];\n if (options?.unified) args.push('-u');\n if (options?.brief) args.push('-q');\n args.push(file1, file2);\n return args as Command;\n};\n\n/**\n * Run multiple commands in parallel\n * @example parallel(['npm run dev', 'npm run watch'])\n */\nexport const parallel = (commands: string[], options?: { killOthers?: boolean }): Command => {\n const joined = commands.join(' & ');\n if (options?.killOthers) {\n // trap EXIT to kill all background jobs when any exits\n return ['sh', '-c', `trap \"kill 0\" EXIT; ${joined} & wait`];\n }\n return ['sh', '-c', `${joined} & wait`];\n};\n\n/**\n * Build a custom command from parts\n * @example raw('my-cli', ['--flag', 'value'])\n */\nexport const raw = (command: string, args?: string[]): Command => {\n return args ? [command, ...args] : [command];\n};\n\n/**\n * Base64 encoding/decoding utilities\n */\nexport const base64 = {\n /**\n * Encode to base64\n * @example base64.encode('file.txt')\n */\n encode: (file?: string): Command => {\n return file ? ['base64', file] : ['base64'];\n },\n\n /**\n * Decode from base64\n * @example base64.decode('encoded.txt')\n */\n decode: (file?: string): Command => {\n return file ? ['base64', '-d', file] : ['base64', '-d'];\n },\n};\n\n/**\n * Compute MD5 checksum\n * @example md5sum('file.txt')\n * @example md5sum('file.txt', { check: true })\n */\nexport const md5sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['md5sum', '-c', file] : ['md5sum', file];\n};\n\n/**\n * Compute SHA256 checksum\n * @example sha256sum('file.txt')\n * @example sha256sum('file.txt', { check: true })\n */\nexport const sha256sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['sha256sum', '-c', file] : ['sha256sum', file];\n};\n\n/**\n * Compute SHA1 checksum\n * @example sha1sum('file.txt')\n */\nexport const sha1sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['sha1sum', '-c', file] : ['sha1sum', file];\n};\n","import type { Command } from '../types.js';\n\n/**\n * ComputeSDK CLI installation and management utilities\n */\n\n/**\n * Detect if we're running in an interactive TTY environment.\n * Checks both stdin and stdout since either being a TTY indicates interactive use.\n */\nconst isTTYEnvironment = (): boolean => {\n if (typeof process === 'undefined') return false;\n return Boolean(process.stdin?.isTTY || process.stdout?.isTTY);\n};\n\n/**\n * Install the ComputeSDK CLI in a sandbox\n *\n * This command downloads and runs the official ComputeSDK installer.\n * The CLI provides the full ComputeSDK API (terminals, watchers, signals, etc.)\n * in any sandbox environment.\n *\n * By default, interactive mode is only enabled when running in a TTY environment.\n * In non-TTY environments (CI pipelines, scripts), the installer runs non-interactively.\n *\n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n *\n * // Install compute in a raw E2B/Daytona/etc sandbox\n * await sandbox.runCommand(compute.install({ apiKey: process.env.COMPUTESDK_API_KEY }));\n *\n * // Force interactive mode (allow prompts)\n * await sandbox.runCommand(compute.install({ interactive: true }));\n * ```\n *\n * @param options Installation options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.version Specific version to install (default: latest)\n * @param options.silent Suppress installation output (default: false)\n * @param options.interactive Enable interactive mode with prompts (default: auto-detected based on TTY)\n * @returns Command tuple for installing the compute CLI\n */\nexport const install = (options?: {\n apiKey?: string;\n version?: string;\n silent?: boolean;\n interactive?: boolean;\n}): Command => {\n const installUrl = options?.version\n ? `https://computesdk.com/install.sh?version=${options.version}`\n : 'https://computesdk.com/install.sh';\n\n const curlFlags = options?.silent ? '-fsSL' : '-fSL';\n\n // Auto-detect interactive mode: default to interactive only when in a TTY\n const isInteractive = options?.interactive ?? isTTYEnvironment();\n\n // Build the install command with optional flags\n let installCmd = isInteractive\n ? `curl ${curlFlags} ${installUrl} | bash -s`\n : `curl ${curlFlags} ${installUrl} | bash -s -- --non-interactive`;\n\n // If API key is provided, set it as environment variable for the install script\n if (options?.apiKey) {\n installCmd = `COMPUTESDK_API_KEY=\"${options.apiKey}\" ${installCmd}`;\n } else if (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY) {\n // Fallback to process.env if available\n installCmd = `COMPUTESDK_API_KEY=\"${process.env.COMPUTESDK_API_KEY}\" ${installCmd}`;\n }\n\n // Use sh -c to pipe curl output to bash\n return ['sh', '-c', installCmd];\n};\n\n/**\n * Check if the ComputeSDK CLI is installed\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.isInstalled());\n * const installed = result.exitCode === 0;\n * ```\n * \n * @returns Command tuple that exits 0 if installed, 1 if not\n */\nexport const isInstalled = (): Command => {\n return ['sh', '-c', 'which compute > /dev/null 2>&1'];\n};\n\n/**\n * Get the installed compute version\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.version());\n * console.log('Version:', result.stdout.trim());\n * ```\n * \n * @returns Command tuple to get compute version\n */\nexport const version = (): Command => {\n return ['compute', '--version'];\n};\n\n/**\n * Start the ComputeSDK daemon\n *\n * Note: The daemon usually auto-starts after installation.\n * This is mainly useful for restarting or manual control.\n *\n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n *\n * // With API key\n * await sandbox.runCommand(compute.start({ apiKey: process.env.COMPUTESDK_API_KEY }), { background: true });\n *\n * // With access token\n * await sandbox.runCommand(compute.start({ accessToken: process.env.ACCESS_TOKEN }), { background: true });\n *\n * // Wait for daemon to be healthy before returning (useful for CI/CD)\n * await sandbox.runCommand(compute.start({ apiKey: 'key', wait: true }));\n *\n * // Wait with custom timeout\n * await sandbox.runCommand(compute.start({ apiKey: 'key', wait: true, waitTimeout: 60 }));\n * ```\n *\n * @param options Start options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.accessToken Access token for authentication (alternative to apiKey)\n * @param options.port Port to listen on (default: 18080)\n * @param options.logLevel Log level (default: 'info')\n * @param options.wait Wait for daemon to be healthy before returning (default: false)\n * @param options.waitTimeout Timeout in seconds when waiting for health (default: 30)\n * @returns Command tuple to start the daemon\n */\nexport const start = (options?: {\n apiKey?: string;\n accessToken?: string;\n port?: number;\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\n wait?: boolean;\n waitTimeout?: number;\n}): Command => {\n const args = ['compute', 'start'];\n\n const apiKey =\n options?.apiKey || (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n const accessToken = options?.accessToken;\n\n // Prefer access token over API key if both are provided\n if (accessToken) {\n args.push('--access-token', accessToken);\n } else if (apiKey) {\n args.push('--api-key', apiKey);\n }\n\n if (options?.port) {\n args.push('--port', String(options.port));\n }\n\n if (options?.logLevel === 'debug') {\n args.push('--verbose');\n }\n\n if (options?.wait) {\n args.push('--wait');\n if (options.waitTimeout) {\n args.push('--wait-timeout', String(options.waitTimeout));\n }\n }\n\n return args as Command;\n};\n\n/**\n * Stop the ComputeSDK daemon\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * await sandbox.runCommand(compute.stop());\n * ```\n * \n * @returns Command tuple to stop the daemon\n */\nexport const stop = (): Command => {\n return ['pkill', '-f', 'compute start'];\n};\n\n/**\n * Check daemon health status\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.health());\n * const healthy = result.exitCode === 0;\n * ```\n * \n * @param options Health check options\n * @param options.host Host to check (default: 'localhost')\n * @param options.port Port to check (default: 18080)\n * @returns Command tuple to check daemon health\n */\nexport const health = (options?: {\n host?: string;\n port?: number;\n}): Command => {\n const host = options?.host || 'localhost';\n const port = options?.port || 18080;\n return ['sh', '-c', `curl -f http://${host}:${port}/health > /dev/null 2>&1`];\n};\n\n/**\n * Check if compute daemon is set up and running\n * \n * Returns exit code 0 if daemon is installed and running (ready to use)\n * Returns exit code 1 if setup is needed (not installed or not running)\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.isSetup());\n * if (result.exitCode === 0) {\n * console.log('Daemon is ready!');\n * } else {\n * console.log('Setup needed');\n * await sandbox.runCommand(compute.setup({ apiKey: 'key' }));\n * }\n * ```\n * \n * @param options Setup check options\n * @param options.host Host to check (default: 'localhost')\n * @param options.port Port to check (default: 18080)\n * @returns Command that exits 0 if setup, 1 if setup needed\n */\nexport const isSetup = (options?: {\n host?: string;\n port?: number;\n}): Command => {\n const host = options?.host || 'localhost';\n const port = options?.port || 18080;\n \n return ['sh', '-c', `\n if ! which compute > /dev/null 2>&1; then\n exit 1\n fi\n if ! curl -f http://${host}:${port}/health > /dev/null 2>&1; then\n exit 1\n fi\n exit 0\n `.trim()];\n};\n\n/**\n * Install and start the ComputeSDK daemon in one command\n *\n * This is a convenience method that installs the compute CLI and starts the daemon.\n * Useful for quickly setting up a sandbox with ComputeSDK capabilities.\n *\n * By default, interactive mode is only enabled when running in a TTY environment.\n * In non-TTY environments (CI pipelines, scripts), the installer runs non-interactively.\n *\n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n *\n * // Quick setup with API key\n * await sandbox.runCommand(compute.setup({ apiKey: process.env.COMPUTESDK_API_KEY }));\n *\n * // Force interactive mode (allow prompts)\n * await sandbox.runCommand(compute.setup({ apiKey: 'key', interactive: true }));\n *\n * // Wait for daemon to be healthy before returning (useful for CI/CD)\n * await sandbox.runCommand(compute.setup({ apiKey: 'key', wait: true }));\n * ```\n *\n * @param options Setup options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.accessToken Access token for authentication (alternative to apiKey)\n * @param options.port Port to listen on (default: 18080)\n * @param options.version Specific version to install (default: latest)\n * @param options.silent Suppress installation output (default: false)\n * @param options.interactive Enable interactive mode with prompts (default: auto-detected based on TTY)\n * @param options.wait Wait for daemon to be healthy before returning (default: false)\n * @param options.waitTimeout Timeout in seconds when waiting for health (default: 30)\n * @returns Command tuple for installing and starting the daemon\n */\nexport const setup = (options?: {\n apiKey?: string;\n accessToken?: string;\n port?: number;\n version?: string;\n silent?: boolean;\n interactive?: boolean;\n wait?: boolean;\n waitTimeout?: number;\n}): Command => {\n const apiKey = options?.apiKey || (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n const accessToken = options?.accessToken;\n\n const installUrl = options?.version\n ? `https://computesdk.com/install.sh?version=${options.version}`\n : 'https://computesdk.com/install.sh';\n\n const curlFlags = options?.silent ? '-fsSL' : '-fSL';\n\n // Auto-detect interactive mode: default to interactive only when in a TTY\n const isInteractive = options?.interactive ?? isTTYEnvironment();\n\n // Build install command with optional flags\n let installCmd = isInteractive\n ? `curl ${curlFlags} ${installUrl} | bash -s`\n : `curl ${curlFlags} ${installUrl} | bash -s -- --non-interactive`;\n\n // Add API key to install if provided\n if (apiKey) {\n installCmd = `COMPUTESDK_API_KEY=\"${apiKey}\" ${installCmd}`;\n }\n\n // Build start command\n let startCmd = 'compute start';\n\n // Add authentication flags\n if (accessToken) {\n startCmd += ` --access-token \"${accessToken}\"`;\n } else if (apiKey) {\n startCmd += ` --api-key \"${apiKey}\"`;\n }\n\n if (options?.port) {\n startCmd += ` --port ${options.port}`;\n }\n\n if (options?.wait) {\n startCmd += ' --wait';\n if (options.waitTimeout) {\n startCmd += ` --wait-timeout ${options.waitTimeout}`;\n }\n }\n\n // Combine: install, then start\n // If waiting, run in foreground so we block until healthy\n // Otherwise run in background for backwards compatibility\n const fullCmd = options?.wait\n ? `${installCmd} && ${startCmd}`\n : `${installCmd} && ${startCmd} > /dev/null 2>&1 &`;\n\n return ['sh', '-c', fullCmd];\n};\n\n/**\n * ComputeSDK CLI management utilities\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // Quick setup (install + start)\n * await sandbox.runCommand(compute.setup({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * \n * // Or install and start separately\n * await sandbox.runCommand(compute.install());\n * await sandbox.runCommand(compute.start({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * \n * // Check if installed\n * const result = await sandbox.runCommand(compute.isInstalled());\n * if (result.exitCode === 0) {\n * console.log('Compute is installed!');\n * }\n * \n * // Get version\n * const versionResult = await sandbox.runCommand(compute.version());\n * console.log('Version:', versionResult.stdout);\n * ```\n */\nexport const compute = {\n install,\n isInstalled,\n version,\n start,\n stop,\n health,\n setup,\n isSetup,\n};\n"],"mappings":"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","names":["awk","base64","bun","bunx","cat","chmod","chown","compute","cp","curl","cut","date","deno","df","diff","du","echo","env","find","git","grep","head","hostname","jq","kill","ln","ls","md5sum","mkdir","mv","net","node","npm","npx","parallel","pip","pipx","pkill","pnpm","poetry","port","printenv","ps","pwd","python","raw","readlink","rm","rsync","sed","sha1sum","sha256sum","sleep","sort","tail","tar","tee","test","timeout","touch","tr","uname","uniq","unzip","uv","wc","wget","which","whoami","xargs","yarn","timeout","port","mkdir","rm","cp","mv","ls","pwd","chmod","chown","touch","cat","ln","readlink","test","rsync","node","python","kill","pkill","ps","timeout","npm","pnpm","yarn","pip","bun","deno","npx","bunx","uv","poetry","pipx","git","curl","wget","port","net","grep","sed","head","tail","wc","sort","uniq","jq","xargs","awk","cut","tr","tar","unzip","echo","env","printenv","which","whoami","uname","hostname","df","du","sleep","date","find","tee","diff","parallel","raw","base64","md5sum","sha256sum","sha1sum","compute"]}
package/dist/index.d.cts CHANGED
@@ -110,10 +110,12 @@ declare const cmd: ((command: Command, options?: {
110
110
  cwd?: string;
111
111
  background?: boolean;
112
112
  }) => Command) & {
113
- install: (options?: {
113
+ install: (// Callable: shell wrapper with sh default
114
+ options?: {
114
115
  apiKey?: string;
115
116
  version?: string;
116
117
  silent?: boolean;
118
+ interactive?: boolean;
117
119
  }) => Command;
118
120
  isInstalled: () => Command;
119
121
  version: () => Command;
@@ -122,6 +124,8 @@ declare const cmd: ((command: Command, options?: {
122
124
  accessToken?: string;
123
125
  port?: number;
124
126
  logLevel?: "debug" | "info" | "warn" | "error";
127
+ wait?: boolean;
128
+ waitTimeout?: number;
125
129
  }) => Command;
126
130
  stop: () => Command;
127
131
  health: (options?: {
@@ -138,12 +142,16 @@ declare const cmd: ((command: Command, options?: {
138
142
  port?: number;
139
143
  version?: string;
140
144
  silent?: boolean;
145
+ interactive?: boolean;
146
+ wait?: boolean;
147
+ waitTimeout?: number;
141
148
  }) => Command;
142
149
  compute: {
143
150
  install: (options?: {
144
151
  apiKey?: string;
145
152
  version?: string;
146
153
  silent?: boolean;
154
+ interactive?: boolean;
147
155
  }) => Command;
148
156
  isInstalled: () => Command;
149
157
  version: () => Command;
@@ -152,6 +160,8 @@ declare const cmd: ((command: Command, options?: {
152
160
  accessToken?: string;
153
161
  port?: number;
154
162
  logLevel?: "debug" | "info" | "warn" | "error";
163
+ wait?: boolean;
164
+ waitTimeout?: number;
155
165
  }) => Command;
156
166
  stop: () => Command;
157
167
  health: (options?: {
@@ -164,6 +174,9 @@ declare const cmd: ((command: Command, options?: {
164
174
  port?: number;
165
175
  version?: string;
166
176
  silent?: boolean;
177
+ interactive?: boolean;
178
+ wait?: boolean;
179
+ waitTimeout?: number;
167
180
  }) => Command;
168
181
  isSetup: (options?: {
169
182
  host?: string;
@@ -802,6 +815,7 @@ declare const compute: {
802
815
  apiKey?: string;
803
816
  version?: string;
804
817
  silent?: boolean;
818
+ interactive?: boolean;
805
819
  }) => Command;
806
820
  isInstalled: () => Command;
807
821
  version: () => Command;
@@ -810,6 +824,8 @@ declare const compute: {
810
824
  accessToken?: string;
811
825
  port?: number;
812
826
  logLevel?: "debug" | "info" | "warn" | "error";
827
+ wait?: boolean;
828
+ waitTimeout?: number;
813
829
  }) => Command;
814
830
  stop: () => Command;
815
831
  health: (options?: {
@@ -822,6 +838,9 @@ declare const compute: {
822
838
  port?: number;
823
839
  version?: string;
824
840
  silent?: boolean;
841
+ interactive?: boolean;
842
+ wait?: boolean;
843
+ waitTimeout?: number;
825
844
  }) => Command;
826
845
  isSetup: (options?: {
827
846
  host?: string;
package/dist/index.d.ts CHANGED
@@ -110,10 +110,12 @@ declare const cmd: ((command: Command, options?: {
110
110
  cwd?: string;
111
111
  background?: boolean;
112
112
  }) => Command) & {
113
- install: (options?: {
113
+ install: (// Callable: shell wrapper with sh default
114
+ options?: {
114
115
  apiKey?: string;
115
116
  version?: string;
116
117
  silent?: boolean;
118
+ interactive?: boolean;
117
119
  }) => Command;
118
120
  isInstalled: () => Command;
119
121
  version: () => Command;
@@ -122,6 +124,8 @@ declare const cmd: ((command: Command, options?: {
122
124
  accessToken?: string;
123
125
  port?: number;
124
126
  logLevel?: "debug" | "info" | "warn" | "error";
127
+ wait?: boolean;
128
+ waitTimeout?: number;
125
129
  }) => Command;
126
130
  stop: () => Command;
127
131
  health: (options?: {
@@ -138,12 +142,16 @@ declare const cmd: ((command: Command, options?: {
138
142
  port?: number;
139
143
  version?: string;
140
144
  silent?: boolean;
145
+ interactive?: boolean;
146
+ wait?: boolean;
147
+ waitTimeout?: number;
141
148
  }) => Command;
142
149
  compute: {
143
150
  install: (options?: {
144
151
  apiKey?: string;
145
152
  version?: string;
146
153
  silent?: boolean;
154
+ interactive?: boolean;
147
155
  }) => Command;
148
156
  isInstalled: () => Command;
149
157
  version: () => Command;
@@ -152,6 +160,8 @@ declare const cmd: ((command: Command, options?: {
152
160
  accessToken?: string;
153
161
  port?: number;
154
162
  logLevel?: "debug" | "info" | "warn" | "error";
163
+ wait?: boolean;
164
+ waitTimeout?: number;
155
165
  }) => Command;
156
166
  stop: () => Command;
157
167
  health: (options?: {
@@ -164,6 +174,9 @@ declare const cmd: ((command: Command, options?: {
164
174
  port?: number;
165
175
  version?: string;
166
176
  silent?: boolean;
177
+ interactive?: boolean;
178
+ wait?: boolean;
179
+ waitTimeout?: number;
167
180
  }) => Command;
168
181
  isSetup: (options?: {
169
182
  host?: string;
@@ -802,6 +815,7 @@ declare const compute: {
802
815
  apiKey?: string;
803
816
  version?: string;
804
817
  silent?: boolean;
818
+ interactive?: boolean;
805
819
  }) => Command;
806
820
  isInstalled: () => Command;
807
821
  version: () => Command;
@@ -810,6 +824,8 @@ declare const compute: {
810
824
  accessToken?: string;
811
825
  port?: number;
812
826
  logLevel?: "debug" | "info" | "warn" | "error";
827
+ wait?: boolean;
828
+ waitTimeout?: number;
813
829
  }) => Command;
814
830
  stop: () => Command;
815
831
  health: (options?: {
@@ -822,6 +838,9 @@ declare const compute: {
822
838
  port?: number;
823
839
  version?: string;
824
840
  silent?: boolean;
841
+ interactive?: boolean;
842
+ wait?: boolean;
843
+ waitTimeout?: number;
825
844
  }) => Command;
826
845
  isSetup: (options?: {
827
846
  host?: string;
package/dist/index.js CHANGED
@@ -946,10 +946,15 @@ __export(compute_exports, {
946
946
  stop: () => stop,
947
947
  version: () => version
948
948
  });
949
+ var isTTYEnvironment = () => {
950
+ if (typeof process === "undefined") return false;
951
+ return Boolean(process.stdin?.isTTY || process.stdout?.isTTY);
952
+ };
949
953
  var install = (options) => {
950
954
  const installUrl = options?.version ? `https://computesdk.com/install.sh?version=${options.version}` : "https://computesdk.com/install.sh";
951
955
  const curlFlags = options?.silent ? "-fsSL" : "-fSL";
952
- let installCmd = `curl ${curlFlags} ${installUrl} | bash`;
956
+ const isInteractive = options?.interactive ?? isTTYEnvironment();
957
+ let installCmd = isInteractive ? `curl ${curlFlags} ${installUrl} | bash -s` : `curl ${curlFlags} ${installUrl} | bash -s -- --non-interactive`;
953
958
  if (options?.apiKey) {
954
959
  installCmd = `COMPUTESDK_API_KEY="${options.apiKey}" ${installCmd}`;
955
960
  } else if (typeof process !== "undefined" && process.env?.COMPUTESDK_API_KEY) {
@@ -978,6 +983,12 @@ var start = (options) => {
978
983
  if (options?.logLevel === "debug") {
979
984
  args.push("--verbose");
980
985
  }
986
+ if (options?.wait) {
987
+ args.push("--wait");
988
+ if (options.waitTimeout) {
989
+ args.push("--wait-timeout", String(options.waitTimeout));
990
+ }
991
+ }
981
992
  return args;
982
993
  };
983
994
  var stop = () => {
@@ -1006,7 +1017,8 @@ var setup = (options) => {
1006
1017
  const accessToken = options?.accessToken;
1007
1018
  const installUrl = options?.version ? `https://computesdk.com/install.sh?version=${options.version}` : "https://computesdk.com/install.sh";
1008
1019
  const curlFlags = options?.silent ? "-fsSL" : "-fSL";
1009
- let installCmd = `curl ${curlFlags} ${installUrl} | bash`;
1020
+ const isInteractive = options?.interactive ?? isTTYEnvironment();
1021
+ let installCmd = isInteractive ? `curl ${curlFlags} ${installUrl} | bash -s` : `curl ${curlFlags} ${installUrl} | bash -s -- --non-interactive`;
1010
1022
  if (apiKey) {
1011
1023
  installCmd = `COMPUTESDK_API_KEY="${apiKey}" ${installCmd}`;
1012
1024
  }
@@ -1019,7 +1031,13 @@ var setup = (options) => {
1019
1031
  if (options?.port) {
1020
1032
  startCmd += ` --port ${options.port}`;
1021
1033
  }
1022
- const fullCmd = `${installCmd} && ${startCmd} > /dev/null 2>&1 &`;
1034
+ if (options?.wait) {
1035
+ startCmd += " --wait";
1036
+ if (options.waitTimeout) {
1037
+ startCmd += ` --wait-timeout ${options.waitTimeout}`;
1038
+ }
1039
+ }
1040
+ const fullCmd = options?.wait ? `${installCmd} && ${startCmd}` : `${installCmd} && ${startCmd} > /dev/null 2>&1 &`;
1023
1041
  return ["sh", "-c", fullCmd];
1024
1042
  };
1025
1043
  var compute = {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/shell.ts","../src/commands/filesystem.ts","../src/commands/process.ts","../src/commands/packages.ts","../src/commands/git.ts","../src/commands/network.ts","../src/commands/text.ts","../src/commands/archive.ts","../src/commands/system.ts","../src/commands/compute.ts","../src/index.ts"],"sourcesContent":["import type { Command, ShellOptions } from './types.js';\n\n/**\n * Escape a string for safe use in shell commands using single quotes.\n * This is the safest method as single quotes preserve all characters literally,\n * except for single quotes themselves which must be handled specially.\n *\n * @example shellEscape(\"hello world\") // \"'hello world'\"\n * @example shellEscape(\"it's here\") // \"'it'\\\\''s here'\"\n * @example shellEscape(\"$HOME\") // \"'$HOME'\" (no variable expansion)\n */\nexport function shellEscape(s: string): string {\n // Wrap in single quotes and escape any embedded single quotes\n // 'foo'bar' becomes 'foo'\\''bar' (end quote, escaped quote, start quote)\n return \"'\" + s.replace(/'/g, \"'\\\\''\") + \"'\";\n}\n\n/**\n * Escape a string for use inside double quotes.\n *\n * This is a legacy helper kept for backward compatibility; for new code,\n * prefer {@link shellEscape} which uses single-quoted, safer shell escaping.\n *\n * @example esc('path with \"quotes\"') // 'path with \\\\\"quotes\\\\\"'\n * @deprecated Use {@link shellEscape} for safer escaping. This function only escapes\n * double quotes and may not be safe for all shell contexts. Migration: replace\n * `esc(str)` with `shellEscape(str)`.\n */\nexport function esc(s: string): string {\n return s.replace(/\"/g, '\\\\\"');\n}\n\n/**\n * Escape each argument in a command array and join them with spaces.\n * Arguments that are safe (alphanumeric, dash, underscore, dot, slash, colon, equals)\n * are left unquoted for readability.\n *\n * @example escapeArgs(['npm', 'install', 'express']) // 'npm install express'\n * @example escapeArgs(['echo', 'hello world']) // \"echo 'hello world'\"\n * @example escapeArgs(['cp', 'file with spaces.txt', '/dest']) // \"cp 'file with spaces.txt' /dest\"\n */\nexport function escapeArgs(args: string[]): string {\n return args.map(arg => {\n // If arg contains only safe characters, no escaping needed\n if (/^[a-zA-Z0-9_./:=@-]+$/.test(arg) && arg.length > 0) {\n return arg;\n }\n // Otherwise, use shellEscape for safety\n return shellEscape(arg);\n }).join(' ');\n}\n\n/**\n * Internal helper to build shell command with proper escaping\n */\nexport function buildShellCommand(shellBin: string, command: Command, options?: ShellOptions): Command {\n if (!options?.cwd && !options?.background) {\n return command;\n }\n\n let cmdStr = escapeArgs(command);\n\n // Build command: first wrap with nohup if background, then prepend cd if cwd\n // Result: cd '/path' && nohup cmd > /dev/null 2>&1 &\n if (options.background) {\n cmdStr = `nohup ${cmdStr} > /dev/null 2>&1 &`;\n }\n\n if (options.cwd) {\n cmdStr = `cd ${shellEscape(options.cwd)} && ${cmdStr}`;\n }\n\n return [shellBin, '-c', cmdStr];\n}\n","import type { Command, ShellOptions } from './types.js';\nimport { buildShellCommand } from './utils.js';\n\n/**\n * Shell wrapper - callable function with shell-specific methods\n *\n * @example\n * // Default (sh)\n * shell(cmd.npm.install(), { cwd: '/app' })\n * // => ['sh', '-c', 'cd \"/app\" && npm install']\n *\n * @example\n * // Shell-specific\n * shell.bash(cmd.node('server.js'), { background: true })\n * // => ['bash', '-c', 'nohup node server.js > /dev/null 2>&1 &']\n *\n * @example\n * shell.zsh(cmd.npm.run('dev'), { cwd: '/app' })\n * // => ['zsh', '-c', 'cd \"/app\" && npm run dev']\n */\nexport const shell = Object.assign(\n // Default: use sh\n (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('sh', command, options);\n },\n {\n /** Wrap with sh (POSIX shell) */\n sh: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('sh', command, options);\n },\n /** Wrap with bash */\n bash: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('bash', command, options);\n },\n /** Wrap with zsh */\n zsh: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('zsh', command, options);\n },\n }\n);\n\n// Individual shell exports\nexport const sh = shell.sh;\nexport const bash = shell.bash;\nexport const zsh = shell.zsh;\n","import type { Command } from '../types.js';\n\n/**\n * Create directory\n *\n * By default, recursive is true (includes -p flag to create parent directories).\n * This differs from standard shell mkdir which requires explicit -p flag.\n *\n * @example mkdir('/app/src') // ['mkdir', '-p', '/app/src']\n * @example mkdir('/app/src', { recursive: false }) // ['mkdir', '/app/src']\n */\nexport const mkdir = (path: string, options?: { recursive?: boolean }): Command => {\n const recursive = options?.recursive ?? true;\n return recursive ? ['mkdir', '-p', path] : ['mkdir', path];\n};\n\n/**\n * Remove file or directory\n * @example rm('/app/file.txt') // ['rm', '/app/file.txt']\n * @example rm('/app/tmp', { recursive: true }) // ['rm', '-r', '/app/tmp']\n * @example rm('/app/tmp', { recursive: true, force: true }) // ['rm', '-rf', '/app/tmp']\n * @example rm.rf('/app/tmp') // ['rm', '-rf', '/app/tmp']\n * @example rm.auto('/app/anything') // Automatically detects file vs directory\n */\nexport const rm = Object.assign(\n (path: string, options?: { recursive?: boolean; force?: boolean }): Command => {\n const flags: string[] = [];\n if (options?.recursive) flags.push('r');\n if (options?.force) flags.push('f');\n return flags.length > 0 ? ['rm', `-${flags.join('')}`, path] : ['rm', path];\n },\n {\n /**\n * Force remove file or directory (always uses -rf)\n * @example rm.rf('/app/tmp')\n */\n rf: (path: string): Command => ['rm', '-rf', path],\n \n /**\n * Smart remove - automatically detects if path is a directory and uses appropriate flags\n * Uses a shell one-liner to check if directory and apply -r flag accordingly\n * @example rm.auto('/app/tmp')\n */\n auto: (path: string): Command => {\n // Shell one-liner: if it's a directory, use -rf, otherwise just rm -f\n return ['sh', '-c', `if [ -d \"${path}\" ]; then rm -rf \"${path}\"; else rm -f \"${path}\"; fi`];\n }\n }\n);\n\n/**\n * Copy file or directory\n * @example cp('/src/file.txt', '/dest/file.txt')\n */\nexport const cp = (src: string, dest: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['cp', '-r', src, dest] : ['cp', src, dest];\n};\n\n/**\n * Move/rename file or directory\n * @example mv('/old/path', '/new/path')\n */\nexport const mv = (src: string, dest: string): Command => ['mv', src, dest];\n\n/**\n * List directory contents\n * @example ls('/app') // ['ls', '/app']\n * @example ls('/app', { all: true, long: true }) // ['ls', '-la', '/app']\n */\nexport const ls = (path?: string, options?: { all?: boolean; long?: boolean }): Command => {\n const flags: string[] = [];\n if (options?.long) flags.push('l');\n if (options?.all) flags.push('a');\n const flagStr = flags.length > 0 ? `-${flags.join('')}` : '';\n if (flagStr && path) return ['ls', flagStr, path];\n if (flagStr) return ['ls', flagStr];\n if (path) return ['ls', path];\n return ['ls'];\n};\n\n/**\n * Print working directory\n * @example pwd() // ['pwd']\n */\nexport const pwd = (): Command => ['pwd'];\n\n/**\n * Change file permissions\n * @example chmod('755', '/app/script.sh')\n */\nexport const chmod = (mode: string, path: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['chmod', '-R', mode, path] : ['chmod', mode, path];\n};\n\n/**\n * Change file owner/group\n * @example chown('user', '/app/file.txt')\n * @example chown('user:group', '/app', { recursive: true })\n */\nexport const chown = (owner: string, path: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['chown', '-R', owner, path] : ['chown', owner, path];\n};\n\n/**\n * Create empty file or update timestamp\n * @example touch('/app/newfile.txt')\n */\nexport const touch = (path: string): Command => ['touch', path];\n\n/**\n * Read file contents\n * @example cat('/app/file.txt')\n */\nexport const cat = (path: string): Command => ['cat', path];\n\n/**\n * Create symbolic link\n * @example ln('/app/config', '/etc/app/config')\n * @example ln('/app/config', '/etc/app/config', { symbolic: true, force: true })\n */\nexport const ln = (target: string, link: string, options?: { symbolic?: boolean; force?: boolean }): Command => {\n const args = ['ln'];\n if (options?.symbolic !== false) args.push('-s'); // symbolic by default\n if (options?.force) args.push('-f');\n args.push(target, link);\n return args as Command;\n};\n\n/**\n * Resolve symbolic link\n * @example readlink('/usr/bin/python')\n * @example readlink('/usr/bin/python', { canonical: true })\n */\nexport const readlink = (path: string, options?: { canonical?: boolean }): Command => {\n return options?.canonical ? ['readlink', '-f', path] : ['readlink', path];\n};\n\n/**\n * Filesystem checks (exit 0 if true, 1 if false)\n * @example test.exists('/app/file.txt')\n * @example test.isDir('/app')\n */\nexport const test = {\n exists: (path: string): Command => ['test', '-e', path],\n isFile: (path: string): Command => ['test', '-f', path],\n isDir: (path: string): Command => ['test', '-d', path],\n isReadable: (path: string): Command => ['test', '-r', path],\n isWritable: (path: string): Command => ['test', '-w', path],\n isExecutable: (path: string): Command => ['test', '-x', path],\n notEmpty: (path: string): Command => ['test', '-s', path],\n isSymlink: (path: string): Command => ['test', '-L', path],\n};\n\n/**\n * Sync files/directories with rsync\n * @example rsync('/src/', '/dest/')\n * @example rsync('/src/', 'user@host:/dest/', { archive: true, compress: true })\n */\nexport const rsync = (src: string, dest: string, options?: {\n archive?: boolean;\n verbose?: boolean;\n compress?: boolean;\n delete?: boolean;\n dryRun?: boolean;\n exclude?: string[];\n}): Command => {\n const args = ['rsync'];\n if (options?.archive) args.push('-a');\n if (options?.verbose) args.push('-v');\n if (options?.compress) args.push('-z');\n if (options?.delete) args.push('--delete');\n if (options?.dryRun) args.push('--dry-run');\n if (options?.exclude) {\n for (const pattern of options.exclude) {\n args.push('--exclude', pattern);\n }\n }\n args.push(src, dest);\n return args as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * Run Node.js script\n * @example node('server.js')\n * @example node('server.js', ['--port', '3000'])\n */\nexport const node = (script: string, args?: string[]): Command => {\n return args ? ['node', script, ...args] : ['node', script];\n};\n\n/**\n * Run Python script\n * @example python('script.py')\n * @example python('script.py', ['--verbose'])\n */\nexport const python = (script: string, args?: string[]): Command => {\n return args ? ['python3', script, ...args] : ['python3', script];\n};\n\n/**\n * Kill process by PID\n * @example kill(1234)\n * @example kill(1234, 9) // SIGKILL\n */\nexport const kill = (pid: number, signal?: number): Command => {\n return signal ? ['kill', `-${signal}`, String(pid)] : ['kill', String(pid)];\n};\n\n/**\n * Kill processes by name\n * @example pkill('node')\n * @example pkill('python', { signal: 9 })\n */\nexport const pkill = (name: string, options?: { signal?: number }): Command => {\n return options?.signal\n ? ['pkill', `-${options.signal}`, name]\n : ['pkill', name];\n};\n\n/**\n * List processes\n * @example ps()\n * @example ps({ all: true })\n */\nexport const ps = (options?: { all?: boolean }): Command => {\n return options?.all ? ['ps', 'aux'] : ['ps'];\n};\n\n/**\n * Run command with timeout\n * @example timeout(30, 'npm', ['test'])\n * @example timeout(10, 'curl', ['https://example.com'])\n */\nexport const timeout = (seconds: number, command: string, args?: string[]): Command => {\n const base: string[] = ['timeout', String(seconds), command];\n return args ? [...base, ...args] as Command : base as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * npm package manager commands\n */\nexport const npm = {\n /**\n * Install packages\n * @example npm.install() // ['npm', 'install']\n * @example npm.install('express') // ['npm', 'install', 'express']\n * @example npm.install('express', { dev: true }) // ['npm', 'install', '-D', 'express']\n */\n install: (pkg?: string, options?: { dev?: boolean; global?: boolean }): Command => {\n const args = ['npm', 'install'];\n if (options?.dev) args.push('-D');\n if (options?.global) args.push('-g');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run npm script\n * @example npm.run('build')\n * @example npm.run('test', ['--coverage'])\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['npm', 'run', script, '--', ...args] : ['npm', 'run', script];\n },\n\n /**\n * Initialize new package\n * @example npm.init() // ['npm', 'init', '-y']\n */\n init: (): Command => ['npm', 'init', '-y'],\n\n /**\n * Uninstall package\n * @example npm.uninstall('lodash')\n */\n uninstall: (pkg: string): Command => ['npm', 'uninstall', pkg],\n};\n\n/**\n * pnpm package manager commands\n */\nexport const pnpm = {\n /**\n * Install packages with pnpm\n * @example pnpm.install()\n * @example pnpm.install('express')\n */\n install: (pkg?: string, options?: { dev?: boolean }): Command => {\n const args = ['pnpm', 'install'];\n if (options?.dev) args.push('-D');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run pnpm script\n * @example pnpm.run('build')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['pnpm', 'run', script, '--', ...args] : ['pnpm', 'run', script];\n },\n};\n\n/**\n * yarn package manager commands\n */\nexport const yarn = {\n /**\n * Install packages with yarn\n * @example yarn.install()\n */\n install: (): Command => ['yarn', 'install'],\n\n /**\n * Add package\n * @example yarn.add('express')\n * @example yarn.add('typescript', { dev: true })\n */\n add: (pkg: string, options?: { dev?: boolean }): Command => {\n return options?.dev ? ['yarn', 'add', '-D', pkg] : ['yarn', 'add', pkg];\n },\n\n /**\n * Run yarn script\n * @example yarn.run('build')\n */\n run: (script: string): Command => ['yarn', 'run', script],\n};\n\n/**\n * pip Python package manager commands\n */\nexport const pip = {\n /**\n * Install Python package\n * @example pip.install('requests')\n * @example pip.install('-r requirements.txt')\n */\n install: (pkg: string): Command => ['pip', 'install', pkg],\n\n /**\n * Uninstall Python package\n * @example pip.uninstall('requests')\n */\n uninstall: (pkg: string): Command => ['pip', 'uninstall', '-y', pkg],\n};\n\n/**\n * bun runtime commands\n */\nexport const bun = {\n /**\n * Install packages with bun\n * @example bun.install()\n * @example bun.install('express')\n */\n install: (pkg?: string, options?: { dev?: boolean }): Command => {\n const args = ['bun', 'install'];\n if (options?.dev) args.push('-D');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run bun script\n * @example bun.run('build')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['bun', 'run', script, ...args] : ['bun', 'run', script];\n },\n\n /**\n * Run file with bun\n * @example bun.exec('server.ts')\n */\n exec: (file: string, args?: string[]): Command => {\n return args ? ['bun', file, ...args] : ['bun', file];\n },\n};\n\n/**\n * deno runtime commands\n */\nexport const deno = {\n /**\n * Run deno script\n * @example deno.run('server.ts')\n * @example deno.run('server.ts', { allow: ['net', 'read'] })\n */\n run: (file: string, options?: { allow?: string[] }): Command => {\n const args = ['deno', 'run'];\n if (options?.allow) {\n for (const perm of options.allow) {\n args.push(`--allow-${perm}`);\n }\n }\n args.push(file);\n return args as Command;\n },\n\n /**\n * Install deno package\n * @example deno.install('https://deno.land/std/http/file_server.ts')\n */\n install: (url: string, options?: { name?: string }): Command => {\n const args = ['deno', 'install'];\n if (options?.name) args.push('-n', options.name);\n args.push(url);\n return args as Command;\n },\n};\n\n/**\n * Run packages with npx - callable function with additional methods\n * @example npx('create-react-app', ['my-app']) // run package directly\n * @example npx.concurrently(['npm:dev', 'npm:watch']) // run concurrently\n */\nexport const npx = Object.assign(\n (pkg: string, args?: string[]): Command => {\n return args ? ['npx', pkg, ...args] : ['npx', pkg];\n },\n {\n /**\n * Run commands in parallel with concurrently (requires npx)\n * @example npx.concurrently(['npm:dev', 'npm:watch'])\n * @example npx.concurrently(['npm run dev', 'npm run watch'], { names: ['dev', 'watch'], killOthers: true })\n */\n concurrently: (commands: string[], options?: { names?: string[]; killOthers?: boolean }): Command => {\n const args = ['npx', 'concurrently'];\n if (options?.killOthers) args.push('--kill-others');\n if (options?.names) args.push('--names', options.names.join(','));\n args.push(...commands);\n return args as Command;\n },\n }\n);\n\n/**\n * Run packages with bunx - callable function with additional methods\n * @example bunx('create-next-app', ['my-app']) // run package directly\n * @example bunx.concurrently(['npm:dev', 'npm:watch']) // run concurrently\n */\nexport const bunx = Object.assign(\n (pkg: string, args?: string[]): Command => {\n return args ? ['bunx', pkg, ...args] : ['bunx', pkg];\n },\n {\n /**\n * Run commands in parallel with concurrently (requires bunx)\n * @example bunx.concurrently(['npm:dev', 'npm:watch'])\n */\n concurrently: (commands: string[], options?: { names?: string[]; killOthers?: boolean }): Command => {\n const args = ['bunx', 'concurrently'];\n if (options?.killOthers) args.push('--kill-others');\n if (options?.names) args.push('--names', options.names.join(','));\n args.push(...commands);\n return args as Command;\n },\n }\n);\n\n/**\n * uv - Fast Python package manager\n */\nexport const uv = {\n /**\n * Install Python packages with uv\n * @example uv.install('requests')\n * @example uv.install('-r requirements.txt')\n */\n install: (pkg: string): Command => ['uv', 'pip', 'install', pkg],\n\n /**\n * Run Python script with uv\n * @example uv.run('script.py')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['uv', 'run', script, ...args] : ['uv', 'run', script];\n },\n\n /**\n * Sync dependencies from pyproject.toml\n * @example uv.sync()\n */\n sync: (): Command => ['uv', 'sync'],\n\n /**\n * Create virtual environment\n * @example uv.venv()\n * @example uv.venv('.venv')\n */\n venv: (path?: string): Command => {\n return path ? ['uv', 'venv', path] : ['uv', 'venv'];\n },\n};\n\n/**\n * poetry - Python dependency management\n */\nexport const poetry = {\n /**\n * Install dependencies\n * @example poetry.install()\n */\n install: (options?: { noRoot?: boolean }): Command => {\n const args = ['poetry', 'install'];\n if (options?.noRoot) args.push('--no-root');\n return args as Command;\n },\n\n /**\n * Add a dependency\n * @example poetry.add('requests')\n * @example poetry.add('pytest', { dev: true })\n */\n add: (pkg: string, options?: { dev?: boolean }): Command => {\n return options?.dev\n ? ['poetry', 'add', '--group', 'dev', pkg]\n : ['poetry', 'add', pkg];\n },\n\n /**\n * Run command in poetry environment\n * @example poetry.run('python', ['script.py'])\n */\n run: (command: string, args?: string[]): Command => {\n return args ? ['poetry', 'run', command, ...args] : ['poetry', 'run', command];\n },\n\n /**\n * Build package\n * @example poetry.build()\n */\n build: (): Command => ['poetry', 'build'],\n};\n\n/**\n * pipx - Install and run Python applications\n */\nexport const pipx = {\n /**\n * Install application globally\n * @example pipx.install('black')\n */\n install: (pkg: string): Command => ['pipx', 'install', pkg],\n\n /**\n * Run application without installing\n * @example pipx.run('black', ['--check', '.'])\n */\n run: (pkg: string, args?: string[]): Command => {\n return args ? ['pipx', 'run', pkg, ...args] : ['pipx', 'run', pkg];\n },\n\n /**\n * Uninstall application\n * @example pipx.uninstall('black')\n */\n uninstall: (pkg: string): Command => ['pipx', 'uninstall', pkg],\n\n /**\n * Upgrade application\n * @example pipx.upgrade('black')\n */\n upgrade: (pkg: string): Command => ['pipx', 'upgrade', pkg],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Git version control commands\n */\nexport const git = {\n /**\n * Clone repository\n * @example git.clone('https://github.com/user/repo.git')\n * @example git.clone('https://github.com/user/repo.git', { depth: 1 })\n */\n clone: (url: string, options?: { depth?: number; branch?: string; dir?: string }): Command => {\n const args = ['git', 'clone'];\n if (options?.depth) args.push('--depth', String(options.depth));\n if (options?.branch) args.push('-b', options.branch);\n args.push(url);\n if (options?.dir) args.push(options.dir);\n return args as Command;\n },\n\n /**\n * Pull latest changes\n * @example git.pull()\n */\n pull: (): Command => ['git', 'pull'],\n\n /**\n * Checkout branch\n * @example git.checkout('main')\n * @example git.checkout('feature', { create: true })\n */\n checkout: (branch: string, options?: { create?: boolean }): Command => {\n return options?.create\n ? ['git', 'checkout', '-b', branch]\n : ['git', 'checkout', branch];\n },\n\n /**\n * Git status\n * @example git.status()\n */\n status: (): Command => ['git', 'status'],\n\n /**\n * Stage files\n * @example git.add('.')\n * @example git.add('src/index.ts')\n */\n add: (path: string, options?: { all?: boolean }): Command => {\n return options?.all ? ['git', 'add', '-A', path] : ['git', 'add', path];\n },\n\n /**\n * Commit staged changes\n * @example git.commit('feat: add new feature')\n * @example git.commit('fix: bug fix', { all: true })\n */\n commit: (message: string, options?: { all?: boolean }): Command => {\n return options?.all\n ? ['git', 'commit', '-a', '-m', message]\n : ['git', 'commit', '-m', message];\n },\n\n /**\n * Push to remote\n * @example git.push()\n * @example git.push({ remote: 'origin', branch: 'main' })\n * @example git.push({ setUpstream: true, branch: 'feature' })\n */\n push: (options?: { remote?: string; branch?: string; setUpstream?: boolean; force?: boolean }): Command => {\n const args = ['git', 'push'];\n if (options?.setUpstream) args.push('-u');\n if (options?.force) args.push('--force');\n if (options?.remote) args.push(options.remote);\n if (options?.branch) args.push(options.branch);\n return args as Command;\n },\n\n /**\n * List or create branches\n * @example git.branch()\n * @example git.branch({ all: true })\n * @example git.branch('new-feature', { create: true })\n */\n branch: (name?: string, options?: { all?: boolean; delete?: boolean; create?: boolean }): Command => {\n const args = ['git', 'branch'];\n if (options?.all) args.push('-a');\n if (options?.delete) args.push('-d');\n if (name) args.push(name);\n return args as Command;\n },\n\n /**\n * Show changes\n * @example git.diff()\n * @example git.diff({ staged: true })\n * @example git.diff({ file: 'src/index.ts' })\n */\n diff: (options?: { staged?: boolean; file?: string }): Command => {\n const args = ['git', 'diff'];\n if (options?.staged) args.push('--staged');\n if (options?.file) args.push(options.file);\n return args as Command;\n },\n\n /**\n * Show commit history\n * @example git.log()\n * @example git.log({ oneline: true, count: 10 })\n */\n log: (options?: { oneline?: boolean; count?: number }): Command => {\n const args = ['git', 'log'];\n if (options?.oneline) args.push('--oneline');\n if (options?.count) args.push('-n', String(options.count));\n return args as Command;\n },\n\n /**\n * Stash changes\n * @example git.stash()\n * @example git.stash({ pop: true })\n * @example git.stash({ list: true })\n */\n stash: (options?: { pop?: boolean; list?: boolean; drop?: boolean; message?: string }): Command => {\n const args = ['git', 'stash'];\n if (options?.pop) args.push('pop');\n else if (options?.list) args.push('list');\n else if (options?.drop) args.push('drop');\n else if (options?.message) args.push('push', '-m', options.message);\n return args as Command;\n },\n\n /**\n * Fetch from remote\n * @example git.fetch()\n * @example git.fetch({ all: true })\n */\n fetch: (options?: { remote?: string; all?: boolean; prune?: boolean }): Command => {\n const args = ['git', 'fetch'];\n if (options?.all) args.push('--all');\n if (options?.prune) args.push('--prune');\n if (options?.remote) args.push(options.remote);\n return args as Command;\n },\n\n /**\n * Reset changes\n * @example git.reset()\n * @example git.reset({ hard: true })\n * @example git.reset({ ref: 'HEAD~1' })\n */\n reset: (options?: { hard?: boolean; soft?: boolean; ref?: string }): Command => {\n const args = ['git', 'reset'];\n if (options?.hard) args.push('--hard');\n if (options?.soft) args.push('--soft');\n if (options?.ref) args.push(options.ref);\n return args as Command;\n },\n\n /**\n * Initialize repository\n * @example git.init()\n */\n init: (): Command => ['git', 'init'],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Download file with curl\n * @example curl('https://example.com/file.tar.gz')\n * @example curl('https://example.com/file.tar.gz', { output: 'file.tar.gz' })\n */\nexport const curl = (url: string, options?: { output?: string; silent?: boolean }): Command => {\n const args = ['curl'];\n if (options?.silent) args.push('-s');\n args.push('-L'); // follow redirects\n if (options?.output) {\n args.push('-o', options.output);\n }\n args.push(url);\n return args as Command;\n};\n\n/**\n * Download file with wget\n * @example wget('https://example.com/file.tar.gz')\n * @example wget('https://example.com/file.tar.gz', { output: 'file.tar.gz' })\n */\nexport const wget = (url: string, options?: { output?: string; quiet?: boolean }): Command => {\n const args = ['wget'];\n if (options?.quiet) args.push('-q');\n if (options?.output) {\n args.push('-O', options.output);\n }\n args.push(url);\n return args as Command;\n};\n\n/**\n * Port management utilities\n */\nexport const port = {\n /**\n * Find process using a port (using lsof)\n * @example port.find(3000)\n */\n find: (p: number): Command => ['lsof', '-i', `:${p}`],\n\n /**\n * Kill process on a port\n * @example port.kill(3000)\n */\n kill: (p: number): Command => ['sh', '-c', `lsof -ti :${p} | xargs kill -9 2>/dev/null || true`],\n\n /**\n * Check if port is in use (exits 0 if in use)\n * @example port.isUsed(3000)\n */\n isUsed: (p: number): Command => ['sh', '-c', `lsof -i :${p} >/dev/null 2>&1`],\n\n /**\n * List all listening ports\n * @example port.list()\n */\n list: (): Command => ['ss', '-tlnp'],\n\n /**\n * Wait for port to be available (with timeout)\n * @example port.waitFor(3000, 30)\n */\n waitFor: (p: number, timeoutSeconds?: number): Command => {\n const timeout = timeoutSeconds ?? 30;\n return ['sh', '-c', `for i in $(seq 1 ${timeout}); do nc -z localhost ${p} && exit 0 || sleep 1; done; exit 1`];\n },\n};\n\n/**\n * Network utilities\n */\nexport const net = {\n /**\n * Check connectivity to host\n * @example net.ping('google.com')\n * @example net.ping('google.com', 3)\n */\n ping: (host: string, count?: number): Command => {\n return count ? ['ping', '-c', String(count), host] : ['ping', '-c', '1', host];\n },\n\n /**\n * Check if host:port is reachable\n * @example net.check('localhost', 3000)\n */\n check: (host: string, p: number): Command => ['nc', '-z', host, String(p)],\n\n /**\n * Get public IP\n * @example net.publicIp()\n */\n publicIp: (): Command => ['curl', '-s', 'ifconfig.me'],\n\n /**\n * Show network interfaces\n * @example net.interfaces()\n */\n interfaces: (): Command => ['ip', 'addr'],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Search for pattern in files\n * @example grep('TODO', 'src/*.ts')\n * @example grep('error', undefined, { recursive: true, ignoreCase: true })\n */\nexport const grep = (pattern: string, file?: string, options?: { recursive?: boolean; ignoreCase?: boolean; lineNumber?: boolean }): Command => {\n const args = ['grep'];\n if (options?.recursive) args.push('-r');\n if (options?.ignoreCase) args.push('-i');\n if (options?.lineNumber) args.push('-n');\n args.push(pattern);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Stream editor for filtering and transforming text\n * @example sed('s/foo/bar/g', 'file.txt')\n * @example sed('s/foo/bar/g', 'file.txt', { inPlace: true })\n */\nexport const sed = (expression: string, file: string, options?: { inPlace?: boolean }): Command => {\n return options?.inPlace\n ? ['sed', '-i', expression, file]\n : ['sed', expression, file];\n};\n\n/**\n * Output first lines of file\n * @example head('file.txt')\n * @example head('file.txt', 20)\n */\nexport const head = (file: string, lines?: number): Command => {\n return lines ? ['head', '-n', String(lines), file] : ['head', file];\n};\n\n/**\n * Output last lines of file\n * @example tail('file.txt')\n * @example tail('file.txt', 20)\n * @example tail('app.log', undefined, { follow: true })\n */\nexport const tail = (file: string, lines?: number, options?: { follow?: boolean }): Command => {\n const args = ['tail'];\n if (options?.follow) args.push('-f');\n if (lines) args.push('-n', String(lines));\n args.push(file);\n return args as Command;\n};\n\n/**\n * Word, line, character count\n * @example wc('file.txt')\n * @example wc('file.txt', { lines: true })\n */\nexport const wc = (file: string, options?: { lines?: boolean; words?: boolean; chars?: boolean }): Command => {\n const args = ['wc'];\n if (options?.lines) args.push('-l');\n if (options?.words) args.push('-w');\n if (options?.chars) args.push('-c');\n args.push(file);\n return args as Command;\n};\n\n/**\n * Sort lines of text\n * @example sort('file.txt')\n * @example sort('file.txt', { reverse: true, numeric: true })\n */\nexport const sort = (file: string, options?: { reverse?: boolean; numeric?: boolean; unique?: boolean }): Command => {\n const args = ['sort'];\n if (options?.reverse) args.push('-r');\n if (options?.numeric) args.push('-n');\n if (options?.unique) args.push('-u');\n args.push(file);\n return args as Command;\n};\n\n/**\n * Report or filter out repeated lines\n * @example uniq('file.txt')\n * @example uniq('file.txt', { count: true })\n */\nexport const uniq = (file: string, options?: { count?: boolean }): Command => {\n return options?.count ? ['uniq', '-c', file] : ['uniq', file];\n};\n\n/**\n * Process JSON with jq\n * @example jq('.name', 'data.json')\n * @example jq('.[] | .id') // for piping\n */\nexport const jq = (filter: string, file?: string, options?: { raw?: boolean; compact?: boolean }): Command => {\n const args = ['jq'];\n if (options?.raw) args.push('-r');\n if (options?.compact) args.push('-c');\n args.push(filter);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Build and execute commands from stdin\n * @example xargs('rm') // pipe file list to rm\n * @example xargs('grep', ['pattern'], { parallel: 4 })\n */\nexport const xargs = (command: string, args?: string[], options?: { parallel?: number; nullDelimited?: boolean }): Command => {\n const xargsArgs = ['xargs'];\n if (options?.nullDelimited) xargsArgs.push('-0');\n if (options?.parallel) xargsArgs.push('-P', String(options.parallel));\n xargsArgs.push(command);\n if (args) xargsArgs.push(...args);\n return xargsArgs as Command;\n};\n\n/**\n * Pattern scanning and processing\n * @example awk('{print $1}', 'file.txt')\n * @example awk('BEGIN {sum=0} {sum+=$1} END {print sum}', 'numbers.txt')\n */\nexport const awk = (program: string, file?: string, options?: { fieldSeparator?: string }): Command => {\n const args = ['awk'];\n if (options?.fieldSeparator) args.push('-F', options.fieldSeparator);\n args.push(program);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Extract columns/fields from lines\n * @example cut('file.txt', { fields: '1,3', delimiter: ',' })\n * @example cut('file.txt', { characters: '1-10' })\n */\nexport const cut = (file: string, options: { fields?: string; delimiter?: string; characters?: string }): Command => {\n const args = ['cut'];\n if (options.delimiter) args.push('-d', options.delimiter);\n if (options.fields) args.push('-f', options.fields);\n if (options.characters) args.push('-c', options.characters);\n args.push(file);\n return args as Command;\n};\n\n/**\n * Translate or delete characters\n * @example tr('a-z', 'A-Z') // uppercase\n * @example tr('\\n', ' ') // newlines to spaces\n * @example tr('', '', { delete: 'abc' }) // delete chars\n */\nexport const tr = (set1: string, set2?: string, options?: { delete?: string; squeeze?: boolean }): Command => {\n const args = ['tr'];\n if (options?.delete) {\n args.push('-d', options.delete);\n } else {\n if (options?.squeeze) args.push('-s');\n args.push(set1);\n if (set2) args.push(set2);\n }\n return args as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * Tar archive operations\n */\nexport const tar = {\n /**\n * Extract tar archive\n * @example tar.extract('archive.tar.gz')\n * @example tar.extract('archive.tar.gz', { dir: '/app' })\n */\n extract: (file: string, options?: { dir?: string }): Command => {\n const args = ['tar', '-xzf', file];\n if (options?.dir) args.push('-C', options.dir);\n return args as Command;\n },\n\n /**\n * Create tar archive\n * @example tar.create('archive.tar.gz', '/app/dist')\n */\n create: (output: string, source: string): Command => {\n return ['tar', '-czf', output, source];\n },\n};\n\n/**\n * Unzip archive\n * @example unzip('archive.zip')\n * @example unzip('archive.zip', { dir: '/app' })\n */\nexport const unzip = (file: string, options?: { dir?: string }): Command => {\n return options?.dir ? ['unzip', '-o', file, '-d', options.dir] : ['unzip', '-o', file];\n};\n","import type { Command } from '../types.js';\n\n/**\n * Print environment variable\n * @example echo('$HOME')\n * @example echo('Hello World')\n */\nexport const echo = (text: string): Command => ['echo', text];\n\n/**\n * Print environment variables\n * @example env()\n */\nexport const env = (): Command => ['env'];\n\n/**\n * Print specific environment variable\n * @example printenv('PATH')\n * @example printenv() // prints all\n */\nexport const printenv = (name?: string): Command => {\n return name ? ['printenv', name] : ['printenv'];\n};\n\n/**\n * Which command location\n * @example which('node')\n */\nexport const which = (command: string): Command => ['which', command];\n\n/**\n * Print current user\n * @example whoami()\n */\nexport const whoami = (): Command => ['whoami'];\n\n/**\n * Print system information\n * @example uname()\n * @example uname({ all: true })\n */\nexport const uname = (options?: { all?: boolean }): Command => {\n return options?.all ? ['uname', '-a'] : ['uname'];\n};\n\n/**\n * Print hostname\n * @example hostname()\n */\nexport const hostname = (): Command => ['hostname'];\n\n/**\n * Report disk space usage\n * @example df()\n * @example df('/app')\n */\nexport const df = (path?: string, options?: { human?: boolean }): Command => {\n const args = ['df'];\n if (options?.human) args.push('-h');\n if (path) args.push(path);\n return args as Command;\n};\n\n/**\n * Estimate file/directory space usage\n * @example du('/app')\n * @example du('/app', { human: true, summarize: true })\n */\nexport const du = (path: string, options?: { human?: boolean; summarize?: boolean }): Command => {\n const args = ['du'];\n if (options?.human) args.push('-h');\n if (options?.summarize) args.push('-s');\n args.push(path);\n return args as Command;\n};\n\n/**\n * Delay for specified seconds\n * @example sleep(5)\n */\nexport const sleep = (seconds: number): Command => ['sleep', String(seconds)];\n\n/**\n * Print date/time\n * @example date()\n * @example date('+%Y-%m-%d')\n */\nexport const date = (format?: string): Command => {\n return format ? ['date', format] : ['date'];\n};\n\n/**\n * Find files\n * @example find('/app', { name: '*.ts' })\n * @example find('/app', { type: 'f', name: '*.js' })\n */\nexport const find = (path: string, options?: { name?: string; type?: 'f' | 'd' }): Command => {\n const args = ['find', path];\n if (options?.type) args.push('-type', options.type);\n if (options?.name) args.push('-name', options.name);\n return args as Command;\n};\n\n/**\n * Write to file and stdout\n * @example tee('/app/output.log')\n * @example tee('/app/output.log', { append: true })\n */\nexport const tee = (file: string, options?: { append?: boolean }): Command => {\n return options?.append ? ['tee', '-a', file] : ['tee', file];\n};\n\n/**\n * Compare files\n * @example diff('file1.txt', 'file2.txt')\n * @example diff('file1.txt', 'file2.txt', { unified: true })\n */\nexport const diff = (file1: string, file2: string, options?: { unified?: boolean; brief?: boolean }): Command => {\n const args = ['diff'];\n if (options?.unified) args.push('-u');\n if (options?.brief) args.push('-q');\n args.push(file1, file2);\n return args as Command;\n};\n\n/**\n * Run multiple commands in parallel\n * @example parallel(['npm run dev', 'npm run watch'])\n */\nexport const parallel = (commands: string[], options?: { killOthers?: boolean }): Command => {\n const joined = commands.join(' & ');\n if (options?.killOthers) {\n // trap EXIT to kill all background jobs when any exits\n return ['sh', '-c', `trap \"kill 0\" EXIT; ${joined} & wait`];\n }\n return ['sh', '-c', `${joined} & wait`];\n};\n\n/**\n * Build a custom command from parts\n * @example raw('my-cli', ['--flag', 'value'])\n */\nexport const raw = (command: string, args?: string[]): Command => {\n return args ? [command, ...args] : [command];\n};\n\n/**\n * Base64 encoding/decoding utilities\n */\nexport const base64 = {\n /**\n * Encode to base64\n * @example base64.encode('file.txt')\n */\n encode: (file?: string): Command => {\n return file ? ['base64', file] : ['base64'];\n },\n\n /**\n * Decode from base64\n * @example base64.decode('encoded.txt')\n */\n decode: (file?: string): Command => {\n return file ? ['base64', '-d', file] : ['base64', '-d'];\n },\n};\n\n/**\n * Compute MD5 checksum\n * @example md5sum('file.txt')\n * @example md5sum('file.txt', { check: true })\n */\nexport const md5sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['md5sum', '-c', file] : ['md5sum', file];\n};\n\n/**\n * Compute SHA256 checksum\n * @example sha256sum('file.txt')\n * @example sha256sum('file.txt', { check: true })\n */\nexport const sha256sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['sha256sum', '-c', file] : ['sha256sum', file];\n};\n\n/**\n * Compute SHA1 checksum\n * @example sha1sum('file.txt')\n */\nexport const sha1sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['sha1sum', '-c', file] : ['sha1sum', file];\n};\n","import type { Command } from '../types.js';\n\n/**\n * ComputeSDK CLI installation and management utilities\n */\n\n/**\n * Install the ComputeSDK CLI in a sandbox\n * \n * This command downloads and runs the official ComputeSDK installer.\n * The CLI provides the full ComputeSDK API (terminals, watchers, signals, etc.)\n * in any sandbox environment.\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // Install compute in a raw E2B/Daytona/etc sandbox\n * await sandbox.runCommand(compute.install({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * ```\n * \n * @param options Installation options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.version Specific version to install (default: latest)\n * @param options.silent Suppress installation output (default: false)\n * @returns Command tuple for installing the compute CLI\n */\nexport const install = (options?: {\n apiKey?: string;\n version?: string;\n silent?: boolean;\n}): Command => {\n const installUrl = options?.version\n ? `https://computesdk.com/install.sh?version=${options.version}`\n : 'https://computesdk.com/install.sh';\n \n const curlFlags = options?.silent ? '-fsSL' : '-fSL';\n \n // Build the install command with optional API key\n let installCmd = `curl ${curlFlags} ${installUrl} | bash`;\n \n // If API key is provided, set it as environment variable for the install script\n if (options?.apiKey) {\n installCmd = `COMPUTESDK_API_KEY=\"${options.apiKey}\" ${installCmd}`;\n } else if (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY) {\n // Fallback to process.env if available\n installCmd = `COMPUTESDK_API_KEY=\"${process.env.COMPUTESDK_API_KEY}\" ${installCmd}`;\n }\n \n // Use sh -c to pipe curl output to bash\n return ['sh', '-c', installCmd];\n};\n\n/**\n * Check if the ComputeSDK CLI is installed\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.isInstalled());\n * const installed = result.exitCode === 0;\n * ```\n * \n * @returns Command tuple that exits 0 if installed, 1 if not\n */\nexport const isInstalled = (): Command => {\n return ['sh', '-c', 'which compute > /dev/null 2>&1'];\n};\n\n/**\n * Get the installed compute version\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.version());\n * console.log('Version:', result.stdout.trim());\n * ```\n * \n * @returns Command tuple to get compute version\n */\nexport const version = (): Command => {\n return ['compute', '--version'];\n};\n\n/**\n * Start the ComputeSDK daemon\n * \n * Note: The daemon usually auto-starts after installation.\n * This is mainly useful for restarting or manual control.\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // With API key\n * await sandbox.runCommand(compute.start({ apiKey: process.env.COMPUTESDK_API_KEY }), { background: true });\n * \n * // With access token\n * await sandbox.runCommand(compute.start({ accessToken: process.env.ACCESS_TOKEN }), { background: true });\n * ```\n * \n * @param options Start options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.accessToken Access token for authentication (alternative to apiKey)\n * @param options.port Port to listen on (default: 18080)\n * @param options.logLevel Log level (default: 'info')\n * @returns Command tuple to start the daemon\n */\nexport const start = (options?: {\n apiKey?: string;\n accessToken?: string;\n port?: number;\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\n}): Command => {\n const args = ['compute', 'start'];\n \n const apiKey = options?.apiKey || (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n const accessToken = options?.accessToken;\n \n // Prefer access token over API key if both are provided\n if (accessToken) {\n args.push('--access-token', accessToken);\n } else if (apiKey) {\n args.push('--api-key', apiKey);\n }\n \n if (options?.port) {\n args.push('--port', String(options.port));\n }\n \n if (options?.logLevel === 'debug') {\n args.push('--verbose');\n }\n \n return args as Command;\n};\n\n/**\n * Stop the ComputeSDK daemon\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * await sandbox.runCommand(compute.stop());\n * ```\n * \n * @returns Command tuple to stop the daemon\n */\nexport const stop = (): Command => {\n return ['pkill', '-f', 'compute start'];\n};\n\n/**\n * Check daemon health status\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.health());\n * const healthy = result.exitCode === 0;\n * ```\n * \n * @param options Health check options\n * @param options.host Host to check (default: 'localhost')\n * @param options.port Port to check (default: 18080)\n * @returns Command tuple to check daemon health\n */\nexport const health = (options?: {\n host?: string;\n port?: number;\n}): Command => {\n const host = options?.host || 'localhost';\n const port = options?.port || 18080;\n return ['sh', '-c', `curl -f http://${host}:${port}/health > /dev/null 2>&1`];\n};\n\n/**\n * Check if compute daemon is set up and running\n * \n * Returns exit code 0 if daemon is installed and running (ready to use)\n * Returns exit code 1 if setup is needed (not installed or not running)\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.isSetup());\n * if (result.exitCode === 0) {\n * console.log('Daemon is ready!');\n * } else {\n * console.log('Setup needed');\n * await sandbox.runCommand(compute.setup({ apiKey: 'key' }));\n * }\n * ```\n * \n * @param options Setup check options\n * @param options.host Host to check (default: 'localhost')\n * @param options.port Port to check (default: 18080)\n * @returns Command that exits 0 if setup, 1 if setup needed\n */\nexport const isSetup = (options?: {\n host?: string;\n port?: number;\n}): Command => {\n const host = options?.host || 'localhost';\n const port = options?.port || 18080;\n \n return ['sh', '-c', `\n if ! which compute > /dev/null 2>&1; then\n exit 1\n fi\n if ! curl -f http://${host}:${port}/health > /dev/null 2>&1; then\n exit 1\n fi\n exit 0\n `.trim()];\n};\n\n/**\n * Install and start the ComputeSDK daemon in one command\n * \n * This is a convenience method that installs the compute CLI and starts the daemon.\n * Useful for quickly setting up a sandbox with ComputeSDK capabilities.\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // Quick setup with API key\n * await sandbox.runCommand(compute.setup({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * ```\n * \n * @param options Setup options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.accessToken Access token for authentication (alternative to apiKey)\n * @param options.port Port to listen on (default: 18080)\n * @param options.version Specific version to install (default: latest)\n * @param options.silent Suppress installation output (default: false)\n * @returns Command tuple for installing and starting the daemon\n */\nexport const setup = (options?: {\n apiKey?: string;\n accessToken?: string;\n port?: number;\n version?: string;\n silent?: boolean;\n}): Command => {\n const apiKey = options?.apiKey || (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n const accessToken = options?.accessToken;\n \n const installUrl = options?.version\n ? `https://computesdk.com/install.sh?version=${options.version}`\n : 'https://computesdk.com/install.sh';\n \n const curlFlags = options?.silent ? '-fsSL' : '-fSL';\n \n // Build install command\n let installCmd = `curl ${curlFlags} ${installUrl} | bash`;\n \n // Add API key to install if provided\n if (apiKey) {\n installCmd = `COMPUTESDK_API_KEY=\"${apiKey}\" ${installCmd}`;\n }\n \n // Build start command\n let startCmd = 'compute start';\n \n // Add authentication flags\n if (accessToken) {\n startCmd += ` --access-token \"${accessToken}\"`;\n } else if (apiKey) {\n startCmd += ` --api-key \"${apiKey}\"`;\n }\n \n if (options?.port) {\n startCmd += ` --port ${options.port}`;\n }\n \n // Combine: install, then start in background\n const fullCmd = `${installCmd} && ${startCmd} > /dev/null 2>&1 &`;\n \n return ['sh', '-c', fullCmd];\n};\n\n/**\n * ComputeSDK CLI management utilities\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // Quick setup (install + start)\n * await sandbox.runCommand(compute.setup({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * \n * // Or install and start separately\n * await sandbox.runCommand(compute.install());\n * await sandbox.runCommand(compute.start({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * \n * // Check if installed\n * const result = await sandbox.runCommand(compute.isInstalled());\n * if (result.exitCode === 0) {\n * console.log('Compute is installed!');\n * }\n * \n * // Get version\n * const versionResult = await sandbox.runCommand(compute.version());\n * console.log('Version:', versionResult.stdout);\n * ```\n */\nexport const compute = {\n install,\n isInstalled,\n version,\n start,\n stop,\n health,\n setup,\n isSetup,\n};\n","/**\n * @computesdk/cmd - Type-safe shell command builders\n *\n * Build shell commands as tuples for use with sandbox.runCommand()\n *\n * @example\n * ```typescript\n * import { cmd, npm, node } from '@computesdk/cmd';\n *\n * await sandbox.runCommand(npm.install('express'));\n * await sandbox.runCommand(cmd.mkdir('/app/src'));\n * await sandbox.runCommand(node('server.js'), { background: true });\n * ```\n */\n\n// Re-export types\nexport type { Command, ShellOptions } from './types.js';\n\n// Re-export utilities\nexport { esc, shellEscape, escapeArgs, buildShellCommand } from './utils.js';\n\n// Re-export shell wrappers\nexport { shell, sh, bash, zsh } from './shell.js';\n\n// Import all commands for assembly\nimport * as filesystem from './commands/filesystem.js';\nimport * as process from './commands/process.js';\nimport * as packages from './commands/packages.js';\nimport * as gitCommands from './commands/git.js';\nimport * as network from './commands/network.js';\nimport * as text from './commands/text.js';\nimport * as archive from './commands/archive.js';\nimport * as system from './commands/system.js';\nimport * as computeCommands from './commands/compute.js';\n\nimport type { Command } from './types.js';\nimport { buildShellCommand } from './utils.js';\n\n/**\n * Command builders for common shell operations - callable with shell wrapper + command methods\n *\n * @example\n * // As shell wrapper (default: sh)\n * cmd(npm.install(), { cwd: '/app' })\n * // => ['sh', '-c', 'cd '/app' && npm install']\n *\n * @example\n * // As command builders\n * cmd.npm.install('express')\n * // => ['npm', 'install', 'express']\n */\nexport const cmd = Object.assign(\n // Callable: shell wrapper with sh default\n (command: Command, options?: { cwd?: string; background?: boolean }): Command => {\n return buildShellCommand('sh', command, options);\n },\n {\n // Filesystem\n ...filesystem,\n // Process\n ...process,\n // Package managers\n ...packages,\n // Git\n ...gitCommands,\n // Network\n ...network,\n // Text processing\n ...text,\n // Archives\n ...archive,\n // System\n ...system,\n // Compute\n ...computeCommands,\n }\n);\n\n// Export individual command builders for destructured imports\n// Filesystem\nexport const {\n mkdir, rm, cp, mv, ls, pwd, chmod, chown, touch, cat, ln, readlink, test, rsync,\n} = filesystem;\n\n// Process\nexport const { node, python, kill, pkill, ps, timeout } = process;\n\n// Package managers\nexport const { npm, pnpm, yarn, pip, bun, deno, npx, bunx, uv, poetry, pipx } = packages;\n\n// Git\nexport const { git } = gitCommands;\n\n// Network\nexport const { curl, wget, port, net } = network;\n\n// Text processing\nexport const { grep, sed, head, tail, wc, sort, uniq, jq, xargs, awk, cut, tr } = text;\n\n// Archives\nexport const { tar, unzip } = archive;\n\n// System\nexport const {\n echo, env, printenv, which, whoami, uname, hostname,\n df, du, sleep, date, find, tee, diff, parallel, raw,\n base64, md5sum, sha256sum, sha1sum,\n} = system;\n\n// Compute\nexport const { compute } = computeCommands;\n\n// Default export for convenience\nexport default cmd;\n"],"mappings":";;;;;;;AAWO,SAAS,YAAY,GAAmB;AAG7C,SAAO,MAAM,EAAE,QAAQ,MAAM,OAAO,IAAI;AAC1C;AAaO,SAAS,IAAI,GAAmB;AACrC,SAAO,EAAE,QAAQ,MAAM,KAAK;AAC9B;AAWO,SAAS,WAAW,MAAwB;AACjD,SAAO,KAAK,IAAI,SAAO;AAErB,QAAI,wBAAwB,KAAK,GAAG,KAAK,IAAI,SAAS,GAAG;AACvD,aAAO;AAAA,IACT;AAEA,WAAO,YAAY,GAAG;AAAA,EACxB,CAAC,EAAE,KAAK,GAAG;AACb;AAKO,SAAS,kBAAkB,UAAkB,SAAkB,SAAiC;AACrG,MAAI,CAAC,SAAS,OAAO,CAAC,SAAS,YAAY;AACzC,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,WAAW,OAAO;AAI/B,MAAI,QAAQ,YAAY;AACtB,aAAS,SAAS,MAAM;AAAA,EAC1B;AAEA,MAAI,QAAQ,KAAK;AACf,aAAS,MAAM,YAAY,QAAQ,GAAG,CAAC,OAAO,MAAM;AAAA,EACtD;AAEA,SAAO,CAAC,UAAU,MAAM,MAAM;AAChC;;;ACrDO,IAAM,QAAQ,OAAO;AAAA;AAAA,EAE1B,CAAC,SAAkB,YAAoC;AACrD,WAAO,kBAAkB,MAAM,SAAS,OAAO;AAAA,EACjD;AAAA,EACA;AAAA;AAAA,IAEE,IAAI,CAAC,SAAkB,YAAoC;AACzD,aAAO,kBAAkB,MAAM,SAAS,OAAO;AAAA,IACjD;AAAA;AAAA,IAEA,MAAM,CAAC,SAAkB,YAAoC;AAC3D,aAAO,kBAAkB,QAAQ,SAAS,OAAO;AAAA,IACnD;AAAA;AAAA,IAEA,KAAK,CAAC,SAAkB,YAAoC;AAC1D,aAAO,kBAAkB,OAAO,SAAS,OAAO;AAAA,IAClD;AAAA,EACF;AACF;AAGO,IAAM,KAAK,MAAM;AACjB,IAAM,OAAO,MAAM;AACnB,IAAM,MAAM,MAAM;;;AC5CzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWO,IAAM,QAAQ,CAAC,MAAc,YAA+C;AACjF,QAAM,YAAY,SAAS,aAAa;AACxC,SAAO,YAAY,CAAC,SAAS,MAAM,IAAI,IAAI,CAAC,SAAS,IAAI;AAC3D;AAUO,IAAM,KAAK,OAAO;AAAA,EACvB,CAAC,MAAc,YAAgE;AAC7E,UAAM,QAAkB,CAAC;AACzB,QAAI,SAAS,UAAW,OAAM,KAAK,GAAG;AACtC,QAAI,SAAS,MAAO,OAAM,KAAK,GAAG;AAClC,WAAO,MAAM,SAAS,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,EAAE,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI;AAAA,EAC5E;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,IAAI,CAAC,SAA0B,CAAC,MAAM,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOjD,MAAM,CAAC,SAA0B;AAE/B,aAAO,CAAC,MAAM,MAAM,YAAY,IAAI,qBAAqB,IAAI,kBAAkB,IAAI,OAAO;AAAA,IAC5F;AAAA,EACF;AACF;AAMO,IAAM,KAAK,CAAC,KAAa,MAAc,YAA+C;AAC3F,SAAO,SAAS,YAAY,CAAC,MAAM,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;AACxE;AAMO,IAAM,KAAK,CAAC,KAAa,SAA0B,CAAC,MAAM,KAAK,IAAI;AAOnE,IAAM,KAAK,CAAC,MAAe,YAAyD;AACzF,QAAM,QAAkB,CAAC;AACzB,MAAI,SAAS,KAAM,OAAM,KAAK,GAAG;AACjC,MAAI,SAAS,IAAK,OAAM,KAAK,GAAG;AAChC,QAAM,UAAU,MAAM,SAAS,IAAI,IAAI,MAAM,KAAK,EAAE,CAAC,KAAK;AAC1D,MAAI,WAAW,KAAM,QAAO,CAAC,MAAM,SAAS,IAAI;AAChD,MAAI,QAAS,QAAO,CAAC,MAAM,OAAO;AAClC,MAAI,KAAM,QAAO,CAAC,MAAM,IAAI;AAC5B,SAAO,CAAC,IAAI;AACd;AAMO,IAAM,MAAM,MAAe,CAAC,KAAK;AAMjC,IAAM,QAAQ,CAAC,MAAc,MAAc,YAA+C;AAC/F,SAAO,SAAS,YAAY,CAAC,SAAS,MAAM,MAAM,IAAI,IAAI,CAAC,SAAS,MAAM,IAAI;AAChF;AAOO,IAAM,QAAQ,CAAC,OAAe,MAAc,YAA+C;AAChG,SAAO,SAAS,YAAY,CAAC,SAAS,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,OAAO,IAAI;AAClF;AAMO,IAAM,QAAQ,CAAC,SAA0B,CAAC,SAAS,IAAI;AAMvD,IAAM,MAAM,CAAC,SAA0B,CAAC,OAAO,IAAI;AAOnD,IAAM,KAAK,CAAC,QAAgB,MAAc,YAA+D;AAC9G,QAAM,OAAO,CAAC,IAAI;AAClB,MAAI,SAAS,aAAa,MAAO,MAAK,KAAK,IAAI;AAC/C,MAAI,SAAS,MAAO,MAAK,KAAK,IAAI;AAClC,OAAK,KAAK,QAAQ,IAAI;AACtB,SAAO;AACT;AAOO,IAAM,WAAW,CAAC,MAAc,YAA+C;AACpF,SAAO,SAAS,YAAY,CAAC,YAAY,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI;AAC1E;AAOO,IAAM,OAAO;AAAA,EAClB,QAAQ,CAAC,SAA0B,CAAC,QAAQ,MAAM,IAAI;AAAA,EACtD,QAAQ,CAAC,SAA0B,CAAC,QAAQ,MAAM,IAAI;AAAA,EACtD,OAAO,CAAC,SAA0B,CAAC,QAAQ,MAAM,IAAI;AAAA,EACrD,YAAY,CAAC,SAA0B,CAAC,QAAQ,MAAM,IAAI;AAAA,EAC1D,YAAY,CAAC,SAA0B,CAAC,QAAQ,MAAM,IAAI;AAAA,EAC1D,cAAc,CAAC,SAA0B,CAAC,QAAQ,MAAM,IAAI;AAAA,EAC5D,UAAU,CAAC,SAA0B,CAAC,QAAQ,MAAM,IAAI;AAAA,EACxD,WAAW,CAAC,SAA0B,CAAC,QAAQ,MAAM,IAAI;AAC3D;AAOO,IAAM,QAAQ,CAAC,KAAa,MAAc,YAOlC;AACb,QAAM,OAAO,CAAC,OAAO;AACrB,MAAI,SAAS,QAAS,MAAK,KAAK,IAAI;AACpC,MAAI,SAAS,QAAS,MAAK,KAAK,IAAI;AACpC,MAAI,SAAS,SAAU,MAAK,KAAK,IAAI;AACrC,MAAI,SAAS,OAAQ,MAAK,KAAK,UAAU;AACzC,MAAI,SAAS,OAAQ,MAAK,KAAK,WAAW;AAC1C,MAAI,SAAS,SAAS;AACpB,eAAW,WAAW,QAAQ,SAAS;AACrC,WAAK,KAAK,aAAa,OAAO;AAAA,IAChC;AAAA,EACF;AACA,OAAK,KAAK,KAAK,IAAI;AACnB,SAAO;AACT;;;ACnLA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,IAAM,OAAO,CAAC,QAAgB,SAA6B;AAChE,SAAO,OAAO,CAAC,QAAQ,QAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,MAAM;AAC3D;AAOO,IAAM,SAAS,CAAC,QAAgB,SAA6B;AAClE,SAAO,OAAO,CAAC,WAAW,QAAQ,GAAG,IAAI,IAAI,CAAC,WAAW,MAAM;AACjE;AAOO,IAAM,OAAO,CAAC,KAAa,WAA6B;AAC7D,SAAO,SAAS,CAAC,QAAQ,IAAI,MAAM,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,QAAQ,OAAO,GAAG,CAAC;AAC5E;AAOO,IAAM,QAAQ,CAAC,MAAc,YAA2C;AAC7E,SAAO,SAAS,SACZ,CAAC,SAAS,IAAI,QAAQ,MAAM,IAAI,IAAI,IACpC,CAAC,SAAS,IAAI;AACpB;AAOO,IAAM,KAAK,CAAC,YAAyC;AAC1D,SAAO,SAAS,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI;AAC7C;AAOO,IAAM,UAAU,CAAC,SAAiB,SAAiB,SAA6B;AACrF,QAAM,OAAiB,CAAC,WAAW,OAAO,OAAO,GAAG,OAAO;AAC3D,SAAO,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,IAAe;AAChD;;;ACzDA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKO,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOjB,SAAS,CAAC,KAAc,YAA2D;AACjF,UAAM,OAAO,CAAC,OAAO,SAAS;AAC9B,QAAI,SAAS,IAAK,MAAK,KAAK,IAAI;AAChC,QAAI,SAAS,OAAQ,MAAK,KAAK,IAAI;AACnC,QAAI,IAAK,MAAK,KAAK,GAAG;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,CAAC,QAAgB,SAA6B;AACjD,WAAO,OAAO,CAAC,OAAO,OAAO,QAAQ,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,OAAO,MAAM;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAe,CAAC,OAAO,QAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzC,WAAW,CAAC,QAAyB,CAAC,OAAO,aAAa,GAAG;AAC/D;AAKO,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,SAAS,CAAC,KAAc,YAAyC;AAC/D,UAAM,OAAO,CAAC,QAAQ,SAAS;AAC/B,QAAI,SAAS,IAAK,MAAK,KAAK,IAAI;AAChC,QAAI,IAAK,MAAK,KAAK,GAAG;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,CAAC,QAAgB,SAA6B;AACjD,WAAO,OAAO,CAAC,QAAQ,OAAO,QAAQ,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,OAAO,MAAM;AAAA,EAC/E;AACF;AAKO,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlB,SAAS,MAAe,CAAC,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,KAAK,CAAC,KAAa,YAAyC;AAC1D,WAAO,SAAS,MAAM,CAAC,QAAQ,OAAO,MAAM,GAAG,IAAI,CAAC,QAAQ,OAAO,GAAG;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,CAAC,WAA4B,CAAC,QAAQ,OAAO,MAAM;AAC1D;AAKO,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,SAAS,CAAC,QAAyB,CAAC,OAAO,WAAW,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzD,WAAW,CAAC,QAAyB,CAAC,OAAO,aAAa,MAAM,GAAG;AACrE;AAKO,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,SAAS,CAAC,KAAc,YAAyC;AAC/D,UAAM,OAAO,CAAC,OAAO,SAAS;AAC9B,QAAI,SAAS,IAAK,MAAK,KAAK,IAAI;AAChC,QAAI,IAAK,MAAK,KAAK,GAAG;AACtB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,CAAC,QAAgB,SAA6B;AACjD,WAAO,OAAO,CAAC,OAAO,OAAO,QAAQ,GAAG,IAAI,IAAI,CAAC,OAAO,OAAO,MAAM;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,CAAC,MAAc,SAA6B;AAChD,WAAO,OAAO,CAAC,OAAO,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,IAAI;AAAA,EACrD;AACF;AAKO,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,KAAK,CAAC,MAAc,YAA4C;AAC9D,UAAM,OAAO,CAAC,QAAQ,KAAK;AAC3B,QAAI,SAAS,OAAO;AAClB,iBAAW,QAAQ,QAAQ,OAAO;AAChC,aAAK,KAAK,WAAW,IAAI,EAAE;AAAA,MAC7B;AAAA,IACF;AACA,SAAK,KAAK,IAAI;AACd,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,CAAC,KAAa,YAAyC;AAC9D,UAAM,OAAO,CAAC,QAAQ,SAAS;AAC/B,QAAI,SAAS,KAAM,MAAK,KAAK,MAAM,QAAQ,IAAI;AAC/C,SAAK,KAAK,GAAG;AACb,WAAO;AAAA,EACT;AACF;AAOO,IAAM,MAAM,OAAO;AAAA,EACxB,CAAC,KAAa,SAA6B;AACzC,WAAO,OAAO,CAAC,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,OAAO,GAAG;AAAA,EACnD;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAME,cAAc,CAAC,UAAoB,YAAkE;AACnG,YAAM,OAAO,CAAC,OAAO,cAAc;AACnC,UAAI,SAAS,WAAY,MAAK,KAAK,eAAe;AAClD,UAAI,SAAS,MAAO,MAAK,KAAK,WAAW,QAAQ,MAAM,KAAK,GAAG,CAAC;AAChE,WAAK,KAAK,GAAG,QAAQ;AACrB,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAOO,IAAM,OAAO,OAAO;AAAA,EACzB,CAAC,KAAa,SAA6B;AACzC,WAAO,OAAO,CAAC,QAAQ,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG;AAAA,EACrD;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKE,cAAc,CAAC,UAAoB,YAAkE;AACnG,YAAM,OAAO,CAAC,QAAQ,cAAc;AACpC,UAAI,SAAS,WAAY,MAAK,KAAK,eAAe;AAClD,UAAI,SAAS,MAAO,MAAK,KAAK,WAAW,QAAQ,MAAM,KAAK,GAAG,CAAC;AAChE,WAAK,KAAK,GAAG,QAAQ;AACrB,aAAO;AAAA,IACT;AAAA,EACF;AACF;AAKO,IAAM,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMhB,SAAS,CAAC,QAAyB,CAAC,MAAM,OAAO,WAAW,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/D,KAAK,CAAC,QAAgB,SAA6B;AACjD,WAAO,OAAO,CAAC,MAAM,OAAO,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,OAAO,MAAM;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAe,CAAC,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlC,MAAM,CAAC,SAA2B;AAChC,WAAO,OAAO,CAAC,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,MAAM;AAAA,EACpD;AACF;AAKO,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpB,SAAS,CAAC,YAA4C;AACpD,UAAM,OAAO,CAAC,UAAU,SAAS;AACjC,QAAI,SAAS,OAAQ,MAAK,KAAK,WAAW;AAC1C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,CAAC,KAAa,YAAyC;AAC1D,WAAO,SAAS,MACZ,CAAC,UAAU,OAAO,WAAW,OAAO,GAAG,IACvC,CAAC,UAAU,OAAO,GAAG;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,CAAC,SAAiB,SAA6B;AAClD,WAAO,OAAO,CAAC,UAAU,OAAO,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,OAAO,OAAO;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,MAAe,CAAC,UAAU,OAAO;AAC1C;AAKO,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlB,SAAS,CAAC,QAAyB,CAAC,QAAQ,WAAW,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1D,KAAK,CAAC,KAAa,SAA6B;AAC9C,WAAO,OAAO,CAAC,QAAQ,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,OAAO,GAAG;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,CAAC,QAAyB,CAAC,QAAQ,aAAa,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9D,SAAS,CAAC,QAAyB,CAAC,QAAQ,WAAW,GAAG;AAC5D;;;ACzUA;AAAA;AAAA;AAAA;AAKO,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,OAAO,CAAC,KAAa,YAAyE;AAC5F,UAAM,OAAO,CAAC,OAAO,OAAO;AAC5B,QAAI,SAAS,MAAO,MAAK,KAAK,WAAW,OAAO,QAAQ,KAAK,CAAC;AAC9D,QAAI,SAAS,OAAQ,MAAK,KAAK,MAAM,QAAQ,MAAM;AACnD,SAAK,KAAK,GAAG;AACb,QAAI,SAAS,IAAK,MAAK,KAAK,QAAQ,GAAG;AACvC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAe,CAAC,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnC,UAAU,CAAC,QAAgB,YAA4C;AACrE,WAAO,SAAS,SACZ,CAAC,OAAO,YAAY,MAAM,MAAM,IAChC,CAAC,OAAO,YAAY,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,MAAe,CAAC,OAAO,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvC,KAAK,CAAC,MAAc,YAAyC;AAC3D,WAAO,SAAS,MAAM,CAAC,OAAO,OAAO,MAAM,IAAI,IAAI,CAAC,OAAO,OAAO,IAAI;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,CAAC,SAAiB,YAAyC;AACjE,WAAO,SAAS,MACZ,CAAC,OAAO,UAAU,MAAM,MAAM,OAAO,IACrC,CAAC,OAAO,UAAU,MAAM,OAAO;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,CAAC,YAAoG;AACzG,UAAM,OAAO,CAAC,OAAO,MAAM;AAC3B,QAAI,SAAS,YAAa,MAAK,KAAK,IAAI;AACxC,QAAI,SAAS,MAAO,MAAK,KAAK,SAAS;AACvC,QAAI,SAAS,OAAQ,MAAK,KAAK,QAAQ,MAAM;AAC7C,QAAI,SAAS,OAAQ,MAAK,KAAK,QAAQ,MAAM;AAC7C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,CAAC,MAAe,YAA6E;AACnG,UAAM,OAAO,CAAC,OAAO,QAAQ;AAC7B,QAAI,SAAS,IAAK,MAAK,KAAK,IAAI;AAChC,QAAI,SAAS,OAAQ,MAAK,KAAK,IAAI;AACnC,QAAI,KAAM,MAAK,KAAK,IAAI;AACxB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,CAAC,YAA2D;AAChE,UAAM,OAAO,CAAC,OAAO,MAAM;AAC3B,QAAI,SAAS,OAAQ,MAAK,KAAK,UAAU;AACzC,QAAI,SAAS,KAAM,MAAK,KAAK,QAAQ,IAAI;AACzC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,KAAK,CAAC,YAA6D;AACjE,UAAM,OAAO,CAAC,OAAO,KAAK;AAC1B,QAAI,SAAS,QAAS,MAAK,KAAK,WAAW;AAC3C,QAAI,SAAS,MAAO,MAAK,KAAK,MAAM,OAAO,QAAQ,KAAK,CAAC;AACzD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,CAAC,YAA2F;AACjG,UAAM,OAAO,CAAC,OAAO,OAAO;AAC5B,QAAI,SAAS,IAAK,MAAK,KAAK,KAAK;AAAA,aACxB,SAAS,KAAM,MAAK,KAAK,MAAM;AAAA,aAC/B,SAAS,KAAM,MAAK,KAAK,MAAM;AAAA,aAC/B,SAAS,QAAS,MAAK,KAAK,QAAQ,MAAM,QAAQ,OAAO;AAClE,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,CAAC,YAA2E;AACjF,UAAM,OAAO,CAAC,OAAO,OAAO;AAC5B,QAAI,SAAS,IAAK,MAAK,KAAK,OAAO;AACnC,QAAI,SAAS,MAAO,MAAK,KAAK,SAAS;AACvC,QAAI,SAAS,OAAQ,MAAK,KAAK,QAAQ,MAAM;AAC7C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,CAAC,YAAwE;AAC9E,UAAM,OAAO,CAAC,OAAO,OAAO;AAC5B,QAAI,SAAS,KAAM,MAAK,KAAK,QAAQ;AACrC,QAAI,SAAS,KAAM,MAAK,KAAK,QAAQ;AACrC,QAAI,SAAS,IAAK,MAAK,KAAK,QAAQ,GAAG;AACvC,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAe,CAAC,OAAO,MAAM;AACrC;;;ACpKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,IAAM,OAAO,CAAC,KAAa,YAA6D;AAC7F,QAAM,OAAO,CAAC,MAAM;AACpB,MAAI,SAAS,OAAQ,MAAK,KAAK,IAAI;AACnC,OAAK,KAAK,IAAI;AACd,MAAI,SAAS,QAAQ;AACnB,SAAK,KAAK,MAAM,QAAQ,MAAM;AAAA,EAChC;AACA,OAAK,KAAK,GAAG;AACb,SAAO;AACT;AAOO,IAAM,OAAO,CAAC,KAAa,YAA4D;AAC5F,QAAM,OAAO,CAAC,MAAM;AACpB,MAAI,SAAS,MAAO,MAAK,KAAK,IAAI;AAClC,MAAI,SAAS,QAAQ;AACnB,SAAK,KAAK,MAAM,QAAQ,MAAM;AAAA,EAChC;AACA,OAAK,KAAK,GAAG;AACb,SAAO;AACT;AAKO,IAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAKlB,MAAM,CAAC,MAAuB,CAAC,QAAQ,MAAM,IAAI,CAAC,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMpD,MAAM,CAAC,MAAuB,CAAC,MAAM,MAAM,aAAa,CAAC,sCAAsC;AAAA;AAAA;AAAA;AAAA;AAAA,EAM/F,QAAQ,CAAC,MAAuB,CAAC,MAAM,MAAM,YAAY,CAAC,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAM5E,MAAM,MAAe,CAAC,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,SAAS,CAAC,GAAW,mBAAqC;AACxD,UAAMA,WAAU,kBAAkB;AAClC,WAAO,CAAC,MAAM,MAAM,oBAAoBA,QAAO,yBAAyB,CAAC,qCAAqC;AAAA,EAChH;AACF;AAKO,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,MAAM,CAAC,MAAc,UAA4B;AAC/C,WAAO,QAAQ,CAAC,QAAQ,MAAM,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,MAAM,KAAK,IAAI;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,CAAC,MAAc,MAAuB,CAAC,MAAM,MAAM,MAAM,OAAO,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMzE,UAAU,MAAe,CAAC,QAAQ,MAAM,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAMrD,YAAY,MAAe,CAAC,MAAM,MAAM;AAC1C;;;ACrGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,IAAM,OAAO,CAAC,SAAiB,MAAe,YAA2F;AAC9I,QAAM,OAAO,CAAC,MAAM;AACpB,MAAI,SAAS,UAAW,MAAK,KAAK,IAAI;AACtC,MAAI,SAAS,WAAY,MAAK,KAAK,IAAI;AACvC,MAAI,SAAS,WAAY,MAAK,KAAK,IAAI;AACvC,OAAK,KAAK,OAAO;AACjB,MAAI,KAAM,MAAK,KAAK,IAAI;AACxB,SAAO;AACT;AAOO,IAAM,MAAM,CAAC,YAAoB,MAAc,YAA6C;AACjG,SAAO,SAAS,UACZ,CAAC,OAAO,MAAM,YAAY,IAAI,IAC9B,CAAC,OAAO,YAAY,IAAI;AAC9B;AAOO,IAAM,OAAO,CAAC,MAAc,UAA4B;AAC7D,SAAO,QAAQ,CAAC,QAAQ,MAAM,OAAO,KAAK,GAAG,IAAI,IAAI,CAAC,QAAQ,IAAI;AACpE;AAQO,IAAM,OAAO,CAAC,MAAc,OAAgB,YAA4C;AAC7F,QAAM,OAAO,CAAC,MAAM;AACpB,MAAI,SAAS,OAAQ,MAAK,KAAK,IAAI;AACnC,MAAI,MAAO,MAAK,KAAK,MAAM,OAAO,KAAK,CAAC;AACxC,OAAK,KAAK,IAAI;AACd,SAAO;AACT;AAOO,IAAM,KAAK,CAAC,MAAc,YAA6E;AAC5G,QAAM,OAAO,CAAC,IAAI;AAClB,MAAI,SAAS,MAAO,MAAK,KAAK,IAAI;AAClC,MAAI,SAAS,MAAO,MAAK,KAAK,IAAI;AAClC,MAAI,SAAS,MAAO,MAAK,KAAK,IAAI;AAClC,OAAK,KAAK,IAAI;AACd,SAAO;AACT;AAOO,IAAM,OAAO,CAAC,MAAc,YAAkF;AACnH,QAAM,OAAO,CAAC,MAAM;AACpB,MAAI,SAAS,QAAS,MAAK,KAAK,IAAI;AACpC,MAAI,SAAS,QAAS,MAAK,KAAK,IAAI;AACpC,MAAI,SAAS,OAAQ,MAAK,KAAK,IAAI;AACnC,OAAK,KAAK,IAAI;AACd,SAAO;AACT;AAOO,IAAM,OAAO,CAAC,MAAc,YAA2C;AAC5E,SAAO,SAAS,QAAQ,CAAC,QAAQ,MAAM,IAAI,IAAI,CAAC,QAAQ,IAAI;AAC9D;AAOO,IAAM,KAAK,CAAC,QAAgB,MAAe,YAA4D;AAC5G,QAAM,OAAO,CAAC,IAAI;AAClB,MAAI,SAAS,IAAK,MAAK,KAAK,IAAI;AAChC,MAAI,SAAS,QAAS,MAAK,KAAK,IAAI;AACpC,OAAK,KAAK,MAAM;AAChB,MAAI,KAAM,MAAK,KAAK,IAAI;AACxB,SAAO;AACT;AAOO,IAAM,QAAQ,CAAC,SAAiB,MAAiB,YAAsE;AAC5H,QAAM,YAAY,CAAC,OAAO;AAC1B,MAAI,SAAS,cAAe,WAAU,KAAK,IAAI;AAC/C,MAAI,SAAS,SAAU,WAAU,KAAK,MAAM,OAAO,QAAQ,QAAQ,CAAC;AACpE,YAAU,KAAK,OAAO;AACtB,MAAI,KAAM,WAAU,KAAK,GAAG,IAAI;AAChC,SAAO;AACT;AAOO,IAAM,MAAM,CAAC,SAAiB,MAAe,YAAmD;AACrG,QAAM,OAAO,CAAC,KAAK;AACnB,MAAI,SAAS,eAAgB,MAAK,KAAK,MAAM,QAAQ,cAAc;AACnE,OAAK,KAAK,OAAO;AACjB,MAAI,KAAM,MAAK,KAAK,IAAI;AACxB,SAAO;AACT;AAOO,IAAM,MAAM,CAAC,MAAc,YAAmF;AACnH,QAAM,OAAO,CAAC,KAAK;AACnB,MAAI,QAAQ,UAAW,MAAK,KAAK,MAAM,QAAQ,SAAS;AACxD,MAAI,QAAQ,OAAQ,MAAK,KAAK,MAAM,QAAQ,MAAM;AAClD,MAAI,QAAQ,WAAY,MAAK,KAAK,MAAM,QAAQ,UAAU;AAC1D,OAAK,KAAK,IAAI;AACd,SAAO;AACT;AAQO,IAAM,KAAK,CAAC,MAAc,MAAe,YAA8D;AAC5G,QAAM,OAAO,CAAC,IAAI;AAClB,MAAI,SAAS,QAAQ;AACnB,SAAK,KAAK,MAAM,QAAQ,MAAM;AAAA,EAChC,OAAO;AACL,QAAI,SAAS,QAAS,MAAK,KAAK,IAAI;AACpC,SAAK,KAAK,IAAI;AACd,QAAI,KAAM,MAAK,KAAK,IAAI;AAAA,EAC1B;AACA,SAAO;AACT;;;AC/JA;AAAA;AAAA;AAAA;AAAA;AAKO,IAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMjB,SAAS,CAAC,MAAc,YAAwC;AAC9D,UAAM,OAAO,CAAC,OAAO,QAAQ,IAAI;AACjC,QAAI,SAAS,IAAK,MAAK,KAAK,MAAM,QAAQ,GAAG;AAC7C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,CAAC,QAAgB,WAA4B;AACnD,WAAO,CAAC,OAAO,QAAQ,QAAQ,MAAM;AAAA,EACvC;AACF;AAOO,IAAM,QAAQ,CAAC,MAAc,YAAwC;AAC1E,SAAO,SAAS,MAAM,CAAC,SAAS,MAAM,MAAM,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,MAAM,IAAI;AACvF;;;ACjCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOO,IAAM,OAAO,CAAC,SAA0B,CAAC,QAAQ,IAAI;AAMrD,IAAM,MAAM,MAAe,CAAC,KAAK;AAOjC,IAAM,WAAW,CAAC,SAA2B;AAClD,SAAO,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU;AAChD;AAMO,IAAM,QAAQ,CAAC,YAA6B,CAAC,SAAS,OAAO;AAM7D,IAAM,SAAS,MAAe,CAAC,QAAQ;AAOvC,IAAM,QAAQ,CAAC,YAAyC;AAC7D,SAAO,SAAS,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO;AAClD;AAMO,IAAM,WAAW,MAAe,CAAC,UAAU;AAO3C,IAAM,KAAK,CAAC,MAAe,YAA2C;AAC3E,QAAM,OAAO,CAAC,IAAI;AAClB,MAAI,SAAS,MAAO,MAAK,KAAK,IAAI;AAClC,MAAI,KAAM,MAAK,KAAK,IAAI;AACxB,SAAO;AACT;AAOO,IAAM,KAAK,CAAC,MAAc,YAAgE;AAC/F,QAAM,OAAO,CAAC,IAAI;AAClB,MAAI,SAAS,MAAO,MAAK,KAAK,IAAI;AAClC,MAAI,SAAS,UAAW,MAAK,KAAK,IAAI;AACtC,OAAK,KAAK,IAAI;AACd,SAAO;AACT;AAMO,IAAM,QAAQ,CAAC,YAA6B,CAAC,SAAS,OAAO,OAAO,CAAC;AAOrE,IAAM,OAAO,CAAC,WAA6B;AAChD,SAAO,SAAS,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM;AAC5C;AAOO,IAAM,OAAO,CAAC,MAAc,YAA2D;AAC5F,QAAM,OAAO,CAAC,QAAQ,IAAI;AAC1B,MAAI,SAAS,KAAM,MAAK,KAAK,SAAS,QAAQ,IAAI;AAClD,MAAI,SAAS,KAAM,MAAK,KAAK,SAAS,QAAQ,IAAI;AAClD,SAAO;AACT;AAOO,IAAM,MAAM,CAAC,MAAc,YAA4C;AAC5E,SAAO,SAAS,SAAS,CAAC,OAAO,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI;AAC7D;AAOO,IAAM,OAAO,CAAC,OAAe,OAAe,YAA8D;AAC/G,QAAM,OAAO,CAAC,MAAM;AACpB,MAAI,SAAS,QAAS,MAAK,KAAK,IAAI;AACpC,MAAI,SAAS,MAAO,MAAK,KAAK,IAAI;AAClC,OAAK,KAAK,OAAO,KAAK;AACtB,SAAO;AACT;AAMO,IAAM,WAAW,CAAC,UAAoB,YAAgD;AAC3F,QAAM,SAAS,SAAS,KAAK,KAAK;AAClC,MAAI,SAAS,YAAY;AAEvB,WAAO,CAAC,MAAM,MAAM,uBAAuB,MAAM,SAAS;AAAA,EAC5D;AACA,SAAO,CAAC,MAAM,MAAM,GAAG,MAAM,SAAS;AACxC;AAMO,IAAM,MAAM,CAAC,SAAiB,SAA6B;AAChE,SAAO,OAAO,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO;AAC7C;AAKO,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKpB,QAAQ,CAAC,SAA2B;AAClC,WAAO,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,CAAC,SAA2B;AAClC,WAAO,OAAO,CAAC,UAAU,MAAM,IAAI,IAAI,CAAC,UAAU,IAAI;AAAA,EACxD;AACF;AAOO,IAAM,SAAS,CAAC,MAAc,YAA2C;AAC9E,SAAO,SAAS,QAAQ,CAAC,UAAU,MAAM,IAAI,IAAI,CAAC,UAAU,IAAI;AAClE;AAOO,IAAM,YAAY,CAAC,MAAc,YAA2C;AACjF,SAAO,SAAS,QAAQ,CAAC,aAAa,MAAM,IAAI,IAAI,CAAC,aAAa,IAAI;AACxE;AAMO,IAAM,UAAU,CAAC,MAAc,YAA2C;AAC/E,SAAO,SAAS,QAAQ,CAAC,WAAW,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI;AACpE;;;AC/LA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA2BO,IAAM,UAAU,CAAC,YAIT;AACb,QAAM,aAAa,SAAS,UACxB,6CAA6C,QAAQ,OAAO,KAC5D;AAEJ,QAAM,YAAY,SAAS,SAAS,UAAU;AAG9C,MAAI,aAAa,QAAQ,SAAS,IAAI,UAAU;AAGhD,MAAI,SAAS,QAAQ;AACnB,iBAAa,uBAAuB,QAAQ,MAAM,KAAK,UAAU;AAAA,EACnE,WAAW,OAAO,YAAY,eAAe,QAAQ,KAAK,oBAAoB;AAE5E,iBAAa,uBAAuB,QAAQ,IAAI,kBAAkB,KAAK,UAAU;AAAA,EACnF;AAGA,SAAO,CAAC,MAAM,MAAM,UAAU;AAChC;AAeO,IAAM,cAAc,MAAe;AACxC,SAAO,CAAC,MAAM,MAAM,gCAAgC;AACtD;AAeO,IAAM,UAAU,MAAe;AACpC,SAAO,CAAC,WAAW,WAAW;AAChC;AA0BO,IAAM,QAAQ,CAAC,YAKP;AACb,QAAM,OAAO,CAAC,WAAW,OAAO;AAEhC,QAAM,SAAS,SAAS,UAAW,OAAO,YAAY,eAAe,QAAQ,KAAK;AAClF,QAAM,cAAc,SAAS;AAG7B,MAAI,aAAa;AACf,SAAK,KAAK,kBAAkB,WAAW;AAAA,EACzC,WAAW,QAAQ;AACjB,SAAK,KAAK,aAAa,MAAM;AAAA,EAC/B;AAEA,MAAI,SAAS,MAAM;AACjB,SAAK,KAAK,UAAU,OAAO,QAAQ,IAAI,CAAC;AAAA,EAC1C;AAEA,MAAI,SAAS,aAAa,SAAS;AACjC,SAAK,KAAK,WAAW;AAAA,EACvB;AAEA,SAAO;AACT;AAcO,IAAM,OAAO,MAAe;AACjC,SAAO,CAAC,SAAS,MAAM,eAAe;AACxC;AAkBO,IAAM,SAAS,CAAC,YAGR;AACb,QAAM,OAAO,SAAS,QAAQ;AAC9B,QAAMC,QAAO,SAAS,QAAQ;AAC9B,SAAO,CAAC,MAAM,MAAM,kBAAkB,IAAI,IAAIA,KAAI,0BAA0B;AAC9E;AA0BO,IAAM,UAAU,CAAC,YAGT;AACb,QAAM,OAAO,SAAS,QAAQ;AAC9B,QAAMA,QAAO,SAAS,QAAQ;AAE9B,SAAO,CAAC,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA,0BAII,IAAI,IAAIA,KAAI;AAAA;AAAA;AAAA;AAAA,IAIlC,KAAK,CAAC;AACV;AAwBO,IAAM,QAAQ,CAAC,YAMP;AACb,QAAM,SAAS,SAAS,UAAW,OAAO,YAAY,eAAe,QAAQ,KAAK;AAClF,QAAM,cAAc,SAAS;AAE7B,QAAM,aAAa,SAAS,UACxB,6CAA6C,QAAQ,OAAO,KAC5D;AAEJ,QAAM,YAAY,SAAS,SAAS,UAAU;AAG9C,MAAI,aAAa,QAAQ,SAAS,IAAI,UAAU;AAGhD,MAAI,QAAQ;AACV,iBAAa,uBAAuB,MAAM,KAAK,UAAU;AAAA,EAC3D;AAGA,MAAI,WAAW;AAGf,MAAI,aAAa;AACf,gBAAY,oBAAoB,WAAW;AAAA,EAC7C,WAAW,QAAQ;AACjB,gBAAY,eAAe,MAAM;AAAA,EACnC;AAEA,MAAI,SAAS,MAAM;AACjB,gBAAY,WAAW,QAAQ,IAAI;AAAA,EACrC;AAGA,QAAM,UAAU,GAAG,UAAU,OAAO,QAAQ;AAE5C,SAAO,CAAC,MAAM,MAAM,OAAO;AAC7B;AA2BO,IAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AChRO,IAAM,MAAM,OAAO;AAAA;AAAA,EAExB,CAAC,SAAkB,YAA8D;AAC/E,WAAO,kBAAkB,MAAM,SAAS,OAAO;AAAA,EACjD;AAAA,EACA;AAAA;AAAA,IAEE,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA,EACL;AACF;AAIO,IAAM;AAAA,EACX,OAAAC;AAAA,EAAO,IAAAC;AAAA,EAAI,IAAAC;AAAA,EAAI,IAAAC;AAAA,EAAI,IAAAC;AAAA,EAAI,KAAAC;AAAA,EAAK,OAAAC;AAAA,EAAO,OAAAC;AAAA,EAAO,OAAAC;AAAA,EAAO,KAAAC;AAAA,EAAK,IAAAC;AAAA,EAAI,UAAAC;AAAA,EAAU,MAAAC;AAAA,EAAM,OAAAC;AAC5E,IAAI;AAGG,IAAM,EAAE,MAAAC,OAAM,QAAAC,SAAQ,MAAAC,OAAM,OAAAC,QAAO,IAAAC,KAAI,SAAAC,SAAQ,IAAI;AAGnD,IAAM,EAAE,KAAAC,MAAK,MAAAC,OAAM,MAAAC,OAAM,KAAAC,MAAK,KAAAC,MAAK,MAAAC,OAAM,KAAAC,MAAK,MAAAC,OAAM,IAAAC,KAAI,QAAAC,SAAQ,MAAAC,MAAK,IAAI;AAGzE,IAAM,EAAE,KAAAC,KAAI,IAAI;AAGhB,IAAM,EAAE,MAAAC,OAAM,MAAAC,OAAM,MAAAC,OAAM,KAAAC,KAAI,IAAI;AAGlC,IAAM,EAAE,MAAAC,OAAM,KAAAC,MAAK,MAAAC,OAAM,MAAAC,OAAM,IAAAC,KAAI,MAAAC,OAAM,MAAAC,OAAM,IAAAC,KAAI,OAAAC,QAAO,KAAAC,MAAK,KAAAC,MAAK,IAAAC,IAAG,IAAI;AAG3E,IAAM,EAAE,KAAAC,MAAK,OAAAC,OAAM,IAAI;AAGvB,IAAM;AAAA,EACX,MAAAC;AAAA,EAAM,KAAAC;AAAA,EAAK,UAAAC;AAAA,EAAU,OAAAC;AAAA,EAAO,QAAAC;AAAA,EAAQ,OAAAC;AAAA,EAAO,UAAAC;AAAA,EAC3C,IAAAC;AAAA,EAAI,IAAAC;AAAA,EAAI,OAAAC;AAAA,EAAO,MAAAC;AAAA,EAAM,MAAAC;AAAA,EAAM,KAAAC;AAAA,EAAK,MAAAC;AAAA,EAAM,UAAAC;AAAA,EAAU,KAAAC;AAAA,EAChD,QAAAC;AAAA,EAAQ,QAAAC;AAAA,EAAQ,WAAAC;AAAA,EAAW,SAAAC;AAC7B,IAAI;AAGG,IAAM,EAAE,SAAAC,SAAQ,IAAI;AAG3B,IAAO,cAAQ;","names":["timeout","port","mkdir","rm","cp","mv","ls","pwd","chmod","chown","touch","cat","ln","readlink","test","rsync","node","python","kill","pkill","ps","timeout","npm","pnpm","yarn","pip","bun","deno","npx","bunx","uv","poetry","pipx","git","curl","wget","port","net","grep","sed","head","tail","wc","sort","uniq","jq","xargs","awk","cut","tr","tar","unzip","echo","env","printenv","which","whoami","uname","hostname","df","du","sleep","date","find","tee","diff","parallel","raw","base64","md5sum","sha256sum","sha1sum","compute"]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/shell.ts","../src/commands/filesystem.ts","../src/commands/process.ts","../src/commands/packages.ts","../src/commands/git.ts","../src/commands/network.ts","../src/commands/text.ts","../src/commands/archive.ts","../src/commands/system.ts","../src/commands/compute.ts","../src/index.ts"],"sourcesContent":["import type { Command, ShellOptions } from './types.js';\n\n/**\n * Escape a string for safe use in shell commands using single quotes.\n * This is the safest method as single quotes preserve all characters literally,\n * except for single quotes themselves which must be handled specially.\n *\n * @example shellEscape(\"hello world\") // \"'hello world'\"\n * @example shellEscape(\"it's here\") // \"'it'\\\\''s here'\"\n * @example shellEscape(\"$HOME\") // \"'$HOME'\" (no variable expansion)\n */\nexport function shellEscape(s: string): string {\n // Wrap in single quotes and escape any embedded single quotes\n // 'foo'bar' becomes 'foo'\\''bar' (end quote, escaped quote, start quote)\n return \"'\" + s.replace(/'/g, \"'\\\\''\") + \"'\";\n}\n\n/**\n * Escape a string for use inside double quotes.\n *\n * This is a legacy helper kept for backward compatibility; for new code,\n * prefer {@link shellEscape} which uses single-quoted, safer shell escaping.\n *\n * @example esc('path with \"quotes\"') // 'path with \\\\\"quotes\\\\\"'\n * @deprecated Use {@link shellEscape} for safer escaping. This function only escapes\n * double quotes and may not be safe for all shell contexts. Migration: replace\n * `esc(str)` with `shellEscape(str)`.\n */\nexport function esc(s: string): string {\n return s.replace(/\"/g, '\\\\\"');\n}\n\n/**\n * Escape each argument in a command array and join them with spaces.\n * Arguments that are safe (alphanumeric, dash, underscore, dot, slash, colon, equals)\n * are left unquoted for readability.\n *\n * @example escapeArgs(['npm', 'install', 'express']) // 'npm install express'\n * @example escapeArgs(['echo', 'hello world']) // \"echo 'hello world'\"\n * @example escapeArgs(['cp', 'file with spaces.txt', '/dest']) // \"cp 'file with spaces.txt' /dest\"\n */\nexport function escapeArgs(args: string[]): string {\n return args.map(arg => {\n // If arg contains only safe characters, no escaping needed\n if (/^[a-zA-Z0-9_./:=@-]+$/.test(arg) && arg.length > 0) {\n return arg;\n }\n // Otherwise, use shellEscape for safety\n return shellEscape(arg);\n }).join(' ');\n}\n\n/**\n * Internal helper to build shell command with proper escaping\n */\nexport function buildShellCommand(shellBin: string, command: Command, options?: ShellOptions): Command {\n if (!options?.cwd && !options?.background) {\n return command;\n }\n\n let cmdStr = escapeArgs(command);\n\n // Build command: first wrap with nohup if background, then prepend cd if cwd\n // Result: cd '/path' && nohup cmd > /dev/null 2>&1 &\n if (options.background) {\n cmdStr = `nohup ${cmdStr} > /dev/null 2>&1 &`;\n }\n\n if (options.cwd) {\n cmdStr = `cd ${shellEscape(options.cwd)} && ${cmdStr}`;\n }\n\n return [shellBin, '-c', cmdStr];\n}\n","import type { Command, ShellOptions } from './types.js';\nimport { buildShellCommand } from './utils.js';\n\n/**\n * Shell wrapper - callable function with shell-specific methods\n *\n * @example\n * // Default (sh)\n * shell(cmd.npm.install(), { cwd: '/app' })\n * // => ['sh', '-c', 'cd \"/app\" && npm install']\n *\n * @example\n * // Shell-specific\n * shell.bash(cmd.node('server.js'), { background: true })\n * // => ['bash', '-c', 'nohup node server.js > /dev/null 2>&1 &']\n *\n * @example\n * shell.zsh(cmd.npm.run('dev'), { cwd: '/app' })\n * // => ['zsh', '-c', 'cd \"/app\" && npm run dev']\n */\nexport const shell = Object.assign(\n // Default: use sh\n (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('sh', command, options);\n },\n {\n /** Wrap with sh (POSIX shell) */\n sh: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('sh', command, options);\n },\n /** Wrap with bash */\n bash: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('bash', command, options);\n },\n /** Wrap with zsh */\n zsh: (command: Command, options?: ShellOptions): Command => {\n return buildShellCommand('zsh', command, options);\n },\n }\n);\n\n// Individual shell exports\nexport const sh = shell.sh;\nexport const bash = shell.bash;\nexport const zsh = shell.zsh;\n","import type { Command } from '../types.js';\n\n/**\n * Create directory\n *\n * By default, recursive is true (includes -p flag to create parent directories).\n * This differs from standard shell mkdir which requires explicit -p flag.\n *\n * @example mkdir('/app/src') // ['mkdir', '-p', '/app/src']\n * @example mkdir('/app/src', { recursive: false }) // ['mkdir', '/app/src']\n */\nexport const mkdir = (path: string, options?: { recursive?: boolean }): Command => {\n const recursive = options?.recursive ?? true;\n return recursive ? ['mkdir', '-p', path] : ['mkdir', path];\n};\n\n/**\n * Remove file or directory\n * @example rm('/app/file.txt') // ['rm', '/app/file.txt']\n * @example rm('/app/tmp', { recursive: true }) // ['rm', '-r', '/app/tmp']\n * @example rm('/app/tmp', { recursive: true, force: true }) // ['rm', '-rf', '/app/tmp']\n * @example rm.rf('/app/tmp') // ['rm', '-rf', '/app/tmp']\n * @example rm.auto('/app/anything') // Automatically detects file vs directory\n */\nexport const rm = Object.assign(\n (path: string, options?: { recursive?: boolean; force?: boolean }): Command => {\n const flags: string[] = [];\n if (options?.recursive) flags.push('r');\n if (options?.force) flags.push('f');\n return flags.length > 0 ? ['rm', `-${flags.join('')}`, path] : ['rm', path];\n },\n {\n /**\n * Force remove file or directory (always uses -rf)\n * @example rm.rf('/app/tmp')\n */\n rf: (path: string): Command => ['rm', '-rf', path],\n \n /**\n * Smart remove - automatically detects if path is a directory and uses appropriate flags\n * Uses a shell one-liner to check if directory and apply -r flag accordingly\n * @example rm.auto('/app/tmp')\n */\n auto: (path: string): Command => {\n // Shell one-liner: if it's a directory, use -rf, otherwise just rm -f\n return ['sh', '-c', `if [ -d \"${path}\" ]; then rm -rf \"${path}\"; else rm -f \"${path}\"; fi`];\n }\n }\n);\n\n/**\n * Copy file or directory\n * @example cp('/src/file.txt', '/dest/file.txt')\n */\nexport const cp = (src: string, dest: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['cp', '-r', src, dest] : ['cp', src, dest];\n};\n\n/**\n * Move/rename file or directory\n * @example mv('/old/path', '/new/path')\n */\nexport const mv = (src: string, dest: string): Command => ['mv', src, dest];\n\n/**\n * List directory contents\n * @example ls('/app') // ['ls', '/app']\n * @example ls('/app', { all: true, long: true }) // ['ls', '-la', '/app']\n */\nexport const ls = (path?: string, options?: { all?: boolean; long?: boolean }): Command => {\n const flags: string[] = [];\n if (options?.long) flags.push('l');\n if (options?.all) flags.push('a');\n const flagStr = flags.length > 0 ? `-${flags.join('')}` : '';\n if (flagStr && path) return ['ls', flagStr, path];\n if (flagStr) return ['ls', flagStr];\n if (path) return ['ls', path];\n return ['ls'];\n};\n\n/**\n * Print working directory\n * @example pwd() // ['pwd']\n */\nexport const pwd = (): Command => ['pwd'];\n\n/**\n * Change file permissions\n * @example chmod('755', '/app/script.sh')\n */\nexport const chmod = (mode: string, path: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['chmod', '-R', mode, path] : ['chmod', mode, path];\n};\n\n/**\n * Change file owner/group\n * @example chown('user', '/app/file.txt')\n * @example chown('user:group', '/app', { recursive: true })\n */\nexport const chown = (owner: string, path: string, options?: { recursive?: boolean }): Command => {\n return options?.recursive ? ['chown', '-R', owner, path] : ['chown', owner, path];\n};\n\n/**\n * Create empty file or update timestamp\n * @example touch('/app/newfile.txt')\n */\nexport const touch = (path: string): Command => ['touch', path];\n\n/**\n * Read file contents\n * @example cat('/app/file.txt')\n */\nexport const cat = (path: string): Command => ['cat', path];\n\n/**\n * Create symbolic link\n * @example ln('/app/config', '/etc/app/config')\n * @example ln('/app/config', '/etc/app/config', { symbolic: true, force: true })\n */\nexport const ln = (target: string, link: string, options?: { symbolic?: boolean; force?: boolean }): Command => {\n const args = ['ln'];\n if (options?.symbolic !== false) args.push('-s'); // symbolic by default\n if (options?.force) args.push('-f');\n args.push(target, link);\n return args as Command;\n};\n\n/**\n * Resolve symbolic link\n * @example readlink('/usr/bin/python')\n * @example readlink('/usr/bin/python', { canonical: true })\n */\nexport const readlink = (path: string, options?: { canonical?: boolean }): Command => {\n return options?.canonical ? ['readlink', '-f', path] : ['readlink', path];\n};\n\n/**\n * Filesystem checks (exit 0 if true, 1 if false)\n * @example test.exists('/app/file.txt')\n * @example test.isDir('/app')\n */\nexport const test = {\n exists: (path: string): Command => ['test', '-e', path],\n isFile: (path: string): Command => ['test', '-f', path],\n isDir: (path: string): Command => ['test', '-d', path],\n isReadable: (path: string): Command => ['test', '-r', path],\n isWritable: (path: string): Command => ['test', '-w', path],\n isExecutable: (path: string): Command => ['test', '-x', path],\n notEmpty: (path: string): Command => ['test', '-s', path],\n isSymlink: (path: string): Command => ['test', '-L', path],\n};\n\n/**\n * Sync files/directories with rsync\n * @example rsync('/src/', '/dest/')\n * @example rsync('/src/', 'user@host:/dest/', { archive: true, compress: true })\n */\nexport const rsync = (src: string, dest: string, options?: {\n archive?: boolean;\n verbose?: boolean;\n compress?: boolean;\n delete?: boolean;\n dryRun?: boolean;\n exclude?: string[];\n}): Command => {\n const args = ['rsync'];\n if (options?.archive) args.push('-a');\n if (options?.verbose) args.push('-v');\n if (options?.compress) args.push('-z');\n if (options?.delete) args.push('--delete');\n if (options?.dryRun) args.push('--dry-run');\n if (options?.exclude) {\n for (const pattern of options.exclude) {\n args.push('--exclude', pattern);\n }\n }\n args.push(src, dest);\n return args as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * Run Node.js script\n * @example node('server.js')\n * @example node('server.js', ['--port', '3000'])\n */\nexport const node = (script: string, args?: string[]): Command => {\n return args ? ['node', script, ...args] : ['node', script];\n};\n\n/**\n * Run Python script\n * @example python('script.py')\n * @example python('script.py', ['--verbose'])\n */\nexport const python = (script: string, args?: string[]): Command => {\n return args ? ['python3', script, ...args] : ['python3', script];\n};\n\n/**\n * Kill process by PID\n * @example kill(1234)\n * @example kill(1234, 9) // SIGKILL\n */\nexport const kill = (pid: number, signal?: number): Command => {\n return signal ? ['kill', `-${signal}`, String(pid)] : ['kill', String(pid)];\n};\n\n/**\n * Kill processes by name\n * @example pkill('node')\n * @example pkill('python', { signal: 9 })\n */\nexport const pkill = (name: string, options?: { signal?: number }): Command => {\n return options?.signal\n ? ['pkill', `-${options.signal}`, name]\n : ['pkill', name];\n};\n\n/**\n * List processes\n * @example ps()\n * @example ps({ all: true })\n */\nexport const ps = (options?: { all?: boolean }): Command => {\n return options?.all ? ['ps', 'aux'] : ['ps'];\n};\n\n/**\n * Run command with timeout\n * @example timeout(30, 'npm', ['test'])\n * @example timeout(10, 'curl', ['https://example.com'])\n */\nexport const timeout = (seconds: number, command: string, args?: string[]): Command => {\n const base: string[] = ['timeout', String(seconds), command];\n return args ? [...base, ...args] as Command : base as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * npm package manager commands\n */\nexport const npm = {\n /**\n * Install packages\n * @example npm.install() // ['npm', 'install']\n * @example npm.install('express') // ['npm', 'install', 'express']\n * @example npm.install('express', { dev: true }) // ['npm', 'install', '-D', 'express']\n */\n install: (pkg?: string, options?: { dev?: boolean; global?: boolean }): Command => {\n const args = ['npm', 'install'];\n if (options?.dev) args.push('-D');\n if (options?.global) args.push('-g');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run npm script\n * @example npm.run('build')\n * @example npm.run('test', ['--coverage'])\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['npm', 'run', script, '--', ...args] : ['npm', 'run', script];\n },\n\n /**\n * Initialize new package\n * @example npm.init() // ['npm', 'init', '-y']\n */\n init: (): Command => ['npm', 'init', '-y'],\n\n /**\n * Uninstall package\n * @example npm.uninstall('lodash')\n */\n uninstall: (pkg: string): Command => ['npm', 'uninstall', pkg],\n};\n\n/**\n * pnpm package manager commands\n */\nexport const pnpm = {\n /**\n * Install packages with pnpm\n * @example pnpm.install()\n * @example pnpm.install('express')\n */\n install: (pkg?: string, options?: { dev?: boolean }): Command => {\n const args = ['pnpm', 'install'];\n if (options?.dev) args.push('-D');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run pnpm script\n * @example pnpm.run('build')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['pnpm', 'run', script, '--', ...args] : ['pnpm', 'run', script];\n },\n};\n\n/**\n * yarn package manager commands\n */\nexport const yarn = {\n /**\n * Install packages with yarn\n * @example yarn.install()\n */\n install: (): Command => ['yarn', 'install'],\n\n /**\n * Add package\n * @example yarn.add('express')\n * @example yarn.add('typescript', { dev: true })\n */\n add: (pkg: string, options?: { dev?: boolean }): Command => {\n return options?.dev ? ['yarn', 'add', '-D', pkg] : ['yarn', 'add', pkg];\n },\n\n /**\n * Run yarn script\n * @example yarn.run('build')\n */\n run: (script: string): Command => ['yarn', 'run', script],\n};\n\n/**\n * pip Python package manager commands\n */\nexport const pip = {\n /**\n * Install Python package\n * @example pip.install('requests')\n * @example pip.install('-r requirements.txt')\n */\n install: (pkg: string): Command => ['pip', 'install', pkg],\n\n /**\n * Uninstall Python package\n * @example pip.uninstall('requests')\n */\n uninstall: (pkg: string): Command => ['pip', 'uninstall', '-y', pkg],\n};\n\n/**\n * bun runtime commands\n */\nexport const bun = {\n /**\n * Install packages with bun\n * @example bun.install()\n * @example bun.install('express')\n */\n install: (pkg?: string, options?: { dev?: boolean }): Command => {\n const args = ['bun', 'install'];\n if (options?.dev) args.push('-D');\n if (pkg) args.push(pkg);\n return args as Command;\n },\n\n /**\n * Run bun script\n * @example bun.run('build')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['bun', 'run', script, ...args] : ['bun', 'run', script];\n },\n\n /**\n * Run file with bun\n * @example bun.exec('server.ts')\n */\n exec: (file: string, args?: string[]): Command => {\n return args ? ['bun', file, ...args] : ['bun', file];\n },\n};\n\n/**\n * deno runtime commands\n */\nexport const deno = {\n /**\n * Run deno script\n * @example deno.run('server.ts')\n * @example deno.run('server.ts', { allow: ['net', 'read'] })\n */\n run: (file: string, options?: { allow?: string[] }): Command => {\n const args = ['deno', 'run'];\n if (options?.allow) {\n for (const perm of options.allow) {\n args.push(`--allow-${perm}`);\n }\n }\n args.push(file);\n return args as Command;\n },\n\n /**\n * Install deno package\n * @example deno.install('https://deno.land/std/http/file_server.ts')\n */\n install: (url: string, options?: { name?: string }): Command => {\n const args = ['deno', 'install'];\n if (options?.name) args.push('-n', options.name);\n args.push(url);\n return args as Command;\n },\n};\n\n/**\n * Run packages with npx - callable function with additional methods\n * @example npx('create-react-app', ['my-app']) // run package directly\n * @example npx.concurrently(['npm:dev', 'npm:watch']) // run concurrently\n */\nexport const npx = Object.assign(\n (pkg: string, args?: string[]): Command => {\n return args ? ['npx', pkg, ...args] : ['npx', pkg];\n },\n {\n /**\n * Run commands in parallel with concurrently (requires npx)\n * @example npx.concurrently(['npm:dev', 'npm:watch'])\n * @example npx.concurrently(['npm run dev', 'npm run watch'], { names: ['dev', 'watch'], killOthers: true })\n */\n concurrently: (commands: string[], options?: { names?: string[]; killOthers?: boolean }): Command => {\n const args = ['npx', 'concurrently'];\n if (options?.killOthers) args.push('--kill-others');\n if (options?.names) args.push('--names', options.names.join(','));\n args.push(...commands);\n return args as Command;\n },\n }\n);\n\n/**\n * Run packages with bunx - callable function with additional methods\n * @example bunx('create-next-app', ['my-app']) // run package directly\n * @example bunx.concurrently(['npm:dev', 'npm:watch']) // run concurrently\n */\nexport const bunx = Object.assign(\n (pkg: string, args?: string[]): Command => {\n return args ? ['bunx', pkg, ...args] : ['bunx', pkg];\n },\n {\n /**\n * Run commands in parallel with concurrently (requires bunx)\n * @example bunx.concurrently(['npm:dev', 'npm:watch'])\n */\n concurrently: (commands: string[], options?: { names?: string[]; killOthers?: boolean }): Command => {\n const args = ['bunx', 'concurrently'];\n if (options?.killOthers) args.push('--kill-others');\n if (options?.names) args.push('--names', options.names.join(','));\n args.push(...commands);\n return args as Command;\n },\n }\n);\n\n/**\n * uv - Fast Python package manager\n */\nexport const uv = {\n /**\n * Install Python packages with uv\n * @example uv.install('requests')\n * @example uv.install('-r requirements.txt')\n */\n install: (pkg: string): Command => ['uv', 'pip', 'install', pkg],\n\n /**\n * Run Python script with uv\n * @example uv.run('script.py')\n */\n run: (script: string, args?: string[]): Command => {\n return args ? ['uv', 'run', script, ...args] : ['uv', 'run', script];\n },\n\n /**\n * Sync dependencies from pyproject.toml\n * @example uv.sync()\n */\n sync: (): Command => ['uv', 'sync'],\n\n /**\n * Create virtual environment\n * @example uv.venv()\n * @example uv.venv('.venv')\n */\n venv: (path?: string): Command => {\n return path ? ['uv', 'venv', path] : ['uv', 'venv'];\n },\n};\n\n/**\n * poetry - Python dependency management\n */\nexport const poetry = {\n /**\n * Install dependencies\n * @example poetry.install()\n */\n install: (options?: { noRoot?: boolean }): Command => {\n const args = ['poetry', 'install'];\n if (options?.noRoot) args.push('--no-root');\n return args as Command;\n },\n\n /**\n * Add a dependency\n * @example poetry.add('requests')\n * @example poetry.add('pytest', { dev: true })\n */\n add: (pkg: string, options?: { dev?: boolean }): Command => {\n return options?.dev\n ? ['poetry', 'add', '--group', 'dev', pkg]\n : ['poetry', 'add', pkg];\n },\n\n /**\n * Run command in poetry environment\n * @example poetry.run('python', ['script.py'])\n */\n run: (command: string, args?: string[]): Command => {\n return args ? ['poetry', 'run', command, ...args] : ['poetry', 'run', command];\n },\n\n /**\n * Build package\n * @example poetry.build()\n */\n build: (): Command => ['poetry', 'build'],\n};\n\n/**\n * pipx - Install and run Python applications\n */\nexport const pipx = {\n /**\n * Install application globally\n * @example pipx.install('black')\n */\n install: (pkg: string): Command => ['pipx', 'install', pkg],\n\n /**\n * Run application without installing\n * @example pipx.run('black', ['--check', '.'])\n */\n run: (pkg: string, args?: string[]): Command => {\n return args ? ['pipx', 'run', pkg, ...args] : ['pipx', 'run', pkg];\n },\n\n /**\n * Uninstall application\n * @example pipx.uninstall('black')\n */\n uninstall: (pkg: string): Command => ['pipx', 'uninstall', pkg],\n\n /**\n * Upgrade application\n * @example pipx.upgrade('black')\n */\n upgrade: (pkg: string): Command => ['pipx', 'upgrade', pkg],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Git version control commands\n */\nexport const git = {\n /**\n * Clone repository\n * @example git.clone('https://github.com/user/repo.git')\n * @example git.clone('https://github.com/user/repo.git', { depth: 1 })\n */\n clone: (url: string, options?: { depth?: number; branch?: string; dir?: string }): Command => {\n const args = ['git', 'clone'];\n if (options?.depth) args.push('--depth', String(options.depth));\n if (options?.branch) args.push('-b', options.branch);\n args.push(url);\n if (options?.dir) args.push(options.dir);\n return args as Command;\n },\n\n /**\n * Pull latest changes\n * @example git.pull()\n */\n pull: (): Command => ['git', 'pull'],\n\n /**\n * Checkout branch\n * @example git.checkout('main')\n * @example git.checkout('feature', { create: true })\n */\n checkout: (branch: string, options?: { create?: boolean }): Command => {\n return options?.create\n ? ['git', 'checkout', '-b', branch]\n : ['git', 'checkout', branch];\n },\n\n /**\n * Git status\n * @example git.status()\n */\n status: (): Command => ['git', 'status'],\n\n /**\n * Stage files\n * @example git.add('.')\n * @example git.add('src/index.ts')\n */\n add: (path: string, options?: { all?: boolean }): Command => {\n return options?.all ? ['git', 'add', '-A', path] : ['git', 'add', path];\n },\n\n /**\n * Commit staged changes\n * @example git.commit('feat: add new feature')\n * @example git.commit('fix: bug fix', { all: true })\n */\n commit: (message: string, options?: { all?: boolean }): Command => {\n return options?.all\n ? ['git', 'commit', '-a', '-m', message]\n : ['git', 'commit', '-m', message];\n },\n\n /**\n * Push to remote\n * @example git.push()\n * @example git.push({ remote: 'origin', branch: 'main' })\n * @example git.push({ setUpstream: true, branch: 'feature' })\n */\n push: (options?: { remote?: string; branch?: string; setUpstream?: boolean; force?: boolean }): Command => {\n const args = ['git', 'push'];\n if (options?.setUpstream) args.push('-u');\n if (options?.force) args.push('--force');\n if (options?.remote) args.push(options.remote);\n if (options?.branch) args.push(options.branch);\n return args as Command;\n },\n\n /**\n * List or create branches\n * @example git.branch()\n * @example git.branch({ all: true })\n * @example git.branch('new-feature', { create: true })\n */\n branch: (name?: string, options?: { all?: boolean; delete?: boolean; create?: boolean }): Command => {\n const args = ['git', 'branch'];\n if (options?.all) args.push('-a');\n if (options?.delete) args.push('-d');\n if (name) args.push(name);\n return args as Command;\n },\n\n /**\n * Show changes\n * @example git.diff()\n * @example git.diff({ staged: true })\n * @example git.diff({ file: 'src/index.ts' })\n */\n diff: (options?: { staged?: boolean; file?: string }): Command => {\n const args = ['git', 'diff'];\n if (options?.staged) args.push('--staged');\n if (options?.file) args.push(options.file);\n return args as Command;\n },\n\n /**\n * Show commit history\n * @example git.log()\n * @example git.log({ oneline: true, count: 10 })\n */\n log: (options?: { oneline?: boolean; count?: number }): Command => {\n const args = ['git', 'log'];\n if (options?.oneline) args.push('--oneline');\n if (options?.count) args.push('-n', String(options.count));\n return args as Command;\n },\n\n /**\n * Stash changes\n * @example git.stash()\n * @example git.stash({ pop: true })\n * @example git.stash({ list: true })\n */\n stash: (options?: { pop?: boolean; list?: boolean; drop?: boolean; message?: string }): Command => {\n const args = ['git', 'stash'];\n if (options?.pop) args.push('pop');\n else if (options?.list) args.push('list');\n else if (options?.drop) args.push('drop');\n else if (options?.message) args.push('push', '-m', options.message);\n return args as Command;\n },\n\n /**\n * Fetch from remote\n * @example git.fetch()\n * @example git.fetch({ all: true })\n */\n fetch: (options?: { remote?: string; all?: boolean; prune?: boolean }): Command => {\n const args = ['git', 'fetch'];\n if (options?.all) args.push('--all');\n if (options?.prune) args.push('--prune');\n if (options?.remote) args.push(options.remote);\n return args as Command;\n },\n\n /**\n * Reset changes\n * @example git.reset()\n * @example git.reset({ hard: true })\n * @example git.reset({ ref: 'HEAD~1' })\n */\n reset: (options?: { hard?: boolean; soft?: boolean; ref?: string }): Command => {\n const args = ['git', 'reset'];\n if (options?.hard) args.push('--hard');\n if (options?.soft) args.push('--soft');\n if (options?.ref) args.push(options.ref);\n return args as Command;\n },\n\n /**\n * Initialize repository\n * @example git.init()\n */\n init: (): Command => ['git', 'init'],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Download file with curl\n * @example curl('https://example.com/file.tar.gz')\n * @example curl('https://example.com/file.tar.gz', { output: 'file.tar.gz' })\n */\nexport const curl = (url: string, options?: { output?: string; silent?: boolean }): Command => {\n const args = ['curl'];\n if (options?.silent) args.push('-s');\n args.push('-L'); // follow redirects\n if (options?.output) {\n args.push('-o', options.output);\n }\n args.push(url);\n return args as Command;\n};\n\n/**\n * Download file with wget\n * @example wget('https://example.com/file.tar.gz')\n * @example wget('https://example.com/file.tar.gz', { output: 'file.tar.gz' })\n */\nexport const wget = (url: string, options?: { output?: string; quiet?: boolean }): Command => {\n const args = ['wget'];\n if (options?.quiet) args.push('-q');\n if (options?.output) {\n args.push('-O', options.output);\n }\n args.push(url);\n return args as Command;\n};\n\n/**\n * Port management utilities\n */\nexport const port = {\n /**\n * Find process using a port (using lsof)\n * @example port.find(3000)\n */\n find: (p: number): Command => ['lsof', '-i', `:${p}`],\n\n /**\n * Kill process on a port\n * @example port.kill(3000)\n */\n kill: (p: number): Command => ['sh', '-c', `lsof -ti :${p} | xargs kill -9 2>/dev/null || true`],\n\n /**\n * Check if port is in use (exits 0 if in use)\n * @example port.isUsed(3000)\n */\n isUsed: (p: number): Command => ['sh', '-c', `lsof -i :${p} >/dev/null 2>&1`],\n\n /**\n * List all listening ports\n * @example port.list()\n */\n list: (): Command => ['ss', '-tlnp'],\n\n /**\n * Wait for port to be available (with timeout)\n * @example port.waitFor(3000, 30)\n */\n waitFor: (p: number, timeoutSeconds?: number): Command => {\n const timeout = timeoutSeconds ?? 30;\n return ['sh', '-c', `for i in $(seq 1 ${timeout}); do nc -z localhost ${p} && exit 0 || sleep 1; done; exit 1`];\n },\n};\n\n/**\n * Network utilities\n */\nexport const net = {\n /**\n * Check connectivity to host\n * @example net.ping('google.com')\n * @example net.ping('google.com', 3)\n */\n ping: (host: string, count?: number): Command => {\n return count ? ['ping', '-c', String(count), host] : ['ping', '-c', '1', host];\n },\n\n /**\n * Check if host:port is reachable\n * @example net.check('localhost', 3000)\n */\n check: (host: string, p: number): Command => ['nc', '-z', host, String(p)],\n\n /**\n * Get public IP\n * @example net.publicIp()\n */\n publicIp: (): Command => ['curl', '-s', 'ifconfig.me'],\n\n /**\n * Show network interfaces\n * @example net.interfaces()\n */\n interfaces: (): Command => ['ip', 'addr'],\n};\n","import type { Command } from '../types.js';\n\n/**\n * Search for pattern in files\n * @example grep('TODO', 'src/*.ts')\n * @example grep('error', undefined, { recursive: true, ignoreCase: true })\n */\nexport const grep = (pattern: string, file?: string, options?: { recursive?: boolean; ignoreCase?: boolean; lineNumber?: boolean }): Command => {\n const args = ['grep'];\n if (options?.recursive) args.push('-r');\n if (options?.ignoreCase) args.push('-i');\n if (options?.lineNumber) args.push('-n');\n args.push(pattern);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Stream editor for filtering and transforming text\n * @example sed('s/foo/bar/g', 'file.txt')\n * @example sed('s/foo/bar/g', 'file.txt', { inPlace: true })\n */\nexport const sed = (expression: string, file: string, options?: { inPlace?: boolean }): Command => {\n return options?.inPlace\n ? ['sed', '-i', expression, file]\n : ['sed', expression, file];\n};\n\n/**\n * Output first lines of file\n * @example head('file.txt')\n * @example head('file.txt', 20)\n */\nexport const head = (file: string, lines?: number): Command => {\n return lines ? ['head', '-n', String(lines), file] : ['head', file];\n};\n\n/**\n * Output last lines of file\n * @example tail('file.txt')\n * @example tail('file.txt', 20)\n * @example tail('app.log', undefined, { follow: true })\n */\nexport const tail = (file: string, lines?: number, options?: { follow?: boolean }): Command => {\n const args = ['tail'];\n if (options?.follow) args.push('-f');\n if (lines) args.push('-n', String(lines));\n args.push(file);\n return args as Command;\n};\n\n/**\n * Word, line, character count\n * @example wc('file.txt')\n * @example wc('file.txt', { lines: true })\n */\nexport const wc = (file: string, options?: { lines?: boolean; words?: boolean; chars?: boolean }): Command => {\n const args = ['wc'];\n if (options?.lines) args.push('-l');\n if (options?.words) args.push('-w');\n if (options?.chars) args.push('-c');\n args.push(file);\n return args as Command;\n};\n\n/**\n * Sort lines of text\n * @example sort('file.txt')\n * @example sort('file.txt', { reverse: true, numeric: true })\n */\nexport const sort = (file: string, options?: { reverse?: boolean; numeric?: boolean; unique?: boolean }): Command => {\n const args = ['sort'];\n if (options?.reverse) args.push('-r');\n if (options?.numeric) args.push('-n');\n if (options?.unique) args.push('-u');\n args.push(file);\n return args as Command;\n};\n\n/**\n * Report or filter out repeated lines\n * @example uniq('file.txt')\n * @example uniq('file.txt', { count: true })\n */\nexport const uniq = (file: string, options?: { count?: boolean }): Command => {\n return options?.count ? ['uniq', '-c', file] : ['uniq', file];\n};\n\n/**\n * Process JSON with jq\n * @example jq('.name', 'data.json')\n * @example jq('.[] | .id') // for piping\n */\nexport const jq = (filter: string, file?: string, options?: { raw?: boolean; compact?: boolean }): Command => {\n const args = ['jq'];\n if (options?.raw) args.push('-r');\n if (options?.compact) args.push('-c');\n args.push(filter);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Build and execute commands from stdin\n * @example xargs('rm') // pipe file list to rm\n * @example xargs('grep', ['pattern'], { parallel: 4 })\n */\nexport const xargs = (command: string, args?: string[], options?: { parallel?: number; nullDelimited?: boolean }): Command => {\n const xargsArgs = ['xargs'];\n if (options?.nullDelimited) xargsArgs.push('-0');\n if (options?.parallel) xargsArgs.push('-P', String(options.parallel));\n xargsArgs.push(command);\n if (args) xargsArgs.push(...args);\n return xargsArgs as Command;\n};\n\n/**\n * Pattern scanning and processing\n * @example awk('{print $1}', 'file.txt')\n * @example awk('BEGIN {sum=0} {sum+=$1} END {print sum}', 'numbers.txt')\n */\nexport const awk = (program: string, file?: string, options?: { fieldSeparator?: string }): Command => {\n const args = ['awk'];\n if (options?.fieldSeparator) args.push('-F', options.fieldSeparator);\n args.push(program);\n if (file) args.push(file);\n return args as Command;\n};\n\n/**\n * Extract columns/fields from lines\n * @example cut('file.txt', { fields: '1,3', delimiter: ',' })\n * @example cut('file.txt', { characters: '1-10' })\n */\nexport const cut = (file: string, options: { fields?: string; delimiter?: string; characters?: string }): Command => {\n const args = ['cut'];\n if (options.delimiter) args.push('-d', options.delimiter);\n if (options.fields) args.push('-f', options.fields);\n if (options.characters) args.push('-c', options.characters);\n args.push(file);\n return args as Command;\n};\n\n/**\n * Translate or delete characters\n * @example tr('a-z', 'A-Z') // uppercase\n * @example tr('\\n', ' ') // newlines to spaces\n * @example tr('', '', { delete: 'abc' }) // delete chars\n */\nexport const tr = (set1: string, set2?: string, options?: { delete?: string; squeeze?: boolean }): Command => {\n const args = ['tr'];\n if (options?.delete) {\n args.push('-d', options.delete);\n } else {\n if (options?.squeeze) args.push('-s');\n args.push(set1);\n if (set2) args.push(set2);\n }\n return args as Command;\n};\n","import type { Command } from '../types.js';\n\n/**\n * Tar archive operations\n */\nexport const tar = {\n /**\n * Extract tar archive\n * @example tar.extract('archive.tar.gz')\n * @example tar.extract('archive.tar.gz', { dir: '/app' })\n */\n extract: (file: string, options?: { dir?: string }): Command => {\n const args = ['tar', '-xzf', file];\n if (options?.dir) args.push('-C', options.dir);\n return args as Command;\n },\n\n /**\n * Create tar archive\n * @example tar.create('archive.tar.gz', '/app/dist')\n */\n create: (output: string, source: string): Command => {\n return ['tar', '-czf', output, source];\n },\n};\n\n/**\n * Unzip archive\n * @example unzip('archive.zip')\n * @example unzip('archive.zip', { dir: '/app' })\n */\nexport const unzip = (file: string, options?: { dir?: string }): Command => {\n return options?.dir ? ['unzip', '-o', file, '-d', options.dir] : ['unzip', '-o', file];\n};\n","import type { Command } from '../types.js';\n\n/**\n * Print environment variable\n * @example echo('$HOME')\n * @example echo('Hello World')\n */\nexport const echo = (text: string): Command => ['echo', text];\n\n/**\n * Print environment variables\n * @example env()\n */\nexport const env = (): Command => ['env'];\n\n/**\n * Print specific environment variable\n * @example printenv('PATH')\n * @example printenv() // prints all\n */\nexport const printenv = (name?: string): Command => {\n return name ? ['printenv', name] : ['printenv'];\n};\n\n/**\n * Which command location\n * @example which('node')\n */\nexport const which = (command: string): Command => ['which', command];\n\n/**\n * Print current user\n * @example whoami()\n */\nexport const whoami = (): Command => ['whoami'];\n\n/**\n * Print system information\n * @example uname()\n * @example uname({ all: true })\n */\nexport const uname = (options?: { all?: boolean }): Command => {\n return options?.all ? ['uname', '-a'] : ['uname'];\n};\n\n/**\n * Print hostname\n * @example hostname()\n */\nexport const hostname = (): Command => ['hostname'];\n\n/**\n * Report disk space usage\n * @example df()\n * @example df('/app')\n */\nexport const df = (path?: string, options?: { human?: boolean }): Command => {\n const args = ['df'];\n if (options?.human) args.push('-h');\n if (path) args.push(path);\n return args as Command;\n};\n\n/**\n * Estimate file/directory space usage\n * @example du('/app')\n * @example du('/app', { human: true, summarize: true })\n */\nexport const du = (path: string, options?: { human?: boolean; summarize?: boolean }): Command => {\n const args = ['du'];\n if (options?.human) args.push('-h');\n if (options?.summarize) args.push('-s');\n args.push(path);\n return args as Command;\n};\n\n/**\n * Delay for specified seconds\n * @example sleep(5)\n */\nexport const sleep = (seconds: number): Command => ['sleep', String(seconds)];\n\n/**\n * Print date/time\n * @example date()\n * @example date('+%Y-%m-%d')\n */\nexport const date = (format?: string): Command => {\n return format ? ['date', format] : ['date'];\n};\n\n/**\n * Find files\n * @example find('/app', { name: '*.ts' })\n * @example find('/app', { type: 'f', name: '*.js' })\n */\nexport const find = (path: string, options?: { name?: string; type?: 'f' | 'd' }): Command => {\n const args = ['find', path];\n if (options?.type) args.push('-type', options.type);\n if (options?.name) args.push('-name', options.name);\n return args as Command;\n};\n\n/**\n * Write to file and stdout\n * @example tee('/app/output.log')\n * @example tee('/app/output.log', { append: true })\n */\nexport const tee = (file: string, options?: { append?: boolean }): Command => {\n return options?.append ? ['tee', '-a', file] : ['tee', file];\n};\n\n/**\n * Compare files\n * @example diff('file1.txt', 'file2.txt')\n * @example diff('file1.txt', 'file2.txt', { unified: true })\n */\nexport const diff = (file1: string, file2: string, options?: { unified?: boolean; brief?: boolean }): Command => {\n const args = ['diff'];\n if (options?.unified) args.push('-u');\n if (options?.brief) args.push('-q');\n args.push(file1, file2);\n return args as Command;\n};\n\n/**\n * Run multiple commands in parallel\n * @example parallel(['npm run dev', 'npm run watch'])\n */\nexport const parallel = (commands: string[], options?: { killOthers?: boolean }): Command => {\n const joined = commands.join(' & ');\n if (options?.killOthers) {\n // trap EXIT to kill all background jobs when any exits\n return ['sh', '-c', `trap \"kill 0\" EXIT; ${joined} & wait`];\n }\n return ['sh', '-c', `${joined} & wait`];\n};\n\n/**\n * Build a custom command from parts\n * @example raw('my-cli', ['--flag', 'value'])\n */\nexport const raw = (command: string, args?: string[]): Command => {\n return args ? [command, ...args] : [command];\n};\n\n/**\n * Base64 encoding/decoding utilities\n */\nexport const base64 = {\n /**\n * Encode to base64\n * @example base64.encode('file.txt')\n */\n encode: (file?: string): Command => {\n return file ? ['base64', file] : ['base64'];\n },\n\n /**\n * Decode from base64\n * @example base64.decode('encoded.txt')\n */\n decode: (file?: string): Command => {\n return file ? ['base64', '-d', file] : ['base64', '-d'];\n },\n};\n\n/**\n * Compute MD5 checksum\n * @example md5sum('file.txt')\n * @example md5sum('file.txt', { check: true })\n */\nexport const md5sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['md5sum', '-c', file] : ['md5sum', file];\n};\n\n/**\n * Compute SHA256 checksum\n * @example sha256sum('file.txt')\n * @example sha256sum('file.txt', { check: true })\n */\nexport const sha256sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['sha256sum', '-c', file] : ['sha256sum', file];\n};\n\n/**\n * Compute SHA1 checksum\n * @example sha1sum('file.txt')\n */\nexport const sha1sum = (file: string, options?: { check?: boolean }): Command => {\n return options?.check ? ['sha1sum', '-c', file] : ['sha1sum', file];\n};\n","import type { Command } from '../types.js';\n\n/**\n * ComputeSDK CLI installation and management utilities\n */\n\n/**\n * Detect if we're running in an interactive TTY environment.\n * Checks both stdin and stdout since either being a TTY indicates interactive use.\n */\nconst isTTYEnvironment = (): boolean => {\n if (typeof process === 'undefined') return false;\n return Boolean(process.stdin?.isTTY || process.stdout?.isTTY);\n};\n\n/**\n * Install the ComputeSDK CLI in a sandbox\n *\n * This command downloads and runs the official ComputeSDK installer.\n * The CLI provides the full ComputeSDK API (terminals, watchers, signals, etc.)\n * in any sandbox environment.\n *\n * By default, interactive mode is only enabled when running in a TTY environment.\n * In non-TTY environments (CI pipelines, scripts), the installer runs non-interactively.\n *\n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n *\n * // Install compute in a raw E2B/Daytona/etc sandbox\n * await sandbox.runCommand(compute.install({ apiKey: process.env.COMPUTESDK_API_KEY }));\n *\n * // Force interactive mode (allow prompts)\n * await sandbox.runCommand(compute.install({ interactive: true }));\n * ```\n *\n * @param options Installation options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.version Specific version to install (default: latest)\n * @param options.silent Suppress installation output (default: false)\n * @param options.interactive Enable interactive mode with prompts (default: auto-detected based on TTY)\n * @returns Command tuple for installing the compute CLI\n */\nexport const install = (options?: {\n apiKey?: string;\n version?: string;\n silent?: boolean;\n interactive?: boolean;\n}): Command => {\n const installUrl = options?.version\n ? `https://computesdk.com/install.sh?version=${options.version}`\n : 'https://computesdk.com/install.sh';\n\n const curlFlags = options?.silent ? '-fsSL' : '-fSL';\n\n // Auto-detect interactive mode: default to interactive only when in a TTY\n const isInteractive = options?.interactive ?? isTTYEnvironment();\n\n // Build the install command with optional flags\n let installCmd = isInteractive\n ? `curl ${curlFlags} ${installUrl} | bash -s`\n : `curl ${curlFlags} ${installUrl} | bash -s -- --non-interactive`;\n\n // If API key is provided, set it as environment variable for the install script\n if (options?.apiKey) {\n installCmd = `COMPUTESDK_API_KEY=\"${options.apiKey}\" ${installCmd}`;\n } else if (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY) {\n // Fallback to process.env if available\n installCmd = `COMPUTESDK_API_KEY=\"${process.env.COMPUTESDK_API_KEY}\" ${installCmd}`;\n }\n\n // Use sh -c to pipe curl output to bash\n return ['sh', '-c', installCmd];\n};\n\n/**\n * Check if the ComputeSDK CLI is installed\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.isInstalled());\n * const installed = result.exitCode === 0;\n * ```\n * \n * @returns Command tuple that exits 0 if installed, 1 if not\n */\nexport const isInstalled = (): Command => {\n return ['sh', '-c', 'which compute > /dev/null 2>&1'];\n};\n\n/**\n * Get the installed compute version\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.version());\n * console.log('Version:', result.stdout.trim());\n * ```\n * \n * @returns Command tuple to get compute version\n */\nexport const version = (): Command => {\n return ['compute', '--version'];\n};\n\n/**\n * Start the ComputeSDK daemon\n *\n * Note: The daemon usually auto-starts after installation.\n * This is mainly useful for restarting or manual control.\n *\n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n *\n * // With API key\n * await sandbox.runCommand(compute.start({ apiKey: process.env.COMPUTESDK_API_KEY }), { background: true });\n *\n * // With access token\n * await sandbox.runCommand(compute.start({ accessToken: process.env.ACCESS_TOKEN }), { background: true });\n *\n * // Wait for daemon to be healthy before returning (useful for CI/CD)\n * await sandbox.runCommand(compute.start({ apiKey: 'key', wait: true }));\n *\n * // Wait with custom timeout\n * await sandbox.runCommand(compute.start({ apiKey: 'key', wait: true, waitTimeout: 60 }));\n * ```\n *\n * @param options Start options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.accessToken Access token for authentication (alternative to apiKey)\n * @param options.port Port to listen on (default: 18080)\n * @param options.logLevel Log level (default: 'info')\n * @param options.wait Wait for daemon to be healthy before returning (default: false)\n * @param options.waitTimeout Timeout in seconds when waiting for health (default: 30)\n * @returns Command tuple to start the daemon\n */\nexport const start = (options?: {\n apiKey?: string;\n accessToken?: string;\n port?: number;\n logLevel?: 'debug' | 'info' | 'warn' | 'error';\n wait?: boolean;\n waitTimeout?: number;\n}): Command => {\n const args = ['compute', 'start'];\n\n const apiKey =\n options?.apiKey || (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n const accessToken = options?.accessToken;\n\n // Prefer access token over API key if both are provided\n if (accessToken) {\n args.push('--access-token', accessToken);\n } else if (apiKey) {\n args.push('--api-key', apiKey);\n }\n\n if (options?.port) {\n args.push('--port', String(options.port));\n }\n\n if (options?.logLevel === 'debug') {\n args.push('--verbose');\n }\n\n if (options?.wait) {\n args.push('--wait');\n if (options.waitTimeout) {\n args.push('--wait-timeout', String(options.waitTimeout));\n }\n }\n\n return args as Command;\n};\n\n/**\n * Stop the ComputeSDK daemon\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * await sandbox.runCommand(compute.stop());\n * ```\n * \n * @returns Command tuple to stop the daemon\n */\nexport const stop = (): Command => {\n return ['pkill', '-f', 'compute start'];\n};\n\n/**\n * Check daemon health status\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.health());\n * const healthy = result.exitCode === 0;\n * ```\n * \n * @param options Health check options\n * @param options.host Host to check (default: 'localhost')\n * @param options.port Port to check (default: 18080)\n * @returns Command tuple to check daemon health\n */\nexport const health = (options?: {\n host?: string;\n port?: number;\n}): Command => {\n const host = options?.host || 'localhost';\n const port = options?.port || 18080;\n return ['sh', '-c', `curl -f http://${host}:${port}/health > /dev/null 2>&1`];\n};\n\n/**\n * Check if compute daemon is set up and running\n * \n * Returns exit code 0 if daemon is installed and running (ready to use)\n * Returns exit code 1 if setup is needed (not installed or not running)\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * const result = await sandbox.runCommand(compute.isSetup());\n * if (result.exitCode === 0) {\n * console.log('Daemon is ready!');\n * } else {\n * console.log('Setup needed');\n * await sandbox.runCommand(compute.setup({ apiKey: 'key' }));\n * }\n * ```\n * \n * @param options Setup check options\n * @param options.host Host to check (default: 'localhost')\n * @param options.port Port to check (default: 18080)\n * @returns Command that exits 0 if setup, 1 if setup needed\n */\nexport const isSetup = (options?: {\n host?: string;\n port?: number;\n}): Command => {\n const host = options?.host || 'localhost';\n const port = options?.port || 18080;\n \n return ['sh', '-c', `\n if ! which compute > /dev/null 2>&1; then\n exit 1\n fi\n if ! curl -f http://${host}:${port}/health > /dev/null 2>&1; then\n exit 1\n fi\n exit 0\n `.trim()];\n};\n\n/**\n * Install and start the ComputeSDK daemon in one command\n *\n * This is a convenience method that installs the compute CLI and starts the daemon.\n * Useful for quickly setting up a sandbox with ComputeSDK capabilities.\n *\n * By default, interactive mode is only enabled when running in a TTY environment.\n * In non-TTY environments (CI pipelines, scripts), the installer runs non-interactively.\n *\n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n *\n * // Quick setup with API key\n * await sandbox.runCommand(compute.setup({ apiKey: process.env.COMPUTESDK_API_KEY }));\n *\n * // Force interactive mode (allow prompts)\n * await sandbox.runCommand(compute.setup({ apiKey: 'key', interactive: true }));\n *\n * // Wait for daemon to be healthy before returning (useful for CI/CD)\n * await sandbox.runCommand(compute.setup({ apiKey: 'key', wait: true }));\n * ```\n *\n * @param options Setup options\n * @param options.apiKey ComputeSDK API key (or set COMPUTESDK_API_KEY env var)\n * @param options.accessToken Access token for authentication (alternative to apiKey)\n * @param options.port Port to listen on (default: 18080)\n * @param options.version Specific version to install (default: latest)\n * @param options.silent Suppress installation output (default: false)\n * @param options.interactive Enable interactive mode with prompts (default: auto-detected based on TTY)\n * @param options.wait Wait for daemon to be healthy before returning (default: false)\n * @param options.waitTimeout Timeout in seconds when waiting for health (default: 30)\n * @returns Command tuple for installing and starting the daemon\n */\nexport const setup = (options?: {\n apiKey?: string;\n accessToken?: string;\n port?: number;\n version?: string;\n silent?: boolean;\n interactive?: boolean;\n wait?: boolean;\n waitTimeout?: number;\n}): Command => {\n const apiKey = options?.apiKey || (typeof process !== 'undefined' && process.env?.COMPUTESDK_API_KEY);\n const accessToken = options?.accessToken;\n\n const installUrl = options?.version\n ? `https://computesdk.com/install.sh?version=${options.version}`\n : 'https://computesdk.com/install.sh';\n\n const curlFlags = options?.silent ? '-fsSL' : '-fSL';\n\n // Auto-detect interactive mode: default to interactive only when in a TTY\n const isInteractive = options?.interactive ?? isTTYEnvironment();\n\n // Build install command with optional flags\n let installCmd = isInteractive\n ? `curl ${curlFlags} ${installUrl} | bash -s`\n : `curl ${curlFlags} ${installUrl} | bash -s -- --non-interactive`;\n\n // Add API key to install if provided\n if (apiKey) {\n installCmd = `COMPUTESDK_API_KEY=\"${apiKey}\" ${installCmd}`;\n }\n\n // Build start command\n let startCmd = 'compute start';\n\n // Add authentication flags\n if (accessToken) {\n startCmd += ` --access-token \"${accessToken}\"`;\n } else if (apiKey) {\n startCmd += ` --api-key \"${apiKey}\"`;\n }\n\n if (options?.port) {\n startCmd += ` --port ${options.port}`;\n }\n\n if (options?.wait) {\n startCmd += ' --wait';\n if (options.waitTimeout) {\n startCmd += ` --wait-timeout ${options.waitTimeout}`;\n }\n }\n\n // Combine: install, then start\n // If waiting, run in foreground so we block until healthy\n // Otherwise run in background for backwards compatibility\n const fullCmd = options?.wait\n ? `${installCmd} && ${startCmd}`\n : `${installCmd} && ${startCmd} > /dev/null 2>&1 &`;\n\n return ['sh', '-c', fullCmd];\n};\n\n/**\n * ComputeSDK CLI management utilities\n * \n * @example\n * ```typescript\n * import { compute } from '@computesdk/cmd';\n * \n * // Quick setup (install + start)\n * await sandbox.runCommand(compute.setup({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * \n * // Or install and start separately\n * await sandbox.runCommand(compute.install());\n * await sandbox.runCommand(compute.start({ apiKey: process.env.COMPUTESDK_API_KEY }));\n * \n * // Check if installed\n * const result = await sandbox.runCommand(compute.isInstalled());\n * if (result.exitCode === 0) {\n * console.log('Compute is installed!');\n * }\n * \n * // Get version\n * const versionResult = await sandbox.runCommand(compute.version());\n * console.log('Version:', versionResult.stdout);\n * ```\n */\nexport const compute = {\n install,\n isInstalled,\n version,\n start,\n stop,\n health,\n setup,\n isSetup,\n};\n","/**\n * @computesdk/cmd - Type-safe shell command builders\n *\n * Build shell commands as tuples for use with sandbox.runCommand()\n *\n * @example\n * ```typescript\n * import { cmd, npm, node } from '@computesdk/cmd';\n *\n * await sandbox.runCommand(npm.install('express'));\n * await sandbox.runCommand(cmd.mkdir('/app/src'));\n * await sandbox.runCommand(node('server.js'), { background: true });\n * ```\n */\n\n// Re-export types\nexport type { Command, ShellOptions } from './types.js';\n\n// Re-export utilities\nexport { esc, shellEscape, escapeArgs, buildShellCommand } from './utils.js';\n\n// Re-export shell wrappers\nexport { shell, sh, bash, zsh } from './shell.js';\n\n// Import all commands for assembly\nimport * as filesystem from './commands/filesystem.js';\nimport * as process from './commands/process.js';\nimport * as packages from './commands/packages.js';\nimport * as gitCommands from './commands/git.js';\nimport * as network from './commands/network.js';\nimport * as text from './commands/text.js';\nimport * as archive from './commands/archive.js';\nimport * as system from './commands/system.js';\nimport * as computeCommands from './commands/compute.js';\n\nimport type { Command } from './types.js';\nimport { buildShellCommand } from './utils.js';\n\n/**\n * Command builders for common shell operations - callable with shell wrapper + command methods\n *\n * @example\n * // As shell wrapper (default: sh)\n * cmd(npm.install(), { cwd: '/app' })\n * // => ['sh', '-c', 'cd '/app' && npm install']\n *\n * @example\n * // As command builders\n * cmd.npm.install('express')\n * // => ['npm', 'install', 'express']\n */\nexport const cmd = Object.assign(\n // Callable: shell wrapper with sh default\n (command: Command, options?: { cwd?: string; background?: boolean }): Command => {\n return buildShellCommand('sh', command, options);\n },\n {\n // Filesystem\n ...filesystem,\n // Process\n ...process,\n // Package managers\n ...packages,\n // Git\n ...gitCommands,\n // Network\n ...network,\n // Text processing\n ...text,\n // Archives\n ...archive,\n // System\n ...system,\n // Compute\n ...computeCommands,\n }\n);\n\n// Export individual command builders for destructured imports\n// Filesystem\nexport const {\n mkdir, rm, cp, mv, ls, pwd, chmod, chown, touch, cat, ln, readlink, test, rsync,\n} = filesystem;\n\n// Process\nexport const { node, python, kill, pkill, ps, timeout } = process;\n\n// Package managers\nexport const { npm, pnpm, yarn, pip, bun, deno, npx, bunx, uv, poetry, pipx } = packages;\n\n// Git\nexport const { git } = gitCommands;\n\n// Network\nexport const { curl, wget, port, net } = network;\n\n// Text processing\nexport const { grep, sed, head, tail, wc, sort, uniq, jq, xargs, awk, cut, tr } = text;\n\n// Archives\nexport const { tar, unzip } = archive;\n\n// System\nexport const {\n echo, env, printenv, which, whoami, uname, hostname,\n df, du, sleep, date, find, tee, diff, parallel, raw,\n base64, md5sum, sha256sum, sha1sum,\n} = system;\n\n// Compute\nexport const { compute } = computeCommands;\n\n// Default export for convenience\nexport default cmd;\n"],"mappings":"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","names":["timeout","port","mkdir","rm","cp","mv","ls","pwd","chmod","chown","touch","cat","ln","readlink","test","rsync","node","python","kill","pkill","ps","timeout","npm","pnpm","yarn","pip","bun","deno","npx","bunx","uv","poetry","pipx","git","curl","wget","port","net","grep","sed","head","tail","wc","sort","uniq","jq","xargs","awk","cut","tr","tar","unzip","echo","env","printenv","which","whoami","uname","hostname","df","du","sleep","date","find","tee","diff","parallel","raw","base64","md5sum","sha256sum","sha1sum","compute"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@computesdk/cmd",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
5
  "description": "Type-safe shell command builders for ComputeSDK sandboxes",
6
6
  "author": "Garrison",
@@ -19,19 +19,23 @@
19
19
  "dist"
20
20
  ],
21
21
  "keywords": [
22
+ "computesdk",
22
23
  "commands",
23
24
  "shell",
24
25
  "sandbox",
25
26
  "compute",
26
27
  "bash",
27
- "cli"
28
+ "cli",
29
+ "command-builder",
30
+ "type-safe",
31
+ "shell-commands"
28
32
  ],
29
33
  "repository": {
30
34
  "type": "git",
31
35
  "url": "https://github.com/computesdk/computesdk.git",
32
36
  "directory": "packages/cmd"
33
37
  },
34
- "homepage": "https://github.com/computesdk/computesdk/tree/main/packages/cmd",
38
+ "homepage": "https://www.computesdk.com",
35
39
  "bugs": {
36
40
  "url": "https://github.com/computesdk/computesdk/issues"
37
41
  },