scai
Version:
> **AI-powered CLI for local code analysis, commit message suggestions, and natural-language queries.** 100% local, private, GDPR-friendly, made in Denmark/EU with ❤️.
56 lines (55 loc) • 1.75 kB
JavaScript
import { contextReviewModule } from "../modules/contextReviewModule.js";
import { finalAnswerModule } from "../modules/finalAnswerModule.js";
import { writeFileModule } from "../modules/writeFileModule.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";
/**
* Active built-in modules — all use ModuleIO for input/output.
*/
export const builtInModules = {
fileSearch: fileSearchModule,
summary: summaryModule,
contextReview: contextReviewModule,
// analysis (as agent options?)
codeTransform: codeTransformModule,
cleanup: cleanupModule,
comments: addCommentsModule,
writeFile: writeFileModule,
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;
}