@launchsecure/launch-kit 0.0.31 → 0.0.33

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 (95) hide show
  1. package/dist/beacon/beacon.mjs +550 -521
  2. package/dist/beacon/beacon.mjs.map +1 -1
  3. package/dist/beacon/beacon.umd.js +9 -9
  4. package/dist/beacon/beacon.umd.js.map +1 -1
  5. package/dist/beacon/types/internal/pick-mode-overlay.d.ts.map +1 -1
  6. package/dist/beacon/types/internal/picker.d.ts.map +1 -1
  7. package/dist/beacon/types/internal/pin-popover.d.ts.map +1 -1
  8. package/dist/beacon/types/internal/selector.d.ts.map +1 -1
  9. package/dist/chart-client/assets/{index-B__ARB8k.js → index-DFu2xIrM.js} +2 -2
  10. package/dist/chart-client/assets/index-DpKO9p0s.css +1 -0
  11. package/dist/chart-client/index.html +2 -2
  12. package/dist/client/assets/{index-h8kMzVtG.js → index-Cbw6bVdx.js} +2 -2
  13. package/dist/client/assets/index-Dv6dD2zY.css +32 -0
  14. package/dist/client/index.html +2 -2
  15. package/dist/council-client/assets/index-AqQ9Sei6.css +1 -0
  16. package/dist/council-client/assets/{index-CWaDcsFR.js → index-CAsmGTzg.js} +2 -2
  17. package/dist/council-client/index.html +2 -2
  18. package/dist/deck-client/assets/{_baseUniq-DdHaBFYO.js → _baseUniq-BiVx0WO_.js} +1 -1
  19. package/dist/deck-client/assets/{arc-D98e_18X.js → arc-DGMkiEzS.js} +1 -1
  20. package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-DNFZzh-4.js → architectureDiagram-Q4EWVU46-Y2WRmHtk.js} +1 -1
  21. package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-DeQvGUdX.js → blockDiagram-DXYQGD6D-_Lbfu5BQ.js} +1 -1
  22. package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-B6ekZf1n.js → c4Diagram-AHTNJAMY-CTqpYTBX.js} +1 -1
  23. package/dist/deck-client/assets/channel-DB6LxW_l.js +1 -0
  24. package/dist/deck-client/assets/{chunk-4BX2VUAB-9aDWymq2.js → chunk-4BX2VUAB-liEIbPHs.js} +1 -1
  25. package/dist/deck-client/assets/{chunk-4TB4RGXK-DtKQqaI7.js → chunk-4TB4RGXK-CCc6lYvL.js} +1 -1
  26. package/dist/deck-client/assets/{chunk-55IACEB6-COy9hEae.js → chunk-55IACEB6-D02jJUR2.js} +1 -1
  27. package/dist/deck-client/assets/{chunk-EDXVE4YY-D_f861An.js → chunk-EDXVE4YY-BFmGMbLD.js} +1 -1
  28. package/dist/deck-client/assets/{chunk-FMBD7UC4-CmuA5UKn.js → chunk-FMBD7UC4-6wFLOVcJ.js} +1 -1
  29. package/dist/deck-client/assets/{chunk-OYMX7WX6-vT8z8D-0.js → chunk-OYMX7WX6-Bnr8RiBf.js} +1 -1
  30. package/dist/deck-client/assets/{chunk-QZHKN3VN-CTlwwg-R.js → chunk-QZHKN3VN-Ct82MksJ.js} +1 -1
  31. package/dist/deck-client/assets/{chunk-YZCP3GAM-C44yr620.js → chunk-YZCP3GAM-BXmN1diQ.js} +1 -1
  32. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-g944ZyG8.js +1 -0
  33. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-g944ZyG8.js +1 -0
  34. package/dist/deck-client/assets/clone-DiIRH1pI.js +1 -0
  35. package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-DBB2J2nL.js → cose-bilkent-S5V4N54A-CmQCT-mH.js} +1 -1
  36. package/dist/deck-client/assets/{dagre-KV5264BT-DxDTYbKl.js → dagre-KV5264BT-DDdSa9EX.js} +1 -1
  37. package/dist/deck-client/assets/{diagram-5BDNPKRD-DByWrWd1.js → diagram-5BDNPKRD-Bccks2xJ.js} +1 -1
  38. package/dist/deck-client/assets/{diagram-G4DWMVQ6-B8B6ddMq.js → diagram-G4DWMVQ6-CPPNgxmQ.js} +1 -1
  39. package/dist/deck-client/assets/{diagram-MMDJMWI5-BMUZ2PWK.js → diagram-MMDJMWI5-KrD300pS.js} +1 -1
  40. package/dist/deck-client/assets/{diagram-TYMM5635-Bk9e8BB-.js → diagram-TYMM5635-DefnLuQf.js} +1 -1
  41. package/dist/deck-client/assets/{erDiagram-SMLLAGMA-DcOSwSol.js → erDiagram-SMLLAGMA-DI9FfnFP.js} +1 -1
  42. package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-DI-4BR0F.js → flowDiagram-DWJPFMVM-twKyd3Fx.js} +1 -1
  43. package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-BeZuXBoU.js → ganttDiagram-T4ZO3ILL-Wau3jhBr.js} +1 -1
  44. package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-Bcki__f-.js → gitGraphDiagram-UUTBAWPF-D9GgYXwb.js} +1 -1
  45. package/dist/deck-client/assets/{graph-CifKx6G1.js → graph-BhNLzyXS.js} +1 -1
  46. package/dist/deck-client/assets/index-B-YQq5b5.css +1 -0
  47. package/dist/deck-client/assets/{index-CB-qlwRT.js → index-BtQBaQ7s.js} +76 -76
  48. package/dist/deck-client/assets/{infoDiagram-42DDH7IO-CReN1nFN.js → infoDiagram-42DDH7IO-TylGlSG-.js} +1 -1
  49. package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-CDF_VLN_.js → ishikawaDiagram-UXIWVN3A-DAT8icpg.js} +1 -1
  50. package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-DwgGrNVB.js → journeyDiagram-VCZTEJTY-D3v_XL72.js} +1 -1
  51. package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-DB_zohh5.js → kanban-definition-6JOO6SKY-DNUOBiNr.js} +1 -1
  52. package/dist/deck-client/assets/{layout-DFfX1O3z.js → layout-COfodgwF.js} +1 -1
  53. package/dist/deck-client/assets/{linear-CtKb4EXj.js → linear-DmTsuIvK.js} +1 -1
  54. package/dist/deck-client/assets/{min-DCRRwUZv.js → min-BW1F7i1D.js} +1 -1
  55. package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-D0QBOiFe.js → mindmap-definition-QFDTVHPH-CErFzKWl.js} +1 -1
  56. package/dist/deck-client/assets/{pieDiagram-DEJITSTG-CD-EV5WB.js → pieDiagram-DEJITSTG-DW5F757o.js} +1 -1
  57. package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-B-JXZ8xI.js → quadrantDiagram-34T5L4WZ-B1S2-TfI.js} +1 -1
  58. package/dist/deck-client/assets/{requirementDiagram-MS252O5E-D2_OK5Dp.js → requirementDiagram-MS252O5E-BY5BAR-5.js} +1 -1
  59. package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-BbBJqVSC.js → sankeyDiagram-XADWPNL6-CE1Cp9HS.js} +1 -1
  60. package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-Db8A-Rkk.js → sequenceDiagram-FGHM5R23-IaHnbKye.js} +1 -1
  61. package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-DGJnanjS.js → stateDiagram-FHFEXIEX-CwPJm9hU.js} +1 -1
  62. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-DQYa2M1q.js +1 -0
  63. package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-BRkr6T4w.js → timeline-definition-GMOUNBTQ-DVFGGSgN.js} +1 -1
  64. package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-d0rsTqFo.js → vennDiagram-DHZGUBPP-C1194MJi.js} +1 -1
  65. package/dist/deck-client/assets/{wardley-RL74JXVD-2t7cMqdS.js → wardley-RL74JXVD-CHZiUbBa.js} +1 -1
  66. package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-DzboAsHh.js → wardleyDiagram-NUSXRM2D-hpwdFfGj.js} +1 -1
  67. package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-CgTP9u2V.js → xychartDiagram-5P7HB3ND-DYkotwy8.js} +1 -1
  68. package/dist/deck-client/index.html +2 -2
  69. package/dist/server/cli.js +91 -13
  70. package/dist/server/council-entry.js +0 -0
  71. package/dist/server/deck-mcp-entry.js +83 -40
  72. package/dist/server/deck-serve.js +54 -20
  73. package/dist/server/fb-wizard.js +0 -0
  74. package/dist/server/init-entry.js +952 -290
  75. package/dist/server/radar-docker-init-entry.js +239 -0
  76. package/dist/server/radar-entrypoint-entry.js +99 -0
  77. package/dist/server/radar-teardown-entry.js +477 -0
  78. package/dist/server/recall-entry.js +4 -1
  79. package/package.json +22 -23
  80. package/scaffolds/ls-marketplace/plugins/kit/commands/activate-statusline.md +5 -5
  81. package/scaffolds/ls-marketplace/plugins/kit/skills/diagram/SKILL.md +27 -5
  82. package/scaffolds/ls-marketplace/plugins/kit/skills/ship/SKILL.md +274 -0
  83. package/scaffolds/migrate-safety/scripts/migrate-with-backup.sh +0 -0
  84. package/scaffolds/recall-hook/scripts/ensure-recall.sh +0 -0
  85. package/scaffolds/statusline/statusline-mcp.sh +82 -2
  86. package/scaffolds/statusline/statusline-wrapper.sh +8 -1
  87. package/dist/chart-client/assets/index-CDIhdgWg.css +0 -1
  88. package/dist/client/assets/index-CfW4n40I.css +0 -32
  89. package/dist/council-client/assets/index-CZim6x1u.css +0 -1
  90. package/dist/deck-client/assets/channel-DmR7Tyyt.js +0 -1
  91. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-Bl4ozQWs.js +0 -1
  92. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-Bl4ozQWs.js +0 -1
  93. package/dist/deck-client/assets/clone-BAy58j24.js +0 -1
  94. package/dist/deck-client/assets/index-BlTlhxFW.css +0 -1
  95. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-CR7riiab.js +0 -1
