@launchsecure/launch-kit 0.0.37 → 0.0.38

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 (70) hide show
  1. package/dist/chart-client/assets/{index-DJrjyXbN.css → index-B6rR0CWx.css} +1 -1
  2. package/dist/chart-client/index.html +2 -2
  3. package/dist/client/assets/{index-8eSXr3Ez.css → index-D6uX1lQe.css} +1 -1
  4. package/dist/client/index.html +2 -2
  5. package/dist/council-client/assets/{index-4K0t2WrZ.css → index-CleYLarJ.css} +1 -1
  6. package/dist/council-client/index.html +2 -2
  7. package/dist/deck-client/assets/{_baseUniq-Cn5TyL9s.js → _baseUniq-CgW32Gdk.js} +1 -1
  8. package/dist/deck-client/assets/{arc-D61amKYu.js → arc-D-Mg9gvM.js} +1 -1
  9. package/dist/deck-client/assets/{architectureDiagram-Q4EWVU46-CpKrvC2W.js → architectureDiagram-Q4EWVU46-CdTsXsgl.js} +1 -1
  10. package/dist/deck-client/assets/{blockDiagram-DXYQGD6D-Yj5OjxvG.js → blockDiagram-DXYQGD6D-mwTneYyB.js} +1 -1
  11. package/dist/deck-client/assets/{c4Diagram-AHTNJAMY-BIR810Tv.js → c4Diagram-AHTNJAMY-C4R8IbjO.js} +1 -1
  12. package/dist/deck-client/assets/channel-CuSee7GO.js +1 -0
  13. package/dist/deck-client/assets/{chunk-4BX2VUAB-BeSHwGvx.js → chunk-4BX2VUAB-ZWuRIUwb.js} +1 -1
  14. package/dist/deck-client/assets/{chunk-4TB4RGXK-CCqzsLpg.js → chunk-4TB4RGXK-PNHX10sF.js} +1 -1
  15. package/dist/deck-client/assets/{chunk-55IACEB6-CuW_aq4-.js → chunk-55IACEB6-CD9MUgPr.js} +1 -1
  16. package/dist/deck-client/assets/{chunk-EDXVE4YY-Dl35ixYh.js → chunk-EDXVE4YY-C_CpORb3.js} +1 -1
  17. package/dist/deck-client/assets/{chunk-FMBD7UC4-TwreZQTv.js → chunk-FMBD7UC4-Bg5RoVC-.js} +1 -1
  18. package/dist/deck-client/assets/{chunk-OYMX7WX6-Ahfw8EUo.js → chunk-OYMX7WX6-DhTwgQwd.js} +1 -1
  19. package/dist/deck-client/assets/{chunk-QZHKN3VN-DlE_zlU-.js → chunk-QZHKN3VN-C5VLMaFa.js} +1 -1
  20. package/dist/deck-client/assets/{chunk-YZCP3GAM-Dj6QWzSg.js → chunk-YZCP3GAM-NAGHy4Sr.js} +1 -1
  21. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-_kTisqzs.js +1 -0
  22. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-_kTisqzs.js +1 -0
  23. package/dist/deck-client/assets/clone-kb3zkY60.js +1 -0
  24. package/dist/deck-client/assets/{cose-bilkent-S5V4N54A-BO1z5aOM.js → cose-bilkent-S5V4N54A-CpUczjZk.js} +1 -1
  25. package/dist/deck-client/assets/{dagre-KV5264BT-DVsw17fE.js → dagre-KV5264BT-BOvb07MG.js} +1 -1
  26. package/dist/deck-client/assets/{diagram-5BDNPKRD-6jYs7oZk.js → diagram-5BDNPKRD-BPxwTiC-.js} +1 -1
  27. package/dist/deck-client/assets/{diagram-G4DWMVQ6-6DbggeGE.js → diagram-G4DWMVQ6-Dz_gsHgx.js} +1 -1
  28. package/dist/deck-client/assets/{diagram-MMDJMWI5-CQtk1cSU.js → diagram-MMDJMWI5-B7z-oVTW.js} +1 -1
  29. package/dist/deck-client/assets/{diagram-TYMM5635-BR-gt75b.js → diagram-TYMM5635-CAIAglLQ.js} +1 -1
  30. package/dist/deck-client/assets/{erDiagram-SMLLAGMA-C9qMtjdY.js → erDiagram-SMLLAGMA-BiViTWF3.js} +1 -1
  31. package/dist/deck-client/assets/{flowDiagram-DWJPFMVM-CdaPhPYb.js → flowDiagram-DWJPFMVM-DYVemp0H.js} +1 -1
  32. package/dist/deck-client/assets/{ganttDiagram-T4ZO3ILL-BRsZWUy4.js → ganttDiagram-T4ZO3ILL-Chc1Iyu1.js} +1 -1
  33. package/dist/deck-client/assets/{gitGraphDiagram-UUTBAWPF-B8Z90jCj.js → gitGraphDiagram-UUTBAWPF-B7eFgaj5.js} +1 -1
  34. package/dist/deck-client/assets/{graph-my2Zphm4.js → graph-CKaIoNwb.js} +1 -1
  35. package/dist/deck-client/assets/{index-ByqxPEgU.css → index-55P73aS_.css} +1 -1
  36. package/dist/deck-client/assets/{index-DqAoYZwV.js → index-BRawc7RA.js} +48 -48
  37. package/dist/deck-client/assets/{infoDiagram-42DDH7IO-Csr9loin.js → infoDiagram-42DDH7IO-BxsVq7vO.js} +1 -1
  38. package/dist/deck-client/assets/{ishikawaDiagram-UXIWVN3A-HWdvUNFi.js → ishikawaDiagram-UXIWVN3A-DAM7vPwa.js} +1 -1
  39. package/dist/deck-client/assets/{journeyDiagram-VCZTEJTY-CjYHG6EM.js → journeyDiagram-VCZTEJTY-Xe20Nf7R.js} +1 -1
  40. package/dist/deck-client/assets/{kanban-definition-6JOO6SKY-CX3JdUu7.js → kanban-definition-6JOO6SKY-DS8YguzB.js} +1 -1
  41. package/dist/deck-client/assets/{layout-Bcucv5Gi.js → layout-DKMBpzR-.js} +1 -1
  42. package/dist/deck-client/assets/{linear-CUGM5FJZ.js → linear-DTNtBg5h.js} +1 -1
  43. package/dist/deck-client/assets/{min-Dw4g5w9z.js → min-C4DrxCcA.js} +1 -1
  44. package/dist/deck-client/assets/{mindmap-definition-QFDTVHPH-C8oo61fg.js → mindmap-definition-QFDTVHPH-B4nEtsw5.js} +1 -1
  45. package/dist/deck-client/assets/{pieDiagram-DEJITSTG-D2WYGkq8.js → pieDiagram-DEJITSTG-BzHdGNu5.js} +1 -1
  46. package/dist/deck-client/assets/{quadrantDiagram-34T5L4WZ-Vh00GISt.js → quadrantDiagram-34T5L4WZ-CaX0SD4-.js} +1 -1
  47. package/dist/deck-client/assets/{requirementDiagram-MS252O5E-DxI-DFrN.js → requirementDiagram-MS252O5E-QeG4p2ni.js} +1 -1
  48. package/dist/deck-client/assets/{sankeyDiagram-XADWPNL6-QgwyjasI.js → sankeyDiagram-XADWPNL6-BoAwgAj-.js} +1 -1
  49. package/dist/deck-client/assets/{sequenceDiagram-FGHM5R23-DmOmD5Ni.js → sequenceDiagram-FGHM5R23-Dn4pYYgu.js} +1 -1
  50. package/dist/deck-client/assets/{stateDiagram-FHFEXIEX-CRwglGg_.js → stateDiagram-FHFEXIEX-Is6KRmQV.js} +1 -1
  51. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-Cy45Ttqq.js +1 -0
  52. package/dist/deck-client/assets/{timeline-definition-GMOUNBTQ-Dj9YGKOh.js → timeline-definition-GMOUNBTQ-v64IZGuY.js} +1 -1
  53. package/dist/deck-client/assets/{vennDiagram-DHZGUBPP-xzIaOzEU.js → vennDiagram-DHZGUBPP-noh9eouF.js} +1 -1
  54. package/dist/deck-client/assets/{wardley-RL74JXVD-CEAay09T.js → wardley-RL74JXVD-cJ_1is2S.js} +1 -1
  55. package/dist/deck-client/assets/{wardleyDiagram-NUSXRM2D-BIYYh-JZ.js → wardleyDiagram-NUSXRM2D-DxR4j737.js} +1 -1
  56. package/dist/deck-client/assets/{xychartDiagram-5P7HB3ND-Cy9EoJCh.js → xychartDiagram-5P7HB3ND-B26vodaL.js} +1 -1
  57. package/dist/deck-client/index.html +2 -2
  58. package/dist/server/cli.js +4 -0
  59. package/dist/server/init-entry.js +51 -14
  60. package/dist/server/radar-docker-init-entry.js +44 -14
  61. package/dist/server/rover-entry.js +1 -1
  62. package/package.json +1 -1
  63. package/dist/deck-client/assets/channel-DrJz2x-n.js +0 -1
  64. package/dist/deck-client/assets/classDiagram-6PBFFD2Q-a3tg9w7z.js +0 -1
  65. package/dist/deck-client/assets/classDiagram-v2-HSJHXN6E-a3tg9w7z.js +0 -1
  66. package/dist/deck-client/assets/clone-Dd7JBCL5.js +0 -1
  67. package/dist/deck-client/assets/stateDiagram-v2-QKLJ7IA2-BvZLEWAA.js +0 -1
  68. /package/dist/chart-client/assets/{index-BgUxHxwE.js → index-C_xCi3gW.js} +0 -0
  69. /package/dist/client/assets/{index-CUivaQnN.js → index-CRecYFUA.js} +0 -0
  70. /package/dist/council-client/assets/{index-DN8HN_5K.js → index-DO-Vn15O.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-DqAoYZwV.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-CUGM5FJZ.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-BRawc7RA.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-DTNtBg5h.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-DqAoYZwV.js"></script>
16
- <link rel="stylesheet" crossorigin href="/assets/index-ByqxPEgU.css">
15
+ <script type="module" crossorigin src="/assets/index-BRawc7RA.js"></script>
16
+ <link rel="stylesheet" crossorigin href="/assets/index-55P73aS_.css">
17
17
  </head>
18
18
  <body>
19
19
  <div id="root"></div>
@@ -27840,6 +27840,10 @@ function handlePayload(payload, eventType, deliveryId, state, cb, getRules) {
27840
27840
  default: {
27841
27841
  const rule = matchRule(payload, getRules());
27842
27842
  if (!rule) {
27843
+ const ruleNames = getRules().map((r) => r.name).join(", ") || "(none)";
27844
+ console.log(
27845
+ `[radar] \xB7 ${eventType} (${deliveryId}) matched no capture rule \u2014 ignoring. Active rules: [${ruleNames}]`
27846
+ );
27843
27847
  return;
27844
27848
  }
27845
27849
  if (state.hasSeen(payload.id)) {
@@ -857,7 +857,13 @@ async function ensureAccessIdp(input) {
857
857
  return created.result.id;
858
858
  }
859
859
  async function ensureAccessApp(input) {
860
- const policy = {
860
+ const { service } = input;
861
+ const appDomain = service.path ? `${service.hostname}${service.path}` : service.hostname;
862
+ const policy = service.bypass ? {
863
+ name: "launch-kit-public-bypass",
864
+ decision: "bypass",
865
+ include: [{ everyone: {} }]
866
+ } : {
861
867
  name: "launch-kit-org-allow",
862
868
  decision: "allow",
863
869
  include: [
@@ -870,12 +876,17 @@ async function ensureAccessApp(input) {
870
876
  }
871
877
  ]
872
878
  };
873
- const body = {
874
- name: `launch-kit ${input.service.hostname}`,
875
- domain: input.service.hostname,
879
+ const body = service.bypass ? {
880
+ name: `launch-kit ${appDomain} (public)`,
881
+ domain: appDomain,
882
+ type: "self_hosted",
883
+ policies: [policy]
884
+ } : {
885
+ name: `launch-kit ${appDomain}`,
886
+ domain: appDomain,
876
887
  type: "self_hosted",
877
888
  // Bot terminal = RCE surface → short session. Read portals = a workday.
878
- session_duration: input.service.strict ? "30m" : "24h",
889
+ session_duration: service.strict ? "30m" : "24h",
879
890
  allowed_idps: [input.idpId],
880
891
  auto_redirect_to_identity: true,
881
892
  policies: [policy]
@@ -886,7 +897,7 @@ async function ensureAccessApp(input) {
886
897
  path: `/accounts/${input.accountId}/access/apps`
887
898
  });
888
899
  if (!list.success) fail(list, "list access apps");
889
- const existing = (list.result ?? []).find((a) => a.domain === input.service.hostname);
900
+ const existing = (list.result ?? []).find((a) => a.domain === appDomain);
890
901
  if (existing) {
891
902
  const upd = await cf2({
892
903
  apiToken: input.apiToken,
@@ -894,7 +905,7 @@ async function ensureAccessApp(input) {
894
905
  path: `/accounts/${input.accountId}/access/apps/${existing.id}`,
895
906
  body
896
907
  });
897
- if (!upd.success || !upd.result) fail(upd, `update access app ${input.service.hostname}`);
908
+ if (!upd.success || !upd.result) fail(upd, `update access app ${appDomain}`);
898
909
  return upd.result.id;
899
910
  }
900
911
  const created = await cf2({
@@ -903,7 +914,7 @@ async function ensureAccessApp(input) {
903
914
  path: `/accounts/${input.accountId}/access/apps`,
904
915
  body
905
916
  });
906
- if (!created.success || !created.result) fail(created, `create access app ${input.service.hostname}`);
917
+ if (!created.success || !created.result) fail(created, `create access app ${appDomain}`);
907
918
  return created.result.id;
908
919
  }
909
920
  async function provisionAccess(input) {
@@ -922,7 +933,8 @@ async function provisionAccess(input) {
922
933
  saveState2(input.stateFile, { idpId, accountId: input.accountId });
923
934
  const appIds = {};
924
935
  for (const service of input.services) {
925
- appIds[service.hostname] = await ensureAccessApp({
936
+ const appDomain = service.path ? `${service.hostname}${service.path}` : service.hostname;
937
+ appIds[appDomain] = await ensureAccessApp({
926
938
  apiToken: input.apiToken,
927
939
  accountId: input.accountId,
928
940
  idpId,
@@ -943,6 +955,15 @@ var init_cf_access = __esm({
943
955
  }
944
956
  });
945
957
 
958
+ // src/server/radar/registration.ts
959
+ var RECEIVER_PATH;
960
+ var init_registration = __esm({
961
+ "src/server/radar/registration.ts"() {
962
+ "use strict";
963
+ RECEIVER_PATH = "/api/radar/ingest";
964
+ }
965
+ });
966
+
946
967
  // src/server/radar-docker-init-entry.ts
947
968
  var radar_docker_init_entry_exports = {};
948
969
  __export(radar_docker_init_entry_exports, {
@@ -1195,20 +1216,31 @@ async function maybeProvisionAccess(bundle, ingress) {
1195
1216
  const skipped = [];
1196
1217
  for (const [name, hostname] of Object.entries(ingress.hostnames)) {
1197
1218
  const cfg = GATED_SERVICES[name];
1198
- if (cfg) services.push({ hostname, strict: cfg.strict });
1199
- else skipped.push(name);
1219
+ if (!cfg) {
1220
+ skipped.push(name);
1221
+ continue;
1222
+ }
1223
+ services.push({ hostname, strict: cfg.strict });
1224
+ for (const path6 of cfg.publicPaths ?? []) {
1225
+ services.push({ hostname, path: path6, bypass: true });
1226
+ }
1200
1227
  }
1201
1228
  if (skipped.length > 0) {
1202
1229
  console.log(`[entrypoint] CF Access: leaving machine surface(s) ungated: ${skipped.join(", ")}`);
1203
1230
  }
1204
1231
  if (services.length === 0) {
1205
- console.log("[entrypoint] CF Access: no human-facing service to gate (bot/preview not provisioned)");
1232
+ console.log("[entrypoint] CF Access: no human-facing service to gate (bot/preview/radar/deck not provisioned)");
1206
1233
  return;
1207
1234
  }
1208
1235
  const serverUrl = process.env.LS_SERVER_URL ?? "https://launchsecure-v2.vercel.app";
1209
1236
  const pat = requireEnv("LS_PAT");
1210
1237
  const stateFile = "/workspace/.launchpod/launch-kit-access.json";
1211
- console.log(`[entrypoint] gating ${services.map((s) => s.hostname).join(", ")} behind CF Access (IdP: ${serverUrl})`);
1238
+ const gatedHosts = services.filter((s) => !s.bypass).map((s) => s.hostname);
1239
+ const bypassed = services.filter((s) => s.bypass).map((s) => `${s.hostname}${s.path ?? ""}`);
1240
+ console.log(`[entrypoint] gating ${gatedHosts.join(", ")} behind CF Access (IdP: ${serverUrl})`);
1241
+ if (bypassed.length > 0) {
1242
+ console.log(`[entrypoint] CF Access: public bypass for ${bypassed.join(", ")}`);
1243
+ }
1212
1244
  const result = await provisionAccess({
1213
1245
  apiToken: token,
1214
1246
  accountId,
@@ -1364,6 +1396,7 @@ var init_radar_docker_init_entry = __esm({
1364
1396
  init_launch_kit_services();
1365
1397
  init_cf_ingress();
1366
1398
  init_cf_access();
1399
+ init_registration();
1367
1400
  REQUIRED_ENV = [
1368
1401
  "CLAUDE_CREDENTIALS_B64",
1369
1402
  "LS_PAT",
@@ -1378,7 +1411,11 @@ var init_radar_docker_init_entry = __esm({
1378
1411
  // Claude web terminal — live drivable shell ⇒ RCE surface ⇒ short session.
1379
1412
  bot: { strict: true },
1380
1413
  // The user's own dev/preview server — a workday-length session is fine.
1381
- preview: { strict: false }
1414
+ preview: { strict: false },
1415
+ // Radar: gate the UI, bypass the (HMAC-verified) webhook receiver path.
1416
+ radar: { strict: false, publicPaths: [RECEIVER_PATH] },
1417
+ // Deck: gate the whole host — its push is localhost-only, never hits the edge.
1418
+ deck: { strict: false }
1382
1419
  };
1383
1420
  if (!process.env.VITEST) {
1384
1421
  main().catch((err) => {
@@ -520,7 +520,13 @@ async function ensureAccessIdp(input) {
520
520
  return created.result.id;
521
521
  }
522
522
  async function ensureAccessApp(input) {
523
- const policy = {
523
+ const { service } = input;
524
+ const appDomain = service.path ? `${service.hostname}${service.path}` : service.hostname;
525
+ const policy = service.bypass ? {
526
+ name: "launch-kit-public-bypass",
527
+ decision: "bypass",
528
+ include: [{ everyone: {} }]
529
+ } : {
524
530
  name: "launch-kit-org-allow",
525
531
  decision: "allow",
526
532
  include: [
@@ -533,12 +539,17 @@ async function ensureAccessApp(input) {
533
539
  }
534
540
  ]
535
541
  };
536
- const body = {
537
- name: `launch-kit ${input.service.hostname}`,
538
- domain: input.service.hostname,
542
+ const body = service.bypass ? {
543
+ name: `launch-kit ${appDomain} (public)`,
544
+ domain: appDomain,
545
+ type: "self_hosted",
546
+ policies: [policy]
547
+ } : {
548
+ name: `launch-kit ${appDomain}`,
549
+ domain: appDomain,
539
550
  type: "self_hosted",
540
551
  // Bot terminal = RCE surface → short session. Read portals = a workday.
541
- session_duration: input.service.strict ? "30m" : "24h",
552
+ session_duration: service.strict ? "30m" : "24h",
542
553
  allowed_idps: [input.idpId],
543
554
  auto_redirect_to_identity: true,
544
555
  policies: [policy]
@@ -549,7 +560,7 @@ async function ensureAccessApp(input) {
549
560
  path: `/accounts/${input.accountId}/access/apps`
550
561
  });
551
562
  if (!list.success) fail(list, "list access apps");
552
- const existing = (list.result ?? []).find((a) => a.domain === input.service.hostname);
563
+ const existing = (list.result ?? []).find((a) => a.domain === appDomain);
553
564
  if (existing) {
554
565
  const upd = await cf2({
555
566
  apiToken: input.apiToken,
@@ -557,7 +568,7 @@ async function ensureAccessApp(input) {
557
568
  path: `/accounts/${input.accountId}/access/apps/${existing.id}`,
558
569
  body
559
570
  });
560
- if (!upd.success || !upd.result) fail(upd, `update access app ${input.service.hostname}`);
571
+ if (!upd.success || !upd.result) fail(upd, `update access app ${appDomain}`);
561
572
  return upd.result.id;
562
573
  }
563
574
  const created = await cf2({
@@ -566,7 +577,7 @@ async function ensureAccessApp(input) {
566
577
  path: `/accounts/${input.accountId}/access/apps`,
567
578
  body
568
579
  });
569
- if (!created.success || !created.result) fail(created, `create access app ${input.service.hostname}`);
580
+ if (!created.success || !created.result) fail(created, `create access app ${appDomain}`);
570
581
  return created.result.id;
571
582
  }
572
583
  async function provisionAccess(input) {
@@ -585,7 +596,8 @@ async function provisionAccess(input) {
585
596
  saveState2(input.stateFile, { idpId, accountId: input.accountId });
586
597
  const appIds = {};
587
598
  for (const service of input.services) {
588
- appIds[service.hostname] = await ensureAccessApp({
599
+ const appDomain = service.path ? `${service.hostname}${service.path}` : service.hostname;
600
+ appIds[appDomain] = await ensureAccessApp({
589
601
  apiToken: input.apiToken,
590
602
  accountId: input.accountId,
591
603
  idpId,
@@ -596,6 +608,9 @@ async function provisionAccess(input) {
596
608
  return { idpId, authDomain, appIds };
597
609
  }
598
610
 
611
+ // src/server/radar/registration.ts
612
+ var RECEIVER_PATH = "/api/radar/ingest";
613
+
599
614
  // src/server/radar-docker-init-entry.ts
600
615
  var REQUIRED_ENV = [
601
616
  "CLAUDE_CREDENTIALS_B64",
@@ -831,7 +846,11 @@ var GATED_SERVICES = {
831
846
  // Claude web terminal — live drivable shell ⇒ RCE surface ⇒ short session.
832
847
  bot: { strict: true },
833
848
  // The user's own dev/preview server — a workday-length session is fine.
834
- preview: { strict: false }
849
+ preview: { strict: false },
850
+ // Radar: gate the UI, bypass the (HMAC-verified) webhook receiver path.
851
+ radar: { strict: false, publicPaths: [RECEIVER_PATH] },
852
+ // Deck: gate the whole host — its push is localhost-only, never hits the edge.
853
+ deck: { strict: false }
835
854
  };
836
855
  async function registerOidcClient(serverUrl, pat, redirectUris) {
837
856
  const res = await fetch(new URL("/api/rover/oidc-client", serverUrl), {
@@ -858,20 +877,31 @@ async function maybeProvisionAccess(bundle, ingress) {
858
877
  const skipped = [];
859
878
  for (const [name, hostname] of Object.entries(ingress.hostnames)) {
860
879
  const cfg = GATED_SERVICES[name];
861
- if (cfg) services.push({ hostname, strict: cfg.strict });
862
- else skipped.push(name);
880
+ if (!cfg) {
881
+ skipped.push(name);
882
+ continue;
883
+ }
884
+ services.push({ hostname, strict: cfg.strict });
885
+ for (const path of cfg.publicPaths ?? []) {
886
+ services.push({ hostname, path, bypass: true });
887
+ }
863
888
  }
864
889
  if (skipped.length > 0) {
865
890
  console.log(`[entrypoint] CF Access: leaving machine surface(s) ungated: ${skipped.join(", ")}`);
866
891
  }
867
892
  if (services.length === 0) {
868
- console.log("[entrypoint] CF Access: no human-facing service to gate (bot/preview not provisioned)");
893
+ console.log("[entrypoint] CF Access: no human-facing service to gate (bot/preview/radar/deck not provisioned)");
869
894
  return;
870
895
  }
871
896
  const serverUrl = process.env.LS_SERVER_URL ?? "https://launchsecure-v2.vercel.app";
872
897
  const pat = requireEnv("LS_PAT");
873
898
  const stateFile = "/workspace/.launchpod/launch-kit-access.json";
874
- console.log(`[entrypoint] gating ${services.map((s) => s.hostname).join(", ")} behind CF Access (IdP: ${serverUrl})`);
899
+ const gatedHosts = services.filter((s) => !s.bypass).map((s) => s.hostname);
900
+ const bypassed = services.filter((s) => s.bypass).map((s) => `${s.hostname}${s.path ?? ""}`);
901
+ console.log(`[entrypoint] gating ${gatedHosts.join(", ")} behind CF Access (IdP: ${serverUrl})`);
902
+ if (bypassed.length > 0) {
903
+ console.log(`[entrypoint] CF Access: public bypass for ${bypassed.join(", ")}`);
904
+ }
875
905
  const result = await provisionAccess({
876
906
  apiToken: token,
877
907
  accountId,
@@ -608,7 +608,7 @@ var require_package = __commonJS({
608
608
  "package.json"(exports2, module2) {
609
609
  module2.exports = {
610
610
  name: "@launchsecure/launch-kit",
611
- version: "0.0.37",
611
+ version: "0.0.38",
612
612
  description: "LaunchSecure toolkit \u2014 launch-sequencer (pipeline runner + terminal bridge), launch-radar (feedback webhook receiver), launch-chart (project graph MCP), launch-deck (visual playground MCP), launch-kit-beacon (feedback Web Component), launch-recall (file-watcher backup). launch-pod is the container image these run inside.",
613
613
  license: "MIT",
614
614
  author: "LaunchSecure - AutomateWithUs",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@launchsecure/launch-kit",
3
- "version": "0.0.37",
3
+ "version": "0.0.38",
4
4
  "description": "LaunchSecure toolkit — launch-sequencer (pipeline runner + terminal bridge), launch-radar (feedback webhook receiver), launch-chart (project graph MCP), launch-deck (visual playground MCP), launch-kit-beacon (feedback Web Component), launch-recall (file-watcher backup). launch-pod is the container image these run inside.",
5
5
  "license": "MIT",
6
6
  "author": "LaunchSecure - AutomateWithUs",
@@ -1 +0,0 @@
1
- import{aq as o,ar as n}from"./index-DqAoYZwV.js";const t=(r,a)=>o.lang.round(n.parse(r)[a]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-CCqzsLpg.js";import{_ as i}from"./index-DqAoYZwV.js";import"./chunk-FMBD7UC4-TwreZQTv.js";import"./chunk-YZCP3GAM-Dj6QWzSg.js";import"./chunk-55IACEB6-CuW_aq4-.js";import"./chunk-EDXVE4YY-Dl35ixYh.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-4TB4RGXK-CCqzsLpg.js";import{_ as i}from"./index-DqAoYZwV.js";import"./chunk-FMBD7UC4-TwreZQTv.js";import"./chunk-YZCP3GAM-Dj6QWzSg.js";import"./chunk-55IACEB6-CuW_aq4-.js";import"./chunk-EDXVE4YY-Dl35ixYh.js";var u={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{u as diagram};
@@ -1 +0,0 @@
1
- import{b as r}from"./graph-my2Zphm4.js";var e=4;function a(o){return r(o,e)}export{a as c};
@@ -1 +0,0 @@
1
- import{s as t,b as r,a,S as s}from"./chunk-OYMX7WX6-Ahfw8EUo.js";import{_ as i}from"./index-DqAoYZwV.js";import"./chunk-55IACEB6-CuW_aq4-.js";import"./chunk-EDXVE4YY-Dl35ixYh.js";var l={parser:a,get db(){return new s(2)},renderer:r,styles:t,init:i(e=>{e.state||(e.state={}),e.state.arrowMarkerAbsolute=e.arrowMarkerAbsolute},"init")};export{l as diagram};