[{"data":1,"prerenderedAt":823},["ShallowReactive",2],{"navigation_docs":3,"trending-repo-The-PR-Agent\u002Fpr-agent":249,"page-views-\u002Ftrending\u002FThe-PR-Agent\u002Fpr-agent":821},[4,29,104,124,194],{"title":5,"icon":6,"path":7,"stem":8,"children":9},"Start",false,"\u002Fstart","1.start",[10,14,19,24],{"title":11,"path":7,"stem":12,"icon":13},"What jscpd finds","1.start\u002Findex","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fstart\u002Finstallation","1.start\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quickstart","\u002Fstart\u002Fquickstart","1.start\u002F3.quickstart","i-lucide-rocket",{"title":25,"path":26,"stem":27,"icon":28},"Configuration basics","\u002Fstart\u002Fconfiguration","1.start\u002F4.configuration","i-lucide-settings-2",{"title":30,"icon":6,"path":31,"stem":32,"children":33,"page":6},"Guides","\u002Fguides","2.guides",[34,39,44,49,54,59,64,69,74,79,84,89,94,99],{"title":35,"path":36,"stem":37,"icon":38},"Use jscpd in CI","\u002Fguides\u002Fci","2.guides\u002F01.ci","i-lucide-github",{"title":40,"path":41,"stem":42,"icon":43},"Pre-commit hooks","\u002Fguides\u002Fpre-commit","2.guides\u002F02.pre-commit","i-lucide-git-commit",{"title":45,"path":46,"stem":47,"icon":48},"Fail only on new duplication","\u002Fguides\u002Fbaseline","2.guides\u002F03.baseline","i-lucide-git-compare",{"title":50,"path":51,"stem":52,"icon":53},"Monorepos","\u002Fguides\u002Fmonorepos","2.guides\u002F04.monorepos","i-lucide-folder-tree",{"title":55,"path":56,"stem":57,"icon":58},"Cross-format detection","\u002Fguides\u002Fcross-format","2.guides\u002F05.cross-format","i-lucide-layers",{"title":60,"path":61,"stem":62,"icon":63},"Agents","\u002Fguides\u002Fagents","2.guides\u002F06.agents","i-lucide-cpu",{"title":65,"path":66,"stem":67,"icon":68},"Editors","\u002Fguides\u002Feditors","2.guides\u002F07.editors","i-lucide-code",{"title":70,"path":71,"stem":72,"icon":73},"Duplication over git history","\u002Fguides\u002Fhistory","2.guides\u002F08.history","i-lucide-chart-no-axes-combined",{"title":75,"path":76,"stem":77,"icon":78},"Dashboard and health score","\u002Fguides\u002Fdashboard","2.guides\u002F09.dashboard","i-lucide-layout-dashboard",{"title":80,"path":81,"stem":82,"icon":83},"Dead code","\u002Fguides\u002Fdead-code","2.guides\u002F10.dead-code","i-lucide-ghost",{"title":85,"path":86,"stem":87,"icon":88},"Comparing two codebases","\u002Fguides\u002Fcompare","2.guides\u002F11.compare","i-lucide-git-compare-arrows",{"title":90,"path":91,"stem":92,"icon":93},"Semantic clones","\u002Fguides\u002Fsemantic-clones","2.guides\u002F12.semantic-clones","i-lucide-brain-circuit",{"title":95,"path":96,"stem":97,"icon":98},"Similar functions","\u002Fguides\u002Fsimilarity","2.guides\u002F13.similarity","i-lucide-list-tree",{"title":100,"path":101,"stem":102,"icon":103},"Boundaries","\u002Fguides\u002Fboundaries","2.guides\u002F14.boundaries","i-lucide-fence",{"title":105,"icon":6,"path":106,"stem":107,"children":108,"page":6},"Concepts","\u002Fconcepts","3.concepts",[109,114,119],{"title":110,"path":111,"stem":112,"icon":113},"Types of code clones","\u002Fconcepts\u002Fclone-types","3.concepts\u002F1.clone-types","i-lucide-copy",{"title":115,"path":116,"stem":117,"icon":118},"How detection works","\u002Fconcepts\u002Fhow-detection-works","3.concepts\u002F2.how-detection-works","i-lucide-scan-search",{"title":120,"path":121,"stem":122,"icon":123},"The health score","\u002Fconcepts\u002Fhealth-score","3.concepts\u002F3.health-score","i-lucide-heart-pulse",{"title":125,"icon":6,"path":126,"stem":127,"children":128,"page":6},"Reference","\u002Freference","4.reference",[129,134,139,144,181,186,190],{"title":130,"path":131,"stem":132,"icon":133},"CLI options","\u002Freference\u002Fcli","4.reference\u002F1.cli","i-lucide-terminal",{"title":135,"path":136,"stem":137,"icon":138},"The config file","\u002Freference\u002Fconfig-file","4.reference\u002F2.config-file","i-lucide-settings",{"title":140,"path":141,"stem":142,"icon":143},"Exit codes","\u002Freference\u002Fexit-codes","4.reference\u002F3.exit-codes","i-lucide-log-out",{"title":145,"icon":6,"path":146,"stem":147,"children":148},"Reporters","\u002Freference\u002Freporters","4.reference\u002F4.reporters\u002Findex",[149,151,156,161,166,171,176],{"title":145,"path":146,"stem":147,"icon":150},"i-lucide-file-chart-column",{"title":152,"path":153,"stem":154,"icon":155},"HTML reporter","\u002Freference\u002Freporters\u002Fhtml","4.reference\u002F4.reporters\u002F2.html","i-lucide-file-code",{"title":157,"path":158,"stem":159,"icon":160},"JSON reporter","\u002Freference\u002Freporters\u002Fjson","4.reference\u002F4.reporters\u002F3.json","i-lucide-braces",{"title":162,"path":163,"stem":164,"icon":165},"Badge reporter","\u002Freference\u002Freporters\u002Fbadge","4.reference\u002F4.reporters\u002F4.badge","i-lucide-award",{"title":167,"path":168,"stem":169,"icon":170},"SARIF reporter","\u002Freference\u002Freporters\u002Fsarif","4.reference\u002F4.reporters\u002F5.sarif","i-lucide-shield-check",{"title":172,"path":173,"stem":174,"icon":175},"CodeClimate reporter","\u002Freference\u002Freporters\u002Fcodeclimate","4.reference\u002F4.reporters\u002F6.codeclimate","i-lucide-flag-triangle-right",{"title":177,"path":178,"stem":179,"icon":180},"OpenMetrics reporter","\u002Freference\u002Freporters\u002Fopenmetrics","4.reference\u002F4.reporters\u002F7.openmetrics","i-lucide-activity",{"title":182,"path":183,"stem":184,"icon":185},"Supported formats","\u002Freference\u002Fsupported-formats","4.reference\u002F5.supported-formats","i-lucide-languages",{"title":187,"path":188,"stem":189,"icon":38},"GitHub Action","\u002Freference\u002Fgithub-action","4.reference\u002F6.github-action",{"title":191,"path":192,"stem":193,"icon":68},"Rust crates","\u002Freference\u002Frust-crates","4.reference\u002F7.rust-crates",{"title":195,"icon":6,"path":196,"stem":197,"children":198,"page":6},"Project","\u002Fproject","5.project",[199,204,209,214,239,244],{"title":200,"path":201,"stem":202,"icon":203},"Changelog","\u002Fproject\u002Fchangelog","5.project\u002F1.changelog","i-lucide-scroll-text",{"title":205,"path":206,"stem":207,"icon":208},"Migrating from v4 to v5","\u002Fproject\u002Fmigration","5.project\u002F2.migration","i-lucide-arrow-right-left",{"title":210,"path":211,"stem":212,"icon":213},"jscpd v4 (TypeScript)","\u002Fproject\u002Fv4","5.project\u002F3.v4","i-simple-icons-typescript",{"title":215,"icon":6,"path":216,"stem":217,"children":218},"Benchmarks","\u002Fproject\u002Fbenchmarks","5.project\u002F4.benchmarks\u002Findex",[219,221,226,230,235],{"title":215,"path":216,"stem":217,"icon":220},"i-lucide-gauge",{"title":222,"path":223,"stem":224,"icon":225},"Detection Speed","\u002Fproject\u002Fbenchmarks\u002Fdetection-speed","5.project\u002F4.benchmarks\u002F2.detection-speed","i-lucide-zap",{"title":227,"path":228,"stem":229,"icon":58},"Multi-Format Detection","\u002Fproject\u002Fbenchmarks\u002Fcross-format","5.project\u002F4.benchmarks\u002F3.cross-format",{"title":231,"path":232,"stem":233,"icon":234},"AI Token Efficiency","\u002Fproject\u002Fbenchmarks\u002Fai-token-efficiency","5.project\u002F4.benchmarks\u002F4.ai-token-efficiency","i-lucide-sparkles",{"title":236,"path":237,"stem":238,"icon":93},"Embedding Models","\u002Fproject\u002Fbenchmarks\u002Fembedding-models","5.project\u002F4.benchmarks\u002F5.embedding-models",{"title":240,"path":241,"stem":242,"icon":243},"Research","\u002Fproject\u002Fresearch","5.project\u002F5.research","i-lucide-graduation-cap",{"title":245,"path":246,"stem":247,"icon":248},"Articles","\u002Fproject\u002Farticles","5.project\u002F6.articles","i-lucide-newspaper",{"name":250,"url":251,"appearances":252,"latest":268},"The-PR-Agent\u002Fpr-agent","https:\u002F\u002Fgithub.com\u002FThe-PR-Agent\u002Fpr-agent",[253],{"date":254,"rank":255,"stars":256,"starsToday":257,"headSha":258,"sources":259,"lines":260,"clones":261,"duplicatedLines":262,"percentage":263,"codePercentage":264,"codeSources":265,"healthScore":266,"healthGrade":267},"2026-11-05",5,14874,280,"a8c604794ddb5766dc3fa674cbb64aac6f9f509f",668,230513,875,10522,4.56,1.47,116,56.7,"C",{"date":254,"generatedAt":269,"name":250,"url":251,"description":270,"language":271,"stars":256,"starsToday":257,"defaultBranch":272,"headSha":258,"durationMs":273,"total":274,"formats":278,"topClones":334,"code":555,"health":706,"complexity":737,"deadCode":788},"2026-11-05T05:21:19.579Z","🚀 PR Agent: The Original Open-Source PR Reviewer. This project is not the Qodo free tier.","Python","main",2014,{"sources":259,"lines":260,"tokens":275,"clones":261,"duplicatedLines":262,"duplicatedTokens":276,"percentage":263,"percentageTokens":277},1391227,62051,4.46,[279,286,293,300,307,313,320,324,328,331],{"format":280,"sources":281,"lines":282,"clones":283,"duplicatedLines":284,"percentage":285},"python",533,212529,812,9366,4.41,{"format":287,"sources":288,"lines":289,"clones":290,"duplicatedLines":291,"percentage":292},"toml",27,4390,42,918,20.91,{"format":294,"sources":295,"lines":296,"clones":297,"duplicatedLines":298,"percentage":299},"markdown",48,9104,12,107,1.18,{"format":301,"sources":302,"lines":303,"clones":304,"duplicatedLines":305,"percentage":306},"yaml",24,1761,6,89,5.05,{"format":308,"sources":309,"lines":310,"clones":311,"duplicatedLines":309,"percentage":312},"bash",11,236,2,4.66,{"format":314,"sources":315,"lines":316,"clones":317,"duplicatedLines":318,"percentage":319},"json",4,150,1,31,20.67,{"format":321,"sources":255,"lines":322,"clones":323,"duplicatedLines":323,"percentage":323},"css",1428,0,{"format":325,"sources":326,"lines":327,"clones":323,"duplicatedLines":323,"percentage":323},"javascript",3,336,{"format":329,"sources":326,"lines":330,"clones":323,"duplicatedLines":323,"percentage":323},"jsx",306,{"format":332,"sources":304,"lines":333,"clones":323,"duplicatedLines":323,"percentage":323},"text",133,[335,378,401,440,451,460,483,504,523,536],{"format":280,"lines":309,"tokens":336,"first":337,"others":341,"copies":365,"excerpt":366,"kind":377},62,{"name":338,"start":339,"end":340},"tests\u002Funittest\u002Ftest_get_max_tokens.py",88,98,[342,345,348,351,353,356,359,362],{"name":338,"start":343,"end":344},101,111,{"name":338,"start":346,"end":347},114,124,{"name":338,"start":349,"end":350},127,137,{"name":338,"start":352,"end":316},140,{"name":338,"start":354,"end":355},783,793,{"name":338,"start":357,"end":358},806,816,{"name":338,"start":360,"end":361},840,850,{"name":338,"start":363,"end":364},866,876,10,{"lines":367,"total":309},[368,369,370,371,372,373,374,375,376,375],"def test_gpt54_model_max_tokens(self, monkeypatch, model):","    fake_settings = type('', (), {","        'config': type('', (), {","            'custom_model_max_tokens': 0,","            'max_model_tokens': 0","        })()","    })()","","    monkeypatch.setattr(token_budget, \"get_settings\", lambda: fake_settings)","tests",{"format":287,"lines":379,"tokens":380,"first":381,"others":385,"copies":311,"excerpt":390,"kind":400},112,536,{"name":382,"start":383,"end":384},"pr_agent\u002Fsettings\u002Fcode_suggestions\u002Fpr_code_suggestions_prompts.toml",81,192,[386],{"name":387,"start":388,"end":389},"pr_agent\u002Fsettings\u002Fcode_suggestions\u002Fpr_code_suggestions_prompts_not_decoupled.toml",110,221,{"lines":391,"total":379},[392,393,394,395,396,397,375,375,398,399],"    one_sentence_summary: str = Field(description=\"A concise, single-sentence overview (up to 6 words) of the suggested improvement. Focus on the 'what'. Be ge…","{%- if not focus_only_on_problems %}","    label: str = Field(description=\"A single, descriptive label that best characterizes the suggestion type. Possible labels include 'security', 'possible bug'…","{%- else %}","    label: str = Field(description=\"A single, descriptive label that best characterizes the suggestion type. Possible labels include 'security', 'critical bug'…","{%- endif %}","class PRCodeSuggestions(BaseModel):","    code_suggestions: List[CodeSuggestion]","data",{"format":280,"lines":402,"tokens":403,"first":404,"others":407,"copies":432,"excerpt":433,"kind":377},8,55,{"name":338,"start":405,"end":406},314,321,[408,411,414,417,420,423,426,429],{"name":338,"start":409,"end":410},366,373,{"name":338,"start":412,"end":413},725,733,{"name":338,"start":415,"end":416},760,768,{"name":338,"start":418,"end":419},933,941,{"name":338,"start":421,"end":422},952,960,{"name":338,"start":424,"end":425},971,979,{"name":338,"start":427,"end":428},991,999,{"name":338,"start":430,"end":431},1009,1017,9,{"lines":434,"total":402},[435,436,437,438,439,373,374,376],"def test_gpt5_thinking_model_max_tokens(self, monkeypatch, model):","    fake_settings = type(\"\", (), {","        \"config\": type(\"\", (), {","            \"custom_model_max_tokens\": 0,","            \"max_model_tokens\": 0",{"format":287,"lines":441,"tokens":442,"first":443,"others":447,"copies":311,"kind":400},66,396,{"name":444,"start":445,"end":446},"pr_agent\u002Fsettings\u002Fpr_description_only_description_prompts.toml",87,152,[448],{"name":449,"start":265,"end":450},"pr_agent\u002Fsettings\u002Fpr_description_prompts.toml",181,{"format":287,"lines":452,"tokens":453,"first":454,"others":455,"copies":311,"kind":400},65,390,{"name":444,"start":339,"end":446},[456],{"name":457,"start":458,"end":459},"pr_agent\u002Fsettings\u002Fpr_description_only_files_prompts.toml",70,134,{"format":280,"lines":297,"tokens":461,"first":462,"others":466,"copies":482,"kind":377},54,{"name":463,"start":464,"end":465},"tests\u002Funittest\u002Ftest_litellm_reasoning_effort.py",183,194,[467,469,472,474,477,480],{"name":463,"start":442,"end":468},407,{"name":463,"start":470,"end":471},451,462,{"name":463,"start":473,"end":412},714,{"name":463,"start":475,"end":476},787,798,{"name":463,"start":478,"end":479},808,819,{"name":463,"start":481,"end":360},829,7,{"format":280,"lines":432,"tokens":484,"first":485,"others":488,"copies":304,"kind":377},64,{"name":338,"start":486,"end":487},635,643,[489,492,495,498,501],{"name":338,"start":490,"end":491},649,657,{"name":338,"start":493,"end":494},659,669,{"name":338,"start":496,"end":497},679,689,{"name":338,"start":499,"end":500},699,709,{"name":338,"start":502,"end":503},889,899,{"format":280,"lines":432,"tokens":505,"first":506,"others":510,"copies":255,"kind":377},76,{"name":507,"start":508,"end":509},"tests\u002Funittest\u002Ftest_gitlab_provider.py",2861,2869,[511,514,517,520],{"name":507,"start":512,"end":513},2886,2894,{"name":507,"start":515,"end":516},2938,2946,{"name":507,"start":518,"end":519},3001,3009,{"name":507,"start":521,"end":522},3036,3044,{"format":280,"lines":524,"tokens":525,"first":526,"others":530,"copies":326,"kind":377},23,135,{"name":527,"start":528,"end":529},"tests\u002Funittest\u002Ftest_webhook_logic_core.py",544,566,[531,534],{"name":527,"start":532,"end":533},592,613,{"name":527,"start":535,"end":491},636,{"format":280,"lines":365,"tokens":537,"first":538,"others":542,"copies":255,"kind":377},67,{"name":539,"start":540,"end":541},"tests\u002Funittest\u002Ftest_repo_context.py",1058,1067,[543,546,549,552],{"name":539,"start":544,"end":545},1149,1158,{"name":539,"start":547,"end":548},1192,1201,{"name":539,"start":550,"end":551},1217,1226,{"name":539,"start":553,"end":554},1279,1288,{"sources":265,"lines":556,"tokens":557,"clones":452,"duplicatedLines":558,"duplicatedTokens":559,"percentage":264,"percentageTokens":560,"formats":561,"topClones":567,"generated":703},54889,318965,809,4986,1.56,[562,566],{"format":280,"sources":563,"lines":564,"clones":452,"duplicatedLines":558,"percentage":565},115,54739,1.48,{"format":308,"sources":317,"lines":316,"clones":323,"duplicatedLines":323,"percentage":323},[568,589,608,630,638,649,659,670,683,693],{"format":280,"lines":295,"tokens":569,"first":570,"others":574,"copies":311,"excerpt":577,"kind":588},246,{"name":571,"start":572,"end":573},"pr_agent\u002Ftools\u002Fpr_similar_issue.py",616,663,[575],{"name":571,"start":576,"end":475},740,{"lines":578,"total":295},[579,580,581,582,583,584,585,586,587,584],"counter = 0","issues_iterator = iter(issues_list)","while True:","    if counter >= self.max_issues_to_scan:","        get_logger().info(f\"Scanned {self.max_issues_to_scan} issues, stopping\")","        break","    try:","        issue = next(issues_iterator)","    except StopIteration:","code",{"format":280,"lines":590,"tokens":591,"first":592,"others":595,"copies":311,"excerpt":599,"kind":588},47,241,{"name":571,"start":593,"end":594},608,654,[596],{"name":571,"start":597,"end":598},842,888,{"lines":600,"total":590},[601,602,603,604,605,606,607,375,579,580],"get_logger().info('Processing issues...')","corpus = Corpus()","example_issue_record = Record(","    id=f\"example_issue_{repo_name_for_index}\",","    text=\"example_issue\",","    metadata=Metadata(repo=repo_name_for_index)",")",{"format":280,"lines":524,"tokens":609,"first":610,"others":614,"copies":311,"excerpt":618,"kind":588},190,{"name":611,"start":612,"end":613},"pr_agent\u002Fgit_providers\u002Fbitbucket_provider.py",335,357,[615],{"name":616,"start":617,"end":609},"pr_agent\u002Fgit_providers\u002Fbitbucket_server_provider.py",168,{"lines":619,"total":524},[620,621,622,623,624,625,626,627,628,629],"def _prepare_code_suggestion(self, suggestion: dict) -> dict | None:","    body = suggestion[\"body\"]","    original_suggestion = suggestion.get('original_suggestion', None)  # needed for diff code","    if original_suggestion:","        try:","            existing_code = original_suggestion['existing_code'].rstrip() + \"\\n\"","            improved_code = original_suggestion['improved_code'].rstrip() + \"\\n\"","            diff = difflib.unified_diff(existing_code.split('\\n'), improved_code.split('\\n'), n=999)","            patch_orig = \"\\n\".join(diff)","            patch = \"\\n\".join(patch_orig.splitlines()[5:]).strip('\\n')",{"format":280,"lines":524,"tokens":631,"first":632,"others":634,"copies":311,"kind":588},163,{"name":611,"start":494,"end":633},691,[635],{"name":616,"start":636,"end":637},472,496,{"format":280,"lines":639,"tokens":640,"first":641,"others":644,"copies":311,"kind":588},18,149,{"name":642,"start":330,"end":643},"pr_agent\u002Ftools\u002Fpr_code_suggestions.py",323,[645],{"name":646,"start":647,"end":648},"pr_agent\u002Ftools\u002Fpr_reviewer.py",234,251,{"format":280,"lines":650,"tokens":651,"first":652,"others":655,"copies":311,"kind":588},17,125,{"name":611,"start":653,"end":654},342,358,[656],{"name":616,"start":657,"end":658},175,191,{"format":280,"lines":660,"tokens":346,"first":661,"others":665,"copies":311,"kind":588},20,{"name":662,"start":663,"end":664},"pr_agent\u002Fservers\u002Fbitbucket_server_webhook.py",277,296,[666],{"name":667,"start":668,"end":669},"pr_agent\u002Fservers\u002Fgitlab_webhook.py",588,606,{"format":280,"lines":365,"tokens":671,"first":672,"others":676,"copies":326,"kind":588},57,{"name":673,"start":674,"end":675},"pr_agent\u002Fgit_providers\u002Fcodecommit_provider.py",267,276,[677,681],{"name":678,"start":679,"end":680},"pr_agent\u002Fgit_providers\u002Fgit_provider.py",1107,1116,{"name":682,"start":363,"end":261},"pr_agent\u002Fgit_providers\u002Fgithub_provider.py",{"format":280,"lines":639,"tokens":344,"first":684,"others":688,"copies":311,"kind":588},{"name":685,"start":686,"end":687},"pr_agent\u002Fservers\u002Fazuredevops_server_webhook.py",227,244,[689],{"name":690,"start":691,"end":692},"pr_agent\u002Fservers\u002Fbitbucket_app.py",256,273,{"format":280,"lines":650,"tokens":694,"first":695,"others":699,"copies":311,"kind":588},103,{"name":696,"start":697,"end":698},"pr_agent\u002Fgit_providers\u002Fgerrit_provider.py",428,444,[700],{"name":701,"start":702,"end":563},"pr_agent\u002Fgit_providers\u002Flocal_git_provider.py",100,{"files":317,"minified":323,"sample":704},[705],"pr_agent\u002Ftools\u002Fpr_help_docs.py",{"score":266,"grade":267,"size":707,"dimensions":711},{"lines":708,"files":709,"class":710},213397,539,"L",[712,722,730],{"id":713,"source":714,"value":715,"adjusted":715,"lines":716,"halfLife":717,"formats":718,"excluded":720,"weight":317,"score":458},"duplication","jscpd",4.4,9358,8.5,[280,325,329,308,719],"docker",[721,332,400],"markup",{"id":723,"source":714,"value":724,"adjusted":724,"lines":725,"halfLife":726,"coverage":727,"weight":728,"score":729},"dead-code",4.2,8965,7.5,99.9,0.999,67.9,{"id":731,"source":714,"value":732,"adjusted":733,"lines":734,"halfLife":735,"weight":317,"score":736},"complexity",69.5,69,148288,50,38.4,{"total":738,"mean":739,"files":740},29266,54.3,[741,746,751,756,760,764,769,774,779,784],{"path":742,"complexity":743,"lines":744,"bytes":745},"pr_agent\u002Falgo\u002Fai_handlers\u002Flitellm_ai_handler.py",1190,3839,200885,{"path":747,"complexity":748,"lines":749,"bytes":750},"tests\u002Funittest\u002Ftest_litellm_api_key_guard.py",1123,8327,376120,{"path":752,"complexity":753,"lines":754,"bytes":755},"pr_agent\u002Fgit_providers\u002Fgitlab_provider.py",834,2802,142278,{"path":682,"complexity":757,"lines":758,"bytes":759},686,2688,132923,{"path":642,"complexity":761,"lines":762,"bytes":763},557,2414,129432,{"path":765,"complexity":766,"lines":767,"bytes":768},"pr_agent\u002Fgit_providers\u002Fazuredevops_provider.py",540,2059,92466,{"path":770,"complexity":771,"lines":772,"bytes":773},"pr_agent\u002Falgo\u002Fai_handlers\u002Fcloud_auth.py",495,1912,88234,{"path":775,"complexity":776,"lines":777,"bytes":778},"pr_agent\u002Falgo\u002Futils.py",484,1818,86614,{"path":780,"complexity":781,"lines":782,"bytes":783},"tests\u002Funittest\u002Ftest_litellm_callback_drain.py",457,3088,106869,{"path":646,"complexity":785,"lines":786,"bytes":787},452,1814,92012,{"percentage":789,"findings":790,"files":791,"byCategory":792,"largest":798},4.21,40,548,[793,795],{"category":794,"count":297},"unused-file",{"category":796,"count":797},"unused-import",28,[799,800,803,805,807,808,811,814,816,819],{"category":794,"path":752,"name":375,"line":317,"lines":754},{"category":794,"path":801,"name":375,"line":317,"lines":802},"pr_agent\u002Fgit_providers\u002Fgitea_provider.py",1485,{"category":794,"path":611,"name":375,"line":317,"lines":804},1029,{"category":794,"path":673,"name":375,"line":317,"lines":806},905,{"category":794,"path":705,"name":375,"line":317,"lines":558},{"category":794,"path":809,"name":375,"line":317,"lines":810},"pr_agent\u002Fgit_providers\u002Fcodecommit_client.py",355,{"category":794,"path":812,"name":375,"line":317,"lines":813},"pr_agent\u002Fgit_providers\u002Fplain_diff_provider.py",261,{"category":794,"path":815,"name":375,"line":317,"lines":640},"pr_agent\u002Fgit_providers\u002Fdiff_parsing.py",{"category":794,"path":817,"name":375,"line":317,"lines":818},"pr_agent\u002Falgo\u002Fai_handlers\u002Flangchain_ai_handler.py",130,{"category":794,"path":820,"name":375,"line":317,"lines":383},"pr_agent\u002Falgo\u002Fai_handlers\u002Fopenai_ai_handler.py",{"\u002Ftrending\u002FThe-PR-Agent\u002Fpr-agent":822},{"views":323,"visits":323},1793861479333]