UNPKG

@nestbox-ai/cli

Version:

The cli tools that helps developers to build agents

88 lines (73 loc) 2.88 kB
import { ProjectsApi } from "@nestbox-ai/admin"; import ora from "ora"; import { readNestboxConfig } from "./config"; interface ProjectInfo { id: string; name: string; } interface CommandOptions { instance: string; project?: string; collection?: string; name?: string; metadata?: string; [key: string]: any; } interface ResolveProjectOptions extends CommandOptions { showSpinner?: boolean; // New option to control spinner visibility } export async function resolveProject( projectsApi: ProjectsApi, options: ResolveProjectOptions ): Promise<ProjectInfo> { // Default to showing spinner if not specified const showSpinner = options.showSpinner !== false; const spinner = showSpinner ? ora('Resolving project...').start() : null; try { const projectsResponse = await projectsApi.projectControllerGetAllProjects(); const allProjects = projectsResponse.data?.data?.projects; if (!allProjects || allProjects.length === 0) { if (spinner) spinner.fail('No projects found.'); throw new Error('No projects found'); } let projectId = options.project; let projectName = ''; if (projectId) { const byId = allProjects.find((p) => p.id === projectId); const byName = allProjects.find((p) => p.name === projectId); if (byId) { projectName = byId.name; projectId = byId.id; } else if (byName) { projectName = byName.name; projectId = byName.id; } else { if (spinner) spinner.fail(`Project not found with ID or name: ${projectId}`); throw new Error(`Project not found with ID or name: ${projectId}`); } if (spinner) spinner.succeed(`Using project: ${projectName} (ID: ${projectId})`); } else { const config = readNestboxConfig(); const defaultProjectName = config.projects?.default; if (!defaultProjectName) { if (spinner) spinner.fail('No project specified and no default project set. Please provide a project ID or set a default project.'); throw new Error('No project specified and no default project set'); } const defaultProject = allProjects.find((p) => p.name === defaultProjectName); if (!defaultProject) { if (spinner) spinner.fail(`Default project "${defaultProjectName}" not found.`); throw new Error(`Default project "${defaultProjectName}" not found.`); } projectId = defaultProject.id; projectName = defaultProject.name; if (spinner) spinner.succeed(`Using default project: ${projectName} (ID: ${projectId})`); } return { id: projectId, name: projectName }; } catch (error) { if (spinner && spinner.isSpinning) { // If spinner was already stopped with fail, we don't need to fail it again spinner.fail('Failed to resolve project'); } throw error; } }