@testmuai/kane-cli 0.3.0 → 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-U2SEKNEQ.js → ChromeProfilePicker-ETBZA64A.js} +1 -1
  2. package/dist/{CliFeedbackPrompt-EADRWA76.js → CliFeedbackPrompt-S7RZGMBQ.js} +1 -1
  3. package/dist/{CliUploadProgress-DV34KLES.js → CliUploadProgress-TPWX5ARU.js} +1 -1
  4. package/dist/{ConfigView-32U22T7S.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-QNOWEKMD.js → InfoBox-3EY4ARJG.js} +1 -1
  8. package/dist/{LinksBox-UCNEPFJD.js → LinksBox-UD364LBX.js} +1 -1
  9. package/dist/{ProfilesView-P6JL2BTH.js → ProfilesView-UOJP2KA2.js} +1 -1
  10. package/dist/ProjectPicker-5ZPZNRSS.js +2 -0
  11. package/dist/{SaveSessionPrompt-DIZX3M6X.js → SaveSessionPrompt-D4PETK7B.js} +1 -1
  12. package/dist/SingleShotApp-N4AGSAPW.js +2 -0
  13. package/dist/{SummaryBox-72NGQYS7.js → SummaryBox-L4ZXY4S4.js} +1 -1
  14. package/dist/{TestMdRunView-DD6YI7CY.js → TestMdRunView-YD3Z6MCR.js} +1 -1
  15. package/dist/{WhoamiView-LSMM65UI.js → WhoamiView-ZZUFXKDU.js} +1 -1
  16. package/dist/changelog-H2RXH4LH.js +4 -0
  17. package/dist/{chunk-JYQO6G7F.js → chunk-2FCAWRCU.js} +1 -1
  18. package/dist/{chunk-MBQIYYLD.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-JPKW7SRP.js → chunk-4GQZBMTW.js} +1 -1
  22. package/dist/{chunk-XJ7OYQ7M.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-I4AD2L5R.js → chunk-AH7HH3OE.js} +1 -1
  26. package/dist/chunk-AMCAQCEV.js +17 -0
  27. package/dist/{chunk-G7I7EAV6.js → chunk-BSHGW3QM.js} +1 -1
  28. package/dist/{chunk-5KH7U63E.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-CFFWCE27.js → chunk-HXIGYD2T.js} +1 -1
  33. package/dist/chunk-JI7KJKG4.js +2 -0
  34. package/dist/{chunk-FJ6L63SP.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-4SNZTVJB.js → chunk-MVX3N7GI.js} +1 -1
  38. package/dist/{chunk-Y5RLPELZ.js → chunk-O22K3JLR.js} +1 -1
  39. package/dist/{chunk-OMYNAZW4.js → chunk-OQ64GUQE.js} +1 -1
  40. package/dist/chunk-OQZG3V6B.js +2 -0
  41. package/dist/{chunk-NLYBR5FP.js → chunk-PAQGYV5G.js} +1 -1
  42. package/dist/{chunk-XW32PCGX.js → chunk-RBED7RVV.js} +1 -1
  43. package/dist/{chunk-75SVKFKD.js → chunk-RDJPZQBU.js} +1 -1
  44. package/dist/{chunk-Q6INY5JA.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-MH26PIS4.js → chunk-WCRLZETG.js} +1 -1
  49. package/dist/chunk-X7VI7KK3.js +11 -0
  50. package/dist/{chunk-BSQVYLV7.js → chunk-XK33C64U.js} +1 -1
  51. package/dist/{chunk-445V6RTR.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-ABFX6FI4.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-TW5CQAL3.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-C4ANRIT7.js +0 -2
  69. package/dist/HelpView-PUE5XHCB.js +0 -2
  70. package/dist/ProjectPicker-XEZIFGJ6.js +0 -2
  71. package/dist/SingleShotApp-RLZN2PVQ.js +0 -2
  72. package/dist/changelog-P7XOVZ6M.js +0 -4
  73. package/dist/chunk-66CVM7JL.js +0 -53
  74. package/dist/chunk-7VX5H5MK.js +0 -5
  75. package/dist/chunk-BAKBO5YA.js +0 -2
  76. package/dist/chunk-DXKKUGFG.js +0 -2
  77. package/dist/chunk-FFO5XXKV.js +0 -4
  78. package/dist/chunk-GTFULP6B.js +0 -13
  79. package/dist/chunk-L5Y2GUO6.js +0 -2
  80. package/dist/chunk-MNAVXLW4.js +0 -20
  81. package/dist/chunk-OU2XDMNW.js +0 -2
  82. package/dist/chunk-PINXGH2T.js +0 -3
  83. package/dist/chunk-PWGEMRBD.js +0 -2
  84. package/dist/chunk-QV2VR72Q.js +0 -5
  85. package/dist/chunk-SLA75N5B.js +0 -2
  86. package/dist/chunk-YUUZDFT7.js +0 -2
  87. package/dist/chunk-YV5KDJLP.js +0 -2
  88. package/dist/controller-client-7BIK5FYL.js +0 -2
  89. package/dist/logging-NPMKABVV.js +0 -2
  90. package/dist/login-flow-QCYF5347.js +0 -2
  91. package/dist/persist-recorded-session-53YCJK7U.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-C63UB65T.js +0 -54
  95. package/dist/testmd-actions-GPYFEL7F.js +0 -20
  96. package/dist/tms-client-CTH4NVFM.js +0 -2
  97. package/dist/version-check-6XDFGFCG.js +0 -2
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b}from"./chunk-3YGQYJ3D.js";import"./chunk-2FCAWRCU.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{a as RemoteLogger,b as createRemoteLogger};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-O22K3JLR.js";import"./chunk-ZB72T6HB.js";import"./chunk-PAQGYV5G.js";import"./chunk-2FCAWRCU.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as h}from"./chunk-OQZG3V6B.js";import{g as S}from"./chunk-X7VI7KK3.js";import{a as m,b as I,j as _}from"./chunk-AH4AXJML.js";import"./chunk-L5LI2JF4.js";import{a as f}from"./chunk-KGZATJQN.js";import"./chunk-2FCAWRCU.js";import"./chunk-UR6MHSHU.js";function y(e,d={}){e.flushRecorder();let o=e.recorder?.lastWrittenPath??null;if(!o)return e.log("info","PERSIST_SKIPPED","No recorded path \u2014 recorder.flush no-op",{reason:e.sessionName?"recorder_flush_failed":"no_session_name",session_name:e.sessionName}),null;let p;try{p=h(o)}catch(t){throw e.log("error","PERSIST_RESOLVE_FAILED","resolveTestMd threw",{error:t.message,recorded_path:o}),t}let i=e.getRunsAsStepRecords(),u=e.getFlows(),a=[],c=0;for(let t=0;t<i.length;t++){let r=i[t],l=u.slice(c,c+r.totalRunDirs);c+=r.totalRunDirs;let g=l.find(n=>n.status==="failed"||n.status==="error"),R=g?"failed":l.length===0?"skipped":"passed";a.push({rootStepIndex:t+1,status:R,duration_s:l.reduce((n,D)=>n+(D.duration??0),0),reason:g?.reason})}let P=a.some(t=>t.status==="failed")?"failed":"passed",E=new f().load().code_export?.language==="javascript"?"javascript":"python",s=I(o);e.log("info","PERSIST_START","Building staging dir",{recorded_path:o,output_dir:s,session_dir:e.sessionDir,step_count:i.length,flow_count:u.length});try{S({resolvedTest:p,sessionDir:e.sessionDir,stepRunRecords:i,outcomes:a,overallStatus:P,startedISO:e.startedAt,durationS:a.reduce((t,r)=>t+(r.duration_s??0),0),sessionId:e.sessionId,commitId:e.sessionId,tmsIds:{testId:e.testId??void 0,testcaseId:d.testcaseId,projectId:d.projectId,folderId:d.folderId,orgId:d.orgId??e.orgId??void 0,sessionName:e.sessionName??m(o)},codeExportDir:d.codeExportDir,codeExportLanguage:E}),e.log("info","PERSIST_STAGING_OK","Staging dir built",{output_dir:s}),_(s),e.log("info","PERSIST_OK","Persist complete",{output_dir:s})}catch(t){let r=t;e.log("error","PERSIST_FAILED","staging build / atomic replace failed",{error:r.message,stack:r.stack,output_dir:s}),process.stderr.write(`[persist] staging build / atomic replace failed: ${r.message}
3
+ `)}return{recordedTestPath:o,outputDir:s}}export{y as persistRecordedSession};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-UFNKCPUB.js";import"./chunk-MDBXYXSC.js";import"./chunk-JI7KJKG4.js";import"./chunk-YZTCCQHR.js";import"./chunk-KKZRPFWO.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{a as UploadPipeline};
@@ -1,3 +1,3 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
2
  import{a as n}from"./chunk-3MSXQU2C.js";import"./chunk-UR6MHSHU.js";function p(t){let s=t.sessionName!==null,e={type:"recording_state",enabled:!0,session_id:t.sessionId,persist:s};return t.sessionName&&(e.session_name=t.sessionName),t.testPath&&(e.test_path=t.testPath),t.outputPath&&(e.output_path=t.outputPath),e}async function g(t){if(t.isAgent){process.stdout.write(JSON.stringify(p(t))+`
