sparkforensics-server 0.5.2 → 0.8.1

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 (445) hide show
  1. package/index.js +16 -7
  2. package/package.json +1 -1
  3. package/public/assets/AutoscalingChurn-DenWKTv-.js +1 -0
  4. package/public/assets/CacheUtilization-DLz7NdjV.js +1 -0
  5. package/public/assets/CachingOpportunity-zpQIqhzm.js +1 -0
  6. package/public/assets/ChartTheme-DAiARbLP.js +8 -0
  7. package/public/assets/ColdStart-C-9HjxWl.js +1 -0
  8. package/public/assets/ConfigAudit-D0V9tcrJ.js +1 -0
  9. package/public/assets/CoreUsageArea-yeerrljd.js +1 -0
  10. package/public/assets/Dashboard-DkUPrHKV.js +1 -0
  11. package/public/assets/DisclosureContext-DK1_iz6J.js +1 -0
  12. package/public/assets/DuplicatePlanSubtree-xDNDbCd3.js +1 -0
  13. package/public/assets/DurationHistogram-B6jsE0Ov.js +1 -0
  14. package/public/assets/EmptyState-C1uL40VU.js +1 -0
  15. package/public/assets/ExecutorUtilization-DXDZKmSc.js +1 -0
  16. package/public/assets/GcPressure-MRf7I4IG.js +1 -0
  17. package/public/assets/ImpactEstimate-Dm3xWbzV.js +1 -0
  18. package/public/assets/IncompleteRun-CaLOhMtf.js +1 -0
  19. package/public/assets/JobFailures-CzmzlvhO.js +1 -0
  20. package/public/assets/MemoryUtilization-AWUMUjCH.js +1 -0
  21. package/public/assets/NestedLoopJoin-C9sNr6Ss.js +1 -0
  22. package/public/assets/OverBroadcast-BOmRE6ca.js +1 -0
  23. package/public/assets/PartitionHint-BL2EmJfE.js +1 -0
  24. package/public/assets/PartitionSizing-BzBySvUq.js +1 -0
  25. package/public/assets/PlanExplorer-DdiQRcJU.js +1 -0
  26. package/public/assets/PlanGraphRoute-CIH9gBuR.js +1 -0
  27. package/public/assets/PlanView-B1hxzFRs.js +2 -0
  28. package/public/assets/PythonUdf-DvgCCueD.js +1 -0
  29. package/public/assets/RetryWaste-uXXu_CyM.js +1 -0
  30. package/public/assets/RowPagination-C-LzWkI5.js +1 -0
  31. package/public/assets/RowStatusCluster-Dbtmte7l.js +1 -0
  32. package/public/assets/ShuffleIO-nALwzC1_.js +1 -0
  33. package/public/assets/Skew-CHMEKgvk.js +1 -0
  34. package/public/assets/SlowHost-yyvjpHk6.js +1 -0
  35. package/public/assets/SmallFiles-y6odJ97n.js +1 -0
  36. package/public/assets/SpeculationWaste-C-SD2LOt.js +1 -0
  37. package/public/assets/Spill-DHTMmOup.js +1 -0
  38. package/public/assets/StageFailed-CQ3DxC9R.js +1 -0
  39. package/public/assets/StageFindingGroup-BgYLyj5q.js +1 -0
  40. package/public/assets/StageHeader-CIETkjVZ.js +1 -0
  41. package/public/assets/StagePill--P7PDd3s.js +1 -0
  42. package/public/assets/StageShape-BIv8vx_o.js +1 -0
  43. package/public/assets/StageSlowness-MMqzERxN.js +1 -0
  44. package/public/assets/Straggler-BgrY7AyW.js +1 -0
  45. package/public/assets/TaskFailures-BHHyKYTs.js +1 -0
  46. package/public/assets/TinyTask-DDScNhCl.js +1 -0
  47. package/public/assets/UnderBroadcast-CGIC04TI.js +1 -0
  48. package/public/assets/WidgetLeadSummary-CXFZP00C.js +1 -0
  49. package/public/assets/button-DbpTz2yk.js +1 -0
  50. package/public/assets/charts-vendor-CtTxwTeu.js +59 -0
  51. package/public/assets/composite-C9Nu2EI9.js +1 -0
  52. package/public/assets/d3-vendor-DNlD2-cz.js +1 -0
  53. package/public/assets/detector-registry-Bp8hrLua.js +2 -0
  54. package/public/assets/downsample-WmNM1qc9.js +1 -0
  55. package/public/assets/finding-anchor-Dr40LkS9.js +1 -0
  56. package/public/assets/findings-of-type-BL2u3RGZ.js +1 -0
  57. package/public/assets/impact-sort-mC5ISgX8.js +1 -0
  58. package/public/assets/inbox-KPU1Gppm.js +1 -0
  59. package/public/assets/index-CaRVPvAT.css +2 -0
  60. package/public/assets/index-fDiwfuoO.js +14 -0
  61. package/public/assets/inertValue-L9VxV0VE.js +1 -0
  62. package/public/assets/instrument-sans-latin-ext-wdth-normal-C5E2Gvlv.woff2 +0 -0
  63. package/public/assets/instrument-sans-latin-wdth-normal-BVScPF0l.woff2 +0 -0
  64. package/public/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  65. package/public/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  66. package/public/assets/layout.worker-CLcBHxVp.js +3 -0
  67. package/public/assets/{parser-worker-CA5RxqKc.js → parser-worker-CRIOPMOW.js} +8 -8
  68. package/public/assets/plan-graph-vendor-Ce6d4HU6.js +7 -0
  69. package/public/assets/react-vendor-C6KcUD36.js +9 -0
  70. package/public/assets/select-BHqOqun5.js +1 -0
  71. package/public/assets/toggle-DPeN6aNa.js +1 -0
  72. package/public/assets/toggle-group-Kl3uyHSr.js +1 -0
  73. package/public/assets/usePagedRows-BafD6bEN.js +1 -0
  74. package/public/assets/useRecentFiles-DzJZAoOT.js +3 -0
  75. package/public/assets/useRegisterFieldControl-pQv-ZDoU.js +1 -0
  76. package/public/assets/useScrollLock-BCxn_dMp.js +1 -0
  77. package/public/assets/useSortMode-DjrAN-z4.js +1 -0
  78. package/public/docs/404.html +3 -7
  79. package/public/docs/assets/{app.eYTPqTeq.js → app.1gvzd5Zb.js} +1 -1
  80. package/public/docs/assets/chunks/@localSearchIndexroot.DS2TQP5_.js +1 -0
  81. package/public/docs/assets/chunks/{VPLocalSearchBox.DsZrQKQR.js → VPLocalSearchBox.CNxT3s0I.js} +1 -1
  82. package/public/docs/assets/chunks/{theme.DsTNE2pE.js → theme.C5lLqUv7.js} +2 -2
  83. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CqKM_jEG.js +1 -0
  84. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.CqKM_jEG.lean.js +1 -0
  85. package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.BYDo3ClR.js} +1 -1
  86. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.ajUAVdbc.js +1 -0
  87. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.WqY74T0T.js +1 -0
  88. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.WqY74T0T.lean.js +1 -0
  89. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CHHgywoP.js +1 -0
  90. package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.wj6Et6UD.lean.js → contributor-guide_architecture_detector-contract.md.CHHgywoP.lean.js} +1 -1
  91. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.DIz3_oz9.js +1 -0
  92. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.DIz3_oz9.lean.js +1 -0
  93. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.WH4tRHPL.js +1 -0
  94. package/public/docs/assets/{contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.lean.js → contributor-guide_architecture_detector-contract_threshold-tables.md.WH4tRHPL.lean.js} +1 -1
  95. package/public/docs/assets/{contributor-guide_architecture_drill-down.md.CqZPrdo9.js → contributor-guide_architecture_drill-down.md.yB-Hz2XT.js} +1 -1
  96. package/public/docs/assets/{contributor-guide_architecture_drill-down.md.CqZPrdo9.lean.js → contributor-guide_architecture_drill-down.md.yB-Hz2XT.lean.js} +1 -1
  97. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.BQZE04sw.js +1 -0
  98. package/public/docs/assets/{contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.lean.js → contributor-guide_architecture_drill-down_plan-graph.md.BQZE04sw.lean.js} +1 -1
  99. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.K71YB-Rr.js +1 -0
  100. package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.lean.js → contributor-guide_architecture_impact-estimation.md.K71YB-Rr.lean.js} +1 -1
  101. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.DLCAffwn.js +1 -0
  102. package/public/docs/assets/{contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.lean.js → contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.DLCAffwn.lean.js} +1 -1
  103. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.JFrzDMwo.js +1 -0
  104. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.JFrzDMwo.lean.js +1 -0
  105. package/public/docs/assets/contributor-guide_architecture_overview.md.nxkpOhgf.js +1 -0
  106. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.U-9KMDFK.js +1 -0
  107. package/public/docs/assets/{contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.lean.js → contributor-guide_architecture_state-and-history_run-comparison-internals.md.U-9KMDFK.lean.js} +1 -1
  108. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BrSz8Ezh.js +1 -0
  109. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.B7rjSF_h.js +1 -0
  110. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.B7rjSF_h.lean.js +1 -0
  111. package/public/docs/assets/{contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.js → contributor-guide_architecture_widget-rendering_list-sort-mode.md.37hcZJ7q.js} +1 -1
  112. package/public/docs/assets/{contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.js → contributor-guide_architecture_widget-rendering_row-expand-contract.md.mK_VmAWk.js} +1 -1
  113. package/public/docs/assets/{contributor-guide_architecture_worker-protocol.md.BAnhi2-d.js → contributor-guide_architecture_worker-protocol.md.Br6OE7RW.js} +1 -1
  114. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.Br6OE7RW.lean.js +1 -0
  115. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.IVyaXrGe.js +1 -0
  116. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.lean.js → contributor-guide_architecture_worker-protocol_cli-and-mcp.md.IVyaXrGe.lean.js} +1 -1
  117. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.js → contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DVSXn-bb.js} +1 -1
  118. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.js → contributor-guide_architecture_worker-protocol_evidence-availability.md.D3S5cyOW.js} +2 -2
  119. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.lean.js → contributor-guide_architecture_worker-protocol_evidence-availability.md.D3S5cyOW.lean.js} +1 -1
  120. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.CtmCU57I.js +1 -0
  121. package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.lean.js → contributor-guide_architecture_worker-protocol_evidence-report.md.CtmCU57I.lean.js} +1 -1
  122. package/public/docs/assets/contributor-guide_contributing.md.DBW4drtZ.js +1 -0
  123. package/public/docs/assets/{contributor-guide_development-setup.md.D9bu4j_c.js → contributor-guide_development-setup.md.B21ZTDhn.js} +3 -3
  124. package/public/docs/assets/contributor-guide_development-setup.md.B21ZTDhn.lean.js +1 -0
  125. package/public/docs/assets/contributor-guide_testing.md.DpkozNoG.js +4 -0
  126. package/public/docs/assets/{contributor-guide_testing.md.By6XGR9a.lean.js → contributor-guide_testing.md.DpkozNoG.lean.js} +1 -1
  127. package/public/docs/assets/{index.md.CHJVslga.js → index.md.lMm7SUMz.js} +1 -1
  128. package/public/docs/assets/{index.md.CHJVslga.lean.js → index.md.lMm7SUMz.lean.js} +1 -1
  129. package/public/docs/assets/instrument-sans-latin-ext-wdth-normal.C5E2Gvlv.woff2 +0 -0
  130. package/public/docs/assets/instrument-sans-latin-wdth-normal.BVScPF0l.woff2 +0 -0
  131. package/public/docs/assets/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2 +0 -0
  132. package/public/docs/assets/jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2 +0 -0
  133. package/public/docs/assets/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2 +0 -0
  134. package/public/docs/assets/jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2 +0 -0
  135. package/public/docs/assets/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2 +0 -0
  136. package/public/docs/assets/style.Cfxqlj0y.css +1 -0
  137. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.C0pcQoNc.js +29 -0
  138. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.C0pcQoNc.lean.js +1 -0
  139. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.CGaxPX_1.js +1 -0
  140. package/public/docs/assets/{user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.js → user-guide_getting-started_tuning-thresholds.md.BGVE-wrc.js} +2 -2
  141. package/public/docs/assets/{user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.lean.js → user-guide_getting-started_tuning-thresholds.md.BGVE-wrc.lean.js} +1 -1
  142. package/public/docs/assets/{user-guide_mcp-tools.md.C65SjWUL.js → user-guide_mcp-tools.md.49r3L2YE.js} +1 -1
  143. package/public/docs/assets/{user-guide_mcp-tools_compare-runs.md.Cc_gLoix.js → user-guide_mcp-tools_compare-runs.md.BQ_kIptC.js} +11 -6
  144. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.BQ_kIptC.lean.js +1 -0
  145. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.azCZXkH8.js +44 -0
  146. package/public/docs/assets/{user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.lean.js → user-guide_mcp-tools_diagnose-run.md.azCZXkH8.lean.js} +1 -1
  147. package/public/docs/assets/{user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.js → user-guide_mcp-tools_evaluate-budgets.md.dpQpRQ7z.js} +2 -2
  148. package/public/docs/assets/{user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.lean.js → user-guide_mcp-tools_evaluate-budgets.md.dpQpRQ7z.lean.js} +1 -1
  149. package/public/docs/assets/{user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.js → user-guide_mcp-tools_get-finding-evidence.md.CH6FkNLX.js} +2 -1
  150. package/public/docs/assets/{user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.lean.js → user-guide_mcp-tools_get-finding-evidence.md.CH6FkNLX.lean.js} +1 -1
  151. package/public/docs/assets/{user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.js → user-guide_mcp-tools_get-run-summary.md.EhaIsele.js} +1 -1
  152. package/public/docs/assets/user-guide_run-comparison.md.B_LOkdBf.js +1 -0
  153. package/public/docs/assets/user-guide_run-comparison.md.B_LOkdBf.lean.js +1 -0
  154. package/public/docs/assets/user-guide_understanding-findings.md.C4riKCKl.js +1 -0
  155. package/public/docs/assets/user-guide_understanding-findings.md.C4riKCKl.lean.js +1 -0
  156. package/public/docs/contributor-guide/architecture/board-widgets/caching-and-memory.html +6 -10
  157. package/public/docs/contributor-guide/architecture/board-widgets/plan-advisor.html +6 -10
  158. package/public/docs/contributor-guide/architecture/board-widgets/visual-system-and-templating.html +6 -10
  159. package/public/docs/contributor-guide/architecture/board-widgets.html +6 -10
  160. package/public/docs/contributor-guide/architecture/detector-contract/plan-attribution.html +6 -10
  161. package/public/docs/contributor-guide/architecture/detector-contract/threshold-tables.html +6 -10
  162. package/public/docs/contributor-guide/architecture/detector-contract.html +6 -10
  163. package/public/docs/contributor-guide/architecture/drill-down/plan-graph.html +6 -10
  164. package/public/docs/contributor-guide/architecture/drill-down.html +6 -10
  165. package/public/docs/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage.html +6 -10
  166. package/public/docs/contributor-guide/architecture/impact-estimation/stage-union-rollup.html +6 -10
  167. package/public/docs/contributor-guide/architecture/impact-estimation.html +6 -10
  168. package/public/docs/contributor-guide/architecture/index.html +5 -9
  169. package/public/docs/contributor-guide/architecture/overview.html +6 -10
  170. package/public/docs/contributor-guide/architecture/state-and-history/history-server-intake.html +5 -9
  171. package/public/docs/contributor-guide/architecture/state-and-history/run-comparison-internals.html +6 -10
  172. package/public/docs/contributor-guide/architecture/state-and-history.html +5 -9
  173. package/public/docs/contributor-guide/architecture/widget-rendering/findings-tab.html +6 -10
  174. package/public/docs/contributor-guide/architecture/widget-rendering/investigation-routing.html +5 -9
  175. package/public/docs/contributor-guide/architecture/widget-rendering/list-sort-mode.html +6 -10
  176. package/public/docs/contributor-guide/architecture/widget-rendering/reference-section.html +5 -9
  177. package/public/docs/contributor-guide/architecture/widget-rendering/row-expand-contract.html +6 -10
  178. package/public/docs/contributor-guide/architecture/widget-rendering.html +6 -10
  179. package/public/docs/contributor-guide/architecture/worker-protocol/cli-and-mcp.html +6 -10
  180. package/public/docs/contributor-guide/architecture/worker-protocol/core-and-event-validation.html +6 -10
  181. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-availability.html +7 -11
  182. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-report.html +6 -10
  183. package/public/docs/contributor-guide/architecture/worker-protocol.html +6 -10
  184. package/public/docs/contributor-guide/contributing.html +6 -10
  185. package/public/docs/contributor-guide/development-setup.html +8 -12
  186. package/public/docs/contributor-guide/testing.html +9 -10
  187. package/public/docs/favicon.svg +2 -2
  188. package/public/docs/hashmap.json +1 -1
  189. package/public/docs/index.html +6 -10
  190. package/public/docs/logo-dark.svg +1 -0
  191. package/public/docs/logo-light.svg +1 -0
  192. package/public/docs/tuning-reference/anti-patterns.html +5 -9
  193. package/public/docs/tuning-reference/aqe.html +5 -9
  194. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +5 -9
  195. package/public/docs/tuning-reference/bottleneck-cold-start.html +5 -9
  196. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +5 -9
  197. package/public/docs/tuning-reference/bottleneck-failures.html +5 -9
  198. package/public/docs/tuning-reference/bottleneck-gc.html +5 -9
  199. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +5 -9
  200. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +5 -9
  201. package/public/docs/tuning-reference/bottleneck-retry-waste.html +5 -9
  202. package/public/docs/tuning-reference/bottleneck-shuffle.html +5 -9
  203. package/public/docs/tuning-reference/bottleneck-skew.html +5 -9
  204. package/public/docs/tuning-reference/bottleneck-slow-host.html +5 -9
  205. package/public/docs/tuning-reference/bottleneck-small-files.html +5 -9
  206. package/public/docs/tuning-reference/bottleneck-spill.html +5 -9
  207. package/public/docs/tuning-reference/bottleneck-straggler.html +5 -9
  208. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +5 -9
  209. package/public/docs/tuning-reference/bottleneck-utilization.html +5 -9
  210. package/public/docs/tuning-reference/caching.html +5 -9
  211. package/public/docs/tuning-reference/cluster-config.html +5 -9
  212. package/public/docs/tuning-reference/config.html +5 -9
  213. package/public/docs/tuning-reference/data-formats.html +5 -9
  214. package/public/docs/tuning-reference/index.html +5 -9
  215. package/public/docs/tuning-reference/intro.html +5 -9
  216. package/public/docs/tuning-reference/joins.html +5 -9
  217. package/public/docs/tuning-reference/memory-model.html +5 -9
  218. package/public/docs/tuning-reference/metrics.html +5 -9
  219. package/public/docs/tuning-reference/partitioning.html +5 -9
  220. package/public/docs/tuning-reference/pyspark.html +5 -9
  221. package/public/docs/tuning-reference/shuffle.html +5 -9
  222. package/public/docs/tuning-reference/spark-architecture.html +5 -9
  223. package/public/docs/tuning-reference/table-formats.html +5 -9
  224. package/public/docs/user-guide/alternative-log-retrieval/managed-platforms.html +5 -9
  225. package/public/docs/user-guide/alternative-log-retrieval/ssh-bastion.html +5 -9
  226. package/public/docs/user-guide/alternative-log-retrieval.html +5 -9
  227. package/public/docs/user-guide/getting-started/ci-and-automation.html +17 -15
  228. package/public/docs/user-guide/getting-started/reading-the-dashboard.html +6 -10
  229. package/public/docs/user-guide/getting-started/regression-metric-keys.html +5 -9
  230. package/public/docs/user-guide/getting-started/tuning-thresholds.html +7 -11
  231. package/public/docs/user-guide/getting-started.html +5 -9
  232. package/public/docs/user-guide/mcp-tools/compare-runs.html +16 -15
  233. package/public/docs/user-guide/mcp-tools/diagnose-run.html +28 -11
  234. package/public/docs/user-guide/mcp-tools/evaluate-budgets.html +6 -10
  235. package/public/docs/user-guide/mcp-tools/get-finding-documentation.html +5 -9
  236. package/public/docs/user-guide/mcp-tools/get-finding-evidence.html +7 -10
  237. package/public/docs/user-guide/mcp-tools/get-reference-doc.html +5 -9
  238. package/public/docs/user-guide/mcp-tools/get-run-summary.html +6 -10
  239. package/public/docs/user-guide/mcp-tools/list-runs.html +5 -9
  240. package/public/docs/user-guide/mcp-tools.html +6 -10
  241. package/public/docs/user-guide/run-comparison/how-stages-are-matched.html +5 -9
  242. package/public/docs/user-guide/run-comparison.html +6 -10
  243. package/public/docs/user-guide/understanding-findings.html +6 -10
  244. package/public/export-template.html +46 -46
  245. package/public/favicon.svg +2 -2
  246. package/public/index.html +8 -10
  247. package/public/sample-runs/sample-run.ndjson.gz +0 -0
  248. package/vendor-core/allocation.js +126 -39
  249. package/vendor-core/analyzer.js +85 -58
  250. package/vendor-core/api-merge-writes.js +3 -0
  251. package/vendor-core/aqe-skew.js +347 -0
  252. package/vendor-core/cli/budgets.js +6 -4
  253. package/vendor-core/cli/collect-run-pair.js +89 -0
  254. package/vendor-core/cli/collect-run-worker.js +16 -0
  255. package/vendor-core/cli/collect-run.js +1 -2
  256. package/vendor-core/cli/native-zstd.js +12 -16
  257. package/vendor-core/comparability.js +234 -0
  258. package/vendor-core/comparison-output.js +15 -7
  259. package/vendor-core/comparison-verdict.js +105 -25
  260. package/vendor-core/core-source-hash.txt +1 -1
  261. package/vendor-core/core-time-series.js +0 -1
  262. package/vendor-core/core-usage-locality.js +1 -1
  263. package/vendor-core/delta-log-paths.js +10 -1
  264. package/vendor-core/detectors.js +1078 -416
  265. package/vendor-core/docs-config.js +0 -4
  266. package/vendor-core/docs-content/detection/cache.md +2 -1
  267. package/vendor-core/docs-content/detection/cfg.md +19 -11
  268. package/vendor-core/docs-content/detection/cold.md +2 -1
  269. package/vendor-core/docs-content/detection/gc.md +7 -3
  270. package/vendor-core/docs-content/detection/host.md +11 -1
  271. package/vendor-core/docs-content/detection/mem.md +17 -6
  272. package/vendor-core/docs-content/detection/part.md +3 -1
  273. package/vendor-core/docs-content/detection/plan.md +55 -13
  274. package/vendor-core/docs-content/detection/shfl.md +11 -5
  275. package/vendor-core/docs-content/detection/skew.md +48 -1
  276. package/vendor-core/docs-content/detection/slow.md +4 -2
  277. package/vendor-core/docs-content/detection/spec.md +6 -1
  278. package/vendor-core/docs-content/detection/spill.md +6 -3
  279. package/vendor-core/docs-content/detection/strag.md +19 -6
  280. package/vendor-core/docs-content/detection/tiny.md +9 -3
  281. package/vendor-core/docs-content/detection/util.md +6 -2
  282. package/vendor-core/effective-conf.js +7 -10
  283. package/vendor-core/efficiency-model.js +24 -16
  284. package/vendor-core/etl-phases.js +1 -2
  285. package/vendor-core/event-handlers.js +175 -57
  286. package/vendor-core/event-schemas.js +21 -16
  287. package/vendor-core/evidence-availability.js +9 -2
  288. package/vendor-core/evidence-report.js +118 -35
  289. package/vendor-core/executor-peaks.js +41 -0
  290. package/vendor-core/export-data.js +5 -5
  291. package/vendor-core/finding-identity.js +78 -0
  292. package/vendor-core/finding-presentation.js +129 -39
  293. package/vendor-core/finding-types.js +108 -30
  294. package/vendor-core/format-utils.js +14 -15
  295. package/vendor-core/html-export.js +1 -1
  296. package/vendor-core/impact-band.js +2 -2
  297. package/vendor-core/impact-format.js +47 -19
  298. package/vendor-core/impact-model.js +28 -17
  299. package/vendor-core/job-groups.js +4 -4
  300. package/vendor-core/mcp-server-factory.js +48 -12
  301. package/vendor-core/mcp-tools.js +179 -24
  302. package/vendor-core/median.js +2 -2
  303. package/vendor-core/nested-loop-join.js +73 -0
  304. package/vendor-core/occupancy.js +1 -2
  305. package/vendor-core/parser-worker.js +1 -1
  306. package/vendor-core/plan-graph-model.js +14 -22
  307. package/vendor-core/plan-node-detail.js +2 -3
  308. package/vendor-core/plan-summary.js +24 -19
  309. package/vendor-core/plan-tree-walk.js +6 -8
  310. package/vendor-core/python-stage.js +12 -1
  311. package/vendor-core/recommendation-rollup.js +13 -12
  312. package/vendor-core/redact.js +52 -46
  313. package/vendor-core/remediation.js +10 -5
  314. package/vendor-core/run-aggregates.js +6 -8
  315. package/vendor-core/run-comparison.js +226 -66
  316. package/vendor-core/run-identity.js +12 -0
  317. package/vendor-core/run-interpretation.js +21 -0
  318. package/vendor-core/run-metrics.js +2 -2
  319. package/vendor-core/run-output.js +44 -11
  320. package/vendor-core/run-totals.js +12 -0
  321. package/vendor-core/run-verdict.js +76 -3
  322. package/vendor-core/scaling-sim.js +3 -4
  323. package/vendor-core/snappy-block.js +2 -2
  324. package/vendor-core/spark-conf.js +168 -0
  325. package/vendor-core/sql-stages.js +2 -2
  326. package/vendor-core/stage-alignment.js +2 -12
  327. package/vendor-core/stage-identity.js +58 -3
  328. package/vendor-core/stage-label.js +14 -0
  329. package/vendor-core/stage-plan-nodes.js +17 -3
  330. package/vendor-core/stage-quantiles.js +141 -9
  331. package/vendor-core/stage-structure.js +17 -3
  332. package/vendor-core/threshold-overrides.js +9 -3
  333. package/vendor-core/types.js +70 -23
  334. package/vendor-core/wall-clock.js +8 -0
  335. package/vendor-core/wasted-core-hours.js +12 -12
  336. package/vendor-core/write-targets.js +146 -14
  337. package/vendor-core/zstd-worker-client.js +1 -1
  338. package/vendor-core/zstd-worker.js +1 -1
  339. package/public/assets/AutoscalingChurn-8t3U3isq.js +0 -1
  340. package/public/assets/CacheUtilization-CJs9tTum.js +0 -1
  341. package/public/assets/CachingOpportunity-D1NcHs0V.js +0 -1
  342. package/public/assets/ColdStart-CdRJ9gD8.js +0 -1
  343. package/public/assets/ConfigAudit-B5Gbe5js.js +0 -1
  344. package/public/assets/CoreUsageArea-a--NTRGY.js +0 -1
  345. package/public/assets/Dashboard-C1hNeX49.js +0 -2
  346. package/public/assets/DisclosureContext-ZpE6CkHx.js +0 -1
  347. package/public/assets/DuplicatePlanSubtree-dobXdz7E.js +0 -1
  348. package/public/assets/ExecutorUtilization-D9grwi7t.js +0 -1
  349. package/public/assets/GcPressure-8-G2ri10.js +0 -1
  350. package/public/assets/IncompleteRun-B91lky7a.js +0 -1
  351. package/public/assets/JobFailures-BsWvBMyJ.js +0 -1
  352. package/public/assets/MemoryUtilization-BM5schZI.js +0 -1
  353. package/public/assets/OverBroadcast-DdN8JIJH.js +0 -1
  354. package/public/assets/PartitionHint-CUvbnnxy.js +0 -1
  355. package/public/assets/PartitionSizing-CY5HDYtp.js +0 -1
  356. package/public/assets/PlanExplorer-DgHCDBD_.js +0 -1
  357. package/public/assets/PlanGraphRoute-DH3KJb8j.js +0 -1
  358. package/public/assets/RetryWaste-DOnE9vGF.js +0 -1
  359. package/public/assets/ShuffleIO-MMnDESkF.js +0 -1
  360. package/public/assets/Skew-BmZZJ5ms.js +0 -1
  361. package/public/assets/SlowHost-CsJzfEqo.js +0 -1
  362. package/public/assets/SmallFiles-BoK3R1Ex.js +0 -1
  363. package/public/assets/SpeculationWaste-CnVxB5AJ.js +0 -1
  364. package/public/assets/Spill-BhNicyBy.js +0 -1
  365. package/public/assets/StageFailed-mAhHU4l_.js +0 -1
  366. package/public/assets/StageFindingGroup-BEtPWcT0.js +0 -1
  367. package/public/assets/StageHeader-DJkYkrsU.js +0 -1
  368. package/public/assets/StageShape-BDxRknLp.js +0 -1
  369. package/public/assets/StageSlowness-BPRw-otN.js +0 -1
  370. package/public/assets/Straggler-CZCbnOWP.js +0 -1
  371. package/public/assets/TaskFailures-C57YcLFQ.js +0 -1
  372. package/public/assets/TinyTask-Bi84qU7n.js +0 -1
  373. package/public/assets/UnderBroadcast-DdQV7htE.js +0 -1
  374. package/public/assets/charts-vendor-0VMaLVLN.js +0 -59
  375. package/public/assets/finding-anchor-Cl6_5hfV.js +0 -1
  376. package/public/assets/impact-sort-CssZ6MT2.js +0 -1
  377. package/public/assets/index-2h_TgUAb.css +0 -2
  378. package/public/assets/index-B-03mG7K.js +0 -14
  379. package/public/assets/plan-graph-vendor-BYl-AzN5.js +0 -7
  380. package/public/assets/react-vendor-DEdfrRTJ.js +0 -9
  381. package/public/assets/select-CQjNhprm.js +0 -1
  382. package/public/assets/usePagedRows-Dyl6T8Ok.js +0 -1
  383. package/public/assets/useRecentFiles-XZEnLlal.js +0 -11
  384. package/public/assets/useSortMode-Dhvit8dt.js +0 -1
  385. package/public/docs/assets/chunks/@localSearchIndexroot.u_e5bQz4.js +0 -1
  386. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.js +0 -1
  387. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.lean.js +0 -1
  388. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.js +0 -1
  389. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.js +0 -1
  390. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.lean.js +0 -1
  391. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.wj6Et6UD.js +0 -1
  392. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.js +0 -1
  393. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.lean.js +0 -1
  394. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.js +0 -1
  395. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.js +0 -1
  396. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.js +0 -1
  397. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.js +0 -1
  398. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.js +0 -1
  399. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.lean.js +0 -1
  400. package/public/docs/assets/contributor-guide_architecture_overview.md.C1sSvm9i.js +0 -1
  401. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.js +0 -1
  402. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.js +0 -1
  403. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.js +0 -1
  404. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.lean.js +0 -1
  405. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.lean.js +0 -1
  406. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.js +0 -1
  407. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.js +0 -1
  408. package/public/docs/assets/contributor-guide_contributing.md.CQMvGwFt.js +0 -1
  409. package/public/docs/assets/contributor-guide_development-setup.md.D9bu4j_c.lean.js +0 -1
  410. package/public/docs/assets/contributor-guide_testing.md.By6XGR9a.js +0 -1
  411. package/public/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  412. package/public/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  413. package/public/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  414. package/public/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  415. package/public/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  416. package/public/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  417. package/public/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  418. package/public/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  419. package/public/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  420. package/public/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  421. package/public/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  422. package/public/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  423. package/public/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  424. package/public/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  425. package/public/docs/assets/style.tmDhD3c8.css +0 -1
  426. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.js +0 -23
  427. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.lean.js +0 -1
  428. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.js +0 -1
  429. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.Cc_gLoix.lean.js +0 -1
  430. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.js +0 -23
  431. package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.js +0 -1
  432. package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.lean.js +0 -1
  433. package/public/docs/assets/user-guide_understanding-findings.md.C9YRruMT.js +0 -1
  434. package/public/docs/assets/user-guide_understanding-findings.md.C9YRruMT.lean.js +0 -1
  435. /package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.lean.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.BYDo3ClR.lean.js} +0 -0
  436. /package/public/docs/assets/{contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.lean.js → contributor-guide_architecture_board-widgets_plan-advisor.md.ajUAVdbc.lean.js} +0 -0
  437. /package/public/docs/assets/{contributor-guide_architecture_overview.md.C1sSvm9i.lean.js → contributor-guide_architecture_overview.md.nxkpOhgf.lean.js} +0 -0
  438. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering.md.BOZ1azXG.lean.js → contributor-guide_architecture_widget-rendering.md.BrSz8Ezh.lean.js} +0 -0
  439. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.lean.js → contributor-guide_architecture_widget-rendering_list-sort-mode.md.37hcZJ7q.lean.js} +0 -0
  440. /package/public/docs/assets/{contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.lean.js → contributor-guide_architecture_widget-rendering_row-expand-contract.md.mK_VmAWk.lean.js} +0 -0
  441. /package/public/docs/assets/{contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.lean.js → contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DVSXn-bb.lean.js} +0 -0
  442. /package/public/docs/assets/{contributor-guide_contributing.md.CQMvGwFt.lean.js → contributor-guide_contributing.md.DBW4drtZ.lean.js} +0 -0
  443. /package/public/docs/assets/{user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.lean.js → user-guide_getting-started_reading-the-dashboard.md.CGaxPX_1.lean.js} +0 -0
  444. /package/public/docs/assets/{user-guide_mcp-tools.md.C65SjWUL.lean.js → user-guide_mcp-tools.md.49r3L2YE.lean.js} +0 -0
  445. /package/public/docs/assets/{user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.lean.js → user-guide_mcp-tools_get-run-summary.md.EhaIsele.lean.js} +0 -0
