@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.
- package/dist/{ChromeProfilePicker-HGRJNQDM.js → ChromeProfilePicker-ETBZA64A.js} +1 -1
- package/dist/{CliFeedbackPrompt-JXEPBJ63.js → CliFeedbackPrompt-S7RZGMBQ.js} +1 -1
- package/dist/{CliUploadProgress-L5VJUXUC.js → CliUploadProgress-TPWX5ARU.js} +1 -1
- package/dist/{ConfigView-LOEAT3HQ.js → ConfigView-BSIS2LOH.js} +1 -1
- package/dist/FolderPicker-7FXP3PIM.js +2 -0
- package/dist/HelpView-MUIOT5UN.js +2 -0
- package/dist/{InfoBox-MK7EEGCH.js → InfoBox-3EY4ARJG.js} +1 -1
- package/dist/{LinksBox-RSWQWL6G.js → LinksBox-UD364LBX.js} +1 -1
- package/dist/{ProfilesView-KCOMTDR5.js → ProfilesView-UOJP2KA2.js} +1 -1
- package/dist/ProjectPicker-5ZPZNRSS.js +2 -0
- package/dist/{SaveSessionPrompt-RGL3LAEB.js → SaveSessionPrompt-D4PETK7B.js} +1 -1
- package/dist/SingleShotApp-N4AGSAPW.js +2 -0
- package/dist/{SummaryBox-5YPKUIHB.js → SummaryBox-L4ZXY4S4.js} +1 -1
- package/dist/{TestMdRunView-QS7IUANM.js → TestMdRunView-YD3Z6MCR.js} +1 -1
- package/dist/{WhoamiView-GL3HZQ4Q.js → WhoamiView-ZZUFXKDU.js} +1 -1
- package/dist/changelog-H2RXH4LH.js +4 -0
- package/dist/{chunk-3ELBJPHQ.js → chunk-2FCAWRCU.js} +1 -1
- package/dist/{chunk-L4GAZTAQ.js → chunk-3UDKGPAS.js} +1 -1
- package/dist/chunk-3YGQYJ3D.js +2 -0
- package/dist/chunk-477FDDDW.js +13 -0
- package/dist/{chunk-XMK4GYI7.js → chunk-4GQZBMTW.js} +1 -1
- package/dist/{chunk-THNGNS36.js → chunk-7ECMUWV2.js} +1 -1
- package/dist/chunk-7JB4RPI2.js +2 -0
- package/dist/chunk-AH4AXJML.js +2 -0
- package/dist/{chunk-XP5SMOND.js → chunk-AH7HH3OE.js} +1 -1
- package/dist/chunk-AMCAQCEV.js +17 -0
- package/dist/{chunk-ZLQ7YLXO.js → chunk-BSHGW3QM.js} +1 -1
- package/dist/{chunk-NOH6RERF.js → chunk-E7QWDV7M.js} +1 -1
- package/dist/chunk-EZJNX4VE.js +5 -0
- package/dist/chunk-FMMDLDDI.js +2 -0
- package/dist/chunk-GCAHPH2E.js +2 -0
- package/dist/{chunk-34DK2AUH.js → chunk-HXIGYD2T.js} +1 -1
- package/dist/chunk-JI7KJKG4.js +2 -0
- package/dist/{chunk-KVDOQY2Q.js → chunk-KGZATJQN.js} +1 -1
- package/dist/chunk-KKZRPFWO.js +2 -0
- package/dist/chunk-L5LI2JF4.js +38 -0
- package/dist/{chunk-ZX3PMRMO.js → chunk-MVX3N7GI.js} +1 -1
- package/dist/{chunk-BR2S57O2.js → chunk-O22K3JLR.js} +1 -1
- package/dist/{chunk-VUBZQUP4.js → chunk-OQ64GUQE.js} +1 -1
- package/dist/chunk-OQZG3V6B.js +2 -0
- package/dist/{chunk-TK7ZJ7YX.js → chunk-PAQGYV5G.js} +1 -1
- package/dist/{chunk-L4OZRHUT.js → chunk-RBED7RVV.js} +1 -1
- package/dist/{chunk-3QD3LA72.js → chunk-RDJPZQBU.js} +1 -1
- package/dist/{chunk-QO6VFDI4.js → chunk-RVQBAKOK.js} +1 -1
- package/dist/{chunk-L2HVRWIT.js → chunk-UFNKCPUB.js} +11 -11
- package/dist/chunk-V4S5H6O2.js +9 -0
- package/dist/chunk-V7QXJKX7.js +3 -0
- package/dist/{chunk-RXMOIIQD.js → chunk-WCRLZETG.js} +1 -1
- package/dist/chunk-X7VI7KK3.js +11 -0
- package/dist/{chunk-HJ3CHMEM.js → chunk-XK33C64U.js} +1 -1
- package/dist/{chunk-MEB2KLWF.js → chunk-XUDEM7I6.js} +1 -1
- package/dist/chunk-YZTCCQHR.js +2 -0
- package/dist/chunk-ZB72T6HB.js +5 -0
- package/dist/controller-client-OMKEBP4B.js +2 -0
- package/dist/index.js +23 -23
- package/dist/logging-RMC6R23F.js +2 -0
- package/dist/login-flow-NL3LNSP5.js +2 -0
- package/dist/persist-recorded-session-GG732QRB.js +3 -0
- package/dist/pipeline-EUZIM2ZO.js +2 -0
- package/dist/{recording-banner-IDLY2FM6.js → recording-banner-LAAAMKIM.js} +1 -1
- package/dist/resolver-F6HCOZOX.js +2 -0
- package/dist/run-test-md-IAEJXIVK.js +65 -0
- package/dist/testmd-actions-5O7F22EC.js +20 -0
- package/dist/tms-client-XOARLBEP.js +2 -0
- package/dist/{validate-basic-27BIMJ2F.js → validate-basic-NIEIKFGP.js} +1 -1
- package/dist/version-check-WHWTPX6C.js +2 -0
- package/package.json +5 -5
- package/dist/FolderPicker-I6JTRNAU.js +0 -2
- package/dist/HelpView-UEUKYHFR.js +0 -2
- package/dist/ProjectPicker-AX6H5MX3.js +0 -2
- package/dist/SingleShotApp-YTFAGVZD.js +0 -2
- package/dist/changelog-CLQ7HCB3.js +0 -4
- package/dist/chunk-BM4COXQU.js +0 -53
- package/dist/chunk-BQKDPI6L.js +0 -2
- package/dist/chunk-DUR6AFYA.js +0 -5
- package/dist/chunk-DXKKUGFG.js +0 -2
- package/dist/chunk-F6HEB4PA.js +0 -2
- package/dist/chunk-FFO5XXKV.js +0 -4
- package/dist/chunk-GTFULP6B.js +0 -13
- package/dist/chunk-K7MSPKEM.js +0 -5
- package/dist/chunk-KULEBWMB.js +0 -2
- package/dist/chunk-L5Y2GUO6.js +0 -2
- package/dist/chunk-NZSHFIZX.js +0 -3
- package/dist/chunk-PWGEMRBD.js +0 -2
- package/dist/chunk-SLA75N5B.js +0 -2
- package/dist/chunk-WAFO4MT4.js +0 -20
- package/dist/chunk-YUUZDFT7.js +0 -2
- package/dist/controller-client-7BIK5FYL.js +0 -2
- package/dist/logging-GG23EW5G.js +0 -2
- package/dist/login-flow-ZUZUZIXD.js +0 -2
- package/dist/persist-recorded-session-ZXKA4H7E.js +0 -5
- package/dist/pipeline-BVH3R7YP.js +0 -2
- package/dist/resolver-QLDOAIXU.js +0 -2
- package/dist/run-test-md-UPAR3DQY.js +0 -54
- package/dist/testmd-actions-YYFFNNIH.js +0 -20
- package/dist/tms-client-CTH4NVFM.js +0 -2
- 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-
|
|
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-
|
|
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-
|
|
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};
|