3
- `);return}let s=(await import("./react-QWOAB3TB.js")).default,{render:e,useApp:a}=await import("./build-JIKYOZUH.js"),{useEffect:o}=s,{InfoBox:r}=await import("./InfoBox-QNOWEKMD.js"),u=t.sessionName?[{label:"session",value:t.sessionName},{label:"test",value:n(t.testPath??"")},{label:"output",value:n(t.outputPath??"")}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];function l(){let{exit:i}=a();return o(()=>{let c=setTimeout(()=>i(),50);return()=>clearTimeout(c)},[i]),s.createElement(r,{title:"Recording",titleColor:"#ff9500",rows:u})}await e(s.createElement(l),{stdout:process.stderr}).waitUntilExit()}export{p as buildRecordingStateEvent,g as printRecordingBanner};
3
+ `);return}let s=(await import("./react-QWOAB3TB.js")).default,{render:e,useApp:a}=await import("./build-JIKYOZUH.js"),{useEffect:o}=s,{InfoBox:r}=await import("./InfoBox-3EY4ARJG.js"),u=t.sessionName?[{label:"session",value:t.sessionName},{label:"test",value:n(t.testPath??"")},{label:"output",value:n(t.outputPath??"")}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];function l(){let{exit:i}=a();return o(()=>{let c=setTimeout(()=>i(),50);return()=>clearTimeout(c)},[i]),s.createElement(r,{title:"Recording",titleColor:"#ff9500",rows:u})}await e(s.createElement(l),{stdout:process.stderr}).waitUntilExit()}export{p as buildRecordingStateEvent,g as printRecordingBanner};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-GCAHPH2E.js";import"./chunk-JI7KJKG4.js";import"./chunk-KKZRPFWO.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{a as AuthResolver};
@@ -0,0 +1,65 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as le,b as Ht}from"./chunk-C5UNZ6ZY.js";import{a as qt}from"./chunk-E7QWDV7M.js";import{a as Nt}from"./chunk-OQZG3V6B.js";import{a as pt,b as ft,f as Rt,g as Me,h as $e,i as yt,j as St,k as It,l as Re,m as vt,n as kt,o as _t,p as Ct,q as Et,r as At,s as Ke,t as Tt,u as Dt,v as jt,w as Lt,x as Ut,y as $t,z as Vt}from"./chunk-477FDDDW.js";import{b as Ne}from"./chunk-EZJNX4VE.js";import{b as Ge,c as Mt,d as Bt}from"./chunk-FMMDLDDI.js";import{a as bt}from"./chunk-UFNKCPUB.js";import"./chunk-MDBXYXSC.js";import{c as wt}from"./chunk-S3DAAAE5.js";import{a as Ft,b as Ve,c as qe,d as He,e as ze}from"./chunk-X7VI7KK3.js";import{a as be,b as xt,c as Pt,e as ye,f as Be,i as Ot}from"./chunk-AH4AXJML.js";import{a as ut}from"./chunk-AMCAQCEV.js";import{a as gt,c as Ue,d as W,e as Z}from"./chunk-G7VF5SDK.js";import"./chunk-L5LI2JF4.js";import{a as mt}from"./chunk-KGZATJQN.js";import"./chunk-VE3SUJMA.js";import{a as dt}from"./chunk-ZB72T6HB.js";import{a as Q}from"./chunk-PAQGYV5G.js";import"./chunk-GCAHPH2E.js";import{a as ht}from"./chunk-JI7KJKG4.js";import"./chunk-E47GFYXA.js";import{c as Le,h as re}from"./chunk-2FCAWRCU.js";import"./chunk-YZTCCQHR.js";import"./chunk-KKZRPFWO.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";import{resolve as Er,join as ve,basename as Ar}from"path";import{existsSync as Xe,readFileSync as xr}from"fs";import{existsSync as Ye}from"fs";import{join as Se,basename as zt}from"path";function Kt(e,t){if(!t||!Ye(t))return e.steps.map(()=>({kind:"author",reason:"no-result-md"}));let r=qe(t),s=[],o=new Set,f=new Map;function i(l){let y=He(l),k=Se(y,"Result.md");if(f.has(k))return f.get(k);let v=Ye(k)?qe(k):null;return f.set(k,v),v}function b(l){for(let y=1;y<l.trace.length;y++){let v=l.trace[y-1].file===e.rootPath?r:i(l.trace.slice(0,y));if(!v)return{kind:"author",reason:"no-result-md"};let O=l.trace[y-1].stepIndex,p=v.steps[O-1];if(!p)return{kind:"author",reason:"no-result-md"};if(p.kind!=="import")return{kind:"author",reason:"structure-mismatch"};let _=zt(p.importPath),w=zt(l.trace[y].file);if(_!==w)return{kind:"author",reason:"structure-mismatch"};if(p.status!=="passed")return{kind:"author",reason:"recorded-failed"}}return null}for(let l of e.steps){let y=l.trace[l.trace.length-1].file,k=l.trace[l.trace.length-1].stepIndex,v=o.has(y);for(let w=0;w<l.trace.length-1&&!v;w++)o.has(l.trace[w].file)&&(v=!0);if(v){s.push({kind:"author",reason:"downstream-of-divergence"});continue}let O=b(l);if(O){s.push(O);for(let w=0;w<l.trace.length;w++)o.add(l.trace[w].file);continue}let p=y===e.rootPath?r:i(l.trace),_=wr(l,p,k);if(s.push(_),_.kind==="author"){o.add(y);for(let w=0;w<l.trace.length-1;w++)o.add(l.trace[w].file)}}return s}function wr(e,t,r){if(!t)return{kind:"author",reason:"no-result-md"};let s=t.steps[r-1];if(!s)return{kind:"author",reason:"no-result-md"};if(s.kind!=="objective")return{kind:"author",reason:"structure-mismatch"};if(s.status!=="passed")return{kind:"author",reason:"recorded-failed"};let o=Ft(e);if(o!==s.md5)return{kind:"author",reason:"md5-mismatch"};let f=e.trace.length===1?Ot(e.trace[0].file,r,o.slice(0,8)):Se(He(e.trace),".internal","steps",`${r}-${o.slice(0,8)}`),i=Se(f,"flows","0","actions.ndjson");return Ye(i)?{kind:"replay",recordingDir:f}:{kind:"author",reason:"missing-recording"}}function Gt(e){return e.some(t=>t.kind==="author")}function we(e){for(let t=0;t<e.length;t++)if(e[t].kind==="author")return t;return e.length}function Yt(e){return Se(e.recordingDir,"flows","0","actions.ndjson")}function Wt(e,t){if(process.env.KANE_REPLAY_TRACE==="1")for(let r=0;r<e.steps.length;r++){let s=e.steps[r],o=t[r],f=" ".repeat(s.trace.length-1),i=`step ${s.flatIndex}`;o.kind==="replay"?process.stderr.write(`[replay-trace] ${f}${i}: REPLAY (would skip; v1 always authors)
3
+ `):process.stderr.write(`[replay-trace] ${f}${i}: AUTHOR (${o.reason})
4
+ `)}}function ne(e){process.env.KANE_REPLAY_TRACE==="1"&&process.stderr.write(e)}function Zt(e,t){let r=e===0?"(none)":`0..${e-1}`,s=e>=t?"(none)":`${e}..${t-1}`;ne(`[replay-trace] phase: replay ${r}, author ${s}
5
+ `)}function Jt(e,t){ne(`[replay-trace] step ${e}: REPLAY ${t==="ok"?"OK":"FAILED"}
6
+ `)}function Qt(e,t,r){ne(`[replay-trace] shrink ${e}/${t} \u2192 new boundary ${r}
7
+ `)}function Xt(e,t){ne(`[replay-trace] complete-reauthor (${e} shrinks exhausted of ${t})
8
+ `)}function er(){ne(`[replay-trace] force-author (--author) \u2014 walker bypassed
9
+ `)}function tr(e){ne(`[replay-trace] cancelled at step ${e}
10
+ `)}import{join as Ir}from"path";function We(e){let t={objective:e.step.objective,model:"v16-alpha",width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,stream:!0,mode:"replay",replay:{recording_path:Yt(e.decision),step_label:e.step.objective},screenshot_dir:Ir(e.sessionDir,"runs",String(e.runIndex)),run_id:"run",test_id:"test"};return e.forceNavigateUrl&&(t.url=e.forceNavigateUrl),e.chrome.wsEndpoint?t.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(t.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(t.username=e.auth.basicAuth.username,t.access_key=e.auth.basicAuth.access_key):e.auth.token&&(t.auth={type:"bearer",token:e.auth.token}),e.variables&&Object.keys(e.variables).length>0&&(t.variables=e.variables),e.sessionContext&&(t.session_context=e.sessionContext),t}async function rr(e){let t=we(e.decisions),r=0,s=!1;for(;;){let o=e.session.snapshot(),f=e.accumulator.snapshot(),i=await e.runReplayPhase(t);if(i.cancelled)return s=!0,tr(i.failedAt??0),{authorBoundary:t,cancelledInPhase:s,shrinkCount:r};if(i.failedAt===null)return{authorBoundary:t,cancelledInPhase:s,shrinkCount:r};let b=Ht({failedAt:i.failedAt,shrinkCount:r,hasRetry:e.hasRetry,maxShrinks:e.maxShrinks});if(b.kind==="fail")return{authorBoundary:-1,cancelledInPhase:s,shrinkCount:r};if(e.acquireLockIfNeeded&&!await e.acquireLockIfNeeded())return{authorBoundary:-1,cancelledInPhase:s,shrinkCount:r};if(e.session.rollback(o),e.accumulator.rollback(f),b.kind==="complete-reauthor")return Xt(r+1,e.maxShrinks),{authorBoundary:0,cancelledInPhase:s,shrinkCount:r};r++,Qt(r,le.maxShrinks,b.newAuthorBoundary),t=b.newAuthorBoundary}}var vr=60*1e3,nr="lock-heartbeat",oe=null;function Ze(e){oe===null&&(oe=setInterval(async()=>{let t=await Tt({baseUrl:e.baseUrl,testId:e.testId,auth:e.auth});if(!t.ok){let r=t.expired?"session expired":t.message;process.stderr.write(`[lock] heartbeat failed: ${r}; continuing run
11
+ `)}},vr),W(nr,()=>{oe!==null&&(clearInterval(oe),oe=null)}))}function Je(){oe!==null&&Z(nr,"stopped")}var Ie=class{constructor(t){this.resolved=t;this.outcomes=t.rootSteps.map(r=>({rootStepIndex:r.index,status:"skipped"}))}outcomes;skipRoot=null;overallHalted=!1;shouldRunFlatStep(t){if(this.overallHalted)return!1;let r=t.trace[0].stepIndex;return!(this.skipRoot!==null&&r===this.skipRoot)}recordStep(t,r){let s=t.trace[0].stepIndex,o=this.outcomes.find(l=>l.rootStepIndex===s),f=this.resolved.rootSteps.find(l=>l.index===s),i=f.body.kind!=="objective";return i&&(o.refKind="import",o.refLabel=f.body.path,o.inlinedCount=(o.inlinedCount??0)+1,o.duration_s=(o.duration_s??0)+r.duration_s),r.status==="passed"?(i?o.status!=="failed"&&(o.status="passed"):(o.status="passed",o.duration_s=r.duration_s),{continueOverall:!0}):t.optional?(o.softFailures=o.softFailures??[],o.softFailures.push({subStepIndex:t.trace[t.trace.length-1].stepIndex,reason:r.reason}),{continueOverall:!0}):(o.status="failed",o.duration_s=i?o.duration_s:r.duration_s,o.failedSubStepIndex=i?t.trace.slice(1).map(l=>l.stepIndex):void 0,o.reason=r.reason,this.skipRoot=s,f.optional??!1?(o.softFailed=!0,{continueOverall:!0}):(this.overallHalted=!0,{continueOverall:!1}))}snapshotOutcomes(){return[...this.outcomes]}snapshot(){return{outcomes:this.outcomes.map(t=>({...t,softFailures:t.softFailures?[...t.softFailures]:void 0})),skipRoot:this.skipRoot,overallHalted:this.overallHalted}}rollback(t){this.outcomes=t.outcomes.map(r=>({...r,softFailures:r.softFailures?[...r.softFailures]:void 0})),this.skipRoot=t.skipRoot,this.overallHalted=t.overallHalted}finalize(){let t=this.outcomes.some(s=>s.status==="failed"&&!s.softFailed)?"failed":"passed",r=this.outcomes.reduce((s,o)=>s+(o.duration_s??0),0);return{overallStatus:t,outcomes:this.outcomes,totalDurationS:r}}};import{writeFileSync as kr,mkdirSync as _r}from"fs";import{dirname as or}from"path";function Qe(e){let t=ye(e.sourcePath);try{_r(or(t),{recursive:!0})}catch(s){return process.stderr.write(`
12
+ \u26A0 Failed to create output directory.
13
+ ${s.message}
14
+ Path: ${or(t)}
15
+
16
+ `),t}let r={commit_id:e.commitId};e.testId!==void 0&&(r.test_id=e.testId),e.testcaseId!==void 0&&(r.testcase_id=e.testcaseId),e.projectId!==void 0&&(r.project_id=e.projectId),e.folderId!==void 0&&(r.folder_id=e.folderId),e.orgId!==void 0&&(r.org_id=e.orgId),e.sessionName!==void 0&&(r.session_name=e.sessionName);try{kr(t,JSON.stringify(r,null,2)+`
17
+ `,"utf8")}catch(s){process.stderr.write(`
18
+ \u26A0 Failed to write meta.json.
19
+ ${s.message}
20
+ Path: ${t}
21
+
22
+ `)}return t}var Cr=()=>{};async function sr(e,t,r){let s=t.log??Cr,o=e.session.testId??null,f=null,i=null,b=null;if(!r.localMode&&t.performUpload)try{f=await t.performUpload(),f?.success&&(f.testId&&(o=f.testId),f.testcaseId&&e.session.setTestcaseId(f.testcaseId))}catch(l){s("error","FINALIZE_UPLOAD_ERROR","Upload pipeline threw",{error:String(l)})}if(t.renderFeedbackPrompt)try{i=await t.renderFeedbackPrompt(),i&&o&&t.submitFeedback&&t.submitFeedback(o,i).catch(l=>{s("error","FINALIZE_FEEDBACK_SUBMIT_ERROR","Feedback submit failed",{error:String(l)})})}catch(l){s("error","FINALIZE_FEEDBACK_RENDER_ERROR","Feedback prompt threw",{error:String(l)})}if(e.session.flushRecorder(),r.skipLocalWrites)s("info","FINALIZE_SKIP_LOCAL_WRITES","Skipping local writes (testmd flow handles via staging)");else if(r.sourcePath&&r.rootSteps&&r.outcomes){try{b=Ve({sourcePath:r.sourcePath,title:r.title,rootSteps:r.rootSteps,outcomes:r.outcomes,overallStatus:r.overallStatus,startedISO:r.startedISO,durationS:r.durationS,sessionId:e.session.sessionId})}catch(l){s("error","FINALIZE_RESULT_MD_ERROR","_Result.md write failed",{error:String(l)})}try{Qe({sourcePath:r.sourcePath,commitId:e.session.sessionId,testId:o??void 0,testcaseId:e.session.testcaseId??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,orgId:e.session.orgId??void 0,sessionName:e.session.sessionName??be(r.sourcePath)})}catch(l){s("error","FINALIZE_META_WRITE_ERROR","meta.json write failed",{error:String(l)})}if(f?.codeExportDir)try{let l=e.tuiConfig.code_export?.language??"python";ze(f.codeExportDir,Be(r.sourcePath,"playwright",l))}catch(l){s("error","FINALIZE_CODE_COPY_ERROR","code-export copy failed",{error:String(l)})}}else if(e.session.recorder?.lastWrittenPath){let l=e.session.recorder.lastWrittenPath,y=e.session.getFlows(),k=y.map((p,_)=>({index:_+1,heading:`Step ${_+1}`,headingLine:0,body:{kind:"objective",text:p.objective}})),v=y.map((p,_)=>({rootStepIndex:_+1,status:p.status==="passed"?"passed":p.status==="failed"?"failed":"skipped",duration_s:p.duration,reason:p.reason})),O=v.some(p=>p.status==="failed")?"failed":"passed";try{b=Ve({sourcePath:l,title:e.session.sessionName??"Session",rootSteps:k,outcomes:v,overallStatus:O,startedISO:e.session.startedAt,durationS:v.reduce((p,_)=>p+(_.duration_s??0),0),sessionId:e.session.sessionId})}catch(p){s("error","FINALIZE_TUI_RESULT_MD_ERROR","TUI _Result.md write failed",{error:String(p)})}try{Qe({sourcePath:l,commitId:e.session.sessionId,testId:o??void 0,testcaseId:e.session.testcaseId??void 0,sessionName:e.session.sessionName??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0})}catch(p){s("error","FINALIZE_TUI_META_WRITE_ERROR","TUI meta.json write failed",{error:String(p)})}if(f?.codeExportDir)try{let p=e.tuiConfig.code_export?.language??"python";ze(f.codeExportDir,Be(l,"playwright",p))}catch(p){s("error","FINALIZE_TUI_CODE_COPY_ERROR","TUI code-export copy failed",{error:String(p)})}e.session.recorder.lastCollisionSuffixed&&process.stderr.write(`Saved to ${l} (renamed: ${e.session.sessionName}_test.md already existed)
23
+ `)}try{t.runCleanup?.()}catch(l){s("error","FINALIZE_CLEANUP_ERROR","Cleanup hook threw",{error:String(l)})}try{await e.session.finish("complete")}catch(l){s("error","FINALIZE_SESSION_FINISH_ERROR","session.finish threw",{error:String(l)})}return{uploadResult:f,feedbackChoice:i,resultMdPath:b}}var ke=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"];async function no(e,t){let r=Er(e);if(!Xe(r))return process.stderr.write(`error: file not found: ${r}
24
+ `),2;qt(r);let s=!process.stdin.isTTY||!!t.agent,o=!1,f=s?n=>process.stdout.write(JSON.stringify(n)+`
25
+ `):n=>{},i;try{i=Nt(r)}catch(n){return process.stderr.write(`error: ${n.message}
26
+ `),2}if(i.steps.length===0)return process.stderr.write(`info: no steps in ${r}; nothing to run.
27
+ `),0;let b=Pr(t),l=new dt,y=new mt,k=!!(t.username&&t.accessKey);await Bt({isInteractive:!!process.stdin.isTTY&&!t.agent&&!k,creds:l,config:y});let v=l.getActiveProfile()??"default",p=t.env??void 0??l.getDefaultEnv()??"prod",_=Q(p),w="v16-alpha",u;try{u=await Mt({creds:l,env:p,usernameFlag:t.username,accessKeyFlag:t.accessKey,log:()=>{}})}catch(n){return n instanceof Ge&&n.code==="not_authenticated"?process.stderr.write(`error: Not authenticated. Choose one:
28
+ \u2022 Pass credentials inline: --username <user> --access-key <key>
29
+ \u2022 Run 'kane-cli login --oauth' (browser-based)
30
+ \u2022 Run 'kane-cli login --username <user> --access-key <key>'
31
+ `):n instanceof Ge&&n.code==="refresh_failed"?process.stderr.write(`error: Token refresh failed. Run 'kane-cli login' to re-authenticate.
32
+ `):process.stderr.write(`error: auth resolution failed: ${n.message}
33
+ `),2}let J=String(u.resolvedCreds?.org_id??"");if(!J)return process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),2;{let{readMetaIfExists:n,assertOrgMatchOrExit:c}=await import("./testmd-actions-5O7F22EC.js"),d=c(n(r),J);if(d!==null)return d}let a=new ut,h=await Tr(r,i,t,{resolvedAuth:u,tmsBaseUrl:_.tmsBaseUrl},a.sessionId);if(h.abort)return h.abort.exitCode;let F=h.lockAcquired,$=!1,q=!1,de=!1;if(F&&f({type:"test_md_lock_state",phase:"acquired",scope:"preemptive"}),a.start({model:w,environment:p,profile:v}),a.setRecordingEnabled(!1),t.name){try{wt(t.name)}catch(n){return process.stderr.write(`error: ${n.message}
34
+ `),2}a.setSessionName(t.name)}let Ee={};for(let[n,c]of Object.entries(i.rootGlobal))ke.includes(n)||(Ee[n]=c);for(let[n,c]of Object.entries(b))ke.includes(n)||c!==void 0&&(Ee[n]=c);let B={...i.chrome};for(let n of ke){let c=b[n];c!==void 0&&(B[n]=c)}let lr={...Ee,...B};a.setResolvedGlobal(lr);let K;try{K=await $t({config:{chrome_profile_path:B.chrome_profile??null,window_size:{width:1920,height:1080}},startUrl:re,headless:B.headless??!1,wsEndpoint:B.ws_endpoint,cdpEndpoint:B.cdp_endpoint})}catch(n){return process.stderr.write(`error: Chrome launch failed: ${n.message}
35
+ `),await a.finish("complete"),2}let ue=K.instance;ue&&W("chrome",()=>{try{ue.kill()}catch{}});let D=null,et=K.cdpEndpoint??B.cdp_endpoint;if(et&&!B.ws_endpoint&&!B.headless)try{D=Rt({headless:B.headless??!1,cdpEndpoint:et,chromePid:ue?.process.pid}),D&&W("marker-overlay",()=>D.kill())}catch(n){a.log("warn","OVERLAY_SPAWN_FAILED","Marker overlay spawn failed",{error:String(n)})}if(u.resolvedCreds?.org_id!==void 0&&a.setOrgId(String(u.resolvedCreds.org_id)),u.resolvedCreds)try{let{createRemoteLogger:n}=await import("./logging-RMC6R23F.js"),{getMachineId:c}=await import("./machine-id-DZN4MYOO.js"),d=n({sessionId:a.sessionId,identity:{org_id:String(u.resolvedCreds.org_id??""),user_id:String(u.resolvedCreds.user_id??""),machine_id:c(),email:u.resolvedCreds.email??null,email_domain:u.resolvedCreds.email_domain??"unknown",user_type:u.resolvedCreds.user_type??"unknown",env:p},getToken:async()=>u.token});a.setRemoteLogger(d),d.start(),W("remote-logger",()=>d.shutdownSync()),gt(d)}catch(n){process.stderr.write(`warn: remote logger init failed: ${n.message}
36
+ `)}let X=Ct({objective:"",globalDir:ve(Le,"variables"),localDir:ve(process.cwd(),".testmuai","variables"),file:t.variablesFile,inline:t.variables}),cr=i.rootGlobal.variables??{},L=Or(X.raw,cr);a.setAuteurVariables(L.auteur);let tt=Me(ve(Le,"global-memory.md"))??void 0,rt=Me(ve(process.cwd(),".testmuai","context.md"))??void 0,nt=l.getActiveProfile()??"default",ot=l.getDefaultEnv(),{rehydrateIfStale:dr}=await import("./profile-sync-DTTRRIVP.js");dr(l,y,nt,ot);let U=y.load(),N=U.project_id??null,pe=U.folder_id??null;if(!t.local&&!N&&u.basicAuth)try{let n=await Vt({creds:l,config:y,profile:nt,env:ot,tmsCreds:u.basicAuth,log:(c,d,m,R)=>a.log(c,d,m,R)});N=n.projectId,pe=n.folderId,U=y.load(),process.stderr.write(`info: using project '${n.projectName}' / folder '${n.folderName}' (auto-configured)
37
+ `)}catch(n){process.stderr.write(`warn: could not auto-configure project/folder: ${n.message}
38
+ KaneAI upload will be skipped for this run.
39
+ `)}t.local?process.stderr.write(`info: --local \u2014 KaneAI upload skipped
40
+ `):u.basicAuth?N||process.stderr.write(`warn: KaneAI upload skipped \u2014 no project configured.
41
+ `):process.stderr.write(`warn: KaneAI upload skipped \u2014 TMS credentials could not be resolved.
42
+ Run 'kane-cli login' (OAuth) or 'kane-cli config set-username/set-access-key' (basic auth).
43
+ `);let se=!t.local&&!!u.basicAuth&&N!=null;if(a.log("info","PIPELINE_GATE_STATE","Initial gate state (run-start)",{phase:"run-start",shouldUploadArtifacts:se,lockHeld:F,isFirstRun:h.isFirstRun,hasBasic:h.hasBasic}),se&&h.testId==null){let n=Q(p);try{let c=await Ut({tmsBaseUrl:n.tmsBaseUrl,auth:u.basicAuth,objective:i.steps[0].objective,url:"",projectId:N,folderId:pe??"",hasCustomProfile:!!B.chrome_profile,log:(d,m,R,g)=>a.log(d,m,R,g)});c&&a.setTestId(c)}catch(c){process.stderr.write(`warn: ATM test creation failed: ${c.message}
44
+ `)}}else h.testId&&a.setTestId(h.testId);let fe={};if(u.basicAuth&&!t.local&&(L.secretEntries.length>0||L.nonSecretEntries.length>0))try{fe=await Et({variables:L,auth:u.basicAuth,orgId:String(u.resolvedCreds?.org_id??""),env:p,localMode:!!t.local,log:(n,c,d,m)=>a.log(n,c,d,m)})}catch(n){process.stderr.write(`warn: variable/secret push failed: ${n.message}
45
+ `)}let Ae=new Map;for(let[n,c]of L.nonSecretEntries)Ae.set(n,c.value);let xe=new Map;for(let[n,c]of L.secretEntries)xe.set(n,c.value);async function Pe(n){if(!u.basicAuth||t.local)return;let c=[],d=[];for(let[R,g]of Object.entries(n))if(g.secret){if(xe.get(R)===g.value)continue;d.push([R,g])}else{if(Ae.get(R)===g.value)continue;c.push([R,g])}if(c.length===0&&d.length===0)return;let m=Q(p);if(c.length>0){let R=new kt(m.tmsBaseUrl,u.basicAuth.username,u.basicAuth.access_key);for(let[g,C]of c)try{let I=await R.upsertVariable({name:g,value:C.value});fe[g]=I.id,Ae.set(g,C.value),a.log("info","VAR_PUSH_STEP","Variable updated mid-run",{name:g})}catch(I){a.log("warn","VAR_PUSH_STEP_FAILED","Mid-run variable push failed",{name:g,error:String(I)})}}if(d.length>0){let R=new vt(m.secretsBaseUrl);for(let[g,C]of d)try{await R.pushSecret({secretKey:g,secretValue:C.value,username:u.basicAuth.username,accessKey:u.basicAuth.access_key,orgId:String(u.resolvedCreds?.org_id??"")}),xe.set(g,C.value),a.log("info","SECRET_PUSH_STEP","Secret updated mid-run",{name:g})}catch(I){a.log("warn","SECRET_PUSH_STEP_FAILED","Mid-run secret push failed",{name:g,error:String(I)})}}}let Oe=null,me=0;if(u.basicAuth&&!t.local)try{let c=await new ht(Q(p).controllerBaseUrl,{username:u.basicAuth.username,accessKey:u.basicAuth.access_key}).getScreenshotSas();a.setScreenshotSas(c),Oe=new It(c,3,(d,m,R,g)=>a.log(d,m,R,g)),a.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched",{base_url:c.base_url,container:c.container,expiry:c.expiry})}catch(n){a.log("warn","SCREENSHOT_SAS_FAIL","Screenshot SAS token fetch failed",{error:n instanceof Error?n.message:String(n)})}let ie=Oe?(n,c,d)=>{if(!(F||h.isFirstRun))return;let m=me+c;St(a.sessionDir,m,n,Oe,(R,g,C,I)=>a.log(R,g,C,I),d)}:void 0,st=i.rootTitle??i.rootSteps[0]?.heading??Ar(r),ur=Object.keys(L.raw).length>0?Re(L.raw,st).objective:st;a.setFirstRun(ur,re);let Y=new Ie(i),Fe=new Date().toISOString(),pr=Date.now(),fr=typeof t.maxSteps=="string"&&t.maxSteps!==""?parseInt(t.maxSteps,10):void 0;function it(n,c){let d=i.steps[n],m=ir(d.config,b),R=ce(X.raw,m.variables,d.objective);return At({objective:R.objective,url:n===0?re:void 0,model:w,chrome:K,auth:u,sessionId:a.sessionId,runIndex:c,windowSize:{width:1920,height:1080},maxSteps:m.max_steps??fr??30,headless:B.headless??!1,variables:Object.keys(R.variables).length>0?R.variables:void 0,globalContext:m.global_context??tt,localContext:m.local_context??rt,sessionContext:a.getContext()})}function at(n){let d=i.steps[n].trace[0].stepIndex,m=i.rootSteps.find(g=>g.index===d);i.steps.slice(0,n).some(g=>g.trace[0].stepIndex===d)||f({type:"test_md_step_start",step_index:d,heading:m.heading,ref:m.body.kind==="import_ref"?{kind:"import",label:m.body.path}:null})}function Te(n,c,d,m,R,g){let C=i.steps[n],I=C.trace[0].stepIndex,T=!i.steps.slice(n+1).some(S=>S.trace[0].stepIndex===I),E=d?.status==="passed"?"passed":"failed",P=d?.reason??R??void 0,H=d?.duration??g,{continueOverall:z}=Y.recordStep(C,{status:E,duration_s:H,reason:P}),V=ir(C.config,b),M=ce(X.raw,V.variables,C.objective).objective;if(d){let S=pt(d,c,m);a.addRunResult(ft(d,M,c,S),d.total_runs)}else a.addRunResult({index:c,objective:M,status:E,summary:"",context:{memory:{},variables:{},pointer:""}},1);if(T||!z){let S=Y.snapshotOutcomes().find(A=>A.rootStepIndex===I);f({type:"test_md_step_end",step_index:I,status:S.status,duration_s:S.duration_s??0,ref_kind:S.refKind??null,inlined_count:S.inlinedCount??null,failed_sub_step_index:S.failedSubStepIndex??null})}return z}async function mr(n){Zt(n,i.steps.length);for(let c=0;c<n;c++){if(o)return{failedAt:c,cancelled:!0};let d=i.steps[c],m=h.decisions[c];if(m.kind!=="replay")return process.stderr.write(`error: runReplayPhase invoked on a non-replay decision at step ${c}
46
+ `),{failedAt:c,cancelled:!1};let R=a.nextRunIndex();me=R;let g=c===0?re:void 0,C={width:U.window_size.width,height:U.window_size.height},I=We({step:d,decision:m,chrome:K,auth:u,sessionId:a.sessionId,runIndex:R,sessionDir:a.sessionDir,windowSize:C,forceNavigateUrl:g,sessionContext:a.getContext()});await Pe(ce(X.raw,d.config.variables,d.objective).raw),at(c);let T=Date.now(),E=null,P=null;try{let M=Ne(I,{environment:p});W("runner",()=>{Ue()&&(o=!0);try{M.cancel()}catch{}}),D?.setRunActive(!0);try{for await(let S of M.events){if(s&&process.stdout.write(JSON.stringify(S)+`
47
+ `),S.type==="step_event"&&S.event==="reasoning"?D?.setStepText(S.detail):S.type==="step_end"&&(S.status==="passed"&&D?.setStepComplete(),ie&&ie(S.index,0,S.child_id)),S.type==="run_end"){E=S;break}if(S.type==="error"){P=S.message??"runner error";break}}try{M.cancel()}catch{}if(!E&&!P){let{code:S}=await M.exited;S!==0&&(P=`runner exited with code ${S}`)}}finally{D?.setRunActive(!1),Z("runner","Replay step complete")}}catch(M){P=M.message}if(o)return{failedAt:c,cancelled:!0};let H=Math.round((Date.now()-T)/1e3),z=Te(c,R,E,null,P,H);a.recordStepRun({testmdStepIndex:i.steps[c].flatIndex,runIndex:R,totalRunDirs:1});let V=!!P||E?.status==="failed";if(Jt(c,V?"failed":"ok"),V||!z)return{failedAt:c,cancelled:!1}}return{failedAt:null,cancelled:!1}}let lt=async()=>{if(F)return!0;if(!h.testId||!h.fromCommitId||!u.basicAuth)return process.stderr.write(`error: cannot acquire lock \u2014 missing required state
48
+ `),!1;let n=a.sessionId,c=t.onLockConflict??i.rootGlobal.on_lock_conflict??"readonly",d=await ar({tmsBaseUrl:_.tmsBaseUrl,testId:h.testId,fromCommitId:h.fromCommitId,newCommitId:n,basicAuth:u.basicAuth,onLockConflict:c});return d==="ok"?(F=!0,h.newCommitId=n,a.log("info","MID_RUN_LOCK_ACQUIRED","Mid-run lock acquired",{test_id:h.testId}),s&&f({type:"test_md_lock_state",phase:"acquired",scope:"mid_run"}),Ze({baseUrl:_e(_.tmsBaseUrl),testId:h.testId,auth:Ce(u.basicAuth)}),!0):(a.log("error","MID_RUN_LOCK_CONFLICT","Mid-run lock acquisition failed",{reason:d}),s&&f({type:"test_md_lock_state",phase:"conflict",scope:"mid_run",reason:d}),process.stderr.write(`error: mid-run lock acquisition failed (${d})
49
+ `),!1)};if(s){let{authorBoundary:n,cancelledInPhase:c,shrinkCount:d}=await rr({decisions:h.decisions,hasRetry:t.retry===!0||t.retryCount!==void 0,maxShrinks:t.retryCount!==void 0?parseInt(t.retryCount,10):le.maxShrinks,runReplayPhase:mr,session:a,accumulator:Y,acquireLockIfNeeded:lt});if(de=d>0,d>0&&(a.log("info","RETRY_TRIGGERED","Retry loop triggered",{shrink_count:d,final_author_boundary:n}),f({type:"test_md_retry_attempt",shrink_count:d,final_author_boundary:n,complete_reauthor:n===0})),n===0&&d>0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback",{shrink_count:d}),!c&&n>=0)for(let m=n;m<i.steps.length;m++){let R=i.steps[m];if(!Y.shouldRunFlatStep(R))continue;at(m),$=!0;let g=a.nextRunIndex();me=g,await Pe(ce(X.raw,R.config.variables,R.objective).raw);let C=it(m,g),I=Date.now(),T=null,E=null,P=null,H=!1,z=0;try{let S=Ne(C,{environment:p});W("runner",()=>{Ue()&&(o=!0);try{S.cancel()}catch{}}),D?.setRunActive(!0);try{for await(let A of S.events){if(process.stdout.write(JSON.stringify(A)+`
50
+ `),A.type==="bifurcation"){let ae=A.count??A.flows?.length??0;(A.is_single_flow??ae<=1)||(P=A.flows??null,H=!0,z=0)}else if(A.type==="run_start"&&H)z++;else if(A.type==="step_event"&&A.event==="reasoning")D?.setStepText(A.detail);else if(A.type==="step_end"&&(A.status==="passed"&&D?.setStepComplete(),ie)){let ae=H?Math.max(0,z-1):0;ie(A.index,ae,A.child_id)}if(A.type==="run_end"){T=A;break}if(A.type==="error"){E=A.message??"runner error";break}}try{S.cancel()}catch{}}finally{D?.setRunActive(!1),Z("runner","Step complete")}}catch(S){E=S.message}let V=Math.round((Date.now()-I)/1e3),M=Te(m,g,T,P,E,V);if(a.recordStepRun({testmdStepIndex:i.steps[m].flatIndex,runIndex:g,totalRunDirs:T?.total_runs??1}),!M||o)break}}else{let{default:n}=await import("./react-QWOAB3TB.js"),{render:c}=await import("./build-JIKYOZUH.js"),{TestMdRunView:d}=await import("./TestMdRunView-YD3Z6MCR.js"),{effectiveDecisions:m}=await import("./effective-decisions-DRM3JSR4.js"),{decideRetry:R}=await import("./replay-policy-6USQBT3E.js"),g=t.retry===!0||t.retryCount!==void 0,C=t.retryCount!==void 0?parseInt(t.retryCount,10):le.maxShrinks,I=t.author===!0;I&&(er(),a.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let T=I?0:we(h.decisions),E=0,P=null,H=h.decisions.filter(S=>S.kind==="replay").length,z=h.decisions.length-H,V=[];t.push&&V.push("--push"),g&&V.push("--retry"),t.retryCount!==void 0&&V.push(`--retry-count=${t.retryCount}`),I&&V.push("--author");let M={source:r,steps:{total:h.decisions.length,replay:H,author:z},model:w,viewport:{width:U.window_size.width,height:U.window_size.height},chrome:K.cdpEndpoint??K.wsEndpoint??"managed",session:a.sessionName??"ephemeral",variables:{count:Object.keys(L.raw).length,secrets:Object.values(L.raw).filter(S=>S.secret).length,names:Object.keys(L.raw)},flags:V,mode:b.mode??"testing"};for(;;){let S=a.snapshot(),A=Y.snapshot(),ae=m(h.decisions,T,I);if(E>=1){let x=T===0?`\u21BB Complete re-author \u2014 retry budget exhausted (${E}/${C})`:`\u21BB Retry ${E}/${C} \u2014 replay 0..${T-1}, author ${T}..${h.decisions.length-1}
51
+ reason: replay miss at step ${(P??0)+1}`;process.stderr.write(x+`
52
+ `)}let Rr=E>=1&&T>0&&P!==null?{startIdx:0,endIdx:P,count:P}:void 0;D?.setRunActive(!0);let he=await Lr({decisions:ae,resolved:i,session:a,accumulator:Y,tuiConfig:U,globalConfig:M,buildStepConfigAt:it,buildReplayConfig:x=>{let G=h.decisions[x];if(G.kind!=="replay")throw new Error("expected replay decision at index "+x);return We({step:i.steps[x],decision:G,chrome:K,auth:u,sessionId:a.sessionId,runIndex:a.nextRunIndex(),sessionDir:a.sessionDir,windowSize:{width:U.window_size.width,height:U.window_size.height},forceNavigateUrl:x===0?re:void 0,sessionContext:a.getContext()})},onAnyAuthorStep:()=>{$=!0},onCancel:()=>{q=!0},topBannerModel:w,topBannerAuth:`${l.getActiveProfile()??"no profile"}/${p}`,spawnOpts:{environment:p,mode:b.mode??"testing",log:(x,G,ge,je)=>a.log(x,G,ge,je)},priorAttemptRollup:Rr,pushStepLevelDelta:(x,G)=>Pe(ce(X.raw,x,G).raw),onSequencerStepEnd:(x,G,ge,je)=>{let br=Math.round((Date.now()-je)/1e3),yr=x.hadError?x.reason??"runner error":null,Sr=Te(G,ge,x.runEnd,x.bifurcationFlows??null,yr,br);return a.recordStepRun({testmdStepIndex:i.steps[G].flatIndex,runIndex:ge,totalRunDirs:x.runEnd?.total_runs??x.bifurcationFlows?.length??1}),Sr},screenshotDispatcher:ie,onReasoning:x=>D?.setStepText(x),onStepComplete:()=>D?.setStepComplete(),onSpawnStart:x=>{me=x}});if(D?.setRunActive(!1),he.cancelled){Z("marker-overlay","user cancelled run"),Z("chrome","user cancelled run");break}if(he.failedAt===null)break;let De=R({failedAt:he.failedAt,shrinkCount:E,hasRetry:g,maxShrinks:C});if(De.kind==="fail"||!F&&!await lt())break;a.rollback(S),Y.rollback(A),De.kind==="complete-reauthor"?T=0:T=De.newAuthorBoundary,E++,de=!0,a.log("info","RETRY_TRIGGERED","Retry loop triggered (TTY)",{shrink_count:E,failed_at:P}),T===0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback (TTY)",{shrink_count:E}),P=he.failedAt}}let j=Y.finalize(),ee=Math.round((Date.now()-pr)/1e3),hr={session:a,resolvedAuth:u,chromeResult:K,chromeInstance:ue??null,testId:a.testId??null,preparedVariables:L,variableIds:fe,globalContext:tt,localContext:rt,tuiConfig:U,env:p,localMode:!!t.local},te=await sr(hr,{performUpload:async()=>{if(!u.basicAuth)return null;let n=Q(p),c=($||t.push===!0)&&!q,d=(F||h.isFirstRun)&&!q&&j.overallStatus==="passed",m=se&&(F||h.isFirstRun);a.log("info","PIPELINE_GATE_STATE","Derived gate state (finalize)",{phase:"finalize",shouldUploadArtifacts:se,shouldUploadPipeline:m,shouldReplaceLocalOutput:c,shouldCommit:d,lockHeld:F,anyAuthorStepRan:$,cancelled:q,overallStatus:j.overallStatus});let R=jt({session:a,env:p,auth:u,variables:L,variableIds:fe,projectId:N,folderId:pe,totalSteps:j.outcomes.length,totalDuration:ee,codeExport:Lt({codeExport:t.codeExport,codeLanguage:t.codeLanguage,skipCodeValidation:t.skipCodeValidation},U.code_export),onProgress:()=>{},log:(I,T,E,P)=>a.log(I,T,E,P),shouldUploadArtifacts:m,shouldReplaceLocalOutput:c,shouldCommit:d,isFirstRun:h.isFirstRun,resolvedTest:i,sourcePath:r,stepRunRecords:a.getStepRunRecords(),outcomes:j.outcomes,overallStatus:j.overallStatus,fromCommitId:h.fromCommitId,startedISO:Fe,durationS:ee,tmsIds:{testId:h.testId??a.testId??void 0,testcaseId:h.testcaseId??a.testcaseId??void 0,projectId:N??void 0,folderId:pe??void 0,orgId:a.orgId??void 0,sessionName:a.sessionName??be(r)},tmsBaseUrl:_.tmsBaseUrl,testId:h.testId??void 0,newCommitId:h.newCommitId??void 0,basicAuth:u.basicAuth??void 0,decisions:h.decisions,wantsPush:t.push===!0,retryTriggered:de,forceAuthor:t.author===!0});h.newCommitId!=null&&(R.skipTmsFinalize=!0);let g=new bt(R);if(s)return await g.execute();let{renderUploadProgress:C}=await import("./CliUploadProgress-TPWX5ARU.js");return await C(g,I=>{if(I.testcaseId&&I.shareId&&N)return $e(n.testManagerUiUrl,N,I.testcaseId,I.shareId)})},runCleanup:()=>{Z("chrome","test.md run complete")},log:(n,c,d,m)=>a.log(n,c,d,m)},{overallStatus:j.overallStatus,outcomes:j.outcomes,sourcePath:r,title:i.rootTitle,rootSteps:i.rootSteps,startedISO:Fe,durationS:ee,localMode:!!t.local,skipLocalWrites:!0});await Dr(r,h,a,j.outcomes,j.overallStatus,Fe,ee,te.uploadResult,U,t,{resolvedAuth:u,tmsBaseUrl:_.tmsBaseUrl},F);let ct={overallStatus:j.overallStatus,durationS:ee,decisions:h.decisions,outcomes:j.outcomes,cancelled:q,retryTriggered:de,lockHeld:F,anyAuthorStepRan:$,isFirstRun:h.isFirstRun,wantsPush:t.push===!0,uploadResult:te.uploadResult,shouldUploadArtifacts:se,shouldReplaceLocalOutput:$&&!q,shouldCommit:(F||h.isFirstRun)&&!q&&j.overallStatus==="passed"},{buildSummaryEvent:gr}=await import("./SummaryBox-L4ZXY4S4.js");if(s)f(gr(ct));else try{let{default:n}=await import("./react-QWOAB3TB.js"),{render:c}=await import("./build-JIKYOZUH.js"),{AutoExitSummaryBox:d}=await import("./SummaryBox-L4ZXY4S4.js"),{waitUntilExit:m}=c(n.createElement(d,{data:ct}),{stdout:process.stderr});await m()}catch(n){a.log("warn","TEST_MD_SUMMARY_RENDER_FAILED","Summary box render failed",{error:String(n)})}if(!s)try{let{default:n}=await import("./react-QWOAB3TB.js"),{render:c}=await import("./build-JIKYOZUH.js"),{LinksBox:d}=await import("./LinksBox-UD364LBX.js"),m=Q(p),R=te.uploadResult?.testcaseId,g=R&&te.uploadResult?.shareId&&N?$e(m.testManagerUiUrl,N,R,te.uploadResult.shareId):void 0,C=R&&N?yt(m.testManagerUiUrl,N,R):void 0,{waitUntilExit:I}=c(n.createElement(d,{recordedTestPath:r,outputDir:xt(r),shareableLink:g,testCaseLink:C,codeExportDir:te.uploadResult?.codeExportDir}),{stdout:process.stderr});await I()}catch(n){a.log("warn","TEST_MD_LINKS_RENDER_FAILED","LinksBox render failed",{error:String(n)})}return f({type:"test_md_done",overall_status:j.overallStatus,duration_s:ee,session_id:a.sessionId}),j.overallStatus==="passed"?0:1}function Pr(e){let t={mode:"mode",maxSteps:"max_steps",timeout:"timeout",globalContext:"global_context",localContext:"local_context",codeExport:"code_export",codeLanguage:"code_language",headless:"headless",cdpEndpoint:"cdp_endpoint",wsEndpoint:"ws_endpoint"},r=new Set(["max_steps","timeout"]),s={};for(let[o,f]of Object.entries(t)){let i=e[o];if(i===void 0||i==="")continue;let b=i;if(r.has(f)&&(b=Number(i),Number.isNaN(b))){let l="--"+o.replace(/[A-Z]/g,y=>"-"+y.toLowerCase());process.stderr.write(`error: ${l} must be a number
53
+ `),process.exit(2)}s[f]=b}return s}function Or(e,t){let r={...e,...t},s=Object.keys(r).length>0?Re(r,""):{variables:{},objective:"",keyMap:{}};return{raw:r,auteur:s.variables,auteurObjective:"",secretEntries:Object.entries(r).filter(([,o])=>o.secret),nonSecretEntries:Object.entries(r).filter(([,o])=>!o.secret)}}function ce(e,t,r){let s={...e,...t??{}};if(Object.keys(s).length===0)return{raw:s,variables:{},objective:r};let o=Re(s,r);return{raw:s,variables:_t(o.variables,o.objective),objective:o.objective}}function ir(e,t){let r=new Set(ke),s={...e};for(let[o,f]of Object.entries(t))r.has(o)||o!=="variables"&&f!==void 0&&e[o]===void 0&&(s[o]=f);return s}function Fr(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}async function Tr(e,t,r,s,o){let f=Pt(e),i=Kt(t,Xe(f)?f:null);Wt(t,i);let b=ye(e),l=Xe(b)?JSON.parse(xr(b,"utf8")):null,y=l?.testcase_id,k=l?.test_id,v=l?.commit_id,O=r.push===!0,p=r.retry===!0||r.retryCount!==void 0,_=r.author===!0;O&&!y&&process.stderr.write(`[--push] no meta.json yet \u2014 flag is a no-op on first run
54
+ `),_&&(y=void 0,k=void 0,v=void 0);let w=!!s.resolvedAuth.basicAuth,u=!r.local&&w&&k!=null&&v!=null&&y!=null,J=u&&(Gt(i)||O);if(O&&!u)return process.stderr.write(`error: --push requires basic auth credentials for the lock API. Run 'kane-cli config set-username/set-access-key' or pass --username/--access-key inline.
55
+ `),{resolved:t,decisions:i,testId:k,testcaseId:y,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasBasic:w,canLock:u,lockAcquired:!1,abort:{exitCode:2}};if(p&&!u)return process.stderr.write(`error: --retry requires basic auth credentials for the lock API. Run 'kane-cli config set-username/set-access-key' or pass --username/--access-key inline.
56
+ `),{resolved:t,decisions:i,testId:k,testcaseId:y,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasBasic:w,canLock:u,lockAcquired:!1,abort:{exitCode:2}};if(_&&!w)return process.stderr.write(`error: --author requires basic auth credentials for the TMS API. Run 'kane-cli config set-username/set-access-key' or pass --username/--access-key inline.
57
+ `),{resolved:t,decisions:i,testId:k,testcaseId:y,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasBasic:w,canLock:u,lockAcquired:!1,abort:{exitCode:2}};let a=null,h=!1;if(J){a=o;let F=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",$=await ar({tmsBaseUrl:s.tmsBaseUrl,testId:k,fromCommitId:v,newCommitId:a,basicAuth:s.resolvedAuth.basicAuth,onLockConflict:F});if($==="ok")h=!0,Ze({baseUrl:_e(s.tmsBaseUrl),testId:k,auth:Ce(s.resolvedAuth.basicAuth)});else{if($==="abort")return{resolved:t,decisions:i,testId:k,testcaseId:y,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasBasic:w,canLock:u,lockAcquired:!1,abort:{exitCode:2}};a=null}}return{resolved:t,decisions:i,testId:k,testcaseId:y,fromCommitId:v,newCommitId:a,isFirstRun:y==null,hasBasic:w,canLock:u,lockAcquired:h}}function _e(e){return`${e}/kane-cli/v1`}function Ce(e){return{username:e.username,accessKey:e.access_key}}async function ar(e){let t=_e(e.tmsBaseUrl),r=Ce(e.basicAuth),s={baseUrl:t,testId:e.testId,fromCommitId:e.fromCommitId,newCommitId:e.newCommitId,auth:r},o=await Ke(s);if(o.ok)return"ok";if(!(o.reason==="concurrent"||o.reason==="base_mismatch"))return process.stderr.write(`[lock] acquire failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
58
+ `),"abort";let i=o.reason==="concurrent"?"concurrent session":"base commit mismatch (pull latest)";if(e.onLockConflict==="fail")return process.stderr.write(`[lock] ${i}; aborting (--on-lock-conflict fail)
59
+ `),"abort";if(e.onLockConflict==="wait"){if(o.reason==="base_mismatch")return process.stderr.write(`[lock] base commit mismatch \u2014 pull latest; aborting
60
+ `),"abort";for(;;){process.stderr.write(`[lock] waiting (concurrent session)...
61
+ `),await new Promise(l=>setTimeout(l,3e4));let b=await Ke(s);if(b.ok)return"ok";if(b.reason!=="concurrent")return process.stderr.write(`[lock] wait drifted to ${b.reason} (HTTP ${b.httpStatus}): ${b.message}; aborting
62
+ `),"abort"}}return process.stderr.write(`[lock] ${i} \u2014 running in readonly mode (no commit)
63
+ `),"readonly"}async function Dr(e,t,r,s,o,f,i,b,l,y,k,v){let{decisions:O,testId:p,testcaseId:_,fromCommitId:w,newCommitId:u}=t;if(!(o==="passed")&&v&&p&&w&&u){process.stderr.write(`[lock] run failed (${o}); discarding new commit
64
+ `),await jr(k,p,w,u),Je();return}Je()}async function jr(e,t,r,s){if(!e.resolvedAuth.basicAuth)return;let o=await Dt({baseUrl:_e(e.tmsBaseUrl),testId:t,body:{commitId:s,fromCommitId:r},auth:Ce(e.resolvedAuth.basicAuth)});o.ok||process.stderr.write(`warn: discardLock failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
65
+ `)}async function Lr(e){let{default:t}=await import("./react-QWOAB3TB.js"),{render:r}=await import("./build-JIKYOZUH.js"),{TestMdRunView:s}=await import("./TestMdRunView-YD3Z6MCR.js"),o=null,f=!1,i=0,b=-1,l=-1,y=0,k=async O=>{if(O&&O.status==="failed")return i>0&&e.decisions[i-1].kind==="replay"&&(o=i-1),null;for(;i<e.decisions.length&&!e.accumulator.shouldRunFlatStep(e.resolved.steps[i]);)i++;if(i>=e.decisions.length)return null;let p=e.decisions[i],_=e.resolved.steps[i],w=i;i++;let u=e.session.nextRunIndex();b=w,l=u,y=Date.now(),e.onSpawnStart?.(u),p.kind==="author"&&e.onAnyAuthorStep(),await e.pushStepLevelDelta(_.config.variables,_.objective);let J=p.kind==="replay"?e.buildReplayConfig(w):e.buildStepConfigAt(w,u),a=p.kind==="replay"?"md5-match":p.reason,h=_.config??{},F={};for(let[$,q]of Object.entries(h))q!=null&&$!=="variables"&&(F[$]=q);return{config:J,banner:{stepLabel:`Step ${w+1}/${e.decisions.length}`,objective:Fr(_.objective,100)},mode:p.kind,modeReason:a,perStepOverrides:Object.keys(F).length>0?F:void 0}},{waitUntilExit:v}=r(t.createElement(s,{topBanner:{model:e.topBannerModel,auth:e.topBannerAuth},globalConfig:e.globalConfig,getNextStep:k,onStepEnd:O=>(O.status==="failed"&&b>=0&&e.decisions[b]?.kind==="replay"&&(o=b),e.onSequencerStepEnd(O,b,l,y)),onAllComplete:()=>{},onCancel:()=>{f=!0,e.onCancel()},spawnOpts:e.spawnOpts,priorAttemptRollup:e.priorAttemptRollup,screenshotDispatcher:e.screenshotDispatcher,onReasoning:e.onReasoning,onStepComplete:e.onStepComplete}),{stdout:process.stderr,exitOnCtrlC:!1});return await v(),{failedAt:o,cancelled:f}}export{ir as applyCliStepConfig,ce as buildStepRunVariables,Or as buildTestLevelVariables,no as runTestMdFile};
@@ -0,0 +1,20 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as $}from"./chunk-E7QWDV7M.js";import{b as J,c as U,d as tt}from"./chunk-FMMDLDDI.js";import{a as K,b as Q}from"./chunk-MDBXYXSC.js";import{a as C,b as W,e as S,f as Z}from"./chunk-AH4AXJML.js";import"./chunk-G7VF5SDK.js";import{a as N}from"./chunk-KGZATJQN.js";import{a as z}from"./chunk-7ECMUWV2.js";import{a as B}from"./chunk-ZB72T6HB.js";import{a as G}from"./chunk-PAQGYV5G.js";import"./chunk-GCAHPH2E.js";import"./chunk-JI7KJKG4.js";import"./chunk-XK33C64U.js";import{a as F}from"./chunk-HCBYKLMW.js";import{t as _}from"./chunk-2FCAWRCU.js";import{a as y,b as g,i as H}from"./chunk-C44QQJR4.js";import{a as A}from"./chunk-6YGTRKDT.js";import"./chunk-KKZRPFWO.js";import{a as O}from"./chunk-V7QXJKX7.js";import{e as T}from"./chunk-UR6MHSHU.js";var P=T(A(),1);import{existsSync as v,readFileSync as Lt,rmSync as lt,unlinkSync as jt}from"fs";import{resolve as Y}from"path";import{promises as et,realpathSync as gt}from"fs";import{homedir as pt}from"os";import{join as V,parse as ht,relative as rt,resolve as nt}from"path";var _t=new Set(["node_modules",".git","dist","build",".next",".venv","venv","target","__pycache__"]),R=class extends Error{constructor(i){super(`refusing to scan '${i}'. Run from your project root, or pass --root <dir>.`);this.cwd=i;this.name="HomeRefusedError"}};function ot(t){try{return gt(nt(t))}catch{return nt(t)}}function xt(t){let r=ot(t),i=ot(pt()),n=ht(r).root;if(process.platform==="win32"){let e=o=>o.toLowerCase();return e(r)===e(i)||e(r)===e(n)}return r===i||r===n}async function I(t){if(xt(t.root))throw new R(t.root);let r=t.maxEntries??5e4,i=t.maxResults??5e3,n=new Set(t.ignore??[]),e=[],o=0,c=0,a=!1,l,s=[t.root];for(;s.length>0&&!a;){let u=s.shift(),w;try{w=await et.readdir(u,{withFileTypes:!0})}catch{continue}c++;for(let h of w){if(o++,o>r){a=!0,l="max_entries";break}let f=h.name,b=V(u,f);if(h.isDirectory()){if(_t.has(f)||f.startsWith(".")||f.startsWith("output-")||n.has(f))continue;s.push(b)}else if(h.isFile()&&f.endsWith("_test.md")&&(e.push({path:b,relPath:rt(t.root,b),source:"cwd"}),e.length>=i)){a=!0,l="max_results";break}}t.onProgress?.(c,e.length)}if(!a){let u=V(t.root,".testmuai","tests");try{let w=await et.readdir(u,{withFileTypes:!0});c++;for(let h of w){if(!h.isFile()||!h.name.endsWith("_test.md"))continue;let f=V(u,h.name);if(e.push({path:f,relPath:rt(t.root,f),source:"tests-dir"}),e.length>=i){a=!0,l="max_results";break}}}catch{}}return{results:e,aborted:a,abortReason:l,dirsScanned:c}}import{mkdirSync as wt,writeFileSync as yt}from"fs";import{join as kt}from"path";function it(t,r){return`Basic ${Buffer.from(`${t}:${r}`).toString("base64")}`}async function bt(t){let r=K({tmsBaseUrl:t.tmsBaseUrl,testcaseId:t.testcaseId,codeExport:{enabled:!0,language:t.language,skipValidation:t.skipValidation}}),i=await O(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:it(t.auth.username,t.auth.access_key)},body:JSON.stringify(r.body)});if(!i.ok)throw new Error(`code-export trigger failed: ${i.status} ${await i.text()}`);t.log("info","CODE_EXPORT_TRIGGERED","Code export triggered",{testcase_id:t.testcaseId})}async function Et(t){let r=Q({tmsBaseUrl:t.tmsBaseUrl,testcaseId:t.testcaseId}),i=t.pollIntervalMs??5e3,n=t.timeoutMs??3e5,e=Date.now()+n;for(;Date.now()<e;){let o=await O(r,{headers:{authorization:it(t.auth.username,t.auth.access_key),accept:"application/json"}});if(!o.ok){await new Promise(s=>setTimeout(s,i));continue}let a=(await o.json()).data?.find(s=>s.code_name==="kane-cli-trigger");if(!a){await new Promise(s=>setTimeout(s,i));continue}let l=(a.status??"").toLowerCase();if(l==="in progress"||l==="in_progress"||l==="pending"){await new Promise(s=>setTimeout(s,i));continue}if(!a.url||a.url.length===0)throw new Error(`code-export status=${a.status} but no files returned`);wt(t.outDir,{recursive:!0});for(let s of a.url){let u=kt(t.outDir,s.file_name),w=await O(s.file_url);if(!w.ok){t.log("warn","CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:s.file_name,status:w.status});continue}let h=await w.text();yt(u,h,"utf-8")}return t.log("info","CODE_EXPORT_DOWNLOADED","Code export saved",{out_dir:t.outDir,file_count:a.url.length}),t.outDir}throw new Error("code-export polling timed out")}async function st(t){return await bt(t),await Et(t)}var k=T(A(),1);import{existsSync as Tt,readFileSync as Rt}from"fs";var p=T(F(),1);function St(t){$(t);let r=S(t);if(!Tt(r))return null;try{return JSON.parse(Rt(r,"utf8"))}catch{return{}}}function Pt(t){return t===null?"never_run":t.testcase_id?"synced":"local_only"}function vt(t){return t==="synced"?"\u2601":t==="local_only"?"\u25A3":"\u25CB"}function Mt(t){return t==="tests-dir"?"\u2726":" "}function Ct(t,r){return r==="all"?!0:r==="synced"?t.status==="synced":r==="local"?t.status==="local_only":r==="never_run"?t.status==="never_run":r==="cli"?t.source==="tests-dir":r==="hand"?t.source==="cwd":!0}var X=["all","synced","local","never_run","cli","hand"];function Dt(t){let r=X.indexOf(t);return X[(r+1)%X.length]}function at({root:t,currentOrgId:r,onSelect:i,onCancel:n}){let[e,o]=(0,k.useState)([]),[c,a]=(0,k.useState)(null),[l,s]=(0,k.useState)(!0),[u,w]=(0,k.useState)("all");(0,k.useEffect)(()=>{(async()=>{try{let m=await I({root:t}),M=[];for(let E of m.results){let j=St(E.path);j?.org_id!==void 0&&j.org_id!==r||M.push({path:E.path,relPath:E.relPath,name:C(E.path),status:Pt(j),source:E.source})}o(M),s(!1)}catch(m){m instanceof R,a(m.message),s(!1)}})()},[t,r]);let h=(0,k.useMemo)(()=>e.filter(m=>Ct(m,u)).map(m=>({id:m.path,label:`${vt(m.status)} ${Mt(m.source)} ${m.relPath}`})),[e,u]),f=(0,k.useMemo)(()=>Ot(u,e),[u,e]);if(c)return(0,p.jsxs)(y,{flexDirection:"column",borderStyle:"round",borderColor:_.statusFail,paddingX:2,paddingY:1,children:[(0,p.jsx)(g,{color:_.statusFail,bold:!0,children:"testmd"}),(0,p.jsx)(y,{marginTop:1,children:(0,p.jsx)(g,{color:_.statusFail,children:c})})]});let b=u==="all"?"all":Ft(u);return(0,p.jsx)(z,{title:`testmd \xB7 filter: ${b}`,items:h,loading:l,itemNoun:"tests",onSelect:m=>{let M=e.find(E=>E.path===m.id);M&&i(M)},onCancel:n,onTab:()=>w(m=>Dt(m)),extraHint:"cycle filter",footer:f})}function Ft(t){return t==="synced"?"synced (\u2601)":t==="local"?"local (\u25A3)":t==="never_run"?"never run (\u25CB)":t==="cli"?"cli-generated (\u2726)":t==="hand"?"hand-written":"all"}function Ot(t,r){let i={synced:r.filter(e=>e.status==="synced").length,local:r.filter(e=>e.status==="local_only").length,never:r.filter(e=>e.status==="never_run").length,cli:r.filter(e=>e.source==="tests-dir").length,hand:r.filter(e=>e.source==="cwd").length},n=e=>e?_.primary:_.dim;return(0,p.jsxs)(y,{flexDirection:"column",children:[(0,p.jsx)(g,{color:_.dim,children:"legend:"}),(0,p.jsxs)(y,{children:[(0,p.jsx)(g,{color:n(t==="synced"),children:` \u2601 synced (${i.synced}) `}),(0,p.jsx)(g,{color:n(t==="local"),children:`\u25A3 local (${i.local}) `}),(0,p.jsx)(g,{color:n(t==="never_run"),children:`\u25CB never run (${i.never})`})]}),(0,p.jsxs)(y,{children:[(0,p.jsx)(g,{color:n(t==="cli"),children:` \u2726 cli-generated (${i.cli}) `}),(0,p.jsx)(g,{color:n(t==="hand"),children:` hand-written (${i.hand})`})]})]})}var D=T(A(),1);import{existsSync as $t,readFileSync as It}from"fs";var d=T(F(),1);function ct({path:t,relPath:r,onAction:i,onBack:n}){let[e,o]=(0,D.useState)(null),[c,a]=(0,D.useState)(!1);(0,D.useEffect)(()=>{let s=S(t);if($t(s))try{o(JSON.parse(It(s,"utf8")))}catch{o(null)}},[t]),H((s,u)=>{if(u.escape){if(c){a(!1);return}n();return}if(c){s==="y"||s==="Y"?(a(!1),i("delete")):(s==="n"||s==="N")&&a(!1);return}s==="r"&&i("run"),s==="e"&&e?.testcase_id&&i("export"),s==="d"&&a(!0)});let l=({k:s,v:u})=>u?(0,d.jsxs)(g,{children:[(0,d.jsx)(g,{color:_.dim,children:s.padEnd(14)}),u]}):null;return(0,d.jsxs)(y,{flexDirection:"column",borderStyle:"round",borderColor:_.primary,paddingX:2,paddingY:1,children:[(0,d.jsx)(g,{color:_.primary,bold:!0,children:r}),(0,d.jsx)(y,{marginTop:1,flexDirection:"column",children:e?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l,{k:"test_id",v:e.test_id}),(0,d.jsx)(l,{k:"testcase_id",v:e.testcase_id}),(0,d.jsx)(l,{k:"project_id",v:e.project_id}),(0,d.jsx)(l,{k:"folder_id",v:e.folder_id}),(0,d.jsx)(l,{k:"org_id",v:e.org_id}),(0,d.jsx)(l,{k:"session_name",v:e.session_name}),(0,d.jsx)(l,{k:"commit_id",v:e.commit_id})]}):(0,d.jsx)(g,{color:_.dim,children:"(never run \u2014 no meta.json)"})}),c?(0,d.jsx)(y,{marginTop:1,children:(0,d.jsxs)(g,{color:_.statusFail,bold:!0,children:["Delete ",r," and its output dir? [y/n]"]})}):(0,d.jsx)(y,{marginTop:1,children:(0,d.jsxs)(g,{color:_.dim,children:["[r] run [e] export",e?.testcase_id?"":" (need testcase_id)"," [d] delete [Esc] back"]})})]})}function L(t){$(t);let r=S(t);if(!v(r))return null;try{return JSON.parse(Lt(r,"utf8"))}catch{return null}}function ut(t,r){return!t||t.org_id===void 0?!0:t.org_id===r}function q(t,r){return ut(t,r)?null:(process.stderr.write(`error: this test belongs to org ${t.org_id}; you are logged in as org ${r}.
3
+ Switch profiles with \`kane-cli profiles switch\` to act on it.
4
+ `),2)}async function Pe(t={}){let r=!!process.stdin.isTTY&&!t.json,i=new B,n=new N;await tt({isInteractive:r,creds:i,config:n});let e=i.getDefaultEnv()??"prod";try{let o=await U({creds:i,env:e,log:()=>{}});return o.resolvedCreds?.org_id===void 0?(process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),{ok:!1,code:2}):{ok:!0,orgId:String(o.resolvedCreds.org_id)}}catch(o){if(o instanceof J)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),{ok:!1,code:2};throw o}}async function ve(t,r){if(process.stdin.isTTY&&!t.json)return await Nt(r,t.root);let i=t.root??process.cwd(),n;try{n=await I({root:i,ignore:t.ignore})}catch(e){if(e instanceof R)return process.stderr.write(`error: ${e.message}
5
+ `),2;throw e}for(let e of n.results){let o=L(e.path);if(!ut(o,r))continue;let c={path:e.relPath.startsWith(".")?e.relPath:`./${e.relPath}`,name:C(e.path),has_meta:o!==null,source:e.source,synced:!!o?.testcase_id};o&&(o.test_id&&(c.test_id=o.test_id),o.testcase_id&&(c.testcase_id=o.testcase_id),o.org_id&&(c.org_id=o.org_id),o.project_id&&(c.project_id=o.project_id),o.folder_id&&(c.folder_id=o.folder_id)),process.stdout.write(JSON.stringify(c)+`
6
+ `)}return n.aborted&&process.stderr.write(`warn: walk aborted (${n.abortReason}). Pass --root or --ignore to narrow.
7
+ `),0}var dt=-1001,ft=-1002,mt=-1003,x={action:null,path:null};function At(t,r){return x.action=t,x.path=r,t==="run"?dt:t==="export"?ft:mt}function Bt({root:t,currentOrgId:r,onComplete:i}){let[n,e]=P.default.useState({kind:"list"});return P.default.useEffect(()=>{n.kind==="exiting"&&i(n.code)},[n,i]),n.kind==="list"?P.default.createElement(at,{root:t,currentOrgId:r,onSelect:o=>e({kind:"inspect",path:o.path,relPath:o.relPath}),onCancel:()=>e({kind:"exiting",code:0})}):n.kind==="inspect"?P.default.createElement(ct,{path:n.path,relPath:n.relPath,onAction:async o=>{e({kind:"exiting",code:At(o,n.path)})},onBack:()=>e({kind:"list"})}):null}async function Nt(t,r){let i=r??process.cwd(),{render:n}=await import("./build-JIKYOZUH.js"),e=await new Promise(o=>{let{unmount:c,waitUntilExit:a}=n(P.default.createElement(Bt,{root:i,currentOrgId:t,onComplete:l=>{c(),o(l)}}),{stdout:process.stderr,exitOnCtrlC:!0});a().then(()=>o(0)).catch(()=>o(0))});if(e===dt&&x.path){let{runTestMdFile:o}=await import("./run-test-md-IAEJXIVK.js"),c=await o(x.path,{});return x.action=null,x.path=null,c}if(e===ft&&x.path){let o=await Jt(x.path,{},t);return x.action=null,x.path=null,o}if(e===mt&&x.path){let o=await Wt(x.path,!0,t);return x.action=null,x.path=null,o}return e}async function Me(t,r){let i=Y(t);if(!v(i))return process.stderr.write(`error: file not found: ${i}
8
+ `),2;let n=L(i),e=q(n,r);if(e!==null)return e;let o={path:i,name:C(i),has_meta:n!==null};return n&&(n.commit_id&&(o.commit_id=n.commit_id),n.test_id&&(o.test_id=n.test_id),n.testcase_id&&(o.testcase_id=n.testcase_id),n.project_id&&(o.project_id=n.project_id),n.folder_id&&(o.folder_id=n.folder_id),n.org_id&&(o.org_id=n.org_id),n.session_name&&(o.session_name=n.session_name)),process.stdout.write(JSON.stringify(o)+`
9
+ `),0}async function Wt(t,r,i){let n=Y(t);if(!v(n))return process.stderr.write(`error: file not found: ${n}
10
+ `),2;let e=L(n),o=q(e,i);if(o!==null)return o;if(!r)return process.stderr.write(`error: refusing to delete without --yes.
11
+ This will remove '${n}' and '${W(n)}/'.
12
+ `),2;let c=W(n);if(v(c))try{lt(c,{recursive:!0,force:!0})}catch(a){return process.stderr.write(`error: failed to remove ${c}: ${a.message}
13
+ `),2}try{jt(n)}catch(a){return process.stderr.write(`error: failed to remove ${n}: ${a.message}
14
+ `),2}return process.stderr.write(`removed ${n} and ${c}/
15
+ `),0}async function Jt(t,r,i){let n=Y(t);if(!v(n))return process.stderr.write(`error: file not found: ${n}
16
+ `),2;let e=L(n),o=q(e,i);if(o!==null)return o;if(!e?.testcase_id)return process.stderr.write("error: this test has not been synced to TMS \u2014 run `kane-cli testmd run` first.\n"),2;let c=new N().load(),a=r.language??c.code_export?.language;if(!a)return process.stderr.write(`error: --language not provided and no default in tui-config.
17
+ `),2;let l=r.output??Z(n,"playwright",a),s=v(l);if(s&&!r.force){let f=!1;try{let{readdirSync:b}=await import("fs");f=b(l).length>0}catch{}if(f)return process.stderr.write(`reusing existing export at ${l}
18
+ `),0}s&&r.force&&lt(l,{recursive:!0,force:!0});let u=new B,w=u.getDefaultEnv()??"prod",h;try{h=await U({creds:u,env:w,log:()=>{}})}catch(f){if(f instanceof J)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),2;throw f}if(!h.basicAuth)return process.stderr.write("error: TMS basic auth could not be resolved. Run `kane-cli login` again.\n"),2;try{let f=G(w);await st({tmsBaseUrl:f.tmsBaseUrl,testcaseId:e.testcase_id,auth:h.basicAuth,language:a,framework:"playwright",skipValidation:c.code_export?.skip_validation??!0,outDir:l,log:()=>{}})}catch(f){return process.stderr.write(`error: code export failed: ${f.message}
19
+ `),2}return process.stderr.write(`exported to ${l}
20
+ `),0}export{q as assertOrgMatchOrExit,ut as metaMatchesOrg,L as readMetaIfExists,Pe as resolveCurrentOrgId,Wt as runDeleteAction,Jt as runExportAction,ve as runListAction,Nt as runListTui,Me as runStatusAction};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-YZTCCQHR.js";import"./chunk-KKZRPFWO.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{a as TmsClient};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as t}from"./chunk-NLYBR5FP.js";import"./chunk-JYQO6G7F.js";import"./chunk-UR6MHSHU.js";async function a(n,e,o){let{TmsClient:r}=await import("./tms-client-CTH4NVFM.js"),i=new r(t(n).tmsBaseUrl,e,o);for await(let m of i.listProjectsStream({perPage:1,maxPages:1}))return}export{a as validateBasicAuth};
2
+ import{a as t}from"./chunk-PAQGYV5G.js";import"./chunk-2FCAWRCU.js";import"./chunk-UR6MHSHU.js";async function a(n,e,o){let{TmsClient:r}=await import("./tms-client-XOARLBEP.js"),i=new r(t(n).tmsBaseUrl,e,o);for await(let m of i.listProjectsStream({perPage:1,maxPages:1}))return}export{a as validateBasicAuth};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c,d}from"./chunk-7JB4RPI2.js";import"./chunk-2FCAWRCU.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{d as checkForUpdate,b as compareVersions,c as getSeverity,a as getUpdateCommand};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testmuai/kane-cli",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "KaneAI Terminal UI — browser automation testing agent",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -23,10 +23,10 @@
23
23
  "sharp": "^0.34.5"
