sparkforensics-server 0.4.0 → 0.5.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 (382) hide show
  1. package/index.js +3 -0
  2. package/package.json +3 -3
  3. package/public/assets/AutoscalingChurn-5hDGIXi4.js +1 -0
  4. package/public/assets/CacheUtilization-CT2SCnJJ.js +1 -0
  5. package/public/assets/CachingOpportunity-D_O_WkbH.js +1 -0
  6. package/public/assets/ColdStart-B38OiAOp.js +1 -0
  7. package/public/assets/ConfigAudit-BoplryCH.js +1 -0
  8. package/public/assets/CoreUsageArea-csgwNxkl.js +1 -0
  9. package/public/assets/Dashboard-BgKodJl2.js +2 -0
  10. package/public/assets/DisclosureContext-B0siMVdg.js +1 -0
  11. package/public/assets/DuplicatePlanSubtree-BqS2A2j4.js +1 -0
  12. package/public/assets/ExecutorUtilization-Dp52QGWo.js +1 -0
  13. package/public/assets/GcPressure-CT1yzR_s.js +1 -0
  14. package/public/assets/IncompleteRun-C7Qkjtjn.js +1 -0
  15. package/public/assets/JobFailures-WHl3ELfh.js +1 -0
  16. package/public/assets/MemoryUtilization-D8IUDHJI.js +1 -0
  17. package/public/assets/OverBroadcast-6oSSAQ_R.js +1 -0
  18. package/public/assets/PartitionHint-CUvbnnxy.js +1 -0
  19. package/public/assets/PartitionSizing-BwdFL-mw.js +1 -0
  20. package/public/assets/{PlanExplorer-DdmPkKO1.js → PlanExplorer-DcxmiQWL.js} +1 -1
  21. package/public/assets/PlanGraphRoute-pqnHTt4i.js +1 -0
  22. package/public/assets/RetryWaste-BTbeHkJc.js +1 -0
  23. package/public/assets/ShuffleIO-CRhrYNE0.js +1 -0
  24. package/public/assets/Skew-DSNXRG9V.js +1 -0
  25. package/public/assets/SlowHost-B7Lwu2EU.js +1 -0
  26. package/public/assets/SmallFiles-C082c2rd.js +1 -0
  27. package/public/assets/SpeculationWaste-BS2vpadr.js +1 -0
  28. package/public/assets/Spill-B4DVKHXx.js +1 -0
  29. package/public/assets/StageFailed-D3ac9Sou.js +1 -0
  30. package/public/assets/StageFindingGroup-D9naK109.js +1 -0
  31. package/public/assets/{StageHeader-BSV8ALhT.js → StageHeader-pI1nTwVf.js} +1 -1
  32. package/public/assets/StageShape-eO5le8iG.js +1 -0
  33. package/public/assets/StageSlowness-BaNyfNvL.js +1 -0
  34. package/public/assets/Straggler-D5Fnok_y.js +1 -0
  35. package/public/assets/TaskFailures-BWnC-K_G.js +1 -0
  36. package/public/assets/{TinyTask-CIPRxWfT.js → TinyTask-8_5lpq_2.js} +1 -1
  37. package/public/assets/UnderBroadcast-DJ0XSwth.js +1 -0
  38. package/public/assets/{finding-anchor-DF1cSHO1.js → finding-anchor-Cys8Z6Yn.js} +1 -1
  39. package/public/assets/{impact-sort-7z0ZcBZf.js → impact-sort-BTQndbof.js} +1 -1
  40. package/public/assets/index-DCeWge12.js +13 -0
  41. package/public/assets/parser-worker-DmeCnLWU.js +122 -0
  42. package/public/assets/{plan-graph-vendor-B0sEms9Z.js → plan-graph-vendor-BYl-AzN5.js} +1 -1
  43. package/public/assets/{react-vendor-BAKt3vny.js → react-vendor-DEdfrRTJ.js} +1 -1
  44. package/public/assets/{select-Cy5pmbrh.js → select-DIYN6D3y.js} +1 -1
  45. package/public/assets/{usePagedRows-BjPOpUU8.js → usePagedRows-BxvdFnPk.js} +1 -1
  46. package/public/assets/useRecentFiles-C3Ov47U7.js +11 -0
  47. package/public/assets/{useSortMode-CU0vzThu.js → useSortMode-B8SRfAoG.js} +1 -1
  48. package/public/docs/404.html +4 -3
  49. package/public/docs/assets/{app.C6w47a9W.js → app.D2GqAkhy.js} +1 -1
  50. package/public/docs/assets/chunks/@localSearchIndexroot.D4OdkQjy.js +1 -0
  51. package/public/docs/assets/chunks/{VPLocalSearchBox.BcTNvT55.js → VPLocalSearchBox.BS4cSmtW.js} +1 -1
  52. package/public/docs/assets/chunks/{theme.D-mE6j02.js → theme.BuxVpb0H.js} +2 -2
  53. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.js +1 -0
  54. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.lean.js +1 -0
  55. package/public/docs/assets/contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.js +1 -0
  56. package/public/docs/assets/contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.lean.js +1 -0
  57. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.js +1 -0
  58. package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.lean.js +1 -0
  59. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.js +1 -0
  60. package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.lean.js +1 -0
  61. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.wj6Et6UD.js +1 -0
  62. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.wj6Et6UD.lean.js +1 -0
  63. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.js +1 -0
  64. package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.lean.js +1 -0
  65. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.fkPBXsU2.js +1 -0
  66. package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.fkPBXsU2.lean.js +1 -0
  67. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CqZPrdo9.js +1 -0
  68. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CqZPrdo9.lean.js +1 -0
  69. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.js +1 -0
  70. package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.lean.js +1 -0
  71. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.js +1 -0
  72. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.lean.js +1 -0
  73. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.js +1 -0
  74. package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.lean.js +1 -0
  75. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.js +1 -0
  76. package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.lean.js +1 -0
  77. package/public/docs/assets/contributor-guide_architecture_index.md.tymxf1Fh.js +1 -0
  78. package/public/docs/assets/contributor-guide_architecture_index.md.tymxf1Fh.lean.js +1 -0
  79. package/public/docs/assets/contributor-guide_architecture_overview.md.C1sSvm9i.js +1 -0
  80. package/public/docs/assets/contributor-guide_architecture_overview.md.C1sSvm9i.lean.js +1 -0
  81. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DyCBdjuM.js +1 -0
  82. package/public/docs/assets/{contributor-guide_architecture_state-and-history.md.DOTVHjTV.lean.js → contributor-guide_architecture_state-and-history.md.DyCBdjuM.lean.js} +1 -1
  83. package/public/docs/assets/contributor-guide_architecture_state-and-history_history-server-intake.md.C298hrHZ.js +1 -0
  84. package/public/docs/assets/contributor-guide_architecture_state-and-history_history-server-intake.md.C298hrHZ.lean.js +1 -0
  85. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.uuAKpY0Y.js +1 -0
  86. package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.uuAKpY0Y.lean.js +1 -0
  87. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.js +1 -0
  88. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.lean.js +1 -0
  89. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.js +1 -0
  90. package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.lean.js +1 -0
  91. package/public/docs/assets/contributor-guide_architecture_widget-rendering_investigation-routing.md.BGdiyElu.js +1 -0
  92. package/public/docs/assets/contributor-guide_architecture_widget-rendering_investigation-routing.md.BGdiyElu.lean.js +1 -0
  93. package/public/docs/assets/contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.js +1 -0
  94. package/public/docs/assets/contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.lean.js +1 -0
  95. package/public/docs/assets/contributor-guide_architecture_widget-rendering_reference-section.md.DWqC80bN.js +1 -0
  96. package/public/docs/assets/contributor-guide_architecture_widget-rendering_reference-section.md.DWqC80bN.lean.js +1 -0
  97. package/public/docs/assets/contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.js +1 -0
  98. package/public/docs/assets/contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.lean.js +1 -0
  99. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.js +1 -0
  100. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.lean.js +1 -0
  101. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.Dk08VS7n.js +1 -0
  102. package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.Dk08VS7n.lean.js +1 -0
  103. package/public/docs/assets/contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.js +1 -0
  104. package/public/docs/assets/contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.lean.js +1 -0
  105. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.js +6 -0
  106. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.lean.js +1 -0
  107. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.js +1 -0
  108. package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.lean.js +1 -0
  109. package/public/docs/assets/contributor-guide_contributing.md.CQMvGwFt.js +1 -0
  110. package/public/docs/assets/{contributor-guide_contributing.md.B2E9ni79.lean.js → contributor-guide_contributing.md.CQMvGwFt.lean.js} +1 -1
  111. package/public/docs/assets/contributor-guide_development-setup.md.D9bu4j_c.js +15 -0
  112. package/public/docs/assets/contributor-guide_development-setup.md.D9bu4j_c.lean.js +1 -0
  113. package/public/docs/assets/contributor-guide_testing.md.By6XGR9a.js +1 -0
  114. package/public/docs/assets/{contributor-guide_testing.md.DTwhpoN2.lean.js → contributor-guide_testing.md.By6XGR9a.lean.js} +1 -1
  115. package/public/docs/assets/{style.DSixAiZE.css → style.tmDhD3c8.css} +1 -1
  116. package/public/docs/assets/user-guide_alternative-log-retrieval.md.CJpYvHGo.js +4 -0
  117. package/public/docs/assets/user-guide_alternative-log-retrieval.md.CJpYvHGo.lean.js +1 -0
  118. package/public/docs/assets/user-guide_alternative-log-retrieval_managed-platforms.md.DvDwHNtC.js +4 -0
  119. package/public/docs/assets/user-guide_alternative-log-retrieval_managed-platforms.md.DvDwHNtC.lean.js +1 -0
  120. package/public/docs/assets/user-guide_alternative-log-retrieval_ssh-bastion.md.Gszzlplv.js +1 -0
  121. package/public/docs/assets/user-guide_alternative-log-retrieval_ssh-bastion.md.Gszzlplv.lean.js +1 -0
  122. package/public/docs/assets/user-guide_getting-started.md.DYHHHkQR.js +1 -0
  123. package/public/docs/assets/user-guide_getting-started.md.DYHHHkQR.lean.js +1 -0
  124. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.DpnfKz3x.js +22 -0
  125. package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.DpnfKz3x.lean.js +1 -0
  126. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.js +1 -0
  127. package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.lean.js +1 -0
  128. package/public/docs/assets/user-guide_getting-started_regression-metric-keys.md.B_gzr2Mw.js +1 -0
  129. package/public/docs/assets/user-guide_getting-started_regression-metric-keys.md.B_gzr2Mw.lean.js +1 -0
  130. package/public/docs/assets/user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.js +4 -0
  131. package/public/docs/assets/user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.lean.js +1 -0
  132. package/public/docs/assets/user-guide_mcp-tools.md.C65SjWUL.js +16 -0
  133. package/public/docs/assets/user-guide_mcp-tools.md.C65SjWUL.lean.js +1 -0
  134. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.CPowlb2q.js +55 -0
  135. package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.CPowlb2q.lean.js +1 -0
  136. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.js +23 -0
  137. package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.lean.js +1 -0
  138. package/public/docs/assets/user-guide_mcp-tools_evaluate-budgets.md.Dq5Azk8G.js +26 -0
  139. package/public/docs/assets/user-guide_mcp-tools_evaluate-budgets.md.Dq5Azk8G.lean.js +1 -0
  140. package/public/docs/assets/user-guide_mcp-tools_get-finding-documentation.md.BtTTHNV6.js +14 -0
  141. package/public/docs/assets/user-guide_mcp-tools_get-finding-documentation.md.BtTTHNV6.lean.js +1 -0
  142. package/public/docs/assets/user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.js +20 -0
  143. package/public/docs/assets/user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.lean.js +1 -0
  144. package/public/docs/assets/user-guide_mcp-tools_get-reference-doc.md.Yac4tH3u.js +5 -0
  145. package/public/docs/assets/user-guide_mcp-tools_get-reference-doc.md.Yac4tH3u.lean.js +1 -0
  146. package/public/docs/assets/user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.js +15 -0
  147. package/public/docs/assets/user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.lean.js +1 -0
  148. package/public/docs/assets/user-guide_mcp-tools_list-runs.md.DpQPeCM3.js +12 -0
  149. package/public/docs/assets/user-guide_mcp-tools_list-runs.md.DpQPeCM3.lean.js +1 -0
  150. package/public/docs/assets/user-guide_run-comparison.md.B6aNtDYF.js +1 -0
  151. package/public/docs/assets/user-guide_run-comparison.md.B6aNtDYF.lean.js +1 -0
  152. package/public/docs/assets/user-guide_run-comparison_how-stages-are-matched.md.XBzQ1oEU.js +1 -0
  153. package/public/docs/assets/user-guide_run-comparison_how-stages-are-matched.md.XBzQ1oEU.lean.js +1 -0
  154. package/public/docs/assets/user-guide_understanding-findings.md.Dqt2H_C1.js +1 -0
  155. package/public/docs/contributor-guide/architecture/board-widgets/caching-and-memory.html +30 -0
  156. package/public/docs/contributor-guide/architecture/board-widgets/plan-advisor.html +30 -0
  157. package/public/docs/contributor-guide/architecture/board-widgets/visual-system-and-templating.html +30 -0
  158. package/public/docs/contributor-guide/architecture/board-widgets.html +7 -6
  159. package/public/docs/contributor-guide/architecture/detector-contract/plan-attribution.html +30 -0
  160. package/public/docs/contributor-guide/architecture/detector-contract/threshold-tables.html +30 -0
  161. package/public/docs/contributor-guide/architecture/detector-contract.html +7 -6
  162. package/public/docs/contributor-guide/architecture/drill-down/plan-graph.html +30 -0
  163. package/public/docs/contributor-guide/architecture/drill-down.html +7 -6
  164. package/public/docs/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage.html +30 -0
  165. package/public/docs/contributor-guide/architecture/impact-estimation/stage-union-rollup.html +30 -0
  166. package/public/docs/contributor-guide/architecture/impact-estimation.html +7 -6
  167. package/public/docs/contributor-guide/architecture/index.html +7 -6
  168. package/public/docs/contributor-guide/architecture/overview.html +7 -6
  169. package/public/docs/contributor-guide/architecture/state-and-history/history-server-intake.html +30 -0
  170. package/public/docs/contributor-guide/architecture/state-and-history/run-comparison-internals.html +30 -0
  171. package/public/docs/contributor-guide/architecture/state-and-history.html +7 -6
  172. package/public/docs/contributor-guide/architecture/widget-rendering/findings-tab.html +30 -0
  173. package/public/docs/contributor-guide/architecture/widget-rendering/investigation-routing.html +30 -0
  174. package/public/docs/contributor-guide/architecture/widget-rendering/list-sort-mode.html +30 -0
  175. package/public/docs/contributor-guide/architecture/widget-rendering/reference-section.html +30 -0
  176. package/public/docs/contributor-guide/architecture/widget-rendering/row-expand-contract.html +30 -0
  177. package/public/docs/contributor-guide/architecture/widget-rendering.html +7 -6
  178. package/public/docs/contributor-guide/architecture/worker-protocol/cli-and-mcp.html +30 -0
  179. package/public/docs/contributor-guide/architecture/worker-protocol/core-and-event-validation.html +30 -0
  180. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-availability.html +35 -0
  181. package/public/docs/contributor-guide/architecture/worker-protocol/evidence-report.html +30 -0
  182. package/public/docs/contributor-guide/architecture/worker-protocol.html +7 -11
  183. package/public/docs/contributor-guide/contributing.html +7 -6
  184. package/public/docs/contributor-guide/development-setup.html +11 -10
  185. package/public/docs/contributor-guide/testing.html +7 -6
  186. package/public/docs/hashmap.json +1 -1
  187. package/public/docs/index.html +5 -4
  188. package/public/docs/tuning-reference/anti-patterns.html +5 -4
  189. package/public/docs/tuning-reference/aqe.html +5 -4
  190. package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +5 -4
  191. package/public/docs/tuning-reference/bottleneck-cold-start.html +5 -4
  192. package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +5 -4
  193. package/public/docs/tuning-reference/bottleneck-failures.html +5 -4
  194. package/public/docs/tuning-reference/bottleneck-gc.html +5 -4
  195. package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +5 -4
  196. package/public/docs/tuning-reference/bottleneck-memory-utilization.html +5 -4
  197. package/public/docs/tuning-reference/bottleneck-retry-waste.html +5 -4
  198. package/public/docs/tuning-reference/bottleneck-shuffle.html +5 -4
  199. package/public/docs/tuning-reference/bottleneck-skew.html +5 -4
  200. package/public/docs/tuning-reference/bottleneck-slow-host.html +5 -4
  201. package/public/docs/tuning-reference/bottleneck-small-files.html +5 -4
  202. package/public/docs/tuning-reference/bottleneck-spill.html +5 -4
  203. package/public/docs/tuning-reference/bottleneck-straggler.html +5 -4
  204. package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +5 -4
  205. package/public/docs/tuning-reference/bottleneck-utilization.html +5 -4
  206. package/public/docs/tuning-reference/caching.html +5 -4
  207. package/public/docs/tuning-reference/cluster-config.html +5 -4
  208. package/public/docs/tuning-reference/config.html +5 -4
  209. package/public/docs/tuning-reference/data-formats.html +5 -4
  210. package/public/docs/tuning-reference/index.html +5 -4
  211. package/public/docs/tuning-reference/intro.html +5 -4
  212. package/public/docs/tuning-reference/joins.html +5 -4
  213. package/public/docs/tuning-reference/memory-model.html +5 -4
  214. package/public/docs/tuning-reference/metrics.html +5 -4
  215. package/public/docs/tuning-reference/partitioning.html +5 -4
  216. package/public/docs/tuning-reference/pyspark.html +5 -4
  217. package/public/docs/tuning-reference/shuffle.html +5 -4
  218. package/public/docs/tuning-reference/spark-architecture.html +5 -4
  219. package/public/docs/tuning-reference/table-formats.html +5 -4
  220. package/public/docs/user-guide/alternative-log-retrieval/managed-platforms.html +33 -0
  221. package/public/docs/user-guide/alternative-log-retrieval/ssh-bastion.html +30 -0
  222. package/public/docs/user-guide/alternative-log-retrieval.html +11 -7
  223. package/public/docs/user-guide/getting-started/ci-and-automation.html +51 -0
  224. package/public/docs/user-guide/getting-started/reading-the-dashboard.html +30 -0
  225. package/public/docs/user-guide/getting-started/regression-metric-keys.html +30 -0
  226. package/public/docs/user-guide/getting-started/tuning-thresholds.html +33 -0
  227. package/public/docs/user-guide/getting-started.html +7 -11
  228. package/public/docs/user-guide/mcp-tools/compare-runs.html +84 -0
  229. package/public/docs/user-guide/mcp-tools/diagnose-run.html +52 -0
  230. package/public/docs/user-guide/mcp-tools/evaluate-budgets.html +55 -0
  231. package/public/docs/user-guide/mcp-tools/get-finding-documentation.html +43 -0
  232. package/public/docs/user-guide/mcp-tools/get-finding-evidence.html +49 -0
  233. package/public/docs/user-guide/mcp-tools/get-reference-doc.html +34 -0
  234. package/public/docs/user-guide/mcp-tools/get-run-summary.html +44 -0
  235. package/public/docs/user-guide/mcp-tools/list-runs.html +41 -0
  236. package/public/docs/user-guide/mcp-tools.html +12 -126
  237. package/public/docs/user-guide/run-comparison/how-stages-are-matched.html +30 -0
  238. package/public/docs/user-guide/run-comparison.html +7 -6
  239. package/public/docs/user-guide/understanding-findings.html +7 -6
  240. package/public/export-template.html +44 -44
  241. package/public/index.html +4 -4
  242. package/vendor-core/allocation.js +106 -0
  243. package/vendor-core/analyzer.js +13 -13
  244. package/vendor-core/api-merge-writes.js +80 -0
  245. package/vendor-core/cli/budgets.js +23 -9
  246. package/vendor-core/cli/collect-run.js +11 -4
  247. package/vendor-core/cli/regression-budgets.js +83 -0
  248. package/vendor-core/comparison-output.js +49 -0
  249. package/vendor-core/comparison-verdict.js +22 -22
  250. package/vendor-core/core-source-hash.txt +1 -1
  251. package/vendor-core/delta-commands.js +13 -0
  252. package/vendor-core/delta-log-paths.js +42 -0
  253. package/vendor-core/delta-targets.js +127 -0
  254. package/vendor-core/detectors.js +202 -68
  255. package/vendor-core/docs-content/detection/cache.md +3 -2
  256. package/vendor-core/docs-content/detection/cfg.md +9 -8
  257. package/vendor-core/docs-content/detection/chrn.md +1 -2
  258. package/vendor-core/docs-content/detection/cold.md +4 -2
  259. package/vendor-core/docs-content/detection/fail.md +3 -2
  260. package/vendor-core/docs-content/detection/gc.md +3 -2
  261. package/vendor-core/docs-content/detection/host.md +2 -1
  262. package/vendor-core/docs-content/detection/local.md +1 -1
  263. package/vendor-core/docs-content/detection/mem.md +5 -2
  264. package/vendor-core/docs-content/detection/plan.md +2 -1
  265. package/vendor-core/docs-content/detection/sfail.md +2 -1
  266. package/vendor-core/docs-content/detection/shape.md +5 -4
  267. package/vendor-core/docs-content/detection/skew.md +3 -1
  268. package/vendor-core/docs-content/detection/slow.md +2 -2
  269. package/vendor-core/docs-content/detection/spec.md +2 -3
  270. package/vendor-core/docs-content/detection/spill.md +1 -1
  271. package/vendor-core/docs-site-config.js +1 -1
  272. package/vendor-core/effective-conf.js +107 -0
  273. package/vendor-core/efficiency-model.js +8 -6
  274. package/vendor-core/event-handlers.js +255 -56
  275. package/vendor-core/event-schemas.js +5 -1
  276. package/vendor-core/evidence-report.js +31 -14
  277. package/vendor-core/finding-generic-recommendation.js +20 -1
  278. package/vendor-core/finding-names.js +7 -0
  279. package/vendor-core/finding-presentation.js +61 -26
  280. package/vendor-core/finding-tag-help.js +1 -1
  281. package/vendor-core/finding-types.js +12 -0
  282. package/vendor-core/format-utils.js +4 -3
  283. package/vendor-core/impact-estimator.js +20 -2
  284. package/vendor-core/impact-format.js +14 -13
  285. package/vendor-core/impact-model.js +27 -5
  286. package/vendor-core/ingest.js +4 -2
  287. package/vendor-core/list-runs.js +5 -2
  288. package/vendor-core/mcp-server-factory.js +13 -6
  289. package/vendor-core/mcp-tools.js +43 -34
  290. package/vendor-core/model-assembler.js +23 -1
  291. package/vendor-core/parser-worker.js +1 -1
  292. package/vendor-core/plan-graph-model.js +1 -1
  293. package/vendor-core/plan-summary.js +13 -10
  294. package/vendor-core/proxy.js +3 -1
  295. package/vendor-core/python-stage.js +25 -0
  296. package/vendor-core/recommendation-rollup.js +16 -9
  297. package/vendor-core/redact.js +51 -10
  298. package/vendor-core/remediation.js +20 -0
  299. package/vendor-core/run-comparison.js +118 -140
  300. package/vendor-core/run-interpretation.js +2 -1
  301. package/vendor-core/run-metrics.js +198 -0
  302. package/vendor-core/run-output.js +26 -0
  303. package/vendor-core/run-totals.js +24 -0
  304. package/vendor-core/run-verdict.js +3 -4
  305. package/vendor-core/scorecard-estimates.js +1 -0
  306. package/vendor-core/session-snapshot.js +7 -0
  307. package/vendor-core/shs-schemas.js +2 -2
  308. package/vendor-core/spark-memory.js +17 -0
  309. package/vendor-core/stage-alignment.js +262 -0
  310. package/vendor-core/stage-identity.js +112 -0
  311. package/vendor-core/stage-plan-nodes.js +18 -0
  312. package/vendor-core/stage-quantiles.js +4 -0
  313. package/vendor-core/types.js +54 -1
  314. package/vendor-core/wasted-core-hours.js +10 -7
  315. package/vendor-core/write-target-args.js +48 -0
  316. package/vendor-core/write-targets.js +295 -0
  317. package/public/assets/AutoscalingChurn-CUSIvvab.js +0 -1
  318. package/public/assets/CacheUtilization-Ce0K6_X2.js +0 -1
  319. package/public/assets/CachingOpportunity-Cn-LmRA4.js +0 -1
  320. package/public/assets/ColdStart-BoiYzEyV.js +0 -1
  321. package/public/assets/ConfigAudit-BoJc6PAw.js +0 -1
  322. package/public/assets/CoreUsageArea-BFfXKu7K.js +0 -1
  323. package/public/assets/Dashboard-Bo_1jGqH.js +0 -2
  324. package/public/assets/DisclosureContext-LYzHroHO.js +0 -1
  325. package/public/assets/DuplicatePlanSubtree-BaAuGAoo.js +0 -1
  326. package/public/assets/ExecutorUtilization-OE6VMFkG.js +0 -1
  327. package/public/assets/GcPressure-AoL_ZNrV.js +0 -1
  328. package/public/assets/IncompleteRun-Bv6IzgsQ.js +0 -1
  329. package/public/assets/JobFailures-DF3U2z1f.js +0 -1
  330. package/public/assets/MemoryUtilization-B65OVZlq.js +0 -1
  331. package/public/assets/OverBroadcast-DXbJREDl.js +0 -1
  332. package/public/assets/PartitionSizing-DZLnjy0d.js +0 -1
  333. package/public/assets/PlanGraphRoute-C-BGmC6j.js +0 -1
  334. package/public/assets/RetryWaste-BbEPsdMw.js +0 -1
  335. package/public/assets/ShuffleIO-wZB94LS8.js +0 -1
  336. package/public/assets/Skew-SpQE7zeJ.js +0 -1
  337. package/public/assets/SlowHost-DwDBCTvr.js +0 -1
  338. package/public/assets/SmallFiles-yjY_6sT1.js +0 -1
  339. package/public/assets/SpeculationWaste-73PDmj0c.js +0 -1
  340. package/public/assets/Spill-DEw0Kd1i.js +0 -1
  341. package/public/assets/StageFailed-BEfXdEJc.js +0 -1
  342. package/public/assets/StageFindingGroup-Bzm2TY03.js +0 -1
  343. package/public/assets/StageShape-CzR4jHOt.js +0 -1
  344. package/public/assets/StageSlowness-vMPsnAaa.js +0 -1
  345. package/public/assets/Straggler-Cf__OGl5.js +0 -1
  346. package/public/assets/TaskFailures-BZ8kLZiO.js +0 -1
  347. package/public/assets/UnderBroadcast-CBm8ZPoS.js +0 -1
  348. package/public/assets/index-CEM9bz_x.js +0 -13
  349. package/public/assets/parser-worker-Q5KCPdKT.js +0 -122
  350. package/public/assets/useRecentFiles-BrBl-AP1.js +0 -11
  351. package/public/docs/assets/chunks/@localSearchIndexroot.DbZy5EtM.js +0 -1
  352. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.VTcYTH4d.js +0 -1
  353. package/public/docs/assets/contributor-guide_architecture_board-widgets.md.VTcYTH4d.lean.js +0 -1
  354. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CsqZHz_T.js +0 -1
  355. package/public/docs/assets/contributor-guide_architecture_detector-contract.md.CsqZHz_T.lean.js +0 -1
  356. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CFNCE8JB.js +0 -1
  357. package/public/docs/assets/contributor-guide_architecture_drill-down.md.CFNCE8JB.lean.js +0 -1
  358. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.HT9IJGIl.js +0 -1
  359. package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.HT9IJGIl.lean.js +0 -1
  360. package/public/docs/assets/contributor-guide_architecture_index.md.3TO9ic6w.js +0 -1
  361. package/public/docs/assets/contributor-guide_architecture_index.md.3TO9ic6w.lean.js +0 -1
  362. package/public/docs/assets/contributor-guide_architecture_overview.md.CTEqVeV4.js +0 -1
  363. package/public/docs/assets/contributor-guide_architecture_overview.md.CTEqVeV4.lean.js +0 -1
  364. package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DOTVHjTV.js +0 -1
  365. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BmpARZve.js +0 -1
  366. package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BmpARZve.lean.js +0 -1
  367. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.21pTYhFF.js +0 -6
  368. package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.21pTYhFF.lean.js +0 -1
  369. package/public/docs/assets/contributor-guide_contributing.md.B2E9ni79.js +0 -1
  370. package/public/docs/assets/contributor-guide_development-setup.md.CjgZJwjK.js +0 -15
  371. package/public/docs/assets/contributor-guide_development-setup.md.CjgZJwjK.lean.js +0 -1
  372. package/public/docs/assets/contributor-guide_testing.md.DTwhpoN2.js +0 -1
  373. package/public/docs/assets/user-guide_alternative-log-retrieval.md.ZHPSbBkF.js +0 -1
  374. package/public/docs/assets/user-guide_alternative-log-retrieval.md.ZHPSbBkF.lean.js +0 -1
  375. package/public/docs/assets/user-guide_getting-started.md.CEa2ZX-l.js +0 -6
  376. package/public/docs/assets/user-guide_getting-started.md.CEa2ZX-l.lean.js +0 -1
  377. package/public/docs/assets/user-guide_mcp-tools.md.dQwIvdTF.js +0 -131
  378. package/public/docs/assets/user-guide_mcp-tools.md.dQwIvdTF.lean.js +0 -1
  379. package/public/docs/assets/user-guide_run-comparison.md.ChLI3MK0.js +0 -1
  380. package/public/docs/assets/user-guide_run-comparison.md.ChLI3MK0.lean.js +0 -1
  381. package/public/docs/assets/user-guide_understanding-findings.md.D1ccs60C.js +0 -1
  382. /package/public/docs/assets/{user-guide_understanding-findings.md.D1ccs60C.lean.js → user-guide_understanding-findings.md.Dqt2H_C1.lean.js} +0 -0
