Spaces:
Paused
Paused
| /** | |
| * TIA-∞ Lineage Mapper | |
| * Interprets the scanned QGTNL structure and reconstructs ancestry, | |
| * drift, missing links, and module evolution patterns. | |
| */ | |
| import { ScanResult } from "./scanner"; | |
| export interface LineageNode { | |
| path: string; | |
| type: "file" | "directory"; | |
| depth: number; | |
| children?: LineageNode[]; | |
| inferredRole?: string; | |
| anomalies?: string[]; | |
| } | |
| export interface LineageReport { | |
| generatedAt: number; | |
| root: LineageNode; | |
| anomalies: string[]; | |
| } | |
| function inferRole(node: ScanResult): string | undefined { | |
| const p = node.path.toLowerCase(); | |
| if (p.includes("tia")) return "core-intelligence"; | |
| if (p.includes("aion")) return "temporal-engine"; | |
| if (p.includes("oracle")) return "predictive-engine"; | |
| if (p.includes("citadel")) return "infrastructure"; | |
| if (p.includes("holo3d")) return "visual-engine"; | |
| if (p.includes("api")) return "interface-layer"; | |
| if (p.includes("engine")) return "processing-layer"; | |
| if (p.includes("ui")) return "presentation-layer"; | |
| return undefined; | |
| } | |
| function detectAnomalies(node: ScanResult): string[] { | |
| const issues: string[] = []; | |
| if (node.type === "file" && node.size === 0) { | |
| issues.push("empty-file"); | |
| } | |
| if (node.type === "directory" && (!node.children || node.children.length === 0)) { | |
| issues.push("empty-directory"); | |
| } | |
| return issues; | |
| } | |
| function mapLineage(node: ScanResult, depth = 0): LineageNode { | |
| const lineageNode: LineageNode = { | |
| path: node.path, | |
| type: node.type, | |
| depth, | |
| inferredRole: inferRole(node), | |
| anomalies: detectAnomalies(node), | |
| }; | |
| if (node.children) { | |
| lineageNode.children = node.children.map((child) => | |
| mapLineage(child, depth + 1) | |
| ); | |
| } | |
| return lineageNode; | |
| } | |
| export function generateLineageReport(structure: ScanResult): LineageReport { | |
| const root = mapLineage(structure); | |
| const anomalies: string[] = []; | |
| function collect(node: LineageNode) { | |
| if (node.anomalies && node.anomalies.length > 0) { | |
| anomalies.push(...node.anomalies.map((a) => `${node.path}: ${a}`)); | |
| } | |
| if (node.children) { | |
| node.children.forEach(collect); | |
| } | |
| } | |
| collect(root); | |
| return { | |
| generatedAt: Date.now(), | |
| root, | |
| anomalies, | |
| }; | |
| } | |