@smartmemory/compose 0.2.45-beta → 0.2.47-beta

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 (74) hide show
  1. package/README.md +17 -0
  2. package/bin/compose.js +35 -1
  3. package/dist/assets/{App-DQblyoua.js → App-D7E7S49Q.js} +163 -153
  4. package/dist/assets/{arc-B4fPSjcd.js → arc-LOW60tiI.js} +1 -1
  5. package/dist/assets/{architectureDiagram-3BPJPVTR-SiqLJ2Dv.js → architectureDiagram-3BPJPVTR-BDY00hRy.js} +1 -1
  6. package/dist/assets/{blockDiagram-GPEHLZMM-DgA84B2f.js → blockDiagram-GPEHLZMM-DiC_6ktq.js} +1 -1
  7. package/dist/assets/browser-DW2JlJCC.js +8 -0
  8. package/dist/assets/{c4Diagram-AAUBKEIU-B-tXpPJU.js → c4Diagram-AAUBKEIU-CXZC8woU.js} +1 -1
  9. package/dist/assets/channel-Dh96pu1k.js +1 -0
  10. package/dist/assets/{chunk-2J33WTMH-Ch2s7Kg8.js → chunk-2J33WTMH-b8Rdk4S-.js} +1 -1
  11. package/dist/assets/{chunk-4BX2VUAB-B0CaezI4.js → chunk-4BX2VUAB-BSxn03f-.js} +1 -1
  12. package/dist/assets/{chunk-55IACEB6-B7bap9LR.js → chunk-55IACEB6-uUk1WzZ1.js} +1 -1
  13. package/dist/assets/{chunk-727SXJPM-CMksbsjL.js → chunk-727SXJPM-zvXhT6iZ.js} +1 -1
  14. package/dist/assets/{chunk-AQP2D5EJ-ChOCnmMe.js → chunk-AQP2D5EJ-B6GCyrIp.js} +1 -1
  15. package/dist/assets/{chunk-FMBD7UC4-qcUlmmEN.js → chunk-FMBD7UC4-DlhrqkBp.js} +1 -1
  16. package/dist/assets/{chunk-ND2GUHAM-BWwR4JBR.js → chunk-ND2GUHAM-lo_8kNzw.js} +1 -1
  17. package/dist/assets/{chunk-QZHKN3VN-DuRbBL0q.js → chunk-QZHKN3VN-on-yD-C0.js} +1 -1
  18. package/dist/assets/classDiagram-4FO5ZUOK-BCqpDcaS.js +1 -0
  19. package/dist/assets/classDiagram-v2-Q7XG4LA2-BCqpDcaS.js +1 -0
  20. package/dist/assets/{cose-bilkent-S5V4N54A-Dd3Ids4E.js → cose-bilkent-S5V4N54A-DxV7Y2bU.js} +1 -1
  21. package/dist/assets/{dagre-BM42HDAG-C2fmFG1L.js → dagre-BM42HDAG-BHf9sURy.js} +1 -1
  22. package/dist/assets/{diagram-2AECGRRQ-gZjYzjSJ.js → diagram-2AECGRRQ-R9Puxzlh.js} +1 -1
  23. package/dist/assets/{diagram-5GNKFQAL-uxJ9zL35.js → diagram-5GNKFQAL-BbjlClKx.js} +1 -1
  24. package/dist/assets/{diagram-KO2AKTUF--9DBGjk3.js → diagram-KO2AKTUF-r89Mx4m1.js} +1 -1
  25. package/dist/assets/{diagram-LMA3HP47-DkhUcRJZ.js → diagram-LMA3HP47-CstVDJZ3.js} +1 -1
  26. package/dist/assets/{diagram-OG6HWLK6-BaJ__gNW.js → diagram-OG6HWLK6-xmX57FKh.js} +1 -1
  27. package/dist/assets/{erDiagram-TEJ5UH35-DWszA5vM.js → erDiagram-TEJ5UH35-DhLPxvrl.js} +1 -1
  28. package/dist/assets/{flowDiagram-I6XJVG4X-DKGbnIHA.js → flowDiagram-I6XJVG4X-BExoUaNm.js} +1 -1
  29. package/dist/assets/{ganttDiagram-6RSMTGT7-D5CoNr7u.js → ganttDiagram-6RSMTGT7-BEXa5a22.js} +1 -1
  30. package/dist/assets/{gitGraphDiagram-PVQCEYII-wraCb0iO.js → gitGraphDiagram-PVQCEYII-Cbes9api.js} +1 -1
  31. package/dist/assets/{graph-BlEwG9Ro.js → graph-BBXaecIU.js} +1 -1
  32. package/dist/assets/index-BwLfbbOu.css +1 -0
  33. package/dist/assets/{index-CE1ehTQn.js → index-DNuHtZwR.js} +22 -22
  34. package/dist/assets/{infoDiagram-5YYISTIA-CLT2YJ_w.js → infoDiagram-5YYISTIA-UBm4ssfm.js} +1 -1
  35. package/dist/assets/{ishikawaDiagram-YF4QCWOH-1WQ5ViOx.js → ishikawaDiagram-YF4QCWOH-CksBYHCF.js} +1 -1
  36. package/dist/assets/{journeyDiagram-JHISSGLW-CbYKANnV.js → journeyDiagram-JHISSGLW-CKHkIHky.js} +1 -1
  37. package/dist/assets/{kanban-definition-UN3LZRKU-CYNaaEmw.js → kanban-definition-UN3LZRKU-CEahMFzE.js} +1 -1
  38. package/dist/assets/{linear-C6l6Hee2.js → linear-CqLVtYRk.js} +1 -1
  39. package/dist/assets/{mindmap-definition-RKZ34NQL-DzXKDTRa.js → mindmap-definition-RKZ34NQL-C61zWt4M.js} +1 -1
  40. package/dist/assets/{mobile-D8UQvJ1i.css → mobile-Cag5dHlF.css} +1 -1
  41. package/dist/assets/mobile-DwmxS_O4.js +17 -0
  42. package/dist/assets/{pieDiagram-4H26LBE5-CppszhAX.js → pieDiagram-4H26LBE5-BIpZHyJW.js} +1 -1
  43. package/dist/assets/{quadrantDiagram-W4KKPZXB-jpp555QD.js → quadrantDiagram-W4KKPZXB-Db7nRbZm.js} +1 -1
  44. package/dist/assets/{requirementDiagram-4Y6WPE33-nKJCyHfW.js → requirementDiagram-4Y6WPE33-BQqFCAr0.js} +1 -1
  45. package/dist/assets/{sankeyDiagram-5OEKKPKP-D-oX8o5g.js → sankeyDiagram-5OEKKPKP-D-oAAMci.js} +1 -1
  46. package/dist/assets/{sequenceDiagram-3UESZ5HK-CcOMecR8.js → sequenceDiagram-3UESZ5HK-Dc4Cp0Om.js} +1 -1
  47. package/dist/assets/{stateDiagram-AJRCARHV-D0yHv9PM.js → stateDiagram-AJRCARHV-B5DkQ8Pr.js} +1 -1
  48. package/dist/assets/stateDiagram-v2-BHNVJYJU-BM1Uf6a_.js +1 -0
  49. package/dist/assets/{timeline-definition-PNZ67QCA-hsR-T0Te.js → timeline-definition-PNZ67QCA-DU9Fl-FW.js} +1 -1
  50. package/dist/assets/{vennDiagram-CIIHVFJN-C9b10oqu.js → vennDiagram-CIIHVFJN-Bthz7siw.js} +1 -1
  51. package/dist/assets/{wardley-L42UT6IY-BHnzDf0e.js → wardley-L42UT6IY-nqdlFSIA.js} +1 -1
  52. package/dist/assets/{wardleyDiagram-YWT4CUSO-DReamCcN.js → wardleyDiagram-YWT4CUSO-BJ1BC5zc.js} +1 -1
  53. package/dist/assets/{xychartDiagram-2RQKCTM6-CrSsH0ZL.js → xychartDiagram-2RQKCTM6-Bib5JrbR.js} +1 -1
  54. package/dist/index.html +4 -4
  55. package/lib/build-history.js +40 -0
  56. package/lib/build.js +56 -8
  57. package/lib/cli-remote.js +533 -0
  58. package/package.json +3 -1
  59. package/server/auth-middleware.js +309 -0
  60. package/server/auth-routes.js +195 -0
  61. package/server/auth-store.js +539 -0
  62. package/server/build-routes.js +1 -1
  63. package/server/index.js +134 -7
  64. package/server/remote-utils.js +134 -0
  65. package/server/security.js +46 -1
  66. package/server/supervisor.js +7 -1
  67. package/server/vision-routes.js +1 -1
  68. package/server/vision-server.js +1 -1
  69. package/dist/assets/channel-D60Ea_Qi.js +0 -1
  70. package/dist/assets/classDiagram-4FO5ZUOK-Vt88epYI.js +0 -1
  71. package/dist/assets/classDiagram-v2-Q7XG4LA2-Vt88epYI.js +0 -1
  72. package/dist/assets/index-D9M5IzwO.css +0 -1
  73. package/dist/assets/mobile-4lQex-UI.js +0 -17
  74. package/dist/assets/stateDiagram-v2-BHNVJYJU-CFwFamMD.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,aq as Si,R as Wt}from"./App-DQblyoua.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-C6l6Hee2.js";import"./mobile-4lQex-UI.js";import"./index-CE1ehTQn.js";import"./graph-BlEwG9Ro.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,aq as Si,R as Wt}from"./App-D7E7S49Q.js";import{i as _i}from"./init-Gi6I4Gst.js";import{o as ki}from"./ordinal-Cboi1Yqb.js";import{l as zt}from"./linear-CqLVtYRk.js";import"./mobile-DwmxS_O4.js";import"./index-DNuHtZwR.js";import"./graph-BBXaecIU.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()+`
package/dist/index.html CHANGED
@@ -19,10 +19,10 @@
19
19
  }
20
20
  })();
21
21
  </script>
22
- <script type="module" crossorigin src="/assets/index-CE1ehTQn.js"></script>
23
- <link rel="modulepreload" crossorigin href="/assets/mobile-4lQex-UI.js">
24
- <link rel="stylesheet" crossorigin href="/assets/mobile-D8UQvJ1i.css">
25
- <link rel="stylesheet" crossorigin href="/assets/index-D9M5IzwO.css">
22
+ <script type="module" crossorigin src="/assets/index-DNuHtZwR.js"></script>
23
+ <link rel="modulepreload" crossorigin href="/assets/mobile-DwmxS_O4.js">
24
+ <link rel="stylesheet" crossorigin href="/assets/mobile-Cag5dHlF.css">
25
+ <link rel="stylesheet" crossorigin href="/assets/index-BwLfbbOu.css">
26
26
  </head>
27
27
  <body>
28
28
  <div id="root"></div>
@@ -60,3 +60,43 @@ export function readBuildHistory(dataDir, { limit = 50 } = {}) {
60
60
  records.reverse(); // most-recent-first
61
61
  return records.slice(0, Math.max(0, limit));
62
62
  }
63
+
64
+ /**
65
+ * Map a stepHistory outcome to the UI step status vocabulary.
66
+ * Single source of truth shared by syncStepHistory (active-build.json)
67
+ * and projectHistorySteps (build-history.jsonl) so the two surfaces
68
+ * can never drift.
69
+ * @param {string|undefined} outcome
70
+ * @returns {string}
71
+ */
72
+ export function stepOutcomeToStatus(outcome) {
73
+ return outcome === 'complete' ? 'done'
74
+ : outcome === 'failed' ? 'failed'
75
+ : outcome === 'approve' ? 'done'
76
+ : outcome === 'revise' ? 'revised'
77
+ : outcome === 'kill' ? 'killed'
78
+ : outcome ?? 'done';
79
+ }
80
+
81
+ /**
82
+ * Project the in-memory stepHistory into the compact per-step shape stored
83
+ * on build-history records (COMP-MOBILE-1-1). Deliberately smaller than the
84
+ * active-build.json step objects: summary is kept only for failed steps so
85
+ * JSONL lines stay bounded.
86
+ * @param {object[]} stepHistory
87
+ * @returns {Array<{id: string, status: string, agent: string|null, durationMs: number|null, summary?: string}>}
88
+ */
89
+ export function projectHistorySteps(stepHistory) {
90
+ if (!Array.isArray(stepHistory)) return [];
91
+ return stepHistory.map(h => {
92
+ const status = stepOutcomeToStatus(h?.outcome);
93
+ const step = {
94
+ id: h?.stepId ?? null,
95
+ status,
96
+ agent: h?.agent ?? null,
97
+ durationMs: h?.durationMs ?? null,
98
+ };
99
+ if (status === 'failed' && h?.summary) step.summary = h.summary;
100
+ return step;
101
+ });
102
+ }
package/lib/build.js CHANGED
@@ -25,7 +25,7 @@ import { resolvePort } from './resolve-port.js';
25
25
  import { probeServer } from './server-probe.js';
26
26
  import { CliProgress } from './cli-progress.js';
27
27
  import { BuildStreamWriter } from './build-stream-writer.js';
28
- import { appendBuildHistory } from './build-history.js';
28
+ import { appendBuildHistory, projectHistorySteps, stepOutcomeToStatus } from './build-history.js';
29
29
  import { KNOWN_VERSIONS } from './build-stream-schema.js';
30
30
  import { resolveAgentConfig } from './agent-string.js';
31
31
  import { installFactoryShim } from './connector-factory-shim.js';
@@ -415,6 +415,39 @@ function writeActiveBuild(dataDir, state) {
415
415
  renameSync(tmp, target);
416
416
  }
417
417
 
418
+ /**
419
+ * COMP-MOBILE-1-1: persist a COMP-HEALTH gate downgrade back to
420
+ * active-build.json. The terminal write happens BEFORE the health gate runs,
421
+ * so when the gate downgrades the result the broadcast `buildState` (sourced
422
+ * from this file by the server's watcher) would otherwise keep saying
423
+ * 'complete' forever. Re-writing here triggers a fresh buildState broadcast
424
+ * with the real outcome.
425
+ *
426
+ * No-ops (returns null) when there is no active-build file, it is already
427
+ * 'failed', or it no longer belongs to this build — active-build.json is
428
+ * last-writer-wins across concurrent builds, so without the flowId/featureCode
429
+ * identity guard a downgrade could mark an unrelated live build as failed.
430
+ * Returns the written state otherwise.
431
+ */
432
+ export function persistHealthGateDowngrade(dataDir, { score, threshold, flowId, featureCode } = {}) {
433
+ const state = readActiveBuild(dataDir);
434
+ if (!state || state.status === 'failed') return null;
435
+ // Identity guard: every provided key that exists on the on-disk state must
436
+ // match. Checking both (not flowId-first) covers legacy state files that
437
+ // lack flowId but carry a different featureCode.
438
+ if (flowId && state.flowId && state.flowId !== flowId) return null;
439
+ if (featureCode && state.featureCode && state.featureCode !== featureCode) return null;
440
+ const next = {
441
+ ...state,
442
+ status: 'failed',
443
+ failureReason: `Health score ${score} below threshold ${threshold}`,
444
+ healthDowngrade: { score, threshold },
445
+ completedAt: state.completedAt ?? new Date().toISOString(),
446
+ };
447
+ writeActiveBuild(dataDir, next);
448
+ return next;
449
+ }
450
+
418
451
  // ---------------------------------------------------------------------------
419
452
  // Prior dirty lenses sidecar (STRAT-REV-5: selective re-review)
420
453
  // ---------------------------------------------------------------------------
@@ -1934,6 +1967,10 @@ export async function runBuild(featureCode, opts = {}) {
1934
1967
  }
1935
1968
 
1936
1969
  // COMP-HEALTH: finalize signals and compute composite health score
1970
+ // COMP-MOBILE-1-1: when the gate downgrades the build, the reason is kept
1971
+ // for the history record — health-gate failures have no failed step, so
1972
+ // the lastFailedStep-derived failureReason would otherwise be generic.
1973
+ let healthDowngradeReason = null;
1937
1974
  if (streamWriter) {
1938
1975
  try {
1939
1976
  // Runtime errors signal — accumulated across all steps
@@ -1993,6 +2030,19 @@ export async function runBuild(featureCode, opts = {}) {
1993
2030
  console.warn(` [health] Build health score ${score} is below gate threshold ${threshold} — marking build as failed`);
1994
2031
  // Enforce: downgrade build status so the build is reported as failed
1995
2032
  buildStatus = 'failed';
2033
+ // COMP-MOBILE-1-1: re-persist the downgrade to active-build.json so the
2034
+ // file watcher re-broadcasts buildState over /ws/vision. Without this,
2035
+ // the terminal write above already said 'complete' and clients never
2036
+ // learn the build actually failed (mobile compensated via history).
2037
+ // Identity-guarded: no-ops if a concurrent build replaced the file.
2038
+ const downgraded = persistHealthGateDowngrade(dataDir, {
2039
+ score,
2040
+ threshold,
2041
+ flowId: response?.flow_id ?? null,
2042
+ featureCode,
2043
+ });
2044
+ healthDowngradeReason = downgraded?.failureReason
2045
+ ?? `Health score ${score} below threshold ${threshold}`;
1996
2046
  }
1997
2047
 
1998
2048
  console.log(` Health score: ${score}/100 (${Object.keys(breakdown).length} dimensions scored)`);
@@ -2010,7 +2060,7 @@ export async function runBuild(featureCode, opts = {}) {
2010
2060
  const lastFailedStep = [...stepHistory].reverse().find(s => s.outcome === 'failed');
2011
2061
  const failureReason = buildStatus === 'complete'
2012
2062
  ? null
2013
- : (lastFailedStep?.summary ?? `Build ${buildStatus}`);
2063
+ : (lastFailedStep?.summary ?? healthDowngradeReason ?? `Build ${buildStatus}`);
2014
2064
  appendBuildHistory(dataDir, {
2015
2065
  featureCode,
2016
2066
  flowId: response?.flow_id ?? null,
@@ -2025,6 +2075,9 @@ export async function runBuild(featureCode, opts = {}) {
2025
2075
  stepCount: stepHistory.length,
2026
2076
  failureReason,
2027
2077
  itemId,
2078
+ // COMP-MOBILE-1-1: compact per-step results so history consumers can
2079
+ // render which-step-failed without the live active-build state.
2080
+ steps: projectHistorySteps(stepHistory),
2028
2081
  });
2029
2082
  }
2030
2083
 
@@ -4311,12 +4364,7 @@ function syncStepHistory(dataDir, stepHistory) {
4311
4364
  cumulativeOutputTokens += h.output_tokens ?? 0;
4312
4365
  return {
4313
4366
  id: h.stepId,
4314
- status: h.outcome === 'complete' ? 'done'
4315
- : h.outcome === 'failed' ? 'failed'
4316
- : h.outcome === 'approve' ? 'done'
4317
- : h.outcome === 'revise' ? 'revised'
4318
- : h.outcome === 'kill' ? 'killed'
4319
- : h.outcome ?? 'done',
4367
+ status: stepOutcomeToStatus(h.outcome),
4320
4368
  summary: h.summary ?? null,
4321
4369
  artifact: h.artifact ?? null,
4322
4370
  agent: h.agent ?? null,