/** * pi.getCommands() wrapper. * * Fetches available slash commands from the pi ExtensionAPI and normalises * them into the shape used by the /sessions/:id/commands REST endpoint (T-1.6). * * Owner: T-1.4 */ import type { ExtensionAPI } from "@earendil-works/pi-coding-agent"; export interface SlashCommand { name: string; description: string; args?: string; } /** * Get the list of registered slash commands from pi. * Returns an empty array if the API doesn't support getCommands. */ export async function getCommands(pi: ExtensionAPI): Promise { try { // getCommands may not exist in all pi versions if ( typeof (pi as unknown as { getCommands?: unknown }).getCommands !== "function" ) { return []; } const raw = await ( pi as unknown as { getCommands: () => Promise } ).getCommands(); if (!Array.isArray(raw)) return []; return raw .filter( (c): c is { name: string; description?: string; args?: string } => c !== null && typeof c === "object" && typeof (c as { name?: unknown }).name === "string", ) .map((c) => ({ name: c.name, description: c.description ?? "", args: c.args, })); } catch { return []; } }