@launchsecure/launch-kit 0.0.29 → 0.0.31

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 (202) hide show
  1. package/dist/beacon/beacon.mjs +2825 -1243
  2. package/dist/beacon/beacon.mjs.map +1 -1
  3. package/dist/beacon/beacon.umd.js +710 -95
  4. package/dist/beacon/beacon.umd.js.map +1 -1
  5. package/dist/beacon/types/core.d.ts +14 -0
  6. package/dist/beacon/types/core.d.ts.map +1 -0
  7. package/dist/beacon/types/ctx.d.ts +14 -0
  8. package/dist/beacon/types/ctx.d.ts.map +1 -0
  9. package/dist/beacon/types/element.d.ts +16 -48
  10. package/dist/beacon/types/element.d.ts.map +1 -1
  11. package/dist/beacon/types/index.d.ts +5 -4
  12. package/dist/beacon/types/index.d.ts.map +1 -1
  13. package/dist/beacon/types/internal/annotation-cache.d.ts +10 -0
  14. package/dist/beacon/types/internal/annotation-cache.d.ts.map +1 -0
  15. package/dist/beacon/types/internal/element-capture.d.ts +19 -0
  16. package/dist/beacon/types/internal/element-capture.d.ts.map +1 -0
  17. package/dist/beacon/types/internal/event-buffer.d.ts +16 -0
  18. package/dist/beacon/types/internal/event-buffer.d.ts.map +1 -0
  19. package/dist/beacon/types/internal/framework-detect.d.ts +6 -0
  20. package/dist/beacon/types/internal/framework-detect.d.ts.map +1 -0
  21. package/dist/beacon/types/internal/markers.d.ts +17 -0
  22. package/dist/beacon/types/internal/markers.d.ts.map +1 -0
  23. package/dist/beacon/types/internal/monitor/capture-dom.d.ts +14 -0
  24. package/dist/beacon/types/internal/monitor/capture-dom.d.ts.map +1 -0
  25. package/dist/beacon/types/internal/monitor/capture-network.d.ts +12 -0
  26. package/dist/beacon/types/internal/monitor/capture-network.d.ts.map +1 -0
  27. package/dist/beacon/types/internal/monitor/overlay.d.ts +16 -0
  28. package/dist/beacon/types/internal/monitor/overlay.d.ts.map +1 -0
  29. package/dist/beacon/types/internal/monitor/session.d.ts +41 -0
  30. package/dist/beacon/types/internal/monitor/session.d.ts.map +1 -0
  31. package/dist/beacon/types/{monitor → internal/monitor}/transport.d.ts +3 -3
  32. package/dist/beacon/types/internal/monitor/transport.d.ts.map +1 -0
  33. package/dist/beacon/types/{monitor/types.d.ts → internal/monitor/wire.d.ts} +69 -27
  34. package/dist/beacon/types/internal/monitor/wire.d.ts.map +1 -0
  35. package/dist/beacon/types/{ui → internal}/pick-mode-overlay.d.ts +4 -5
  36. package/dist/beacon/types/internal/pick-mode-overlay.d.ts.map +1 -0
  37. package/dist/beacon/types/{capture → internal}/picker.d.ts +0 -1
  38. package/dist/beacon/types/internal/picker.d.ts.map +1 -0
  39. package/dist/beacon/types/{ui → internal}/pin-popover.d.ts +1 -1
  40. package/dist/beacon/types/internal/pin-popover.d.ts.map +1 -0
  41. package/dist/beacon/types/internal/screenshot.d.ts +26 -0
  42. package/dist/beacon/types/internal/screenshot.d.ts.map +1 -0
  43. package/dist/beacon/types/internal/selector.d.ts.map +1 -0
  44. package/dist/beacon/types/plugins/domEle.d.ts +14 -0
  45. package/dist/beacon/types/plugins/domEle.d.ts.map +1 -0
  46. package/dist/beacon/types/plugins/domSS.d.ts +8 -0
  47. package/dist/beacon/types/plugins/domSS.d.ts.map +1 -0
  48. package/dist/beacon/types/plugins/errors.d.ts +3 -0
  49. package/dist/beacon/types/plugins/errors.d.ts.map +1 -0
  50. package/dist/beacon/types/plugins/index.d.ts +8 -0
  51. package/dist/beacon/types/plugins/index.d.ts.map +1 -0
  52. package/dist/beacon/types/plugins/liveMonitor.d.ts +14 -0
  53. package/dist/beacon/types/plugins/liveMonitor.d.ts.map +1 -0
  54. package/dist/beacon/types/plugins/metadata.d.ts +3 -0
  55. package/dist/beacon/types/plugins/metadata.d.ts.map +1 -0
  56. package/dist/beacon/types/registry.d.ts +33 -0
  57. package/dist/beacon/types/registry.d.ts.map +1 -0
  58. package/dist/beacon/types/styles.d.ts +8 -0
  59. package/dist/beacon/types/styles.d.ts.map +1 -0
  60. package/dist/beacon/types/transport.d.ts +3 -0
  61. package/dist/beacon/types/transport.d.ts.map +1 -0
  62. package/dist/beacon/types/types.d.ts +152 -68
  63. package/dist/beacon/types/types.d.ts.map +1 -1
  64. package/dist/beacon/types/ui/dialog.d.ts +53 -0
  65. package/dist/beacon/types/ui/dialog.d.ts.map +1 -0
  66. package/dist/beacon/types/ui/form.d.ts +7 -0
  67. package/dist/beacon/types/ui/form.d.ts.map +1 -0
  68. package/dist/beacon/types/ui/overlay.d.ts +6 -0
  69. package/dist/beacon/types/ui/overlay.d.ts.map +1 -0
  70. package/dist/chart-client/assets/{index-CJ4mgRRF.css → index-CDIhdgWg.css} +1 -1
  71. package/dist/chart-client/index.html +2 -2
  72. package/dist/client/assets/{index-DI5qSR_w.css → index-CfW4n40I.css} +1 -1
  73. package/dist/client/index.html +2 -2
  74. package/dist/council-client/assets/{index-C_-vAM9L.css → index-CZim6x1u.css} +1 -1
  75. package/dist/council-client/index.html +2 -2
  76. package/dist/deck-client/assets/{_baseUniq-W2JQDmje.js → _baseUniq-DdHaBFYO.js} +1 -1
  77. package/dist/deck-client/assets/{arc-DIBWAId9.js → arc-D98e_18X.js} +1 -1
  78. package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-CAIRMvJK.js → architectureDiagram-Q4EWVU46-DNFZzh-4.js} +1 -1
  79. package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-BeNaNiOi.js → blockDiagram-DXYQGD6D-DeQvGUdX.js} +1 -1
  80. package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-B9Ozi62h.js → c4Diagram-AHTNJAMY-B6ekZf1n.js} +1 -1
  81. package/dist/deck-client/assets/channel-DmR7Tyyt.js +1 -0
  82. package/dist/deck-client/assets/{chunk-4BX2VUAB-D7AZ47dt.js → chunk-4BX2VUAB-9aDWymq2.js} +1 -1
  83. package/dist/deck-client/assets/{chunk-4TB4RGXK-DnVnNPcI.js → chunk-4TB4RGXK-DtKQqaI7.js} +1 -1
  84. package/dist/deck-client/assets/{chunk-55IACEB6-UKYs-YNd.js → chunk-55IACEB6-COy9hEae.js} +1 -1
  85. package/dist/deck-client/assets/{chunk-EDXVE4YY-D43b-SKn.js → chunk-EDXVE4YY-D_f861An.js} +1 -1
  86. package/dist/deck-client/assets/{chunk-FMBD7UC4-QzBAoyyW.js → chunk-FMBD7UC4-CmuA5UKn.js} +1 -1
  87. package/dist/deck-client/assets/{chunk-OYMX7WX6-Cjif4r6W.js → chunk-OYMX7WX6-vT8z8D-0.js} +1 -1
  88. package/dist/deck-client/assets/{chunk-QZHKN3VN-CqLDirEI.js → chunk-QZHKN3VN-CTlwwg-R.js} +1 -1
  89. package/dist/deck-client/assets/{chunk-YZCP3GAM-_FQvmMs4.js → chunk-YZCP3GAM-C44yr620.js} +1 -1
  90. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-Bl4ozQWs.js +1 -0
  91. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-Bl4ozQWs.js +1 -0
  92. package/dist/deck-client/assets/clone-BAy58j24.js +1 -0
  93. package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-rfrocesE.js → cose-bilkent-S5V4N54A-DBB2J2nL.js} +1 -1
  94. package/dist/deck-client/assets/{dagre-KV5264BT-Bv_7DJat.js → dagre-KV5264BT-DxDTYbKl.js} +1 -1
  95. package/dist/deck-client/assets/{diagram-5BDNPKRD-4F1414G5.js → diagram-5BDNPKRD-DByWrWd1.js} +1 -1
  96. package/dist/deck-client/assets/{diagram-G4DWMVQ6-C4-Pszqm.js → diagram-G4DWMVQ6-B8B6ddMq.js} +1 -1
  97. package/dist/deck-client/assets/{diagram-MMDJMWI5-B647TIx9.js → diagram-MMDJMWI5-BMUZ2PWK.js} +1 -1
  98. package/dist/deck-client/assets/{diagram-TYMM5635-BFAqpezd.js → diagram-TYMM5635-Bk9e8BB-.js} +1 -1
  99. package/dist/deck-client/assets/{erDiagram-SMLLAGMA-BfBfrJOC.js → erDiagram-SMLLAGMA-DcOSwSol.js} +1 -1
  100. package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-DX9YAYes.js → flowDiagram-DWJPFMVM-DI-4BR0F.js} +1 -1
  101. package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-DCuiy7wF.js → ganttDiagram-T4ZO3ILL-BeZuXBoU.js} +1 -1
  102. package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-CGp1IXUh.js → gitGraphDiagram-UUTBAWPF-Bcki__f-.js} +1 -1
  103. package/dist/deck-client/assets/{graph-B7g8aoxv.js → graph-CifKx6G1.js} +1 -1
  104. package/dist/deck-client/assets/index-6sdqbm2o.js +2 -0
  105. package/dist/deck-client/assets/{index-DsIZ3LqL.css → index-BlTlhxFW.css} +1 -1
  106. package/dist/deck-client/assets/index-CB-qlwRT.js +1195 -0
  107. package/dist/deck-client/assets/{infoDiagram-42DDH7IO-L3fahMkF.js → infoDiagram-42DDH7IO-CReN1nFN.js} +1 -1
  108. package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-aS_EjWBZ.js → ishikawaDiagram-UXIWVN3A-CDF_VLN_.js} +1 -1
  109. package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-djTSQZF9.js → journeyDiagram-VCZTEJTY-DwgGrNVB.js} +1 -1
  110. package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-CcTHo4CM.js → kanban-definition-6JOO6SKY-DB_zohh5.js} +1 -1
  111. package/dist/deck-client/assets/{layout-mEJiadb7.js → layout-DFfX1O3z.js} +1 -1
  112. package/dist/deck-client/assets/{linear-XgTKqyRu.js → linear-CtKb4EXj.js} +1 -1
  113. package/dist/deck-client/assets/{min-Ct9jZdpd.js → min-DCRRwUZv.js} +1 -1
  114. package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-BaFxCGNU.js → mindmap-definition-QFDTVHPH-D0QBOiFe.js} +1 -1
  115. package/dist/deck-client/assets/{pieDiagram-DEJITSTG-CIbYYjtw.js → pieDiagram-DEJITSTG-CD-EV5WB.js} +1 -1
  116. package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-D9EtCOvh.js → quadrantDiagram-34T5L4WZ-B-JXZ8xI.js} +1 -1
  117. package/dist/deck-client/assets/{requirementDiagram-MS252O5E-xeni9eVG.js → requirementDiagram-MS252O5E-D2_OK5Dp.js} +1 -1
  118. package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-LYeknz9h.js → sankeyDiagram-XADWPNL6-BbBJqVSC.js} +1 -1
  119. package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-RDbsKFZf.js → sequenceDiagram-FGHM5R23-Db8A-Rkk.js} +1 -1
  120. package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-BH1Zjglk.js → stateDiagram-FHFEXIEX-DGJnanjS.js} +1 -1
  121. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-CR7riiab.js +1 -0
  122. package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-IFXxKptt.js → timeline-definition-GMOUNBTQ-BRkr6T4w.js} +1 -1
  123. package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-D-sLkQs9.js → vennDiagram-DHZGUBPP-d0rsTqFo.js} +1 -1
  124. package/dist/deck-client/assets/{wardley-RL74JXVD-C010F8l4.js → wardley-RL74JXVD-2t7cMqdS.js} +1 -1
  125. package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-BTjjuDU3.js → wardleyDiagram-NUSXRM2D-DzboAsHh.js} +1 -1
  126. package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-AYbv92n-.js → xychartDiagram-5P7HB3ND-CgTP9u2V.js} +1 -1
  127. package/dist/deck-client/index.html +2 -2
  128. package/dist/server/beacon-monitor-entry.js +548 -6
  129. package/dist/server/chart-serve.js +917 -248
  130. package/dist/server/cli.js +2033 -385
  131. package/dist/server/deck-mcp-entry.js +141 -21
  132. package/dist/server/deck-serve.js +141 -21
  133. package/dist/server/graph-mcp-entry.js +1991 -333
  134. package/dist/server/init-entry.js +24 -13
  135. package/dist/server/orbit-entry.js +135 -7
  136. package/dist/server/parse-worker-entry.js +918 -247
  137. package/package.json +4 -2
  138. package/scaffolds/ls-marketplace/plugins/kit/skills/analyse/SKILL.md +180 -0
  139. package/scaffolds/ls-marketplace/plugins/kit/skills/beacon-array/SKILL.md +107 -0
  140. package/scaffolds/ls-marketplace/plugins/kit/skills/beacon-clear/SKILL.md +94 -0
  141. package/scaffolds/ls-marketplace/plugins/kit/skills/beacon-pulse/SKILL.md +82 -0
  142. package/scaffolds/ls-marketplace/plugins/kit/skills/beacon-scan/SKILL.md +66 -0
  143. package/scaffolds/ls-marketplace/plugins/kit/skills/blast-radius/SKILL.md +117 -0
  144. package/scaffolds/ls-marketplace/plugins/kit/skills/brief/SKILL.md +112 -0
  145. package/scaffolds/ls-marketplace/plugins/kit/skills/course/SKILL.md +84 -0
  146. package/scaffolds/ls-marketplace/plugins/kit/skills/debug/SKILL.md +85 -0
  147. package/scaffolds/ls-marketplace/plugins/kit/skills/deploy-check/SKILL.md +160 -0
  148. package/scaffolds/ls-marketplace/plugins/kit/skills/diagram/SKILL.md +152 -0
  149. package/scaffolds/ls-marketplace/plugins/kit/skills/orbit/SKILL.md +87 -0
  150. package/scaffolds/ls-marketplace/plugins/kit/skills/prototype/SKILL.md +110 -0
  151. package/scaffolds/ls-marketplace/plugins/kit/skills/recovery/SKILL.md +95 -0
  152. package/scaffolds/ls-marketplace/plugins/kit/{commands/show-mcp-status.md → skills/show-mcp-status/SKILL.md} +4 -4
  153. package/scaffolds/ls-marketplace/plugins/kit/skills/wireframe/SKILL.md +90 -0
  154. package/scaffolds/statusline/statusline-mcp.sh +21 -9
  155. package/dist/beacon/types/capture/element.d.ts +0 -3
  156. package/dist/beacon/types/capture/element.d.ts.map +0 -1
  157. package/dist/beacon/types/capture/events.d.ts +0 -20
  158. package/dist/beacon/types/capture/events.d.ts.map +0 -1
  159. package/dist/beacon/types/capture/framework.d.ts +0 -3
  160. package/dist/beacon/types/capture/framework.d.ts.map +0 -1
  161. package/dist/beacon/types/capture/metadata.d.ts +0 -3
  162. package/dist/beacon/types/capture/metadata.d.ts.map +0 -1
  163. package/dist/beacon/types/capture/overlay.d.ts +0 -7
  164. package/dist/beacon/types/capture/overlay.d.ts.map +0 -1
  165. package/dist/beacon/types/capture/picker.d.ts.map +0 -1
  166. package/dist/beacon/types/capture/screenshot.d.ts +0 -7
  167. package/dist/beacon/types/capture/screenshot.d.ts.map +0 -1
  168. package/dist/beacon/types/capture/selector.d.ts.map +0 -1
  169. package/dist/beacon/types/monitor/dom.d.ts +0 -13
  170. package/dist/beacon/types/monitor/dom.d.ts.map +0 -1
  171. package/dist/beacon/types/monitor/index.d.ts +0 -19
  172. package/dist/beacon/types/monitor/index.d.ts.map +0 -1
  173. package/dist/beacon/types/monitor/network.d.ts +0 -12
  174. package/dist/beacon/types/monitor/network.d.ts.map +0 -1
  175. package/dist/beacon/types/monitor/transport.d.ts.map +0 -1
  176. package/dist/beacon/types/monitor/types.d.ts.map +0 -1
  177. package/dist/beacon/types/transport/submit.d.ts +0 -3
  178. package/dist/beacon/types/transport/submit.d.ts.map +0 -1
  179. package/dist/beacon/types/ui/button.d.ts +0 -2
  180. package/dist/beacon/types/ui/button.d.ts.map +0 -1
  181. package/dist/beacon/types/ui/drawer.d.ts +0 -33
  182. package/dist/beacon/types/ui/drawer.d.ts.map +0 -1
  183. package/dist/beacon/types/ui/icons.d.ts +0 -9
  184. package/dist/beacon/types/ui/icons.d.ts.map +0 -1
  185. package/dist/beacon/types/ui/monitor-panel.d.ts +0 -19
  186. package/dist/beacon/types/ui/monitor-panel.d.ts.map +0 -1
  187. package/dist/beacon/types/ui/pick-mode-overlay.d.ts.map +0 -1
  188. package/dist/beacon/types/ui/pin-popover.d.ts.map +0 -1
  189. package/dist/deck-client/assets/channel-CRdozqbp.js +0 -1
  190. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-lIZMp57W.js +0 -1
  191. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-lIZMp57W.js +0 -1
  192. package/dist/deck-client/assets/clone-BtWeSTyJ.js +0 -1
  193. package/dist/deck-client/assets/index-Dg1r-WSN.js +0 -476
  194. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-BrV78NDR.js +0 -1
  195. package/scaffolds/ls-marketplace/plugins/kit/commands/beacon-array.md +0 -92
  196. package/scaffolds/ls-marketplace/plugins/kit/commands/beacon-clear.md +0 -68
  197. package/scaffolds/ls-marketplace/plugins/kit/commands/beacon-pulse.md +0 -80
  198. package/scaffolds/ls-marketplace/plugins/kit/commands/beacon-scan.md +0 -62
  199. /package/dist/beacon/types/{capture → internal}/selector.d.ts +0 -0
  200. /package/dist/chart-client/assets/{index-Ccy-DpI-.js → index-B__ARB8k.js} +0 -0
  201. /package/dist/client/assets/{index-Dp0_okva.js → index-h8kMzVtG.js} +0 -0
  202. /package/dist/council-client/assets/{index-Dt4zWKSj.js → index-CWaDcsFR.js} +0 -0
