Team Ai
Apppublic

kyorlin2001/code-analysis-tool

sourceHugging Faceapache-2.0updated 6mo agoView on Hugging Face
0likes
intake_agent.py86 linesDownload Raw Back to agents
1from __future__ import annotations2 3from dataclasses import dataclass4from typing import Any5 6from models.analysis_state import AnalysisState7 8 9@dataclass10class IntakeOutput:11    """12    Result of the intake agent.13    """14 15    repo_name: str16    file_count: int17    language_summary: dict[str, int]18    notes: list[str]19 20 21class IntakeAgent:22    """23    Performs the first-pass repository intake.24 25    Responsibilities:26    - inspect repository contents27    - estimate language distribution28    - capture basic notes for downstream agents29    """30 31    def run(self, state: AnalysisState) -> IntakeOutput:32        language_summary = self._summarize_languages(state.files)33 34        notes: list[str] = []35        if not state.files:36            notes.append("No supported text files were found in the repository.")37        else:38            notes.append(f"Found {len(state.files)} supported text files.")39 40        output = IntakeOutput(41            repo_name=state.repo_name,42            file_count=len(state.files),43            language_summary=language_summary,44            notes=notes,45        )46 47        state.summaries["intake"] = self._format_summary(output)48        state.agent_outputs["intake"] = output49        return output50 51    def _summarize_languages(self, files: list[str]) -> dict[str, int]:52        """53        Very lightweight extension-based language summary.54        """55        extension_map = {56            ".py": "Python",57            ".js": "JavaScript",58            ".ts": "TypeScript",59            ".tsx": "TypeScript React",60            ".jsx": "JavaScript React",61            ".java": "Java",62            ".kt": "Kotlin",63            ".go": "Go",64            ".rs": "Rust",65        }66 67        language_summary: dict[str, int] = {}68        for file in files:69            for extension, language in extension_map.items():70                if file.endswith(extension):71                    language_summary[language] = language_summary.get(language, 0) + 172                    break73 74        return language_summary75 76    def _format_summary(self, output: IntakeOutput) -> str:77        summary = f"Intake Agent Summary:\n"78        summary += f"  Repo Name: {output.repo_name}\n"79        summary += f"  File Count: {output.file_count}\n"80        summary += "  Language Summary:\n"81        for language, count in output.language_summary.items():82            summary += f"    {language}: {count}\n"83        summary += "  Notes:\n"84        for note in output.notes:85            summary += f"    {note}\n"86        return summary