UNPKG

scai

Version:

> **A local-first AI CLI for understanding, querying, and iterating on large codebases.** > **100% local • No token costs • No cloud • No prompt injection • Private by design**

75 lines (74 loc) 2.31 kB
import readline from 'readline'; import { getIndexDir } from '../constants.js'; import { MainAgent } from '../agents/MainAgent.js'; import { Spinner } from '../lib/spinner.js'; import { clearRunLog } from '../utils/promptLogHelper.js'; export async function runAskCommand(query) { // STEP 0: Get user query if (!query) query = await promptOnce('💬 Ask your question:\n'); query = query.trim(); if (!query) { console.error('❌ No question provided.\n👉 Usage: scai ask "your question"'); return; } clearRunLog(); console.log(`📁 Using index root: ${getIndexDir()}`); const now = new Date().toISOString(); const context = { task: { id: 0, projectId: 0, status: "active", initialQuery: query, createdAt: now, updatedAt: now, taskSteps: [], }, initContext: { userQuery: query, relatedFiles: [], relatedFileScores: {}, folderCapsules: [], queryExpansionTerms: [], }, }; // STEP 1: Run agent try { console.log('\n🤖 Launching autonomous agent...'); const spinner = new Spinner(); spinner.start(); const ui = { update: text => spinner.update(text), pause: fn => { spinner.stop(); // pause spinner try { fn(); } finally { spinner.start(); // resume spinner } }, succeed: msg => spinner.succeed(msg), fail: msg => spinner.fail(msg), stop: () => spinner.stop() // ✅ proper stop implementation }; const agent = new MainAgent(context, ui); await agent.run(); spinner.succeed('Done'); } catch (err) { console.error('❌ Autonomous agent run failed:', err); } } // helper function promptOnce(promptText) { return new Promise(resolve => { console.log(promptText); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question('> ', answer => { rl.close(); resolve(answer.trim()); }); }); }