@@ -0,0 +1,11 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{E as t,M as n,c as r,d as i,g as a,h as o,l as s,m as c,u as l}from"./charts-vendor-0VMaLVLN.js";import{$ as u,B as d,F as f,G as p,H as m,I as h,J as g,K as _,L as v,M as y,N as b,P as x,Q as S,R as C,U as w,V as T,W as E,X as D,Y as O,Z as k,q as A,z as j}from"./react-vendor-DEdfrRTJ.js";import{D as M,Et as N,F as P,L as F,M as ee,N as I,P as te,Tt as L,U as R,X as z,Y as ne,Z as B,_t as V,a as re,b as ie,bt as ae,d as oe,f as se,gt as ce,h as le,ht as ue,i as de,lt as fe,mt as pe,n as me,nt as he,o as ge,p as _e,r as ve,u as ye,ut as be,vt as xe,yt as H}from"./DisclosureContext-B0siMVdg.js";import{p as Se}from"./plan-graph-vendor-BYl-AzN5.js";import{$ as Ce,B as we,Ct as Te,Et as Ee,F as De,G as Oe,H as ke,I as Ae,J as je,K as Me,L as Ne,M as Pe,N as Fe,P as Ie,Q as Le,R as Re,S as ze,Tt as U,U as Be,V as Ve,W as He,X as Ue,Y as We,Z as Ge,_ as Ke,_t as qe,a as Je,at as Ye,bt as Xe,c as Ze,ct as Qe,d as $e,dt as et,et as tt,f as nt,g as rt,gt as it,h as at,ht as ot,i as st,it as ct,lt,m as ut,mt as dt,n as ft,nt as pt,o as mt,ot as ht,p as gt,q as _t,r as vt,s as yt,st as bt,t as xt,tt as St,ut as Ct,v as wt,vt as Tt,wt as Et,y as Dt}from"./index-DCeWge12.js";var Ot={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};Ot.node;var kt=V(Ot),At={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};At.node;var jt=V(At),Mt={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`}]]};Mt.node;var Nt=V(Mt),Pt={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`]};Pt.node;var Ft=V(Pt),It={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`]};It.node;var Lt=V(It),Rt={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`}]]};Rt.node;var zt=V(Rt),W=e(n(),1),G=Se();function Bt({className:e,orientation:t=`horizontal`,...n}){return(0,G.jsx)(_,{"data-slot":`tabs`,"data-orientation":t,className:L(`group/tabs flex gap-2 data-horizontal:flex-col`,e),...n})}var Vt=N(`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 Ht({className:e,variant:t=`default`,...n}){return(0,G.jsx)(w,{"data-slot":`tabs-list`,"data-variant":t,className:L(Vt({variant:t}),e),...n})}function Ut({className:e,...t}){return(0,G.jsx)(p,{"data-slot":`tabs-trigger`,className:L(`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 Wt({className:e,...t}){return(0,G.jsx)(E,{"data-slot":`tabs-content`,className:L(`flex-1 text-sm outline-none`,e),...t})}var Gt={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 Kt(e){return Gt[e]}var qt={revealRequest:0,evidenceCardOpen:!0,setEvidenceCardOpen:()=>{},revealEvidence:()=>{},registerRow:()=>{}},Jt=(0,W.createContext)(null);function Yt({children:e}){let[t,n]=(0,W.useState)(!1),r=(0,W.useRef)(null),[i,a]=(0,W.useState)(0),o=(0,W.useRef)(new Map),s=(0,W.useCallback)((e,t)=>{t?o.current.set(e,t):o.current.delete(e)},[]),c=(0,W.useCallback)(e=>{r.current=e,n(!0),a(e=>e+1)},[]);(0,W.useLayoutEffect)(()=>{let e=r.current;e&&i!==0&&queueMicrotask(()=>{o.current.get(e)?.focus()})},[i]);let l=(0,W.useMemo)(()=>({revealRequest:i,evidenceCardOpen:t,setEvidenceCardOpen:n,revealEvidence:c,registerRow:s}),[i,t,c,s]);return(0,G.jsx)(Jt.Provider,{value:l,children:e})}function Xt(){return(0,W.useContext)(Jt)??qt}function Zt(){let{revealEvidence:e}=Xt();return{revealEvidence:e}}function Qt(){let{revealRequest:e,evidenceCardOpen:t,setEvidenceCardOpen:n}=Xt();return{revealRequest:e,evidenceCardOpen:t,setEvidenceCardOpen:n}}function $t(){let{registerRow:e}=Xt();return e}function en({...e}){return(0,G.jsx)(h,{"data-slot":`dropdown-menu`,...e})}function tn({...e}){return(0,G.jsx)(f,{"data-slot":`dropdown-menu-trigger`,...e})}function nn({align:e=`start`,alignOffset:t=0,side:n=`bottom`,sideOffset:r=4,className:i,...a}){return(0,G.jsx)(C,{children:(0,G.jsx)(v,{className:`isolate z-50 outline-none`,align:e,alignOffset:t,side:n,sideOffset:r,children:(0,G.jsx)(j,{"data-slot":`dropdown-menu-content`,className:L(`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 K({className:e,inset:t,variant:n=`default`,...r}){return(0,G.jsx)(d,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:L(`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 rn({className:e,children:t,checked:n,inset:r,...i}){return(0,G.jsxs)(m,{"data-slot":`dropdown-menu-checkbox-item`,"data-inset":r,className:L(`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,G.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex items-center justify-center`,"data-slot":`dropdown-menu-checkbox-item-indicator`,children:(0,G.jsx)(T,{children:(0,G.jsx)(kt,{})})}),t]})}function an({className:e,...t}){return(0,G.jsx)(x,{"data-slot":`dropdown-menu-separator`,className:L(`-mx-1 my-1 h-px bg-border`,e),...t})}function on({className:e,type:t,...n}){return(0,G.jsx)(b,{type:t,"data-slot":`input`,className:L(`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 sn=N(`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 cn({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,G.jsx)(y,{"data-slot":`toggle`,className:L(sn({variant:t,size:n,className:e})),...r})}var ln={light:``,dark:`.dark`},un={width:320,height:200},dn=W.createContext(null);function fn({id:e,className:n,children:r,config:i,initialDimension:a=un,...o}){let s=W.useId(),c=`chart-${e??s.replace(/:/g,``)}`;return(0,G.jsx)(dn.Provider,{value:{config:i},children:(0,G.jsxs)(`div`,{"data-slot":`chart`,"data-chart":c,className:L(`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,G.jsx)(pn,{id:c,config:i}),(0,G.jsx)(t,{initialDimension:a,children:r})]})})}var pn=({id:e,config:t})=>{let n=Object.entries(t).filter(([,e])=>e.theme??e.color);return n.length?(0,G.jsx)(`style`,{dangerouslySetInnerHTML:{__html:Object.entries(ln).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 mn(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 hn=`(prefers-reduced-motion: reduce)`;function gn(e){if(typeof window>`u`||!window.matchMedia)return()=>{};let t=window.matchMedia(hn);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function _n(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(hn).matches}function vn(){return(0,W.useSyncExternalStore)(gn,_n,()=>!1)}var yn={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)`},bn=`var(--color-popover-foreground)`,xn={background:`var(--color-popover)`,border:`1px solid var(--color-border)`,borderRadius:6,color:bn,fontSize:12,padding:`6px 10px`},Sn={contentStyle:xn,labelStyle:{color:bn,fontWeight:600},itemStyle:{color:bn}};function Cn(e,t){return[e,...t].map(e=>e.join(` `)).join(`
8
+ `)}function wn({caption:e,columns:t,rows:n,align:r}){let[i,a]=(0,W.useState)(!1),[o,s]=(0,W.useState)(!1);async function c(){try{await mn(Cn(t,n)),s(!0),setTimeout(()=>s(!1),1500)}catch{}}return(0,G.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,G.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,G.jsx)(`button`,{type:`button`,className:`cursor-pointer text-muted-foreground text-xs underline`,"aria-expanded":i,onClick:()=>a(e=>!e),children:`▤ Table`}),(0,G.jsx)(`button`,{type:`button`,className:`cursor-pointer text-muted-foreground text-xs underline`,onClick:c,children:`⧉ Copy`}),(0,G.jsx)(`span`,{"aria-live":`polite`,className:`text-xs text-muted-foreground`,children:o?`Copied`:``})]}),(0,G.jsxs)(Pe,{className:i?void 0:`sr-only`,children:[(0,G.jsx)(Ie,{className:`sr-only`,children:e}),(0,G.jsx)(Ne,{children:(0,G.jsx)(Re,{children:t.map((e,t)=>(0,G.jsx)(Ae,{className:r?.[t]===`right`?`text-right`:void 0,children:e},e))})}),(0,G.jsx)(Fe,{children:n.map((e,t)=>(0,G.jsx)(Re,{children:e.map((e,t)=>(0,G.jsx)(De,{className:r?.[t]===`right`?`text-right`:void 0,children:e},t))},t))})]})]})}var Tn=new Set([l,s,i,a,o,c,r]);function En(e){if(!(0,W.isValidElement)(e))return e;let{children:t,isAnimationActive:n}=e.props,r=t==null?t:W.Children.map(t,En),i=Tn.has(e.type)&&n===void 0;return!i&&r===t?e:(0,W.cloneElement)(e,i?{isAnimationActive:!1}:{},...t==null?[]:[r])}function Dn({title:e,ariaLabel:t,height:n,children:r,table:i}){let a=vn()?En(r):r,o=me();return(0,G.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[e?(0,G.jsx)(`p`,{className:`text-muted-foreground text-xs font-medium`,children:e}):null,o?(0,G.jsx)(fn,{role:`img`,"aria-label":t,config:{},className:`aspect-auto w-full`,style:{height:n},initialDimension:{width:320,height:n},children:a}):(0,G.jsx)(`div`,{style:{height:n},"aria-hidden":!0}),i?(0,G.jsx)(wn,{...i}):null]})}function On(e){let t=(0,W.useId)(),[n,r]=(0,W.useState)(!1);return e?{tooltipProps:{title:e,"aria-describedby":t,onFocus:()=>r(!0),onBlur:()=>r(!1)},srOnlyTooltip:(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(`span`,{id:t,className:`sr-only`,children:e}),n?(0,G.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 kn({confidence:e,validationRequired:t,evidenceKey:n}){let{tooltipProps:r,srOnlyTooltip:i}=On(t),{revealEvidence:a}=Zt(),o=!!e&&e!==`high`,s=!!n;return!o&&!s?null:(0,G.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,G.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,G.jsx)(`span`,{"aria-hidden":`true`,className:`opacity-60`,children:`·`}):null,s?(0,G.jsx)(`button`,{type:`button`,"aria-label":`Evidence: ${Kt(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:Kt(n)}):null]})}function An(e,t){return e.filter(e=>e.type===t)}function jn(e){return`stageIds`in e?e.stageIds:void 0}function Mn({title:e,children:t,defaultOpen:n=!1}){let[r,i]=(0,W.useState)(n);return(0,G.jsxs)(ve,{open:r,onOpenChange:i,className:`space-y-2`,children:[(0,G.jsxs)(re,{"aria-expanded":String(r),className:`tap-target-comfortable tap-target-comfortable--sm flex cursor-pointer items-center gap-2 bg-transparent text-left`,children:[(0,G.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}),r?(0,G.jsx)(ue,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,G.jsx)(ce,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]}),(0,G.jsx)(de,{keepMounted:!0,children:t})]})}function Nn({...e}){return(0,G.jsx)(g,{"data-slot":`dialog`,...e})}function Pn({...e}){return(0,G.jsx)(O,{"data-slot":`dialog-portal`,...e})}function Fn({className:e,...t}){return(0,G.jsx)(u,{"data-slot":`dialog-overlay`,className:L(`fixed inset-0 isolate z-50 bg-(--overlay-scrim) duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0 motion-reduce:animate-none`,e),...t})}function In({className:e,children:t,showCloseButton:n=!0,...r}){return(0,G.jsxs)(Pn,{children:[(0,G.jsx)(Fn,{}),(0,G.jsxs)(D,{"data-slot":`dialog-content`,className:L(`fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,e),...r,children:[t,n&&(0,G.jsxs)(S,{"data-slot":`dialog-close`,render:(0,G.jsx)(U,{variant:`ghost`,className:`absolute top-2 right-2`,size:`icon-sm`}),children:[(0,G.jsx)(ot,{}),(0,G.jsx)(`span`,{className:`sr-only`,children:`Close`})]})]})]})}function Ln({className:e,...t}){return(0,G.jsx)(`div`,{"data-slot":`dialog-header`,className:L(`flex flex-col gap-2`,e),...t})}function Rn({className:e,showCloseButton:t=!1,children:n,...r}){return(0,G.jsxs)(`div`,{"data-slot":`dialog-footer`,className:L(`-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end`,e),...r,children:[n,t&&(0,G.jsx)(S,{render:(0,G.jsx)(U,{variant:`outline`}),children:`Close`})]})}function zn({className:e,...t}){return(0,G.jsx)(A,{"data-slot":`dialog-title`,className:L(`font-heading text-base leading-none font-medium`,e),...t})}function Bn({className:e,...t}){return(0,G.jsx)(k,{"data-slot":`dialog-description`,className:L(`text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground`,e),...t})}function Vn({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,G.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,G.jsxs)(W.Fragment,{children:[(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,G.jsx)(`span`,{className:`break-words`,children:t})]},n))});return r&&e?(0,G.jsx)(Mn,{title:e,defaultOpen:i,children:(0,G.jsxs)(`div`,{className:`space-y-2`,children:[o,n]})}):(0,G.jsxs)(`section`,{className:`space-y-2`,children:[e?(0,G.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}):null,o,n]})}function Hn(e){return String(e).replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}function Un(e,{title:t=`plan`}={}){if(!e)return``;let n=[`digraph "${Hn(t)}" {`,` rankdir=BT;`,` node [shape=box];`],r=new WeakMap,i=[],a=0;return dt(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="${Hn(s)}"];`),t&&i.push(` ${r.get(t)} -> ${o};`)},{dedupe:!0}),[...n,...i,`}`].join(`
9
+ `)}var Wn=`Derived from best-effort plan-text parsing: cross-check against the Summary tab before acting.`,Gn=`Derived from best-effort plan-text parsing: cross-check against the Tree tab before acting.`,Kn=`Derived from best-effort plan-text parsing: cross-check against the Tree tab or View plan graph before acting.`;function qn(e){try{return ct(e)}catch{return null}}function Jn(e){try{return Ye(e)}catch{return null}}function Yn(e,t){try{return Un(e,{title:`stage-${t}`})||null}catch{return null}}function Xn(e,t,n,r){if(!n||r==null)return null;try{return ht(e,t,n,r)}catch{return null}}function Zn(e,t){let n=t.stages.get(e);return(n?.sqlExecutionId==null?null:t.sql.get(n.sqlExecutionId))?.planTree??null}function Qn(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 $n({rows:e}){let[t,n]=(0,W.useState)(!1);return(0,G.jsxs)(`details`,{className:`pt-1 pl-4`,onToggle:e=>n(e.currentTarget.open),children:[(0,G.jsx)(`summary`,{className:`cursor-pointer text-xs text-muted-foreground`,children:`full detail`}),t?(0,G.jsx)(`div`,{className:`pt-1`,children:(0,G.jsx)(Vn,{rows:e})}):null]})}function er({node:e,depth:t,durationMap:n}){let r=(0,W.useRef)(null),[i,a]=(0,W.useState)(t<=1);(0,W.useEffect)(()=>{r.current&&(r.current.open=t<=1)},[]);let o=bt(e.name),s=e.detail??``,c=qn(e),l=c?Qn(c):[],u=l.some(Boolean),d=c?.kind===`scan`?``:Ct(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?lt(m):``,g=(f??e).children??[],_=g.length>0||m.length>0||u;return(0,G.jsxs)(`details`,{ref:r,"data-op":o,className:`rounded-md`,onToggle:e=>a(e.currentTarget.open),children:[(0,G.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,G.jsx)(jt,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-muted-foreground transition-transform ${i?`rotate-90`:``}`}):(0,G.jsx)(`span`,{className:`size-3.5 shrink-0`}),(0,G.jsx)(`span`,{className:`font-medium`,children:e.name}),d?(0,G.jsx)(`span`,{title:s,className:`text-xs text-muted-foreground`,children:d}):null,c?.warning?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(oe,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:ze}),(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:c.warning.detail}),(0,G.jsx)(_e,{children:(0,G.jsx)(kn,{confidence:`low`})})]}):null,p!=null&&p>0?(0,G.jsxs)(`span`,{title:`Approximate wall-time attributed to this operator`,className:`text-xs text-muted-foreground`,children:[`~`,B(p)]}):null,h?(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:h}):null]}),m.length>0?(0,G.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,G.jsxs)(`span`,{children:[e.name,`: `,Qe(e)]},t))}):null,u?(0,G.jsx)($n,{rows:l}):null,g.length>0?(0,G.jsx)(`div`,{className:`ml-[7px] space-y-1 border-l border-border/60 pt-1 pl-3.5`,children:g.map((e,r)=>(0,G.jsx)(er,{node:e,depth:t+1,durationMap:n},r))}):null]})}function tr(e){return`${e.path||`(unknown path)`} (${e.format})`}function nr(e){let t=e.leftKeys.length||e.rightKeys.length?` on ${e.leftKeys.join(`, `)||`(none)`} / ${e.rightKeys.join(`, `)||`(none)`}`:``;return`${e.joinType}${t}`}function rr(e){let t=e.aggregations.join(`, `)||`(none)`;return e.groupByKeys.length?`${t} by ${e.groupByKeys.join(`, `)}`:t}function ir(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 ar({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?Kn:Gn;return(0,G.jsx)(Vn,{rows:[n.length>0&&[`Sources (${n.length})`,n.map(tr).join(`, `)],r.length>0&&[`Joins (${r.length})`,r.map(nr).join(`; `)],i.length>0&&[`Aggregations (${i.length})`,i.map(rr).join(`; `)],a.length>0&&[`Exchanges (${a.length})`,(0,G.jsxs)(G.Fragment,{children:[ir(a),s?(0,G.jsxs)(G.Fragment,{children:[` `,(0,G.jsx)(`span`,{className:`text-muted-foreground`,children:`— consider whether some joins/aggregations could share a partitioning scheme to avoid redundant shuffles.`}),` `,(0,G.jsx)(_e,{children:(0,G.jsx)(kn,{confidence:`low`})})]}):null]})],o.length>0&&[`Warnings (${o.length})`,(0,G.jsxs)(`span`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,G.jsx)(oe,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:`bg-plan-aggregate/8 text-plan-aggregate`}),o.map(e=>e.detail).join(`; `),(0,G.jsx)(_e,{children:(0,G.jsx)(kn,{confidence:`low`})})]})]],children:c?(0,G.jsx)(_e,{children:(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l})}):null})}function or({stageId:e,appModel:t}){let n=H(e=>e.openPlanGraph),r=Zn(e,t);if(!r)return null;let i=t.stages.get(e),a=Xn(r,t,i?.sqlExecutionId==null?null:t.sql.get(i.sqlExecutionId),i?.sqlExecutionId),o=Jn(r),s=Yn(r,e);return(0,G.jsxs)(Bt,{defaultValue:`tree`,children:[(0,G.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,G.jsxs)(Ht,{"aria-label":`Plan view`,children:[(0,G.jsx)(Ut,{value:`tree`,children:`Tree`}),(0,G.jsx)(Ut,{value:`summary`,children:`Summary`})]}),(0,G.jsx)(`div`,{className:`flex gap-2`,children:s?(0,G.jsx)(U,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>n(e),children:`View plan graph`}):null})]}),(0,G.jsx)(Wt,{value:`tree`,children:(0,G.jsxs)(`div`,{className:`space-y-2 pt-3`,children:[(0,G.jsx)(er,{node:r,depth:0,durationMap:a}),(0,G.jsx)(_e,{children:(0,G.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,G.jsx)(_e,{children:(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:Wn})}):null]})}),(0,G.jsx)(Wt,{value:`summary`,children:(0,G.jsx)(`div`,{className:`pt-3`,children:o?(0,G.jsx)(ar,{summary:o,hasPlanGraph:s!=null}):(0,G.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Plan summary couldn’t be parsed.`})})})]})}var sr=`0.1.0`;function cr(e,t,n,r,i,a){return dr({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 lr=`__sparkforensicsMap`,ur=`__sparkforensicsSet`;function dr(e){return e instanceof Map?{[lr]:[...e].map(([e,t])=>[dr(e),dr(t)])}:e instanceof Set?{[ur]:[...e].map(dr)}:Array.isArray(e)?e.map(dr):e&&typeof e==`object`?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,dr(t)])):e}function fr(e){if(Array.isArray(e))return e.map(fr);if(e&&typeof e==`object`){let t=e;return Array.isArray(t[lr])?new Map(t[lr].map(([e,t])=>[fr(e),fr(t)])):Array.isArray(t[ur])?new Set(t[ur].map(fr)):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,fr(t)]))}return e}var pr=[/\bip(?:-\d{1,3}){4}(?:\.[a-z0-9][a-z0-9-]*)*/gi,/\b(?:\d{1,3}\.){3}\d{1,3}\b/g],mr=[/\bapplication_\d{10,}_\d+\b/g];function hr(e,t){if(typeof e==`string`){for(let{patterns:n,out:r}of t)for(let t of n){let n=e.match(t);if(n)for(let e of n)r.add(e)}return}if(Array.isArray(e)){for(let n of e)hr(n,t);return}if(e&&typeof e==`object`)for(let n of Object.values(e))hr(n,t)}function gr(e,t){if(Array.isArray(e)){for(let n of e)gr(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):gr(r,t)}function _r(e){if(Array.isArray(e))return e.map(e=>_r(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`?pt(e):e):_r(r);return t}return e}var vr=new Set([`stageFailureReason`,`exception`,`failureReason`]);function yr(e){if(Array.isArray(e))return e.map(e=>yr(e));if(e&&typeof e==`object`){let t=e.type===`stageFailed`,n={};for(let[r,i]of Object.entries(e))n[r]=(vr.has(r)||t&&r===`valueText`)&&typeof i==`string`?tt:yr(i);return n}return e}function br(e){return yr(_r(e))}function xr(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 Sr(e){let t=new Set,n=new Set,r=e?.summary?.app?.id;return typeof r==`string`&&r.length>0&&t.add(r),gr(e?.findings,n),hr(e,[{patterns:pr,out:n},{patterns:mr,out:t}]),{appIds:t,hosts:n}}function Cr(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 wr(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=>wr(e,t));if(e&&typeof e==`object`){let n={};for(let[r,i]of Object.entries(e))n[r]=wr(i,t);return n}return e}function Tr(e,t){let n=[...t.appIds?Cr(t.appIds,`app`):[],...Cr(t.hosts,`host`)];return n.sort((e,t)=>t[0].length-e[0].length),wr(e,n)}function Er(e){return e.name==null?e:{...e,name:e.id??null}}function Dr(e){let t=br(e),{appIds:n,hosts:r}=Sr(t),i=Tr(t,{appIds:n,hosts:r}),a=i.summary?.app;return a?{...i,summary:{...i.summary,app:Er(a)}}:i}function Or(e){let t=br(e),n=new Set,r=new Set,i=t.app?.id;typeof i==`string`&&i.length>0&&n.add(i),gr(t.executors.added,r),gr(t.executors.removed,r),gr(t.catalog,r),gr(t.configFindings,r),xr(t.app?.config,r),hr(t,[{patterns:pr,out:r},{patterns:mr,out:n}]);let a=Tr(t,{appIds:n,hosts:r});if(!a.app)return a;let o=Er(a.app);return o.config?.[`spark.app.name`]==null?{...a,app:o}:{...a,app:{...o,config:{...o.config,"spark.app.name":o.id??``}}}}function kr(e,t,n){let r=fr(Or(dr({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 Ar=String.raw`(?:\`(?:[^\`]|\`\`)*\`|[A-Za-z0-9_$]+)`,jr=RegExp(`^${Ar}(?:\\.${Ar})*$`),Mr=new RegExp(Ar,`g`),Nr=/\.\.\.(?:\s*\d+ more fields)?/;function Pr(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===``||Nr.test(e)}function Fr(e){return jr.test(e)?(e.match(Mr)??[]).map(e=>{if(!e.startsWith("`"))return e;let t=e.slice(1,-1).replace(/``/g,"`");return/[.`]/.test(t)?e:t}).join(`.`):null}var Ir=/((?:[A-Za-z][A-Za-z0-9+.-]*:\/{1,3}|\/)[^\s,[\]()#]+?)\/_delta_log(?=[/[\],\s)]|$)/g;function Lr(e){let t=new Set,n=!1;for(let r of e){if(!r.planTree){n=!0;continue}dt(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(Ir)];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 Rr(e){let{paths:t,unreliable:n}=Lr(e),[r]=t;return!n&&t.size===1?{kind:`path`,target:r}:null}var zr=`DeltaMerge`,Br=/^(?:Delta: )?MERGE operation\b/,Vr=/\b(?:re)?writing\b/i;function Hr(e){let t=t=>t!==void 0&&/^Execute\s+MergeIntoCommand\b/.test(e.get(t)?.planTree?.name??``);return[...e.values()].filter(e=>Br.test(e.description??``)&&!t(e.rootExecutionId)).sort((e,t)=>e.id-t.id)}function Ur(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=>Vr.test(e.description??``))||(e.unclean=`no write phase`)}),t}function Wr(e){return Ur(Hr(e)).map(e=>{let t=e.members[0].id,n=e.members[e.members.length-1].id,r=e.unclean===null?Rr(e.members):null,i=t===n?`${t}`:`${t}-${n}`;return{sqlExecutionId:t,nodeId:null,command:zr,recognized:!0,kind:r?.kind??null,target:r?.target??null,outputRows:null,raw:`Delta MERGE operation, executions ${i}${e.unclean?` (${e.unclean})`:``}`}})}var Gr=[`MergeIntoCommand`,`UpdateCommand`,`DeleteCommand`,`WriteIntoDelta`,`WriteIntoDeltaCommand`,`SaveIntoDataSourceCommand`];function Kr(e){return Gr.includes(e)}function qr(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 Jr(e,t){let n=e.commandArguments,r=`${t}\nArguments: `;return n!==void 0&&n.startsWith(r)?n.slice(r.length):null}var Yr=/^`[^`]+`(?:\.`[^`]+`){1,2}$/;function Xr(e){let t=Pr(e).filter(e=>Yr.test(e.text));if(t.length!==1||!t[0].terminated)return null;let n=Fr(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 Zr(e){let t=Pr(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 Qr={fromArguments:Xr,scansTarget:!1},$r={...Qr,scansTarget:!0},ei={MergeIntoCommand:$r,UpdateCommand:$r,DeleteCommand:$r,WriteIntoDelta:Qr,WriteIntoDeltaCommand:Qr,SaveIntoDataSourceCommand:{fromArguments:e=>e.includes(`DeltaDataSource`)?Zr(e):null,scansTarget:!1}};function ti(e,t,n,r){if(!Kr(e)||n!==t.planTree)return null;let i=ei[e],a=Jr(t,e),o=a===null?null:i.fromArguments(a);return o||!i.scansTarget?o:t.rootExecutionId===t.id?Rr(r.get(t.id)??[]):null}var ni=/^\w+ DeltaTableV2\([^,\s]*,([^,\n]*),(?:Some\(CatalogTable\(\n(?:Catalog: (\S+)\n)?Database: (\S+)\nTable: (\S+)\n|None,)/,ri=/^[A-Za-z0-9_$]+$/;function ii(e){let t=ni.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=>ri.test(e)))return null;let o=`${i}.${a}`;return{kind:`table`,target:r===void 0||r===`spark_catalog`?o:`${r}.${o}`}}function ai(e){return(e.command===`AppendDataExecV1`||e.command===`OverwriteByExpressionExecV1`)&&/^\w+ \S*DeltaCatalog\$StagedDeltaTableV2@/.test(e.raw)}var oi=new Set([`Write`,`Insert`,`Save`,`Overwrite`,`Append`,`Merge`,`Update`,`Delete`,`Truncate`,`Replace`,`Drop`,`Load`,`Vacuum`,`Convert`,`Clone`,`Restore`,`Optimize`,`Alter`,`Reorg`,`Rename`,`Call`]),si=[`TableAsSelect`,`AddPartition`,`DropPartition`,`RenamePartition`,`RecoverPartitions`],ci=new Set([`WriteFiles`,`AppendColumns`,`AppendColumnsWithObject`,`MergeRows`,`StateStoreSave`,`StateStoreRestore`,`SessionWindowStateStoreSave`,`SessionWindowStateStoreRestore`,`UpdateEventTimeWatermarkColumn`]);function li(e){return e.replace(/^Execute\s+/,``).trim().replace(/Exec$/,``)}function ui(e){if(Ti(e))return!0;let t=e.split(/\s/,1)[0];return ci.has(t)||t.includes(`Join`)?!1:si.some(e=>t.includes(e))?!0:(t.match(/[A-Z][a-z0-9]*/g)??[]).some(e=>oi.has(e))}function di(e,t){let n=/^(?:Execute\s+)?(\S+)\s*([\s\S]*)$/.exec(e.trim());return!n||li(n[1])!==t?``:n[2]}function fi(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 pi(e){let t=e[0];if(!t)return null;let n=/^\[Database: ([^,\]]+), TableName: ([^,\]]+)[,\]]/.exec(t.text);if(n&&/\]$/.test(t.text)){let e=Fr(`${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=Fr(t.text);return r?{kind:`table`,target:r}:null}function mi(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 hi(e){let[,t,n]=e;if(!t?.terminated||!n||n.text===``)return null;let r=mi(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 gi(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 _i(e){return e?{kind:(e.match(Mr)?.length??0)>=3?`table`:`unqualifiedTable`,target:e}:null}function vi(e){return _i(gi(e,/\b\w*Write\(table=([^,()\s]*)([,)])?/g,Fr))}function yi(e){let[t,n]=e;return!t?.terminated||!/^[\w.$]+@[0-9a-f]+$/.test(t.text)||!n?.terminated||q(n.text)?null:_i(Fr(n.text))}function bi(e){let[t]=e,n=t?.terminated?/^delta\.`([^`]*)`$/.exec(t.text):null;return n&&!q(n[1])?{kind:`path`,target:n[1]}:null}var xi=new Set([`AppendData`,`OverwriteByExpression`,`OverwritePartitionsDynamic`,`ReplaceData`,`WriteDelta`,`WriteToDataSourceV2`,`AppendDataExecV1`,`OverwriteByExpressionExecV1`]),Si=new Set([`CreateTableAsSelect`,`AtomicCreateTableAsSelect`,`ReplaceTableAsSelect`,`AtomicReplaceTableAsSelect`]),Ci=new Set([`WriteIntoDelta`,`WriteIntoDeltaCommand`,`MergeIntoCommand`,`UpdateCommand`,`DeleteCommand`,`CreateDeltaTableCommand`,`OptimizeTableCommand`,`RestoreTableCommand`,`DeltaReorgTableCommand`]),wi={InsertIntoHadoopFsRelationCommand:fi,InsertIntoHiveTable:pi,CreateHiveTableAsSelectCommand:pi,OptimizedCreateHiveTableAsSelectCommand:pi,CreateDataSourceTableAsSelectCommand:pi,SaveIntoDataSourceCommand:hi};function Ti(e){return e in wi||xi.has(e)||Si.has(e)||Ci.has(e)}function Ei(e,t){let n=wi[e];return n?[!0,n(Pr(di(t,e)))]:xi.has(e)?[!0,ii(t)??vi(t)]:Si.has(e)?[!0,yi(Pr(di(t,e)))]:e===`MergeIntoCommand`?[!0,null]:Ci.has(e)?[!0,bi(Pr(di(t,e)))]:[!1,null]}function Di(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 Oi(e,t,n,r){dt(t,t=>{let i=li(t.name);if(!ui(i))return;let a=t.detail??``,[o,s]=Ei(i,a),c=s??ti(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:Di(t),raw:a===``?t.name:a})},{dedupe:!0})}function ki(e,t){for(let n of e){if(n.target!==null||!ai(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&&Si.has(e.command));i.length===1&&i[0].target!==null&&(n.kind=i[0].kind,n.target=i[0].target)}}function Ai(e,t={}){let n=[],r=new Map;for(let n of t.unreadableSqlExecutions??[])e.get(n)?.planTree||r.set(n,`unreadableStart`);let i=qr(e);for(let t of[...e.keys()].sort((e,t)=>e-t)){let a=e.get(t);a.planTree?Oi(a,a.planTree,i,n):r.set(t,r.get(t)??`noPlan`)}return ki(n,e),n.push(...Wr(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 ji={skew:[],stageShape:[`rule`],shuffle:[],partitionSizing:[`rule`],spill:[`spillMagnitude`],gc:[`direction`],slowHost:[`variant`,`host`,`hostTaskShare`,`hostMeanMs`,`dimension`,`executorId`,`execMaxValue`],stageSlowness:[],stageFailed:[`variant`,`numTasks`,`memoryBytesSpilled`,`failedTaskDetails`],failures:[`failedTasks`,`dominantReason`,`dominantError`,`failureGroups`,`otherFailedTasks`],straggler:[`unit`,`speculativeTasks`,`stragglerCount`],speculationWaste:[],retryWaste:[`numTasks`,`memoryBytesSpilled`,`retriedTaskDetails`],tinyTask:[],incompleteRun:[],coldStart:[],utilization:[`cpuUtilizationPct`],memoryUtilization:[`variant`,`rule`,`executorId`,`heap`,`dataUnavailable`],cacheUtilization:[`variant`,`rddId`,`rddName`,`memorySize`,`diskSize`,`numCachedPartitions`,`numPartitions`,`dataUnavailable`],coreLocality:[`nonLocalTaskCount`],autoscalingChurn:[`shortLivedExecutorCount`],cachingOpportunity:[`variant`,`relation`,`format`,`relations`,`operator`,`executionIds`,`totalReadBytes`],jobFailureRate:[`failedJobs`,`totalJobs`,`failedTasks`,`totalTasks`,`avgJobDurationMs`,`taskFailureRate`],configAudit:[`property`],duplicatePlanSubtree:[`executionId`,`stageIds`,`stageShares`,`occurrencesIdentical`,`rootName`,`subtreeSize`,`sampleRelation`,`groupIndex`],smallFiles:[`executionId`,`stageIds`,`fileCount`,`direction`,`nodeName`],underBroadcast:[`executionId`,`stageIds`,`largerSideBytes`],overBroadcast:[`executionId`,`stageIds`]};function Mi(e){let t=e,n={};for(let r of[...ji[e.type]].sort())t[r]!==void 0&&(n[r]=t[r]);return n}function Ni(e){let t={id:e.id??null,type:e.type,name:$e(Ze(e.type)),tag:fe(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:Mi(e),remediation:e.remediation??[],actionLabel:yt(e)};e.confidence!=null&&(t.confidence=e.confidence),e.validationRequired!=null&&(t.validationRequired=e.validationRequired),e.docAnchor!=null&&(t.docAnchor=e.docAnchor),e.impactEstimate!=null&&(t.impactEstimate=e.impactEstimate);let n=ut(e.impactEstimate);return n&&(t.impact=n.text,t.impactMeaning=n.meaning),e.tunedThresholds!=null&&(t.tunedThresholds=e.tunedThresholds),t}function Pi(e){return[...e].sort((e,t)=>{let n=(R[e.impactBand]??9)-(R[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 Fi(e,t){let n=e.filter(I);return ee(n,t).map(e=>{let t=P(e.findings),n=t[0],r=t.map(e=>e.id).filter(e=>e!=null),i={type:e.type,tag:fe(e.type),actionLabel:yt(n),findingCount:e.findingCount,findingIds:r};if(e.kind===`time`)return{...i,kind:`time`,stageCount:e.stageCount,recoverableMsHigh:e.recoverableMsHigh,impact:he(e.recoverableMsHigh,e.recoverableMsHigh),impactMeaning:`of run time`};if(e.kind===`resource`){let t=F(e);return{...i,kind:`resource`,unit:e.unit,total:e.total,impact:t,impactMeaning:t?rt(n.impactEstimate?.rawWaste):null}}return{...i,kind:`count`,byImpactBand:e.byImpactBand,impact:null,impactMeaning:null}})}function Ii(e,t,n){let r=new Set(e.filter(te).map(e=>e.type)),i=Ve(t,e),a=[],o=[];for(let[e,{thresholdSummary:t}]of Object.entries(wt())){if(r.has(e))continue;let s=Ce(e,n),c=s?{type:e,tag:fe(e),thresholdSummary:Dt(e,n),tunedThresholds:s}:{type:e,tag:fe(e),thresholdSummary:t},l=i.notRunReason(e);l?o.push({...c,reason:l}):a.push(c)}return{cleanChecks:a,notRunChecks:o}}function Li(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 Ri(e){return{title:e.title,summary:e.summary,steps:e.shown.map(t=>{let n=vt(t,e.outcome);return{key:t.key,stageId:t.stageId,type:t.lead.type,tag:fe(t.lead.type),leadFindingId:t.lead.id??null,actionLabel:yt(t.lead),recommendation:n,impact:at(t.lead),impactMeaning:Ke(t.lead),relatedTypes:t.related.map(e=>e.type),text:st(t.lead,n,t.stageId)}}),remainingPlaces:e.remaining,copyText:e.copyText}}var zi={},Bi=new WeakMap,Vi=new WeakMap;function Hi(e,t){let n=t??zi,r=e.get(n);return r||(r=new WeakMap,e.set(n,r)),r}var Ui=new WeakMap;function Wi(e,t){let n=Hi(Ui,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:_t(i,a,o?.added??[],o?.removed??[],c??new Map,s??new Map,l??null,{thresholds:t}),config:je(i)};return n.set(e,u),u}function Gi(e,t){let n=Hi(Vi,t),r=n.get(e);if(r)return r;let{catalog:i,config:a}=Wi(e,t),o=kr(e,i,a),s=Dr(Ki(o.appModel,t,{catalog:o.catalog,config:o.configFindings}));return n.set(e,s),s}function Ki(e,t,n){let r=Hi(Bi,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??Wi(e,t),p=[...d,...f],m=Pi(p.map(Ni)),h=Fi(p,o??new Map),{cleanChecks:g,notRunChecks:_}=Ii(p,o??new Map,t),v=Ge(t),y=p.filter(I),b={...e,stages:o??new Map,jobs:l??new Map,executors:s??{added:[],removed:[]}},x=ft(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:Li(m),actionableFindingCount:y.length,actionableImpactBandCounts:Li(y),clean:ke({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:nt(b),...v?{tunedThresholds:v}:{}},verdict:Ri(x),evidenceAvailability:u??null,detectors:Ue(t),findings:m,writeTargets:Ai(c??new Map,{skippedLines:e.skippedLines,unreadableSqlExecutions:e.unreadableSqlExecutions}),recommendations:h,cleanChecks:g,notRunChecks:_};return r.set(e,C),C}function qi(e,t){return typeof t==`number`&&/bytes$/i.test(e)?ne(t):typeof t==`object`&&t?JSON.stringify(t):String(t)}function Ji(e){let t=[` - failureGroups: ${e.length}`];for(let n of e)if(t.push(` - ${n.count} task(s): ${St(n)}`),n.stackExcerpt){t.push(``);for(let e of n.stackExcerpt.split(`
10
+ `))t.push(` ${e}`);t.push(``)}return t}function Yi(e){let t=ut(e);return t?`${t.text}${t.meaning?` ${t.meaning}`:``} (estimateMethod: ${e.estimateMethod})`:null}function Xi(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 Zi(e){let t=[];if(e.wallClockMs!=null&&t.push(`- Wall-clock: ${B(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: ${z(e.peakBusyCores)}`),e.etlPhasesMs){let{extract:n,transform:r,load:i}=e.etlPhasesMs;t.push(`- ETL phases (summed stage time): extract ${B(n)}, transform ${B(r)}, load ${B(i)}`)}return t}function Qi(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(Ze).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 $i(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: ${Le(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=Xi(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(...Zi(n.runShape)),u.push(``),u.push(...Qi(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: ${We(e.tunedThresholds)}`);let n=e.impactEstimate?Yi(e.impactEstimate):null;n&&u.push(`- impact: ${n}`);let r=e.impactEstimate?gt(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(...Ji(t)):u.push(` - ${e}: ${qi(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: ${We(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: ${We(e.tunedThresholds)})`:``;u.push(`- [${e.tag}] ${e.type}: ${e.thresholdSummary}${t}`)}u.push(``)}return u.join(`
11
+ `)}function ea(e,t){let n=`stageIds`in e.evidence?e.evidence.stageIds:null;return Je({...e,stageId:mt({stageId:e.stageId,stageIds:n})},t)}function ta(e,{redact:t=!1,markdown:n=!0,findingsFilter:r,thresholds:i}={}){let a=t?Gi(e,i):Ki(e,i),o=a.findings.some(e=>e.type===`incompleteRun`);return r&&(a={...a,findings:a.findings.filter(e=>ea(e,r))}),{markdown:n?$i(a,o):``,json:a}}var J=Uint8Array,Y=Uint16Array,na=Int32Array,ra=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]),ia=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]),aa=new J([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),oa=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 na(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}},sa=oa(ra,2),ca=sa.b,la=sa.r;ca[28]=258,la[258]=28;var ua=oa(ia,0);ua.b;for(var da=ua.r,fa=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,fa[X]=((Z&65280)>>8|(Z&255)<<8)>>1}for(var pa=(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[fa[d]>>c]=l}else for(s=new Y(r),i=0;i<r;++i)e[i]&&(s[i]=fa[o[e[i]-1]++]>>15-e[i]);return s}),ma=new J(288),X=0;X<144;++X)ma[X]=8;for(var X=144;X<256;++X)ma[X]=9;for(var X=256;X<280;++X)ma[X]=7;for(var X=280;X<288;++X)ma[X]=8;for(var ha=new J(32),X=0;X<32;++X)ha[X]=5;var ga=pa(ma,9,0),_a=pa(ha,5,0),va=function(e){return(e+7)/8|0},ya=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},ba=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},xa=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:Oa,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=Sa(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}},Sa=function(e,t,n){return e.s==-1?Math.max(Sa(e.l,t,n+1),Sa(e.r,t,n+1)):t[e.s]=n},Ca=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}},wa=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},Ta=function(e,t,n){var r=n.length,i=va(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},Ea=function(e,t,n,r,i,a,o,s,c,l,u){Q(t,u++,n),++i[256];for(var d=xa(i,15),f=d.t,p=d.l,m=xa(a,15),h=m.t,g=m.l,_=Ca(f),v=_.c,y=_.n,b=Ca(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=xa(C,7),E=T.t,D=T.l,O=19;O>4&&!E[aa[O-1]];--O);var k=l+5<<3,A=wa(i,ma)+wa(a,ha)+o,j=wa(i,f)+wa(a,h)+o+14+3*O+wa(C,E)+2*C[16]+3*C[17]+7*C[18];if(c>=0&&k<=A&&k<=j)return Ta(t,u,e.subarray(c,c+l));var M,N,P,F;if(Q(t,u,1+(j<A)),u+=2,j<A){M=pa(f,p,0),N=f,P=pa(h,g,0),F=h;var ee=pa(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[aa[w]]);u+=3*O;for(var I=[v,x],te=0;te<2;++te)for(var L=I[te],w=0;w<L.length;++w){var R=L[w]&31;Q(t,u,ee[R]),u+=E[R],R>15&&(Q(t,u,L[w]>>5&127),u+=L[w]>>12)}}else M=ga,N=ma,P=_a,F=ha;for(var w=0;w<s;++w){var z=r[w];if(z>255){var R=z>>18&31;ba(t,u,M[R+257]),u+=N[R+257],R>7&&(Q(t,u,z>>23&31),u+=ra[R]);var ne=z&31;ba(t,u,P[ne]),u+=F[ne],ne>3&&(ba(t,u,z>>5&8191),u+=ia[ne])}else ba(t,u,M[z]),u+=N[z]}return ba(t,u,M[256]),u+N[256]},Da=new na([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),Oa=new J(0),ka=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=Da[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 na(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=Ea(e,c,0,b,x,S,w,E,O,T-O,u),E=C=w=0,O=T;for(var N=0;N<286;++N)x[N]=0;for(var N=0;N<30;++N)S[N]=0}var P=2,F=0,ee=p,I=A-j&32767;if(M>2&&k==y(T-I))for(var te=Math.min(f,M)-1,L=Math.min(32767,T),R=Math.min(258,M);I<=L&&--ee&&A!=j;){if(e[T+P]==e[T+P-I]){for(var z=0;z<R&&e[T+z]==e[T+z-I];++z);if(z>P){if(P=z,F=I,z>te)break;for(var ne=Math.min(I,z-2),B=0,N=0;N<ne;++N){var V=T-I+N&32767,re=V-h[V]&32767;re>B&&(B=re,j=V)}}}A=j,j=h[A],I+=A-j&32767}if(F){b[E++]=268435456|la[P]<<18|da[F];var ie=la[P]&31,ae=da[F]&31;w+=ra[ie]+ia[ae],++x[257+ie],++S[ae],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=Ea(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 oe=T+65535;oe>=o&&(c[u/8|0]=l,oe=o),u=Ta(c,u+1,e.subarray(T,oe))}a.i=o}return ya(s,0,r+va(u)+i)},Aa=(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})(),ja=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=Aa[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},Ma=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 ka(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)},Na=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},Pa=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&&Na(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)}},Fa=function(e){return 10+(e.filename?e.filename.length+1:0)};function Ia(e,t){t||={};var n=ja(),r=e.length;n.p(e);var i=Ma(e,t,Fa(t),8),a=i.length;return Pa(i,t),Na(i,a-8,n.d()),Na(i,a-4,r),i}var La=typeof TextEncoder<`u`&&new TextEncoder,Ra=typeof TextDecoder<`u`&&new TextDecoder;try{Ra.decode(Oa,{stream:!0})}catch{}function za(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(La)return La.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 ya(a,0,o)}function Ba(e,t,n,{redact:r,buildId:i,producer:a}){let o={appModel:e,catalog:t,configFindings:je(e.app)},s=r?kr(o.appModel,o.catalog,o.configFindings):o,c=xt(s.appModel,s.catalog,s.configFindings),l={coreVersion:sr,buildId:i,producer:a};return cr(s.appModel,s.catalog,s.configFindings,n,c,l)}var Va=32768;function Ha(e){let t=``;for(let n=0;n<e.length;n+=Va)t+=String.fromCharCode(...e.subarray(n,n+Va));return btoa(t)}function Ua(e){return Ha(Ia(za(JSON.stringify(e))))}var Wa=`__SPARKFORENSICS_RUN_GZ__`;function Ga(e){return`window.${Wa} = "${e}";`}var Ka=`export-template.html`,qa=`<script src="./data.js"><\/script>`;function Ja(e,t){let n=e.indexOf(qa);if(n===-1||e.indexOf(qa,n+1)!==-1)throw Error(`The HTML export template is missing or malformed in this build.`);let r=`<script>${Ga(t)}<\/script>`;return e.slice(0,n)+r+e.slice(n+33)}var Ya=`6e0ac29f74ae092b14c5700dfa86d3273fce7d1af59005c6e2e450a91da92d5e`,Xa=`sparkforensics-web 0.27.0`,Za={markdown:`md`,json:`json`,html:`html`};function Qa(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 $a(e,t,n){return`evidence-${String(e??`report`).replace(/[^\w.-]/g,`_`)}${n?`-redacted`:``}.${Za[t]}`}async function eo(){let e=await fetch(Ka);if(!e.ok)throw Error(`The HTML export template could not be loaded (HTTP ${e.status}).`);return e.text()}function to(){let e=H(e=>e.appModel),t=H(e=>e.catalog),n=H(e=>e.skippedLines),[r,i]=(0,W.useState)(!1),a=async()=>{try{let i=Ba(e,t,n,{redact:r,buildId:Ya,producer:Xa});Qa(Ja(await eo(),Ua(i)),$a(i.app?.id??null,`html`,r),`text/html`)}catch(e){console.error(`HTML export failed`,e),Te.error(`HTML export failed`,{description:e instanceof Error?e.message:String(e)})}},o=t=>{try{let{markdown:n,json:i}=ta(e,{redact:r}),a=$a(i.summary?.app?.id??null,t,r);t===`json`?Qa(`${JSON.stringify(i,null,2)}\n`,a,`application/json`):Qa(`${n}\n`,a,`text/markdown`)}catch(e){console.error(`Evidence export failed`,e),Te.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 no({redact:e,setRedact:t,download:n}){return(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(rn,{checked:e,onClick:e=>e.preventDefault(),onCheckedChange:e=>t(!!e),children:`Redact identifiers`}),(0,G.jsx)(an,{}),(0,G.jsx)(K,{onClick:()=>n(`markdown`),children:`Download Markdown`}),(0,G.jsx)(K,{onClick:()=>n(`json`),children:`Download JSON`}),(0,G.jsx)(K,{onClick:()=>n(`html`),children:`Download HTML dashboard`})]})}function ro(){let e=to();return(0,G.jsxs)(en,{children:[(0,G.jsxs)(tn,{render:(0,G.jsx)(U,{variant:`ghost`,size:`sm`}),children:[(0,G.jsx)(Nt,{"aria-hidden":`true`}),`Export evidence`]}),(0,G.jsx)(nn,{align:`end`,children:(0,G.jsx)(no,{...e})})]})}function io({activeName:e,activeSub:t,activeId:n=null,entries:r,onPick:i,onRemove:a,onOpenNew:o}){let{pickRecent:s}=Be(),c=(0,W.useCallback)(e=>{if(i){i(e);return}s(e,r.find(t=>t.id===e)?.handle)},[i,r,s]);return(0,G.jsxs)(en,{children:[(0,G.jsxs)(tn,{className:L(Ee({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,G.jsxs)(`span`,{className:`flex w-full min-w-0 items-center gap-1.5`,children:[(0,G.jsx)(`span`,{className:`min-w-0 truncate font-heading text-sm font-semibold`,children:e??`No file`}),(0,G.jsx)(ce,{"aria-hidden":`true`,className:`ml-auto shrink-0 opacity-60`})]}),t?(0,G.jsx)(`span`,{className:`w-full min-w-0 truncate text-left text-xs text-muted-foreground`,children:t}):null]}),(0,G.jsxs)(nn,{className:`w-72 p-2`,children:[(0,G.jsx)(we,{entries:r,activeId:n,onPick:c,onRemove:a}),(0,G.jsx)(an,{}),(0,G.jsx)(K,{onClick:()=>o?.(),children:`Load new file…`})]})]})}function ao({open:e,entries:t,onSelect:n,onOpenChange:r}){let[i,a]=(0,W.useState)(``),o=(0,W.useRef)(null);(0,W.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,G.jsx)(Nn,{open:e,onOpenChange:r,children:(0,G.jsxs)(In,{className:`flex max-h-[85vh] flex-col sm:max-w-xl`,children:[(0,G.jsxs)(Ln,{children:[(0,G.jsxs)(zn,{className:`flex items-center gap-1.5`,children:[(0,G.jsx)(it,{"aria-hidden":`true`,className:`size-4 text-plan-aggregate`}),`Open plan graph`]}),(0,G.jsx)(Bn,{children:`Choose which SQL execution's plan to open.`})]}),(0,G.jsx)(on,{autoFocus:!0,placeholder:`Filter executions…`,value:i,onChange:e=>a(e.target.value),onKeyDown:d}),c.length===0?(0,G.jsx)(`p`,{className:`px-1.5 py-1 text-sm text-muted-foreground`,children:`No matching executions`}):(0,G.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,G.jsx)(`li`,{children:(0,G.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,G.jsxs)(`span`,{className:`flex w-full min-w-0 items-center gap-1.5`,children:[e.impactBand!=null&&(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(ye,{impactBand:e.impactBand}),(0,G.jsxs)(`span`,{className:`shrink-0 text-xs font-normal text-muted-foreground`,children:[e.findingCount,` finding`,e.findingCount===1?``:`s`]})]}),(0,G.jsx)(`span`,{className:`truncate text-sm font-medium`,children:e.secondary})]}),(0,G.jsx)(`span`,{className:`w-full truncate text-xs text-muted-foreground`,children:e.label})]})},e.executionId))})]})})}var oo={name:`sparkforensics-web`,version:`0.27.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 so({keys:e}){return(0,G.jsx)(`span`,{className:`flex shrink-0 items-center gap-1`,children:e.map((e,t)=>(0,G.jsxs)(`span`,{className:`flex items-center gap-1`,children:[t>0?(0,G.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`or`}):null,(0,G.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,G.jsxs)(`div`,{className:`flex items-center justify-between gap-4 py-1.5`,children:[(0,G.jsx)(`span`,{className:`text-sm text-foreground`,children:t}),(0,G.jsx)(so,{keys:e})]})}function co({title:e,children:t}){return(0,G.jsxs)(`div`,{children:[(0,G.jsx)(`h3`,{className:`mb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase`,children:e}),(0,G.jsx)(`div`,{className:`divide-y divide-border/60`,children:t})]})}function lo({open:e,onOpenChange:t}){return(0,G.jsx)(Nn,{open:e,onOpenChange:t,children:(0,G.jsxs)(In,{className:`sm:max-w-md`,children:[(0,G.jsxs)(Ln,{children:[(0,G.jsx)(zn,{children:`Keyboard shortcuts`}),(0,G.jsx)(Bn,{children:`Everything below works from anywhere the board is loaded.`})]}),(0,G.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,G.jsxs)(co,{title:`Navigation`,children:[(0,G.jsx)($,{keys:[`Tab`,`Shift+Tab`],children:`Move between controls`}),(0,G.jsx)($,{keys:[`Enter`,`Space`],children:`Activate the focused control, open a stage's details, or sort a column`}),(0,G.jsx)($,{keys:[`Esc`],children:`Close the open dialog, or leave a full-page view like Plan graph`})]}),(0,G.jsxs)(co,{title:`Menus and lists`,children:[(0,G.jsx)($,{keys:[`↑`,`↓`],children:`Move between menu items or picker rows`}),(0,G.jsx)($,{keys:[`A–Z`,`0–9`],children:`Filter the Type and Stage dropdowns, and the plan execution picker, as you type`})]}),(0,G.jsxs)(co,{title:`Triage (Advanced view only)`,children:[(0,G.jsx)($,{keys:[`j`,`k`],children:`Next or previous finding, starting with the verdict's steps`}),(0,G.jsx)($,{keys:[`Enter`],children:`Show the focused finding's evidence, or expand a grouped finding`}),(0,G.jsx)($,{keys:[`f`],children:`Jump to the finding filters`}),(0,G.jsx)($,{keys:[`1`,`2`],children:`Switch to Findings or Full app report`})]}),(0,G.jsx)(co,{title:`Help`,children:(0,G.jsx)($,{keys:[`?`],children:`Open this list`})})]}),(0,G.jsxs)(`p`,{className:`text-center text-xs text-muted-foreground`,children:[`SparkForensics v`,oo.version]})]})})}var uo=`Show confidence levels, evidence, documentation links, finding filters and triage shortcuts (j/k, f, 1/2)`;function fo(){let e=ae()===`advanced`;return(0,G.jsxs)(cn,{variant:`outline`,pressed:e,onPressedChange:e=>xe.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:uo,children:[e?(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`size-1.5 shrink-0 rounded-full bg-primary`}):null,`Advanced view`]})}function po(){let e=ae()===`advanced`;return(0,G.jsx)(rn,{checked:e,onCheckedChange:e=>xe.getState().setWidgetDensity(e?`advanced`:`basic`),title:uo,children:`Advanced view`})}var mo=`docs/`;function ho(e,t){return e===`warning`?`${t} warning${t===1?``:`s`}`:`${t} ${e}`}function go(e,t){return e.stageId!=null&&t.includes(e.stageId)?!0:jn(e)?.some(e=>t.includes(e))??!1}function _o(e,t){let n=[];for(let[r,i]of e.sql){if(!i.planTree)continue;let a=et(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`?B(u-l):null,f=t.filter(e=>go(e,a)),p=be(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?R[e.impactBand]:1/0,r=t.impactBand?R[t.impactBand]:1/0;return n===r?e.executionId-t.executionId:n-r}),n}function vo({onLoadNew:e,recentEntries:t,activeFileId:n,onPickRecent:r,onRemoveRecent:i,onCompare:a,onJumpToFindings:o,sectionControls:s,leadingContent:c}){let l=H(e=>e.appModel.app),u=H(e=>e.catalog),d=H(e=>e.skippedLines),f=H(e=>e.exportMode),{theme:p,toggle:m}=Et(),h=(0,W.useRef)(null),g=H(e=>e.comparison),_=a!=null&&!s&&!f&&n!=null&&l!=null&&!g.baselineId,v=to(),y=H(e=>e.appModel),b=(0,W.useMemo)(()=>_o(y,u),[y,u]),[x,S]=(0,W.useState)(!1),[C,w]=(0,W.useState)(!1);(0,W.useEffect)(()=>{function e(e){if(e.key!==`?`)return;let t=e.target,n=t?.tagName;n===`INPUT`||n===`TEXTAREA`||t?.isContentEditable||(e.preventDefault(),w(!0))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);function T(){if(b.length!==0){if(b.length===1){xe.getState().openPlanGraph(b[0].stageId,{initialScope:`full`});return}S(!0)}}function E(e){xe.getState().openPlanGraph(e,{initialScope:`full`}),S(!1)}let D=l?.name||`Spark Application`,O=[l?.id,l?.sparkVersion?`Spark ${l.sparkVersion}`:null].filter(Boolean).join(` · `),k=ie(),A=(0,W.useMemo)(()=>le(k),[k]),j=be(A),N=j?A.filter(e=>e.impactBand===j).length:0,P=k?.data.verdict,F=P?.clean??!1,ee=P?.failed??!1;return(0,G.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,G.jsx)(`h1`,{className:`sr-only`,children:`SparkForensics`}),(0,G.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[!s&&!f?(0,G.jsx)(U,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable shrink-0`,"aria-label":`New analysis`,title:`Start a new analysis`,onClick:e,children:(0,G.jsx)(Lt,{"aria-hidden":`true`})}):null,f?(0,G.jsxs)(`div`,{className:`flex min-w-0 shrink flex-col items-start justify-center gap-0 py-1`,children:[(0,G.jsx)(`span`,{className:`min-w-0 truncate font-heading text-sm font-semibold`,children:D}),O?(0,G.jsx)(`span`,{className:`w-full min-w-0 truncate text-left text-xs text-muted-foreground`,children:O}):null]}):(0,G.jsx)(io,{activeName:D,activeSub:O,activeId:n,entries:t,onPick:r,onRemove:i,onOpenNew:e}),d>0?(0,G.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,G.jsx)(`div`,{className:`flex min-w-0 shrink-0 flex-wrap items-center gap-3 max-sm:order-3 max-sm:w-full max-sm:shrink max-sm:gap-2`,children:s}):j?o?(0,G.jsx)(`button`,{type:`button`,"aria-label":`${ho(j,N)}: show them in Findings`,title:`Show them in Findings`,onClick:()=>o(j),className:L(M(),se({impactBand:j}),`tap-target-comfortable cursor-pointer font-mono hover:underline focus-visible:outline-none`),children:ho(j,N)}):(0,G.jsx)(ge,{label:ho(j,N),impactBand:j,className:`shrink-0`}):ee?(0,G.jsx)(ge,{label:`Run failed`,impactBand:`critical`,className:`shrink-0`}):F?(0,G.jsxs)(`span`,{className:L(`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,G.jsx)(`span`,{"aria-hidden":`true`,className:`inline-block size-2 shrink-0 rounded-full bg-clean`}),`No findings`]}):(0,G.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,G.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[!s&&g.baselineId&&!g.active?(0,G.jsx)(U,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>xe.getState().setComparisonActive(!0),children:`← Back to comparison`}):null,(0,G.jsxs)(`div`,{className:`hidden items-center gap-1 sm:flex`,children:[_?(0,G.jsxs)(U,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,"aria-label":`Compare with another run`,title:`Compare with another run`,onClick:a,children:[(0,G.jsx)(Xe,{"aria-hidden":`true`}),(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`xl:hidden`,children:`Compare`}),(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`hidden xl:inline`,children:`Compare with another run`})]}):null,!s&&!f?(0,G.jsx)(ro,{}):null,!s&&b.length>0?(0,G.jsxs)(U,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:T,children:[(0,G.jsx)(it,{"aria-hidden":`true`,className:`text-plan-aggregate`}),`Plan graph`]}):null,s?null:(0,G.jsx)(fo,{}),f?null:(0,G.jsx)(U,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Docs`,title:`Read the docs`,nativeButton:!1,render:(0,G.jsx)(`a`,{href:mo,target:`_blank`,rel:`noopener noreferrer`}),children:(0,G.jsx)(pe,{"aria-hidden":`true`})}),(0,G.jsx)(U,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Keyboard shortcuts`,title:`Keyboard shortcuts (?)`,onClick:()=>w(!0),children:(0,G.jsx)(zt,{"aria-hidden":`true`})}),(0,G.jsx)(U,{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,G.jsx)(qe,{"aria-hidden":`true`}):(0,G.jsx)(Tt,{"aria-hidden":`true`})})]}),(0,G.jsxs)(en,{onOpenChange:(e,t)=>{!e&&t.reason===`outside-press`&&setTimeout(()=>{document.activeElement===document.body&&h.current?.focus()})},children:[(0,G.jsx)(tn,{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,G.jsx)(Ft,{"aria-hidden":`true`})}),(0,G.jsxs)(nn,{align:`end`,children:[_?(0,G.jsxs)(K,{onClick:a,children:[(0,G.jsx)(Xe,{"aria-hidden":`true`}),`Compare with another run`]}):null,!s&&!f?(0,G.jsxs)(G.Fragment,{children:[(0,G.jsx)(no,{...v}),(0,G.jsx)(an,{})]}):null,!s&&b.length>0?(0,G.jsxs)(K,{onClick:T,children:[(0,G.jsx)(it,{"aria-hidden":`true`,className:`text-plan-aggregate`}),`Plan graph`]}):null,s?null:(0,G.jsx)(po,{}),f?null:(0,G.jsx)(K,{nativeButton:!1,render:(0,G.jsx)(`a`,{href:mo,target:`_blank`,rel:`noopener noreferrer`}),children:`Docs`}),(0,G.jsx)(K,{onClick:()=>w(!0),children:`Keyboard shortcuts`}),(0,G.jsx)(K,{onClick:m,children:`Toggle theme`})]})]})]}),(0,G.jsx)(ao,{open:x,entries:b,onSelect:E,onOpenChange:S}),(0,G.jsx)(lo,{open:C,onOpenChange:w})]})}function yo(e){let{pickRecent:t}=Be(),[n,r]=(0,W.useState)([]),i=(0,W.useCallback)(()=>{Oe().then(e=>r(e)).catch(()=>r([]))},[]);return(0,W.useEffect)(()=>{i()},[i,e]),{recentEntries:n,onPickRecent:(0,W.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,W.useCallback)(e=>{let t=n.find(t=>t.id===e);Me(e).catch(()=>{}).finally(i),t&&Te(`Removed "${t.appName||t.name}" from recent files`,{action:{label:`Undo`,onClick:()=>{He(t).catch(()=>{}).finally(i)}}})},[n,i])}}export{Qt as A,on as C,tn as D,nn as E,Ut as F,kt as I,Bt as M,Wt as N,Yt as O,Ht as P,sn as S,rn as T,yn as _,Vn as a,Dn as b,Bn as c,zn as d,Mn as f,On as g,kn as h,Zn as i,$t as j,Kt as k,Rn as l,An as m,vo as n,Nn as o,jn as p,or as r,In as s,yo as t,Ln as u,xn as v,en as w,mn as x,Sn as y};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{mt as n,p as r}from"./DisclosureContext-LYzHroHO.js";import{p as i}from"./plan-graph-vendor-B0sEms9Z.js";import{l as a,u as o}from"./Dashboard-Bo_1jGqH.js";import{n as s,t as c}from"./impact-sort-7z0ZcBZf.js";var l=i();function u({mode:e,onChange:t,stageLabel:n=`Stage`}){return(0,l.jsx)(r,{children:(0,l.jsxs)(a,{"aria-label":`Sort order`,spacing:0,value:[e],onValueChange:e=>{let n=e[0];n&&t(n)},children:[(0,l.jsx)(o,{value:`impact`,variant:`outline`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,children:`Impact`}),(0,l.jsx)(o,{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};
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-B0siMVdg.js";import{p as i}from"./plan-graph-vendor-BYl-AzN5.js";import{d as a,u as o}from"./Dashboard-BgKodJl2.js";import{n as s,t as c}from"./impact-sort-BTQndbof.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};
@@ -6,11 +6,12 @@
6
6
  <title>404 | SparkForensics</title>
