[{"data":1,"prerenderedAt":4040},["ShallowReactive",2],{"navigation_docs":3,"trending-day-2026-11-12":249,"page-views-\u002Ftrending\u002F2026-11-12":4037,"trending-week-null":4039},[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",{"date":250,"generatedAt":251,"source":252,"jscpdVersion":253,"summary":254,"repos":335},"2026-11-12","2026-11-12T05:21:45.783Z","github-trending-daily","5.4.3",{"repos":255,"sources":256,"lines":257,"tokens":258,"clones":259,"duplicatedLines":260,"duplicatedTokens":261,"percentage":262,"percentageTokens":263,"avgPercentage":264,"medianPercentage":265,"mostDuplicated":266,"cleanest":270,"mostClones":274,"codeRepos":255,"codeSources":275,"codeLines":276,"codeClones":277,"codeDuplicatedLines":278,"codePercentage":279,"codeMedianPercentage":280,"codeMostDuplicated":281,"codeCleanest":284,"generatedFiles":287,"avgHealth":288,"healthiest":289,"leastHealthy":293,"languages":296},8,16481,3721553,24004853,15675,239724,1647343,6.44,6.86,6.37,6.3,{"name":267,"clones":268,"percentage":269},"GoogleChrome\u002Fmodern-web-guidance-src",3612,14.1,{"name":271,"clones":272,"percentage":273},"openai\u002Fcodex-security",1024,1.84,{"name":267,"clones":268,"percentage":269},5515,1442669,4362,62570,4.34,5.13,{"name":267,"clones":282,"percentage":283},1007,9.43,{"name":271,"clones":285,"percentage":286},44,0.55,13,53.5,{"name":290,"score":291,"grade":292},"TheAlgorithms\u002FJava",70.2,"B",{"name":267,"score":294,"grade":295},12.7,"E",[297,304,310,317,323,329],{"language":298,"repos":299,"clones":300,"lines":301,"duplicatedLines":302,"percentage":303},"Python",2,5455,1391700,90272,6.49,{"language":305,"repos":299,"clones":306,"lines":307,"duplicatedLines":308,"percentage":309},"TypeScript",4636,1062324,75198,7.08,{"language":311,"repos":312,"clones":313,"lines":314,"duplicatedLines":315,"percentage":316},"Ruby",1,3255,890969,49217,5.52,{"language":318,"repos":312,"clones":319,"lines":320,"duplicatedLines":321,"percentage":322},"Java",1191,154791,11595,7.49,{"language":324,"repos":312,"clones":325,"lines":326,"duplicatedLines":327,"percentage":328},"Rust",1074,194580,12706,6.53,{"language":330,"repos":312,"clones":331,"lines":332,"duplicatedLines":333,"percentage":334},"JavaScript",64,27189,736,2.71,[336,964,1467,1797,2394,2945,3340,3773],{"name":337,"url":338,"description":339,"language":298,"stars":340,"starsToday":341,"defaultBranch":342,"headSha":343,"durationMs":344,"total":345,"formats":354,"topClones":420,"code":684,"health":837,"complexity":872,"deadCode":923},"ZhuLinsen\u002Fdaily_stock_analysis","https:\u002F\u002Fgithub.com\u002FZhuLinsen\u002Fdaily_stock_analysis","LLM 驱动的多市场股票智能分析系统：多源行情、实时新闻、决策看板与自动推送，支持零成本定时运行。  LLM-powered multi-market stock analysis system with multi-source market data, real-time news, decision dashboard, automated notifications, and cost-free scheduled runs.",70535,278,"main","ef44660f00e08ce66dcd4dc4d2e700836c45e833",3454,{"sources":346,"lines":347,"tokens":348,"clones":349,"duplicatedLines":350,"duplicatedTokens":351,"percentage":352,"percentageTokens":353},1170,499900,2979556,2310,30347,168548,6.07,5.66,[355,362,369,376,383,390,396,401,407,413],{"format":356,"sources":357,"lines":358,"clones":359,"duplicatedLines":360,"percentage":361},"python",652,363073,1734,22153,6.1,{"format":363,"sources":364,"lines":365,"clones":366,"duplicatedLines":367,"percentage":368},"tsx",170,63385,425,5813,9.17,{"format":370,"sources":371,"lines":372,"clones":373,"duplicatedLines":374,"percentage":375},"typescript",134,29120,39,439,1.51,{"format":377,"sources":378,"lines":379,"clones":380,"duplicatedLines":381,"percentage":382},"json",15,10058,35,1057,10.51,{"format":384,"sources":385,"lines":386,"clones":387,"duplicatedLines":388,"percentage":389},"javascript",7,4265,27,306,7.17,{"format":391,"sources":312,"lines":392,"clones":393,"duplicatedLines":394,"percentage":395},"css",2924,16,168,5.75,{"format":397,"sources":285,"lines":398,"clones":287,"duplicatedLines":399,"percentage":400},"yaml",3922,208,5.3,{"format":402,"sources":403,"lines":404,"clones":255,"duplicatedLines":405,"percentage":406},"markdown",77,19121,83,0.43,{"format":408,"sources":409,"lines":410,"clones":385,"duplicatedLines":411,"percentage":412},"bash",26,1825,67,3.67,{"format":414,"sources":415,"lines":416,"clones":417,"duplicatedLines":418,"percentage":419},"text",18,509,3,25,4.91,[421,444,491,541,576,587,598,609,642,667],{"format":402,"lines":422,"tokens":423,"copies":417,"first":424,"others":427,"excerpt":432},11,382,{"name":425,"start":426,"end":378},"README.md",5,[428,430],{"name":429,"start":426,"end":378},"docs\u002FREADME_CHT.md",{"name":431,"start":426,"end":378},"docs\u002FREADME_EN.md",{"lines":433,"total":422},[434,435,436,437,438,439,440,441,442,443],"[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002FZhuLinsen\u002Fdaily_stock_analysis?style=social)](https:\u002F\u002Fgithub.com\u002FZhuLinsen\u002Fdaily_stock_analysis\u002Fstargazers)","[![arXiv](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FarXiv-2608.26990-b31b1b.svg)](https:\u002F\u002Farxiv.org\u002Fabs\u002F2608.26990)","[![CI](https:\u002F\u002Fgithub.com\u002FZhuLinsen\u002Fdaily_stock_analysis\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FZhuLinsen\u002Fdaily_stock_analysis\u002Factions\u002Fworkflo…","[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT-yellow.svg)](https:\u002F\u002Fopensource.org\u002Flicenses\u002FMIT)","[![Python 3.10+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.10+-blue.svg)](https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F)","[![GitHub Actions](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGitHub%20Actions-Ready-2088FF?logo=github-actions&logoColor=white)](https:\u002F\u002Fgithub.com\u002Ffeatures\u002Factions)","[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-Ready-2496ED?logo=docker&logoColor=white)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fzhulinsen\u002Fdaily_stock_analysis)","","\u003Cp align=\"center\">","  \u003Cimg src=\"https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Ftrendshift\u002Frepositories\u002F18527\u002Fdaily?language=Python\" alt=\"#1 Python Repository Of The Day | Trendshift\" width=\"250\"…",{"format":356,"lines":255,"tokens":445,"copies":446,"first":447,"others":451,"excerpt":477,"excerptSecond":487},62,12,{"name":448,"start":449,"end":450},"tests\u002Ftest_portfolio_pr2.py",342,349,[452,455,458,461,464,467,471,474],{"name":448,"start":453,"end":454},518,525,{"name":448,"start":456,"end":457},544,551,{"name":448,"start":459,"end":460},581,588,{"name":448,"start":462,"end":463},648,655,{"name":448,"start":465,"end":466},674,681,{"name":468,"start":469,"end":470},"tests\u002Ftest_portfolio_service.py",422,430,{"name":468,"start":472,"end":473},764,771,{"name":468,"start":475,"end":476},863,871,{"lines":478,"total":255},[479,480,481,482,483,484,485,486],"def test_risk_threshold_boundary(self) -> None:","    account = self.service.create_account(name=\"Main\", broker=\"Demo\", market=\"cn\", base_currency=\"CNY\")","    aid = account[\"id\"]","    self.service.record_cash_ledger(","        account_id=aid,","        event_date=date(2026, 1, 1),","        direction=\"in\",","        amount=20000,",{"lines":488,"total":255},[489,480,481,482,483,484,485,490],"def test_sector_concentration_cn_board_mapping(self, _mock_fetch) -> None:","        amount=10000.0,",{"format":356,"lines":492,"tokens":493,"copies":494,"first":495,"others":499,"excerpt":524,"excerptSecond":536},10,51,14,{"name":496,"start":497,"end":498},"tests\u002Ftest_notification.py",1063,1072,[500,503,506,509,512,515,518,521],{"name":496,"start":501,"end":502},1099,1110,{"name":496,"start":504,"end":505},1133,1144,{"name":496,"start":507,"end":508},1321,1330,{"name":496,"start":510,"end":511},1393,1402,{"name":496,"start":513,"end":514},1411,1420,{"name":496,"start":516,"end":517},1566,1575,{"name":496,"start":519,"end":520},1596,1607,{"name":496,"start":522,"end":523},1715,1726,{"lines":525,"total":492},[526,527,528,529,530,531,532,533,534,535],"def test_generate_brief_report_shows_model_by_default(self, mock_get_config: mock.MagicMock):","    mock_get_config.return_value = _make_config(report_renderer_enabled=False)","    service = NotificationService()","    result = AnalysisResult(","        code=\"600519\",","        name=\"贵州茅台\",","        sentiment_score=72,","        trend_prediction=\"看多\",","        operation_advice=\"持有\",","        analysis_summary=\"稳健\",",{"lines":537,"total":446},[538,539,540,527,528,529,530,531,532,533],"def test_generate_dashboard_report_shows_phase_decision_in_default_renderer(","    self, mock_get_config: mock.MagicMock","):",{"format":356,"lines":393,"tokens":542,"copies":492,"first":543,"others":547},70,{"name":544,"start":545,"end":546},"tests\u002Ftest_agent_memory_decision_review.py",30,45,[548,551,555,559,563,566,570,573],{"name":549,"start":387,"end":550},"tests\u002Ftest_decision_signal_extractor.py",42,{"name":552,"start":553,"end":554},"tests\u002Ftest_decision_signal_outcome_service.py",21,36,{"name":556,"start":557,"end":558},"tests\u002Ftest_decision_signal_repo.py",22,37,{"name":560,"start":561,"end":562},"tests\u002Ftest_decision_signal_review_memory.py",41,56,{"name":564,"start":565,"end":445},"tests\u002Ftest_decision_signal_service.py",47,{"name":567,"start":568,"end":569},"tests\u002Ftest_skill_opinion_outcome_stats.py",34,49,{"name":571,"start":380,"end":572},"tests\u002Ftest_skill_opinion_outcomes.py",50,{"name":574,"start":558,"end":575},"tests\u002Ftest_skill_opinion_samples.py",52,{"format":356,"lines":577,"tokens":578,"copies":299,"first":579,"others":583},97,601,{"name":580,"start":581,"end":582},"data_provider\u002Fakshare_fetcher.py",2090,2186,[584],{"name":585,"start":381,"end":586},"data_provider\u002Fefinance_fetcher.py",1152,{"format":356,"lines":588,"tokens":589,"copies":299,"first":590,"others":593},94,568,{"name":580,"start":591,"end":592},2092,2185,[594],{"name":595,"start":596,"end":597},"data_provider\u002Ftushare_fetcher.py",957,1050,{"format":356,"lines":599,"tokens":600,"copies":299,"first":601,"others":605},93,560,{"name":602,"start":603,"end":604},"src\u002Fagent\u002Fexecutor.py",73,165,[606],{"name":602,"start":607,"end":608},232,324,{"format":356,"lines":255,"tokens":610,"copies":611,"first":612,"others":616},65,9,{"name":613,"start":614,"end":615},"tests\u002Ftest_system_config_api.py",914,921,[617,621,624,627,630,633,636,639],{"name":618,"start":619,"end":620},"tests\u002Ftest_system_config_service.py",2463,2470,{"name":618,"start":622,"end":623},2477,2484,{"name":618,"start":625,"end":626},2498,2505,{"name":618,"start":628,"end":629},2533,2540,{"name":618,"start":631,"end":632},2547,2554,{"name":618,"start":634,"end":635},3075,3082,{"name":618,"start":637,"end":638},3150,3157,{"name":618,"start":640,"end":641},3165,3172,{"format":384,"lines":643,"tokens":644,"copies":385,"first":645,"others":649},6,84,{"name":646,"start":647,"end":648},"apps\u002Fdsa-desktop\u002Ftests\u002Fmain.test.js",375,380,[650,653,656,658,661,664],{"name":646,"start":651,"end":652},389,394,{"name":646,"start":654,"end":655},403,408,{"name":646,"start":657,"end":469},417,{"name":646,"start":659,"end":660},431,436,{"name":646,"start":662,"end":663},447,452,{"name":646,"start":665,"end":666},467,472,{"format":356,"lines":409,"tokens":668,"copies":669,"first":670,"others":674},139,4,{"name":671,"start":672,"end":673},"tests\u002Ftest_agent_pipeline.py",1694,1719,[675,678,681],{"name":671,"start":676,"end":677},1986,2011,{"name":671,"start":679,"end":680},2134,2159,{"name":671,"start":682,"end":683},2378,2403,{"sources":685,"lines":686,"tokens":687,"clones":688,"duplicatedLines":689,"duplicatedTokens":690,"percentage":691,"percentageTokens":692,"formats":693,"topClones":718,"generated":835},539,240958,1328045,326,4712,27211,1.96,2.05,[694,700,705,710,713,715],{"format":356,"sources":695,"lines":696,"clones":697,"duplicatedLines":698,"percentage":699},340,191106,296,4403,2.3,{"format":363,"sources":701,"lines":702,"clones":415,"duplicatedLines":703,"percentage":704},102,31659,176,0.56,{"format":370,"sources":706,"lines":707,"clones":422,"duplicatedLines":708,"percentage":709},82,14176,125,0.88,{"format":384,"sources":426,"lines":711,"clones":312,"duplicatedLines":255,"percentage":712},2433,0.33,{"format":408,"sources":643,"lines":325,"clones":714,"duplicatedLines":714,"percentage":714},0,{"format":716,"sources":669,"lines":717,"clones":714,"duplicatedLines":714,"percentage":714},"powershell",510,[719,739,746,759,771,783,794,804,814,825],{"format":356,"lines":577,"tokens":578,"copies":299,"first":720,"others":721,"excerpt":723,"excerptSecond":733},{"name":580,"start":581,"end":582},[722],{"name":585,"start":381,"end":586},{"lines":724,"total":577},[725,726,727,441,728,441,729,730,731,732],"            \"api=ak.stock_zh_a_spot action=failed error=%s\",","            e,","        )","    return None","def _calc_market_stats(","    self,","    df: pd.DataFrame,","    ) -> Optional[Dict[str, Any]]:",{"lines":734,"total":738},[735,726,727,736,441,729,730,731,732,737],"            \"api=ef.stock.get_realtime_quotes action=failed error=%s\",","        return None","    \"\"\"从行情 DataFrame 计算涨跌统计。\"\"\"",96,{"format":356,"lines":588,"tokens":589,"copies":299,"first":740,"others":741,"excerpt":743},{"name":580,"start":591,"end":592},[742],{"name":595,"start":596,"end":597},{"lines":744,"total":588},[727,441,728,441,729,730,731,732,737,745],"    import numpy as np",{"format":356,"lines":599,"tokens":600,"copies":299,"first":747,"others":748,"excerpt":750},{"name":602,"start":603,"end":604},[749],{"name":602,"start":607,"end":608},{"lines":751,"total":599},[752,441,753,441,754,755,756,441,757,758],"{market_guidelines}","## 工作流程（必须严格按阶段顺序执行，每阶段等工具结果返回后再进入下一阶段）","**第一阶段 · 行情与K线**（首先执行）","- `get_realtime_quote` 获取实时行情","- `get_daily_history` 获取历史K线","**第二阶段 · 技术与筹码**（等第一阶段结果返回后执行）","- `analyze_trend` 获取技术指标",{"format":356,"lines":415,"tokens":760,"copies":417,"first":761,"others":763},186,{"name":602,"start":399,"end":762},225,[764,768],{"name":765,"start":766,"end":767},"src\u002Fanalyzer.py",2131,2148,{"name":765,"start":769,"end":770},2317,2334,{"format":356,"lines":772,"tokens":773,"copies":299,"first":774,"others":778},43,335,{"name":775,"start":776,"end":777},"src\u002Fservices\u002Fscreening\u002Fdaily.py",400,442,[779],{"name":780,"start":781,"end":782},"src\u002Fservices\u002Fscreening\u002Fsnapshot.py",177,219,{"format":356,"lines":784,"tokens":341,"copies":299,"first":785,"others":789},59,{"name":786,"start":787,"end":788},"src\u002Fnotification.py",1358,1416,[790],{"name":791,"start":792,"end":793},"src\u002Fservices\u002Fhistory_service.py",1171,1230,{"format":356,"lines":575,"tokens":795,"copies":299,"first":796,"others":800},262,{"name":797,"start":798,"end":799},"data_provider\u002Fbase.py",2049,2100,[801],{"name":797,"start":802,"end":803},2128,2181,{"format":356,"lines":572,"tokens":805,"copies":299,"first":806,"others":810},255,{"name":807,"start":808,"end":809},"src\u002Frepositories\u002Fportfolio_repo.py",875,924,[811],{"name":807,"start":812,"end":813},1060,1109,{"format":356,"lines":815,"tokens":816,"copies":299,"first":817,"others":821},20,230,{"name":818,"start":819,"end":820},"src\u002Fservices\u002Fscreening\u002Ffilter.py",228,247,[822],{"name":818,"start":823,"end":824},328,347,{"format":356,"lines":826,"tokens":827,"copies":299,"first":828,"others":831},69,224,{"name":765,"start":829,"end":830},1969,2037,[832],{"name":765,"start":833,"end":834},2157,2225,{"files":714,"minified":714,"sample":836},[],{"score":838,"grade":839,"size":840,"dimensions":844},58.3,"C",{"lines":841,"files":842,"class":843},461449,970,"L",[845,858,866],{"id":846,"source":847,"value":848,"adjusted":848,"lines":849,"halfLife":850,"formats":851,"excluded":854,"weight":312,"score":857},"duplication","jscpd",6.2,28711,8.5,[356,363,370,384,408,716,852,853],"nsis","docker",[855,414,856],"markup","data",60.3,{"id":859,"source":847,"value":860,"adjusted":860,"lines":861,"halfLife":862,"coverage":863,"weight":864,"score":865},"dead-code",1.4,6435,7.5,99.6,0.996,87.8,{"id":867,"source":847,"value":868,"adjusted":869,"lines":870,"halfLife":572,"weight":312,"score":871},"complexity",71,70.8,327698,37.5,{"total":873,"mean":874,"files":875},64756,66.8,[876,881,886,890,894,898,903,908,913,918],{"path":877,"complexity":878,"lines":879,"bytes":880},"src\u002Fservices\u002Fscreening_service.py",1384,4384,175732,{"path":882,"complexity":883,"lines":884,"bytes":885},"src\u002Fservices\u002Fsystem_config_service.py",1282,5680,244429,{"path":765,"complexity":887,"lines":888,"bytes":889},1134,5770,253714,{"path":797,"complexity":891,"lines":892,"bytes":893},1046,5016,219118,{"path":895,"complexity":615,"lines":896,"bytes":897},"src\u002Fsearch_service.py",4961,194381,{"path":899,"complexity":900,"lines":901,"bytes":902},"src\u002Fcore\u002Fpipeline.py",911,4377,199619,{"path":904,"complexity":905,"lines":906,"bytes":907},"src\u002Fconfig.py",824,3934,180188,{"path":909,"complexity":910,"lines":911,"bytes":912},"src\u002Fshare_image.py",696,2172,105912,{"path":914,"complexity":915,"lines":916,"bytes":917},"apps\u002Fdsa-web\u002Fsrc\u002Fcomponents\u002Fsettings\u002FLLMChannelEditor.tsx",688,2673,104011,{"path":919,"complexity":920,"lines":921,"bytes":922},"src\u002Fagent\u002Fweb_intent_resolver.py",687,2176,109560,{"percentage":860,"findings":924,"files":925,"byCategory":926,"largest":936},128,977,[927,929,931,933],{"category":928,"count":492},"unused-file",{"category":930,"count":409},"unused-export",{"category":932,"count":575},"unused-symbol",{"category":934,"count":935},"unused-import",40,[937,938,941,944,947,950,952,954,957,962],{"category":928,"path":919,"name":441,"line":312,"lines":921},{"category":928,"path":939,"name":441,"line":312,"lines":940},"src\u002Fagent\u002Fweb_intent_types.py",994,{"category":928,"path":942,"name":441,"line":312,"lines":943},"src\u002Fagent\u002Fweb_intent_tokenizer.py",802,{"category":928,"path":945,"name":441,"line":312,"lines":946},"src\u002Fagent\u002Ftool_surface.py",451,{"category":928,"path":948,"name":441,"line":312,"lines":949},"bot\u002Fplatforms\u002Fdiscord.py",377,{"category":928,"path":951,"name":441,"line":312,"lines":341},"src\u002Fnotification_capabilities.py",{"category":928,"path":953,"name":441,"line":312,"lines":762},"bot\u002Fhandler.py",{"category":928,"path":955,"name":441,"line":312,"lines":956},"src\u002Fservices\u002Fanalyzer_service.py",135,{"category":930,"path":958,"name":959,"line":960,"lines":961},"src\u002Fformatters.py","chunk_markdown_preserving_blocks",361,112,{"category":928,"path":963,"name":441,"line":312,"lines":411},"apps\u002Fdsa-desktop\u002Fpreload.js",{"name":267,"url":965,"description":441,"language":305,"stars":966,"starsToday":967,"defaultBranch":342,"headSha":968,"durationMs":969,"total":970,"formats":977,"topClones":1028,"code":1166,"health":1364,"complexity":1385,"deadCode":1436},"https:\u002F\u002Fgithub.com\u002FGoogleChrome\u002Fmodern-web-guidance-src",1943,159,"179dbc6fe830be1309f4d0b079a2442d71d983b9",3119,{"sources":971,"lines":972,"tokens":973,"clones":268,"duplicatedLines":974,"duplicatedTokens":975,"percentage":269,"percentageTokens":976},2474,453612,3899700,63980,516761,13.25,[978,985,991,996,1002,1006,1012,1018,1022,1025],{"format":979,"sources":980,"lines":981,"clones":982,"duplicatedLines":983,"percentage":984},"diff",322,142652,1851,36194,25.37,{"format":370,"sources":986,"lines":987,"clones":988,"duplicatedLines":989,"percentage":990},545,154328,1115,13674,8.86,{"format":855,"sources":470,"lines":992,"clones":993,"duplicatedLines":994,"percentage":995},59716,466,8805,14.74,{"format":402,"sources":997,"lines":998,"clones":999,"duplicatedLines":1000,"percentage":1001},585,50075,61,1546,3.09,{"format":377,"sources":545,"lines":1003,"clones":493,"duplicatedLines":1004,"percentage":1005},9897,2770,27.99,{"format":384,"sources":1007,"lines":1008,"clones":1009,"duplicatedLines":1010,"percentage":1011},173,21970,29,552,2.51,{"format":391,"sources":1013,"lines":1014,"clones":1015,"duplicatedLines":1016,"percentage":1017},142,10353,24,214,2.07,{"format":397,"sources":1019,"lines":1020,"clones":643,"duplicatedLines":1021,"percentage":412},162,1961,72,{"format":408,"sources":1015,"lines":1023,"clones":669,"duplicatedLines":331,"percentage":1024},915,6.99,{"format":363,"sources":287,"lines":1026,"clones":417,"duplicatedLines":542,"percentage":1027},840,8.33,[1029,1051,1074,1096,1107,1117,1127,1137,1146,1156],{"format":979,"lines":1030,"tokens":1031,"copies":417,"first":1032,"others":1034,"excerpt":1039},1753,12018,{"name":1033,"start":312,"end":1030},"guides\u002Fforms\u002Fsms-otp-form\u002Ftargets\u002Fdevtools-times\u002Fpatches\u002Fclaude-solution.patch",[1035,1037],{"name":1036,"start":312,"end":1030},"guides\u002Fforms\u002Fsms-otp-form\u002Ftargets\u002Fdevtools-times\u002Fpatches\u002Fcodex-solution.patch",{"name":1038,"start":312,"end":1030},"guides\u002Fforms\u002Fsms-otp-form\u002Ftargets\u002Fdevtools-times\u002Fpatches\u002Fjetski-solution.patch",{"lines":1040,"total":1030},[1041,1042,1043,1044,1045,1046,1047,1048,1049,1050],"diff --git a\u002Fastro.config.mjs b\u002Fastro.config.mjs","index cc5869a..d43edf3 100644","--- a\u002Fastro.config.mjs","+++ b\u002Fastro.config.mjs","@@ -12,6 +12,9 @@ export default defineConfig({","   integrations: [react()],","   vite: {","     plugins: [tailwindcss()],","+    define: {","+      'process.env.ASTRO_NODE_LOGGING': JSON.stringify('disabled'),",{"format":979,"lines":1052,"tokens":1053,"copies":299,"first":1054,"others":1058,"excerpt":1062},1051,14927,{"name":1055,"start":1056,"end":1057},"guides\u002Fsecurity\u002Fquick-sign-ins\u002Ftargets\u002Fdaily-grind\u002Fpatches\u002Fantigravity-solution.patch",3663,4713,[1059],{"name":1055,"start":1060,"end":1061},8944,9994,{"lines":1063,"total":1052},[1064,1065,1066,1067,1068,1069,1070,1071,1072,1073],"+++ b\u002Fnode_modules\u002F.pnpm\u002Fua-parser-js@1.0.41\u002Fnode_modules\u002Fua-parser-js\u002Fsrc\u002Fua-parser.js","@@ -0,0 +1,1048 @@","+\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F\u002F","+\u002F* UAParser.js v1.0.41","+   Copyright © 2012-2025 Faisal Salman \u003Cf@faisalman.com>","+   MIT License *\u002F\u002F*","+   Detect Browser, Engine, OS, CPU, and Device type\u002Fmodel from User-Agent data.","+   Supports browser & node.js environment.","+   Demo   : https:\u002F\u002Ffaisalman.github.io\u002Fua-parser-js","+   Source : https:\u002F\u002Fgithub.com\u002Ffaisalman\u002Fua-parser-js *\u002F",{"format":979,"lines":1075,"tokens":1076,"copies":417,"first":1077,"others":1079,"excerpt":1084},741,5212,{"name":1078,"start":312,"end":1075},"guides\u002Fforms\u002Fsms-otp-form\u002Ftargets\u002Fdaily-grind\u002Fpatches\u002Fclaude-solution.patch",[1080,1082],{"name":1081,"start":312,"end":1075},"guides\u002Fforms\u002Fsms-otp-form\u002Ftargets\u002Fdaily-grind\u002Fpatches\u002Fcodex-solution.patch",{"name":1083,"start":312,"end":1075},"guides\u002Fforms\u002Fsms-otp-form\u002Ftargets\u002Fdaily-grind\u002Fpatches\u002Fjetski-solution.patch",{"lines":1085,"total":1075},[1086,1087,1088,1089,1090,1091,1092,1093,1094,1095],"diff --git a\u002Findex.html b\u002Findex.html","index 66c9173..1168016 100644","--- a\u002Findex.html","+++ b\u002Findex.html","@@ -4,14 +4,33 @@"," \u003Chead>","   \u003Cmeta charset=\"UTF-8\">","   \u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">","-  \u003Ctitle>The Daily Grind | Artisanal Coffee\u003C\u002Ftitle>","+  \u003Cmeta name=\"description\" content=\"The Daily Grind Artisanal Coffee — Verify your phone number with a one-time passcode (OTP) for express ordering and reward…",{"format":979,"lines":1097,"tokens":1098,"copies":299,"first":1099,"others":1103},311,6596,{"name":1100,"start":1101,"end":1102},"guides\u002Fui-components\u002Ftabs\u002Ftargets\u002Fdaily-grind\u002Fpatches\u002Fantigravity-solution.patch",826,1136,[1104],{"name":1100,"start":1105,"end":1106},1145,1455,{"format":979,"lines":1108,"tokens":1109,"copies":299,"first":1110,"others":1113},316,6224,{"name":1055,"start":1111,"end":1112},878,1193,[1114],{"name":1055,"start":1115,"end":1116},6300,6615,{"format":979,"lines":1118,"tokens":1119,"copies":299,"first":1120,"others":1123},299,6098,{"name":1100,"start":1121,"end":1122},2285,2583,[1124],{"name":1100,"start":1125,"end":1126},2594,2892,{"format":979,"lines":1128,"tokens":1129,"copies":299,"first":1130,"others":1133},221,4825,{"name":1100,"start":1131,"end":1132},3691,3911,[1134],{"name":1100,"start":1135,"end":1136},3919,4139,{"format":979,"lines":782,"tokens":1138,"copies":299,"first":1139,"others":1142},4367,{"name":1055,"start":1140,"end":1141},2272,2490,[1143],{"name":1055,"start":1144,"end":1145},7694,7912,{"format":979,"lines":1147,"tokens":1148,"copies":299,"first":1149,"others":1152},399,4073,{"name":1055,"start":1150,"end":1151},3250,3648,[1153],{"name":1055,"start":1154,"end":1155},8531,8929,{"format":979,"lines":1157,"tokens":1158,"copies":299,"first":1159,"others":1162},180,3966,{"name":1055,"start":1160,"end":1161},1197,1376,[1163],{"name":1055,"start":1164,"end":1165},6619,6798,{"sources":1167,"lines":1168,"tokens":1169,"clones":282,"duplicatedLines":1170,"duplicatedTokens":1171,"percentage":283,"percentageTokens":1172,"formats":1173,"topClones":1192,"generated":1361},486,135044,911098,12740,90967,9.98,[1174,1180,1183,1184,1186,1190],{"format":370,"sources":1175,"lines":1176,"clones":1177,"duplicatedLines":1178,"percentage":1179},416,120948,991,12513,10.35,{"format":384,"sources":557,"lines":1181,"clones":611,"duplicatedLines":1182,"percentage":709},12033,106,{"format":363,"sources":287,"lines":1026,"clones":417,"duplicatedLines":542,"percentage":1027},{"format":408,"sources":417,"lines":459,"clones":417,"duplicatedLines":772,"percentage":1185},7.4,{"format":1187,"sources":393,"lines":1188,"clones":312,"duplicatedLines":255,"percentage":1189},"html",642,1.25,{"format":1191,"sources":393,"lines":714,"clones":714,"duplicatedLines":714,"percentage":714},"astro",[1193,1225,1258,1277,1288,1298,1308,1317,1327,1346],{"format":370,"lines":1194,"tokens":1195,"copies":380,"first":1196,"others":1198,"excerpt":1215},17,87,{"name":1197,"start":312,"end":1194},"guides\u002Faccessibility\u002Faccessible-error-announcement\u002Fgrader.ts",[1199,1201,1203,1205,1207,1209,1211,1213],{"name":1200,"start":312,"end":393},"guides\u002Fbuilt-in-ai\u002Flanguage-detection\u002Fgrader.ts",{"name":1202,"start":312,"end":378},"guides\u002Fbuilt-in-ai\u002Fsummarizer\u002Fgrader.ts",{"name":1204,"start":312,"end":393},"guides\u002Fcss\u002Fanimate-to-intrinsic-sizes\u002Fgrader.ts",{"name":1206,"start":312,"end":393},"guides\u002Fcss\u002Fchild-state-based-styling\u002Fgrader.ts",{"name":1208,"start":312,"end":378},"guides\u002Fcss\u002Fdynamic-sibling-styling\u002Fgrader.ts",{"name":1210,"start":312,"end":393},"guides\u002Fforms\u002Fautofill-address-form\u002Fgrader.ts",{"name":1212,"start":312,"end":393},"guides\u002Fforms\u002Fautofill-payment-form\u002Fgrader.ts",{"name":1214,"start":312,"end":393},"guides\u002Fforms\u002Fautofill-sign-up-form\u002Fgrader.ts",{"lines":1216,"total":1194},[1217,1218,1219,441,1220,1221,1222,1223,1224,441],"import { test, expect } from '@playwright\u002Ftest';","import * as fs from 'fs';","import * as path from 'path';","\u002F\u002F Setup","const targetFile = process.env.TARGET_FILE;","if (!targetFile) {","  throw new Error('TARGET_FILE environment variable not set.');","}",{"format":370,"lines":1226,"tokens":1227,"copies":1226,"first":1228,"others":1229,"excerpt":1244,"excerptSecond":1254},19,118,{"name":1197,"start":1194,"end":380},[1230,1233,1234,1235,1236,1238,1240,1242],{"name":1231,"start":393,"end":1232},"guides\u002Fcss\u002Fcontent-based-styling\u002Fgrader.ts",33,{"name":1210,"start":393,"end":1232},{"name":1212,"start":393,"end":568},{"name":1214,"start":393,"end":1232},{"name":1237,"start":393,"end":1232},"guides\u002Fforms\u002Fforms\u002Fgrader.ts",{"name":1239,"start":393,"end":568},"guides\u002Fperformance\u002Fdefer-rendering-heavy-content\u002Fgrader.ts",{"name":1241,"start":1194,"end":380},"guides\u002Fperformance\u002Foptimize-preload-priority\u002Fgrader.ts",{"name":1243,"start":1194,"end":380},"guides\u002Fperformance\u002Foptimize-script-priority\u002Fgrader.ts",{"lines":1245,"total":1226},[1246,441,1247,1248,1249,1250,1251,441,1252,1253],"test.describe(`Accessible Error Announcement Expectations: ${demoName}`, () => {","  \u002F\u002F Setup browser testing","  test.beforeEach(async ({ page }) => {","    await page.route('http:\u002F\u002Flocalhost\u002F*', async (route) => {","      const requestPath = new URL(route.request().url()).pathname;","      const localFilePath = path.join(targetDir, requestPath === '\u002F' ? demoName : requestPath);","      if (fs.existsSync(localFilePath)) {","        await route.fulfill({ path: localFilePath });",{"lines":1255,"total":415},[1256,1247,1248,1249,1250,1251,441,1252,1253,1257],"test.describe(`content-based-styling Expectations: ${demoName}`, () => {","      } else {",{"format":370,"lines":1259,"tokens":1260,"copies":299,"first":1261,"others":1263,"excerpt":1266},192,1357,{"name":1262,"start":312,"end":1259},"guides\u002Fforms\u002Fsms-otp-form\u002Ftargets\u002Fdaily-grind\u002Fgrader.ts",[1264],{"name":1265,"start":312,"end":1259},"guides\u002Fforms\u002Fsms-otp-form\u002Ftargets\u002Fdevtools-times\u002Fgrader.ts",{"lines":1267,"total":1259},[1268,1269,1270,1271,1272,1273,1274,1268,1275,1276],"import {","  test,","  expect,","  getTargetFiles,","  getJsProject,","  getHtmlDocuments,","} from '..\u002F..\u002F..\u002F..\u002Ftest-fixture.ts';","  SyntaxKind,","  Node,",{"format":370,"lines":371,"tokens":1278,"copies":299,"first":1279,"others":1283},1185,{"name":1280,"start":1281,"end":1282},"guides\u002Fcss\u002Fsize-aware-styling\u002Ftargets\u002Fdaily-grind\u002Fgrader.ts",31,164,[1284],{"name":1285,"start":1286,"end":1287},"guides\u002Fcss\u002Fsize-aware-styling\u002Ftargets\u002Fdevtools-times\u002Fgrader.ts",32,166,{"format":370,"lines":1289,"tokens":1290,"copies":299,"first":1291,"others":1294},141,1078,{"name":1262,"start":1292,"end":1293},189,329,[1295],{"name":1265,"start":1296,"end":1297},325,465,{"format":370,"lines":956,"tokens":1299,"copies":299,"first":1300,"others":1304},1029,{"name":1301,"start":1302,"end":1303},"guides\u002Fuser-experience\u002Fnatural-interactions\u002Ftargets\u002Fdaily-grind\u002Fgrader.ts",218,352,[1305],{"name":1301,"start":1306,"end":1307},564,698,{"format":370,"lines":668,"tokens":1309,"copies":299,"first":1310,"others":1314},917,{"name":1311,"start":1312,"end":1313},"guides\u002Fwasm\u002Fcpp-on-the-web\u002Ftargets\u002Fdaily-grind\u002Fgrader.ts",58,196,[1315],{"name":1316,"start":1312,"end":1313},"guides\u002Fwasm\u002Fcpp-on-the-web\u002Ftargets\u002Fdevtools-times\u002Fgrader.ts",{"format":370,"lines":1318,"tokens":1319,"copies":299,"first":1320,"others":1323},123,877,{"name":1262,"start":1321,"end":1322},332,454,[1324],{"name":1265,"start":1325,"end":1326},469,591,{"format":370,"lines":494,"tokens":405,"copies":492,"first":1328,"others":1329},{"name":1197,"start":312,"end":494},[1330,1332,1334,1336,1338,1340,1342,1344],{"name":1331,"start":312,"end":494},"guides\u002Fforms\u002Fanimated-select-picker\u002Fgrader.ts",{"name":1333,"start":312,"end":494},"guides\u002Fforms\u002Fautofill-highlight-inputs\u002Fgrader.ts",{"name":1335,"start":312,"end":494},"guides\u002Fforms\u002Frequired-field-feedback\u002Fgrader.ts",{"name":1337,"start":312,"end":287},"guides\u002Fjs\u002Fcapture-location-agnostic-data\u002Fgrader.ts",{"name":1339,"start":312,"end":494},"guides\u002Fperformance\u002Fflicker-free-client-side-ab-testing\u002Fgrader.ts",{"name":1341,"start":312,"end":494},"guides\u002Fperformance\u002Fidentify-heavy-scripts\u002Fgrader.ts",{"name":1343,"start":312,"end":494},"guides\u002Fperformance\u002Fidentify-inp-causes\u002Fgrader.ts",{"name":1345,"start":312,"end":287},"guides\u002Fui-behaviors\u002Fanimate-element-entry-exit\u002Fgrader.ts",{"format":370,"lines":393,"tokens":1347,"copies":385,"first":1348,"others":1349},108,{"name":1197,"start":1194,"end":1286},[1350,1351,1352,1353,1357,1359],{"name":1200,"start":393,"end":1009},{"name":1202,"start":378,"end":1009},{"name":1335,"start":409,"end":373},{"name":1354,"start":1355,"end":1356},"guides\u002Fperformance\u002Fdeprioritize-background-fetches\u002Fgrader.ts",23,38,{"name":1358,"start":393,"end":545},"guides\u002Fui-components\u002Fpersistent-app-tours\u002Fgrader.ts",{"name":1360,"start":422,"end":1015},"guides\u002Fui-components\u002Fpersistent-toast-notifications\u002Fgrader.ts",{"files":312,"minified":312,"sample":1362},[1363],"src\u002Fdashboard\u002Fdiff.min.js",{"score":294,"grade":295,"size":1365,"dimensions":1368},{"lines":1366,"files":1367,"class":843},170704,598,[1369,1376,1381],{"id":846,"source":847,"value":1370,"adjusted":1371,"lines":1372,"halfLife":850,"formats":1373,"excluded":1374,"weight":312,"score":1375},8.2,8.1,13934,[370,384,363,408,1191],[855,414,856],51.6,{"id":859,"source":847,"value":1377,"adjusted":1378,"lines":1379,"halfLife":862,"weight":312,"score":1380},49.3,48.8,84409,1.1,{"id":867,"source":847,"value":1382,"adjusted":1383,"lines":1384,"halfLife":572,"weight":312,"score":554},74.3,73.7,126842,{"total":1386,"mean":1387,"files":1388},42207,70.6,[1389,1394,1399,1404,1409,1413,1417,1422,1426,1431],{"path":1390,"complexity":1391,"lines":1392,"bytes":1393},"src\u002Fdashboard\u002Fdashboard.js",841,2453,128070,{"path":1395,"complexity":1396,"lines":1397,"bytes":1398},"src\u002Fdashboard\u002Flanding.js",774,1884,97172,{"path":1400,"complexity":1401,"lines":1402,"bytes":1403},"guides\u002Fui-components\u002Ftabs\u002Ftargets\u002Fdaily-grind\u002Fgrader.ts",582,1437,63926,{"path":1405,"complexity":1406,"lines":1407,"bytes":1408},"src\u002Fci\u002Fsync-pipeline-issue.ts",348,1343,48887,{"path":1410,"complexity":773,"lines":1411,"bytes":1412},"src\u002Fci\u002Fatl-triage.ts",1273,43340,{"path":1414,"complexity":1321,"lines":1415,"bytes":1416},"guides\u002Fui-components\u002Fstack-drill-down\u002Fgrader.ts",1022,40027,{"path":1418,"complexity":1419,"lines":1420,"bytes":1421},"src\u002Fdashboard\u002Futils.js",323,849,37110,{"path":1423,"complexity":980,"lines":1424,"bytes":1425},"src\u002Fcore\u002Fguide-validation.ts",1265,45192,{"path":1427,"complexity":1428,"lines":1429,"bytes":1430},"guides\u002Fvisual-design\u002Fvisual-effects\u002Ftargets\u002Fdaily-grind\u002Fgrader.ts",289,691,27838,{"path":1432,"complexity":1433,"lines":1434,"bytes":1435},"guides\u002Fui-components\u002Fmenu\u002Ftargets\u002Fdaily-grind\u002Fgrader.ts",284,1227,56148,{"percentage":1437,"findings":1438,"files":1439,"byCategory":1440,"largest":1446},49.33,285,603,[1441,1443,1444,1445],{"category":928,"count":1442},258,{"category":930,"count":611},{"category":932,"count":611},{"category":934,"count":611},[1447,1448,1449,1450,1451,1452,1455,1458,1461,1464],{"category":928,"path":1390,"name":441,"line":312,"lines":1392},{"category":928,"path":1395,"name":441,"line":312,"lines":1397},{"category":928,"path":1400,"name":441,"line":312,"lines":1402},{"category":928,"path":1432,"name":441,"line":312,"lines":1434},{"category":928,"path":1414,"name":441,"line":312,"lines":1415},{"category":928,"path":1453,"name":441,"line":312,"lines":1454},"src\u002Fanalyzing\u002Feval\u002Fdetection-eval.ts",974,{"category":928,"path":1456,"name":441,"line":312,"lines":1457},"src\u002Fdashboard\u002Fsearch\u002Fsearch.js",934,{"category":928,"path":1459,"name":441,"line":312,"lines":1460},"guides\u002Fsecurity\u002Fpasskeys\u002Ftargets\u002Fdevtools-times\u002Fgrader.ts",873,{"category":928,"path":1462,"name":441,"line":312,"lines":1463},"guides\u002Fui-behaviors\u002Fdrag\u002Ftargets\u002Fdaily-grind\u002Fgrader.ts",800,{"category":928,"path":1465,"name":441,"line":312,"lines":1466},"src\u002Fdashboard\u002Fguide.js",776,{"name":1468,"url":1469,"description":1470,"language":330,"stars":1471,"starsToday":1472,"defaultBranch":342,"headSha":1473,"durationMs":1474,"total":1475,"formats":1480,"topClones":1516,"code":1615,"health":1734,"complexity":1755,"deadCode":1794},"addyosmani\u002Fagent-skills","https:\u002F\u002Fgithub.com\u002Faddyosmani\u002Fagent-skills","Production-grade engineering skills for AI coding agents.",116088,787,"301b02b12bff98e4688e6984af6556802322bbde",1118,{"sources":1476,"lines":332,"tokens":1477,"clones":331,"duplicatedLines":333,"duplicatedTokens":1478,"percentage":334,"percentageTokens":1479},327,230742,6438,2.79,[1481,1486,1491,1495,1499,1503,1506,1509,1512,1514],{"format":384,"sources":1356,"lines":1482,"clones":1483,"duplicatedLines":1484,"percentage":1485},5857,28,265,4.52,{"format":1487,"sources":415,"lines":1488,"clones":378,"duplicatedLines":1489,"percentage":1490},"toml",542,257,47.42,{"format":408,"sources":553,"lines":1492,"clones":385,"duplicatedLines":1493,"percentage":1494},1895,76,4.01,{"format":979,"sources":385,"lines":1496,"clones":643,"duplicatedLines":1497,"percentage":1498},137,53,38.69,{"format":402,"sources":1500,"lines":1501,"clones":669,"duplicatedLines":1286,"percentage":1502},113,14523,0.22,{"format":356,"sources":255,"lines":1504,"clones":299,"duplicatedLines":1356,"percentage":1505},188,20.21,{"format":370,"sources":287,"lines":1507,"clones":312,"duplicatedLines":385,"percentage":1508},672,1.04,{"format":397,"sources":1232,"lines":1510,"clones":312,"duplicatedLines":255,"percentage":1511},492,1.63,{"format":377,"sources":1232,"lines":1513,"clones":714,"duplicatedLines":714,"percentage":714},1585,{"format":414,"sources":568,"lines":1515,"clones":714,"duplicatedLines":714,"percentage":714},1001,[1517,1532,1550,1564,1573,1578,1584,1595,1602,1608],{"format":1487,"lines":772,"tokens":1518,"copies":299,"first":1519,"others":1521,"excerpt":1524},743,{"name":1520,"start":312,"end":772},".gemini\u002Fcommands\u002Fbuild.toml",[1522],{"name":1523,"start":312,"end":772},"commands\u002Fbuild.toml",{"lines":1525,"total":772},[1526,441,1527,1528,441,1529,441,1530,1531,441],"description = \"Implement tasks incrementally — build, test, verify, commit. Add \\\"auto\\\" to run the whole plan in one approved pass.\"","prompt = \"\"\"","Invoke the incremental-implementation skill alongside test-driven-development.","## Modes","- `\u002Fbuild` — implement the next pending task, then stop (careful, one slice at a time).","- `\u002Fbuild auto` — generate the plan if needed, get a single approval, then implement every task without stopping between them.",{"format":1487,"lines":1533,"tokens":1534,"copies":299,"first":1535,"others":1537,"excerpt":1540},46,429,{"name":1536,"start":387,"end":1021},".gemini\u002Fcommands\u002Fship.toml",[1538],{"name":1539,"start":387,"end":1021},"commands\u002Fship.toml",{"lines":1541,"total":1533},[1542,441,1543,441,1544,1545,1546,1547,1548,1549],"## Phase B — Merge in main context","Once all three reports are back, the main agent (not a sub-persona) synthesizes them:","1. **Code Quality** — Aggregate Critical\u002FRequired findings from `code-reviewer` and any failing tests, lint, or build output. Resolve duplicates between review…","2. **Security** — Promote any Critical\u002FHigh `security-auditor` findings to launch blockers. Cross-reference with `code-reviewer`'s security axis.","3. **Performance** — Pull from `code-reviewer`'s performance axis; cross-check Core Web Vitals if applicable.","4. **Accessibility** — Verify keyboard nav, screen reader support, contrast (not covered by the three personas — handle directly here, or invoke the accessibil…","5. **Infrastructure** — Env vars, migrations, monitoring, feature flags. Verify directly.","6. **Documentation** — README, ADRs, changelog. Verify directly.",{"format":1487,"lines":1015,"tokens":1551,"copies":299,"first":1552,"others":1554,"excerpt":1557},421,{"name":1553,"start":312,"end":1015},".gemini\u002Fcommands\u002Fconstraints.toml",[1555],{"name":1556,"start":312,"end":1015},"commands\u002Fconstraints.toml",{"lines":1558,"total":1015},[1559,441,1527,1560,441,1561,441,1562,441,1563],"description = \"Define and enforce this project's quality bar — interview, sane defaults, CONSTRAINTS.md\"","Invoke the constraint-driven-development skill.","$ARGUMENTS","Default behaviour with no arguments: set up constraints for this repository.","1. **Detect first.** Read package.json \u002F pyproject.toml \u002F go.mod, the test runner, existing lint configs, current coverage output, CI workflows, and the agent …",{"format":979,"lines":422,"tokens":1565,"copies":417,"first":1566,"others":1568},119,{"name":1567,"start":422,"end":553},"evals\u002Fplugin\u002Fcode-review-stays-quiet-on-commit-message\u002Fprompt.md",[1569,1571],{"name":1570,"start":422,"end":553},"evals\u002Fplugin\u002Fgitflow-stays-quiet-on-what-broke\u002Fprompt.md",{"name":1572,"start":422,"end":553},"evals\u002Fplugin\u002Ftdd-stays-quiet-on-debug\u002Fprompt.md",{"format":1487,"lines":611,"tokens":1574,"copies":299,"first":1575,"others":1576},223,{"name":1536,"start":492,"end":415},[1577],{"name":1539,"start":492,"end":415},{"format":1487,"lines":393,"tokens":604,"copies":299,"first":1579,"others":1581},{"name":1580,"start":312,"end":393},".gemini\u002Fcommands\u002Freview.toml",[1582],{"name":1583,"start":312,"end":393},"commands\u002Freview.toml",{"format":408,"lines":446,"tokens":1585,"copies":417,"first":1586,"others":1589},79,{"name":1587,"start":1489,"end":1588},"hooks\u002Fsimplify-ignore-test.sh",268,[1590,1593],{"name":1587,"start":1591,"end":1592},301,312,{"name":1587,"start":1594,"end":1303},341,{"format":1487,"lines":415,"tokens":1596,"copies":299,"first":1597,"others":1599},146,{"name":1598,"start":312,"end":415},".gemini\u002Fcommands\u002Fplanning.toml",[1600],{"name":1601,"start":312,"end":415},"commands\u002Fplanning.toml",{"format":1487,"lines":1194,"tokens":1013,"copies":299,"first":1603,"others":1605},{"name":1604,"start":312,"end":1194},".gemini\u002Fcommands\u002Fspec.toml",[1606],{"name":1607,"start":312,"end":1194},"commands\u002Fspec.toml",{"format":1487,"lines":378,"tokens":1609,"copies":299,"first":1610,"others":1612},131,{"name":1611,"start":255,"end":557},".gemini\u002Fcommands\u002Fcode-simplify.toml",[1613],{"name":1614,"start":255,"end":557},"commands\u002Fcode-simplify.toml",{"sources":418,"lines":1616,"tokens":1617,"clones":380,"duplicatedLines":1594,"duplicatedTokens":769,"percentage":1618,"percentageTokens":1619,"formats":1620,"topClones":1626,"generated":1732},7131,42662,4.78,5.43,[1621,1624],{"format":384,"sources":415,"lines":1622,"clones":1483,"duplicatedLines":1484,"percentage":1623},5448,4.86,{"format":408,"sources":385,"lines":1625,"clones":385,"duplicatedLines":1493,"percentage":1485},1683,[1627,1643,1664,1680,1687,1698,1706,1713,1719,1724],{"format":408,"lines":446,"tokens":1585,"copies":417,"first":1628,"others":1629,"excerpt":1632},{"name":1587,"start":1489,"end":1588},[1630,1631],{"name":1587,"start":1591,"end":1592},{"name":1587,"start":1594,"end":1303},{"lines":1633,"total":446},[1634,1635,1636,1637,1638,1639,1640,1641,1642,441],"  rm -rf \"$PROJ\"","  mkdir -p \"$PROJ\u002F.claude\"","  TARGET=\"$PROJ\u002Fapp.js\"","  cat > \"$TARGET\" \u003C\u003C'EOF'","const editable = 1;","\u002F* simplify-ignore-start: perf-critical *\u002F","const protectedValue = 42;","\u002F* simplify-ignore-end *\u002F","EOF",{"format":384,"lines":492,"tokens":610,"copies":417,"first":1644,"others":1646,"excerpt":1651,"excerptSecond":1661},{"name":1645,"start":417,"end":446},"scripts\u002Fvalidate-artifact-paths-test.js",[1647,1649],{"name":1648,"start":417,"end":446},"scripts\u002Fvalidate-commands-test.js",{"name":1650,"start":417,"end":446},"scripts\u002Fvalidate-reference-links-test.js",{"lines":1652,"total":492},[1653,441,1654,1655,1656,1657,1658,1659,441,1660],"'use strict';","const assert = require('node:assert\u002Fstrict');","const fs = require('node:fs');","const os = require('node:os');","const path = require('node:path');","const { spawnSync } = require('node:child_process');","const { afterEach, test } = require('node:test');","const VALIDATOR = path.join(__dirname, 'validate-artifact-paths.js');",{"lines":1662,"total":492},[1653,441,1654,1655,1656,1657,1658,1659,441,1663],"const VALIDATOR = path.join(__dirname, 'validate-commands.js');",{"format":408,"lines":287,"tokens":1227,"copies":299,"first":1665,"others":1667,"excerpt":1670},{"name":1666,"start":393,"end":1483},"hooks\u002Fsdd-cache-post.sh",[1668],{"name":1669,"start":553,"end":1232},"hooks\u002Fsdd-cache-pre.sh",{"lines":1671,"total":287},[1672,1673,1674,441,1675,441,1676,1677,1678,1679],"command -v jq   >\u002Fdev\u002Fnull 2>&1 || exit 0","command -v curl >\u002Fdev\u002Fnull 2>&1 || exit 0","command -v shasum >\u002Fdev\u002Fnull 2>&1 || command -v sha256sum >\u002Fdev\u002Fnull 2>&1 || exit 0","if [ -t 0 ]; then INPUT=\"{}\"; else INPUT=$(cat); fi","# Debug logging: active when SDD_CACHE_DEBUG=1 is set, or when a sentinel","# file exists at .claude\u002Fsdd-cache\u002F.debug. Toggle with `touch` \u002F `rm`.","dbg() {","  local dir=\"${CLAUDE_PROJECT_DIR:-$PWD}\u002F.claude\u002Fsdd-cache\"",{"format":384,"lines":287,"tokens":1312,"copies":417,"first":1681,"others":1682},{"name":1645,"start":1281,"end":772},[1683,1686],{"name":1648,"start":1684,"end":1685},54,66,{"name":1650,"start":1232,"end":546},{"format":384,"lines":385,"tokens":1684,"copies":417,"first":1688,"others":1691},{"name":1689,"start":1690,"end":416},"scripts\u002Frun-evals-test.js",503,[1692,1695],{"name":1689,"start":1693,"end":1694},528,534,{"name":1689,"start":1696,"end":1697},1009,1013,{"format":384,"lines":494,"tokens":1699,"copies":299,"first":1700,"others":1703},101,{"name":1689,"start":1701,"end":1702},673,686,[1704],{"name":1689,"start":910,"end":1705},709,{"format":384,"lines":492,"tokens":1707,"copies":299,"first":1708,"others":1710},86,{"name":1689,"start":1701,"end":1709},682,[1711],{"name":1689,"start":1518,"end":1712},752,{"format":408,"lines":385,"tokens":1714,"copies":299,"first":1715,"others":1716},85,{"name":1587,"start":1194,"end":1355},[1717],{"name":1718,"start":572,"end":562},"hooks\u002Fsimplify-ignore.sh",{"format":384,"lines":446,"tokens":1720,"copies":299,"first":1721,"others":1722},75,{"name":1648,"start":1015,"end":380},[1723],{"name":1650,"start":553,"end":1286},{"format":384,"lines":255,"tokens":1725,"copies":299,"first":1726,"others":1729},74,{"name":1689,"start":1727,"end":1728},487,494,[1730],{"name":1689,"start":1731,"end":456},537,{"files":714,"minified":714,"sample":1733},[],{"score":1735,"grade":839,"size":1736,"dimensions":1740},68.9,{"lines":1737,"files":1738,"class":1739},7541,48,"S",[1741,1747,1751],{"id":846,"source":847,"value":426,"adjusted":1742,"lines":1743,"halfLife":850,"formats":1744,"excluded":1745,"weight":312,"score":1746},4.7,379,[384,408,356,363],[855,414,856],68.1,{"id":859,"source":847,"value":714,"adjusted":1748,"lines":714,"halfLife":862,"coverage":1749,"weight":1750,"score":599},0.8,78.1,0.781,{"id":867,"source":847,"value":1378,"adjusted":1752,"lines":1753,"halfLife":572,"weight":312,"score":1754},42.9,3678,55.1,{"total":346,"mean":1756,"files":1757},24.4,[1758,1763,1767,1771,1776,1779,1781,1784,1788,1791],{"path":1759,"complexity":1760,"lines":1761,"bytes":1762},"scripts\u002Frun-evals.js",241,750,30888,{"path":1718,"complexity":1764,"lines":1765,"bytes":1766},114,464,19828,{"path":1768,"complexity":738,"lines":1769,"bytes":1770},"scripts\u002Flib\u002Fskill-lint.js",639,27198,{"path":1772,"complexity":1773,"lines":1774,"bytes":1775},"scripts\u002Flib\u002Fskill-lint-test.js",95,762,30180,{"path":1689,"complexity":1777,"lines":497,"bytes":1778},91,45559,{"path":1587,"complexity":772,"lines":357,"bytes":1780},26190,{"path":1782,"complexity":550,"lines":1419,"bytes":1783},"scripts\u002Ffloor-guard-reference-test.js",12781,{"path":1785,"complexity":561,"lines":1786,"bytes":1787},"scripts\u002Fvalidate-commands.js",212,8307,{"path":1789,"complexity":554,"lines":285,"bytes":1790},"scripts\u002Flib\u002Fexecution-status.js",2061,{"path":1792,"complexity":380,"lines":1292,"bytes":1793},"scripts\u002Fvalidate-reference-links.js",7804,{"percentage":714,"findings":714,"files":1533,"byCategory":1795,"largest":1796},[],[],{"name":1798,"url":1799,"description":1800,"language":324,"stars":1801,"starsToday":1802,"defaultBranch":342,"headSha":1803,"durationMs":1804,"total":1805,"formats":1810,"topClones":1846,"code":2135,"health":2289,"complexity":2311,"deadCode":2359},"vercel-labs\u002Fagent-browser","https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fagent-browser","Browser automation CLI for AI agents",50005,708,"18194e4569021b7a97c98129268dd1117786e72a",2091,{"sources":1806,"lines":326,"tokens":1807,"clones":325,"duplicatedLines":327,"duplicatedTokens":1808,"percentage":328,"percentageTokens":1809},445,1306177,80655,6.17,[1811,1817,1822,1826,1829,1833,1836,1840,1843,1845],{"format":1812,"sources":1565,"lines":1813,"clones":1814,"duplicatedLines":1815,"percentage":1816},"rust",145738,989,11049,7.58,{"format":370,"sources":1818,"lines":1819,"clones":1226,"duplicatedLines":1820,"percentage":1821},68,7114,359,5.05,{"format":377,"sources":558,"lines":1823,"clones":1194,"duplicatedLines":1824,"percentage":1825},10879,662,6.09,{"format":363,"sources":644,"lines":1827,"clones":393,"duplicatedLines":1433,"percentage":1828},13381,2.12,{"format":397,"sources":378,"lines":1830,"clones":287,"duplicatedLines":1831,"percentage":1832},1137,155,13.63,{"format":384,"sources":418,"lines":1834,"clones":611,"duplicatedLines":1585,"percentage":1835},4815,1.64,{"format":391,"sources":669,"lines":1837,"clones":611,"duplicatedLines":1838,"percentage":1839},608,103,16.94,{"format":855,"sources":287,"lines":1841,"clones":312,"duplicatedLines":385,"percentage":1842},729,0.96,{"format":979,"sources":312,"lines":409,"clones":312,"duplicatedLines":255,"percentage":1844},30.77,{"format":402,"sources":561,"lines":1793,"clones":714,"duplicatedLines":714,"percentage":714},[1847,1890,1934,1972,2000,2020,2049,2077,2085,2110],{"format":1812,"lines":446,"tokens":1021,"copies":1232,"first":1848,"others":1852,"excerpt":1876,"excerptSecond":1886},{"name":1849,"start":1850,"end":1851},"cli\u002Fsrc\u002Fnative\u002Fe2e_tests.rs",1997,2008,[1853,1855,1858,1861,1864,1867,1870,1873],{"name":1849,"start":1854,"end":1121},2276,{"name":1849,"start":1856,"end":1857},2407,2418,{"name":1849,"start":1859,"end":1860},2751,2762,{"name":1849,"start":1862,"end":1863},2909,2920,{"name":1849,"start":1865,"end":1866},2957,2968,{"name":1849,"start":1868,"end":1869},3114,3125,{"name":1849,"start":1871,"end":1872},3158,3169,{"name":1849,"start":1874,"end":1875},3430,3441,{"lines":1877,"total":446},[1878,1879,441,1880,1881,1882,1883,1884,1885,441],"async fn e2e_screenshot() {","    let mut state = DaemonState::new();","    let resp = execute_command(","        &json!({ \"id\": \"1\", \"action\": \"launch\", \"headless\": true }),","        &mut state,","    )","    .await;","    assert_success(&resp);",{"lines":1887,"total":492},[1888,1879,1880,1881,1882,1883,1884,1885,1880,1889],"async fn e2e_select_option_label_override_names() {","        &json!({ \"id\": \"2\", \"action\": \"navigate\", \"url\": \"data:text\u002Fhtml,\u003Chtml>\u003Cbody>\u003C\u002Fbody>\u003C\u002Fhtml>\" }),",{"format":1812,"lines":611,"tokens":403,"copies":415,"first":1891,"others":1895,"excerpt":1920,"excerptSecond":1930},{"name":1892,"start":1893,"end":1894},"cli\u002Fsrc\u002Fnative\u002Factions.rs",7170,7178,[1896,1899,1902,1905,1908,1911,1914,1917],{"name":1892,"start":1897,"end":1898},7230,7237,{"name":1892,"start":1900,"end":1901},7313,7321,{"name":1892,"start":1903,"end":1904},7370,7378,{"name":1892,"start":1906,"end":1907},7516,7524,{"name":1892,"start":1909,"end":1910},7536,7543,{"name":1892,"start":1912,"end":1913},7561,7569,{"name":1892,"start":1915,"end":1916},7581,7589,{"name":1892,"start":1918,"end":1919},7601,7609,{"lines":1921,"total":611},[1922,1923,1924,1925,1926,1927,1928,441,1929],"async fn handle_dblclick(cmd: &Value, state: &mut DaemonState) -> Result\u003CValue, String> {","    let mgr = state.browser.as_ref().ok_or(\"Browser not launched\")?;","    let session_id = mgr.active_session_id()?.to_string();","    let selector = cmd","        .get(\"selector\")","        .and_then(|v| v.as_str())","        .ok_or(\"Missing 'selector' parameter\")?;","    let result = interaction::dblclick(",{"lines":1931,"total":255},[1932,1923,1924,1925,1926,1927,1928,1933],"async fn handle_type(cmd: &Value, state: &mut DaemonState) -> Result\u003CValue, String> {","    let text = cmd",{"format":1812,"lines":255,"tokens":644,"copies":494,"first":1935,"others":1938,"excerpt":1963},{"name":1849,"start":1936,"end":1937},15883,15890,[1939,1942,1945,1948,1951,1954,1957,1960],{"name":1849,"start":1940,"end":1941},16005,16012,{"name":1849,"start":1943,"end":1944},16045,16052,{"name":1849,"start":1946,"end":1947},16086,16093,{"name":1849,"start":1949,"end":1950},16134,16141,{"name":1849,"start":1952,"end":1953},16182,16189,{"name":1849,"start":1955,"end":1956},16214,16221,{"name":1849,"start":1958,"end":1959},16266,16273,{"name":1849,"start":1961,"end":1962},16335,16342,{"lines":1964,"total":255},[1965,1966,1967,1968,1969,1879,1970,1971],"async fn e2e_flow_save_includes_requests_still_in_flight() {","    let fx = flow_fixture().await;","    let dir = tempfile::tempdir().unwrap();","    let guard = EnvGuard::new(&[\"AGENT_BROWSER_FLOWS_DIR\"]);","    guard.set(\"AGENT_BROWSER_FLOWS_DIR\", dir.path().to_str().unwrap());","    state.policy = None;","    state.confirm_actions = None;",{"format":1812,"lines":422,"tokens":1497,"copies":553,"first":1973,"others":1975},{"name":1849,"start":1850,"end":1974},2007,[1976,1979,1982,1985,1988,1991,1994,1997],{"name":1849,"start":1977,"end":1978},2150,2160,{"name":1849,"start":1980,"end":1981},3196,3206,{"name":1849,"start":1983,"end":1984},3289,3299,{"name":1849,"start":1986,"end":1987},3368,3378,{"name":1849,"start":1989,"end":1990},3774,3784,{"name":1849,"start":1992,"end":1993},3842,3852,{"name":1849,"start":1995,"end":1996},5818,5828,{"name":1849,"start":1998,"end":1999},5942,5952,{"format":1812,"lines":393,"tokens":2001,"copies":643,"first":2002,"others":2005},207,{"name":1849,"start":2003,"end":2004},4881,4896,[2006,2009,2012,2015,2017],{"name":1849,"start":2007,"end":2008},5076,5091,{"name":1849,"start":2010,"end":2011},5159,5174,{"name":1849,"start":2013,"end":2014},5293,5308,{"name":1849,"start":2016,"end":300},5440,{"name":1849,"start":2018,"end":2019},5582,5597,{"format":1812,"lines":393,"tokens":2021,"copies":492,"first":2022,"others":2024},90,{"name":1849,"start":1850,"end":2023},2012,[2025,2028,2031,2034,2037,2040,2043,2046],{"name":1849,"start":2026,"end":2027},2617,2632,{"name":1849,"start":2029,"end":2030},2677,2692,{"name":1849,"start":2032,"end":2033},4519,4534,{"name":1849,"start":2035,"end":2036},6511,6526,{"name":1849,"start":2038,"end":2039},11961,11976,{"name":1849,"start":2041,"end":2042},12315,12330,{"name":1849,"start":2044,"end":2045},12993,13008,{"name":1849,"start":2047,"end":2048},13121,13136,{"format":1812,"lines":611,"tokens":575,"copies":494,"first":2050,"others":2052},{"name":1849,"start":1850,"end":2051},2005,[2053,2056,2059,2062,2065,2068,2071,2074],{"name":1849,"start":2054,"end":2055},2545,2553,{"name":1849,"start":2057,"end":2058},2835,2843,{"name":1849,"start":2060,"end":2061},3547,3555,{"name":1849,"start":2063,"end":2064},6568,6576,{"name":1849,"start":2066,"end":2067},6928,6936,{"name":1849,"start":2069,"end":2070},7105,7113,{"name":1849,"start":2072,"end":2073},7356,7364,{"name":1849,"start":2075,"end":2076},7415,7423,{"format":377,"lines":2078,"tokens":2079,"copies":299,"first":2080,"others":2082},182,563,{"name":2081,"start":312,"end":2078},"agent-browser.schema.json",[2083],{"name":2084,"start":312,"end":2078},"docs\u002Fpublic\u002Fschema.json",{"format":1812,"lines":492,"tokens":1684,"copies":422,"first":2086,"others":2088},{"name":1849,"start":2087,"end":1978},2151,[2089,2091,2093,2095,2098,2101,2104,2107],{"name":1849,"start":2090,"end":1984},3290,{"name":1849,"start":2092,"end":1990},3775,{"name":1849,"start":2094,"end":1993},3843,{"name":1849,"start":2096,"end":2097},6143,6152,{"name":1849,"start":2099,"end":2100},6226,6234,{"name":1849,"start":2102,"end":2103},7482,7491,{"name":1849,"start":2105,"end":2106},7596,7605,{"name":1849,"start":2108,"end":2109},11064,11072,{"format":1812,"lines":385,"tokens":1493,"copies":255,"first":2111,"others":2113},{"name":1892,"start":1893,"end":2112},7176,[2114,2117,2120,2123,2126,2129,2132],{"name":1892,"start":2115,"end":2116},7403,7409,{"name":1892,"start":2118,"end":2119},7428,7434,{"name":1892,"start":2121,"end":2122},9084,9090,{"name":1892,"start":2124,"end":2125},9103,9109,{"name":1892,"start":2127,"end":2128},9122,9128,{"name":1892,"start":2130,"end":2131},9141,9147,{"name":1892,"start":2133,"end":2134},9187,9193,{"sources":2078,"lines":2136,"tokens":2137,"clones":2138,"duplicatedLines":2139,"duplicatedTokens":2140,"percentage":389,"percentageTokens":2141,"formats":2142,"topClones":2159,"generated":2287},154186,1063172,980,11053,72592,6.83,[2143,2149,2152,2155,2157,2158],{"format":1812,"sources":2144,"lines":2145,"clones":2146,"duplicatedLines":2147,"percentage":2148},105,141962,964,10805,7.61,{"format":370,"sources":554,"lines":2150,"clones":287,"duplicatedLines":827,"percentage":2151},5359,4.18,{"format":363,"sources":409,"lines":2153,"clones":417,"duplicatedLines":1015,"percentage":2154},5190,0.46,{"format":384,"sources":492,"lines":2156,"clones":714,"duplicatedLines":714,"percentage":714},1173,{"format":408,"sources":669,"lines":688,"clones":714,"duplicatedLines":714,"percentage":714},{"format":356,"sources":312,"lines":703,"clones":714,"duplicatedLines":714,"percentage":714},[2160,2175,2190,2203,2214,2222,2233,2244,2255,2265],{"format":1812,"lines":446,"tokens":1021,"copies":1232,"first":2161,"others":2162,"excerpt":2171,"excerptSecond":2173},{"name":1849,"start":1850,"end":1851},[2163,2164,2165,2166,2167,2168,2169,2170],{"name":1849,"start":1854,"end":1121},{"name":1849,"start":1856,"end":1857},{"name":1849,"start":1859,"end":1860},{"name":1849,"start":1862,"end":1863},{"name":1849,"start":1865,"end":1866},{"name":1849,"start":1868,"end":1869},{"name":1849,"start":1871,"end":1872},{"name":1849,"start":1874,"end":1875},{"lines":2172,"total":446},[1878,1879,441,1880,1881,1882,1883,1884,1885,441],{"lines":2174,"total":492},[1888,1879,1880,1881,1882,1883,1884,1885,1880,1889],{"format":1812,"lines":611,"tokens":403,"copies":415,"first":2176,"others":2177,"excerpt":2186,"excerptSecond":2188},{"name":1892,"start":1893,"end":1894},[2178,2179,2180,2181,2182,2183,2184,2185],{"name":1892,"start":1897,"end":1898},{"name":1892,"start":1900,"end":1901},{"name":1892,"start":1903,"end":1904},{"name":1892,"start":1906,"end":1907},{"name":1892,"start":1909,"end":1910},{"name":1892,"start":1912,"end":1913},{"name":1892,"start":1915,"end":1916},{"name":1892,"start":1918,"end":1919},{"lines":2187,"total":611},[1922,1923,1924,1925,1926,1927,1928,441,1929],{"lines":2189,"total":255},[1932,1923,1924,1925,1926,1927,1928,1933],{"format":1812,"lines":255,"tokens":644,"copies":494,"first":2191,"others":2192,"excerpt":2201},{"name":1849,"start":1936,"end":1937},[2193,2194,2195,2196,2197,2198,2199,2200],{"name":1849,"start":1940,"end":1941},{"name":1849,"start":1943,"end":1944},{"name":1849,"start":1946,"end":1947},{"name":1849,"start":1949,"end":1950},{"name":1849,"start":1952,"end":1953},{"name":1849,"start":1955,"end":1956},{"name":1849,"start":1958,"end":1959},{"name":1849,"start":1961,"end":1962},{"lines":2202,"total":255},[1965,1966,1967,1968,1969,1879,1970,1971],{"format":1812,"lines":422,"tokens":1497,"copies":553,"first":2204,"others":2205},{"name":1849,"start":1850,"end":1974},[2206,2207,2208,2209,2210,2211,2212,2213],{"name":1849,"start":1977,"end":1978},{"name":1849,"start":1980,"end":1981},{"name":1849,"start":1983,"end":1984},{"name":1849,"start":1986,"end":1987},{"name":1849,"start":1989,"end":1990},{"name":1849,"start":1992,"end":1993},{"name":1849,"start":1995,"end":1996},{"name":1849,"start":1998,"end":1999},{"format":1812,"lines":393,"tokens":2001,"copies":643,"first":2215,"others":2216},{"name":1849,"start":2003,"end":2004},[2217,2218,2219,2220,2221],{"name":1849,"start":2007,"end":2008},{"name":1849,"start":2010,"end":2011},{"name":1849,"start":2013,"end":2014},{"name":1849,"start":2016,"end":300},{"name":1849,"start":2018,"end":2019},{"format":1812,"lines":393,"tokens":2021,"copies":492,"first":2223,"others":2224},{"name":1849,"start":1850,"end":2023},[2225,2226,2227,2228,2229,2230,2231,2232],{"name":1849,"start":2026,"end":2027},{"name":1849,"start":2029,"end":2030},{"name":1849,"start":2032,"end":2033},{"name":1849,"start":2035,"end":2036},{"name":1849,"start":2038,"end":2039},{"name":1849,"start":2041,"end":2042},{"name":1849,"start":2044,"end":2045},{"name":1849,"start":2047,"end":2048},{"format":1812,"lines":611,"tokens":575,"copies":494,"first":2234,"others":2235},{"name":1849,"start":1850,"end":2051},[2236,2237,2238,2239,2240,2241,2242,2243],{"name":1849,"start":2054,"end":2055},{"name":1849,"start":2057,"end":2058},{"name":1849,"start":2060,"end":2061},{"name":1849,"start":2063,"end":2064},{"name":1849,"start":2066,"end":2067},{"name":1849,"start":2069,"end":2070},{"name":1849,"start":2072,"end":2073},{"name":1849,"start":2075,"end":2076},{"format":1812,"lines":492,"tokens":1684,"copies":422,"first":2245,"others":2246},{"name":1849,"start":2087,"end":1978},[2247,2248,2249,2250,2251,2252,2253,2254],{"name":1849,"start":2090,"end":1984},{"name":1849,"start":2092,"end":1990},{"name":1849,"start":2094,"end":1993},{"name":1849,"start":2096,"end":2097},{"name":1849,"start":2099,"end":2100},{"name":1849,"start":2102,"end":2103},{"name":1849,"start":2105,"end":2106},{"name":1849,"start":2108,"end":2109},{"format":1812,"lines":385,"tokens":1493,"copies":255,"first":2256,"others":2257},{"name":1892,"start":1893,"end":2112},[2258,2259,2260,2261,2262,2263,2264],{"name":1892,"start":2115,"end":2116},{"name":1892,"start":2118,"end":2119},{"name":1892,"start":2121,"end":2122},{"name":1892,"start":2124,"end":2125},{"name":1892,"start":2127,"end":2128},{"name":1892,"start":2130,"end":2131},{"name":1892,"start":2133,"end":2134},{"format":1812,"lines":255,"tokens":826,"copies":385,"first":2266,"others":2270},{"name":2267,"start":2268,"end":2269},"cli\u002Fsrc\u002Fcommands.rs",4331,4338,[2271,2274,2277,2279,2282,2284],{"name":2267,"start":2272,"end":2273},4344,4351,{"name":2267,"start":2275,"end":2276},4357,4364,{"name":2267,"start":2278,"end":901},4370,{"name":2267,"start":2280,"end":2281},4383,4390,{"name":2267,"start":2283,"end":698},4396,{"name":2267,"start":2285,"end":2286},4409,4416,{"files":714,"minified":714,"sample":2288},[],{"score":2290,"grade":2291,"size":2292,"dimensions":2294},42.4,"D",{"lines":2293,"files":697,"class":843},171390,[2295,2302,2307],{"id":846,"source":847,"value":2296,"adjusted":2297,"lines":2298,"halfLife":850,"formats":2299,"excluded":2300,"weight":312,"score":2301},6.9,6.8,11753,[1812,363,370,384,408,356],[855,414,856],57.3,{"id":859,"source":847,"value":611,"adjusted":2303,"lines":2304,"halfLife":862,"coverage":378,"weight":2305,"score":2306},8.6,2314,0.15,45.2,{"id":867,"source":847,"value":2308,"adjusted":2309,"lines":2310,"halfLife":572,"weight":312,"score":1281},85.1,84.4,145890,{"total":2312,"mean":1195,"files":2313},25753,[2314,2318,2322,2326,2331,2336,2341,2345,2350,2354],{"path":1892,"complexity":2315,"lines":2316,"bytes":2317},3453,23733,911704,{"path":2319,"complexity":2320,"lines":387,"bytes":2321},"cli\u002Fsrc\u002Fnative\u002Freact\u002FinstallHook.js",3040,182992,{"path":2267,"complexity":2323,"lines":2324,"bytes":2325},1302,7457,288151,{"path":2327,"complexity":2328,"lines":2329,"bytes":2330},"cli\u002Fsrc\u002Fmcp.rs",1126,6698,252938,{"path":2332,"complexity":2333,"lines":2334,"bytes":2335},"cli\u002Fsrc\u002Foutput.rs",1025,5563,216765,{"path":2337,"complexity":2338,"lines":2339,"bytes":2340},"cli\u002Fsrc\u002Fnative\u002Fflow\u002Fmod.rs",889,8916,327317,{"path":1849,"complexity":2342,"lines":2343,"bytes":2344},728,16994,576343,{"path":2346,"complexity":2347,"lines":2348,"bytes":2349},"cli\u002Fsrc\u002Fnative\u002Fbrowser.rs",685,5624,213654,{"path":2351,"complexity":1806,"lines":2352,"bytes":2353},"cli\u002Fsrc\u002Fmain.rs",3002,105901,{"path":2355,"complexity":2356,"lines":2357,"bytes":2358},"cli\u002Fsrc\u002Fnative\u002Frecording.rs",437,3382,124943,{"percentage":2360,"findings":588,"files":2361,"byCategory":2362,"largest":2368},9.03,240,[2363,2365,2366,2367],{"category":928,"count":2364},55,{"category":930,"count":545},{"category":932,"count":312},{"category":934,"count":255},[2369,2371,2374,2377,2380,2383,2385,2387,2389,2392],{"category":928,"path":2370,"name":441,"line":312,"lines":1303},"docs\u002Fscripts\u002Fcapture-docs-baseline.mjs",{"category":928,"path":2372,"name":441,"line":312,"lines":2373},"docs\u002Fsrc\u002Fcomponents\u002Fdiff-demo.tsx",282,{"category":928,"path":2375,"name":441,"line":312,"lines":2376},"docs\u002Fsrc\u002Fcomponents\u002Fsearch.tsx",277,{"category":928,"path":2378,"name":441,"line":312,"lines":2379},"packages\u002F@agent-browser\u002Feve\u002Fextension\u002Flib\u002Fsandbox.ts",216,{"category":928,"path":2381,"name":441,"line":312,"lines":2382},"packages\u002F@agent-browser\u002Feve\u002Fextension\u002Flib\u002Fbrowser.ts",190,{"category":928,"path":2384,"name":441,"line":312,"lines":1707},"docs\u002Fsrc\u002Fcomponents\u002Fheader.tsx",{"category":928,"path":2386,"name":441,"line":312,"lines":706},"docs\u002Fsrc\u002Fcomponents\u002Fdocs-mobile-nav.tsx",{"category":928,"path":2388,"name":441,"line":312,"lines":868},"docs\u002Fsrc\u002Fcomponents\u002Fcopy-page-button.tsx",{"category":928,"path":2390,"name":441,"line":312,"lines":2391},"cli\u002Fsrc\u002Fnative\u002Frecording-cursor.js",63,{"category":928,"path":2393,"name":441,"line":312,"lines":546},"docs\u002Fsrc\u002Fcomponents\u002Fdocs-sidebar.tsx",{"name":2395,"url":2396,"description":2397,"language":311,"stars":2398,"starsToday":1290,"defaultBranch":342,"headSha":2399,"durationMs":2400,"total":2401,"formats":2405,"topClones":2450,"code":2642,"health":2845,"complexity":2867,"deadCode":2917},"we-promise\u002Fsure","https:\u002F\u002Fgithub.com\u002Fwe-promise\u002Fsure","The personal finance app for everyone (by everyone)",13123,"a9aeefa73e14f6d6b0fa56567e98e43a8276b4f5",5028,{"sources":2402,"lines":314,"tokens":2403,"clones":313,"duplicatedLines":315,"duplicatedTokens":2404,"percentage":316,"percentageTokens":1619},6560,4779993,259720,[2406,2413,2419,2425,2431,2434,2438,2441,2444,2447],{"format":2407,"sources":2408,"lines":2409,"clones":2410,"duplicatedLines":2411,"percentage":2412},"ruby",2937,516357,1824,22902,4.44,{"format":2414,"sources":2415,"lines":2416,"clones":1824,"duplicatedLines":2417,"percentage":2418},"erb",815,49190,6967,14.16,{"format":397,"sources":2420,"lines":2421,"clones":2422,"duplicatedLines":2423,"percentage":2424},2268,239688,620,16941,7.07,{"format":2426,"sources":2427,"lines":2428,"clones":542,"duplicatedLines":2429,"percentage":2430},"dart",154,36710,872,2.38,{"format":384,"sources":394,"lines":2432,"clones":554,"duplicatedLines":2138,"percentage":2433},21843,4.49,{"format":855,"sources":561,"lines":2435,"clones":545,"duplicatedLines":2436,"percentage":2437},1294,415,32.07,{"format":402,"sources":868,"lines":2439,"clones":611,"duplicatedLines":1195,"percentage":2440},16337,0.53,{"format":377,"sources":1226,"lines":2442,"clones":299,"duplicatedLines":550,"percentage":2443},2125,1.98,{"format":408,"sources":1194,"lines":2445,"clones":312,"duplicatedLines":299,"percentage":2446},1832,0.11,{"format":391,"sources":446,"lines":2448,"clones":312,"duplicatedLines":611,"percentage":2449},1827,0.49,[2451,2470,2509,2545,2555,2571,2587,2607,2627,2635],{"format":384,"lines":805,"tokens":2452,"copies":299,"first":2453,"others":2457,"excerpt":2462},1493,{"name":2454,"start":2455,"end":2456},"app\u002Fjavascript\u002Fcontrollers\u002Fpreview_sankey_chart_controller.js",364,618,[2458],{"name":2459,"start":2460,"end":2461},"app\u002Fjavascript\u002Fcontrollers\u002Fsankey_chart_controller.js",303,557,{"lines":2463,"total":805},[2464,1224,441,2465,2466,2467,441,2468,2469,441],"  return `${this.gradientPrefix}-link-gradient-${link.source.index}-${link.target.index}-${index}`;","#colorWithOpacity(nodeColor, opacity = 0.1) {","  const defaultColor = this.constructor.DEFAULT_COLOR;","  let colorStr = nodeColor || defaultColor;","  \u002F\u002F Map CSS variables to hex values for d3 color manipulation","  colorStr = this.constructor.CSS_VAR_MAP[colorStr] || colorStr;",{"format":2407,"lines":611,"tokens":1312,"copies":418,"first":2471,"others":2473,"excerpt":2490,"excerptSecond":2501},{"name":2472,"start":426,"end":287},"spec\u002Frequests\u002Fapi\u002Fv1\u002Faccount_statements_spec.rb",[2474,2476,2478,2480,2482,2484,2486,2488],{"name":2475,"start":426,"end":1226},"spec\u002Frequests\u002Fapi\u002Fv1\u002Faccounts_spec.rb",{"name":2477,"start":426,"end":1226},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fbalance_sheet_spec.rb",{"name":2479,"start":426,"end":1226},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fbalances_spec.rb",{"name":2481,"start":426,"end":1226},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fbudget_categories_spec.rb",{"name":2483,"start":426,"end":1226},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fbudgets_spec.rb",{"name":2485,"start":426,"end":1226},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fcash_flow_spec.rb",{"name":2487,"start":426,"end":1226},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fcategories_spec.rb",{"name":2489,"start":426,"end":1226},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fchats_spec.rb",{"lines":2491,"total":611},[2492,2493,2494,2495,2496,2497,2498,2499,2500],"RSpec.describe 'API V1 Account Statements', type: :request do","  let(:family) do","    Family.create!(name: 'API Family', currency: 'USD', locale: 'en', date_format: '%m-%d-%Y')","  end","  let(:user) do","    family.users.create!(","      email: 'api-user@example.com',","      password: 'password123',","      password_confirmation: 'password123',",{"lines":2502,"total":378},[2503,2493,2504,2505,2506,2507,2508,1883,2495,441],"RSpec.describe 'API V1 Accounts', type: :request do","    Family.create!(","      name: 'API Family',","      currency: 'USD',","      locale: 'en',","      date_format: '%m-%d-%Y'",{"format":2407,"lines":422,"tokens":2510,"copies":492,"first":2511,"others":2514,"excerpt":2534},132,{"name":2512,"start":924,"end":2513},"test\u002Fmodels\u002Fkraken_item\u002Fimporter_test.rb",138,[2515,2518,2519,2521,2524,2526,2529,2532],{"name":2512,"start":2516,"end":2517},153,163,{"name":2512,"start":1157,"end":2382},{"name":2512,"start":2520,"end":1128},211,{"name":2512,"start":2522,"end":2523},239,249,{"name":2512,"start":2525,"end":1419},313,{"name":2512,"start":2527,"end":2528},376,386,{"name":2512,"start":2530,"end":2531},404,414,{"name":2512,"start":2533,"end":777},432,{"lines":2535,"total":422},[2536,2537,2538,2539,2540,2541,2542,2543,2539,2544],"@provider.stubs(:get_asset_info).returns(asset_metadata)","@provider.stubs(:get_extended_balance).returns(","  \"ZUSD\" => { \"balance\" => \"50.0\", \"credit\" => \"0\", \"credit_used\" => \"0\", \"hold_trade\" => \"0\" }",")","@provider.stubs(:get_earn_allocations).returns(","  \"items\" => [","    { \"native_asset\" => \"XXBT\", \"amount_allocated\" => { \"total\" => { \"native\" => \"2.0\" } } }","  ]","@provider.stubs(:get_ticker).with(\"XBTUSD\").returns(\"XXBTZUSD\" => { \"c\" => [ \"50000.00\" ] })",{"format":397,"lines":2546,"tokens":2547,"copies":417,"first":2548,"others":2550},133,524,{"name":2549,"start":299,"end":371},"config\u002Flocales\u002Fdefaults\u002Fes-AR.yml",[2551,2553],{"name":2552,"start":299,"end":371},"config\u002Flocales\u002Fdefaults\u002Fes-CR.yml",{"name":2554,"start":299,"end":371},"config\u002Flocales\u002Fdefaults\u002Fes-NI.yml",{"format":2407,"lines":1009,"tokens":1773,"copies":446,"first":2556,"others":2557},{"name":2475,"start":643,"end":568},[2558,2559,2560,2561,2563,2565,2567,2569],{"name":2477,"start":643,"end":568},{"name":2485,"start":643,"end":568},{"name":2487,"start":643,"end":568},{"name":2562,"start":643,"end":568},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fholdings_spec.rb",{"name":2564,"start":643,"end":568},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fmerchants_spec.rb",{"name":2566,"start":643,"end":568},"spec\u002Frequests\u002Fapi\u002Fv1\u002Frecurring_transactions_spec.rb",{"name":2568,"start":643,"end":568},"spec\u002Frequests\u002Fapi\u002Fv1\u002Ftags_spec.rb",{"name":2570,"start":643,"end":568},"spec\u002Frequests\u002Fapi\u002Fv1\u002Ftrades_spec.rb",{"format":2407,"lines":385,"tokens":999,"copies":393,"first":2572,"others":2574},{"name":2475,"start":706,"end":2573},88,[2575,2576,2577,2578,2579,2580,2583,2585],{"name":2479,"start":603,"end":1585},{"name":2481,"start":826,"end":1720},{"name":2483,"start":999,"end":411},{"name":2487,"start":331,"end":542},{"name":2562,"start":826,"end":1720},{"name":2581,"start":2582,"end":1773},"spec\u002Frequests\u002Fapi\u002Fv1\u002Fimports_spec.rb",89,{"name":2566,"start":2584,"end":644},78,{"name":2586,"start":1493,"end":706},"spec\u002Frequests\u002Fapi\u002Fv1\u002Frejected_transfers_spec.rb",{"format":2414,"lines":643,"tokens":562,"copies":1194,"first":2588,"others":2590},{"name":2589,"start":1232,"end":1356},"app\u002Fviews\u002Fakahu_items\u002F_akahu_item.html.erb",[2591,2593,2595,2597,2599,2601,2603,2605],{"name":2592,"start":285,"end":569},"app\u002Fviews\u002Fbrex_items\u002F_brex_item.html.erb",{"name":2594,"start":568,"end":373},"app\u002Fviews\u002Ffio_items\u002F_fio_item.html.erb",{"name":2596,"start":568,"end":373},"app\u002Fviews\u002Fibkr_items\u002F_ibkr_item.html.erb",{"name":2598,"start":568,"end":373},"app\u002Fviews\u002Findexa_capital_items\u002F_indexa_capital_item.html.erb",{"name":2600,"start":1232,"end":1356},"app\u002Fviews\u002Flunchflow_items\u002F_lunchflow_item.html.erb",{"name":2602,"start":1232,"end":1356},"app\u002Fviews\u002Fmercury_items\u002F_mercury_item.html.erb",{"name":2604,"start":1232,"end":1356},"app\u002Fviews\u002Fmonobank_items\u002F_monobank_item.html.erb",{"name":2606,"start":387,"end":1286},"app\u002Fviews\u002Fquestrade_items\u002F_questrade_item.html.erb",{"format":2414,"lines":385,"tokens":1684,"copies":1194,"first":2608,"others":2610},{"name":2609,"start":312,"end":385},"app\u002Fviews\u002Fakahu_items\u002Fselect_accounts.html.erb",[2611,2613,2615,2617,2619,2621,2623,2625],{"name":2612,"start":299,"end":385},"app\u002Fviews\u002Fbrex_items\u002F_api_error.html.erb",{"name":2614,"start":312,"end":643},"app\u002Fviews\u002Fbrex_items\u002F_setup_required.html.erb",{"name":2616,"start":312,"end":385},"app\u002Fviews\u002Fbrex_items\u002Fselect_accounts.html.erb",{"name":2618,"start":299,"end":385},"app\u002Fviews\u002Flunchflow_items\u002F_api_error.html.erb",{"name":2620,"start":312,"end":643},"app\u002Fviews\u002Flunchflow_items\u002F_setup_required.html.erb",{"name":2622,"start":312,"end":385},"app\u002Fviews\u002Flunchflow_items\u002Fselect_accounts.html.erb",{"name":2624,"start":312,"end":643},"app\u002Fviews\u002Fmercury_items\u002F_setup_required.html.erb",{"name":2626,"start":312,"end":385},"app\u002Fviews\u002Fmercury_items\u002Fselect_accounts.html.erb",{"format":397,"lines":2628,"tokens":2629,"copies":299,"first":2630,"others":2632},215,814,{"name":2631,"start":299,"end":2379},"config\u002Flocales\u002Fdefaults\u002Fel-CY.yml",[2633],{"name":2634,"start":299,"end":2379},"config\u002Flocales\u002Fdefaults\u002Fel.yml",{"format":397,"lines":2628,"tokens":2636,"copies":299,"first":2637,"others":2639},795,{"name":2638,"start":299,"end":2379},"config\u002Flocales\u002Fdefaults\u002Fen-AU.yml",[2640],{"name":2641,"start":299,"end":2379},"config\u002Flocales\u002Fdefaults\u002Fen-NZ.yml",{"sources":2643,"lines":2644,"tokens":2645,"clones":2646,"duplicatedLines":2647,"duplicatedTokens":2648,"percentage":417,"percentageTokens":2649,"formats":2650,"topClones":2676,"generated":2834},1960,277441,1292476,565,8323,43450,3.36,[2651,2657,2661,2665,2667,2669,2671,2674],{"format":2407,"sources":2652,"lines":2653,"clones":2654,"duplicatedLines":2655,"percentage":2656},1672,224983,476,6731,2.99,{"format":2426,"sources":1347,"lines":2658,"clones":1684,"duplicatedLines":2659,"percentage":2660},29574,646,2.18,{"format":384,"sources":1831,"lines":2662,"clones":380,"duplicatedLines":2663,"percentage":2664},19768,946,4.79,{"format":1812,"sources":446,"lines":2666,"clones":714,"duplicatedLines":714,"percentage":714},1364,{"format":408,"sources":426,"lines":2668,"clones":714,"duplicatedLines":714,"percentage":714},1243,{"format":370,"sources":426,"lines":2670,"clones":714,"duplicatedLines":714,"percentage":714},369,{"format":2672,"sources":299,"lines":2673,"clones":714,"duplicatedLines":714,"percentage":714},"groovy",127,{"format":2675,"sources":312,"lines":287,"clones":714,"duplicatedLines":714,"percentage":714},"swift",[2677,2683,2701,2731,2740,2751,2771,2783,2794,2814],{"format":384,"lines":805,"tokens":2452,"copies":299,"first":2678,"others":2679,"excerpt":2681},{"name":2454,"start":2455,"end":2456},[2680],{"name":2459,"start":2460,"end":2461},{"lines":2682,"total":805},[2464,1224,441,2465,2466,2467,441,2468,2469,441],{"format":2407,"lines":1312,"tokens":2684,"copies":417,"first":2685,"others":2687,"excerpt":2692},355,{"name":2686,"start":2582,"end":1596},"app\u002Fmodels\u002Ffio_item\u002Fsyncer.rb",[2688,2690],{"name":2689,"start":644,"end":1289},"app\u002Fmodels\u002Fmonobank_item\u002Fsyncer.rb",{"name":2691,"start":644,"end":1289},"app\u002Fmodels\u002Fup_item\u002Fsyncer.rb",{"lines":2693,"total":1312},[2694,2695,2696,441,2697,441,2698,2699,2700,441],"def perform_post_sync","  # no-op","end","private","  # Raise a SyncError if a single result hash indicates failure.","  def raise_if_failed_result!(result, stage:)","    return unless failed_result?(result)",{"format":2407,"lines":287,"tokens":2364,"copies":287,"first":2702,"others":2704,"excerpt":2721},{"name":2703,"start":492,"end":557},"app\u002Fmodels\u002Fbinance_item\u002Funlinking.rb",[2705,2707,2709,2711,2713,2715,2717,2719],{"name":2706,"start":378,"end":387},"app\u002Fmodels\u002Fcoinbase_item\u002Funlinking.rb",{"name":2708,"start":393,"end":1483},"app\u002Fmodels\u002Fcoinstats_item\u002Funlinking.rb",{"name":2710,"start":378,"end":387},"app\u002Fmodels\u002Ffio_item\u002Funlinking.rb",{"name":2712,"start":492,"end":557},"app\u002Fmodels\u002Fibkr_item\u002Funlinking.rb",{"name":2714,"start":378,"end":387},"app\u002Fmodels\u002Findexa_capital_item\u002Funlinking.rb",{"name":2716,"start":378,"end":387},"app\u002Fmodels\u002Fmercury_item\u002Funlinking.rb",{"name":2718,"start":378,"end":387},"app\u002Fmodels\u002Fquestrade_item\u002Funlinking.rb",{"name":2720,"start":378,"end":387},"app\u002Fmodels\u002Fredbark_item\u002Funlinking.rb",{"lines":2722,"total":287},[2723,2724,2725,2726,2727,2728,1224,2729,441,2730],"links = AccountProvider.where(provider_type: BinanceAccount.name, provider_id: provider_account.id).to_a","link_ids = links.map(&:id)","result = {","  provider_account_id: provider_account.id,","  name: provider_account.name,","  provider_link_ids: link_ids","results \u003C\u003C result","next if dry_run",{"format":2407,"lines":418,"tokens":738,"copies":643,"first":2732,"others":2733},{"name":2706,"start":378,"end":373},[2734,2735,2736,2737,2738],{"name":2708,"start":393,"end":935},{"name":2710,"start":378,"end":373},{"name":2714,"start":378,"end":373},{"name":2716,"start":378,"end":373},{"name":2739,"start":378,"end":373},"app\u002Fmodels\u002Fsnaptrade_item\u002Funlinking.rb",{"format":384,"lines":403,"tokens":2741,"copies":299,"first":2742,"others":2746},477,{"name":2743,"start":2744,"end":2745},"app\u002Fjavascript\u002Fcontrollers\u002Fmerchant_select_controller.js",274,350,[2747],{"name":2748,"start":2749,"end":2750},"app\u002Fjavascript\u002Fcontrollers\u002Ftag_select_controller.js",370,446,{"format":2407,"lines":643,"tokens":784,"copies":611,"first":2752,"others":2754},{"name":2753,"start":418,"end":545},"app\u002Fmodels\u002Fakahu_account.rb",[2755,2757,2759,2761,2763,2765,2767,2769],{"name":2756,"start":287,"end":415},"app\u002Fmodels\u002Fcoinbase_account.rb",{"name":2758,"start":409,"end":1281},"app\u002Fmodels\u002Ffio_account.rb",{"name":2760,"start":494,"end":1226},"app\u002Fmodels\u002Fibkr_account.rb",{"name":2762,"start":492,"end":378},"app\u002Fmodels\u002Findexa_capital_account.rb",{"name":2764,"start":568,"end":373},"app\u002Fmodels\u002Fmonobank_account.rb",{"name":2766,"start":378,"end":815},"app\u002Fmodels\u002Fsharesight_account.rb",{"name":2768,"start":287,"end":415},"app\u002Fmodels\u002Ftruelayer_account.rb",{"name":2770,"start":553,"end":409},"app\u002Fmodels\u002Fup_account.rb",{"format":2407,"lines":418,"tokens":1347,"copies":426,"first":2772,"others":2774},{"name":2773,"start":669,"end":1483},"db\u002Fmigrate\u002F20251126094446_create_enable_banking_items_and_accounts.rb",[2775,2777,2779,2781],{"name":2776,"start":669,"end":1483},"db\u002Fmigrate\u002F20251221060111_create_coinstats_items_and_accounts.rb",{"name":2778,"start":669,"end":1483},"db\u002Fmigrate\u002F20260109220800_create_sophtron_items_and_accounts.rb",{"name":2780,"start":669,"end":1483},"db\u002Fmigrate\u002F20260121101345_create_mercury_items_and_accounts.rb",{"name":2782,"start":643,"end":545},"db\u002Fmigrate\u002F20260205110328_create_indexa_capital_items_and_accounts.rb",{"format":2407,"lines":935,"tokens":2520,"copies":417,"first":2784,"others":2786},{"name":2785,"start":2684,"end":652},"app\u002Fcontrollers\u002Ffio_items_controller.rb",[2787,2790],{"name":2788,"start":2789,"end":1147},"app\u002Fcontrollers\u002Fmonobank_items_controller.rb",360,{"name":2791,"start":2792,"end":2793},"app\u002Fcontrollers\u002Fup_items_controller.rb",372,411,{"format":2407,"lines":418,"tokens":2391,"copies":385,"first":2795,"others":2799},{"name":2796,"start":2797,"end":2798},"app\u002Fmodels\u002Fprovider\u002Fcoinbase_adapter.rb",80,104,[2800,2803,2805,2807,2809,2812],{"name":2801,"start":1493,"end":2802},"app\u002Fmodels\u002Fprovider\u002Findexa_capital_adapter.rb",100,{"name":2804,"start":706,"end":1182},"app\u002Fmodels\u002Fprovider\u002Flunchflow_adapter.rb",{"name":2806,"start":2798,"end":924},"app\u002Fmodels\u002Fprovider\u002Fmercury_adapter.rb",{"name":2808,"start":1585,"end":1838},"app\u002Fmodels\u002Fprovider\u002Fquestrade_adapter.rb",{"name":2810,"start":1725,"end":2811},"app\u002Fmodels\u002Fprovider\u002Fredbark_adapter.rb",98,{"name":2813,"start":2584,"end":701},"app\u002Fmodels\u002Fprovider\u002Fsnaptrade_adapter.rb",{"format":2407,"lines":287,"tokens":2815,"copies":385,"first":2816,"others":2818},57,{"name":2817,"start":1725,"end":1707},"app\u002Fmodels\u002Fbrex_item.rb",[2819,2821,2823,2827,2829,2831],{"name":2820,"start":403,"end":2582},"app\u002Fmodels\u002Fcoinbase_item.rb",{"name":2822,"start":610,"end":403},"app\u002Fmodels\u002Fcoinstats_item.rb",{"name":2824,"start":2825,"end":2826},"app\u002Fmodels\u002Fenable_banking_item.rb",244,256,{"name":2828,"start":868,"end":405},"app\u002Fmodels\u002Findexa_capital_item.rb",{"name":2830,"start":1685,"end":2584},"app\u002Fmodels\u002Fmercury_item.rb",{"name":2832,"start":1773,"end":2833},"app\u002Fmodels\u002Fwise_item.rb",107,{"files":611,"minified":714,"sample":2835},[2836,2837,2838,2839,2840,2841,2842,2843,2844],"app\u002Fmodels\u002Ftransaction\u002Fgrouper\u002Fby_merchant_or_name.rb","bin\u002Ftokens.mjs","db\u002Fmigrate\u002F20251102143510_remove_duplicate_account_providers_index.rb","db\u002Fschema.rb","mobile\u002Fandroid\u002Fapp\u002Fsrc\u002Fmain\u002Fjava\u002Fio\u002Fflutter\u002Fplugins\u002FGeneratedPluginRegistrant.java","mobile\u002Fios\u002FRunner\u002FGeneratedPluginRegistrant.h","mobile\u002Fios\u002FRunner\u002FGeneratedPluginRegistrant.m","mobile\u002Flib\u002Ftheme\u002Fsure_tokens.dart","spec\u002Fspec_helper.rb",{"score":2846,"grade":839,"size":2847,"dimensions":2850,"skipped":2864},66.6,{"lines":2848,"files":2849,"class":843},577971,3285,[2851,2860],{"id":846,"source":847,"value":2852,"adjusted":2852,"lines":2853,"halfLife":850,"formats":2854,"excluded":2858,"weight":312,"score":2859},4.3,24746,[2407,2426,384,1812,408,370,2672,853,2855,2856,2857,2675],"objectivec","java","c-header",[855,414,856],70.5,{"id":867,"source":847,"value":2861,"adjusted":2861,"lines":2862,"halfLife":572,"weight":312,"score":2863},33.5,193611,62.9,[2865],{"id":859,"reason":2866},"the languages dead code reads are under 5% of the code",{"total":2868,"mean":2869,"files":2870},77430,23.6,[2871,2875,2880,2885,2890,2895,2899,2904,2909,2913],{"path":2872,"complexity":2873,"lines":830,"bytes":2874},"app\u002Fmodels\u002Fwise_item\u002Fimporter.rb",866,97127,{"path":2876,"complexity":2877,"lines":2878,"bytes":2879},"app\u002Fmodels\u002Ffamily\u002Fdata_importer.rb",578,1781,68470,{"path":2881,"complexity":2882,"lines":2883,"bytes":2884},"app\u002Fmodels\u002Fprovider\u002Ftrade_republic_client.rb",566,1940,80327,{"path":2886,"complexity":2887,"lines":2888,"bytes":2889},"app\u002Fmodels\u002Fsimplefin_item\u002Fimporter.rb",473,1556,68808,{"path":2891,"complexity":2892,"lines":2893,"bytes":2894},"app\u002Fmodels\u002Fgoal.rb",434,1492,66402,{"path":2896,"complexity":659,"lines":2897,"bytes":2898},"app\u002Fmodels\u002Ftrade_republic_account\u002Factivities_processor.rb",1077,45229,{"path":2900,"complexity":2901,"lines":2902,"bytes":2903},"app\u002Fcontrollers\u002Fsophtron_items_controller.rb",420,1222,44448,{"path":2905,"complexity":2906,"lines":2907,"bytes":2908},"app\u002Fmodels\u002Fuser.rb",419,1106,39896,{"path":2910,"complexity":1406,"lines":2911,"bytes":2912},"app\u002Fmodels\u002Fenable_banking_item\u002Fimporter.rb",1175,55255,{"path":2914,"complexity":449,"lines":2915,"bytes":2916},"app\u002Fmodels\u002Faccount\u002Fprovider_import_adapter.rb",1233,59378,{"percentage":2918,"findings":2919,"files":2920,"byCategory":2921,"largest":2924},74.58,140,181,[2922,2923],{"category":928,"count":668},{"category":930,"count":312},[2925,2926,2927,2929,2931,2933,2936,2937,2939,2942],{"category":928,"path":2454,"name":441,"line":312,"lines":1761},{"category":928,"path":2459,"name":441,"line":312,"lines":1307},{"category":928,"path":2928,"name":441,"line":312,"lines":1824},"app\u002Fjavascript\u002Fcontrollers\u002Fgoal_projection_chart_controller.js",{"category":928,"path":2930,"name":441,"line":312,"lines":463},"app\u002Fjavascript\u002Fcontrollers\u002Floan_payoff_chart_controller.js",{"category":928,"path":2748,"name":441,"line":312,"lines":2932},485,{"category":928,"path":2934,"name":441,"line":312,"lines":2935},"app\u002Fjavascript\u002Fcontrollers\u002Fselect_controller.js",413,{"category":928,"path":2743,"name":441,"line":312,"lines":648},{"category":928,"path":2938,"name":441,"line":312,"lines":2792},"app\u002Fjavascript\u002Fcontrollers\u002Fcategory_select_controller.js",{"category":928,"path":2940,"name":441,"line":312,"lines":2941},"app\u002Fjavascript\u002Fcontrollers\u002Fdonut_chart_controller.js",351,{"category":928,"path":2943,"name":441,"line":312,"lines":2944},"app\u002Fjavascript\u002Fcontrollers\u002Fspending_chart_controller.js",330,{"name":2946,"url":2947,"description":2948,"language":298,"stars":2102,"starsToday":2949,"defaultBranch":2950,"headSha":2951,"durationMs":2952,"total":2953,"formats":2962,"topClones":3000,"code":3113,"health":3229,"complexity":3249,"deadCode":3301},"homeassistant-ai\u002Fha-mcp","https:\u002F\u002Fgithub.com\u002Fhomeassistant-ai\u002Fha-mcp","Configure and automate Home Assistant with Claude, ChatGPT, and other AI assistants.",645,"master","59cec3e9faa54019fbf4ac6815826f6cdfc84208",5732,{"sources":2954,"lines":2955,"tokens":2956,"clones":2957,"duplicatedLines":2958,"duplicatedTokens":2959,"percentage":2960,"percentageTokens":2961},2324,891800,5008397,3145,59925,413091,6.72,8.25,[2963,2969,2975,2978,2981,2985,2989,2991,2993,2996],{"format":356,"sources":2964,"lines":2965,"clones":2966,"duplicatedLines":2967,"percentage":2968},1880,779780,2809,43853,5.62,{"format":397,"sources":2970,"lines":2971,"clones":2972,"duplicatedLines":2973,"percentage":2974},157,25302,213,6994,27.64,{"format":1187,"sources":446,"lines":2976,"clones":558,"duplicatedLines":374,"percentage":2977},2933,14.97,{"format":402,"sources":1493,"lines":2979,"clones":1286,"duplicatedLines":2119,"percentage":2980},28105,26.45,{"format":384,"sources":546,"lines":2982,"clones":545,"duplicatedLines":2983,"percentage":2984},16351,423,2.59,{"format":377,"sources":445,"lines":2986,"clones":643,"duplicatedLines":2987,"percentage":2988},28970,530,1.83,{"format":391,"sources":385,"lines":673,"clones":669,"duplicatedLines":550,"percentage":2990},2.44,{"format":370,"sources":422,"lines":2531,"clones":669,"duplicatedLines":1286,"percentage":2992},7.73,{"format":408,"sources":1281,"lines":2994,"clones":417,"duplicatedLines":393,"percentage":2995},1468,1.09,{"format":853,"sources":643,"lines":2997,"clones":417,"duplicatedLines":2998,"percentage":2999},286,60,20.98,[3001,3016,3038,3056,3065,3074,3083,3092,3100,3107],{"format":402,"lines":3002,"tokens":3003,"copies":299,"first":3004,"others":3006,"excerpt":3009},6730,90309,{"name":3005,"start":312,"end":3002},"CHANGELOG.md",[3007],{"name":3008,"start":312,"end":3002},"homeassistant-addon\u002FCHANGELOG.md",{"lines":3010,"total":3002},[3011,441,3012,441,441,3013,441,3014,441,3015],"# CHANGELOG","\u003C!-- version list -->","## v9.2.0 (2026-11-11)","### Added","- **helpers**: Answer helper flows on Core's own flow and send storage fields to Core as written",{"format":397,"lines":341,"tokens":3017,"copies":417,"first":3018,"others":3021,"excerpt":3026},3102,{"name":3019,"start":669,"end":3020},"homeassistant-addon-dev\u002Ftranslations\u002Fen.yaml",281,[3022,3024],{"name":3023,"start":669,"end":3020},"homeassistant-addon-dev\u002Ftranslations\u002Fsr-Latn.yaml",{"name":3025,"start":669,"end":3020},"homeassistant-addon-dev\u002Ftranslations\u002Fsr.yaml",{"lines":3027,"total":341},[3028,3029,3030,3031,3032,3033,3034,3035,3036,3037],"# backup.fields.*, addon_dev.*); regenerate with: python scripts\u002Fgenerate_locales.py","configuration:","  verify_ssl:","    name: Verify TLS certificates","    description: 'Verify the Home Assistant server''s TLS certificate. Turn this off","      only on a trusted network, for a self-signed certificate or a hostname mismatch:","      it weakens transport security.'","  ha_tool_concurrency:","    name: Home Assistant tool concurrency","    description: Optional limit on outer Home Assistant tool calls across all sessions.",{"format":356,"lines":3039,"tokens":3040,"copies":299,"first":3041,"others":3043,"excerpt":3046},714,4040,{"name":3042,"start":312,"end":3039},"homeassistant-addon-webhook-proxy-dev\u002Fmcp_proxy_dev\u002Foauth_indirect.py",[3044],{"name":3045,"start":312,"end":3039},"homeassistant-addon-webhook-proxy\u002Fmcp_proxy\u002Foauth_indirect.py",{"lines":3047,"total":3039},[3048,441,3049,3050,3051,3052,441,3053,3054,3055],"\"\"\"ha_auth-mode OAuth indirection in front of Home Assistant core.","The proxy-owned authorize and token routes keep client endpoint caches stable","while Home Assistant core remains the authorization server. This module also","validates cross-origin Client ID Metadata Documents before translating their","client identities into the same-origin form accepted by core.","MIRROR: this module is the near-verbatim twin of","``custom_components\u002Fha_mcp_tools\u002Foauth_ha_auth.py``. Keep behavioural changes","on the two sides in step. This pair has exactly TWO intended deltas. The",{"format":397,"lines":781,"tokens":3057,"copies":417,"first":3058,"others":3060},1914,{"name":3059,"start":669,"end":1157},"homeassistant-addon\u002Ftranslations\u002Fen.yaml",[3061,3063],{"name":3062,"start":669,"end":1157},"homeassistant-addon\u002Ftranslations\u002Fsr-Latn.yaml",{"name":3064,"start":669,"end":1157},"homeassistant-addon\u002Ftranslations\u002Fsr.yaml",{"format":402,"lines":3066,"tokens":3067,"copies":299,"first":3068,"others":3071},171,3118,{"name":3069,"start":553,"end":3070},"homeassistant-addon-webhook-proxy-dev\u002FDOCS.md",191,[3072],{"name":3073,"start":815,"end":2382},"homeassistant-addon-webhook-proxy\u002FDOCS.md",{"format":356,"lines":960,"tokens":3075,"copies":299,"first":3076,"others":3080},2058,{"name":3077,"start":3078,"end":3079},"homeassistant-addon-webhook-proxy-dev\u002Fmcp_proxy_dev\u002Foauth.py",396,756,[3081],{"name":3082,"start":3078,"end":3079},"homeassistant-addon-webhook-proxy\u002Fmcp_proxy\u002Foauth.py",{"format":356,"lines":3084,"tokens":3085,"copies":299,"first":3086,"others":3089},333,2050,{"name":3087,"start":3088,"end":578},"homeassistant-addon-webhook-proxy-dev\u002Fmcp_proxy_dev\u002Foauth_autoapprove.py",269,[3090],{"name":3091,"start":3088,"end":578},"homeassistant-addon-webhook-proxy\u002Fmcp_proxy\u002Foauth_autoapprove.py",{"format":356,"lines":3078,"tokens":3093,"copies":299,"first":3094,"others":3097},2010,{"name":3095,"start":2944,"end":3096},"homeassistant-addon-webhook-proxy-dev\u002Fstart.py",725,[3098],{"name":3099,"start":2944,"end":3096},"homeassistant-addon-webhook-proxy\u002Fstart.py",{"format":855,"lines":1720,"tokens":3101,"copies":299,"first":3102,"others":3104},1789,{"name":3103,"start":312,"end":1720},"site\u002Fpublic\u002Ffavicon.svg",[3105],{"name":3106,"start":312,"end":1720},"site\u002Fpublic\u002Ficon.svg",{"format":356,"lines":3108,"tokens":3109,"copies":299,"first":3110,"others":3111},267,1724,{"name":3087,"start":312,"end":3108},[3112],{"name":3091,"start":312,"end":3108},{"sources":3114,"lines":3115,"tokens":3116,"clones":3117,"duplicatedLines":3118,"duplicatedTokens":3119,"percentage":3120,"percentageTokens":3121,"formats":3122,"topClones":3140,"generated":3224},916,353218,1905597,948,19524,118567,5.53,6.22,[3123,3129,3130,3133,3134,3136,3138,3139],{"format":356,"sources":3124,"lines":3125,"clones":3126,"duplicatedLines":3127,"percentage":3128},843,334469,892,18761,5.61,{"format":1187,"sources":446,"lines":2976,"clones":558,"duplicatedLines":374,"percentage":2977},{"format":384,"sources":387,"lines":3131,"clones":446,"duplicatedLines":1442,"percentage":3132},10435,2.47,{"format":370,"sources":422,"lines":2531,"clones":669,"duplicatedLines":1286,"percentage":2992},{"format":391,"sources":426,"lines":2376,"clones":417,"duplicatedLines":568,"percentage":3135},12.27,{"format":1191,"sources":446,"lines":3137,"clones":714,"duplicatedLines":714,"percentage":714},3917,{"format":408,"sources":426,"lines":1439,"clones":714,"duplicatedLines":714,"percentage":714},{"format":716,"sources":312,"lines":364,"clones":714,"duplicatedLines":714,"percentage":714},[3141,3147,3163,3178,3182,3186,3193,3198,3207,3217],{"format":356,"lines":3039,"tokens":3040,"copies":299,"first":3142,"others":3143,"excerpt":3145},{"name":3042,"start":312,"end":3039},[3144],{"name":3045,"start":312,"end":3039},{"lines":3146,"total":3039},[3048,441,3049,3050,3051,3052,441,3053,3054,3055],{"format":356,"lines":960,"tokens":3075,"copies":299,"first":3148,"others":3149,"excerpt":3151},{"name":3077,"start":3078,"end":3079},[3150],{"name":3082,"start":3078,"end":3079},{"lines":3152,"total":960},[3153,3154,3155,3156,3157,3158,3159,3160,3161,3162],"HEARTBEAT_FILE = Path(\"\u002Fconfig\u002F.mcp_proxy_dev_heartbeat\")","_HEARTBEAT_MAX_AGE = 90.0  # three missed 30-second touches","# Only the NEGATIVE verdict is cached (#2218 review): a clean shutdown deletes","# the heartbeat file but cannot clear a cache in the integration process, so a","# cached True would keep the surface serving after the stop. A fresh stat per","# request while alive is microseconds in the executor; the cache exists so an","# anonymous flood against a STOPPED install does not stat per request.","#","# The lease MUST stay shorter than start.py's `_probe_oauth_active` delay","# (2 s between 3 attempts): that probe drives a DESTRUCTIVE path — it tears",{"format":356,"lines":3084,"tokens":3085,"copies":299,"first":3164,"others":3165,"excerpt":3167},{"name":3087,"start":3088,"end":578},[3166],{"name":3091,"start":3088,"end":578},{"lines":3168,"total":3084},[3169,3170,3171,441,3172,3173,3174,3175,3176,3177],"def __init__(self, hass: HomeAssistant) -> None:","    \"\"\"Bind the view to the HA instance; liveness is resolved per request.\"\"\"","    self._hass = hass","async def get(self, request: web.Request) -> web.Response:","    \"\"\"Dispatch an authorization request to the currently active mode.\"\"\"","    if not await _addon_alive(self._hass):","        return _json_not_found()","    data = _domain_data(self._hass)","    if data is None:",{"format":356,"lines":3078,"tokens":3093,"copies":299,"first":3179,"others":3180},{"name":3095,"start":2944,"end":3096},[3181],{"name":3099,"start":2944,"end":3096},{"format":356,"lines":3108,"tokens":3109,"copies":299,"first":3183,"others":3184},{"name":3087,"start":312,"end":3108},[3185],{"name":3091,"start":312,"end":3108},{"format":356,"lines":1760,"tokens":3187,"copies":299,"first":3188,"others":3191},1671,{"name":3077,"start":3189,"end":3190},901,1141,[3192],{"name":3082,"start":3189,"end":3190},{"format":356,"lines":688,"tokens":3194,"copies":299,"first":3195,"others":3196},1590,{"name":3077,"start":868,"end":3078},[3197],{"name":3082,"start":868,"end":3078},{"format":356,"lines":2673,"tokens":3199,"copies":417,"first":3200,"others":3202},770,{"name":3201,"start":312,"end":2673},"custom_components\u002Fha_mcp_tools\u002Freadonly_webhook.py",[3203,3205],{"name":3204,"start":312,"end":2673},"homeassistant-addon-webhook-proxy-dev\u002Fmcp_proxy_dev\u002Freadonly_webhook.py",{"name":3206,"start":312,"end":2673},"homeassistant-addon-webhook-proxy\u002Fmcp_proxy\u002Freadonly_webhook.py",{"format":356,"lines":3208,"tokens":3209,"copies":299,"first":3210,"others":3214},291,1365,{"name":3211,"start":3212,"end":3213},"homeassistant-addon-webhook-proxy-dev\u002Fmcp_proxy_dev\u002F__init__.py",856,1146,[3215],{"name":3216,"start":3212,"end":3213},"homeassistant-addon-webhook-proxy\u002Fmcp_proxy\u002F__init__.py",{"format":356,"lines":3218,"tokens":3219,"copies":299,"first":3220,"others":3222},202,1288,{"name":3087,"start":1439,"end":3221},804,[3223],{"name":3091,"start":1439,"end":3221},{"files":417,"minified":714,"sample":3225},[3226,3227,3228],"src\u002Fha_mcp\u002F_vendor\u002Fmcp_types\u002F_v2025_11_25\u002F__init__.py","src\u002Fha_mcp\u002F_vendor\u002Fmcp_types\u002F_v2026_07_28\u002F__init__.py","src\u002Fha_mcp\u002Fsettings_ui\u002Fsettings_js\u002F05_feature_flags.js",{"score":3230,"grade":2291,"size":3231,"dimensions":3233},48.9,{"lines":3232,"files":2883,"class":843},800705,[3234,3240,3244],{"id":846,"source":847,"value":3235,"adjusted":3235,"lines":3236,"halfLife":850,"formats":3237,"excluded":3238,"weight":312,"score":3239},5.5,44368,[356,384,1191,408,853,370,716],[855,414,856],63.7,{"id":859,"source":847,"value":3241,"adjusted":3241,"lines":3242,"halfLife":862,"coverage":2802,"weight":312,"score":3243},9.3,74202,42.5,{"id":867,"source":847,"value":3245,"adjusted":3246,"lines":3247,"halfLife":572,"weight":312,"score":3248},60.8,60.7,486836,43.1,{"total":3250,"mean":3251,"files":3252},81701,42.1,[3253,3258,3263,3268,3273,3277,3282,3287,3292,3297],{"path":3254,"complexity":3255,"lines":3256,"bytes":3257},"src\u002Fha_mcp\u002Fbackup_manager.py",625,3565,150351,{"path":3259,"complexity":3260,"lines":3261,"bytes":3262},"tests\u002Faddon\u002Ftest_webhook_proxy.py",570,7197,316782,{"path":3264,"complexity":3265,"lines":3266,"bytes":3267},"src\u002Fha_mcp\u002Ftools\u002Ftools_addons.py",504,4038,158545,{"path":3269,"complexity":3270,"lines":3271,"bytes":3272},"custom_components\u002Fha_mcp_tools\u002F__init__.py",488,3564,144712,{"path":3274,"complexity":2436,"lines":3275,"bytes":3276},"src\u002Fha_mcp\u002Ftools\u002Ftools_config_dashboards.py",3755,157061,{"path":3278,"complexity":3279,"lines":3280,"bytes":3281},"tests\u002Fsrc\u002Funit\u002Ftest_tools_addons.py",381,6888,266530,{"path":3283,"complexity":3284,"lines":3285,"bytes":3286},"tests\u002Finitial_test_state\u002Fcustom_components\u002Fhacs\u002Frepositories\u002Fbase.py",337,1453,54662,{"path":3288,"complexity":3289,"lines":3290,"bytes":3291},"src\u002Fha_mcp\u002F_vendor\u002Ffastmcp\u002Fserver\u002Fserver.py",317,2595,108208,{"path":3293,"complexity":3294,"lines":3295,"bytes":3296},"src\u002Fha_mcp\u002Fclient\u002Frest_client.py",304,2538,112924,{"path":3298,"complexity":3299,"lines":2060,"bytes":3300},"tests\u002Fsrc\u002Funit\u002Ftest_backup_manager.py",292,145860,{"percentage":3302,"findings":1592,"files":3303,"byCategory":3304,"largest":3309},9.27,2048,[3305,3306,3307,3308],{"category":928,"count":3066},{"category":930,"count":1286},{"category":932,"count":738},{"category":934,"count":287},[3310,3313,3316,3319,3322,3325,3328,3331,3334,3337],{"category":928,"path":3311,"name":441,"line":312,"lines":3312},"src\u002Fha_mcp\u002Ftools\u002Ftools_entities.py",2158,{"category":928,"path":3314,"name":441,"line":312,"lines":3315},"src\u002Fha_mcp\u002Ftools\u002Ftools_system.py",1933,{"category":928,"path":3317,"name":441,"line":312,"lines":3318},"src\u002Fha_mcp\u002Ftools\u002Ftools_config_automations.py",1668,{"category":928,"path":3320,"name":441,"line":312,"lines":3321},"src\u002Fha_mcp\u002Ftools\u002Ftools_config_scenes.py",1456,{"category":928,"path":3323,"name":441,"line":312,"lines":3324},"src\u002Fha_mcp\u002Ftools\u002Ftools_config_scripts.py",1154,{"category":928,"path":3326,"name":441,"line":312,"lines":3327},"src\u002Fha_mcp\u002Ftools\u002Ftools_registry.py",1117,{"category":928,"path":3329,"name":441,"line":312,"lines":3330},"src\u002Fha_mcp\u002F_vendor\u002Fwebsockets\u002Fsync\u002Fclient.py",1116,{"category":928,"path":3332,"name":441,"line":312,"lines":3333},"src\u002Fha_mcp\u002Ftools\u002Ftools_history.py",1100,{"category":928,"path":3335,"name":441,"line":312,"lines":3336},"src\u002Fha_mcp\u002Ftools\u002Ftools_updates.py",1083,{"category":928,"path":3338,"name":441,"line":312,"lines":3339},"src\u002Fha_mcp\u002Ftools\u002Ftools_hacs.py",999,{"name":271,"url":3341,"description":3342,"language":305,"stars":3343,"starsToday":575,"defaultBranch":342,"headSha":3344,"durationMs":3345,"total":3346,"formats":3353,"topClones":3386,"code":3546,"health":3663,"complexity":3686,"deadCode":3738},"https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex-security","OpenAI's Codex Security CLI and TypeScript SDK for finding, validating, and fixing security vulnerabilities. npm: https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@openai\u002Fcodex-security",11883,"2911786f243f08fd61ad854f5c527e7b0c404ccc",3675,{"sources":3347,"lines":3348,"tokens":3349,"clones":272,"duplicatedLines":3350,"duplicatedTokens":3351,"percentage":273,"percentageTokens":3352},1529,608712,3837487,11218,73063,1.9,[3354,3359,3364,3367,3370,3373,3376,3379,3382,3384],{"format":370,"sources":3355,"lines":3356,"clones":2636,"duplicatedLines":3357,"percentage":3358},893,446320,8544,1.91,{"format":356,"sources":3360,"lines":3361,"clones":1157,"duplicatedLines":3362,"percentage":3363},158,102601,1704,1.66,{"format":397,"sources":1725,"lines":3365,"clones":378,"duplicatedLines":816,"percentage":3366},7628,3.02,{"format":377,"sources":2998,"lines":3368,"clones":422,"duplicatedLines":777,"percentage":3369},9567,4.62,{"format":855,"sources":417,"lines":3371,"clones":611,"duplicatedLines":364,"percentage":3372},962,17.67,{"format":384,"sources":2144,"lines":3374,"clones":385,"duplicatedLines":2815,"percentage":3375},16982,0.34,{"format":402,"sources":2919,"lines":3377,"clones":643,"duplicatedLines":1684,"percentage":3378},17640,0.31,{"format":3380,"sources":669,"lines":1707,"clones":312,"duplicatedLines":1194,"percentage":3381},"txt",19.77,{"format":1812,"sources":255,"lines":3383,"clones":714,"duplicatedLines":714,"percentage":714},2745,{"format":408,"sources":784,"lines":3385,"clones":714,"duplicatedLines":714,"percentage":714},1850,[3387,3406,3426,3468,3475,3483,3512,3521,3527,3533],{"format":370,"lines":2892,"tokens":3388,"copies":299,"first":3389,"others":3391,"excerpt":3394},1971,{"name":3390,"start":417,"end":660},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fmodels.ts",[3392],{"name":3393,"start":417,"end":660},"sdk\u002Ftypescript\u002Fsrc\u002Fmodels.ts",{"lines":3395,"total":2892},[3396,3397,3398,3399,3400,3401,3402,3403,3404,3405],"export interface ScanManifest {","  documentType: \"codex-security.scan-manifest\";","  schemaVersion: \"1.0\";","  scan: {","    id: string;","    producer: {","      name: string;","      version: string;","      [k: string]: unknown;","    };",{"format":377,"lines":3407,"tokens":3408,"copies":299,"first":3409,"others":3411,"excerpt":3414},226,799,{"name":3410,"start":312,"end":3407},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fdeep-scan\u002Fproject-config.schema.json",[3412],{"name":3413,"start":312,"end":3407},"sdk\u002Ftypescript\u002Fschemas\u002Fproject-config.schema.json",{"lines":3415,"total":3407},[3416,3417,3418,3419,3420,3421,3422,3423,3424,3425],"{","  \"$schema\": \"http:\u002F\u002Fjson-schema.org\u002Fdraft-07\u002Fschema#\",","  \"type\": \"object\",","  \"properties\": {","    \"$schema\": {","      \"description\": \"Editor schema URI or relative path. The CLI does not fetch or select a validator from this value.\",","      \"type\": \"string\",","      \"minLength\": 1","    },","    \"auth\": {",{"format":370,"lines":492,"tokens":2998,"copies":446,"first":3427,"others":3431,"excerpt":3456},{"name":3428,"start":3429,"end":3430},"sdk\u002Ftypescript\u002Ftests-ts\u002Fapi.test.ts",5945,5954,[3432,3435,3438,3441,3444,3447,3450,3453],{"name":3428,"start":3433,"end":3434},6253,6262,{"name":3428,"start":3436,"end":3437},6351,6360,{"name":3428,"start":3439,"end":3440},6693,6702,{"name":3428,"start":3442,"end":3443},6797,6806,{"name":3428,"start":3445,"end":3446},7222,7231,{"name":3428,"start":3448,"end":3449},7330,7339,{"name":3428,"start":3451,"end":3452},7444,7453,{"name":3428,"start":3454,"end":3455},8695,8704,{"lines":3457,"total":492},[3458,3459,3460,3461,3462,3463,3464,3465,3466,3467],"      pollAllowed.resolve();","    }","    return { events: completedEvents(\"thread-1\", events()) };","  }),","});","\u002F\u002F The fake stream has no process handle to keep the unref'ed poll alive.","const keepAlive = setInterval(() => {}, 1_000);","try {","  await client.run(repository, {","    onProgress: (update) => updates.push(update),",{"format":397,"lines":1707,"tokens":3469,"copies":299,"first":3470,"others":3472},643,{"name":3471,"start":1591,"end":2528},"github-action\u002FREADME.md",[3473],{"name":3474,"start":312,"end":1707},"github-action\u002Fexamples\u002Fpull-request.yml",{"format":855,"lines":568,"tokens":3476,"copies":299,"first":3477,"others":3479},580,{"name":3478,"start":2517,"end":1313},"plugins\u002Fcodex-security\u002Fskills\u002Fthreat-model-visualize\u002Fassets\u002Fcontext-reference-overview.svg",[3480],{"name":3481,"start":820,"end":3482},"plugins\u002Fcodex-security\u002Fskills\u002Fthreat-model-visualize\u002Fassets\u002Fcontext-reference-path.svg",280,{"format":370,"lines":492,"tokens":999,"copies":492,"first":3484,"others":3487},{"name":3428,"start":3485,"end":3486},7332,7341,[3488,3491,3494,3497,3500,3503,3506,3509],{"name":3428,"start":3489,"end":3490},7446,7455,{"name":3428,"start":3492,"end":3493},7583,7592,{"name":3428,"start":3495,"end":3496},7875,7884,{"name":3428,"start":3498,"end":3499},8027,8035,{"name":3428,"start":3501,"end":3502},8697,8706,{"name":3428,"start":3504,"end":3505},8896,8905,{"name":3428,"start":3507,"end":3508},9029,9038,{"name":3428,"start":3510,"end":3511},13211,13220,{"format":370,"lines":3513,"tokens":3514,"copies":299,"first":3515,"others":3517},110,522,{"name":3516,"start":312,"end":3513},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fcontract-values.ts",[3518],{"name":3519,"start":299,"end":3520},"sdk\u002Ftypescript\u002Fsrc\u002Fcontract-values.ts",111,{"format":855,"lines":415,"tokens":3514,"copies":299,"first":3522,"others":3524},{"name":3478,"start":3523,"end":1016},197,[3525],{"name":3481,"start":3020,"end":3526},298,{"format":855,"lines":557,"tokens":657,"copies":299,"first":3528,"others":3530},{"name":3478,"start":2628,"end":3529},236,[3531],{"name":3481,"start":1118,"end":3532},320,{"format":370,"lines":422,"tokens":1497,"copies":255,"first":3534,"others":3536},{"name":3428,"start":2008,"end":3535},5101,[3537,3538,3539,3540,3541,3542,3543],{"name":3428,"start":3485,"end":3486},{"name":3428,"start":3489,"end":3490},{"name":3428,"start":3492,"end":3493},{"name":3428,"start":3495,"end":3496},{"name":3428,"start":3498,"end":3499},{"name":3428,"start":3501,"end":3502},{"name":3428,"start":3544,"end":3545},13526,13534,{"sources":2882,"lines":3547,"tokens":3548,"clones":285,"duplicatedLines":3549,"duplicatedTokens":3550,"percentage":286,"percentageTokens":3551,"formats":3552,"topClones":3570,"generated":3661},186180,1089064,1023,5501,0.51,[3553,3557,3560,3563,3565,3567,3569],{"format":370,"sources":1534,"lines":3554,"clones":387,"duplicatedLines":3555,"percentage":3556},138123,874,0.63,{"format":356,"sources":1497,"lines":3558,"clones":287,"duplicatedLines":3559,"percentage":3375},34188,115,{"format":384,"sources":2815,"lines":3561,"clones":669,"duplicatedLines":568,"percentage":3562},9846,0.35,{"format":1812,"sources":385,"lines":3564,"clones":714,"duplicatedLines":714,"percentage":714},2194,{"format":408,"sources":415,"lines":3566,"clones":714,"duplicatedLines":714,"percentage":714},1054,{"format":363,"sources":312,"lines":3568,"clones":714,"duplicatedLines":714,"percentage":714},768,{"format":716,"sources":312,"lines":385,"clones":714,"duplicatedLines":714,"percentage":714},[3571,3577,3592,3608,3614,3621,3628,3635,3644,3653],{"format":370,"lines":2892,"tokens":3388,"copies":299,"first":3572,"others":3573,"excerpt":3575},{"name":3390,"start":417,"end":660},[3574],{"name":3393,"start":417,"end":660},{"lines":3576,"total":2892},[3396,3397,3398,3399,3400,3401,3402,3403,3404,3405],{"format":370,"lines":3513,"tokens":3514,"copies":299,"first":3578,"others":3579,"excerpt":3581},{"name":3516,"start":312,"end":3513},[3580],{"name":3519,"start":299,"end":3520},{"lines":3582,"total":3513},[3583,3584,3585,3586,441,3587,3588,3589,3590,3591],"import { hash } from \"node:crypto\";","import { isAbsolute, posix } from \"node:path\";","import type { Finding } from \".\u002Fmodels.js\";","import { isWindowsUnsafePathComponent } from \".\u002Fwindows-path.js\";","export class SealedContractError extends Error {","  constructor(message: string, options?: ErrorOptions) {","    super(message, options);","    this.name = new.target.name;","  }",{"format":370,"lines":1684,"tokens":1588,"copies":299,"first":3593,"others":3595,"excerpt":3598},{"name":3594,"start":312,"end":1684},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fwindows-path.ts",[3596],{"name":3597,"start":299,"end":2364},"sdk\u002Ftypescript\u002Fsrc\u002Fwindows-path.ts",{"lines":3599,"total":1684},[3600,441,3601,3602,441,3603,3604,3605,3606,3607],"import { parse, toNamespacedPath } from \"node:path\";","\u002F\u002F SQLite's default win32 VFS allows MAX_PATH * 4 UTF-8 bytes, including room for \"-journal\".","const SQLITE_WINDOWS_MAX_FILENAME_BYTES = 260 * 4 - 8;","export function sqliteFilename(path: string): string {","  \u002F\u002F Ordinary paths also preserve Win32 handling of device names and trailing spaces or dots.","  if (","    process.platform !== \"win32\" ||","    path.length + 8 \u003C 260 ||",{"format":370,"lines":565,"tokens":607,"copies":299,"first":3609,"others":3611},{"name":3610,"start":312,"end":565},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fexecutable-path.ts",[3612],{"name":3613,"start":299,"end":1738},"sdk\u002Ftypescript\u002Fsrc\u002Fexecutable-path.ts",{"format":370,"lines":1015,"tokens":3615,"copies":299,"first":3616,"others":3618},184,{"name":3617,"start":312,"end":1015},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fworkbench-arguments.ts",[3619],{"name":3620,"start":299,"end":418},"sdk\u002Ftypescript\u002Fsrc\u002Fworkbench-arguments.ts",{"format":370,"lines":446,"tokens":2815,"copies":417,"first":3622,"others":3623},{"name":3390,"start":1016,"end":762},[3624,3626],{"name":3390,"start":3407,"end":3625},237,{"name":3390,"start":3627,"end":2523},238,{"format":370,"lines":387,"tokens":3629,"copies":299,"first":3630,"others":3632},109,{"name":3631,"start":299,"end":1483},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fdeep-scan-settings.ts",[3633],{"name":3634,"start":446,"end":1356},"sdk\u002Ftypescript\u002Fsrc\u002Fdeep-scan-defaults.ts",{"format":356,"lines":611,"tokens":1720,"copies":299,"first":3636,"others":3640},{"name":3637,"start":3638,"end":3639},"plugins\u002Fcodex-security\u002Fscripts\u002Fworkbench_db.py",1991,1999,[3641],{"name":3637,"start":3642,"end":3643},2079,2087,{"format":356,"lines":255,"tokens":1720,"copies":299,"first":3645,"others":3649},{"name":3646,"start":3647,"end":3648},"plugins\u002Fcodex-security\u002Fscripts\u002Fworkbench_scan_history.py",789,796,[3650],{"name":3646,"start":3651,"end":3652},969,976,{"format":370,"lines":255,"tokens":868,"copies":299,"first":3654,"others":3657},{"name":3655,"start":1160,"end":3656},"evals\u002Ftriage-finding\u002Fscripts\u002Ftest-triage-provider.mts",1204,[3658],{"name":3655,"start":3659,"end":3660},1419,1426,{"files":714,"minified":714,"sample":3662},[],{"score":2998,"grade":839,"size":3664,"dimensions":3667},{"lines":3665,"files":3666,"class":843},570210,1174,[3668,3675,3681],{"id":846,"source":847,"value":3669,"adjusted":3669,"lines":3670,"halfLife":850,"formats":3671,"excluded":3673,"weight":312,"score":3674},1.8,10305,[370,356,384,1812,408,363,716,853,3672],"batch",[855,414,856],86.3,{"id":859,"source":847,"value":3676,"adjusted":3676,"lines":3677,"halfLife":862,"coverage":3678,"weight":3679,"score":3680},3.3,18941,99.3,0.993,73.4,{"id":867,"source":847,"value":3682,"adjusted":3683,"lines":3684,"halfLife":572,"weight":312,"score":3685},77.7,77.5,443133,34.1,{"total":3687,"mean":3688,"files":3689},80324,68.4,[3690,3695,3699,3704,3709,3714,3719,3724,3729,3734],{"path":3691,"complexity":3692,"lines":3693,"bytes":3694},"sdk\u002Ftypescript\u002Fsrc\u002Fcli.ts",2811,13714,493206,{"path":3428,"complexity":3696,"lines":3697,"bytes":3698},2627,19751,716110,{"path":3700,"complexity":3701,"lines":3702,"bytes":3703},"sdk\u002Ftypescript\u002Fsrc\u002Fapi.ts",1470,7847,279132,{"path":3705,"complexity":3706,"lines":3707,"bytes":3708},"plugins\u002Fcodex-security\u002Fscripts\u002Fworkbench\u002Fretained_coverage.py",1287,3193,148411,{"path":3710,"complexity":3711,"lines":3712,"bytes":3713},"sdk\u002Ftypescript\u002Fsrc\u002Fcost.ts",1235,4159,148628,{"path":3715,"complexity":3716,"lines":3717,"bytes":3718},"sdk\u002Ftypescript\u002Fsrc\u002Fruntime.ts",1064,4826,158509,{"path":3720,"complexity":3721,"lines":3722,"bytes":3723},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fartifact-scan-draft.ts",1048,3524,118549,{"path":3725,"complexity":3726,"lines":3727,"bytes":3728},"plugins\u002Fcodex-security\u002Fscripts\u002Ffinalize_scan_contract.py",949,3471,147094,{"path":3730,"complexity":3731,"lines":3732,"bytes":3733},"sdk\u002Ftypescript\u002Ftests-ts\u002Fexternal-findings-publish.test.ts",805,9281,327460,{"path":3735,"complexity":910,"lines":3736,"bytes":3737},"sdk\u002Ftypescript\u002Ftests-ts\u002Fcost.test.ts",7504,244915,{"percentage":3739,"findings":2628,"files":3740,"byCategory":3741,"largest":3745},3.34,1176,[3742,3743,3744],{"category":928,"count":3520},{"category":930,"count":610},{"category":932,"count":373},[3746,3749,3752,3754,3756,3759,3762,3765,3768,3770],{"category":928,"path":3747,"name":441,"line":312,"lines":3748},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fsealed-contract.ts",1151,{"category":928,"path":3750,"name":441,"line":312,"lines":3751},"plugins\u002Fcodex-security\u002Fnative\u002Fproof-process-windows.mts",1056,{"category":928,"path":3753,"name":441,"line":312,"lines":1697},"evals\u002Fsecret-discovery\u002Ftest_discovery.mts",{"category":928,"path":3755,"name":441,"line":312,"lines":3568},"sdk\u002Ftypescript\u002Fsrc\u002Fpatch-tui.tsx",{"category":928,"path":3757,"name":441,"line":312,"lines":3758},"evals\u002Fsecret-discovery\u002Ftest_runtime.mts",758,{"category":928,"path":3760,"name":441,"line":312,"lines":3761},"evals\u002Fstandard-time-budget\u002Ftest_grading.mts",553,{"category":928,"path":3763,"name":441,"line":312,"lines":3764},"plugins\u002Fcodex-security\u002Fnative\u002Fproof-windows.mts",440,{"category":928,"path":3766,"name":441,"line":312,"lines":3767},"plugins\u002Fcodex-security\u002Fmcp-app\u002Fsrc\u002Fworkbench\u002Flocal-dedupe.ts",391,{"category":928,"path":3769,"name":441,"line":312,"lines":1743},"plugins\u002Fcodex-security\u002Fnative\u002Fproof-windows-wide.mts",{"category":928,"path":3771,"name":441,"line":312,"lines":3772},"evals\u002Fsecret-discovery\u002Fharness.mts",373,{"name":290,"url":3774,"description":3775,"language":318,"stars":3776,"starsToday":493,"defaultBranch":2950,"headSha":3777,"durationMs":592,"total":3778,"formats":3783,"topClones":3799,"code":3911,"health":3980,"complexity":3996,"deadCode":4034},"https:\u002F\u002Fgithub.com\u002FTheAlgorithms\u002FJava","All Algorithms implemented in Java",67107,"c46808958406c3b74726542fc9ad7e8038fe924e",{"sources":3779,"lines":320,"tokens":3780,"clones":319,"duplicatedLines":321,"duplicatedTokens":3781,"percentage":322,"percentageTokens":3782},1652,1962801,129067,6.58,[3784,3788,3790,3791,3793,3795,3796,3797,3798],{"format":2856,"sources":3785,"lines":3786,"clones":319,"duplicatedLines":321,"percentage":3787},1617,151197,7.67,{"format":402,"sources":446,"lines":3789,"clones":714,"duplicatedLines":714,"percentage":714},2222,{"format":855,"sources":669,"lines":2646,"clones":714,"duplicatedLines":714,"percentage":714},{"format":397,"sources":446,"lines":3792,"clones":714,"duplicatedLines":714,"percentage":714},533,{"format":3794,"sources":312,"lines":3520,"clones":714,"duplicatedLines":714,"percentage":714},"properties",{"format":853,"sources":299,"lines":565,"clones":714,"duplicatedLines":714,"percentage":714},{"format":377,"sources":312,"lines":565,"clones":714,"duplicatedLines":714,"percentage":714},{"format":414,"sources":299,"lines":550,"clones":714,"duplicatedLines":714,"percentage":714},{"format":356,"sources":312,"lines":387,"clones":714,"duplicatedLines":714,"percentage":714},[3800,3817,3838,3856,3861,3870,3875,3891,3900,3905],{"format":2856,"lines":1195,"tokens":3801,"copies":299,"first":3802,"others":3805,"excerpt":3808},1552,{"name":3803,"start":3804,"end":823},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fdatastructures\u002Fcaches\u002FFIFOCache.java",242,[3806],{"name":3807,"start":805,"end":1594},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fdatastructures\u002Fcaches\u002FLIFOCache.java",{"lines":3809,"total":1195},[1224,441,3810,3811,3812,3813,3814,3815,3812,3816],"\u002F**"," * Notifies the eviction listener, if one is registered, that a key-value pair has been evicted."," *"," * \u003Cp>If the {@code evictionListener} is not {@code null}, it is invoked with the provided key"," * and value. Any exceptions thrown by the listener are caught and logged to standard error,"," * preventing them from disrupting cache operations."," * @param key   the key that was evicted",{"format":2856,"lines":1226,"tokens":3818,"copies":417,"first":3819,"others":3820,"excerpt":3827},615,{"name":3803,"start":1831,"end":1007},[3821,3824],{"name":3807,"start":3822,"end":3823},161,179,{"name":3825,"start":2427,"end":3826},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fdatastructures\u002Fcaches\u002FRRCache.java",172,{"lines":3828,"total":1226},[3829,3830,3831,3812,3832,3833,3834,3835,3836,3837]," * If the key does not exist and the cache is full, the oldest entry is evicted to make space."," * Expired entries are also cleaned up prior to any eviction. The eviction listener"," * is notified when an entry gets evicted."," * @param key        the key to associate with the cached value; must not be {@code null}"," * @param value      the value to be cached; must not be {@code null}"," * @param ttlMillis  the time-to-live for this entry in milliseconds; must be >= 0"," * @throws IllegalArgumentException if {@code key} or {@code value} is {@code null}, or if {@code ttlMillis} is negative"," *\u002F","public void put(K key, V value, long ttlMillis) {",{"format":2856,"lines":1533,"tokens":3839,"copies":299,"first":3840,"others":3843,"excerpt":3847},1101,{"name":3803,"start":3841,"end":3842},481,526,[3844],{"name":3807,"start":3845,"end":3846},495,540,{"lines":3848,"total":1533},[3849,3810,3850,3812,3851,3852,3836,3853,3854,3855],"private EvictionStrategy\u003CK, V> evictionStrategy = new FIFOCache.ImmediateEvictionStrategy\u003C>();"," * Creates a new {@code Builder} with the specified cache capacity."," * @param capacity the maximum number of entries the cache can hold; must be > 0"," * @throws IllegalArgumentException if {@code capacity} is less than or equal to 0","public Builder(int capacity) {","    if (capacity \u003C= 0) {","        throw new IllegalArgumentException(\"Capacity must be > 0\");",{"format":2856,"lines":784,"tokens":3339,"copies":299,"first":3857,"others":3858},{"name":3803,"start":1760,"end":1118},[3859],{"name":3825,"start":3860,"end":1438},227,{"format":2856,"lines":385,"tokens":3862,"copies":417,"first":3863,"others":3865},474,{"name":3864,"start":287,"end":1226},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fdynamicprogramming\u002FFibonacci.java",[3866,3868],{"name":3867,"start":446,"end":415},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fmaths\u002FFibonacciLoop.java",{"name":3869,"start":378,"end":553},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Frecursion\u002FFibonacciSeries.java",{"format":2856,"lines":492,"tokens":2887,"copies":417,"first":3871,"others":3872},{"name":3803,"start":1015,"end":1232},[3873,3874],{"name":3807,"start":387,"end":554},{"name":3825,"start":1015,"end":1232},{"format":2856,"lines":561,"tokens":3860,"copies":426,"first":3876,"others":3878},{"name":3877,"start":1195,"end":2673},"src\u002Ftest\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fsorts\u002FAdaptiveMergeSortTest.java",[3879,3882,3885,3888],{"name":3880,"start":738,"end":3881},"src\u002Ftest\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fsorts\u002FBogoSortTest.java",136,{"name":3883,"start":3884,"end":1282},"src\u002Ftest\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fsorts\u002FBubbleSortTest.java",124,{"name":3886,"start":3887,"end":3615},"src\u002Ftest\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fsorts\u002FInsertionSortTest.java",144,{"name":3889,"start":3629,"end":3890},"src\u002Ftest\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fsorts\u002FSlowSortTest.java",149,{"format":2856,"lines":1226,"tokens":3892,"copies":417,"first":3893,"others":3896},378,{"name":3803,"start":3894,"end":3895},531,549,[3897,3898],{"name":3807,"start":986,"end":2079},{"name":3825,"start":1727,"end":3899},505,{"format":2856,"lines":545,"tokens":3901,"copies":299,"first":3902,"others":3903},749,{"name":3803,"start":1773,"end":3884},[3904],{"name":3825,"start":588,"end":1318},{"format":2856,"lines":409,"tokens":3906,"copies":299,"first":3907,"others":3909},712,{"name":3803,"start":1773,"end":3908},120,[3910],{"name":3807,"start":2802,"end":708},{"sources":1391,"lines":3912,"tokens":3913,"clones":3914,"duplicatedLines":3915,"duplicatedTokens":3916,"percentage":3917,"percentageTokens":3918,"formats":3919,"topClones":3924,"generated":3978},88511,1409938,457,4854,78298,5.48,5.55,[3920,3923],{"format":2856,"sources":1026,"lines":3921,"clones":3914,"duplicatedLines":3915,"percentage":3922},88484,5.49,{"format":356,"sources":312,"lines":387,"clones":714,"duplicatedLines":714,"percentage":714},[3925,3931,3938,3944,3948,3953,3958,3963,3967,3971],{"format":2856,"lines":1195,"tokens":3801,"copies":299,"first":3926,"others":3927,"excerpt":3929},{"name":3803,"start":3804,"end":823},[3928],{"name":3807,"start":805,"end":1594},{"lines":3930,"total":1195},[1224,441,3810,3811,3812,3813,3814,3815,3812,3816],{"format":2856,"lines":1226,"tokens":3818,"copies":417,"first":3932,"others":3933,"excerpt":3936},{"name":3803,"start":1831,"end":1007},[3934,3935],{"name":3807,"start":3822,"end":3823},{"name":3825,"start":2427,"end":3826},{"lines":3937,"total":1226},[3829,3830,3831,3812,3832,3833,3834,3835,3836,3837],{"format":2856,"lines":1533,"tokens":3839,"copies":299,"first":3939,"others":3940,"excerpt":3942},{"name":3803,"start":3841,"end":3842},[3941],{"name":3807,"start":3845,"end":3846},{"lines":3943,"total":1533},[3849,3810,3850,3812,3851,3852,3836,3853,3854,3855],{"format":2856,"lines":784,"tokens":3339,"copies":299,"first":3945,"others":3946},{"name":3803,"start":1760,"end":1118},[3947],{"name":3825,"start":3860,"end":1438},{"format":2856,"lines":385,"tokens":3862,"copies":417,"first":3949,"others":3950},{"name":3864,"start":287,"end":1226},[3951,3952],{"name":3867,"start":446,"end":415},{"name":3869,"start":378,"end":553},{"format":2856,"lines":492,"tokens":2887,"copies":417,"first":3954,"others":3955},{"name":3803,"start":1015,"end":1232},[3956,3957],{"name":3807,"start":387,"end":554},{"name":3825,"start":1015,"end":1232},{"format":2856,"lines":1226,"tokens":3892,"copies":417,"first":3959,"others":3960},{"name":3803,"start":3894,"end":3895},[3961,3962],{"name":3807,"start":986,"end":2079},{"name":3825,"start":1727,"end":3899},{"format":2856,"lines":545,"tokens":3901,"copies":299,"first":3964,"others":3965},{"name":3803,"start":1773,"end":3884},[3966],{"name":3825,"start":588,"end":1318},{"format":2856,"lines":409,"tokens":3906,"copies":299,"first":3968,"others":3969},{"name":3803,"start":1773,"end":3908},[3970],{"name":3807,"start":2802,"end":708},{"format":2856,"lines":572,"tokens":1709,"copies":299,"first":3972,"others":3975},{"name":3973,"start":3974,"end":2379},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fstreaming\u002FCusumDetector.java",167,[3976],{"name":3977,"start":364,"end":782},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fstreaming\u002FEwmaChangeDetector.java",{"files":714,"minified":714,"sample":3979},[],{"score":291,"grade":292,"size":3981,"dimensions":3984,"skipped":3994},{"lines":3982,"files":3983,"class":843},151271,1620,[3985,3991],{"id":846,"source":847,"value":3986,"adjusted":3987,"lines":321,"halfLife":850,"formats":3988,"excluded":3989,"weight":312,"score":3990},7.7,7.6,[2856,853,356],[855,414,856],53.8,{"id":867,"source":847,"value":361,"adjusted":265,"lines":3992,"halfLife":572,"weight":312,"score":3993},9250,91.6,[3995],{"id":859,"reason":2866},{"total":3997,"mean":3998,"files":3999},17609,10.9,[4000,4003,4006,4010,4013,4016,4019,4023,4027,4031],{"path":4001,"complexity":1182,"lines":1690,"bytes":4002},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fmaths\u002FMathBuilder.java",14039,{"path":4004,"complexity":2811,"lines":2983,"bytes":4005},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fgeometry\u002FBentleyOttmann.java",15238,{"path":4007,"complexity":1714,"lines":4008,"bytes":4009},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fstreaming\u002FUnscentedKalmanFilter.java",561,22615,{"path":4011,"complexity":2797,"lines":2654,"bytes":4012},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fdatastructures\u002Flists\u002FSinglyLinkedList.java",12791,{"path":4014,"complexity":1585,"lines":1419,"bytes":4015},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fdatastructures\u002Ftrees\u002FBTree.java",8930,{"path":4017,"complexity":1720,"lines":3846,"bytes":4018},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fstreaming\u002FTDigest.java",20064,{"path":4020,"complexity":1818,"lines":4021,"bytes":4022},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fdatastructures\u002Ftrees\u002FKDTree.java",458,13604,{"path":4024,"complexity":411,"lines":4025,"bytes":4026},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fdatastructures\u002Ftrees\u002FRedBlackBST.java",339,9590,{"path":4028,"complexity":1685,"lines":4029,"bytes":4030},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fconversions\u002FWordsToNumber.java",343,12902,{"path":4032,"complexity":2998,"lines":2460,"bytes":4033},"src\u002Fmain\u002Fjava\u002Fcom\u002Fthealgorithms\u002Fgraph\u002FHierholzerEulerianPath.java",9261,{"percentage":714,"findings":714,"files":312,"byCategory":4035,"largest":4036},[],[],{"\u002Ftrending\u002F2026-11-12":4038},{"views":312,"visits":312},null,1794624610961]