import * as plugins from './plugins.js'; import { tspmIpcClient } from '../client/tspm.ipcclient.js'; import * as paths from '../paths.js'; import { Logger, LogLevel } from '../shared/common/utils.errorhandler.js'; // Import command registration functions import { registerDefaultCommand } from './commands/default.js'; import { registerStartCommand } from './commands/process/start.js'; import { registerAddCommand } from './commands/process/add.js'; import { registerStopCommand } from './commands/process/stop.js'; import { registerRestartCommand } from './commands/process/restart.js'; import { registerDeleteCommand } from './commands/process/delete.js'; import { registerListCommand } from './commands/process/list.js'; import { registerDescribeCommand } from './commands/process/describe.js'; import { registerLogsCommand } from './commands/process/logs.js'; import { registerStartAllCommand } from './commands/batch/start-all.js'; import { registerStopAllCommand } from './commands/batch/stop-all.js'; import { registerRestartAllCommand } from './commands/batch/restart-all.js'; import { registerDaemonCommand } from './commands/daemon/index.js'; import { registerEnableCommand } from './commands/service/enable.js'; import { registerDisableCommand } from './commands/service/disable.js'; import { registerResetCommand } from './commands/reset.js'; // Export types for external use export type { CliArguments } from './types.js'; /** * Main CLI entry point */ export const run = async (): Promise => { const cliLogger = new Logger('CLI'); const tspmProjectinfo = new plugins.projectinfo.ProjectInfo(paths.packageDir); // Check if debug mode is enabled const debugMode = process.env.TSPM_DEBUG === 'true'; if (debugMode) { cliLogger.setLevel(LogLevel.DEBUG); cliLogger.debug('Debug mode enabled'); } const smartcliInstance = new plugins.smartcli.Smartcli(); // Intercept -v/--version to show CLI and daemon versions const args = process.argv.slice(2); if (args.includes('-v') || args.includes('--version')) { const cliVersion = tspmProjectinfo.npm.version; console.log(`tspm CLI: ${cliVersion}`); const status = await tspmIpcClient.getDaemonStatus(); if (status) { console.log( `Daemon: running v${status.version || 'unknown'} (pid ${status.pid})`, ); } else { console.log('Daemon: not running'); } return; // do not start parser } // Keep Smartcli version info for help output but not used for -v now smartcliInstance.addVersion(tspmProjectinfo.npm.version); // Register all commands // Default command (help + list) registerDefaultCommand(smartcliInstance); // Process commands registerAddCommand(smartcliInstance); registerStartCommand(smartcliInstance); registerStopCommand(smartcliInstance); registerRestartCommand(smartcliInstance); registerDeleteCommand(smartcliInstance); registerListCommand(smartcliInstance); registerDescribeCommand(smartcliInstance); registerLogsCommand(smartcliInstance); // Batch commands registerStartAllCommand(smartcliInstance); registerStopAllCommand(smartcliInstance); registerRestartAllCommand(smartcliInstance); // Daemon commands registerDaemonCommand(smartcliInstance); // Service commands registerEnableCommand(smartcliInstance); registerDisableCommand(smartcliInstance); // Maintenance commands registerResetCommand(smartcliInstance); // Start parsing commands smartcliInstance.startParse(); };