@@ -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-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)+`:
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-BtQBaQ7s.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-DmTsuIvK.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-CB-qlwRT.js"></script>
16
- <link rel="stylesheet" crossorigin href="/assets/index-BlTlhxFW.css">
15
+ <script type="module" crossorigin src="/assets/index-BtQBaQ7s.js"></script>
16
+ <link rel="stylesheet" crossorigin href="/assets/index-B-YQq5b5.css">
17
17
  </head>
18
18
  <body>
19
19
  <div id="root"></div>
@@ -28404,14 +28404,38 @@ var BACKOFF_MIN_MS = 1e3;
28404
28404
  var BACKOFF_MAX_MS = 3e5;
28405
28405
  var SELFTEST_INTERVAL_MS = 1e3;
28406
28406
  var SELFTEST_TIMEOUT_MS = 9e4;
28407
+ function resolveTunnelMode(env = process.env) {
28408
+ const token = env.RADAR_CF_TUNNEL_TOKEN?.trim();
28409
+ const hostname = env.RADAR_CF_TUNNEL_HOSTNAME?.trim()?.replace(/^https?:\/\//, "").replace(/\/$/, "");
28410
+ if (!token && !hostname) return { kind: "quick" };
28411
+ if (!token || !hostname) {
28412
+ const missing = !token ? "RADAR_CF_TUNNEL_TOKEN" : "RADAR_CF_TUNNEL_HOSTNAME";
28413
+ throw new Error(
28414
+ `[radar] named-tunnel config is partial \u2014 ${missing} is not set. Set BOTH RADAR_CF_TUNNEL_TOKEN and RADAR_CF_TUNNEL_HOSTNAME for a stable paid tunnel, or unset both to fall back to the free quick tunnel.`
28415
+ );
28416
+ }
28417
+ return { kind: "named", token, hostname };
28418
+ }
28419
+ var NAMED_FATAL_PATTERNS = [
28420
+ /\bunauthorized\b/i,
28421
+ /\b401\b/,
28422
+ /invalid (tunnel )?token/i,
28423
+ /token (is )?expired/i,
28424
+ /tunnel .{0,80}? not found/i,
28425
+ /failed to (provision|find|authenticate) tunnel/i,
28426
+ /failed to read tunnel credentials/i,
28427
+ /jwt.*expired/i
28428
+ ];
28407
28429
  var CloudflaredTunnel = class extends import_node_events.EventEmitter {
28408
- constructor(localPort) {
28430
+ constructor(localPort, mode = { kind: "quick" }) {
28409
28431
  super();
28410
28432
  this.tunnel = null;
28411
28433
  this.currentUrl = null;
28412
28434
  this.stopping = false;
28435
+ this.fatal = false;
28413
28436
  this.restartAttempt = 0;
28414
28437
  this.localPort = localPort;
28438
+ this.mode = mode;
28415
28439
  }
28416
28440
  get publicUrl() {
28417
28441
  return this.currentUrl;
@@ -28427,6 +28451,11 @@ var CloudflaredTunnel = class extends import_node_events.EventEmitter {
28427
28451
  throw new Error(`Failed to install cloudflared binary: ${msg}`);
28428
28452
  }
28429
28453
  }
28454
+ if (this.mode.kind === "named") {
28455
+ console.log(`[radar] mode=named host=${this.mode.hostname} (paid \xB7 stable URL)`);
28456
+ } else {
28457
+ console.log(`[radar] mode=quick (free \xB7 *.trycloudflare.com \xB7 ephemeral URL)`);
28458
+ }
28430
28459
  this.spawnOnce();
28431
28460
  }
28432
28461
  async stop() {
@@ -28447,10 +28476,11 @@ var CloudflaredTunnel = class extends import_node_events.EventEmitter {
28447
28476
  });
28448
28477
  }
28449
28478
  spawnOnce() {
28450
- const tun = import_cloudflared.Tunnel.quick(`http://127.0.0.1:${this.localPort}`);
28479
+ if (this.fatal) return;
28480
+ const tun = this.mode.kind === "named" ? import_cloudflared.Tunnel.withToken(this.mode.token) : import_cloudflared.Tunnel.quick(`http://127.0.0.1:${this.localPort}`);
28451
28481
  this.tunnel = tun;
