[{"data":1,"prerenderedAt":904},["ShallowReactive",2],{"navigation_docs":3,"trending-repo-Graphify-Labs\u002Fgraphify":249,"page-views-\u002Ftrending\u002FGraphify-Labs\u002Fgraphify":902},[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},"Graphify-Labs\u002Fgraphify","https:\u002F\u002Fgithub.com\u002FGraphify-Labs\u002Fgraphify",[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-21",3,130530,802,"b90b9df7949bd04a15b40a1624af85d0a9cfdf04",1332,353496,1884,96237,27.22,3.48,105,60.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":337,"code":570,"health":753,"complexity":807,"deadCode":861},"2026-10-21T05:29:30.840Z","Turn any codebase, with its docs, SQL schemas, configs, and PDFs, into a queryable knowledge graph. A \u002Fgraphify skill for Claude Code, Cursor, Codex, and Gemini CLI: local deterministic AST parsing, every edge explained, no vector store.","Python","v8",2622,{"sources":259,"lines":260,"tokens":275,"clones":261,"duplicatedLines":262,"duplicatedTokens":276,"percentage":263,"percentageTokens":277},2752409,668373,24.28,[279,286,293,300,307,314,320,325,330,334],{"format":280,"sources":281,"lines":282,"clones":283,"duplicatedLines":284,"percentage":285},"python",547,226911,812,9056,3.99,{"format":287,"sources":288,"lines":289,"clones":290,"duplicatedLines":291,"percentage":292},"markdown",365,79802,544,55620,69.7,{"format":294,"sources":295,"lines":296,"clones":297,"duplicatedLines":298,"percentage":299},"bash",245,27663,406,27139,98.11,{"format":301,"sources":302,"lines":303,"clones":304,"duplicatedLines":305,"percentage":306},"text",103,4102,116,3898,95.03,{"format":308,"sources":309,"lines":310,"clones":311,"duplicatedLines":312,"percentage":313},"powershell",6,987,4,508,51.47,{"format":315,"sources":316,"lines":317,"clones":318,"duplicatedLines":316,"percentage":319},"yaml",10,679,1,1.47,{"format":321,"sources":322,"lines":323,"clones":318,"duplicatedLines":309,"percentage":324},"typescript",5,665,0.9,{"format":326,"sources":327,"lines":328,"clones":329,"duplicatedLines":329,"percentage":329},"json",7,10634,0,{"format":331,"sources":332,"lines":333,"clones":329,"duplicatedLines":329,"percentage":329},"toml",2,398,{"format":335,"sources":322,"lines":336,"clones":329,"duplicatedLines":329,"percentage":329},"php",161,[338,379,416,442,466,490,503,525,545,558],{"format":294,"lines":339,"tokens":340,"first":341,"others":345,"copies":365,"excerpt":366,"kind":378},698,3352,{"name":342,"start":343,"end":344},"graphify\u002Fskill-agents.md",68,765,[346,348,351,353,355,357,359,362],{"name":347,"start":343,"end":344},"graphify\u002Fskill-amp.md",{"name":349,"start":343,"end":350},"graphify\u002Fskill-claw.md",768,{"name":352,"start":343,"end":350},"graphify\u002Fskill-copilot.md",{"name":354,"start":343,"end":344},"graphify\u002Fskill-droid.md",{"name":356,"start":343,"end":350},"graphify\u002Fskill-kilo.md",{"name":358,"start":343,"end":350},"graphify\u002Fskill-kiro.md",{"name":360,"start":343,"end":361},"graphify\u002Fskill-pi.md",762,{"name":363,"start":343,"end":364},"graphify\u002Fskill-trae.md",766,20,{"lines":367,"total":339},[368,369,370,371,372,373,374,375,376,377],"# Detect the correct Python interpreter (handles uv tool, pipx, venv, system installs)","PYTHON=\"\"","GRAPHIFY_BIN=$(which graphify 2>\u002Fdev\u002Fnull)","# 1. uv tool installs — most reliable on modern Mac\u002FLinux","if [ -z \"$PYTHON\" ] && command -v uv >\u002Fdev\u002Fnull 2>&1; then","    _UV_PY=$(uv tool run --from graphifyy python -c \"import sys; print(sys.executable)\" 2>\u002Fdev\u002Fnull)","    if [ -n \"$_UV_PY\" ]; then PYTHON=\"$_UV_PY\"; fi","fi","# 2. Read shebang from graphify binary (pipx and direct pip installs)","if [ -z \"$PYTHON\" ] && [ -n \"$GRAPHIFY_BIN\" ]; then","docs",{"format":294,"lines":380,"tokens":381,"first":382,"others":386,"copies":403,"excerpt":404,"kind":378},303,1467,{"name":383,"start":384,"end":385},"graphify\u002Fskills\u002Fagents\u002Freferences\u002Fquery.md",14,316,[387,389,391,393,395,397,399,401],{"name":388,"start":384,"end":385},"graphify\u002Fskills\u002Famp\u002Freferences\u002Fquery.md",{"name":390,"start":384,"end":385},"graphify\u002Fskills\u002Fclaude\u002Freferences\u002Fquery.md",{"name":392,"start":384,"end":385},"graphify\u002Fskills\u002Fclaw\u002Freferences\u002Fquery.md",{"name":394,"start":384,"end":385},"graphify\u002Fskills\u002Fcodex\u002Freferences\u002Fquery.md",{"name":396,"start":384,"end":385},"graphify\u002Fskills\u002Fcopilot\u002Freferences\u002Fquery.md",{"name":398,"start":384,"end":385},"graphify\u002Fskills\u002Fdroid\u002Freferences\u002Fquery.md",{"name":400,"start":384,"end":385},"graphify\u002Fskills\u002Fkilo\u002Freferences\u002Fquery.md",{"name":402,"start":384,"end":385},"graphify\u002Fskills\u002Fkiro\u002Freferences\u002Fquery.md",29,{"lines":405,"total":380},[406,407,408,409,410,411,412,413,414,415],"$(cat graphify-out\u002F.graphify_python) -c \"","from pathlib import Path","if not Path('graphify-out\u002Fgraph.json').exists():","    print('ERROR: No graph found. Run \u002Fgraphify \u003Cpath> first to build the graph.')","    raise SystemExit(1)","\"","```","If it fails, stop and tell the user to run `\u002Fgraphify \u003Cpath>` first.","","### Step 0 — Constrained query expansion (REQUIRED before traversal)",{"format":287,"lines":417,"tokens":418,"first":419,"others":421,"copies":433,"excerpt":434,"kind":378},265,2079,{"name":342,"start":309,"end":420},270,[422,423,425,426,427,428,430,431],{"name":349,"start":309,"end":420},{"name":424,"start":309,"end":420},"graphify\u002Fskill-codex.md",{"name":352,"start":309,"end":420},{"name":356,"start":309,"end":420},{"name":358,"start":309,"end":420},{"name":429,"start":309,"end":420},"graphify\u002Fskill-opencode.md",{"name":360,"start":309,"end":420},{"name":432,"start":309,"end":420},"graphify\u002Fskill-vscode.md",19,{"lines":435,"total":417},[436,414,437,414,438,414,412,439,440,441],"# \u002Fgraphify","Turn any folder of files into a navigable knowledge graph with community detection, an honest audit trail, and three outputs: interactive HTML, GraphRAG-ready …","## Usage","\u002Fgraphify                                             # full pipeline on current directory (HTML viz; add --obsidian for a vault)","\u002Fgraphify \u003Cpath>                                      # full pipeline on specific path","\u002Fgraphify https:\u002F\u002Fgithub.com\u002F\u003Cowner>\u002F\u003Crepo>           # clone repo then run full pipeline on it",{"format":301,"lines":443,"tokens":444,"first":445,"others":448,"copies":465,"kind":378},80,1772,{"name":446,"start":309,"end":447},"graphify\u002Fskills\u002Fagents\u002Freferences\u002Fextraction-spec.md",85,[449,451,453,455,457,459,461,463],{"name":450,"start":309,"end":447},"graphify\u002Fskills\u002Famp\u002Freferences\u002Fextraction-spec.md",{"name":452,"start":309,"end":447},"graphify\u002Fskills\u002Fclaude\u002Freferences\u002Fextraction-spec.md",{"name":454,"start":309,"end":447},"graphify\u002Fskills\u002Fcopilot\u002Freferences\u002Fextraction-spec.md",{"name":456,"start":309,"end":447},"graphify\u002Fskills\u002Fdroid\u002Freferences\u002Fextraction-spec.md",{"name":458,"start":309,"end":447},"graphify\u002Fskills\u002Fkilo\u002Freferences\u002Fextraction-spec.md",{"name":460,"start":309,"end":447},"graphify\u002Fskills\u002Fopencode\u002Freferences\u002Fextraction-spec.md",{"name":462,"start":309,"end":447},"graphify\u002Fskills\u002Ftrae\u002Freferences\u002Fextraction-spec.md",{"name":464,"start":309,"end":447},"graphify\u002Fskills\u002Fvscode\u002Freferences\u002Fextraction-spec.md",21,{"format":294,"lines":467,"tokens":468,"first":469,"others":473,"copies":403,"kind":378},204,1214,{"name":470,"start":471,"end":472},"graphify\u002Fskills\u002Fagents\u002Freferences\u002Fupdate.md",15,218,[474,476,478,480,482,484,486,488],{"name":475,"start":471,"end":472},"graphify\u002Fskills\u002Famp\u002Freferences\u002Fupdate.md",{"name":477,"start":471,"end":472},"graphify\u002Fskills\u002Fclaude\u002Freferences\u002Fupdate.md",{"name":479,"start":471,"end":472},"graphify\u002Fskills\u002Fclaw\u002Freferences\u002Fupdate.md",{"name":481,"start":471,"end":472},"graphify\u002Fskills\u002Fcodex\u002Freferences\u002Fupdate.md",{"name":483,"start":471,"end":472},"graphify\u002Fskills\u002Fcopilot\u002Freferences\u002Fupdate.md",{"name":485,"start":471,"end":472},"graphify\u002Fskills\u002Fdroid\u002Freferences\u002Fupdate.md",{"name":487,"start":471,"end":472},"graphify\u002Fskills\u002Fkilo\u002Freferences\u002Fupdate.md",{"name":489,"start":471,"end":472},"graphify\u002Fskills\u002Fkiro\u002Freferences\u002Fupdate.md",{"format":287,"lines":491,"tokens":492,"first":493,"others":494,"copies":403,"kind":378},313,1149,{"name":383,"start":318,"end":491},[495,496,497,498,499,500,501,502],{"name":388,"start":318,"end":491},{"name":390,"start":318,"end":491},{"name":392,"start":318,"end":491},{"name":394,"start":318,"end":491},{"name":396,"start":318,"end":491},{"name":398,"start":318,"end":491},{"name":400,"start":318,"end":491},{"name":402,"start":318,"end":491},{"format":287,"lines":504,"tokens":505,"first":506,"others":508,"copies":403,"kind":378},91,947,{"name":507,"start":318,"end":504},"graphify\u002Fskills\u002Fagents\u002Freferences\u002Fexports.md",[509,511,513,515,517,519,521,523],{"name":510,"start":318,"end":504},"graphify\u002Fskills\u002Famp\u002Freferences\u002Fexports.md",{"name":512,"start":318,"end":504},"graphify\u002Fskills\u002Fclaude\u002Freferences\u002Fexports.md",{"name":514,"start":318,"end":504},"graphify\u002Fskills\u002Fclaw\u002Freferences\u002Fexports.md",{"name":516,"start":318,"end":504},"graphify\u002Fskills\u002Fcodex\u002Freferences\u002Fexports.md",{"name":518,"start":318,"end":504},"graphify\u002Fskills\u002Fcopilot\u002Freferences\u002Fexports.md",{"name":520,"start":318,"end":504},"graphify\u002Fskills\u002Fdroid\u002Freferences\u002Fexports.md",{"name":522,"start":318,"end":504},"graphify\u002Fskills\u002Fkilo\u002Freferences\u002Fexports.md",{"name":524,"start":318,"end":504},"graphify\u002Fskills\u002Fkiro\u002Freferences\u002Fexports.md",{"format":287,"lines":526,"tokens":527,"first":528,"others":531,"copies":544,"kind":378},526,2135,{"name":349,"start":529,"end":530},268,793,[532,533,534,536,538,540,542],{"name":352,"start":529,"end":530},{"name":358,"start":529,"end":530},{"name":535,"start":529,"end":530},"graphify\u002Fskill.md",{"name":537,"start":529,"end":530},"tools\u002Fskillgen\u002Fexpected\u002Fgraphify__skill-claw.md",{"name":539,"start":529,"end":530},"tools\u002Fskillgen\u002Fexpected\u002Fgraphify__skill-copilot.md",{"name":541,"start":529,"end":530},"tools\u002Fskillgen\u002Fexpected\u002Fgraphify__skill-kiro.md",{"name":543,"start":529,"end":530},"tools\u002Fskillgen\u002Fexpected\u002Fgraphify__skill.md",8,{"format":287,"lines":546,"tokens":547,"first":548,"others":549,"copies":403,"kind":378},221,523,{"name":470,"start":318,"end":546},[550,551,552,553,554,555,556,557],{"name":475,"start":318,"end":546},{"name":477,"start":318,"end":546},{"name":479,"start":318,"end":546},{"name":481,"start":318,"end":546},{"name":483,"start":318,"end":546},{"name":485,"start":318,"end":546},{"name":487,"start":318,"end":546},{"name":489,"start":318,"end":546},{"format":294,"lines":559,"tokens":560,"first":561,"others":565,"copies":255,"kind":378},1356,6690,{"name":562,"start":563,"end":564},"graphify\u002Fskill-devin.md",97,1452,[566,568],{"name":567,"start":563,"end":564},"tools\u002Fskillgen\u002Fexpected\u002Fgraphify__skill-devin.md",{"name":569,"start":563,"end":564},"tools\u002Fskillgen\u002Ffragments\u002Fcore\u002Fdevin.md",{"sources":265,"lines":571,"tokens":572,"clones":573,"duplicatedLines":574,"duplicatedTokens":575,"percentage":264,"percentageTokens":576,"formats":577,"topClones":583,"generated":751},91005,579608,264,3163,21476,3.71,[578,581],{"format":280,"sources":579,"lines":580,"clones":573,"duplicatedLines":574,"percentage":264},104,90815,{"format":321,"sources":318,"lines":582,"clones":329,"duplicatedLines":329,"percentage":329},190,[584,632,655,680,689,699,717,725,736,744],{"format":280,"lines":585,"tokens":586,"first":587,"others":591,"copies":619,"excerpt":620,"kind":631},12,84,{"name":588,"start":589,"end":590},"graphify\u002Fextractors\u002Fbash.py",114,125,[592,596,598,601,605,608,612,616],{"name":593,"start":594,"end":595},"graphify\u002Fextractors\u002Fdm.py",25,36,{"name":597,"start":594,"end":595},"graphify\u002Fextractors\u002Felixir.py",{"name":599,"start":600,"end":403},"graphify\u002Fextractors\u002Fjulia.py",18,{"name":602,"start":603,"end":604},"graphify\u002Fextractors\u002Focaml.py",28,39,{"name":606,"start":365,"end":607},"graphify\u002Fextractors\u002Fpowershell.py",31,{"name":609,"start":610,"end":611},"graphify\u002Fextractors\u002Frust.py",243,254,{"name":613,"start":614,"end":615},"graphify\u002Fextractors\u002Fverilog.py",216,227,{"name":617,"start":403,"end":618},"graphify\u002Fextractors\u002Fzig.py",40,9,{"lines":621,"total":585},[622,623,624,625,626,627,628,414,629,630],"    language = Language(tsbash.language())","    parser = Parser(language)","    source = _read_source_bytes(path)","    tree = parser.parse(source)","    root = tree.root_node","except Exception as e:","    return {\"nodes\": [], \"edges\": [], \"error\": str(e)}","stem = _file_stem(path)","str_path = str(path)","code",{"format":280,"lines":618,"tokens":633,"first":634,"others":638,"copies":332,"excerpt":643,"kind":631},344,{"name":635,"start":636,"end":637},"graphify\u002Fanalyze.py",515,554,[639],{"name":640,"start":641,"end":642},"worked\u002Fmixed-corpus\u002Fraw\u002Fanalyze.py",349,388,{"lines":644,"total":618},[645,646,647,648,649,650,651,652,653,654],"betweenness = nx.betweenness_centrality(G, k=k, seed=42)","# Top bridge nodes that are NOT file-level hubs","bridges = sorted(","    [(n, s) for n, s in betweenness.items()","     if not _is_file_node(G, n) and not _is_concept_node(G, n) and s > 0],","    key=lambda x: x[1],","    reverse=True,",")[:3]","for node_id, score in bridges:","    label = G.nodes[node_id].get(\"label\", node_id)",{"format":280,"lines":544,"tokens":343,"first":656,"others":658,"copies":309,"excerpt":671,"excerptSecond":677,"kind":631},{"name":593,"start":607,"end":657},38,[659,660,662,665,668],{"name":597,"start":607,"end":657},{"name":599,"start":661,"end":607},24,{"name":606,"start":663,"end":664},26,33,{"name":609,"start":666,"end":667},249,256,{"name":617,"start":669,"end":670},35,42,{"lines":672,"total":544},[628,414,629,630,673,674,675,676],"nodes: list[dict] = []","edges: list[dict] = []","seen_ids: set[str] = set()","function_bodies: list[tuple[str, Any, \"str | None\"]] = []",{"lines":678,"total":544},[628,414,629,630,673,674,675,679],"function_bodies: list[tuple[str, Any]] = []",{"format":280,"lines":681,"tokens":682,"first":683,"others":686,"copies":332,"kind":631},56,330,{"name":635,"start":684,"end":685},144,199,[687],{"name":640,"start":688,"end":265},50,{"format":280,"lines":690,"tokens":691,"first":692,"others":695,"copies":332,"kind":631},43,309,{"name":693,"start":664,"end":694},"graphify\u002Fextractors\u002Fpascal_forms.py",75,[696],{"name":693,"start":697,"end":698},132,174,{"format":280,"lines":327,"tokens":700,"first":701,"others":703,"copies":309,"kind":631},59,{"name":593,"start":607,"end":702},37,[704,706,709,712,714],{"name":705,"start":504,"end":563},"graphify\u002Fextractors\u002Ffortran.py",{"name":707,"start":304,"end":708},"graphify\u002Fextractors\u002Fjson_config.py",122,{"name":710,"start":711,"end":589},"graphify\u002Fextractors\u002Fobjc.py",108,{"name":602,"start":713,"end":618},34,{"name":613,"start":715,"end":716},222,228,{"format":280,"lines":604,"tokens":718,"first":719,"others":722,"copies":332,"kind":631},273,{"name":635,"start":720,"end":721},446,484,[723],{"name":640,"start":724,"end":682},292,{"format":280,"lines":663,"tokens":726,"first":727,"others":729,"copies":255,"kind":631},135,{"name":705,"start":302,"end":728},128,[730,734],{"name":731,"start":732,"end":733},"graphify\u002Fextractors\u002Fgo.py",244,269,{"name":609,"start":735,"end":385},291,{"format":280,"lines":594,"tokens":611,"first":737,"others":740,"copies":332,"kind":631},{"name":635,"start":738,"end":739},314,338,[741],{"name":640,"start":742,"end":743},171,195,{"format":280,"lines":604,"tokens":745,"first":746,"others":749,"copies":332,"kind":631},251,{"name":635,"start":747,"end":748},364,402,[750],{"name":640,"start":614,"end":611},{"files":329,"minified":329,"sample":752},[],{"score":266,"grade":267,"size":754,"dimensions":758},{"lines":755,"files":756,"class":757},229176,593,"L",[759,793,801],{"id":760,"source":761,"value":311,"adjusted":311,"lines":762,"halfLife":763,"formats":764,"excluded":789,"weight":318,"score":792},"duplication","jscpd",9062,8.5,[280,321,335,765,766,767,768,769,770,771,772,773,774,308,775,776,777,778,779,780,781,782,783,784,785,786,787,788],"pascal","sql","csharp","rust","swift","groovy","cpp","fortran","lisp","apex","go","objectivec","java","kotlin","c","zig","julia","robotframework","ruby","elixir","scala","docker","tsx","javascript",[790,301,791],"markup","data",72.5,{"id":794,"source":761,"value":795,"adjusted":795,"lines":796,"halfLife":797,"coverage":798,"weight":799,"score":800},"dead-code",3.1,7168,7.5,99.3,0.993,74.8,{"id":802,"source":761,"value":803,"adjusted":804,"lines":805,"halfLife":688,"weight":318,"score":806},"complexity",64.3,64,147474,41.2,{"total":808,"mean":809,"files":810},31661,53.4,[811,816,821,826,831,836,841,846,851,856],{"path":812,"complexity":813,"lines":814,"bytes":815},"graphify\u002Fextractors\u002Fengine.py",2989,10367,544863,{"path":817,"complexity":818,"lines":819,"bytes":820},"graphify\u002Fextractors\u002Fresolution.py",1176,4306,189515,{"path":822,"complexity":823,"lines":824,"bytes":825},"graphify\u002Fcli.py",991,5393,265442,{"path":827,"complexity":828,"lines":829,"bytes":830},"graphify\u002Fllm.py",739,3855,178836,{"path":832,"complexity":833,"lines":834,"bytes":835},"graphify\u002Fserve.py",701,3089,146860,{"path":837,"complexity":838,"lines":839,"bytes":840},"tests\u002Ftest_extract.py",573,6275,273255,{"path":842,"complexity":843,"lines":844,"bytes":845},"tests\u002Ftest_detect.py",486,4595,196904,{"path":847,"complexity":848,"lines":849,"bytes":850},"graphify\u002Fcallflow_html.py",474,2051,83274,{"path":852,"complexity":853,"lines":854,"bytes":855},"tests\u002Ftest_watch.py",461,5594,224153,{"path":857,"complexity":858,"lines":859,"bytes":860},"graphify\u002Fwatch.py",437,2862,133633,{"percentage":862,"findings":336,"files":863,"byCategory":864,"largest":875},3.15,566,[865,867,869,872],{"category":866,"count":585},"unused-file",{"category":868,"count":332},"unused-export",{"category":870,"count":871},"unused-symbol",16,{"category":873,"count":874},"unused-import",131,[876,878,881,884,886,888,891,893,895,899],{"category":866,"path":640,"name":414,"line":318,"lines":877},517,{"category":866,"path":879,"name":414,"line":318,"lines":880},"graphify\u002Fscip_ingest.py",363,{"category":866,"path":882,"name":414,"line":318,"lines":883},"graphify\u002Fmultigraph_compat.py",212,{"category":866,"path":885,"name":414,"line":318,"lines":336},"worked\u002Fhttpx\u002Fraw\u002Fclient.py",{"category":866,"path":887,"name":414,"line":318,"lines":726},"worked\u002Fhttpx\u002Fraw\u002Ftransport.py",{"category":866,"path":889,"name":414,"line":318,"lines":890},"worked\u002Fhttpx\u002Fraw\u002Fmodels.py",120,{"category":866,"path":892,"name":414,"line":318,"lines":589},"worked\u002Fhttpx\u002Fraw\u002Fauth.py",{"category":866,"path":894,"name":414,"line":318,"lines":579},"worked\u002Fmixed-corpus\u002Fraw\u002Fcluster.py",{"category":873,"path":896,"name":897,"line":669,"lines":898},"graphify\u002F__main__.py","_agents_platform_install",94,{"category":873,"path":896,"name":900,"line":595,"lines":901},"_agents_platform_uninstall",93,{"\u002Ftrending\u002FGraphify-Labs\u002Fgraphify":903},{"views":329,"visits":329},1792566395904]