@wityai/root2-cli
Version:
Command-line interface for Root2 vector memory layer
156 lines ⢠7.06 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.configCommand = configCommand;
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 configCommand(program) {
const configCmd = program
.command("config")
.description("Manage Root2 CLI configuration");
configCmd
.command("set")
.description("Update specific configuration values")
.option("--client-id <id>", "Root2 Client ID")
.option("--api-key <key>", "Root2 API Key")
.option("--api-host <host>", "API host URL")
.option("--verbose <boolean>", "Enable verbose logging (true/false)")
.option("--output-format <format>", "Default output format (json|table|text)")
.action(async (options) => {
try {
const configManager = (0, config_1.getConfigManager)();
const config = {};
if (options.clientId)
config.clientId = options.clientId;
if (options.apiKey)
config.apiKey = options.apiKey;
if (options.apiHost)
config.apiHost = options.apiHost;
if (options.verbose !== undefined)
config.verbose = options.verbose === "true";
if (options.outputFormat)
config.outputFormat = options.outputFormat;
if (Object.keys(config).length === 0) {
console.log(formatting_1.format.warning("No configuration options provided."));
console.log(formatting_1.format.info("Available options: --client-id, --api-key, --api-host, --verbose, --output-format"));
console.log(formatting_1.format.info("For initial setup, use: root2 init"));
return;
}
spinner_1.spinner.start("Updating configuration...");
await configManager.saveConfig(config);
spinner_1.spinner.succeed("Configuration updated successfully");
console.log(formatting_1.format.info("Updated configuration:"));
Object.entries(config).forEach(([key, value]) => {
if (key === "apiKey") {
console.log(` ${key}: ${"*".repeat(20)}`);
}
else {
console.log(` ${key}: ${value}`);
}
});
}
catch (error) {
spinner_1.spinner.fail("Failed to update configuration");
console.error(formatting_1.format.error(error instanceof Error ? error.message : "Unknown error"));
process.exit(1);
}
});
configCmd
.command("get")
.description("Display current configuration")
.option("--key <key>", "Get specific configuration key")
.option("--show-secrets", "Show API key (otherwise masked)")
.action(async (options) => {
try {
const configManager = (0, config_1.getConfigManager)();
const config = await configManager.loadConfig();
if (options.key) {
const value = config[options.key];
if (value === undefined) {
console.log(formatting_1.format.warning(`Configuration key '${options.key}' not found`));
}
else {
if (options.key === "apiKey" && !options.showSecrets) {
console.log("*".repeat(20));
}
else {
console.log(value);
}
}
return;
}
console.log(chalk_1.default.cyan("\nš Current Configuration:"));
console.log(chalk_1.default.gray("ā".repeat(40)));
if (Object.keys(config).length === 0) {
console.log(formatting_1.format.warning('No configuration found. Run "root2 config set --interactive" to get started.'));
return;
}
const configEntries = Object.entries(config);
configEntries.forEach(([key, value]) => {
if (value !== undefined) {
let displayValue = value;
if (key === "apiKey" && !options.showSecrets) {
displayValue = "*".repeat(20);
}
console.log(` ${chalk_1.default.blue(key.padEnd(12))}: ${displayValue}`);
}
});
const isComplete = !!(config.clientId && config.apiKey);
console.log(chalk_1.default.gray("ā".repeat(40)));
console.log(` ${chalk_1.default.blue("Status".padEnd(12))}: ${isComplete
? chalk_1.default.green("ā
Complete")
: chalk_1.default.yellow("ā ļø Incomplete")}`);
if (!isComplete) {
console.log(formatting_1.format.warning('\nMissing required configuration. Run "root2 init" to complete setup.'));
}
}
catch (error) {
console.error(formatting_1.format.error(error instanceof Error ? error.message : "Unknown error"));
process.exit(1);
}
});
configCmd
.command("clear")
.description("Clear all configuration")
.option("--force", "Skip confirmation prompt")
.action(async (options) => {
try {
if (!options.force) {
const { confirm } = await inquirer_1.default.prompt([
{
type: "confirm",
name: "confirm",
message: "Are you sure you want to clear all configuration?",
default: false,
},
]);
if (!confirm) {
console.log(formatting_1.format.info("Configuration clear cancelled."));
return;
}
}
const configManager = (0, config_1.getConfigManager)();
spinner_1.spinner.start("Clearing configuration...");
await configManager.clearConfig();
spinner_1.spinner.succeed("Configuration cleared successfully");
}
catch (error) {
spinner_1.spinner.fail("Failed to clear configuration");
console.error(formatting_1.format.error(error instanceof Error ? error.message : "Unknown error"));
process.exit(1);
}
});
configCmd
.command("path")
.description("Show configuration file path")
.action(() => {
const configManager = (0, config_1.getConfigManager)();
console.log(formatting_1.format.filePath(configManager.getConfigPath()));
});
}
//# sourceMappingURL=config.js.map