24
24
  },
25
25
  "optionalDependencies": {
26
- "@testmuai/kane-cli-darwin-arm64": "0.3.0",
27
- "@testmuai/kane-cli-darwin-x64": "0.3.0",
28
- "@testmuai/kane-cli-linux-x64": "0.3.0",
29
- "@testmuai/kane-cli-win-x64": "0.3.0"
26
+ "@testmuai/kane-cli-darwin-arm64": "0.3.2",
27
+ "@testmuai/kane-cli-darwin-x64": "0.3.2",
28
+ "@testmuai/kane-cli-linux-x64": "0.3.2",
29
+ "@testmuai/kane-cli-win-x64": "0.3.2"
30
30
  },
31
31
  "publishConfig": {
32
32
  "registry": "https://registry.npmjs.org",
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-75SVKFKD.js";import"./chunk-YCCUBQY4.js";import"./chunk-XJ7OYQ7M.js";import"./chunk-NLYBR5FP.js";import"./chunk-BSQVYLV7.js";import"./chunk-HCBYKLMW.js";import"./chunk-JYQO6G7F.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-YUUZDFT7.js";import"./chunk-DXKKUGFG.js";import"./chunk-UR6MHSHU.js";export{b as FolderPicker,a as formatFolderLine};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as T}from"./chunk-HCBYKLMW.js";import{a as f,b as l,t}from"./chunk-JYQO6G7F.js";import{a as n,b as o,j as h,k as p}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var b=x(w(),1);var e=x(T(),1),B="https://www.testmuai.com/support/docs/kane-cli-introduction",S="https://github.com/LambdaTest/kane-cli/issues";function L(){let{exit:c}=h(),{stdout:r}=p(),a=r?.columns??80;return(0,b.useEffect)(()=>{let d=setTimeout(()=>c(),50);return()=>clearTimeout(d)},[c]),(0,e.jsxs)(n,{flexDirection:"column",children:[(0,e.jsxs)(n,{paddingX:1,paddingTop:1,flexDirection:"column",children:[(0,e.jsx)(o,{color:t.purple,bold:!0,children:l}),(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Browser automation powered by AI "}),(0,e.jsxs)(o,{color:t.muted,children:[" v",f]})]})]}),(0,e.jsx)(o,{children:" "}),(0,e.jsxs)(m,{title:"USAGE",children:[(0,e.jsx)(g,{cmd:`${l}`,desc:"Single-shot prompt (no args, TTY)"}),(0,e.jsx)(g,{cmd:`${l} --tui`,desc:"Full interactive TUI",highlight:!0}),(0,e.jsx)(g,{cmd:`${l} run "<objective>"`,desc:"Inline objective"}),(0,e.jsx)(g,{cmd:`${l} run path/to/test.md`,desc:"Replay a saved test"})]}),(0,e.jsxs)(m,{title:"COMMANDS",children:[(0,e.jsx)(s,{cmd:"run",args:"<objective | path.md>",desc:"Run an objective or *_test.md file",highlight:!0}),(0,e.jsx)(s,{cmd:"login",desc:"Auth setup (interactive, --oauth, or --username)"}),(0,e.jsx)(s,{cmd:"logout",desc:"Revoke tokens + delete profile"}),(0,e.jsx)(s,{cmd:"whoami",desc:"Show authenticated identity"}),(0,e.jsx)(s,{cmd:"config",args:"show|set-\u2026|reset",desc:"Manage configuration"}),(0,e.jsx)(s,{cmd:"profiles",args:"list|switch|delete",desc:"Manage auth profiles"})]}),(0,e.jsxs)(m,{title:"RUN FLAGS",children:[(0,e.jsx)(i,{long:"--max-steps",arg:"<n>",desc:"Max agent steps (default: 30)"}),(0,e.jsx)(i,{long:"--timeout",arg:"<sec>",desc:"Kill run after N seconds"}),(0,e.jsx)(i,{long:"--headless",desc:"No visible browser window"}),(0,e.jsx)(i,{long:"--variables",arg:"<json>",desc:"Inline variables as JSON"}),(0,e.jsx)(i,{long:"--variables-file",arg:"<path>",desc:"Load variables from file"}),(0,e.jsx)(i,{long:"--ws-endpoint",arg:"<url>",desc:"Remote browser (LambdaTest)"}),(0,e.jsx)(i,{long:"--cdp-endpoint",arg:"<url>",desc:"Connect to existing Chrome CDP"}),(0,e.jsx)(i,{long:"--cft",desc:"Use Playwright Chromium instead of managed Chrome"}),(0,e.jsx)(i,{long:"--global-context",arg:"<file>",desc:"Override global context markdown"}),(0,e.jsx)(i,{long:"--local-context",arg:"<file>",desc:"Override local context markdown"}),(0,e.jsx)(i,{long:"--username",arg:"<user>",desc:"Basic auth (skip OAuth)"}),(0,e.jsx)(i,{long:"--access-key",arg:"<key>",desc:"Basic auth access key"}),(0,e.jsx)(i,{long:"--env",arg:"<name>",desc:"Environment (prod or stage)"}),(0,e.jsx)(i,{long:"--agent",desc:"NDJSON output (no UI)",highlight:!0})]}),(0,e.jsxs)(m,{title:"EXAMPLES",children:[(0,e.jsx)(u,{label:"Search",cmd:`${l} run "Search for laptop"`}),(0,e.jsx)(u,{label:"Replay a saved test",cmd:`${l} run smoke_test.md`}),(0,e.jsx)(u,{label:"Variables",cmd:`${l} run "Login as {{user}}" --variables '{"user":{"value":"alice"}}'`}),(0,e.jsx)(u,{label:"Agent",cmd:`${l} run "Add to cart" --agent | jq .status`})]}),(0,e.jsx)(m,{title:"TEST FILES",children:(0,e.jsxs)(n,{marginLeft:2,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dimmed,children:[(0,e.jsx)(o,{color:t.cyan,children:"*_test.md"})," \u2014 markdown test files with YAML frontmatter and ",(0,e.jsx)(o,{color:t.cyan,children:"## "}),"step headings."]}),(0,e.jsxs)(o,{color:t.dimmed,children:["Run with ",(0,e.jsxs)(o,{color:t.cyan,children:[l," run path/to/foo_test.md"]}),"."]}),(0,e.jsxs)(o,{color:t.dimmed,children:["Sessions you run in TUI auto-save to ",(0,e.jsx)(o,{color:t.cyan,children:"<cwd>/.testmuai/tests/<name>_test.md"})," (testing mode prompts on exit)."]})]})}),(0,e.jsxs)(n,{flexDirection:"column",marginTop:0,paddingX:1,children:[(0,e.jsx)(o,{color:t.muted,children:"\u2500".repeat(Math.min(a-2,70))}),(0,e.jsxs)(n,{gap:3,children:[(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Docs "}),(0,e.jsx)(o,{color:t.cyan,underline:!0,children:B})]}),(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Bugs "}),(0,e.jsx)(o,{color:t.cyan,underline:!0,children:S})]})]})]}),(0,e.jsx)(o,{children:" "})]})}function m({title:c,children:r}){return(0,e.jsxs)(n,{flexDirection:"column",marginBottom:1,children:[(0,e.jsx)(n,{marginLeft:1,children:(0,e.jsx)(o,{bold:!0,color:t.dimmed,children:c})}),r]})}function g({cmd:c,desc:r,highlight:a}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsxs)(n,{width:36,children:[(0,e.jsx)(o,{color:t.dimmed,children:"$ "}),(0,e.jsx)(o,{color:a?t.purple:t.cyan,children:c})]}),(0,e.jsx)(o,{color:t.dimmed,children:r})]})}function s({cmd:c,args:r,desc:a,highlight:d}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsx)(n,{width:12,children:(0,e.jsx)(o,{color:d?t.purple:t.green,bold:!0,children:c})}),(0,e.jsx)(n,{width:28,children:r?(0,e.jsx)(o,{color:t.dimmed,children:r}):null}),(0,e.jsx)(o,{color:t.dimmed,children:a})]})}function i({long:c,arg:r,desc:a,highlight:d}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsxs)(n,{width:26,children:[(0,e.jsx)(o,{color:d?t.purple:t.cyan,children:c}),r&&(0,e.jsxs)(o,{color:t.dimmed,children:[" ",r]})]}),(0,e.jsx)(o,{color:t.dimmed,children:a})]})}function u({label:c,cmd:r}){return(0,e.jsxs)(n,{marginLeft:2,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dimmed,children:["# ",c]}),(0,e.jsxs)(o,{color:t.cyan,children:["$ ",r]})]})}export{L as HelpView};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-G7I7EAV6.js";import"./chunk-YCCUBQY4.js";import"./chunk-XJ7OYQ7M.js";import"./chunk-NLYBR5FP.js";import"./chunk-BSQVYLV7.js";import"./chunk-HCBYKLMW.js";import"./chunk-JYQO6G7F.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-YUUZDFT7.js";import"./chunk-DXKKUGFG.js";import"./chunk-UR6MHSHU.js";export{b as ProjectPicker,a as formatProjectLine};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{f as a}from"./chunk-PINXGH2T.js";import"./chunk-66CVM7JL.js";import"./chunk-G7VF5SDK.js";import"./chunk-FJ6L63SP.js";import"./chunk-G7I7EAV6.js";import"./chunk-75SVKFKD.js";import"./chunk-YCCUBQY4.js";import"./chunk-XJ7OYQ7M.js";import"./chunk-VE3SUJMA.js";import"./chunk-QV2VR72Q.js";import"./chunk-NLYBR5FP.js";import"./chunk-PWGEMRBD.js";import"./chunk-L5Y2GUO6.js";import"./chunk-BSQVYLV7.js";import"./chunk-HCBYKLMW.js";import"./chunk-JYQO6G7F.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-YUUZDFT7.js";import"./chunk-DXKKUGFG.js";import"./chunk-UR6MHSHU.js";export{a as SingleShotApp};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as i,f as c}from"./chunk-JYQO6G7F.js";import"./chunk-UR6MHSHU.js";import{readFileSync as h,writeFileSync as g,mkdirSync as u}from"fs";import{join as d}from"path";var l=d(i,"changelog-cache.json"),f=3600*1e3;function p(){try{let e=JSON.parse(h(l,"utf-8"));if(Date.now()-e.cachedAt<f)return e}catch{}return null}function y(e){try{u(i,{recursive:!0}),g(l,JSON.stringify({entries:e,cachedAt:Date.now()}))}catch{}}async function E(e){try{let t=p();if(t){let r=t.entries;return e?.all?r:r.slice(0,5)}let n=new AbortController,o=setTimeout(()=>n.abort(),5e3),a=await fetch(`${c}?per_page=30`,{headers:{Accept:"application/vnd.github+json"},signal:n.signal});if(clearTimeout(o),!a.ok)return[];let s=(await a.json()).map(r=>({version:r.tag_name.replace(/^v/,""),date:r.published_at?r.published_at.slice(0,10):"",body:r.body??""}));return y(s),e?.all?s:s.slice(0,5)}catch{return[]}}function A(e){if(e.length===0)return"Could not fetch changelog. Visit https://github.com/LambdaTest/kane-cli/releases";let t=["kane-cli Changelog","\u2500".repeat(40),""];for(let n of e){if(t.push(`v${n.version} (${n.date})`),n.body){let o=n.body.split(`
3
- `).filter(a=>a.trim());for(let a of o)t.push(` ${a}`)}t.push("")}return t.join(`
4
- `)}export{E as fetchChangelog,A as formatChangelog};
@@ -1,53 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as ce}from"./chunk-JYQO6G7F.js";import{randomUUID as Oi}from"crypto";import{mkdirSync as Ti,writeFileSync as ze,appendFileSync as Ni,existsSync as Je}from"fs";import{join as U}from"path";import{writeFileSync as wi,mkdirSync as Ci,existsSync as Ei}from"fs";import{join as se,relative as Ii}from"path";function Ce(e){return typeof e>"u"||e===null}function nn(e){return typeof e=="object"&&e!==null}function rn(e){return Array.isArray(e)?e:Ce(e)?[]:[e]}function on(e,n){var r,o,i,t;if(n)for(t=Object.keys(n),r=0,o=t.length;r<o;r+=1)i=t[r],e[i]=n[i];return e}function ln(e,n){var r="",o;for(o=0;o<n;o+=1)r+=e;return r}function tn(e){return e===0&&Number.NEGATIVE_INFINITY===1/e}var un=Ce,sn=nn,cn=rn,an=ln,fn=tn,pn=on,A={isNothing:un,isObject:sn,toArray:cn,repeat:an,isNegativeZero:fn,extend:pn};function Ee(e,n){var r="",o=e.reason||"(unknown reason)";return e.mark?(e.mark.name&&(r+='in "'+e.mark.name+'" '),r+="("+(e.mark.line+1)+":"+(e.mark.column+1)+")",!n&&e.mark.snippet&&(r+=`
3
-
4
- `+e.mark.snippet),o+" "+r):o}function j(e,n){Error.call(this),this.name="YAMLException",this.reason=e,this.mark=n,this.message=Ee(this,!1),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}j.prototype=Object.create(Error.prototype);j.prototype.constructor=j;j.prototype.toString=function(n){return this.name+": "+Ee(this,n)};var b=j;function Q(e,n,r,o,i){var t="",l="",u=Math.floor(i/2)-1;return o-n>u&&(t=" ... ",n=o-u+t.length),r-o>u&&(l=" ...",r=o+u-l.length),{str:t+e.slice(n,r).replace(/\t/g,"\u2192")+l,pos:o-n+t.length}}function X(e,n){return A.repeat(" ",n-e.length)+e}function dn(e,n){if(n=Object.create(n||null),!e.buffer)return null;n.maxLength||(n.maxLength=79),typeof n.indent!="number"&&(n.indent=1),typeof n.linesBefore!="number"&&(n.linesBefore=3),typeof n.linesAfter!="number"&&(n.linesAfter=2);for(var r=/\r?\n|\r|\0/g,o=[0],i=[],t,l=-1;t=r.exec(e.buffer);)i.push(t.index),o.push(t.index+t[0].length),e.position<=t.index&&l<0&&(l=o.length-2);l<0&&(l=o.length-1);var u="",s,c,f=Math.min(e.line+n.linesAfter,i.length).toString().length,a=n.maxLength-(n.indent+f+3);for(s=1;s<=n.linesBefore&&!(l-s<0);s++)c=Q(e.buffer,o[l-s],i[l-s],e.position-(o[l]-o[l-s]),a),u=A.repeat(" ",n.indent)+X((e.line-s+1).toString(),f)+" | "+c.str+`
5
- `+u;for(c=Q(e.buffer,o[l],i[l],e.position,a),u+=A.repeat(" ",n.indent)+X((e.line+1).toString(),f)+" | "+c.str+`
6
- `,u+=A.repeat("-",n.indent+f+3+c.pos)+`^
7
- `,s=1;s<=n.linesAfter&&!(l+s>=i.length);s++)c=Q(e.buffer,o[l+s],i[l+s],e.position-(o[l]-o[l+s]),a),u+=A.repeat(" ",n.indent)+X((e.line+s+1).toString(),f)+" | "+c.str+`
8
- `;return u.replace(/\n$/,"")}var hn=dn,gn=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],mn=["scalar","sequence","mapping"];function xn(e){var n={};return e!==null&&Object.keys(e).forEach(function(r){e[r].forEach(function(o){n[String(o)]=r})}),n}function vn(e,n){if(n=n||{},Object.keys(n).forEach(function(r){if(gn.indexOf(r)===-1)throw new b('Unknown option "'+r+'" is met in definition of "'+e+'" YAML type.')}),this.options=n,this.tag=e,this.kind=n.kind||null,this.resolve=n.resolve||function(){return!0},this.construct=n.construct||function(r){return r},this.instanceOf=n.instanceOf||null,this.predicate=n.predicate||null,this.represent=n.represent||null,this.representName=n.representName||null,this.defaultStyle=n.defaultStyle||null,this.multi=n.multi||!1,this.styleAliases=xn(n.styleAliases||null),mn.indexOf(this.kind)===-1)throw new b('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var y=vn;function ae(e,n){var r=[];return e[n].forEach(function(o){var i=r.length;r.forEach(function(t,l){t.tag===o.tag&&t.kind===o.kind&&t.multi===o.multi&&(i=l)}),r[i]=o}),r}function _n(){var e={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}},n,r;function o(i){i.multi?(e.multi[i.kind].push(i),e.multi.fallback.push(i)):e[i.kind][i.tag]=e.fallback[i.tag]=i}for(n=0,r=arguments.length;n<r;n+=1)arguments[n].forEach(o);return e}function z(e){return this.extend(e)}z.prototype.extend=function(n){var r=[],o=[];if(n instanceof y)o.push(n);else if(Array.isArray(n))o=o.concat(n);else if(n&&(Array.isArray(n.implicit)||Array.isArray(n.explicit)))n.implicit&&(r=r.concat(n.implicit)),n.explicit&&(o=o.concat(n.explicit));else throw new b("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");r.forEach(function(t){if(!(t instanceof y))throw new b("Specified list of YAML types (or a single Type object) contains a non-Type object.");if(t.loadKind&&t.loadKind!=="scalar")throw new b("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");if(t.multi)throw new b("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.")}),o.forEach(function(t){if(!(t instanceof y))throw new b("Specified list of YAML types (or a single Type object) contains a non-Type object.")});var i=Object.create(z.prototype);return i.implicit=(this.implicit||[]).concat(r),i.explicit=(this.explicit||[]).concat(o),i.compiledImplicit=ae(i,"implicit"),i.compiledExplicit=ae(i,"explicit"),i.compiledTypeMap=_n(i.compiledImplicit,i.compiledExplicit),i};var An=z,yn=new y("tag:yaml.org,2002:str",{kind:"scalar",construct:function(e){return e!==null?e:""}}),Sn=new y("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(e){return e!==null?e:[]}}),bn=new y("tag:yaml.org,2002:map",{kind:"mapping",construct:function(e){return e!==null?e:{}}}),wn=new An({explicit:[yn,Sn,bn]});function Cn(e){if(e===null)return!0;var n=e.length;return n===1&&e==="~"||n===4&&(e==="null"||e==="Null"||e==="NULL")}function En(){return null}function In(e){return e===null}var Fn=new y("tag:yaml.org,2002:null",{kind:"scalar",resolve:Cn,construct:En,predicate:In,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"},empty:function(){return""}},defaultStyle:"lowercase"});function Rn(e){if(e===null)return!1;var n=e.length;return n===4&&(e==="true"||e==="True"||e==="TRUE")||n===5&&(e==="false"||e==="False"||e==="FALSE")}function Ln(e){return e==="true"||e==="True"||e==="TRUE"}function On(e){return Object.prototype.toString.call(e)==="[object Boolean]"}var Tn=new y("tag:yaml.org,2002:bool",{kind:"scalar",resolve:Rn,construct:Ln,predicate:On,represent:{lowercase:function(e){return e?"true":"false"},uppercase:function(e){return e?"TRUE":"FALSE"},camelcase:function(e){return e?"True":"False"}},defaultStyle:"lowercase"});function Nn(e){return 48<=e&&e<=57||65<=e&&e<=70||97<=e&&e<=102}function kn(e){return 48<=e&&e<=55}function Dn(e){return 48<=e&&e<=57}function Mn(e){if(e===null)return!1;var n=e.length,r=0,o=!1,i;if(!n)return!1;if(i=e[r],(i==="-"||i==="+")&&(i=e[++r]),i==="0"){if(r+1===n)return!0;if(i=e[++r],i==="b"){for(r++;r<n;r++)if(i=e[r],i!=="_"){if(i!=="0"&&i!=="1")return!1;o=!0}return o&&i!=="_"}if(i==="x"){for(r++;r<n;r++)if(i=e[r],i!=="_"){if(!Nn(e.charCodeAt(r)))return!1;o=!0}return o&&i!=="_"}if(i==="o"){for(r++;r<n;r++)if(i=e[r],i!=="_"){if(!kn(e.charCodeAt(r)))return!1;o=!0}return o&&i!=="_"}}if(i==="_")return!1;for(;r<n;r++)if(i=e[r],i!=="_"){if(!Dn(e.charCodeAt(r)))return!1;o=!0}return!(!o||i==="_")}function jn(e){var n=e,r=1,o;if(n.indexOf("_")!==-1&&(n=n.replace(/_/g,"")),o=n[0],(o==="-"||o==="+")&&(o==="-"&&(r=-1),n=n.slice(1),o=n[0]),n==="0")return 0;if(o==="0"){if(n[1]==="b")return r*parseInt(n.slice(2),2);if(n[1]==="x")return r*parseInt(n.slice(2),16);if(n[1]==="o")return r*parseInt(n.slice(2),8)}return r*parseInt(n,10)}function Pn(e){return Object.prototype.toString.call(e)==="[object Number]"&&e%1===0&&!A.isNegativeZero(e)}var Bn=new y("tag:yaml.org,2002:int",{kind:"scalar",resolve:Mn,construct:jn,predicate:Pn,represent:{binary:function(e){return e>=0?"0b"+e.toString(2):"-0b"+e.toString(2).slice(1)},octal:function(e){return e>=0?"0o"+e.toString(8):"-0o"+e.toString(8).slice(1)},decimal:function(e){return e.toString(10)},hexadecimal:function(e){return e>=0?"0x"+e.toString(16).toUpperCase():"-0x"+e.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}}),Yn=new RegExp("^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Un(e){return!(e===null||!Yn.test(e)||e[e.length-1]==="_")}function Hn(e){var n,r;return n=e.replace(/_/g,"").toLowerCase(),r=n[0]==="-"?-1:1,"+-".indexOf(n[0])>=0&&(n=n.slice(1)),n===".inf"?r===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:n===".nan"?NaN:r*parseFloat(n,10)}var $n=/^[-+]?[0-9]+e/;function Gn(e,n){var r;if(isNaN(e))switch(n){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(n){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(n){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(A.isNegativeZero(e))return"-0.0";return r=e.toString(10),$n.test(r)?r.replace("e",".e"):r}function Kn(e){return Object.prototype.toString.call(e)==="[object Number]"&&(e%1!==0||A.isNegativeZero(e))}var qn=new y("tag:yaml.org,2002:float",{kind:"scalar",resolve:Un,construct:Hn,predicate:Kn,represent:Gn,defaultStyle:"lowercase"}),Wn=wn.extend({implicit:[Fn,Tn,Bn,qn]}),Vn=Wn,Ie=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),Fe=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function Qn(e){return e===null?!1:Ie.exec(e)!==null||Fe.exec(e)!==null}function Xn(e){var n,r,o,i,t,l,u,s=0,c=null,f,a,d;if(n=Ie.exec(e),n===null&&(n=Fe.exec(e)),n===null)throw new Error("Date resolve error");if(r=+n[1],o=+n[2]-1,i=+n[3],!n[4])return new Date(Date.UTC(r,o,i));if(t=+n[4],l=+n[5],u=+n[6],n[7]){for(s=n[7].slice(0,3);s.length<3;)s+="0";s=+s}return n[9]&&(f=+n[10],a=+(n[11]||0),c=(f*60+a)*6e4,n[9]==="-"&&(c=-c)),d=new Date(Date.UTC(r,o,i,t,l,u,s)),c&&d.setTime(d.getTime()-c),d}function Zn(e){return e.toISOString()}var zn=new y("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:Qn,construct:Xn,instanceOf:Date,represent:Zn});function Jn(e){return e==="<<"||e===null}var er=new y("tag:yaml.org,2002:merge",{kind:"scalar",resolve:Jn}),ie=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
9
- \r`;function nr(e){if(e===null)return!1;var n,r,o=0,i=e.length,t=ie;for(r=0;r<i;r++)if(n=t.indexOf(e.charAt(r)),!(n>64)){if(n<0)return!1;o+=6}return o%8===0}function rr(e){var n,r,o=e.replace(/[\r\n=]/g,""),i=o.length,t=ie,l=0,u=[];for(n=0;n<i;n++)n%4===0&&n&&(u.push(l>>16&255),u.push(l>>8&255),u.push(l&255)),l=l<<6|t.indexOf(o.charAt(n));return r=i%4*6,r===0?(u.push(l>>16&255),u.push(l>>8&255),u.push(l&255)):r===18?(u.push(l>>10&255),u.push(l>>2&255)):r===12&&u.push(l>>4&255),new Uint8Array(u)}function ir(e){var n="",r=0,o,i,t=e.length,l=ie;for(o=0;o<t;o++)o%3===0&&o&&(n+=l[r>>18&63],n+=l[r>>12&63],n+=l[r>>6&63],n+=l[r&63]),r=(r<<8)+e[o];return i=t%3,i===0?(n+=l[r>>18&63],n+=l[r>>12&63],n+=l[r>>6&63],n+=l[r&63]):i===2?(n+=l[r>>10&63],n+=l[r>>4&63],n+=l[r<<2&63],n+=l[64]):i===1&&(n+=l[r>>2&63],n+=l[r<<4&63],n+=l[64],n+=l[64]),n}function or(e){return Object.prototype.toString.call(e)==="[object Uint8Array]"}var lr=new y("tag:yaml.org,2002:binary",{kind:"scalar",resolve:nr,construct:rr,predicate:or,represent:ir}),tr=Object.prototype.hasOwnProperty,ur=Object.prototype.toString;function sr(e){if(e===null)return!0;var n=[],r,o,i,t,l,u=e;for(r=0,o=u.length;r<o;r+=1){if(i=u[r],l=!1,ur.call(i)!=="[object Object]")return!1;for(t in i)if(tr.call(i,t))if(!l)l=!0;else return!1;if(!l)return!1;if(n.indexOf(t)===-1)n.push(t);else return!1}return!0}function cr(e){return e!==null?e:[]}var ar=new y("tag:yaml.org,2002:omap",{kind:"sequence",resolve:sr,construct:cr}),fr=Object.prototype.toString;function pr(e){if(e===null)return!0;var n,r,o,i,t,l=e;for(t=new Array(l.length),n=0,r=l.length;n<r;n+=1){if(o=l[n],fr.call(o)!=="[object Object]"||(i=Object.keys(o),i.length!==1))return!1;t[n]=[i[0],o[i[0]]]}return!0}function dr(e){if(e===null)return[];var n,r,o,i,t,l=e;for(t=new Array(l.length),n=0,r=l.length;n<r;n+=1)o=l[n],i=Object.keys(o),t[n]=[i[0],o[i[0]]];return t}var hr=new y("tag:yaml.org,2002:pairs",{kind:"sequence",resolve:pr,construct:dr}),gr=Object.prototype.hasOwnProperty;function mr(e){if(e===null)return!0;var n,r=e;for(n in r)if(gr.call(r,n)&&r[n]!==null)return!1;return!0}function xr(e){return e!==null?e:{}}var vr=new y("tag:yaml.org,2002:set",{kind:"mapping",resolve:mr,construct:xr}),Re=Vn.extend({implicit:[zn,er],explicit:[lr,ar,hr,vr]}),R=Object.prototype.hasOwnProperty,H=1,Le=2,Oe=3,$=4,Z=1,_r=2,fe=3,Ar=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,yr=/[\x85\u2028\u2029]/,Sr=/[,\[\]\{\}]/,Te=/^(?:!|!!|![a-z\-]+!)$/i,Ne=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function pe(e){return Object.prototype.toString.call(e)}function E(e){return e===10||e===13}function O(e){return e===9||e===32}function w(e){return e===9||e===32||e===10||e===13}function N(e){return e===44||e===91||e===93||e===123||e===125}function br(e){var n;return 48<=e&&e<=57?e-48:(n=e|32,97<=n&&n<=102?n-97+10:-1)}function wr(e){return e===120?2:e===117?4:e===85?8:0}function Cr(e){return 48<=e&&e<=57?e-48:-1}function de(e){return e===48?"\0":e===97?"\x07":e===98?"\b":e===116||e===9?" ":e===110?`
10
- `:e===118?"\v":e===102?"\f":e===114?"\r":e===101?"\x1B":e===32?" ":e===34?'"':e===47?"/":e===92?"\\":e===78?"\x85":e===95?"\xA0":e===76?"\u2028":e===80?"\u2029":""}function Er(e){return e<=65535?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function ke(e,n,r){n==="__proto__"?Object.defineProperty(e,n,{configurable:!0,enumerable:!0,writable:!0,value:r}):e[n]=r}var De=new Array(256),Me=new Array(256);for(L=0;L<256;L++)De[L]=de(L)?1:0,Me[L]=de(L);var L;function Ir(e,n){this.input=e,this.filename=n.filename||null,this.schema=n.schema||Re,this.onWarning=n.onWarning||null,this.legacy=n.legacy||!1,this.json=n.json||!1,this.listener=n.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.firstTabInLine=-1,this.documents=[]}function je(e,n){var r={name:e.filename,buffer:e.input.slice(0,-1),position:e.position,line:e.line,column:e.position-e.lineStart};return r.snippet=hn(r),new b(n,r)}function p(e,n){throw je(e,n)}function G(e,n){e.onWarning&&e.onWarning.call(null,je(e,n))}var he={YAML:function(n,r,o){var i,t,l;n.version!==null&&p(n,"duplication of %YAML directive"),o.length!==1&&p(n,"YAML directive accepts exactly one argument"),i=/^([0-9]+)\.([0-9]+)$/.exec(o[0]),i===null&&p(n,"ill-formed argument of the YAML directive"),t=parseInt(i[1],10),l=parseInt(i[2],10),t!==1&&p(n,"unacceptable YAML version of the document"),n.version=o[0],n.checkLineBreaks=l<2,l!==1&&l!==2&&G(n,"unsupported YAML version of the document")},TAG:function(n,r,o){var i,t;o.length!==2&&p(n,"TAG directive accepts exactly two arguments"),i=o[0],t=o[1],Te.test(i)||p(n,"ill-formed tag handle (first argument) of the TAG directive"),R.call(n.tagMap,i)&&p(n,'there is a previously declared suffix for "'+i+'" tag handle'),Ne.test(t)||p(n,"ill-formed tag prefix (second argument) of the TAG directive");try{t=decodeURIComponent(t)}catch{p(n,"tag prefix is malformed: "+t)}n.tagMap[i]=t}};function F(e,n,r,o){var i,t,l,u;if(n<r){if(u=e.input.slice(n,r),o)for(i=0,t=u.length;i<t;i+=1)l=u.charCodeAt(i),l===9||32<=l&&l<=1114111||p(e,"expected valid JSON character");else Ar.test(u)&&p(e,"the stream contains non-printable characters");e.result+=u}}function ge(e,n,r,o){var i,t,l,u;for(A.isObject(r)||p(e,"cannot merge mappings; the provided source object is unacceptable"),i=Object.keys(r),l=0,u=i.length;l<u;l+=1)t=i[l],R.call(n,t)||(ke(n,t,r[t]),o[t]=!0)}function k(e,n,r,o,i,t,l,u,s){var c,f;if(Array.isArray(i))for(i=Array.prototype.slice.call(i),c=0,f=i.length;c<f;c+=1)Array.isArray(i[c])&&p(e,"nested arrays are not supported inside keys"),typeof i=="object"&&pe(i[c])==="[object Object]"&&(i[c]="[object Object]");if(typeof i=="object"&&pe(i)==="[object Object]"&&(i="[object Object]"),i=String(i),n===null&&(n={}),o==="tag:yaml.org,2002:merge")if(Array.isArray(t))for(c=0,f=t.length;c<f;c+=1)ge(e,n,t[c],r);else ge(e,n,t,r);else!e.json&&!R.call(r,i)&&R.call(n,i)&&(e.line=l||e.line,e.lineStart=u||e.lineStart,e.position=s||e.position,p(e,"duplicated mapping key")),ke(n,i,t),delete r[i];return n}function oe(e){var n;n=e.input.charCodeAt(e.position),n===10?e.position++:n===13?(e.position++,e.input.charCodeAt(e.position)===10&&e.position++):p(e,"a line break is expected"),e.line+=1,e.lineStart=e.position,e.firstTabInLine=-1}function _(e,n,r){for(var o=0,i=e.input.charCodeAt(e.position);i!==0;){for(;O(i);)i===9&&e.firstTabInLine===-1&&(e.firstTabInLine=e.position),i=e.input.charCodeAt(++e.position);if(n&&i===35)do i=e.input.charCodeAt(++e.position);while(i!==10&&i!==13&&i!==0);if(E(i))for(oe(e),i=e.input.charCodeAt(e.position),o++,e.lineIndent=0;i===32;)e.lineIndent++,i=e.input.charCodeAt(++e.position);else break}return r!==-1&&o!==0&&e.lineIndent<r&&G(e,"deficient indentation"),o}function W(e){var n=e.position,r;return r=e.input.charCodeAt(n),!!((r===45||r===46)&&r===e.input.charCodeAt(n+1)&&r===e.input.charCodeAt(n+2)&&(n+=3,r=e.input.charCodeAt(n),r===0||w(r)))}function le(e,n){n===1?e.result+=" ":n>1&&(e.result+=A.repeat(`
11
- `,n-1))}function Fr(e,n,r){var o,i,t,l,u,s,c,f,a=e.kind,d=e.result,h;if(h=e.input.charCodeAt(e.position),w(h)||N(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(i=e.input.charCodeAt(e.position+1),w(i)||r&&N(i)))return!1;for(e.kind="scalar",e.result="",t=l=e.position,u=!1;h!==0;){if(h===58){if(i=e.input.charCodeAt(e.position+1),w(i)||r&&N(i))break}else if(h===35){if(o=e.input.charCodeAt(e.position-1),w(o))break}else{if(e.position===e.lineStart&&W(e)||r&&N(h))break;if(E(h))if(s=e.line,c=e.lineStart,f=e.lineIndent,_(e,!1,-1),e.lineIndent>=n){u=!0,h=e.input.charCodeAt(e.position);continue}else{e.position=l,e.line=s,e.lineStart=c,e.lineIndent=f;break}}u&&(F(e,t,l,!1),le(e,e.line-s),t=l=e.position,u=!1),O(h)||(l=e.position+1),h=e.input.charCodeAt(++e.position)}return F(e,t,l,!1),e.result?!0:(e.kind=a,e.result=d,!1)}function Rr(e,n){var r,o,i;if(r=e.input.charCodeAt(e.position),r!==39)return!1;for(e.kind="scalar",e.result="",e.position++,o=i=e.position;(r=e.input.charCodeAt(e.position))!==0;)if(r===39)if(F(e,o,e.position,!0),r=e.input.charCodeAt(++e.position),r===39)o=e.position,e.position++,i=e.position;else return!0;else E(r)?(F(e,o,i,!0),le(e,_(e,!1,n)),o=i=e.position):e.position===e.lineStart&&W(e)?p(e,"unexpected end of the document within a single quoted scalar"):(e.position++,i=e.position);p(e,"unexpected end of the stream within a single quoted scalar")}function Lr(e,n){var r,o,i,t,l,u;if(u=e.input.charCodeAt(e.position),u!==34)return!1;for(e.kind="scalar",e.result="",e.position++,r=o=e.position;(u=e.input.charCodeAt(e.position))!==0;){if(u===34)return F(e,r,e.position,!0),e.position++,!0;if(u===92){if(F(e,r,e.position,!0),u=e.input.charCodeAt(++e.position),E(u))_(e,!1,n);else if(u<256&&De[u])e.result+=Me[u],e.position++;else if((l=wr(u))>0){for(i=l,t=0;i>0;i--)u=e.input.charCodeAt(++e.position),(l=br(u))>=0?t=(t<<4)+l:p(e,"expected hexadecimal character");e.result+=Er(t),e.position++}else p(e,"unknown escape sequence");r=o=e.position}else E(u)?(F(e,r,o,!0),le(e,_(e,!1,n)),r=o=e.position):e.position===e.lineStart&&W(e)?p(e,"unexpected end of the document within a double quoted scalar"):(e.position++,o=e.position)}p(e,"unexpected end of the stream within a double quoted scalar")}function Or(e,n){var r=!0,o,i,t,l=e.tag,u,s=e.anchor,c,f,a,d,h,g=Object.create(null),x,v,C,m;if(m=e.input.charCodeAt(e.position),m===91)f=93,h=!1,u=[];else if(m===123)f=125,h=!0,u={};else return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=u),m=e.input.charCodeAt(++e.position);m!==0;){if(_(e,!0,n),m=e.input.charCodeAt(e.position),m===f)return e.position++,e.tag=l,e.anchor=s,e.kind=h?"mapping":"sequence",e.result=u,!0;r?m===44&&p(e,"expected the node content, but found ','"):p(e,"missed comma between flow collection entries"),v=x=C=null,a=d=!1,m===63&&(c=e.input.charCodeAt(e.position+1),w(c)&&(a=d=!0,e.position++,_(e,!0,n))),o=e.line,i=e.lineStart,t=e.position,D(e,n,H,!1,!0),v=e.tag,x=e.result,_(e,!0,n),m=e.input.charCodeAt(e.position),(d||e.line===o)&&m===58&&(a=!0,m=e.input.charCodeAt(++e.position),_(e,!0,n),D(e,n,H,!1,!0),C=e.result),h?k(e,u,g,v,x,C,o,i,t):a?u.push(k(e,null,g,v,x,C,o,i,t)):u.push(x),_(e,!0,n),m=e.input.charCodeAt(e.position),m===44?(r=!0,m=e.input.charCodeAt(++e.position)):r=!1}p(e,"unexpected end of the stream within a flow collection")}function Tr(e,n){var r,o,i=Z,t=!1,l=!1,u=n,s=0,c=!1,f,a;if(a=e.input.charCodeAt(e.position),a===124)o=!1;else if(a===62)o=!0;else return!1;for(e.kind="scalar",e.result="";a!==0;)if(a=e.input.charCodeAt(++e.position),a===43||a===45)Z===i?i=a===43?fe:_r:p(e,"repeat of a chomping mode identifier");else if((f=Cr(a))>=0)f===0?p(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):l?p(e,"repeat of an indentation width identifier"):(u=n+f-1,l=!0);else break;if(O(a)){do a=e.input.charCodeAt(++e.position);while(O(a));if(a===35)do a=e.input.charCodeAt(++e.position);while(!E(a)&&a!==0)}for(;a!==0;){for(oe(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!l||e.lineIndent<u)&&a===32;)e.lineIndent++,a=e.input.charCodeAt(++e.position);if(!l&&e.lineIndent>u&&(u=e.lineIndent),E(a)){s++;continue}if(e.lineIndent<u){i===fe?e.result+=A.repeat(`
12
- `,t?1+s:s):i===Z&&t&&(e.result+=`
13
- `);break}for(o?O(a)?(c=!0,e.result+=A.repeat(`
14
- `,t?1+s:s)):c?(c=!1,e.result+=A.repeat(`
15
- `,s+1)):s===0?t&&(e.result+=" "):e.result+=A.repeat(`
16
- `,s):e.result+=A.repeat(`
17
- `,t?1+s:s),t=!0,l=!0,s=0,r=e.position;!E(a)&&a!==0;)a=e.input.charCodeAt(++e.position);F(e,r,e.position,!1)}return!0}function me(e,n){var r,o=e.tag,i=e.anchor,t=[],l,u=!1,s;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=t),s=e.input.charCodeAt(e.position);s!==0&&(e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,p(e,"tab characters must not be used in indentation")),!(s!==45||(l=e.input.charCodeAt(e.position+1),!w(l))));){if(u=!0,e.position++,_(e,!0,-1)&&e.lineIndent<=n){t.push(null),s=e.input.charCodeAt(e.position);continue}if(r=e.line,D(e,n,Oe,!1,!0),t.push(e.result),_(e,!0,-1),s=e.input.charCodeAt(e.position),(e.line===r||e.lineIndent>n)&&s!==0)p(e,"bad indentation of a sequence entry");else if(e.lineIndent<n)break}return u?(e.tag=o,e.anchor=i,e.kind="sequence",e.result=t,!0):!1}function Nr(e,n,r){var o,i,t,l,u,s,c=e.tag,f=e.anchor,a={},d=Object.create(null),h=null,g=null,x=null,v=!1,C=!1,m;if(e.firstTabInLine!==-1)return!1;for(e.anchor!==null&&(e.anchorMap[e.anchor]=a),m=e.input.charCodeAt(e.position);m!==0;){if(!v&&e.firstTabInLine!==-1&&(e.position=e.firstTabInLine,p(e,"tab characters must not be used in indentation")),o=e.input.charCodeAt(e.position+1),t=e.line,(m===63||m===58)&&w(o))m===63?(v&&(k(e,a,d,h,g,null,l,u,s),h=g=x=null),C=!0,v=!0,i=!0):v?(v=!1,i=!0):p(e,"incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line"),e.position+=1,m=o;else{if(l=e.line,u=e.lineStart,s=e.position,!D(e,r,Le,!1,!0))break;if(e.line===t){for(m=e.input.charCodeAt(e.position);O(m);)m=e.input.charCodeAt(++e.position);if(m===58)m=e.input.charCodeAt(++e.position),w(m)||p(e,"a whitespace character is expected after the key-value separator within a block mapping"),v&&(k(e,a,d,h,g,null,l,u,s),h=g=x=null),C=!0,v=!1,i=!1,h=e.tag,g=e.result;else if(C)p(e,"can not read an implicit mapping pair; a colon is missed");else return e.tag=c,e.anchor=f,!0}else if(C)p(e,"can not read a block mapping entry; a multiline key may not be an implicit key");else return e.tag=c,e.anchor=f,!0}if((e.line===t||e.lineIndent>n)&&(v&&(l=e.line,u=e.lineStart,s=e.position),D(e,n,$,!0,i)&&(v?g=e.result:x=e.result),v||(k(e,a,d,h,g,x,l,u,s),h=g=x=null),_(e,!0,-1),m=e.input.charCodeAt(e.position)),(e.line===t||e.lineIndent>n)&&m!==0)p(e,"bad indentation of a mapping entry");else if(e.lineIndent<n)break}return v&&k(e,a,d,h,g,null,l,u,s),C&&(e.tag=c,e.anchor=f,e.kind="mapping",e.result=a),C}function kr(e){var n,r=!1,o=!1,i,t,l;if(l=e.input.charCodeAt(e.position),l!==33)return!1;if(e.tag!==null&&p(e,"duplication of a tag property"),l=e.input.charCodeAt(++e.position),l===60?(r=!0,l=e.input.charCodeAt(++e.position)):l===33?(o=!0,i="!!",l=e.input.charCodeAt(++e.position)):i="!",n=e.position,r){do l=e.input.charCodeAt(++e.position);while(l!==0&&l!==62);e.position<e.length?(t=e.input.slice(n,e.position),l=e.input.charCodeAt(++e.position)):p(e,"unexpected end of the stream within a verbatim tag")}else{for(;l!==0&&!w(l);)l===33&&(o?p(e,"tag suffix cannot contain exclamation marks"):(i=e.input.slice(n-1,e.position+1),Te.test(i)||p(e,"named tag handle cannot contain such characters"),o=!0,n=e.position+1)),l=e.input.charCodeAt(++e.position);t=e.input.slice(n,e.position),Sr.test(t)&&p(e,"tag suffix cannot contain flow indicator characters")}t&&!Ne.test(t)&&p(e,"tag name cannot contain such characters: "+t);try{t=decodeURIComponent(t)}catch{p(e,"tag name is malformed: "+t)}return r?e.tag=t:R.call(e.tagMap,i)?e.tag=e.tagMap[i]+t:i==="!"?e.tag="!"+t:i==="!!"?e.tag="tag:yaml.org,2002:"+t:p(e,'undeclared tag handle "'+i+'"'),!0}function Dr(e){var n,r;if(r=e.input.charCodeAt(e.position),r!==38)return!1;for(e.anchor!==null&&p(e,"duplication of an anchor property"),r=e.input.charCodeAt(++e.position),n=e.position;r!==0&&!w(r)&&!N(r);)r=e.input.charCodeAt(++e.position);return e.position===n&&p(e,"name of an anchor node must contain at least one character"),e.anchor=e.input.slice(n,e.position),!0}function Mr(e){var n,r,o;if(o=e.input.charCodeAt(e.position),o!==42)return!1;for(o=e.input.charCodeAt(++e.position),n=e.position;o!==0&&!w(o)&&!N(o);)o=e.input.charCodeAt(++e.position);return e.position===n&&p(e,"name of an alias node must contain at least one character"),r=e.input.slice(n,e.position),R.call(e.anchorMap,r)||p(e,'unidentified alias "'+r+'"'),e.result=e.anchorMap[r],_(e,!0,-1),!0}function D(e,n,r,o,i){var t,l,u,s=1,c=!1,f=!1,a,d,h,g,x,v;if(e.listener!==null&&e.listener("open",e),e.tag=null,e.anchor=null,e.kind=null,e.result=null,t=l=u=$===r||Oe===r,o&&_(e,!0,-1)&&(c=!0,e.lineIndent>n?s=1:e.lineIndent===n?s=0:e.lineIndent<n&&(s=-1)),s===1)for(;kr(e)||Dr(e);)_(e,!0,-1)?(c=!0,u=t,e.lineIndent>n?s=1:e.lineIndent===n?s=0:e.lineIndent<n&&(s=-1)):u=!1;if(u&&(u=c||i),(s===1||$===r)&&(H===r||Le===r?x=n:x=n+1,v=e.position-e.lineStart,s===1?u&&(me(e,v)||Nr(e,v,x))||Or(e,x)?f=!0:(l&&Tr(e,x)||Rr(e,x)||Lr(e,x)?f=!0:Mr(e)?(f=!0,(e.tag!==null||e.anchor!==null)&&p(e,"alias node should not have any properties")):Fr(e,x,H===r)&&(f=!0,e.tag===null&&(e.tag="?")),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):s===0&&(f=u&&me(e,v))),e.tag===null)e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);else if(e.tag==="?"){for(e.result!==null&&e.kind!=="scalar"&&p(e,'unacceptable node kind for !<?> tag; it should be "scalar", not "'+e.kind+'"'),a=0,d=e.implicitTypes.length;a<d;a+=1)if(g=e.implicitTypes[a],g.resolve(e.result)){e.result=g.construct(e.result),e.tag=g.tag,e.anchor!==null&&(e.anchorMap[e.anchor]=e.result);break}}else if(e.tag!=="!"){if(R.call(e.typeMap[e.kind||"fallback"],e.tag))g=e.typeMap[e.kind||"fallback"][e.tag];else for(g=null,h=e.typeMap.multi[e.kind||"fallback"],a=0,d=h.length;a<d;a+=1)if(e.tag.slice(0,h[a].tag.length)===h[a].tag){g=h[a];break}g||p(e,"unknown tag !<"+e.tag+">"),e.result!==null&&g.kind!==e.kind&&p(e,"unacceptable node kind for !<"+e.tag+'> tag; it should be "'+g.kind+'", not "'+e.kind+'"'),g.resolve(e.result,e.tag)?(e.result=g.construct(e.result,e.tag),e.anchor!==null&&(e.anchorMap[e.anchor]=e.result)):p(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")}return e.listener!==null&&e.listener("close",e),e.tag!==null||e.anchor!==null||f}function jr(e){var n=e.position,r,o,i,t=!1,l;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap=Object.create(null),e.anchorMap=Object.create(null);(l=e.input.charCodeAt(e.position))!==0&&(_(e,!0,-1),l=e.input.charCodeAt(e.position),!(e.lineIndent>0||l!==37));){for(t=!0,l=e.input.charCodeAt(++e.position),r=e.position;l!==0&&!w(l);)l=e.input.charCodeAt(++e.position);for(o=e.input.slice(r,e.position),i=[],o.length<1&&p(e,"directive name must not be less than one character in length");l!==0;){for(;O(l);)l=e.input.charCodeAt(++e.position);if(l===35){do l=e.input.charCodeAt(++e.position);while(l!==0&&!E(l));break}if(E(l))break;for(r=e.position;l!==0&&!w(l);)l=e.input.charCodeAt(++e.position);i.push(e.input.slice(r,e.position))}l!==0&&oe(e),R.call(he,o)?he[o](e,o,i):G(e,'unknown document directive "'+o+'"')}if(_(e,!0,-1),e.lineIndent===0&&e.input.charCodeAt(e.position)===45&&e.input.charCodeAt(e.position+1)===45&&e.input.charCodeAt(e.position+2)===45?(e.position+=3,_(e,!0,-1)):t&&p(e,"directives end mark is expected"),D(e,e.lineIndent-1,$,!1,!0),_(e,!0,-1),e.checkLineBreaks&&yr.test(e.input.slice(n,e.position))&&G(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&W(e)){e.input.charCodeAt(e.position)===46&&(e.position+=3,_(e,!0,-1));return}if(e.position<e.length-1)p(e,"end of the stream or a document separator is expected");else return}function Pe(e,n){e=String(e),n=n||{},e.length!==0&&(e.charCodeAt(e.length-1)!==10&&e.charCodeAt(e.length-1)!==13&&(e+=`
18
- `),e.charCodeAt(0)===65279&&(e=e.slice(1)));var r=new Ir(e,n),o=e.indexOf("\0");for(o!==-1&&(r.position=o,p(r,"null byte is not allowed in input")),r.input+="\0";r.input.charCodeAt(r.position)===32;)r.lineIndent+=1,r.position+=1;for(;r.position<r.length-1;)jr(r);return r.documents}function Pr(e,n,r){n!==null&&typeof n=="object"&&typeof r>"u"&&(r=n,n=null);var o=Pe(e,r);if(typeof n!="function")return o;for(var i=0,t=o.length;i<t;i+=1)n(o[i])}function Br(e,n){var r=Pe(e,n);if(r.length!==0){if(r.length===1)return r[0];throw new b("expected a single document in the stream, but found more")}}var Yr=Pr,Ur=Br,Be={loadAll:Yr,load:Ur},Ye=Object.prototype.toString,Ue=Object.prototype.hasOwnProperty,te=65279,Hr=9,P=10,$r=13,Gr=32,Kr=33,qr=34,J=35,Wr=37,Vr=38,Qr=39,Xr=42,He=44,Zr=45,K=58,zr=61,Jr=62,ei=63,ni=64,$e=91,Ge=93,ri=96,Ke=123,ii=124,qe=125,S={};S[0]="\\0";S[7]="\\a";S[8]="\\b";S[9]="\\t";S[10]="\\n";S[11]="\\v";S[12]="\\f";S[13]="\\r";S[27]="\\e";S[34]='\\"';S[92]="\\\\";S[133]="\\N";S[160]="\\_";S[8232]="\\L";S[8233]="\\P";var oi=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"],li=/^[-+]?[0-9_]+(?::[0-9_]+)+(?:\.[0-9_]*)?$/;function ti(e,n){var r,o,i,t,l,u,s;if(n===null)return{};for(r={},o=Object.keys(n),i=0,t=o.length;i<t;i+=1)l=o[i],u=String(n[l]),l.slice(0,2)==="!!"&&(l="tag:yaml.org,2002:"+l.slice(2)),s=e.compiledTypeMap.fallback[l],s&&Ue.call(s.styleAliases,u)&&(u=s.styleAliases[u]),r[l]=u;return r}function ui(e){var n,r,o;if(n=e.toString(16).toUpperCase(),e<=255)r="x",o=2;else if(e<=65535)r="u",o=4;else if(e<=4294967295)r="U",o=8;else throw new b("code point within a string may not be greater than 0xFFFFFFFF");return"\\"+r+A.repeat("0",o-n.length)+n}var si=1,B=2;function ci(e){this.schema=e.schema||Re,this.indent=Math.max(1,e.indent||2),this.noArrayIndent=e.noArrayIndent||!1,this.skipInvalid=e.skipInvalid||!1,this.flowLevel=A.isNothing(e.flowLevel)?-1:e.flowLevel,this.styleMap=ti(this.schema,e.styles||null),this.sortKeys=e.sortKeys||!1,this.lineWidth=e.lineWidth||80,this.noRefs=e.noRefs||!1,this.noCompatMode=e.noCompatMode||!1,this.condenseFlow=e.condenseFlow||!1,this.quotingType=e.quotingType==='"'?B:si,this.forceQuotes=e.forceQuotes||!1,this.replacer=typeof e.replacer=="function"?e.replacer:null,this.implicitTypes=this.schema.compiledImplicit,this.explicitTypes=this.schema.compiledExplicit,this.tag=null,this.result="",this.duplicates=[],this.usedDuplicates=null}function xe(e,n){for(var r=A.repeat(" ",n),o=0,i=-1,t="",l,u=e.length;o<u;)i=e.indexOf(`
19
- `,o),i===-1?(l=e.slice(o),o=u):(l=e.slice(o,i+1),o=i+1),l.length&&l!==`
20
- `&&(t+=r),t+=l;return t}function ee(e,n){return`
21
- `+A.repeat(" ",e.indent*n)}function ai(e,n){var r,o,i;for(r=0,o=e.implicitTypes.length;r<o;r+=1)if(i=e.implicitTypes[r],i.resolve(n))return!0;return!1}function q(e){return e===Gr||e===Hr}function Y(e){return 32<=e&&e<=126||161<=e&&e<=55295&&e!==8232&&e!==8233||57344<=e&&e<=65533&&e!==te||65536<=e&&e<=1114111}function ve(e){return Y(e)&&e!==te&&e!==$r&&e!==P}function _e(e,n,r){var o=ve(e),i=o&&!q(e);return(r?o:o&&e!==He&&e!==$e&&e!==Ge&&e!==Ke&&e!==qe)&&e!==J&&!(n===K&&!i)||ve(n)&&!q(n)&&e===J||n===K&&i}function fi(e){return Y(e)&&e!==te&&!q(e)&&e!==Zr&&e!==ei&&e!==K&&e!==He&&e!==$e&&e!==Ge&&e!==Ke&&e!==qe&&e!==J&&e!==Vr&&e!==Xr&&e!==Kr&&e!==ii&&e!==zr&&e!==Jr&&e!==Qr&&e!==qr&&e!==Wr&&e!==ni&&e!==ri}function pi(e){return!q(e)&&e!==K}function M(e,n){var r=e.charCodeAt(n),o;return r>=55296&&r<=56319&&n+1<e.length&&(o=e.charCodeAt(n+1),o>=56320&&o<=57343)?(r-55296)*1024+o-56320+65536:r}function We(e){var n=/^\n* /;return n.test(e)}var Ve=1,ne=2,Qe=3,Xe=4,T=5;function di(e,n,r,o,i,t,l,u){var s,c=0,f=null,a=!1,d=!1,h=o!==-1,g=-1,x=fi(M(e,0))&&pi(M(e,e.length-1));if(n||l)for(s=0;s<e.length;c>=65536?s+=2:s++){if(c=M(e,s),!Y(c))return T;x=x&&_e(c,f,u),f=c}else{for(s=0;s<e.length;c>=65536?s+=2:s++){if(c=M(e,s),c===P)a=!0,h&&(d=d||s-g-1>o&&e[g+1]!==" ",g=s);else if(!Y(c))return T;x=x&&_e(c,f,u),f=c}d=d||h&&s-g-1>o&&e[g+1]!==" "}return!a&&!d?x&&!l&&!i(e)?Ve:t===B?T:ne:r>9&&We(e)?T:l?t===B?T:ne:d?Xe:Qe}function hi(e,n,r,o,i){e.dump=(function(){if(n.length===0)return e.quotingType===B?'""':"''";if(!e.noCompatMode&&(oi.indexOf(n)!==-1||li.test(n)))return e.quotingType===B?'"'+n+'"':"'"+n+"'";var t=e.indent*Math.max(1,r),l=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-t),u=o||e.flowLevel>-1&&r>=e.flowLevel;function s(c){return ai(e,c)}switch(di(n,u,e.indent,l,s,e.quotingType,e.forceQuotes&&!o,i)){case Ve:return n;case ne:return"'"+n.replace(/'/g,"''")+"'";case Qe:return"|"+Ae(n,e.indent)+ye(xe(n,t));case Xe:return">"+Ae(n,e.indent)+ye(xe(gi(n,l),t));case T:return'"'+mi(n)+'"';default:throw new b("impossible error: invalid scalar style")}})()}function Ae(e,n){var r=We(e)?String(n):"",o=e[e.length-1]===`
22
- `,i=o&&(e[e.length-2]===`
23
- `||e===`
24
- `),t=i?"+":o?"":"-";return r+t+`
25
- `}function ye(e){return e[e.length-1]===`
26
- `?e.slice(0,-1):e}function gi(e,n){for(var r=/(\n+)([^\n]*)/g,o=(function(){var c=e.indexOf(`
27
- `);return c=c!==-1?c:e.length,r.lastIndex=c,Se(e.slice(0,c),n)})(),i=e[0]===`
28
- `||e[0]===" ",t,l;l=r.exec(e);){var u=l[1],s=l[2];t=s[0]===" ",o+=u+(!i&&!t&&s!==""?`
29
- `:"")+Se(s,n),i=t}return o}function Se(e,n){if(e===""||e[0]===" ")return e;for(var r=/ [^ ]/g,o,i=0,t,l=0,u=0,s="";o=r.exec(e);)u=o.index,u-i>n&&(t=l>i?l:u,s+=`
30
- `+e.slice(i,t),i=t+1),l=u;return s+=`
31
- `,e.length-i>n&&l>i?s+=e.slice(i,l)+`
32
- `+e.slice(l+1):s+=e.slice(i),s.slice(1)}function mi(e){for(var n="",r=0,o,i=0;i<e.length;r>=65536?i+=2:i++)r=M(e,i),o=S[r],!o&&Y(r)?(n+=e[i],r>=65536&&(n+=e[i+1])):n+=o||ui(r);return n}function xi(e,n,r){var o="",i=e.tag,t,l,u;for(t=0,l=r.length;t<l;t+=1)u=r[t],e.replacer&&(u=e.replacer.call(r,String(t),u)),(I(e,n,u,!1,!1)||typeof u>"u"&&I(e,n,null,!1,!1))&&(o!==""&&(o+=","+(e.condenseFlow?"":" ")),o+=e.dump);e.tag=i,e.dump="["+o+"]"}function be(e,n,r,o){var i="",t=e.tag,l,u,s;for(l=0,u=r.length;l<u;l+=1)s=r[l],e.replacer&&(s=e.replacer.call(r,String(l),s)),(I(e,n+1,s,!0,!0,!1,!0)||typeof s>"u"&&I(e,n+1,null,!0,!0,!1,!0))&&((!o||i!=="")&&(i+=ee(e,n)),e.dump&&P===e.dump.charCodeAt(0)?i+="-":i+="- ",i+=e.dump);e.tag=t,e.dump=i||"[]"}function vi(e,n,r){var o="",i=e.tag,t=Object.keys(r),l,u,s,c,f;for(l=0,u=t.length;l<u;l+=1)f="",o!==""&&(f+=", "),e.condenseFlow&&(f+='"'),s=t[l],c=r[s],e.replacer&&(c=e.replacer.call(r,s,c)),I(e,n,s,!1,!1)&&(e.dump.length>1024&&(f+="? "),f+=e.dump+(e.condenseFlow?'"':"")+":"+(e.condenseFlow?"":" "),I(e,n,c,!1,!1)&&(f+=e.dump,o+=f));e.tag=i,e.dump="{"+o+"}"}function _i(e,n,r,o){var i="",t=e.tag,l=Object.keys(r),u,s,c,f,a,d;if(e.sortKeys===!0)l.sort();else if(typeof e.sortKeys=="function")l.sort(e.sortKeys);else if(e.sortKeys)throw new b("sortKeys must be a boolean or a function");for(u=0,s=l.length;u<s;u+=1)d="",(!o||i!=="")&&(d+=ee(e,n)),c=l[u],f=r[c],e.replacer&&(f=e.replacer.call(r,c,f)),I(e,n+1,c,!0,!0,!0)&&(a=e.tag!==null&&e.tag!=="?"||e.dump&&e.dump.length>1024,a&&(e.dump&&P===e.dump.charCodeAt(0)?d+="?":d+="? "),d+=e.dump,a&&(d+=ee(e,n)),I(e,n+1,f,!0,a)&&(e.dump&&P===e.dump.charCodeAt(0)?d+=":":d+=": ",d+=e.dump,i+=d));e.tag=t,e.dump=i||"{}"}function we(e,n,r){var o,i,t,l,u,s;for(i=r?e.explicitTypes:e.implicitTypes,t=0,l=i.length;t<l;t+=1)if(u=i[t],(u.instanceOf||u.predicate)&&(!u.instanceOf||typeof n=="object"&&n instanceof u.instanceOf)&&(!u.predicate||u.predicate(n))){if(r?u.multi&&u.representName?e.tag=u.representName(n):e.tag=u.tag:e.tag="?",u.represent){if(s=e.styleMap[u.tag]||u.defaultStyle,Ye.call(u.represent)==="[object Function]")o=u.represent(n,s);else if(Ue.call(u.represent,s))o=u.represent[s](n,s);else throw new b("!<"+u.tag+'> tag resolver accepts not "'+s+'" style');e.dump=o}return!0}return!1}function I(e,n,r,o,i,t,l){e.tag=null,e.dump=r,we(e,r,!1)||we(e,r,!0);var u=Ye.call(e.dump),s=o,c;o&&(o=e.flowLevel<0||e.flowLevel>n);var f=u==="[object Object]"||u==="[object Array]",a,d;if(f&&(a=e.duplicates.indexOf(r),d=a!==-1),(e.tag!==null&&e.tag!=="?"||d||e.indent!==2&&n>0)&&(i=!1),d&&e.usedDuplicates[a])e.dump="*ref_"+a;else{if(f&&d&&!e.usedDuplicates[a]&&(e.usedDuplicates[a]=!0),u==="[object Object]")o&&Object.keys(e.dump).length!==0?(_i(e,n,e.dump,i),d&&(e.dump="&ref_"+a+e.dump)):(vi(e,n,e.dump),d&&(e.dump="&ref_"+a+" "+e.dump));else if(u==="[object Array]")o&&e.dump.length!==0?(e.noArrayIndent&&!l&&n>0?be(e,n-1,e.dump,i):be(e,n,e.dump,i),d&&(e.dump="&ref_"+a+e.dump)):(xi(e,n,e.dump),d&&(e.dump="&ref_"+a+" "+e.dump));else if(u==="[object String]")e.tag!=="?"&&hi(e,e.dump,n,t,s);else{if(u==="[object Undefined]")return!1;if(e.skipInvalid)return!1;throw new b("unacceptable kind of an object to dump "+u)}e.tag!==null&&e.tag!=="?"&&(c=encodeURI(e.tag[0]==="!"?e.tag.slice(1):e.tag).replace(/!/g,"%21"),e.tag[0]==="!"?c="!"+c:c.slice(0,18)==="tag:yaml.org,2002:"?c="!!"+c.slice(18):c="!<"+c+">",e.dump=c+" "+e.dump)}return!0}function Ai(e,n){var r=[],o=[],i,t;for(re(e,r,o),i=0,t=o.length;i<t;i+=1)n.duplicates.push(r[o[i]]);n.usedDuplicates=new Array(t)}function re(e,n,r){var o,i,t;if(e!==null&&typeof e=="object")if(i=n.indexOf(e),i!==-1)r.indexOf(i)===-1&&r.push(i);else if(n.push(e),Array.isArray(e))for(i=0,t=e.length;i<t;i+=1)re(e[i],n,r);else for(o=Object.keys(e),i=0,t=o.length;i<t;i+=1)re(e[o[i]],n,r)}function yi(e,n){n=n||{};var r=new ci(n);r.noRefs||Ai(e,r);var o=e;return r.replacer&&(o=r.replacer.call({"":o},"",o)),I(r,0,o,!0,!0)?r.dump+`
33
- `:""}var Si=yi,bi={dump:Si};function ue(e,n){return function(){throw new Error("Function yaml."+e+" is removed in js-yaml 4. Use yaml."+n+" instead, which is now safe by default.")}}var Di=Be.load,Mi=Be.loadAll,Ze=bi.dump;var ji=ue("safeLoad","load"),Pi=ue("safeLoadAll","loadAll"),Bi=ue("safeDump","dump");var Fi=new Set(["username","access_key","oauth","profile","project_id","folder_id"]),Ri=new Set(["model","env"]),V=class{constructor(n){this.opts=n}objectives=[];flushed=!1;lastWrittenPath=null;lastCollisionSuffixed=!1;appendObjective(n){this.objectives.push(n)}flush(){if(this.flushed||(this.flushed=!0,this.objectives.length===0))return;let n=this.opts.getName();if(!n)return;let r=se(this.opts.cwd,".testmuai","tests");try{Ci(r,{recursive:!0})}catch(c){process.stderr.write(`
34
- \u26A0 Failed to create ${Ii(this.opts.cwd,r)}/
35
- ${c.message}
36
- Your test recording was NOT saved.
37
-
38
- `);return}let o=se(r,`${n}_test.md`),i=2,t=!1;for(;Ei(o);)o=se(r,`${n}-${i}_test.md`),i++,t=!0;let l=Li(this.opts.getResolvedGlobal()),u=Ze(l).trimEnd(),s=[];s.push("---"),u&&s.push(u),s.push("---",""),s.push(`# Session: ${n}`,""),this.objectives.forEach((c,f)=>{s.push(`## Step ${f+1}`,c,"")});try{wi(o,s.join(`
39
- `),"utf8")}catch(c){process.stderr.write(`
40
- \u26A0 Failed to save your test recording.
41
- ${c.message}
42
- Path: ${o}
43
-
44
- `);return}this.lastWrittenPath=o,this.lastCollisionSuffixed=t}};function Li(e){let n={};for(let[r,o]of Object.entries(e))Fi.has(r)||Ri.has(r)||(n[r]=o);return n}var ki=U(ce,"sessions"),en=class{sessionId;sessionDir;runs=[];_flows=[];_nextIndex=0;_started=!1;_testId=null;_testcaseId=null;_projectId=null;_orgId=null;_uploadStatus="pending";_uploadAttempts=0;_uploadError=null;_firstObjective=null;_firstUrl=null;_auteurVariables={};_screenshotSas=null;_model="";_environment="";_profile=null;_startedAt="";_remoteLogger=null;_earlyLogBuffer=[];_recorder=null;_resolvedGlobal={};_sessionName=null;_recordingEnabled=!0;_stepRunRecords=[];constructor(){this.sessionId=Oi(),this.sessionDir=U(ki,this.sessionId)}setResolvedGlobal(n){this._resolvedGlobal={...this._resolvedGlobal,...n}}setSessionName(n){this._sessionName=n}get sessionName(){return this._sessionName}setRecordingEnabled(n){this._recordingEnabled=n}get recorder(){return this._recorder}flushRecorder(){try{this._recorder?.flush()}catch(n){process.stderr.write(`[recorder] flush failed: ${n.message}
45
- `)}}start(n){if(!this._started){this._started=!0,this._model=n.model,this._environment=n.environment,this._profile=n.profile,this._startedAt=new Date().toISOString();try{Ti(this.sessionDir,{recursive:!0}),this._recorder=new V({cwd:process.cwd(),getResolvedGlobal:()=>this._resolvedGlobal,getName:()=>this._sessionName});let r={session_id:this.sessionId,started_at:this._startedAt,model:n.model,environment:n.environment,profile:n.profile,objectives:[],runs:[],status:"in_progress"};ze(U(this.sessionDir,"session.json"),JSON.stringify(r,null,2)+`
46
- `)}catch{}this._log(`SESSION START session_id=${this.sessionId}`),this._log(`CONFIG model=${n.model} env=${n.environment} profile=${n.profile}`),this._earlyLogBuffer.push({level:"info",event:"SESSION_START",message:"Session started",context:{session_id:this.sessionId}},{level:"info",event:"CONFIG",message:"Session config",context:{model:n.model,environment:n.environment,profile:n.profile}})}}setRemoteLogger(n){this._remoteLogger=n;for(let r of this._earlyLogBuffer)n.log(r.level,r.event,r.message,r.context);this._earlyLogBuffer=[]}get hasRemoteLogger(){return this._remoteLogger!==null}setAuteurVariables(n){Object.assign(this._auteurVariables,n)}get auteurVariables(){return this._auteurVariables}setScreenshotSas(n){this._screenshotSas=n}get screenshotSas(){return this._screenshotSas}get screenshotBaseUrl(){return this._screenshotSas?`${this._screenshotSas.base_url}/${this._screenshotSas.container}`:""}get startedAt(){return this._startedAt||new Date().toISOString()}log(n,r,o,i){if(r===void 0){this._log(n);let u=n.indexOf(" "),s=u>0?n.slice(0,u):n,c=u>0?n.slice(u+1):"",f=/fail|error/i.test(n)?"error":"info";this._remoteLogger?.log(f,s,c||n);return}let t=n,l=o;this._log(`${r} ${l}`),this._remoteLogger?.log(t,r,l,i)}logStep(n,r,o){this._log(`${n} ${r}`);let i=this._nextIndex>0?this._nextIndex-1:0;this._remoteLogger?.logStep(i,n,r,o)}logCommand(n){this._log(`COMMAND ${n}`)}logRunStart(n,r,o){this._log(`RUN ${n} START objective="${r.slice(0,100)}" url=${o}`),this._remoteLogger?.setRunIndex(n),this._remoteLogger?.log("info","RUN_START",`Run ${n} started`,{run_index:n,objective:r,url:o})}logRunEnd(n,r,o,i){let t=(o??0).toFixed(1),l=(i??"").slice(0,100);this._log(`RUN ${n} END status=${r} duration=${t}s summary="${l}"`),this._remoteLogger?.log("info","RUN_END",`Run ${n} ended`,{run_index:n,status:r,duration:o??0,summary:i??""}),r!=="failed"&&r!=="error"&&this._remoteLogger?.discardSteps(n)}escalateRun(n){this._remoteLogger?.escalate(n)}logChromeLaunch(n,r){this._log(`CHROME LAUNCH port=${n} endpoint=${r}`),this._remoteLogger?.log("info","CHROME_LAUNCH","Chrome launched",{port:n,cdp_endpoint:r})}async finish(n="complete"){this._log(`SESSION END status=${n} total_runs=${this.runs.length}`),this._remoteLogger?.log("info","SESSION_END","Session ended",{status:n,total_runs:this.runs.length}),await this._remoteLogger?.shutdown();let r={session_id:this.sessionId,started_at:this._startedAt,ended_at:new Date().toISOString(),model:this._model,environment:this._environment,profile:this._profile,status:n,total_runs:this.runs.length,test_id:this._testId,testcase_id:this._testcaseId,commit_id:this.sessionId,project_id:this._projectId,upload_status:this._uploadStatus,upload_attempts:this._uploadAttempts,last_upload_attempt:this._uploadAttempts>0?new Date().toISOString():null,upload_error:this._uploadError,runs:this.runs.map(o=>({index:o.index,objective:o.objective,status:o.status,summary:o.summary,run_dir:o.run_dir}))};Je(this.sessionDir)&&ze(U(this.sessionDir,"session.json"),JSON.stringify(r,null,2)+`
47
- `),this.flushRecorder(),this._recorder=null}nextRunIndex(){return this._nextIndex}addRunResult(n,r){this.runs.push(n),this._nextIndex+=r??1,this._recordingEnabled&&this._recorder?.appendObjective(n.objective)}getContext(){return{prior_runs:this.runs.map(n=>({index:n.index,objective:n.objective,summary:n.summary,status:n.status,memory:n.context.memory,variables:n.context.variables,pointer:n.context.pointer}))}}addFlow(n){let r={...n,index:this._flows.length+1};return this._flows.push(r),r}getFlows(){return[...this._flows]}getFlow(n){return this._flows.find(r=>r.index===n)}clearFlows(){this._flows=[]}recordStepRun(n){this._stepRunRecords.push(n)}getStepRunRecords(){return[...this._stepRunRecords]}snapshot(){return{runsLen:this.runs.length,nextRunIndex:this._nextIndex,stepRunRecordsLen:this._stepRunRecords.length}}rollback(n){this.runs.length=n.runsLen,this._nextIndex=n.nextRunIndex,this._stepRunRecords.length=n.stepRunRecordsLen}setTestId(n){this._testId=n}get testId(){return this._testId}setTestcaseId(n){this._testcaseId=n}get testcaseId(){return this._testcaseId}setProjectId(n){this._projectId=n}setOrgId(n){this._orgId=n}get orgId(){return this._orgId}setFirstRun(n,r){this._firstObjective||(this._firstObjective=n,this._firstUrl=r)}get firstObjective(){return this._firstObjective}get firstUrl(){return this._firstUrl}getRunDirs(){let n=[];for(let r of this.runs)r.run_dirs&&r.run_dirs.length>0?n.push(...r.run_dirs):r.run_dir&&n.push(r.run_dir);return n}getRunObjectives(){let n=[];for(let r of this.runs)r.flow_objectives&&r.flow_objectives.length>0?n.push(...r.flow_objectives):n.push(r.objective);return n}getRunMetadata(){let n=[];for(let r of this.runs)if(r.perFlowMetadata&&r.perFlowMetadata.length>0)n.push(...r.perFlowMetadata);else{let o={resultCode:r.resultCode,reasonCode:r.reasonCode,errorMessage:r.status==="failed"?r.summary??null:null,summary:r.summary,oneLiner:r.oneLiner},i=r.run_dirs?.length??1;for(let t=0;t<i;t++)n.push(o)}return n}setUploadStatus(n,r){this._uploadStatus=n,this._uploadAttempts+=1,this._uploadError=r??null}_log(n){if(!(!this._started||!Je(this.sessionDir)))try{let r=new Date().toISOString().slice(0,19).replace("T"," "),o=U(this.sessionDir,"tui.log");Ni(o,`[${r}] ${n}
48
- `)}catch{}}};export{Di as a,en as b};
49
- /*! Bundled license information:
50
-
51
- js-yaml/dist/js-yaml.mjs:
52
- (*! js-yaml 4.1.1 https://github.com/nodeca/js-yaml @license MIT *)
53
- */
@@ -1,5 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as v}from"./chunk-NLYBR5FP.js";import{spawn as x,execSync as b}from"child_process";import{existsSync as g}from"fs";import{resolve as r,dirname as h}from"path";import{fileURLToPath as N}from"url";import{createInterface as _}from"readline";async function*E(t){let n=_({input:t,crlfDelay:1/0});for await(let l of n){let e=l.trim();if(e)try{let c=JSON.parse(e);c&&typeof c.type=="string"&&(yield c)}catch{}}}function w(t){return t==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS"]}}var d=h(N(import.meta.url));function O(){for(let t of["python3","python"])try{return b(`${t} --version`,{stdio:"ignore"}),t}catch{}return null}function C(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",l={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},e=`${process.platform}-${process.arch}`,c=l[e];if(c)for(let i of c){let a=[r(d,"..","node_modules",i,"bin",n),r(d,"..","..","node_modules",i,"bin",n),r(d,"..","..","..","node_modules",i,"bin",n)];for(let u of a)if(g(u))return{cmd:u,args:[]}}let p=[r(d,"bin",n),r(d,"..","bin",n),r(d,"..","..","..","..","v16-runner","dist",n),r(d,"..","..","..","v16-runner","dist",n),r(process.cwd(),"v16-runner","dist",n),r(process.cwd(),"..","v16-runner","dist",n)];for(let i of p)if(g(i))return{cmd:i,args:[]};let s=[r(d,"..","..","..","..","v16-runner"),r(d,"..","..","..","v16-runner"),r(process.cwd(),"v16-runner"),r(process.cwd(),"..","v16-runner")];for(let i of s)if(g(r(i,"main.py"))){for(let u of[r(i,".venv","bin","python"),r(i,"..","browser-agent",".venv","bin","python")])if(g(u))return{cmd:u,args:["main.py"],cwd:i};let a=O();if(a)return{cmd:a,args:["main.py"],cwd:i}}return null}function G(t,n){let l=C();if(!l)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");let e={...process.env};n?.environment&&(e.TESTMUAI_ENV=n.environment),e.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(e.PYTHONIOENCODING="utf-8");let c=v(n?.environment);e.V16_SERVER_API_HOST=c.v16ServerHost,e.ATMS_URL=c.tmsBaseUrl.replace(/\/api\/?$/,""),t.username&&t.access_key&&(e.LT_USERNAME=t.username,e.LT_ACCESS_KEY=t.access_key),t.session_id&&(e.TESTMUAI_SESSION_ID=t.session_id);let p=w(n?.mode??"testing");Object.assign(e,p.set);for(let o of p.unset)delete e[o];let s=x(l.cmd,l.args,{stdio:["pipe","pipe","pipe"],env:e,cwd:l.cwd});s.stdin.on("error",()=>{}),s.stdin.write(JSON.stringify(t)+`
3
- `);let i=1e5,a="";s.stderr.on("data",o=>{a+=o.toString(),a.length>i&&(a=a.slice(-i))}),s.on("error",o=>{n?.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:o.message})});let u=null,f=null,R=new Promise(o=>{s.on("close",(m,y)=>{u=m,f=y?String(y):null,n?.log?.("info","RUNNER_EXIT","Runner exited",{code:m,signal:f??"none"}),o({code:m,signal:f})})}),S=E(s.stdout);return{child:s,events:S,sendUserResponse(o){let m=JSON.stringify({type:"user_response",answer:o});try{s.stdin.write(m+`
4
- `)}catch{}},sendCancel(o){let m=JSON.stringify({type:"cancel",reason:o});try{s.stdin.write(m+`
5
- `)}catch{}},cancel(){s.kill("SIGTERM")},get stderr(){return a},get exitCode(){return u},get exitSignal(){return f},exited:R}}export{C as a,G as b};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,c,e as o}from"./chunk-JYQO6G7F.js";import{readFileSync as m,writeFileSync as f,mkdirSync as d,realpathSync as h}from"fs";import{join as g}from"path";var y="npm install -g @testmuai/kane-cli@latest",C="brew upgrade lambdatest/kane/kane-cli";function N(){try{let t=process.argv[1];if(t&&h(t).includes("/Cellar/"))return C}catch{}return y}var p=g(c,"version-check.json"),b=1440*60*1e3;function S(){try{let t=JSON.parse(m(p,"utf-8"));if(Date.now()-t.checkedAt<b)return t}catch{}return null}function k(t){try{d(c,{recursive:!0}),f(p,JSON.stringify({latest:t,checkedAt:Date.now()}))}catch{}}function l(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);for(let s=0;s<3;s++){let e=(n[s]??0)-(i[s]??0);if(e!==0)return e}return 0}function u(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);return(n[0]??0)!==(i[0]??0)?"major":(n[1]??0)!==(i[1]??0)?"minor":"patch"}async function v(){try{let t=S();if(t)return l(a,t.latest)>0?{current:a,latest:t.latest,severity:u(a,t.latest)}:null;let r=new AbortController,i=setTimeout(()=>r.abort(),5e3),n=await fetch(o,{headers:{Accept:"application/json"},signal:r.signal});if(clearTimeout(i),!n.ok)return null;let e=(await n.json())["dist-tags"]?.latest;return e?(k(e),l(a,e)>0?{current:a,latest:e,severity:u(a,e)}:null):null}catch{return null}}export{N as a,l as b,u as c,v as d};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- function a(n,r){return`Basic ${Buffer.from(`${n}:${r}`).toString("base64")}`}var c=class{constructor(r,e){this.baseUrl=r;typeof e=="string"?this.authHeader=`Bearer ${e}`:this.authHeader=a(e.username,e.accessKey)}authHeader;headers(){return{Authorization:this.authHeader,"Content-Type":"application/json",Accept:"application/json"}}async request(r,e,s,u){let o=new AbortController,i=setTimeout(()=>o.abort(),3e4);try{let t=await fetch(`${this.baseUrl}${e}`,{method:r,headers:{...this.headers(),...u},...s!==void 0?{body:JSON.stringify(s)}:{},signal:o.signal});if(clearTimeout(i),!t.ok){let d=await t.text();throw new Error(`${r} ${e} failed: ${t.status} ${d}`)}return(t.headers.get("content-type")??"").includes("application/json")?await t.json():await t.text()}catch(t){throw clearTimeout(i),t instanceof DOMException&&t.name==="AbortError"?new Error(`${r} ${e} timed out after 30s`):t}}};export{a,c as b};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c}from"./chunk-SLA75N5B.js";import{writeFileSync as g,mkdirSync as R,readFileSync as b}from"fs";import{dirname as m,basename as S}from"path";function E(s){let e=s.outPath??c(s.sourcePath);R(m(e),{recursive:!0});let t=[];t.push("---"),t.push(`test: ../${S(s.sourcePath)}`),t.push(`status: ${s.overallStatus}`),t.push(`started: ${s.startedISO}`),t.push(`duration_s: ${s.durationS}`),t.push(`session_id: ${s.sessionId}`),t.push("---",""),t.push(`# ${s.title??S(s.sourcePath)} \u2014 Result`,"");for(let a=0;a<s.rootSteps.length;a++){let i=s.rootSteps[a],r=s.outcomes.find(n=>n.rootStepIndex===a+1);if(t.push(P(i,r)),i.body.kind==="objective"&&r?.stepMd5&&t.push(`md5: ${r.stepMd5}`),r?.status==="failed"&&r.reason&&t.push(`Reason: ${r.reason}`),r?.softFailures?.length)for(let n of r.softFailures){let p=n.reason?`: ${n.reason}`:"";t.push(`\u26A0 optional sub-step ${n.subStepIndex} failed${p}`)}i.body.kind==="objective"&&r?.status!=="skipped"&&t.push(i.body.text),t.push("")}return g(e,t.join(`
3
- `),"utf8"),e}function P(s,e){if(!e)return`## ${s.heading} (no outcome)`;let t=e.duration_s!=null?`${e.duration_s}s`:"\u2014";if(e.status==="skipped")return`## ${s.heading} \u23ED skipped`;let a=e.softFailed?" (optional)":"";if(e.refKind&&e.status==="passed"){let i=e.helperResultRelPath?` \u2192 ${e.helperResultRelPath}`:"";return`## ${s.heading} \u2713 passed (via @${e.refKind} ${e.refLabel} \u2014 ${e.inlinedCount} inlined steps, ${t}${i})`}if(e.refKind&&e.status==="failed"){let i=e.failedSubStepIndex&&e.failedSubStepIndex.length>0?` \u2014 at sub-step ${e.failedSubStepIndex.join(" \u2192 sub-step ")}`:"",r=e.helperResultRelPath?` \u2192 ${e.helperResultRelPath}`:"";return`## ${s.heading} \u2717 failed${a} (via @${e.refKind} ${e.refLabel}${i}, ${t}${r})`}return e.status==="passed"?`## ${s.heading} \u2713 passed (${t})`:`## ${s.heading} \u2717 failed${a} (${t})`}var x=/^##\s+(.+?)\s+(✓ passed|✗ failed(?:\s+\(optional\))?|⏭ skipped)(?:\s+\((.*)\))?\s*$/,k=/via\s+@\w+\s+(\S+).*?(?:→\s+(\S+))?\s*$/,v=/^md5:\s+([a-f0-9]{32})\s*$/;function K(s){let t=b(s,"utf8").split(`
4
- `),a="passed";if(t[0]?.trim()==="---")for(let r=1;r<t.length&&t[r].trim()!=="---";r++){let n=/^status:\s+(passed|failed|interrupted)\s*$/.exec(t[r]);n&&(a=n[1])}let i=[];for(let r=0;r<t.length;r++){let n=x.exec(t[r]);if(!n)continue;let p=n[1],o=n[2],f=n[3]??"",h=o.startsWith("\u2713")?"passed":o.startsWith("\u23ED")?"skipped":"failed";if(/via\s+@/.test(f)){let l=k.exec(f),d=l?.[1]??"",u=l?.[2]??null;i.push({kind:"import",heading:p,status:h,md5:null,importPath:d,helperResultRelPath:u})}else{let l=null;for(let d=r+1;d<t.length&&!/^##\s/.test(t[d]);d++){if(t[d].trim()==="")continue;let u=v.exec(t[d]);if(u){l=u[1];break}break}i.push({kind:"objective",heading:p,status:h,md5:l})}}return{overallStatus:a,steps:i}}import{existsSync as $,mkdirSync as y,rmSync as I,cpSync as M}from"fs";function L(s,e){$(s)&&($(e)&&I(e,{recursive:!0,force:!0}),y(e,{recursive:!0}),M(s,e,{recursive:!0}))}export{E as a,K as b,L as c};
@@ -1,13 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{e as s}from"./chunk-SLA75N5B.js";import{writeFileSync as d,mkdirSync as o}from"fs";import{dirname as n}from"path";function f(e){let r=s(e.sourcePath);try{o(n(r),{recursive:!0})}catch(i){return process.stderr.write(`
3
- \u26A0 Failed to create output directory.
4
- ${i.message}
5
- Path: ${n(r)}
6
-
7
- `),r}let t={commit_id:e.commitId};e.testId!==void 0&&(t.test_id=e.testId),e.testcaseId!==void 0&&(t.testcase_id=e.testcaseId),e.projectId!==void 0&&(t.project_id=e.projectId),e.folderId!==void 0&&(t.folder_id=e.folderId),e.orgId!==void 0&&(t.org_id=e.orgId),e.sessionName!==void 0&&(t.session_name=e.sessionName);try{d(r,JSON.stringify(t,null,2)+`
8
- `,"utf8")}catch(i){process.stderr.write(`
9
- \u26A0 Failed to write meta.json.
10
- ${i.message}
11
- Path: ${r}
12
-
13
- `)}return r}export{f as a};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as r}from"./chunk-DXKKUGFG.js";var a=class extends r{constructor(e,t){super(e,t)}headers(){return{Authorization:this.authHeader,"Content-Type":"application/json"}}async getTmsCredentials(){let e=await fetch(`${this.baseUrl}/auth/tms-credentials`,{method:"GET",headers:this.headers()});if(!e.ok)throw new Error(`Credential exchange failed: ${e.status} ${await e.text()}`);return await e.json()}async getPresignedUrls(e,t,i){let s=await fetch(`${this.baseUrl}/upload/presign`,{method:"POST",headers:this.headers(),body:JSON.stringify({test_id:e,session_id:t,files:i})});if(!s.ok)throw new Error(`Presign request failed: ${s.status} ${await s.text()}`);return await s.json()}async getScreenshotSas(){let e=await fetch(`${this.baseUrl}/upload/screenshot-sas`,{method:"GET",headers:this.headers()});if(!e.ok)throw new Error(`Screenshot SAS request failed: ${e.status} ${await e.text()}`);return await e.json()}async getCreditBalance(){let e=await fetch(`${this.baseUrl}/credits/balance`,{method:"GET",headers:this.headers()});if(!e.ok)throw new Error(`Credit balance request failed: ${e.status} ${await e.text()}`);return await e.json()}};export{a};