7
7
  <meta name="description" content="Not Found">
8
8
  <meta name="generator" content="VitePress v1.6.4">
9
- <link rel="preload stylesheet" href="/docs/assets/style.DSixAiZE.css" as="style">
9
+ <link rel="preload stylesheet" href="/docs/assets/style.tmDhD3c8.css" as="style">
10
10
  <link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
11
11
 
12
- <script type="module" src="/docs/assets/app.C6w47a9W.js"></script>
12
+ <script type="module" src="/docs/assets/app.D2GqAkhy.js"></script>
13
13
  <link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
14
+ <script>(()=>{const c=`${`[${["data","shuffle","product","bar"].join("-")}]`}, .VPNav, .VPLocalNav`,a=24,d=document.documentElement,l=t=>{const e=getComputedStyle(t);return e.display==="none"||t.getClientRects().length===0?0:e.position==="fixed"?t.getBoundingClientRect().bottom:e.position==="sticky"?(parseFloat(e.top)||0)+t.offsetHeight:0},u=()=>{try{return location.hash?document.getElementById(decodeURIComponent(location.hash.slice(1))):null}catch{return null}};let r=null;const s=()=>{const t=Array.from(document.querySelectorAll(c),l),e=Math.ceil(Math.max(0,...t))+a;if(e===r)return;const n=r;r=e,d.style.setProperty("--sf-anchor-offset",`${r}px`);const o=n===null?null:u();if(!o)return;const f=(parseFloat(getComputedStyle(o).paddingTop)||0)+2;Math.abs(o.getBoundingClientRect().top-n)<=f&&o.scrollIntoView()},i=()=>{const t=document.createElement("div");t.setAttribute("data-sf-anchor-offset",""),t.setAttribute("aria-hidden","true"),document.body.appendChild(t);const e=window.ResizeObserver?new ResizeObserver(s):null,n=()=>{e&&document.querySelectorAll(c).forEach(o=>e.observe(o)),s()};n(),new MutationObserver(n).observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",s),window.addEventListener("load",s)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",i,{once:!0}):i()})();</script>
14
15
  <link rel="icon" type="image/svg+xml" href="/docs/favicon.svg">
