UNPKG

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 ā¤ļø.

68 lines (67 loc) • 2.75 kB
import chalk from "chalk"; import { buildLightContext } from "./buildContextualPrompt.js"; /** * Responsible only for building the contextual prompt text (no file writes). */ export async function buildContext(args) { console.log(chalk.blueBright("\nšŸ“¦ Building contextual prompt...")); // ↳ Now returns a StructuredContext object const ctx = await buildLightContext(args); // Serialize to prompt string const promptContent = serializeContext(ctx); console.log(chalk.greenBright("āœ… Prompt built successfully.")); console.log(chalk.cyan(`[PromptBuilder] Token estimate: ~${Math.round(promptContent.length / 4)} tokens`)); return promptContent; } function serializeContext(ctx) { const out = []; out.push(`# User Query\n${ctx.initContext?.userQuery}\n`); if (ctx.initContext?.projectSummary) { out.push(`# Project Summary\n${ctx.initContext?.projectSummary}\n`); } if (ctx.initContext?.moduleSummaries?.length) { out.push(`# Module Summaries`); for (const m of ctx.initContext?.moduleSummaries) { out.push(`- **${m.path}**: ${m.summary}`); } out.push(""); } if (ctx.workingFiles?.length) { out.push(`# Working Files`); for (const f of ctx.workingFiles) { out.push(`\n## ${f.path}`); if (f.summary) out.push(`Summary: ${f.summary}`); if (f.code) out.push(`\nCode (truncated):\n${f.code.slice(0, 1000)}`); } } if (ctx.analysis?.focus?.relevantFiles?.length) { out.push(`# Focused Files (semantic analysis)`); for (const path of ctx.analysis.focus.relevantFiles) { out.push(`- ${path}`); } if (ctx.analysis.focus.rationale) { out.push(`Rationale: ${ctx.analysis.focus.rationale}`); } } if (ctx.analysis?.understanding) { out.push(`# Semantic Understanding`); if (ctx.analysis.understanding.problemStatement) out.push(`Problem: ${ctx.analysis.understanding.problemStatement}`); if (ctx.analysis.understanding.assumptions?.length) out.push(`Assumptions: ${ctx.analysis.understanding.assumptions.join(", ")}`); if (ctx.analysis.understanding.risks?.length) out.push(`Risks: ${ctx.analysis.understanding.risks.join(", ")}`); } if (ctx.initContext?.repoTree) { out.push(`# Repo Tree\n${ctx.initContext?.repoTree}\n`); } if (ctx.initContext?.kgSample?.length) { out.push(`# Knowledge Graph Sample`); for (const e of ctx.initContext?.kgSample) { out.push(`- ${e.source} -> (${e.relation}) -> ${e.target}`); } } return out.join("\n"); }