/** * Service List Command * List all configured container services */ import type { NetworkZone } from '../../db/schema'; import { type ContainerServiceFilters, listContainerServices, } from '../../services/container-service'; import { celiloIntro } from '../prompts'; import type { CommandResult } from '../types'; /** * Handle service list command * * @param args - Command arguments (unused) * @param flags - Command flags (--zone filter) */ export async function handleServiceList( _args: string[], flags: Record = {}, ): Promise { try { // Apply zone filter if provided const filters: ContainerServiceFilters = {}; if (flags.zone && typeof flags.zone === 'string') { filters.zones = [flags.zone as NetworkZone]; } const services = await listContainerServices(filters); // Machine-readable output (consumed by @celilo/mcp auto-detect). Emit the // fields detection needs — provider drives which tool groups surface. if (flags.json) { const payload = services.map((s) => ({ serviceId: s.serviceId, name: s.name, provider: s.providerName, zones: s.zones, verified: s.verified, })); return { success: true, message: JSON.stringify(payload), rawOutput: true }; } celiloIntro('Container Services'); if (services.length === 0) { console.log('No container services configured.\n'); console.log('Add a service:'); console.log(' celilo service add proxmox'); console.log(' celilo service add digitalocean'); return { success: true, message: 'No services found' }; } console.log(''); for (const service of services) { const statusIcon = service.verified ? '✓' : '✗'; const statusText = service.verified ? 'Verified' : 'Not Verified'; console.log(`${statusIcon} ${service.serviceId} (${service.name})`); console.log(` Provider: ${service.providerName}`); console.log(` Zones: ${service.zones.join(', ')}`); console.log(` Status: ${statusText}`); if (service.verifiedAt) { console.log(` Verified: ${service.verifiedAt.toISOString()}`); } if (service.verificationError) { console.log(` Error: ${service.verificationError}`); } console.log(` Created: ${service.createdAt.toISOString()}`); console.log(''); } console.log(`Total: ${services.length} service${services.length === 1 ? '' : 's'}\n`); return { success: true, message: `Found ${services.length} service(s)`, }; } catch (error) { return { success: false, error: `Failed to list services: ${error instanceof Error ? error.message : String(error)}`, }; } }