import * as plugins from '../../plugins.js'; import { tspmIpcClient } from '../../../client/tspm.ipcclient.js'; import type { CliArguments } from '../../types.js'; import { registerIpcCommand } from '../../registration/index.js'; export function registerSearchCommand(smartcli: plugins.smartcli.Smartcli) { registerIpcCommand( smartcli, 'search', async (argvArg: CliArguments) => { const query = String(argvArg._[1] || '').trim(); if (!query) { console.error('Error: Please provide a search query'); console.log('Usage: tspm search '); return; } // Fetch list of processes, then enrich with names via describe const listRes = await tspmIpcClient.request('list', {}); const processes = listRes.processes; // If there are no processes, short-circuit if (processes.length === 0) { console.log('No processes found.'); return; } const lowerQ = query.toLowerCase(); const matches: Array<{ id: number; name?: string }> = []; // Collect describe calls to obtain names for (const proc of processes) { try { const desc = await tspmIpcClient.request('describe', { id: proc.id }); const name = desc.config.name || ''; const idStr = String(proc.id); if (name.toLowerCase().includes(lowerQ) || idStr.includes(query)) { matches.push({ id: proc.id, name }); } } catch { // Ignore describe errors for individual processes } } if (matches.length === 0) { console.log(`No matches for "${query}"`); return; } console.log(`Matches for "${query}":`); for (const m of matches) { if (m.name) { console.log(`- id:${m.id}\tname:${m.name}`); } else { console.log(`- id:${m.id}`); } } }, { actionLabel: 'search processes' }, ); }