UNPKG

voyageai-cli

Version:

CLI for Voyage AI embeddings, reranking, and MongoDB Atlas Vector Search

163 lines (149 loc) 5.84 kB
#!/usr/bin/env node 'use strict'; require('dotenv').config({ path: '.env.local', override: true, quiet: true }); require('dotenv').config({ quiet: true }); const { program } = require('commander'); const pc = require('picocolors'); const { registerEmbed } = require('./commands/embed'); const { registerRerank } = require('./commands/rerank'); const { registerStore } = require('./commands/store'); const { registerSearch } = require('./commands/search'); const { registerIndex } = require('./commands/index'); const { registerModels } = require('./commands/models'); const { registerPing } = require('./commands/ping'); const { registerConfig } = require('./commands/config'); const { registerDemo } = require('./commands/demo'); const { registerExplain } = require('./commands/explain'); const { registerSimilarity } = require('./commands/similarity'); const { registerIngest } = require('./commands/ingest'); const { registerCompletions } = require('./commands/completions'); const { registerPlayground } = require('./commands/playground'); const { registerBenchmark } = require('./commands/benchmark'); const { registerEstimate } = require('./commands/estimate'); const { registerOptimize } = require('./commands/optimize'); const { registerInit } = require('./commands/init'); const { registerChunk } = require('./commands/chunk'); const { registerQuery } = require('./commands/query'); const { registerPipeline } = require('./commands/pipeline'); const { registerEval } = require('./commands/eval'); const { registerGenerate } = require('./commands/generate'); const { registerScaffold } = require('./commands/scaffold'); const { register: registerPurge } = require('./commands/purge'); const { register: registerRefresh } = require('./commands/refresh'); const { registerApp } = require('./commands/app'); const { registerAbout } = require('./commands/about'); const { register: registerDoctor } = require('./commands/doctor'); const { register: registerQuickstart } = require('./commands/quickstart'); const { register: registerReset } = require('./commands/reset'); const { registerBug } = require('./commands/bug'); const { registerChat } = require('./commands/chat'); const { registerMcpServer } = require('./commands/mcp-server'); const { registerNano } = require('./commands/nano'); const { registerTelemetry } = require('./commands/telemetry'); const { registerWorkflow } = require('./commands/workflow'); const { registerIndexWorkspace } = require('./commands/index-workspace'); const { registerExport } = require('./commands/export'); const { registerImport } = require('./commands/import'); const { registerCodeSearch } = require('./commands/code-search'); const { showBanner, showQuickStart, getVersion } = require('./lib/banner'); const { moments } = require('./lib/robot-moments'); const version = getVersion(); program .name('vai') .description('Voyage AI embeddings, reranking, and Atlas Vector Search CLI') .version(`vai/${version} (community tool — not an official MongoDB or Voyage AI product)`, '-V, --version', 'output the version number'); registerEmbed(program); registerRerank(program); registerStore(program); registerSearch(program); registerIndex(program); registerModels(program); registerPing(program); registerConfig(program); registerDemo(program); registerExplain(program); registerSimilarity(program); registerIngest(program); registerCompletions(program); registerPlayground(program); registerBenchmark(program); registerEstimate(program); registerOptimize(program); registerInit(program); registerChunk(program); registerQuery(program); registerPipeline(program); registerEval(program); registerGenerate(program); registerScaffold(program); registerPurge(program); registerRefresh(program); registerApp(program); registerAbout(program); registerDoctor(program); registerQuickstart(program); registerReset(program); registerBug(program); registerChat(program); registerMcpServer(program); registerNano(program); registerTelemetry(program); registerWorkflow(program); registerIndexWorkspace(program); registerExport(program); registerImport(program); registerCodeSearch(program); // Show robot header before help output in TTY mode (skip when banner already shown) let bannerShown = false; program.addHelpText('beforeAll', () => { if (!bannerShown && moments.isInteractive()) { moments.help(version); } return ''; }); // Append disclaimer to all help output program.addHelpText('after', ` ${pc.dim('Community tool — not an official MongoDB or Voyage AI product.')} ${pc.dim('Docs: https://docs.vaicli.com/')} `); // Anonymous telemetry (fire-and-forget, non-blocking) const telemetry = require('./lib/telemetry'); // If no args (just `vai`), show welcome wizard (first run) or banner + help if (process.argv.length <= 2) { const { shouldShowWelcome, runWelcome } = require('./lib/welcome'); const showWelcome = shouldShowWelcome(); telemetry.ensureNoticeShown({ surface: 'cli' }); if (showWelcome) { runWelcome() .then((completed) => { if (!completed) { // User cancelled: fall back to normal quick start bannerShown = true; showQuickStart(); program.outputHelp(); } process.exit(0); }) .catch(() => { // Wizard error: fall back gracefully bannerShown = true; showBanner(); showQuickStart(); program.outputHelp(); process.exit(0); }); } else { bannerShown = true; showBanner(); showQuickStart(); program.outputHelp(); process.exit(0); } } telemetry.ensureNoticeShown({ surface: 'cli' }); // Track command usage after parsing program.hook('preAction', (thisCommand) => { const cmd = thisCommand.args?.[0] || thisCommand.name(); telemetry.send('cli_command', { command: cmd }); }); program.parse();