UNPKG

scai

Version:

> AI-powered CLI tool for commit messages **and** pull request reviews — using local models.

48 lines (47 loc) 2.27 kB
import fs from 'fs/promises'; import chalk from 'chalk'; import { runModulePipeline } from './pipeline/runModulePipeline.js'; import { normalizePath } from './utils/normalizePath.js'; import { readConfig } from './config.js'; import { countTokens, splitCodeIntoChunks } from './utils/splitCodeIntoChunk.js'; export async function handleAgentRun(filepath, modules) { try { filepath = normalizePath(filepath); const content = await fs.readFile(filepath, 'utf-8'); const totalTokens = countTokens(content); console.log(chalk.blue(`🧮 Total tokens in file:`), chalk.yellow(totalTokens.toString())); const config = readConfig(); const maxTokens = 1500; const chunks = splitCodeIntoChunks(content, maxTokens); console.log(chalk.magenta(`📦 Split into ${chunks.length} chunks`)); const processedChunks = []; for (const [i, chunk] of chunks.entries()) { const chunkTokens = countTokens(chunk); if (i === 0) { console.log(chalk.cyan(`🔍 Processing ${chunks.length} chunks of file:`), chalk.white(filepath)); } console.log(chalk.gray(` - Chunk ${i + 1} tokens:`), chalk.yellow(chunkTokens.toString())); const chunkInput = { originalContent: chunk, content: chunk, filepath, chunkIndex: i, chunkCount: chunks.length, }; const response = await runModulePipeline(modules, chunkInput); if (!response.content.trim()) { throw new Error(`⚠️ Model returned empty result on chunk ${i + 1}`); } processedChunks.push(response.content); //console.log(chalk.green(`✅ Finished chunk ${i + 1}/${chunks.length}`)); } // Join all chunk outputs into one string const finalOutput = processedChunks.join('\n\n'); // Overwrite original file here: await fs.writeFile(filepath, finalOutput, 'utf-8'); console.log(chalk.green(`✅ Original file overwritten: ${filepath}`)); } catch (err) { console.error(chalk.red('❌ Error in agent run:'), err instanceof Error ? err.message : err); } }