autosnippet
Version:
Extract code patterns into a knowledge base for AI coding assistants
49 lines (48 loc) • 1.64 kB
JavaScript
/**
* Panorama summarization helper for internal agent responses.
*
* Extracted from bootstrap-internal.ts.
* Note: MissionBriefingBuilder has its own typed version for the MissionBriefing interface.
*
* @module bootstrap/shared/panorama-utils
*/
/**
* Summarize PanoramaResult into a compact internal-agent-friendly shape.
*
* Returns the top layers, coupling hotspots, cyclic dependencies, and knowledge gaps.
*/
export function summarizePanorama(panoramaResult) {
if (!panoramaResult || typeof panoramaResult !== 'object') {
return null;
}
const pr = panoramaResult;
const moduleMap = pr.modules;
const layers = pr.layers;
const gaps = pr.gaps ?? [];
const cycles = pr.cycles ?? [];
// Coupling hotspots: fanIn >= 10 or fanOut >= 10
const couplingHotspots = [];
if (moduleMap) {
const entries = moduleMap instanceof Map
? [...moduleMap.values()]
: Object.values(moduleMap);
for (const mod of entries) {
if ((mod.fanIn || 0) >= 10 || (mod.fanOut || 0) >= 10) {
couplingHotspots.push({
name: mod.name || '',
fanIn: mod.fanIn || 0,
fanOut: mod.fanOut || 0,
});
}
}
}
return {
layers: layers?.levels?.slice(0, 10) ?? [],
couplingHotspots: couplingHotspots.slice(0, 10),
cyclicDependencies: cycles.slice(0, 10).map((c) => c.modules),
knowledgeGaps: gaps.slice(0, 20).map((g) => ({
module: g.module,
suggestedFocus: g.suggestedFocus,
})),
};
}