@@ -1 +0,0 @@
1
- import"./rolldown-runtime-hePW80VL.js";import{M as e}from"./charts-vendor-0VMaLVLN.js";import{a as t,c as n,d as r,f as i,i as a,l as o,n as s,o as c,p as l,r as u,s as d,t as f,u as p}from"./react-vendor-DEdfrRTJ.js";import{Tt as m,gt as h,ht as g}from"./DisclosureContext-ZpE6CkHx.js";import{p as _}from"./plan-graph-vendor-BYl-AzN5.js";import{A as v}from"./useRecentFiles-XZEnLlal.js";e();var y=_(),b=l;function x({className:e,...t}){return(0,y.jsx)(r,{"data-slot":`select-value`,className:m(`flex flex-1 text-left`,e),...t})}function S({className:e,size:t=`default`,children:n,...r}){return(0,y.jsxs)(i,{"data-slot":`select-trigger`,"data-size":t,className:m(`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`,e),...r,children:[n,(0,y.jsx)(p,{render:(0,y.jsx)(h,{className:`pointer-events-none size-4 text-muted-foreground`})})]})}function C({className:e,children:t,side:r=`bottom`,sideOffset:i=4,align:a=`center`,alignOffset:s=0,alignItemWithTrigger:l=!0,...u}){return(0,y.jsx)(o,{children:(0,y.jsx)(n,{side:r,sideOffset:i,align:a,alignOffset:s,alignItemWithTrigger:l,className:`isolate z-50`,children:(0,y.jsxs)(d,{"data-slot":`select-content`,"data-align-trigger":l,className:m(`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`,e),...u,children:[(0,y.jsx)(T,{}),(0,y.jsx)(c,{children:t}),(0,y.jsx)(E,{})]})})})}function w({className:e,children:n,...r}){return(0,y.jsxs)(t,{"data-slot":`select-item`,className:m(`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`,e),...r,children:[(0,y.jsx)(u,{className:`flex flex-1 shrink-0 gap-2 whitespace-nowrap`,children:n}),(0,y.jsx)(a,{render:(0,y.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex size-4 items-center justify-center`}),children:(0,y.jsx)(v,{className:`pointer-events-none`})})]})}function T({className:e,...t}){return(0,y.jsx)(f,{"data-slot":`select-scroll-up-button`,className:m(`top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,y.jsx)(g,{})})}function E({className:e,...t}){return(0,y.jsx)(s,{"data-slot":`select-scroll-down-button`,className:m(`bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,y.jsx)(h,{})})}export{x as a,S as i,C as n,w as r,b as t};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import"./DisclosureContext-ZpE6CkHx.js";var n=e(t(),1);function r(e,t,r,i=null){let a=Math.ceil(e.length/6),o=Math.min(t,Math.max(0,a-1)),s=i==null||i===-1?o:Math.floor(i/6),c=e.slice(s*6,(s+1)*6);return(0,n.useLayoutEffect)(()=>{if(i==null||i===-1)return;let e=Math.floor(i/6);r(t=>t===e?t:e)},[i]),{totalPages:a,effectivePage:s,visible:c}}export{r as t};
@@ -1,11 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{E as t,M as n,c as r,d as i,g as a,h as o,l as s,m as c,u as l}from"./charts-vendor-0VMaLVLN.js";import{B as u,F as d,G as f,H as p,I as m,K as h,L as g,M as _,N as v,P as y,R as b,U as x,V as S,W as C,z as w}from"./react-vendor-DEdfrRTJ.js";import{D as T,Et as E,F as D,L as O,M as k,N as A,P as j,Tt as M,U as N,X as P,Y as F,Z as I,_t as L,a as ee,b as te,bt as R,d as z,f as ne,gt as re,h as ie,ht as ae,i as oe,lt as se,mt as ce,n as le,nt as ue,o as de,p as fe,r as pe,u as me,ut as he,vt as ge,yt as B}from"./DisclosureContext-ZpE6CkHx.js";import{p as _e}from"./plan-graph-vendor-BYl-AzN5.js";import{$ as ve,At as ye,B as be,C as xe,Ct as Se,D as Ce,Et as we,H as Te,J as Ee,K as De,Mt as Oe,O as ke,Q as Ae,R as je,S as Me,St as Ne,T as Pe,U as Fe,V as Ie,W as Le,X as Re,Y as ze,Z as Be,_ as Ve,_t as He,a as Ue,at as We,bt as Ge,c as Ke,ct as qe,d as Je,dt as Ye,et as Xe,f as Ze,ft as Qe,g as $e,gt as et,h as tt,ht as nt,i as rt,it,jt as V,kt as at,m as ot,mt as st,n as ct,nt as lt,o as ut,ot as dt,p as ft,pt,q as mt,r as ht,rt as gt,s as _t,st as vt,t as yt,tt as bt,ut as xt,v as St,w as Ct,wt,y as Tt,z as Et}from"./index-B-03mG7K.js";var Dt={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};Dt.node;var Ot=L(Dt),kt={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};kt.node;var At=L(kt),jt={name:`download`,size:24,node:[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]};jt.node;var Mt=L(jt),Nt={name:`ellipsis`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]],aliases:[`more-horizontal`]};Nt.node;var Pt=L(Nt),Ft={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]};Ft.node;var It=L(Ft),Lt={name:`keyboard`,size:24,node:[[`path`,{d:`M10 8h.01`,key:`1r9ogq`}],[`path`,{d:`M12 12h.01`,key:`1mp3jc`}],[`path`,{d:`M14 8h.01`,key:`1primd`}],[`path`,{d:`M16 12h.01`,key:`1l6xoz`}],[`path`,{d:`M18 8h.01`,key:`emo2bl`}],[`path`,{d:`M6 8h.01`,key:`x9i8wu`}],[`path`,{d:`M7 16h10`,key:`wp8him`}],[`path`,{d:`M8 12h.01`,key:`czm47f`}],[`rect`,{width:`20`,height:`16`,x:`2`,y:`4`,rx:`2`,key:`18n3k1`}]]};Lt.node;var Rt=L(Lt),H=e(n(),1),U=_e();function zt({className:e,orientation:t=`horizontal`,...n}){return(0,U.jsx)(h,{"data-slot":`tabs`,"data-orientation":t,className:M(`group/tabs flex gap-2 data-horizontal:flex-col`,e),...n})}var Bt=E(`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 Vt({className:e,variant:t=`default`,...n}){return(0,U.jsx)(x,{"data-slot":`tabs-list`,"data-variant":t,className:M(Bt({variant:t}),e),...n})}function Ht({className:e,...t}){return(0,U.jsx)(f,{"data-slot":`tabs-trigger`,className:M(`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 Ut({className:e,...t}){return(0,U.jsx)(C,{"data-slot":`tabs-content`,className:M(`flex-1 text-sm outline-none`,e),...t})}var Wt={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 Gt(e){return Wt[e]}var Kt={revealRequest:0,evidenceCardOpen:!0,setEvidenceCardOpen:()=>{},revealEvidence:()=>{},registerRow:()=>{}},qt=(0,H.createContext)(null);function Jt({children:e}){let[t,n]=(0,H.useState)(!1),r=(0,H.useRef)(null),[i,a]=(0,H.useState)(0),o=(0,H.useRef)(new Map),s=(0,H.useCallback)((e,t)=>{t?o.current.set(e,t):o.current.delete(e)},[]),c=(0,H.useCallback)(e=>{r.current=e,n(!0),a(e=>e+1)},[]);(0,H.useLayoutEffect)(()=>{let e=r.current;e&&i!==0&&queueMicrotask(()=>{o.current.get(e)?.focus()})},[i]);let l=(0,H.useMemo)(()=>({revealRequest:i,evidenceCardOpen:t,setEvidenceCardOpen:n,revealEvidence:c,registerRow:s}),[i,t,c,s]);return(0,U.jsx)(qt.Provider,{value:l,children:e})}function Yt(){return(0,H.useContext)(qt)??Kt}function Xt(){let{revealEvidence:e}=Yt();return{revealEvidence:e}}function Zt(){let{revealRequest:e,evidenceCardOpen:t,setEvidenceCardOpen:n}=Yt();return{revealRequest:e,evidenceCardOpen:t,setEvidenceCardOpen:n}}function Qt(){let{registerRow:e}=Yt();return e}function $t({...e}){return(0,U.jsx)(m,{"data-slot":`dropdown-menu`,...e})}function en({...e}){return(0,U.jsx)(d,{"data-slot":`dropdown-menu-trigger`,...e})}function tn({align:e=`start`,alignOffset:t=0,side:n=`bottom`,sideOffset:r=4,className:i,...a}){return(0,U.jsx)(b,{children:(0,U.jsx)(g,{className:`isolate z-50 outline-none`,align:e,alignOffset:t,side:n,sideOffset:r,children:(0,U.jsx)(w,{"data-slot":`dropdown-menu-content`,className:M(`z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,i),...a})})})}function W({className:e,inset:t,variant:n=`default`,...r}){return(0,U.jsx)(u,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:M(`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 nn({className:e,children:t,checked:n,inset:r,...i}){return(0,U.jsxs)(p,{"data-slot":`dropdown-menu-checkbox-item`,"data-inset":r,className:M(`relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),checked:n,...i,children:[(0,U.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex items-center justify-center`,"data-slot":`dropdown-menu-checkbox-item-indicator`,children:(0,U.jsx)(S,{children:(0,U.jsx)(Ot,{})})}),t]})}function rn({className:e,...t}){return(0,U.jsx)(y,{"data-slot":`dropdown-menu-separator`,className:M(`-mx-1 my-1 h-px bg-border`,e),...t})}function an({className:e,type:t,...n}){return(0,U.jsx)(v,{type:t,"data-slot":`input`,className:M(`h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,e),...n})}var on=E(`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 sn({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,U.jsx)(_,{"data-slot":`toggle`,className:M(on({variant:t,size:n,className:e})),...r})}var cn={light:``,dark:`.dark`},ln={width:320,height:200},un=H.createContext(null);function dn({id:e,className:n,children:r,config:i,initialDimension:a=ln,...o}){let s=H.useId(),c=`chart-${e??s.replace(/:/g,``)}`;return(0,U.jsx)(un.Provider,{value:{config:i},children:(0,U.jsxs)(`div`,{"data-slot":`chart`,"data-chart":c,className:M(`flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden`,n),...o,children:[(0,U.jsx)(fn,{id:c,config:i}),(0,U.jsx)(t,{initialDimension:a,children:r})]})})}var fn=({id:e,config:t})=>{let n=Object.entries(t).filter(([,e])=>e.theme??e.color);return n.length?(0,U.jsx)(`style`,{dangerouslySetInnerHTML:{__html:Object.entries(cn).map(([t,r])=>`
2
- ${r} [data-chart=${e}] {
3
- ${n.map(([e,n])=>{let r=n.theme?.[t]??n.color;return r?` --color-${e}: ${r};`:null}).join(`
4
- `)}
5
- }
6
- `).join(`
7
- `)}}):null};async function pn(e){if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e);return}catch{}let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t);try{if(t.select(),!document.execCommand(`copy`))throw Error(`copy unavailable`)}finally{t.remove()}}var mn=`(prefers-reduced-motion: reduce)`;function hn(e){if(typeof window>`u`||!window.matchMedia)return()=>{};let t=window.matchMedia(mn);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function gn(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(mn).matches}function _n(){return(0,H.useSyncExternalStore)(hn,gn,()=>!1)}var vn={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)`},yn=`var(--color-popover-foreground)`,bn={background:`var(--color-popover)`,border:`1px solid var(--color-border)`,borderRadius:6,color:yn,fontSize:12,padding:`6px 10px`},xn={contentStyle:bn,labelStyle:{color:yn,fontWeight:600},itemStyle:{color:yn}};function Sn(e,t){return[e,...t].map(e=>e.join(` `)).join(`
8
- `)}function Cn({caption:e,columns:t,rows:n,align:r}){let[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(!1);async function c(){try{await pn(Sn(t,n)),s(!0),setTimeout(()=>s(!1),1500)}catch{}}return(0,U.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,U.jsx)(`button`,{type:`button`,className:`cursor-pointer text-muted-foreground text-xs underline`,"aria-expanded":i,onClick:()=>a(e=>!e),children:`▤ Table`}),(0,U.jsx)(`button`,{type:`button`,className:`cursor-pointer text-muted-foreground text-xs underline`,onClick:c,children:`⧉ Copy`}),(0,U.jsx)(`span`,{"aria-live":`polite`,className:`text-xs text-muted-foreground`,children:o?`Copied`:``})]}),(0,U.jsxs)(je,{className:i?void 0:`sr-only`,children:[(0,U.jsx)(be,{className:`sr-only`,children:e}),(0,U.jsx)(Fe,{children:(0,U.jsx)(Le,{children:t.map((e,t)=>(0,U.jsx)(Te,{className:r?.[t]===`right`?`text-right`:void 0,children:e},e))})}),(0,U.jsx)(Et,{children:n.map((e,t)=>(0,U.jsx)(Le,{children:e.map((e,t)=>(0,U.jsx)(Ie,{className:r?.[t]===`right`?`text-right`:void 0,children:e},t))},t))})]})]})}var wn=new Set([l,s,i,a,o,c,r]);function Tn(e){if(!(0,H.isValidElement)(e))return e;let{children:t,isAnimationActive:n}=e.props,r=t==null?t:H.Children.map(t,Tn),i=wn.has(e.type)&&n===void 0;return!i&&r===t?e:(0,H.cloneElement)(e,i?{isAnimationActive:!1}:{},...t==null?[]:[r])}function En({title:e,ariaLabel:t,height:n,children:r,table:i}){let a=_n()?Tn(r):r,o=le();return(0,U.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[e?(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs font-medium`,children:e}):null,o?(0,U.jsx)(dn,{role:`img`,"aria-label":t,config:{},className:`aspect-auto w-full`,style:{height:n},initialDimension:{width:320,height:n},children:a}):(0,U.jsx)(`div`,{style:{height:n},"aria-hidden":!0}),i?(0,U.jsx)(Cn,{...i}):null]})}function Dn(e){let t=(0,H.useId)(),[n,r]=(0,H.useState)(!1);return e?{tooltipProps:{title:e,"aria-describedby":t,onFocus:()=>r(!0),onBlur:()=>r(!1)},srOnlyTooltip:(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{id:t,className:`sr-only`,children:e}),n?(0,U.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`visible-tooltip`,className:`pointer-events-none absolute top-full left-0 z-50 mt-1 max-w-xs rounded-md border border-border bg-foreground px-2 py-1 text-xs font-normal whitespace-normal text-background shadow-md`,children:e}):null]})}:{tooltipProps:{},srOnlyTooltip:null}}function On({confidence:e,validationRequired:t,evidenceKey:n}){let{tooltipProps:r,srOnlyTooltip:i}=Dn(t),{revealEvidence:a}=Xt(),o=!!e&&e!==`high`,s=!!n;return!o&&!s?null:(0,U.jsxs)(`span`,{className:`relative inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-full border border-border bg-muted/60 px-2.5 text-xs font-medium text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring/50`,tabIndex:o?0:void 0,...o?r:{},children:[o?(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`inline-block size-2 shrink-0 rounded-full border border-dashed border-current`}):null,o?`${e} confidence`:null,o?i:null,o&&s?(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`opacity-60`,children:`·`}):null,s?(0,U.jsx)(`button`,{type:`button`,"aria-label":`Evidence: ${Gt(n)}`,className:`tap-target-comfortable tap-target-comfortable--sm inline-flex min-h-[22px] cursor-pointer items-center rounded-sm text-primary outline-none hover:underline underline-offset-2 focus-visible:ring-2 focus-visible:ring-ring/50`,onClick:()=>a(n),children:Gt(n)}):null]})}function kn(e,t){return e.filter(e=>e.type===t)}function An(e){return`stageIds`in e?e.stageIds:void 0}function jn({title:e,children:t,defaultOpen:n=!1}){let[r,i]=(0,H.useState)(n);return(0,U.jsxs)(pe,{open:r,onOpenChange:i,className:`space-y-2`,children:[(0,U.jsxs)(ee,{"aria-expanded":String(r),className:`tap-target-comfortable tap-target-comfortable--sm flex cursor-pointer items-center gap-2 bg-transparent text-left`,children:[(0,U.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}),r?(0,U.jsx)(ae,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,U.jsx)(re,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]}),(0,U.jsx)(oe,{keepMounted:!0,children:t})]})}function Mn({title:e,rows:t,children:n,collapsible:r=!1,defaultOpen:i=!1}){let a=t.filter(e=>!!e);if(a.length===0&&!n)return null;let o=(0,U.jsx)(`div`,{className:`grid min-w-0 grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-sm`,children:a.map(([e,t],n)=>(0,U.jsxs)(H.Fragment,{children:[(0,U.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,U.jsx)(`span`,{className:`break-words`,children:t})]},n))});return r&&e?(0,U.jsx)(jn,{title:e,defaultOpen:i,children:(0,U.jsxs)(`div`,{className:`space-y-2`,children:[o,n]})}):(0,U.jsxs)(`section`,{className:`space-y-2`,children:[e?(0,U.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}):null,o,n]})}function Nn(e){return String(e).replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}function Pn(e,{title:t=`plan`}={}){if(!e)return``;let n=[`digraph "${Nn(t)}" {`,` rankdir=BT;`,` node [shape=box];`],r=new WeakMap,i=[],a=0;return Ge(e,(e,t)=>{let o=`n${a++}`;r.set(e,o);let s=e.detail&&e.detail!==e.name?`${e.name}\\n${e.detail}`:e.name;n.push(` ${o} [label="${Nn(s)}"];`),t&&i.push(` ${r.get(t)} -> ${o};`)},{dedupe:!0}),[...n,...i,`}`].join(`
9
- `)}var Fn=`Derived from best-effort plan-text parsing: cross-check against the Summary tab before acting.`,In=`Derived from best-effort plan-text parsing: cross-check against the Tree tab before acting.`,Ln=`Derived from best-effort plan-text parsing: cross-check against the Tree tab or View plan graph before acting.`;function Rn(e){try{return xt(e)}catch{return null}}function zn(e){try{return Ye(e)}catch{return null}}function Bn(e,t){try{return Pn(e,{title:`stage-${t}`})||null}catch{return null}}function Vn(e,t,n,r){if(!n||r==null)return null;try{return Qe(e,t,n,r)}catch{return null}}function Hn(e,t){let n=t.stages.get(e);return(n?.sqlExecutionId==null?null:t.sql.get(n.sqlExecutionId))?.planTree??null}function Un(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 Wn({rows:e}){let[t,n]=(0,H.useState)(!1);return(0,U.jsxs)(`details`,{className:`pt-1 pl-4`,onToggle:e=>n(e.currentTarget.open),children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-xs text-muted-foreground`,children:`full detail`}),t?(0,U.jsx)(`div`,{className:`pt-1`,children:(0,U.jsx)(Mn,{rows:e})}):null]})}function Gn({node:e,depth:t,durationMap:n}){let r=(0,H.useRef)(null),[i,a]=(0,H.useState)(t<=1);(0,H.useEffect)(()=>{r.current&&(r.current.open=t<=1)},[]);let o=pt(e.name),s=e.detail??``,c=Rn(e),l=c?Un(c):[],u=l.some(Boolean),d=c?.kind===`scan`?``:et(e.name,s),f=e.exchangeRole===`read`?e.children[0]:void 0,p=n?.get(f??e),m=(f??e).metrics??[],h=m.length>0?nt(m):``,g=(f??e).children??[],_=g.length>0||m.length>0||u;return(0,U.jsxs)(`details`,{ref:r,"data-op":o,className:`rounded-md`,onToggle:e=>a(e.currentTarget.open),children:[(0,U.jsxs)(`summary`,{className:`flex list-none flex-wrap items-center gap-2 rounded-md px-1.5 py-1 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden ${_?`cursor-pointer hover:bg-muted`:`cursor-default`}`,children:[_?(0,U.jsx)(At,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-muted-foreground transition-transform ${i?`rotate-90`:``}`}):(0,U.jsx)(`span`,{className:`size-3.5 shrink-0`}),(0,U.jsx)(`span`,{className:`font-medium`,children:e.name}),d?(0,U.jsx)(`span`,{title:s,className:`text-xs text-muted-foreground`,children:d}):null,c?.warning?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(z,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:Me}),(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:c.warning.detail}),(0,U.jsx)(fe,{children:(0,U.jsx)(On,{confidence:`low`})})]}):null,p!=null&&p>0?(0,U.jsxs)(`span`,{title:`Approximate wall-time attributed to this operator`,className:`text-xs text-muted-foreground`,children:[`~`,I(p)]}):null,h?(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:h}):null]}),m.length>0?(0,U.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1 pt-1 pl-6 text-xs text-muted-foreground`,children:m.map((e,t)=>(0,U.jsxs)(`span`,{children:[e.name,`: `,st(e)]},t))}):null,u?(0,U.jsx)(Wn,{rows:l}):null,g.length>0?(0,U.jsx)(`div`,{className:`ml-[7px] space-y-1 border-l border-border/60 pt-1 pl-3.5`,children:g.map((e,r)=>(0,U.jsx)(Gn,{node:e,depth:t+1,durationMap:n},r))}):null]})}function Kn(e){return`${e.path||`(unknown path)`} (${e.format})`}function qn(e){let t=e.leftKeys.length||e.rightKeys.length?` on ${e.leftKeys.join(`, `)||`(none)`} / ${e.rightKeys.join(`, `)||`(none)`}`:``;return`${e.joinType}${t}`}function Jn(e){let t=e.aggregations.join(`, `)||`(none)`;return e.groupByKeys.length?`${t} by ${e.groupByKeys.join(`, `)}`:t}function Yn(e){let t=new Map;for(let n of e)t.set(n.partitioning,(t.get(n.partitioning)??0)+1);return[...t.entries()].map(([e,t])=>`${e}×${t}`).join(`, `)}function Xn({summary:e,hasPlanGraph:t}){let{scans:n,joins:r,aggs:i,exchanges:a,warnings:o}=e,s=a.length>=4,c=s||o.length>0,l=t?Ln:In;return(0,U.jsx)(Mn,{rows:[n.length>0&&[`Sources (${n.length})`,n.map(Kn).join(`, `)],r.length>0&&[`Joins (${r.length})`,r.map(qn).join(`; `)],i.length>0&&[`Aggregations (${i.length})`,i.map(Jn).join(`; `)],a.length>0&&[`Exchanges (${a.length})`,(0,U.jsxs)(U.Fragment,{children:[Yn(a),s?(0,U.jsxs)(U.Fragment,{children:[` `,(0,U.jsx)(`span`,{className:`text-muted-foreground`,children:`— consider whether some joins/aggregations could share a partitioning scheme to avoid redundant shuffles.`}),` `,(0,U.jsx)(fe,{children:(0,U.jsx)(On,{confidence:`low`})})]}):null]})],o.length>0&&[`Warnings (${o.length})`,(0,U.jsxs)(`span`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,U.jsx)(z,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:`bg-plan-aggregate/8 text-plan-aggregate`}),o.map(e=>e.detail).join(`; `),(0,U.jsx)(fe,{children:(0,U.jsx)(On,{confidence:`low`})})]})]],children:c?(0,U.jsx)(fe,{children:(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l})}):null})}function Zn({stageId:e,appModel:t}){let n=B(e=>e.openPlanGraph),r=Hn(e,t);if(!r)return null;let i=t.stages.get(e),a=Vn(r,t,i?.sqlExecutionId==null?null:t.sql.get(i.sqlExecutionId),i?.sqlExecutionId),o=zn(r),s=Bn(r,e);return(0,U.jsxs)(zt,{defaultValue:`tree`,children:[(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,U.jsxs)(Vt,{"aria-label":`Plan view`,children:[(0,U.jsx)(Ht,{value:`tree`,children:`Tree`}),(0,U.jsx)(Ht,{value:`summary`,children:`Summary`})]}),(0,U.jsx)(`div`,{className:`flex gap-2`,children:s?(0,U.jsx)(V,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>n(e),children:`View plan graph`}):null})]}),(0,U.jsx)(Ut,{value:`tree`,children:(0,U.jsxs)(`div`,{className:`space-y-2 pt-3`,children:[(0,U.jsx)(Gn,{node:r,depth:0,durationMap:a}),(0,U.jsx)(fe,{children:(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Showing initial (pre-AQE) plan. Metrics reflect operators as planned; adaptive optimizations may have rewritten the actual execution.`})}),o&&o.warnings.length>0?(0,U.jsx)(fe,{children:(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:Fn})}):null]})}),(0,U.jsx)(Ut,{value:`summary`,children:(0,U.jsx)(`div`,{className:`pt-3`,children:o?(0,U.jsx)(Xn,{summary:o,hasPlanGraph:s!=null}):(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Plan summary couldn’t be parsed.`})})})]})}var Qn=`0.1.0`;function $n(e,t,n,r,i,a){return G({schemaVersion:3,provenance:a,app:e.app,stages:[...e.stages.values()],jobs:[...e.jobs.values()],sql:[...e.sql.values()],executors:e.executors,runAggregates:e.runAggregates,evidenceAvailability:e.evidenceAvailability,catalog:t,configFindings:n,skippedLines:r,interpretation:i})}var er=`__sparkforensicsMap`,tr=`__sparkforensicsSet`;function G(e){return e instanceof Map?{[er]:[...e].map(([e,t])=>[G(e),G(t)])}:e instanceof Set?{[tr]:[...e].map(G)}:Array.isArray(e)?e.map(G):e&&typeof e==`object`?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,G(t)])):e}function nr(e){if(Array.isArray(e))return e.map(nr);if(e&&typeof e==`object`){let t=e;return Array.isArray(t[er])?new Map(t[er].map(([e,t])=>[nr(e),nr(t)])):Array.isArray(t[tr])?new Set(t[tr].map(nr)):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,nr(t)]))}return e}var rr=[/\bip(?:-\d{1,3}){4}(?:\.[a-z0-9][a-z0-9-]*)*/gi,/\b(?:\d{1,3}\.){3}\d{1,3}\b/g],ir=[/\bapplication_\d{10,}_\d+\b/g];function ar(e,t){if(typeof e==`string`){for(let{patterns:n,out:r}of t)for(let t of n){let n=e.match(t);if(n)for(let e of n)r.add(e)}return}if(Array.isArray(e)){for(let n of e)ar(n,t);return}if(e&&typeof e==`object`)for(let n of Object.values(e))ar(n,t)}function K(e,t){if(Array.isArray(e)){for(let n of e)K(n,t);return}if(e&&typeof e==`object`)for(let[n,r]of Object.entries(e))n===`host`&&typeof r==`string`&&r.length>0?t.add(r):K(r,t)}function or(e){if(Array.isArray(e))return e.map(e=>or(e));if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=n===`failureGroups`&&Array.isArray(r)?r.map(e=>e&&typeof e==`object`?qe(e):e):or(r);return t}return e}var sr=new Set([`stageFailureReason`,`exception`,`failureReason`]);function cr(e){if(Array.isArray(e))return e.map(e=>cr(e));if(e&&typeof e==`object`){let t=e.type===`stageFailed`,n={};for(let[r,i]of Object.entries(e))n[r]=(sr.has(r)||t&&r===`valueText`)&&typeof i==`string`?dt:cr(i);return n}return e}function lr(e){return cr(or(e))}function ur(e,t){if(e)for(let[n,r]of Object.entries(e)){let e=n.slice(n.lastIndexOf(`.`)+1).toLowerCase();(e===`host`||e===`hostname`)&&r&&t.add(r)}}function dr(e){let t=new Set,n=new Set,r=e?.summary?.app?.id;return typeof r==`string`&&r.length>0&&t.add(r),K(e?.findings,n),ar(e,[{patterns:rr,out:n},{patterns:ir,out:t}]),{appIds:t,hosts:n}}function fr(e,t){let n=new Map;return[...e].sort((e,t)=>e.localeCompare(t,`en`,{numeric:!0})).forEach((e,r)=>n.set(e,`${t}-${r+1}`)),n}function pr(e,t){if(typeof e==`string`){let n=e;for(let[e,r]of t)n=n.split(e).join(r);return n}if(Array.isArray(e))return e.map(e=>pr(e,t));if(e&&typeof e==`object`){let n={};for(let[r,i]of Object.entries(e))n[r]=pr(i,t);return n}return e}function mr(e,t){let n=[...t.appIds?fr(t.appIds,`app`):[],...fr(t.hosts,`host`)];return n.sort((e,t)=>t[0].length-e[0].length),pr(e,n)}function hr(e){return e.name==null?e:{...e,name:e.id??null}}function gr(e){let t=lr(e),{appIds:n,hosts:r}=dr(t),i=mr(t,{appIds:n,hosts:r}),a=i.summary?.app;return a?{...i,summary:{...i.summary,app:hr(a)}}:i}function _r(e){let t=lr(e),n=new Set,r=new Set,i=t.app?.id;typeof i==`string`&&i.length>0&&n.add(i),K(t.executors.added,r),K(t.executors.removed,r),K(t.catalog,r),K(t.configFindings,r),ur(t.app?.config,r),ar(t,[{patterns:rr,out:r},{patterns:ir,out:n}]);let a=mr(t,{appIds:n,hosts:r});if(!a.app)return a;let o=hr(a.app);return o.config?.[`spark.app.name`]==null?{...a,app:o}:{...a,app:{...o,config:{...o.config,"spark.app.name":o.id??``}}}}function vr(e,t,n){let r=nr(_r(G({app:e.app,stages:[...e.stages.values()],jobs:[...e.jobs.values()],sql:[...e.sql.values()],executors:e.executors,runAggregates:e.runAggregates,evidenceAvailability:e.evidenceAvailability,catalog:t,configFindings:n}))),i=e=>new Map(e.map(e=>[e.id,e]));return{appModel:{app:r.app,stages:i(r.stages),jobs:i(r.jobs),sql:i(r.sql),executors:r.executors,runAggregates:r.runAggregates,evidenceAvailability:r.evidenceAvailability,skippedLines:e.skippedLines,unreadableSqlExecutions:e.unreadableSqlExecutions},catalog:r.catalog,configFindings:r.configFindings}}var yr=String.raw`(?:\`(?:[^\`]|\`\`)*\`|[A-Za-z0-9_$]+)`,br=RegExp(`^${yr}(?:\\.${yr})*$`),xr=new RegExp(yr,`g`),Sr=/\.\.\.(?:\s*\d+ more fields)?/;function Cr(e){let t=[],n=0,r=!1,i=0;for(let a=0;a<e.length;a++){let o=e[a];if(o==="`")r=!r;else if(r)continue;else o===`(`||o===`[`||o===`{`?n++:o===`)`||o===`]`||o===`}`?n--:o===`,`&&n===0&&(t.push({text:e.slice(i,a).trim(),terminated:!0}),i=a+1)}return t.push({text:e.slice(i).trim(),terminated:!1}),t}function q(e){return e===``||Sr.test(e)}function wr(e){return br.test(e)?(e.match(xr)??[]).map(e=>{if(!e.startsWith("`"))return e;let t=e.slice(1,-1).replace(/``/g,"`");return/[.`]/.test(t)?e:t}).join(`.`):null}var Tr=/((?:[A-Za-z][A-Za-z0-9+.-]*:\/{1,3}|\/)[^\s,[\]()#]+?)\/_delta_log(?=[/[\],\s)]|$)/g;function Er(e){let t=new Set,n=!1;for(let r of e){if(!r.planTree){n=!0;continue}Ge(r.planTree,e=>{for(let r of[e.name,e.detail??``]){let e=r.split(`/_delta_log`).length-1;if(e===0)continue;let i=[...r.matchAll(Tr)];i.length<e&&(n=!0);for(let e of i)q(e[1])?n=!0:t.add(e[1].replace(/\/+$/,``))}},{dedupe:!0})}return{paths:t,unreliable:n}}function Dr(e){let{paths:t,unreliable:n}=Er(e),[r]=t;return!n&&t.size===1?{kind:`path`,target:r}:null}var Or=`DeltaMerge`,kr=/^(?:Delta: )?MERGE operation\b/,Ar=/\b(?:re)?writing\b/i;function jr(e){let t=t=>t!==void 0&&/^Execute\s+MergeIntoCommand\b/.test(e.get(t)?.planTree?.name??``);return[...e.values()].filter(e=>kr.test(e.description??``)&&!t(e.rootExecutionId)).sort((e,t)=>e.id-t.id)}function Mr(e){let t=[];for(let n of e){let e=t[t.length-1];e&&e.members[e.members.length-1].id+1===n.id?e.members.push(n):t.push({members:[n],unclean:null})}let n=t.map(({members:e})=>{let t=e.map(e=>e.startTime);return t.every(e=>typeof e==`number`)?[Math.min(...t),Math.max(...t)]:null});return t.forEach((e,t)=>{let r=n[t];if(r===null){e.unclean=`start time missing`;return}n.some((e,n)=>n!==t&&e!==null&&e[0]<=r[1]&&r[0]<=e[1])?e.unclean=`overlaps another merge in time`:e.members.some(e=>Ar.test(e.description??``))||(e.unclean=`no write phase`)}),t}function Nr(e){return Mr(jr(e)).map(e=>{let t=e.members[0].id,n=e.members[e.members.length-1].id,r=e.unclean===null?Dr(e.members):null,i=t===n?`${t}`:`${t}-${n}`;return{sqlExecutionId:t,nodeId:null,command:Or,recognized:!0,kind:r?.kind??null,target:r?.target??null,outputRows:null,raw:`Delta MERGE operation, executions ${i}${e.unclean?` (${e.unclean})`:``}`}})}var Pr=[`MergeIntoCommand`,`UpdateCommand`,`DeleteCommand`,`WriteIntoDelta`,`WriteIntoDeltaCommand`,`SaveIntoDataSourceCommand`];function Fr(e){return Pr.includes(e)}function Ir(e){let t=new Map;for(let n of e.values()){if(n.rootExecutionId===void 0||n.rootExecutionId===n.id)continue;let e=t.get(n.rootExecutionId);e?e.push(n):t.set(n.rootExecutionId,[n])}return t}function Lr(e,t){let n=e.commandArguments,r=`${t}\nArguments: `;return n!==void 0&&n.startsWith(r)?n.slice(r.length):null}var Rr=/^`[^`]+`(?:\.`[^`]+`){1,2}$/;function zr(e){let t=Cr(e).filter(e=>Rr.test(e.text));if(t.length!==1||!t[0].terminated)return null;let n=wr(t[0].text);if(!n||q(n))return null;let r=n.split(`.`);return{kind:`table`,target:r.length===3&&r[0]===`spark_catalog`?r.slice(1).join(`.`):n}}function Br(e){let t=Cr(e)[1];if(!t?.terminated||!/^\[[\s\S]*\]$/.test(t.text))return null;let n=t.text.slice(1,-1),r=[...n.matchAll(/(?:^|, )([A-Za-z0-9_.-]+)=/g)],i=r.flatMap((e,t)=>e[1].toLowerCase()===`path`?[n.slice(e.index+e[0].length,t+1<r.length?r[t+1].index:n.length)]:[]);return i.length!==1||q(i[0])||/\*{5,}\(redacted\)/.test(i[0])?null:{kind:`path`,target:i[0]}}var Vr={fromArguments:zr,scansTarget:!1},Hr={...Vr,scansTarget:!0},Ur={MergeIntoCommand:Hr,UpdateCommand:Hr,DeleteCommand:Hr,WriteIntoDelta:Vr,WriteIntoDeltaCommand:Vr,SaveIntoDataSourceCommand:{fromArguments:e=>e.includes(`DeltaDataSource`)?Br(e):null,scansTarget:!1}};function Wr(e,t,n,r){if(!Fr(e)||n!==t.planTree)return null;let i=Ur[e],a=Lr(t,e),o=a===null?null:i.fromArguments(a);return o||!i.scansTarget?o:t.rootExecutionId===t.id?Dr(r.get(t.id)??[]):null}var Gr=/^\w+ DeltaTableV2\([^,\s]*,([^,\n]*),(?:Some\(CatalogTable\(\n(?:Catalog: (\S+)\n)?Database: (\S+)\nTable: (\S+)\n|None,)/,Kr=/^[A-Za-z0-9_$]+$/;function qr(e){let t=Gr.exec(e);if(!t)return null;let[,n,r,i,a]=t;if(a===void 0)return n&&!q(n)?{kind:`path`,target:n}:null;if(![i,a,r??`spark_catalog`].every(e=>Kr.test(e)))return null;let o=`${i}.${a}`;return{kind:`table`,target:r===void 0||r===`spark_catalog`?o:`${r}.${o}`}}function Jr(e){return(e.command===`AppendDataExecV1`||e.command===`OverwriteByExpressionExecV1`)&&/^\w+ \S*DeltaCatalog\$StagedDeltaTableV2@/.test(e.raw)}var Yr=new Set([`Write`,`Insert`,`Save`,`Overwrite`,`Append`,`Merge`,`Update`,`Delete`,`Truncate`,`Replace`,`Drop`,`Load`,`Vacuum`,`Convert`,`Clone`,`Restore`,`Optimize`,`Alter`,`Reorg`,`Rename`,`Call`]),Xr=[`TableAsSelect`,`AddPartition`,`DropPartition`,`RenamePartition`,`RecoverPartitions`],Zr=new Set([`WriteFiles`,`AppendColumns`,`AppendColumnsWithObject`,`MergeRows`,`StateStoreSave`,`StateStoreRestore`,`SessionWindowStateStoreSave`,`SessionWindowStateStoreRestore`,`UpdateEventTimeWatermarkColumn`]);function Qr(e){return e.replace(/^Execute\s+/,``).trim().replace(/Exec$/,``)}function $r(e){if(mi(e))return!0;let t=e.split(/\s/,1)[0];return Zr.has(t)||t.includes(`Join`)?!1:Xr.some(e=>t.includes(e))?!0:(t.match(/[A-Z][a-z0-9]*/g)??[]).some(e=>Yr.has(e))}function ei(e,t){let n=/^(?:Execute\s+)?(\S+)\s*([\s\S]*)$/.exec(e.trim());return!n||Qr(n[1])!==t?``:n[2]}function ti(e){let[t,n,r]=e,i=n&&/^(Map\(.*\)|\[.*\])$/s.test(n.text)&&n.terminated?r:n;return!t?.terminated||q(t.text)||!i||!/^(true|false)$/.test(i.text)?null:{kind:`path`,target:t.text}}function ni(e){let t=e[0];if(!t)return null;let n=/^\[Database: ([^,\]]+), TableName: ([^,\]]+)[,\]]/.exec(t.text);if(n&&/\]$/.test(t.text)){let e=wr(`${n[1].trim()}.${n[2].trim()}`);return e&&!q(e)?{kind:`table`,target:e}:null}if(!t.terminated||q(t.text))return null;let r=wr(t.text);return r?{kind:`table`,target:r}:null}function ri(e){let t=/^Map\(([\s\S]*)\)$/.exec(e);if(!t)return null;let n=t[1],r=[...n.matchAll(/(?:^|, )([A-Za-z0-9_.\-]+) -> /g)],i=new Map;return r.forEach((e,t)=>{let a=e.index+e[0].length,o=t+1<r.length?r[t+1].index:n.length;i.set(e[1].toLowerCase(),n.slice(a,o))}),i}function ii(e){let[,t,n]=e;if(!t?.terminated||!n||n.text===``)return null;let r=ri(t.text);if(!r)return null;let i=r.get(`path`),a=r.get(`dbtable`)??r.get(`table`);if(i===void 0==(a===void 0))return null;let o=i??a;return q(o)||/\*{5,}\(redacted\)/.test(o)?null:i===void 0?{kind:`jdbcTable`,target:o}:{kind:`path`,target:o}}function ai(e,t,n){let r=new Set;for(let i of e.matchAll(t))r.add(i[2]===void 0||q(i[1])?null:n(i[1]));let[i]=r;return r.size===1?i:null}function oi(e){return e?{kind:(e.match(xr)?.length??0)>=3?`table`:`unqualifiedTable`,target:e}:null}function si(e){return oi(ai(e,/\b\w*Write\(table=([^,()\s]*)([,)])?/g,wr))}function ci(e){let[t,n]=e;return!t?.terminated||!/^[\w.$]+@[0-9a-f]+$/.test(t.text)||!n?.terminated||q(n.text)?null:oi(wr(n.text))}function li(e){let[t]=e,n=t?.terminated?/^delta\.`([^`]*)`$/.exec(t.text):null;return n&&!q(n[1])?{kind:`path`,target:n[1]}:null}var ui=new Set([`AppendData`,`OverwriteByExpression`,`OverwritePartitionsDynamic`,`ReplaceData`,`WriteDelta`,`WriteToDataSourceV2`,`AppendDataExecV1`,`OverwriteByExpressionExecV1`]),di=new Set([`CreateTableAsSelect`,`AtomicCreateTableAsSelect`,`ReplaceTableAsSelect`,`AtomicReplaceTableAsSelect`]),fi=new Set([`WriteIntoDelta`,`WriteIntoDeltaCommand`,`MergeIntoCommand`,`UpdateCommand`,`DeleteCommand`,`CreateDeltaTableCommand`,`OptimizeTableCommand`,`RestoreTableCommand`,`DeltaReorgTableCommand`]),pi={InsertIntoHadoopFsRelationCommand:ti,InsertIntoHiveTable:ni,CreateHiveTableAsSelectCommand:ni,OptimizedCreateHiveTableAsSelectCommand:ni,CreateDataSourceTableAsSelectCommand:ni,SaveIntoDataSourceCommand:ii};function mi(e){return e in pi||ui.has(e)||di.has(e)||fi.has(e)}function hi(e,t){let n=pi[e];return n?[!0,n(Cr(ei(t,e)))]:ui.has(e)?[!0,qr(t)??si(t)]:di.has(e)?[!0,ci(Cr(ei(t,e)))]:e===`MergeIntoCommand`?[!0,null]:fi.has(e)?[!0,li(Cr(ei(t,e)))]:[!1,null]}function gi(e){let t=e.metrics?.find(e=>e.name===`number of output rows`);return t!==void 0&&Number.isFinite(t.value)?t.value:null}function _i(e,t,n,r){Ge(t,t=>{let i=Qr(t.name);if(!$r(i))return;let a=t.detail??``,[o,s]=hi(i,a),c=s??Wr(i,e,t,n);r.push({sqlExecutionId:e.id,nodeId:t.id??null,command:i,recognized:o,kind:c?.kind??null,target:c?.target??null,outputRows:gi(t),raw:a===``?t.name:a})},{dedupe:!0})}function vi(e,t){for(let n of e){if(n.target!==null||!Jr(n))continue;let r=t.get(n.sqlExecutionId)?.rootExecutionId;if(r===void 0||r===n.sqlExecutionId)continue;let i=e.filter(e=>e.sqlExecutionId===r&&di.has(e.command));i.length===1&&i[0].target!==null&&(n.kind=i[0].kind,n.target=i[0].target)}}function yi(e,t={}){let n=[],r=new Map;for(let n of t.unreadableSqlExecutions??[])e.get(n)?.planTree||r.set(n,`unreadableStart`);let i=Ir(e);for(let t of[...e.keys()].sort((e,t)=>e-t)){let a=e.get(t);a.planTree?_i(a,a.planTree,i,n):r.set(t,r.get(t)??`noPlan`)}return vi(n,e),n.push(...Nr(e)),n.sort((e,t)=>e.sqlExecutionId-t.sqlExecutionId),{writes:n,executionsWithoutPlan:[...r].sort((e,t)=>e[0]-t[0]).map(([e,t])=>({sqlExecutionId:e,reason:t})),skippedLines:t.skippedLines??null}}var bi={skew:[`origin`],stageShape:[`rule`],shuffle:[`partitions`],partitionSizing:[`rule`,`origin`,`partitions`],spill:[`spillMagnitude`,`reads`],gc:[`direction`],slowHost:[`variant`,`host`,`hostTaskShare`,`hostMeanMs`,`dimension`,`executorId`,`execMaxValue`],stageSlowness:[`reads`],stageFailed:[`variant`,`numTasks`,`memoryBytesSpilled`,`failedTaskDetails`],failures:[`failedTasks`,`dominantReason`,`dominantError`,`failureGroups`,`otherFailedTasks`],straggler:[`unit`,`speculativeTasks`,`stragglerCount`,`origin`],speculationWaste:[],retryWaste:[`numTasks`,`memoryBytesSpilled`,`retriedTaskDetails`],tinyTask:[`reads`],incompleteRun:[],coldStart:[`dynamicAllocation`],utilization:[`cpuUtilizationPct`],memoryUtilization:[`variant`,`rule`,`executorId`,`heap`,`dataUnavailable`],cacheUtilization:[`variant`,`rddId`,`rddName`,`memorySize`,`diskSize`,`numCachedPartitions`,`numPartitions`,`dataUnavailable`],coreLocality:[`nonLocalTaskCount`],autoscalingChurn:[`shortLivedExecutorCount`,`dynamicAllocation`],cachingOpportunity:[`variant`,`relation`,`format`,`relations`,`operator`,`executionIds`,`totalReadBytes`],jobFailureRate:[`failedJobs`,`totalJobs`,`failedTasks`,`totalTasks`,`avgJobDurationMs`,`taskFailureRate`],configAudit:[`property`],duplicatePlanSubtree:[`executionId`,`stageIds`,`stageShares`,`occurrencesIdentical`,`rootName`,`subtreeSize`,`sampleRelation`,`groupIndex`],smallFiles:[`executionId`,`stageIds`,`fileCount`,`direction`,`nodeName`],underBroadcast:[`executionId`,`stageIds`,`largerSideBytes`,`broadcastThreshold`],overBroadcast:[`executionId`,`stageIds`,`broadcastThreshold`]};function xi(e){let t=e,n={};for(let r of[...bi[e.type]].sort())t[r]!==void 0&&(n[r]=t[r]);return n}function Si(e){let t={id:e.id??null,type:e.type,name:Je(Ke(e.type)),tag:se(e.type),impactBand:e.impactBand,stageId:e.stageId??null,metric:e.metric??null,value:e.value??null,...e.valueText==null?{}:{valueText:e.valueText},recommendation:e.recommendation??null,detectorVersion:e.detectorVersion??1,evidence:xi(e),remediation:e.remediation??[],actionLabel:_t(e)};e.confidence!=null&&(t.confidence=e.confidence),e.validationRequired!=null&&(t.validationRequired=e.validationRequired),e.docAnchor!=null&&(t.docAnchor=e.docAnchor),e.impactEstimate!=null&&(t.impactEstimate=e.impactEstimate);let n=ot(e.impactEstimate);return n&&(t.impact=n.text,t.impactMeaning=n.meaning),e.tunedThresholds!=null&&(t.tunedThresholds=e.tunedThresholds),t}function Ci(e){return[...e].sort((e,t)=>{let n=(N[e.impactBand]??9)-(N[t.impactBand]??9);if(n!==0)return n;if(e.type!==t.type)return e.type<t.type?-1:1;let r=e.stageId??-1,i=t.stageId??-1;return r===i?(e.id??``)<(t.id??``)?-1:+((e.id??``)>(t.id??``)):r-i})}function wi(e,t){let n=e.filter(A);return k(n,t).map(e=>{let t=D(e.findings),n=t[0],r=t.map(e=>e.id).filter(e=>e!=null),i={type:e.type,tag:se(e.type),actionLabel:_t(n),findingCount:e.findingCount,findingIds:r};if(e.kind===`time`)return{...i,kind:`time`,stageCount:e.stageCount,recoverableMsHigh:e.recoverableMsHigh,impact:ue(e.recoverableMsHigh,e.recoverableMsHigh),impactMeaning:`of run time`};if(e.kind===`resource`){let t=O(e);return{...i,kind:`resource`,unit:e.unit,total:e.total,impact:t,impactMeaning:t?$e(n.impactEstimate?.rawWaste):null}}return{...i,kind:`count`,byImpactBand:e.byImpactBand,impact:null,impactMeaning:null}})}function Ti(e,t,n){let r=new Set(e.filter(j).map(e=>e.type)),i=mt(t,e),a=[],o=[];for(let[e,{thresholdSummary:t}]of Object.entries(St())){if(r.has(e))continue;let s=We(e,n),c=s?{type:e,tag:se(e),thresholdSummary:Tt(e,n),tunedThresholds:s}:{type:e,tag:se(e),thresholdSummary:t},l=i.notRunReason(e);l?o.push({...c,reason:l}):a.push(c)}return{cleanChecks:a,notRunChecks:o}}function Ei(e){let t={critical:0,warning:0,info:0};for(let n of e)n.impactBand in t&&(t[n.impactBand]+=1);return t}function Di(e){return{title:e.title,summary:e.summary,steps:e.shown.map(t=>{let n=ht(t,e.outcome);return{key:t.key,stageId:t.stageId,type:t.lead.type,tag:se(t.lead.type),leadFindingId:t.lead.id??null,actionLabel:_t(t.lead),recommendation:n,impact:tt(t.lead),impactMeaning:Ve(t.lead),relatedTypes:t.related.map(e=>e.type),text:rt(t.lead,n,t.stageId)}}),remainingPlaces:e.remaining,copyText:e.copyText}}var Oi={},ki=new WeakMap,Ai=new WeakMap;function ji(e,t){let n=t??Oi,r=e.get(n);return r||(r=new WeakMap,e.set(n,r)),r}var Mi=new WeakMap;function Ni(e,t){let n=ji(Mi,t),r=n.get(e);if(r)return r;let{app:i,stages:a,executors:o,sql:s,jobs:c,runAggregates:l}=e,u={catalog:ve(i,a,o?.added??[],o?.removed??[],c??new Map,s??new Map,l??null,{thresholds:t}),config:Xe(i)};return n.set(e,u),u}function Pi(e,t){let n=ji(Ai,t),r=n.get(e);if(r)return r;let{catalog:i,config:a}=Ni(e,t),o=vr(e,i,a),s=gr(Fi(o.appModel,t,{catalog:o.catalog,config:o.configFindings}));return n.set(e,s),s}function Fi(e,t,n){let r=ji(ki,t),i=r.get(e);if(i)return i;let{app:a,stages:o,executors:s,sql:c,jobs:l,evidenceAvailability:u}=e,{catalog:d,config:f}=n??Ni(e,t),p=[...d,...f],m=Ci(p.map(Si)),h=wi(p,o??new Map),{cleanChecks:g,notRunChecks:_}=Ti(p,o??new Map,t),v=gt(t),y=p.filter(A),b={...e,stages:o??new Map,jobs:l??new Map,executors:s??{added:[],removed:[]}},x=ct(b,p),S=x.outcome,C={schemaVersion:5,summary:{app:{id:a?.id??null,name:a?.name??null,sparkVersion:a?.sparkVersion??null},stageCount:o?.size??0,jobCount:l?.size??0,sqlExecutionCount:c?.size??0,findingCount:m.length,impactBandCounts:Ei(m),actionableFindingCount:y.length,actionableImpactBandCounts:Ei(y),clean:Ee({jobs:l??new Map,stages:o??new Map},p),outcome:{failedJobs:S.failedJobs,totalJobs:S.totalJobs,failureReason:S.reason,failureReasonStageId:S.reason==null?null:S.reasonStageId},runShape:Ze(b),...v?{tunedThresholds:v}:{}},verdict:Di(x),evidenceAvailability:u??null,detectors:lt(t),findings:m,writeTargets:yi(c??new Map,{skippedLines:e.skippedLines,unreadableSqlExecutions:e.unreadableSqlExecutions}),recommendations:h,cleanChecks:g,notRunChecks:_};return r.set(e,C),C}function Ii(e,t){return typeof t==`number`&&/bytes$/i.test(e)?F(t):typeof t==`object`&&t?JSON.stringify(t):String(t)}function Li(e){let t=[` - failureGroups: ${e.length}`];for(let n of e)if(t.push(` - ${n.count} task(s): ${vt(n)}`),n.stackExcerpt){t.push(``);for(let e of n.stackExcerpt.split(`
10
- `))t.push(` ${e}`);t.push(``)}return t}function Ri(e){let t=ot(e);return t?`${t.text}${t.meaning?` ${t.meaning}`:``} (estimateMethod: ${e.estimateMethod})`:null}function zi(e,t){let{failedJobs:n,totalJobs:r,failureReason:i,failureReasonStageId:a}=e;if(r===0)return null;if(n>0){let e=n<r?`${n} of ${r} jobs failed.`:r===1?`The run's one job failed.`:`All ${r} jobs failed.`;return i?`${e} Spark's recorded reason${a==null?``:` (stage ${a})`}: ${i}`:e}let o=r===1?`Its one job succeeded.`:`All ${r} jobs succeeded.`;return t?`${o} The log has no end-of-run record, so jobs still running when it stops are not counted.`:o}function Bi(e){let t=[];if(e.wallClockMs!=null&&t.push(`- Wall-clock: ${I(e.wallClockMs)}`),e.efficiencyPct!=null&&t.push(`- Efficiency: ${e.efficiencyPct}% (share of the run with a stage running)`),e.unusedCoreTimePct!=null&&t.push(`- Unused core time: ${e.unusedCoreTimePct}% (driver idle plus executor slack, as a share of available core time)`),e.peakBusyCores!=null&&t.push(`- Peak busy cores: ${P(e.peakBusyCores)}`),e.etlPhasesMs){let{extract:n,transform:r,load:i}=e.etlPhasesMs;t.push(`- ETL phases (summed stage time): extract ${I(n)}, transform ${I(r)}, load ${I(i)}`)}return t}function Vi(e){let t=[`## Verdict`,``,e.title];if(e.summary.length>0&&t.push(``,e.summary.join(` `)),e.steps.length>0&&(t.push(``),e.steps.forEach((e,n)=>{if(t.push(`${n+1}. [${e.tag}] ${e.text}`),e.relatedTypes.length>0){let n=e.relatedTypes.map(Ke).join(`, `);t.push(` - Also flagged here, likely the same cause: ${n}.`)}}),e.remainingPlaces>0)){let n=`${e.remainingPlaces} more place${e.remainingPlaces===1?``:`s`}`;t.push(``,`${n} to look at in the Findings section below.`)}return t.push(``),t}function Hi(e,t){let{summary:n,verdict:r,findings:i,evidenceAvailability:a,detectors:o,recommendations:s,cleanChecks:c,notRunChecks:l}=e,u=[];u.push(`# Spark run evidence report`),u.push(``),u.push(`- Application: ${n.app.name??`(unknown)`} (${n.app.id??`n/a`})`),u.push(`- Spark version: ${n.app.sparkVersion??`n/a`}`),n.tunedThresholds&&u.push(`- Tuned thresholds: ${it(n.tunedThresholds)}`),u.push(`- Stages: ${n.stageCount} · Jobs: ${n.jobCount} · SQL executions: ${n.sqlExecutionCount}`),u.push(`- Findings: ${n.findingCount} (critical ${n.impactBandCounts.critical}, warning ${n.impactBandCounts.warning}, info ${n.impactBandCounts.info})`);let d=n.actionableImpactBandCounts;u.push(`- Findings to act on: ${n.actionableFindingCount} (critical ${d.critical}, warning ${d.warning}, info ${d.info})`);let f=zi(n.outcome,t);f&&u.push(`- Outcome: ${f}`),n.clean&&u.push(`- Clean run: no findings, no failed jobs, and every check could run.`),u.push(...Bi(n.runShape)),u.push(``),u.push(...Vi(r)),s.length>0&&(u.push(`## Fix these first (${s.length})`),u.push(``),s.forEach((e,t)=>{u.push(`${t+1}. [${e.tag}] ${e.actionLabel}`);let n=e.kind===`count`?Object.entries(e.byImpactBand??{}).map(([e,t])=>`${t} ${e}`).join(`, `):e.impact&&`${e.impact}${e.impactMeaning?` ${e.impactMeaning}`:``}`;u.push(` - ${n?`${n} · `:``}×${e.findingCount} finding(s)`)}),u.push(``)),u.push(`## Findings (${i.length})`),u.push(``);for(let e of i){let t=e.stageId==null?``:` (stage ${e.stageId})`;u.push(`### ${e.name} · ${e.impactBand}${t}`),u.push(`- action: ${e.actionLabel}`),e.metric!=null&&u.push(`- ${e.metric}: ${e.valueText??e.value}`),e.recommendation&&u.push(`- ${e.recommendation}`),e.confidence&&u.push(`- confidence: ${e.confidence}`),e.validationRequired&&u.push(`- validation: ${e.validationRequired}`),e.tunedThresholds&&u.push(`- tuned thresholds: ${bt(e.tunedThresholds)}`);let n=e.impactEstimate?Ri(e.impactEstimate):null;n&&u.push(`- impact: ${n}`);let r=e.impactEstimate?ft(e):null;r&&u.push(`- estimate: ${r}`),u.push(`- detector version: ${e.detectorVersion}`);let i=Object.entries(e.evidence??{}).sort(([e],[t])=>e<t?-1:+(e>t));if(i.length){u.push(`- evidence:`);for(let[e,t]of i)e===`failureGroups`&&Array.isArray(t)?u.push(...Li(t)):u.push(` - ${e}: ${Ii(e,t)}`)}u.push(``)}if(a?.entries?.length){u.push(`## Evidence availability`),u.push(``);for(let e of a.entries)u.push(`- ${e.key}: ${e.state} (${e.summary})`);u.push(``)}if(Array.isArray(o)&&o.length){u.push(`## Detectors`),u.push(``);for(let e of o){let t=e.tunedThresholds?` (tuned: ${bt(e.tunedThresholds)})`:``;u.push(`- ${e.type} (v${e.version}, ${e.scope}), thresholds: ${JSON.stringify(e.thresholds)}${t}`)}u.push(``)}if(l.length>0){u.push(`## Not checked on this log (${l.length})`),u.push(``),u.push(`The log lacked the data these checks need, so they neither passed nor failed.`),u.push(``);for(let e of l)u.push(`- [${e.tag}] ${e.type}: ${e.reason}`);u.push(``)}if(c.length>0){u.push(`## Clean checks (${c.length})`),u.push(``);for(let e of c){let t=e.tunedThresholds?` (tuned: ${bt(e.tunedThresholds)})`:``;u.push(`- [${e.tag}] ${e.type}: ${e.thresholdSummary}${t}`)}u.push(``)}return u.join(`
11
- `)}function Ui(e,t){let n=`stageIds`in e.evidence?e.evidence.stageIds:null;return Ue({...e,stageId:ut({stageId:e.stageId,stageIds:n})},t)}function Wi(e,{redact:t=!1,markdown:n=!0,findingsFilter:r,thresholds:i}={}){let a=t?Pi(e,i):Fi(e,i),o=a.findings.some(e=>e.type===`incompleteRun`);return r&&(a={...a,findings:a.findings.filter(e=>Ui(e,r))}),{markdown:n?Hi(a,o):``,json:a}}var J=Uint8Array,Y=Uint16Array,Gi=Int32Array,Ki=new J([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),qi=new J([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),Ji=new J([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Yi=function(e,t){for(var n=new Y(31),r=0;r<31;++r)n[r]=t+=1<<e[r-1];for(var i=new Gi(n[30]),r=1;r<30;++r)for(var a=n[r];a<n[r+1];++a)i[a]=a-n[r]<<5|r;return{b:n,r:i}},Xi=Yi(Ki,2),Zi=Xi.b,Qi=Xi.r;Zi[28]=258,Qi[258]=28;var $i=Yi(qi,0);$i.b;for(var ea=$i.r,ta=new Y(32768),X=0;X<32768;++X){var Z=(X&43690)>>1|(X&21845)<<1;Z=(Z&52428)>>2|(Z&13107)<<2,Z=(Z&61680)>>4|(Z&3855)<<4,ta[X]=((Z&65280)>>8|(Z&255)<<8)>>1}for(var na=(function(e,t,n){for(var r=e.length,i=0,a=new Y(t);i<r;++i)e[i]&&++a[e[i]-1];var o=new Y(t);for(i=1;i<t;++i)o[i]=o[i-1]+a[i-1]<<1;var s;if(n){s=new Y(1<<t);var c=15-t;for(i=0;i<r;++i)if(e[i])for(var l=i<<4|e[i],u=t-e[i],d=o[e[i]-1]++<<u,f=d|(1<<u)-1;d<=f;++d)s[ta[d]>>c]=l}else for(s=new Y(r),i=0;i<r;++i)e[i]&&(s[i]=ta[o[e[i]-1]++]>>15-e[i]);return s}),ra=new J(288),X=0;X<144;++X)ra[X]=8;for(var X=144;X<256;++X)ra[X]=9;for(var X=256;X<280;++X)ra[X]=7;for(var X=280;X<288;++X)ra[X]=8;for(var ia=new J(32),X=0;X<32;++X)ia[X]=5;var aa=na(ra,9,0),oa=na(ia,5,0),sa=function(e){return(e+7)/8|0},ca=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new J(e.subarray(t,n))},Q=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},la=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},ua=function(e,t){for(var n=[],r=0;r<e.length;++r)e[r]&&n.push({s:r,f:e[r]});var i=n.length,a=n.slice();if(!i)return{t:_a,l:0};if(i==1){var o=new J(n[0].s+1);return o[n[0].s]=1,{t:o,l:1}}n.sort(function(e,t){return e.f-t.f}),n.push({s:-1,f:25001});var s=n[0],c=n[1],l=0,u=1,d=2;for(n[0]={s:-1,f:s.f+c.f,l:s,r:c};u!=i-1;)s=n[n[l].f<n[d].f?l++:d++],c=n[l!=u&&n[l].f<n[d].f?l++:d++],n[u++]={s:-1,f:s.f+c.f,l:s,r:c};for(var f=a[0].s,r=1;r<i;++r)a[r].s>f&&(f=a[r].s);var p=new Y(f+1),m=da(n[u-1],p,0);if(m>t){var r=0,h=0,g=m-t,_=1<<g;for(a.sort(function(e,t){return p[t.s]-p[e.s]||e.f-t.f});r<i;++r){var v=a[r].s;if(p[v]>t)h+=_-(1<<m-p[v]),p[v]=t;else break}for(h>>=g;h>0;){var y=a[r].s;p[y]<t?h-=1<<t-p[y]++-1:++r}for(;r>=0&&h;--r){var b=a[r].s;p[b]==t&&(--p[b],++h)}m=t}return{t:new J(p),l:m}},da=function(e,t,n){return e.s==-1?Math.max(da(e.l,t,n+1),da(e.r,t,n+1)):t[e.s]=n},fa=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new Y(++t),r=0,i=e[0],a=1,o=function(e){n[r++]=e},s=1;s<=t;++s)if(e[s]==i&&s!=t)++a;else{if(!i&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(i),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(i);a=1,i=e[s]}return{c:n.subarray(0,r),n:t}},pa=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},ma=function(e,t,n){var r=n.length,i=sa(t+2);e[i]=r&255,e[i+1]=r>>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var a=0;a<r;++a)e[i+a+4]=n[a];return(i+4+r)*8},ha=function(e,t,n,r,i,a,o,s,c,l,u){Q(t,u++,n),++i[256];for(var d=ua(i,15),f=d.t,p=d.l,m=ua(a,15),h=m.t,g=m.l,_=fa(f),v=_.c,y=_.n,b=fa(h),x=b.c,S=b.n,C=new Y(19),w=0;w<v.length;++w)++C[v[w]&31];for(var w=0;w<x.length;++w)++C[x[w]&31];for(var T=ua(C,7),E=T.t,D=T.l,O=19;O>4&&!E[Ji[O-1]];--O);var k=l+5<<3,A=pa(i,ra)+pa(a,ia)+o,j=pa(i,f)+pa(a,h)+o+14+3*O+pa(C,E)+2*C[16]+3*C[17]+7*C[18];if(c>=0&&k<=A&&k<=j)return ma(t,u,e.subarray(c,c+l));var M,N,P,F;if(Q(t,u,1+(j<A)),u+=2,j<A){M=na(f,p,0),N=f,P=na(h,g,0),F=h;var I=na(E,D,0);Q(t,u,y-257),Q(t,u+5,S-1),Q(t,u+10,O-4),u+=14;for(var w=0;w<O;++w)Q(t,u+3*w,E[Ji[w]]);u+=3*O;for(var L=[v,x],ee=0;ee<2;++ee)for(var te=L[ee],w=0;w<te.length;++w){var R=te[w]&31;Q(t,u,I[R]),u+=E[R],R>15&&(Q(t,u,te[w]>>5&127),u+=te[w]>>12)}}else M=aa,N=ra,P=oa,F=ia;for(var w=0;w<s;++w){var z=r[w];if(z>255){var R=z>>18&31;la(t,u,M[R+257]),u+=N[R+257],R>7&&(Q(t,u,z>>23&31),u+=Ki[R]);var ne=z&31;la(t,u,P[ne]),u+=F[ne],ne>3&&(la(t,u,z>>5&8191),u+=qi[ne])}else la(t,u,M[z]),u+=N[z]}return la(t,u,M[256]),u+N[256]},ga=new Gi([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),_a=new J(0),va=function(e,t,n,r,i,a){var o=a.z||e.length,s=new J(r+o+5*(1+Math.ceil(o/7e3))+i),c=s.subarray(r,s.length-i),l=a.l,u=(a.r||0)&7;if(t){u&&(c[0]=a.r>>3);for(var d=ga[t-1],f=d>>13,p=d&8191,m=(1<<n)-1,h=a.p||new Y(32768),g=a.h||new Y(m+1),_=Math.ceil(n/3),v=2*_,y=function(t){return(e[t]^e[t+1]<<_^e[t+2]<<v)&m},b=new Gi(25e3),x=new Y(288),S=new Y(32),C=0,w=0,T=a.i||0,E=0,D=a.w||0,O=0;T+2<o;++T){var k=y(T),A=T&32767,j=g[k];if(h[A]=j,g[k]=A,D<=T){var M=o-T;if((C>7e3||E>24576)&&(M>423||!l)){u=ha(e,c,0,b,x,S,w,E,O,T-O,u),E=C=w=0,O=T;for(var N=0;N<286;++N)x[N]=0;for(var N=0;N<30;++N)S[N]=0}var P=2,F=0,I=p,L=A-j&32767;if(M>2&&k==y(T-L))for(var ee=Math.min(f,M)-1,te=Math.min(32767,T),R=Math.min(258,M);L<=te&&--I&&A!=j;){if(e[T+P]==e[T+P-L]){for(var z=0;z<R&&e[T+z]==e[T+z-L];++z);if(z>P){if(P=z,F=L,z>ee)break;for(var ne=Math.min(L,z-2),re=0,N=0;N<ne;++N){var ie=T-L+N&32767,ae=ie-h[ie]&32767;ae>re&&(re=ae,j=ie)}}}A=j,j=h[A],L+=A-j&32767}if(F){b[E++]=268435456|Qi[P]<<18|ea[F];var oe=Qi[P]&31,se=ea[F]&31;w+=Ki[oe]+qi[se],++x[257+oe],++S[se],D=T+P,++C}else b[E++]=e[T],++x[e[T]]}}for(T=Math.max(T,D);T<o;++T)b[E++]=e[T],++x[e[T]];u=ha(e,c,l,b,x,S,w,E,O,T-O,u),l||(a.r=u&7|c[u/8|0]<<3,u-=7,a.h=g,a.p=h,a.i=T,a.w=D)}else{for(var T=a.w||0;T<o+l;T+=65535){var ce=T+65535;ce>=o&&(c[u/8|0]=l,ce=o),u=ma(c,u+1,e.subarray(T,ce))}a.i=o}return ca(s,0,r+sa(u)+i)},ya=(function(){for(var e=new Int32Array(256),t=0;t<256;++t){for(var n=t,r=9;--r;)n=(n&1&&-306674912)^n>>>1;e[t]=n}return e})(),ba=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=ya[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},xa=function(e,t,n,r,i){if(!i&&(i={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),o=new J(a.length+e.length);o.set(a),o.set(e,a.length),e=o,i.w=a.length}return va(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,i)},Sa=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},Ca=function(e,t){var n=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level<2?4:t.level==9?2:0,e[9]=3,t.mtime!=0&&Sa(e,4,Math.floor(new Date(t.mtime||Date.now())/1e3)),n){e[3]=8;for(var r=0;r<=n.length;++r)e[r+10]=n.charCodeAt(r)}},wa=function(e){return 10+(e.filename?e.filename.length+1:0)};function Ta(e,t){t||={};var n=ba(),r=e.length;n.p(e);var i=xa(e,t,wa(t),8),a=i.length;return Ca(i,t),Sa(i,a-8,n.d()),Sa(i,a-4,r),i}var Ea=typeof TextEncoder<`u`&&new TextEncoder,Da=typeof TextDecoder<`u`&&new TextDecoder;try{Da.decode(_a,{stream:!0})}catch{}function Oa(e,t){if(t){for(var n=new J(e.length),r=0;r<e.length;++r)n[r]=e.charCodeAt(r);return n}if(Ea)return Ea.encode(e);for(var i=e.length,a=new J(e.length+(e.length>>1)),o=0,s=function(e){a[o++]=e},r=0;r<i;++r){if(o+5>a.length){var c=new J(o+8+(i-r<<1));c.set(a),a=c}var l=e.charCodeAt(r);l<128||t?s(l):l<2048?(s(192|l>>6),s(128|l&63)):l>55295&&l<57344?(l=65536+(l&1047552)|e.charCodeAt(++r)&1023,s(240|l>>18),s(128|l>>12&63),s(128|l>>6&63),s(128|l&63)):(s(224|l>>12),s(128|l>>6&63),s(128|l&63))}return ca(a,0,o)}function ka(e,t,n,{redact:r,buildId:i,producer:a}){let o={appModel:e,catalog:t,configFindings:Xe(e.app)},s=r?vr(o.appModel,o.catalog,o.configFindings):o,c=yt(s.appModel,s.catalog,s.configFindings),l={coreVersion:Qn,buildId:i,producer:a};return $n(s.appModel,s.catalog,s.configFindings,n,c,l)}var Aa=32768;function ja(e){let t=``;for(let n=0;n<e.length;n+=Aa)t+=String.fromCharCode(...e.subarray(n,n+Aa));return btoa(t)}function Ma(e){return ja(Ta(Oa(JSON.stringify(e))))}var Na=`__SPARKFORENSICS_RUN_GZ__`;function Pa(e){return`window.${Na} = "${e}";`}var Fa=`export-template.html`,Ia=`<script src="./data.js"><\/script>`;function La(e,t){let n=e.indexOf(Ia);if(n===-1||e.indexOf(Ia,n+1)!==-1)throw Error(`The HTML export template is missing or malformed in this build.`);let r=`<script>${Pa(t)}<\/script>`;return e.slice(0,n)+r+e.slice(n+33)}var Ra=`7aaca3af812e0e5a4f4632ad7577fc438b589520a27422ce8c986b156de82260`,za=`sparkforensics-web 0.28.0`,Ba={markdown:`md`,json:`json`,html:`html`};function Va(e,t,n){let r=new Blob([e],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=t,document.body.appendChild(a),a.click(),a.remove(),URL.revokeObjectURL(i)}function Ha(e,t,n){return`evidence-${String(e??`report`).replace(/[^\w.-]/g,`_`)}${n?`-redacted`:``}.${Ba[t]}`}async function Ua(){let e=await fetch(Fa);if(!e.ok)throw Error(`The HTML export template could not be loaded (HTTP ${e.status}).`);return e.text()}function Wa(){let e=B(e=>e.appModel),t=B(e=>e.catalog),n=B(e=>e.skippedLines),[r,i]=(0,H.useState)(!1),a=async()=>{try{let i=ka(e,t,n,{redact:r,buildId:Ra,producer:za});Va(La(await Ua(),Ma(i)),Ha(i.app?.id??null,`html`,r),`text/html`)}catch(e){console.error(`HTML export failed`,e),at.error(`HTML export failed`,{description:e instanceof Error?e.message:String(e)})}},o=t=>{try{let{markdown:n,json:i}=Wi(e,{redact:r}),a=Ha(i.summary?.app?.id??null,t,r);t===`json`?Va(`${JSON.stringify(i,null,2)}\n`,a,`application/json`):Va(`${n}\n`,a,`text/markdown`)}catch(e){console.error(`Evidence export failed`,e),at.error(`Evidence export failed`,{description:e instanceof Error?e.message:String(e)})}};return{redact:r,setRedact:i,download:e=>{e===`html`?a():o(e)}}}function Ga({redact:e,setRedact:t,download:n}){return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(nn,{checked:e,onClick:e=>e.preventDefault(),onCheckedChange:e=>t(!!e),children:`Redact identifiers`}),(0,U.jsx)(rn,{}),(0,U.jsx)(W,{onClick:()=>n(`markdown`),children:`Download Markdown`}),(0,U.jsx)(W,{onClick:()=>n(`json`),children:`Download JSON`}),(0,U.jsx)(W,{onClick:()=>n(`html`),children:`Download HTML dashboard`})]})}function Ka(){let e=Wa();return(0,U.jsxs)($t,{children:[(0,U.jsxs)(en,{render:(0,U.jsx)(V,{variant:`ghost`,size:`sm`}),children:[(0,U.jsx)(Mt,{"aria-hidden":`true`}),`Export evidence`]}),(0,U.jsx)(tn,{align:`end`,children:(0,U.jsx)(Ga,{...e})})]})}function qa({activeName:e,activeSub:t,activeId:n=null,entries:r,onPick:i,onRemove:a,onOpenNew:o}){let{pickRecent:s}=ze(),c=(0,H.useCallback)(e=>{if(i){i(e);return}s(e,r.find(t=>t.id===e)?.handle)},[i,r,s]);return(0,U.jsxs)($t,{children:[(0,U.jsxs)(en,{className:M(Oe({variant:`ghost`}),`h-auto min-w-0 shrink max-w-40 flex-col items-start justify-center gap-0 py-1 sm:max-w-80`),children:[(0,U.jsxs)(`span`,{className:`flex w-full min-w-0 items-center gap-1.5`,children:[(0,U.jsx)(`span`,{className:`min-w-0 truncate font-heading text-sm font-semibold`,children:e??`No file`}),(0,U.jsx)(re,{"aria-hidden":`true`,className:`ml-auto shrink-0 opacity-60`})]}),t?(0,U.jsx)(`span`,{className:`w-full min-w-0 truncate text-left text-xs text-muted-foreground`,children:t}):null]}),(0,U.jsxs)(tn,{className:`w-72 p-2`,children:[(0,U.jsx)(De,{entries:r,activeId:n,onPick:c,onRemove:a}),(0,U.jsx)(rn,{}),(0,U.jsx)(W,{onClick:()=>o?.(),children:`Load new file…`})]})]})}function Ja({open:e,entries:t,onSelect:n,onOpenChange:r}){let[i,a]=(0,H.useState)(``),o=(0,H.useRef)(null);(0,H.useEffect)(()=>{e||a(``)},[e]);let s=i.trim().toLowerCase(),c=s?t.filter(e=>e.label.toLowerCase().includes(s)||e.secondary.toLowerCase().includes(s)||String(e.executionId).includes(s)):t;function l(e){(o.current?.querySelectorAll(`button`)??[])[e]?.focus()}function u(e,t){e.key===`ArrowDown`?(e.preventDefault(),l(t+1)):e.key===`ArrowUp`&&(e.preventDefault(),l(t-1))}function d(e){e.key===`Enter`?c.length===1&&n(c[0].stageId):e.key===`ArrowDown`&&(e.preventDefault(),l(0))}return(0,U.jsx)(xe,{open:e,onOpenChange:r,children:(0,U.jsxs)(Ct,{className:`flex max-h-[85vh] flex-col sm:max-w-xl`,children:[(0,U.jsxs)(Ce,{children:[(0,U.jsxs)(ke,{className:`flex items-center gap-1.5`,children:[(0,U.jsx)(Ne,{"aria-hidden":`true`,className:`size-4 text-plan-aggregate`}),`Open plan graph`]}),(0,U.jsx)(Pe,{children:`Choose which SQL execution's plan to open.`})]}),(0,U.jsx)(an,{autoFocus:!0,placeholder:`Filter executions…`,value:i,onChange:e=>a(e.target.value),onKeyDown:d}),c.length===0?(0,U.jsx)(`p`,{className:`px-1.5 py-1 text-sm text-muted-foreground`,children:`No matching executions`}):(0,U.jsx)(`ul`,{ref:o,className:`flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto`,children:c.map((e,t)=>(0,U.jsx)(`li`,{children:(0,U.jsxs)(`button`,{type:`button`,className:`flex w-full min-w-0 cursor-pointer flex-col items-start gap-0.5 rounded-md px-1.5 py-1 text-left hover:bg-muted`,onClick:()=>n(e.stageId),onKeyDown:e=>u(e,t),children:[(0,U.jsxs)(`span`,{className:`flex w-full min-w-0 items-center gap-1.5`,children:[e.impactBand!=null&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(me,{impactBand:e.impactBand}),(0,U.jsxs)(`span`,{className:`shrink-0 text-xs font-normal text-muted-foreground`,children:[e.findingCount,` finding`,e.findingCount===1?``:`s`]})]}),(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:e.secondary})]}),(0,U.jsx)(`span`,{className:`w-full truncate text-xs text-muted-foreground`,children:e.label})]})},e.executionId))})]})})}var Ya={name:`sparkforensics-web`,version:`0.28.0`,description:`Zero-backend browser dashboard that parses Apache Spark event logs to diagnose performance bottlenecks: skew, spill, GC pressure, stragglers, cache utilization, and more.`,private:!0,type:`module`,workspaces:[`.`,`packages/*`],license:`MIT`,author:`Agustin Recoba`,repository:{type:`git`,url:`git+https://github.com/shuffle-works/sparkforensics.git`},bugs:{url:`https://github.com/shuffle-works/sparkforensics/issues`},homepage:`https://github.com/shuffle-works/sparkforensics#readme`,keywords:[`apache-spark`,`spark`,`spark-history-server`,`performance`,`diagnostics`,`observability`,`event-log`,`dashboard`,`query-plan`],engines:{node:`>=22.18.0 <23.0.0 || >=23.6.0`},scripts:{test:`vitest run`,"test:watch":`vitest`,"test:coverage":`vitest run --coverage`,"test:core":`npm run test:coverage --workspace packages/core`,"test:cli":`npm run test:coverage --workspace packages/cli`,"test:mcp":`npm run test:coverage --workspace packages/mcp`,"test:server":`npm test --workspace packages/server`,lint:`eslint .`,release:`node scripts/publish-packages.mjs`,"local-server":`node packages/server/index.js`,"capture-components":`node dev/component-capture/capture.mjs`,"docs:fetch":`node scripts/fetch-tuning-docs.mjs`,"docs:bump":`node scripts/fetch-tuning-docs.mjs bump`,"doc-anchor-coverage":`node scripts/doc-anchor-coverage.js`,"split-detection-docs":`node scripts/split-detection-docs.mjs`,prepare:`git config core.hooksPath .githooks`,dev:`vite`,build:`npm run docs:build && vite build && vite build --config vite.export.config.ts --mode template`,"build:export":`vite build --config vite.export.config.ts`,preview:`vite preview`,"docs:dev":`node scripts/fetch-tuning-docs.mjs --allow-stale && node scripts/build-tuning-reference.mjs && vitepress dev docs-site`,"docs:build":`node scripts/fetch-tuning-docs.mjs && node scripts/build-tuning-reference.mjs && vitepress build docs-site`,"docs:preview":`vitepress preview docs-site`},devDependencies:{"@changesets/cli":`^3.0.3`,"@eslint/js":`^10.0.1`,"@tailwindcss/vite":`^4.3.3`,"@testing-library/jest-dom":`^7.0.1`,"@testing-library/react":`^16.3.3`,"@testing-library/user-event":`^14.6.7`,"@types/node":`^26.6.4`,"@types/react":`^19.3.0`,"@types/react-dom":`^19.3.0`,"@vitejs/plugin-react":`^5.2.0`,"@vitest/coverage-v8":`^5.0.3`,eslint:`^10.12.0`,"fake-indexeddb":`^6.2.5`,globals:`^17.13.0`,"js-yaml":`^5.4.2`,jsdom:`^30.1.1`,"markdown-it-footnote":`^4.0.0`,playwright:`^1.63.0`,shadcn:`^4.21.1`,tailwindcss:`^4.3.3`,typescript:`^7.0.2`,vite:`^8.3.2`,"vite-plugin-singlefile":`^2.3.3`,vitepress:`^1.6.4`,vitest:`^5.0.3`},dependencies:{"@base-ui/react":`^1.8.0`,"@dagrejs/dagre":`^3.1.1`,"@modelcontextprotocol/sdk":`^1.32.0`,"@sparkforensics/core":`*`,"@tanstack/react-table":`^9.2.4`,"@xyflow/react":`^12.12.0`,"class-variance-authority":`^0.7.1`,clsx:`^2.1.1`,"lucide-react":`^1.51.0`,react:`^19.3.0`,"react-dom":`^19.3.0`,"react-resizable-panels":`^4.14.2`,recharts:`^3.8.0`,sonner:`^2.0.8`,"tailwind-merge":`^3.7.0`,"tw-animate-css":`^1.4.0`,zod:`^4.6.5`,zustand:`^5.0.15`}};function Xa({keys:e}){return(0,U.jsx)(`span`,{className:`flex shrink-0 items-center gap-1`,children:e.map((e,t)=>(0,U.jsxs)(`span`,{className:`flex items-center gap-1`,children:[t>0?(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`or`}):null,(0,U.jsx)(`kbd`,{className:`rounded-md border border-border bg-muted px-1.5 py-0.5 font-mono text-xs font-medium text-foreground`,children:e})]},e))})}function $({keys:e,children:t}){return(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-4 py-1.5`,children:[(0,U.jsx)(`span`,{className:`text-sm text-foreground`,children:t}),(0,U.jsx)(Xa,{keys:e})]})}function Za({title:e,children:t}){return(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h3`,{className:`mb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase`,children:e}),(0,U.jsx)(`div`,{className:`divide-y divide-border/60`,children:t})]})}function Qa({open:e,onOpenChange:t}){return(0,U.jsx)(xe,{open:e,onOpenChange:t,children:(0,U.jsxs)(Ct,{className:`sm:max-w-md`,children:[(0,U.jsxs)(Ce,{children:[(0,U.jsx)(ke,{children:`Keyboard shortcuts`}),(0,U.jsx)(Pe,{children:`Everything below works from anywhere the board is loaded.`})]}),(0,U.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,U.jsxs)(Za,{title:`Navigation`,children:[(0,U.jsx)($,{keys:[`Tab`,`Shift+Tab`],children:`Move between controls`}),(0,U.jsx)($,{keys:[`Enter`,`Space`],children:`Activate the focused control, open a stage's details, or sort a column`}),(0,U.jsx)($,{keys:[`Esc`],children:`Close the open dialog, or leave a full-page view like Plan graph`})]}),(0,U.jsxs)(Za,{title:`Menus and lists`,children:[(0,U.jsx)($,{keys:[`↑`,`↓`],children:`Move between menu items or picker rows`}),(0,U.jsx)($,{keys:[`A–Z`,`0–9`],children:`Filter the Type and Stage dropdowns, and the plan execution picker, as you type`})]}),(0,U.jsxs)(Za,{title:`Triage (Advanced view only)`,children:[(0,U.jsx)($,{keys:[`j`,`k`],children:`Next or previous finding, starting with the verdict's steps`}),(0,U.jsx)($,{keys:[`Enter`],children:`Show the focused finding's evidence, or expand a grouped finding`}),(0,U.jsx)($,{keys:[`f`],children:`Jump to the finding filters`}),(0,U.jsx)($,{keys:[`1`,`2`],children:`Switch to Findings or Full app report`})]}),(0,U.jsx)(Za,{title:`Help`,children:(0,U.jsx)($,{keys:[`?`],children:`Open this list`})})]}),(0,U.jsxs)(`p`,{className:`text-center text-xs text-muted-foreground`,children:[`SparkForensics v`,Ya.version]})]})})}var $a=`Show confidence levels, evidence, documentation links, finding filters and triage shortcuts (j/k, f, 1/2)`;function eo(){let e=R()===`advanced`;return(0,U.jsxs)(sn,{variant:`outline`,pressed:e,onPressedChange:e=>ge.getState().setWidgetDensity(e?`advanced`:`basic`),className:`tap-target-comfortable aria-pressed:border-primary aria-pressed:bg-primary/10 aria-pressed:text-foreground aria-pressed:hover:bg-primary/15`,title:$a,children:[e?(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`size-1.5 shrink-0 rounded-full bg-primary`}):null,`Advanced view`]})}function to(){let e=R()===`advanced`;return(0,U.jsx)(nn,{checked:e,onCheckedChange:e=>ge.getState().setWidgetDensity(e?`advanced`:`basic`),title:$a,children:`Advanced view`})}var no=`docs/`;function ro(e,t){return e===`warning`?`${t} warning${t===1?``:`s`}`:`${t} ${e}`}function io(e,t){return e.stageId!=null&&t.includes(e.stageId)?!0:An(e)?.some(e=>t.includes(e))??!1}function ao(e,t){let n=[];for(let[r,i]of e.sql){if(!i.planTree)continue;let a=He(r,e.stages),o=a.length>0?Math.min(...a):null;if(o==null)continue;let s=i.description,c=typeof s==`string`&&s.trim()?s:`SQL execution #${r}`,l=i.startTime,u=i.endTime,d=typeof l==`number`&&typeof u==`number`?I(u-l):null,f=t.filter(e=>io(e,a)),p=he(f)??null,m=f.length;n.push({executionId:r,stageId:o,label:c,secondary:d?`#${r} · ${d}`:`#${r}`,impactBand:p,findingCount:m})}return n.sort((e,t)=>{let n=e.impactBand?N[e.impactBand]:1/0,r=t.impactBand?N[t.impactBand]:1/0;return n===r?e.executionId-t.executionId:n-r}),n}function oo({onLoadNew:e,recentEntries:t,activeFileId:n,onPickRecent:r,onRemoveRecent:i,onCompare:a,onJumpToFindings:o,sectionControls:s,leadingContent:c}){let l=B(e=>e.appModel.app),u=B(e=>e.catalog),d=B(e=>e.skippedLines),f=B(e=>e.exportMode),{theme:p,toggle:m}=ye(),h=(0,H.useRef)(null),g=B(e=>e.comparison),_=a!=null&&!s&&!f&&n!=null&&l!=null&&!g.baselineId,v=Wa(),y=B(e=>e.appModel),b=(0,H.useMemo)(()=>ao(y,u),[y,u]),[x,S]=(0,H.useState)(!1),[C,w]=(0,H.useState)(!1);(0,H.useEffect)(()=>{function e(e){if(e.key!==`?`)return;let t=e.target,n=t?.tagName;n===`INPUT`||n===`TEXTAREA`||t?.isContentEditable||(e.preventDefault(),w(!0))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);function E(){if(b.length!==0){if(b.length===1){ge.getState().openPlanGraph(b[0].stageId,{initialScope:`full`});return}S(!0)}}function D(e){ge.getState().openPlanGraph(e,{initialScope:`full`}),S(!1)}let O=l?.name||`Spark Application`,k=[l?.id,l?.sparkVersion?`Spark ${l.sparkVersion}`:null].filter(Boolean).join(` · `),A=te(),j=(0,H.useMemo)(()=>ie(A),[A]),N=he(j),P=N?j.filter(e=>e.impactBand===N).length:0,F=A?.data.verdict,I=F?.clean??!1,L=F?.failed??!1;return(0,U.jsxs)(`header`,{className:`sticky top-0 z-30 flex min-w-0 flex-wrap items-center gap-3 border-b border-border bg-background/95 px-4 py-2 backdrop-blur`,children:[s?null:(0,U.jsx)(`h1`,{className:`sr-only`,children:`SparkForensics`}),(0,U.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[!s&&!f?(0,U.jsx)(V,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable shrink-0`,"aria-label":`New analysis`,title:`Start a new analysis`,onClick:e,children:(0,U.jsx)(It,{"aria-hidden":`true`})}):null,f?(0,U.jsxs)(`div`,{className:`flex min-w-0 shrink flex-col items-start justify-center gap-0 py-1`,children:[(0,U.jsx)(`span`,{className:`min-w-0 truncate font-heading text-sm font-semibold`,children:O}),k?(0,U.jsx)(`span`,{className:`w-full min-w-0 truncate text-left text-xs text-muted-foreground`,children:k}):null]}):(0,U.jsx)(qa,{activeName:O,activeSub:k,activeId:n,entries:t,onPick:r,onRemove:i,onOpenNew:e}),d>0?(0,U.jsxs)(`div`,{className:`min-w-0 truncate text-xs text-warning`,children:[d,` line`,d===1?``:`s`,` skipped: malformed or invalid data`]}):null,c]}),s?(0,U.jsx)(`div`,{className:`flex min-w-0 shrink-0 flex-wrap items-center gap-3 max-sm:order-3 max-sm:w-full max-sm:shrink max-sm:gap-2`,children:s}):N?o?(0,U.jsx)(`button`,{type:`button`,"aria-label":`${ro(N,P)}: show them in Findings`,title:`Show them in Findings`,onClick:()=>o(N),className:M(T(),ne({impactBand:N}),`tap-target-comfortable cursor-pointer font-mono hover:underline focus-visible:outline-none`),children:ro(N,P)}):(0,U.jsx)(de,{label:ro(N,P),impactBand:N,className:`shrink-0`}):L?(0,U.jsx)(de,{label:`Run failed`,impactBand:`critical`,className:`shrink-0`}):I?(0,U.jsxs)(`span`,{className:M(`inline-flex shrink-0 items-center gap-1.5 rounded-full bg-clean/10 px-2 py-0.5 text-xs font-medium text-clean`),children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`inline-block size-2 shrink-0 rounded-full bg-clean`}),`No findings`]}):(0,U.jsx)(`span`,{className:`inline-flex shrink-0 items-center rounded-full border border-border px-2 py-0.5 text-xs font-medium text-muted-foreground`,children:`Not fully checked`}),(0,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[!s&&g.baselineId&&!g.active?(0,U.jsx)(V,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>ge.getState().setComparisonActive(!0),children:`← Back to comparison`}):null,(0,U.jsxs)(`div`,{className:`hidden items-center gap-1 sm:flex`,children:[_?(0,U.jsxs)(V,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,"aria-label":`Compare with another run`,title:`Compare with another run`,onClick:a,children:[(0,U.jsx)(we,{"aria-hidden":`true`}),(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`xl:hidden`,children:`Compare`}),(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`hidden xl:inline`,children:`Compare with another run`})]}):null,!s&&!f?(0,U.jsx)(Ka,{}):null,!s&&b.length>0?(0,U.jsxs)(V,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:E,children:[(0,U.jsx)(Ne,{"aria-hidden":`true`,className:`text-plan-aggregate`}),`Plan graph`]}):null,s?null:(0,U.jsx)(eo,{}),f?null:(0,U.jsx)(V,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Docs`,title:`Read the docs`,nativeButton:!1,render:(0,U.jsx)(`a`,{href:no,target:`_blank`,rel:`noopener noreferrer`}),children:(0,U.jsx)(ce,{"aria-hidden":`true`})}),(0,U.jsx)(V,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Keyboard shortcuts`,title:`Keyboard shortcuts (?)`,onClick:()=>w(!0),children:(0,U.jsx)(Rt,{"aria-hidden":`true`})}),(0,U.jsx)(V,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Toggle theme`,"aria-pressed":p===`light`,title:`Toggle theme`,onClick:m,children:p===`dark`?(0,U.jsx)(Se,{"aria-hidden":`true`}):(0,U.jsx)(wt,{"aria-hidden":`true`})})]}),(0,U.jsxs)($t,{onOpenChange:(e,t)=>{!e&&t.reason===`outside-press`&&setTimeout(()=>{document.activeElement===document.body&&h.current?.focus()})},children:[(0,U.jsx)(en,{ref:h,className:`tap-target-comfortable inline-flex size-8 items-center justify-center rounded-lg hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 sm:hidden`,"aria-label":`More options`,children:(0,U.jsx)(Pt,{"aria-hidden":`true`})}),(0,U.jsxs)(tn,{align:`end`,children:[_?(0,U.jsxs)(W,{onClick:a,children:[(0,U.jsx)(we,{"aria-hidden":`true`}),`Compare with another run`]}):null,!s&&!f?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Ga,{...v}),(0,U.jsx)(rn,{})]}):null,!s&&b.length>0?(0,U.jsxs)(W,{onClick:E,children:[(0,U.jsx)(Ne,{"aria-hidden":`true`,className:`text-plan-aggregate`}),`Plan graph`]}):null,s?null:(0,U.jsx)(to,{}),f?null:(0,U.jsx)(W,{nativeButton:!1,render:(0,U.jsx)(`a`,{href:no,target:`_blank`,rel:`noopener noreferrer`}),children:`Docs`}),(0,U.jsx)(W,{onClick:()=>w(!0),children:`Keyboard shortcuts`}),(0,U.jsx)(W,{onClick:m,children:`Toggle theme`})]})]})]}),(0,U.jsx)(Ja,{open:x,entries:b,onSelect:D,onOpenChange:S}),(0,U.jsx)(Qa,{open:C,onOpenChange:w})]})}function so(e){let{pickRecent:t}=ze(),[n,r]=(0,H.useState)([]),i=(0,H.useCallback)(()=>{Be().then(e=>r(e)).catch(()=>r([]))},[]);return(0,H.useEffect)(()=>{i()},[i,e]),{recentEntries:n,onPickRecent:(0,H.useCallback)(async e=>{let r=n.find(t=>t.id===e),a=await t(e,r?.handle);(a===`restored`||a===`gone`)&&i()},[n,t,i]),onRemoveRecent:(0,H.useCallback)(e=>{let t=n.find(t=>t.id===e);Ae(e).catch(()=>{}).finally(i),t&&at(`Removed "${t.appName||t.name}" from recent files`,{action:{label:`Undo`,onClick:()=>{Re(t).catch(()=>{}).finally(i)}}})},[n,i])}}export{Ot as A,Gt as C,Ut as D,zt as E,Vt as O,Jt as S,Qt as T,an as _,Mn as a,tn as b,kn as c,vn as d,bn as f,on as g,pn as h,Hn as i,Ht as k,On as l,En as m,oo as n,jn as o,xn as p,Zn as r,An as s,so as t,Dn as u,$t as v,Zt as w,en as x,nn as y};
@@ -1 +0,0 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{bt as n,p as r}from"./DisclosureContext-ZpE6CkHx.js";import{p as i}from"./plan-graph-vendor-BYl-AzN5.js";import{d as a,u as o}from"./Dashboard-C1hNeX49.js";import{n as s,t as c}from"./impact-sort-CssZ6MT2.js";var l=i();function u({mode:e,onChange:t,stageLabel:n=`Stage`}){return(0,l.jsx)(r,{children:(0,l.jsxs)(o,{"aria-label":`Sort order`,spacing:0,value:[e],onValueChange:e=>{let n=e[0];n&&t(n)},children:[(0,l.jsx)(a,{value:`impact`,variant:`outline`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,children:`Impact`}),(0,l.jsx)(a,{value:`stage`,variant:`outline`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,children:n})]})})}var d=e(t(),1);function f(e=`impact`){let[t,r]=(0,d.useState)(e),i=n()===`advanced`?t:`impact`;function a(e,t,n){return i===`impact`?[...e].sort(c(t)):[...e].sort(s(n))}return{sortMode:i,setSortMode:r,orderBy:a}}export{u as n,f as t};