28452
28482
  this.currentUrl = null;
28453
- let urlSeen = null;
28483
+ let urlSeen = this.mode.kind === "named" ? `https://${this.mode.hostname}` : null;
28454
28484
  let connectedSeen = false;
28455
28485
  let announced = false;
28456
28486
  const announceIfReady = () => {
@@ -28460,6 +28490,7 @@ var CloudflaredTunnel = class extends import_node_events.EventEmitter {
28460
28490
  void this.selfTestAndAnnounce(url);
28461
28491
  };
28462
28492
  tun.on("url", (url) => {
28493
+ if (this.mode.kind === "named") return;
28463
28494
  if (urlSeen === url) return;
28464
28495
  urlSeen = url;
28465
28496
  console.log(`[radar] tunnel subdomain assigned: ${url} (waiting for edge connection)`);
@@ -28472,6 +28503,17 @@ var CloudflaredTunnel = class extends import_node_events.EventEmitter {
28472
28503
  }
28473
28504
  announceIfReady();
28474
28505
  });
28506
+ if (this.mode.kind === "named") {
28507
+ tun.on("stderr", (line) => {
28508
+ if (this.fatal) return;
28509
+ for (const pat of NAMED_FATAL_PATTERNS) {
28510
+ if (pat.test(line)) {
28511
+ this.markFatal(`cloudflared rejected the named-tunnel config \u2014 ${line.trim().slice(0, 200)}`);
28512
+ return;
28513
+ }
28514
+ }
28515
+ });
28516
+ }
28475
28517
  tun.on("error", (err2) => {
28476
28518
  if (this.stopping) return;
28477
28519
  console.error(`[radar] cloudflared error: ${err2.message}`);
@@ -28480,10 +28522,28 @@ var CloudflaredTunnel = class extends import_node_events.EventEmitter {
28480
28522
  if (this.stopping) return;
28481
28523
  this.tunnel = null;
28482
28524
  this.currentUrl = null;
28525
+ if (this.fatal) return;
28483
28526
  this.emit("crashed", code);
28484
28527
  this.scheduleRestart();
28485
28528
  });
28486
28529
  }
28530
+ /**
28531
+ * Mark the tunnel fatally broken. Suppresses restart-on-crash and notifies
28532
+ * the parent so it can surface status=error to the UI. Named-mode only —
28533
+ * quick mode has no auth surface to fail on.
28534
+ */
28535
+ markFatal(reason) {
28536
+ if (this.fatal) return;
28537
+ this.fatal = true;
28538
+ this.stopping = true;
28539
+ console.error(`[radar] FATAL: ${reason}`);
28540
+ console.error(`[radar] not falling back to free tunnel \u2014 fix RADAR_CF_TUNNEL_TOKEN / RADAR_CF_TUNNEL_HOSTNAME (or unset both) and restart.`);
28541
+ this.emit("fatal", reason);
28542
+ try {
28543
+ this.tunnel?.stop();
28544
+ } catch {
28545
+ }
28546
+ }
28487
28547
  /**
28488
28548
  * Poll the public URL until any HTTP response comes back (proving DNS +
28489
28549
  * edge + tunnel work end-to-end), then announce ready. Network errors are
@@ -28555,7 +28615,7 @@ var Radar = class {
28555
28615
  orgSlug: opts.orgSlug,
28556
28616
  projectSlug: opts.projectSlug
28557
28617
  });
28558
- this.tunnel = new CloudflaredTunnel(opts.localPort);
28618
+ this.tunnel = new CloudflaredTunnel(opts.localPort, resolveTunnelMode());
28559
28619
  this.maxConcurrent = parsePositiveInt(process.env.RADAR_MAX_CONCURRENT_ANALYSES);
28560
28620
  const callbacks = {
28561
28621
  onLive: () => this.handleLive(),
@@ -28577,6 +28637,11 @@ var Radar = class {
28577
28637
  this.tunnel.on("crashed", (code) => {
28578
28638
  console.error(`[radar] tunnel exited (code=${code ?? "?"}) \u2014 restarting`);
28579
28639
  });
28640
+ this.tunnel.on("fatal", (reason) => {
28641
+ this.status = "error";
28642
+ console.error(`[radar] named tunnel halted: ${reason}`);
28643
+ this.broadcastStatus();
28644
+ });
28580
28645
  void this.tunnel.start();
28581
28646
  this.autoResumeRecentlyInterrupted();
28582
28647
  }
@@ -36999,6 +37064,14 @@ if (parsedArgs.subcommand === "graph:generate" || parsedArgs.subcommand === "gra
36999
37064
  );
37000
37065
  process.exit(result.status ?? 1);
37001
37066
  }
37067
+ if (parsedArgs.subcommand === "radar:teardown") {
37068
+ const result = (0, import_child_process4.spawnSync)(
37069
+ process.execPath,
37070
+ [import_path9.default.join(__dirname, "radar-teardown-entry.js"), ...process.argv.slice(3)],
37071
+ { stdio: "inherit" }
37072
+ );
37073
+ process.exit(result.status ?? 1);
37074
+ }
37002
37075
  if (parsedArgs.subcommand === "mcp:graph") {
37003
37076
  startGraphMcpServer();
37004
37077
  }
@@ -37458,15 +37531,20 @@ if (!__isMcpMode) {
37458
37531
  console.log(`LaunchPod radar \xB7 ${localUrl}`);
37459
37532
  console.log(` cloud: ${cfg.serverUrl} \xB7 source: ${cfg.source}`);
37460
37533
  console.log(` org: ${cfg.orgSlug} \xB7 project: ${cfg.projectSlug}`);
37461
- radar = new Radar({
37462
- projectRoot: PROJECT_DIR,
37463
- localPort: PORT,
37464
- localUrl,
37465
- serverUrl: cfg.serverUrl,
37466
- pat: cfg.pat,
37467
- orgSlug: cfg.orgSlug,
37468
- projectSlug: cfg.projectSlug
37469
- });
37534
+ try {
37535
+ radar = new Radar({
37536
+ projectRoot: PROJECT_DIR,
37537
+ localPort: PORT,
37538
+ localUrl,
37539
+ serverUrl: cfg.serverUrl,
37540
+ pat: cfg.pat,
37541
+ orgSlug: cfg.orgSlug,
37542
+ projectSlug: cfg.projectSlug
37543
+ });
37544
+ } catch (err2) {
37545
+ console.error(`${err2 instanceof Error ? err2.message : String(err2)}`);
37546
+ process.exit(1);
37547
+ }
37470
37548
  radar.attachWebSocketServer(server, "/api/radar/stream");
37471
37549
  radar.start();
37472
37550
  initLaunchPodTerminalBridge(server, PROJECT_DIR);
File without changes
@@ -914,6 +914,31 @@ function renderRichHtml(opts) {
914
914
  }
915
915
  return opts.content;
916
916
  }
917
+ function renderWiredBody(body) {
918
+ return `<style>
919
+ :host {
920
+ display: block;
921
+ padding: 24px;
922
+ font-family: 'Gloria Hallelujah', 'DM Sans', system-ui, sans-serif;
923
+ color: var(--page-fg, currentColor);
924
+ }
925
+ *, *::before, *::after { box-sizing: border-box; }
926
+ h1, h2, h3, h4 { font-family: 'Gloria Hallelujah', cursive; margin: 0.5em 0; }
927
+ a { color: var(--page-accent, #7c3aed); }
928
+ .row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin: 8px 0; }
929
+ .col { display: flex; flex-direction: column; gap: 12px; align-items: stretch; }
930
+ .card { padding: 16px; }
931
+ wired-button, wired-card, wired-checkbox, wired-radio, wired-toggle,
932
+ wired-input, wired-textarea, wired-search-input, wired-combo, wired-item,
933
+ wired-listbox, wired-link, wired-tabs, wired-tab, wired-fab,
934
+ wired-icon-button, wired-divider, wired-progress, wired-slider,
935
+ wired-calendar, wired-dialog {
936
+ color: inherit;
937
+ background: transparent;
938
+ }
939
+ </style>
940
+ ${body}`;
941
+ }
917
942
  function themeResolverScript(initial) {
918
943
  return `<script>
919
944
  (function () {
@@ -1417,26 +1442,35 @@ async function startDeckServer(opts = {}) {
1417
1442
  }
1418
1443
  }
1419
1444
  if (block.type === "rich-html" && block.content) {
1420
- try {
1421
- const html = renderRichHtml({
1422
- framework: block.framework ?? "raw",
1423
- content: block.content,
1424
- theme: block.theme,
1425
- title: block.label
1426
- });
1427
- const sessionEncoded = encodeURIComponent(body.session);
1428
- const baseUrl = `/deck-files/${sessionEncoded}`;
1429
- const filename = `${slugify(block.label)}.html`;
1430
- const dir = import_node_path3.default.join(cwd, LAUNCHSECURE_DIR, "deck-files", body.session);
1431
- import_node_fs3.default.mkdirSync(dir, { recursive: true });
1432
- import_node_fs3.default.writeFileSync(import_node_path3.default.join(dir, filename), html);
1433
- block.type = "iframe";
1434
- block.src = `${baseUrl}/${filename}`;
1435
- delete block.content;
1436
- delete block.framework;
1437
- delete block.theme;
1438
- } catch (err) {
1439
- console.error("Failed to generate rich-html:", err);
1445
+ const framework = block.framework ?? "raw";
1446
+ if (framework === "wired") {
1447
+ try {
1448
+ block.content = renderWiredBody(block.content);
1449
+ } catch (err) {
1450
+ console.error("Failed to render wired body:", err);
1451
+ }
1452
+ } else {
1453
+ try {
1454
+ const html = renderRichHtml({
1455
+ framework,
1456
+ content: block.content,
1457
+ theme: block.theme,
1458
+ title: block.label
1459
+ });
1460
+ const sessionEncoded = encodeURIComponent(body.session);
1461
+ const baseUrl = `/deck-files/${sessionEncoded}`;
1462
+ const filename = `${slugify(block.label)}.html`;
1463
+ const dir = import_node_path3.default.join(cwd, LAUNCHSECURE_DIR, "deck-files", body.session);
1464
+ import_node_fs3.default.mkdirSync(dir, { recursive: true });
1465
+ import_node_fs3.default.writeFileSync(import_node_path3.default.join(dir, filename), html);
1466
+ block.type = "iframe";
1467
+ block.src = `${baseUrl}/${filename}`;
1468
+ delete block.content;
1469
+ delete block.framework;
1470
+ delete block.theme;
1471
+ } catch (err) {
1472
+ console.error("Failed to generate rich-html:", err);
1473
+ }
1440
1474
  }
1441
1475
  }
1442
1476
  }
@@ -1808,26 +1842,35 @@ async function handleTool(name, args) {
1808
1842
  }
1809
1843
  }
1810
1844
  if (block.type === "rich-html" && block.content) {
1811
- try {
1812
- const html = renderRichHtml({
1813
- framework: block.framework ?? "raw",
1814
- content: block.content,
1815
- theme: block.theme,
1816
- title: block.label
1817
- });
1818
- const sessionEncoded = encodeURIComponent(session);
1819
- const baseUrl = `/deck-files/${sessionEncoded}`;
1820
- const filename = `${slugify(block.label)}.html`;
1821
- const dir = (0, import_node_path4.join)(projectRoot, LAUNCHSECURE_DIR, "deck-files", session);
1822
- import_node_fs4.default.mkdirSync(dir, { recursive: true });
1823
- import_node_fs4.default.writeFileSync((0, import_node_path4.join)(dir, filename), html);
1824
- block.type = "iframe";
1825
- block.src = `${baseUrl}/${filename}`;
1826
- delete block.content;
1827
- delete block.framework;
1828
- delete block.theme;
1829
- } catch (err) {
1830
- return text(JSON.stringify({ error: `Failed to generate rich-html: ${err}` }));
1845
+ const framework = block.framework ?? "raw";
1846
+ if (framework === "wired") {
1847
+ try {
1848
+ block.content = renderWiredBody(block.content);
1849
+ } catch (err) {
1850
+ return text(JSON.stringify({ error: `Failed to render wired body: ${err}` }));
1851
+ }
1852
+ } else {
1853
+ try {
1854
+ const html = renderRichHtml({
1855
+ framework,
1856
+ content: block.content,
1857
+ theme: block.theme,
1858
+ title: block.label
1859
+ });
1860
+ const sessionEncoded = encodeURIComponent(session);
1861
+ const baseUrl = `/deck-files/${sessionEncoded}`;
1862
+ const filename = `${slugify(block.label)}.html`;
1863
+ const dir = (0, import_node_path4.join)(projectRoot, LAUNCHSECURE_DIR, "deck-files", session);
1864
+ import_node_fs4.default.mkdirSync(dir, { recursive: true });
1865
+ import_node_fs4.default.writeFileSync((0, import_node_path4.join)(dir, filename), html);
1866
+ block.type = "iframe";
1867
+ block.src = `${baseUrl}/${filename}`;
1868
+ delete block.content;
1869
+ delete block.framework;
1870
+ delete block.theme;
1871
+ } catch (err) {
1872
+ return text(JSON.stringify({ error: `Failed to generate rich-html: ${err}` }));
1873
+ }
1831
1874
  }
1832
1875
  }
1833
1876
  }
@@ -904,6 +904,31 @@ function renderRichHtml(opts) {
904
904
  }
905
905
  return opts.content;
906
906
  }
907
+ function renderWiredBody(body) {
908
+ return `<style>
909
+ :host {
910
+ display: block;
911
+ padding: 24px;
912
+ font-family: 'Gloria Hallelujah', 'DM Sans', system-ui, sans-serif;
913
+ color: var(--page-fg, currentColor);
914
+ }
915
+ *, *::before, *::after { box-sizing: border-box; }
916
+ h1, h2, h3, h4 { font-family: 'Gloria Hallelujah', cursive; margin: 0.5em 0; }
917
+ a { color: var(--page-accent, #7c3aed); }
918
+ .row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; margin: 8px 0; }
919
+ .col { display: flex; flex-direction: column; gap: 12px; align-items: stretch; }
920
+ .card { padding: 16px; }
921
+ wired-button, wired-card, wired-checkbox, wired-radio, wired-toggle,
922
+ wired-input, wired-textarea, wired-search-input, wired-combo, wired-item,
923
+ wired-listbox, wired-link, wired-tabs, wired-tab, wired-fab,
924
+ wired-icon-button, wired-divider, wired-progress, wired-slider,
925
+ wired-calendar, wired-dialog {
926
+ color: inherit;
927
+ background: transparent;
928
+ }
929
+ </style>
930
+ ${body}`;
931
+ }
907
932
  function themeResolverScript(initial) {
908
933
  return `<script>
909
934
  (function () {
@@ -1400,26 +1425,35 @@ async function startDeckServer(opts = {}) {
1400
1425
  }
1401
1426
  }
1402
1427
  if (block.type === "rich-html" && block.content) {
1403
- try {
1404
- const html = renderRichHtml({
1405
- framework: block.framework ?? "raw",
1406
- content: block.content,
1407
- theme: block.theme,
1408
- title: block.label
1409
- });
1410
- const sessionEncoded = encodeURIComponent(body.session);
1411
- const baseUrl = `/deck-files/${sessionEncoded}`;
1412
- const filename = `${slugify(block.label)}.html`;
1413
- const dir = import_node_path3.default.join(cwd, LAUNCHSECURE_DIR, "deck-files", body.session);
1414
- import_node_fs3.default.mkdirSync(dir, { recursive: true });
1415
- import_node_fs3.default.writeFileSync(import_node_path3.default.join(dir, filename), html);
1416
- block.type = "iframe";
1417
- block.src = `${baseUrl}/${filename}`;
1418
- delete block.content;
1419
- delete block.framework;
1420
- delete block.theme;
1421
- } catch (err) {
1422
- console.error("Failed to generate rich-html:", err);
1428
+ const framework = block.framework ?? "raw";
1429
+ if (framework === "wired") {
1430
+ try {
1431
+ block.content = renderWiredBody(block.content);
1432
+ } catch (err) {
1433
+ console.error("Failed to render wired body:", err);
1434
+ }
1435
+ } else {
1436
+ try {
1437
+ const html = renderRichHtml({
1438
+ framework,
1439
+ content: block.content,
1440
+ theme: block.theme,
1441
+ title: block.label
1442
+ });
1443
+ const sessionEncoded = encodeURIComponent(body.session);
1444
+ const baseUrl = `/deck-files/${sessionEncoded}`;
1445
+ const filename = `${slugify(block.label)}.html`;
1446
+ const dir = import_node_path3.default.join(cwd, LAUNCHSECURE_DIR, "deck-files", body.session);
1447
+ import_node_fs3.default.mkdirSync(dir, { recursive: true });
1448
+ import_node_fs3.default.writeFileSync(import_node_path3.default.join(dir, filename), html);
1449
+ block.type = "iframe";
1450
+ block.src = `${baseUrl}/${filename}`;
1451
+ delete block.content;
1452
+ delete block.framework;
1453
+ delete block.theme;
1454
+ } catch (err) {
1455
+ console.error("Failed to generate rich-html:", err);
1456
+ }
1423
1457
  }
1424
1458
  }
1425
1459
  }
File without changes