[{"data":1,"prerenderedAt":839},["ShallowReactive",2],{"navigation_docs":3,"trending-repo-NVIDIA\u002FSkillSpector":249,"page-views-\u002Ftrending\u002FNVIDIA\u002FSkillSpector":837},[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},"NVIDIA\u002FSkillSpector","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FSkillSpector",[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-10-27",4,22395,214,"d7338f58200a9ae2a24810cee08911ab68b107a7",446,221258,779,9877,4.46,2.91,115,32.2,"E",{"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":330,"code":573,"health":724,"complexity":756,"deadCode":805},"2026-10-27T05:30:54.898Z","Security scanner for AI agent skills. Detect vulnerabilities, malicious patterns, security risks, prompt injection, data exfiltration, and supply-chain risks in Claude Code, Codex, and MCP skills before you install them.","Python","main",1858,{"sources":259,"lines":260,"tokens":275,"clones":261,"duplicatedLines":262,"duplicatedTokens":276,"percentage":263,"percentageTokens":277},1243312,54252,4.36,[279,286,292,299,305,312,317,320,324,327],{"format":280,"sources":281,"lines":282,"clones":283,"duplicatedLines":284,"percentage":285},"python",313,206722,766,9665,4.68,{"format":287,"sources":255,"lines":288,"clones":289,"duplicatedLines":290,"percentage":291},"typescript",1794,6,71,3.96,{"format":293,"sources":294,"lines":295,"clones":296,"duplicatedLines":297,"percentage":298},"markdown",74,9586,3,37,0.39,{"format":300,"sources":301,"lines":302,"clones":296,"duplicatedLines":303,"percentage":304},"yaml",18,1139,90,7.9,{"format":306,"sources":307,"lines":308,"clones":309,"duplicatedLines":310,"percentage":311},"json",5,159,1,14,8.81,{"format":313,"sources":314,"lines":315,"clones":316,"duplicatedLines":316,"percentage":316},"text",16,567,0,{"format":318,"sources":309,"lines":319,"clones":316,"duplicatedLines":316,"percentage":316},"javascript",432,{"format":321,"sources":322,"lines":323,"clones":316,"duplicatedLines":316,"percentage":316},"bash",9,380,{"format":325,"sources":296,"lines":326,"clones":316,"duplicatedLines":316,"percentage":316},"mermaid",178,{"format":328,"sources":309,"lines":329,"clones":316,"duplicatedLines":316,"percentage":316},"makefile",158,[331,357,402,440,467,479,503,514,539,555],{"format":280,"lines":332,"tokens":333,"first":334,"others":338,"copies":343,"excerpt":344,"kind":356},169,790,{"name":335,"start":336,"end":337},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fbehavioral_ast.py",653,821,[339],{"name":340,"start":341,"end":342},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fbehavioral_taint_tracking.py",2284,2452,2,{"lines":345,"total":332},[346,347,348,349,350,351,352,353,354,355],"\"\"\"Parse Python files via AST and detect dangerous execution patterns.\"\"\"","components: list[str] = state.get(\"components\") or []","file_cache: dict[str, str] = state.get(\"local_file_cache\") or state.get(\"file_cache\") or {}","raw_file_cache = state.get(\"raw_file_cache\")","source_classifications = (","    state.get(\"python_source_classifications\")","    if \"python_source_classifications\" in state","    else None",")","source_classification_limitations = state.get(\"python_source_classification_limitations\") or {}","code",{"format":280,"lines":358,"tokens":359,"first":360,"others":364,"copies":389,"excerpt":390,"excerptSecond":398,"kind":401},7,52,{"name":361,"start":362,"end":363},"tests\u002Fnodes\u002Fanalyzers\u002Ftest_security_reconstruction.py",537,543,[365,368,371,374,377,380,383,386],{"name":361,"start":366,"end":367},2034,2040,{"name":361,"start":369,"end":370},2054,2060,{"name":361,"start":372,"end":373},2124,2130,{"name":361,"start":375,"end":376},2310,2316,{"name":361,"start":378,"end":379},2357,2363,{"name":361,"start":381,"end":382},2377,2383,{"name":361,"start":384,"end":385},2388,2394,{"name":361,"start":387,"end":388},2399,2405,11,{"lines":391,"total":358},[392,393,354,394,395,396,397],"result = static_runner.run_static_patterns_with_ledger(","    {\"components\": [\"SKILL.md\"], \"file_cache\": {\"SKILL.md\": content}}, [tm_module]","","event = result[\"inspection_ledger\"][0]","assert event[\"outcome\"] is LedgerOutcome.PARTIAL","assert event[\"reason_code\"] is LedgerReason.OBFUSCATED_INSTRUCTION_TEXT",{"lines":399,"total":358},[392,393,354,394,395,396,400],"assert event[\"reason_code\"] is LedgerReason.STATIC_PARSE_LIMIT","tests",{"format":280,"lines":403,"tokens":404,"first":405,"others":409,"copies":431,"excerpt":432,"kind":401},12,57,{"name":406,"start":407,"end":408},"tests\u002Fnodes\u002Ftest_semantic_quality_policy.py",819,830,[410,413,416,419,422,425,428],{"name":406,"start":411,"end":412},851,862,{"name":406,"start":414,"end":415},879,890,{"name":406,"start":417,"end":418},937,948,{"name":406,"start":420,"end":421},965,976,{"name":406,"start":423,"end":424},996,1007,{"name":406,"start":426,"end":427},1029,1040,{"name":406,"start":429,"end":430},1062,1073,8,{"lines":433,"total":403},[434,394,435,436,394,437,394,438,394,439],"    pytest.skip(\"sqp1_vague_triggers fixture not present\")","file_cache = _build_file_cache(skill_dir)","state: dict = {\"file_cache\": file_cache}","from skillspector.llm_analyzer_base import LLMAnalyzerBase","orig_init = LLMAnalyzerBase.__init__","def _patched_init(self_inner, *args, **kwargs):",{"format":280,"lines":322,"tokens":441,"first":442,"others":445,"copies":431,"kind":401},55,{"name":443,"start":444,"end":323},"tests\u002Ftest_mcp_tool_poisoning.py",372,[446,449,452,455,458,461,464],{"name":443,"start":447,"end":448},390,398,{"name":443,"start":450,"end":451},405,413,{"name":443,"start":453,"end":454},426,434,{"name":443,"start":456,"end":457},445,453,{"name":443,"start":459,"end":460},462,470,{"name":443,"start":462,"end":463},483,491,{"name":443,"start":465,"end":466},500,508,{"format":280,"lines":468,"tokens":469,"first":470,"others":474,"copies":343,"kind":356},65,354,{"name":471,"start":472,"end":473},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fsemantic_developer_intent.py",251,315,[475],{"name":476,"start":477,"end":478},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fsemantic_quality_policy.py",238,302,{"format":280,"lines":389,"tokens":441,"first":480,"others":484,"copies":358,"kind":401},{"name":481,"start":482,"end":483},"tests\u002Funit\u002Ftest_cli.py",5532,5542,[485,488,491,494,497,500],{"name":481,"start":486,"end":487},5893,5903,{"name":481,"start":489,"end":490},6080,6090,{"name":481,"start":492,"end":493},6137,6147,{"name":481,"start":495,"end":496},6218,6228,{"name":481,"start":498,"end":499},6837,6847,{"name":481,"start":501,"end":502},6904,6914,{"format":280,"lines":504,"tokens":505,"first":506,"others":509,"copies":343,"kind":401},49,323,{"name":507,"start":508,"end":294},"tests\u002Fnodes\u002Fanalyzers\u002Ftest_documentation_reconstruction.py",26,[510],{"name":511,"start":512,"end":513},"tests\u002Fnodes\u002Fanalyzers\u002Ftest_runtime_reconstruction_workflow.py",21,69,{"format":280,"lines":389,"tokens":515,"first":516,"others":520,"copies":289,"kind":356},62,{"name":517,"start":518,"end":519},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_data_exfiltration.py",514,524,[521,524,528,531,535],{"name":522,"start":454,"end":523},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_excessive_agency.py",444,{"name":525,"start":526,"end":527},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_memory_poisoning.py",631,641,{"name":525,"start":529,"end":530},658,668,{"name":532,"start":533,"end":534},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_output_handling.py",679,689,{"name":536,"start":537,"end":538},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_system_prompt_leakage.py",1004,1014,{"format":280,"lines":403,"tokens":540,"first":541,"others":543,"copies":289,"kind":401},60,{"name":361,"start":366,"end":542},2045,[544,546,548,550,552],{"name":361,"start":369,"end":545},2065,{"name":361,"start":372,"end":547},2135,{"name":361,"start":375,"end":549},2321,{"name":361,"start":387,"end":551},2410,{"name":361,"start":553,"end":554},2501,2512,{"format":280,"lines":431,"tokens":556,"first":557,"others":560,"copies":307,"kind":401},73,{"name":361,"start":558,"end":559},250,257,[561,564,567,570],{"name":361,"start":562,"end":563},1850,1857,{"name":361,"start":565,"end":566},1884,1891,{"name":361,"start":568,"end":569},1899,1906,{"name":361,"start":571,"end":572},2813,2820,{"sources":265,"lines":574,"tokens":575,"clones":576,"duplicatedLines":577,"duplicatedTokens":578,"percentage":264,"percentageTokens":579,"formats":580,"topClones":587,"generated":721},87188,463740,172,2539,13429,2.9,[581,585],{"format":280,"sources":582,"lines":583,"clones":576,"duplicatedLines":577,"percentage":584},112,86259,2.94,{"format":287,"sources":296,"lines":586,"clones":316,"duplicatedLines":316,"percentage":316},929,[588,594,609,628,650,670,679,689,704,713],{"format":280,"lines":332,"tokens":333,"first":589,"others":590,"copies":343,"excerpt":592,"kind":356},{"name":335,"start":336,"end":337},[591],{"name":340,"start":341,"end":342},{"lines":593,"total":332},[346,347,348,349,350,351,352,353,354,355],{"format":280,"lines":468,"tokens":469,"first":595,"others":596,"copies":343,"excerpt":598,"kind":356},{"name":471,"start":472,"end":473},[597],{"name":476,"start":477,"end":478},{"lines":599,"total":468},[600,601,602,603,354,604,605,606,607,608],"    base_prompt=prompt,","    model=model,","    node=ANALYZER_ID,","    timeout=timeout,","batches = analyzer.get_batches(files, file_cache)","results = run_async(analyzer.arun_batches(batches))","outcome = getattr(analyzer, \"_last_batch_outcome\", BatchExecutionResult(successful=results))","findings = analyzer.collect_findings(outcome.successful)","events, status = ledger_events_for_batches(ANALYZER_ID, outcome)",{"format":280,"lines":389,"tokens":515,"first":610,"others":611,"copies":289,"excerpt":617,"kind":356},{"name":517,"start":518,"end":519},[612,613,614,615,616],{"name":522,"start":454,"end":523},{"name":525,"start":526,"end":527},{"name":525,"start":529,"end":530},{"name":532,"start":533,"end":534},{"name":536,"start":537,"end":538},{"lines":618,"total":389},[619,620,621,622,623,624,625,626,627,354],"        message=\"File System Enumeration\",","        severity=Severity.MEDIUM,","        location=loc(line_num),","        confidence=confidence,","        tags=tag,","        context=ctx(match.start()),","        matched_text=match.group(0)[:200],","        complete_match=match.group(0),","    )",{"format":280,"lines":629,"tokens":404,"first":630,"others":634,"copies":289,"kind":356},10,{"name":631,"start":632,"end":633},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_agent_snooping.py",164,173,[635,638,641,644,647],{"name":517,"start":636,"end":637},532,541,{"name":639,"start":640,"end":549},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_supply_chain.py",2312,{"name":639,"start":642,"end":643},2329,2338,{"name":536,"start":645,"end":646},984,993,{"name":536,"start":648,"end":649},1022,1031,{"format":280,"lines":629,"tokens":404,"first":651,"others":653,"copies":289,"kind":356},{"name":517,"start":518,"end":652},523,[654,657,659,662,666],{"name":517,"start":655,"end":656},549,558,{"name":522,"start":658,"end":518},505,{"name":532,"start":660,"end":661},700,709,{"name":663,"start":664,"end":665},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_rogue_agent.py",356,365,{"name":667,"start":668,"end":669},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_tool_misuse.py",5656,5665,{"format":280,"lines":359,"tokens":671,"first":672,"others":675,"copies":343,"kind":356},253,{"name":335,"start":673,"end":674},240,291,[676],{"name":340,"start":677,"end":678},228,279,{"format":280,"lines":297,"tokens":680,"first":681,"others":685,"copies":343,"kind":356},233,{"name":682,"start":683,"end":684},"src\u002Fskillspector\u002Fnodes\u002Freport.py",691,727,[686],{"name":682,"start":687,"end":688},737,773,{"format":280,"lines":629,"tokens":441,"first":690,"others":693,"copies":307,"kind":356},{"name":631,"start":691,"end":692},142,151,[694,696,699,702],{"name":517,"start":319,"end":695},441,{"name":522,"start":697,"end":698},412,421,{"name":525,"start":700,"end":701},612,621,{"name":532,"start":703,"end":526},622,{"format":280,"lines":508,"tokens":705,"first":706,"others":709,"copies":343,"kind":356},205,{"name":525,"start":707,"end":708},362,387,[710],{"name":536,"start":711,"end":712},874,899,{"format":280,"lines":714,"tokens":715,"first":716,"others":718,"copies":343,"kind":356},44,189,{"name":335,"start":717,"end":336},610,[719],{"name":340,"start":720,"end":341},2241,{"files":309,"minified":316,"sample":722},[723],"src\u002Fskillspector\u002Fsuppression.py",{"score":266,"grade":267,"size":725,"dimensions":729},{"lines":726,"files":727,"class":728},209018,318,"L",[730,742,749],{"id":731,"source":732,"value":733,"adjusted":734,"lines":735,"halfLife":736,"formats":737,"excluded":739,"weight":309,"score":741},"duplication","jscpd",4.7,4.6,9736,8.5,[280,287,318,328,321,738],"docker",[313,740],"data",68.5,{"id":743,"source":732,"value":744,"adjusted":745,"lines":746,"halfLife":747,"weight":309,"score":748},"dead-code",20.5,20.3,42835,7.5,15.3,{"id":750,"source":732,"value":751,"adjusted":752,"lines":753,"halfLife":754,"weight":309,"score":755},"complexity",82.8,82.2,173014,50,32,{"total":757,"mean":758,"files":759},30923,97.2,[760,764,769,774,779,784,789,792,796,801],{"path":667,"complexity":761,"lines":762,"bytes":763},2052,7311,310832,{"path":765,"complexity":766,"lines":767,"bytes":768},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_python_shell_truthiness.py",833,2282,99038,{"path":770,"complexity":771,"lines":772,"bytes":773},"src\u002Fskillspector\u002Fnodes\u002Fbuild_context.py",756,3984,160446,{"path":775,"complexity":776,"lines":777,"bytes":778},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_runner.py",745,3642,151092,{"path":780,"complexity":781,"lines":782,"bytes":783},"src\u002Fskillspector\u002Fdependency_sources.py",728,2274,81930,{"path":785,"complexity":786,"lines":787,"bytes":788},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fbundled_execution_surface.py",696,2109,73922,{"path":639,"complexity":533,"lines":790,"bytes":791},4111,162320,{"path":793,"complexity":530,"lines":794,"bytes":795},"src\u002Fskillspector\u002Fartifacts.py",2430,89701,{"path":797,"complexity":798,"lines":799,"bytes":800},"tests\u002Funit\u002Ftest_patterns_new.py",655,4405,196658,{"path":802,"complexity":526,"lines":803,"bytes":804},"src\u002Fskillspector\u002Fcli.py",3537,141545,{"percentage":806,"findings":504,"files":807,"byCategory":808,"largest":818},20.48,336,[809,812,814,816],{"category":810,"count":811},"unused-file",38,{"category":813,"count":296},"unused-export",{"category":815,"count":358},"unused-symbol",{"category":817,"count":309},"unused-import",[819,820,821,822,823,824,825,828,831,834],{"category":810,"path":667,"name":394,"line":309,"lines":762},{"category":810,"path":639,"name":394,"line":309,"lines":790},{"category":810,"path":775,"name":394,"line":309,"lines":777},{"category":810,"path":340,"name":394,"line":309,"lines":342},{"category":810,"path":765,"name":394,"line":309,"lines":767},{"category":810,"path":785,"name":394,"line":309,"lines":787},{"category":810,"path":826,"name":394,"line":309,"lines":827},"src\u002Fskillspector\u002Fsecurity_reconstruction.py",1972,{"category":810,"path":829,"name":394,"line":309,"lines":830},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fmcp_tool_poisoning.py",1921,{"category":810,"path":832,"name":394,"line":309,"lines":833},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_yara.py",1573,{"category":810,"path":835,"name":394,"line":309,"lines":836},"src\u002Fskillspector\u002Fnodes\u002Fanalyzers\u002Fstatic_patterns_privilege_escalation.py",1364,{"\u002Ftrending\u002FNVIDIA\u002FSkillSpector":838},{"views":316,"visits":316},1793141473200]