@@ -1,4 +1,4 @@
1
- import{s as gi,g as xi,q as Xt,p as di,a as fi,b as pi,_ as a,l as Yt,I as mi,e as yi,z as bi,D as _t,i as Ai,F as Nt,G as wi,K as Ci,aC as Si,R as Wt}from"./index-Dg1r-WSN.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-XgTKqyRu.js";import"./defaultLocale-DX6XiGOO.js";function Ri(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s<n;)o[s]=e+s*i;return o}function bt(){var e=ki().unknown(void 0),t=e.domain,i=e.range,s=0,n=1,o,u,p=!1,f=0,T=0,P=.5;delete e.unknown;function _(){var y=t().length,E=n<s,v=E?n:s,L=E?s:n;o=(L-v)/Math.max(1,y-f+T*2),p&&(o=Math.floor(o)),v+=(L-v-o*(y-f))*P,u=o*(1-f),p&&(v=Math.round(v),u=Math.round(u));var I=Ri(y).map(function(m){return v+o*m});return i(E?I.reverse():I)}return e.domain=function(y){return arguments.length?(t(y),_()):t()},e.range=function(y){return arguments.length?([s,n]=y,s=+s,n=+n,_()):[s,n]},e.rangeRound=function(y){return[s,n]=y,s=+s,n=+n,p=!0,_()},e.bandwidth=function(){return u},e.step=function(){return o},e.round=function(y){return arguments.length?(p=!!y,_()):p},e.padding=function(y){return arguments.length?(f=Math.min(1,T=+y),_()):f},e.paddingInner=function(y){return arguments.length?(f=Math.min(1,y),_()):f},e.paddingOuter=function(y){return arguments.length?(T=+y,_()):T},e.align=function(y){return arguments.length?(P=Math.max(0,Math.min(1,y)),_()):P},e.copy=function(){return bt(t(),[s,n]).round(p).paddingInner(f).paddingOuter(T).align(P)},_i.apply(_(),arguments)}var At=function(){var e=a(function(F,h,c,g){for(c=c||{},g=F.length;g--;c[F[g]]=h);return c},"o"),t=[1,10,12,14,16,18,19,21,23],i=[2,6],s=[1,3],n=[1,5],o=[1,6],u=[1,7],p=[1,5,10,12,14,16,18,19,21,23,34,35,36],f=[1,25],T=[1,26],P=[1,28],_=[1,29],y=[1,30],E=[1,31],v=[1,32],L=[1,33],I=[1,34],m=[1,35],R=[1,36],l=[1,37],W=[1,43],O=[1,42],X=[1,47],Y=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],U=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],b=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],w=[1,64],V={trace:a(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:a(function(h,c,g,x,C,r,rt){var d=r.length-1;switch(C){case 5:x.setOrientation(r[d]);break;case 9:x.setDiagramTitle(r[d].text.trim());break;case 12:x.setLineData({text:"",type:"text"},r[d]);break;case 13:x.setLineData(r[d-1],r[d]);break;case 14:x.setBarData({text:"",type:"text"},r[d]);break;case 15:x.setBarData(r[d-1],r[d]);break;case 16:this.$=r[d].trim(),x.setAccTitle(this.$);break;case 17:case 18:this.$=r[d].trim(),x.setAccDescription(this.$);break;case 19:this.$=r[d-1];break;case 20:this.$=[Number(r[d-2]),...r[d]];break;case 21:this.$=[Number(r[d])];break;case 22:x.setXAxisTitle(r[d]);break;case 23:x.setXAxisTitle(r[d-1]);break;case 24:x.setXAxisTitle({type:"text",text:""});break;case 25:x.setXAxisBand(r[d]);break;case 26:x.setXAxisRangeData(Number(r[d-2]),Number(r[d]));break;case 27:this.$=r[d-1];break;case 28:this.$=[r[d-2],...r[d]];break;case 29:this.$=[r[d]];break;case 30:x.setYAxisTitle(r[d]);break;case 31:x.setYAxisTitle(r[d-1]);break;case 32:x.setYAxisTitle({type:"text",text:""});break;case 33:x.setYAxisRangeData(Number(r[d-2]),Number(r[d]));break;case 37:this.$={text:r[d],type:"text"};break;case 38:this.$={text:r[d],type:"text"};break;case 39:this.$={text:r[d],type:"markdown"};break;case 40:this.$=r[d];break;case 41:this.$=r[d-1]+""+r[d];break}},"anonymous"),table:[e(t,i,{3:1,4:2,7:4,5:s,34:n,35:o,36:u}),{1:[3]},e(t,i,{4:2,7:4,3:8,5:s,34:n,35:o,36:u}),e(t,i,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:o,36:u}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},e(p,[2,34]),e(p,[2,35]),e(p,[2,36]),{1:[2,1]},e(t,i,{4:2,7:4,3:21,5:s,34:n,35:o,36:u}),{1:[2,3]},e(p,[2,5]),e(t,[2,7],{4:22,34:n,35:o,36:u}),{11:23,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:39,13:38,24:W,27:O,29:40,30:41,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:45,15:44,27:X,33:46,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:49,17:48,24:Y,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:52,17:51,24:Y,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{20:[1,53]},{22:[1,54]},e(S,[2,18]),{1:[2,2]},e(S,[2,8]),e(S,[2,9]),e(U,[2,37],{40:55,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l}),e(U,[2,38]),e(U,[2,39]),e(b,[2,40]),e(b,[2,42]),e(b,[2,43]),e(b,[2,44]),e(b,[2,45]),e(b,[2,46]),e(b,[2,47]),e(b,[2,48]),e(b,[2,49]),e(b,[2,50]),e(b,[2,51]),e(S,[2,10]),e(S,[2,22],{30:41,29:56,24:W,27:O}),e(S,[2,24]),e(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},e(S,[2,11]),e(S,[2,30],{33:60,27:X}),e(S,[2,32]),{31:[1,61]},e(S,[2,12]),{17:62,24:Y},{25:63,27:w},e(S,[2,14]),{17:65,24:Y},e(S,[2,16]),e(S,[2,17]),e(b,[2,41]),e(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},e(S,[2,31]),{27:[1,69]},e(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},e(S,[2,15]),e(S,[2,26]),e(S,[2,27]),{11:59,32:72,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},e(S,[2,33]),e(S,[2,19]),{25:73,27:w},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:a(function(h,c){if(c.recoverable)this.trace(h);else{var g=new Error(h);throw g.hash=c,g}},"parseError"),parse:a(function(h){var c=this,g=[0],x=[],C=[null],r=[],rt=this.table,d="",ct=0,It=0,hi=2,Mt=1,li=r.slice.call(arguments,1),D=Object.create(this.lexer),$={yy:{}};for(var ft in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ft)&&($.yy[ft]=this.yy[ft]);D.setInput(h,$.yy),$.yy.lexer=D,$.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var pt=D.yylloc;r.push(pt);var ci=D.options&&D.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ui(B){g.length=g.length-2*B,C.length=C.length-B,r.length=r.length-B}a(ui,"popStack");function Vt(){var B;return B=x.pop()||D.lex()||Mt,typeof B!="number"&&(B instanceof Array&&(x=B,B=x.pop()),B=c.symbols_[B]||B),B}a(Vt,"lex");for(var M,q,z,mt,G={},ut,N,Bt,gt;;){if(q=g[g.length-1],this.defaultActions[q]?z=this.defaultActions[q]:((M===null||typeof M>"u")&&(M=Vt()),z=rt[q]&&rt[q][M]),typeof z>"u"||!z.length||!z[0]){var yt="";gt=[];for(ut in rt[q])this.terminals_[ut]&&ut>hi&&gt.push("'"+this.terminals_[ut]+"'");D.showPosition?yt="Parse error on line "+(ct+1)+`:
1
+ import{s as gi,g as xi,q as Xt,p as di,a as fi,b as pi,_ as a,l as Yt,I as mi,e as yi,z as bi,D as _t,i as Ai,F as Nt,G as wi,K as Ci,aC as Si,R as Wt}from"./index-CB-qlwRT.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-CtKb4EXj.js";import"./defaultLocale-DX6XiGOO.js";function Ri(e,t,i){e=+e,t=+t,i=(n=arguments.length)<2?(t=e,e=0,1):n<3?1:+i;for(var s=-1,n=Math.max(0,Math.ceil((t-e)/i))|0,o=new Array(n);++s<n;)o[s]=e+s*i;return o}function bt(){var e=ki().unknown(void 0),t=e.domain,i=e.range,s=0,n=1,o,u,p=!1,f=0,T=0,P=.5;delete e.unknown;function _(){var y=t().length,E=n<s,v=E?n:s,L=E?s:n;o=(L-v)/Math.max(1,y-f+T*2),p&&(o=Math.floor(o)),v+=(L-v-o*(y-f))*P,u=o*(1-f),p&&(v=Math.round(v),u=Math.round(u));var I=Ri(y).map(function(m){return v+o*m});return i(E?I.reverse():I)}return e.domain=function(y){return arguments.length?(t(y),_()):t()},e.range=function(y){return arguments.length?([s,n]=y,s=+s,n=+n,_()):[s,n]},e.rangeRound=function(y){return[s,n]=y,s=+s,n=+n,p=!0,_()},e.bandwidth=function(){return u},e.step=function(){return o},e.round=function(y){return arguments.length?(p=!!y,_()):p},e.padding=function(y){return arguments.length?(f=Math.min(1,T=+y),_()):f},e.paddingInner=function(y){return arguments.length?(f=Math.min(1,y),_()):f},e.paddingOuter=function(y){return arguments.length?(T=+y,_()):T},e.align=function(y){return arguments.length?(P=Math.max(0,Math.min(1,y)),_()):P},e.copy=function(){return bt(t(),[s,n]).round(p).paddingInner(f).paddingOuter(T).align(P)},_i.apply(_(),arguments)}var At=function(){var e=a(function(F,h,c,g){for(c=c||{},g=F.length;g--;c[F[g]]=h);return c},"o"),t=[1,10,12,14,16,18,19,21,23],i=[2,6],s=[1,3],n=[1,5],o=[1,6],u=[1,7],p=[1,5,10,12,14,16,18,19,21,23,34,35,36],f=[1,25],T=[1,26],P=[1,28],_=[1,29],y=[1,30],E=[1,31],v=[1,32],L=[1,33],I=[1,34],m=[1,35],R=[1,36],l=[1,37],W=[1,43],O=[1,42],X=[1,47],Y=[1,50],S=[1,10,12,14,16,18,19,21,23,34,35,36],U=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36],b=[1,10,12,14,16,18,19,21,23,24,26,27,28,34,35,36,41,42,43,44,45,46,47,48,49,50],w=[1,64],V={trace:a(function(){},"trace"),yy:{},symbols_:{error:2,start:3,eol:4,XYCHART:5,chartConfig:6,document:7,CHART_ORIENTATION:8,statement:9,title:10,text:11,X_AXIS:12,parseXAxis:13,Y_AXIS:14,parseYAxis:15,LINE:16,plotData:17,BAR:18,acc_title:19,acc_title_value:20,acc_descr:21,acc_descr_value:22,acc_descr_multiline_value:23,SQUARE_BRACES_START:24,commaSeparatedNumbers:25,SQUARE_BRACES_END:26,NUMBER_WITH_DECIMAL:27,COMMA:28,xAxisData:29,bandData:30,ARROW_DELIMITER:31,commaSeparatedTexts:32,yAxisData:33,NEWLINE:34,SEMI:35,EOF:36,alphaNum:37,STR:38,MD_STR:39,alphaNumToken:40,AMP:41,NUM:42,ALPHA:43,PLUS:44,EQUALS:45,MULT:46,DOT:47,BRKT:48,MINUS:49,UNDERSCORE:50,$accept:0,$end:1},terminals_:{2:"error",5:"XYCHART",8:"CHART_ORIENTATION",10:"title",12:"X_AXIS",14:"Y_AXIS",16:"LINE",18:"BAR",19:"acc_title",20:"acc_title_value",21:"acc_descr",22:"acc_descr_value",23:"acc_descr_multiline_value",24:"SQUARE_BRACES_START",26:"SQUARE_BRACES_END",27:"NUMBER_WITH_DECIMAL",28:"COMMA",31:"ARROW_DELIMITER",34:"NEWLINE",35:"SEMI",36:"EOF",38:"STR",39:"MD_STR",41:"AMP",42:"NUM",43:"ALPHA",44:"PLUS",45:"EQUALS",46:"MULT",47:"DOT",48:"BRKT",49:"MINUS",50:"UNDERSCORE"},productions_:[0,[3,2],[3,3],[3,2],[3,1],[6,1],[7,0],[7,2],[9,2],[9,2],[9,2],[9,2],[9,2],[9,3],[9,2],[9,3],[9,2],[9,2],[9,1],[17,3],[25,3],[25,1],[13,1],[13,2],[13,1],[29,1],[29,3],[30,3],[32,3],[32,1],[15,1],[15,2],[15,1],[33,3],[4,1],[4,1],[4,1],[11,1],[11,1],[11,1],[37,1],[37,2],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1],[40,1]],performAction:a(function(h,c,g,x,C,r,rt){var d=r.length-1;switch(C){case 5:x.setOrientation(r[d]);break;case 9:x.setDiagramTitle(r[d].text.trim());break;case 12:x.setLineData({text:"",type:"text"},r[d]);break;case 13:x.setLineData(r[d-1],r[d]);break;case 14:x.setBarData({text:"",type:"text"},r[d]);break;case 15:x.setBarData(r[d-1],r[d]);break;case 16:this.$=r[d].trim(),x.setAccTitle(this.$);break;case 17:case 18:this.$=r[d].trim(),x.setAccDescription(this.$);break;case 19:this.$=r[d-1];break;case 20:this.$=[Number(r[d-2]),...r[d]];break;case 21:this.$=[Number(r[d])];break;case 22:x.setXAxisTitle(r[d]);break;case 23:x.setXAxisTitle(r[d-1]);break;case 24:x.setXAxisTitle({type:"text",text:""});break;case 25:x.setXAxisBand(r[d]);break;case 26:x.setXAxisRangeData(Number(r[d-2]),Number(r[d]));break;case 27:this.$=r[d-1];break;case 28:this.$=[r[d-2],...r[d]];break;case 29:this.$=[r[d]];break;case 30:x.setYAxisTitle(r[d]);break;case 31:x.setYAxisTitle(r[d-1]);break;case 32:x.setYAxisTitle({type:"text",text:""});break;case 33:x.setYAxisRangeData(Number(r[d-2]),Number(r[d]));break;case 37:this.$={text:r[d],type:"text"};break;case 38:this.$={text:r[d],type:"text"};break;case 39:this.$={text:r[d],type:"markdown"};break;case 40:this.$=r[d];break;case 41:this.$=r[d-1]+""+r[d];break}},"anonymous"),table:[e(t,i,{3:1,4:2,7:4,5:s,34:n,35:o,36:u}),{1:[3]},e(t,i,{4:2,7:4,3:8,5:s,34:n,35:o,36:u}),e(t,i,{4:2,7:4,6:9,3:10,5:s,8:[1,11],34:n,35:o,36:u}),{1:[2,4],9:12,10:[1,13],12:[1,14],14:[1,15],16:[1,16],18:[1,17],19:[1,18],21:[1,19],23:[1,20]},e(p,[2,34]),e(p,[2,35]),e(p,[2,36]),{1:[2,1]},e(t,i,{4:2,7:4,3:21,5:s,34:n,35:o,36:u}),{1:[2,3]},e(p,[2,5]),e(t,[2,7],{4:22,34:n,35:o,36:u}),{11:23,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:39,13:38,24:W,27:O,29:40,30:41,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:45,15:44,27:X,33:46,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:49,17:48,24:Y,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{11:52,17:51,24:Y,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},{20:[1,53]},{22:[1,54]},e(S,[2,18]),{1:[2,2]},e(S,[2,8]),e(S,[2,9]),e(U,[2,37],{40:55,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l}),e(U,[2,38]),e(U,[2,39]),e(b,[2,40]),e(b,[2,42]),e(b,[2,43]),e(b,[2,44]),e(b,[2,45]),e(b,[2,46]),e(b,[2,47]),e(b,[2,48]),e(b,[2,49]),e(b,[2,50]),e(b,[2,51]),e(S,[2,10]),e(S,[2,22],{30:41,29:56,24:W,27:O}),e(S,[2,24]),e(S,[2,25]),{31:[1,57]},{11:59,32:58,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},e(S,[2,11]),e(S,[2,30],{33:60,27:X}),e(S,[2,32]),{31:[1,61]},e(S,[2,12]),{17:62,24:Y},{25:63,27:w},e(S,[2,14]),{17:65,24:Y},e(S,[2,16]),e(S,[2,17]),e(b,[2,41]),e(S,[2,23]),{27:[1,66]},{26:[1,67]},{26:[2,29],28:[1,68]},e(S,[2,31]),{27:[1,69]},e(S,[2,13]),{26:[1,70]},{26:[2,21],28:[1,71]},e(S,[2,15]),e(S,[2,26]),e(S,[2,27]),{11:59,32:72,37:24,38:f,39:T,40:27,41:P,42:_,43:y,44:E,45:v,46:L,47:I,48:m,49:R,50:l},e(S,[2,33]),e(S,[2,19]),{25:73,27:w},{26:[2,28]},{26:[2,20]}],defaultActions:{8:[2,1],10:[2,3],21:[2,2],72:[2,28],73:[2,20]},parseError:a(function(h,c){if(c.recoverable)this.trace(h);else{var g=new Error(h);throw g.hash=c,g}},"parseError"),parse:a(function(h){var c=this,g=[0],x=[],C=[null],r=[],rt=this.table,d="",ct=0,It=0,hi=2,Mt=1,li=r.slice.call(arguments,1),D=Object.create(this.lexer),$={yy:{}};for(var ft in this.yy)Object.prototype.hasOwnProperty.call(this.yy,ft)&&($.yy[ft]=this.yy[ft]);D.setInput(h,$.yy),$.yy.lexer=D,$.yy.parser=this,typeof D.yylloc>"u"&&(D.yylloc={});var pt=D.yylloc;r.push(pt);var ci=D.options&&D.options.ranges;typeof $.yy.parseError=="function"?this.parseError=$.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;function ui(B){g.length=g.length-2*B,C.length=C.length-B,r.length=r.length-B}a(ui,"popStack");function Vt(){var B;return B=x.pop()||D.lex()||Mt,typeof B!="number"&&(B instanceof Array&&(x=B,B=x.pop()),B=c.symbols_[B]||B),B}a(Vt,"lex");for(var M,q,z,mt,G={},ut,N,Bt,gt;;){if(q=g[g.length-1],this.defaultActions[q]?z=this.defaultActions[q]:((M===null||typeof M>"u")&&(M=Vt()),z=rt[q]&&rt[q][M]),typeof z>"u"||!z.length||!z[0]){var yt="";gt=[];for(ut in rt[q])this.terminals_[ut]&&ut>hi&&gt.push("'"+this.terminals_[ut]+"'");D.showPosition?yt="Parse error on line "+(ct+1)+`:
2
2
  `+D.showPosition()+`
3
3
  Expecting `+gt.join(", ")+", got '"+(this.terminals_[M]||M)+"'":yt="Parse error on line "+(ct+1)+": Unexpected "+(M==Mt?"end of input":"'"+(this.terminals_[M]||M)+"'"),this.parseError(yt,{text:D.match,token:this.terminals_[M]||M,line:D.yylineno,loc:pt,expected:gt})}if(z[0]instanceof Array&&z.length>1)throw new Error("Parse Error: multiple actions possible at state: "+q+", token: "+M);switch(z[0]){case 1:g.push(M),C.push(D.yytext),r.push(D.yylloc),g.push(z[1]),M=null,It=D.yyleng,d=D.yytext,ct=D.yylineno,pt=D.yylloc;break;case 2:if(N=this.productions_[z[1]][1],G.$=C[C.length-N],G._$={first_line:r[r.length-(N||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(N||1)].first_column,last_column:r[r.length-1].last_column},ci&&(G._$.range=[r[r.length-(N||1)].range[0],r[r.length-1].range[1]]),mt=this.performAction.apply(G,[d,It,ct,$.yy,z[1],C,r].concat(li)),typeof mt<"u")return mt;N&&(g=g.slice(0,-1*N*2),C=C.slice(0,-1*N),r=r.slice(0,-1*N)),g.push(this.productions_[z[1]][0]),C.push(G.$),r.push(G._$),Bt=rt[g[g.length-2]][g[g.length-1]],g.push(Bt);break;case 3:return!0}}return!0},"parse")},k=function(){var F={EOF:1,parseError:a(function(c,g){if(this.yy.parser)this.yy.parser.parseError(c,g);else throw new Error(c)},"parseError"),setInput:a(function(h,c){return this.yy=c||this.yy||{},this._input=h,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},"setInput"),input:a(function(){var h=this._input[0];this.yytext+=h,this.yyleng++,this.offset++,this.match+=h,this.matched+=h;var c=h.match(/(?:\r\n?|\n).*/g);return c?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),h},"input"),unput:a(function(h){var c=h.length,g=h.split(/(?:\r\n?|\n)/g);this._input=h+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-c),this.offset-=c;var x=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),g.length-1&&(this.yylineno-=g.length-1);var C=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:g?(g.length===x.length?this.yylloc.first_column:0)+x[x.length-g.length].length-g[0].length:this.yylloc.first_column-c},this.options.ranges&&(this.yylloc.range=[C[0],C[0]+this.yyleng-c]),this.yyleng=this.yytext.length,this},"unput"),more:a(function(){return this._more=!0,this},"more"),reject:a(function(){if(this.options.backtrack_lexer)this._backtrack=!0;else return this.parseError("Lexical error on line "+(this.yylineno+1)+`. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).
4
4
  `+this.showPosition(),{text:"",token:null,line:this.yylineno});return this},"reject"),less:a(function(h){this.unput(this.match.slice(h))},"less"),pastInput:a(function(){var h=this.matched.substr(0,this.matched.length-this.match.length);return(h.length>20?"...":"")+h.substr(-20).replace(/\n/g,"")},"pastInput"),upcomingInput:a(function(){var h=this.match;return h.length<20&&(h+=this._input.substr(0,20-h.length)),(h.substr(0,20)+(h.length>20?"...":"")).replace(/\n/g,"")},"upcomingInput"),showPosition:a(function(){var h=this.pastInput(),c=new Array(h.length+1).join("-");return h+this.upcomingInput()+`
@@ -12,8 +12,8 @@
12
12
  if (dark) document.documentElement.classList.add('dark');
13
13
  })();
14
14
  </script>
15
- <script type="module" crossorigin src="/assets/index-Dg1r-WSN.js"></script>
16
- <link rel="stylesheet" crossorigin href="/assets/index-DsIZ3LqL.css">
15
+ <script type="module" crossorigin src="/assets/index-CB-qlwRT.js"></script>
16
+ <link rel="stylesheet" crossorigin href="/assets/index-BlTlhxFW.css">
17
17
  </head>
18
18
  <body>
19
19
  <div id="root"></div>
@@ -1,9 +1,536 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __esm = (fn, res) => function __init() {
6
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
7
+ };
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+
13
+ // src/server/launch-kit-paths.ts
14
+ var LAUNCHSECURE_DIR;
15
+ var init_launch_kit_paths = __esm({
16
+ "src/server/launch-kit-paths.ts"() {
17
+ "use strict";
18
+ LAUNCHSECURE_DIR = ".launchsecure";
19
+ }
20
+ });
21
+
22
+ // src/server/orbit/registry.ts
23
+ function emptyRegistry() {
24
+ return { version: 1, worktrees: {} };
25
+ }
26
+ function readRegistry() {
27
+ if (!(0, import_node_fs2.existsSync)(REGISTRY_PATH)) return emptyRegistry();
28
+ try {
29
+ const parsed = JSON.parse((0, import_node_fs2.readFileSync)(REGISTRY_PATH, "utf-8"));
30
+ if (parsed?.version === 1 && parsed.worktrees && typeof parsed.worktrees === "object") {
31
+ return parsed;
32
+ }
33
+ } catch {
34
+ }
35
+ return emptyRegistry();
36
+ }
37
+ function listWorktrees() {
38
+ return Object.values(readRegistry().worktrees);
39
+ }
40
+ var import_node_fs2, import_node_os, import_node_path2, REGISTRY_DIR, REGISTRY_PATH, LOCK_PATH;
41
+ var init_registry = __esm({
42
+ "src/server/orbit/registry.ts"() {
43
+ "use strict";
44
+ import_node_fs2 = require("node:fs");
45
+ import_node_os = require("node:os");
46
+ import_node_path2 = require("node:path");
47
+ init_launch_kit_paths();
48
+ REGISTRY_DIR = (0, import_node_path2.join)((0, import_node_os.homedir)(), LAUNCHSECURE_DIR, "orbit");
49
+ REGISTRY_PATH = (0, import_node_path2.join)(REGISTRY_DIR, "state.json");
50
+ LOCK_PATH = (0, import_node_path2.join)(REGISTRY_DIR, "state.json.lock");
51
+ }
52
+ });
53
+
54
+ // src/server/lib/worktree.ts
55
+ function resolveWorktreeRoot(slug, monorepoRoot) {
56
+ const local = listWorktrees().filter((w) => w.projectRoot === monorepoRoot);
57
+ const match = local.find((w) => w.slug === slug);
58
+ if (match) return match.path;
59
+ if (local.length === 0) {
60
+ throw new Error(
61
+ `worktree="${slug}" requested but no worktrees are registered for this project. Run \`launch-orbit create <branch>\` first, or use \`project_root\` to point at an arbitrary path.`
62
+ );
63
+ }
64
+ const available = local.map((w) => `"${w.slug}" (${w.branch})`).join(", ");
65
+ throw new Error(`Unknown worktree "${slug}". Available: ${available}.`);
66
+ }
67
+ function resolveWorktreeOrProjectRoot(args, monorepoRoot) {
68
+ const projectRoot = typeof args.project_root === "string" ? args.project_root.trim() : "";
69
+ if (projectRoot) {
70
+ return (0, import_node_path3.isAbsolute)(projectRoot) ? projectRoot : (0, import_node_path3.resolve)(monorepoRoot, projectRoot);
71
+ }
72
+ const worktree = typeof args.worktree === "string" ? args.worktree.trim() : "";
73
+ if (worktree) {
74
+ return resolveWorktreeRoot(worktree, monorepoRoot);
75
+ }
76
+ return null;
77
+ }
78
+ var import_node_path3, WORKTREE_PARAM_DESCRIPTION, PROJECT_ROOT_PARAM_DESCRIPTION;
79
+ var init_worktree = __esm({
80
+ "src/server/lib/worktree.ts"() {
81
+ "use strict";
82
+ import_node_path3 = require("node:path");
83
+ init_registry();
84
+ WORKTREE_PARAM_DESCRIPTION = "Optional orbit worktree slug (from `launch-orbit create`). Resolves to the worktree's path via the orbit registry (~/.launchsecure/orbit/state.json). Lets you query a worktree's state from a Claude Code session pinned to the main repo. Superseded by `project_root`.";
85
+ PROJECT_ROOT_PARAM_DESCRIPTION = "Optional explicit project root. Accepts an absolute path or a path relative to the monorepo root. Escape hatch when `worktree` doesn't fit. Takes precedence over all other root args.";
86
+ }
87
+ });
88
+
89
+ // src/server/beacon-mcp.ts
90
+ var beacon_mcp_exports = {};
91
+ __export(beacon_mcp_exports, {
92
+ __testing: () => __testing,
93
+ startBeaconMcpServer: () => startBeaconMcpServer
94
+ });
95
+ function ndjsonDir(args = {}) {
96
+ const rootFromArgs = resolveWorktreeOrProjectRoot(args, process.cwd());
97
+ if (rootFromArgs) return (0, import_node_path4.resolve)(rootFromArgs, ".launchsecure");
98
+ const env = process.env.BEACON_NDJSON_DIR;
99
+ return env ? (0, import_node_path4.resolve)(env) : (0, import_node_path4.resolve)(process.cwd(), ".launchsecure");
100
+ }
101
+ function listSessionFiles(args = {}) {
102
+ const dir = ndjsonDir(args);
103
+ try {
104
+ const entries = (0, import_node_fs3.readdirSync)(dir);
105
+ const sessions = [];
106
+ for (const name of entries) {
107
+ const m = name.match(/^beacon-([A-Za-z0-9_-]+)\.ndjson$/);
108
+ if (!m) continue;
109
+ const path = (0, import_node_path4.join)(dir, name);
110
+ const st = (0, import_node_fs3.statSync)(path);
111
+ sessions.push({
112
+ token: m[1],
113
+ path,
114
+ sizeBytes: st.size,
115
+ modifiedAt: st.mtime.toISOString()
116
+ });
117
+ }
118
+ sessions.sort((a, b) => b.modifiedAt.localeCompare(a.modifiedAt));
119
+ return sessions;
120
+ } catch {
121
+ return [];
122
+ }
123
+ }
124
+ function resolveSession(token, args = {}) {
125
+ const all = listSessionFiles(args);
126
+ if (all.length === 0) return null;
127
+ if (!token) return all[0];
128
+ return all.find((s) => s.token === token) ?? null;
129
+ }
130
+ function parseEvents(filePath) {
131
+ const raw = (0, import_node_fs3.readFileSync)(filePath, "utf-8");
132
+ const out = [];
133
+ for (const line of raw.split("\n")) {
134
+ const t = line.trim();
135
+ if (!t) continue;
136
+ try {
137
+ const ev = JSON.parse(t);
138
+ if (typeof ev.kind === "string" && typeof ev.seq === "number") out.push(ev);
139
+ } catch {
140
+ }
141
+ }
142
+ return out;
143
+ }
144
+ function shortPath(url) {
145
+ try {
146
+ const u = new URL(url);
147
+ return (u.pathname || "/") + (u.search || "");
148
+ } catch {
149
+ return url;
150
+ }
151
+ }
152
+ function summarize(e) {
153
+ switch (e.kind) {
154
+ case "route": {
155
+ const r = e;
156
+ return `route ${shortPath(r.from)} \u2192 ${shortPath(r.to)} (${r.via})`;
157
+ }
158
+ case "click":
159
+ case "mousedown": {
160
+ const t = e.target;
161
+ const lbl = t.ariaLabel || t.text || t.label;
162
+ const tail = t.selector?.split(" > ").pop()?.slice(0, 40) ?? "";
163
+ const display = lbl ? `"${lbl}"` : tail;
164
+ const role = t.role ? ` role=${t.role}` : "";
165
+ const intercepted = e.hitMatchesTarget === false ? " [INTERCEPTED]" : "";
166
+ return `${e.kind} <${t.tag}${role}> ${display}${intercepted}`;
167
+ }
168
+ case "dialog": {
169
+ const d = e;
170
+ return `dialog ${d.action} ${d.selector.slice(0, 60)}`;
171
+ }
172
+ case "submit": {
173
+ const f = e.form;
174
+ const fields = f.fields.map((fd) => fd.name + (fd.hasValue ? "\u2713" : "\u2205")).join(",");
175
+ return `submit ${f.method} ${f.action || "-"} fields=[${fields}]`;
176
+ }
177
+ case "fetch":
178
+ case "xhr": {
179
+ const n = e;
180
+ const fl = n.failed ? "FAIL" : "ok";
181
+ return `${e.kind} ${n.method} ${n.status} ${n.durationMs}ms ${fl} ${shortPath(n.url)}`;
182
+ }
183
+ case "error":
184
+ case "unhandledrejection": {
185
+ return `${e.kind} ${e.message?.slice(0, 100) ?? ""}`;
186
+ }
187
+ case "probe": {
188
+ const p = e;
189
+ return `probe "${p.label}"`;
190
+ }
191
+ default:
192
+ return e.kind;
193
+ }
194
+ }
195
+ function compact(e) {
196
+ return {
197
+ seq: e.seq,
198
+ ts: e.ts,
199
+ kind: e.kind,
200
+ sessionId: e.sessionId,
201
+ summary: summarize(e)
202
+ };
203
+ }
204
+ function isFailure(e) {
205
+ if (e.kind === "error" || e.kind === "unhandledrejection") return true;
206
+ if ((e.kind === "fetch" || e.kind === "xhr") && e.failed) return true;
207
+ if (e.kind === "click" && e.hitMatchesTarget === false) return true;
208
+ return false;
209
+ }
210
+ function sessionsTool(args = {}) {
211
+ const files = listSessionFiles(args);
212
+ const out = files.map((f) => {
213
+ let events = [];
214
+ try {
215
+ events = parseEvents(f.path);
216
+ } catch {
217
+ }
218
+ const kindCounts = {};
219
+ for (const e of events) kindCounts[e.kind] = (kindCounts[e.kind] || 0) + 1;
220
+ const lastEv = events[events.length - 1];
221
+ return {
222
+ token: f.token,
223
+ path: f.path,
224
+ sizeBytes: f.sizeBytes,
225
+ modifiedAt: f.modifiedAt,
226
+ eventCount: events.length,
227
+ kindCounts,
228
+ lastEventAt: lastEv ? new Date(lastEv.ts).toISOString() : null,
229
+ lastSeq: lastEv?.seq ?? null
230
+ };
231
+ });
232
+ return { sessions: out };
233
+ }
234
+ function recentTool(args) {
235
+ const s = resolveSession(args.session, args);
236
+ if (!s) return { error: "no session found", sessions: [] };
237
+ const events = parseEvents(s.path);
238
+ const limit = Math.min(Math.max(1, args.limit ?? 50), 500);
239
+ const filtered = events.filter((e) => {
240
+ if (args.kind && e.kind !== args.kind) return false;
241
+ if (args.since !== void 0 && e.ts < args.since) return false;
242
+ return true;
243
+ });
244
+ const recent = filtered.slice(-limit).reverse();
245
+ return {
246
+ session: s.token,
247
+ matched: filtered.length,
248
+ returned: recent.length,
249
+ events: recent.map(compact)
250
+ };
251
+ }
252
+ function failuresTool(args) {
253
+ const s = resolveSession(args.session, args);
254
+ if (!s) return { error: "no session found" };
255
+ const events = parseEvents(s.path);
256
+ const limit = Math.min(Math.max(1, args.limit ?? 20), 100);
257
+ const failures = events.filter((e) => {
258
+ if (!isFailure(e)) return false;
259
+ if (args.since !== void 0 && e.ts < args.since) return false;
260
+ return true;
261
+ });
262
+ const recent = failures.slice(-limit).reverse();
263
+ return {
264
+ session: s.token,
265
+ matched: failures.length,
266
+ returned: recent.length,
267
+ // Full event objects for failures — agent needs the response body etc.
268
+ events: recent
269
+ };
270
+ }
271
+ function correlateTool(args) {
272
+ const s = resolveSession(args.session, args);
273
+ if (!s) return { error: "no session found" };
274
+ const events = parseEvents(s.path);
275
+ const idx = events.findIndex((e) => e.seq === args.seq);
276
+ if (idx < 0) return { error: `event seq=${args.seq} not found in session ${s.token}` };
277
+ const before = Math.min(Math.max(0, args.before ?? 5), 50);
278
+ const after = Math.min(Math.max(0, args.after ?? 5), 50);
279
+ const start = Math.max(0, idx - before);
280
+ const end = Math.min(events.length, idx + after + 1);
281
+ const slice = events.slice(start, end);
282
+ return {
283
+ session: s.token,
284
+ target: events[idx],
285
+ // full event
286
+ context: slice.map(compact)
287
+ };
288
+ }
289
+ function searchTool(args) {
290
+ const s = resolveSession(args.session, args);
291
+ if (!s) return { error: "no session found" };
292
+ const events = parseEvents(s.path);
293
+ const limit = Math.min(Math.max(1, args.limit ?? 20), 100);
294
+ let re;
295
+ const reMatch = args.pattern.match(/^\/(.+)\/([gimsuy]*)$/);
296
+ try {
297
+ re = reMatch ? new RegExp(reMatch[1], reMatch[2]) : new RegExp(args.pattern.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "i");
298
+ } catch (err) {
299
+ return { error: `invalid pattern: ${err.message}` };
300
+ }
301
+ const matches = [];
302
+ for (const e of events) {
303
+ const serialized = JSON.stringify(e);
304
+ const m = serialized.match(re);
305
+ if (m) {
306
+ const start = Math.max(0, (m.index ?? 0) - 30);
307
+ const end = Math.min(serialized.length, (m.index ?? 0) + m[0].length + 30);
308
+ matches.push({
309
+ seq: e.seq,
310
+ ts: e.ts,
311
+ kind: e.kind,
312
+ summary: summarize(e),
313
+ matchLine: serialized.slice(start, end)
314
+ });
315
+ if (matches.length >= limit) break;
316
+ }
317
+ }
318
+ return { session: s.token, matched: matches.length, events: matches };
319
+ }
320
+ function eventTool(args) {
321
+ const s = resolveSession(args.session, args);
322
+ if (!s) return { error: "no session found" };
323
+ const events = parseEvents(s.path);
324
+ const ev = events.find((e) => e.seq === args.seq);
325
+ if (!ev) return { error: `event seq=${args.seq} not found in session ${s.token}` };
326
+ return { session: s.token, event: ev };
327
+ }
328
+ async function handleTool(name, args) {
329
+ switch (name) {
330
+ case "beacon.sessions":
331
+ return sessionsTool(args);
332
+ case "beacon.recent":
333
+ return recentTool(args);
334
+ case "beacon.failures":
335
+ return failuresTool(args);
336
+ case "beacon.correlate":
337
+ return correlateTool(args);
338
+ case "beacon.search":
339
+ return searchTool(args);
340
+ case "beacon.event":
341
+ return eventTool(args);
342
+ default:
343
+ throw new Error(`unknown tool: ${name}`);
344
+ }
345
+ }
346
+ function send(msg) {
347
+ process.stdout.write(JSON.stringify(msg) + "\n");
348
+ }
349
+ function sendResponse(id, result) {
350
+ send({ jsonrpc: "2.0", id, result });
351
+ }
352
+ function sendError(id, code, message) {
353
+ send({ jsonrpc: "2.0", id, error: { code, message } });
354
+ }
355
+ async function handleMessage(parsed) {
356
+ const id = parsed.id;
357
+ const method = parsed.method;
358
+ const params = parsed.params ?? {};
359
+ switch (method) {
360
+ case "initialize":
361
+ sendResponse(id ?? null, {
362
+ protocolVersion: "2024-11-05",
363
+ capabilities: { tools: {} },
364
+ serverInfo: SERVER_INFO
365
+ });
366
+ break;
367
+ case "notifications/initialized":
368
+ break;
369
+ case "tools/list":
370
+ sendResponse(id ?? null, { tools: TOOLS });
371
+ break;
372
+ case "tools/call": {
373
+ const toolName = params.name;
374
+ const toolArgs = params.arguments ?? {};
375
+ try {
376
+ const result = await handleTool(toolName, toolArgs);
377
+ sendResponse(id ?? null, {
378
+ content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
379
+ });
380
+ } catch (err) {
381
+ sendError(id ?? null, -32603, `Tool error: ${err.message}`);
382
+ }
383
+ break;
384
+ }
385
+ case "ping":
386
+ sendResponse(id ?? null, {});
387
+ break;
388
+ default:
389
+ if (id !== void 0) sendError(id ?? null, -32601, `Method not found: ${method}`);
390
+ }
391
+ }
392
+ function startBeaconMcpServer() {
393
+ process.stderr.write("[launch-beacon mcp] starting on stdio\n");
394
+ const teardown = () => {
395
+ process.exit(0);
396
+ };
397
+ process.on("SIGTERM", teardown);
398
+ process.on("SIGINT", teardown);
399
+ process.stdin.setEncoding("utf-8");
400
+ let buffer = "";
401
+ process.stdin.on("data", (chunk) => {
402
+ buffer += chunk;
403
+ const lines = buffer.split("\n");
404
+ buffer = lines.pop() || "";
405
+ for (const line of lines) {
406
+ const trimmed = line.trim();
407
+ if (!trimmed) continue;
408
+ try {
409
+ handleMessage(JSON.parse(trimmed)).catch((err) => {
410
+ process.stderr.write(`[launch-beacon mcp] message error: ${err}
411
+ `);
412
+ });
413
+ } catch (err) {
414
+ process.stderr.write(`[launch-beacon mcp] parse error: ${err}
415
+ `);
416
+ }
417
+ }
418
+ });
419
+ process.stdin.on("end", () => {
420
+ process.stderr.write("[launch-beacon mcp] stdin closed, exiting\n");
421
+ teardown();
422
+ });
423
+ }
424
+ var import_node_fs3, import_node_path4, SERVER_INFO, ROOT_PARAM_SCHEMA, TOOLS, __testing;
425
+ var init_beacon_mcp = __esm({
426
+ "src/server/beacon-mcp.ts"() {
427
+ "use strict";
428
+ import_node_fs3 = require("node:fs");
429
+ import_node_path4 = require("node:path");
430
+ init_worktree();
431
+ SERVER_INFO = { name: "launch-beacon", version: "0.0.1" };
432
+ ROOT_PARAM_SCHEMA = {
433
+ worktree: { type: "string", description: WORKTREE_PARAM_DESCRIPTION },
434
+ project_root: { type: "string", description: PROJECT_ROOT_PARAM_DESCRIPTION }
435
+ };
436
+ TOOLS = [
437
+ {
438
+ name: "beacon.sessions",
439
+ description: "List all launch-beacon monitor NDJSON files under .launchsecure/ with per-session summary (token, event count, kind breakdown, first/last seq, last event timestamp). Use to discover which sessions are available before querying with the other tools.",
440
+ inputSchema: {
441
+ type: "object",
442
+ properties: { ...ROOT_PARAM_SCHEMA }
443
+ }
444
+ },
445
+ {
446
+ name: "beacon.recent",
447
+ description: "Recent events from a session, optionally filtered by kind. Returns a compact summary line per event (seq, ts, kind, derived label). Use to get a quick sense of what just happened.",
448
+ inputSchema: {
449
+ type: "object",
450
+ properties: {
451
+ session: { type: "string", description: "Session token (filename stem). Defaults to most recent NDJSON." },
452
+ kind: { type: "string", description: "Filter to one kind: click, route, dialog, fetch, xhr, error, unhandledrejection, submit, probe, mousedown." },
453
+ since: { type: "number", description: "Epoch ms \u2014 only return events at or after this timestamp." },
454
+ limit: { type: "number", description: "Max events to return. Default 50, hard cap 500." },
455
+ ...ROOT_PARAM_SCHEMA
456
+ }
457
+ }
458
+ },
459
+ {
460
+ name: "beacon.failures",
461
+ description: "All failure-shaped events: window errors, unhandled rejections, fetch/xhr with status >= 400 or that threw, and clicks where hitMatchesTarget=false (intercepted by overlay). Returns full event objects (including request/response bodies for failed network calls) so the agent has enough to diagnose. Use this as the FIRST tool when asked 'what's broken'.",
462
+ inputSchema: {
463
+ type: "object",
464
+ properties: {
465
+ session: { type: "string", description: "Session token. Defaults to most recent NDJSON." },
466
+ since: { type: "number", description: "Epoch ms \u2014 only return failures at or after this timestamp." },
467
+ limit: { type: "number", description: "Max failures to return. Default 20, hard cap 100." },
468
+ ...ROOT_PARAM_SCHEMA
469
+ }
470
+ }
471
+ },
472
+ {
473
+ name: "beacon.correlate",
474
+ description: "Given a target event seq, return the N events before and after it. Use to answer 'what was the user doing when this error fired' \u2014 pass the error's seq and you get the clicks/routes/fetches that preceded and followed it. Returned events are summaries; call beacon.event for full detail.",
475
+ inputSchema: {
476
+ type: "object",
477
+ properties: {
478
+ session: { type: "string", description: "Session token. Defaults to most recent NDJSON." },
479
+ seq: { type: "number", description: "Target event sequence number." },
480
+ before: { type: "number", description: "Events before to include. Default 5, max 50." },
481
+ after: { type: "number", description: "Events after to include. Default 5, max 50." },
482
+ ...ROOT_PARAM_SCHEMA
483
+ },
484
+ required: ["seq"]
485
+ }
486
+ },
487
+ {
488
+ name: "beacon.search",
489
+ description: "Substring/regex search across all events in a session. Searches the serialized JSON of each event, so URLs, selectors, response bodies, error messages, and click labels are all searchable. Useful for 'did we ever POST to /api/X?' or 'find the click that contained the word Submit'.",
490
+ inputSchema: {
491
+ type: "object",
492
+ properties: {
493
+ pattern: { type: "string", description: "Substring or /regex/flags pattern to search for." },
494
+ session: { type: "string", description: "Session token. Defaults to most recent NDJSON." },
495
+ limit: { type: "number", description: "Max matches. Default 20, hard cap 100." },
496
+ ...ROOT_PARAM_SCHEMA
497
+ },
498
+ required: ["pattern"]
499
+ }
500
+ },
501
+ {
502
+ name: "beacon.event",
503
+ description: "Fetch the full JSON of a single event by sequence number. Use this AFTER beacon.correlate or beacon.recent shows a summary that you want to inspect deeply (full response body, full selector chain, etc.).",
504
+ inputSchema: {
505
+ type: "object",
506
+ properties: {
507
+ session: { type: "string", description: "Session token. Defaults to most recent NDJSON." },
508
+ seq: { type: "number", description: "Event sequence number to fetch." },
509
+ ...ROOT_PARAM_SCHEMA
510
+ },
511
+ required: ["seq"]
512
+ }
513
+ }
514
+ ];
515
+ __testing = {
516
+ parseEvents,
517
+ summarize,
518
+ isFailure,
519
+ listSessionFiles,
520
+ resolveSession,
521
+ sessionsTool,
522
+ recentTool,
523
+ failuresTool,
524
+ correlateTool,
525
+ searchTool,
526
+ eventTool
527
+ };
528
+ }
529
+ });
3
530
 
4
531
  // src/server/beacon-monitor-entry.ts
5
532
  var import_node_crypto = require("node:crypto");
6
- var import_node_path2 = require("node:path");
533
+ var import_node_path5 = require("node:path");
7
534
 
8
535
  // src/server/beacon/ndjson-writer.ts
9
536
  var import_node_fs = require("node:fs");
@@ -60,7 +587,7 @@ function writeCors(res, origin) {
60
587
  res.setHeader("Vary", "Origin");
61
588
  }
62
589
  function readBody(req) {
63
- return new Promise((resolve2, reject) => {
590
+ return new Promise((resolve4, reject) => {
64
591
  const chunks = [];
65
592
  let total = 0;
66
593
  req.on("data", (chunk) => {
@@ -72,7 +599,7 @@ function readBody(req) {
72
599
  }
73
600
  chunks.push(chunk);
74
601
  });
75
- req.on("end", () => resolve2(Buffer.concat(chunks).toString("utf8")));
602
+ req.on("end", () => resolve4(Buffer.concat(chunks).toString("utf8")));
76
603
  req.on("error", (err) => reject(err));
77
604
  });
78
605
  }
@@ -181,6 +708,10 @@ function parseMonitorFlags(argv) {
181
708
  const v = argv[++i];
182
709
  if (!v) die("--host requires a value");
183
710
  flags.host = v;
711
+ } else if (a === "--cwd") {
712
+ const v = argv[++i];
713
+ if (!v) die("--cwd requires a path");
714
+ flags.cwd = v;
184
715
  } else if (a === "--out") {
185
716
  const v = argv[++i];
186
717
  if (!v) die("--out requires a path");
@@ -209,8 +740,9 @@ function mintToken() {
209
740
  async function runMonitor(argv) {
210
741
  const flags = parseMonitorFlags(argv);
211
742
  const token = flags.token ?? mintToken();
212
- const projectRoot = process.cwd();
213
- const outPath = flags.out ? (0, import_node_path2.resolve)(projectRoot, flags.out) : (0, import_node_path2.resolve)(projectRoot, ".launchsecure", `beacon-${token}.ndjson`);
743
+ const projectRoot = flags.cwd ? (0, import_node_path5.resolve)(flags.cwd) : process.cwd();
744
+ const ndjsonDirEnv = process.env.BEACON_NDJSON_DIR;
745
+ const outPath = flags.out ? (0, import_node_path5.resolve)(projectRoot, flags.out) : ndjsonDirEnv ? (0, import_node_path5.resolve)(ndjsonDirEnv, `beacon-${token}.ndjson`) : (0, import_node_path5.resolve)(projectRoot, ".launchsecure", `beacon-${token}.ndjson`);
214
746
  const writer = openNdjsonWriter({
215
747
  path: outPath,
216
748
  onError: (err) => {
@@ -322,10 +854,15 @@ Usage:
322
854
  Flags for "monitor":
323
855
  --port <n> port to listen on (default: 9876)
324
856
  --host <host> host to bind to (default: 127.0.0.1)
325
- --out <path> output NDJSON file (default: .launchsecure/beacon-<token>.ndjson)
857
+ --cwd <path> project root for the output file (default: process.cwd())
858
+ --out <path> output NDJSON file (default: <cwd>/.launchsecure/beacon-<token>.ndjson)
326
859
  --token <str> use this token instead of a random 8-char hex
327
860
  --quiet suppress the live heartbeat line
328
861
 
862
+ Env:
863
+ BEACON_NDJSON_DIR override the default output directory; same var the MCP
864
+ server reads so monitor + MCP land on the same files.
865
+
329
866
  The printed URL is what you paste into the beacon debug panel. Beacon POSTs
330
867
  monitor batches there; this process writes each event as a JSON line to the
331
868
  output file. Ctrl+C shuts down cleanly.
@@ -339,6 +876,11 @@ async function main() {
339
876
  await runMonitor(subcommand === "monitor" ? argv.slice(1) : argv);
340
877
  return;
341
878
  }
879
+ if (subcommand === "mcp") {
880
+ const { startBeaconMcpServer: startBeaconMcpServer2 } = await Promise.resolve().then(() => (init_beacon_mcp(), beacon_mcp_exports));
881
+ startBeaconMcpServer2();
882
+ return;
883
+ }
342
884
  if (subcommand === "--help" || subcommand === "-h" || subcommand === "help") {
343
885
  printHelp();
344
886
  return;