sparkforensics-server 0.5.0 → 0.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/public/assets/{AutoscalingChurn-9Zo6IMGS.js → AutoscalingChurn-8t3U3isq.js} +1 -1
- package/public/assets/{CacheUtilization-MBDfMsKC.js → CacheUtilization-CJs9tTum.js} +1 -1
- package/public/assets/CachingOpportunity-D1NcHs0V.js +1 -0
- package/public/assets/{ColdStart-BtS12b6_.js → ColdStart-CdRJ9gD8.js} +1 -1
- package/public/assets/{ConfigAudit-DNPV6EQg.js → ConfigAudit-B5Gbe5js.js} +1 -1
- package/public/assets/CoreUsageArea-a--NTRGY.js +1 -0
- package/public/assets/{Dashboard-CC_BXrNy.js → Dashboard-C1hNeX49.js} +2 -2
- package/public/assets/DisclosureContext-ZpE6CkHx.js +1 -0
- package/public/assets/{DuplicatePlanSubtree-vN3zqRsi.js → DuplicatePlanSubtree-dobXdz7E.js} +1 -1
- package/public/assets/{ExecutorUtilization-CZObSLIj.js → ExecutorUtilization-D9grwi7t.js} +1 -1
- package/public/assets/{GcPressure-ByJlLOua.js → GcPressure-8-G2ri10.js} +1 -1
- package/public/assets/{IncompleteRun-MzqV4W8y.js → IncompleteRun-B91lky7a.js} +1 -1
- package/public/assets/{JobFailures-LbMvAwAb.js → JobFailures-BsWvBMyJ.js} +1 -1
- package/public/assets/{MemoryUtilization-DH4jYvJK.js → MemoryUtilization-BM5schZI.js} +1 -1
- package/public/assets/{OverBroadcast-euk6HKg4.js → OverBroadcast-DdN8JIJH.js} +1 -1
- package/public/assets/{PartitionHint-DThaMMRT.js → PartitionHint-CUvbnnxy.js} +1 -1
- package/public/assets/{PartitionSizing-yIN-iZzx.js → PartitionSizing-CY5HDYtp.js} +1 -1
- package/public/assets/{PlanExplorer-Dd9WPK4S.js → PlanExplorer-DgHCDBD_.js} +1 -1
- package/public/assets/PlanGraphRoute-DH3KJb8j.js +1 -0
- package/public/assets/{RetryWaste-CXH4D-xH.js → RetryWaste-DOnE9vGF.js} +1 -1
- package/public/assets/{ShuffleIO-CW7U68ph.js → ShuffleIO-MMnDESkF.js} +1 -1
- package/public/assets/{Skew-PL79TppX.js → Skew-BmZZJ5ms.js} +1 -1
- package/public/assets/{SlowHost-GBO73hCi.js → SlowHost-CsJzfEqo.js} +1 -1
- package/public/assets/{SmallFiles-B5cUjEav.js → SmallFiles-BoK3R1Ex.js} +1 -1
- package/public/assets/{SpeculationWaste-mxi3jgb0.js → SpeculationWaste-CnVxB5AJ.js} +1 -1
- package/public/assets/Spill-BhNicyBy.js +1 -0
- package/public/assets/{StageFailed-YvxC11ii.js → StageFailed-mAhHU4l_.js} +1 -1
- package/public/assets/StageFindingGroup-BEtPWcT0.js +1 -0
- package/public/assets/{StageHeader-BMNmUy-s.js → StageHeader-DJkYkrsU.js} +1 -1
- package/public/assets/{StageShape-DO3mQ6NS.js → StageShape-BDxRknLp.js} +1 -1
- package/public/assets/{StageSlowness-SwRxfAEx.js → StageSlowness-BPRw-otN.js} +1 -1
- package/public/assets/{Straggler-DHLTiBY-.js → Straggler-CZCbnOWP.js} +1 -1
- package/public/assets/{TaskFailures-Bj0QxiOc.js → TaskFailures-C57YcLFQ.js} +1 -1
- package/public/assets/{TinyTask-COUQQ5bQ.js → TinyTask-Bi84qU7n.js} +1 -1
- package/public/assets/{UnderBroadcast-RAUbQ6vw.js → UnderBroadcast-DdQV7htE.js} +1 -1
- package/public/assets/{finding-anchor-Dl8mIHiU.js → finding-anchor-Cl6_5hfV.js} +1 -1
- package/public/assets/{impact-sort-Eihua9dY.js → impact-sort-CssZ6MT2.js} +1 -1
- package/public/assets/index-2h_TgUAb.css +2 -0
- package/public/assets/index-B-03mG7K.js +14 -0
- package/public/assets/parser-worker-CA5RxqKc.js +122 -0
- package/public/assets/{plan-graph-vendor-B0sEms9Z.js → plan-graph-vendor-BYl-AzN5.js} +1 -1
- package/public/assets/{react-vendor-BAKt3vny.js → react-vendor-DEdfrRTJ.js} +1 -1
- package/public/assets/{select-DkjFHlXR.js → select-CQjNhprm.js} +1 -1
- package/public/assets/{usePagedRows-Bo-aSztx.js → usePagedRows-Dyl6T8Ok.js} +1 -1
- package/public/assets/useRecentFiles-XZEnLlal.js +11 -0
- package/public/assets/{useSortMode-lDedD5a3.js → useSortMode-Dhvit8dt.js} +1 -1
- package/public/docs/404.html +2 -2
- package/public/docs/assets/{app.yjczoibf.js → app.eYTPqTeq.js} +1 -1
- package/public/docs/assets/chunks/@localSearchIndexroot.u_e5bQz4.js +1 -0
- package/public/docs/assets/chunks/{VPLocalSearchBox.DOBbPfix.js → VPLocalSearchBox.DsZrQKQR.js} +1 -1
- package/public/docs/assets/chunks/{theme.DFcAl8Ws.js → theme.DsTNE2pE.js} +2 -2
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.YQcj5EI4.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_board-widgets.md.D0Kkk_r5.lean.js → contributor-guide_architecture_board-widgets.md.YQcj5EI4.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets_plan-advisor.md.RlzvUmNm.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.wj6Et6UD.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.wj6Et6UD.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract_plan-attribution.md.yNex4bys.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.CqZPrdo9.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.CqZPrdo9.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_drill-down_plan-graph.md.DwOozIEs.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_impact-estimation_stage-union-rollup.md.DdCGtAGu.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_index.md.tymxf1Fh.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_index.md.B9yZieYL.lean.js → contributor-guide_architecture_index.md.tymxf1Fh.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_overview.md.C1sSvm9i.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.DyCBdjuM.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_state-and-history.md.w4lwybdh.lean.js → contributor-guide_architecture_state-and-history.md.DyCBdjuM.lean.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history_history-server-intake.md.C298hrHZ.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_state-and-history_history-server-intake.md.C298hrHZ.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_state-and-history_run-comparison-internals.md.CZA0JLtV.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.BOZ1azXG.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_findings-tab.md.BQXycK6G.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_investigation-routing.md.BGdiyElu.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_investigation-routing.md.BGdiyElu.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_list-sort-mode.md.BuHKgH0C.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_reference-section.md.DWqC80bN.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_reference-section.md.DWqC80bN.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_widget-rendering_row-expand-contract.md.ZT89u9f1.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.BAnhi2-d.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_core-and-event-validation.md.DSVFPpWb.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.js +6 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-availability.md.CjimIDBY.lean.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.js +1 -0
- package/public/docs/assets/contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.lean.js +1 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.CJpYvHGo.js +4 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.CJpYvHGo.lean.js +1 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval_managed-platforms.md.DvDwHNtC.js +4 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval_managed-platforms.md.DvDwHNtC.lean.js +1 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval_ssh-bastion.md.Gszzlplv.js +1 -0
- package/public/docs/assets/user-guide_alternative-log-retrieval_ssh-bastion.md.Gszzlplv.lean.js +1 -0
- package/public/docs/assets/user-guide_getting-started.md.DYHHHkQR.js +1 -0
- package/public/docs/assets/user-guide_getting-started.md.DYHHHkQR.lean.js +1 -0
- package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.js +23 -0
- package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.lean.js +1 -0
- package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.js +1 -0
- package/public/docs/assets/user-guide_getting-started_reading-the-dashboard.md.Obf3W3__.lean.js +1 -0
- package/public/docs/assets/user-guide_getting-started_regression-metric-keys.md.B_gzr2Mw.js +1 -0
- package/public/docs/assets/user-guide_getting-started_regression-metric-keys.md.B_gzr2Mw.lean.js +1 -0
- package/public/docs/assets/user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.js +4 -0
- package/public/docs/assets/user-guide_getting-started_tuning-thresholds.md.B_MyjyZm.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools.md.C65SjWUL.js +16 -0
- package/public/docs/assets/user-guide_mcp-tools.md.C65SjWUL.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.Cc_gLoix.js +56 -0
- package/public/docs/assets/user-guide_mcp-tools_compare-runs.md.Cc_gLoix.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.js +23 -0
- package/public/docs/assets/user-guide_mcp-tools_diagnose-run.md.BP1vnHA5.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.js +26 -0
- package/public/docs/assets/user-guide_mcp-tools_evaluate-budgets.md.BB0nDY3Z.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools_get-finding-documentation.md.BtTTHNV6.js +14 -0
- package/public/docs/assets/user-guide_mcp-tools_get-finding-documentation.md.BtTTHNV6.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.js +20 -0
- package/public/docs/assets/user-guide_mcp-tools_get-finding-evidence.md.rKyu4wts.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools_get-reference-doc.md.Yac4tH3u.js +5 -0
- package/public/docs/assets/user-guide_mcp-tools_get-reference-doc.md.Yac4tH3u.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.js +15 -0
- package/public/docs/assets/user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.lean.js +1 -0
- package/public/docs/assets/user-guide_mcp-tools_list-runs.md.DpQPeCM3.js +12 -0
- package/public/docs/assets/user-guide_mcp-tools_list-runs.md.DpQPeCM3.lean.js +1 -0
- package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.js +1 -0
- package/public/docs/assets/user-guide_run-comparison.md.BUALkohi.lean.js +1 -0
- package/public/docs/assets/user-guide_run-comparison_how-stages-are-matched.md.DSXGu2tA.js +1 -0
- package/public/docs/assets/user-guide_run-comparison_how-stages-are-matched.md.DSXGu2tA.lean.js +1 -0
- package/public/docs/assets/user-guide_understanding-findings.md.C9YRruMT.js +1 -0
- package/public/docs/assets/user-guide_understanding-findings.md.C9YRruMT.lean.js +1 -0
- package/public/docs/contributor-guide/architecture/board-widgets/caching-and-memory.html +30 -0
- package/public/docs/contributor-guide/architecture/board-widgets/plan-advisor.html +30 -0
- package/public/docs/contributor-guide/architecture/board-widgets/visual-system-and-templating.html +30 -0
- package/public/docs/contributor-guide/architecture/board-widgets.html +5 -5
- package/public/docs/contributor-guide/architecture/detector-contract/plan-attribution.html +30 -0
- package/public/docs/contributor-guide/architecture/detector-contract/threshold-tables.html +30 -0
- package/public/docs/contributor-guide/architecture/detector-contract.html +5 -5
- package/public/docs/contributor-guide/architecture/drill-down/plan-graph.html +30 -0
- package/public/docs/contributor-guide/architecture/drill-down.html +5 -5
- package/public/docs/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage.html +30 -0
- package/public/docs/contributor-guide/architecture/impact-estimation/stage-union-rollup.html +30 -0
- package/public/docs/contributor-guide/architecture/impact-estimation.html +5 -5
- package/public/docs/contributor-guide/architecture/index.html +5 -5
- package/public/docs/contributor-guide/architecture/overview.html +5 -5
- package/public/docs/contributor-guide/architecture/state-and-history/history-server-intake.html +30 -0
- package/public/docs/contributor-guide/architecture/state-and-history/run-comparison-internals.html +30 -0
- package/public/docs/contributor-guide/architecture/state-and-history.html +5 -5
- package/public/docs/contributor-guide/architecture/widget-rendering/findings-tab.html +30 -0
- package/public/docs/contributor-guide/architecture/widget-rendering/investigation-routing.html +30 -0
- package/public/docs/contributor-guide/architecture/widget-rendering/list-sort-mode.html +30 -0
- package/public/docs/contributor-guide/architecture/widget-rendering/reference-section.html +30 -0
- package/public/docs/contributor-guide/architecture/widget-rendering/row-expand-contract.html +30 -0
- package/public/docs/contributor-guide/architecture/widget-rendering.html +5 -5
- package/public/docs/contributor-guide/architecture/worker-protocol/cli-and-mcp.html +30 -0
- package/public/docs/contributor-guide/architecture/worker-protocol/core-and-event-validation.html +30 -0
- package/public/docs/contributor-guide/architecture/worker-protocol/evidence-availability.html +35 -0
- package/public/docs/contributor-guide/architecture/worker-protocol/evidence-report.html +30 -0
- package/public/docs/contributor-guide/architecture/worker-protocol.html +5 -10
- package/public/docs/contributor-guide/contributing.html +4 -4
- package/public/docs/contributor-guide/development-setup.html +4 -4
- package/public/docs/contributor-guide/testing.html +4 -4
- package/public/docs/hashmap.json +1 -1
- package/public/docs/index.html +3 -3
- package/public/docs/tuning-reference/anti-patterns.html +3 -3
- package/public/docs/tuning-reference/aqe.html +3 -3
- package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +3 -3
- package/public/docs/tuning-reference/bottleneck-cold-start.html +3 -3
- package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +3 -3
- package/public/docs/tuning-reference/bottleneck-failures.html +3 -3
- package/public/docs/tuning-reference/bottleneck-gc.html +3 -3
- package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +3 -3
- package/public/docs/tuning-reference/bottleneck-memory-utilization.html +3 -3
- package/public/docs/tuning-reference/bottleneck-retry-waste.html +3 -3
- package/public/docs/tuning-reference/bottleneck-shuffle.html +3 -3
- package/public/docs/tuning-reference/bottleneck-skew.html +3 -3
- package/public/docs/tuning-reference/bottleneck-slow-host.html +3 -3
- package/public/docs/tuning-reference/bottleneck-small-files.html +3 -3
- package/public/docs/tuning-reference/bottleneck-spill.html +3 -3
- package/public/docs/tuning-reference/bottleneck-straggler.html +3 -3
- package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +3 -3
- package/public/docs/tuning-reference/bottleneck-utilization.html +3 -3
- package/public/docs/tuning-reference/caching.html +3 -3
- package/public/docs/tuning-reference/cluster-config.html +3 -3
- package/public/docs/tuning-reference/config.html +3 -3
- package/public/docs/tuning-reference/data-formats.html +3 -3
- package/public/docs/tuning-reference/index.html +3 -3
- package/public/docs/tuning-reference/intro.html +3 -3
- package/public/docs/tuning-reference/joins.html +3 -3
- package/public/docs/tuning-reference/memory-model.html +3 -3
- package/public/docs/tuning-reference/metrics.html +3 -3
- package/public/docs/tuning-reference/partitioning.html +3 -3
- package/public/docs/tuning-reference/pyspark.html +3 -3
- package/public/docs/tuning-reference/shuffle.html +3 -3
- package/public/docs/tuning-reference/spark-architecture.html +3 -3
- package/public/docs/tuning-reference/table-formats.html +3 -3
- package/public/docs/user-guide/alternative-log-retrieval/managed-platforms.html +33 -0
- package/public/docs/user-guide/alternative-log-retrieval/ssh-bastion.html +30 -0
- package/public/docs/user-guide/alternative-log-retrieval.html +6 -9
- package/public/docs/user-guide/getting-started/ci-and-automation.html +52 -0
- package/public/docs/user-guide/getting-started/reading-the-dashboard.html +30 -0
- package/public/docs/user-guide/getting-started/regression-metric-keys.html +30 -0
- package/public/docs/user-guide/getting-started/tuning-thresholds.html +33 -0
- package/public/docs/user-guide/getting-started.html +5 -28
- package/public/docs/user-guide/mcp-tools/compare-runs.html +85 -0
- package/public/docs/user-guide/mcp-tools/diagnose-run.html +52 -0
- package/public/docs/user-guide/mcp-tools/evaluate-budgets.html +55 -0
- package/public/docs/user-guide/mcp-tools/get-finding-documentation.html +43 -0
- package/public/docs/user-guide/mcp-tools/get-finding-evidence.html +49 -0
- package/public/docs/user-guide/mcp-tools/get-reference-doc.html +34 -0
- package/public/docs/user-guide/mcp-tools/get-run-summary.html +44 -0
- package/public/docs/user-guide/mcp-tools/list-runs.html +41 -0
- package/public/docs/user-guide/mcp-tools.html +8 -140
- package/public/docs/user-guide/run-comparison/how-stages-are-matched.html +30 -0
- package/public/docs/user-guide/run-comparison.html +5 -5
- package/public/docs/user-guide/understanding-findings.html +5 -5
- package/public/export-template.html +45 -45
- package/public/index.html +5 -5
- package/vendor-core/analyzer.js +1 -1
- package/vendor-core/api-merge-writes.js +80 -0
- package/vendor-core/cli/budgets.js +62 -2
- package/vendor-core/cli/regression-budgets.js +35 -0
- package/vendor-core/comparison-output.js +50 -0
- package/vendor-core/core-source-hash.txt +1 -1
- package/vendor-core/delta-commands.js +13 -0
- package/vendor-core/delta-log-paths.js +42 -0
- package/vendor-core/delta-targets.js +127 -0
- package/vendor-core/detectors.js +219 -56
- package/vendor-core/docs-content/detection/chrn.md +3 -1
- package/vendor-core/docs-content/detection/cold.md +2 -1
- package/vendor-core/docs-content/detection/plan.md +9 -2
- package/vendor-core/docs-content/detection/shfl.md +8 -2
- package/vendor-core/docs-content/detection/skew.md +11 -5
- package/vendor-core/docs-content/detection/slow.md +6 -2
- package/vendor-core/docs-content/detection/spill.md +4 -1
- package/vendor-core/docs-content/detection/strag.md +5 -3
- package/vendor-core/docs-content/detection/tiny.md +3 -2
- package/vendor-core/event-handlers.js +95 -9
- package/vendor-core/event-schemas.js +3 -1
- package/vendor-core/evidence-report.js +24 -15
- package/vendor-core/finding-presentation.js +39 -13
- package/vendor-core/finding-types.js +50 -6
- package/vendor-core/mcp-server-factory.js +17 -6
- package/vendor-core/mcp-tools.js +53 -35
- package/vendor-core/median.js +8 -0
- package/vendor-core/plan-graph-model.js +1 -1
- package/vendor-core/plan-summary.js +13 -10
- package/vendor-core/run-comparison.js +81 -120
- package/vendor-core/run-output.js +26 -0
- package/vendor-core/sequence-alignment.js +83 -0
- package/vendor-core/stage-alignment.js +586 -0
- package/vendor-core/stage-identity.js +112 -0
- package/vendor-core/stage-quantiles.js +3 -1
- package/vendor-core/stage-structure.js +83 -0
- package/vendor-core/types.js +5 -0
- package/vendor-core/write-target-args.js +48 -0
- package/vendor-core/write-targets.js +35 -52
- package/public/assets/CachingOpportunity-Cfw3wAFa.js +0 -1
- package/public/assets/CoreUsageArea-BObEeenE.js +0 -1
- package/public/assets/DisclosureContext-Ds0hcZFn.js +0 -1
- package/public/assets/PlanGraphRoute-NV5mCXRm.js +0 -1
- package/public/assets/Spill-CH1bNpxL.js +0 -1
- package/public/assets/StageFindingGroup-B1A0nf-e.js +0 -1
- package/public/assets/index-BcqTLKFp.css +0 -2
- package/public/assets/index-DaC8A2FS.js +0 -13
- package/public/assets/parser-worker-CfDvPkwF.js +0 -122
- package/public/assets/useRecentFiles-Bb4-ukVz.js +0 -11
- package/public/docs/assets/chunks/@localSearchIndexroot.r9imX8Aq.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets.md.D0Kkk_r5.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.caA46z-u.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_detector-contract.md.caA46z-u.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.CdtlKHl-.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_drill-down.md.CdtlKHl-.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.BNp14LtL.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.BNp14LtL.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_index.md.B9yZieYL.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_overview.md.DBGo-bwn.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_state-and-history.md.w4lwybdh.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.CcvqxnZI.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_widget-rendering.md.CcvqxnZI.lean.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CKeFttKj.js +0 -6
- package/public/docs/assets/contributor-guide_architecture_worker-protocol.md.CKeFttKj.lean.js +0 -1
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.z-8npxNk.js +0 -7
- package/public/docs/assets/user-guide_alternative-log-retrieval.md.z-8npxNk.lean.js +0 -1
- package/public/docs/assets/user-guide_getting-started.md.BJW5oVhe.js +0 -24
- package/public/docs/assets/user-guide_getting-started.md.BJW5oVhe.lean.js +0 -1
- package/public/docs/assets/user-guide_mcp-tools.md.DcLiOa9t.js +0 -148
- package/public/docs/assets/user-guide_mcp-tools.md.DcLiOa9t.lean.js +0 -1
- package/public/docs/assets/user-guide_run-comparison.md.qin0a4IX.js +0 -1
- package/public/docs/assets/user-guide_run-comparison.md.qin0a4IX.lean.js +0 -1
- package/public/docs/assets/user-guide_understanding-findings.md.DzReyCXb.js +0 -1
- package/public/docs/assets/user-guide_understanding-findings.md.DzReyCXb.lean.js +0 -1
- /package/public/docs/assets/{contributor-guide_architecture_overview.md.DBGo-bwn.lean.js → contributor-guide_architecture_overview.md.C1sSvm9i.lean.js} +0 -0
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{E as t,M as n,c as r,d as i,g as a,h as o,l as s,m as c,u as l}from"./charts-vendor-0VMaLVLN.js";import{$ as u,B as d,F as f,G as p,H as m,I as h,J as g,K as _,L as v,M as y,N as b,P as x,Q as S,R as C,U as w,V as T,W as E,X as D,Y as O,Z as k,q as A,z as j}from"./react-vendor-BAKt3vny.js";import{D as M,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-Ds0hcZFn.js";import{p as Se}from"./plan-graph-vendor-B0sEms9Z.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-DaC8A2FS.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 q({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 q(e){return e instanceof Map?{[lr]:[...e].map(([e,t])=>[q(e),q(t)])}:e instanceof Set?{[ur]:[...e].map(q)}:Array.isArray(e)?e.map(q):e&&typeof e==`object`?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,q(t)])):e}function dr(e){if(Array.isArray(e))return e.map(dr);if(e&&typeof e==`object`){let t=e;return Array.isArray(t[lr])?new Map(t[lr].map(([e,t])=>[dr(e),dr(t)])):Array.isArray(t[ur])?new Set(t[ur].map(dr)):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,dr(t)]))}return e}var fr=[/\bip(?:-\d{1,3}){4}(?:\.[a-z0-9][a-z0-9-]*)*/gi,/\b(?:\d{1,3}\.){3}\d{1,3}\b/g],pr=[/\bapplication_\d{10,}_\d+\b/g];function mr(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)mr(n,t);return}if(e&&typeof e==`object`)for(let n of Object.values(e))mr(n,t)}function hr(e,t){if(Array.isArray(e)){for(let n of e)hr(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):hr(r,t)}function gr(e){if(Array.isArray(e))return e.map(e=>gr(e));if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=n===`failureGroups`&&Array.isArray(r)?r.map(e=>e&&typeof e==`object`?pt(e):e):gr(r);return t}return e}var _r=new Set([`stageFailureReason`,`exception`,`failureReason`]);function vr(e){if(Array.isArray(e))return e.map(e=>vr(e));if(e&&typeof e==`object`){let t=e.type===`stageFailed`,n={};for(let[r,i]of Object.entries(e))n[r]=(_r.has(r)||t&&r===`valueText`)&&typeof i==`string`?tt:vr(i);return n}return e}function yr(e){return vr(gr(e))}function br(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 xr(e){let t=new Set,n=new Set,r=e?.summary?.app?.id;return typeof r==`string`&&r.length>0&&t.add(r),hr(e?.findings,n),mr(e,[{patterns:fr,out:n},{patterns:pr,out:t}]),{appIds:t,hosts:n}}function Sr(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 Cr(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=>Cr(e,t));if(e&&typeof e==`object`){let n={};for(let[r,i]of Object.entries(e))n[r]=Cr(i,t);return n}return e}function wr(e,t){let n=[...t.appIds?Sr(t.appIds,`app`):[],...Sr(t.hosts,`host`)];return n.sort((e,t)=>t[0].length-e[0].length),Cr(e,n)}function Tr(e){return e.name==null?e:{...e,name:e.id??null}}function Er(e){let t=yr(e),{appIds:n,hosts:r}=xr(t),i=wr(t,{appIds:n,hosts:r}),a=i.summary?.app;return a?{...i,summary:{...i.summary,app:Tr(a)}}:i}function Dr(e){let t=yr(e),n=new Set,r=new Set,i=t.app?.id;typeof i==`string`&&i.length>0&&n.add(i),hr(t.executors.added,r),hr(t.executors.removed,r),hr(t.catalog,r),hr(t.configFindings,r),br(t.app?.config,r),mr(t,[{patterns:fr,out:r},{patterns:pr,out:n}]);let a=wr(t,{appIds:n,hosts:r});if(!a.app)return a;let o=Tr(a.app);return o.config?.[`spark.app.name`]==null?{...a,app:o}:{...a,app:{...o,config:{...o.config,"spark.app.name":o.id??``}}}}function Or(e,t,n){let r=dr(Dr(q({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 kr=new Set([`Write`,`Insert`,`Save`,`Overwrite`,`Append`,`Merge`,`Update`,`Delete`,`Truncate`,`Replace`,`Drop`,`Load`,`Vacuum`,`Convert`,`Clone`,`Restore`,`Optimize`,`Alter`,`Reorg`,`Rename`,`Call`]),Ar=[`TableAsSelect`,`AddPartition`,`DropPartition`,`RenamePartition`,`RecoverPartitions`],jr=new Set([`WriteFiles`,`AppendColumns`,`AppendColumnsWithObject`,`MergeRows`,`StateStoreSave`,`StateStoreRestore`,`SessionWindowStateStoreSave`,`SessionWindowStateStoreRestore`,`UpdateEventTimeWatermarkColumn`]),Mr=String.raw`(?:\`(?:[^\`]|\`\`)*\`|[A-Za-z0-9_$]+)`,Nr=RegExp(`^${Mr}(?:\\.${Mr})*$`),Pr=new RegExp(Mr,`g`),Fr=/\.\.\.(?:\s*\d+ more fields)?/;function Ir(e){return e.replace(/^Execute\s+/,``).trim().replace(/Exec$/,``)}function Lr(e){if(ti(e))return!0;let t=e.split(/\s/,1)[0];return jr.has(t)||t.includes(`Join`)?!1:Ar.some(e=>t.includes(e))?!0:(t.match(/[A-Z][a-z0-9]*/g)??[]).some(e=>kr.has(e))}function Rr(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 zr(e,t){let n=/^(?:Execute\s+)?(\S+)\s*([\s\S]*)$/.exec(e.trim());return!n||Ir(n[1])!==t?``:n[2]}function Br(e){return e===``||Fr.test(e)}function Vr(e){return Nr.test(e)?(e.match(Pr)??[]).map(e=>{if(!e.startsWith("`"))return e;let t=e.slice(1,-1).replace(/``/g,"`");return/[.`]/.test(t)?e:t}).join(`.`):null}function Hr(e){let[t,n,r]=e,i=n&&/^(Map\(.*\)|\[.*\])$/s.test(n.text)&&n.terminated?r:n;return!t?.terminated||Br(t.text)||!i||!/^(true|false)$/.test(i.text)?null:{kind:`path`,target:t.text}}function Ur(e){let t=e[0];if(!t)return null;let n=/^\[Database: ([^,\]]+), TableName: ([^,\]]+)[,\]]/.exec(t.text);if(n&&/\]$/.test(t.text)){let e=Vr(`${n[1].trim()}.${n[2].trim()}`);return e&&!Br(e)?{kind:`table`,target:e}:null}if(!t.terminated||Br(t.text))return null;let r=Vr(t.text);return r?{kind:`table`,target:r}:null}function Wr(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 Gr(e){let[,t,n]=e;if(!t?.terminated||!n||n.text===``)return null;let r=Wr(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 Br(o)||/\*{5,}\(redacted\)/.test(o)?null:i===void 0?{kind:`jdbcTable`,target:o}:{kind:`path`,target:o}}function Kr(e,t,n){let r=new Set;for(let i of e.matchAll(t))r.add(i[2]===void 0||Br(i[1])?null:n(i[1]));let[i]=r;return r.size===1?i:null}function qr(e){return e?{kind:(e.match(Pr)?.length??0)>=3?`table`:`unqualifiedTable`,target:e}:null}function Jr(e){return qr(Kr(e,/\b\w*Write\(table=([^,()\s]*)([,)])?/g,Vr))}function Yr(e){let[t,n]=e;return!t?.terminated||!/^[\w.$]+@[0-9a-f]+$/.test(t.text)||!n?.terminated||Br(n.text)?null:qr(Vr(n.text))}function Xr(e){let[t]=e,n=t?.terminated?/^delta\.`([^`]*)`$/.exec(t.text):null;return n&&!Br(n[1])?{kind:`path`,target:n[1]}:null}var Zr=new Set([`AppendData`,`OverwriteByExpression`,`OverwritePartitionsDynamic`,`ReplaceData`,`WriteDelta`,`WriteToDataSourceV2`,`AppendDataExecV1`,`OverwriteByExpressionExecV1`]),Qr=new Set([`CreateTableAsSelect`,`AtomicCreateTableAsSelect`,`ReplaceTableAsSelect`,`AtomicReplaceTableAsSelect`]),$r=new Set([`WriteIntoDelta`,`WriteIntoDeltaCommand`,`MergeIntoCommand`,`UpdateCommand`,`DeleteCommand`,`CreateDeltaTableCommand`,`OptimizeTableCommand`,`RestoreTableCommand`,`DeltaReorgTableCommand`]),ei={InsertIntoHadoopFsRelationCommand:Hr,InsertIntoHiveTable:Ur,CreateHiveTableAsSelectCommand:Ur,OptimizedCreateHiveTableAsSelectCommand:Ur,CreateDataSourceTableAsSelectCommand:Ur,SaveIntoDataSourceCommand:Gr};function ti(e){return e in ei||Zr.has(e)||Qr.has(e)||$r.has(e)}function ni(e,t){let n=ei[e];return n?[!0,n(Rr(zr(t,e)))]:Zr.has(e)?[!0,Jr(t)]:Qr.has(e)?[!0,Yr(Rr(zr(t,e)))]:e===`MergeIntoCommand`?[!0,null]:$r.has(e)?[!0,Xr(Rr(zr(t,e)))]:[!1,null]}function ri(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 ii(e,t,n){dt(t,t=>{let r=Ir(t.name);if(!Lr(r))return;let i=t.detail??``,[a,o]=ni(r,i);n.push({sqlExecutionId:e,nodeId:t.id??null,command:r,recognized:a,kind:o?.kind??null,target:o?.target??null,outputRows:ri(t),raw:i===``?t.name:i})},{dedupe:!0})}function ai(e,t={}){let n=[],r=new Map;for(let n of t.unreadableSqlExecutions??[])e.get(n)?.planTree||r.set(n,`unreadableStart`);for(let t of[...e.keys()].sort((e,t)=>e-t)){let i=e.get(t).planTree;i?ii(t,i,n):r.set(t,r.get(t)??`noPlan`)}return{writes:n,executionsWithoutPlan:[...r].sort((e,t)=>e[0]-t[0]).map(([e,t])=>({sqlExecutionId:e,reason:t})),skippedLines:t.skippedLines??null}}var oi={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 si(e){let t=e,n={};for(let r of[...oi[e.type]].sort())t[r]!==void 0&&(n[r]=t[r]);return n}function ci(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:si(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 li(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 ui(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 di(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 fi(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 pi(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 mi={},hi=new WeakMap,gi=new WeakMap;function _i(e,t){let n=t??mi,r=e.get(n);return r||(r=new WeakMap,e.set(n,r)),r}function vi(e,t){let{app:n,stages:r,executors:i,sql:a,jobs:o,runAggregates:s}=e;return{catalog:_t(n,r,i?.added??[],i?.removed??[],o??new Map,a??new Map,s??null,{thresholds:t}),config:je(n)}}function yi(e,t){let n=_i(gi,t),r=n.get(e);if(r)return r;let{catalog:i,config:a}=vi(e,t),o=Or(e,i,a),s=Er(bi(o.appModel,t,{catalog:o.catalog,config:o.configFindings}));return n.set(e,s),s}function bi(e,t,n){let r=_i(hi,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??vi(e,t),p=[...d,...f],m=li(p.map(ci)),h=ui(p,o??new Map),{cleanChecks:g,notRunChecks:_}=di(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:fi(m),actionableFindingCount:y.length,actionableImpactBandCounts:fi(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:pi(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 xi(e,t){return typeof t==`number`&&/bytes$/i.test(e)?ne(t):typeof t==`object`&&t?JSON.stringify(t):String(t)}function Si(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 Ci(e){let t=ut(e);return t?`${t.text}${t.meaning?` ${t.meaning}`:``} (estimateMethod: ${e.estimateMethod})`:null}function wi(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 Ti(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 Ei(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 Di(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=wi(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(...Ti(n.runShape)),u.push(``),u.push(...Ei(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?Ci(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(...Si(t)):u.push(` - ${e}: ${xi(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 Oi(e,t){let n=`stageIds`in e.evidence?e.evidence.stageIds:null;return Je({...e,stageId:mt({stageId:e.stageId,stageIds:n})},t)}function ki(e,{redact:t=!1,markdown:n=!0,findingsFilter:r,thresholds:i}={}){let a=t?yi(e,i):bi(e,i),o=a.findings.some(e=>e.type===`incompleteRun`);return r&&(a={...a,findings:a.findings.filter(e=>Oi(e,r))}),{markdown:n?Di(a,o):``,json:a}}var J=Uint8Array,Y=Uint16Array,Ai=Int32Array,ji=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]),Mi=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]),Ni=new J([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Pi=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 Ai(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}},Fi=Pi(ji,2),Ii=Fi.b,Li=Fi.r;Ii[28]=258,Li[258]=28;var Ri=Pi(Mi,0);Ri.b;for(var zi=Ri.r,Bi=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,Bi[X]=((Z&65280)>>8|(Z&255)<<8)>>1}for(var Vi=(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[Bi[d]>>c]=l}else for(s=new Y(r),i=0;i<r;++i)e[i]&&(s[i]=Bi[o[e[i]-1]++]>>15-e[i]);return s}),Hi=new J(288),X=0;X<144;++X)Hi[X]=8;for(var X=144;X<256;++X)Hi[X]=9;for(var X=256;X<280;++X)Hi[X]=7;for(var X=280;X<288;++X)Hi[X]=8;for(var Ui=new J(32),X=0;X<32;++X)Ui[X]=5;var Wi=Vi(Hi,9,0),Gi=Vi(Ui,5,0),Ki=function(e){return(e+7)/8|0},qi=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},Ji=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},Yi=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:na,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=Xi(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}},Xi=function(e,t,n){return e.s==-1?Math.max(Xi(e.l,t,n+1),Xi(e.r,t,n+1)):t[e.s]=n},Zi=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}},Qi=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},$i=function(e,t,n){var r=n.length,i=Ki(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=Yi(i,15),f=d.t,p=d.l,m=Yi(a,15),h=m.t,g=m.l,_=Zi(f),v=_.c,y=_.n,b=Zi(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=Yi(C,7),E=T.t,D=T.l,O=19;O>4&&!E[Ni[O-1]];--O);var k=l+5<<3,A=Qi(i,Hi)+Qi(a,Ui)+o,j=Qi(i,f)+Qi(a,h)+o+14+3*O+Qi(C,E)+2*C[16]+3*C[17]+7*C[18];if(c>=0&&k<=A&&k<=j)return $i(t,u,e.subarray(c,c+l));var M,N,P,F;if(Q(t,u,1+(j<A)),u+=2,j<A){M=Vi(f,p,0),N=f,P=Vi(h,g,0),F=h;var ee=Vi(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[Ni[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=Wi,N=Hi,P=Gi,F=Ui;for(var w=0;w<s;++w){var z=r[w];if(z>255){var R=z>>18&31;Ji(t,u,M[R+257]),u+=N[R+257],R>7&&(Q(t,u,z>>23&31),u+=ji[R]);var ne=z&31;Ji(t,u,P[ne]),u+=F[ne],ne>3&&(Ji(t,u,z>>5&8191),u+=Mi[ne])}else Ji(t,u,M[z]),u+=N[z]}return Ji(t,u,M[256]),u+N[256]},ta=new Ai([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),na=new J(0),ra=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=ta[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 Ai(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|Li[P]<<18|zi[F];var ie=Li[P]&31,ae=zi[F]&31;w+=ji[ie]+Mi[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=$i(c,u+1,e.subarray(T,oe))}a.i=o}return qi(s,0,r+Ki(u)+i)},ia=(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})(),aa=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=ia[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},oa=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 ra(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,i)},sa=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},ca=function(e,t){var n=t.filename;if(e[0]=31,e[1]=139,e[2]=8,e[8]=t.level<2?4:t.level==9?2:0,e[9]=3,t.mtime!=0&&sa(e,4,Math.floor(new Date(t.mtime||Date.now())/1e3)),n){e[3]=8;for(var r=0;r<=n.length;++r)e[r+10]=n.charCodeAt(r)}},la=function(e){return 10+(e.filename?e.filename.length+1:0)};function ua(e,t){t||={};var n=aa(),r=e.length;n.p(e);var i=oa(e,t,la(t),8),a=i.length;return ca(i,t),sa(i,a-8,n.d()),sa(i,a-4,r),i}var da=typeof TextEncoder<`u`&&new TextEncoder,fa=typeof TextDecoder<`u`&&new TextDecoder;try{fa.decode(na,{stream:!0})}catch{}function pa(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(da)return da.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 qi(a,0,o)}function ma(e,t,n,{redact:r,buildId:i,producer:a}){let o={appModel:e,catalog:t,configFindings:je(e.app)},s=r?Or(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 ha=32768;function ga(e){let t=``;for(let n=0;n<e.length;n+=ha)t+=String.fromCharCode(...e.subarray(n,n+ha));return btoa(t)}function _a(e){return ga(ua(pa(JSON.stringify(e))))}var va=`__SPARKFORENSICS_RUN_GZ__`;function ya(e){return`window.${va} = "${e}";`}var ba=`export-template.html`,xa=`<script src="./data.js"><\/script>`;function Sa(e,t){let n=e.indexOf(xa);if(n===-1||e.indexOf(xa,n+1)!==-1)throw Error(`The HTML export template is missing or malformed in this build.`);let r=`<script>${ya(t)}<\/script>`;return e.slice(0,n)+r+e.slice(n+33)}var Ca=`ab36c5fdcdc1a32a4e6206459e843e8d2267a90e6f1de29671827315d81bc374`,wa=`sparkforensics-web 0.26.1`,Ta={markdown:`md`,json:`json`,html:`html`};function Ea(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 Da(e,t,n){return`evidence-${String(e??`report`).replace(/[^\w.-]/g,`_`)}${n?`-redacted`:``}.${Ta[t]}`}async function Oa(){let e=await fetch(ba);if(!e.ok)throw Error(`The HTML export template could not be loaded (HTTP ${e.status}).`);return e.text()}function ka(){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=ma(e,t,n,{redact:r,buildId:Ca,producer:wa});Ea(Sa(await Oa(),_a(i)),Da(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}=ki(e,{redact:r}),a=Da(i.summary?.app?.id??null,t,r);t===`json`?Ea(`${JSON.stringify(i,null,2)}\n`,a,`application/json`):Ea(`${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 Aa({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 ja(){let e=ka();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)(Aa,{...e})})]})}function Ma({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 Na({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 Pa={name:`sparkforensics-web`,version:`0.26.1`,description:`Zero-backend browser dashboard that parses Apache Spark event logs to diagnose performance bottlenecks: skew, spill, GC pressure, stragglers, cache utilization, and more.`,private:!0,type:`module`,workspaces:[`.`,`packages/*`],license:`MIT`,author:`Agustin Recoba`,repository:{type:`git`,url:`git+https://github.com/shuffle-works/sparkforensics.git`},bugs:{url:`https://github.com/shuffle-works/sparkforensics/issues`},homepage:`https://github.com/shuffle-works/sparkforensics#readme`,keywords:[`apache-spark`,`spark`,`spark-history-server`,`performance`,`diagnostics`,`observability`,`event-log`,`dashboard`,`query-plan`],engines:{node:`>=22.18.0 <23.0.0 || >=23.6.0`},scripts:{test:`vitest run`,"test:watch":`vitest`,"test:coverage":`vitest run --coverage`,"test:core":`npm run test:coverage --workspace packages/core`,"test:cli":`npm run test:coverage --workspace packages/cli`,"test:mcp":`npm run test:coverage --workspace packages/mcp`,"test:server":`npm test --workspace packages/server`,lint:`eslint .`,release:`node scripts/publish-packages.mjs`,"local-server":`node packages/server/index.js`,"capture-components":`node dev/component-capture/capture.mjs`,"docs:fetch":`node scripts/fetch-tuning-docs.mjs`,"docs:bump":`node scripts/fetch-tuning-docs.mjs bump`,"doc-anchor-coverage":`node scripts/doc-anchor-coverage.js`,"split-detection-docs":`node scripts/split-detection-docs.mjs`,prepare:`git config core.hooksPath .githooks`,dev:`vite`,build:`npm run docs:build && vite build && vite build --config vite.export.config.ts --mode template`,"build:export":`vite build --config vite.export.config.ts`,preview:`vite preview`,"docs:dev":`node scripts/fetch-tuning-docs.mjs --allow-stale && node scripts/build-tuning-reference.mjs && vitepress dev docs-site`,"docs:build":`node scripts/fetch-tuning-docs.mjs && node scripts/build-tuning-reference.mjs && vitepress build docs-site`,"docs:preview":`vitepress preview docs-site`},devDependencies:{"@changesets/cli":`^3.0.3`,"@eslint/js":`^10.0.1`,"@tailwindcss/vite":`^4.3.3`,"@testing-library/jest-dom":`^7.0.1`,"@testing-library/react":`^16.3.3`,"@testing-library/user-event":`^14.6.7`,"@types/node":`^26.6.2`,"@types/react":`^19.3.0`,"@types/react-dom":`^19.3.0`,"@vitejs/plugin-react":`^5.2.0`,"@vitest/coverage-v8":`^5.0.1`,eslint:`^10.11.0`,"fake-indexeddb":`^6.2.5`,globals:`^17.12.0`,"js-yaml":`^5.4.2`,jsdom:`^30.1.1`,"markdown-it-footnote":`^4.0.0`,playwright:`^1.63.0`,shadcn:`^4.21.0`,tailwindcss:`^4.3.3`,typescript:`^7.0.2`,vite:`^8.3.0`,"vite-plugin-singlefile":`^2.3.3`,vitepress:`^1.6.4`,vitest:`^5.0.1`},dependencies:{"@base-ui/react":`^1.8.0`,"@dagrejs/dagre":`^3.1.1`,"@modelcontextprotocol/sdk":`^1.30.0`,"@sparkforensics/core":`*`,"@tanstack/react-table":`^9.2.4`,"@xyflow/react":`^12.11.6`,"class-variance-authority":`^0.7.1`,clsx:`^2.1.1`,"lucide-react":`^1.47.0`,react:`^19.3.0`,"react-dom":`^19.3.0`,"react-resizable-panels":`^4.13.2`,recharts:`^3.8.0`,sonner:`^2.0.8`,"tailwind-merge":`^3.7.0`,"tw-animate-css":`^1.4.0`,zod:`^4.6.5`,zustand:`^5.0.15`}};function Fa({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)(Fa,{keys:e})]})}function Ia({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 La({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)(Ia,{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)(Ia,{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)(Ia,{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)(Ia,{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`,Pa.version]})]})})}var Ra=`Show confidence levels, evidence, documentation links, finding filters and triage shortcuts (j/k, f, 1/2)`;function za(){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:Ra,children:[e?(0,G.jsx)(`span`,{"aria-hidden":`true`,className:`size-1.5 shrink-0 rounded-full bg-primary`}):null,`Advanced view`]})}function Ba(){let e=ae()===`advanced`;return(0,G.jsx)(rn,{checked:e,onCheckedChange:e=>xe.getState().setWidgetDensity(e?`advanced`:`basic`),title:Ra,children:`Advanced view`})}var Va=`docs/`;function Ha(e,t){return e===`warning`?`${t} warning${t===1?``:`s`}`:`${t} ${e}`}function Ua(e,t){return e.stageId!=null&&t.includes(e.stageId)?!0:jn(e)?.some(e=>t.includes(e))??!1}function Wa(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=>Ua(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 Ga({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=ka(),y=H(e=>e.appModel),b=(0,W.useMemo)(()=>Wa(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)(Ma,{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":`${Ha(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:Ha(j,N)}):(0,G.jsx)(ge,{label:Ha(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)(ja,{}):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)(za,{}),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:Va,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)(Aa,{...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)(Ba,{}),f?null:(0,G.jsx)(K,{nativeButton:!1,render:(0,G.jsx)(`a`,{href:Va,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)(Na,{open:x,entries:b,onSelect:E,onOpenChange:S}),(0,G.jsx)(La,{open:C,onOpenChange:w})]})}function Ka(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,Ga as n,Nn as o,jn as p,or as r,In as s,Ka as t,Ln as u,xn as v,en as w,mn as x,Sn as y};
|