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**
67 lines (66 loc) • 2.31 kB
JavaScript
import { contextReviewModule } from "../modules/contextReviewModule.js";
import { finalAnswerModule } from "../modules/finalAnswerModule.js";
import { fileSearchModule } from "../modules/fileSearchModule.js";
import { cleanupModule } from "../modules/cleanupModule.js";
import { summaryModule } from "../modules/summaryModule.js";
import { addCommentsModule } from "../modules/commentModule.js";
import { codeTransformModule } from "../modules/codeTransformModule.js";
import { semanticAnalysisModule } from "../modules/semanticAnalysisModule.js";
/**
* Active built-in modules — all use ModuleIO for input/output.
*/
export const builtInModules = {
// =====================================================
// INFORMATION
// =====================================================
fileSearch: fileSearchModule,
summary: summaryModule,
// =====================================================
// ANALYSIS
// =====================================================
semanticAnalysis: semanticAnalysisModule,
contextReview: contextReviewModule,
// =====================================================
// TRANSFORM / WRITE SUPPORT
// =====================================================
codeTransform: codeTransformModule,
cleanup: cleanupModule,
comments: addCommentsModule,
// =====================================================
// FINALIZE
// =====================================================
finalAnswer: finalAnswerModule,
};
/**
* Get module by name.
*/
export function getModuleByName(name) {
return builtInModules[name];
}
/**
* List available modules for CLI or UI display.
*/
export function listAvailableModules() {
return Object.entries(builtInModules).map(([name, mod]) => ({
name,
description: mod.description ?? "No description available",
}));
}
/**
* Resolve modules from a list of names.
* Returns a unique ordered array of modules.
*/
export function resolveModulesByNames(names) {
const seen = new Set();
const resolved = [];
for (const name of names) {
if (seen.has(name))
continue;
const mod = getModuleByName(name);
if (mod) {
resolved.push(mod);
seen.add(name);
}
}
return resolved;
}