@testmuai/kane-cli 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/{ChromeProfilePicker-HGRJNQDM.js → ChromeProfilePicker-ETBZA64A.js} +1 -1
  2. package/dist/{CliFeedbackPrompt-JXEPBJ63.js → CliFeedbackPrompt-S7RZGMBQ.js} +1 -1
  3. package/dist/{CliUploadProgress-L5VJUXUC.js → CliUploadProgress-TPWX5ARU.js} +1 -1
  4. package/dist/{ConfigView-LOEAT3HQ.js → ConfigView-BSIS2LOH.js} +1 -1
  5. package/dist/FolderPicker-7FXP3PIM.js +2 -0
  6. package/dist/HelpView-MUIOT5UN.js +2 -0
  7. package/dist/{InfoBox-MK7EEGCH.js → InfoBox-3EY4ARJG.js} +1 -1
  8. package/dist/{LinksBox-RSWQWL6G.js → LinksBox-UD364LBX.js} +1 -1
  9. package/dist/{ProfilesView-KCOMTDR5.js → ProfilesView-UOJP2KA2.js} +1 -1
  10. package/dist/ProjectPicker-5ZPZNRSS.js +2 -0
  11. package/dist/{SaveSessionPrompt-RGL3LAEB.js → SaveSessionPrompt-D4PETK7B.js} +1 -1
  12. package/dist/SingleShotApp-N4AGSAPW.js +2 -0
  13. package/dist/{SummaryBox-5YPKUIHB.js → SummaryBox-L4ZXY4S4.js} +1 -1
  14. package/dist/{TestMdRunView-QS7IUANM.js → TestMdRunView-YD3Z6MCR.js} +1 -1
  15. package/dist/{WhoamiView-GL3HZQ4Q.js → WhoamiView-ZZUFXKDU.js} +1 -1
  16. package/dist/changelog-H2RXH4LH.js +4 -0
  17. package/dist/{chunk-3ELBJPHQ.js → chunk-2FCAWRCU.js} +1 -1
  18. package/dist/{chunk-L4GAZTAQ.js → chunk-3UDKGPAS.js} +1 -1
  19. package/dist/chunk-3YGQYJ3D.js +2 -0
  20. package/dist/chunk-477FDDDW.js +13 -0
  21. package/dist/{chunk-XMK4GYI7.js → chunk-4GQZBMTW.js} +1 -1
  22. package/dist/{chunk-THNGNS36.js → chunk-7ECMUWV2.js} +1 -1
  23. package/dist/chunk-7JB4RPI2.js +2 -0
  24. package/dist/chunk-AH4AXJML.js +2 -0
  25. package/dist/{chunk-XP5SMOND.js → chunk-AH7HH3OE.js} +1 -1
  26. package/dist/chunk-AMCAQCEV.js +17 -0
  27. package/dist/{chunk-ZLQ7YLXO.js → chunk-BSHGW3QM.js} +1 -1
  28. package/dist/{chunk-NOH6RERF.js → chunk-E7QWDV7M.js} +1 -1
  29. package/dist/chunk-EZJNX4VE.js +5 -0
  30. package/dist/chunk-FMMDLDDI.js +2 -0
  31. package/dist/chunk-GCAHPH2E.js +2 -0
  32. package/dist/{chunk-34DK2AUH.js → chunk-HXIGYD2T.js} +1 -1
  33. package/dist/chunk-JI7KJKG4.js +2 -0
  34. package/dist/{chunk-KVDOQY2Q.js → chunk-KGZATJQN.js} +1 -1
  35. package/dist/chunk-KKZRPFWO.js +2 -0
  36. package/dist/chunk-L5LI2JF4.js +38 -0
  37. package/dist/{chunk-ZX3PMRMO.js → chunk-MVX3N7GI.js} +1 -1
  38. package/dist/{chunk-BR2S57O2.js → chunk-O22K3JLR.js} +1 -1
  39. package/dist/{chunk-VUBZQUP4.js → chunk-OQ64GUQE.js} +1 -1
  40. package/dist/chunk-OQZG3V6B.js +2 -0
  41. package/dist/{chunk-TK7ZJ7YX.js → chunk-PAQGYV5G.js} +1 -1
  42. package/dist/{chunk-L4OZRHUT.js → chunk-RBED7RVV.js} +1 -1
  43. package/dist/{chunk-3QD3LA72.js → chunk-RDJPZQBU.js} +1 -1
  44. package/dist/{chunk-QO6VFDI4.js → chunk-RVQBAKOK.js} +1 -1
  45. package/dist/{chunk-L2HVRWIT.js → chunk-UFNKCPUB.js} +11 -11
  46. package/dist/chunk-V4S5H6O2.js +9 -0
  47. package/dist/chunk-V7QXJKX7.js +3 -0
  48. package/dist/{chunk-RXMOIIQD.js → chunk-WCRLZETG.js} +1 -1
  49. package/dist/chunk-X7VI7KK3.js +11 -0
  50. package/dist/{chunk-HJ3CHMEM.js → chunk-XK33C64U.js} +1 -1
  51. package/dist/{chunk-MEB2KLWF.js → chunk-XUDEM7I6.js} +1 -1
  52. package/dist/chunk-YZTCCQHR.js +2 -0
  53. package/dist/chunk-ZB72T6HB.js +5 -0
  54. package/dist/controller-client-OMKEBP4B.js +2 -0
  55. package/dist/index.js +23 -23
  56. package/dist/logging-RMC6R23F.js +2 -0
  57. package/dist/login-flow-NL3LNSP5.js +2 -0
  58. package/dist/persist-recorded-session-GG732QRB.js +3 -0
  59. package/dist/pipeline-EUZIM2ZO.js +2 -0
  60. package/dist/{recording-banner-IDLY2FM6.js → recording-banner-LAAAMKIM.js} +1 -1
  61. package/dist/resolver-F6HCOZOX.js +2 -0
  62. package/dist/run-test-md-IAEJXIVK.js +65 -0
  63. package/dist/testmd-actions-5O7F22EC.js +20 -0
  64. package/dist/tms-client-XOARLBEP.js +2 -0
  65. package/dist/{validate-basic-27BIMJ2F.js → validate-basic-NIEIKFGP.js} +1 -1
  66. package/dist/version-check-WHWTPX6C.js +2 -0
  67. package/package.json +5 -5
  68. package/dist/FolderPicker-I6JTRNAU.js +0 -2
  69. package/dist/HelpView-UEUKYHFR.js +0 -2
  70. package/dist/ProjectPicker-AX6H5MX3.js +0 -2
  71. package/dist/SingleShotApp-YTFAGVZD.js +0 -2
  72. package/dist/changelog-CLQ7HCB3.js +0 -4
  73. package/dist/chunk-BM4COXQU.js +0 -53
  74. package/dist/chunk-BQKDPI6L.js +0 -2
  75. package/dist/chunk-DUR6AFYA.js +0 -5
  76. package/dist/chunk-DXKKUGFG.js +0 -2
  77. package/dist/chunk-F6HEB4PA.js +0 -2
  78. package/dist/chunk-FFO5XXKV.js +0 -4
  79. package/dist/chunk-GTFULP6B.js +0 -13
  80. package/dist/chunk-K7MSPKEM.js +0 -5
  81. package/dist/chunk-KULEBWMB.js +0 -2
  82. package/dist/chunk-L5Y2GUO6.js +0 -2
  83. package/dist/chunk-NZSHFIZX.js +0 -3
  84. package/dist/chunk-PWGEMRBD.js +0 -2
  85. package/dist/chunk-SLA75N5B.js +0 -2
  86. package/dist/chunk-WAFO4MT4.js +0 -20
  87. package/dist/chunk-YUUZDFT7.js +0 -2
  88. package/dist/controller-client-7BIK5FYL.js +0 -2
  89. package/dist/logging-GG23EW5G.js +0 -2
  90. package/dist/login-flow-ZUZUZIXD.js +0 -2
  91. package/dist/persist-recorded-session-ZXKA4H7E.js +0 -5
  92. package/dist/pipeline-BVH3R7YP.js +0 -2
  93. package/dist/resolver-QLDOAIXU.js +0 -2
  94. package/dist/run-test-md-UPAR3DQY.js +0 -54
  95. package/dist/testmd-actions-YYFFNNIH.js +0 -20
  96. package/dist/tms-client-CTH4NVFM.js +0 -2
  97. package/dist/version-check-6DXFF6IN.js +0 -2
