UNPKG

@wityai/root2-cli

Version:

Command-line interface for Root2 vector memory layer

190 lines • 7.95 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.initCommand = initCommand; const chalk_1 = __importDefault(require("chalk")); const inquirer_1 = __importDefault(require("inquirer")); const config_1 = require("../utils/config"); const formatting_1 = require("../utils/formatting"); const spinner_1 = require("../utils/spinner"); function initCommand(program) { program .command("init") .description("Initialize Root2 CLI with your API credentials") .option("--client-id <id>", "Root2 Client ID") .option("--api-key <key>", "Root2 API Key") .option("--api-host <host>", "API host URL (default: https://api.wity.ai)") .option("--non-interactive", "Use provided options without prompts") .action(async (options) => { try { const configManager = (0, config_1.getConfigManager)(); const currentConfig = await configManager.loadConfig(); if (currentConfig.clientId && currentConfig.apiKey && !options.nonInteractive) { const { reinitialize } = await inquirer_1.default.prompt([ { type: "confirm", name: "reinitialize", message: "Root2 CLI is already initialized. Do you want to reconfigure?", default: false, }, ]); if (!reinitialize) { console.log(formatting_1.format.info("Root2 CLI initialization cancelled.")); return; } } if (options.nonInteractive) { await nonInteractiveInit(options); } else { await interactiveInit(); } } catch (error) { console.error(formatting_1.format.error(error instanceof Error ? error.message : "Unknown error")); process.exit(1); } }); } async function interactiveInit() { console.log(chalk_1.default.cyan("\nšŸš€ Welcome to Root2 CLI!\n")); console.log("Root2 is the vector memory layer that helps you build intelligent knowledge bases."); console.log("Let's get you set up with your API credentials.\n"); console.log(chalk_1.default.bold("šŸ“‹ What you'll need:")); console.log(" • Root2 Client ID"); console.log(" • Root2 API Key"); console.log(chalk_1.default.gray(" Get these at: https://account.wity.ai/api-clients\n")); const { hasCredentials } = await inquirer_1.default.prompt([ { type: "confirm", name: "hasCredentials", message: "Do you have your Root2 API credentials ready?", default: true, }, ]); if (!hasCredentials) { console.log(chalk_1.default.yellow("\nšŸ“– Getting Your API Credentials:\n")); console.log("1. Visit: https://account.wity.ai/api-clients"); console.log("2. Create a new API client"); console.log("3. Copy your Client ID and API Key"); console.log("4. Run this command again: root2 init\n"); return; } const configManager = (0, config_1.getConfigManager)(); const currentConfig = await configManager.loadConfig(); console.log(chalk_1.default.cyan("\nāš™ļø Configuration Setup\n")); const answers = await inquirer_1.default.prompt([ { type: "input", name: "clientId", message: "Root2 Client ID:", default: currentConfig.clientId, validate: (input) => { if (!input.trim()) { return "Client ID is required"; } if (input.trim().length < 10) { return "Client ID seems too short. Please check your credentials."; } return true; }, }, { type: "password", name: "apiKey", message: "Root2 API Key:", mask: "*", default: currentConfig.apiKey, validate: (input) => { if (!input.trim()) { return "API Key is required"; } if (input.trim().length < 20) { return "API Key seems too short. Please check your credentials."; } return true; }, }, { type: "input", name: "apiHost", message: "API Host (press Enter for default):", default: currentConfig.apiHost || "https://api.wity.ai", validate: (input) => { if (input && !input.startsWith("http")) { return "API Host must be a valid URL starting with http:// or https://"; } return true; }, }, ]); console.log(chalk_1.default.cyan("\nšŸŽÆ Preferences\n")); const preferences = await inquirer_1.default.prompt([ { type: "list", name: "outputFormat", message: "Default output format:", choices: [ { name: "Text - Human-readable format (recommended)", value: "text" }, { name: "JSON - Machine-readable format", value: "json" }, { name: "Table - Structured table format", value: "table" }, ], default: currentConfig.outputFormat || "text", }, { type: "confirm", name: "verbose", message: "Enable verbose logging for debugging?", default: currentConfig.verbose || false, }, ]); const finalConfig = { ...answers, ...preferences, }; spinner_1.spinner.start("Initializing Root2 CLI..."); try { await configManager.saveConfig(finalConfig); spinner_1.spinner.succeed("Root2 CLI initialized successfully!"); console.log(formatting_1.format.success("\nšŸŽ‰ You're all set! Here's what you can do next:\n")); console.log(chalk_1.default.bold("šŸ“„ Import Content:")); console.log(" root2 import-file document.pdf"); console.log(" root2 import-dir ./docs --recursive"); console.log(" root2 import-web https://example.com\n"); console.log(chalk_1.default.bold("šŸ” Query Knowledge:")); console.log(' root2 query "What topics are covered?"'); console.log(" root2 ask # Interactive query session\n"); console.log(chalk_1.default.bold("šŸ”§ Manage Memory Blocks:")); console.log(" root2 list-memory-blocks\n"); console.log(chalk_1.default.dim('šŸ’” Tip: Use "root2 help" to see all available commands')); } catch (error) { spinner_1.spinner.fail("Failed to initialize Root2 CLI"); throw error; } } async function nonInteractiveInit(options) { const requiredFields = ["clientId", "apiKey"]; const missing = requiredFields.filter((field) => !options[field]); if (missing.length > 0) { throw new Error(`Missing required options: --${missing.join(", --")}`); } const config = { clientId: options.clientId, apiKey: options.apiKey, apiHost: options.apiHost || "https://api.wity.ai", verbose: false, outputFormat: "text", }; spinner_1.spinner.start("Initializing Root2 CLI..."); const configManager = (0, config_1.getConfigManager)(); await configManager.saveConfig(config); spinner_1.spinner.succeed("Root2 CLI initialized successfully!"); console.log(formatting_1.format.success("✨ Root2 CLI is ready to use!")); console.log(formatting_1.format.info('Run "root2 help" to see available commands.')); } //# sourceMappingURL=init.js.map