sparkforensics-server 0.2.0 → 0.2.3

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.
Files changed (288) hide show
  1. package/index.js +1 -1
  2. package/lib/static-files.js +5 -4
  3. package/package.json +4 -3
  4. package/public/assets/AutoscalingChurn-Bf5TN-s_.js +1 -0
  5. package/public/assets/CacheUtilization-DRf_FNrK.js +1 -0
  6. package/public/assets/CachingOpportunity-BTJzIhtI.js +1 -0
  7. package/public/assets/ColdStart-DnFgnD3n.js +1 -0
  8. package/public/assets/ConfigAudit-B5FsOdmu.js +1 -0
  9. package/public/assets/CoreUsageArea-CTksBPuq.js +1 -0
  10. package/public/assets/Dashboard-BFMsMuc_.js +1 -0
  11. package/public/assets/DuplicatePlanSubtree-BCt-Guuh.js +1 -0
  12. package/public/assets/DurationHistogram-xRcnND4k.js +1 -0
  13. package/public/assets/EmptyState-CnTrSjtU.js +1 -0
  14. package/public/assets/ExecutorUtilization-CP21XlUq.js +1 -0
  15. package/public/assets/GcPressure-BoEJsLjb.js +1 -0
  16. package/public/assets/ImpactEstimate-BHcqJkcZ.js +1 -0
  17. package/public/assets/IncompleteRun-b9FWrOHn.js +1 -0
  18. package/public/assets/JobFailures-C5FkTq3O.js +1 -0
  19. package/public/assets/MemoryUtilization-D2W4AB_f.js +1 -0
  20. package/public/assets/OverBroadcast-Btu3xorf.js +1 -0
  21. package/public/assets/PartitionSizing-yZWhLN0e.js +1 -0
  22. package/public/assets/PlanExplorer-DSk1ivS4.js +1 -0
  23. package/public/assets/PlanGraphRoute-C3iOzUdB.js +1 -0
  24. package/public/assets/RetryWaste-B4436kr1.js +1 -0
  25. package/public/assets/RowPagination-oeWB8gBm.js +1 -0
  26. package/public/assets/ShuffleIO-DUiv8EJe.js +1 -0
  27. package/public/assets/Skew-D2lB1oQc.js +1 -0
  28. package/public/assets/SlowHost-Qb_8aa-W.js +1 -0
  29. package/public/assets/SmallFiles-u6suTgfj.js +1 -0
  30. package/public/assets/SpeculationWaste-vUCniiFP.js +1 -0
  31. package/public/assets/Spill-BskXFX2e.js +1 -0
  32. package/public/assets/StageFailed-D9b83Jvy.js +1 -0
  33. package/public/assets/StageFindingGroup-DagqHOUz.js +1 -0
  34. package/public/assets/StageHeader-DibMSunO.js +1 -0
  35. package/public/assets/StagePill-Dt6V9yVw.js +1 -0
  36. package/public/assets/StageShape-CfdrDUZa.js +1 -0
  37. package/public/assets/StageSlowness-BoGLIYKR.js +1 -0
  38. package/public/assets/Straggler-DU1WSU-m.js +1 -0
  39. package/public/assets/TaskFailures-DkY6zBNJ.js +1 -0
  40. package/public/assets/TinyTask-Lsnt5mJF.js +1 -0
  41. package/public/assets/UnderBroadcast-DxHc0lwy.js +1 -0
  42. package/public/assets/WidgetLeadSummary-BdUUi7L5.js +1 -0
  43. package/public/assets/charts-vendor-0VMaLVLN.js +59 -0
  44. package/public/assets/downsample-WmNM1qc9.js +1 -0
  45. package/public/assets/finding-anchor-Bl1hRK5E.js +1 -0
  46. package/public/assets/impact-sort-DxaUheWV.js +1 -0
  47. package/public/assets/inbox-DHIFHqcn.js +1 -0
  48. package/public/assets/index-CjVklAdW.css +2 -0
  49. package/public/assets/index-U654cmB8.js +9 -0
  50. package/public/assets/parser-worker-5a9aUx3o.js +115 -0
  51. package/public/assets/plan-graph-vendor-B0sEms9Z.js +7 -0
  52. package/public/assets/plan-graph-vendor-DLioOiRN.css +1 -0
  53. package/public/assets/react-vendor-D2TLlSzI.js +9 -0
  54. package/public/assets/rolldown-runtime-hePW80VL.js +1 -0
  55. package/public/assets/select-CtKaJ5Hx.js +1 -0
  56. package/public/assets/toggle-group-DB2VfFIx.js +1 -0
  57. package/public/assets/usePagedRows-jNUWgVTD.js +1 -0
  58. package/public/assets/useRecentFiles-BiYdWs8J.js +11 -0
  59. package/public/assets/useSortMode-BhPky1lW.js +1 -0
  60. package/public/docs/404.html +3 -3
  61. package/public/docs/assets/{app.BgzsaTS3.js → app.BczRxXPr.js} +1 -1
  62. package/public/docs/assets/chunks/@localSearchIndexroot.c2HfrwDg.js +1 -0
  63. package/public/docs/assets/chunks/{VPLocalSearchBox.DOq3t-On.js → VPLocalSearchBox.DXvkTVnC.js} +1 -1
  64. package/public/docs/assets/chunks/theme.ByUdwrLG.js +2 -0
  65. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.9ToZXcTk.js +1 -0
  66. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.9ToZXcTk.lean.js +1 -0
  67. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.B1vUqtry.js +1 -0
  68. package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.BOeH4d1J.lean.js → contributor-guide_architecture_detector-contract.md.B1vUqtry.lean.js} +1 -1
  69. package/public/docs/assets/{contributor-guide_architecture_drill-down.md.BtPdlM7r.js → contributor-guide_architecture_drill-down.md.Bawx6NgP.js} +1 -1
  70. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.DHVq1UPt.js +1 -0
  71. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.DHVq1UPt.lean.js +1 -0
  72. package/public/docs/assets/{contributor-guide_architecture_overview.md.CehiRmGn.js → contributor-guide_architecture_overview.md.DkXdJ9jE.js} +1 -1
  73. package/public/docs/assets/contributor-guide_architecture_overview.md.DkXdJ9jE.lean.js +1 -0
  74. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.C-xxn0q7.js +1 -0
  75. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.C-xxn0q7.lean.js +1 -0
  76. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.DYwFeyjV.js +1 -0
  77. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.C0SovZX8.js +6 -0
  78. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.B93qJ_tT.lean.js → contributor-guide_architecture_worker-protocol.md.C0SovZX8.lean.js} +1 -1
  79. package/public/docs/assets/{contributor-guide_development-setup.md.DvAN_9mK.js → contributor-guide_development-setup.md.DvMV1xhQ.js} +3 -3
  80. package/public/docs/assets/contributor-guide_development-setup.md.DvMV1xhQ.lean.js +1 -0
  81. package/public/docs/assets/{contributor-guide_testing.md.6rIKqSyY.js → contributor-guide_testing.md.BohuQWvl.js} +1 -1
  82. package/public/docs/assets/{contributor-guide_testing.md.6rIKqSyY.lean.js → contributor-guide_testing.md.BohuQWvl.lean.js} +1 -1
  83. package/public/docs/assets/{style.DXOMCXxn.css → style.DSixAiZE.css} +1 -1
  84. package/public/docs/assets/{tuning-reference_bottleneck-failures.md.4z5BXGJ2.js → tuning-reference_bottleneck-failures.md.CAsFf3RR.js} +1 -1
  85. package/public/docs/assets/{tuning-reference_bottleneck-gc.md.DSxzZRK7.js → tuning-reference_bottleneck-gc.md.B4T3kJYV.js} +2 -2
  86. package/public/docs/assets/{tuning-reference_bottleneck-gc.md.DSxzZRK7.lean.js → tuning-reference_bottleneck-gc.md.B4T3kJYV.lean.js} +1 -1
  87. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.DDMQVOW6.js +12 -0
  88. package/public/docs/assets/{tuning-reference_bottleneck-shuffle.md.CM-nTmIH.lean.js → tuning-reference_bottleneck-shuffle.md.DDMQVOW6.lean.js} +1 -1
  89. package/public/docs/assets/{tuning-reference_bottleneck-skew.md.BdUwiDhn.js → tuning-reference_bottleneck-skew.md.B0MzhWcX.js} +4 -4
  90. package/public/docs/assets/{tuning-reference_bottleneck-skew.md.BdUwiDhn.lean.js → tuning-reference_bottleneck-skew.md.B0MzhWcX.lean.js} +1 -1
  91. package/public/docs/assets/{tuning-reference_bottleneck-small-files.md.B8kloyx8.js → tuning-reference_bottleneck-small-files.md.DHGMTmPs.js} +2 -2
  92. package/public/docs/assets/{tuning-reference_bottleneck-small-files.md.B8kloyx8.lean.js → tuning-reference_bottleneck-small-files.md.DHGMTmPs.lean.js} +1 -1
  93. package/public/docs/assets/{tuning-reference_bottleneck-straggler.md.DY36fHN5.js → tuning-reference_bottleneck-straggler.md.DIbXdAcQ.js} +2 -2
  94. package/public/docs/assets/{tuning-reference_bottleneck-straggler.md.DY36fHN5.lean.js → tuning-reference_bottleneck-straggler.md.DIbXdAcQ.lean.js} +1 -1
  95. package/public/docs/assets/{tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.js → tuning-reference_bottleneck-tiny-tasks.md.CB05v3zh.js} +1 -1
  96. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DqC_iGkw.js +5 -0
  97. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DqC_iGkw.lean.js +1 -0
  98. package/public/docs/assets/{tuning-reference_cluster-config.md.ZVmDGsQ3.js → tuning-reference_cluster-config.md.CD6vzYtD.js} +1 -1
  99. package/public/docs/assets/{tuning-reference_cluster-config.md.ZVmDGsQ3.lean.js → tuning-reference_cluster-config.md.CD6vzYtD.lean.js} +1 -1
  100. package/public/docs/assets/{tuning-reference_memory-model.md.DhT-n4y3.js → tuning-reference_memory-model.md.CWhvgevP.js} +1 -1
  101. package/public/docs/assets/{tuning-reference_memory-model.md.DhT-n4y3.lean.js → tuning-reference_memory-model.md.CWhvgevP.lean.js} +1 -1
  102. package/public/docs/assets/{user-guide_alternative-log-retrieval.md.sU3KGarf.js → user-guide_alternative-log-retrieval.md.B4tPGIal.js} +1 -1
  103. package/public/docs/assets/{user-guide_alternative-log-retrieval.md.sU3KGarf.lean.js → user-guide_alternative-log-retrieval.md.B4tPGIal.lean.js} +1 -1
  104. package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.js +3 -0
  105. package/public/docs/assets/user-guide_getting-started.md.BJvwLEIM.lean.js +1 -0
  106. package/public/docs/assets/{user-guide_mcp-tools.md.C8MiIu7F.js → user-guide_mcp-tools.md.DGvolGzt.js} +4 -4
  107. package/public/docs/assets/{user-guide_mcp-tools.md.C8MiIu7F.lean.js → user-guide_mcp-tools.md.DGvolGzt.lean.js} +1 -1
  108. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.js +1 -0
  109. package/public/docs/assets/user-guide_run-comparison.md.CQc1aoU8.lean.js +1 -0
  110. package/public/docs/assets/user-guide_understanding-findings.md.B29f0ucS.js +1 -0
  111. package/public/docs/assets/user-guide_understanding-findings.md.B29f0ucS.lean.js +1 -0
  112. package/public/docs/contributor-guide/architecture/board-widgets.html +6 -6
  113. package/public/docs/contributor-guide/architecture/detector-contract.html +6 -6
  114. package/public/docs/contributor-guide/architecture/drill-down.html +6 -6
  115. package/public/docs/contributor-guide/architecture/impact-estimation.html +6 -6
  116. package/public/docs/contributor-guide/architecture/index.html +4 -4
  117. package/public/docs/contributor-guide/architecture/overview.html +6 -6
  118. package/public/docs/contributor-guide/architecture/state-and-history.html +6 -6
  119. package/public/docs/contributor-guide/architecture/widget-rendering.html +6 -6
  120. package/public/docs/contributor-guide/architecture/worker-protocol.html +7 -7
  121. package/public/docs/contributor-guide/contributing.html +4 -4
  122. package/public/docs/contributor-guide/development-setup.html +6 -6
  123. package/public/docs/contributor-guide/testing.html +6 -6
  124. package/public/docs/hashmap.json +1 -1
  125. package/public/docs/index.html +4 -4
  126. package/public/docs/tuning-reference/anti-patterns.html +4 -4
  127. package/public/docs/tuning-reference/aqe.html +4 -4
  128. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +4 -4
  129. package/public/docs/tuning-reference/bottleneck-cold-start.html +4 -4
  130. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +4 -4
  131. package/public/docs/tuning-reference/bottleneck-failures.html +6 -6
  132. package/public/docs/tuning-reference/bottleneck-gc.html +6 -6
  133. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +4 -4
  134. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +4 -4
  135. package/public/docs/tuning-reference/bottleneck-retry-waste.html +4 -4
  136. package/public/docs/tuning-reference/bottleneck-shuffle.html +7 -7
  137. package/public/docs/tuning-reference/bottleneck-skew.html +8 -8
  138. package/public/docs/tuning-reference/bottleneck-slow-host.html +4 -4
  139. package/public/docs/tuning-reference/bottleneck-small-files.html +7 -7
  140. package/public/docs/tuning-reference/bottleneck-spill.html +4 -4
  141. package/public/docs/tuning-reference/bottleneck-straggler.html +6 -6
  142. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +6 -6
  143. package/public/docs/tuning-reference/bottleneck-utilization.html +7 -7
  144. package/public/docs/tuning-reference/caching.html +4 -4
  145. package/public/docs/tuning-reference/cluster-config.html +6 -6
  146. package/public/docs/tuning-reference/config.html +4 -4
  147. package/public/docs/tuning-reference/data-formats.html +4 -4
  148. package/public/docs/tuning-reference/index.html +4 -4
  149. package/public/docs/tuning-reference/intro.html +4 -4
  150. package/public/docs/tuning-reference/joins.html +4 -4
  151. package/public/docs/tuning-reference/memory-model.html +6 -6
  152. package/public/docs/tuning-reference/metrics.html +4 -4
  153. package/public/docs/tuning-reference/partitioning.html +4 -4
  154. package/public/docs/tuning-reference/pyspark.html +4 -4
  155. package/public/docs/tuning-reference/shuffle.html +4 -4
  156. package/public/docs/tuning-reference/spark-architecture.html +4 -4
  157. package/public/docs/tuning-reference/table-formats.html +4 -4
  158. package/public/docs/user-guide/alternative-log-retrieval.html +6 -6
  159. package/public/docs/user-guide/getting-started.html +7 -7
  160. package/public/docs/user-guide/mcp-tools.html +9 -9
  161. package/public/docs/user-guide/run-comparison.html +6 -6
  162. package/public/docs/user-guide/understanding-findings.html +6 -6
  163. package/public/index.html +7 -6
  164. package/public/sample-runs/sample-run.ndjson.gz +0 -0
  165. package/vendor-core/cli/collect-run.js +3 -2
  166. package/vendor-core/cli/native-zstd.js +351 -0
  167. package/vendor-core/detectors.js +390 -75
  168. package/vendor-core/docs-config.js +34 -8
  169. package/vendor-core/docs-content/chapters/03-memory-model.md +39 -0
  170. package/vendor-core/docs-content/chapters/11-cluster-config.md +40 -0
  171. package/vendor-core/docs-content/detection/cache.md +4 -3
  172. package/vendor-core/docs-content/detection/chrn.md +4 -2
  173. package/vendor-core/docs-content/detection/gc.md +2 -0
  174. package/vendor-core/docs-content/detection/host.md +2 -1
  175. package/vendor-core/docs-content/detection/local.md +2 -3
  176. package/vendor-core/docs-content/detection/mem.md +3 -3
  177. package/vendor-core/docs-content/detection/plan.md +3 -1
  178. package/vendor-core/docs-content/detection/shape.md +2 -1
  179. package/vendor-core/docs-content/detection/shfl.md +2 -1
  180. package/vendor-core/docs-content/detection/spec.md +4 -3
  181. package/vendor-core/docs-content/detection/spill.md +1 -1
  182. package/vendor-core/docs-content/detection/strag.md +2 -1
  183. package/vendor-core/docs-content/detection/tiny.md +2 -1
  184. package/vendor-core/docs-content/tuning/failures.md +1 -1
  185. package/vendor-core/docs-content/tuning/gc.md +11 -4
  186. package/vendor-core/docs-content/tuning/shuffle.md +25 -5
  187. package/vendor-core/docs-content/tuning/skew.md +14 -6
  188. package/vendor-core/docs-content/tuning/small-files.md +12 -7
  189. package/vendor-core/docs-content/tuning/straggler.md +34 -0
  190. package/vendor-core/docs-content/tuning/tiny-tasks.md +1 -1
  191. package/vendor-core/docs-content/tuning/utilization.md +57 -7
  192. package/vendor-core/docs-content/upstream.json +4 -0
  193. package/vendor-core/event-handlers.js +321 -69
  194. package/vendor-core/event-schemas.js +8 -6
  195. package/vendor-core/evidence-report.js +4 -2
  196. package/vendor-core/impact-estimator.js +150 -34
  197. package/vendor-core/mcp-tools.js +20 -7
  198. package/vendor-core/occupancy.js +70 -2
  199. package/vendor-core/parser-worker.js +30 -14
  200. package/vendor-core/plan-summary.js +4 -0
  201. package/vendor-core/run-comparison.js +22 -17
  202. package/vendor-core/shs-fetch.js +18 -7
  203. package/vendor-core/shs-load.js +2 -1
  204. package/vendor-core/stage-quantiles.js +59 -3
  205. package/vendor-core/string-hash.js +15 -0
  206. package/vendor-core/types.js +9 -1
  207. package/vendor-core/vendor/fzstd.js +94 -18
  208. package/public/assets/AutoscalingChurn-CFJkiqxW.js +0 -1
  209. package/public/assets/CacheUtilization-kTKZBzDA.js +0 -1
  210. package/public/assets/CachingOpportunity-CU70EWcF.js +0 -1
  211. package/public/assets/ColdStart-hOI-WOvm.js +0 -1
  212. package/public/assets/ConfigAudit-B4oAksZY.js +0 -1
  213. package/public/assets/CoreUsageArea-D-dR3SQk.js +0 -1
  214. package/public/assets/Dashboard-MDhohsq4.js +0 -4
  215. package/public/assets/DuplicatePlanSubtree-54RKsfI7.js +0 -1
  216. package/public/assets/DurationHistogram-CviQyPNM.js +0 -1
  217. package/public/assets/EmptyState-v2ehFncc.js +0 -1
  218. package/public/assets/ExecutorUtilization-vHyFHgL6.js +0 -1
  219. package/public/assets/GcPressure-DINuhcno.js +0 -1
  220. package/public/assets/ImpactEstimate-C6GzFOY9.js +0 -1
  221. package/public/assets/IncompleteRun-a1kuCnU6.js +0 -1
  222. package/public/assets/JobFailures-CYwPfUhR.js +0 -1
  223. package/public/assets/MemoryUtilization-Dlfj0e_f.js +0 -1
  224. package/public/assets/OverBroadcast-BMu7Y8l9.js +0 -1
  225. package/public/assets/PartitionSizing-CvMGfSVB.js +0 -1
  226. package/public/assets/PlanExplorer-xYFme_Rx.js +0 -1
  227. package/public/assets/PlanGraphRoute-a3OGg6ET.js +0 -1
  228. package/public/assets/RetryWaste-JKRjOZ-J.js +0 -1
  229. package/public/assets/RowPagination-DypWbnic.js +0 -1
  230. package/public/assets/ShuffleIO-Mi8HiVu-.js +0 -1
  231. package/public/assets/Skew-C3iOScTC.js +0 -1
  232. package/public/assets/SlowHost-DKBg18v-.js +0 -1
  233. package/public/assets/SmallFiles-CCCB6AIu.js +0 -1
  234. package/public/assets/SpeculationWaste-DUNupw0_.js +0 -1
  235. package/public/assets/Spill-BlLdatik.js +0 -1
  236. package/public/assets/StageFailed-qtY7C7Yo.js +0 -1
  237. package/public/assets/StageFindingGroup-CoVdEZYs.js +0 -1
  238. package/public/assets/StageHeader-uDBLHgdg.js +0 -1
  239. package/public/assets/StagePill-CYCMdlIx.js +0 -1
  240. package/public/assets/StageShape-zs0mAjQJ.js +0 -1
  241. package/public/assets/StageSlowness-C7vg0u5Q.js +0 -1
  242. package/public/assets/Straggler-4BRGAQP4.js +0 -1
  243. package/public/assets/TaskFailures-CSjO23Kg.js +0 -1
  244. package/public/assets/TinyTask-6Zuovcn5.js +0 -1
  245. package/public/assets/UnderBroadcast-CePjo0ZV.js +0 -1
  246. package/public/assets/WidgetLeadSummary-DRNRVvn7.js +0 -1
  247. package/public/assets/charts-vendor-Cf1-wzeH.js +0 -59
  248. package/public/assets/downsample-D8XmJk6i.js +0 -1
  249. package/public/assets/finding-anchor-4TmpXd7j.js +0 -1
  250. package/public/assets/impact-sort-Cq6KOLqh.js +0 -1
  251. package/public/assets/inbox-DBFovbUX.js +0 -1
  252. package/public/assets/index-CHjV2-jB.js +0 -9
  253. package/public/assets/index-DMEtaP4u.css +0 -1
  254. package/public/assets/parser-worker-BMPPE37w.js +0 -64
  255. package/public/assets/plan-graph-vendor-B96a-e4N.js +0 -7
  256. package/public/assets/plan-graph-vendor-BnuhLJ6X.css +0 -1
  257. package/public/assets/react-vendor-DA6opS-q.js +0 -9
  258. package/public/assets/select-D5fK-za0.js +0 -1
  259. package/public/assets/toggle-group-lbIXRG0W.js +0 -1
  260. package/public/assets/usePagedRows-CFoZrPr4.js +0 -1
  261. package/public/assets/useRecentFiles-BPGQ6XII.js +0 -13
  262. package/public/assets/useSortMode-BOPpfLhJ.js +0 -1
  263. package/public/docs/assets/chunks/@localSearchIndexroot.PQ5JepCp.js +0 -1
  264. package/public/docs/assets/chunks/theme.BP14rGBx.js +0 -2
  265. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.B-OsL91z.js +0 -1
  266. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.B-OsL91z.lean.js +0 -1
  267. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.BOeH4d1J.js +0 -1
  268. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.DYCDPgkh.js +0 -1
  269. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.DYCDPgkh.lean.js +0 -1
  270. package/public/docs/assets/contributor-guide_architecture_overview.md.CehiRmGn.lean.js +0 -1
  271. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.m3S3UdMk.js +0 -1
  272. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.m3S3UdMk.lean.js +0 -1
  273. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.DbqPf2OT.js +0 -1
  274. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.B93qJ_tT.js +0 -6
  275. package/public/docs/assets/contributor-guide_development-setup.md.DvAN_9mK.lean.js +0 -1
  276. package/public/docs/assets/tuning-reference_bottleneck-shuffle.md.CM-nTmIH.js +0 -12
  277. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.js +0 -5
  278. package/public/docs/assets/tuning-reference_bottleneck-utilization.md.DTiueZC3.lean.js +0 -1
  279. package/public/docs/assets/user-guide_getting-started.md.DtEM37MK.js +0 -3
  280. package/public/docs/assets/user-guide_getting-started.md.DtEM37MK.lean.js +0 -1
  281. package/public/docs/assets/user-guide_run-comparison.md.S0TWWmLY.js +0 -1
  282. package/public/docs/assets/user-guide_run-comparison.md.S0TWWmLY.lean.js +0 -1
  283. package/public/docs/assets/user-guide_understanding-findings.md.D0R_Y-R2.js +0 -1
  284. package/public/docs/assets/user-guide_understanding-findings.md.D0R_Y-R2.lean.js +0 -1
  285. /package/public/docs/assets/{contributor-guide_architecture_drill-down.md.BtPdlM7r.lean.js → contributor-guide_architecture_drill-down.md.Bawx6NgP.lean.js} +0 -0
  286. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering.md.DbqPf2OT.lean.js → contributor-guide_architecture_widget-rendering.md.DYwFeyjV.lean.js} +0 -0
  287. /package/public/docs/assets/{tuning-reference_bottleneck-failures.md.4z5BXGJ2.lean.js → tuning-reference_bottleneck-failures.md.CAsFf3RR.lean.js} +0 -0
  288. /package/public/docs/assets/{tuning-reference_bottleneck-tiny-tasks.md.QTV7O8kU.lean.js → tuning-reference_bottleneck-tiny-tasks.md.CB05v3zh.lean.js} +0 -0
