sparkforensics-server 0.5.1 → 0.5.2

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