@wityai/root2-cli
Version:
Command-line interface for Root2 vector memory layer
190 lines ⢠7.95 kB
JavaScript
"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