@@ -1 +0,0 @@
1
- import{a6 as u,j as e,a7 as p,a8 as f,a9 as m,aa as g,ab as v,ac as x,ad as h,ae as b,af as j,ag as S,ah as w,ai as z}from"./react-vendor-DA6opS-q.js";import{v as i,e as s,G as y}from"./index-CHjV2-jB.js";import{v as N}from"./useRecentFiles-BPGQ6XII.js";const P=u;function U({className:t,...a}){return e.jsx(m,{"data-slot":"select-value",className:s("flex flex-1 text-left",t),...a})}function $({className:t,size:a="default",children:n,...r}){return e.jsxs(p,{"data-slot":"select-trigger","data-size":a,className:s("flex w-fit cursor-pointer items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",t),...r,children:[n,e.jsx(f,{render:e.jsx(i,{className:"pointer-events-none size-4 text-muted-foreground"})})]})}function A({className:t,children:a,side:n="bottom",sideOffset:r=4,align:l="center",alignOffset:d=0,alignItemWithTrigger:o=!0,...c}){return e.jsx(g,{children:e.jsx(v,{side:n,sideOffset:r,align:l,alignOffset:d,alignItemWithTrigger:o,className:"isolate z-50",children:e.jsxs(x,{"data-slot":"select-content","data-align-trigger":o,className:s("relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-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:fade-out-0 data-closed:zoom-out-95",t),...c,children:[e.jsx(k,{}),e.jsx(h,{children:a}),e.jsx(_,{})]})})})}function B({className:t,children:a,...n}){return e.jsxs(b,{"data-slot":"select-item",className:s("relative flex w-full 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 not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",t),...n,children:[e.jsx(j,{className:"flex flex-1 shrink-0 gap-2 whitespace-nowrap",children:a}),e.jsx(S,{render:e.jsx("span",{className:"pointer-events-none absolute right-2 flex size-4 items-center justify-center"}),children:e.jsx(N,{className:"pointer-events-none"})})]})}function k({className:t,...a}){return e.jsx(w,{"data-slot":"select-scroll-up-button",className:s("top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",t),...a,children:e.jsx(y,{})})}function _({className:t,...a}){return e.jsx(z,{"data-slot":"select-scroll-down-button",className:s("bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4",t),...a,children:e.jsx(i,{})})}export{P as S,$ as a,U as b,A as c,B as d};
@@ -1 +0,0 @@
1
- import{j as i,aj as p,r as n,a5 as u}from"./react-vendor-DA6opS-q.js";import{e as l}from"./index-CHjV2-jB.js";import{L as c}from"./useRecentFiles-BPGQ6XII.js";const d=n.createContext({size:"default",variant:"default",spacing:2,orientation:"horizontal"});function x({className:e,variant:r,size:o,spacing:t=2,orientation:g="horizontal",children:a,...s}){return i.jsx(p,{"data-slot":"toggle-group","data-variant":r,"data-size":o,"data-spacing":t,"data-orientation":g,style:{"--gap":t},className:l("group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch",e),...s,children:i.jsx(d.Provider,{value:{variant:r,size:o,spacing:t,orientation:g},children:a})})}function z({className:e,children:r,variant:o="default",size:t="default",...g}){const a=n.useContext(d);return i.jsx(u,{"data-slot":"toggle-group-item","data-variant":a.variant||o,"data-size":a.size||t,"data-spacing":a.spacing,className:l("shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t",c({variant:a.variant||o,size:a.size||t}),e),...g,children:r})}export{x as T,z as a};
@@ -1 +0,0 @@
1
- import{r as g}from"./react-vendor-DA6opS-q.js";import{av as t}from"./index-CHjV2-jB.js";function M(s,i,n,a=null){const o=Math.ceil(s.length/t),r=Math.min(i,Math.max(0,o-1)),l=a==null||a===-1?r:Math.floor(a/t),e=s.slice(l*t,(l+1)*t);return g.useLayoutEffect(()=>{if(a==null||a===-1)return;const c=Math.floor(a/t);n(f=>f===c?f:c)},[a]),{totalPages:o,effectivePage:l,visible:e}}export{M as u};
@@ -1,13 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./Skew-C3iOScTC.js","./react-vendor-DA6opS-q.js","./index-CHjV2-jB.js","./charts-vendor-Cf1-wzeH.js","./plan-graph-vendor-B96a-e4N.js","./plan-graph-vendor-BnuhLJ6X.css","./index-DMEtaP4u.css","./StageFindingGroup-CoVdEZYs.js","./WidgetLeadSummary-DRNRVvn7.js","./StageHeader-uDBLHgdg.js","./StagePill-CYCMdlIx.js","./DurationHistogram-CviQyPNM.js","./finding-anchor-4TmpXd7j.js","./ImpactEstimate-C6GzFOY9.js","./impact-sort-Cq6KOLqh.js","./useSortMode-BOPpfLhJ.js","./toggle-group-lbIXRG0W.js","./RowPagination-DypWbnic.js","./usePagedRows-CFoZrPr4.js","./PlanExplorer-xYFme_Rx.js","./StageShape-zs0mAjQJ.js","./TinyTask-6Zuovcn5.js","./ShuffleIO-Mi8HiVu-.js","./select-D5fK-za0.js","./PartitionSizing-CvMGfSVB.js","./Spill-BlLdatik.js","./EmptyState-v2ehFncc.js","./downsample-D8XmJk6i.js","./GcPressure-DINuhcno.js","./StageFailed-qtY7C7Yo.js","./TaskFailures-CSjO23Kg.js","./RetryWaste-JKRjOZ-J.js","./SlowHost-DKBg18v-.js","./StageSlowness-C7vg0u5Q.js","./Straggler-4BRGAQP4.js","./SpeculationWaste-DUNupw0_.js","./ColdStart-hOI-WOvm.js","./MemoryUtilization-Dlfj0e_f.js","./ExecutorUtilization-vHyFHgL6.js","./CachingOpportunity-CU70EWcF.js","./JobFailures-CYwPfUhR.js","./ConfigAudit-B4oAksZY.js","./DuplicatePlanSubtree-54RKsfI7.js","./SmallFiles-CCCB6AIu.js","./UnderBroadcast-CePjo0ZV.js","./OverBroadcast-BMu7Y8l9.js","./CacheUtilization-kTKZBzDA.js","./CoreUsageArea-D-dR3SQk.js","./inbox-DBFovbUX.js","./AutoscalingChurn-CFJkiqxW.js","./IncompleteRun-a1kuCnU6.js"])))=>i.map(i=>d[i]);
2
- import{j as n,O as wt,Q as jt,U as kt,V as St,r as d,D as _t,o as Et,q as be,p as Tt,W as Ct,n as It,X as Nt,Y as Rt,Z as zt,_ as At,$ as Dt,a0 as Ot,S as Lt,a1 as Pt,a2 as $t,a3 as Mt,a4 as Ft,a5 as Bt}from"./react-vendor-DA6opS-q.js";import{c as L,e as y,a3 as ve,w as Vt,a4 as Ut,a5 as Wt,G as Ht,v as ye,a6 as qt,a1 as E,B as T,A as R,b as Gt,a7 as Kt,d as Jt,p as Yt,g as Qt,T as we,a8 as je,q as M,f as Xt,a9 as Zt,aa as f,ab as en,ac as tn,P as nn,ad as an,Z as rn,H as le,_ as sn,Q as on,J as ln,X as cn,L as C,n as $,ae as dn,af as un,ag as pn,ah as ke,t as Q,j as Se,u as _e,k as mn,ai as gn,aj as q,I as fn,E as Ee,r as O,ak as hn,al as xn,am as bn,s as vn,C as yn,an as wn,ao as jn,ap as kn,aq as Sn}from"./index-CHjV2-jB.js";import{R as _n,b as En,a as Tn,d as Cn,P as In,g as Nn,h as Rn,S as zn}from"./charts-vendor-Cf1-wzeH.js";const An=[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]],Dn=L("check",An);const On=[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]],Ln=L("chevron-right",On);const Pn=[["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"}]],$n=L("download",Pn);const Mn=[["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"}]],Fn=L("ellipsis",Mn);const Bn=[["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"}]],Vn=L("keyboard",Bn);function Un({className:e,orientation:t="horizontal",...a}){return n.jsx(wt,{"data-slot":"tabs","data-orientation":t,className:y("group/tabs flex gap-2 data-horizontal:flex-col",e),...a})}const Wn=ve("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 Hn({className:e,variant:t="default",...a}){return n.jsx(jt,{"data-slot":"tabs-list","data-variant":t,className:y(Wn({variant:t}),e),...a})}function ce({className:e,...t}){return n.jsx(kt,{"data-slot":"tabs-trigger",className:y("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 de({className:e,...t}){return n.jsx(St,{"data-slot":"tabs-content",className:y("flex-1 text-sm outline-none",e),...t})}function ue(e){return String(e).replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function qn(e,{title:t="plan"}={}){if(!e)return"";const a=[`digraph "${ue(t)}" {`," rankdir=BT;"," node [shape=box];"],r=new WeakMap,i=[];let l=0;return Vt(e,(c,s)=>{const o=`n${l++}`;r.set(c,o);const p=c.detail&&c.detail!==c.name?`${c.name}\\n${c.detail}`:c.name;a.push(` ${o} [label="${ue(p)}"];`),s&&i.push(` ${r.get(s)} -> ${o};`)},{dedupe:!0}),[...a,...i,"}"].join(`
3
- `)}function Gn({title:e,children:t,defaultOpen:a=!1}){const[r,i]=d.useState(a);return n.jsxs(Ut,{open:r,onOpenChange:i,className:"space-y-2",children:[n.jsxs(Wt,{"aria-expanded":String(r),className:"tap-target-comfortable tap-target-comfortable--sm flex cursor-pointer items-center gap-2 bg-transparent text-left",children:[n.jsx("h3",{className:"font-heading text-sm font-medium",children:e}),r?n.jsx(Ht,{"aria-hidden":"true",className:"size-4 shrink-0 text-muted-foreground"}):n.jsx(ye,{"aria-hidden":"true",className:"size-4 shrink-0 text-muted-foreground"})]}),n.jsx(qt,{keepMounted:!0,children:t})]})}function Te({title:e,rows:t,children:a,collapsible:r=!1,defaultOpen:i=!1}){const l=t.filter(s=>!!s);if(l.length===0&&!a)return null;const c=n.jsx("div",{className:"grid min-w-0 grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-sm",children:l.map(([s,o],p)=>n.jsxs(d.Fragment,{children:[n.jsx("span",{className:"text-muted-foreground",children:s}),n.jsx("span",{className:"break-words",children:o})]},p))});return r&&e?n.jsx(Gn,{title:e,defaultOpen:i,children:n.jsxs("div",{className:"space-y-2",children:[c,a]})}):n.jsxs("section",{className:"space-y-2",children:[e?n.jsx("h3",{className:"font-heading text-sm font-medium",children:e}):null,c,a]})}function Kn(e){const t=d.useId(),[a,r]=d.useState(!1);return e?{tooltipProps:{title:e,"aria-describedby":t,onFocus:()=>r(!0),onBlur:()=>r(!1)},srOnlyTooltip:n.jsxs(n.Fragment,{children:[n.jsx("span",{id:t,className:"sr-only",children:e}),a?n.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}}const Jn={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 pe(e){return Jn[e]}const Yn={referenceOpen:!1,setReferenceOpen:()=>{},evidenceCardOpen:!0,setEvidenceCardOpen:()=>{},revealEvidence:()=>{},registerRow:()=>{}},Ce=d.createContext(null);function Ir({children:e}){const[t,a]=d.useState(!1),[r,i]=d.useState(!1),l=d.useRef(null),[c,s]=d.useState(0),o=d.useRef(new Map),p=d.useCallback((u,b)=>{b?o.current.set(u,b):o.current.delete(u)},[]),m=d.useCallback(u=>{l.current=u,a(!0),i(!0),s(b=>b+1)},[]);d.useLayoutEffect(()=>{const u=l.current;!u||c===0||queueMicrotask(()=>{o.current.get(u)?.focus()})},[c]);const x=d.useMemo(()=>({referenceOpen:t,setReferenceOpen:a,evidenceCardOpen:r,setEvidenceCardOpen:i,revealEvidence:m,registerRow:p}),[t,r,m,p]);return n.jsx(Ce.Provider,{value:x,children:e})}function X(){return d.useContext(Ce)??Yn}function Qn(){const{revealEvidence:e}=X();return{revealEvidence:e}}function Nr(){const{referenceOpen:e,setReferenceOpen:t,evidenceCardOpen:a,setEvidenceCardOpen:r}=X();return{referenceOpen:e,setReferenceOpen:t,evidenceCardOpen:a,setEvidenceCardOpen:r}}function Rr(){const{registerRow:e}=X();return e}function G({confidence:e,validationRequired:t,evidenceKey:a}){const{tooltipProps:r,srOnlyTooltip:i}=Kn(t),{revealEvidence:l}=Qn(),c=!!e&&e!=="high",s=!!a;return!c&&!s?null:n.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:c?0:void 0,...c?r:{},children:[c?n.jsx("span",{"aria-hidden":"true",className:"inline-block size-2 shrink-0 rounded-full border border-dashed border-current"}):null,c?`${e} confidence`:null,c?i:null,c&&s?n.jsx("span",{"aria-hidden":"true",className:"opacity-60",children:"·"}):null,s?n.jsx("button",{type:"button","aria-label":`Evidence: ${pe(a)}`,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:()=>l(a),children:pe(a)}):null]})}const Xn="Derived from best-effort plan-text parsing: cross-check against the Summary tab before acting.",Zn="Derived from best-effort plan-text parsing: cross-check against the Tree tab before acting.",ea="Derived from best-effort plan-text parsing: cross-check against the Tree tab or View plan graph before acting.";function ta(e){try{return Zt(e)}catch{return null}}function na(e){try{return Kt(e)}catch{return null}}function aa(e,t){try{return qn(e,{title:`stage-${t}`})||null}catch{return null}}function ra(e,t,a,r){if(!a||r==null)return null;try{return Gt(e,t,a,r)}catch{return null}}function ia(e,t){const a=t.stages.get(e);return(a?.sqlExecutionId!=null?t.sql.get(a.sqlExecutionId):null)?.planTree??null}function sa(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 oa({rows:e}){const[t,a]=d.useState(!1);return n.jsxs("details",{className:"pt-1 pl-4",onToggle:r=>a(r.currentTarget.open),children:[n.jsx("summary",{className:"cursor-pointer text-xs text-muted-foreground",children:"full detail"}),t?n.jsx("div",{className:"pt-1",children:n.jsx(Te,{rows:e})}):null]})}function Ie({node:e,depth:t,durationMap:a}){const r=d.useRef(null),[i,l]=d.useState(t<=1);d.useEffect(()=>{r.current&&(r.current.open=t<=1)},[]);const c=Jt(e.name),s=e.detail??"",o=ta(e),p=o?sa(o):[],m=p.some(Boolean),x=o?.kind==="scan"?"":Yt(e.name,s),u=e.exchangeRole==="read"?e.children[0]:void 0,b=a?.get(u??e),w=(u??e).metrics??[],S=w.length>0?Qt(w):"",k=(u??e).children??[],j=k.length>0||w.length>0||m;return n.jsxs("details",{ref:r,"data-op":c,className:"rounded-md",onToggle:_=>l(_.currentTarget.open),children:[n.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 ${j?"cursor-pointer hover:bg-muted":"cursor-default"}`,children:[j?n.jsx(Ln,{"aria-hidden":"true",className:`size-3.5 shrink-0 text-muted-foreground transition-transform ${i?"rotate-90":""}`}):n.jsx("span",{className:"size-3.5 shrink-0"}),n.jsx("span",{className:"font-medium",children:e.name}),x?n.jsx("span",{title:s,className:"text-xs text-muted-foreground",children:x}):null,o?.warning?n.jsxs(n.Fragment,{children:[n.jsx(we,{type:"duplicatePlanSubtree",impactBand:"warning",className:je}),n.jsx("span",{className:"text-xs text-muted-foreground",children:o.warning.detail}),n.jsx(R,{children:n.jsx(G,{confidence:"low"})})]}):null,b!=null&&b>0?n.jsxs("span",{title:"Approximate wall-time attributed to this operator",className:"text-xs text-muted-foreground",children:["~",M(b)]}):null,S?n.jsx("span",{className:"text-xs text-muted-foreground",children:S}):null]}),w.length>0?n.jsx("div",{className:"flex flex-wrap gap-x-3 gap-y-1 pt-1 pl-6 text-xs text-muted-foreground",children:w.map((_,I)=>n.jsxs("span",{children:[_.name,": ",Xt(_)]},I))}):null,m?n.jsx(oa,{rows:p}):null,k.length>0?n.jsx("div",{className:"ml-[7px] space-y-1 border-l border-border/60 pt-1 pl-3.5",children:k.map((_,I)=>n.jsx(Ie,{node:_,depth:t+1,durationMap:a},I))}):null]})}function la(e){return`${e.path||"(unknown path)"} (${e.format})`}function ca(e){const t=e.leftKeys.length||e.rightKeys.length?` on ${e.leftKeys.join(", ")||"(none)"} / ${e.rightKeys.join(", ")||"(none)"}`:"";return`${e.joinType}${t}`}function da(e){const t=e.aggregations.join(", ")||"(none)";return e.groupByKeys.length?`${t} by ${e.groupByKeys.join(", ")}`:t}function ua(e){const t=new Map;for(const a of e)t.set(a.partitioning,(t.get(a.partitioning)??0)+1);return[...t.entries()].map(([a,r])=>`${a}×${r}`).join(", ")}function pa({summary:e,hasPlanGraph:t}){const{scans:a,joins:r,aggs:i,exchanges:l,warnings:c}=e,s=l.length>=4,o=s||c.length>0,p=t?ea:Zn;return n.jsx(Te,{rows:[a.length>0&&[`Sources (${a.length})`,a.map(la).join(", ")],r.length>0&&[`Joins (${r.length})`,r.map(ca).join("; ")],i.length>0&&[`Aggregations (${i.length})`,i.map(da).join("; ")],l.length>0&&[`Exchanges (${l.length})`,n.jsxs(n.Fragment,{children:[ua(l),s?n.jsxs(n.Fragment,{children:[" ",n.jsx("span",{className:"text-muted-foreground",children:"— consider whether some joins/aggregations could share a partitioning scheme to avoid redundant shuffles."})," ",n.jsx(R,{children:n.jsx(G,{confidence:"low"})})]}):null]})],c.length>0&&[`Warnings (${c.length})`,n.jsxs("span",{className:"flex flex-wrap items-center gap-1.5",children:[n.jsx(we,{type:"duplicatePlanSubtree",impactBand:"warning",className:je}),c.map(m=>m.detail).join("; "),n.jsx(R,{children:n.jsx(G,{confidence:"low"})})]})]],children:o?n.jsx(R,{children:n.jsx("p",{className:"text-xs text-muted-foreground",children:p})}):null})}function zr({stageId:e,appModel:t}){const a=E(p=>p.openPlanGraph),r=ia(e,t);if(!r)return null;const i=t.stages.get(e),l=i?.sqlExecutionId!=null?t.sql.get(i.sqlExecutionId):null,c=ra(r,t,l,i?.sqlExecutionId),s=na(r),o=aa(r,e);return n.jsxs(Un,{defaultValue:"tree",children:[n.jsxs("div",{className:"flex items-center justify-between gap-2",children:[n.jsxs(Hn,{"aria-label":"Plan view",children:[n.jsx(ce,{value:"tree",children:"Tree"}),n.jsx(ce,{value:"summary",children:"Summary"})]}),n.jsx("div",{className:"flex gap-2",children:o?n.jsx(T,{type:"button",variant:"ghost",size:"sm",onClick:()=>a(e),children:"View plan graph"}):null})]}),n.jsx(de,{value:"tree",children:n.jsxs("div",{className:"space-y-2 pt-3",children:[n.jsx(Ie,{node:r,depth:0,durationMap:c}),n.jsx(R,{children:n.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."})}),s&&s.warnings.length>0?n.jsx(R,{children:n.jsx("p",{className:"text-xs text-muted-foreground",children:Xn})}):null]})}),n.jsx(de,{value:"summary",children:n.jsx("div",{className:"pt-3",children:s?n.jsx(pa,{summary:s,hasPlanGraph:o!=null}):n.jsx("p",{className:"text-xs text-muted-foreground",children:"Plan summary couldn’t be parsed."})})})]})}const g={incompleteRun:"incomplete run",skew:"task skew",stageShape:"stage shape",tinyTask:"tiny tasks",shuffle:"shuffle I/O",partitionSizing:"partition sizing",spill:"spill",gc:"GC pressure",stageFailed:"failed stage",failures:"failed tasks",retryWaste:"retry waste",slowHost:"slow executor host",stageSlowness:"slow stage",straggler:"straggling task",speculationWaste:"speculation waste",coldStart:"cold start",memoryUtilization:"memory utilization",utilization:"executor utilization",coreLocality:"core locality",cachingOpportunity:"caching opportunity",cacheUtilization:"cache utilization",jobFailureRate:"job failure rate",autoscalingChurn:"autoscaling churn",configAudit:"config audit",duplicatePlanSubtree:"duplicate plan subtree",smallFiles:"small files",broadcastSizing:"broadcast sizing",underBroadcast:"missed broadcast join",overBroadcast:"oversized broadcast join"};function ma(e){return e.replace(/\b\w/g,t=>t.toUpperCase())}const Ne=d.lazy(()=>f(()=>import("./Skew-C3iOScTC.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]),import.meta.url).then(e=>({default:e.Skew}))),Re=d.lazy(()=>f(()=>import("./StageShape-zs0mAjQJ.js"),__vite__mapDeps([20,1,7,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19]),import.meta.url).then(e=>({default:e.StageShape}))),ze=d.lazy(()=>f(()=>import("./TinyTask-6Zuovcn5.js"),__vite__mapDeps([21,1,7,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19]),import.meta.url).then(e=>({default:e.TinyTask}))),Ae=d.lazy(()=>f(()=>import("./ShuffleIO-Mi8HiVu-.js"),__vite__mapDeps([22,1,23,2,3,4,5,6,8,10,9,12,13,14,15,16,17,18,19]),import.meta.url).then(e=>({default:e.ShuffleIO}))),De=d.lazy(()=>f(()=>import("./PartitionSizing-CvMGfSVB.js"),__vite__mapDeps([24,1,23,2,3,4,5,6,8,9,10,12,13,14,15,16,17,18,19]),import.meta.url).then(e=>({default:e.PartitionSizing}))),Oe=d.lazy(()=>f(()=>import("./Spill-BlLdatik.js"),__vite__mapDeps([25,1,2,3,4,5,6,26,10,8,12,13,14,15,16,18,17,27,19]),import.meta.url).then(e=>({default:e.Spill}))),Le=d.lazy(()=>f(()=>import("./GcPressure-DINuhcno.js"),__vite__mapDeps([28,1,2,3,4,5,6,8,9,10,13,17,18,12,14,15,16]),import.meta.url).then(e=>({default:e.GcPressure}))),Pe=d.lazy(()=>f(()=>import("./StageFailed-qtY7C7Yo.js"),__vite__mapDeps([29,1,2,3,4,5,6,10,8,12,13,14,15,16,17,18]),import.meta.url).then(e=>({default:e.StageFailed}))),$e=d.lazy(()=>f(()=>import("./TaskFailures-CSjO23Kg.js"),__vite__mapDeps([30,1,2,3,4,5,6,10,8,12,13,14,15,16,17,18]),import.meta.url).then(e=>({default:e.TaskFailures}))),Me=d.lazy(()=>f(()=>import("./RetryWaste-JKRjOZ-J.js"),__vite__mapDeps([31,1,2,3,4,5,6,10,8,12,13,14,15,16,17,18]),import.meta.url).then(e=>({default:e.RetryWaste}))),Fe=d.lazy(()=>f(()=>import("./SlowHost-DKBg18v-.js"),__vite__mapDeps([32,1,2,3,4,5,6,9,10,8,12,13,14,15,16,17,18]),import.meta.url).then(e=>({default:e.SlowHost}))),Be=d.lazy(()=>f(()=>import("./StageSlowness-C7vg0u5Q.js"),__vite__mapDeps([33,1,2,3,4,5,6,9,10,8,12,14,13,15,16,17,18]),import.meta.url).then(e=>({default:e.StageSlowness}))),Ve=d.lazy(()=>f(()=>import("./Straggler-4BRGAQP4.js"),__vite__mapDeps([34,1,2,3,4,5,6,9,10,8,12,13,14,15,16,17,18]),import.meta.url).then(e=>({default:e.Straggler}))),Ue=d.lazy(()=>f(()=>import("./SpeculationWaste-DUNupw0_.js"),__vite__mapDeps([35,1,2,3,4,5,6,9,10,8,12,14,13,15,16,17,18]),import.meta.url).then(e=>({default:e.SpeculationWaste}))),We=d.lazy(()=>f(()=>import("./ColdStart-hOI-WOvm.js"),__vite__mapDeps([36,1,2,3,4,5,6,8,12,14,13,15,16,17,18]),import.meta.url).then(e=>({default:e.ColdStart}))),He=d.lazy(()=>f(()=>import("./MemoryUtilization-Dlfj0e_f.js"),__vite__mapDeps([37,1,2,3,4,5,6,12,13,17,18,8]),import.meta.url).then(e=>({default:e.MemoryUtilization}))),qe=d.lazy(()=>f(()=>import("./ExecutorUtilization-vHyFHgL6.js"),__vite__mapDeps([38,1,2,3,4,5,6,13,17,12,18,8]),import.meta.url).then(e=>({default:e.ExecutorUtilization}))),Ge=d.lazy(()=>f(()=>import("./CachingOpportunity-CU70EWcF.js"),__vite__mapDeps([39,1,2,3,4,5,6,12,13,17,18,8]),import.meta.url).then(e=>({default:e.CachingOpportunity}))),Ke=d.lazy(()=>f(()=>import("./JobFailures-CYwPfUhR.js"),__vite__mapDeps([40,1,13,2,3,4,5,6,8]),import.meta.url).then(e=>({default:e.JobFailures}))),Je=d.lazy(()=>f(()=>import("./ConfigAudit-B4oAksZY.js"),__vite__mapDeps([41,1,2,3,4,5,6,12,13,17,18,8]),import.meta.url).then(e=>({default:e.ConfigAudit}))),Ye=d.lazy(()=>f(()=>import("./DuplicatePlanSubtree-54RKsfI7.js"),__vite__mapDeps([42,1,2,3,4,5,6,13,12,10,8,14,15,16,18,17]),import.meta.url).then(e=>({default:e.DuplicatePlanSubtree}))),Qe=d.lazy(()=>f(()=>import("./SmallFiles-CCCB6AIu.js"),__vite__mapDeps([43,1,2,3,4,5,6,13,12,10,8,14,15,16,18,17]),import.meta.url).then(e=>({default:e.SmallFiles}))),Xe=d.lazy(()=>f(()=>import("./UnderBroadcast-CePjo0ZV.js"),__vite__mapDeps([44,1,2,3,4,5,6,13,12,10,8,14,15,16,18,17]),import.meta.url).then(e=>({default:e.UnderBroadcast}))),Ze=d.lazy(()=>f(()=>import("./OverBroadcast-BMu7Y8l9.js"),__vite__mapDeps([45,1,2,3,4,5,6,13,12,10,8,14,15,16,18,17]),import.meta.url).then(e=>({default:e.OverBroadcast}))),et=d.lazy(()=>f(()=>import("./CacheUtilization-kTKZBzDA.js"),__vite__mapDeps([46,1,2,3,4,5,6,12,13,17,18,8]),import.meta.url).then(e=>({default:e.CacheUtilization}))),tt=d.lazy(()=>f(()=>import("./CoreUsageArea-D-dR3SQk.js"),__vite__mapDeps([47,1,2,3,4,5,6,27,26,13,17,18,8,48]),import.meta.url).then(e=>({default:e.CoreUsageArea}))),nt=d.lazy(()=>f(()=>import("./AutoscalingChurn-CFJkiqxW.js"),__vite__mapDeps([49,1,2,3,4,5,6,13,8,27]),import.meta.url).then(e=>({default:e.AutoscalingChurn}))),at=d.lazy(()=>f(()=>import("./IncompleteRun-a1kuCnU6.js"),__vite__mapDeps([50,1,13,2,3,4,5,6]),import.meta.url).then(e=>({default:e.IncompleteRun})));function h(e,t){e.displayName=t}h(Ne,"Skew");h(Re,"StageShape");h(ze,"TinyTask");h(Ae,"ShuffleIO");h(De,"PartitionSizing");h(Oe,"Spill");h(Le,"GcPressure");h(Pe,"StageFailed");h($e,"TaskFailures");h(Me,"RetryWaste");h(Fe,"SlowHost");h(Be,"StageSlowness");h(Ve,"Straggler");h(Ue,"SpeculationWaste");h(We,"ColdStart");h(He,"MemoryUtilization");h(qe,"ExecutorUtilization");h(Ge,"CachingOpportunity");h(Ke,"JobFailures");h(Je,"ConfigAudit");h(Ye,"DuplicatePlanSubtree");h(Qe,"SmallFiles");h(Xe,"UnderBroadcast");h(Ze,"OverBroadcast");h(et,"CacheUtilization");h(tt,"CoreUsageArea");h(nt,"AutoscalingChurn");h(at,"IncompleteRun");const F={incompleteRun:{component:at,region:"action",widgetId:"incomplete-run",widgetTitle:"Incomplete Run",findingLabel:g.incompleteRun,routeable:!0},skew:{component:Ne,region:"action",widgetId:"skew",widgetTitle:"Task Skew",findingLabel:g.skew,routeable:!0},stageShape:{component:Re,region:"action",widgetId:"stage-shape",widgetTitle:"Stage Shape",findingLabel:g.stageShape,routeable:!0},tinyTask:{component:ze,region:"action",widgetId:"tiny-task",widgetTitle:"Tiny Tasks",findingLabel:g.tinyTask,routeable:!0},shuffle:{component:Ae,region:"action",widgetId:"shuffle-io",widgetTitle:"Shuffle I/O",findingLabel:g.shuffle,routeable:!0},partitionSizing:{component:De,region:"action",widgetId:"partition-sizing",widgetTitle:"Partition Sizing",findingLabel:g.partitionSizing,routeable:!0},spill:{component:Oe,region:"action",widgetId:"spill",widgetTitle:"Spill",findingLabel:g.spill,routeable:!0},gc:{component:Le,region:"action",widgetId:"gc-pressure",widgetTitle:"GC Pressure",findingLabel:g.gc,routeable:!0},stageFailed:{component:Pe,region:"action",widgetId:"stage-failed",widgetTitle:"Failed Stages",findingLabel:g.stageFailed,routeable:!0},failures:{component:$e,region:"action",widgetId:"task-failures",widgetTitle:"Failed Tasks",findingLabel:g.failures,routeable:!0},retryWaste:{component:Me,region:"action",widgetId:"retry-waste",widgetTitle:"Retry Waste",findingLabel:g.retryWaste,routeable:!0},slowHost:{component:Fe,region:"action",widgetId:"slow-host",widgetTitle:"Slow Executor Host",findingLabel:g.slowHost,routeable:!0},stageSlowness:{component:Be,region:"action",widgetId:"stage-slowness",widgetTitle:"Slow Stage",findingLabel:g.stageSlowness,routeable:!0},straggler:{component:Ve,region:"action",widgetId:"straggler",widgetTitle:"Stragglers",findingLabel:g.straggler,routeable:!0},speculationWaste:{component:Ue,region:"action",widgetId:"speculation-waste",widgetTitle:"Speculation Waste",findingLabel:g.speculationWaste,routeable:!0},coldStart:{component:We,region:"action",widgetId:"cold-start",widgetTitle:"Cold Start",findingLabel:g.coldStart,routeable:!0},memoryUtilization:{component:He,region:"reference",widgetId:"memory-utilization",widgetTitle:"Memory Utilization",findingLabel:g.memoryUtilization,routeable:!0},utilization:{component:qe,region:"reference",widgetId:"executor-utilization",widgetTitle:"Executor Utilization",findingLabel:g.utilization,routeable:!0},coreLocality:{component:tt,region:"reference",widgetId:"core-usage-area",widgetTitle:"Core Usage by Locality",findingLabel:g.coreLocality,routeable:!0},cachingOpportunity:{component:Ge,region:"action",widgetId:"caching-opportunity",widgetTitle:"Caching Opportunities",findingLabel:g.cachingOpportunity,routeable:!0},cacheUtilization:{component:et,region:"reference",widgetId:"cache-utilization",widgetTitle:"Cache Storage",findingLabel:g.cacheUtilization,routeable:!0},jobFailureRate:{component:Ke,region:"action",widgetId:"job-failures",widgetTitle:"Job Failures",findingLabel:g.jobFailureRate,routeable:!0},autoscalingChurn:{component:nt,region:"action",widgetId:"autoscaling-churn",widgetTitle:"Autoscaling Churn",findingLabel:g.autoscalingChurn,routeable:!0},configAudit:{component:Je,region:"action",widgetId:"config-audit",widgetTitle:"Config Sanity",findingLabel:g.configAudit,routeable:!0},duplicatePlanSubtree:{component:Ye,region:"action",widgetId:"duplicate-plan-subtree",widgetTitle:"Redundant Plan Subtree",findingLabel:g.duplicatePlanSubtree,routeable:!0},smallFiles:{component:Qe,region:"action",widgetId:"small-files",widgetTitle:"Excessive Small Files",findingLabel:g.smallFiles,routeable:!0},underBroadcast:{component:Xe,region:"action",widgetId:"under-broadcast",widgetTitle:"Missed Broadcast Join",findingLabel:g.underBroadcast,routeable:!0},overBroadcast:{component:Ze,region:"action",widgetId:"over-broadcast",widgetTitle:"Oversized Broadcast Join",findingLabel:g.overBroadcast,routeable:!0}},me={action:0,reference:1},ga=["overBroadcast","underBroadcast"];function Ar(){const e=new Map;for(const t of en){const a=t.type==="broadcastSizing"?ga:[t.type];for(const r of a){const i=F[r];if(!i)continue;const l=e.get(r);(!l||t.order<l.order)&&e.set(r,{entry:i,type:r,order:t.order})}}return[...e.values()].sort((t,a)=>me[t.entry.region]-me[a.entry.region]||t.order-a.order).map(({entry:t,type:a})=>({component:t.component,region:t.region,widgetId:t.widgetId,widgetTitle:t.widgetTitle,findingLabel:t.findingLabel,type:a}))}const fa=new Set(["cacheUtilization","memoryUtilization","utilization"]);function ha(e){const t=F[e];return t!==void 0&&t.region==="reference"&&!fa.has(e)}function Dr(){return Object.entries(F).filter(([e])=>ha(e)).map(([,e])=>({component:e.component,widgetId:e.widgetId}))}function Z(e){switch(e.type){case"skew":return"Fix task skew";case"stageShape":switch(e.rule){case"lowParallelism":return"Increase parallelism";case"dataExplosion":return"Check for exploding join";case"taskStageSkew":return"Fix straggler task"}break;case"shuffle":return"Reduce shuffle size";case"partitionSizing":switch(e.rule){case"shufflePartitionSkew":return"Fix skewed partition";case"lowShuffleParallelism":return"Add shuffle partitions";case"maxPartitionTooBig":return"Repartition oversized data"}break;case"spill":return"Reduce spill";case"gc":return e.direction==="low"?"Right-size executor memory":"Reduce GC pressure";case"slowHost":return e.variant==="durationShare"?"Fix data locality":e.variant==="multiDim"?"Investigate degraded executor":"Check slow host";case"stageSlowness":return"Profile slow stage";case"stageFailed":return"Inspect stage failure";case"failures":return"Investigate task failures";case"straggler":return"Fix stragglers";case"speculationWaste":return"Tune speculation settings";case"retryWaste":return"Investigate retry cause";case"tinyTask":return"Coalesce small tasks";case"coldStart":return"Pre-warm cluster";case"utilization":return"Reduce cluster size";case"memoryUtilization":switch(e.variant){case"idleCores":return"Reduce idle cores";case"wasteModel":return"Right-size executor memory";case"memoryBand":return e.dataUnavailable?"Enable memory metrics":e.rule==="heapNearCapacity"?"Increase executor memory":"Reduce executor memory"}break;case"cacheUtilization":return"Increase cache memory";case"coreLocality":return"Fix data locality";case"autoscalingChurn":return"Reduce autoscaling churn";case"cachingOpportunity":return e.variant==="composite"?"Cache repeated result":"Cache shared table";case"jobFailureRate":return"Investigate failed jobs";case"configAudit":switch(e.property){case"spark.shuffle.service.enabled":return"Enable shuffle service";case"spark.dynamicAllocation.minExecutors":return"Fix autoscaling bounds";case"spark.dynamicAllocation.maxExecutors":return"Set max executors";case"spark.serializer":return"Switch to Kryo";case"spark.executor.memoryOverhead":return"Raise memory overhead"}break;case"duplicatePlanSubtree":return"Dedupe repeated subtree";case"smallFiles":return e.direction==="write"?"Coalesce output files":"Compact small files";case"underBroadcast":return"Use broadcast join";case"overBroadcast":return"Fix oversized broadcast"}}function Or(e){return Z(e)??F[e.type]?.findingLabel??e.type}const xa={light:"",dark:".dark"},ba={width:320,height:200},va=d.createContext(null);function ya({id:e,className:t,children:a,config:r,initialDimension:i=ba,...l}){const c=d.useId(),s=`chart-${e??c.replace(/:/g,"")}`;return n.jsx(va.Provider,{value:{config:r},children:n.jsxs("div",{"data-slot":"chart","data-chart":s,className:y("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",t),...l,children:[n.jsx(wa,{id:s,config:r}),n.jsx(_n,{initialDimension:i,children:a})]})})}const wa=({id:e,config:t})=>{const a=Object.entries(t).filter(([,r])=>r.theme??r.color);return a.length?n.jsx("style",{dangerouslySetInnerHTML:{__html:Object.entries(xa).map(([r,i])=>`
4
- ${i} [data-chart=${e}] {
5
- ${a.map(([l,c])=>{const s=c.theme?.[r]??c.color;return s?` --color-${l}: ${s};`:null}).join(`
6
- `)}
7
- }
8
- `).join(`
9
- `)}}):null};async function ja(e){if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e);return}catch{}const 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 new Error("copy unavailable")}finally{t.remove()}}const rt="(prefers-reduced-motion: reduce)";function ka(e){if(typeof window>"u"||!window.matchMedia)return()=>{};const t=window.matchMedia(rt);return t.addEventListener("change",e),()=>t.removeEventListener("change",e)}function Sa(){return typeof window>"u"||!window.matchMedia?!1:window.matchMedia(rt).matches}function _a(){return d.useSyncExternalStore(ka,Sa,()=>!1)}const Lr={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)"};function Ea(e,t){return[e,...t].map(a=>a.join(" ")).join(`
10
- `)}function Ta({caption:e,columns:t,rows:a,align:r}){const[i,l]=d.useState(!1),[c,s]=d.useState(!1);async function o(){try{await ja(Ea(t,a)),s(!0),setTimeout(()=>s(!1),1500)}catch{}}return n.jsxs("div",{className:"flex flex-col gap-1",children:[n.jsxs("div",{className:"flex items-center gap-3",children:[n.jsx("button",{type:"button",className:"cursor-pointer text-muted-foreground text-xs underline","aria-expanded":i,onClick:()=>l(p=>!p),children:"▤ Table"}),n.jsx("button",{type:"button",className:"cursor-pointer text-muted-foreground text-xs underline",onClick:o,children:"⧉ Copy"}),n.jsx("span",{"aria-live":"polite",className:"text-xs text-muted-foreground",children:c?"Copied":""})]}),n.jsxs(nn,{className:i?void 0:"sr-only",children:[n.jsx(an,{className:"sr-only",children:e}),n.jsx(rn,{children:n.jsx(le,{children:t.map((p,m)=>n.jsx(sn,{className:r?.[m]==="right"?"text-right":void 0,children:p},p))})}),n.jsx(on,{children:a.map((p,m)=>n.jsx(le,{children:p.map((x,u)=>n.jsx(ln,{className:r?.[u]==="right"?"text-right":void 0,children:x},u))},m))})]})]})}const Ca=new Set([En,Tn,Cn,In,Nn,Rn,zn]);function it(e){if(!d.isValidElement(e))return e;const{children:t,isAnimationActive:a}=e.props,r=t==null?t:d.Children.map(t,it),i=Ca.has(e.type)&&a===void 0;return!i&&r===t?e:d.cloneElement(e,i?{isAnimationActive:!1}:{},...t==null?[]:[r])}function Pr({title:e,ariaLabel:t,height:a,children:r,table:i}){const c=_a()?it(r):r,s=tn();return n.jsxs("div",{className:"flex flex-col gap-1",children:[e?n.jsx("p",{className:"text-muted-foreground text-xs font-medium",children:e}):null,s?n.jsx(ya,{role:"img","aria-label":t,config:{},className:"aspect-auto w-full",style:{height:a},initialDimension:{width:320,height:a},children:c}):n.jsx("div",{style:{height:a},"aria-hidden":!0}),i?n.jsx(Ta,{...i}):null]})}function st({...e}){return n.jsx(_t,{"data-slot":"dialog",...e})}function Ia({...e}){return n.jsx(It,{"data-slot":"dialog-portal",...e})}function Na({className:e,...t}){return n.jsx(Nt,{"data-slot":"dialog-overlay",className:y("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 ot({className:e,children:t,showCloseButton:a=!0,...r}){return n.jsxs(Ia,{children:[n.jsx(Na,{}),n.jsxs(Et,{"data-slot":"dialog-content",className:y("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,a&&n.jsxs(be,{"data-slot":"dialog-close",render:n.jsx(T,{variant:"ghost",className:"absolute top-2 right-2",size:"icon-sm"}),children:[n.jsx(cn,{}),n.jsx("span",{className:"sr-only",children:"Close"})]})]})]})}function lt({className:e,...t}){return n.jsx("div",{"data-slot":"dialog-header",className:y("flex flex-col gap-2",e),...t})}function $r({className:e,showCloseButton:t=!1,children:a,...r}){return n.jsxs("div",{"data-slot":"dialog-footer",className:y("-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:[a,t&&n.jsx(be,{render:n.jsx(T,{variant:"outline"}),children:"Close"})]})}function ct({className:e,...t}){return n.jsx(Tt,{"data-slot":"dialog-title",className:y("font-heading text-base leading-none font-medium",e),...t})}function dt({className:e,...t}){return n.jsx(Ct,{"data-slot":"dialog-description",className:y("text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",e),...t})}function ee({...e}){return n.jsx(Rt,{"data-slot":"dropdown-menu",...e})}function te({...e}){return n.jsx(zt,{"data-slot":"dropdown-menu-trigger",...e})}function ne({align:e="start",alignOffset:t=0,side:a="bottom",sideOffset:r=4,className:i,...l}){return n.jsx(At,{children:n.jsx(Dt,{className:"isolate z-50 outline-none",align:e,alignOffset:t,side:a,sideOffset:r,children:n.jsx(Ot,{"data-slot":"dropdown-menu-content",className:y("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),...l})})})}function z({className:e,inset:t,variant:a="default",...r}){return n.jsx(Pt,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":a,className:y("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 ut({className:e,children:t,checked:a,inset:r,...i}){return n.jsxs($t,{"data-slot":"dropdown-menu-checkbox-item","data-inset":r,className:y("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:a,...i,children:[n.jsx("span",{className:"pointer-events-none absolute right-2 flex items-center justify-center","data-slot":"dropdown-menu-checkbox-item-indicator",children:n.jsx(Mt,{children:n.jsx(Dn,{})})}),t]})}function ae({className:e,...t}){return n.jsx(Lt,{"data-slot":"dropdown-menu-separator",className:y("-mx-1 my-1 h-px bg-border",e),...t})}const Ra=[/\bip(?:-\d{1,3}){4}(?:\.[a-z0-9][a-z0-9-]*)*/gi,/\b(?:\d{1,3}\.){3}\d{1,3}\b/g],za=[/\bapplication_\d{10,}_\d+\b/g];function K(e,t){if(typeof e=="string"){for(const{patterns:a,out:r}of t)for(const i of a){const l=e.match(i);if(l)for(const c of l)r.add(c)}return}if(Array.isArray(e)){for(const a of e)K(a,t);return}if(e&&typeof e=="object")for(const a of Object.values(e))K(a,t)}function J(e,t){if(Array.isArray(e)){for(const a of e)J(a,t);return}if(e&&typeof e=="object")for(const[a,r]of Object.entries(e))a==="host"&&typeof r=="string"&&r.length>0?t.add(r):J(r,t)}function Aa(e){const t=new Set,a=new Set,r=e?.summary?.app?.id;return typeof r=="string"&&r.length>0&&t.add(r),J(e?.findings,a),K(e,[{patterns:Ra,out:a},{patterns:za,out:t}]),{appIds:t,hosts:a}}function ge(e,t){const a=new Map;return[...e].sort((r,i)=>r.localeCompare(i,"en",{numeric:!0})).forEach((r,i)=>a.set(r,`${t}-${i+1}`)),a}function Y(e,t){if(typeof e=="string"){let a=e;for(const[r,i]of t)a=a.split(r).join(i);return a}if(Array.isArray(e))return e.map(a=>Y(a,t));if(e&&typeof e=="object"){const a={};for(const[r,i]of Object.entries(e))a[r]=Y(i,t);return a}return e}function Da(e,t){const a=[...t.appIds?ge(t.appIds,"app"):[],...ge(t.hosts,"host")];return a.sort((r,i)=>i[0].length-r[0].length),Y(e,a)}function Oa(e){const{appIds:t,hosts:a}=Aa(e);return Da(e,{appIds:t,hosts:a})}function V(e){return e==null?!1:(Array.isArray(e)?e.length:e.size)>0}function U(e,t){return Array.isArray(e)?e.includes(t):e.has(t)}function La(e,t){if(V(t.impactBand)&&!U(t.impactBand,e.impactBand)||V(t.type)&&!U(t.type,e.type))return!1;const{stageId:a}=t;if(typeof a=="number"){if(e.stageId!==a)return!1}else if(V(a)&&(e.stageId==null||!U(a,e.stageId)))return!1;return!0}function Pa(e,t){const a=[];for(const r of e){const i=t.get(r);i&&(i.submittedAt==null||i.completedAt==null||a.push([i.submittedAt,i.completedAt]))}return dn(a).reduce((r,[i,l])=>r+(l-i),0)}function $a(e){const t=new Map;for(const a of e){const r=t.get(a.type)??[];r.push(a),t.set(a.type,r)}return t}function Ma(e){return e.stageIds?e.stageIds:e.stageId!=null?[e.stageId]:[]}function Fa(e,t,a){const r=[...new Set(t.flatMap(Ma))],i=t.reduce((c,s)=>c+(s.impactEstimate?.wallClock?.high??0),0),l=r.length>0?Math.min(i,Pa(r,a)):i;return{kind:"time",type:e,findingCount:t.length,stageCount:r.length,recoverableMsHigh:l,findings:t}}function Ba(e,t){const a=t[0].impactEstimate.rawWaste.unit,r=t.reduce((i,l)=>i+(l.impactEstimate?.rawWaste?.value??0),0);return{kind:"resource",type:e,findingCount:t.length,unit:a,total:r,findings:t}}function Va(e,t){const a={};for(const r of t)a[r.impactBand]=(a[r.impactBand]??0)+1;return{kind:"count",type:e,findingCount:t.length,byImpactBand:a,findings:t}}const fe={time:0,resource:1,count:2};function Ua(e,t){const a=[];for(const[r,i]of $a(e)){const l=i.filter(o=>o.impactEstimate?.wallClock!=null),c=i.filter(o=>o.impactEstimate?.wallClock==null&&o.impactEstimate?.rawWaste!=null),s=i.filter(o=>o.impactEstimate?.wallClock==null&&o.impactEstimate?.rawWaste==null);if(l.length>0&&a.push(Fa(r,l,t)),c.length>0){const o=new Map;for(const p of c){const m=p.impactEstimate.rawWaste.unit,x=o.get(m)??[];x.push(p),o.set(m,x)}for(const p of o.values())a.push(Ba(r,p))}s.length>0&&a.push(Va(r,s))}return a.sort((r,i)=>{const l=fe[r.kind]-fe[i.kind];if(l!==0)return l;if(r.kind==="time"&&i.kind==="time")return i.recoverableMsHigh-r.recoverableMsHigh;const c=C[$(r.findings)??"info"]??9,s=C[$(i.findings)??"info"]??9;return c-s})}function Wa(e){return!(e.type==="memoryUtilization"&&e.variant==="memoryBand"&&e.dataUnavailable)}function Ha(e){return e.type==="incompleteRun"?!1:Wa(e)}const pt=0,qa=1,Ga=2;function W(e){const t=e.impactEstimate;return t?.wallClock?pt:t?.rawWaste?qa:Ga}function Ka(e){return[...e].sort((t,a)=>{const r=W(t)-W(a);return r!==0?r:W(t)===pt?a.impactEstimate.wallClock.high-t.impactEstimate.wallClock.high:(C[t.impactBand]??9)-(C[a.impactBand]??9)})}const Ja={spill:"single-task disk spill above 1 GiB",shuffle:"shuffle read above the configured minimum byte threshold",skew:"task duration skew above the configured ratio",gc:"JVM GC time share above the configured ratio",slowHost:"a host running 2x+ slower than its peers by mean task duration (per-executor byte/time dimensions use a separate, narrower ratio ladder starting at 1.33x; only those can reach critical on ratio alone)",stageSlowness:"a stage running far longer than its peers, not attributable to a single slow host",straggler:"one or more tasks finishing far after the rest of their stage",speculationWaste:"speculative task attempts that completed after the original",tinyTask:"median task duration below the configured floor",partitionSizing:"partition byte size outside the configured target range",stageShape:"low parallelism, data explosion, or task-count skew relative to core count",stageFailed:"a stage that failed outright",failures:"task failures above the configured rate",retryWaste:"retried task attempts consuming executor time",coldStart:"executor startup time above the configured floor",incompleteRun:"an event log missing its terminal ApplicationEnd/job-completion event",utilization:"core occupancy below the configured floor across the run",memoryUtilization:"executor heap usage outside the configured band",cacheUtilization:"cached partitions evicted or spilled to disk",coreLocality:"task placement missing data-local core assignment",cachingOpportunity:"a dataset re-read from source multiple times with no cache/persist",jobFailureRate:"job failure rate above the configured threshold",autoscalingChurn:"executor add/remove churn above the configured rate",configAudit:"a Spark conf value outside the recommended range",duplicatePlanSubtree:"the same physical plan subtree executed more than once",smallFiles:"output files below the configured target size",overBroadcast:"a broadcast join above the configured size ceiling",underBroadcast:"a join below the configured size floor that skipped broadcast",broadcastSizing:"a broadcast join outside the configured size range in either direction"};function Ya(e){return Ja[e]??"criteria not met"}const Qa=3,Xa=new Set(["id","type","name","impactBand","stageId","metric","value","recommendation","detectorVersion","confidence","validationRequired","docAnchor","impactEstimate","actionLabel"]),Za=new Set(["planNodeIds"]);function er(e){const t={};for(const r of Object.keys(e).sort())!Xa.has(r)&&!Za.has(r)&&(t[r]=e[r]);const a={id:e.id??null,type:e.type,name:ma(g[e.type]??e.type),tag:Q(e.type),impactBand:e.impactBand,stageId:e.stageId??null,metric:e.metric??null,value:e.value??null,recommendation:e.recommendation??null,detectorVersion:e.detectorVersion??1,evidence:t,actionLabel:Z(e)??e.type};return e.confidence!=null&&(a.confidence=e.confidence),e.validationRequired!=null&&(a.validationRequired=e.validationRequired),e.docAnchor!=null&&(a.docAnchor=e.docAnchor),e.impactEstimate!=null&&(a.impactEstimate=e.impactEstimate),a}function tr(e){return[...e].sort((t,a)=>{const r=(C[t.impactBand]??9)-(C[a.impactBand]??9);if(r!==0)return r;if(t.type!==a.type)return t.type<a.type?-1:1;const i=t.stageId??-1,l=a.stageId??-1;return i!==l?i-l:(t.id??"")<(a.id??"")?-1:(t.id??"")>(a.id??"")?1:0})}function nr(e,t){const a=e.filter(Ha);return Ua(a,t).map(i=>{const l=Ka(i.findings),c=l[0],s=l.map(p=>p.id).filter(p=>p!=null),o={type:i.type,tag:Q(i.type),actionLabel:Z(c)??c.type,findingCount:i.findingCount,findingIds:s};return i.kind==="time"?{...o,kind:"time",stageCount:i.stageCount,recoverableMsHigh:i.recoverableMsHigh,impact:mt(i.recoverableMsHigh,i.recoverableMsHigh)}:i.kind==="resource"?{...o,kind:"resource",unit:i.unit,total:i.total,impact:gt({value:i.total,unit:i.unit})}:{...o,kind:"count",byImpactBand:i.byImpactBand,impact:null}})}function ar(e){const t=new Set(e.map(i=>i.type)),a=new Set,r=[];for(const i of ke())t.has(i.type)||a.has(i.type)||(a.add(i.type),r.push({type:i.type,tag:Q(i.type),thresholdSummary:Ya(i.type)}));return r}const he=new WeakMap;function rr(e){const t=he.get(e);if(t)return t;const{app:a,stages:r,executors:i,sql:l,jobs:c,runAggregates:s,evidenceAvailability:o}=e,p=un(a,r,i?.added??[],i?.removed??[],c??new Map,l??new Map,s??null),m=pn(a),x=[...p,...m],u=tr(x.map(er)),b=nr(x,r??new Map),w=ar(x),S={critical:0,warning:0,info:0};for(const j of u)j.impactBand in S&&(S[j.impactBand]+=1);const k={schemaVersion:Qa,summary:{app:{id:a?.id??null,name:a?.name??null,sparkVersion:a?.sparkVersion??null},stageCount:r?.size??0,jobCount:c?.size??0,sqlExecutionCount:l?.size??0,findingCount:u.length,impactBandCounts:S},evidenceAvailability:o??null,detectors:ke(),findings:u,recommendations:b,cleanChecks:w};return he.set(e,k),k}function ir(e,t){return typeof t=="number"&&/bytes$/i.test(e)?Se(t):t!==null&&typeof t=="object"?JSON.stringify(t):String(t)}function mt(e,t){const a=r=>r===0?"0s":M(r);return e===t?`Est. ${a(t)}`:`Est. ${a(e)}-${a(t)}`}function gt(e){const t=Math.round(e.value*10)/10;switch(e.unit){case"bytes":return Se(e.value);case"ms":return M(e.value);case"mbSeconds":return`${t} MB-s`;case"coreHours":return`${t.toFixed(1)} core-h`;case"coreMs":return`${t} core-ms`;default:return String(e.value)}}function sr(e){const t=e.wallClock?mt(e.wallClock.low,e.wallClock.high):null,a=e.rawWaste?gt(e.rawWaste):null;return!t&&!a?null:`${[t,a].filter(i=>i!=null).join(" · ")} (estimateMethod: ${e.estimateMethod})`}function or(e){const{summary:t,findings:a,evidenceAvailability:r,detectors:i,recommendations:l,cleanChecks:c}=e,s=[];s.push("# Spark run evidence report"),s.push(""),s.push(`- Application: ${t.app.name??"(unknown)"} (${t.app.id??"n/a"})`),s.push(`- Spark version: ${t.app.sparkVersion??"n/a"}`),s.push(`- Stages: ${t.stageCount} · Jobs: ${t.jobCount} · SQL executions: ${t.sqlExecutionCount}`),s.push(`- Findings: ${t.findingCount} (critical ${t.impactBandCounts.critical}, warning ${t.impactBandCounts.warning}, info ${t.impactBandCounts.info})`),s.push(""),l.length>0&&(s.push(`## Fix these first (${l.length})`),s.push(""),l.forEach((o,p)=>{s.push(`${p+1}. [${o.tag}] ${o.actionLabel}`);const m=o.kind==="count"?Object.entries(o.byImpactBand??{}).map(([x,u])=>`${u} ${x}`).join(", "):o.impact;s.push(` - ${m} · ×${o.findingCount} finding(s)`)}),s.push("")),s.push(`## Findings (${a.length})`),s.push("");for(const o of a){const p=o.stageId!=null?` (stage ${o.stageId})`:"";s.push(`### ${o.name} · ${o.impactBand}${p}`),s.push(`- action: ${o.actionLabel}`),o.metric!=null&&s.push(`- ${o.metric}: ${o.value}`),o.recommendation&&s.push(`- ${o.recommendation}`),o.confidence&&s.push(`- confidence: ${o.confidence}`),o.validationRequired&&s.push(`- validation: ${o.validationRequired}`);const m=o.impactEstimate?sr(o.impactEstimate):null;m&&s.push(`- impact: ${m}`),s.push(`- detector version: ${o.detectorVersion}`);const x=Object.entries(o.evidence??{}).sort(([u],[b])=>u<b?-1:u>b?1:0);if(x.length){s.push("- evidence:");for(const[u,b]of x)s.push(` - ${u}: ${ir(u,b)}`)}s.push("")}if(r?.entries?.length){s.push("## Evidence availability"),s.push("");for(const o of r.entries)s.push(`- ${o.key}: ${o.state} (${o.summary})`);s.push("")}if(Array.isArray(i)&&i.length){s.push("## Detectors"),s.push("");for(const o of i)s.push(`- ${o.type} (v${o.version}, ${o.scope}), thresholds: ${JSON.stringify(o.thresholds)}`);s.push("")}if(c.length>0){s.push(`## Clean checks (${c.length})`),s.push("");for(const o of c)s.push(`- [${o.tag}] ${o.type}: ${o.thresholdSummary}`);s.push("")}return s.join(`
11
- `)}function lr(e,t){return La(e,t)}function cr(e,{redact:t=!1,markdown:a=!0,findingsFilter:r}={}){let i=rr(e);return t&&(i=Oa(i)),r&&(i={...i,findings:i.findings.filter(c=>lr(c,r))}),{markdown:a?or(i):"",json:i}}function xe(e,t,a){const r=new Blob([e],{type:a}),i=URL.createObjectURL(r),l=document.createElement("a");l.href=i,l.download=t,document.body.appendChild(l),l.click(),l.remove(),URL.revokeObjectURL(i)}function dr(e,t,a){return`evidence-${String(e??"report").replace(/[^\w.-]/g,"_")}${a?"-redacted":""}.${t==="json"?"json":"md"}`}function ft(){const e=E(i=>i.appModel),[t,a]=d.useState(!1);return{redact:t,setRedact:a,download:i=>{const{markdown:l,json:c}=cr(e,{redact:t}),s=c.summary?.app?.id??null,o=dr(s,i,t);i==="json"?xe(`${JSON.stringify(c,null,2)}
12
- `,o,"application/json"):xe(`${l}
13
- `,o,"text/markdown")}}}function ht({redact:e,setRedact:t,download:a}){return n.jsxs(n.Fragment,{children:[n.jsx(ut,{checked:e,onClick:r=>r.preventDefault(),onCheckedChange:r=>t(!!r),children:"Redact identifiers"}),n.jsx(ae,{}),n.jsx(z,{onClick:()=>a("markdown"),children:"Download Markdown"}),n.jsx(z,{onClick:()=>a("json"),children:"Download JSON"})]})}function ur(){const e=ft();return n.jsxs(ee,{children:[n.jsxs(te,{render:n.jsx(T,{variant:"ghost",size:"sm"}),children:[n.jsx($n,{"aria-hidden":"true"}),"Export evidence"]}),n.jsx(ne,{align:"end",children:n.jsx(ht,{...e})})]})}function pr({activeName:e,activeSub:t,activeId:a=null,entries:r,onPick:i,onRemove:l,onOpenNew:c}){const{pickRecent:s}=_e(),o=d.useCallback(p=>{if(i){i(p);return}s(p,r.find(m=>m.id===p)?.handle)},[i,r,s]);return n.jsxs(ee,{children:[n.jsxs(te,{className:y(mn({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:[n.jsxs("span",{className:"flex w-full min-w-0 items-center gap-1.5",children:[n.jsx("span",{className:"min-w-0 truncate font-heading text-sm font-semibold",children:e??"No file"}),n.jsx(ye,{"aria-hidden":"true",className:"ml-auto shrink-0 opacity-60"})]}),t?n.jsx("span",{className:"w-full min-w-0 truncate text-left text-xs text-muted-foreground",children:t}):null]}),n.jsxs(ne,{className:"w-72 p-2",children:[n.jsx(gn,{entries:r,activeId:a,onPick:o,onRemove:l}),n.jsx(ae,{}),n.jsx(z,{onClick:()=>c?.(),children:"Load new file…"})]})]})}function mr({className:e,type:t,...a}){return n.jsx(Ft,{type:t,"data-slot":"input",className:y("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),...a})}function gr({open:e,entries:t,onSelect:a,onOpenChange:r}){const[i,l]=d.useState(""),c=d.useRef(null);d.useEffect(()=>{e||l("")},[e]);const s=i.trim().toLowerCase(),o=s?t.filter(u=>u.label.toLowerCase().includes(s)||u.secondary.toLowerCase().includes(s)||String(u.executionId).includes(s)):t;function p(u){(c.current?.querySelectorAll("button")??[])[u]?.focus()}function m(u,b){u.key==="ArrowDown"?(u.preventDefault(),p(b+1)):u.key==="ArrowUp"&&(u.preventDefault(),p(b-1))}function x(u){u.key==="Enter"?o.length===1&&a(o[0].stageId):u.key==="ArrowDown"&&(u.preventDefault(),p(0))}return n.jsx(st,{open:e,onOpenChange:r,children:n.jsxs(ot,{className:"flex max-h-[85vh] flex-col sm:max-w-xl",children:[n.jsxs(lt,{children:[n.jsxs(ct,{className:"flex items-center gap-1.5",children:[n.jsx(q,{"aria-hidden":"true",className:"size-4 text-plan-aggregate"}),"Open plan graph"]}),n.jsx(dt,{children:"Choose which SQL execution's plan to open."})]}),n.jsx(mr,{autoFocus:!0,placeholder:"Filter executions…",value:i,onChange:u=>l(u.target.value),onKeyDown:x}),o.length===0?n.jsx("p",{className:"px-1.5 py-1 text-sm text-muted-foreground",children:"No matching executions"}):n.jsx("ul",{ref:c,className:"flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto",children:o.map((u,b)=>n.jsx("li",{children:n.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:()=>a(u.stageId),onKeyDown:w=>m(w,b),children:[n.jsxs("span",{className:"flex w-full min-w-0 items-center gap-1.5",children:[u.impactBand!=null&&n.jsxs(n.Fragment,{children:[n.jsx(fn,{impactBand:u.impactBand}),n.jsxs("span",{className:"shrink-0 text-xs font-normal text-muted-foreground",children:[u.findingCount," finding",u.findingCount===1?"":"s"]})]}),n.jsx("span",{className:"truncate text-sm font-medium",children:u.secondary})]}),n.jsx("span",{className:"w-full truncate text-xs text-muted-foreground",children:u.label})]})},u.executionId))})]})})}const fr="0.24.1",hr={version:fr};function xr({keys:e}){return n.jsx("span",{className:"flex shrink-0 items-center gap-1",children:e.map((t,a)=>n.jsxs("span",{className:"flex items-center gap-1",children:[a>0?n.jsx("span",{className:"text-xs text-muted-foreground",children:"or"}):null,n.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:t})]},t))})}function N({keys:e,children:t}){return n.jsxs("div",{className:"flex items-center justify-between gap-4 py-1.5",children:[n.jsx("span",{className:"text-sm text-foreground",children:t}),n.jsx(xr,{keys:e})]})}function H({title:e,children:t}){return n.jsxs("div",{children:[n.jsx("h3",{className:"mb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase",children:e}),n.jsx("div",{className:"divide-y divide-border/60",children:t})]})}function br({open:e,onOpenChange:t}){return n.jsx(st,{open:e,onOpenChange:t,children:n.jsxs(ot,{className:"sm:max-w-md",children:[n.jsxs(lt,{children:[n.jsx(ct,{children:"Keyboard shortcuts"}),n.jsx(dt,{children:"Everything below works from anywhere the board is loaded."})]}),n.jsxs("div",{className:"flex flex-col gap-4",children:[n.jsxs(H,{title:"Navigation",children:[n.jsx(N,{keys:["Tab","Shift+Tab"],children:"Move between controls"}),n.jsx(N,{keys:["Enter","Space"],children:"Activate the focused control, open a stage's details, or sort a column"}),n.jsx(N,{keys:["Esc"],children:"Close the open dialog, or leave a full-page view like Plan graph"})]}),n.jsxs(H,{title:"Menus and lists",children:[n.jsx(N,{keys:["↑","↓"],children:"Move between menu items or picker rows"}),n.jsx(N,{keys:["A–Z","0–9"],children:"Filter the Type and Stage dropdowns, and the plan execution picker, as you type"})]}),n.jsx(H,{title:"Help",children:n.jsx(N,{keys:["?"],children:"Open this list"})})]}),n.jsxs("p",{className:"text-center text-xs text-muted-foreground",children:["SparkForensics v",hr.version]})]})})}const vr=ve("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 yr({className:e,variant:t="default",size:a="default",...r}){return n.jsx(Bt,{"data-slot":"toggle",className:y(vr({variant:t,size:a,className:e})),...r})}const xt="Show confidence levels, evidence, and documentation links for each finding";function wr(){const e=Ee()==="advanced";return n.jsx(yr,{variant:"outline",pressed:e,onPressedChange:t=>O.getState().setWidgetDensity(t?"advanced":"basic"),className:"tap-target-comfortable aria-pressed:bg-primary aria-pressed:text-primary-foreground aria-pressed:hover:bg-[color-mix(in_oklch,var(--primary),var(--foreground)_5%)]",title:xt,children:"Advanced view"})}function jr(){const e=Ee()==="advanced";return n.jsx(ut,{checked:e,onCheckedChange:t=>O.getState().setWidgetDensity(t?"advanced":"basic"),title:xt,children:"Advanced view"})}function kr(e,t){return e==="warning"?`${t} warning${t===1?"":"s"}`:`${t} ${e}`}function Sr(e,t){return e.stageId!=null&&t.includes(e.stageId)?!0:e.stageIds?.some(a=>t.includes(a))??!1}function _r(e,t){const a=[];for(const[r,i]of e.sql){if(!i.planTree)continue;const l=vn(r,e.stages),c=l.length>0?Math.min(...l):null;if(c==null)continue;const s=i.description,o=typeof s=="string"&&s.trim()?s:`SQL execution #${r}`,p=i.startTime,m=i.endTime,x=typeof p=="number"&&typeof m=="number"?M(m-p):null,u=t.filter(k=>Sr(k,l)),w=$(u)??null,S=u.length;a.push({executionId:r,stageId:c,label:o,secondary:x?`#${r} · ${x}`:`#${r}`,impactBand:w,findingCount:S})}return a.sort((r,i)=>{const l=r.impactBand?C[r.impactBand]:1/0,c=i.impactBand?C[i.impactBand]:1/0;return l!==c?l-c:r.executionId-i.executionId}),a}function Mr({onLoadNew:e,recentEntries:t,activeFileId:a,onPickRecent:r,onRemoveRecent:i,sectionControls:l,leadingContent:c}){const s=E(v=>v.appModel.app),o=E(v=>v.catalog),p=E(v=>v.skippedLines),m=E(v=>v.exportMode),{theme:x,toggle:u}=hn(),b=d.useRef(null),w=E(v=>v.comparison),S=ft(),k=E(v=>v.appModel),j=d.useMemo(()=>_r(k,o),[k,o]),[_,I]=d.useState(!1),[bt,P]=d.useState(!1);d.useEffect(()=>{function v(D){if(D.key!=="?")return;const se=D.target,oe=se?.tagName;oe==="INPUT"||oe==="TEXTAREA"||se?.isContentEditable||(D.preventDefault(),P(!0))}return window.addEventListener("keydown",v),()=>window.removeEventListener("keydown",v)},[]);function re(){if(j.length!==0){if(j.length===1){O.getState().openPlanGraph(j[0].stageId,{initialScope:"full"});return}I(!0)}}function vt(v){O.getState().openPlanGraph(v,{initialScope:"full"}),I(!1)}const ie=s?.name||"Spark Application",B=[s?.id,s?.sparkVersion?`Spark ${s.sparkVersion}`:null].filter(Boolean).join(" · "),A=$(o),yt=A?o.filter(v=>v.impactBand===A).length:0;return n.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:[l?null:n.jsx("h1",{className:"sr-only",children:"SparkForensics"}),n.jsxs("div",{className:"flex min-w-0 flex-1 items-center gap-3",children:[m?n.jsxs("div",{className:"flex min-w-0 shrink flex-col items-start justify-center gap-0 py-1",children:[n.jsx("span",{className:"min-w-0 truncate font-heading text-sm font-semibold",children:ie}),B?n.jsx("span",{className:"w-full min-w-0 truncate text-left text-xs text-muted-foreground",children:B}):null]}):n.jsx(pr,{activeName:ie,activeSub:B,activeId:a,entries:t,onPick:r,onRemove:i,onOpenNew:e}),p>0?n.jsxs("div",{className:"min-w-0 truncate text-xs text-warning",children:[p," line",p===1?"":"s"," skipped: malformed or invalid data"]}):null,c]}),l?n.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:l}):A?n.jsx(yn,{label:kr(A,yt),impactBand:A,className:"shrink-0"}):n.jsxs("span",{className:y("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:[n.jsx("span",{"aria-hidden":"true",className:"inline-block size-2 shrink-0 rounded-full bg-clean"}),"No findings"]}),n.jsxs("div",{className:"flex shrink-0 items-center gap-1",children:[!l&&w.baselineId&&!w.active?n.jsx(T,{variant:"ghost",size:"sm",className:"tap-target-comfortable",onClick:()=>O.getState().setComparisonActive(!0),children:"← Back to comparison"}):null,n.jsxs("div",{className:"hidden items-center gap-1 sm:flex",children:[l?null:n.jsx(ur,{}),!l&&j.length>0?n.jsxs(T,{variant:"ghost",size:"sm",className:"tap-target-comfortable",onClick:re,children:[n.jsx(q,{"aria-hidden":"true",className:"text-plan-aggregate"}),"Plan graph"]}):null,l?null:n.jsx(wr,{}),n.jsx(T,{variant:"ghost",size:"icon",className:"tap-target-comfortable","aria-label":"Keyboard shortcuts",title:"Keyboard shortcuts (?)",onClick:()=>P(!0),children:n.jsx(Vn,{"aria-hidden":"true"})}),n.jsx(T,{variant:"ghost",size:"icon",className:"tap-target-comfortable","aria-label":"Toggle theme","aria-pressed":x==="light",title:"Toggle theme",onClick:u,children:x==="dark"?n.jsx(xn,{"aria-hidden":"true"}):n.jsx(bn,{"aria-hidden":"true"})})]}),n.jsxs(ee,{onOpenChange:(v,D)=>{!v&&D.reason==="outside-press"&&setTimeout(()=>{document.activeElement===document.body&&b.current?.focus()})},children:[n.jsx(te,{ref:b,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:n.jsx(Fn,{"aria-hidden":"true"})}),n.jsxs(ne,{align:"end",children:[l?null:n.jsxs(n.Fragment,{children:[n.jsx(ht,{...S}),n.jsx(ae,{})]}),!l&&j.length>0?n.jsxs(z,{onClick:re,children:[n.jsx(q,{"aria-hidden":"true",className:"text-plan-aggregate"}),"Plan graph"]}):null,l?null:n.jsx(jr,{}),n.jsx(z,{onClick:()=>P(!0),children:"Keyboard shortcuts"}),n.jsx(z,{onClick:u,children:"Toggle theme"})]})]})]}),n.jsx(gr,{open:_,entries:j,onSelect:vt,onOpenChange:I}),n.jsx(br,{open:bt,onOpenChange:P})]})}function Fr(e){const{pickRecent:t}=_e(),[a,r]=d.useState([]),i=d.useCallback(()=>{wn().then(s=>r(s)).catch(()=>r([]))},[]);d.useEffect(()=>{i()},[i,e]);const l=d.useCallback(async s=>{const o=a.find(m=>m.id===s),p=await t(s,o?.handle);(p==="restored"||p==="gone")&&i()},[a,t,i]),c=d.useCallback(s=>{const o=a.find(p=>p.id===s);jn(s).catch(()=>{}).finally(i),o&&kn(`Removed "${o.appName||o.name}" from recent files`,{action:{label:"Undo",onClick:()=>{Sn(o).catch(()=>{}).finally(i)}}})},[a,i]);return{recentEntries:a,onPickRecent:l,onRemoveRecent:c}}export{Rr as A,Kn as B,Lr as C,st as D,pe as E,Ir as F,Un as G,Hn as H,mr as I,ce as J,de as K,vr as L,zr as P,G as R,Te as S,Mr as T,ot as a,lt as b,ct as c,$r as d,ut as e,Or as f,ee as g,te as h,ne as i,Pr as j,Wa as k,ha as l,La as m,F as n,Ar as o,Dr as p,Ya as q,ia as r,Ua as s,Ka as t,Fr as u,Dn as v,Ha as w,ja as x,Gn as y,Nr as z};
@@ -1 +0,0 @@
1
- import{j as e,r as p}from"./react-vendor-DA6opS-q.js";import{A as u,E as d}from"./index-CHjV2-jB.js";import{T as g,a as c}from"./toggle-group-lbIXRG0W.js";import{b as f,a as v}from"./impact-sort-Cq6KOLqh.js";function j({mode:a,onChange:o,stageLabel:r="Stage"}){return e.jsx(u,{children:e.jsxs(g,{"aria-label":"Sort order",spacing:0,value:[a],onValueChange:s=>{const t=s[0];t&&o(t)},children:[e.jsx(c,{value:"impact",variant:"outline",size:"sm",className:"tap-target-comfortable tap-target-comfortable--sm",children:"Impact"}),e.jsx(c,{value:"stage",variant:"outline",size:"sm",className:"tap-target-comfortable tap-target-comfortable--sm",children:r})]})})}function M(a="impact"){const[o,r]=p.useState(a),t=d()==="advanced"?o:"impact";function i(n,m,l){return t==="impact"?[...n].sort(f(m)):[...n].sort(v(l))}return{sortMode:t,setSortMode:r,orderBy:i}}export{j as S,M as u};