import * as plugins from '../plugins.js'; import * as paths from '../../paths.js'; import { tspmIpcClient } from '../../client/tspm.ipcclient.js'; import { Logger } from '../../shared/common/utils.errorhandler.js'; import type { CliArguments } from '../types.js'; import { pad } from '../helpers/formatting.js'; import { formatMemory } from '../helpers/memory.js'; export function registerDefaultCommand(smartcli: plugins.smartcli.Smartcli) { const cliLogger = new Logger('CLI'); const tspmProjectinfo = new plugins.projectinfo.ProjectInfo(paths.packageDir); smartcli.standardCommand().subscribe({ next: async (argvArg: CliArguments) => { console.log( `TSPM - TypeScript Process Manager v${tspmProjectinfo.npm.version}`, ); console.log('Usage: tspm [command] [options]'); console.log('\nService Management:'); console.log( ' enable Enable TSPM as system service (systemd)', ); console.log(' disable Disable TSPM system service'); console.log('\nProcess Commands:'); console.log(' start Start a process'); console.log(' list List all processes'); console.log(' stop Stop a process'); console.log(' restart Restart a process'); console.log(' delete Delete a process'); console.log(' describe Show details for a process'); console.log(' logs Show logs for a process'); console.log(' search Find processes by id/name'); console.log(' start-all Start all saved processes'); console.log(' stop-all Stop all processes'); console.log(' restart-all Restart all processes'); console.log('\nDaemon Commands:'); console.log( ' daemon start Start daemon manually (current session)', ); console.log(' daemon stop Stop the daemon'); console.log(' daemon status Show daemon status'); console.log(' stats Show daemon + process stats'); console.log( '\nUse tspm [command] --help for more information about a command.', ); // Show current process list console.log('\nProcess List:'); try { const response = await tspmIpcClient.request('list', {}); const processes = response.processes; if (processes.length === 0) { console.log( ' No processes running. Use "tspm start" to start a process.', ); } else { console.log( '┌─────────┬─────────────┬───────────┬───────────┬──────────┐', ); console.log( '│ ID │ Name │ Status │ Memory │ Restarts │', ); console.log( '├─────────┼─────────────┼───────────┼───────────┼──────────┤', ); for (const proc of processes) { const statusColor = proc.status === 'online' ? '\x1b[32m' : proc.status === 'errored' ? '\x1b[31m' : '\x1b[33m'; const resetColor = '\x1b[0m'; console.log( `│ ${pad(String(proc.id), 7)} │ ${pad(String(proc.id), 11)} │ ${statusColor}${pad(proc.status, 9)}${resetColor} │ ${pad(formatMemory(proc.memory), 9)} │ ${pad(proc.restarts.toString(), 8)} │`, ); } console.log( '└─────────┴─────────────┴───────────┴───────────┴──────────┘', ); } // Disconnect from daemon after getting list await tspmIpcClient.disconnect(); } catch (error) { console.error('Error: TSPM daemon is not running.'); console.log('\nTo start the daemon, run one of:'); console.log(' tspm daemon start - Start for this session only'); console.log( ' tspm enable - Enable as system service (recommended)', ); } }, error: (err) => { cliLogger.error(err); }, complete: () => {}, }); }