15
16
  <link rel="preconnect" href="https://fonts.googleapis.com">
16
17
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
@@ -20,7 +21,7 @@
20
21
  </head>
21
22
  <body>
22
23
  <div id="app"></div>
23
- <script>window.__VP_HASH_MAP__=JSON.parse("{\"contributor-guide_architecture_board-widgets.md\":\"VTcYTH4d\",\"contributor-guide_architecture_detector-contract.md\":\"CsqZHz_T\",\"contributor-guide_architecture_drill-down.md\":\"CFNCE8JB\",\"contributor-guide_architecture_impact-estimation.md\":\"HT9IJGIl\",\"contributor-guide_architecture_index.md\":\"3TO9ic6w\",\"contributor-guide_architecture_overview.md\":\"CTEqVeV4\",\"contributor-guide_architecture_state-and-history.md\":\"DOTVHjTV\",\"contributor-guide_architecture_widget-rendering.md\":\"BmpARZve\",\"contributor-guide_architecture_worker-protocol.md\":\"21pTYhFF\",\"contributor-guide_contributing.md\":\"B2E9ni79\",\"contributor-guide_development-setup.md\":\"CjgZJwjK\",\"contributor-guide_testing.md\":\"DTwhpoN2\",\"index.md\":\"CHJVslga\",\"tuning-reference_anti-patterns.md\":\"D08Uaod7\",\"tuning-reference_aqe.md\":\"C1Ae6A8u\",\"tuning-reference_bottleneck-broadcast-sizing.md\":\"6wjKuJNE\",\"tuning-reference_bottleneck-cold-start.md\":\"BVQbsuHP\",\"tuning-reference_bottleneck-duplicate-plan-subtree.md\":\"DtaYnaiF\",\"tuning-reference_bottleneck-failures.md\":\"Z1Tdmdd3\",\"tuning-reference_bottleneck-gc.md\":\"BCnXLf1n\",\"tuning-reference_bottleneck-job-failure-rate.md\":\"CcvQj2g9\",\"tuning-reference_bottleneck-memory-utilization.md\":\"B-C0-8h-\",\"tuning-reference_bottleneck-retry-waste.md\":\"DCnhWiqj\",\"tuning-reference_bottleneck-shuffle.md\":\"B5OMJCd3\",\"tuning-reference_bottleneck-skew.md\":\"Cvo6NQm_\",\"tuning-reference_bottleneck-slow-host.md\":\"ja5qr3wq\",\"tuning-reference_bottleneck-small-files.md\":\"Crjtb0i2\",\"tuning-reference_bottleneck-spill.md\":\"Bl8KtSRg\",\"tuning-reference_bottleneck-straggler.md\":\"B0VN8reT\",\"tuning-reference_bottleneck-tiny-tasks.md\":\"DQCftGhu\",\"tuning-reference_bottleneck-utilization.md\":\"BXDl30f9\",\"tuning-reference_caching.md\":\"CcaiMn_7\",\"tuning-reference_cluster-config.md\":\"DbWG1yZq\",\"tuning-reference_config.md\":\"YUqSpwFB\",\"tuning-reference_data-formats.md\":\"C5DX5xL4\",\"tuning-reference_index.md\":\"ZVIpQ6Dk\",\"tuning-reference_intro.md\":\"BSSaDlqx\",\"tuning-reference_joins.md\":\"BVhNCDnE\",\"tuning-reference_memory-model.md\":\"CfjFdgbl\",\"tuning-reference_metrics.md\":\"C64VNEL4\",\"tuning-reference_partitioning.md\":\"CtLK0xsS\",\"tuning-reference_pyspark.md\":\"D-92XgF8\",\"tuning-reference_shuffle.md\":\"Iq2v1oHJ\",\"tuning-reference_spark-architecture.md\":\"_qwnE_Sc\",\"tuning-reference_table-formats.md\":\"BSYEK-eN\",\"user-guide_alternative-log-retrieval.md\":\"ZHPSbBkF\",\"user-guide_getting-started.md\":\"CEa2ZX-l\",\"user-guide_mcp-tools.md\":\"dQwIvdTF\",\"user-guide_run-comparison.md\":\"ChLI3MK0\",\"user-guide_understanding-findings.md\":\"D1ccs60C\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"SparkForensics\",\"description\":\"Docs for using and contributing to SparkForensics\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/favicon.svg\",\"nav\":[{\"text\":\"User Guide\",\"link\":\"/user-guide/getting-started\"},{\"text\":\"Contributor Guide\",\"link\":\"/contributor-guide/development-setup\"},{\"text\":\"Tuning Reference\",\"link\":\"/tuning-reference/\"}],\"sidebar\":{\"/tuning-reference/\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/tuning-reference/intro\"}]},{\"text\":\"Optimization Guide\",\"items\":[{\"text\":\"Spark Execution Model\",\"link\":\"/tuning-reference/spark-architecture\"},{\"text\":\"Memory Management\",\"link\":\"/tuning-reference/memory-model\"},{\"text\":\"Partitioning\",\"link\":\"/tuning-reference/partitioning\"},{\"text\":\"Join Optimization\",\"link\":\"/tuning-reference/joins\"},{\"text\":\"Shuffle\",\"link\":\"/tuning-reference/shuffle\"},{\"text\":\"Data Formats\",\"link\":\"/tuning-reference/data-formats\"},{\"text\":\"Table Formats\",\"link\":\"/tuning-reference/table-formats\"},{\"text\":\"Caching & Persistence\",\"link\":\"/tuning-reference/caching\"},{\"text\":\"PySpark Specifics\",\"link\":\"/tuning-reference/pyspark\"},{\"text\":\"Adaptive Query Execution\",\"link\":\"/tuning-reference/aqe\"},{\"text\":\"Cluster Tuning\",\"link\":\"/tuning-reference/cluster-config\"},{\"text\":\"Anti-Patterns\",\"link\":\"/tuning-reference/anti-patterns\"}]},{\"text\":\"Detector Catalog\",\"items\":[{\"text\":\"Task Skew\",\"link\":\"/tuning-reference/bottleneck-skew\"},{\"text\":\"Shuffle I/O\",\"link\":\"/tuning-reference/bottleneck-shuffle\"},{\"text\":\"Memory / Disk Spill\",\"link\":\"/tuning-reference/bottleneck-spill\"},{\"text\":\"GC Pressure\",\"link\":\"/tuning-reference/bottleneck-gc\"},{\"text\":\"Cold Start\",\"link\":\"/tuning-reference/bottleneck-cold-start\"},{\"text\":\"Executor Utilization\",\"link\":\"/tuning-reference/bottleneck-utilization\"},{\"text\":\"Slow Host\",\"link\":\"/tuning-reference/bottleneck-slow-host\"},{\"text\":\"Task Failures\",\"link\":\"/tuning-reference/bottleneck-failures\"},{\"text\":\"Stragglers\",\"link\":\"/tuning-reference/bottleneck-straggler\"},{\"text\":\"Retry Waste\",\"link\":\"/tuning-reference/bottleneck-retry-waste\"},{\"text\":\"Tiny Tasks\",\"link\":\"/tuning-reference/bottleneck-tiny-tasks\"},{\"text\":\"Job Failure Rate\",\"link\":\"/tuning-reference/bottleneck-job-failure-rate\"},{\"text\":\"Memory Utilization\",\"link\":\"/tuning-reference/bottleneck-memory-utilization\"},{\"text\":\"Duplicate Plan Subtree\",\"link\":\"/tuning-reference/bottleneck-duplicate-plan-subtree\"},{\"text\":\"Small Files\",\"link\":\"/tuning-reference/bottleneck-small-files\"},{\"text\":\"Broadcast Sizing\",\"link\":\"/tuning-reference/bottleneck-broadcast-sizing\"}]},{\"text\":\"Reference\",\"items\":[{\"text\":\"Metrics Glossary\",\"link\":\"/tuning-reference/metrics\"},{\"text\":\"Spark Config Quick-Reference\",\"link\":\"/tuning-reference/config\"}]}],\"/user-guide/\":[{\"text\":\"User Guide\",\"items\":[{\"text\":\"Getting started\",\"link\":\"/user-guide/getting-started\"},{\"text\":\"Understanding findings\",\"link\":\"/user-guide/understanding-findings\"},{\"text\":\"Run comparison mode\",\"link\":\"/user-guide/run-comparison\"},{\"text\":\"MCP tools reference\",\"link\":\"/user-guide/mcp-tools\"},{\"text\":\"Alternative log retrieval\",\"link\":\"/user-guide/alternative-log-retrieval\"}]}],\"/contributor-guide/\":[{\"text\":\"Contributor Guide\",\"items\":[{\"text\":\"Development setup\",\"link\":\"/contributor-guide/development-setup\"},{\"text\":\"Architecture\",\"link\":\"/contributor-guide/architecture/\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/contributor-guide/architecture/overview\"},{\"text\":\"Worker protocol\",\"link\":\"/contributor-guide/architecture/worker-protocol\"},{\"text\":\"State & history intake\",\"link\":\"/contributor-guide/architecture/state-and-history\"},{\"text\":\"Detector contract\",\"link\":\"/contributor-guide/architecture/detector-contract\"},{\"text\":\"Impact estimation\",\"link\":\"/contributor-guide/architecture/impact-estimation\"},{\"text\":\"Widget rendering\",\"link\":\"/contributor-guide/architecture/widget-rendering\"},{\"text\":\"Board widgets\",\"link\":\"/contributor-guide/architecture/board-widgets\"},{\"text\":\"Drill-down\",\"link\":\"/contributor-guide/architecture/drill-down\"}]},{\"text\":\"Testing & verification\",\"link\":\"/contributor-guide/testing\"},{\"text\":\"Contributing\",\"link\":\"/contributor-guide/contributing\"}]}]},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
24
+ <script>window.__VP_HASH_MAP__=JSON.parse("{\"contributor-guide_architecture_board-widgets.md\":\"YQcj5EI4\",\"contributor-guide_architecture_board-widgets_caching-and-memory.md\":\"8bH1HnZp\",\"contributor-guide_architecture_board-widgets_plan-advisor.md\":\"RlzvUmNm\",\"contributor-guide_architecture_board-widgets_visual-system-and-templating.md\":\"DYgUpIJB\",\"contributor-guide_architecture_detector-contract.md\":\"wj6Et6UD\",\"contributor-guide_architecture_detector-contract_plan-attribution.md\":\"yNex4bys\",\"contributor-guide_architecture_detector-contract_threshold-tables.md\":\"fkPBXsU2\",\"contributor-guide_architecture_drill-down.md\":\"CqZPrdo9\",\"contributor-guide_architecture_drill-down_plan-graph.md\":\"DwOozIEs\",\"contributor-guide_architecture_impact-estimation.md\":\"CZv_ZGOp\",\"contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md\":\"BUucRc0A\",\"contributor-guide_architecture_impact-estimation_stage-union-rollup.md\":\"DdCGtAGu\",\"contributor-guide_architecture_index.md\":\"tymxf1Fh\",\"contributor-guide_architecture_overview.md\":\"C1sSvm9i\",\"contributor-guide_architecture_state-and-history.md\":\"DyCBdjuM\",\"contributor-guide_architecture_state-and-history_history-server-intake.md\":\"C298hrHZ\",\"contributor-guide_architecture_state-and-history_run-comparison-internals.md\":\"uuAKpY0Y\",\"contributor-guide_architecture_widget-rendering.md\":\"BOZ1azXG\",\"contributor-guide_architecture_widget-rendering_findings-tab.md\":\"BQXycK6G\",\"contributor-guide_architecture_widget-rendering_investigation-routing.md\":\"BGdiyElu\",\"contributor-guide_architecture_widget-rendering_list-sort-mode.md\":\"BuHKgH0C\",\"contributor-guide_architecture_widget-rendering_reference-section.md\":\"DWqC80bN\",\"contributor-guide_architecture_widget-rendering_row-expand-contract.md\":\"ZT89u9f1\",\"contributor-guide_architecture_worker-protocol.md\":\"BAnhi2-d\",\"contributor-guide_architecture_worker-protocol_cli-and-mcp.md\":\"Dk08VS7n\",\"contributor-guide_architecture_worker-protocol_core-and-event-validation.md\":\"DSVFPpWb\",\"contributor-guide_architecture_worker-protocol_evidence-availability.md\":\"CjimIDBY\",\"contributor-guide_architecture_worker-protocol_evidence-report.md\":\"DVGZOWvW\",\"contributor-guide_contributing.md\":\"CQMvGwFt\",\"contributor-guide_development-setup.md\":\"D9bu4j_c\",\"contributor-guide_testing.md\":\"By6XGR9a\",\"index.md\":\"CHJVslga\",\"tuning-reference_anti-patterns.md\":\"D08Uaod7\",\"tuning-reference_aqe.md\":\"C1Ae6A8u\",\"tuning-reference_bottleneck-broadcast-sizing.md\":\"6wjKuJNE\",\"tuning-reference_bottleneck-cold-start.md\":\"BVQbsuHP\",\"tuning-reference_bottleneck-duplicate-plan-subtree.md\":\"DtaYnaiF\",\"tuning-reference_bottleneck-failures.md\":\"Z1Tdmdd3\",\"tuning-reference_bottleneck-gc.md\":\"BCnXLf1n\",\"tuning-reference_bottleneck-job-failure-rate.md\":\"CcvQj2g9\",\"tuning-reference_bottleneck-memory-utilization.md\":\"B-C0-8h-\",\"tuning-reference_bottleneck-retry-waste.md\":\"DCnhWiqj\",\"tuning-reference_bottleneck-shuffle.md\":\"B5OMJCd3\",\"tuning-reference_bottleneck-skew.md\":\"Cvo6NQm_\",\"tuning-reference_bottleneck-slow-host.md\":\"ja5qr3wq\",\"tuning-reference_bottleneck-small-files.md\":\"Crjtb0i2\",\"tuning-reference_bottleneck-spill.md\":\"Bl8KtSRg\",\"tuning-reference_bottleneck-straggler.md\":\"B0VN8reT\",\"tuning-reference_bottleneck-tiny-tasks.md\":\"DQCftGhu\",\"tuning-reference_bottleneck-utilization.md\":\"BXDl30f9\",\"tuning-reference_caching.md\":\"CcaiMn_7\",\"tuning-reference_cluster-config.md\":\"DbWG1yZq\",\"tuning-reference_config.md\":\"YUqSpwFB\",\"tuning-reference_data-formats.md\":\"C5DX5xL4\",\"tuning-reference_index.md\":\"ZVIpQ6Dk\",\"tuning-reference_intro.md\":\"BSSaDlqx\",\"tuning-reference_joins.md\":\"BVhNCDnE\",\"tuning-reference_memory-model.md\":\"CfjFdgbl\",\"tuning-reference_metrics.md\":\"C64VNEL4\",\"tuning-reference_partitioning.md\":\"CtLK0xsS\",\"tuning-reference_pyspark.md\":\"D-92XgF8\",\"tuning-reference_shuffle.md\":\"Iq2v1oHJ\",\"tuning-reference_spark-architecture.md\":\"_qwnE_Sc\",\"tuning-reference_table-formats.md\":\"BSYEK-eN\",\"user-guide_alternative-log-retrieval.md\":\"CJpYvHGo\",\"user-guide_alternative-log-retrieval_managed-platforms.md\":\"DvDwHNtC\",\"user-guide_alternative-log-retrieval_ssh-bastion.md\":\"Gszzlplv\",\"user-guide_getting-started.md\":\"DYHHHkQR\",\"user-guide_getting-started_ci-and-automation.md\":\"DpnfKz3x\",\"user-guide_getting-started_reading-the-dashboard.md\":\"Obf3W3__\",\"user-guide_getting-started_regression-metric-keys.md\":\"B_gzr2Mw\",\"user-guide_getting-started_tuning-thresholds.md\":\"B_MyjyZm\",\"user-guide_mcp-tools.md\":\"C65SjWUL\",\"user-guide_mcp-tools_compare-runs.md\":\"CPowlb2q\",\"user-guide_mcp-tools_diagnose-run.md\":\"BP1vnHA5\",\"user-guide_mcp-tools_evaluate-budgets.md\":\"Dq5Azk8G\",\"user-guide_mcp-tools_get-finding-documentation.md\":\"BtTTHNV6\",\"user-guide_mcp-tools_get-finding-evidence.md\":\"rKyu4wts\",\"user-guide_mcp-tools_get-reference-doc.md\":\"Yac4tH3u\",\"user-guide_mcp-tools_get-run-summary.md\":\"DpxZ4ZNp\",\"user-guide_mcp-tools_list-runs.md\":\"DpQPeCM3\",\"user-guide_run-comparison.md\":\"B6aNtDYF\",\"user-guide_run-comparison_how-stages-are-matched.md\":\"XBzQ1oEU\",\"user-guide_understanding-findings.md\":\"Dqt2H_C1\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"SparkForensics\",\"description\":\"Docs for using and contributing to SparkForensics\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/favicon.svg\",\"nav\":[{\"text\":\"User Guide\",\"link\":\"/user-guide/getting-started\"},{\"text\":\"Contributor Guide\",\"link\":\"/contributor-guide/development-setup\"},{\"text\":\"Tuning Reference\",\"link\":\"/tuning-reference/\"}],\"sidebar\":{\"/tuning-reference/\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/tuning-reference/intro\"}]},{\"text\":\"Optimization Guide\",\"items\":[{\"text\":\"Spark Execution Model\",\"link\":\"/tuning-reference/spark-architecture\"},{\"text\":\"Memory Management\",\"link\":\"/tuning-reference/memory-model\"},{\"text\":\"Partitioning\",\"link\":\"/tuning-reference/partitioning\"},{\"text\":\"Join Optimization\",\"link\":\"/tuning-reference/joins\"},{\"text\":\"Shuffle\",\"link\":\"/tuning-reference/shuffle\"},{\"text\":\"Data Formats\",\"link\":\"/tuning-reference/data-formats\"},{\"text\":\"Table Formats\",\"link\":\"/tuning-reference/table-formats\"},{\"text\":\"Caching & Persistence\",\"link\":\"/tuning-reference/caching\"},{\"text\":\"PySpark Specifics\",\"link\":\"/tuning-reference/pyspark\"},{\"text\":\"Adaptive Query Execution\",\"link\":\"/tuning-reference/aqe\"},{\"text\":\"Cluster Tuning\",\"link\":\"/tuning-reference/cluster-config\"},{\"text\":\"Anti-Patterns\",\"link\":\"/tuning-reference/anti-patterns\"}]},{\"text\":\"Detector Catalog\",\"items\":[{\"text\":\"Task Skew\",\"link\":\"/tuning-reference/bottleneck-skew\"},{\"text\":\"Shuffle I/O\",\"link\":\"/tuning-reference/bottleneck-shuffle\"},{\"text\":\"Memory / Disk Spill\",\"link\":\"/tuning-reference/bottleneck-spill\"},{\"text\":\"GC Pressure\",\"link\":\"/tuning-reference/bottleneck-gc\"},{\"text\":\"Cold Start\",\"link\":\"/tuning-reference/bottleneck-cold-start\"},{\"text\":\"Executor Utilization\",\"link\":\"/tuning-reference/bottleneck-utilization\"},{\"text\":\"Slow Host\",\"link\":\"/tuning-reference/bottleneck-slow-host\"},{\"text\":\"Task Failures\",\"link\":\"/tuning-reference/bottleneck-failures\"},{\"text\":\"Stragglers\",\"link\":\"/tuning-reference/bottleneck-straggler\"},{\"text\":\"Retry Waste\",\"link\":\"/tuning-reference/bottleneck-retry-waste\"},{\"text\":\"Tiny Tasks\",\"link\":\"/tuning-reference/bottleneck-tiny-tasks\"},{\"text\":\"Job Failure Rate\",\"link\":\"/tuning-reference/bottleneck-job-failure-rate\"},{\"text\":\"Memory Utilization\",\"link\":\"/tuning-reference/bottleneck-memory-utilization\"},{\"text\":\"Duplicate Plan Subtree\",\"link\":\"/tuning-reference/bottleneck-duplicate-plan-subtree\"},{\"text\":\"Small Files\",\"link\":\"/tuning-reference/bottleneck-small-files\"},{\"text\":\"Broadcast Sizing\",\"link\":\"/tuning-reference/bottleneck-broadcast-sizing\"}]},{\"text\":\"Reference\",\"items\":[{\"text\":\"Metrics Glossary\",\"link\":\"/tuning-reference/metrics\"},{\"text\":\"Spark Config Quick-Reference\",\"link\":\"/tuning-reference/config\"}]}],\"/user-guide/\":[{\"text\":\"User Guide\",\"items\":[{\"text\":\"Getting started\",\"link\":\"/user-guide/getting-started\",\"collapsed\":true,\"items\":[{\"text\":\"Reading the dashboard\",\"link\":\"/user-guide/getting-started/reading-the-dashboard\"},{\"text\":\"CI and automation\",\"link\":\"/user-guide/getting-started/ci-and-automation\"},{\"text\":\"Tuning detector thresholds\",\"link\":\"/user-guide/getting-started/tuning-thresholds\"},{\"text\":\"Regression metric keys\",\"link\":\"/user-guide/getting-started/regression-metric-keys\"}]},{\"text\":\"Understanding findings\",\"link\":\"/user-guide/understanding-findings\"},{\"text\":\"Run comparison mode\",\"link\":\"/user-guide/run-comparison\",\"collapsed\":true,\"items\":[{\"text\":\"How stages are matched\",\"link\":\"/user-guide/run-comparison/how-stages-are-matched\"}]},{\"text\":\"MCP tools reference\",\"link\":\"/user-guide/mcp-tools\",\"collapsed\":true,\"items\":[{\"text\":\"diagnose_run\",\"link\":\"/user-guide/mcp-tools/diagnose-run\"},{\"text\":\"get_run_summary\",\"link\":\"/user-guide/mcp-tools/get-run-summary\"},{\"text\":\"evaluate_budgets\",\"link\":\"/user-guide/mcp-tools/evaluate-budgets\"},{\"text\":\"compare_runs\",\"link\":\"/user-guide/mcp-tools/compare-runs\"},{\"text\":\"get_finding_evidence\",\"link\":\"/user-guide/mcp-tools/get-finding-evidence\"},{\"text\":\"get_finding_documentation\",\"link\":\"/user-guide/mcp-tools/get-finding-documentation\"},{\"text\":\"get_reference_doc\",\"link\":\"/user-guide/mcp-tools/get-reference-doc\"},{\"text\":\"list_runs\",\"link\":\"/user-guide/mcp-tools/list-runs\"}]},{\"text\":\"Finding your event log\",\"link\":\"/user-guide/alternative-log-retrieval\",\"collapsed\":true,\"items\":[{\"text\":\"Managed platforms\",\"link\":\"/user-guide/alternative-log-retrieval/managed-platforms\"},{\"text\":\"Behind an SSH bastion\",\"link\":\"/user-guide/alternative-log-retrieval/ssh-bastion\"}]}]}],\"/contributor-guide/\":[{\"text\":\"Contributor Guide\",\"items\":[{\"text\":\"Development setup\",\"link\":\"/contributor-guide/development-setup\"},{\"text\":\"Architecture\",\"link\":\"/contributor-guide/architecture/\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/contributor-guide/architecture/overview\"},{\"text\":\"Worker protocol\",\"link\":\"/contributor-guide/architecture/worker-protocol\",\"collapsed\":true,\"items\":[{\"text\":\"Evidence availability\",\"link\":\"/contributor-guide/architecture/worker-protocol/evidence-availability\"},{\"text\":\"Evidence report and finding identity\",\"link\":\"/contributor-guide/architecture/worker-protocol/evidence-report\"},{\"text\":\"CLI and MCP server\",\"link\":\"/contributor-guide/architecture/worker-protocol/cli-and-mcp\"},{\"text\":\"Core and event validation\",\"link\":\"/contributor-guide/architecture/worker-protocol/core-and-event-validation\"}]},{\"text\":\"State & history intake\",\"link\":\"/contributor-guide/architecture/state-and-history\",\"collapsed\":true,\"items\":[{\"text\":\"Run comparison internals\",\"link\":\"/contributor-guide/architecture/state-and-history/run-comparison-internals\"},{\"text\":\"History Server intake\",\"link\":\"/contributor-guide/architecture/state-and-history/history-server-intake\"}]},{\"text\":\"Detector contract\",\"link\":\"/contributor-guide/architecture/detector-contract\",\"collapsed\":true,\"items\":[{\"text\":\"Plan attribution\",\"link\":\"/contributor-guide/architecture/detector-contract/plan-attribution\"},{\"text\":\"Threshold tables\",\"link\":\"/contributor-guide/architecture/detector-contract/threshold-tables\"}]},{\"text\":\"Impact estimation\",\"link\":\"/contributor-guide/architecture/impact-estimation\",\"collapsed\":true,\"items\":[{\"text\":\"Stage union rollup\",\"link\":\"/contributor-guide/architecture/impact-estimation/stage-union-rollup\"},{\"text\":\"Caveats, tuning and coverage\",\"link\":\"/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage\"}]},{\"text\":\"Widget rendering\",\"link\":\"/contributor-guide/architecture/widget-rendering\",\"collapsed\":true,\"items\":[{\"text\":\"Findings tab\",\"link\":\"/contributor-guide/architecture/widget-rendering/findings-tab\"},{\"text\":\"List sort mode\",\"link\":\"/contributor-guide/architecture/widget-rendering/list-sort-mode\"},{\"text\":\"Row/expand contract\",\"link\":\"/contributor-guide/architecture/widget-rendering/row-expand-contract\"},{\"text\":\"ReferenceSection\",\"link\":\"/contributor-guide/architecture/widget-rendering/reference-section\"},{\"text\":\"Investigation routing\",\"link\":\"/contributor-guide/architecture/widget-rendering/investigation-routing\"}]},{\"text\":\"Board widgets\",\"link\":\"/contributor-guide/architecture/board-widgets\",\"collapsed\":true,\"items\":[{\"text\":\"Plan Advisor\",\"link\":\"/contributor-guide/architecture/board-widgets/plan-advisor\"},{\"text\":\"Caching and memory widgets\",\"link\":\"/contributor-guide/architecture/board-widgets/caching-and-memory\"},{\"text\":\"Visual system and templating\",\"link\":\"/contributor-guide/architecture/board-widgets/visual-system-and-templating\"}]},{\"text\":\"Drill-down\",\"link\":\"/contributor-guide/architecture/drill-down\",\"collapsed\":true,\"items\":[{\"text\":\"Plan graph\",\"link\":\"/contributor-guide/architecture/drill-down/plan-graph\"}]}]},{\"text\":\"Testing & verification\",\"link\":\"/contributor-guide/testing\"},{\"text\":\"Contributing\",\"link\":\"/contributor-guide/contributing\"}]}]},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":{\"selector\":\"[data-sf-anchor-offset]\",\"padding\":0},\"cleanUrls\":false}");</script>
24
25
 
25
26
  </body>
26
27
  </html>
@@ -1 +1 @@
1
- import{t as p}from"./chunks/theme.D-mE6j02.js";import{R as s,a6 as i,a7 as u,a8 as c,a9 as l,aa as f,ab as d,ac as m,ad as h,ae as g,af as A,d as v,u as y,v as C,s as P,ag as b,ah as w,ai as R,aj as E}from"./chunks/framework.DSg0KOwT.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
1
+ import{t as p}from"./chunks/theme.BuxVpb0H.js";import{R as s,a6 as i,a7 as u,a8 as c,a9 as l,aa as f,ab as d,ac as m,ad as h,ae as g,af as A,d as v,u as y,v as C,s as P,ag as b,ah as w,ai as R,aj as E}from"./chunks/framework.DSg0KOwT.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};