sparkforensics-server 0.4.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +3 -0
- package/package.json +1 -1
- package/public/assets/AutoscalingChurn-9Zo6IMGS.js +1 -0
- package/public/assets/CacheUtilization-MBDfMsKC.js +1 -0
- package/public/assets/CachingOpportunity-Cfw3wAFa.js +1 -0
- package/public/assets/ColdStart-BtS12b6_.js +1 -0
- package/public/assets/ConfigAudit-DNPV6EQg.js +1 -0
- package/public/assets/CoreUsageArea-BObEeenE.js +1 -0
- package/public/assets/Dashboard-CC_BXrNy.js +2 -0
- package/public/assets/DisclosureContext-Ds0hcZFn.js +1 -0
- package/public/assets/DuplicatePlanSubtree-vN3zqRsi.js +1 -0
- package/public/assets/ExecutorUtilization-CZObSLIj.js +1 -0
- package/public/assets/GcPressure-ByJlLOua.js +1 -0
- package/public/assets/IncompleteRun-MzqV4W8y.js +1 -0
- package/public/assets/JobFailures-LbMvAwAb.js +1 -0
- package/public/assets/MemoryUtilization-DH4jYvJK.js +1 -0
- package/public/assets/OverBroadcast-euk6HKg4.js +1 -0
- package/public/assets/PartitionHint-DThaMMRT.js +1 -0
- package/public/assets/PartitionSizing-yIN-iZzx.js +1 -0
- package/public/assets/{PlanExplorer-DdmPkKO1.js → PlanExplorer-Dd9WPK4S.js} +1 -1
- package/public/assets/PlanGraphRoute-NV5mCXRm.js +1 -0
- package/public/assets/RetryWaste-CXH4D-xH.js +1 -0
- package/public/assets/ShuffleIO-CW7U68ph.js +1 -0
- package/public/assets/Skew-PL79TppX.js +1 -0
- package/public/assets/SlowHost-GBO73hCi.js +1 -0
- package/public/assets/SmallFiles-B5cUjEav.js +1 -0
- package/public/assets/SpeculationWaste-mxi3jgb0.js +1 -0
- package/public/assets/Spill-CH1bNpxL.js +1 -0
- package/public/assets/StageFailed-YvxC11ii.js +1 -0
- package/public/assets/StageFindingGroup-B1A0nf-e.js +1 -0
- package/public/assets/{StageHeader-BSV8ALhT.js → StageHeader-BMNmUy-s.js} +1 -1
- package/public/assets/StageShape-DO3mQ6NS.js +1 -0
- package/public/assets/StageSlowness-SwRxfAEx.js +1 -0
- package/public/assets/Straggler-DHLTiBY-.js +1 -0
- package/public/assets/TaskFailures-Bj0QxiOc.js +1 -0
- package/public/assets/{TinyTask-CIPRxWfT.js → TinyTask-COUQQ5bQ.js} +1 -1
- package/public/assets/UnderBroadcast-RAUbQ6vw.js +1 -0
- package/public/assets/{finding-anchor-DF1cSHO1.js → finding-anchor-Dl8mIHiU.js} +1 -1
- package/public/assets/{impact-sort-7z0ZcBZf.js → impact-sort-Eihua9dY.js} +1 -1
- package/public/assets/index-DaC8A2FS.js +13 -0
- package/public/assets/{parser-worker-Q5KCPdKT.js → parser-worker-CfDvPkwF.js} +5 -5
- package/public/assets/{select-Cy5pmbrh.js → select-DkjFHlXR.js} +1 -1
- package/public/assets/{usePagedRows-BjPOpUU8.js → usePagedRows-Bo-aSztx.js} +1 -1
- package/public/assets/useRecentFiles-Bb4-ukVz.js +11 -0
- package/public/assets/{useSortMode-CU0vzThu.js → useSortMode-lDedD5a3.js} +1 -1
- package/public/docs/404.html +4 -3
- package/public/docs/assets/{app.C6w47a9W.js → app.yjczoibf.js} +1 -1
- package/public/docs/assets/chunks/@localSearchIndexroot.r9imX8Aq.js +1 -0
- package/public/docs/assets/chunks/{VPLocalSearchBox.BcTNvT55.js → VPLocalSearchBox.DOBbPfix.js} +1 -1
- package/public/docs/assets/chunks/{theme.D-mE6j02.js → theme.DFcAl8Ws.js} +2 -2
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.D0Kkk_r5.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.D0Kkk_r5.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.caA46z-u.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.CdtlKHl-.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_drill-down.md.CFNCE8JB.lean.js → contributor-guide_architecture_drill-down.md.CdtlKHl-.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.BNp14LtL.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.BNp14LtL.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_index.md.B9yZieYL.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_index.md.3TO9ic6w.lean.js → contributor-guide_architecture_index.md.B9yZieYL.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_overview.md.DBGo-bwn.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_overview.md.DBGo-bwn.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.w4lwybdh.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_state-and-history.md.DOTVHjTV.lean.js → contributor-guide_architecture_state-and-history.md.w4lwybdh.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.CcvqxnZI.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_widget-rendering.md.BmpARZve.lean.js → contributor-guide_architecture_widget-rendering.md.CcvqxnZI.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CKeFttKj.js +6 -0
- package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.21pTYhFF.lean.js → contributor-guide_architecture_worker-protocol.md.CKeFttKj.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_contributing.md.CQMvGwFt.js +1 -0
- package/public/docs/assets/{contributor-guide_contributing.md.B2E9ni79.lean.js → contributor-guide_contributing.md.CQMvGwFt.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_development-setup.md.D9bu4j_c.js +15 -0
- package/public/docs/assets/contributor-guide_development-setup.md.D9bu4j_c.lean.js +1 -0
- package/public/docs/assets/contributor-guide_testing.md.By6XGR9a.js +1 -0
- package/public/docs/assets/{contributor-guide_testing.md.DTwhpoN2.lean.js → contributor-guide_testing.md.By6XGR9a.lean.js} +1 -1
- package/public/docs/assets/{style.DSixAiZE.css → style.tmDhD3c8.css} +1 -1
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.z-8npxNk.js +7 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.z-8npxNk.lean.js +1 -0
- package/public/docs/assets/user-guide_getting-started.md.BJW5oVhe.js +24 -0
- package/public/docs/assets/user-guide_getting-started.md.BJW5oVhe.lean.js +1 -0
- package/public/docs/assets/{user-guide_mcp-tools.md.dQwIvdTF.js → user-guide_mcp-tools.md.DcLiOa9t.js} +40 -23
- package/public/docs/assets/{user-guide_mcp-tools.md.dQwIvdTF.lean.js → user-guide_mcp-tools.md.DcLiOa9t.lean.js} +1 -1
- package/public/docs/assets/user-guide_run-comparison.md.qin0a4IX.js +1 -0
- package/public/docs/assets/{user-guide_run-comparison.md.ChLI3MK0.lean.js → user-guide_run-comparison.md.qin0a4IX.lean.js} +1 -1
- package/public/docs/assets/user-guide_understanding-findings.md.DzReyCXb.js +1 -0
- package/public/docs/contributor-guide/architecture/board-widgets.html +7 -6
- package/public/docs/contributor-guide/architecture/detector-contract.html +7 -6
- package/public/docs/contributor-guide/architecture/drill-down.html +7 -6
- package/public/docs/contributor-guide/architecture/impact-estimation.html +7 -6
- package/public/docs/contributor-guide/architecture/index.html +7 -6
- package/public/docs/contributor-guide/architecture/overview.html +7 -6
- package/public/docs/contributor-guide/architecture/state-and-history.html +7 -6
- package/public/docs/contributor-guide/architecture/widget-rendering.html +7 -6
- package/public/docs/contributor-guide/architecture/worker-protocol.html +10 -9
- package/public/docs/contributor-guide/contributing.html +7 -6
- package/public/docs/contributor-guide/development-setup.html +11 -10
- package/public/docs/contributor-guide/testing.html +7 -6
- package/public/docs/hashmap.json +1 -1
- package/public/docs/index.html +5 -4
- package/public/docs/tuning-reference/anti-patterns.html +5 -4
- package/public/docs/tuning-reference/aqe.html +5 -4
- package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +5 -4
- package/public/docs/tuning-reference/bottleneck-cold-start.html +5 -4
- package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +5 -4
- package/public/docs/tuning-reference/bottleneck-failures.html +5 -4
- package/public/docs/tuning-reference/bottleneck-gc.html +5 -4
- package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +5 -4
- package/public/docs/tuning-reference/bottleneck-memory-utilization.html +5 -4
- package/public/docs/tuning-reference/bottleneck-retry-waste.html +5 -4
- package/public/docs/tuning-reference/bottleneck-shuffle.html +5 -4
- package/public/docs/tuning-reference/bottleneck-skew.html +5 -4
- package/public/docs/tuning-reference/bottleneck-slow-host.html +5 -4
- package/public/docs/tuning-reference/bottleneck-small-files.html +5 -4
- package/public/docs/tuning-reference/bottleneck-spill.html +5 -4
- package/public/docs/tuning-reference/bottleneck-straggler.html +5 -4
- package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +5 -4
- package/public/docs/tuning-reference/bottleneck-utilization.html +5 -4
- package/public/docs/tuning-reference/caching.html +5 -4
- package/public/docs/tuning-reference/cluster-config.html +5 -4
- package/public/docs/tuning-reference/config.html +5 -4
- package/public/docs/tuning-reference/data-formats.html +5 -4
- package/public/docs/tuning-reference/index.html +5 -4
- package/public/docs/tuning-reference/intro.html +5 -4
- package/public/docs/tuning-reference/joins.html +5 -4
- package/public/docs/tuning-reference/memory-model.html +5 -4
- package/public/docs/tuning-reference/metrics.html +5 -4
- package/public/docs/tuning-reference/partitioning.html +5 -4
- package/public/docs/tuning-reference/pyspark.html +5 -4
- package/public/docs/tuning-reference/shuffle.html +5 -4
- package/public/docs/tuning-reference/spark-architecture.html +5 -4
- package/public/docs/tuning-reference/table-formats.html +5 -4
- package/public/docs/user-guide/alternative-log-retrieval.html +14 -7
- package/public/docs/user-guide/getting-started.html +27 -8
- package/public/docs/user-guide/mcp-tools.html +46 -28
- package/public/docs/user-guide/run-comparison.html +7 -6
- package/public/docs/user-guide/understanding-findings.html +7 -6
- package/public/export-template.html +44 -44
- package/public/index.html +2 -2
- package/vendor-core/allocation.js +106 -0
- package/vendor-core/analyzer.js +13 -13
- package/vendor-core/cli/budgets.js +23 -9
- package/vendor-core/cli/collect-run.js +11 -4
- package/vendor-core/cli/regression-budgets.js +83 -0
- package/vendor-core/comparison-verdict.js +22 -22
- package/vendor-core/core-source-hash.txt +1 -1
- package/vendor-core/detectors.js +202 -68
- package/vendor-core/docs-content/detection/cache.md +3 -2
- package/vendor-core/docs-content/detection/cfg.md +9 -8
- package/vendor-core/docs-content/detection/chrn.md +1 -2
- package/vendor-core/docs-content/detection/cold.md +4 -2
- package/vendor-core/docs-content/detection/fail.md +3 -2
- package/vendor-core/docs-content/detection/gc.md +3 -2
- package/vendor-core/docs-content/detection/host.md +2 -1
- package/vendor-core/docs-content/detection/local.md +1 -1
- package/vendor-core/docs-content/detection/mem.md +5 -2
- package/vendor-core/docs-content/detection/plan.md +2 -1
- package/vendor-core/docs-content/detection/sfail.md +2 -1
- package/vendor-core/docs-content/detection/shape.md +5 -4
- package/vendor-core/docs-content/detection/skew.md +3 -1
- package/vendor-core/docs-content/detection/slow.md +2 -2
- package/vendor-core/docs-content/detection/spec.md +2 -3
- package/vendor-core/docs-content/detection/spill.md +1 -1
- package/vendor-core/docs-site-config.js +1 -1
- package/vendor-core/effective-conf.js +107 -0
- package/vendor-core/efficiency-model.js +8 -6
- package/vendor-core/event-handlers.js +160 -47
- package/vendor-core/event-schemas.js +2 -0
- package/vendor-core/evidence-report.js +18 -10
- package/vendor-core/finding-generic-recommendation.js +20 -1
- package/vendor-core/finding-names.js +7 -0
- package/vendor-core/finding-presentation.js +61 -26
- package/vendor-core/finding-tag-help.js +1 -1
- package/vendor-core/finding-types.js +12 -0
- package/vendor-core/format-utils.js +4 -3
- package/vendor-core/impact-estimator.js +20 -2
- package/vendor-core/impact-format.js +14 -13
- package/vendor-core/impact-model.js +27 -5
- package/vendor-core/ingest.js +4 -2
- package/vendor-core/list-runs.js +5 -2
- package/vendor-core/mcp-tools.js +1 -1
- package/vendor-core/model-assembler.js +23 -1
- package/vendor-core/parser-worker.js +1 -1
- package/vendor-core/proxy.js +3 -1
- package/vendor-core/python-stage.js +25 -0
- package/vendor-core/recommendation-rollup.js +16 -9
- package/vendor-core/redact.js +51 -10
- package/vendor-core/remediation.js +20 -0
- package/vendor-core/run-comparison.js +43 -24
- package/vendor-core/run-interpretation.js +2 -1
- package/vendor-core/run-metrics.js +198 -0
- package/vendor-core/run-totals.js +24 -0
- package/vendor-core/run-verdict.js +3 -4
- package/vendor-core/scorecard-estimates.js +1 -0
- package/vendor-core/session-snapshot.js +7 -0
- package/vendor-core/shs-schemas.js +2 -2
- package/vendor-core/spark-memory.js +17 -0
- package/vendor-core/stage-plan-nodes.js +18 -0
- package/vendor-core/stage-quantiles.js +4 -0
- package/vendor-core/types.js +49 -1
- package/vendor-core/wasted-core-hours.js +10 -7
- package/vendor-core/write-targets.js +312 -0
- package/public/assets/AutoscalingChurn-CUSIvvab.js +0 -1
- package/public/assets/CacheUtilization-Ce0K6_X2.js +0 -1
- package/public/assets/CachingOpportunity-Cn-LmRA4.js +0 -1
- package/public/assets/ColdStart-BoiYzEyV.js +0 -1
- package/public/assets/ConfigAudit-BoJc6PAw.js +0 -1
- package/public/assets/CoreUsageArea-BFfXKu7K.js +0 -1
- package/public/assets/Dashboard-Bo_1jGqH.js +0 -2
- package/public/assets/DisclosureContext-LYzHroHO.js +0 -1
- package/public/assets/DuplicatePlanSubtree-BaAuGAoo.js +0 -1
- package/public/assets/ExecutorUtilization-OE6VMFkG.js +0 -1
- package/public/assets/GcPressure-AoL_ZNrV.js +0 -1
- package/public/assets/IncompleteRun-Bv6IzgsQ.js +0 -1
- package/public/assets/JobFailures-DF3U2z1f.js +0 -1
- package/public/assets/MemoryUtilization-B65OVZlq.js +0 -1
- package/public/assets/OverBroadcast-DXbJREDl.js +0 -1
- package/public/assets/PartitionSizing-DZLnjy0d.js +0 -1
- package/public/assets/PlanGraphRoute-C-BGmC6j.js +0 -1
- package/public/assets/RetryWaste-BbEPsdMw.js +0 -1
- package/public/assets/ShuffleIO-wZB94LS8.js +0 -1
- package/public/assets/Skew-SpQE7zeJ.js +0 -1
- package/public/assets/SlowHost-DwDBCTvr.js +0 -1
- package/public/assets/SmallFiles-yjY_6sT1.js +0 -1
- package/public/assets/SpeculationWaste-73PDmj0c.js +0 -1
- package/public/assets/Spill-DEw0Kd1i.js +0 -1
- package/public/assets/StageFailed-BEfXdEJc.js +0 -1
- package/public/assets/StageFindingGroup-Bzm2TY03.js +0 -1
- package/public/assets/StageShape-CzR4jHOt.js +0 -1
- package/public/assets/StageSlowness-vMPsnAaa.js +0 -1
- package/public/assets/Straggler-Cf__OGl5.js +0 -1
- package/public/assets/TaskFailures-BZ8kLZiO.js +0 -1
- package/public/assets/UnderBroadcast-CBm8ZPoS.js +0 -1
- package/public/assets/index-CEM9bz_x.js +0 -13
- package/public/assets/useRecentFiles-BrBl-AP1.js +0 -11
- package/public/docs/assets/chunks/@localSearchIndexroot.DbZy5EtM.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.VTcYTH4d.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.VTcYTH4d.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CsqZHz_T.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.CFNCE8JB.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.HT9IJGIl.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.HT9IJGIl.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_index.md.3TO9ic6w.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_overview.md.CTEqVeV4.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_overview.md.CTEqVeV4.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DOTVHjTV.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BmpARZve.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.21pTYhFF.js +0 -6
- package/public/docs/assets/contributor-guide_contributing.md.B2E9ni79.js +0 -1
- package/public/docs/assets/contributor-guide_development-setup.md.CjgZJwjK.js +0 -15
- package/public/docs/assets/contributor-guide_development-setup.md.CjgZJwjK.lean.js +0 -1
- package/public/docs/assets/contributor-guide_testing.md.DTwhpoN2.js +0 -1
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.ZHPSbBkF.js +0 -1
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.ZHPSbBkF.lean.js +0 -1
- package/public/docs/assets/user-guide_getting-started.md.CEa2ZX-l.js +0 -6
- package/public/docs/assets/user-guide_getting-started.md.CEa2ZX-l.lean.js +0 -1
- package/public/docs/assets/user-guide_run-comparison.md.ChLI3MK0.js +0 -1
- package/public/docs/assets/user-guide_understanding-findings.md.D1ccs60C.js +0 -1
- /package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.CsqZHz_T.lean.js → contributor-guide_architecture_detector-contract.md.caA46z-u.lean.js} +0 -0
- /package/public/docs/assets/{user-guide_understanding-findings.md.D1ccs60C.lean.js → user-guide_understanding-findings.md.DzReyCXb.lean.js} +0 -0
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{E as t,M as n,c as r,d as i,g as a,h as o,l as s,m as c,u as l}from"./charts-vendor-0VMaLVLN.js";import{$ as u,B as d,F as f,G as p,H as m,I as h,J as g,K as _,L as v,M as y,N as b,P as x,Q as S,R as C,U as w,V as T,W as E,X as D,Y as O,Z as k,q as A,z as j}from"./react-vendor-BAKt3vny.js";import{D as M,F as N,G as P,K as F,M as ee,N as I,P as te,R as L,W as R,Y as z,Z as ne,a as re,at as ie,b as ae,bt as oe,ct as se,d as ce,dt as le,f as ue,ft as de,h as fe,i as pe,it as me,lt as he,mt as ge,n as _e,o as ve,p as ye,pt as B,r as be,tt as xe,u as Se,ut as Ce,yt as V}from"./DisclosureContext-LYzHroHO.js";import{p as we}from"./plan-graph-vendor-B0sEms9Z.js";import{$ as Te,B as Ee,Ct as H,F as De,G as Oe,H as ke,I as Ae,J as je,K as Me,L as Ne,M as Pe,N as Fe,P as Ie,Q as Le,St as Re,U as ze,V as Be,W as Ve,X as He,Y as Ue,Z as We,_ as Ge,a as Ke,at as qe,c as Je,ct as Ye,d as Xe,et as Ze,f as Qe,ft as $e,g as et,gt as tt,h as nt,ht as rt,i as it,it as at,j as ot,lt as st,m as ct,mt as lt,n as ut,nt as dt,o as ft,ot as pt,p as mt,pt as ht,q as gt,r as _t,rt as vt,s as yt,st as bt,t as xt,u as St,v as Ct,vt as wt,wt as Tt,x as Et,xt as Dt,z as Ot}from"./index-CEM9bz_x.js";var kt={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};kt.node;var At=le(kt),jt={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};jt.node;var Mt=le(jt),Nt={name:`download`,size:24,node:[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]};Nt.node;var Pt=le(Nt),Ft={name:`ellipsis`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]],aliases:[`more-horizontal`]};Ft.node;var It=le(Ft),Lt={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]};Lt.node;var Rt=le(Lt),zt={name:`keyboard`,size:24,node:[[`path`,{d:`M10 8h.01`,key:`1r9ogq`}],[`path`,{d:`M12 12h.01`,key:`1mp3jc`}],[`path`,{d:`M14 8h.01`,key:`1primd`}],[`path`,{d:`M16 12h.01`,key:`1l6xoz`}],[`path`,{d:`M18 8h.01`,key:`emo2bl`}],[`path`,{d:`M6 8h.01`,key:`x9i8wu`}],[`path`,{d:`M7 16h10`,key:`wp8him`}],[`path`,{d:`M8 12h.01`,key:`czm47f`}],[`rect`,{width:`20`,height:`16`,x:`2`,y:`4`,rx:`2`,key:`18n3k1`}]]};zt.node;var Bt=le(zt),U=e(n(),1),W=we();function Vt({className:e,orientation:t=`horizontal`,...n}){return(0,W.jsx)(_,{"data-slot":`tabs`,"data-orientation":t,className:V(`group/tabs flex gap-2 data-horizontal:flex-col`,e),...n})}var Ht=oe(`group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none data-[variant=chrome]:w-full data-[variant=chrome]:items-end data-[variant=chrome]:justify-start data-[variant=chrome]:gap-1 data-[variant=chrome]:rounded-none data-[variant=chrome]:border-b data-[variant=chrome]:border-border data-[variant=chrome]:p-0 group-data-horizontal/tabs:data-[variant=chrome]:h-auto`,{variants:{variant:{default:`bg-muted`,line:`gap-1 bg-transparent`,chrome:`bg-transparent`}},defaultVariants:{variant:`default`}});function Ut({className:e,variant:t=`default`,...n}){return(0,W.jsx)(w,{"data-slot":`tabs-list`,"data-variant":t,className:V(Ht({variant:t}),e),...n})}function Wt({className:e,...t}){return(0,W.jsx)(p,{"data-slot":`tabs-trigger`,className:V(`relative inline-flex h-[calc(100%-1px)] flex-1 cursor-pointer items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:cursor-default disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:cursor-default aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,`group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent`,`data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground`,`after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100`,`group-data-[variant=chrome]/tabs-list:h-auto group-data-[variant=chrome]/tabs-list:flex-none group-data-[variant=chrome]/tabs-list:gap-2 group-data-[variant=chrome]/tabs-list:rounded-t-md group-data-[variant=chrome]/tabs-list:rounded-b-none group-data-[variant=chrome]/tabs-list:border-x group-data-[variant=chrome]/tabs-list:border-t group-data-[variant=chrome]/tabs-list:border-transparent group-data-[variant=chrome]/tabs-list:px-4 group-data-[variant=chrome]/tabs-list:py-2 group-data-[variant=chrome]/tabs-list:text-sm group-data-[variant=chrome]/tabs-list:font-semibold group-data-[variant=chrome]/tabs-list:text-muted-foreground group-data-[variant=chrome]/tabs-list:hover:bg-muted/40 group-data-[variant=chrome]/tabs-list:hover:text-foreground`,`group-data-[variant=chrome]/tabs-list:data-active:-mb-px group-data-[variant=chrome]/tabs-list:data-active:border-border group-data-[variant=chrome]/tabs-list:data-active:bg-background group-data-[variant=chrome]/tabs-list:data-active:text-foreground group-data-[variant=chrome]/tabs-list:data-active:shadow-none dark:group-data-[variant=chrome]/tabs-list:data-active:border-border dark:group-data-[variant=chrome]/tabs-list:data-active:bg-background`,`before:absolute before:inset-x-3 before:top-0 before:h-0.5 before:rounded-full before:bg-accent before:opacity-0 before:transition-opacity group-data-[variant=chrome]/tabs-list:data-active:before:opacity-100`,`tap-target-comfortable tap-target-comfortable--sm`,e),...t})}function Gt({className:e,...t}){return(0,W.jsx)(E,{"data-slot":`tabs-content`,className:V(`flex-1 text-sm outline-none`,e),...t})}var Kt={executorMetrics:`Executor metrics`,rddStorageSnapshots:`RDD storage snapshots`,sqlPlan:`SQL plan`,sparkConfiguration:`Spark configuration`,taskCoreTime:`Task and core time`,infrastructureContext:`Infrastructure context`,sourceContext:`Source context`,costContext:`Cost context`};function qt(e){return Kt[e]}var Jt={referenceOpen:!1,setReferenceOpen:()=>{},evidenceCardOpen:!0,setEvidenceCardOpen:()=>{},revealEvidence:()=>{},registerRow:()=>{}},Yt=(0,U.createContext)(null);function Xt({children:e}){let[t,n]=(0,U.useState)(!1),[r,i]=(0,U.useState)(!1),a=(0,U.useRef)(null),[o,s]=(0,U.useState)(0),c=(0,U.useRef)(new Map),l=(0,U.useCallback)((e,t)=>{t?c.current.set(e,t):c.current.delete(e)},[]),u=(0,U.useCallback)(e=>{a.current=e,n(!0),i(!0),s(e=>e+1)},[]);(0,U.useLayoutEffect)(()=>{let e=a.current;e&&o!==0&&queueMicrotask(()=>{c.current.get(e)?.focus()})},[o]);let d=(0,U.useMemo)(()=>({referenceOpen:t,setReferenceOpen:n,evidenceCardOpen:r,setEvidenceCardOpen:i,revealEvidence:u,registerRow:l}),[t,r,u,l]);return(0,W.jsx)(Yt.Provider,{value:d,children:e})}function Zt(){return(0,U.useContext)(Yt)??Jt}function Qt(){let{revealEvidence:e}=Zt();return{revealEvidence:e}}function $t(){let{referenceOpen:e,setReferenceOpen:t,evidenceCardOpen:n,setEvidenceCardOpen:r}=Zt();return{referenceOpen:e,setReferenceOpen:t,evidenceCardOpen:n,setEvidenceCardOpen:r}}function en(){let{registerRow:e}=Zt();return e}function tn({...e}){return(0,W.jsx)(h,{"data-slot":`dropdown-menu`,...e})}function nn({...e}){return(0,W.jsx)(f,{"data-slot":`dropdown-menu-trigger`,...e})}function rn({align:e=`start`,alignOffset:t=0,side:n=`bottom`,sideOffset:r=4,className:i,...a}){return(0,W.jsx)(C,{children:(0,W.jsx)(v,{className:`isolate z-50 outline-none`,align:e,alignOffset:t,side:n,sideOffset:r,children:(0,W.jsx)(j,{"data-slot":`dropdown-menu-content`,className:V(`z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,i),...a})})})}function G({className:e,inset:t,variant:n=`default`,...r}){return(0,W.jsx)(d,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:V(`group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive`,e),...r})}function an({className:e,children:t,checked:n,inset:r,...i}){return(0,W.jsxs)(m,{"data-slot":`dropdown-menu-checkbox-item`,"data-inset":r,className:V(`relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),checked:n,...i,children:[(0,W.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex items-center justify-center`,"data-slot":`dropdown-menu-checkbox-item-indicator`,children:(0,W.jsx)(T,{children:(0,W.jsx)(At,{})})}),t]})}function on({className:e,...t}){return(0,W.jsx)(x,{"data-slot":`dropdown-menu-separator`,className:V(`-mx-1 my-1 h-px bg-border`,e),...t})}function sn({className:e,type:t,...n}){return(0,W.jsx)(b,{type:t,"data-slot":`input`,className:V(`h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,e),...n})}var cn=oe(`group/toggle inline-flex cursor-pointer items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-default disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,{variants:{variant:{default:`bg-transparent`,outline:`border border-input bg-transparent hover:bg-muted`},size:{default:`h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2`,sm:`h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5`,lg:`h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2`}},defaultVariants:{variant:`default`,size:`default`}});function ln({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,W.jsx)(y,{"data-slot":`toggle`,className:V(cn({variant:t,size:n,className:e})),...r})}var un={light:``,dark:`.dark`},dn={width:320,height:200},fn=U.createContext(null);function pn({id:e,className:n,children:r,config:i,initialDimension:a=dn,...o}){let s=U.useId(),c=`chart-${e??s.replace(/:/g,``)}`;return(0,W.jsx)(fn.Provider,{value:{config:i},children:(0,W.jsxs)(`div`,{"data-slot":`chart`,"data-chart":c,className:V(`flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden`,n),...o,children:[(0,W.jsx)(mn,{id:c,config:i}),(0,W.jsx)(t,{initialDimension:a,children:r})]})})}var mn=({id:e,config:t})=>{let n=Object.entries(t).filter(([,e])=>e.theme??e.color);return n.length?(0,W.jsx)(`style`,{dangerouslySetInnerHTML:{__html:Object.entries(un).map(([t,r])=>`
|
|
2
|
-
${r} [data-chart=${e}] {
|
|
3
|
-
${n.map(([e,n])=>{let r=n.theme?.[t]??n.color;return r?` --color-${e}: ${r};`:null}).join(`
|
|
4
|
-
`)}
|
|
5
|
-
}
|
|
6
|
-
`).join(`
|
|
7
|
-
`)}}):null};async function hn(e){if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e);return}catch{}let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t);try{if(t.select(),!document.execCommand(`copy`))throw Error(`copy unavailable`)}finally{t.remove()}}var gn=`(prefers-reduced-motion: reduce)`;function _n(e){if(typeof window>`u`||!window.matchMedia)return()=>{};let t=window.matchMedia(gn);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function vn(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(gn).matches}function yn(){return(0,U.useSyncExternalStore)(_n,vn,()=>!1)}var bn={accent:`var(--color-accent)`,warning:`var(--color-warning)`,critical:`var(--color-critical)`,info:`var(--color-info)`,clean:`var(--color-clean)`,muted:`var(--color-muted-foreground)`},xn=`var(--color-popover-foreground)`,Sn={background:`var(--color-popover)`,border:`1px solid var(--color-border)`,borderRadius:6,color:xn,fontSize:12,padding:`6px 10px`},Cn={contentStyle:Sn,labelStyle:{color:xn,fontWeight:600},itemStyle:{color:xn}};function wn(e,t){return[e,...t].map(e=>e.join(` `)).join(`
|
|
8
|
-
`)}function Tn({caption:e,columns:t,rows:n,align:r}){let[i,a]=(0,U.useState)(!1),[o,s]=(0,U.useState)(!1);async function c(){try{await hn(wn(t,n)),s(!0),setTimeout(()=>s(!1),1500)}catch{}}return(0,W.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,W.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,W.jsx)(`button`,{type:`button`,className:`cursor-pointer text-muted-foreground text-xs underline`,"aria-expanded":i,onClick:()=>a(e=>!e),children:`▤ Table`}),(0,W.jsx)(`button`,{type:`button`,className:`cursor-pointer text-muted-foreground text-xs underline`,onClick:c,children:`⧉ Copy`}),(0,W.jsx)(`span`,{"aria-live":`polite`,className:`text-xs text-muted-foreground`,children:o?`Copied`:``})]}),(0,W.jsxs)(ot,{className:i?void 0:`sr-only`,children:[(0,W.jsx)(Fe,{className:`sr-only`,children:e}),(0,W.jsx)(Ae,{children:(0,W.jsx)(Ne,{children:t.map((e,t)=>(0,W.jsx)(De,{className:r?.[t]===`right`?`text-right`:void 0,children:e},e))})}),(0,W.jsx)(Pe,{children:n.map((e,t)=>(0,W.jsx)(Ne,{children:e.map((e,t)=>(0,W.jsx)(Ie,{className:r?.[t]===`right`?`text-right`:void 0,children:e},t))},t))})]})]})}var En=new Set([l,s,i,a,o,c,r]);function Dn(e){if(!(0,U.isValidElement)(e))return e;let{children:t,isAnimationActive:n}=e.props,r=t==null?t:U.Children.map(t,Dn),i=En.has(e.type)&&n===void 0;return!i&&r===t?e:(0,U.cloneElement)(e,i?{isAnimationActive:!1}:{},...t==null?[]:[r])}function On({title:e,ariaLabel:t,height:n,children:r,table:i}){let a=yn()?Dn(r):r,o=_e();return(0,W.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[e?(0,W.jsx)(`p`,{className:`text-muted-foreground text-xs font-medium`,children:e}):null,o?(0,W.jsx)(pn,{role:`img`,"aria-label":t,config:{},className:`aspect-auto w-full`,style:{height:n},initialDimension:{width:320,height:n},children:a}):(0,W.jsx)(`div`,{style:{height:n},"aria-hidden":!0}),i?(0,W.jsx)(Tn,{...i}):null]})}function kn(e){let t=(0,U.useId)(),[n,r]=(0,U.useState)(!1);return e?{tooltipProps:{title:e,"aria-describedby":t,onFocus:()=>r(!0),onBlur:()=>r(!1)},srOnlyTooltip:(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`span`,{id:t,className:`sr-only`,children:e}),n?(0,W.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`visible-tooltip`,className:`pointer-events-none absolute top-full left-0 z-50 mt-1 max-w-xs rounded-md border border-border bg-foreground px-2 py-1 text-xs font-normal whitespace-normal text-background shadow-md`,children:e}):null]})}:{tooltipProps:{},srOnlyTooltip:null}}function An({confidence:e,validationRequired:t,evidenceKey:n}){let{tooltipProps:r,srOnlyTooltip:i}=kn(t),{revealEvidence:a}=Qt(),o=!!e&&e!==`high`,s=!!n;return!o&&!s?null:(0,W.jsxs)(`span`,{className:`relative inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border border-border bg-muted/60 px-2.5 text-xs font-medium text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring/50`,tabIndex:o?0:void 0,...o?r:{},children:[o?(0,W.jsx)(`span`,{"aria-hidden":`true`,className:`inline-block size-2 shrink-0 rounded-full border border-dashed border-current`}):null,o?`${e} confidence`:null,o?i:null,o&&s?(0,W.jsx)(`span`,{"aria-hidden":`true`,className:`opacity-60`,children:`·`}):null,s?(0,W.jsx)(`button`,{type:`button`,"aria-label":`Evidence: ${qt(n)}`,className:`tap-target-comfortable tap-target-comfortable--sm inline-flex min-h-[22px] cursor-pointer items-center rounded-sm text-primary outline-none hover:underline underline-offset-2 focus-visible:ring-2 focus-visible:ring-ring/50`,onClick:()=>a(n),children:qt(n)}):null]})}function jn(e,t){return e.filter(e=>e.type===t)}function Mn(e){return`stageIds`in e?e.stageIds:void 0}function Nn({title:e,children:t,defaultOpen:n=!1}){let[r,i]=(0,U.useState)(n);return(0,W.jsxs)(be,{open:r,onOpenChange:i,className:`space-y-2`,children:[(0,W.jsxs)(re,{"aria-expanded":String(r),className:`tap-target-comfortable tap-target-comfortable--sm flex cursor-pointer items-center gap-2 bg-transparent text-left`,children:[(0,W.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}),r?(0,W.jsx)(he,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,W.jsx)(Ce,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]}),(0,W.jsx)(pe,{keepMounted:!0,children:t})]})}function Pn({...e}){return(0,W.jsx)(g,{"data-slot":`dialog`,...e})}function Fn({...e}){return(0,W.jsx)(O,{"data-slot":`dialog-portal`,...e})}function In({className:e,...t}){return(0,W.jsx)(u,{"data-slot":`dialog-overlay`,className:V(`fixed inset-0 isolate z-50 bg-(--overlay-scrim) duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 motion-reduce:animate-none`,e),...t})}function Ln({className:e,children:t,showCloseButton:n=!0,...r}){return(0,W.jsxs)(Fn,{children:[(0,W.jsx)(In,{}),(0,W.jsxs)(D,{"data-slot":`dialog-content`,className:V(`fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,e),...r,children:[t,n&&(0,W.jsxs)(S,{"data-slot":`dialog-close`,render:(0,W.jsx)(H,{variant:`ghost`,className:`absolute top-2 right-2`,size:`icon-sm`}),children:[(0,W.jsx)(ht,{}),(0,W.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function Rn({className:e,...t}){return(0,W.jsx)(`div`,{"data-slot":`dialog-header`,className:V(`flex flex-col gap-2`,e),...t})}function zn({className:e,showCloseButton:t=!1,children:n,...r}){return(0,W.jsxs)(`div`,{"data-slot":`dialog-footer`,className:V(`-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end`,e),...r,children:[n,t&&(0,W.jsx)(S,{render:(0,W.jsx)(H,{variant:`outline`}),children:`Close`})]})}function Bn({className:e,...t}){return(0,W.jsx)(A,{"data-slot":`dialog-title`,className:V(`font-heading text-base leading-none font-medium`,e),...t})}function Vn({className:e,...t}){return(0,W.jsx)(k,{"data-slot":`dialog-description`,className:V(`text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,e),...t})}function Hn({title:e,rows:t,children:n,collapsible:r=!1,defaultOpen:i=!1}){let a=t.filter(e=>!!e);if(a.length===0&&!n)return null;let o=(0,W.jsx)(`div`,{className:`grid min-w-0 grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-sm`,children:a.map(([e,t],n)=>(0,W.jsxs)(U.Fragment,{children:[(0,W.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,W.jsx)(`span`,{className:`break-words`,children:t})]},n))});return r&&e?(0,W.jsx)(Nn,{title:e,defaultOpen:i,children:(0,W.jsxs)(`div`,{className:`space-y-2`,children:[o,n]})}):(0,W.jsxs)(`section`,{className:`space-y-2`,children:[e?(0,W.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}):null,o,n]})}function Un(e){return String(e).replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}function Wn(e,{title:t=`plan`}={}){if(!e)return``;let n=[`digraph "${Un(t)}" {`,` rankdir=BT;`,` node [shape=box];`],r=new WeakMap,i=[],a=0;return $e(e,(e,t)=>{let o=`n${a++}`;r.set(e,o);let s=e.detail&&e.detail!==e.name?`${e.name}\\n${e.detail}`:e.name;n.push(` ${o} [label="${Un(s)}"];`),t&&i.push(` ${r.get(t)} -> ${o};`)},{dedupe:!0}),[...n,...i,`}`].join(`
|
|
9
|
-
`)}var Gn=`Derived from best-effort plan-text parsing: cross-check against the Summary tab before acting.`,Kn=`Derived from best-effort plan-text parsing: cross-check against the Tree tab before acting.`,qn=`Derived from best-effort plan-text parsing: cross-check against the Tree tab or View plan graph before acting.`;function Jn(e){try{return dt(e)}catch{return null}}function Yn(e){try{return vt(e)}catch{return null}}function Xn(e,t){try{return Wn(e,{title:`stage-${t}`})||null}catch{return null}}function Zn(e,t,n,r){if(!n||r==null)return null;try{return at(e,t,n,r)}catch{return null}}function Qn(e,t){let n=t.stages.get(e);return(n?.sqlExecutionId==null?null:t.sql.get(n.sqlExecutionId))?.planTree??null}function $n(e){switch(e.kind){case`scan`:return[e.path?[`Path`,e.path]:null,e.format?[`Format`,e.format]:null,e.projectedColumns?.length?[`Columns`,e.projectedColumns.join(`, `)]:null,e.pushedFilters?.length?[`Filters`,e.pushedFilters.join(`, `)]:null];case`join`:return[[`Left keys`,e.leftKeys?.length?e.leftKeys.join(`, `):`(none)`],[`Right keys`,e.rightKeys?.length?e.rightKeys.join(`, `):`(none)`]];case`agg`:return[[`Group by`,e.groupByKeys?.length?e.groupByKeys.join(`, `):`(none)`],[`Functions`,e.aggregations?.length?e.aggregations.join(`, `):`(none)`]];case`exchange`:return[e.partitioning?[`Partitioning`,e.partitioning]:null,e.keys?.length?[`Keys`,e.keys.join(`, `)]:null,e.numPartitions?[`Partitions`,String(e.numPartitions)]:null];default:return[]}}function er({rows:e}){let[t,n]=(0,U.useState)(!1);return(0,W.jsxs)(`details`,{className:`pt-1 pl-4`,onToggle:e=>n(e.currentTarget.open),children:[(0,W.jsx)(`summary`,{className:`cursor-pointer text-xs text-muted-foreground`,children:`full detail`}),t?(0,W.jsx)(`div`,{className:`pt-1`,children:(0,W.jsx)(Hn,{rows:e})}):null]})}function tr({node:e,depth:t,durationMap:n}){let r=(0,U.useRef)(null),[i,a]=(0,U.useState)(t<=1);(0,U.useEffect)(()=>{r.current&&(r.current.open=t<=1)},[]);let o=qe(e.name),s=e.detail??``,c=Jn(e),l=c?$n(c):[],u=l.some(Boolean),d=c?.kind===`scan`?``:Ye(e.name,s),f=e.exchangeRole===`read`?e.children[0]:void 0,p=n?.get(f??e),m=(f??e).metrics??[],h=m.length>0?bt(m):``,g=(f??e).children??[],_=g.length>0||m.length>0||u;return(0,W.jsxs)(`details`,{ref:r,"data-op":o,className:`rounded-md`,onToggle:e=>a(e.currentTarget.open),children:[(0,W.jsxs)(`summary`,{className:`flex list-none flex-wrap items-center gap-2 rounded-md px-1.5 py-1 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden ${_?`cursor-pointer hover:bg-muted`:`cursor-default`}`,children:[_?(0,W.jsx)(Mt,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-muted-foreground transition-transform ${i?`rotate-90`:``}`}):(0,W.jsx)(`span`,{className:`size-3.5 shrink-0`}),(0,W.jsx)(`span`,{className:`font-medium`,children:e.name}),d?(0,W.jsx)(`span`,{title:s,className:`text-xs text-muted-foreground`,children:d}):null,c?.warning?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(ce,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:Et}),(0,W.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:c.warning.detail}),(0,W.jsx)(ye,{children:(0,W.jsx)(An,{confidence:`low`})})]}):null,p!=null&&p>0?(0,W.jsxs)(`span`,{title:`Approximate wall-time attributed to this operator`,className:`text-xs text-muted-foreground`,children:[`~`,F(p)]}):null,h?(0,W.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:h}):null]}),m.length>0?(0,W.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1 pt-1 pl-6 text-xs text-muted-foreground`,children:m.map((e,t)=>(0,W.jsxs)(`span`,{children:[e.name,`: `,pt(e)]},t))}):null,u?(0,W.jsx)(er,{rows:l}):null,g.length>0?(0,W.jsx)(`div`,{className:`ml-[7px] space-y-1 border-l border-border/60 pt-1 pl-3.5`,children:g.map((e,r)=>(0,W.jsx)(tr,{node:e,depth:t+1,durationMap:n},r))}):null]})}function nr(e){return`${e.path||`(unknown path)`} (${e.format})`}function rr(e){let t=e.leftKeys.length||e.rightKeys.length?` on ${e.leftKeys.join(`, `)||`(none)`} / ${e.rightKeys.join(`, `)||`(none)`}`:``;return`${e.joinType}${t}`}function ir(e){let t=e.aggregations.join(`, `)||`(none)`;return e.groupByKeys.length?`${t} by ${e.groupByKeys.join(`, `)}`:t}function ar(e){let t=new Map;for(let n of e)t.set(n.partitioning,(t.get(n.partitioning)??0)+1);return[...t.entries()].map(([e,t])=>`${e}×${t}`).join(`, `)}function or({summary:e,hasPlanGraph:t}){let{scans:n,joins:r,aggs:i,exchanges:a,warnings:o}=e,s=a.length>=4,c=s||o.length>0,l=t?qn:Kn;return(0,W.jsx)(Hn,{rows:[n.length>0&&[`Sources (${n.length})`,n.map(nr).join(`, `)],r.length>0&&[`Joins (${r.length})`,r.map(rr).join(`; `)],i.length>0&&[`Aggregations (${i.length})`,i.map(ir).join(`; `)],a.length>0&&[`Exchanges (${a.length})`,(0,W.jsxs)(W.Fragment,{children:[ar(a),s?(0,W.jsxs)(W.Fragment,{children:[` `,(0,W.jsx)(`span`,{className:`text-muted-foreground`,children:`— consider whether some joins/aggregations could share a partitioning scheme to avoid redundant shuffles.`}),` `,(0,W.jsx)(ye,{children:(0,W.jsx)(An,{confidence:`low`})})]}):null]})],o.length>0&&[`Warnings (${o.length})`,(0,W.jsxs)(`span`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,W.jsx)(ce,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:`bg-plan-aggregate/8 text-plan-aggregate`}),o.map(e=>e.detail).join(`; `),(0,W.jsx)(ye,{children:(0,W.jsx)(An,{confidence:`low`})})]})]],children:c?(0,W.jsx)(ye,{children:(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l})}):null})}function sr({stageId:e,appModel:t}){let n=B(e=>e.openPlanGraph),r=Qn(e,t);if(!r)return null;let i=t.stages.get(e),a=Zn(r,t,i?.sqlExecutionId==null?null:t.sql.get(i.sqlExecutionId),i?.sqlExecutionId),o=Yn(r),s=Xn(r,e);return(0,W.jsxs)(Vt,{defaultValue:`tree`,children:[(0,W.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,W.jsxs)(Ut,{"aria-label":`Plan view`,children:[(0,W.jsx)(Wt,{value:`tree`,children:`Tree`}),(0,W.jsx)(Wt,{value:`summary`,children:`Summary`})]}),(0,W.jsx)(`div`,{className:`flex gap-2`,children:s?(0,W.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>n(e),children:`View plan graph`}):null})]}),(0,W.jsx)(Gt,{value:`tree`,children:(0,W.jsxs)(`div`,{className:`space-y-2 pt-3`,children:[(0,W.jsx)(tr,{node:r,depth:0,durationMap:a}),(0,W.jsx)(ye,{children:(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Showing initial (pre-AQE) plan. Metrics reflect operators as planned; adaptive optimizations may have rewritten the actual execution.`})}),o&&o.warnings.length>0?(0,W.jsx)(ye,{children:(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:Gn})}):null]})}),(0,W.jsx)(Gt,{value:`summary`,children:(0,W.jsx)(`div`,{className:`pt-3`,children:o?(0,W.jsx)(or,{summary:o,hasPlanGraph:s!=null}):(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Plan summary couldn’t be parsed.`})})})]})}var cr=`0.1.0`;function lr(e,t,n,r,i,a){return K({schemaVersion:3,provenance:a,app:e.app,stages:[...e.stages.values()],jobs:[...e.jobs.values()],sql:[...e.sql.values()],executors:e.executors,runAggregates:e.runAggregates,evidenceAvailability:e.evidenceAvailability,catalog:t,configFindings:n,skippedLines:r,interpretation:i})}var ur=`__sparkforensicsMap`,dr=`__sparkforensicsSet`;function K(e){return e instanceof Map?{[ur]:[...e].map(([e,t])=>[K(e),K(t)])}:e instanceof Set?{[dr]:[...e].map(K)}:Array.isArray(e)?e.map(K):e&&typeof e==`object`?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,K(t)])):e}function fr(e){if(Array.isArray(e))return e.map(fr);if(e&&typeof e==`object`){let t=e;return Array.isArray(t[ur])?new Map(t[ur].map(([e,t])=>[fr(e),fr(t)])):Array.isArray(t[dr])?new Set(t[dr].map(fr)):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,fr(t)]))}return e}var pr=[/\bip(?:-\d{1,3}){4}(?:\.[a-z0-9][a-z0-9-]*)*/gi,/\b(?:\d{1,3}\.){3}\d{1,3}\b/g],mr=[/\bapplication_\d{10,}_\d+\b/g];function hr(e,t){if(typeof e==`string`){for(let{patterns:n,out:r}of t)for(let t of n){let n=e.match(t);if(n)for(let e of n)r.add(e)}return}if(Array.isArray(e)){for(let n of e)hr(n,t);return}if(e&&typeof e==`object`)for(let n of Object.values(e))hr(n,t)}function q(e,t){if(Array.isArray(e)){for(let n of e)q(n,t);return}if(e&&typeof e==`object`)for(let[n,r]of Object.entries(e))n===`host`&&typeof r==`string`&&r.length>0?t.add(r):q(r,t)}function gr(e){if(Array.isArray(e))return e.map(e=>gr(e));if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=n===`failureGroups`&&Array.isArray(r)?r.map(e=>e&&typeof e==`object`?Ze(e):e):gr(r);return t}return e}function _r(e,t){if(e)for(let[n,r]of Object.entries(e)){let e=n.slice(n.lastIndexOf(`.`)+1).toLowerCase();(e===`host`||e===`hostname`)&&r&&t.add(r)}}function vr(e){let t=new Set,n=new Set,r=e?.summary?.app?.id;return typeof r==`string`&&r.length>0&&t.add(r),q(e?.findings,n),hr(e,[{patterns:pr,out:n},{patterns:mr,out:t}]),{appIds:t,hosts:n}}function yr(e,t){let n=new Map;return[...e].sort((e,t)=>e.localeCompare(t,`en`,{numeric:!0})).forEach((e,r)=>n.set(e,`${t}-${r+1}`)),n}function br(e,t){if(typeof e==`string`){let n=e;for(let[e,r]of t)n=n.split(e).join(r);return n}if(Array.isArray(e))return e.map(e=>br(e,t));if(e&&typeof e==`object`){let n={};for(let[r,i]of Object.entries(e))n[r]=br(i,t);return n}return e}function xr(e,t){let n=[...t.appIds?yr(t.appIds,`app`):[],...yr(t.hosts,`host`)];return n.sort((e,t)=>t[0].length-e[0].length),br(e,n)}function Sr(e){let t=gr(e),{appIds:n,hosts:r}=vr(t);return xr(t,{appIds:n,hosts:r})}function Cr(e){let t=gr(e),n=new Set,r=new Set,i=t.app?.id;return typeof i==`string`&&i.length>0&&n.add(i),q(t.executors.added,r),q(t.executors.removed,r),q(t.catalog,r),q(t.configFindings,r),_r(t.app?.config,r),hr(t,[{patterns:pr,out:r},{patterns:mr,out:n}]),xr(t,{appIds:n,hosts:r})}function wr(e,t,n){let r=fr(Cr(K({app:e.app,stages:[...e.stages.values()],jobs:[...e.jobs.values()],sql:[...e.sql.values()],executors:e.executors,runAggregates:e.runAggregates,evidenceAvailability:e.evidenceAvailability,catalog:t,configFindings:n}))),i=e=>new Map(e.map(e=>[e.id,e]));return{appModel:{app:r.app,stages:i(r.stages),jobs:i(r.jobs),sql:i(r.sql),executors:r.executors,runAggregates:r.runAggregates,evidenceAvailability:r.evidenceAvailability},catalog:r.catalog,configFindings:r.configFindings}}var Tr={skew:[],stageShape:[`rule`],shuffle:[],partitionSizing:[`rule`],spill:[`spillMagnitude`],gc:[`direction`],slowHost:[`variant`,`host`,`hostTaskShare`,`hostMeanMs`,`dimension`,`executorId`,`execMaxValue`],stageSlowness:[],stageFailed:[`variant`,`numTasks`,`memoryBytesSpilled`,`failedTaskDetails`],failures:[`failedTasks`,`dominantReason`,`dominantError`,`failureGroups`,`otherFailedTasks`],straggler:[`unit`,`speculativeTasks`,`stragglerCount`],speculationWaste:[],retryWaste:[`numTasks`,`memoryBytesSpilled`,`retriedTaskDetails`],tinyTask:[],incompleteRun:[],coldStart:[],utilization:[`cpuUtilizationPct`],memoryUtilization:[`variant`,`rule`,`executorId`,`heap`,`dataUnavailable`],cacheUtilization:[`variant`,`rddId`,`rddName`,`memorySize`,`diskSize`,`numCachedPartitions`,`numPartitions`,`dataUnavailable`],coreLocality:[`nonLocalTaskCount`],autoscalingChurn:[`shortLivedExecutorCount`],cachingOpportunity:[`variant`,`relation`,`format`,`relations`,`operator`,`executionIds`,`totalReadBytes`],jobFailureRate:[`failedJobs`,`totalJobs`,`failedTasks`,`totalTasks`,`avgJobDurationMs`,`taskFailureRate`],configAudit:[`property`],duplicatePlanSubtree:[`executionId`,`stageIds`,`stageShares`,`occurrencesIdentical`,`rootName`,`subtreeSize`,`sampleRelation`,`groupIndex`],smallFiles:[`executionId`,`stageIds`,`fileCount`,`direction`,`nodeName`],underBroadcast:[`executionId`,`stageIds`,`largerSideBytes`],overBroadcast:[`executionId`,`stageIds`]};function Er(e){let t=e,n={};for(let r of[...Tr[e.type]].sort())t[r]!==void 0&&(n[r]=t[r]);return n}function Dr(e){let t={id:e.id??null,type:e.type,name:St(Je(e.type)),tag:me(e.type),impactBand:e.impactBand,stageId:e.stageId??null,metric:e.metric??null,value:e.value??null,...e.valueText==null?{}:{valueText:e.valueText},recommendation:e.recommendation??null,detectorVersion:e.detectorVersion??1,evidence:Er(e),actionLabel:yt(e)};e.confidence!=null&&(t.confidence=e.confidence),e.validationRequired!=null&&(t.validationRequired=e.validationRequired),e.docAnchor!=null&&(t.docAnchor=e.docAnchor),e.impactEstimate!=null&&(t.impactEstimate=e.impactEstimate);let n=mt(e.impactEstimate);return n&&(t.impact=n.text,t.impactMeaning=n.meaning),e.tunedThresholds!=null&&(t.tunedThresholds=e.tunedThresholds),t}function Or(e){return[...e].sort((e,t)=>{let n=(L[e.impactBand]??9)-(L[t.impactBand]??9);if(n!==0)return n;if(e.type!==t.type)return e.type<t.type?-1:1;let r=e.stageId??-1,i=t.stageId??-1;return r===i?(e.id??``)<(t.id??``)?-1:+((e.id??``)>(t.id??``)):r-i})}function kr(e,t){let n=e.filter(I);return ee(n,t).map(e=>{let t=N(e.findings),n=t[0],r=t.map(e=>e.id).filter(e=>e!=null),i={type:e.type,tag:me(e.type),actionLabel:yt(n),findingCount:e.findingCount,findingIds:r};if(e.kind===`time`)return{...i,kind:`time`,stageCount:e.stageCount,recoverableMsHigh:e.recoverableMsHigh,impact:ne(e.recoverableMsHigh,e.recoverableMsHigh),impactMeaning:`of run time`};if(e.kind===`resource`){let t=z({value:e.total,unit:e.unit}),n=xe(t)?null:t;return{...i,kind:`resource`,unit:e.unit,total:e.total,impact:n,impactMeaning:n?nt(e.unit):null}}return{...i,kind:`count`,byImpactBand:e.byImpactBand,impact:null,impactMeaning:null}})}function Ar(e,t,n){let r=new Set(e.filter(te).map(e=>e.type)),i=Ee(t,e),a=[],o=[];for(let[e,{thresholdSummary:t}]of Object.entries(Ge())){if(r.has(e))continue;let s=Le(e,n),c=s?{type:e,tag:me(e),thresholdSummary:Ct(e,n),tunedThresholds:s}:{type:e,tag:me(e),thresholdSummary:t},l=i.notRunReason(e);l?o.push({...c,reason:l}):a.push(c)}return{cleanChecks:a,notRunChecks:o}}function jr(e){let t={critical:0,warning:0,info:0};for(let n of e)n.impactBand in t&&(t[n.impactBand]+=1);return t}function Mr(e){return{title:e.title,summary:e.summary,steps:e.shown.map(t=>{let n=_t(t,e.outcome);return{key:t.key,stageId:t.stageId,type:t.lead.type,tag:me(t.lead.type),leadFindingId:t.lead.id??null,actionLabel:yt(t.lead),recommendation:n,impact:ct(t.lead),impactMeaning:et(t.lead),relatedTypes:t.related.map(e=>e.type),text:it(t.lead,n,t.stageId)}}),remainingPlaces:e.remaining,copyText:e.copyText}}var Nr={},Pr=new WeakMap,Fr=new WeakMap;function Ir(e,t){let n=t??Nr,r=e.get(n);return r||(r=new WeakMap,e.set(n,r)),r}function Lr(e,t){let{app:n,stages:r,executors:i,sql:a,jobs:o,runAggregates:s}=e;return{catalog:Me(n,r,i?.added??[],i?.removed??[],o??new Map,a??new Map,s??null,{thresholds:t}),config:gt(n)}}function Rr(e,t){let n=Ir(Fr,t),r=n.get(e);if(r)return r;let{catalog:i,config:a}=Lr(e,t),o=wr(e,i,a),s=Sr(zr(o.appModel,t,{catalog:o.catalog,config:o.configFindings}));return n.set(e,s),s}function zr(e,t,n){let r=Ir(Pr,t),i=r.get(e);if(i)return i;let{app:a,stages:o,executors:s,sql:c,jobs:l,evidenceAvailability:u}=e,{catalog:d,config:f}=n??Lr(e,t),p=[...d,...f],m=Or(p.map(Dr)),h=kr(p,o??new Map),{cleanChecks:g,notRunChecks:_}=Ar(p,o??new Map,t),v=He(t),y=p.filter(I),b={...e,stages:o??new Map,jobs:l??new Map,executors:s??{added:[],removed:[]}},x=ut(b,p),S=x.outcome,C={schemaVersion:5,summary:{app:{id:a?.id??null,name:a?.name??null,sparkVersion:a?.sparkVersion??null},stageCount:o?.size??0,jobCount:l?.size??0,sqlExecutionCount:c?.size??0,findingCount:m.length,impactBandCounts:jr(m),actionableFindingCount:y.length,actionableImpactBandCounts:jr(y),clean:Be({jobs:l??new Map,stages:o??new Map},p),outcome:{failedJobs:S.failedJobs,totalJobs:S.totalJobs,failureReason:S.reason,failureReasonStageId:S.reason==null?null:S.reasonStageId},runShape:Xe(b),...v?{tunedThresholds:v}:{}},verdict:Mr(x),evidenceAvailability:u??null,detectors:Ue(t),findings:m,recommendations:h,cleanChecks:g,notRunChecks:_};return r.set(e,C),C}function Br(e,t){return typeof t==`number`&&/bytes$/i.test(e)?R(t):typeof t==`object`&&t?JSON.stringify(t):String(t)}function Vr(e){let t=[` - failureGroups: ${e.length}`];for(let n of e)if(t.push(` - ${n.count} task(s): ${Te(n)}`),n.stackExcerpt){t.push(``);for(let e of n.stackExcerpt.split(`
|
|
10
|
-
`))t.push(` ${e}`);t.push(``)}return t}function Hr(e){let t=mt(e);return t?`${t.text}${t.meaning?` ${t.meaning}`:``} (estimateMethod: ${e.estimateMethod})`:null}function Ur(e,t){let{failedJobs:n,totalJobs:r,failureReason:i,failureReasonStageId:a}=e;if(r===0)return null;if(n>0){let e=n<r?`${n} of ${r} jobs failed.`:r===1?`The run's one job failed.`:`All ${r} jobs failed.`;return i?`${e} Spark's recorded reason${a==null?``:` (stage ${a})`}: ${i}`:e}let o=r===1?`Its one job succeeded.`:`All ${r} jobs succeeded.`;return t?`${o} The log has no end-of-run record, so jobs still running when it stops are not counted.`:o}function Wr(e){let t=[];if(e.wallClockMs!=null&&t.push(`- Wall-clock: ${F(e.wallClockMs)}`),e.efficiencyPct!=null&&t.push(`- Efficiency: ${e.efficiencyPct}% (share of the run with a stage running)`),e.unusedCoreTimePct!=null&&t.push(`- Unused core time: ${e.unusedCoreTimePct}% (driver idle plus executor slack, as a share of available core time)`),e.peakBusyCores!=null&&t.push(`- Peak busy cores: ${P(e.peakBusyCores)}`),e.etlPhasesMs){let{extract:n,transform:r,load:i}=e.etlPhasesMs;t.push(`- ETL phases (summed stage time): extract ${F(n)}, transform ${F(r)}, load ${F(i)}`)}return t}function Gr(e){let t=[`## Verdict`,``,e.title];if(e.summary.length>0&&t.push(``,e.summary.join(` `)),e.steps.length>0&&(t.push(``),e.steps.forEach((e,n)=>{if(t.push(`${n+1}. [${e.tag}] ${e.text}`),e.relatedTypes.length>0){let n=e.relatedTypes.map(Je).join(`, `);t.push(` - Also flagged here: ${n}. These often share this cause, so the same fix may clear them too.`)}}),e.remainingPlaces>0)){let n=`${e.remainingPlaces} more place${e.remainingPlaces===1?``:`s`}`;t.push(``,`${n} to look at in the Findings section below.`)}return t.push(``),t}function Kr(e,t){let{summary:n,verdict:r,findings:i,evidenceAvailability:a,detectors:o,recommendations:s,cleanChecks:c,notRunChecks:l}=e,u=[];u.push(`# Spark run evidence report`),u.push(``),u.push(`- Application: ${n.app.name??`(unknown)`} (${n.app.id??`n/a`})`),u.push(`- Spark version: ${n.app.sparkVersion??`n/a`}`),n.tunedThresholds&&u.push(`- Tuned thresholds: ${We(n.tunedThresholds)}`),u.push(`- Stages: ${n.stageCount} · Jobs: ${n.jobCount} · SQL executions: ${n.sqlExecutionCount}`),u.push(`- Findings: ${n.findingCount} (critical ${n.impactBandCounts.critical}, warning ${n.impactBandCounts.warning}, info ${n.impactBandCounts.info})`);let d=n.actionableImpactBandCounts;u.push(`- Findings to act on: ${n.actionableFindingCount} (critical ${d.critical}, warning ${d.warning}, info ${d.info})`);let f=Ur(n.outcome,t);f&&u.push(`- Outcome: ${f}`),n.clean&&u.push(`- Clean run: no findings, no failed jobs, and every check could run.`),u.push(...Wr(n.runShape)),u.push(``),u.push(...Gr(r)),s.length>0&&(u.push(`## Fix these first (${s.length})`),u.push(``),s.forEach((e,t)=>{u.push(`${t+1}. [${e.tag}] ${e.actionLabel}`);let n=e.kind===`count`?Object.entries(e.byImpactBand??{}).map(([e,t])=>`${t} ${e}`).join(`, `):e.impact&&`${e.impact}${e.impactMeaning?` ${e.impactMeaning}`:``}`;u.push(` - ${n?`${n} · `:``}×${e.findingCount} finding(s)`)}),u.push(``)),u.push(`## Findings (${i.length})`),u.push(``);for(let e of i){let t=e.stageId==null?``:` (stage ${e.stageId})`;u.push(`### ${e.name} · ${e.impactBand}${t}`),u.push(`- action: ${e.actionLabel}`),e.metric!=null&&u.push(`- ${e.metric}: ${e.valueText??e.value}`),e.recommendation&&u.push(`- ${e.recommendation}`),e.confidence&&u.push(`- confidence: ${e.confidence}`),e.validationRequired&&u.push(`- validation: ${e.validationRequired}`),e.tunedThresholds&&u.push(`- tuned thresholds: ${je(e.tunedThresholds)}`);let n=e.impactEstimate?Hr(e.impactEstimate):null;n&&u.push(`- impact: ${n}`);let r=e.impactEstimate?Qe(e):null;r&&u.push(`- estimate: ${r}`),u.push(`- detector version: ${e.detectorVersion}`);let i=Object.entries(e.evidence??{}).sort(([e],[t])=>e<t?-1:+(e>t));if(i.length){u.push(`- evidence:`);for(let[e,t]of i)e===`failureGroups`&&Array.isArray(t)?u.push(...Vr(t)):u.push(` - ${e}: ${Br(e,t)}`)}u.push(``)}if(a?.entries?.length){u.push(`## Evidence availability`),u.push(``);for(let e of a.entries)u.push(`- ${e.key}: ${e.state} (${e.summary})`);u.push(``)}if(Array.isArray(o)&&o.length){u.push(`## Detectors`),u.push(``);for(let e of o){let t=e.tunedThresholds?` (tuned: ${je(e.tunedThresholds)})`:``;u.push(`- ${e.type} (v${e.version}, ${e.scope}), thresholds: ${JSON.stringify(e.thresholds)}${t}`)}u.push(``)}if(l.length>0){u.push(`## Not checked on this log (${l.length})`),u.push(``),u.push(`The log lacked the data these checks need, so they neither passed nor failed.`),u.push(``);for(let e of l)u.push(`- [${e.tag}] ${e.type}: ${e.reason}`);u.push(``)}if(c.length>0){u.push(`## Clean checks (${c.length})`),u.push(``);for(let e of c){let t=e.tunedThresholds?` (tuned: ${je(e.tunedThresholds)})`:``;u.push(`- [${e.tag}] ${e.type}: ${e.thresholdSummary}${t}`)}u.push(``)}return u.join(`
|
|
11
|
-
`)}function qr(e,t){let n=`stageIds`in e.evidence?e.evidence.stageIds:null;return Ke({...e,stageId:ft({stageId:e.stageId,stageIds:n})},t)}function Jr(e,{redact:t=!1,markdown:n=!0,findingsFilter:r,thresholds:i}={}){let a=t?Rr(e,i):zr(e,i),o=a.findings.some(e=>e.type===`incompleteRun`);return r&&(a={...a,findings:a.findings.filter(e=>qr(e,r))}),{markdown:n?Kr(a,o):``,json:a}}var J=Uint8Array,Y=Uint16Array,Yr=Int32Array,Xr=new J([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),Zr=new J([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Qr=new J([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),$r=function(e,t){for(var n=new Y(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new Yr(n[30]),r=1;r<30;++r)for(var a=n[r];a<n[r+1];++a)i[a]=a-n[r]<<5|r;return{b:n,r:i}},ei=$r(Xr,2),ti=ei.b,ni=ei.r;ti[28]=258,ni[258]=28;var ri=$r(Zr,0);ri.b;for(var ii=ri.r,ai=new Y(32768),X=0;X<32768;++X){var Z=(X&43690)>>1|(X&21845)<<1;Z=(Z&52428)>>2|(Z&13107)<<2,Z=(Z&61680)>>4|(Z&3855)<<4,ai[X]=((Z&65280)>>8|(Z&255)<<8)>>1}for(var oi=(function(e,t,n){for(var r=e.length,i=0,a=new Y(t);i<r;++i)e[i]&&++a[e[i]-1];var o=new Y(t);for(i=1;i<t;++i)o[i]=o[i-1]+a[i-1]<<1;var s;if(n){s=new Y(1<<t);var c=15-t;for(i=0;i<r;++i)if(e[i])for(var l=i<<4|e[i],u=t-e[i],d=o[e[i]-1]++<<u,f=d|(1<<u)-1;d<=f;++d)s[ai[d]>>c]=l}else for(s=new Y(r),i=0;i<r;++i)e[i]&&(s[i]=ai[o[e[i]-1]++]>>15-e[i]);return s}),si=new J(288),X=0;X<144;++X)si[X]=8;for(var X=144;X<256;++X)si[X]=9;for(var X=256;X<280;++X)si[X]=7;for(var X=280;X<288;++X)si[X]=8;for(var ci=new J(32),X=0;X<32;++X)ci[X]=5;var li=oi(si,9,0),ui=oi(ci,5,0),di=function(e){return(e+7)/8|0},fi=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new J(e.subarray(t,n))},Q=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},pi=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},mi=function(e,t){for(var n=[],r=0;r<e.length;++r)e[r]&&n.push({s:r,f:e[r]});var i=n.length,a=n.slice();if(!i)return{t:xi,l:0};if(i==1){var o=new J(n[0].s+1);return o[n[0].s]=1,{t:o,l:1}}n.sort(function(e,t){return e.f-t.f}),n.push({s:-1,f:25001});var s=n[0],c=n[1],l=0,u=1,d=2;for(n[0]={s:-1,f:s.f+c.f,l:s,r:c};u!=i-1;)s=n[n[l].f<n[d].f?l++:d++],c=n[l!=u&&n[l].f<n[d].f?l++:d++],n[u++]={s:-1,f:s.f+c.f,l:s,r:c};for(var f=a[0].s,r=1;r<i;++r)a[r].s>f&&(f=a[r].s);var p=new Y(f+1),m=hi(n[u-1],p,0);if(m>t){var r=0,h=0,g=m-t,_=1<<g;for(a.sort(function(e,t){return p[t.s]-p[e.s]||e.f-t.f});r<i;++r){var v=a[r].s;if(p[v]>t)h+=_-(1<<m-p[v]),p[v]=t;else break}for(h>>=g;h>0;){var y=a[r].s;p[y]<t?h-=1<<t-p[y]++-1:++r}for(;r>=0&&h;--r){var b=a[r].s;p[b]==t&&(--p[b],++h)}m=t}return{t:new J(p),l:m}},hi=function(e,t,n){return e.s==-1?Math.max(hi(e.l,t,n+1),hi(e.r,t,n+1)):t[e.s]=n},gi=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new Y(++t),r=0,i=e[0],a=1,o=function(e){n[r++]=e},s=1;s<=t;++s)if(e[s]==i&&s!=t)++a;else{if(!i&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(i),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(i);a=1,i=e[s]}return{c:n.subarray(0,r),n:t}},_i=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},vi=function(e,t,n){var r=n.length,i=di(t+2);e[i]=r&255,e[i+1]=r>>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var a=0;a<r;++a)e[i+a+4]=n[a];return(i+4+r)*8},yi=function(e,t,n,r,i,a,o,s,c,l,u){Q(t,u++,n),++i[256];for(var d=mi(i,15),f=d.t,p=d.l,m=mi(a,15),h=m.t,g=m.l,_=gi(f),v=_.c,y=_.n,b=gi(h),x=b.c,S=b.n,C=new Y(19),w=0;w<v.length;++w)++C[v[w]&31];for(var w=0;w<x.length;++w)++C[x[w]&31];for(var T=mi(C,7),E=T.t,D=T.l,O=19;O>4&&!E[Qr[O-1]];--O);var k=l+5<<3,A=_i(i,si)+_i(a,ci)+o,j=_i(i,f)+_i(a,h)+o+14+3*O+_i(C,E)+2*C[16]+3*C[17]+7*C[18];if(c>=0&&k<=A&&k<=j)return vi(t,u,e.subarray(c,c+l));var M,N,P,F;if(Q(t,u,1+(j<A)),u+=2,j<A){M=oi(f,p,0),N=f,P=oi(h,g,0),F=h;var ee=oi(E,D,0);Q(t,u,y-257),Q(t,u+5,S-1),Q(t,u+10,O-4),u+=14;for(var w=0;w<O;++w)Q(t,u+3*w,E[Qr[w]]);u+=3*O;for(var I=[v,x],te=0;te<2;++te)for(var L=I[te],w=0;w<L.length;++w){var R=L[w]&31;Q(t,u,ee[R]),u+=E[R],R>15&&(Q(t,u,L[w]>>5&127),u+=L[w]>>12)}}else M=li,N=si,P=ui,F=ci;for(var w=0;w<s;++w){var z=r[w];if(z>255){var R=z>>18&31;pi(t,u,M[R+257]),u+=N[R+257],R>7&&(Q(t,u,z>>23&31),u+=Xr[R]);var ne=z&31;pi(t,u,P[ne]),u+=F[ne],ne>3&&(pi(t,u,z>>5&8191),u+=Zr[ne])}else pi(t,u,M[z]),u+=N[z]}return pi(t,u,M[256]),u+N[256]},bi=new Yr([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),xi=new J(0),Si=function(e,t,n,r,i,a){var o=a.z||e.length,s=new J(r+o+5*(1+Math.ceil(o/7e3))+i),c=s.subarray(r,s.length-i),l=a.l,u=(a.r||0)&7;if(t){u&&(c[0]=a.r>>3);for(var d=bi[t-1],f=d>>13,p=d&8191,m=(1<<n)-1,h=a.p||new Y(32768),g=a.h||new Y(m+1),_=Math.ceil(n/3),v=2*_,y=function(t){return(e[t]^e[t+1]<<_^e[t+2]<<v)&m},b=new Yr(25e3),x=new Y(288),S=new Y(32),C=0,w=0,T=a.i||0,E=0,D=a.w||0,O=0;T+2<o;++T){var k=y(T),A=T&32767,j=g[k];if(h[A]=j,g[k]=A,D<=T){var M=o-T;if((C>7e3||E>24576)&&(M>423||!l)){u=yi(e,c,0,b,x,S,w,E,O,T-O,u),E=C=w=0,O=T;for(var N=0;N<286;++N)x[N]=0;for(var N=0;N<30;++N)S[N]=0}var P=2,F=0,ee=p,I=A-j&32767;if(M>2&&k==y(T-I))for(var te=Math.min(f,M)-1,L=Math.min(32767,T),R=Math.min(258,M);I<=L&&--ee&&A!=j;){if(e[T+P]==e[T+P-I]){for(var z=0;z<R&&e[T+z]==e[T+z-I];++z);if(z>P){if(P=z,F=I,z>te)break;for(var ne=Math.min(I,z-2),re=0,N=0;N<ne;++N){var ie=T-I+N&32767,ae=ie-h[ie]&32767;ae>re&&(re=ae,j=ie)}}}A=j,j=h[A],I+=A-j&32767}if(F){b[E++]=268435456|ni[P]<<18|ii[F];var oe=ni[P]&31,se=ii[F]&31;w+=Xr[oe]+Zr[se],++x[257+oe],++S[se],D=T+P,++C}else b[E++]=e[T],++x[e[T]]}}for(T=Math.max(T,D);T<o;++T)b[E++]=e[T],++x[e[T]];u=yi(e,c,l,b,x,S,w,E,O,T-O,u),l||(a.r=u&7|c[u/8|0]<<3,u-=7,a.h=g,a.p=h,a.i=T,a.w=D)}else{for(var T=a.w||0;T<o+l;T+=65535){var ce=T+65535;ce>=o&&(c[u/8|0]=l,ce=o),u=vi(c,u+1,e.subarray(T,ce))}a.i=o}return fi(s,0,r+di(u)+i)},Ci=(function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var n=t,r=9;--r;)n=(n&1&&-306674912)^n>>>1;e[t]=n}return e})(),wi=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=Ci[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},Ti=function(e,t,n,r,i){if(!i&&(i={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),o=new J(a.length+e.length);o.set(a),o.set(e,a.length),e=o,i.w=a.length}return Si(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,i)},Ei=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},Di=function(e,t){var n=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level<2?4:t.level==9?2:0,e[9]=3,t.mtime!=0&&Ei(e,4,Math.floor(new Date(t.mtime||Date.now())/1e3)),n){e[3]=8;for(var r=0;r<=n.length;++r)e[r+10]=n.charCodeAt(r)}},Oi=function(e){return 10+(e.filename?e.filename.length+1:0)};function ki(e,t){t||={};var n=wi(),r=e.length;n.p(e);var i=Ti(e,t,Oi(t),8),a=i.length;return Di(i,t),Ei(i,a-8,n.d()),Ei(i,a-4,r),i}var Ai=typeof TextEncoder<`u`&&new TextEncoder,ji=typeof TextDecoder<`u`&&new TextDecoder;try{ji.decode(xi,{stream:!0})}catch{}function Mi(e,t){if(t){for(var n=new J(e.length),r=0;r<e.length;++r)n[r]=e.charCodeAt(r);return n}if(Ai)return Ai.encode(e);for(var i=e.length,a=new J(e.length+(e.length>>1)),o=0,s=function(e){a[o++]=e},r=0;r<i;++r){if(o+5>a.length){var c=new J(o+8+(i-r<<1));c.set(a),a=c}var l=e.charCodeAt(r);l<128||t?s(l):l<2048?(s(192|l>>6),s(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|e.charCodeAt(++r)&1023,s(240|l>>18),s(128|l>>12&63),s(128|l>>6&63),s(128|l&63)):(s(224|l>>12),s(128|l>>6&63),s(128|l&63))}return fi(a,0,o)}function Ni(e,t,n,{redact:r,buildId:i,producer:a}){let o={appModel:e,catalog:t,configFindings:gt(e.app)},s=r?wr(o.appModel,o.catalog,o.configFindings):o,c=xt(s.appModel,s.catalog,s.configFindings),l={coreVersion:cr,buildId:i,producer:a};return lr(s.appModel,s.catalog,s.configFindings,n,c,l)}var Pi=32768;function Fi(e){let t=``;for(let n=0;n<e.length;n+=Pi)t+=String.fromCharCode(...e.subarray(n,n+Pi));return btoa(t)}function Ii(e){return Fi(ki(Mi(JSON.stringify(e))))}var Li=`__SPARKFORENSICS_RUN_GZ__`;function Ri(e){return`window.${Li} = "${e}";`}var zi=`export-template.html`,Bi=`<script src="./data.js"><\/script>`;function Vi(e,t){let n=e.indexOf(Bi);if(n===-1||e.indexOf(Bi,n+1)!==-1)throw Error(`The HTML export template is missing or malformed in this build.`);let r=`<script>${Ri(t)}<\/script>`;return e.slice(0,n)+r+e.slice(n+33)}var Hi=`b5b0e0b6178129de4de482d4b59fbf881822655d8911b374c4a60a33b38f63fb`,Ui=`sparkforensics-web 0.26.0`,Wi={markdown:`md`,json:`json`,html:`html`};function Gi(e,t,n){let r=new Blob([e],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=t,document.body.appendChild(a),a.click(),a.remove(),URL.revokeObjectURL(i)}function Ki(e,t,n){return`evidence-${String(e??`report`).replace(/[^\w.-]/g,`_`)}${n?`-redacted`:``}.${Wi[t]}`}async function qi(){let e=await fetch(zi);if(!e.ok)throw Error(`The HTML export template could not be loaded (HTTP ${e.status}).`);return e.text()}function Ji(){let e=B(e=>e.appModel),t=B(e=>e.catalog),n=B(e=>e.skippedLines),[r,i]=(0,U.useState)(!1),a=async()=>{try{let i=Ni(e,t,n,{redact:r,buildId:Hi,producer:Ui});Gi(Vi(await qi(),Ii(i)),Ki(i.app?.id??null,`html`,r),`text/html`)}catch(e){console.error(`HTML export failed`,e),Dt.error(`HTML export failed`,{description:e instanceof Error?e.message:String(e)})}},o=t=>{try{let{markdown:n,json:i}=Jr(e,{redact:r}),a=Ki(i.summary?.app?.id??null,t,r);t===`json`?Gi(`${JSON.stringify(i,null,2)}\n`,a,`application/json`):Gi(`${n}\n`,a,`text/markdown`)}catch(e){console.error(`Evidence export failed`,e),Dt.error(`Evidence export failed`,{description:e instanceof Error?e.message:String(e)})}};return{redact:r,setRedact:i,download:e=>{e===`html`?a():o(e)}}}function Yi({redact:e,setRedact:t,download:n}){return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(an,{checked:e,onClick:e=>e.preventDefault(),onCheckedChange:e=>t(!!e),children:`Redact identifiers`}),(0,W.jsx)(on,{}),(0,W.jsx)(G,{onClick:()=>n(`markdown`),children:`Download Markdown`}),(0,W.jsx)(G,{onClick:()=>n(`json`),children:`Download JSON`}),(0,W.jsx)(G,{onClick:()=>n(`html`),children:`Download HTML dashboard`})]})}function Xi(){let e=Ji();return(0,W.jsxs)(tn,{children:[(0,W.jsxs)(nn,{render:(0,W.jsx)(H,{variant:`ghost`,size:`sm`}),children:[(0,W.jsx)(Pt,{"aria-hidden":`true`}),`Export evidence`]}),(0,W.jsx)(rn,{align:`end`,children:(0,W.jsx)(Yi,{...e})})]})}function Zi({activeName:e,activeSub:t,activeId:n=null,entries:r,onPick:i,onRemove:a,onOpenNew:o}){let{pickRecent:s}=ke(),c=(0,U.useCallback)(e=>{if(i){i(e);return}s(e,r.find(t=>t.id===e)?.handle)},[i,r,s]);return(0,W.jsxs)(tn,{children:[(0,W.jsxs)(nn,{className:V(Tt({variant:`ghost`}),`h-auto min-w-0 shrink max-w-40 flex-col items-start justify-center gap-0 py-1 sm:max-w-80`),children:[(0,W.jsxs)(`span`,{className:`flex w-full min-w-0 items-center gap-1.5`,children:[(0,W.jsx)(`span`,{className:`min-w-0 truncate font-heading text-sm font-semibold`,children:e??`No file`}),(0,W.jsx)(Ce,{"aria-hidden":`true`,className:`ml-auto shrink-0 opacity-60`})]}),t?(0,W.jsx)(`span`,{className:`w-full min-w-0 truncate text-left text-xs text-muted-foreground`,children:t}):null]}),(0,W.jsxs)(rn,{className:`w-72 p-2`,children:[(0,W.jsx)(Ot,{entries:r,activeId:n,onPick:c,onRemove:a}),(0,W.jsx)(on,{}),(0,W.jsx)(G,{onClick:()=>o?.(),children:`Load new file…`})]})]})}function Qi({open:e,entries:t,onSelect:n,onOpenChange:r}){let[i,a]=(0,U.useState)(``),o=(0,U.useRef)(null);(0,U.useEffect)(()=>{e||a(``)},[e]);let s=i.trim().toLowerCase(),c=s?t.filter(e=>e.label.toLowerCase().includes(s)||e.secondary.toLowerCase().includes(s)||String(e.executionId).includes(s)):t;function l(e){(o.current?.querySelectorAll(`button`)??[])[e]?.focus()}function u(e,t){e.key===`ArrowDown`?(e.preventDefault(),l(t+1)):e.key===`ArrowUp`&&(e.preventDefault(),l(t-1))}function d(e){e.key===`Enter`?c.length===1&&n(c[0].stageId):e.key===`ArrowDown`&&(e.preventDefault(),l(0))}return(0,W.jsx)(Pn,{open:e,onOpenChange:r,children:(0,W.jsxs)(Ln,{className:`flex max-h-[85vh] flex-col sm:max-w-xl`,children:[(0,W.jsxs)(Rn,{children:[(0,W.jsxs)(Bn,{className:`flex items-center gap-1.5`,children:[(0,W.jsx)(lt,{"aria-hidden":`true`,className:`size-4 text-plan-aggregate`}),`Open plan graph`]}),(0,W.jsx)(Vn,{children:`Choose which SQL execution's plan to open.`})]}),(0,W.jsx)(sn,{autoFocus:!0,placeholder:`Filter executions…`,value:i,onChange:e=>a(e.target.value),onKeyDown:d}),c.length===0?(0,W.jsx)(`p`,{className:`px-1.5 py-1 text-sm text-muted-foreground`,children:`No matching executions`}):(0,W.jsx)(`ul`,{ref:o,className:`flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto`,children:c.map((e,t)=>(0,W.jsx)(`li`,{children:(0,W.jsxs)(`button`,{type:`button`,className:`flex w-full min-w-0 cursor-pointer flex-col items-start gap-0.5 rounded-md px-1.5 py-1 text-left hover:bg-muted`,onClick:()=>n(e.stageId),onKeyDown:e=>u(e,t),children:[(0,W.jsxs)(`span`,{className:`flex w-full min-w-0 items-center gap-1.5`,children:[e.impactBand!=null&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Se,{impactBand:e.impactBand}),(0,W.jsxs)(`span`,{className:`shrink-0 text-xs font-normal text-muted-foreground`,children:[e.findingCount,` finding`,e.findingCount===1?``:`s`]})]}),(0,W.jsx)(`span`,{className:`truncate text-sm font-medium`,children:e.secondary})]}),(0,W.jsx)(`span`,{className:`w-full truncate text-xs text-muted-foreground`,children:e.label})]})},e.executionId))})]})})}var $i={name:`sparkforensics-web`,version:`0.26.0`,description:`Zero-backend browser dashboard that parses Apache Spark event logs to diagnose performance bottlenecks: skew, spill, GC pressure, stragglers, cache utilization, and more.`,private:!0,type:`module`,workspaces:[`.`,`packages/*`],license:`MIT`,author:`Agustin Recoba`,repository:{type:`git`,url:`git+https://github.com/shuffle-works/sparkforensics.git`},bugs:{url:`https://github.com/shuffle-works/sparkforensics/issues`},homepage:`https://github.com/shuffle-works/sparkforensics#readme`,keywords:[`apache-spark`,`spark`,`spark-history-server`,`performance`,`diagnostics`,`observability`,`event-log`,`dashboard`,`query-plan`],engines:{node:`>=22.18.0 <23.0.0 || >=23.6.0`},scripts:{test:`vitest run`,"test:watch":`vitest`,"test:coverage":`vitest run --coverage`,"test:core":`npm run test:coverage --workspace packages/core`,"test:cli":`npm run test:coverage --workspace packages/cli`,"test:mcp":`npm run test:coverage --workspace packages/mcp`,"test:server":`npm test --workspace packages/server`,lint:`eslint .`,release:`node scripts/publish-packages.mjs`,"local-server":`node packages/server/index.js`,"capture-components":`node dev/component-capture/capture.mjs`,"docs:fetch":`node scripts/fetch-tuning-docs.mjs`,"docs:bump":`node scripts/fetch-tuning-docs.mjs bump`,"doc-anchor-coverage":`node scripts/doc-anchor-coverage.js`,"split-detection-docs":`node scripts/split-detection-docs.mjs`,prepare:`git config core.hooksPath .githooks`,dev:`vite`,build:`npm run docs:build && vite build && vite build --config vite.export.config.ts --mode template`,"build:export":`vite build --config vite.export.config.ts`,preview:`vite preview`,"docs:dev":`node scripts/fetch-tuning-docs.mjs --allow-stale && node scripts/build-tuning-reference.mjs && vitepress dev docs-site`,"docs:build":`node scripts/fetch-tuning-docs.mjs && node scripts/build-tuning-reference.mjs && vitepress build docs-site`,"docs:preview":`vitepress preview docs-site`},devDependencies:{"@changesets/cli":`^3.0.3`,"@eslint/js":`^10.0.1`,"@tailwindcss/vite":`^4.3.3`,"@testing-library/jest-dom":`^7.0.1`,"@testing-library/react":`^16.3.3`,"@testing-library/user-event":`^14.6.7`,"@types/node":`^26.6.2`,"@types/react":`^19.3.0`,"@types/react-dom":`^19.3.0`,"@vitejs/plugin-react":`^5.2.0`,"@vitest/coverage-v8":`^5.0.1`,eslint:`^10.11.0`,"fake-indexeddb":`^6.2.5`,globals:`^17.12.0`,"js-yaml":`^5.4.2`,jsdom:`^30.1.1`,"markdown-it-footnote":`^4.0.0`,playwright:`^1.63.0`,shadcn:`^4.21.0`,tailwindcss:`^4.3.3`,typescript:`^7.0.2`,vite:`^8.3.0`,"vite-plugin-singlefile":`^2.3.3`,vitepress:`^1.6.4`,vitest:`^5.0.1`},dependencies:{"@base-ui/react":`^1.8.0`,"@dagrejs/dagre":`^3.1.1`,"@modelcontextprotocol/sdk":`^1.30.0`,"@sparkforensics/core":`*`,"@tanstack/react-table":`^9.2.4`,"@xyflow/react":`^12.11.6`,"class-variance-authority":`^0.7.1`,clsx:`^2.1.1`,"lucide-react":`^1.47.0`,react:`^19.3.0`,"react-dom":`^19.3.0`,"react-resizable-panels":`^4.13.2`,recharts:`^3.8.0`,sonner:`^2.0.8`,"tailwind-merge":`^3.7.0`,"tw-animate-css":`^1.4.0`,zod:`^4.6.5`,zustand:`^5.0.15`}};function ea({keys:e}){return(0,W.jsx)(`span`,{className:`flex shrink-0 items-center gap-1`,children:e.map((e,t)=>(0,W.jsxs)(`span`,{className:`flex items-center gap-1`,children:[t>0?(0,W.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`or`}):null,(0,W.jsx)(`kbd`,{className:`rounded-md border border-border bg-muted px-1.5 py-0.5 font-mono text-xs font-medium text-foreground`,children:e})]},e))})}function $({keys:e,children:t}){return(0,W.jsxs)(`div`,{className:`flex items-center justify-between gap-4 py-1.5`,children:[(0,W.jsx)(`span`,{className:`text-sm text-foreground`,children:t}),(0,W.jsx)(ea,{keys:e})]})}function ta({title:e,children:t}){return(0,W.jsxs)(`div`,{children:[(0,W.jsx)(`h3`,{className:`mb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase`,children:e}),(0,W.jsx)(`div`,{className:`divide-y divide-border/60`,children:t})]})}function na({open:e,onOpenChange:t}){return(0,W.jsx)(Pn,{open:e,onOpenChange:t,children:(0,W.jsxs)(Ln,{className:`sm:max-w-md`,children:[(0,W.jsxs)(Rn,{children:[(0,W.jsx)(Bn,{children:`Keyboard shortcuts`}),(0,W.jsx)(Vn,{children:`Everything below works from anywhere the board is loaded.`})]}),(0,W.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,W.jsxs)(ta,{title:`Navigation`,children:[(0,W.jsx)($,{keys:[`Tab`,`Shift+Tab`],children:`Move between controls`}),(0,W.jsx)($,{keys:[`Enter`,`Space`],children:`Activate the focused control, open a stage's details, or sort a column`}),(0,W.jsx)($,{keys:[`Esc`],children:`Close the open dialog, or leave a full-page view like Plan graph`})]}),(0,W.jsxs)(ta,{title:`Menus and lists`,children:[(0,W.jsx)($,{keys:[`↑`,`↓`],children:`Move between menu items or picker rows`}),(0,W.jsx)($,{keys:[`A–Z`,`0–9`],children:`Filter the Type and Stage dropdowns, and the plan execution picker, as you type`})]}),(0,W.jsxs)(ta,{title:`Triage (Advanced view only)`,children:[(0,W.jsx)($,{keys:[`j`,`k`],children:`Next or previous finding, starting with the verdict's steps`}),(0,W.jsx)($,{keys:[`Enter`],children:`Show the focused finding's evidence, or expand a grouped finding`}),(0,W.jsx)($,{keys:[`f`],children:`Jump to the finding filters`}),(0,W.jsx)($,{keys:[`1`,`2`],children:`Switch to Findings or Full app report`})]}),(0,W.jsx)(ta,{title:`Help`,children:(0,W.jsx)($,{keys:[`?`],children:`Open this list`})})]}),(0,W.jsxs)(`p`,{className:`text-center text-xs text-muted-foreground`,children:[`SparkForensics v`,$i.version]})]})})}var ra=`Show confidence levels, evidence, documentation links, finding filters and triage shortcuts (j/k, f, 1/2)`;function ia(){let e=ge()===`advanced`;return(0,W.jsxs)(ln,{variant:`outline`,pressed:e,onPressedChange:e=>de.getState().setWidgetDensity(e?`advanced`:`basic`),className:`tap-target-comfortable aria-pressed:border-primary aria-pressed:bg-primary/10 aria-pressed:text-foreground aria-pressed:hover:bg-primary/15`,title:ra,children:[e?(0,W.jsx)(`span`,{"aria-hidden":`true`,className:`size-1.5 shrink-0 rounded-full bg-primary`}):null,`Advanced view`]})}function aa(){let e=ge()===`advanced`;return(0,W.jsx)(an,{checked:e,onCheckedChange:e=>de.getState().setWidgetDensity(e?`advanced`:`basic`),title:ra,children:`Advanced view`})}var oa=`docs/`;function sa(e,t){return e===`warning`?`${t} warning${t===1?``:`s`}`:`${t} ${e}`}function ca(e,t){return e.stageId!=null&&t.includes(e.stageId)?!0:Mn(e)?.some(e=>t.includes(e))??!1}function la(e,t){let n=[];for(let[r,i]of e.sql){if(!i.planTree)continue;let a=st(r,e.stages),o=a.length>0?Math.min(...a):null;if(o==null)continue;let s=i.description,c=typeof s==`string`&&s.trim()?s:`SQL execution #${r}`,l=i.startTime,u=i.endTime,d=typeof l==`number`&&typeof u==`number`?F(u-l):null,f=t.filter(e=>ca(e,a)),p=ie(f)??null,m=f.length;n.push({executionId:r,stageId:o,label:c,secondary:d?`#${r} · ${d}`:`#${r}`,impactBand:p,findingCount:m})}return n.sort((e,t)=>{let n=e.impactBand?L[e.impactBand]:1/0,r=t.impactBand?L[t.impactBand]:1/0;return n===r?e.executionId-t.executionId:n-r}),n}function ua({onLoadNew:e,recentEntries:t,activeFileId:n,onPickRecent:r,onRemoveRecent:i,onCompare:a,onJumpToFindings:o,sectionControls:s,leadingContent:c}){let l=B(e=>e.appModel.app),u=B(e=>e.catalog),d=B(e=>e.skippedLines),f=B(e=>e.exportMode),{theme:p,toggle:m}=Re(),h=(0,U.useRef)(null),g=B(e=>e.comparison),_=a!=null&&!s&&!f&&n!=null&&l!=null&&!g.baselineId,v=Ji(),y=B(e=>e.appModel),b=(0,U.useMemo)(()=>la(y,u),[y,u]),[x,S]=(0,U.useState)(!1),[C,w]=(0,U.useState)(!1);(0,U.useEffect)(()=>{function e(e){if(e.key!==`?`)return;let t=e.target,n=t?.tagName;n===`INPUT`||n===`TEXTAREA`||t?.isContentEditable||(e.preventDefault(),w(!0))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);function T(){if(b.length!==0){if(b.length===1){de.getState().openPlanGraph(b[0].stageId,{initialScope:`full`});return}S(!0)}}function E(e){de.getState().openPlanGraph(e,{initialScope:`full`}),S(!1)}let D=l?.name||`Spark Application`,O=[l?.id,l?.sparkVersion?`Spark ${l.sparkVersion}`:null].filter(Boolean).join(` · `),k=ae(),A=(0,U.useMemo)(()=>fe(k),[k]),j=ie(A),N=j?A.filter(e=>e.impactBand===j).length:0,P=k?.data.verdict,F=P?.clean??!1,ee=P?.failed??!1;return(0,W.jsxs)(`header`,{className:`sticky top-0 z-30 flex min-w-0 flex-wrap items-center gap-3 border-b border-border bg-background/95 px-4 py-2 backdrop-blur`,children:[s?null:(0,W.jsx)(`h1`,{className:`sr-only`,children:`SparkForensics`}),(0,W.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[!s&&!f?(0,W.jsx)(H,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable shrink-0`,"aria-label":`New analysis`,title:`Start a new analysis`,onClick:e,children:(0,W.jsx)(Rt,{"aria-hidden":`true`})}):null,f?(0,W.jsxs)(`div`,{className:`flex min-w-0 shrink flex-col items-start justify-center gap-0 py-1`,children:[(0,W.jsx)(`span`,{className:`min-w-0 truncate font-heading text-sm font-semibold`,children:D}),O?(0,W.jsx)(`span`,{className:`w-full min-w-0 truncate text-left text-xs text-muted-foreground`,children:O}):null]}):(0,W.jsx)(Zi,{activeName:D,activeSub:O,activeId:n,entries:t,onPick:r,onRemove:i,onOpenNew:e}),d>0?(0,W.jsxs)(`div`,{className:`min-w-0 truncate text-xs text-warning`,children:[d,` line`,d===1?``:`s`,` skipped: malformed or invalid data`]}):null,c]}),s?(0,W.jsx)(`div`,{className:`flex min-w-0 shrink-0 flex-wrap items-center gap-3 max-sm:order-3 max-sm:w-full max-sm:shrink max-sm:gap-2`,children:s}):j?o?(0,W.jsx)(`button`,{type:`button`,"aria-label":`${sa(j,N)}: show them in Findings`,title:`Show them in Findings`,onClick:()=>o(j),className:V(M(),ue({impactBand:j}),`tap-target-comfortable cursor-pointer font-mono hover:underline focus-visible:outline-none`),children:sa(j,N)}):(0,W.jsx)(ve,{label:sa(j,N),impactBand:j,className:`shrink-0`}):ee?(0,W.jsx)(ve,{label:`Run failed`,impactBand:`critical`,className:`shrink-0`}):F?(0,W.jsxs)(`span`,{className:V(`inline-flex shrink-0 items-center gap-1.5 rounded-full bg-clean/10 px-2 py-0.5 text-xs font-medium text-clean`),children:[(0,W.jsx)(`span`,{"aria-hidden":`true`,className:`inline-block size-2 shrink-0 rounded-full bg-clean`}),`No findings`]}):(0,W.jsx)(`span`,{className:`inline-flex shrink-0 items-center rounded-full border border-border px-2 py-0.5 text-xs font-medium text-muted-foreground`,children:`Not fully checked`}),(0,W.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[!s&&g.baselineId&&!g.active?(0,W.jsx)(H,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>de.getState().setComparisonActive(!0),children:`← Back to comparison`}):null,(0,W.jsxs)(`div`,{className:`hidden items-center gap-1 sm:flex`,children:[_?(0,W.jsxs)(H,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,"aria-label":`Compare with another run`,title:`Compare with another run`,onClick:a,children:[(0,W.jsx)(wt,{"aria-hidden":`true`}),(0,W.jsx)(`span`,{"aria-hidden":`true`,className:`xl:hidden`,children:`Compare`}),(0,W.jsx)(`span`,{"aria-hidden":`true`,className:`hidden xl:inline`,children:`Compare with another run`})]}):null,!s&&!f?(0,W.jsx)(Xi,{}):null,!s&&b.length>0?(0,W.jsxs)(H,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:T,children:[(0,W.jsx)(lt,{"aria-hidden":`true`,className:`text-plan-aggregate`}),`Plan graph`]}):null,s?null:(0,W.jsx)(ia,{}),f?null:(0,W.jsx)(H,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Docs`,title:`Read the docs`,nativeButton:!1,render:(0,W.jsx)(`a`,{href:oa,target:`_blank`,rel:`noopener noreferrer`}),children:(0,W.jsx)(se,{"aria-hidden":`true`})}),(0,W.jsx)(H,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Keyboard shortcuts`,title:`Keyboard shortcuts (?)`,onClick:()=>w(!0),children:(0,W.jsx)(Bt,{"aria-hidden":`true`})}),(0,W.jsx)(H,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Toggle theme`,"aria-pressed":p===`light`,title:`Toggle theme`,onClick:m,children:p===`dark`?(0,W.jsx)(rt,{"aria-hidden":`true`}):(0,W.jsx)(tt,{"aria-hidden":`true`})})]}),(0,W.jsxs)(tn,{onOpenChange:(e,t)=>{!e&&t.reason===`outside-press`&&setTimeout(()=>{document.activeElement===document.body&&h.current?.focus()})},children:[(0,W.jsx)(nn,{ref:h,className:`tap-target-comfortable inline-flex size-8 items-center justify-center rounded-lg hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 sm:hidden`,"aria-label":`More options`,children:(0,W.jsx)(It,{"aria-hidden":`true`})}),(0,W.jsxs)(rn,{align:`end`,children:[_?(0,W.jsxs)(G,{onClick:a,children:[(0,W.jsx)(wt,{"aria-hidden":`true`}),`Compare with another run`]}):null,!s&&!f?(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(Yi,{...v}),(0,W.jsx)(on,{})]}):null,!s&&b.length>0?(0,W.jsxs)(G,{onClick:T,children:[(0,W.jsx)(lt,{"aria-hidden":`true`,className:`text-plan-aggregate`}),`Plan graph`]}):null,s?null:(0,W.jsx)(aa,{}),f?null:(0,W.jsx)(G,{nativeButton:!1,render:(0,W.jsx)(`a`,{href:oa,target:`_blank`,rel:`noopener noreferrer`}),children:`Docs`}),(0,W.jsx)(G,{onClick:()=>w(!0),children:`Keyboard shortcuts`}),(0,W.jsx)(G,{onClick:m,children:`Toggle theme`})]})]})]}),(0,W.jsx)(Qi,{open:x,entries:b,onSelect:E,onOpenChange:S}),(0,W.jsx)(na,{open:C,onOpenChange:w})]})}function da(e){let{pickRecent:t}=ke(),[n,r]=(0,U.useState)([]),i=(0,U.useCallback)(()=>{Ve().then(e=>r(e)).catch(()=>r([]))},[]);return(0,U.useEffect)(()=>{i()},[i,e]),{recentEntries:n,onPickRecent:(0,U.useCallback)(async e=>{let r=n.find(t=>t.id===e),a=await t(e,r?.handle);(a===`restored`||a===`gone`)&&i()},[n,t,i]),onRemoveRecent:(0,U.useCallback)(e=>{let t=n.find(t=>t.id===e);Oe(e).catch(()=>{}).finally(i),t&&Dt(`Removed "${t.appName||t.name}" from recent files`,{action:{label:`Undo`,onClick:()=>{ze(t).catch(()=>{}).finally(i)}}})},[n,i])}}export{$t as A,sn as C,nn as D,rn as E,Wt as F,At as I,Vt as M,Gt as N,Xt as O,Ut as P,cn as S,an as T,bn as _,Hn as a,On as b,Vn as c,Bn as d,Nn as f,kn as g,An as h,Qn as i,en as j,qt as k,zn as l,jn as m,ua as n,Pn as o,Mn as p,sr as r,Ln as s,da as t,Rn as u,Sn as v,tn as w,hn as x,Cn as y};
|