sparkforensics-server 0.5.2 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/assets/AutoscalingChurn-CRA2Mb7F.js +1 -0
- package/public/assets/CacheUtilization-Bh9OY_V9.js +1 -0
- package/public/assets/{CachingOpportunity-D1NcHs0V.js → CachingOpportunity-oCiQwmTJ.js} +1 -1
- package/public/assets/{ColdStart-CdRJ9gD8.js → ColdStart-BJrtjfmn.js} +1 -1
- package/public/assets/ConfigAudit-DMvKxySP.js +1 -0
- package/public/assets/{CoreUsageArea-a--NTRGY.js → CoreUsageArea-REC2zsKw.js} +1 -1
- package/public/assets/Dashboard-BHZ76JCu.js +2 -0
- package/public/assets/DisclosureContext-OO7X1HAx.js +1 -0
- package/public/assets/{DuplicatePlanSubtree-dobXdz7E.js → DuplicatePlanSubtree-BgG-L-cK.js} +1 -1
- package/public/assets/ExecutorUtilization-D2KhSVbY.js +1 -0
- package/public/assets/{GcPressure-8-G2ri10.js → GcPressure-D1BTE8qh.js} +1 -1
- package/public/assets/{IncompleteRun-B91lky7a.js → IncompleteRun-DD40xUpy.js} +1 -1
- package/public/assets/{JobFailures-BsWvBMyJ.js → JobFailures-YwNzCF19.js} +1 -1
- package/public/assets/MemoryUtilization-9b8ee_3_.js +1 -0
- package/public/assets/{OverBroadcast-DdN8JIJH.js → OverBroadcast-CfctS8a8.js} +1 -1
- package/public/assets/{PartitionSizing-CY5HDYtp.js → PartitionSizing-VG8kBgG5.js} +1 -1
- package/public/assets/{PlanExplorer-DgHCDBD_.js → PlanExplorer-DmubTAOP.js} +1 -1
- package/public/assets/PlanGraphRoute-DctPZjS0.js +1 -0
- package/public/assets/RetryWaste-CnpM8bB7.js +1 -0
- package/public/assets/{ShuffleIO-MMnDESkF.js → ShuffleIO-D13vGmas.js} +1 -1
- package/public/assets/Skew-DlagstYP.js +1 -0
- package/public/assets/SlowHost-cSkLRZ_e.js +1 -0
- package/public/assets/{SmallFiles-BoK3R1Ex.js → SmallFiles-B-kERMcq.js} +1 -1
- package/public/assets/{SpeculationWaste-CnVxB5AJ.js → SpeculationWaste-DaysAzXO.js} +1 -1
- package/public/assets/Spill-H44Gz4US.js +1 -0
- package/public/assets/{StageFailed-mAhHU4l_.js → StageFailed-DCfii9h_.js} +1 -1
- package/public/assets/{StageFindingGroup-BEtPWcT0.js → StageFindingGroup-BXJ0Mj5n.js} +1 -1
- package/public/assets/{StageHeader-DJkYkrsU.js → StageHeader--oN2J-oD.js} +1 -1
- package/public/assets/StageShape-IZ80CZiJ.js +1 -0
- package/public/assets/{StageSlowness-BPRw-otN.js → StageSlowness--BRIaBc1.js} +1 -1
- package/public/assets/Straggler-Ctq0Df_o.js +1 -0
- package/public/assets/TaskFailures-Bks_gqhL.js +1 -0
- package/public/assets/{TinyTask-Bi84qU7n.js → TinyTask-BssfzGFB.js} +1 -1
- package/public/assets/{UnderBroadcast-DdQV7htE.js → UnderBroadcast-DsScrxc-.js} +1 -1
- package/public/assets/{finding-anchor-Cl6_5hfV.js → finding-anchor-BYW1oz5R.js} +1 -1
- package/public/assets/{impact-sort-CssZ6MT2.js → impact-sort-xzy0g-Vh.js} +1 -1
- package/public/assets/index-DhpRGMZc.css +2 -0
- package/public/assets/index-DwqkFUFk.js +14 -0
- package/public/assets/instrument-sans-latin-ext-wdth-normal-C5E2Gvlv.woff2 +0 -0
- package/public/assets/instrument-sans-latin-wdth-normal-BVScPF0l.woff2 +0 -0
- package/public/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/public/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/public/assets/react-vendor-DfpuPQZf.js +9 -0
- package/public/assets/{select-CQjNhprm.js → select-C8edjYTq.js} +1 -1
- package/public/assets/{usePagedRows-Dyl6T8Ok.js → usePagedRows-CsuUFeYx.js} +1 -1
- package/public/assets/useRecentFiles-BvkKo3JN.js +11 -0
- package/public/assets/{useSortMode-Dhvit8dt.js → useSortMode-joX71BZN.js} +1 -1
- package/public/docs/404.html +3 -7
- package/public/docs/assets/{app.eYTPqTeq.js → app.CnWL6bKV.js} +1 -1
- package/public/docs/assets/chunks/@localSearchIndexroot.tE5pz54z.js +1 -0
- package/public/docs/assets/chunks/{VPLocalSearchBox.DsZrQKQR.js → VPLocalSearchBox.C0IBKeRQ.js} +1 -1
- package/public/docs/assets/chunks/{theme.DsTNE2pE.js → theme.BH-2HuRf.js} +2 -2
- package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.CQgn1t_M.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.wulOueeB.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.wj6Et6UD.js → contributor-guide_architecture_detector-contract.md.N4hhenrA.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.js → contributor-guide_architecture_detector-contract_threshold-tables.md.Dp3c40rx.js} +1 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.DfvbqEUu.js +1 -0
- package/public/docs/assets/{contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.lean.js → contributor-guide_architecture_impact-estimation.md.DfvbqEUu.lean.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.js → contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.Cwm1jHmn.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.BUucRc0A.lean.js → contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md.Cwm1jHmn.lean.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.js → contributor-guide_architecture_worker-protocol_cli-and-mcp.md.BX1XnFbq.js} +1 -1
- package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.js → contributor-guide_architecture_worker-protocol_evidence-report.md.CiQl1MLb.js} +1 -1
- package/public/docs/assets/{contributor-guide_development-setup.md.D9bu4j_c.js → contributor-guide_development-setup.md.DQdzera7.js} +1 -1
- package/public/docs/assets/instrument-sans-latin-ext-wdth-normal.C5E2Gvlv.woff2 +0 -0
- package/public/docs/assets/instrument-sans-latin-wdth-normal.BVScPF0l.woff2 +0 -0
- package/public/docs/assets/jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2 +0 -0
- package/public/docs/assets/jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2 +0 -0
- package/public/docs/assets/jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2 +0 -0
- package/public/docs/assets/jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2 +0 -0
- package/public/docs/assets/jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2 +0 -0
- package/public/docs/assets/style.CyK9Ss73.css +1 -0
- package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.BEepbDDL.js +24 -0
- package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.BEepbDDL.lean.js +1 -0
- package/public/docs/assets/{user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.js → user-guide_mcp-tools_get-run-summary.md.EhaIsele.js} +1 -1
- package/public/docs/assets/user-guide_understanding-findings.md.3C7KCEZO.js +1 -0
- package/public/docs/contributor-guide/architecture/board-widgets/caching-and-memory.html +6 -10
- package/public/docs/contributor-guide/architecture/board-widgets/plan-advisor.html +4 -8
- package/public/docs/contributor-guide/architecture/board-widgets/visual-system-and-templating.html +6 -10
- package/public/docs/contributor-guide/architecture/board-widgets.html +4 -8
- package/public/docs/contributor-guide/architecture/detector-contract/plan-attribution.html +4 -8
- package/public/docs/contributor-guide/architecture/detector-contract/threshold-tables.html +6 -10
- package/public/docs/contributor-guide/architecture/detector-contract.html +6 -10
- package/public/docs/contributor-guide/architecture/drill-down/plan-graph.html +4 -8
- package/public/docs/contributor-guide/architecture/drill-down.html +4 -8
- package/public/docs/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage.html +6 -10
- package/public/docs/contributor-guide/architecture/impact-estimation/stage-union-rollup.html +4 -8
- package/public/docs/contributor-guide/architecture/impact-estimation.html +6 -10
- package/public/docs/contributor-guide/architecture/index.html +4 -8
- package/public/docs/contributor-guide/architecture/overview.html +4 -8
- package/public/docs/contributor-guide/architecture/state-and-history/history-server-intake.html +4 -8
- package/public/docs/contributor-guide/architecture/state-and-history/run-comparison-internals.html +4 -8
- package/public/docs/contributor-guide/architecture/state-and-history.html +4 -8
- package/public/docs/contributor-guide/architecture/widget-rendering/findings-tab.html +4 -8
- package/public/docs/contributor-guide/architecture/widget-rendering/investigation-routing.html +4 -8
- package/public/docs/contributor-guide/architecture/widget-rendering/list-sort-mode.html +4 -8
- package/public/docs/contributor-guide/architecture/widget-rendering/reference-section.html +4 -8
- package/public/docs/contributor-guide/architecture/widget-rendering/row-expand-contract.html +4 -8
- package/public/docs/contributor-guide/architecture/widget-rendering.html +4 -8
- package/public/docs/contributor-guide/architecture/worker-protocol/cli-and-mcp.html +6 -10
- package/public/docs/contributor-guide/architecture/worker-protocol/core-and-event-validation.html +4 -8
- package/public/docs/contributor-guide/architecture/worker-protocol/evidence-availability.html +4 -8
- package/public/docs/contributor-guide/architecture/worker-protocol/evidence-report.html +6 -10
- package/public/docs/contributor-guide/architecture/worker-protocol.html +4 -8
- package/public/docs/contributor-guide/contributing.html +4 -8
- package/public/docs/contributor-guide/development-setup.html +6 -10
- package/public/docs/contributor-guide/testing.html +4 -8
- package/public/docs/favicon.svg +2 -2
- package/public/docs/hashmap.json +1 -1
- package/public/docs/index.html +4 -8
- package/public/docs/tuning-reference/anti-patterns.html +4 -8
- package/public/docs/tuning-reference/aqe.html +4 -8
- package/public/docs/tuning-reference/bottleneck-broadcast-sizing.html +4 -8
- package/public/docs/tuning-reference/bottleneck-cold-start.html +4 -8
- package/public/docs/tuning-reference/bottleneck-duplicate-plan-subtree.html +4 -8
- package/public/docs/tuning-reference/bottleneck-failures.html +4 -8
- package/public/docs/tuning-reference/bottleneck-gc.html +4 -8
- package/public/docs/tuning-reference/bottleneck-job-failure-rate.html +4 -8
- package/public/docs/tuning-reference/bottleneck-memory-utilization.html +4 -8
- package/public/docs/tuning-reference/bottleneck-retry-waste.html +4 -8
- package/public/docs/tuning-reference/bottleneck-shuffle.html +4 -8
- package/public/docs/tuning-reference/bottleneck-skew.html +4 -8
- package/public/docs/tuning-reference/bottleneck-slow-host.html +4 -8
- package/public/docs/tuning-reference/bottleneck-small-files.html +4 -8
- package/public/docs/tuning-reference/bottleneck-spill.html +4 -8
- package/public/docs/tuning-reference/bottleneck-straggler.html +4 -8
- package/public/docs/tuning-reference/bottleneck-tiny-tasks.html +4 -8
- package/public/docs/tuning-reference/bottleneck-utilization.html +4 -8
- package/public/docs/tuning-reference/caching.html +4 -8
- package/public/docs/tuning-reference/cluster-config.html +4 -8
- package/public/docs/tuning-reference/config.html +4 -8
- package/public/docs/tuning-reference/data-formats.html +4 -8
- package/public/docs/tuning-reference/index.html +5 -9
- package/public/docs/tuning-reference/intro.html +4 -8
- package/public/docs/tuning-reference/joins.html +4 -8
- package/public/docs/tuning-reference/memory-model.html +4 -8
- package/public/docs/tuning-reference/metrics.html +4 -8
- package/public/docs/tuning-reference/partitioning.html +4 -8
- package/public/docs/tuning-reference/pyspark.html +4 -8
- package/public/docs/tuning-reference/shuffle.html +4 -8
- package/public/docs/tuning-reference/spark-architecture.html +4 -8
- package/public/docs/tuning-reference/table-formats.html +4 -8
- package/public/docs/user-guide/alternative-log-retrieval/managed-platforms.html +4 -8
- package/public/docs/user-guide/alternative-log-retrieval/ssh-bastion.html +4 -8
- package/public/docs/user-guide/alternative-log-retrieval.html +4 -8
- package/public/docs/user-guide/getting-started/ci-and-automation.html +9 -12
- package/public/docs/user-guide/getting-started/reading-the-dashboard.html +4 -8
- package/public/docs/user-guide/getting-started/regression-metric-keys.html +4 -8
- package/public/docs/user-guide/getting-started/tuning-thresholds.html +4 -8
- package/public/docs/user-guide/getting-started.html +4 -8
- package/public/docs/user-guide/mcp-tools/compare-runs.html +4 -8
- package/public/docs/user-guide/mcp-tools/diagnose-run.html +4 -8
- package/public/docs/user-guide/mcp-tools/evaluate-budgets.html +4 -8
- package/public/docs/user-guide/mcp-tools/get-finding-documentation.html +4 -8
- package/public/docs/user-guide/mcp-tools/get-finding-evidence.html +4 -8
- package/public/docs/user-guide/mcp-tools/get-reference-doc.html +4 -8
- package/public/docs/user-guide/mcp-tools/get-run-summary.html +6 -10
- package/public/docs/user-guide/mcp-tools/list-runs.html +4 -8
- package/public/docs/user-guide/mcp-tools.html +4 -8
- package/public/docs/user-guide/run-comparison/how-stages-are-matched.html +4 -8
- package/public/docs/user-guide/run-comparison.html +4 -8
- package/public/docs/user-guide/understanding-findings.html +6 -10
- package/public/export-template.html +46 -46
- package/public/favicon.svg +2 -2
- package/public/index.html +4 -7
- package/vendor-core/allocation.js +105 -20
- package/vendor-core/api-merge-writes.js +1 -0
- package/vendor-core/core-source-hash.txt +1 -1
- package/vendor-core/delta-log-paths.js +10 -1
- package/vendor-core/detectors.js +73 -38
- package/vendor-core/docs-content/detection/mem.md +1 -1
- package/vendor-core/docs-content/detection/skew.md +2 -1
- package/vendor-core/docs-content/detection/util.md +6 -2
- package/vendor-core/efficiency-model.js +22 -14
- package/vendor-core/finding-presentation.js +13 -6
- package/vendor-core/finding-types.js +21 -10
- package/vendor-core/impact-model.js +2 -2
- package/vendor-core/remediation.js +10 -5
- package/vendor-core/run-output.js +14 -3
- package/vendor-core/types.js +12 -2
- package/vendor-core/wall-clock.js +8 -0
- package/vendor-core/wasted-core-hours.js +12 -11
- package/vendor-core/write-targets.js +32 -0
- package/public/assets/AutoscalingChurn-8t3U3isq.js +0 -1
- package/public/assets/CacheUtilization-CJs9tTum.js +0 -1
- package/public/assets/ConfigAudit-B5Gbe5js.js +0 -1
- package/public/assets/Dashboard-C1hNeX49.js +0 -2
- package/public/assets/DisclosureContext-ZpE6CkHx.js +0 -1
- package/public/assets/ExecutorUtilization-D9grwi7t.js +0 -1
- package/public/assets/MemoryUtilization-BM5schZI.js +0 -1
- package/public/assets/PlanGraphRoute-DH3KJb8j.js +0 -1
- package/public/assets/RetryWaste-DOnE9vGF.js +0 -1
- package/public/assets/Skew-BmZZJ5ms.js +0 -1
- package/public/assets/SlowHost-CsJzfEqo.js +0 -1
- package/public/assets/Spill-BhNicyBy.js +0 -1
- package/public/assets/StageShape-BDxRknLp.js +0 -1
- package/public/assets/Straggler-CZCbnOWP.js +0 -1
- package/public/assets/TaskFailures-C57YcLFQ.js +0 -1
- package/public/assets/index-2h_TgUAb.css +0 -2
- package/public/assets/index-B-03mG7K.js +0 -14
- package/public/assets/react-vendor-DEdfrRTJ.js +0 -9
- package/public/assets/useRecentFiles-XZEnLlal.js +0 -11
- package/public/docs/assets/chunks/@localSearchIndexroot.u_e5bQz4.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.js +0 -1
- package/public/docs/assets/contributor-guide_architecture_impact-estimation.md.CZv_ZGOp.js +0 -1
- package/public/docs/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/public/docs/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/public/docs/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/public/docs/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/public/docs/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/public/docs/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/public/docs/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/public/docs/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/public/docs/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/public/docs/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/public/docs/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/public/docs/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/public/docs/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/public/docs/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/public/docs/assets/style.tmDhD3c8.css +0 -1
- package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.js +0 -23
- package/public/docs/assets/user-guide_getting-started_ci-and-automation.md.OUQqw3mI.lean.js +0 -1
- package/public/docs/assets/user-guide_understanding-findings.md.C9YRruMT.js +0 -1
- /package/public/docs/assets/{contributor-guide_architecture_board-widgets_caching-and-memory.md.8bH1HnZp.lean.js → contributor-guide_architecture_board-widgets_caching-and-memory.md.CQgn1t_M.lean.js} +0 -0
- /package/public/docs/assets/{contributor-guide_architecture_board-widgets_visual-system-and-templating.md.DYgUpIJB.lean.js → contributor-guide_architecture_board-widgets_visual-system-and-templating.md.wulOueeB.lean.js} +0 -0
- /package/public/docs/assets/{contributor-guide_architecture_detector-contract.md.wj6Et6UD.lean.js → contributor-guide_architecture_detector-contract.md.N4hhenrA.lean.js} +0 -0
- /package/public/docs/assets/{contributor-guide_architecture_detector-contract_threshold-tables.md.CKjWG56Y.lean.js → contributor-guide_architecture_detector-contract_threshold-tables.md.Dp3c40rx.lean.js} +0 -0
- /package/public/docs/assets/{contributor-guide_architecture_worker-protocol_cli-and-mcp.md.DC1YqXBp.lean.js → contributor-guide_architecture_worker-protocol_cli-and-mcp.md.BX1XnFbq.lean.js} +0 -0
- /package/public/docs/assets/{contributor-guide_architecture_worker-protocol_evidence-report.md.DVGZOWvW.lean.js → contributor-guide_architecture_worker-protocol_evidence-report.md.CiQl1MLb.lean.js} +0 -0
- /package/public/docs/assets/{contributor-guide_development-setup.md.D9bu4j_c.lean.js → contributor-guide_development-setup.md.DQdzera7.lean.js} +0 -0
- /package/public/docs/assets/{user-guide_mcp-tools_get-run-summary.md.DpxZ4ZNp.lean.js → user-guide_mcp-tools_get-run-summary.md.EhaIsele.lean.js} +0 -0
- /package/public/docs/assets/{user-guide_understanding-findings.md.C9YRruMT.lean.js → user-guide_understanding-findings.md.3C7KCEZO.lean.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./rolldown-runtime-hePW80VL.js";import{M as e}from"./charts-vendor-0VMaLVLN.js";import{a as t,c as n,d as r,f as i,i as a,l as o,n as s,o as c,p as l,r as u,s as d,t as f,u as p}from"./react-vendor-
|
|
1
|
+
import"./rolldown-runtime-hePW80VL.js";import{M as e}from"./charts-vendor-0VMaLVLN.js";import{a as t,c as n,d as r,f as i,i as a,l as o,n as s,o as c,p as l,r as u,s as d,t as f,u as p}from"./react-vendor-DfpuPQZf.js";import{Dt as m,_t as h,vt as g}from"./DisclosureContext-OO7X1HAx.js";import{p as _}from"./plan-graph-vendor-BYl-AzN5.js";import{A as v}from"./useRecentFiles-BvkKo3JN.js";e();var y=_(),b=l;function x({className:e,...t}){return(0,y.jsx)(r,{"data-slot":`select-value`,className:m(`flex flex-1 text-left`,e),...t})}function S({className:e,size:t=`default`,children:n,...r}){return(0,y.jsxs)(i,{"data-slot":`select-trigger`,"data-size":t,className:m(`flex w-fit cursor-pointer items-center justify-between gap-1.5 rounded-lg border border-input bg-transparent py-2 pr-2 pl-2.5 text-sm whitespace-nowrap transition-colors outline-none select-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 data-placeholder:text-muted-foreground data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-1.5 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),...r,children:[n,(0,y.jsx)(p,{render:(0,y.jsx)(g,{className:`pointer-events-none size-4 text-muted-foreground`})})]})}function C({className:e,children:t,side:r=`bottom`,sideOffset:i=4,align:a=`center`,alignOffset:s=0,alignItemWithTrigger:l=!0,...u}){return(0,y.jsx)(o,{children:(0,y.jsx)(n,{side:r,sideOffset:i,align:a,alignOffset:s,alignItemWithTrigger:l,className:`isolate z-50`,children:(0,y.jsxs)(d,{"data-slot":`select-content`,"data-align-trigger":l,className:m(`relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[align-trigger=true]:animate-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95`,e),...u,children:[(0,y.jsx)(T,{}),(0,y.jsx)(c,{children:t}),(0,y.jsx)(E,{})]})})})}function w({className:e,children:n,...r}){return(0,y.jsxs)(t,{"data-slot":`select-item`,className:m(`relative flex w-full cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2`,e),...r,children:[(0,y.jsx)(u,{className:`flex flex-1 shrink-0 gap-2 whitespace-nowrap`,children:n}),(0,y.jsx)(a,{render:(0,y.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex size-4 items-center justify-center`}),children:(0,y.jsx)(v,{className:`pointer-events-none`})})]})}function T({className:e,...t}){return(0,y.jsx)(f,{"data-slot":`select-scroll-up-button`,className:m(`top-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,y.jsx)(h,{})})}function E({className:e,...t}){return(0,y.jsx)(s,{"data-slot":`select-scroll-down-button`,className:m(`bottom-0 z-10 flex w-full cursor-default items-center justify-center bg-popover py-1 [&_svg:not([class*='size-'])]:size-4`,e),...t,children:(0,y.jsx)(g,{})})}export{x as a,S as i,C as n,w as r,b as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import"./DisclosureContext-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import"./DisclosureContext-OO7X1HAx.js";var n=e(t(),1);function r(e,t,r,i=null){let a=Math.ceil(e.length/6),o=Math.min(t,Math.max(0,a-1)),s=i==null||i===-1?o:Math.floor(i/6),c=e.slice(s*6,(s+1)*6);return(0,n.useLayoutEffect)(()=>{if(i==null||i===-1)return;let e=Math.floor(i/6);r(t=>t===e?t:e)},[i]),{totalPages:a,effectivePage:s,visible:c}}export{r as t};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{E as t,M as n,c as r,d as i,g as a,h as o,l as s,m as c,u as l}from"./charts-vendor-0VMaLVLN.js";import{B as u,F as d,G as f,H as p,I as m,K as h,L as g,M as _,N as v,P as y,R as b,U as x,V as S,W as C,z as w}from"./react-vendor-DfpuPQZf.js";import{$ as T,D as E,Dt as D,F as O,G as k,I as A,L as j,O as M,Ot as N,P,Q as F,S as ee,St as I,Z as te,_t as ne,bt as L,c as R,dt as z,f as re,ft as ie,gt as ae,it as oe,k as se,l as ce,n as le,r as ue,s as de,u as fe,v as pe,vt as me,xt as B,yt as he,z as ge}from"./DisclosureContext-OO7X1HAx.js";import{p as _e}from"./plan-graph-vendor-BYl-AzN5.js";import{$ as ve,At as ye,B as be,C as xe,Ct as Se,D as Ce,Et as we,H as Te,J as Ee,K as De,Mt as Oe,O as ke,Q as Ae,R as je,S as Me,St as Ne,T as Pe,U as Fe,V as Ie,W as Le,X as Re,Y as ze,Z as Be,_ as Ve,_t as He,a as Ue,at as We,bt as Ge,c as Ke,ct as qe,d as Je,dt as Ye,et as Xe,f as Ze,ft as Qe,g as $e,gt as et,h as tt,ht as nt,i as rt,it,jt as V,kt as at,m as ot,mt as st,n as ct,nt as lt,o as ut,ot as dt,p as ft,pt,q as mt,r as ht,rt as gt,s as _t,st as vt,t as yt,tt as bt,ut as xt,v as St,w as Ct,wt,y as Tt,z as Et}from"./index-DwqkFUFk.js";var Dt={name:`check`,size:24,node:[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]};Dt.node;var Ot=he(Dt),kt={name:`chevron-right`,size:24,node:[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]};kt.node;var At=he(kt),jt={name:`download`,size:24,node:[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]};jt.node;var Mt=he(jt),Nt={name:`ellipsis`,size:24,node:[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]],aliases:[`more-horizontal`]};Nt.node;var Pt=he(Nt),Ft={name:`house`,size:24,node:[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]],aliases:[`home`]};Ft.node;var It=he(Ft),Lt={name:`keyboard`,size:24,node:[[`path`,{d:`M10 8h.01`,key:`1r9ogq`}],[`path`,{d:`M12 12h.01`,key:`1mp3jc`}],[`path`,{d:`M14 8h.01`,key:`1primd`}],[`path`,{d:`M16 12h.01`,key:`1l6xoz`}],[`path`,{d:`M18 8h.01`,key:`emo2bl`}],[`path`,{d:`M6 8h.01`,key:`x9i8wu`}],[`path`,{d:`M7 16h10`,key:`wp8him`}],[`path`,{d:`M8 12h.01`,key:`czm47f`}],[`rect`,{width:`20`,height:`16`,x:`2`,y:`4`,rx:`2`,key:`18n3k1`}]]};Lt.node;var Rt=he(Lt),H=e(n(),1),U=_e();function zt({className:e,orientation:t=`horizontal`,...n}){return(0,U.jsx)(h,{"data-slot":`tabs`,"data-orientation":t,className:D(`group/tabs flex gap-2 data-horizontal:flex-col`,e),...n})}var Bt=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 Vt({className:e,variant:t=`default`,...n}){return(0,U.jsx)(x,{"data-slot":`tabs-list`,"data-variant":t,className:D(Bt({variant:t}),e),...n})}function Ht({className:e,...t}){return(0,U.jsx)(f,{"data-slot":`tabs-trigger`,className:D(`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:-mb-px group-data-[variant=chrome]/tabs-list:gap-2 group-data-[variant=chrome]/tabs-list:rounded-none group-data-[variant=chrome]/tabs-list:border-0 group-data-[variant=chrome]/tabs-list:border-b-2 group-data-[variant=chrome]/tabs-list:border-transparent group-data-[variant=chrome]/tabs-list:px-2.5 group-data-[variant=chrome]/tabs-list:py-2.5 group-data-[variant=chrome]/tabs-list:text-[0.8125rem] group-data-[variant=chrome]/tabs-list:font-medium group-data-[variant=chrome]/tabs-list:text-muted-foreground group-data-[variant=chrome]/tabs-list:hover:text-foreground`,`group-data-[variant=chrome]/tabs-list:data-active:border-accent group-data-[variant=chrome]/tabs-list:data-active:bg-transparent 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-accent dark:group-data-[variant=chrome]/tabs-list:data-active:bg-transparent`,`tap-target-comfortable tap-target-comfortable--sm`,e),...t})}function Ut({className:e,...t}){return(0,U.jsx)(C,{"data-slot":`tabs-content`,className:D(`flex-1 text-sm outline-none`,e),...t})}var Wt={executorMetrics:`Executor metrics`,rddStorageSnapshots:`RDD storage snapshots`,sqlPlan:`SQL plan`,sparkConfiguration:`Spark configuration`,taskCoreTime:`Task and core time`,infrastructureContext:`Infrastructure context`,sourceContext:`Source context`,costContext:`Cost context`};function Gt(e){return Wt[e]}var Kt={revealRequest:0,evidenceCardOpen:!0,setEvidenceCardOpen:()=>{},revealEvidence:()=>{},registerRow:()=>{}},qt=(0,H.createContext)(null);function Jt({children:e}){let[t,n]=(0,H.useState)(!1),r=(0,H.useRef)(null),[i,a]=(0,H.useState)(0),o=(0,H.useRef)(new Map),s=(0,H.useCallback)((e,t)=>{t?o.current.set(e,t):o.current.delete(e)},[]),c=(0,H.useCallback)(e=>{r.current=e,n(!0),a(e=>e+1)},[]);(0,H.useLayoutEffect)(()=>{let e=r.current;e&&i!==0&&queueMicrotask(()=>{o.current.get(e)?.focus()})},[i]);let l=(0,H.useMemo)(()=>({revealRequest:i,evidenceCardOpen:t,setEvidenceCardOpen:n,revealEvidence:c,registerRow:s}),[i,t,c,s]);return(0,U.jsx)(qt.Provider,{value:l,children:e})}function Yt(){return(0,H.useContext)(qt)??Kt}function Xt(){let{revealEvidence:e}=Yt();return{revealEvidence:e}}function Zt(){let{revealRequest:e,evidenceCardOpen:t,setEvidenceCardOpen:n}=Yt();return{revealRequest:e,evidenceCardOpen:t,setEvidenceCardOpen:n}}function Qt(){let{registerRow:e}=Yt();return e}function $t({...e}){return(0,U.jsx)(m,{"data-slot":`dropdown-menu`,...e})}function en({...e}){return(0,U.jsx)(d,{"data-slot":`dropdown-menu-trigger`,...e})}function tn({align:e=`start`,alignOffset:t=0,side:n=`bottom`,sideOffset:r=4,className:i,...a}){return(0,U.jsx)(b,{children:(0,U.jsx)(g,{className:`isolate z-50 outline-none`,align:e,alignOffset:t,side:n,sideOffset:r,children:(0,U.jsx)(w,{"data-slot":`dropdown-menu-content`,className:D(`z-50 max-h-(--available-height) w-(--anchor-width) min-w-32 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 outline-none data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:overflow-hidden data-closed:fade-out-0 data-closed:zoom-out-95 motion-reduce:animate-none`,i),...a})})})}function W({className:e,inset:t,variant:n=`default`,...r}){return(0,U.jsx)(u,{"data-slot":`dropdown-menu-item`,"data-inset":t,"data-variant":n,className:D(`group/dropdown-menu-item relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:pl-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive`,e),...r})}function nn({className:e,children:t,checked:n,inset:r,...i}){return(0,U.jsxs)(p,{"data-slot":`dropdown-menu-checkbox-item`,"data-inset":r,className:D(`relative flex cursor-default items-center gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:pl-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,e),checked:n,...i,children:[(0,U.jsx)(`span`,{className:`pointer-events-none absolute right-2 flex items-center justify-center`,"data-slot":`dropdown-menu-checkbox-item-indicator`,children:(0,U.jsx)(S,{children:(0,U.jsx)(Ot,{})})}),t]})}function rn({className:e,...t}){return(0,U.jsx)(y,{"data-slot":`dropdown-menu-separator`,className:D(`-mx-1 my-1 h-px bg-border`,e),...t})}function an({className:e,type:t,...n}){return(0,U.jsx)(v,{type:t,"data-slot":`input`,className:D(`h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-[3px] aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40`,e),...n})}var on=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 sn({className:e,variant:t=`default`,size:n=`default`,...r}){return(0,U.jsx)(_,{"data-slot":`toggle`,className:D(on({variant:t,size:n,className:e})),...r})}var cn={light:``,dark:`.dark`},ln={width:320,height:200},un=H.createContext(null);function dn({id:e,className:n,children:r,config:i,initialDimension:a=ln,...o}){let s=H.useId(),c=`chart-${e??s.replace(/:/g,``)}`;return(0,U.jsx)(un.Provider,{value:{config:i},children:(0,U.jsxs)(`div`,{"data-slot":`chart`,"data-chart":c,className:D(`flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden`,n),...o,children:[(0,U.jsx)(fn,{id:c,config:i}),(0,U.jsx)(t,{initialDimension:a,children:r})]})})}var fn=({id:e,config:t})=>{let n=Object.entries(t).filter(([,e])=>e.theme??e.color);return n.length?(0,U.jsx)(`style`,{dangerouslySetInnerHTML:{__html:Object.entries(cn).map(([t,r])=>`
|
|
2
|
+
${r} [data-chart=${e}] {
|
|
3
|
+
${n.map(([e,n])=>{let r=n.theme?.[t]??n.color;return r?` --color-${e}: ${r};`:null}).join(`
|
|
4
|
+
`)}
|
|
5
|
+
}
|
|
6
|
+
`).join(`
|
|
7
|
+
`)}}):null};async function pn(e){if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e);return}catch{}let t=document.createElement(`textarea`);t.value=e,t.style.position=`fixed`,t.style.opacity=`0`,document.body.appendChild(t);try{if(t.select(),!document.execCommand(`copy`))throw Error(`copy unavailable`)}finally{t.remove()}}var mn=`(prefers-reduced-motion: reduce)`;function hn(e){if(typeof window>`u`||!window.matchMedia)return()=>{};let t=window.matchMedia(mn);return t.addEventListener(`change`,e),()=>t.removeEventListener(`change`,e)}function gn(){return typeof window>`u`||!window.matchMedia?!1:window.matchMedia(mn).matches}function _n(){return(0,H.useSyncExternalStore)(hn,gn,()=>!1)}var vn={accent:`var(--color-accent)`,warning:`var(--color-warning)`,critical:`var(--color-critical)`,info:`var(--color-info)`,clean:`var(--color-clean)`,muted:`var(--color-muted-foreground)`,stage:`var(--color-chart-stage)`,startup:`var(--color-chart-startup)`,gap:`var(--color-chart-gap)`,idle:`var(--color-chart-idle)`},yn=`var(--color-popover-foreground)`,bn={background:`var(--color-popover)`,border:`1px solid var(--color-border)`,borderRadius:6,color:yn,fontSize:12,padding:`6px 10px`},xn={contentStyle:bn,labelStyle:{color:yn,fontWeight:600},itemStyle:{color:yn}};function Sn(e,t){return[e,...t].map(e=>e.join(` `)).join(`
|
|
8
|
+
`)}function Cn({caption:e,columns:t,rows:n,align:r}){let[i,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(!1);async function c(){try{await pn(Sn(t,n)),s(!0),setTimeout(()=>s(!1),1500)}catch{}}return(0,U.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,U.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,U.jsx)(`button`,{type:`button`,className:`cursor-pointer text-muted-foreground text-xs underline`,"aria-expanded":i,onClick:()=>a(e=>!e),children:`▤ Table`}),(0,U.jsx)(`button`,{type:`button`,className:`cursor-pointer text-muted-foreground text-xs underline`,onClick:c,children:`⧉ Copy`}),(0,U.jsx)(`span`,{"aria-live":`polite`,className:`text-xs text-muted-foreground`,children:o?`Copied`:``})]}),(0,U.jsxs)(je,{className:i?void 0:`sr-only`,children:[(0,U.jsx)(be,{className:`sr-only`,children:e}),(0,U.jsx)(Fe,{children:(0,U.jsx)(Le,{children:t.map((e,t)=>(0,U.jsx)(Te,{className:r?.[t]===`right`?`text-right`:void 0,children:e},e))})}),(0,U.jsx)(Et,{children:n.map((e,t)=>(0,U.jsx)(Le,{children:e.map((e,t)=>(0,U.jsx)(Ie,{className:r?.[t]===`right`?`text-right`:void 0,children:e},t))},t))})]})]})}var wn=new Set([l,s,i,a,o,c,r]);function Tn(e){if(!(0,H.isValidElement)(e))return e;let{children:t,isAnimationActive:n}=e.props,r=t==null?t:H.Children.map(t,Tn),i=wn.has(e.type)&&n===void 0;return!i&&r===t?e:(0,H.cloneElement)(e,i?{isAnimationActive:!1}:{},...t==null?[]:[r])}function En({title:e,ariaLabel:t,height:n,children:r,table:i}){let a=_n()?Tn(r):r,o=le();return(0,U.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[e?(0,U.jsx)(`p`,{className:`text-muted-foreground text-xs font-medium`,children:e}):null,o?(0,U.jsx)(dn,{role:`img`,"aria-label":t,config:{},className:`aspect-auto w-full`,style:{height:n},initialDimension:{width:320,height:n},children:a}):(0,U.jsx)(`div`,{style:{height:n},"aria-hidden":!0}),i?(0,U.jsx)(Cn,{...i}):null]})}function Dn(e){let t=(0,H.useId)(),[n,r]=(0,H.useState)(!1);return e?{tooltipProps:{title:e,"aria-describedby":t,onFocus:()=>r(!0),onBlur:()=>r(!1)},srOnlyTooltip:(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{id:t,className:`sr-only`,children:e}),n?(0,U.jsx)(`span`,{"aria-hidden":`true`,"data-testid":`visible-tooltip`,className:`pointer-events-none absolute top-full left-0 z-50 mt-1 max-w-xs rounded-md border border-border bg-foreground px-2 py-1 text-xs font-normal whitespace-normal text-background shadow-md`,children:e}):null]})}:{tooltipProps:{},srOnlyTooltip:null}}function On({confidence:e,validationRequired:t,evidenceKey:n}){let{tooltipProps:r,srOnlyTooltip:i}=Dn(t),{revealEvidence:a}=Xt(),o=!!e&&e!==`high`,s=!!n;return!o&&!s?null:(0,U.jsxs)(`span`,{className:`relative inline-flex h-6 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-sm border border-border bg-muted/60 px-2 text-xs font-medium text-muted-foreground outline-none focus-visible:ring-2 focus-visible:ring-ring/50`,tabIndex:o?0:void 0,...o?r:{},children:[o?(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`inline-block size-2 shrink-0 rounded-full border border-dashed border-current`}):null,o?`${e} confidence`:null,o?i:null,o&&s?(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`opacity-60`,children:`·`}):null,s?(0,U.jsx)(`button`,{type:`button`,"aria-label":`Evidence: ${Gt(n)}`,className:`tap-target-comfortable tap-target-comfortable--sm inline-flex min-h-[22px] cursor-pointer items-center rounded-sm text-primary outline-none hover:underline underline-offset-2 focus-visible:ring-2 focus-visible:ring-ring/50`,onClick:()=>a(n),children:Gt(n)}):null]})}function kn(e,t){return e.filter(e=>e.type===t)}function An(e){return`stageIds`in e?e.stageIds:void 0}function jn({title:e,children:t,defaultOpen:n=!1}){let[r,i]=(0,H.useState)(n);return(0,U.jsxs)(E,{open:r,onOpenChange:i,className:`space-y-2`,children:[(0,U.jsxs)(se,{"aria-expanded":String(r),className:`tap-target-comfortable tap-target-comfortable--sm flex cursor-pointer items-center gap-2 bg-transparent text-left`,children:[(0,U.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}),r?(0,U.jsx)(ne,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`}):(0,U.jsx)(me,{"aria-hidden":`true`,className:`size-4 shrink-0 text-muted-foreground`})]}),(0,U.jsx)(M,{keepMounted:!0,children:t})]})}function Mn({title:e,rows:t,children:n,collapsible:r=!1,defaultOpen:i=!1}){let a=t.filter(e=>!!e);if(a.length===0&&!n)return null;let o=(0,U.jsx)(`div`,{className:`grid min-w-0 grid-cols-[auto_1fr] gap-x-4 gap-y-1 text-sm`,children:a.map(([e,t],n)=>(0,U.jsxs)(H.Fragment,{children:[(0,U.jsx)(`span`,{className:`text-muted-foreground`,children:e}),(0,U.jsx)(`span`,{className:`break-words`,children:t})]},n))});return r&&e?(0,U.jsx)(jn,{title:e,defaultOpen:i,children:(0,U.jsxs)(`div`,{className:`space-y-2`,children:[o,n]})}):(0,U.jsxs)(`section`,{className:`space-y-2`,children:[e?(0,U.jsx)(`h3`,{className:`font-heading text-sm font-medium`,children:e}):null,o,n]})}function Nn(e){return String(e).replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}function Pn(e,{title:t=`plan`}={}){if(!e)return``;let n=[`digraph "${Nn(t)}" {`,` rankdir=BT;`,` node [shape=box];`],r=new WeakMap,i=[],a=0;return Ge(e,(e,t)=>{let o=`n${a++}`;r.set(e,o);let s=e.detail&&e.detail!==e.name?`${e.name}\\n${e.detail}`:e.name;n.push(` ${o} [label="${Nn(s)}"];`),t&&i.push(` ${r.get(t)} -> ${o};`)},{dedupe:!0}),[...n,...i,`}`].join(`
|
|
9
|
+
`)}var Fn=`Derived from best-effort plan-text parsing: cross-check against the Summary tab before acting.`,In=`Derived from best-effort plan-text parsing: cross-check against the Tree tab before acting.`,Ln=`Derived from best-effort plan-text parsing: cross-check against the Tree tab or View plan graph before acting.`;function Rn(e){try{return xt(e)}catch{return null}}function zn(e){try{return Ye(e)}catch{return null}}function Bn(e,t){try{return Pn(e,{title:`stage-${t}`})||null}catch{return null}}function Vn(e,t,n,r){if(!n||r==null)return null;try{return Qe(e,t,n,r)}catch{return null}}function Hn(e,t){let n=t.stages.get(e);return(n?.sqlExecutionId==null?null:t.sql.get(n.sqlExecutionId))?.planTree??null}function Un(e){switch(e.kind){case`scan`:return[e.path?[`Path`,e.path]:null,e.format?[`Format`,e.format]:null,e.projectedColumns?.length?[`Columns`,e.projectedColumns.join(`, `)]:null,e.pushedFilters?.length?[`Filters`,e.pushedFilters.join(`, `)]:null];case`join`:return[[`Left keys`,e.leftKeys?.length?e.leftKeys.join(`, `):`(none)`],[`Right keys`,e.rightKeys?.length?e.rightKeys.join(`, `):`(none)`]];case`agg`:return[[`Group by`,e.groupByKeys?.length?e.groupByKeys.join(`, `):`(none)`],[`Functions`,e.aggregations?.length?e.aggregations.join(`, `):`(none)`]];case`exchange`:return[e.partitioning?[`Partitioning`,e.partitioning]:null,e.keys?.length?[`Keys`,e.keys.join(`, `)]:null,e.numPartitions?[`Partitions`,String(e.numPartitions)]:null];default:return[]}}function Wn({rows:e}){let[t,n]=(0,H.useState)(!1);return(0,U.jsxs)(`details`,{className:`pt-1 pl-4`,onToggle:e=>n(e.currentTarget.open),children:[(0,U.jsx)(`summary`,{className:`cursor-pointer text-xs text-muted-foreground`,children:`full detail`}),t?(0,U.jsx)(`div`,{className:`pt-1`,children:(0,U.jsx)(Mn,{rows:e})}):null]})}function Gn({node:e,depth:t,durationMap:n}){let r=(0,H.useRef)(null),[i,a]=(0,H.useState)(t<=1);(0,H.useEffect)(()=>{r.current&&(r.current.open=t<=1)},[]);let o=pt(e.name),s=e.detail??``,c=Rn(e),l=c?Un(c):[],u=l.some(Boolean),d=c?.kind===`scan`?``:et(e.name,s),f=e.exchangeRole===`read`?e.children[0]:void 0,p=n?.get(f??e),m=(f??e).metrics??[],h=m.length>0?nt(m):``,g=(f??e).children??[],_=g.length>0||m.length>0||u;return(0,U.jsxs)(`details`,{ref:r,"data-op":o,className:`rounded-md`,onToggle:e=>a(e.currentTarget.open),children:[(0,U.jsxs)(`summary`,{className:`flex list-none flex-wrap items-center gap-2 rounded-md px-1.5 py-1 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring [&::-webkit-details-marker]:hidden ${_?`cursor-pointer hover:bg-muted`:`cursor-default`}`,children:[_?(0,U.jsx)(At,{"aria-hidden":`true`,className:`size-3.5 shrink-0 text-muted-foreground transition-transform ${i?`rotate-90`:``}`}):(0,U.jsx)(`span`,{className:`size-3.5 shrink-0`}),(0,U.jsx)(`span`,{className:`font-medium`,children:e.name}),d?(0,U.jsx)(`span`,{title:s,className:`text-xs text-muted-foreground`,children:d}):null,c?.warning?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(R,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:Me}),(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:c.warning.detail}),(0,U.jsx)(fe,{children:(0,U.jsx)(On,{confidence:`low`})})]}):null,p!=null&&p>0?(0,U.jsxs)(`span`,{title:`Approximate wall-time attributed to this operator`,className:`text-xs text-muted-foreground`,children:[`~`,T(p)]}):null,h?(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:h}):null]}),m.length>0?(0,U.jsx)(`div`,{className:`flex flex-wrap gap-x-3 gap-y-1 pt-1 pl-6 text-xs text-muted-foreground`,children:m.map((e,t)=>(0,U.jsxs)(`span`,{children:[e.name,`: `,st(e)]},t))}):null,u?(0,U.jsx)(Wn,{rows:l}):null,g.length>0?(0,U.jsx)(`div`,{className:`ml-[7px] space-y-1 border-l border-border/60 pt-1 pl-3.5`,children:g.map((e,r)=>(0,U.jsx)(Gn,{node:e,depth:t+1,durationMap:n},r))}):null]})}function Kn(e){return`${e.path||`(unknown path)`} (${e.format})`}function qn(e){let t=e.leftKeys.length||e.rightKeys.length?` on ${e.leftKeys.join(`, `)||`(none)`} / ${e.rightKeys.join(`, `)||`(none)`}`:``;return`${e.joinType}${t}`}function Jn(e){let t=e.aggregations.join(`, `)||`(none)`;return e.groupByKeys.length?`${t} by ${e.groupByKeys.join(`, `)}`:t}function Yn(e){let t=new Map;for(let n of e)t.set(n.partitioning,(t.get(n.partitioning)??0)+1);return[...t.entries()].map(([e,t])=>`${e}×${t}`).join(`, `)}function Xn({summary:e,hasPlanGraph:t}){let{scans:n,joins:r,aggs:i,exchanges:a,warnings:o}=e,s=a.length>=4,c=s||o.length>0,l=t?Ln:In;return(0,U.jsx)(Mn,{rows:[n.length>0&&[`Sources (${n.length})`,n.map(Kn).join(`, `)],r.length>0&&[`Joins (${r.length})`,r.map(qn).join(`; `)],i.length>0&&[`Aggregations (${i.length})`,i.map(Jn).join(`; `)],a.length>0&&[`Exchanges (${a.length})`,(0,U.jsxs)(U.Fragment,{children:[Yn(a),s?(0,U.jsxs)(U.Fragment,{children:[` `,(0,U.jsx)(`span`,{className:`text-muted-foreground`,children:`— consider whether some joins/aggregations could share a partitioning scheme to avoid redundant shuffles.`}),` `,(0,U.jsx)(fe,{children:(0,U.jsx)(On,{confidence:`low`})})]}):null]})],o.length>0&&[`Warnings (${o.length})`,(0,U.jsxs)(`span`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,U.jsx)(R,{type:`duplicatePlanSubtree`,impactBand:`warning`,className:`bg-plan-aggregate/8 text-plan-aggregate`}),o.map(e=>e.detail).join(`; `),(0,U.jsx)(fe,{children:(0,U.jsx)(On,{confidence:`low`})})]})]],children:c?(0,U.jsx)(fe,{children:(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:l})}):null})}function Zn({stageId:e,appModel:t}){let n=B(e=>e.openPlanGraph),r=Hn(e,t);if(!r)return null;let i=t.stages.get(e),a=Vn(r,t,i?.sqlExecutionId==null?null:t.sql.get(i.sqlExecutionId),i?.sqlExecutionId),o=zn(r),s=Bn(r,e);return(0,U.jsxs)(zt,{defaultValue:`tree`,children:[(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,U.jsxs)(Vt,{"aria-label":`Plan view`,children:[(0,U.jsx)(Ht,{value:`tree`,children:`Tree`}),(0,U.jsx)(Ht,{value:`summary`,children:`Summary`})]}),(0,U.jsx)(`div`,{className:`flex gap-2`,children:s?(0,U.jsx)(V,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>n(e),children:`View plan graph`}):null})]}),(0,U.jsx)(Ut,{value:`tree`,children:(0,U.jsxs)(`div`,{className:`space-y-2 pt-3`,children:[(0,U.jsx)(Gn,{node:r,depth:0,durationMap:a}),(0,U.jsx)(fe,{children:(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Showing initial (pre-AQE) plan. Metrics reflect operators as planned; adaptive optimizations may have rewritten the actual execution.`})}),o&&o.warnings.length>0?(0,U.jsx)(fe,{children:(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:Fn})}):null]})}),(0,U.jsx)(Ut,{value:`summary`,children:(0,U.jsx)(`div`,{className:`pt-3`,children:o?(0,U.jsx)(Xn,{summary:o,hasPlanGraph:s!=null}):(0,U.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Plan summary couldn’t be parsed.`})})})]})}var Qn=`0.1.0`;function $n(e,t,n,r,i,a){return G({schemaVersion:3,provenance:a,app:e.app,stages:[...e.stages.values()],jobs:[...e.jobs.values()],sql:[...e.sql.values()],executors:e.executors,runAggregates:e.runAggregates,evidenceAvailability:e.evidenceAvailability,catalog:t,configFindings:n,skippedLines:r,interpretation:i})}var er=`__sparkforensicsMap`,tr=`__sparkforensicsSet`;function G(e){return e instanceof Map?{[er]:[...e].map(([e,t])=>[G(e),G(t)])}:e instanceof Set?{[tr]:[...e].map(G)}:Array.isArray(e)?e.map(G):e&&typeof e==`object`?Object.fromEntries(Object.entries(e).map(([e,t])=>[e,G(t)])):e}function nr(e){if(Array.isArray(e))return e.map(nr);if(e&&typeof e==`object`){let t=e;return Array.isArray(t[er])?new Map(t[er].map(([e,t])=>[nr(e),nr(t)])):Array.isArray(t[tr])?new Set(t[tr].map(nr)):Object.fromEntries(Object.entries(t).map(([e,t])=>[e,nr(t)]))}return e}var rr=[/\bip(?:-\d{1,3}){4}(?:\.[a-z0-9][a-z0-9-]*)*/gi,/\b(?:\d{1,3}\.){3}\d{1,3}\b/g],ir=[/\bapplication_\d{10,}_\d+\b/g];function ar(e,t){if(typeof e==`string`){for(let{patterns:n,out:r}of t)for(let t of n){let n=e.match(t);if(n)for(let e of n)r.add(e)}return}if(Array.isArray(e)){for(let n of e)ar(n,t);return}if(e&&typeof e==`object`)for(let n of Object.values(e))ar(n,t)}function K(e,t){if(Array.isArray(e)){for(let n of e)K(n,t);return}if(e&&typeof e==`object`)for(let[n,r]of Object.entries(e))n===`host`&&typeof r==`string`&&r.length>0?t.add(r):K(r,t)}function or(e){if(Array.isArray(e))return e.map(e=>or(e));if(e&&typeof e==`object`){let t={};for(let[n,r]of Object.entries(e))t[n]=n===`failureGroups`&&Array.isArray(r)?r.map(e=>e&&typeof e==`object`?qe(e):e):or(r);return t}return e}var sr=new Set([`stageFailureReason`,`exception`,`failureReason`]);function cr(e){if(Array.isArray(e))return e.map(e=>cr(e));if(e&&typeof e==`object`){let t=e.type===`stageFailed`,n={};for(let[r,i]of Object.entries(e))n[r]=(sr.has(r)||t&&r===`valueText`)&&typeof i==`string`?dt:cr(i);return n}return e}function lr(e){return cr(or(e))}function ur(e,t){if(e)for(let[n,r]of Object.entries(e)){let e=n.slice(n.lastIndexOf(`.`)+1).toLowerCase();(e===`host`||e===`hostname`)&&r&&t.add(r)}}function dr(e){let t=new Set,n=new Set,r=e?.summary?.app?.id;return typeof r==`string`&&r.length>0&&t.add(r),K(e?.findings,n),ar(e,[{patterns:rr,out:n},{patterns:ir,out:t}]),{appIds:t,hosts:n}}function fr(e,t){let n=new Map;return[...e].sort((e,t)=>e.localeCompare(t,`en`,{numeric:!0})).forEach((e,r)=>n.set(e,`${t}-${r+1}`)),n}function pr(e,t){if(typeof e==`string`){let n=e;for(let[e,r]of t)n=n.split(e).join(r);return n}if(Array.isArray(e))return e.map(e=>pr(e,t));if(e&&typeof e==`object`){let n={};for(let[r,i]of Object.entries(e))n[r]=pr(i,t);return n}return e}function mr(e,t){let n=[...t.appIds?fr(t.appIds,`app`):[],...fr(t.hosts,`host`)];return n.sort((e,t)=>t[0].length-e[0].length),pr(e,n)}function hr(e){return e.name==null?e:{...e,name:e.id??null}}function gr(e){let t=lr(e),{appIds:n,hosts:r}=dr(t),i=mr(t,{appIds:n,hosts:r}),a=i.summary?.app;return a?{...i,summary:{...i.summary,app:hr(a)}}:i}function _r(e){let t=lr(e),n=new Set,r=new Set,i=t.app?.id;typeof i==`string`&&i.length>0&&n.add(i),K(t.executors.added,r),K(t.executors.removed,r),K(t.catalog,r),K(t.configFindings,r),ur(t.app?.config,r),ar(t,[{patterns:rr,out:r},{patterns:ir,out:n}]);let a=mr(t,{appIds:n,hosts:r});if(!a.app)return a;let o=hr(a.app);return o.config?.[`spark.app.name`]==null?{...a,app:o}:{...a,app:{...o,config:{...o.config,"spark.app.name":o.id??``}}}}function vr(e,t,n){let r=nr(_r(G({app:e.app,stages:[...e.stages.values()],jobs:[...e.jobs.values()],sql:[...e.sql.values()],executors:e.executors,runAggregates:e.runAggregates,evidenceAvailability:e.evidenceAvailability,catalog:t,configFindings:n}))),i=e=>new Map(e.map(e=>[e.id,e]));return{appModel:{app:r.app,stages:i(r.stages),jobs:i(r.jobs),sql:i(r.sql),executors:r.executors,runAggregates:r.runAggregates,evidenceAvailability:r.evidenceAvailability,skippedLines:e.skippedLines,unreadableSqlExecutions:e.unreadableSqlExecutions},catalog:r.catalog,configFindings:r.configFindings}}var yr=String.raw`(?:\`(?:[^\`]|\`\`)*\`|[A-Za-z0-9_$]+)`,br=RegExp(`^${yr}(?:\\.${yr})*$`),xr=new RegExp(yr,`g`),Sr=/\.\.\.(?:\s*\d+ more fields)?/;function Cr(e){let t=[],n=0,r=!1,i=0;for(let a=0;a<e.length;a++){let o=e[a];if(o==="`")r=!r;else if(r)continue;else o===`(`||o===`[`||o===`{`?n++:o===`)`||o===`]`||o===`}`?n--:o===`,`&&n===0&&(t.push({text:e.slice(i,a).trim(),terminated:!0}),i=a+1)}return t.push({text:e.slice(i).trim(),terminated:!1}),t}function q(e){return e===``||Sr.test(e)}function wr(e){return br.test(e)?(e.match(xr)??[]).map(e=>{if(!e.startsWith("`"))return e;let t=e.slice(1,-1).replace(/``/g,"`");return/[.`]/.test(t)?e:t}).join(`.`):null}var Tr=/((?:[A-Za-z][A-Za-z0-9+.-]*:\/{1,3}|\/)[^\s,[\]()#]+?)\/_delta_log(?=[/[\],\s)]|$)/g,Er=/^file:(?:\/|\/\/\/)(?=[^/])/;function Dr(e){return e.replace(Er,`file:///`).replace(/\/+$/,``)}function Or(e){let t=new Set,n=!1;for(let r of e){if(!r.planTree){n=!0;continue}Ge(r.planTree,e=>{for(let r of[e.name,e.detail??``]){let e=r.split(`/_delta_log`).length-1;if(e===0)continue;let i=[...r.matchAll(Tr)];i.length<e&&(n=!0);for(let e of i)q(e[1])?n=!0:t.add(Dr(e[1]))}},{dedupe:!0})}return{paths:t,unreliable:n}}function kr(e){let{paths:t,unreliable:n}=Or(e),[r]=t;return!n&&t.size===1?{kind:`path`,target:r}:null}var Ar=`DeltaMerge`,jr=/^(?:Delta: )?MERGE operation\b/,Mr=/\b(?:re)?writing\b/i;function Nr(e){let t=t=>t!==void 0&&/^Execute\s+MergeIntoCommand\b/.test(e.get(t)?.planTree?.name??``);return[...e.values()].filter(e=>jr.test(e.description??``)&&!t(e.rootExecutionId)).sort((e,t)=>e.id-t.id)}function Pr(e){let t=[];for(let n of e){let e=t[t.length-1];e&&e.members[e.members.length-1].id+1===n.id?e.members.push(n):t.push({members:[n],unclean:null})}let n=t.map(({members:e})=>{let t=e.map(e=>e.startTime);return t.every(e=>typeof e==`number`)?[Math.min(...t),Math.max(...t)]:null});return t.forEach((e,t)=>{let r=n[t];if(r===null){e.unclean=`start time missing`;return}n.some((e,n)=>n!==t&&e!==null&&e[0]<=r[1]&&r[0]<=e[1])?e.unclean=`overlaps another merge in time`:e.members.some(e=>Mr.test(e.description??``))||(e.unclean=`no write phase`)}),t}function Fr(e){return Pr(Nr(e)).map(e=>{let t=e.members[0].id,n=e.members[e.members.length-1].id,r=e.unclean===null?kr(e.members):null,i=t===n?`${t}`:`${t}-${n}`;return{sqlExecutionId:t,nodeId:null,command:Ar,recognized:!0,kind:r?.kind??null,target:r?.target??null,outputRows:null,mergeRows:null,raw:`Delta MERGE operation, executions ${i}${e.unclean?` (${e.unclean})`:``}`}})}var Ir=[`MergeIntoCommand`,`UpdateCommand`,`DeleteCommand`,`WriteIntoDelta`,`WriteIntoDeltaCommand`,`SaveIntoDataSourceCommand`];function Lr(e){return Ir.includes(e)}function Rr(e){let t=new Map;for(let n of e.values()){if(n.rootExecutionId===void 0||n.rootExecutionId===n.id)continue;let e=t.get(n.rootExecutionId);e?e.push(n):t.set(n.rootExecutionId,[n])}return t}function zr(e,t){let n=e.commandArguments,r=`${t}\nArguments: `;return n!==void 0&&n.startsWith(r)?n.slice(r.length):null}var Br=/^`[^`]+`(?:\.`[^`]+`){1,2}$/;function Vr(e){let t=Cr(e).filter(e=>Br.test(e.text));if(t.length!==1||!t[0].terminated)return null;let n=wr(t[0].text);if(!n||q(n))return null;let r=n.split(`.`);return{kind:`table`,target:r.length===3&&r[0]===`spark_catalog`?r.slice(1).join(`.`):n}}function Hr(e){let t=Cr(e)[1];if(!t?.terminated||!/^\[[\s\S]*\]$/.test(t.text))return null;let n=t.text.slice(1,-1),r=[...n.matchAll(/(?:^|, )([A-Za-z0-9_.-]+)=/g)],i=r.flatMap((e,t)=>e[1].toLowerCase()===`path`?[n.slice(e.index+e[0].length,t+1<r.length?r[t+1].index:n.length)]:[]);return i.length!==1||q(i[0])||/\*{5,}\(redacted\)/.test(i[0])?null:{kind:`path`,target:i[0]}}var Ur={fromArguments:Vr,scansTarget:!1},Wr={...Ur,scansTarget:!0},Gr={MergeIntoCommand:Wr,UpdateCommand:Wr,DeleteCommand:Wr,WriteIntoDelta:Ur,WriteIntoDeltaCommand:Ur,SaveIntoDataSourceCommand:{fromArguments:e=>e.includes(`DeltaDataSource`)?Hr(e):null,scansTarget:!1}};function Kr(e,t,n,r){if(!Lr(e)||n!==t.planTree)return null;let i=Gr[e],a=zr(t,e),o=a===null?null:i.fromArguments(a);return o||!i.scansTarget?o:t.rootExecutionId===t.id?kr(r.get(t.id)??[]):null}var qr=/^\w+ DeltaTableV2\([^,\s]*,([^,\n]*),(?:Some\(CatalogTable\(\n(?:Catalog: (\S+)\n)?Database: (\S+)\nTable: (\S+)\n|None,)/,Jr=/^[A-Za-z0-9_$]+$/;function Yr(e){let t=qr.exec(e);if(!t)return null;let[,n,r,i,a]=t;if(a===void 0)return n&&!q(n)?{kind:`path`,target:n}:null;if(![i,a,r??`spark_catalog`].every(e=>Jr.test(e)))return null;let o=`${i}.${a}`;return{kind:`table`,target:r===void 0||r===`spark_catalog`?o:`${r}.${o}`}}function Xr(e){return(e.command===`AppendDataExecV1`||e.command===`OverwriteByExpressionExecV1`)&&/^\w+ \S*DeltaCatalog\$StagedDeltaTableV2@/.test(e.raw)}var Zr=new Set([`Write`,`Insert`,`Save`,`Overwrite`,`Append`,`Merge`,`Update`,`Delete`,`Truncate`,`Replace`,`Drop`,`Load`,`Vacuum`,`Convert`,`Clone`,`Restore`,`Optimize`,`Alter`,`Reorg`,`Rename`,`Call`]),Qr=[`TableAsSelect`,`AddPartition`,`DropPartition`,`RenamePartition`,`RecoverPartitions`],$r=new Set([`WriteFiles`,`AppendColumns`,`AppendColumnsWithObject`,`MergeRows`,`StateStoreSave`,`StateStoreRestore`,`SessionWindowStateStoreSave`,`SessionWindowStateStoreRestore`,`UpdateEventTimeWatermarkColumn`]);function ei(e){return e.replace(/^Execute\s+/,``).trim().replace(/Exec$/,``)}function ti(e){if(gi(e))return!0;let t=e.split(/\s/,1)[0];return $r.has(t)||t.includes(`Join`)?!1:Qr.some(e=>t.includes(e))?!0:(t.match(/[A-Z][a-z0-9]*/g)??[]).some(e=>Zr.has(e))}function ni(e,t){let n=/^(?:Execute\s+)?(\S+)\s*([\s\S]*)$/.exec(e.trim());return!n||ei(n[1])!==t?``:n[2]}function ri(e){let[t,n,r]=e,i=n&&/^(Map\(.*\)|\[.*\])$/s.test(n.text)&&n.terminated?r:n;return!t?.terminated||q(t.text)||!i||!/^(true|false)$/.test(i.text)?null:{kind:`path`,target:t.text}}function ii(e){let t=e[0];if(!t)return null;let n=/^\[Database: ([^,\]]+), TableName: ([^,\]]+)[,\]]/.exec(t.text);if(n&&/\]$/.test(t.text)){let e=wr(`${n[1].trim()}.${n[2].trim()}`);return e&&!q(e)?{kind:`table`,target:e}:null}if(!t.terminated||q(t.text))return null;let r=wr(t.text);return r?{kind:`table`,target:r}:null}function ai(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 oi(e){let[,t,n]=e;if(!t?.terminated||!n||n.text===``)return null;let r=ai(t.text);if(!r)return null;let i=r.get(`path`),a=r.get(`dbtable`)??r.get(`table`);if(i===void 0==(a===void 0))return null;let o=i??a;return q(o)||/\*{5,}\(redacted\)/.test(o)?null:i===void 0?{kind:`jdbcTable`,target:o}:{kind:`path`,target:o}}function si(e,t,n){let r=new Set;for(let i of e.matchAll(t))r.add(i[2]===void 0||q(i[1])?null:n(i[1]));let[i]=r;return r.size===1?i:null}function ci(e){return e?{kind:(e.match(xr)?.length??0)>=3?`table`:`unqualifiedTable`,target:e}:null}function li(e){return ci(si(e,/\b\w*Write\(table=([^,()\s]*)([,)])?/g,wr))}function ui(e){let[t,n]=e;return!t?.terminated||!/^[\w.$]+@[0-9a-f]+$/.test(t.text)||!n?.terminated||q(n.text)?null:ci(wr(n.text))}function di(e){let[t]=e,n=t?.terminated?/^delta\.`([^`]*)`$/.exec(t.text):null;return n&&!q(n[1])?{kind:`path`,target:n[1]}:null}var fi=new Set([`AppendData`,`OverwriteByExpression`,`OverwritePartitionsDynamic`,`ReplaceData`,`WriteDelta`,`WriteToDataSourceV2`,`AppendDataExecV1`,`OverwriteByExpressionExecV1`]),pi=new Set([`CreateTableAsSelect`,`AtomicCreateTableAsSelect`,`ReplaceTableAsSelect`,`AtomicReplaceTableAsSelect`]),mi=new Set([`WriteIntoDelta`,`WriteIntoDeltaCommand`,`MergeIntoCommand`,`UpdateCommand`,`DeleteCommand`,`CreateDeltaTableCommand`,`OptimizeTableCommand`,`RestoreTableCommand`,`DeltaReorgTableCommand`]),hi={InsertIntoHadoopFsRelationCommand:ri,InsertIntoHiveTable:ii,CreateHiveTableAsSelectCommand:ii,OptimizedCreateHiveTableAsSelectCommand:ii,CreateDataSourceTableAsSelectCommand:ii,SaveIntoDataSourceCommand:oi};function gi(e){return e in hi||fi.has(e)||pi.has(e)||mi.has(e)}function _i(e,t){let n=hi[e];return n?[!0,n(Cr(ni(t,e)))]:fi.has(e)?[!0,Yr(t)??li(t)]:pi.has(e)?[!0,ui(Cr(ni(t,e)))]:e===`MergeIntoCommand`?[!0,null]:mi.has(e)?[!0,di(Cr(ni(t,e)))]:[!1,null]}function vi(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 yi(e,...t){let n=e.metrics?.find(e=>t.includes(e.name));return n!==void 0&&Number.isFinite(n.value)?n.value:null}function bi(e,t){if(e!==`MergeIntoCommand`)return null;let n={inserted:yi(t,`number of inserted rows`),updated:yi(t,`number of updated rows`),deleted:yi(t,`number of deleted rows`),copied:yi(t,`number of target rows rewritten unmodified`,`number of rows copied`)};return Object.values(n).every(e=>e===null)?null:n}function xi(e,t,n,r){Ge(t,t=>{let i=ei(t.name);if(!ti(i))return;let a=t.detail??``,[o,s]=_i(i,a),c=s??Kr(i,e,t,n);r.push({sqlExecutionId:e.id,nodeId:t.id??null,command:i,recognized:o,kind:c?.kind??null,target:c?.target??null,outputRows:vi(t),mergeRows:bi(i,t),raw:a===``?t.name:a})},{dedupe:!0})}function Si(e,t){for(let n of e){if(n.target!==null||!Xr(n))continue;let r=t.get(n.sqlExecutionId)?.rootExecutionId;if(r===void 0||r===n.sqlExecutionId)continue;let i=e.filter(e=>e.sqlExecutionId===r&&pi.has(e.command));i.length===1&&i[0].target!==null&&(n.kind=i[0].kind,n.target=i[0].target)}}function Ci(e,t={}){let n=[],r=new Map;for(let n of t.unreadableSqlExecutions??[])e.get(n)?.planTree||r.set(n,`unreadableStart`);let i=Rr(e);for(let t of[...e.keys()].sort((e,t)=>e-t)){let a=e.get(t);a.planTree?xi(a,a.planTree,i,n):r.set(t,r.get(t)??`noPlan`)}return Si(n,e),n.push(...Fr(e)),n.sort((e,t)=>e.sqlExecutionId-t.sqlExecutionId),{writes:n,executionsWithoutPlan:[...r].sort((e,t)=>e[0]-t[0]).map(([e,t])=>({sqlExecutionId:e,reason:t})),skippedLines:t.skippedLines??null}}var wi={skew:[`origin`],stageShape:[`rule`],shuffle:[`partitions`],partitionSizing:[`rule`,`origin`,`partitions`],spill:[`spillMagnitude`,`reads`],gc:[`direction`],slowHost:[`variant`,`host`,`hostTaskShare`,`hostMeanMs`,`dimension`,`executorId`,`execMaxValue`],stageSlowness:[`reads`],stageFailed:[`variant`,`numTasks`,`memoryBytesSpilled`,`failedTaskDetails`],failures:[`failedTasks`,`dominantReason`,`dominantError`,`failureGroups`,`otherFailedTasks`],straggler:[`unit`,`speculativeTasks`,`stragglerCount`,`origin`],speculationWaste:[],retryWaste:[`numTasks`,`memoryBytesSpilled`,`retriedTaskDetails`],tinyTask:[`reads`],incompleteRun:[],coldStart:[`dynamicAllocation`],utilization:[`cpuUtilizationPct`],memoryUtilization:[`variant`,`rule`,`executorId`,`heap`,`dataUnavailable`],cacheUtilization:[`variant`,`rddId`,`rddName`,`memorySize`,`diskSize`,`numCachedPartitions`,`numPartitions`,`dataUnavailable`],coreLocality:[`nonLocalTaskCount`],autoscalingChurn:[`shortLivedExecutorCount`,`dynamicAllocation`],cachingOpportunity:[`variant`,`relation`,`format`,`relations`,`operator`,`executionIds`,`totalReadBytes`],jobFailureRate:[`failedJobs`,`totalJobs`,`failedTasks`,`totalTasks`,`avgJobDurationMs`,`taskFailureRate`],configAudit:[`property`],duplicatePlanSubtree:[`executionId`,`stageIds`,`stageShares`,`occurrencesIdentical`,`rootName`,`subtreeSize`,`sampleRelation`,`groupIndex`],smallFiles:[`executionId`,`stageIds`,`fileCount`,`direction`,`nodeName`],underBroadcast:[`executionId`,`stageIds`,`largerSideBytes`,`broadcastThreshold`],overBroadcast:[`executionId`,`stageIds`,`broadcastThreshold`]};function Ti(e){let t=e,n={};for(let r of[...wi[e.type]].sort())t[r]!==void 0&&(n[r]=t[r]);return n}function Ei(e){let t={id:e.id??null,type:e.type,name:Je(Ke(e.type)),tag:z(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:Ti(e),remediation:e.remediation??[],actionLabel:_t(e)};e.confidence!=null&&(t.confidence=e.confidence),e.validationRequired!=null&&(t.validationRequired=e.validationRequired),e.docAnchor!=null&&(t.docAnchor=e.docAnchor),e.impactEstimate!=null&&(t.impactEstimate=e.impactEstimate);let n=ot(e.impactEstimate);return n&&(t.impact=n.text,t.impactMeaning=n.meaning),e.tunedThresholds!=null&&(t.tunedThresholds=e.tunedThresholds),t}function Di(e){return[...e].sort((e,t)=>{let n=(k[e.impactBand]??9)-(k[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 Oi(e,t){let n=e.filter(O);return P(n,t).map(e=>{let t=j(e.findings),n=t[0],r=t.map(e=>e.id).filter(e=>e!=null),i={type:e.type,tag:z(e.type),actionLabel:_t(n),findingCount:e.findingCount,findingIds:r};if(e.kind===`time`)return{...i,kind:`time`,stageCount:e.stageCount,recoverableMsHigh:e.recoverableMsHigh,impact:oe(e.recoverableMsHigh,e.recoverableMsHigh),impactMeaning:`of run time`};if(e.kind===`resource`){let t=ge(e);return{...i,kind:`resource`,unit:e.unit,total:e.total,impact:t,impactMeaning:t?$e(n.impactEstimate?.rawWaste):null}}return{...i,kind:`count`,byImpactBand:e.byImpactBand,impact:null,impactMeaning:null}})}function ki(e,t,n){let r=new Set(e.filter(A).map(e=>e.type)),i=mt(t,e),a=[],o=[];for(let[e,{thresholdSummary:t}]of Object.entries(St())){if(r.has(e))continue;let s=We(e,n),c=s?{type:e,tag:z(e),thresholdSummary:Tt(e,n),tunedThresholds:s}:{type:e,tag:z(e),thresholdSummary:t},l=i.notRunReason(e);l?o.push({...c,reason:l}):a.push(c)}return{cleanChecks:a,notRunChecks:o}}function Ai(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 ji(e){return{title:e.title,summary:e.summary,steps:e.shown.map(t=>{let n=ht(t,e.outcome);return{key:t.key,stageId:t.stageId,type:t.lead.type,tag:z(t.lead.type),leadFindingId:t.lead.id??null,actionLabel:_t(t.lead),recommendation:n,impact:tt(t.lead),impactMeaning:Ve(t.lead),relatedTypes:t.related.map(e=>e.type),text:rt(t.lead,n,t.stageId)}}),remainingPlaces:e.remaining,copyText:e.copyText}}var Mi={},Ni=new WeakMap,Pi=new WeakMap;function Fi(e,t){let n=t??Mi,r=e.get(n);return r||(r=new WeakMap,e.set(n,r)),r}var Ii=new WeakMap;function Li(e,t){let n=Fi(Ii,t),r=n.get(e);if(r)return r;let{app:i,stages:a,executors:o,sql:s,jobs:c,runAggregates:l}=e,u={catalog:ve(i,a,o?.added??[],o?.removed??[],c??new Map,s??new Map,l??null,{thresholds:t}),config:Xe(i)};return n.set(e,u),u}function Ri(e,t){let n=Fi(Pi,t),r=n.get(e);if(r)return r;let{catalog:i,config:a}=Li(e,t),o=vr(e,i,a),s=gr(zi(o.appModel,t,{catalog:o.catalog,config:o.configFindings}));return n.set(e,s),s}function zi(e,t,n){let r=Fi(Ni,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??Li(e,t),p=[...d,...f],m=Di(p.map(Ei)),h=Oi(p,o??new Map),{cleanChecks:g,notRunChecks:_}=ki(p,o??new Map,t),v=gt(t),y=p.filter(O),b={...e,stages:o??new Map,jobs:l??new Map,executors:s??{added:[],removed:[]}},x=ct(b,p),S=x.outcome,C={schemaVersion:5,summary:{app:{id:a?.id??null,name:a?.name??null,sparkVersion:a?.sparkVersion??null},stageCount:o?.size??0,jobCount:l?.size??0,sqlExecutionCount:c?.size??0,findingCount:m.length,impactBandCounts:Ai(m),actionableFindingCount:y.length,actionableImpactBandCounts:Ai(y),clean:Ee({jobs:l??new Map,stages:o??new Map},p),outcome:{failedJobs:S.failedJobs,totalJobs:S.totalJobs,failureReason:S.reason,failureReasonStageId:S.reason==null?null:S.reasonStageId},runShape:Ze(b),...v?{tunedThresholds:v}:{}},verdict:ji(x),evidenceAvailability:u??null,detectors:lt(t),findings:m,writeTargets:Ci(c??new Map,{skippedLines:e.skippedLines,unreadableSqlExecutions:e.unreadableSqlExecutions}),recommendations:h,cleanChecks:g,notRunChecks:_};return r.set(e,C),C}function Bi(e,t){return typeof t==`number`&&/bytes$/i.test(e)?te(t):typeof t==`object`&&t?JSON.stringify(t):String(t)}function Vi(e){let t=[` - failureGroups: ${e.length}`];for(let n of e)if(t.push(` - ${n.count} task(s): ${vt(n)}`),n.stackExcerpt){t.push(``);for(let e of n.stackExcerpt.split(`
|
|
10
|
+
`))t.push(` ${e}`);t.push(``)}return t}function Hi(e){let t=ot(e);return t?`${t.text}${t.meaning?` ${t.meaning}`:``} (estimateMethod: ${e.estimateMethod})`:null}function Ui(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 Wi(e){let t=[];if(e.wallClockMs!=null&&t.push(`- Wall-clock: ${T(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: ${F(e.peakBusyCores)}`),e.etlPhasesMs){let{extract:n,transform:r,load:i}=e.etlPhasesMs;t.push(`- ETL phases (summed stage time): extract ${T(n)}, transform ${T(r)}, load ${T(i)}`)}return t}function Gi(e){let t=[`## Verdict`,``,e.title];if(e.summary.length>0&&t.push(``,e.summary.join(` `)),e.steps.length>0&&(t.push(``),e.steps.forEach((e,n)=>{if(t.push(`${n+1}. [${e.tag}] ${e.text}`),e.relatedTypes.length>0){let n=e.relatedTypes.map(Ke).join(`, `);t.push(` - Also flagged here, likely the same cause: ${n}.`)}}),e.remainingPlaces>0)){let n=`${e.remainingPlaces} more place${e.remainingPlaces===1?``:`s`}`;t.push(``,`${n} to look at in the Findings section below.`)}return t.push(``),t}function Ki(e,t){let{summary:n,verdict:r,findings:i,evidenceAvailability:a,detectors:o,recommendations:s,cleanChecks:c,notRunChecks:l}=e,u=[];u.push(`# Spark run evidence report`),u.push(``),u.push(`- Application: ${n.app.name??`(unknown)`} (${n.app.id??`n/a`})`),u.push(`- Spark version: ${n.app.sparkVersion??`n/a`}`),n.tunedThresholds&&u.push(`- Tuned thresholds: ${it(n.tunedThresholds)}`),u.push(`- Stages: ${n.stageCount} · Jobs: ${n.jobCount} · SQL executions: ${n.sqlExecutionCount}`),u.push(`- Findings: ${n.findingCount} (critical ${n.impactBandCounts.critical}, warning ${n.impactBandCounts.warning}, info ${n.impactBandCounts.info})`);let d=n.actionableImpactBandCounts;u.push(`- Findings to act on: ${n.actionableFindingCount} (critical ${d.critical}, warning ${d.warning}, info ${d.info})`);let f=Ui(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(...Wi(n.runShape)),u.push(``),u.push(...Gi(r)),s.length>0&&(u.push(`## Fix these first (${s.length})`),u.push(``),s.forEach((e,t)=>{u.push(`${t+1}. [${e.tag}] ${e.actionLabel}`);let n=e.kind===`count`?Object.entries(e.byImpactBand??{}).map(([e,t])=>`${t} ${e}`).join(`, `):e.impact&&`${e.impact}${e.impactMeaning?` ${e.impactMeaning}`:``}`;u.push(` - ${n?`${n} · `:``}×${e.findingCount} finding(s)`)}),u.push(``)),u.push(`## Findings (${i.length})`),u.push(``);for(let e of i){let t=e.stageId==null?``:` (stage ${e.stageId})`;u.push(`### ${e.name} · ${e.impactBand}${t}`),u.push(`- action: ${e.actionLabel}`),e.metric!=null&&u.push(`- ${e.metric}: ${e.valueText??e.value}`),e.recommendation&&u.push(`- ${e.recommendation}`),e.confidence&&u.push(`- confidence: ${e.confidence}`),e.validationRequired&&u.push(`- validation: ${e.validationRequired}`),e.tunedThresholds&&u.push(`- tuned thresholds: ${bt(e.tunedThresholds)}`);let n=e.impactEstimate?Hi(e.impactEstimate):null;n&&u.push(`- impact: ${n}`);let r=e.impactEstimate?ft(e):null;r&&u.push(`- estimate: ${r}`),u.push(`- detector version: ${e.detectorVersion}`);let i=Object.entries(e.evidence??{}).sort(([e],[t])=>e<t?-1:+(e>t));if(i.length){u.push(`- evidence:`);for(let[e,t]of i)e===`failureGroups`&&Array.isArray(t)?u.push(...Vi(t)):u.push(` - ${e}: ${Bi(e,t)}`)}u.push(``)}if(a?.entries?.length){u.push(`## Evidence availability`),u.push(``);for(let e of a.entries)u.push(`- ${e.key}: ${e.state} (${e.summary})`);u.push(``)}if(Array.isArray(o)&&o.length){u.push(`## Detectors`),u.push(``);for(let e of o){let t=e.tunedThresholds?` (tuned: ${bt(e.tunedThresholds)})`:``;u.push(`- ${e.type} (v${e.version}, ${e.scope}), thresholds: ${JSON.stringify(e.thresholds)}${t}`)}u.push(``)}if(l.length>0){u.push(`## Not checked on this log (${l.length})`),u.push(``),u.push(`The log lacked the data these checks need, so they neither passed nor failed.`),u.push(``);for(let e of l)u.push(`- [${e.tag}] ${e.type}: ${e.reason}`);u.push(``)}if(c.length>0){u.push(`## Clean checks (${c.length})`),u.push(``);for(let e of c){let t=e.tunedThresholds?` (tuned: ${bt(e.tunedThresholds)})`:``;u.push(`- [${e.tag}] ${e.type}: ${e.thresholdSummary}${t}`)}u.push(``)}return u.join(`
|
|
11
|
+
`)}function qi(e,t){let n=`stageIds`in e.evidence?e.evidence.stageIds:null;return Ue({...e,stageId:ut({stageId:e.stageId,stageIds:n})},t)}function Ji(e,{redact:t=!1,markdown:n=!0,findingsFilter:r,thresholds:i}={}){let a=t?Ri(e,i):zi(e,i),o=a.findings.some(e=>e.type===`incompleteRun`);return r&&(a={...a,findings:a.findings.filter(e=>qi(e,r))}),{markdown:n?Ki(a,o):``,json:a}}var J=Uint8Array,Y=Uint16Array,Yi=Int32Array,Xi=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]),Zi=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]),Qi=new J([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),$i=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 Yi(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}},ea=$i(Xi,2),ta=ea.b,na=ea.r;ta[28]=258,na[258]=28;var ra=$i(Zi,0);ra.b;for(var ia=ra.r,aa=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,aa[X]=((Z&65280)>>8|(Z&255)<<8)>>1}for(var oa=(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[aa[d]>>c]=l}else for(s=new Y(r),i=0;i<r;++i)e[i]&&(s[i]=aa[o[e[i]-1]++]>>15-e[i]);return s}),sa=new J(288),X=0;X<144;++X)sa[X]=8;for(var X=144;X<256;++X)sa[X]=9;for(var X=256;X<280;++X)sa[X]=7;for(var X=280;X<288;++X)sa[X]=8;for(var ca=new J(32),X=0;X<32;++X)ca[X]=5;var la=oa(sa,9,0),ua=oa(ca,5,0),da=function(e){return(e+7)/8|0},fa=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},pa=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},ma=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:xa,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=ha(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}},ha=function(e,t,n){return e.s==-1?Math.max(ha(e.l,t,n+1),ha(e.r,t,n+1)):t[e.s]=n},ga=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}},_a=function(e,t){for(var n=0,r=0;r<t.length;++r)n+=e[r]*t[r];return n},va=function(e,t,n){var r=n.length,i=da(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},ya=function(e,t,n,r,i,a,o,s,c,l,u){Q(t,u++,n),++i[256];for(var d=ma(i,15),f=d.t,p=d.l,m=ma(a,15),h=m.t,g=m.l,_=ga(f),v=_.c,y=_.n,b=ga(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=ma(C,7),E=T.t,D=T.l,O=19;O>4&&!E[Qi[O-1]];--O);var k=l+5<<3,A=_a(i,sa)+_a(a,ca)+o,j=_a(i,f)+_a(a,h)+o+14+3*O+_a(C,E)+2*C[16]+3*C[17]+7*C[18];if(c>=0&&k<=A&&k<=j)return va(t,u,e.subarray(c,c+l));var M,N,P,F;if(Q(t,u,1+(j<A)),u+=2,j<A){M=oa(f,p,0),N=f,P=oa(h,g,0),F=h;var ee=oa(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[Qi[w]]);u+=3*O;for(var I=[v,x],te=0;te<2;++te)for(var ne=I[te],w=0;w<ne.length;++w){var L=ne[w]&31;Q(t,u,ee[L]),u+=E[L],L>15&&(Q(t,u,ne[w]>>5&127),u+=ne[w]>>12)}}else M=la,N=sa,P=ua,F=ca;for(var w=0;w<s;++w){var R=r[w];if(R>255){var L=R>>18&31;pa(t,u,M[L+257]),u+=N[L+257],L>7&&(Q(t,u,R>>23&31),u+=Xi[L]);var z=R&31;pa(t,u,P[z]),u+=F[z],z>3&&(pa(t,u,R>>5&8191),u+=Zi[z])}else pa(t,u,M[R]),u+=N[R]}return pa(t,u,M[256]),u+N[256]},ba=new Yi([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),xa=new J(0),Sa=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=ba[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 Yi(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=ya(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,ne=Math.min(32767,T),L=Math.min(258,M);I<=ne&&--ee&&A!=j;){if(e[T+P]==e[T+P-I]){for(var R=0;R<L&&e[T+R]==e[T+R-I];++R);if(R>P){if(P=R,F=I,R>te)break;for(var z=Math.min(I,R-2),re=0,N=0;N<z;++N){var ie=T-I+N&32767,ae=ie-h[ie]&32767;ae>re&&(re=ae,j=ie)}}}A=j,j=h[A],I+=A-j&32767}if(F){b[E++]=268435456|na[P]<<18|ia[F];var oe=na[P]&31,se=ia[F]&31;w+=Xi[oe]+Zi[se],++x[257+oe],++S[se],D=T+P,++C}else b[E++]=e[T],++x[e[T]]}}for(T=Math.max(T,D);T<o;++T)b[E++]=e[T],++x[e[T]];u=ya(e,c,l,b,x,S,w,E,O,T-O,u),l||(a.r=u&7|c[u/8|0]<<3,u-=7,a.h=g,a.p=h,a.i=T,a.w=D)}else{for(var T=a.w||0;T<o+l;T+=65535){var ce=T+65535;ce>=o&&(c[u/8|0]=l,ce=o),u=va(c,u+1,e.subarray(T,ce))}a.i=o}return fa(s,0,r+da(u)+i)},Ca=(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})(),wa=function(){var e=-1;return{p:function(t){for(var n=e,r=0;r<t.length;++r)n=Ca[n&255^t[r]]^n>>>8;e=n},d:function(){return~e}}},Ta=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 Sa(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)},Ea=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},Da=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&&Ea(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)}},Oa=function(e){return 10+(e.filename?e.filename.length+1:0)};function ka(e,t){t||={};var n=wa(),r=e.length;n.p(e);var i=Ta(e,t,Oa(t),8),a=i.length;return Da(i,t),Ea(i,a-8,n.d()),Ea(i,a-4,r),i}var Aa=typeof TextEncoder<`u`&&new TextEncoder,ja=typeof TextDecoder<`u`&&new TextDecoder;try{ja.decode(xa,{stream:!0})}catch{}function Ma(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(Aa)return Aa.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 fa(a,0,o)}function Na(e,t,n,{redact:r,buildId:i,producer:a}){let o={appModel:e,catalog:t,configFindings:Xe(e.app)},s=r?vr(o.appModel,o.catalog,o.configFindings):o,c=yt(s.appModel,s.catalog,s.configFindings),l={coreVersion:Qn,buildId:i,producer:a};return $n(s.appModel,s.catalog,s.configFindings,n,c,l)}var Pa=32768;function Fa(e){let t=``;for(let n=0;n<e.length;n+=Pa)t+=String.fromCharCode(...e.subarray(n,n+Pa));return btoa(t)}function Ia(e){return Fa(ka(Ma(JSON.stringify(e))))}var La=`__SPARKFORENSICS_RUN_GZ__`;function Ra(e){return`window.${La} = "${e}";`}var za=`export-template.html`,Ba=`<script src="./data.js"><\/script>`;function Va(e,t){let n=e.indexOf(Ba);if(n===-1||e.indexOf(Ba,n+1)!==-1)throw Error(`The HTML export template is missing or malformed in this build.`);let r=`<script>${Ra(t)}<\/script>`;return e.slice(0,n)+r+e.slice(n+33)}var Ha=`9c33274bcae34f425c7d625bdea9cfacdb400f333bc3a5ced9c86a0e75094916`,Ua=`sparkforensics-web 0.29.0`,Wa={markdown:`md`,json:`json`,html:`html`};function Ga(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 Ka(e,t,n){return`evidence-${String(e??`report`).replace(/[^\w.-]/g,`_`)}${n?`-redacted`:``}.${Wa[t]}`}async function qa(){let e=await fetch(za);if(!e.ok)throw Error(`The HTML export template could not be loaded (HTTP ${e.status}).`);return e.text()}function Ja(){let e=B(e=>e.appModel),t=B(e=>e.catalog),n=B(e=>e.skippedLines),[r,i]=(0,H.useState)(!1),a=async()=>{try{let i=Na(e,t,n,{redact:r,buildId:Ha,producer:Ua});Ga(Va(await qa(),Ia(i)),Ka(i.app?.id??null,`html`,r),`text/html`)}catch(e){console.error(`HTML export failed`,e),at.error(`HTML export failed`,{description:e instanceof Error?e.message:String(e)})}},o=t=>{try{let{markdown:n,json:i}=Ji(e,{redact:r}),a=Ka(i.summary?.app?.id??null,t,r);t===`json`?Ga(`${JSON.stringify(i,null,2)}\n`,a,`application/json`):Ga(`${n}\n`,a,`text/markdown`)}catch(e){console.error(`Evidence export failed`,e),at.error(`Evidence export failed`,{description:e instanceof Error?e.message:String(e)})}};return{redact:r,setRedact:i,download:e=>{e===`html`?a():o(e)}}}function Ya({redact:e,setRedact:t,download:n}){return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(nn,{checked:e,onClick:e=>e.preventDefault(),onCheckedChange:e=>t(!!e),children:`Redact identifiers`}),(0,U.jsx)(rn,{}),(0,U.jsx)(W,{onClick:()=>n(`markdown`),children:`Download Markdown`}),(0,U.jsx)(W,{onClick:()=>n(`json`),children:`Download JSON`}),(0,U.jsx)(W,{onClick:()=>n(`html`),children:`Download HTML dashboard`})]})}function Xa(){let e=Ja();return(0,U.jsxs)($t,{children:[(0,U.jsxs)(en,{render:(0,U.jsx)(V,{variant:`ghost`,size:`sm`}),children:[(0,U.jsx)(Mt,{"aria-hidden":`true`}),`Export evidence`]}),(0,U.jsx)(tn,{align:`end`,children:(0,U.jsx)(Ya,{...e})})]})}function Za({activeName:e,activeSub:t,activeId:n=null,entries:r,onPick:i,onRemove:a,onOpenNew:o}){let{pickRecent:s}=ze(),c=(0,H.useCallback)(e=>{if(i){i(e);return}s(e,r.find(t=>t.id===e)?.handle)},[i,r,s]);return(0,U.jsxs)($t,{children:[(0,U.jsxs)(en,{className:D(Oe({variant:`ghost`}),`h-auto min-w-0 shrink max-w-40 flex-col items-start justify-center gap-0 py-1 sm:max-w-80`),children:[(0,U.jsxs)(`span`,{className:`flex w-full min-w-0 items-center gap-1.5`,children:[(0,U.jsx)(`span`,{className:`min-w-0 truncate font-heading text-sm font-semibold`,children:e??`No file`}),(0,U.jsx)(me,{"aria-hidden":`true`,className:`ml-auto shrink-0 opacity-60`})]}),t?(0,U.jsx)(`span`,{className:`w-full min-w-0 truncate text-left font-mono text-xs text-muted-foreground`,children:t}):null]}),(0,U.jsxs)(tn,{className:`w-72 p-2`,children:[(0,U.jsx)(De,{entries:r,activeId:n,onPick:c,onRemove:a}),(0,U.jsx)(rn,{}),(0,U.jsx)(W,{onClick:()=>o?.(),children:`Load new file…`})]})]})}function Qa({open:e,entries:t,onSelect:n,onOpenChange:r}){let[i,a]=(0,H.useState)(``),o=(0,H.useRef)(null);(0,H.useEffect)(()=>{e||a(``)},[e]);let s=i.trim().toLowerCase(),c=s?t.filter(e=>e.label.toLowerCase().includes(s)||e.secondary.toLowerCase().includes(s)||String(e.executionId).includes(s)):t;function l(e){(o.current?.querySelectorAll(`button`)??[])[e]?.focus()}function u(e,t){e.key===`ArrowDown`?(e.preventDefault(),l(t+1)):e.key===`ArrowUp`&&(e.preventDefault(),l(t-1))}function d(e){e.key===`Enter`?c.length===1&&n(c[0].stageId):e.key===`ArrowDown`&&(e.preventDefault(),l(0))}return(0,U.jsx)(xe,{open:e,onOpenChange:r,children:(0,U.jsxs)(Ct,{className:`flex max-h-[85vh] flex-col sm:max-w-xl`,children:[(0,U.jsxs)(Ce,{children:[(0,U.jsxs)(ke,{className:`flex items-center gap-1.5`,children:[(0,U.jsx)(Ne,{"aria-hidden":`true`,className:`size-4 text-plan-aggregate`}),`Open plan graph`]}),(0,U.jsx)(Pe,{children:`Choose which SQL execution's plan to open.`})]}),(0,U.jsx)(an,{autoFocus:!0,placeholder:`Filter executions…`,value:i,onChange:e=>a(e.target.value),onKeyDown:d}),c.length===0?(0,U.jsx)(`p`,{className:`px-1.5 py-1 text-sm text-muted-foreground`,children:`No matching executions`}):(0,U.jsx)(`ul`,{ref:o,className:`flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto`,children:c.map((e,t)=>(0,U.jsx)(`li`,{children:(0,U.jsxs)(`button`,{type:`button`,className:`flex w-full min-w-0 cursor-pointer flex-col items-start gap-0.5 rounded-md px-1.5 py-1 text-left hover:bg-muted`,onClick:()=>n(e.stageId),onKeyDown:e=>u(e,t),children:[(0,U.jsxs)(`span`,{className:`flex w-full min-w-0 items-center gap-1.5`,children:[e.impactBand!=null&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(de,{impactBand:e.impactBand}),(0,U.jsxs)(`span`,{className:`shrink-0 text-xs font-normal text-muted-foreground`,children:[e.findingCount,` finding`,e.findingCount===1?``:`s`]})]}),(0,U.jsx)(`span`,{className:`truncate text-sm font-medium`,children:e.secondary})]}),(0,U.jsx)(`span`,{className:`w-full truncate text-xs text-muted-foreground`,children:e.label})]})},e.executionId))})]})})}var $a={name:`sparkforensics-web`,version:`0.29.0`,description:`Zero-backend browser dashboard that parses Apache Spark event logs to diagnose performance bottlenecks: skew, spill, GC pressure, stragglers, cache utilization, and more.`,private:!0,type:`module`,workspaces:[`.`,`packages/*`],license:`MIT`,author:`Agustin Recoba`,repository:{type:`git`,url:`git+https://github.com/shuffle-works/sparkforensics.git`},bugs:{url:`https://github.com/shuffle-works/sparkforensics/issues`},homepage:`https://github.com/shuffle-works/sparkforensics#readme`,keywords:[`apache-spark`,`spark`,`spark-history-server`,`performance`,`diagnostics`,`observability`,`event-log`,`dashboard`,`query-plan`],engines:{node:`>=22.18.0 <23.0.0 || >=23.6.0`},scripts:{test:`vitest run`,"test:watch":`vitest`,"test:coverage":`vitest run --coverage`,"test:core":`npm run test:coverage --workspace packages/core`,"test:cli":`npm run test:coverage --workspace packages/cli`,"test:mcp":`npm run test:coverage --workspace packages/mcp`,"test:server":`npm test --workspace packages/server`,lint:`eslint .`,release:`node scripts/publish-packages.mjs`,"local-server":`node packages/server/index.js`,"capture-components":`node dev/component-capture/capture.mjs`,"docs:fetch":`node scripts/fetch-tuning-docs.mjs`,"docs:bump":`node scripts/fetch-tuning-docs.mjs bump`,"doc-anchor-coverage":`node scripts/doc-anchor-coverage.js`,"split-detection-docs":`node scripts/split-detection-docs.mjs`,prepare:`git config core.hooksPath .githooks`,dev:`vite`,build:`npm run docs:build && vite build && vite build --config vite.export.config.ts --mode template`,"build:export":`vite build --config vite.export.config.ts`,preview:`vite preview`,"docs:dev":`node scripts/fetch-tuning-docs.mjs --allow-stale && node scripts/split-detection-docs.mjs && node scripts/build-tuning-reference.mjs && vitepress dev docs-site`,"docs:build":`node scripts/fetch-tuning-docs.mjs && node scripts/split-detection-docs.mjs && node scripts/build-tuning-reference.mjs && vitepress build docs-site`,"docs:preview":`vitepress preview docs-site`},devDependencies:{"@changesets/cli":`^3.0.3`,"@eslint/js":`^10.0.1`,"@tailwindcss/vite":`^4.3.3`,"@testing-library/jest-dom":`^7.0.1`,"@testing-library/react":`^16.3.3`,"@testing-library/user-event":`^14.6.7`,"@types/node":`^26.6.4`,"@types/react":`^19.3.0`,"@types/react-dom":`^19.3.0`,"@vitejs/plugin-react":`^5.2.0`,"@vitest/coverage-v8":`^5.0.3`,eslint:`^10.12.0`,"fake-indexeddb":`^6.2.5`,globals:`^17.13.0`,"js-yaml":`^5.4.2`,jsdom:`^30.1.1`,"markdown-it-footnote":`^4.0.0`,playwright:`^1.63.0`,shadcn:`^4.21.1`,tailwindcss:`^4.3.3`,typescript:`^7.0.2`,vite:`^8.3.2`,"vite-plugin-singlefile":`^2.3.3`,vitepress:`^1.6.4`,vitest:`^5.0.3`},dependencies:{"@base-ui/react":`^1.8.0`,"@dagrejs/dagre":`^3.1.1`,"@fontsource-variable/instrument-sans":`^5.3.0`,"@fontsource-variable/jetbrains-mono":`^5.3.0`,"@modelcontextprotocol/sdk":`^1.32.0`,"@sparkforensics/core":`*`,"@tanstack/react-table":`^9.2.4`,"@xyflow/react":`^12.12.0`,"class-variance-authority":`^0.7.1`,clsx:`^2.1.1`,"lucide-react":`^1.51.0`,react:`^19.3.0`,"react-dom":`^19.3.0`,"react-resizable-panels":`^4.14.2`,recharts:`^3.8.0`,sonner:`^2.0.8`,"tailwind-merge":`^3.7.0`,"tw-animate-css":`^1.4.0`,zod:`^4.6.5`,zustand:`^5.0.15`}};function eo({keys:e}){return(0,U.jsx)(`span`,{className:`flex shrink-0 items-center gap-1`,children:e.map((e,t)=>(0,U.jsxs)(`span`,{className:`flex items-center gap-1`,children:[t>0?(0,U.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`or`}):null,(0,U.jsx)(`kbd`,{className:`rounded-md border border-border bg-muted px-1.5 py-0.5 font-mono text-xs font-medium text-foreground`,children:e})]},e))})}function $({keys:e,children:t}){return(0,U.jsxs)(`div`,{className:`flex items-center justify-between gap-4 py-1.5`,children:[(0,U.jsx)(`span`,{className:`text-sm text-foreground`,children:t}),(0,U.jsx)(eo,{keys:e})]})}function to({title:e,children:t}){return(0,U.jsxs)(`div`,{children:[(0,U.jsx)(`h3`,{className:`mb-1 text-xs font-semibold tracking-wide text-muted-foreground uppercase`,children:e}),(0,U.jsx)(`div`,{className:`divide-y divide-border/60`,children:t})]})}function no({open:e,onOpenChange:t}){return(0,U.jsx)(xe,{open:e,onOpenChange:t,children:(0,U.jsxs)(Ct,{className:`sm:max-w-md`,children:[(0,U.jsxs)(Ce,{children:[(0,U.jsx)(ke,{children:`Keyboard shortcuts`}),(0,U.jsx)(Pe,{children:`Everything below works from anywhere the board is loaded.`})]}),(0,U.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,U.jsxs)(to,{title:`Navigation`,children:[(0,U.jsx)($,{keys:[`Tab`,`Shift+Tab`],children:`Move between controls`}),(0,U.jsx)($,{keys:[`Enter`,`Space`],children:`Activate the focused control, open a stage's details, or sort a column`}),(0,U.jsx)($,{keys:[`Esc`],children:`Close the open dialog, or leave a full-page view like Plan graph`})]}),(0,U.jsxs)(to,{title:`Menus and lists`,children:[(0,U.jsx)($,{keys:[`↑`,`↓`],children:`Move between menu items or picker rows`}),(0,U.jsx)($,{keys:[`A–Z`,`0–9`],children:`Filter the Type and Stage dropdowns, and the plan execution picker, as you type`})]}),(0,U.jsxs)(to,{title:`Triage (Advanced view only)`,children:[(0,U.jsx)($,{keys:[`j`,`k`],children:`Next or previous finding, starting with the verdict's steps`}),(0,U.jsx)($,{keys:[`Enter`],children:`Show the focused finding's evidence, or expand a grouped finding`}),(0,U.jsx)($,{keys:[`f`],children:`Jump to the finding filters`}),(0,U.jsx)($,{keys:[`1`,`2`],children:`Switch to Findings or Full app report`})]}),(0,U.jsx)(to,{title:`Help`,children:(0,U.jsx)($,{keys:[`?`],children:`Open this list`})})]}),(0,U.jsxs)(`p`,{className:`text-center text-xs text-muted-foreground`,children:[`SparkForensics v`,$a.version]})]})})}var ro=`Show confidence levels, evidence, documentation links, finding filters and triage shortcuts (j/k, f, 1/2)`;function io(){let e=I()===`advanced`;return(0,U.jsxs)(sn,{variant:`outline`,pressed:e,onPressedChange:e=>L.getState().setWidgetDensity(e?`advanced`:`basic`),className:`tap-target-comfortable border-transparent bg-accent-soft text-accent hover:bg-accent-soft hover:text-accent aria-pressed:border-accent aria-pressed:bg-accent-soft aria-pressed:text-accent aria-pressed:hover:bg-accent-soft`,title:ro,children:[e?(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`size-1.5 shrink-0 rounded-full bg-accent`}):null,`Advanced view`]})}function ao(){let e=I()===`advanced`;return(0,U.jsx)(nn,{checked:e,onCheckedChange:e=>L.getState().setWidgetDensity(e?`advanced`:`basic`),title:ro,children:`Advanced view`})}var oo=`docs/`;function so(e,t){return e===`warning`?`${t} warning${t===1?``:`s`}`:`${t} ${e}`}function co(e,t){return e.stageId!=null&&t.includes(e.stageId)?!0:An(e)?.some(e=>t.includes(e))??!1}function lo(e,t){let n=[];for(let[r,i]of e.sql){if(!i.planTree)continue;let a=He(r,e.stages),o=a.length>0?Math.min(...a):null;if(o==null)continue;let s=i.description,c=typeof s==`string`&&s.trim()?s:`SQL execution #${r}`,l=i.startTime,u=i.endTime,d=typeof l==`number`&&typeof u==`number`?T(u-l):null,f=t.filter(e=>co(e,a)),p=ie(f)??null,m=f.length;n.push({executionId:r,stageId:o,label:c,secondary:d?`#${r} · ${d}`:`#${r}`,impactBand:p,findingCount:m})}return n.sort((e,t)=>{let n=e.impactBand?k[e.impactBand]:1/0,r=t.impactBand?k[t.impactBand]:1/0;return n===r?e.executionId-t.executionId:n-r}),n}function uo({onLoadNew:e,recentEntries:t,activeFileId:n,onPickRecent:r,onRemoveRecent:i,onCompare:a,onJumpToFindings:o,sectionControls:s,leadingContent:c}){let l=B(e=>e.appModel.app),u=B(e=>e.catalog),d=B(e=>e.skippedLines),f=B(e=>e.exportMode),{theme:p,toggle:m}=ye(),h=(0,H.useRef)(null),g=B(e=>e.comparison),_=a!=null&&!s&&!f&&n!=null&&l!=null&&!g.baselineId,v=Ja(),y=B(e=>e.appModel),b=(0,H.useMemo)(()=>lo(y,u),[y,u]),[x,S]=(0,H.useState)(!1),[C,w]=(0,H.useState)(!1);(0,H.useEffect)(()=>{function e(e){if(e.key!==`?`)return;let t=e.target,n=t?.tagName;n===`INPUT`||n===`TEXTAREA`||t?.isContentEditable||(e.preventDefault(),w(!0))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);function T(){if(b.length!==0){if(b.length===1){L.getState().openPlanGraph(b[0].stageId,{initialScope:`full`});return}S(!0)}}function E(e){L.getState().openPlanGraph(e,{initialScope:`full`}),S(!1)}let O=l?.name||`Spark Application`,k=[l?.id,l?.sparkVersion?`Spark ${l.sparkVersion}`:null].filter(Boolean).join(` · `),A=pe(),j=(0,H.useMemo)(()=>re(A),[A]),M=ie(j),N=M?j.filter(e=>e.impactBand===M).length:0,P=A?.data.verdict,F=P?.clean??!1,I=P?.failed??!1;return(0,U.jsxs)(`header`,{className:`sticky top-0 z-30 flex min-w-0 flex-wrap items-center gap-3 border-b border-border bg-card px-4 py-2 sm:px-8`,children:[s?null:(0,U.jsx)(`h1`,{className:`sr-only`,children:`SparkForensics`}),(0,U.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[!s&&!f?(0,U.jsx)(V,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable shrink-0`,"aria-label":`New analysis`,title:`Start a new analysis`,onClick:e,children:(0,U.jsx)(It,{"aria-hidden":`true`})}):null,(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`hidden shrink-0 font-mono text-[13px] font-semibold tracking-[.02em] md:inline`,children:`sparkforensics`}),(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`hidden shrink-0 text-muted-foreground md:inline`,children:`/`}),f?(0,U.jsxs)(`div`,{className:`flex min-w-0 shrink flex-col items-start justify-center gap-0 py-1`,children:[(0,U.jsx)(`span`,{className:`min-w-0 truncate font-heading text-sm font-semibold`,children:O}),k?(0,U.jsx)(`span`,{className:`w-full min-w-0 truncate text-left font-mono text-xs text-muted-foreground`,children:k}):null]}):(0,U.jsx)(Za,{activeName:O,activeSub:k,activeId:n,entries:t,onPick:r,onRemove:i,onOpenNew:e}),d>0?(0,U.jsxs)(`div`,{className:`min-w-0 truncate text-xs text-warning`,children:[d,` line`,d===1?``:`s`,` skipped: malformed or invalid data`]}):null,c]}),s?(0,U.jsx)(`div`,{className:`flex min-w-0 shrink-0 flex-wrap items-center gap-3 max-sm:order-3 max-sm:w-full max-sm:shrink max-sm:gap-2`,children:s}):M?o?(0,U.jsx)(`button`,{type:`button`,"aria-label":`${so(M,N)}: show them in Findings`,title:`Show them in Findings`,onClick:()=>o(M),className:D(ee(),ce({impactBand:M}),`tap-target-comfortable cursor-pointer font-mono text-[11px] font-semibold hover:underline focus-visible:outline-none`),children:so(M,N)}):(0,U.jsx)(ue,{label:so(M,N),impactBand:M,className:`shrink-0`}):I?(0,U.jsx)(ue,{label:`Run failed`,impactBand:`critical`,className:`shrink-0`}):F?(0,U.jsxs)(`span`,{className:D(`inline-flex shrink-0 items-center gap-1.5 rounded-sm bg-clean/10 px-2 py-0.5 font-mono text-[11px] font-semibold text-clean`),children:[(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`inline-block size-2 shrink-0 rounded-full bg-clean`}),`No findings`]}):(0,U.jsx)(`span`,{className:`inline-flex shrink-0 items-center rounded-sm border border-border px-2 py-0.5 font-mono text-[11px] font-medium text-muted-foreground`,children:`Not fully checked`}),(0,U.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1`,children:[!s&&g.baselineId&&!g.active?(0,U.jsx)(V,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:()=>L.getState().setComparisonActive(!0),children:`← Back to comparison`}):null,(0,U.jsxs)(`div`,{className:`hidden items-center gap-1 sm:flex`,children:[_?(0,U.jsxs)(V,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,"aria-label":`Compare with another run`,title:`Compare with another run`,onClick:a,children:[(0,U.jsx)(we,{"aria-hidden":`true`}),(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`xl:hidden`,children:`Compare`}),(0,U.jsx)(`span`,{"aria-hidden":`true`,className:`hidden xl:inline`,children:`Compare with another run`})]}):null,!s&&!f?(0,U.jsx)(Xa,{}):null,!s&&b.length>0?(0,U.jsxs)(V,{variant:`ghost`,size:`sm`,className:`tap-target-comfortable`,onClick:T,children:[(0,U.jsx)(Ne,{"aria-hidden":`true`,className:`text-plan-aggregate`}),`Plan graph`]}):null,s?null:(0,U.jsx)(io,{}),f?null:(0,U.jsx)(V,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Docs`,title:`Read the docs`,nativeButton:!1,render:(0,U.jsx)(`a`,{href:oo,target:`_blank`,rel:`noopener noreferrer`}),children:(0,U.jsx)(ae,{"aria-hidden":`true`})}),(0,U.jsx)(V,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Keyboard shortcuts`,title:`Keyboard shortcuts (?)`,onClick:()=>w(!0),children:(0,U.jsx)(Rt,{"aria-hidden":`true`})}),(0,U.jsx)(V,{variant:`ghost`,size:`icon`,className:`tap-target-comfortable`,"aria-label":`Toggle theme`,"aria-pressed":p===`light`,title:`Toggle theme`,onClick:m,children:p===`dark`?(0,U.jsx)(Se,{"aria-hidden":`true`}):(0,U.jsx)(wt,{"aria-hidden":`true`})})]}),(0,U.jsxs)($t,{onOpenChange:(e,t)=>{!e&&t.reason===`outside-press`&&setTimeout(()=>{document.activeElement===document.body&&h.current?.focus()})},children:[(0,U.jsx)(en,{ref:h,className:`tap-target-comfortable inline-flex size-8 items-center justify-center rounded-lg hover:bg-muted hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 sm:hidden`,"aria-label":`More options`,children:(0,U.jsx)(Pt,{"aria-hidden":`true`})}),(0,U.jsxs)(tn,{align:`end`,children:[_?(0,U.jsxs)(W,{onClick:a,children:[(0,U.jsx)(we,{"aria-hidden":`true`}),`Compare with another run`]}):null,!s&&!f?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(Ya,{...v}),(0,U.jsx)(rn,{})]}):null,!s&&b.length>0?(0,U.jsxs)(W,{onClick:T,children:[(0,U.jsx)(Ne,{"aria-hidden":`true`,className:`text-plan-aggregate`}),`Plan graph`]}):null,s?null:(0,U.jsx)(ao,{}),f?null:(0,U.jsx)(W,{nativeButton:!1,render:(0,U.jsx)(`a`,{href:oo,target:`_blank`,rel:`noopener noreferrer`}),children:`Docs`}),(0,U.jsx)(W,{onClick:()=>w(!0),children:`Keyboard shortcuts`}),(0,U.jsx)(W,{onClick:m,children:`Toggle theme`})]})]})]}),(0,U.jsx)(Qa,{open:x,entries:b,onSelect:E,onOpenChange:S}),(0,U.jsx)(no,{open:C,onOpenChange:w})]})}function fo(e){let{pickRecent:t}=ze(),[n,r]=(0,H.useState)([]),i=(0,H.useCallback)(()=>{Be().then(e=>r(e)).catch(()=>r([]))},[]);return(0,H.useEffect)(()=>{i()},[i,e]),{recentEntries:n,onPickRecent:(0,H.useCallback)(async e=>{let r=n.find(t=>t.id===e),a=await t(e,r?.handle);(a===`restored`||a===`gone`)&&i()},[n,t,i]),onRemoveRecent:(0,H.useCallback)(e=>{let t=n.find(t=>t.id===e);Ae(e).catch(()=>{}).finally(i),t&&at(`Removed "${t.appName||t.name}" from recent files`,{action:{label:`Undo`,onClick:()=>{Re(t).catch(()=>{}).finally(i)}}})},[n,i])}}export{Ot as A,Gt as C,Ut as D,zt as E,Vt as O,Jt as S,Qt as T,an as _,Mn as a,tn as b,kn as c,vn as d,bn as f,on as g,pn as h,Hn as i,Ht as k,On as l,En as m,uo as n,jn as o,xn as p,Zn as r,An as s,fo as t,Dn as u,$t as v,Zt as w,en as x,nn as y};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{M as t}from"./charts-vendor-0VMaLVLN.js";import{St as n,u as r}from"./DisclosureContext-OO7X1HAx.js";import{p as i}from"./plan-graph-vendor-BYl-AzN5.js";import{d as a,u as o}from"./Dashboard-BHZ76JCu.js";import{n as s,t as c}from"./impact-sort-xzy0g-Vh.js";var l=i();function u({mode:e,onChange:t,stageLabel:n=`Stage`}){return(0,l.jsx)(r,{children:(0,l.jsxs)(o,{"aria-label":`Sort order`,spacing:0,value:[e],onValueChange:e=>{let n=e[0];n&&t(n)},children:[(0,l.jsx)(a,{value:`impact`,variant:`outline`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,children:`Impact`}),(0,l.jsx)(a,{value:`stage`,variant:`outline`,size:`sm`,className:`tap-target-comfortable tap-target-comfortable--sm`,children:n})]})})}var d=e(t(),1);function f(e=`impact`){let[t,r]=(0,d.useState)(e),i=n()===`advanced`?t:`impact`;function a(e,t,n){return i===`impact`?[...e].sort(c(t)):[...e].sort(s(n))}return{sortMode:i,setSortMode:r,orderBy:a}}export{u as n,f as t};
|
package/public/docs/404.html
CHANGED
|
@@ -6,22 +6,18 @@
|
|
|
6
6
|
<title>404 | SparkForensics</title>
|
|
7
7
|
<meta name="description" content="Not Found">
|
|
8
8
|
<meta name="generator" content="VitePress v1.6.4">
|
|
9
|
-
<link rel="preload stylesheet" href="/docs/assets/style.
|
|
9
|
+
<link rel="preload stylesheet" href="/docs/assets/style.CyK9Ss73.css" as="style">
|
|
10
10
|
<link rel="preload stylesheet" href="/docs/vp-icons.css" as="style">
|
|
11
11
|
|
|
12
|
-
<script type="module" src="/docs/assets/app.
|
|
13
|
-
<link rel="preload" href="/docs/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
|
12
|
+
<script type="module" src="/docs/assets/app.CnWL6bKV.js"></script>
|
|
14
13
|
<script>(()=>{const c=`${`[${["data","shuffle","product","bar"].join("-")}]`}, .VPNav, .VPLocalNav`,a=24,d=document.documentElement,l=t=>{const e=getComputedStyle(t);return e.display==="none"||t.getClientRects().length===0?0:e.position==="fixed"?t.getBoundingClientRect().bottom:e.position==="sticky"?(parseFloat(e.top)||0)+t.offsetHeight:0},u=()=>{try{return location.hash?document.getElementById(decodeURIComponent(location.hash.slice(1))):null}catch{return null}};let r=null;const s=()=>{const t=Array.from(document.querySelectorAll(c),l),e=Math.ceil(Math.max(0,...t))+a;if(e===r)return;const n=r;r=e,d.style.setProperty("--sf-anchor-offset",`${r}px`);const o=n===null?null:u();if(!o)return;const f=(parseFloat(getComputedStyle(o).paddingTop)||0)+2;Math.abs(o.getBoundingClientRect().top-n)<=f&&o.scrollIntoView()},i=()=>{const t=document.createElement("div");t.setAttribute("data-sf-anchor-offset",""),t.setAttribute("aria-hidden","true"),document.body.appendChild(t);const e=window.ResizeObserver?new ResizeObserver(s):null,n=()=>{e&&document.querySelectorAll(c).forEach(o=>e.observe(o)),s()};n(),new MutationObserver(n).observe(document.body,{childList:!0,subtree:!0}),window.addEventListener("resize",s),window.addEventListener("load",s)};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",i,{once:!0}):i()})();</script>
|
|
15
14
|
<link rel="icon" type="image/svg+xml" href="/docs/favicon.svg">
|
|
16
|
-
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
17
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
|
|
18
|
-
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Recursive:wght,CASL@400..700,0..1&family=JetBrains+Mono:wght@400;500;600&display=swap">
|
|
19
15
|
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
|
20
16
|
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
|
21
17
|
</head>
|
|
22
18
|
<body>
|
|
23
19
|
<div id="app"></div>
|
|
24
|
-
<script>window.__VP_HASH_MAP__=JSON.parse("{\"contributor-guide_architecture_board-widgets.md\":\"YQcj5EI4\",\"contributor-guide_architecture_board-widgets_caching-and-memory.md\":\"8bH1HnZp\",\"contributor-guide_architecture_board-widgets_plan-advisor.md\":\"RlzvUmNm\",\"contributor-guide_architecture_board-widgets_visual-system-and-templating.md\":\"DYgUpIJB\",\"contributor-guide_architecture_detector-contract.md\":\"wj6Et6UD\",\"contributor-guide_architecture_detector-contract_plan-attribution.md\":\"yNex4bys\",\"contributor-guide_architecture_detector-contract_threshold-tables.md\":\"CKjWG56Y\",\"contributor-guide_architecture_drill-down.md\":\"CqZPrdo9\",\"contributor-guide_architecture_drill-down_plan-graph.md\":\"DwOozIEs\",\"contributor-guide_architecture_impact-estimation.md\":\"CZv_ZGOp\",\"contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md\":\"BUucRc0A\",\"contributor-guide_architecture_impact-estimation_stage-union-rollup.md\":\"DdCGtAGu\",\"contributor-guide_architecture_index.md\":\"tymxf1Fh\",\"contributor-guide_architecture_overview.md\":\"C1sSvm9i\",\"contributor-guide_architecture_state-and-history.md\":\"DyCBdjuM\",\"contributor-guide_architecture_state-and-history_history-server-intake.md\":\"C298hrHZ\",\"contributor-guide_architecture_state-and-history_run-comparison-internals.md\":\"CZA0JLtV\",\"contributor-guide_architecture_widget-rendering.md\":\"BOZ1azXG\",\"contributor-guide_architecture_widget-rendering_findings-tab.md\":\"BQXycK6G\",\"contributor-guide_architecture_widget-rendering_investigation-routing.md\":\"BGdiyElu\",\"contributor-guide_architecture_widget-rendering_list-sort-mode.md\":\"BuHKgH0C\",\"contributor-guide_architecture_widget-rendering_reference-section.md\":\"DWqC80bN\",\"contributor-guide_architecture_widget-rendering_row-expand-contract.md\":\"ZT89u9f1\",\"contributor-guide_architecture_worker-protocol.md\":\"BAnhi2-d\",\"contributor-guide_architecture_worker-protocol_cli-and-mcp.md\":\"DC1YqXBp\",\"contributor-guide_architecture_worker-protocol_core-and-event-validation.md\":\"DSVFPpWb\",\"contributor-guide_architecture_worker-protocol_evidence-availability.md\":\"CjimIDBY\",\"contributor-guide_architecture_worker-protocol_evidence-report.md\":\"DVGZOWvW\",\"contributor-guide_contributing.md\":\"CQMvGwFt\",\"contributor-guide_development-setup.md\":\"D9bu4j_c\",\"contributor-guide_testing.md\":\"By6XGR9a\",\"index.md\":\"CHJVslga\",\"tuning-reference_anti-patterns.md\":\"D08Uaod7\",\"tuning-reference_aqe.md\":\"C1Ae6A8u\",\"tuning-reference_bottleneck-broadcast-sizing.md\":\"6wjKuJNE\",\"tuning-reference_bottleneck-cold-start.md\":\"BVQbsuHP\",\"tuning-reference_bottleneck-duplicate-plan-subtree.md\":\"DtaYnaiF\",\"tuning-reference_bottleneck-failures.md\":\"Z1Tdmdd3\",\"tuning-reference_bottleneck-gc.md\":\"BCnXLf1n\",\"tuning-reference_bottleneck-job-failure-rate.md\":\"CcvQj2g9\",\"tuning-reference_bottleneck-memory-utilization.md\":\"B-C0-8h-\",\"tuning-reference_bottleneck-retry-waste.md\":\"DCnhWiqj\",\"tuning-reference_bottleneck-shuffle.md\":\"B5OMJCd3\",\"tuning-reference_bottleneck-skew.md\":\"Cvo6NQm_\",\"tuning-reference_bottleneck-slow-host.md\":\"ja5qr3wq\",\"tuning-reference_bottleneck-small-files.md\":\"Crjtb0i2\",\"tuning-reference_bottleneck-spill.md\":\"Bl8KtSRg\",\"tuning-reference_bottleneck-straggler.md\":\"B0VN8reT\",\"tuning-reference_bottleneck-tiny-tasks.md\":\"DQCftGhu\",\"tuning-reference_bottleneck-utilization.md\":\"BXDl30f9\",\"tuning-reference_caching.md\":\"CcaiMn_7\",\"tuning-reference_cluster-config.md\":\"DbWG1yZq\",\"tuning-reference_config.md\":\"YUqSpwFB\",\"tuning-reference_data-formats.md\":\"C5DX5xL4\",\"tuning-reference_index.md\":\"ZVIpQ6Dk\",\"tuning-reference_intro.md\":\"BSSaDlqx\",\"tuning-reference_joins.md\":\"BVhNCDnE\",\"tuning-reference_memory-model.md\":\"CfjFdgbl\",\"tuning-reference_metrics.md\":\"C64VNEL4\",\"tuning-reference_partitioning.md\":\"CtLK0xsS\",\"tuning-reference_pyspark.md\":\"D-92XgF8\",\"tuning-reference_shuffle.md\":\"Iq2v1oHJ\",\"tuning-reference_spark-architecture.md\":\"_qwnE_Sc\",\"tuning-reference_table-formats.md\":\"BSYEK-eN\",\"user-guide_alternative-log-retrieval.md\":\"CJpYvHGo\",\"user-guide_alternative-log-retrieval_managed-platforms.md\":\"DvDwHNtC\",\"user-guide_alternative-log-retrieval_ssh-bastion.md\":\"Gszzlplv\",\"user-guide_getting-started.md\":\"DYHHHkQR\",\"user-guide_getting-started_ci-and-automation.md\":\"OUQqw3mI\",\"user-guide_getting-started_reading-the-dashboard.md\":\"Obf3W3__\",\"user-guide_getting-started_regression-metric-keys.md\":\"B_gzr2Mw\",\"user-guide_getting-started_tuning-thresholds.md\":\"B_MyjyZm\",\"user-guide_mcp-tools.md\":\"C65SjWUL\",\"user-guide_mcp-tools_compare-runs.md\":\"Cc_gLoix\",\"user-guide_mcp-tools_diagnose-run.md\":\"BP1vnHA5\",\"user-guide_mcp-tools_evaluate-budgets.md\":\"BB0nDY3Z\",\"user-guide_mcp-tools_get-finding-documentation.md\":\"BtTTHNV6\",\"user-guide_mcp-tools_get-finding-evidence.md\":\"rKyu4wts\",\"user-guide_mcp-tools_get-reference-doc.md\":\"Yac4tH3u\",\"user-guide_mcp-tools_get-run-summary.md\":\"DpxZ4ZNp\",\"user-guide_mcp-tools_list-runs.md\":\"DpQPeCM3\",\"user-guide_run-comparison.md\":\"BUALkohi\",\"user-guide_run-comparison_how-stages-are-matched.md\":\"DSXGu2tA\",\"user-guide_understanding-findings.md\":\"C9YRruMT\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"SparkForensics\",\"description\":\"Docs for using and contributing to SparkForensics\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/favicon.svg\",\"nav\":[{\"text\":\"User Guide\",\"link\":\"/user-guide/getting-started\"},{\"text\":\"Contributor Guide\",\"link\":\"/contributor-guide/development-setup\"},{\"text\":\"Tuning Reference\",\"link\":\"/tuning-reference/\"}],\"sidebar\":{\"/tuning-reference/\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/tuning-reference/intro\"}]},{\"text\":\"Optimization Guide\",\"items\":[{\"text\":\"Spark Execution Model\",\"link\":\"/tuning-reference/spark-architecture\"},{\"text\":\"Memory Management\",\"link\":\"/tuning-reference/memory-model\"},{\"text\":\"Partitioning\",\"link\":\"/tuning-reference/partitioning\"},{\"text\":\"Join Optimization\",\"link\":\"/tuning-reference/joins\"},{\"text\":\"Shuffle\",\"link\":\"/tuning-reference/shuffle\"},{\"text\":\"Data Formats\",\"link\":\"/tuning-reference/data-formats\"},{\"text\":\"Table Formats\",\"link\":\"/tuning-reference/table-formats\"},{\"text\":\"Caching & Persistence\",\"link\":\"/tuning-reference/caching\"},{\"text\":\"PySpark Specifics\",\"link\":\"/tuning-reference/pyspark\"},{\"text\":\"Adaptive Query Execution\",\"link\":\"/tuning-reference/aqe\"},{\"text\":\"Cluster Tuning\",\"link\":\"/tuning-reference/cluster-config\"},{\"text\":\"Anti-Patterns\",\"link\":\"/tuning-reference/anti-patterns\"}]},{\"text\":\"Detector Catalog\",\"items\":[{\"text\":\"Task Skew\",\"link\":\"/tuning-reference/bottleneck-skew\"},{\"text\":\"Shuffle I/O\",\"link\":\"/tuning-reference/bottleneck-shuffle\"},{\"text\":\"Memory / Disk Spill\",\"link\":\"/tuning-reference/bottleneck-spill\"},{\"text\":\"GC Pressure\",\"link\":\"/tuning-reference/bottleneck-gc\"},{\"text\":\"Cold Start\",\"link\":\"/tuning-reference/bottleneck-cold-start\"},{\"text\":\"Executor Utilization\",\"link\":\"/tuning-reference/bottleneck-utilization\"},{\"text\":\"Slow Host\",\"link\":\"/tuning-reference/bottleneck-slow-host\"},{\"text\":\"Task Failures\",\"link\":\"/tuning-reference/bottleneck-failures\"},{\"text\":\"Stragglers\",\"link\":\"/tuning-reference/bottleneck-straggler\"},{\"text\":\"Retry Waste\",\"link\":\"/tuning-reference/bottleneck-retry-waste\"},{\"text\":\"Tiny Tasks\",\"link\":\"/tuning-reference/bottleneck-tiny-tasks\"},{\"text\":\"Job Failure Rate\",\"link\":\"/tuning-reference/bottleneck-job-failure-rate\"},{\"text\":\"Memory Utilization\",\"link\":\"/tuning-reference/bottleneck-memory-utilization\"},{\"text\":\"Duplicate Plan Subtree\",\"link\":\"/tuning-reference/bottleneck-duplicate-plan-subtree\"},{\"text\":\"Small Files\",\"link\":\"/tuning-reference/bottleneck-small-files\"},{\"text\":\"Broadcast Sizing\",\"link\":\"/tuning-reference/bottleneck-broadcast-sizing\"}]},{\"text\":\"Reference\",\"items\":[{\"text\":\"Metrics Glossary\",\"link\":\"/tuning-reference/metrics\"},{\"text\":\"Spark Config Quick-Reference\",\"link\":\"/tuning-reference/config\"}]}],\"/user-guide/\":[{\"text\":\"User Guide\",\"items\":[{\"text\":\"Getting started\",\"link\":\"/user-guide/getting-started\",\"collapsed\":true,\"items\":[{\"text\":\"Reading the dashboard\",\"link\":\"/user-guide/getting-started/reading-the-dashboard\"},{\"text\":\"CI and automation\",\"link\":\"/user-guide/getting-started/ci-and-automation\"},{\"text\":\"Tuning detector thresholds\",\"link\":\"/user-guide/getting-started/tuning-thresholds\"},{\"text\":\"Regression metric keys\",\"link\":\"/user-guide/getting-started/regression-metric-keys\"}]},{\"text\":\"Understanding findings\",\"link\":\"/user-guide/understanding-findings\"},{\"text\":\"Run comparison mode\",\"link\":\"/user-guide/run-comparison\",\"collapsed\":true,\"items\":[{\"text\":\"How stages are matched\",\"link\":\"/user-guide/run-comparison/how-stages-are-matched\"}]},{\"text\":\"MCP tools reference\",\"link\":\"/user-guide/mcp-tools\",\"collapsed\":true,\"items\":[{\"text\":\"diagnose_run\",\"link\":\"/user-guide/mcp-tools/diagnose-run\"},{\"text\":\"get_run_summary\",\"link\":\"/user-guide/mcp-tools/get-run-summary\"},{\"text\":\"evaluate_budgets\",\"link\":\"/user-guide/mcp-tools/evaluate-budgets\"},{\"text\":\"compare_runs\",\"link\":\"/user-guide/mcp-tools/compare-runs\"},{\"text\":\"get_finding_evidence\",\"link\":\"/user-guide/mcp-tools/get-finding-evidence\"},{\"text\":\"get_finding_documentation\",\"link\":\"/user-guide/mcp-tools/get-finding-documentation\"},{\"text\":\"get_reference_doc\",\"link\":\"/user-guide/mcp-tools/get-reference-doc\"},{\"text\":\"list_runs\",\"link\":\"/user-guide/mcp-tools/list-runs\"}]},{\"text\":\"Finding your event log\",\"link\":\"/user-guide/alternative-log-retrieval\",\"collapsed\":true,\"items\":[{\"text\":\"Managed platforms\",\"link\":\"/user-guide/alternative-log-retrieval/managed-platforms\"},{\"text\":\"Behind an SSH bastion\",\"link\":\"/user-guide/alternative-log-retrieval/ssh-bastion\"}]}]}],\"/contributor-guide/\":[{\"text\":\"Contributor Guide\",\"items\":[{\"text\":\"Development setup\",\"link\":\"/contributor-guide/development-setup\"},{\"text\":\"Architecture\",\"link\":\"/contributor-guide/architecture/\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/contributor-guide/architecture/overview\"},{\"text\":\"Worker protocol\",\"link\":\"/contributor-guide/architecture/worker-protocol\",\"collapsed\":true,\"items\":[{\"text\":\"Evidence availability\",\"link\":\"/contributor-guide/architecture/worker-protocol/evidence-availability\"},{\"text\":\"Evidence report and finding identity\",\"link\":\"/contributor-guide/architecture/worker-protocol/evidence-report\"},{\"text\":\"CLI and MCP server\",\"link\":\"/contributor-guide/architecture/worker-protocol/cli-and-mcp\"},{\"text\":\"Core and event validation\",\"link\":\"/contributor-guide/architecture/worker-protocol/core-and-event-validation\"}]},{\"text\":\"State & history intake\",\"link\":\"/contributor-guide/architecture/state-and-history\",\"collapsed\":true,\"items\":[{\"text\":\"Run comparison internals\",\"link\":\"/contributor-guide/architecture/state-and-history/run-comparison-internals\"},{\"text\":\"History Server intake\",\"link\":\"/contributor-guide/architecture/state-and-history/history-server-intake\"}]},{\"text\":\"Detector contract\",\"link\":\"/contributor-guide/architecture/detector-contract\",\"collapsed\":true,\"items\":[{\"text\":\"Plan attribution\",\"link\":\"/contributor-guide/architecture/detector-contract/plan-attribution\"},{\"text\":\"Threshold tables\",\"link\":\"/contributor-guide/architecture/detector-contract/threshold-tables\"}]},{\"text\":\"Impact estimation\",\"link\":\"/contributor-guide/architecture/impact-estimation\",\"collapsed\":true,\"items\":[{\"text\":\"Stage union rollup\",\"link\":\"/contributor-guide/architecture/impact-estimation/stage-union-rollup\"},{\"text\":\"Caveats, tuning and coverage\",\"link\":\"/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage\"}]},{\"text\":\"Widget rendering\",\"link\":\"/contributor-guide/architecture/widget-rendering\",\"collapsed\":true,\"items\":[{\"text\":\"Findings tab\",\"link\":\"/contributor-guide/architecture/widget-rendering/findings-tab\"},{\"text\":\"List sort mode\",\"link\":\"/contributor-guide/architecture/widget-rendering/list-sort-mode\"},{\"text\":\"Row/expand contract\",\"link\":\"/contributor-guide/architecture/widget-rendering/row-expand-contract\"},{\"text\":\"ReferenceSection\",\"link\":\"/contributor-guide/architecture/widget-rendering/reference-section\"},{\"text\":\"Investigation routing\",\"link\":\"/contributor-guide/architecture/widget-rendering/investigation-routing\"}]},{\"text\":\"Board widgets\",\"link\":\"/contributor-guide/architecture/board-widgets\",\"collapsed\":true,\"items\":[{\"text\":\"Plan Advisor\",\"link\":\"/contributor-guide/architecture/board-widgets/plan-advisor\"},{\"text\":\"Caching and memory widgets\",\"link\":\"/contributor-guide/architecture/board-widgets/caching-and-memory\"},{\"text\":\"Visual system and templating\",\"link\":\"/contributor-guide/architecture/board-widgets/visual-system-and-templating\"}]},{\"text\":\"Drill-down\",\"link\":\"/contributor-guide/architecture/drill-down\",\"collapsed\":true,\"items\":[{\"text\":\"Plan graph\",\"link\":\"/contributor-guide/architecture/drill-down/plan-graph\"}]}]},{\"text\":\"Testing & verification\",\"link\":\"/contributor-guide/testing\"},{\"text\":\"Contributing\",\"link\":\"/contributor-guide/contributing\"}]}]},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":{\"selector\":\"[data-sf-anchor-offset]\",\"padding\":0},\"cleanUrls\":false}");</script>
|
|
20
|
+
<script>window.__VP_HASH_MAP__=JSON.parse("{\"contributor-guide_architecture_board-widgets.md\":\"YQcj5EI4\",\"contributor-guide_architecture_board-widgets_caching-and-memory.md\":\"CQgn1t_M\",\"contributor-guide_architecture_board-widgets_plan-advisor.md\":\"RlzvUmNm\",\"contributor-guide_architecture_board-widgets_visual-system-and-templating.md\":\"wulOueeB\",\"contributor-guide_architecture_detector-contract.md\":\"N4hhenrA\",\"contributor-guide_architecture_detector-contract_plan-attribution.md\":\"yNex4bys\",\"contributor-guide_architecture_detector-contract_threshold-tables.md\":\"Dp3c40rx\",\"contributor-guide_architecture_drill-down.md\":\"CqZPrdo9\",\"contributor-guide_architecture_drill-down_plan-graph.md\":\"DwOozIEs\",\"contributor-guide_architecture_impact-estimation.md\":\"DfvbqEUu\",\"contributor-guide_architecture_impact-estimation_caveats-tuning-and-coverage.md\":\"Cwm1jHmn\",\"contributor-guide_architecture_impact-estimation_stage-union-rollup.md\":\"DdCGtAGu\",\"contributor-guide_architecture_index.md\":\"tymxf1Fh\",\"contributor-guide_architecture_overview.md\":\"C1sSvm9i\",\"contributor-guide_architecture_state-and-history.md\":\"DyCBdjuM\",\"contributor-guide_architecture_state-and-history_history-server-intake.md\":\"C298hrHZ\",\"contributor-guide_architecture_state-and-history_run-comparison-internals.md\":\"CZA0JLtV\",\"contributor-guide_architecture_widget-rendering.md\":\"BOZ1azXG\",\"contributor-guide_architecture_widget-rendering_findings-tab.md\":\"BQXycK6G\",\"contributor-guide_architecture_widget-rendering_investigation-routing.md\":\"BGdiyElu\",\"contributor-guide_architecture_widget-rendering_list-sort-mode.md\":\"BuHKgH0C\",\"contributor-guide_architecture_widget-rendering_reference-section.md\":\"DWqC80bN\",\"contributor-guide_architecture_widget-rendering_row-expand-contract.md\":\"ZT89u9f1\",\"contributor-guide_architecture_worker-protocol.md\":\"BAnhi2-d\",\"contributor-guide_architecture_worker-protocol_cli-and-mcp.md\":\"BX1XnFbq\",\"contributor-guide_architecture_worker-protocol_core-and-event-validation.md\":\"DSVFPpWb\",\"contributor-guide_architecture_worker-protocol_evidence-availability.md\":\"CjimIDBY\",\"contributor-guide_architecture_worker-protocol_evidence-report.md\":\"CiQl1MLb\",\"contributor-guide_contributing.md\":\"CQMvGwFt\",\"contributor-guide_development-setup.md\":\"DQdzera7\",\"contributor-guide_testing.md\":\"By6XGR9a\",\"index.md\":\"CHJVslga\",\"tuning-reference_anti-patterns.md\":\"D08Uaod7\",\"tuning-reference_aqe.md\":\"C1Ae6A8u\",\"tuning-reference_bottleneck-broadcast-sizing.md\":\"6wjKuJNE\",\"tuning-reference_bottleneck-cold-start.md\":\"BVQbsuHP\",\"tuning-reference_bottleneck-duplicate-plan-subtree.md\":\"DtaYnaiF\",\"tuning-reference_bottleneck-failures.md\":\"Z1Tdmdd3\",\"tuning-reference_bottleneck-gc.md\":\"BCnXLf1n\",\"tuning-reference_bottleneck-job-failure-rate.md\":\"CcvQj2g9\",\"tuning-reference_bottleneck-memory-utilization.md\":\"B-C0-8h-\",\"tuning-reference_bottleneck-retry-waste.md\":\"DCnhWiqj\",\"tuning-reference_bottleneck-shuffle.md\":\"B5OMJCd3\",\"tuning-reference_bottleneck-skew.md\":\"Cvo6NQm_\",\"tuning-reference_bottleneck-slow-host.md\":\"ja5qr3wq\",\"tuning-reference_bottleneck-small-files.md\":\"Crjtb0i2\",\"tuning-reference_bottleneck-spill.md\":\"Bl8KtSRg\",\"tuning-reference_bottleneck-straggler.md\":\"B0VN8reT\",\"tuning-reference_bottleneck-tiny-tasks.md\":\"DQCftGhu\",\"tuning-reference_bottleneck-utilization.md\":\"BXDl30f9\",\"tuning-reference_caching.md\":\"CcaiMn_7\",\"tuning-reference_cluster-config.md\":\"DbWG1yZq\",\"tuning-reference_config.md\":\"YUqSpwFB\",\"tuning-reference_data-formats.md\":\"C5DX5xL4\",\"tuning-reference_index.md\":\"ZVIpQ6Dk\",\"tuning-reference_intro.md\":\"BSSaDlqx\",\"tuning-reference_joins.md\":\"BVhNCDnE\",\"tuning-reference_memory-model.md\":\"CfjFdgbl\",\"tuning-reference_metrics.md\":\"C64VNEL4\",\"tuning-reference_partitioning.md\":\"CtLK0xsS\",\"tuning-reference_pyspark.md\":\"D-92XgF8\",\"tuning-reference_shuffle.md\":\"Iq2v1oHJ\",\"tuning-reference_spark-architecture.md\":\"_qwnE_Sc\",\"tuning-reference_table-formats.md\":\"BSYEK-eN\",\"user-guide_alternative-log-retrieval.md\":\"CJpYvHGo\",\"user-guide_alternative-log-retrieval_managed-platforms.md\":\"DvDwHNtC\",\"user-guide_alternative-log-retrieval_ssh-bastion.md\":\"Gszzlplv\",\"user-guide_getting-started.md\":\"DYHHHkQR\",\"user-guide_getting-started_ci-and-automation.md\":\"BEepbDDL\",\"user-guide_getting-started_reading-the-dashboard.md\":\"Obf3W3__\",\"user-guide_getting-started_regression-metric-keys.md\":\"B_gzr2Mw\",\"user-guide_getting-started_tuning-thresholds.md\":\"B_MyjyZm\",\"user-guide_mcp-tools.md\":\"C65SjWUL\",\"user-guide_mcp-tools_compare-runs.md\":\"Cc_gLoix\",\"user-guide_mcp-tools_diagnose-run.md\":\"BP1vnHA5\",\"user-guide_mcp-tools_evaluate-budgets.md\":\"BB0nDY3Z\",\"user-guide_mcp-tools_get-finding-documentation.md\":\"BtTTHNV6\",\"user-guide_mcp-tools_get-finding-evidence.md\":\"rKyu4wts\",\"user-guide_mcp-tools_get-reference-doc.md\":\"Yac4tH3u\",\"user-guide_mcp-tools_get-run-summary.md\":\"EhaIsele\",\"user-guide_mcp-tools_list-runs.md\":\"DpQPeCM3\",\"user-guide_run-comparison.md\":\"BUALkohi\",\"user-guide_run-comparison_how-stages-are-matched.md\":\"DSXGu2tA\",\"user-guide_understanding-findings.md\":\"3C7KCEZO\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"SparkForensics\",\"description\":\"Docs for using and contributing to SparkForensics\",\"base\":\"/docs/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":\"/favicon.svg\",\"nav\":[{\"text\":\"User Guide\",\"link\":\"/user-guide/getting-started\"},{\"text\":\"Contributor Guide\",\"link\":\"/contributor-guide/development-setup\"},{\"text\":\"Tuning Reference\",\"link\":\"/tuning-reference/\"}],\"sidebar\":{\"/tuning-reference/\":[{\"text\":\"Getting Started\",\"items\":[{\"text\":\"Introduction\",\"link\":\"/tuning-reference/intro\"}]},{\"text\":\"Optimization Guide\",\"items\":[{\"text\":\"Spark Execution Model\",\"link\":\"/tuning-reference/spark-architecture\"},{\"text\":\"Memory Management\",\"link\":\"/tuning-reference/memory-model\"},{\"text\":\"Partitioning\",\"link\":\"/tuning-reference/partitioning\"},{\"text\":\"Join Optimization\",\"link\":\"/tuning-reference/joins\"},{\"text\":\"Shuffle\",\"link\":\"/tuning-reference/shuffle\"},{\"text\":\"Data Formats\",\"link\":\"/tuning-reference/data-formats\"},{\"text\":\"Table Formats\",\"link\":\"/tuning-reference/table-formats\"},{\"text\":\"Caching & Persistence\",\"link\":\"/tuning-reference/caching\"},{\"text\":\"PySpark Specifics\",\"link\":\"/tuning-reference/pyspark\"},{\"text\":\"Adaptive Query Execution\",\"link\":\"/tuning-reference/aqe\"},{\"text\":\"Cluster Tuning\",\"link\":\"/tuning-reference/cluster-config\"},{\"text\":\"Anti-Patterns\",\"link\":\"/tuning-reference/anti-patterns\"}]},{\"text\":\"Detector Catalog\",\"items\":[{\"text\":\"Task Skew\",\"link\":\"/tuning-reference/bottleneck-skew\"},{\"text\":\"Shuffle I/O\",\"link\":\"/tuning-reference/bottleneck-shuffle\"},{\"text\":\"Memory / Disk Spill\",\"link\":\"/tuning-reference/bottleneck-spill\"},{\"text\":\"GC Pressure\",\"link\":\"/tuning-reference/bottleneck-gc\"},{\"text\":\"Cold Start\",\"link\":\"/tuning-reference/bottleneck-cold-start\"},{\"text\":\"Executor Utilization\",\"link\":\"/tuning-reference/bottleneck-utilization\"},{\"text\":\"Slow Host\",\"link\":\"/tuning-reference/bottleneck-slow-host\"},{\"text\":\"Task Failures\",\"link\":\"/tuning-reference/bottleneck-failures\"},{\"text\":\"Stragglers\",\"link\":\"/tuning-reference/bottleneck-straggler\"},{\"text\":\"Retry Waste\",\"link\":\"/tuning-reference/bottleneck-retry-waste\"},{\"text\":\"Tiny Tasks\",\"link\":\"/tuning-reference/bottleneck-tiny-tasks\"},{\"text\":\"Job Failure Rate\",\"link\":\"/tuning-reference/bottleneck-job-failure-rate\"},{\"text\":\"Memory Utilization\",\"link\":\"/tuning-reference/bottleneck-memory-utilization\"},{\"text\":\"Duplicate Plan Subtree\",\"link\":\"/tuning-reference/bottleneck-duplicate-plan-subtree\"},{\"text\":\"Small Files\",\"link\":\"/tuning-reference/bottleneck-small-files\"},{\"text\":\"Broadcast Sizing\",\"link\":\"/tuning-reference/bottleneck-broadcast-sizing\"}]},{\"text\":\"Reference\",\"items\":[{\"text\":\"Metrics Glossary\",\"link\":\"/tuning-reference/metrics\"},{\"text\":\"Spark Config Quick-Reference\",\"link\":\"/tuning-reference/config\"}]}],\"/user-guide/\":[{\"text\":\"User Guide\",\"items\":[{\"text\":\"Getting started\",\"link\":\"/user-guide/getting-started\",\"collapsed\":true,\"items\":[{\"text\":\"Reading the dashboard\",\"link\":\"/user-guide/getting-started/reading-the-dashboard\"},{\"text\":\"CI and automation\",\"link\":\"/user-guide/getting-started/ci-and-automation\"},{\"text\":\"Tuning detector thresholds\",\"link\":\"/user-guide/getting-started/tuning-thresholds\"},{\"text\":\"Regression metric keys\",\"link\":\"/user-guide/getting-started/regression-metric-keys\"}]},{\"text\":\"Understanding findings\",\"link\":\"/user-guide/understanding-findings\"},{\"text\":\"Run comparison mode\",\"link\":\"/user-guide/run-comparison\",\"collapsed\":true,\"items\":[{\"text\":\"How stages are matched\",\"link\":\"/user-guide/run-comparison/how-stages-are-matched\"}]},{\"text\":\"MCP tools reference\",\"link\":\"/user-guide/mcp-tools\",\"collapsed\":true,\"items\":[{\"text\":\"diagnose_run\",\"link\":\"/user-guide/mcp-tools/diagnose-run\"},{\"text\":\"get_run_summary\",\"link\":\"/user-guide/mcp-tools/get-run-summary\"},{\"text\":\"evaluate_budgets\",\"link\":\"/user-guide/mcp-tools/evaluate-budgets\"},{\"text\":\"compare_runs\",\"link\":\"/user-guide/mcp-tools/compare-runs\"},{\"text\":\"get_finding_evidence\",\"link\":\"/user-guide/mcp-tools/get-finding-evidence\"},{\"text\":\"get_finding_documentation\",\"link\":\"/user-guide/mcp-tools/get-finding-documentation\"},{\"text\":\"get_reference_doc\",\"link\":\"/user-guide/mcp-tools/get-reference-doc\"},{\"text\":\"list_runs\",\"link\":\"/user-guide/mcp-tools/list-runs\"}]},{\"text\":\"Finding your event log\",\"link\":\"/user-guide/alternative-log-retrieval\",\"collapsed\":true,\"items\":[{\"text\":\"Managed platforms\",\"link\":\"/user-guide/alternative-log-retrieval/managed-platforms\"},{\"text\":\"Behind an SSH bastion\",\"link\":\"/user-guide/alternative-log-retrieval/ssh-bastion\"}]}]}],\"/contributor-guide/\":[{\"text\":\"Contributor Guide\",\"items\":[{\"text\":\"Development setup\",\"link\":\"/contributor-guide/development-setup\"},{\"text\":\"Architecture\",\"link\":\"/contributor-guide/architecture/\",\"collapsed\":true,\"items\":[{\"text\":\"Overview\",\"link\":\"/contributor-guide/architecture/overview\"},{\"text\":\"Worker protocol\",\"link\":\"/contributor-guide/architecture/worker-protocol\",\"collapsed\":true,\"items\":[{\"text\":\"Evidence availability\",\"link\":\"/contributor-guide/architecture/worker-protocol/evidence-availability\"},{\"text\":\"Evidence report and finding identity\",\"link\":\"/contributor-guide/architecture/worker-protocol/evidence-report\"},{\"text\":\"CLI and MCP server\",\"link\":\"/contributor-guide/architecture/worker-protocol/cli-and-mcp\"},{\"text\":\"Core and event validation\",\"link\":\"/contributor-guide/architecture/worker-protocol/core-and-event-validation\"}]},{\"text\":\"State & history intake\",\"link\":\"/contributor-guide/architecture/state-and-history\",\"collapsed\":true,\"items\":[{\"text\":\"Run comparison internals\",\"link\":\"/contributor-guide/architecture/state-and-history/run-comparison-internals\"},{\"text\":\"History Server intake\",\"link\":\"/contributor-guide/architecture/state-and-history/history-server-intake\"}]},{\"text\":\"Detector contract\",\"link\":\"/contributor-guide/architecture/detector-contract\",\"collapsed\":true,\"items\":[{\"text\":\"Plan attribution\",\"link\":\"/contributor-guide/architecture/detector-contract/plan-attribution\"},{\"text\":\"Threshold tables\",\"link\":\"/contributor-guide/architecture/detector-contract/threshold-tables\"}]},{\"text\":\"Impact estimation\",\"link\":\"/contributor-guide/architecture/impact-estimation\",\"collapsed\":true,\"items\":[{\"text\":\"Stage union rollup\",\"link\":\"/contributor-guide/architecture/impact-estimation/stage-union-rollup\"},{\"text\":\"Caveats, tuning and coverage\",\"link\":\"/contributor-guide/architecture/impact-estimation/caveats-tuning-and-coverage\"}]},{\"text\":\"Widget rendering\",\"link\":\"/contributor-guide/architecture/widget-rendering\",\"collapsed\":true,\"items\":[{\"text\":\"Findings tab\",\"link\":\"/contributor-guide/architecture/widget-rendering/findings-tab\"},{\"text\":\"List sort mode\",\"link\":\"/contributor-guide/architecture/widget-rendering/list-sort-mode\"},{\"text\":\"Row/expand contract\",\"link\":\"/contributor-guide/architecture/widget-rendering/row-expand-contract\"},{\"text\":\"ReferenceSection\",\"link\":\"/contributor-guide/architecture/widget-rendering/reference-section\"},{\"text\":\"Investigation routing\",\"link\":\"/contributor-guide/architecture/widget-rendering/investigation-routing\"}]},{\"text\":\"Board widgets\",\"link\":\"/contributor-guide/architecture/board-widgets\",\"collapsed\":true,\"items\":[{\"text\":\"Plan Advisor\",\"link\":\"/contributor-guide/architecture/board-widgets/plan-advisor\"},{\"text\":\"Caching and memory widgets\",\"link\":\"/contributor-guide/architecture/board-widgets/caching-and-memory\"},{\"text\":\"Visual system and templating\",\"link\":\"/contributor-guide/architecture/board-widgets/visual-system-and-templating\"}]},{\"text\":\"Drill-down\",\"link\":\"/contributor-guide/architecture/drill-down\",\"collapsed\":true,\"items\":[{\"text\":\"Plan graph\",\"link\":\"/contributor-guide/architecture/drill-down/plan-graph\"}]}]},{\"text\":\"Testing & verification\",\"link\":\"/contributor-guide/testing\"},{\"text\":\"Contributing\",\"link\":\"/contributor-guide/contributing\"}]}]},\"search\":{\"provider\":\"local\"}},\"locales\":{},\"scrollOffset\":{\"selector\":\"[data-sf-anchor-offset]\",\"padding\":0},\"cleanUrls\":false}");</script>
|
|
25
21
|
|
|
26
22
|
</body>
|
|
27
23
|
</html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as p}from"./chunks/theme.
|
|
1
|
+
import{t as p}from"./chunks/theme.BH-2HuRf.js";import{R as s,a6 as i,a7 as u,a8 as c,a9 as l,aa as f,ab as d,ac as m,ad as h,ae as g,af as A,d as v,u as y,v as C,s as P,ag as b,ah as w,ai as R,aj as E}from"./chunks/framework.DSg0KOwT.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
|