@@ -0,0 +1,9 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as Re}from"./chunk-AMCAQCEV.js";import{f as fe}from"./chunk-G7VF5SDK.js";import{a as de}from"./chunk-KGZATJQN.js";import{b as Pe}from"./chunk-BSHGW3QM.js";import{b as _e}from"./chunk-RDJPZQBU.js";import{a as Ce}from"./chunk-YCCUBQY4.js";import{a as ae,b as ue,d as Ie}from"./chunk-VE3SUJMA.js";import{a as Ae,b as Be}from"./chunk-ZB72T6HB.js";import{a as le}from"./chunk-PAQGYV5G.js";import{a as me}from"./chunk-GCAHPH2E.js";import{a as se}from"./chunk-XK33C64U.js";import{a as J}from"./chunk-HCBYKLMW.js";import{c as Ee,t as w}from"./chunk-2FCAWRCU.js";import{a as b,b as h,h as Te,i as Q,j as ye,k as Se}from"./chunk-C44QQJR4.js";import{a as ie}from"./chunk-6YGTRKDT.js";import{a as he}from"./chunk-YZTCCQHR.js";import{e as U}from"./chunk-UR6MHSHU.js";var _=U(ie(),1);var Z=U(ie(),1);var xe=U(ie(),1);var q=U(J(),1);function De({history:i,onSelect:r,onClose:n}){let[l,u]=(0,xe.useState)(""),[e,f]=(0,xe.useState)(0),t=l?i.search(l).slice(0,8):[];return Q((a,v)=>{if(v.escape){n();return}if(v.return){t.length>0&&t[e]?r(t[e]):n();return}if(v.upArrow){f(A=>Math.max(0,A-1));return}if(v.downArrow){f(A=>Math.min(t.length-1,A+1));return}if(v.backspace||v.delete){u(A=>A.slice(0,-1)),f(0);return}a&&!v.ctrl&&!v.meta&&(u(A=>A+a),f(0))}),(0,q.jsxs)(b,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,q.jsx)(h,{color:w.muted,bold:!0,children:"reverse search"}),(0,q.jsxs)(b,{gap:1,children:[(0,q.jsx)(h,{color:w.dimmed,children:"search:"}),(0,q.jsx)(h,{children:l}),(0,q.jsx)(h,{color:w.purple,children:"\u2588"})]}),t.length>0&&(0,q.jsx)(h,{children:" "}),t.map((a,v)=>(0,q.jsx)(b,{marginLeft:2,children:(0,q.jsxs)(h,{color:v===e?w.purple:w.dimmed,bold:v===e,children:[v===e?"\u25B8 ":" ",a]})},`${v}-${a}`))]})}var re=U(J(),1);function Le({commands:i,selectedIndex:r}){return i.length===0?null:(0,re.jsx)(b,{flexDirection:"column",marginBottom:0,children:i.map((n,l)=>{let u=l===r;return(0,re.jsxs)(b,{children:[(0,re.jsx)(h,{color:u?w.primary:w.dimmed,children:u?"\u276F ":" "}),(0,re.jsxs)(h,{color:u?w.primary:void 0,bold:u,children:["/",n.name]}),n.args&&(0,re.jsxs)(h,{color:w.dimmed,children:[" ",n.args]}),(0,re.jsxs)(h,{color:w.dimmed,children:[" ",n.description]})]},n.name)})})}var pe=U(ie(),1);var Ne=27,$e=127,We=11;function He(i){return i>=64&&i<=126}function Ge(i,r){i===We&&r({killToEnd:!0,ctrl:!0,raw:String.fromCharCode(i)})}function Ve(i,r){i===$e&&r({backspace:!0,meta:!0,raw:"\x1B\x7F"})}function Xe(i,r){let n=i.map(u=>String.fromCharCode(u)).join(""),l=/^\[1;([0-9]+)([A-D])$/.exec(n);if(l){let u=parseInt(l[1],10),e=l[2],f={raw:"\x1B"+n};if(u===2)f.shift=!0;else if(u===3)f.meta=!0;else if(u===5)f.ctrl=!0;else return;e==="A"?f.arrowUp=!0:e==="B"?f.arrowDown=!0:e==="C"?f.arrowRight=!0:e==="D"&&(f.arrowLeft=!0),r(f);return}if(n==="[H"||n==="[1~"||n==="[7~"){r({home:!0,raw:"\x1B"+n});return}if(n==="[F"||n==="[4~"||n==="[8~"){r({end:!0,raw:"\x1B"+n});return}if(n==="[3;5~"){r({delete:!0,ctrl:!0,raw:"\x1B"+n});return}if(n==="[3;3~"){r({delete:!0,meta:!0,raw:"\x1B"+n});return}}function Ye(i,r){i===72?r({home:!0,raw:"\x1BO"+String.fromCharCode(i)}):i===70&&r({end:!0,raw:"\x1BO"+String.fromCharCode(i)})}function ze(){let i="IDLE",r=[];function n(){i="IDLE",r=[]}return{feed(l,u){for(let e of l)i==="IDLE"?e===Ne?(i="ESC",r=[]):Ge(e,u):i==="ESC"?e===91?(i="CSI",r=[]):e===79?(i="SS3",r=[]):(Ve(e,u),n()):i==="CSI"?(r.push(e),He(e)&&(Xe([91,...r],u),n())):i==="SS3"&&(Ye(e,u),n())},flushIdle(l){i==="ESC"&&r.length===0&&l({raw:"\x1B"}),n()}}}function Me(i,r={}){let n=(0,pe.useRef)(i);n.current=i;let{stdin:l}=Te();(0,pe.useEffect)(()=>{if(r.isActive===!1||!l)return;let u=ze(),e=null,f=t=>{e&&(clearTimeout(e),e=null);let a=Buffer.isBuffer(t)?t:Buffer.from(t,"binary");u.feed(a,v=>n.current(v)),e=setTimeout(()=>{u.flushIdle(v=>n.current(v)),e=null},50)};return l.on("data",f),()=>{l.removeListener("data",f),e&&clearTimeout(e)}},[r.isActive,l])}var k=U(J(),1),ve=10;function qe(i){return i.replace(/\x1b?\[200~/g,"").replace(/\x1b?\[201~/g,"").replace(/\r\n/g,`
3
+ `).replace(/\r/g,`
4
+ `).replace(/[\x00-\x08\x0b-\x1f\x7f]/g,"")}function Je(i,r){let n=[],l=0;for(;l<=i.length;){let u=l;for(;u<i.length&&i[u]!==`
5
+ `;)u++;if(l===u)n.push({start:l,end:l});else{let e=l;for(;e<u;){let f=Math.min(e+r,u);n.push({start:e,end:f}),e=f}}if(u>=i.length)break;l=u+1}return n}function Qe(i,r,n){if(i.length===0)return 0;if(r>=n.length)return i.length-1;if(n[r]===`
6
+ `){for(let l=i.length-1;l>=0;l--)if(i[l].end===r)return l;return i.length-1}for(let l=0;l<i.length;l++){let u=i[l];if(u.start<=r&&r<u.end)return l}return i.length-1}function ke(i,r,n,l){let u=Je(i,n);if(u.length===0)return null;let e=Qe(u,r,i),f=e+l;if(f<0||f>=u.length)return null;let t=r-u[e].start,a=u[f],v=a.end-a.start;return a.start+Math.min(t,v)}function Oe({onSubmit:i,onEscape:r,history:n,placeholder:l="Type an objective or /command...",commands:u}){let[e,f]=(0,Z.useState)([]),[t,a]=(0,Z.useState)(0),[v,A]=(0,Z.useState)("none"),[L,C]=(0,Z.useState)(-1),R=(0,Z.useRef)(""),[M,ne]=(0,Z.useState)(!0),{stdout:F}=Se(),O=F?.columns??80,[W,H]=(0,Z.useState)(0),I=e.join(""),G=(()=>{if(v!=="none"||e.length===0)return"";if(I.startsWith("/")&&u&&I.length>=2){let o=I.slice(1).toLowerCase(),c=u.find(y=>y.name.startsWith(o)&&y.name!==o);return c?`/${c.name}`.slice(I.length):""}if(I.startsWith("/"))return"";let p=n.getAll();for(let o=p.length-1;o>=0;o--)if(p[o].startsWith(I)&&p[o]!==I)return p[o].slice(I.length);return""})(),j=(()=>{if(!u||!I.startsWith("/"))return[];let p=I.length>=2?I.slice(1).toLowerCase():"";return p&&u.some(o=>o.name===p)?[]:u.filter(o=>!p||o.name.startsWith(p))})(),V=j.length>0&&I.startsWith("/");Q((p,o)=>{if(M&&p&&ne(!1),o.return){if(V&&j[W]){let c=`/${j[W].name}`;n.push(c),i(c),f([]),a(0),A("none"),C(-1),R.current="",ne(!0),H(0);return}I.trim()&&(n.push(I.trim()),i(I.trim()),f([]),a(0),A("none"),C(-1),R.current="",ne(!0),H(0));return}if(o.escape){v!=="none"?A("none"):e.length>0?(f([]),a(0),C(-1),R.current=""):r?.();return}if(o.tab){if(V&&j[W]){let c=`/${j[W].name}`;f([...c]),a(c.length),H(0);return}if(G){let c=I+G;f([...c]),a(c.length);return}return}if(o.ctrl&&p==="r"){A("search");return}if(o.ctrl&&p==="a"){a(0);return}if(o.ctrl&&p==="e"){a(e.length);return}if(o.ctrl&&p==="w"){if(t===0)return;let c=t-1;for(;c>0&&e[c]===" ";)c--;for(;c>0&&e[c-1]!==" ";)c--;let y=[...e.slice(0,c),...e.slice(t)];f(y),a(c);return}if(o.ctrl&&p==="u"){f([]),a(0),C(-1),A("none");return}if(o.meta&&p==="b"){let c=t-1;for(;c>0&&e[c]===" ";)c--;for(;c>0&&e[c-1]!==" ";)c--;a(Math.max(0,c));return}if(o.meta&&p==="f"){let c=t;for(;c<e.length&&e[c]!==" ";)c++;for(;c<e.length&&e[c]===" ";)c++;a(c);return}if(o.leftArrow){if(o.ctrl||o.shift)return;a(c=>Math.max(0,c-1));return}if(o.rightArrow){if(o.ctrl||o.shift)return;if(t>=e.length&&G){let c=I+G;f([...c]),a(c.length)}else a(c=>Math.min(e.length,c+1));return}if(o.upArrow){if(o.shift)return;if(V){H(c=>Math.max(0,c-1));return}if(v==="none"){let c=Math.max(1,O-2),y=ke(e,t,c,-1);if(y!==null){a(y);return}let D=n.getAll();if(D.length===0)return;if(L===-1){R.current=I,C(D.length-1);let B=D[D.length-1];f([...B]),a(B.length)}else if(L>0){let B=L-1;C(B);let s=D[B];f([...s]),a(s.length)}}return}if(o.downArrow){if(o.shift)return;if(V){H(c=>Math.min(j.length-1,c+1));return}if(v==="none"){let c=Math.max(1,O-2),y=ke(e,t,c,1);if(y!==null){a(y);return}let D=n.getAll();if(L===-1)return;if(L<D.length-1){let B=L+1;C(B);let s=D[B];f([...s]),a(s.length)}else{C(-1);let B=R.current;f([...B]),a(B.length)}}return}if(o.backspace||o.delete){if(o.meta||o.ctrl)return;if(t>0){let c=[...e.slice(0,t-1),...e.slice(t)];f(c),a(t-1),C(-1),H(0)}return}if(p&&!o.ctrl&&!o.meta){let c=qe(p);if(!c)return;let y=[...e.slice(0,t),...c,...e.slice(t)];f(y),a(t+c.length),C(-1),H(0)}},{isActive:v!=="search"}),Me(p=>{if(p.home){a(0);return}if(p.end){a(e.length);return}if(p.killToEnd){f(e.slice(0,t));return}if(p.arrowLeft&&(p.ctrl||p.meta)){let o=t-1;for(;o>0&&e[o]===" ";)o--;for(;o>0&&e[o-1]!==" ";)o--;a(Math.max(0,o));return}if(p.arrowRight&&(p.ctrl||p.meta)){let o=t;for(;o<e.length&&e[o]!==" ";)o++;for(;o<e.length&&e[o]===" ";)o++;a(o);return}if(p.backspace&&p.meta){if(t===0)return;let o=t-1;for(;o>0&&e[o]===" ";)o--;for(;o>0&&e[o-1]!==" ";)o--;let c=[...e.slice(0,o),...e.slice(t)];f(c),a(o);return}if(p.delete&&(p.ctrl||p.meta)){let o=t;for(;o<e.length&&e[o]===" ";)o++;for(;o<e.length&&e[o]!==" ";)o++;f([...e.slice(0,t),...e.slice(o)]);return}},{isActive:v!=="search"});let ce=p=>{f([...p]),a(p.length),A("none")},$=()=>{A("none")},X=(()=>{if(M&&e.length===0)return null;let p=t>=e.length,o=e.slice(0,t).join(""),c,y;p?(c=" ",y=""):e[t]===`
7
+ `?(c=" ",y=e.slice(t).join("")):(c=e[t],y=e.slice(t+1).join(""));let D=o+c+y+G,B=o.length,s=B+1,d=s+y.length,m=Math.max(1,O-2),g=[],S=0;for(;S<=D.length;){let K=D.indexOf(`
8
+ `,S);if(K===-1&&(K=D.length),S===K)g.push({type:"content",start:S,end:S});else{let z=S;for(;z<K;){let ee=Math.min(z+m,K);g.push({type:"content",start:z,end:ee}),z=ee}}if(K>=D.length)break;S=K+1}let P=Math.max(0,g.findIndex(K=>K.start<=B&&B<=K.end)),Y;if(g.length<=ve)Y=g;else{let z=ve-1-4;if(P<4||P>=g.length-z)Y=[...g.slice(0,4),{type:"ellipsis",hidden:g.length-4-z},...g.slice(g.length-z)];else{let ee=ve-2,be=Math.floor(ee/2),te=P-be,oe=P+(ee-be)-1;te<1&&(oe+=1-te,te=1),oe>g.length-2&&(te-=oe-(g.length-2),oe=g.length-2),te=Math.max(1,te),Y=[{type:"ellipsis",hidden:te},...g.slice(te,oe+1),{type:"ellipsis",hidden:g.length-oe-1}]}}return{full:D,b:B,c:s,a:d,rows:Y}})();return(0,k.jsxs)(b,{flexDirection:"column",children:[v==="search"&&(0,k.jsx)(De,{history:n,onSelect:ce,onClose:$}),V&&(0,k.jsx)(Le,{commands:j,selectedIndex:W}),(0,k.jsx)(h,{color:w.muted,children:"\u2500".repeat(O)}),X===null?(0,k.jsxs)(b,{children:[(0,k.jsx)(h,{color:w.purple,children:"\u276F "}),(0,k.jsx)(h,{inverse:!0,children:" "}),(0,k.jsx)(h,{color:w.dimmed,children:l})]}):(()=>{let p=X.rows.findIndex(o=>o.type==="content");return(0,k.jsx)(b,{flexDirection:"column",children:X.rows.map((o,c)=>{if(o.type==="ellipsis")return(0,k.jsx)(b,{children:(0,k.jsxs)(h,{color:w.dimmed,children:[" \u22EF ","(",o.hidden," more line",o.hidden===1?"":"s",")"]})},c);let{full:y,b:D,c:B,a:s}=X,d=o.start,x=o.end,m=c===p,g=m?"\u276F ":" ",S=m?w.purple:w.muted,P=[(0,k.jsx)(h,{color:S,children:g},"p")];d<Math.min(D,x)&&P.push((0,k.jsx)(h,{children:y.slice(d,Math.min(D,x))},"b"));let Y=Math.max(D,d),K=Math.min(B,x);Y<K&&P.push((0,k.jsx)(h,{color:w.purple,inverse:!0,children:y.slice(Y,K)},"c"));let z=Math.max(B,d),ee=Math.min(s,x);return z<ee&&P.push((0,k.jsx)(h,{children:y.slice(z,ee)},"a")),x>s&&P.push((0,k.jsx)(h,{color:w.dimmed,children:y.slice(Math.max(s,d),x)},"g")),(0,k.jsx)(b,{children:P},c)})})})(),(0,k.jsx)(se,{bindings:[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:"submit"},{keys:"tab",label:"complete"},{keys:"ctrl+r",label:"search"}],escBackLabel:"clear"})]})}var N=U(ie(),1);var T=U(J(),1);function Ze(i){let r=[{id:"method",label:"Auth method",options:[{label:"Basic Auth",value:"basic"},{label:"OAuth (browser)",value:"oauth"}]}];return i&&r.push({id:"env",label:"Environment",options:[{label:"prod",value:"prod"},{label:"stage",value:"stage"}]}),r.push({id:"profile",label:"Profile"}),r.push({id:"credentials",label:"Credentials"}),r}function je({devMode:i,profiles:r,onBasicLogin:n,onOAuthLogin:l,onComplete:u,onCancel:e}){let f=Ze(i),[t,a]=(0,N.useState)(0),[v,A]=(0,N.useState)(0),[L,C]=(0,N.useState)({}),[R,M]=(0,N.useState)("select"),[ne,F]=(0,N.useState)(""),[O,W]=(0,N.useState)("username"),[H,I]=(0,N.useState)(""),[G,j]=(0,N.useState)(null),[V,ce]=(0,N.useState)(null),$=f[t],X=L.method??"basic",p=L.env??"prod",o=(0,N.useCallback)(()=>{let m=r.filter(g=>g.env===p).map(g=>({label:`${g.profile} [${g.env}]`,value:g.profile}));return m.push({label:"+ Create new",value:"__new__"}),m},[r,p]),c=(0,N.useCallback)(()=>{t===0?e():(a(x=>x-1),A(0),M("select"),F(""),j(null))},[t,e]),y=(0,N.useCallback)(x=>{X==="basic"?(M("text-input"),W("username"),F("")):(M("waiting"),l(x,p).then(()=>{ce(`Logged in via OAuth as ${x} [${p}]`),M("done")}).catch(m=>{j(m.message),M("error")}))},[X,p,l]),D=(0,N.useCallback)(x=>{let m=x.trim();if(m){if(O==="profileName"){let g=m;C(S=>({...S,profile:g})),y(g);return}if(O==="username"){I(m),F(""),W("accessKey"),M("text-input-masked");return}if(O==="accessKey"){let g=L.profile??"default";M("waiting"),(async()=>{try{await n(g,p,H,m),ce(`Logged in as ${g} [${p}] via basic auth`),M("done")}catch{j("Credentials not valid. Please use valid credentials."),I(""),F(""),W("username"),M("text-input")}})()}}},[O,L.profile,p,n,H,y]),B=(0,N.useCallback)(x=>{F(x),G&&j(null)},[G]);Q((x,m)=>{if(R==="done"){let S=L.profile??"default";u(S,p);return}if(R==="error"){e();return}if(R==="waiting"){m.escape&&e();return}if(R==="text-input"||R==="text-input-masked")return;if(m.escape){c();return}let g=$?.id==="profile"?o():$?.options??[];if(m.upArrow){A(S=>Math.max(0,S-1));return}if(m.downArrow){A(S=>Math.min(g.length-1,S+1));return}if(m.return&&g[v]){let S=g[v];if($.id==="profile"){if(S.value==="__new__"){M("text-input"),W("profileName"),F("");return}C(P=>({...P,profile:S.value})),a(P=>P+1),A(0),y(S.value);return}C(P=>({...P,[$.id]:S.value})),a(P=>P+1),A(0)}});let s="Login";if(R==="done")return(0,T.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:w.statusPass,paddingX:2,paddingY:1,children:[(0,T.jsxs)(h,{color:w.statusPass,bold:!0,children:["\u2713 ",V]}),(0,T.jsx)(b,{marginTop:1,children:(0,T.jsx)(h,{color:w.dim,children:"press any key"})})]});if(R==="error")return(0,T.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:w.statusFail,paddingX:2,paddingY:1,children:[(0,T.jsx)(h,{color:w.statusFail,bold:!0,children:"Login failed"}),(0,T.jsx)(b,{marginTop:1,children:(0,T.jsx)(h,{color:w.statusFail,children:G})}),(0,T.jsx)(b,{marginTop:1,children:(0,T.jsx)(h,{color:w.dim,children:"press any key"})})]});if(R==="waiting")return(0,T.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:w.primary,paddingX:2,paddingY:1,children:[(0,T.jsxs)(h,{color:w.primary,bold:!0,children:[s," \u203A OAuth"]}),(0,T.jsx)(b,{marginTop:1,children:(0,T.jsx)(h,{color:w.secondary,children:"Opening browser for login..."})}),(0,T.jsx)(b,{marginTop:1,children:(0,T.jsx)(h,{color:w.primary,children:"Waiting for callback \u27F3"})}),(0,T.jsx)(se,{bindings:[],escBackLabel:"cancel"})]});if(R==="text-input"||R==="text-input-masked"){let x=O==="username"?"Username":O==="accessKey"?"Access Key":"Profile name",m=O==="username"||O==="accessKey"?`${s} \u203A Basic Auth`:`${s} \u203A New Profile`;return(0,T.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:w.primary,paddingX:2,paddingY:1,children:[G&&(O==="username"||O==="accessKey")&&(0,T.jsx)(b,{marginBottom:1,children:(0,T.jsxs)(h,{color:w.statusFail,children:["\u2717 ",G]})}),(0,T.jsx)(h,{color:w.primary,bold:!0,children:m}),O==="accessKey"&&(0,T.jsxs)(b,{marginTop:1,children:[(0,T.jsx)(h,{color:w.secondary,children:"Username: "}),(0,T.jsx)(h,{children:H})]}),(0,T.jsxs)(b,{marginTop:1,children:[(0,T.jsxs)(h,{color:w.secondary,children:[x,": "]}),(0,T.jsx)(Ce,{value:ne,onChange:B,onSubmit:D,onCancel:c,masked:R==="text-input-masked"})]}),(0,T.jsx)(se,{bindings:[{keys:"\u21B5",label:"confirm"}],escBackLabel:"back"})]})}let d=$?.id==="profile"?o():$?.options??[];return(0,T.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:w.primary,paddingX:2,paddingY:1,children:[(0,T.jsx)(h,{color:w.primary,bold:!0,children:s}),(0,T.jsx)(b,{marginTop:1,children:(0,T.jsxs)(h,{color:w.secondary,children:[$?.label,":"]})}),(0,T.jsx)(b,{flexDirection:"column",marginTop:1,children:d.map((x,m)=>{let g=m===v,S=g?"\u276F ":" ",P=x.value==="__new__"?w.statusPass:g?w.primary:void 0;return(0,T.jsxs)(h,{color:P,children:[S,x.label]},x.value)})}),(0,T.jsx)(se,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}var Fe=U(ie(),1);import{readFileSync as et,writeFileSync as tt,mkdirSync as rt}from"fs";import{dirname as nt,join as ot}from"path";var it=ot(Ee,"command-history.json"),st=200,we=class{entries;filePath;max;constructor(r=it,n=st){this.filePath=r,this.max=n,this.entries=this._load()}push(r){this.entries.length>0&&this.entries[this.entries.length-1]===r||(this.entries.push(r),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(r){let n=r.toLowerCase(),l=[];for(let u=this.entries.length-1;u>=0;u--)this.entries[u].toLowerCase().includes(n)&&l.push(this.entries[u]);return l}_load(){try{let r=et(this.filePath,"utf-8"),n=JSON.parse(r);return Array.isArray(n)?n:[]}catch{return[]}}_save(){try{rt(nt(this.filePath),{recursive:!0}),tt(this.filePath,JSON.stringify(this.entries)+`
9
+ `)}catch{}}};function Ke(i){let r=(0,Fe.useRef)(null);return r.current||(r.current=new we(i)),r.current}async function ge(i,r,n,l){let u=i.loadBasicAuth(r,n),e=i.loadCredentials(r,n);if(!u&&!e)return l("info","STARTUP_GATE_NO_CREDS","Profile has no credentials",{profile:r,env:n}),{status:"needs_login",profile:r,env:n};let f=le(n),t=async()=>i.loadCredentials(r,n)?.access_token??null,a=new me(f.controllerBaseUrl,t,u,l);l("info","STARTUP_GATE_VALIDATE","Validating credentials with controller",{profile:r,env:n,method:u?"basic":"oauth"});let v=await a.resolve(!0);if(v)return l("info","STARTUP_GATE_VALID","Credentials validated",{profile:r,env:n,username:v.username,org_id:v.org_id}),{status:"authenticated",result:{profile:r,env:n,credentials:e,basicAuth:u,tmsCreds:v,resolver:a}};if(!u&&e){let A=e.refresh_token,C=i.loadClient(r,n)?.client_id;if(A&&C){l("info","STARTUP_GATE_REFRESH","Attempting token refresh",{profile:r,env:n});try{let M=await new Be(n).refreshToken(A,C);if(M.access_token){i.saveCredentials(r,n,{...e,...M,expires_at:Date.now()/1e3+(M.expires_in??3600)});let F=await a.resolve(!0);if(F)return l("info","STARTUP_GATE_REFRESH_OK","Token refreshed and validated",{profile:r,env:n,username:F.username}),{status:"authenticated",result:{profile:r,env:n,credentials:{...e,...M},basicAuth:null,tmsCreds:F,resolver:a}}}l("warn","STARTUP_GATE_REFRESH_INVALID","Refreshed token still invalid",{profile:r,env:n})}catch(R){l("warn","STARTUP_GATE_REFRESH_FAILED","Token refresh failed",{profile:r,env:n,error:R instanceof Error?R.message:String(R)})}}else l("info","STARTUP_GATE_NO_REFRESH","No refresh_token or client_id \u2014 login required",{profile:r,env:n})}return l("info","STARTUP_GATE_INVALID","Credentials invalid \u2014 login required",{profile:r,env:n}),{status:"needs_login",profile:r,env:n}}async function Ue(i,r,n=new de){let l=i.listProfiles();if(r("info","STARTUP_GATE_START","Auth startup gate",{profile_count:l.length}),l.length===0)return r("info","STARTUP_GATE_NONE","No profiles found \u2014 login required"),{status:"needs_login"};if(l.length>1){let f=i.getActiveProfile(),t=i.getDefaultEnv();if(f&&l.some(v=>v.profile===f&&v.env===t)){r("info","STARTUP_GATE_TRY_ACTIVE","Multiple profiles \u2014 trying active first",{activeProfile:f,activeEnv:t});let v=await ge(i,f,t,r);if(v.status==="authenticated")return v;r("info","STARTUP_GATE_ACTIVE_FAILED","Active profile invalid \u2014 showing picker",{activeProfile:f,activeEnv:t})}return r("info","STARTUP_GATE_MULTI","Multiple profiles \u2014 picker required",{profiles:l.map(a=>`${a.profile}/${a.env}`)}),{status:"needs_pick",profiles:l}}let{profile:u,env:e}=l[0];return i.setActiveProfile(u),i.setDefaultEnv(e),ae(i,n,u,e),ge(i,u,e,r)}var E=U(J(),1);function rr({resultRef:i,mode:r="singleshot",loginCompleteRef:n}){let{exit:l}=ye(),u=(0,_.useRef)(new Ae),e=(0,_.useRef)(new de),f=(0,_.useRef)(new Re),t=u.current,a=e.current,v=f.current,A=Ke(),[L,C]=(0,_.useState)(r==="login"?"login":"gate"),[R,M]=(0,_.useState)(null),[ne,F]=(0,_.useState)(null),[O,W]=(0,_.useState)(null),[H,I]=(0,_.useState)(null),[G,j]=(0,_.useState)([]),V=(0,_.useCallback)((s,d,x,m)=>v.log(s,d,x,m),[v]),ce=(0,_.useCallback)((s,d)=>{s?ae(t,a,s,d):a.save({project_id:null,project_name:null,folder_id:null,folder_name:null})},[t,a]),$=(0,_.useCallback)(()=>{r==="login"?(n&&(n.current=!0),l()):C("input")},[r,l,n]),X=(0,_.useCallback)((s,d)=>{let x=ae(t,a,s,d);if(r==="login"){C("ensure-project");return}Ie(x)?$():x.projectId?C("ensure-folder"):C("ensure-project")},[t,a,$,r]);Q((s,d)=>{d.ctrl&&s==="c"&&fe(0,"Ctrl+C exit")});let p=(0,_.useRef)(!1);_.default.useEffect(()=>{p.current||(p.current=!0,r!=="login"&&Ue(t,V).then(s=>{M(s),s.status==="authenticated"?X(s.result.profile,s.result.env):s.status==="needs_pick"?C("pick"):(F(s.profile??null),W(s.env??null),C("login"))}).catch(s=>{I(`Auth check failed: ${s instanceof Error?s.message:String(s)}`)}))},[t,V]);let o=(0,_.useCallback)(s=>{i.current={objective:s},l()},[i,l]),c=(0,_.useCallback)(async(s,d)=>{t.setActiveProfile(s),t.setDefaultEnv(d),(await ge(t,s,d,V)).status==="authenticated"?X(s,d):(F(s),W(d),C("login"))},[t,V,X]),y=(0,_.useCallback)(()=>{let s=t.getActiveProfile(),d=t.getDefaultEnv();if(!s)return null;let x=le(d),m=t.loadBasicAuth(s,d);return new me(x.controllerBaseUrl,async()=>t.loadCredentials(s,d)?.access_token??null,m,V)},[t,V]),D=(0,_.useCallback)(async()=>{let s=y();if(!s)return null;let d=s.cached??await s.resolve();if(!d)return null;let x=le(t.getDefaultEnv()),m=new he(x.tmsBaseUrl,d.username,d.access_key);try{let S=(await m.listProjects()).find(Y=>Y.name==="KaneAI Generated");if(S)return{id:S.project_id,name:S.name};let P=await m.createProject("KaneAI Generated");return{id:P.id,name:P.name}}catch{return null}},[y,t]),B=(0,_.useCallback)(async s=>{let d=y();if(!d)return null;let x=d.cached??await d.resolve();if(!x)return null;let m=le(t.getDefaultEnv()),g=new he(m.tmsBaseUrl,x.username,x.access_key);try{let P=(await g.listFolders(s)).find(K=>K.name==="Untitled");if(P)return{id:P.id,name:P.name};let Y=await g.createFolder(s,"Untitled");return{id:Y.id,name:Y.name}}catch{return null}},[y,t]);if(L==="gate")return(0,E.jsx)(b,{paddingX:1,children:(0,E.jsx)(h,{color:"yellow",children:"Checking authentication..."})});if(H)return(0,E.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,E.jsx)(h,{color:"red",children:H}),(0,E.jsx)(h,{color:"gray",children:"Press Ctrl+C to exit."})]});if(L==="pick"&&R?.status==="needs_pick")return(0,E.jsx)(lt,{profiles:R.profiles,onSelect:c});if(L==="login")return(0,E.jsx)(je,{devMode:process.env.KANE_DEV_MODE==="1",profiles:t.listProfiles(),onBasicLogin:async(s,d,x,m)=>{let{validateBasicAuth:g}=await import("./validate-basic-NIEIKFGP.js");await g(d,x,m),t.saveBasicAuth(s,d,{username:x,access_key:m}),t.setActiveProfile(s),t.setDefaultEnv(d)},onOAuthLogin:async(s,d)=>{let{LoginFlow:x}=await import("./login-flow-NL3LNSP5.js");t.setDefaultEnv(d),t.setActiveProfile(s),await new x(s,d,t).login()},onComplete:(s,d)=>{F(s),W(d),t.setActiveProfile(s),t.setDefaultEnv(d),X(s,d)},onCancel:()=>{fe(0,"Login cancelled")}});if(L==="ensure-project"){let s=t.getActiveProfile()??"default",d=t.getDefaultEnv(),x=()=>{if(r==="login"){C("ensure-folder");return}ae(t,a,s,d).folderId?$():C("ensure-folder")};return(0,E.jsxs)(b,{flexDirection:"column",children:[(0,E.jsx)(b,{paddingX:1,marginBottom:1,children:(0,E.jsx)(h,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,E.jsx)(Pe,{resolver:y(),currentProjectId:a.load().project_id,env:d,onSelect:(m,g)=>{ue(t,a,s,d,{projectId:m,projectName:g}),j(S=>[...S,`\u2713 Project: ${g} (${m})`]),x()},onCancel:async()=>{let m=await D();m&&(ue(t,a,s,d,{projectId:m.id,projectName:m.name}),j(g=>[...g,`\u2713 Default project: ${m.name} (${m.id})`]),x())}})]})}if(L==="ensure-folder"){let s=t.getActiveProfile()??"default",d=t.getDefaultEnv(),x=t.loadProfileConfig(s,d);return(0,E.jsxs)(b,{flexDirection:"column",children:[(0,E.jsx)(b,{paddingX:1,marginBottom:1,children:(0,E.jsx)(h,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,E.jsx)(_e,{resolver:y(),projectId:x?.project_id??"",currentFolderId:a.load().folder_id,env:d,onSelect:(m,g)=>{ue(t,a,s,d,{folderId:m,folderName:g}),j(S=>[...S,`\u2713 Folder: ${g} (${m})`]),$()},onCancel:async()=>{if(!x?.project_id)return;let m=await B(x.project_id);m&&(ue(t,a,s,d,{folderId:m.id,folderName:m.name}),j(g=>[...g,`\u2713 Default folder: ${m.name} (${m.id})`]),$())}})]})}return L==="input"?(0,E.jsxs)(b,{flexDirection:"column",children:[G.length>0&&(0,E.jsx)(b,{flexDirection:"column",paddingX:1,marginBottom:1,children:G.map((s,d)=>(0,E.jsx)(h,{color:"green",children:s},d))}),(0,E.jsx)(Oe,{onSubmit:o,onEscape:()=>fe(0,"User pressed Escape"),history:A,placeholder:"Type an objective..."})]}):(0,E.jsx)(E.Fragment,{})}function lt({profiles:i,onSelect:r}){let[n,l]=(0,_.useState)(0),[u,e]=(0,_.useState)(!1);return Q((f,t)=>{if(!u){if(t.escape){fe(0,"Profile picker cancelled");return}if(t.upArrow&&n>0&&l(a=>a-1),t.downArrow&&n<i.length-1&&l(a=>a+1),t.return){e(!0);let a=i[n];r(a.profile,a.env).catch(()=>e(!1))}}}),(0,E.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,E.jsx)(h,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,E.jsx)(b,{marginTop:1,flexDirection:"column",children:i.map((f,t)=>(0,E.jsxs)(h,{children:[t===n?"\u276F ":" ",(0,E.jsx)(h,{color:t===n?"#ff9500":"white",bold:t===n,children:f.profile}),(0,E.jsxs)(h,{color:"gray",children:[" [",f.env,"]"]})]},`${f.profile}-${f.env}`))}),u&&(0,E.jsx)(b,{marginTop:1,children:(0,E.jsx)(h,{color:"yellow",children:"Validating credentials..."})})]})}export{Ke as a,Oe as b,je as c,ge as d,Ue as e,rr as f};
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ var o=new Set(["UNABLE_TO_VERIFY_LEAF_SIGNATURE","UNABLE_TO_GET_ISSUER_CERT","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","CERT_SIGNATURE_FAILURE","CERT_NOT_YET_VALID","CERT_HAS_EXPIRED","CERT_REVOKED","CERT_REJECTED","CERT_UNTRUSTED","DEPTH_ZERO_SELF_SIGNED_CERT","SELF_SIGNED_CERT_IN_CHAIN","CERT_CHAIN_TOO_LONG","PATH_LENGTH_EXCEEDED","ERR_TLS_CERT_ALTNAME_INVALID","HOSTNAME_MISMATCH","ERR_TLS_HANDSHAKE_TIMEOUT","ERR_SSL_WRONG_VERSION_NUMBER","ERR_SSL_DECRYPTION_FAILED_OR_BAD_RECORD_MAC"]),E="https://github.com/LambdaTest/kane-cli/blob/main/docs/user-guide/troubleshooting.md";function _(t){let e=t;for(let n=0;e&&n<5;n++){if(e instanceof Error&&"code"in e&&typeof e.code=="string"&&o.has(e.code))return e.code;if(e instanceof Error&&e.cause&&e.cause!==e)e=e.cause;else break}return null}function s(t){try{return typeof t=="string"?new URL(t).host:t instanceof URL?t.host:t instanceof Request?new URL(t.url).host:String(t)}catch{return String(t)}}function R(t,e){return[`TLS certificate verification failed (${t}) when connecting to ${s(e)}.`,"","Node uses its bundled Mozilla CA list and doesn't read the OS keychain by default,","so this usually shows up behind corporate endpoint security or TLS-inspecting proxies","where browsers and curl work but Node doesn't.","","Quickest fix \u2014 tell Node to also trust the system keychain (Node 22.19+ / 24.6+):"," export NODE_USE_SYSTEM_CA=1","","Or point at a CA bundle from your IT/security team:"," export NODE_EXTRA_CA_CERTS=/path/to/corp-ca.pem","",`Then re-run the command. Details: ${E}`].join(`
3
+ `)}async function i(t,e){try{return await fetch(t,e)}catch(n){let r=_(n);throw r?new Error(R(r,t),{cause:n}):n}}export{i as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as p}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-3ELBJPHQ.js";import{b as u}from"./chunk-C44QQJR4.js";import{a as l}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var m=n(l(),1);var o=n(l(),1);function c(r,e){let t=(0,o.useRef)(r);t.current=r,(0,o.useEffect)(()=>{if(e===null)return;let i=setInterval(()=>t.current(),e);return()=>clearInterval(i)},[e])}var s=n(p(),1),f=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function I({active:r=!0}){let[e,t]=(0,m.useState)(0);return c(()=>{t(i=>(i+1)%f.length)},r?80:null),(0,s.jsx)(u,{color:a.purple,children:r?f[e]:"\u25CF"})}export{c as a,I as b};
2
+ import{a as p}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-2FCAWRCU.js";import{b as u}from"./chunk-C44QQJR4.js";import{a as l}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var m=n(l(),1);var o=n(l(),1);function c(r,e){let t=(0,o.useRef)(r);t.current=r,(0,o.useEffect)(()=>{if(e===null)return;let i=setInterval(()=>t.current(),e);return()=>clearInterval(i)},[e])}var s=n(p(),1),f=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function I({active:r=!0}){let[e,t]=(0,m.useState)(0);return c(()=>{t(i=>(i+1)%f.length)},r?80:null),(0,s.jsx)(u,{color:a.purple,children:r?f[e]:"\u25CF"})}export{c as a,I as b};
@@ -0,0 +1,11 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{c as j,h as _}from"./chunk-AH4AXJML.js";import{a as x}from"./chunk-L5LI2JF4.js";import{mkdirSync as $,writeFileSync as ve}from"fs";import{join as S}from"path";import{createHash as W}from"crypto";function w(e){if(e==null)return null;if(Array.isArray(e))return e.map(w);if(typeof e=="object"){let t={};for(let n of Object.keys(e).sort()){let r=e[n];r!==void 0&&(t[n]=w(r))}return t}return e}function Y(e){if(e.body.kind!=="objective")throw new Error("stepMd5: only objective steps have an md5; @import rows do not");let t={...e.config??{},optional:e.optional??!1},n=JSON.stringify(w(t));return W("md5").update(e.body.text).update(`
3
+ `).update(n).digest("hex")}function R(e){return Y({index:e.trace[e.trace.length-1].stepIndex,heading:e.trace[e.trace.length-1].heading,body:{kind:"objective",text:e.objective},config:e.parsedConfig,headingLine:1,optional:e.optional})}import{writeFileSync as G,mkdirSync as J,readFileSync as q}from"fs";import{dirname as z,basename as O}from"path";function v(e){let t=e.outPath??j(e.sourcePath);J(z(t),{recursive:!0});let n=[];n.push("---"),n.push(`test: ../${O(e.sourcePath)}`),n.push(`status: ${e.overallStatus}`),n.push(`started: ${e.startedISO}`),n.push(`duration_s: ${e.durationS}`),n.push(`session_id: ${e.sessionId}`),n.push("---",""),n.push(`# ${e.title??O(e.sourcePath)} \u2014 Result`,"");for(let r=0;r<e.rootSteps.length;r++){let s=e.rootSteps[r],o=e.outcomes.find(i=>i.rootStepIndex===r+1);if(n.push(U(s,o)),s.body.kind==="objective"&&o?.stepMd5&&n.push(`md5: ${o.stepMd5}`),o?.status==="failed"&&o.reason&&n.push(`Reason: ${o.reason}`),o?.softFailures?.length)for(let i of o.softFailures){let d=i.reason?`: ${i.reason}`:"";n.push(`\u26A0 optional sub-step ${i.subStepIndex} failed${d}`)}s.body.kind==="objective"&&o?.status!=="skipped"&&n.push(s.body.text),n.push("")}return G(t,n.join(`
4
+ `),"utf8"),t}function U(e,t){if(!t)return`## ${e.heading} (no outcome)`;let n=t.duration_s!=null?`${t.duration_s}s`:"\u2014";if(t.status==="skipped")return`## ${e.heading} \u23ED skipped`;let r=t.softFailed?" (optional)":"";if(t.refKind&&t.status==="passed"){let s=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2713 passed (via @${t.refKind} ${t.refLabel} \u2014 ${t.inlinedCount} inlined steps, ${n}${s})`}if(t.refKind&&t.status==="failed"){let s=t.failedSubStepIndex&&t.failedSubStepIndex.length>0?` \u2014 at sub-step ${t.failedSubStepIndex.join(" \u2192 sub-step ")}`:"",o=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2717 failed${r} (via @${t.refKind} ${t.refLabel}${s}, ${n}${o})`}return t.status==="passed"?`## ${e.heading} \u2713 passed (${n})`:`## ${e.heading} \u2717 failed${r} (${n})`}var V=/^##\s+(.+?)\s+(✓ passed|✗ failed(?:\s+\(optional\))?|⏭ skipped)(?:\s+\((.*)\))?\s*$/,Q=/via\s+@\w+\s+(\S+).*?(?:→\s+(\S+))?\s*$/,X=/^md5:\s+([a-f0-9]{32})\s*$/;function Pe(e){let n=q(e,"utf8").split(`
5
+ `),r="passed";if(n[0]?.trim()==="---")for(let o=1;o<n.length&&n[o].trim()!=="---";o++){let i=/^status:\s+(passed|failed|interrupted)\s*$/.exec(n[o]);i&&(r=i[1])}let s=[];for(let o=0;o<n.length;o++){let i=V.exec(n[o]);if(!i)continue;let d=i[1],l=i[2],c=i[3]??"",p=l.startsWith("\u2713")?"passed":l.startsWith("\u23ED")?"skipped":"failed";if(/via\s+@/.test(c)){let g=Q.exec(c),a=g?.[1]??"",u=g?.[2]??null;s.push({kind:"import",heading:d,status:p,md5:null,importPath:a,helperResultRelPath:u})}else{let g=null;for(let a=o+1;a<n.length&&!/^##\s/.test(n[a]);a++){if(n[a].trim()==="")continue;let u=X.exec(n[a]);if(u){g=u[1];break}break}s.push({kind:"objective",heading:d,status:p,md5:g})}}return{overallStatus:r,steps:s}}import{copyFileSync as Z,existsSync as ee,mkdirSync as te,writeFileSync as se}from"fs";import{join as y}from"path";function D(e){for(let t=0;t<e.totalRunDirs;t++){let n=e.runIndex+t,r=y(e.sessionDir,"runs",String(n)),s=y(e.stagingStepDir,"flows",String(t));te(s,{recursive:!0});let o=[y(r,"run-test","actions.ndjson"),y(r,"actions.ndjson")],i=y(s,"actions.ndjson"),d=!1;for(let l of o)if(ee(l)){Z(l,i),d=!0;break}d||se(i,"")}}import{basename as ne,dirname as re,join as oe}from"path";function F(e){let t=ne(e);return t.endsWith("_test.md")?t.slice(0,-8):t.endsWith(".md")?t.slice(0,-3):t}function ie(e){if(e.length<2)throw new Error("helperOutputDirName requires trace length >= 2 (root + at least one helper)");let t=F(e[0].file),n=F(e[e.length-1].file),r=e.slice(0,-1).map(s=>String(s.stepIndex));return`helper-output-${n}-${t}-${r.join("-")}`}function b(e){if(e.length<2)throw new Error("helperOutputDirPath requires trace length >= 2");let t=e[e.length-1].file;return oe(re(t),ie(e))}import{existsSync as M,mkdirSync as ae,rmSync as le,cpSync as de}from"fs";function E(e,t){M(e)&&(M(t)&&le(t,{recursive:!0,force:!0}),ae(t,{recursive:!0}),de(e,t,{recursive:!0}))}import{readFileSync as Se}from"fs";import{join as ye,relative as be}from"path";var f=class extends Error{constructor(n,r,s){super(`[${r}${s!=null?`:${s}`:""}] ${n}`);this.file=r;this.line=s;this.name="TestMdParseError"}},pe=new Set(["username","access_key","oauth","profile","project_id","folder_id"]),L=new Set(["mode","max_steps","timeout","global_context","local_context","variables","session_context","code_export","code_language","target","chrome_profile","cdp_endpoint","ws_endpoint","headless","on_lock_conflict"]),k=new Set(["optional"]),ce=new Set(["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"]),ue=new Set(["mode","on_lock_conflict"]);function T(e,t){let n=t.split(`
6
+ `),{global:r,bodyStartLine:s}=fe(e,n),{title:o,steps:i}=ge(e,n,s);return{path:e,title:o,global:r,steps:i}}function fe(e,t){if(t[0]?.trim()!=="---")return{global:{},bodyStartLine:0};let n=-1;for(let o=1;o<t.length;o++)if(t[o].trim()==="---"){n=o;break}if(n===-1)throw new f("frontmatter is missing closing '---'",e,1);let r=t.slice(1,n).join(`
7
+ `),s;try{s=x(r)??{}}catch(o){throw new f(`invalid YAML in frontmatter: ${o.message}`,e,1)}if(C(e,s,"frontmatter",1),s.on_lock_conflict!==void 0){let o=s.on_lock_conflict;if(o!=="readonly"&&o!=="fail"&&o!=="wait")throw new f(`on_lock_conflict must be 'readonly' | 'fail' | 'wait', got: ${JSON.stringify(o)}`,e,1)}return B(e,s,1),{global:s,bodyStartLine:n+1}}function ge(e,t,n){let r,s=n;for(;s<t.length&&t[s].trim()==="";)s++;let o=s<t.length?/^#\s+(.+?)\s*$/.exec(t[s]):null;o&&(r=o[1],s++);let i=[];for(let l=s;l<t.length;l++)/^##\s/.test(t[l])&&i.push(l);let d=[];for(let l=0;l<i.length;l++){let c=i[l],p=i[l+1]??t.length,m=t[c].replace(/^##\s+/,"").trim(),g=t.slice(c+1,p),{config:a,body:u,optional:h}=me(e,c+1,g);d.push({index:l+1,heading:m,config:a,body:u,headingLine:c+1,optional:h})}return{title:r,steps:d}}function me(e,t,n){let r=0;for(;r<n.length&&n[r].trim()==="";)r++;let s,o=t;if(r<n.length&&/^```yaml\s*$/.test(n[r])){let a=r;o=t+a,r++;let u=-1;for(;r<n.length;){if(/^```\s*$/.test(n[r])){u=r;break}r++}if(u===-1)throw new f("step-config fenced ```yaml block is not closed",e,o);let h=n.slice(a+1,u).join(`
8
+ `);try{s=x(h)??{}}catch(I){throw new f(`invalid YAML in step config: ${I.message}`,e,o)}r=u+1}let i=he(n.slice(r)),d=i.filter(a=>a.trim()!=="");if(d.length>0&&/^@session\s+/.test(d[0].trim()))throw new f("@session is no longer supported (iteration 3); use @import instead",e,t);let l=/^@import\s+(\S.*)$/,p=i.filter(a=>l.test(a.trim())).length>0;if(p&&d.length!==1)throw new f("step body must be exactly one of prose / @import",e,t);let m=!1,g;if(s){if(C(e,s,p?"step config (ref)":"step config (objective)",o),p||B(e,s,o),typeof s.optional=="boolean")m=s.optional;else if(s.optional!==void 0)throw new f(`step config 'optional' must be boolean: got ${typeof s.optional}`,e,o);let a={...s};delete a.optional,Object.keys(a).length>0&&(g=a)}return p?{body:{kind:"import_ref",path:l.exec(d[0].trim())[1].trim()},optional:m}:{body:{kind:"objective",text:i.join(`
9
+ `).trim()},config:g,optional:m}}function he(e){let t=0,n=e.length;for(;t<n&&e[t].trim()==="";)t++;for(;n>t&&e[n-1].trim()==="";)n--;return e.slice(t,n)}function B(e,t,n){let r=t.variables;if(r==null)return;if(typeof r!="object"||Array.isArray(r))throw new f("variables must be an object map",e,n);let s={};for(let[o,i]of Object.entries(r))if(typeof i=="string")s[o]={value:i};else if(i&&typeof i=="object"&&!Array.isArray(i)&&typeof i.value=="string")s[o]=i;else throw new f(`variable '${o}' must be a string or { value: ... } object`,e,n);t.variables=s}function C(e,t,n,r){for(let s of Object.keys(t)){if(pe.has(s))throw new f(`auth/identity keys are CLI-only: ${s}`,e,r);if(n==="frontmatter"){if(k.has(s))throw new f(`step-only key in frontmatter: ${s}`,e,r);if(!L.has(s))throw new f(`unknown config key: ${s}`,e,r)}else if(n==="step config (objective)"){if(!L.has(s)&&!k.has(s))throw new f(`unknown config key: ${s}`,e,r);if(ce.has(s))throw new f(`chrome config is global-only: ${s}`,e,r);if(ue.has(s))throw new f(`'${s}' is run-level and cannot be set per-step`,e,r)}else if(!k.has(s))throw new f(`step config on @import may only contain 'optional': got ${s}`,e,r)}}function A(e){let t=Re(e.resolvedTest,e.runByStep),n=new Map;for(let r of t.values()){let s=n.get(r.helperFile);s||(s=T(r.helperFile,Se(r.helperFile,"utf8")),n.set(r.helperFile,s));let o=[],i=!1;for(let l of s.steps){let c=l.index,p=r.resolvedSteps.filter(a=>a.trace[r.helperDepth].stepIndex===c);if(p.length===0){o.push({rootStepIndex:c,status:"skipped"});continue}let m=p[0].trace[0].stepIndex,g=e.outcomes.find(a=>a.rootStepIndex===m);if(!g){o.push({rootStepIndex:c,status:"skipped"});continue}if(l.body.kind==="objective"){let a=p[0],u=K(a,g);u==="failed"&&(i=!0);let h={rootStepIndex:c,status:u};u==="passed"&&(h.stepMd5=R(a)),o.push(h)}else{let a=!1,u=!1;for(let N of p){let P=K(N,g);P!=="skipped"&&(u=!0),P==="failed"&&(a=!0)}let h=a?"failed":u?"passed":"skipped";h==="failed"&&(i=!0);let I=b(p[0].trace.slice(0,r.helperDepth+2)),H=be(r.finalDir,I);o.push({rootStepIndex:c,status:h,refKind:"import",refLabel:l.body.path,inlinedCount:p.length,helperResultRelPath:`${H}/Result.md`})}}let d=i?"failed":"passed";v({sourcePath:r.helperFile,title:s.title,rootSteps:s.steps,outcomes:o,overallStatus:d,startedISO:e.startedISO,durationS:0,sessionId:e.sessionId,outPath:ye(r.stagingDir,"Result.md")})}}function Re(e,t){let n=new Map;for(let r of e.steps)if(t.has(r.flatIndex))for(let s=1;s<r.trace.length;s++){let o=r.trace.slice(0,s+1),i=b(o),d=n.get(i);d||(d={stagingDir:`${i}.staging`,finalDir:i,helperFile:o[s].file,helperDepth:s,resolvedSteps:[]},n.set(i,d)),d.resolvedSteps.push(r)}return n}function K(e,t){if(t.status==="passed")return"passed";if(t.status==="skipped")return"skipped";let n=e.trace.slice(1).map(o=>o.stepIndex),r=t.failedSubStepIndex??[],s=Math.min(n.length,r.length);for(let o=0;o<s;o++)if(n[o]!==r[o])return n[o]<r[o]?"passed":"skipped";return n.length===r.length?"failed":n.length<r.length?"passed":"skipped"}function et(e){let t=_(e.resolvedTest.rootPath);$(S(t,".internal"),{recursive:!0});let n=new Map;for(let s of e.stepRunRecords)n.set(s.testmdStepIndex,s);for(let s of e.resolvedTest.steps){let o=n.get(s.flatIndex);if(!o)continue;let i=s.trace[s.trace.length-1].stepIndex,d=R(s),l=d.slice(0,8),c;if(s.trace.length===1)c=S(t,".internal","steps",`${i}-${l}`);else{let p=`${b(s.trace)}.staging`;$(S(p,".internal"),{recursive:!0}),c=S(p,".internal","steps",`${i}-${l}`)}if($(c,{recursive:!0}),D({sessionDir:e.sessionDir,runIndex:o.runIndex,totalRunDirs:o.totalRunDirs,stagingStepDir:c}),s.trace.length===1){let p=s.trace[0].stepIndex,m=e.outcomes.find(g=>g.rootStepIndex===p);m&&m.stepMd5==null&&(m.stepMd5=d)}}A({resolvedTest:e.resolvedTest,outcomes:e.outcomes,startedISO:e.startedISO,sessionId:e.sessionId,runByStep:n}),v({sourcePath:e.resolvedTest.rootPath,title:e.resolvedTest.rootTitle,rootSteps:e.resolvedTest.rootSteps,outcomes:e.outcomes,overallStatus:e.overallStatus,startedISO:e.startedISO,durationS:e.durationS,sessionId:e.sessionId,outPath:S(t,"Result.md")});let r={};if(e.commitId&&(r.commit_id=e.commitId),e.tmsIds.testId&&(r.test_id=e.tmsIds.testId),e.tmsIds.testcaseId&&(r.testcase_id=e.tmsIds.testcaseId),e.tmsIds.projectId&&(r.project_id=e.tmsIds.projectId),e.tmsIds.folderId&&(r.folder_id=e.tmsIds.folderId),e.tmsIds.orgId&&(r.org_id=e.tmsIds.orgId),e.tmsIds.sessionName&&(r.session_name=e.tmsIds.sessionName),ve(S(t,".internal","meta.json"),JSON.stringify(r,null,2)+`
10
+ `,"utf8"),e.codeExportDir){let s=e.codeExportLanguage??"python",o=S(t,`playwright-${s}-code`);try{E(e.codeExportDir,o)}catch(i){process.stderr.write(`warn: codegen copy failed: ${i.message}
11
+ `)}}}export{R as a,v as b,Pe as c,b as d,E as e,T as f,et as g};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as s}from"./chunk-HCBYKLMW.js";import{t as n}from"./chunk-3ELBJPHQ.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
2
+ import{a as s}from"./chunk-HCBYKLMW.js";import{t as n}from"./chunk-2FCAWRCU.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b}from"./chunk-HJ3CHMEM.js";import{a as A}from"./chunk-HCBYKLMW.js";import{k as p,t as i}from"./chunk-3ELBJPHQ.js";import{a as u,b as a,i as S}from"./chunk-C44QQJR4.js";import{a as D}from"./chunk-6YGTRKDT.js";import{e as h}from"./chunk-UR6MHSHU.js";var g=h(D(),1);import{readdirSync as N,mkdirSync as L,statSync as k}from"fs";import{join as P}from"path";var r=h(A(),1);function O(n){try{return N(n).filter(s=>{try{return k(P(n,s)).isDirectory()}catch{return!1}})}catch{return[]}}function E(n,s,m,v){return{name:n,path:s,label:n,isActive:v}}function H({currentPath:n,onSelect:s,onCancel:m}){let l=O(p).map(o=>{let e=P(p,o);return E(o,e,n,e===n)}),d=!n,B=l.length+2,[c,C]=(0,g.useState)(()=>{if(d)return 0;let o=l.findIndex(e=>e.isActive);return o>=0?o+1:0}),[y,T]=(0,g.useState)(!1),[I,x]=(0,g.useState)("");return S((o,e)=>{if(y){if(e.escape){T(!1),x("");return}if(e.return){let t=I.trim();if(t){let f=P(p,t);L(f,{recursive:!0}),s(f),m()}return}if(e.backspace||e.delete){x(t=>t.slice(0,-1));return}o&&!e.ctrl&&!e.meta&&x(t=>t+o);return}if(e.escape){m();return}if(e.upArrow){C(t=>Math.max(0,t-1));return}if(e.downArrow){C(t=>Math.min(B-1,t+1));return}if(e.return){if(c===0){d||s(""),m();return}if(c===l.length+1){L(p,{recursive:!0}),T(!0),x("");return}let t=l[c-1];t&&!t.isActive&&s(t.path),m();return}}),y?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:i.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(a,{color:i.primary,bold:!0,children:"Chrome Profile \u203A New"}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(a,{color:i.secondary,children:"Name: "}),(0,r.jsx)(a,{children:I}),(0,r.jsx)(a,{color:i.dimmed,children:"\u2588"})]}),(0,r.jsx)(b,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:"back"})]}):(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:i.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(a,{color:i.primary,bold:!0,children:"Chrome Profile"}),(0,r.jsxs)(u,{flexDirection:"column",marginTop:1,children:[(0,r.jsxs)(a,{color:d?i.statusPass:c===0?i.primary:i.dim,children:[c===0?"\u276F ":" ","Use temporary (no profile)",d?" \u25CF active":""]}),l.map((o,e)=>{let f=e+1===c,R=f?"\u276F ":" ",w=o.isActive?i.statusPass:f?i.primary:void 0;return(0,r.jsxs)(a,{color:w,children:[R,o.label,o.isActive?" \u25CF active":""]},o.name)}),(0,r.jsxs)(a,{color:c===l.length+1?i.primary:i.dim,children:[c===l.length+1?"\u276F ":" ","+ Create new"]})]}),(0,r.jsx)(b,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}export{O as a,E as b,H as c};
2
+ import{a as b}from"./chunk-XK33C64U.js";import{a as A}from"./chunk-HCBYKLMW.js";import{k as p,t as i}from"./chunk-2FCAWRCU.js";import{a as u,b as a,i as S}from"./chunk-C44QQJR4.js";import{a as D}from"./chunk-6YGTRKDT.js";import{e as h}from"./chunk-UR6MHSHU.js";var g=h(D(),1);import{readdirSync as N,mkdirSync as L,statSync as k}from"fs";import{join as P}from"path";var r=h(A(),1);function O(n){try{return N(n).filter(s=>{try{return k(P(n,s)).isDirectory()}catch{return!1}})}catch{return[]}}function E(n,s,m,v){return{name:n,path:s,label:n,isActive:v}}function H({currentPath:n,onSelect:s,onCancel:m}){let l=O(p).map(o=>{let e=P(p,o);return E(o,e,n,e===n)}),d=!n,B=l.length+2,[c,C]=(0,g.useState)(()=>{if(d)return 0;let o=l.findIndex(e=>e.isActive);return o>=0?o+1:0}),[y,T]=(0,g.useState)(!1),[I,x]=(0,g.useState)("");return S((o,e)=>{if(y){if(e.escape){T(!1),x("");return}if(e.return){let t=I.trim();if(t){let f=P(p,t);L(f,{recursive:!0}),s(f),m()}return}if(e.backspace||e.delete){x(t=>t.slice(0,-1));return}o&&!e.ctrl&&!e.meta&&x(t=>t+o);return}if(e.escape){m();return}if(e.upArrow){C(t=>Math.max(0,t-1));return}if(e.downArrow){C(t=>Math.min(B-1,t+1));return}if(e.return){if(c===0){d||s(""),m();return}if(c===l.length+1){L(p,{recursive:!0}),T(!0),x("");return}let t=l[c-1];t&&!t.isActive&&s(t.path),m();return}}),y?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:i.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(a,{color:i.primary,bold:!0,children:"Chrome Profile \u203A New"}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(a,{color:i.secondary,children:"Name: "}),(0,r.jsx)(a,{children:I}),(0,r.jsx)(a,{color:i.dimmed,children:"\u2588"})]}),(0,r.jsx)(b,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:"back"})]}):(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:i.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(a,{color:i.primary,bold:!0,children:"Chrome Profile"}),(0,r.jsxs)(u,{flexDirection:"column",marginTop:1,children:[(0,r.jsxs)(a,{color:d?i.statusPass:c===0?i.primary:i.dim,children:[c===0?"\u276F ":" ","Use temporary (no profile)",d?" \u25CF active":""]}),l.map((o,e)=>{let f=e+1===c,R=f?"\u276F ":" ",w=o.isActive?i.statusPass:f?i.primary:void 0;return(0,r.jsxs)(a,{color:w,children:[R,o.label,o.isActive?" \u25CF active":""]},o.name)}),(0,r.jsxs)(a,{color:c===l.length+1?i.primary:i.dim,children:[c===l.length+1?"\u276F ":" ","+ Create new"]})]}),(0,r.jsx)(b,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}export{O as a,E as b,H as c};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as u}from"./chunk-KKZRPFWO.js";import{a as n}from"./chunk-V7QXJKX7.js";var h=class extends u{constructor(e,t,s){super(e,{username:t,accessKey:s})}async listProjects(e){let t=[],s=!1;for await(let r of this.listProjectsStream({log:e})){if(e&&!s&&r.projects.length>0){let o=r.projects[0];e("info","PROJECT_SAMPLE","Project list sample",{project_id:o.project_id,name:o.name}),s=!0}t.push(...r.projects)}return t}async*listProjectsStream(e){let t=e?.perPage??200,s=e?.maxPages??100,r=e?.signal,o=e?.log,i=0;for(let a=1;a<=s;a++){if(r?.aborted)return;let c=`${this.baseUrl}/v1/projects?page=${a}&per_page=${t}&sort=created_at`,m=AbortSignal.timeout(15e3),b=r?AbortSignal.any([r,m]):m,d;try{d=await n(c,{method:"GET",headers:this.headers(),signal:b})}catch(l){if(r?.aborted)return;if(a===1)throw l;o?.("warn","PROJECTS_STREAM_PARTIAL","stream stopped mid-page",{page:a,total_loaded:i,error:l instanceof Error?l.message:String(l)}),yield{page:a,projects:[],totalLoaded:i,done:!0};return}if(!d.ok){if(a===1)throw new Error(`listProjects ${d.status}: ${await d.text()}`);o?.("warn","PROJECTS_STREAM_PARTIAL","stream stopped on non-OK response",{page:a,status:d.status,total_loaded:i}),yield{page:a,projects:[],totalLoaded:i,done:!0};return}let g=(await d.json()).data??[];i+=g.length;let p=g.length<t;if(yield{page:a,projects:g,totalLoaded:i,done:p},p)return}o?.("warn","PROJECTS_STREAM_MAXPAGES","max pages reached",{max_pages:s,total_loaded:i}),yield{page:s,projects:[],totalLoaded:i,done:!0}}async getDefaultFolder(e){let t=await n(`${this.baseUrl}/v1/projects/${e}/folder/default`,{method:"GET",headers:this.headers()});if(!t.ok)throw new Error(`Get default folder failed: ${t.status} ${await t.text()}`);return(await t.json()).id}async listFolders(e){let t=await n(`${this.baseUrl}/v1/folder/entity/${e}`,{method:"GET",headers:this.headers()});if(!t.ok)throw new Error(`List folders failed: ${t.status} ${await t.text()}`);return(await t.json()).data??[]}async createProject(e){let t=await n(`${this.baseUrl}/v1/projects`,{method:"POST",headers:{...this.headers(),"Content-Type":"application/json"},body:JSON.stringify({name:e,description:"",tags:[],source:"KTM"})});if(!t.ok)throw new Error(`Create project failed: ${t.status} ${await t.text()}`);return{id:(await t.json()).id,name:e}}async createFolder(e,t){let s=await n(`${this.baseUrl}/v1/folder`,{method:"POST",headers:{...this.headers(),"Content-Type":"application/json"},body:JSON.stringify({folders:[{name:t,description:"",entity_id:e,entity_type:"project"}]})});if(!s.ok)throw new Error(`Create folder failed: ${s.status} ${await s.text()}`);return{id:(await s.json()).id,name:t}}async createAtmTest(e,t){let s=t?`Bearer ${t}`:this.authHeader,r=await n(`${this.baseUrl}/kane-cli/v1/test`,{method:"POST",headers:{Authorization:s,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)});if(!r.ok)throw new Error(`Create ATM test failed: ${r.status} ${await r.text()}`);let o=await r.json();if(!o.test_id)throw new Error("Create ATM test returned no test_id");return o.test_id}async endTest(e,t,s){let r=s?`Bearer ${s}`:this.authHeader,o=new URLSearchParams({commit_id:t.commit_id,time_taken:String(t.time_taken),steps_count:String(t.steps_count),commit_message:t.commit_message}),i={};t.objectives&&t.objectives.length>0&&(i.objectives=t.objectives);let a=await n(`${this.baseUrl}/kane-cli/v1/test/${e}?${o.toString()}`,{method:"DELETE",headers:{Authorization:r,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)});if(!a.ok)throw new Error(`End test failed: ${a.status} ${await a.text()}`);let c=await a.json();return{testcase_id:c.data?.testcase_id??"",test_id:c.data?.test_id??e,project_id:c.data?.project_id??""}}async submitFeedback(e,t){let s=t?`Bearer ${t}`:this.authHeader,r={instruction_id:e.instruction_id,test_id:e.test_id,feedback_type:e.feedback_type,mode:e.mode??"human"};e.details&&(r.details=e.details);let o=await n(`${this.baseUrl}/atm/v1/generative-feedback`,{method:"POST",headers:{Authorization:s,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r)});if(!o.ok)throw new Error(`Submit feedback failed: ${o.status} ${await o.text()}`);return await o.json()}};export{h as a};
@@ -0,0 +1,5 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as f}from"./chunk-PAQGYV5G.js";import{c as h,q as u,r as d}from"./chunk-2FCAWRCU.js";import{a}from"./chunk-V7QXJKX7.js";import{readFileSync as c,writeFileSync as p,mkdirSync as y,readdirSync as l,unlinkSync as s,existsSync as g,chmodSync as v}from"fs";import{join as n,dirname as S}from"path";var m=class{baseDir;profilesDir;configFile;constructor(t=h){this.baseDir=t,this.profilesDir=n(t,"profiles"),this.configFile=n(t,"config.json")}readConfig(){try{return JSON.parse(c(this.configFile,"utf-8"))}catch{return{}}}writeConfig(t){y(this.baseDir,{recursive:!0,mode:448}),p(this.configFile,JSON.stringify(t,null,2)+`
3
+ `),v(this.configFile,384)}getActiveProfile(){return this.readConfig().active_profile??null}setActiveProfile(t){let r=this.readConfig();r.active_profile=t,this.writeConfig(r)}getDefaultEnv(){return this.readConfig().default_env??"prod"}setDefaultEnv(t){let r=this.readConfig();r.default_env=t,this.writeConfig(r)}credentialsPath(t,r){return n(this.profilesDir,t,r,"credentials")}clientPath(t,r){return n(this.profilesDir,t,r,"client.json")}basicAuthPath(t,r){return n(this.profilesDir,t,r,"basic-auth")}profileConfigPath(t,r){return n(this.profilesDir,t,r,"profile-config.json")}saveProfileConfig(t,r,e){let i=this.loadProfileConfig(t,r)??{};this.writeSecure(this.profileConfigPath(t,r),{...i,...e})}loadProfileConfig(t,r){try{return JSON.parse(c(this.profileConfigPath(t,r),"utf-8"))}catch{return null}}writeSecure(t,r){try{y(S(t),{recursive:!0,mode:448}),p(t,JSON.stringify(r,null,2)+`
4
+ `),v(t,384)}catch(e){let i=e instanceof Error?e.message:String(e);process.stderr.write(`[auth] Failed to save credentials: ${i}
5
+ `)}}saveCredentials(t,r,e){this.writeSecure(this.credentialsPath(t,r),e)}loadCredentials(t,r){try{return JSON.parse(c(this.credentialsPath(t,r),"utf-8"))}catch{return null}}saveClient(t,r,e){this.writeSecure(this.clientPath(t,r),e)}loadClient(t,r){try{return JSON.parse(c(this.clientPath(t,r),"utf-8"))}catch{return null}}getActiveCredentials(){let t=this.getActiveProfile();if(!t)return{credentials:null,profile:null,env:null};let r=this.getDefaultEnv();return{credentials:this.loadCredentials(t,r),profile:t,env:r}}saveBasicAuth(t,r,e){this.writeSecure(this.basicAuthPath(t,r),e)}loadBasicAuth(t,r){try{return JSON.parse(c(this.basicAuthPath(t,r),"utf-8"))}catch{return null}}deleteBasicAuth(t,r){try{s(this.basicAuthPath(t,r))}catch{}}resolveAuth(){let t=this.getActiveProfile();if(!t)return null;let r=this.getDefaultEnv(),e=this.loadBasicAuth(t,r);return e?{method:"basic",...e,profile:t,env:r}:this.loadCredentials(t,r)?{method:"oauth",profile:t,env:r}:null}listProfiles(){let t=[];try{for(let r of l(this.profilesDir)){let e=n(this.profilesDir,r);try{for(let i of l(e)){let o=n(e,i),w=g(n(o,"credentials")),k=g(n(o,"client.json")),C=g(n(o,"basic-auth"));(w||k||C)&&t.push({profile:r,env:i})}}catch{}}}catch{}return t}deleteProfile(t,r){try{s(this.credentialsPath(t,r))}catch{}if(this.getActiveProfile()===t){let e=this.readConfig();delete e.active_profile,this.writeConfig(e)}}deleteProfileFull(t,r){if(r){try{s(this.credentialsPath(t,r))}catch{}try{s(this.clientPath(t,r))}catch{}try{s(this.basicAuthPath(t,r))}catch{}try{s(this.profileConfigPath(t,r))}catch{}}else try{let e=n(this.profilesDir,t);for(let i of l(e)){try{s(n(e,i,"credentials"))}catch{}try{s(n(e,i,"client.json"))}catch{}try{s(n(e,i,"basic-auth"))}catch{}try{s(n(e,i,"profile-config.json"))}catch{}}}catch{}}};import{createHash as A,randomBytes as b}from"crypto";var _=class{authBaseUrl;consentUrl;constructor(t="prod"){let r=f(t);this.authBaseUrl=r.authBaseUrl,this.consentUrl=r.consentUrl}static generatePkce(){let t=b(96).toString("base64url").slice(0,128),r=A("sha256").update(t).digest("base64url");return[t,r]}buildAuthorizationUrl(t,r,e,i){let o=new URLSearchParams({response_type:"code",client_id:t,redirect_uri:i,scope:d,code_challenge:r,code_challenge_method:"S256",state:e});return`${this.consentUrl}/oauth2?${o.toString()}`}async registerClient(t){let r=await a(`${this.authBaseUrl}/oauth2/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_name:u,redirect_uris:[t],grant_types:["authorization_code"],response_types:["code"],client_type:"public",application_type:"native"})});if(!r.ok)throw new Error(`DCR failed: ${r.status} ${await r.text()}`);return r.json()}async exchangeCode(t,r,e,i){let o=await a(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"authorization_code",code:t,redirect_uri:i,client_id:r,code_verifier:e})});if(!o.ok)throw new Error(`Token exchange failed: ${o.status}`);return o.json()}async refreshToken(t,r){let e=await a(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:t,client_id:r})});if(!e.ok)throw new Error(`Token refresh failed: ${e.status}`);return e.json()}async revokeToken(t,r,e="access_token"){await a(`${this.authBaseUrl}/oauth2/revoke`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t,token_type_hint:e,client_id:r})})}async validateToken(t){let r=new AbortController,e=setTimeout(()=>r.abort(),1e4);try{let i=await a(`${this.authBaseUrl}/api/user`,{headers:{Authorization:`Bearer ${t}`,Accept:"application/json","Content-Type":"application/json"},signal:r.signal});return clearTimeout(e),i.ok}catch{return clearTimeout(e),!1}}};export{m as a,_ as b};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-JI7KJKG4.js";import"./chunk-KKZRPFWO.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{a as ControllerClient};