@testmuai/kane-cli 0.8.9 → 0.8.10

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 (161) hide show
  1. package/dist/{ChatSurface-HXCRGPSE.js → ChatSurface-OWGOCHG3.js} +1 -1
  2. package/dist/{ChromeProfilePicker-PJS4NGEC.js → ChromeProfilePicker-QIMCWPPI.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-Q56VKWKM.js → CliFeedbackPrompt-34E2AXS4.js} +1 -1
  4. package/dist/{CliUploadProgress-TMVTKNOT.js → CliUploadProgress-TRKOSED7.js} +1 -1
  5. package/dist/{ConfigView-Y7ZVYT2C.js → ConfigView-XVKR7ATN.js} +1 -1
  6. package/dist/{EvidenceViewOffer-XV3WF2EC.js → EvidenceViewOffer-M2TGMSNE.js} +1 -1
  7. package/dist/FolderPicker-WZTNQ5IV.js +2 -0
  8. package/dist/{InfoBox-IDJYGPXF.js → InfoBox-QM5YEBMH.js} +1 -1
  9. package/dist/{LinksBox-5XNJ3UJJ.js → LinksBox-CSEDEZGU.js} +1 -1
  10. package/dist/{ProfilesView-U73QBC5W.js → ProfilesView-CZVPREIS.js} +1 -1
  11. package/dist/{ProjectPicker-KCE2VZCO.js → ProjectPicker-F6FEWNMY.js} +1 -1
  12. package/dist/{SaveSessionPrompt-3FHLIRLS.js → SaveSessionPrompt-RUSFOLBZ.js} +1 -1
  13. package/dist/SingleShotApp-WBFVUZFP.js +2 -0
  14. package/dist/{SummaryBox-GKHU4C4H.js → SummaryBox-KOJXTZVZ.js} +1 -1
  15. package/dist/TestMdRunView-BEXL7TIN.js +2 -0
  16. package/dist/{TestrunEvidenceTable-INNZCGTM.js → TestrunEvidenceTable-KGVBX76H.js} +1 -1
  17. package/dist/{WhoamiView-PSL7PUVT.js → WhoamiView-IOTBOCGK.js} +1 -1
  18. package/dist/{app-download-MBUJGT3R.js → app-download-7AF6QL2C.js} +1 -1
  19. package/dist/{auth-TYG473Z4.js → auth-2HTDCT7X.js} +1 -1
  20. package/dist/{binary-QQXWA35Q.js → binary-NKX3NEK7.js} +1 -1
  21. package/dist/{bind-WJ5UEMMZ.js → bind-IMBQFRKT.js} +2 -2
  22. package/dist/{bootstrap-MYG4TJVF.js → bootstrap-TNFANHSS.js} +1 -1
  23. package/dist/bridge-SXYWYZDO.js +2 -0
  24. package/dist/{changelog-N4L5ZUGF.js → changelog-SQVLSCYO.js} +1 -1
  25. package/dist/{chunk-IBPF5IM5.js → chunk-2BIPFAGX.js} +1 -1
  26. package/dist/{chunk-NTEI2O3O.js → chunk-2ULZVQZV.js} +2 -2
  27. package/dist/chunk-47OUD76M.js +6 -0
  28. package/dist/{chunk-PH4RABYU.js → chunk-5EKTQY2S.js} +1 -1
  29. package/dist/{chunk-O3RRCPIU.js → chunk-5Q3W3SX7.js} +1 -1
  30. package/dist/{chunk-LRHSWJDR.js → chunk-5YBKKWJA.js} +1 -1
  31. package/dist/{chunk-OR6M5HCV.js → chunk-6S3Z3WPF.js} +2 -2
  32. package/dist/chunk-724NYDMU.js +27 -0
  33. package/dist/{chunk-367NASYK.js → chunk-AWEUKXZQ.js} +1 -1
  34. package/dist/{chunk-IPZFZUJX.js → chunk-B4CYIZP5.js} +1 -1
  35. package/dist/{chunk-QS3DXKZN.js → chunk-BG2AZQLI.js} +1 -1
  36. package/dist/{chunk-TJR4R45C.js → chunk-BQSLPF5M.js} +1 -1
  37. package/dist/{chunk-6MJGCETZ.js → chunk-BUM367KV.js} +1 -1
  38. package/dist/{chunk-IANCFSSL.js → chunk-BZCVLCMG.js} +1 -1
  39. package/dist/{chunk-KKBID6TD.js → chunk-C33E5XQM.js} +1 -1
  40. package/dist/{chunk-QDE2BBAK.js → chunk-CKNVMB4E.js} +1 -1
  41. package/dist/chunk-CPGUTSUD.js +6 -0
  42. package/dist/{chunk-VSEWQEM5.js → chunk-CSCJLGIY.js} +1 -1
  43. package/dist/{chunk-NVNPXOOC.js → chunk-CXKWVHZK.js} +1 -1
  44. package/dist/{chunk-IDQBMC3B.js → chunk-D6566A2X.js} +1 -1
  45. package/dist/{chunk-OME5EJ5X.js → chunk-DF3DUGJS.js} +4 -4
  46. package/dist/{chunk-ZAKX5BN6.js → chunk-EH3YMGQ7.js} +1 -1
  47. package/dist/{chunk-CJD3EEPT.js → chunk-EKOL4WCC.js} +1 -1
  48. package/dist/{chunk-6UNXON3J.js → chunk-ESHDTCSZ.js} +1 -1
  49. package/dist/{chunk-TN4SXGAP.js → chunk-ETIQJIDI.js} +1 -1
  50. package/dist/{chunk-WHMMOMUY.js → chunk-FH6EDP77.js} +1 -1
  51. package/dist/{chunk-H6KL3FSB.js → chunk-FOP6CJAM.js} +1 -1
  52. package/dist/{chunk-IJYV3KKD.js → chunk-GHL2A273.js} +2 -2
  53. package/dist/{chunk-BOZODWIZ.js → chunk-GOF5PQ5T.js} +1 -1
  54. package/dist/{chunk-DUEROGOF.js → chunk-HE3ZKFRC.js} +1 -1
  55. package/dist/{chunk-Z2DT2QMX.js → chunk-HNNVVK2O.js} +1 -1
  56. package/dist/{chunk-22HCCSL7.js → chunk-HXSOZWFL.js} +1 -1
  57. package/dist/{chunk-TJLGHGUO.js → chunk-I3OVXNBW.js} +2 -2
  58. package/dist/{chunk-FT23VFSR.js → chunk-I5KYZHJ5.js} +48 -48
  59. package/dist/{chunk-ME3DGP7G.js → chunk-JGZWR3CR.js} +2 -2
  60. package/dist/{chunk-7RAIRUXO.js → chunk-KUAFVRSR.js} +1 -1
  61. package/dist/{chunk-MJHLQKQC.js → chunk-LKUWEQ5M.js} +1 -1
  62. package/dist/{chunk-F5BI3ALG.js → chunk-LTNMOEHT.js} +1 -1
  63. package/dist/{chunk-SJBIXLL3.js → chunk-LUTRUSIV.js} +1 -1
  64. package/dist/{chunk-2YQ6TW77.js → chunk-M6SFFAAQ.js} +6 -6
  65. package/dist/{chunk-R7GMVPAF.js → chunk-ML2E3JGK.js} +1 -1
  66. package/dist/{chunk-JPZHCB4Z.js → chunk-NDKHC6KL.js} +1 -1
  67. package/dist/{chunk-WH5RVDD6.js → chunk-NJQNHD5P.js} +1 -1
  68. package/dist/{chunk-ZBJAYCPS.js → chunk-NYQOYOBA.js} +1 -1
  69. package/dist/{chunk-AOB2ZX45.js → chunk-NYSFEZUR.js} +1 -1
  70. package/dist/{chunk-P2VERPOP.js → chunk-OSRRMY6M.js} +1 -1
  71. package/dist/{chunk-VDKGMVXZ.js → chunk-P3UGM74Z.js} +1 -1
  72. package/dist/{chunk-QHUNFH5P.js → chunk-PCVTSFIX.js} +1 -1
  73. package/dist/chunk-PDXZROJM.js +2 -0
  74. package/dist/{chunk-DGNVKMGN.js → chunk-PMOUXVUC.js} +1 -1
  75. package/dist/{chunk-COJGXGKZ.js → chunk-QJNQN6ND.js} +1 -1
  76. package/dist/{chunk-CCEXSCTN.js → chunk-RJ4YFH7K.js} +1 -1
  77. package/dist/{chunk-27P7PJAL.js → chunk-RP7FW23G.js} +1 -1
  78. package/dist/{chunk-SV5ZTCQA.js → chunk-RSNG5PBN.js} +1 -1
  79. package/dist/{chunk-GWSGTZMK.js → chunk-SAFETUCL.js} +1 -1
  80. package/dist/{chunk-OEH4LU5L.js → chunk-SAKUG4KE.js} +1 -1
  81. package/dist/{chunk-2DKJZPIH.js → chunk-SU3QKERU.js} +1 -1
  82. package/dist/{chunk-W5BTYVZD.js → chunk-SXUQBPQ6.js} +1 -1
  83. package/dist/{chunk-6S426ODE.js → chunk-SXX7ZE6L.js} +3 -3
  84. package/dist/{chunk-OLKHUNSQ.js → chunk-TGPI7VDR.js} +2 -2
  85. package/dist/{chunk-FC6DEFUP.js → chunk-TI7MR3PB.js} +1 -1
  86. package/dist/{chunk-34VSIQNO.js → chunk-UEANTGQS.js} +1 -1
  87. package/dist/{chunk-XPFFH2PC.js → chunk-USUFF3S6.js} +1 -1
  88. package/dist/{chunk-AARF24Z3.js → chunk-VIJUT5AR.js} +9 -9
  89. package/dist/{chunk-H5TNYYZW.js → chunk-W7PBJXLJ.js} +1 -1
  90. package/dist/{chunk-AROBXG66.js → chunk-WAI5UHW3.js} +1 -1
  91. package/dist/{chunk-DKUD2D5Y.js → chunk-WAWMIKSI.js} +1 -1
  92. package/dist/chunk-WEJA3EVI.js +2 -0
  93. package/dist/{chunk-VQFJM7VP.js → chunk-WXJQDLXX.js} +1 -1
  94. package/dist/chunk-XIGTZTFP.js +5 -0
  95. package/dist/{chunk-R5PIIYN2.js → chunk-XTUSDGAB.js} +1 -1
  96. package/dist/{chunk-ZHB7V3NY.js → chunk-YHL5NA43.js} +1 -1
  97. package/dist/{chunk-UEIQTXB6.js → chunk-YUA2VDWH.js} +1 -1
  98. package/dist/{chunk-M7D7EHNN.js → chunk-YXPWGIQ2.js} +1 -1
  99. package/dist/{chunk-HKCZ67AT.js → chunk-ZFZB4CGJ.js} +1 -1
  100. package/dist/{chunk-6ZNRPDLP.js → chunk-ZXTVP4WX.js} +2 -2
  101. package/dist/{config-ZDGCZZT3.js → config-UF635MC4.js} +1 -1
  102. package/dist/{credentials-YEWA7HXA.js → credentials-3KBLEVJH.js} +1 -1
  103. package/dist/{deps-bundle-JQUW73W5.js → deps-bundle-WGF4YYGO.js} +1 -1
  104. package/dist/{deps-resolve-RXF3JWAP.js → deps-resolve-DVJPU4YX.js} +1 -1
  105. package/dist/{dispatch-TRYJZWJE.js → dispatch-YTIJKX6C.js} +1 -1
  106. package/dist/{doctor-F7R4WUSI.js → doctor-2KRK42L2.js} +1 -1
  107. package/dist/{evidence-F3CQJQIB.js → evidence-CDCFEYS7.js} +1 -1
  108. package/dist/{evolve-cmd-ICTXNYU4.js → evolve-cmd-L3JIBYP5.js} +1 -1
  109. package/dist/{extract-bind-PH3VB7PY.js → extract-bind-VFQWACVO.js} +2 -2
  110. package/dist/{extract-cmd-HSESPCTL.js → extract-cmd-2OFQBBJ4.js} +1 -1
  111. package/dist/{generate-headless-Z5YF7UHX.js → generate-headless-B35UUR5A.js} +2 -2
  112. package/dist/index.js +26 -26
  113. package/dist/{ingest-cmd-SNPNVPIO.js → ingest-cmd-LAUSXSI3.js} +1 -1
  114. package/dist/install-ENSOEMSX.js +2 -0
  115. package/dist/{interactive-bind-HZG2KCTX.js → interactive-bind-OWASLPBQ.js} +3 -3
  116. package/dist/{list-commands-BHQHPHOH.js → list-commands-SLQDF6AT.js} +1 -1
  117. package/dist/login-flow-YKQUXP75.js +2 -0
  118. package/dist/{mobile-prompts-ELBW35KK.js → mobile-prompts-6MGOXIKX.js} +1 -1
  119. package/dist/persist-recorded-session-RKG7HOEW.js +3 -0
  120. package/dist/pipeline-M25AR7RM.js +2 -0
  121. package/dist/prepare-target-UGACDQEJ.js +2 -0
  122. package/dist/{reconcile-cmd-DBOUGUEB.js → reconcile-cmd-MR2MSVZ5.js} +1 -1
  123. package/dist/{reconcile-deps-RX66LB4B.js → reconcile-deps-RYO67ZXY.js} +2 -2
  124. package/dist/{reconcile-engine-OEDO57U7.js → reconcile-engine-PRH6YIAZ.js} +1 -1
  125. package/dist/{recording-banner-COX2HBLL.js → recording-banner-CH2SZ4IU.js} +1 -1
  126. package/dist/registry-ARR5ITIQ.js +2 -0
  127. package/dist/{require-project-folder-XFUJYJEA.js → require-project-folder-XY77JKAQ.js} +1 -1
  128. package/dist/{resolve-run-intent-24D3BV2J.js → resolve-run-intent-JFIGIF72.js} +1 -1
  129. package/dist/{resolver-ITA6TGPJ.js → resolver-6VDNZ6KP.js} +1 -1
  130. package/dist/{run-OTSAYPBQ.js → run-GTBYWSLW.js} +1 -1
  131. package/dist/{run-IHELHWA2.js → run-UETW72YU.js} +1 -1
  132. package/dist/{run-test-md-U5PSCPZU.js → run-test-md-OLGWTC4I.js} +2 -2
  133. package/dist/{skill-installer-STKFBIY4.js → skill-installer-NT7ZT6O4.js} +1 -1
  134. package/dist/{spawner-R76ROCR2.js → spawner-YQSAPZR4.js} +1 -1
  135. package/dist/tcg-generate-D73BMKOE.js +2 -0
  136. package/dist/testmd-actions-XPYXS36F.js +2 -0
  137. package/dist/token-refresh-2XVSIFRM.js +2 -0
  138. package/dist/{validate-basic-BPJVV64Y.js → validate-basic-OMAFYHME.js} +1 -1
  139. package/dist/{verdicts-56ZZN3E4.js → verdicts-KEBSV2NL.js} +1 -1
  140. package/dist/{version-check-PWHLDMPD.js → version-check-FRVZSYNF.js} +1 -1
  141. package/dist/{walk-session-OMUB7DPJ.js → walk-session-LNFOCPJ6.js} +1 -1
  142. package/dist/{with-telemetry-WI5FZFEK.js → with-telemetry-4ATZC6IR.js} +1 -1
  143. package/package.json +11 -11
  144. package/dist/FolderPicker-UGHFCPUL.js +0 -2
  145. package/dist/SingleShotApp-ECA24PKW.js +0 -2
  146. package/dist/TestMdRunView-KLMMXQCN.js +0 -2
  147. package/dist/bridge-S3WZ4TH2.js +0 -2
  148. package/dist/chunk-7UCICMK7.js +0 -5
  149. package/dist/chunk-BVON52QL.js +0 -6
  150. package/dist/chunk-D5MK4WTK.js +0 -26
  151. package/dist/chunk-DWHXXPDX.js +0 -2
  152. package/dist/chunk-HPBI3P6I.js +0 -6
  153. package/dist/install-VBUDO2YW.js +0 -2
  154. package/dist/login-flow-TWGSFMWW.js +0 -2
  155. package/dist/persist-recorded-session-DXUJXHC5.js +0 -3
  156. package/dist/pipeline-ULKJX3FG.js +0 -2
  157. package/dist/prepare-target-M656XQLU.js +0 -2
  158. package/dist/registry-PAVGNBIB.js +0 -2
  159. package/dist/tcg-generate-VJARWDD4.js +0 -2
  160. package/dist/testmd-actions-PXGLZV5L.js +0 -2
  161. package/dist/token-refresh-ZFT457VI.js +0 -2
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-OEH4LU5L.js";import"./chunk-COJGXGKZ.js";import"./chunk-H5TNYYZW.js";import"./chunk-DKUD2D5Y.js";import"./chunk-VZ7KXRXB.js";import"./chunk-TDPWFYTJ.js";import"./chunk-NTEI2O3O.js";import"./chunk-IBPF5IM5.js";import"./chunk-TJR4R45C.js";import"./chunk-R7GMVPAF.js";import"./chunk-YCCUBQY4.js";import"./chunk-CJD3EEPT.js";import"./chunk-BPMSNGXQ.js";import"./chunk-VE3SUJMA.js";import"./chunk-TZXXJWHA.js";import"./chunk-RSSOJ3L2.js";import"./chunk-5EOX4MEY.js";import"./chunk-F5BI3ALG.js";import"./chunk-TAOHYWEO.js";import"./chunk-7RAIRUXO.js";import"./chunk-Z7S3IWUX.js";import"./chunk-IPZFZUJX.js";import"./chunk-H6KL3FSB.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-6MJGCETZ.js";import"./chunk-DWHXXPDX.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as SingleShotApp};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{g as a}from"./chunk-367NASYK.js";import"./chunk-BVON52QL.js";import"./chunk-CCEXSCTN.js";import"./chunk-P7YZ3PU3.js";import"./chunk-TDPWFYTJ.js";import"./chunk-NTEI2O3O.js";import"./chunk-AROBXG66.js";import"./chunk-5Y2G4NC7.js";import"./chunk-R5PIIYN2.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-OR6M5HCV.js";import"./chunk-MSGW4JDG.js";import"./chunk-RSSOJ3L2.js";import"./chunk-5EOX4MEY.js";import"./chunk-Z7S3IWUX.js";import"./chunk-4JOD47QI.js";import"./chunk-H6KL3FSB.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-HKCZ67AT.js";import"./chunk-SJBIXLL3.js";import"./chunk-DWHXXPDX.js";import"./chunk-DFS4RMVP.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as TestMdRunView};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-IDQBMC3B.js";import"./chunk-ZHB7V3NY.js";import"./chunk-WH5RVDD6.js";import"./chunk-UD7KKHPW.js";import"./chunk-DWHXXPDX.js";import"./chunk-UR6MHSHU.js";export{a as runAgent};
@@ -1,5 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as V,b as q,c as le,d as A}from"./chunk-2YQ6TW77.js";import{b as z}from"./chunk-5GUD3CIH.js";import{a as B}from"./chunk-BPMSNGXQ.js";import{a as M}from"./chunk-DPUV6OSP.js";import{a as F}from"./chunk-NLCCBXXV.js";import{a as L}from"./chunk-RZ4F3BHX.js";import{e as ce}from"./chunk-UR6MHSHU.js";import{readFileSync as oe,existsSync as j,readdirSync as Se,mkdirSync as U,writeFileSync as k}from"fs";import{readFile as ae,unlink as Te}from"fs/promises";import{join as E}from"path";import{existsSync as ye,mkdirSync as Re,readdirSync as ee,writeFileSync as Ae}from"fs";import{join as x}from"path";import{randomUUID as P}from"crypto";var ue="/home/kaneai/Downloads";function w(t){return`${ue}/${t}`}function K(t){return"FILE__"+t.replace(/[^A-Za-z0-9]/g,"_")}function C(t){let e=t?.media;return!e||!e.name||!e.media_url?null:{media_id:e.media_id??"",name:e.name,media_url:e.media_url,type:e.type??"doc"}}function H(t){return t?t.includes(`
3
- `)?t.split(`
4
- `).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function T(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(o,i)=>{let n=e[i];return n?n.value:o}).replace(/\$\{(.+?)\}/g,(o,i)=>{let n=e[i];return n?n.value:o})}var de={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",clear:"CLEAR",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD",device_control:"DEVICE_CONTROL",device_control_query:"DEVICE_CONTROL_QUERY"},X={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},_e=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function Y(t,e){if(t==="analyze"){let i=e?.action_params?.analyzer_type??"";return X[i]}if(t==="scroll"&&e?.action_params?.into_view===!0)return"SCROLL_UNTIL_ELEMENT";let o=de[t];return o||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),o??t.toUpperCase()}function W(t,e){if(!t||!e)return"";try{let o=new Date(t);return isNaN(o.getTime())?"":new Date(o.getTime()+e).toISOString()}catch{return""}}function J(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function pe(t){let e=t.output_variable??"";if(!e)return"[]";let i={...J(t)};return delete i.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||P().replace(/-/g,"").slice(0,8),value:i,variable_description:"API Response"}])}function ge(t,e,o){let i=t.action_params??{},n=_e.has(e)?"Vision Agent":"Operation Agent",r={operation_type:e};if(e==="OPEN"&&(r.url=i.url??""),e==="SET_VARIABLE"&&(r.variable_name=t.output_variable??i.key??"",r.variable_value=t.output_value??""),e==="UPLOAD_FILE"){let m=C(i);m&&(r.value=w(m.name))}let s={},c={},a=t.action_instruction??"",l=i.text??"",u=i.url??"",p=[["intent",a],["value",l],["url",u]];for(let[m,h]of Object.entries(o)){let I=String(h);if(m.startsWith("secrets."))for(let[b,v]of p)v.includes(I)&&(c[b]=m);for(let[b,v]of p)v.includes(I)&&!(b in s)&&(s[b]=v)}let d=t.action_type,_={operation:t.action_instruction??"",agent:n,operation_dict:r,reasoning:d==="analyze"?i.query??"":t.intent??t.action_instruction??"",variable:s,secrets:c,params:{}};d==="analyze"&&typeof i.code=="string"&&i.code&&(_.code=i.code),d==="analyze"&&typeof i.code_js=="string"&&i.code_js&&(_.code_js=i.code_js),d==="analyze"&&typeof i.condition_expression=="string"&&i.condition_expression&&(_.condition_expression=i.condition_expression),i.uses_websocket===!0&&(_.uses_websocket=!0),i.uses_sse===!0&&(_.uses_sse=!0),d==="analyze"&&i.analyzer_type==="textual_visual"&&(typeof i.wrapped_js=="string"&&(_.wrapped_js=i.wrapped_js),Array.isArray(i.locators)&&(_.locators=i.locators),typeof i.operator=="string"&&(_.operator=i.operator),Array.isArray(i.transforms)&&(_.transforms=i.transforms),typeof i.query=="string"&&(_.query=i.query),typeof i.expected_value=="string"&&(_.expected_value=i.expected_value),typeof i.needs_unit_conversion=="boolean"&&(_.needs_unit_conversion=i.needs_unit_conversion),typeof i.condition=="string"&&(_.condition=i.condition));let f={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[d];return f&&i[f]!==void 0&&(_[f]=i[f]),d==="set_clipboard"&&typeof i.html=="string"&&i.html&&(_.html=i.html),_}function fe(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let o=e.sub_results??[];return o.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?o.some(n=>n.passed===!0):o.every(n=>n.passed===!0)}function Z(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function me(t){let e=t.assertion_tree??{},o=e.sub_results??[],i=Z(o);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:o,sub_checks:i,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function he(t){let o=(t.action_params??{}).assertion_tree??{},i=o.sub_results??[],n=Z(i);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:i,sub_checks:n,composite_operator:o.composite_operator??"and",verification:"",claim:o.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function Ee(t,e,o,i){let n=t.visual_data;if(!n||n.x==null||n.y==null)return null;let r=e?`${e}/test_screenshots`:"";return{x:n.x,y:n.y,confidence:0,bbox:n.bbox??null,bbox_source:n.bbox?"accessibility_tree":"fallback",viewport_width:n.viewport_width??1280,viewport_height:n.viewport_height??800,scale_factor:null,raw_image_url:r?`${r}/untagged_screenshot/${o}.${i?.get(o)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function be(t){if(!t)return"";let e=t;return typeof t=="object"&&!Array.isArray(t)&&Array.isArray(t.frameInfo)&&(e=t.frameInfo),!Array.isArray(e)||e.length===0?"":JSON.stringify(e)}function Ie(t){return/^(android|ios)_native$/i.test(t.platform??"")}function $(t,e={},o="",i){let n=t.action_type,r=Y(n,t),s=t.action_params??{},c=t.coordinates??null,a=t.selectors??null,l=!!(a&&a.length>0),u=Ie(t),p=t.timestamp??"",d=t.duration_ms??0,_=t.variables_used??{},g=t.action_id??P(),f=P(),m=W(p,d),h="",I="";if(n==="navigate")I=s.url??"",h=I;else if(n==="type"||n==="fill")h=s.text??"";else if(n==="press_key")h=s.key??"";else if(n==="wait")h=String(s.ms??s.timeout_ms??"");else if(n==="evaluate_js")h=s.script??"";else if(n==="upload_files"){let R=C(s);R&&(h=w(R.name))}else n==="analyze"&&r==="SET_VARIABLE"&&(h=t.output_value??"");let b="";n==="go_back"?b="back":n==="go_forward"&&(b="forward");let v=T(h,e),O=T(I,e),y=T(t.action_instruction??"",e),S=ge(t,r,_);return{operation_id:g,instruction_id:f,instruction:y,intent:y,operation_start:p,operation_end:m,status:t.status??"",command:r,name:"",target:"",value:v,message:"",operation_dict:"",frame:be(t.frame_info),error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(S),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:o?`${o}/test_screenshots/untagged_screenshot/${g}.${i?.get(g)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:O,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:r==="ASSERTION"?fe(s):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(s.tab_index??""),tab_identifier:String(s.tab_identifier??""),scroll_value:s.amount??1,scroll_direction:s.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:n==="evaluate_js"?s.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:u,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:c!==null&&!l,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:l?null:c?.x??null,y_coord:l?null:c?.y??null,target_x_coord:s.target_x??null,target_y_coord:s.target_y??null,source_description:s.source_description??null,target_description:s.target_description??null,use_coordinates:c!==null&&!l,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:l?a.map(R=>({...R,type:u?R.strategy??R.type??"native":R.isXPath?"xpath":"css"})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:r==="ASSERTION"?me(s):s.expression_tree??{},assertion_tree:s.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,reprobe:t.reprobe??!1,click_modifier:(s.click_count??1)>=2?{kind:"multi_click",frequency:s.click_count}:null,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:r==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:s.source_coordinates?{x:s.source_coordinates[0],y:s.source_coordinates[1]}:{},end_coordinates:s.target_coordinates?{x:s.target_coordinates[0],y:s.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:n==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:n==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:Ee(t,o,g,i),reasoning:n==="analyze"?s.query??"":t.intent??t.action_instruction??""}}function G(t,e,o={}){let i=t.action_type,n=Y(i,t),r=t.timestamp??"",s=t.duration_ms??0,c=W(r,s),a=n==="ASSERTION"||n==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:a?"non_driver_action":"driver_action",module_id:"",instruction:T(t.action_instruction??"",o),command:n,error:null,parent_instruction_id:"",classification_layer_resp:n==="ASSERTION"?he(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:r,end_timestamp:c,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?t.action_params?.script??"":"",user_variables:i==="api"?pe(t):"[]",api_data:i==="api"?{request:t.action_params?.api_data?.request??{},response:J(t)}:{},params_used:!1,hard_assertion:n==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function ve(t,e=[]){let o=t.action_params??{},i=o.branches??[],n=o.winning_index??-1,r=o.sub_results??[],s={};for(let a of r){let l=a.sub_results;if(l)for(let u of l){let p=u.store_key;p&&(s[p]=u)}}let c=i.map((a,l)=>{let u=l===n,p=(a.sub_checks??[]).map(d=>{let _=s[d.store_key];return{description:d.description,store_key:d.store_key,expected_value:d.expected_value,stored_value:_?.extracted_value??d.stored_value,operator:d.operator??_?.operator??"equals",transforms:d.transforms??_?.transforms??[]}});if(p.length===0&&a.condition&&r.length>0){let _=r.find(g=>g.branch_index===l)?.sub_results??[];_.length>0&&(p=_.map(g=>({description:g.description??a.condition,store_key:g.store_key??"",expected_value:g.expected??"true",stored_value:g.extracted_value??void 0,operator:g.operator??"equals",transforms:g.transforms??[]})))}return{branch_index:l,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:a.custom_event??null,children:u?e:[],sub_checks:a.condition?p:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${P().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:n,branches:c,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function Q(t,e,o){for(let i of t)i.content_type==="instruction"&&"generative_id"in i&&(i.generative_id=e,i.generative_objective=o)}function D(t,e={},o="",i,n){let r=[],s=0;for(;s<t.length;){let c=t[s],a=c.action_type;if(!n?.keepFailedActions&&c.status==="error"&&a!=="assert"&&a!=="if_else"&&a!=="child_agent_start"&&a!=="child_agent_end"&&!(c.until_condition&&!c.error)){s+=1;continue}if(a==="analyze"&&(!X[c.action_params?.analyzer_type??""]||c.action_params?.analyzer_type==="textual_visual"&&c.action_params?.code)){s+=1;continue}if(a==="child_agent_start"){let l=c.action_params?.child_id??"",u=c.action_params?.objective??"",p=[];s+=1;let d=1,_="error",g;for(;s<t.length&&d>0;){let y=t[s],S=y.action_type;if(S==="child_agent_start")d+=1;else if(S==="child_agent_end"&&(d-=1,d===0)){_=y.status??"success",g=y,s+=1;break}d>0&&p.push(y),s+=1}let f=D(p,e,o,i);Q(f,l,u);let m=g?.action_params?.result_code??null,h=g?.action_params?.reason_code??null,I=g?.action_params?.error_message??null,b=g?.action_params?.summary??null,v=g?.action_params?.one_liner??null,O=_==="error";r.push({content_type:"generative_block",instruction_id:`generative_block_${l}`,generative_id:l,objective:u,status:_,children:f,error_message:O?I??null:null,error_code:O?h??null:null,result_code:m??null,bifurcation_context:[],approach_reason:H(b),one_liner:v??null});continue}else if(a==="child_agent_end"){s+=1;continue}else if(a==="if_else"){s+=1;let l=[];for(;s<t.length&&t[s].action_type==="child_agent_start";){let u=t[s],p=u.action_params?.child_id??"",d=u.action_params?.objective??"",_=[];s+=1;let g=1,f="error";for(;s<t.length&&g>0;){let h=t[s];if(h.action_type==="child_agent_start")g+=1;else if(h.action_type==="child_agent_end"&&(g-=1,g===0)){f=h.status??"success",s+=1;break}g>0&&_.push(h),s+=1}let m=D(_,e,o,i);l.push(...m)}r.push(ve(c,l));continue}else if(a==="query_tool"){s+=1;continue}else if(c.until_condition){let l=$(c,e,o,i),u=G(c,l,e),p=typeof c.until_condition_met=="boolean"?c.until_condition_met:c.status==="success";r.push({content_type:"until_block",instruction_id:`until_${P().slice(0,8)}`,condition:c.until_condition,max_retries:c.until_max_retries??10,settle_ms:c.until_settle_ms??500,current_count:0,condition_met:p,children:[u],generative_id:"",generative_objective:"",variables_used:{},status:c.status??"success"})}else{let l=$(c,e,o,i),u=G(c,l,e);r.push(u)}s+=1}return r}function N(t,e={},o="",i,n){let r=[];for(let s of t){let c=D(s.records,e,o,i,n);if(c.length===0)continue;let a=P().replace(/-/g,"");Q(c,a,s.objective);let l=c.some(_=>"status"in _&&typeof _.status=="string"?_.status==="error"||_.status==="failed":!1),u=s.resultCode?parseInt(s.resultCode,10):null,p=u!==null&&!isNaN(u)&&u>=200,d=l||p?"error":"success";r.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:s.objective,status:d,children:c,error_message:d==="error"?s.errorMessage??null:null,error_code:d==="error"?s.reasonCode??null:null,result_code:s.resultCode??null,bifurcation_context:[],approach_reason:H(s.summary),one_liner:s.oneLiner??null})}return{instructions:r}}function te(t,e){let o;try{o=ee(t)}catch{return 0}let i=0,n=o.filter(r=>/^\d+$/.test(r)).sort((r,s)=>Number(r)-Number(s));for(let r of n){let s=x(t,r),c=x(s,"logs");if(!ye(c))continue;let a;try{a=ee(c)}catch{continue}let l=a.filter(d=>d.endsWith("-actions.ndjson")).sort((d,_)=>(parseInt(d,10)||0)-(parseInt(_,10)||0)),u=[];for(let d of l){let _=e.readActions(x(c,d));_.length&&u.push({objective:e.objective??"",records:_})}if(u.length===0)continue;let{instructions:p}=N(u,e.vars??{},e.screenshotBaseUrl??"",e.extMap,{keepFailedActions:!0});if(p.length!==0)try{let d=x(s,"auteur");Re(d,{recursive:!0}),Ae(x(d,"execution.json"),JSON.stringify(e.buildBlob(p),null,2)),i++,e.log?.("info","EVIDENCE_ARCHIVED_ATTEMPT_BLOB","Derived nested attempt blob",{attempt:r,instructions:p.length})}catch(d){e.log?.("debug","EVIDENCE_ARCHIVED_ATTEMPT_BLOB_FAILED","Nested attempt blob derivation failed",{attempt:r,error:d instanceof Error?d.message:String(d)})}}return i}var ie=ce(le(),1);import{createWriteStream as Pe}from"fs";import{readFile as Le}from"fs/promises";import{join as Ne,basename as xe}from"path";import{tmpdir as ke}from"os";var Oe=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function ne(t){let e=Ne(ke(),`${xe(t)}_artifacts.zip`);return new Promise((o,i)=>{let n=Pe(e),r=(0,ie.default)("zip",{zlib:{level:6}});n.on("close",()=>o(e)),r.on("error",i),r.pipe(n),r.glob("**/*",{cwd:t,ignore:Oe}),r.finalize()})}async function se(t){return Le(t)}async function we(t,e){return ae(z(t,e))}function Ce(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var re=class{config;controller;testId;constructor(e){this.config=e,this.controller=new M(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,o,i,n){this.config.log?.(e,o,i,n)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let o=this.config.evidence,i=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let c=this.collectNdjsonPerRun(),a=c.reduce((f,m)=>f+m.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:c.length});let l=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(l)});let{instructions:u}=c.length>0?N(c,l,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),d=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(d.length/1024).toFixed(1)});let _=E(this.config.sessionDir,"execution.json");k(_,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:_});let g=o?.packTestDir??this.config.evidenceRead?.packTestDir;if(g){let f=E(g,"auteur");U(f,{recursive:!0}),k(E(f,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(f,"execution.json")}),this.deriveArchivedAttemptBlobs(g,l)}if(e("convert","done"),o)i=d;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let f=null,m;try{f=await ne(this.config.sessionDir),m=await se(f),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(m.length/1024/1024).toFixed(1),path:f}),e("zip","done",`${(m.length/1024/1024).toFixed(1)}MB`)}finally{f&&await Te(f).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(m.length/1024/1024).toFixed(1),blob_size_kb:+(d.length/1024).toFixed(1)}),await Promise.all([A(h.urls.artifacts.upload_url,m,"application/zip"),A(h.urls.blob.upload_url,d,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let c=this.collectNdjsonPerRun(),a=this.config.variables??{},{instructions:l}=c.length>0?N(c,a,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},u=this.buildExecutionEnvelope(l),p=E(this.config.sessionDir,"execution.json");k(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let d=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(d){let _=E(d,"auteur");U(_,{recursive:!0});let g=this.readAuthoredExecution();k(E(_,"execution.json"),g??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(_,"execution.json"),source:g?"authored":"run_envelope"}),this.deriveArchivedAttemptBlobs(d,a)}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(c){let a=c instanceof Error?c.message:String(c);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),e("atomic_replace","failed",a),c}}else e("atomic_replace","skipped");let n,r;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let c=await this.config.onCommitLock();if(c.ok)n=c.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:n??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:c.reason,message:c.message}),e("commit_lock","failed",`${c.reason??"unknown"}: ${c.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${c.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let c=new B(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(n=(await c.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:n??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(n)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(n&&this.config.shareApiBaseUrl)try{r=await this.generateShareLink(n),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:r})}catch(c){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(c)})}if(o&&i){let c=null;e("zip","running");try{await o.sealFn({testcaseId:n,shareId:r}),c=o.sealedPackPath?await ae(o.sealedPackPath):await we(o.executionId,o.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:o.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(c.length/1024/1024).toFixed(1)})}catch(a){let l=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:o.executionId,error:l})}if(c){e("zip","done",`${(c.length/1024/1024).toFixed(1)}MB`),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Ce(o.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(c.length/1024/1024).toFixed(1),blob_size_kb:+(i.length/1024).toFixed(1)}),await Promise.all([A(a.urls.artifacts.upload_url,c,"application/zip"),A(a.urls.blob.upload_url,i,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(i.length/1024).toFixed(1)}),await A(a.urls.blob.upload_url,i,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let s;if(this.config.mobile&&this.config.codeExport?.enabled)this.log("info","PIPELINE_CODE_EXPORT_SKIPPED","Code export is not supported for device runs"),e("code_export","skipped","not supported on mobile yet");else if(this.config.codeExport?.enabled&&n){let c=!1;try{await this.triggerCodeExport(n),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),c=!0}catch(a){let l=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:l}),e("code_export","failed",`trigger failed: ${l}`)}if(c){e("code_export","running","Waiting for code generation\u2026");try{s=await this.pollAndDownloadCode(n,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:s}),e("code_export","done",s)}catch(a){let l=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:l}),e("code_export","failed",l)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:n,shareId:r,codeExportDir:s}}catch(o){return{success:!1,testId:this.testId,error:o instanceof Error?o.message:String(o)}}}async runCodeExport(e,o){let i=o??this.config.onProgress,n=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),n=!0}catch(r){let s=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:s}),i("code_export","failed",`trigger failed: ${s}`)}if(n){i("code_export","running","Waiting for code generation\u2026");try{let r=await this.pollAndDownloadCode(e,i);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:r}),i("code_export","done",r),r}catch(r){let s=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:s}),i("code_export","failed",s);return}}}deriveArchivedAttemptBlobs(e,o){try{let i=te(e,{readActions:n=>this.readNdjsonFromFile(n),buildBlob:n=>this.buildExecutionEnvelope(n),objective:this.config.firstObjective,vars:o,screenshotBaseUrl:this.config.screenshotBaseUrl??"",extMap:this.config.screenshotExtMap,log:(n,r,s,c)=>this.log(n,r,s,c)});i>0&&this.log("info","PIPELINE_ARCHIVED_ATTEMPTS","Nested retry-attempt blobs derived",{count:i})}catch(i){this.log("debug","PIPELINE_ARCHIVED_ATTEMPTS_FAILED","Nested attempt blob pass failed",{error:i instanceof Error?i.message:String(i)})}}collectNdjsonPerRun(){let e=[],o=this.config.runObjectives??[],i=this.config.runMetadata??[],n=this.config.evidence??this.config.evidenceRead;for(let r=0;r<this.config.runDirs.length;r++){let s=this.config.runDirs[r],c=o[r]||this.config.firstObjective,a=i[r],l=n?this.readNdjsonFromFile(E(n.packTestDir,"logs",`${n.runIndices?.[r]??r}-actions.ndjson`)):this.readNdjsonFromDir(s);l.length>0&&e.push({objective:c,records:l,resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}if(e.length===0){let r=E(this.config.sessionDir,"runs");if(j(r))try{let c=Se(r,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of c){let l=E(r,a),u=this.readNdjsonFromDir(l);u.length>0&&e.push({objective:this.config.firstObjective,records:u})}}catch{}}return e}readNdjsonFromDir(e){let o=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let i of o)if(j(i))return this.readNdjsonFromFile(i);return[]}readNdjsonFromFile(e){let o=[];if(!j(e))return o;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let i=oe(e,"utf-8");for(let n of i.split(`
5
- `)){let r=n.trim();if(r)try{o.push(JSON.parse(r))}catch{}}return o}async generateShareLink(e){let o=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:o,testcase_id:e});let i={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},n=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:n,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let r=n?await this.config.authResolver.fetch(o,i):await L(o,{...i,headers:{...i.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Share link API failed: ${r.status} ${await r.text()}`);let s=await r.json();if(!s.shareId)throw new Error("Share link API returned no shareId");return s.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:o,body:i}=V({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:o});let n={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)},r=this.config.authResolver?await this.config.authResolver.fetch(o,n):await L(o,{...n,headers:{...n.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Code export failed: ${r.status} ${await r.text()}`)}async pollAndDownloadCode(e,o){let i=q({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),n=this.config.exitTimeoutMs??3e5,r=5e3,s=Date.now()+n;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:i,timeout_ms:n});let c=(a,l)=>this.config.authResolver?this.config.authResolver.fetch(a,l):L(a,{...l,headers:{...l?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<s;){let a=await c(i,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let _=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:_.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let u=(await a.json()).data?.find(_=>_.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),o("code_export","running","Waiting for code generation\u2026"),await this.sleep(r);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),o("code_export","running","Generating code\u2026"),await this.sleep(r);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let d=this.config.codeExportDir??E(this.config.sessionDir,"code-export");U(d,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:d}),o("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let _ of u.url){let g=E(d,_.file_name),f=await L(_.file_url);if(!f.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:_.file_name,status:f.status});continue}let m=await f.text();k(g,m,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:_.file_name,size_bytes:m.length})}return d}throw new Error("Code export timed out")}sleep(e){return new Promise(o=>setTimeout(o,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:F(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let o=oe(e,"utf8");return JSON.parse(o),o}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let o=this.config.runStatuses.every(a=>a==="passed")?"success":"error",i=this.config.variableIds??{},n=[];if(this.config.variables)for(let[a,l]of Object.entries(this.config.variables)){if(l.secret)continue;let u=a.startsWith("global.")?a.slice(7):a;n.push({id:i[u]??0,name:u,value:l.value,session_value:l.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let r=[],s=[],c=new Set;for(let a of this.collectNdjsonPerRun())for(let l of a.records)if(l.output_variable&&l.output_value!=null&&r.push({name:l.output_variable,value:String(l.output_value),value_type:"test_level",variable_description:"ANALYZE result"}),l.action_type==="upload_files"){let u=C(l.action_params);if(u){let p=u.media_id||u.media_url;if(!c.has(p)){c.add(p),s.push({media_url:u.media_url,media_id:u.media_id,name:u.name,type:u.type});let d=w(u.name);r.push({name:K(u.name),value:d,value_type:"string",variable_description:`variable for ${d}`})}}}return{test_id:this.testId,version:"v4",auto_heal_version:this.config.apMode==="v2"?"AH2":"",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:o,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:s,test_params:[],test_level_variables:JSON.stringify(r),test_global_variables:n,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{we as a,Ce as b,re as c};
@@ -1,6 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Y,b as Z,c as nn,d as en,e as tn}from"./chunk-CCEXSCTN.js";import{b as rn,c as sn}from"./chunk-P7YZ3PU3.js";import{n as X,p as P}from"./chunk-RSSOJ3L2.js";import{a as jn}from"./chunk-6YGTRKDT.js";import{e as Pn}from"./chunk-UR6MHSHU.js";function on(i){return{command:"start",...i}}function an(i,e,o){return{command:"run",run_id:i,kind:e,...o}}function un(i){return{command:"cancel",...i?{run_id:i}:{}}}function dn(i){return{command:"ask_user_response",answer:i}}function ln(){return{command:"shutdown"}}var z=Symbol("run-queue-end"),G=class{items=[];waiting=null;ended=!1;error=null;push(e){if(this.waiting){let{resolve:o}=this.waiting;this.waiting=null,o(e)}else this.items.push(e)}end(){if(this.ended=!0,this.waiting){let{resolve:e}=this.waiting;this.waiting=null,e(z)}}fail(e){if(this.error=e,this.waiting){let{reject:o}=this.waiting;this.waiting=null,o(e)}}next(){return this.items.length>0?Promise.resolve(this.items.shift()):this.error?Promise.reject(this.error):this.ended?Promise.resolve(z):new Promise((e,o)=>{this.waiting={resolve:e,reject:o}})}},D=class{env;runner;log;sessionId;spawnFn;proc=null;activeRun=null;pendingReady=null;shuttingDown=!1;finalized=!1;exitInfo=null;exitedUnexpectedly=!1;exitResolve;exited;constructor(e){this.env=e.env,this.runner=e.runner,this.log=e.log,this.sessionId=e.sessionId,this.spawnFn=e.spawn??Z;let o;this.exited=new Promise(c=>{o=c}),this.exitResolve=o}async start(e){if(this.proc)throw new Error("PersistentRunner.start called twice");this.proc=this.spawnFn({env:this.env,runner:this.runner,log:this.log,sessionId:this.sessionId}),this.consume();let o=new Promise((c,g)=>{this.pendingReady={resolve:c,reject:g}});this.writeCommand(on(e)),await o}async*run(e,o,c){if(!this.proc)throw new Error("PersistentRunner.run called before start");if(this.finalized)throw new Error(`v16-runner is not running (exited code=${this.exitInfo?.code??"null"}, signal=${this.exitInfo?.signal??"none"}) \u2014 cannot start run '${e}'`);if(this.activeRun)throw new Error(`PersistentRunner.run overlap: '${this.activeRun.runId}' still in flight`);let g=new G,w={runId:e,queue:g};this.activeRun=w,this.writeCommand(an(e,o,c));try{for(;;){let v=await g.next();if(v===z||(yield v,v.type==="run_end"&&(v.run_id===void 0||v.run_id===e)))break}}finally{this.activeRun===w&&(this.activeRun=null)}}sendUserResponse(e){this.writeCommand(dn(e))}cancel(e){this.writeCommand(un(e))}kill(){this.proc?.child.kill("SIGTERM")}async shutdown(){this.shuttingDown=!0,this.proc&&(this.writeCommand(ln()),await this.exited)}get stderr(){return this.proc?.getStderr()??""}get diedUnexpectedly(){return this.exitedUnexpectedly}writeCommand(e){let o=JSON.stringify(e)+`
3
- `;try{this.proc?.child.stdin?.write(o)}catch{}}async consume(){if(!this.proc)return;try{for await(let c of this.proc.events){if(c.type==="ready"){this.onReady();continue}this.routeEvent(c)}}catch(c){this.log?.("error","PERSISTENT_RUNNER_STREAM_ERROR","Runner stdout stream errored",{error:c instanceof Error?c.message:String(c)})}let{code:e,signal:o}=await this.proc.exited;this.onExit(e,o)}onReady(){if(this.pendingReady){let{resolve:e}=this.pendingReady;this.pendingReady=null,e()}}routeEvent(e){let o=this.activeRun;if(!o){this.log?.("warn","PERSISTENT_RUNNER_ORPHAN_EVENT","Runner event with no active run",{event_type:e.type});return}o.queue.push(e)}onExit(e,o){if(!this.finalized){if(this.finalized=!0,this.exitInfo={code:e,signal:o},this.shuttingDown||(this.exitedUnexpectedly=!0),this.exitResolve({code:e,signal:o}),this.pendingReady){let{reject:c}=this.pendingReady;this.pendingReady=null,c(new Error(`v16-runner exited before ready (code=${e}, signal=${o??"none"})`))}if(this.activeRun){let{queue:c}=this.activeRun;if(this.activeRun=null,this.shuttingDown)c.end();else{let g=this.proc?.getStderr()?.slice(-500)??"";c.fail(new Error(`v16-runner exited unexpectedly mid-run (code=${e}, signal=${o??"none"})${g?`
4
- ${g}`:""}`))}}}}};var p=Pn(jn(),1);function cn(i){let e={cdp_endpoint:i.cdp_endpoint,ws_endpoint:i.ws_endpoint,width:i.width,height:i.height,headless:i.headless,model:i.model,max_steps:i.max_steps,network_ws:i.network_ws,network_sse:i.network_sse,session_id:i.session_id};return i.device&&(e.device=i.device),i.auth&&(e.auth=i.auth),i.username&&(e.username=i.username),i.access_key&&(e.access_key=i.access_key),e}function j(i,e){let o=null,c=(g,w)=>{for(let v=0;v<g.length;v++){let b=g[v],h=[...w,v];e(b)&&(o===null||h.length>o.length)&&(o=h),b.children&&b.children.length>0&&c(b.children,h)}};return c(i,[]),o}function N(i,e,o){if(e.length===0)return[...i];let c=e[0],g=[...i],w=g[c];if(e.length===1)g[c]=o(w);else{let v=e.slice(1),b=N(w.children??[],v,o);g[c]={...w,children:b}}return g}function pn(){return{steps:[],maxOrdinal:0}}function Nn(i,e){if(e.type==="run_start"&&e.child_id)return e.environment?.resolution?{...i,resolution:e.environment.resolution}:i;if(e.type==="run_start"){let o=sn(i.runnerEnvironment,rn(e.environment));if(o)return{...i,runnerEnvironment:o,...o.resolution?{resolution:o.resolution}:{}}}if(e.type==="step_end"&&typeof e.ordinal=="number"&&e.id){let o={id:e.id,ordinal:e.ordinal,status:e.status,...e.kind?{kind:e.kind}:{},...typeof e.duration=="number"?{duration_ms:Math.round(e.duration*1e3)}:{},...typeof e.action_id=="string"&&e.action_id?{action_id:e.action_id}:{}};return{...i,steps:[...i.steps,o],maxOrdinal:Math.max(i.maxOrdinal,e.ordinal)}}return i}function V(i){let e=i.indexOf(": ");return e>0&&e<15?i.slice(e+2):i}function W(i){return i.map(e=>{let o=e.children?W(e.children):e.children;return e.status==="running"?{...e,status:"stopped",phase:void 0,children:o}:o!==e.children?{...e,children:o}:e})}function Gn(i,e,o,c,g){let[w,v]=(0,p.useState)(!1),[b,h]=(0,p.useState)([]),[hn,T]=(0,p.useState)(null),[fn,B]=(0,p.useState)(null),[mn,I]=(0,p.useState)(null),[vn,J]=(0,p.useState)(null),[gn,H]=(0,p.useState)([]),[Rn,K]=(0,p.useState)(null),[Sn,yn]=(0,p.useState)(void 0),[wn,$]=(0,p.useState)(0),y=(0,p.useRef)(null),E=(0,p.useRef)(null),S=(0,p.useRef)(null),_=(0,p.useRef)(0),F=(0,p.useRef)(!1),U=(0,p.useRef)(pn()),O=(0,p.useRef)(null),xn=(0,p.useCallback)(async(m,x)=>{let Q=O.current;if(Q)try{await Q}catch{}h([]),T(null),B(null),I(null),J(null),H([]),K(null),yn(m.max_steps),v(!0),S.current=null,_.current=0,U.current=pn();let k=y.current;if(k&&E.current!==m.session_id){try{k.kill()}catch{}y.current=null,E.current=null,$(n=>n+1),k=null}if(!k){let n=Y();if(!n){I("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available."),v(!1);return}let d=en({environment:x?.environment,mode:x?.mode,assertionMode:x?.assertionMode,finalValidation:x?.finalValidation,username:m.username,accessKey:m.access_key,sessionId:m.session_id});m.device?.platform&&await nn(d,m.device);let u=new D({env:d,runner:n,log:x?.log,sessionId:m.session_id});y.current=u,E.current=m.session_id,k=u,X("runner",()=>{try{u.kill()}catch{}});let s=cn(m);try{await u.start(s)}catch(a){I(a instanceof Error?a.message:String(a)),v(!1),P("runner","Runner start failed"),y.current=null,E.current=null,$(t=>t+1);return}}let M={...m};delete M.run_id,tn(M,{environment:x?.environment});let kn=`run-${m.run_index}`,Cn=m.mode==="replay"?"replay":"author",L=k,q=(async()=>{F.current=!1;for await(let n of L.run(kn,Cn,M)){if(F.current)break;switch(U.current=Nn(U.current,n),n.type){case"run_start":if(n.child_id)break;if(S.current&&!S.current.isSingleFlow){let d=_.current;_.current++,h(u=>u.map((s,a)=>a===d?{...s,status:"running"}:s.status==="running"&&!s.children?.some(t=>t.status==="running")?{...s,status:s.children?.some(t=>t.status==="failed")?"failed":"passed"}:s))}break;case"bifurcation":{let d=n.flows??[],u=n.count??d.length,s={flows:d,isSingleFlow:n.is_single_flow??u<=1};J(s),S.current=s,_.current=0,h(d.map((a,t)=>({index:t+1,objective:a??`Flow ${t+1}`,status:"pending"})));break}case"step_start":{e?.("STEP_START",`Step ${n.index} started`,{index:n.index,objective:n.objective,child_id:n.child_id});let d=n.index,u=n.objective??`Step ${d}`,s=n.child_id,a=S.current&&!S.current.isSingleFlow;if(s)h(t=>{let r=j(t,l=>l.branchChildId===s)??j(t,l=>l.status==="running");return r?N(t,r,l=>{let f=(l.children??[]).map(R=>R.status==="running"&&R.childId===s?{...R,status:"stopped",phase:void 0}:R);return f.push({index:d,objective:u,status:"running",childId:s}),{...l,children:f}}):t});else if(a){let t=Math.max(0,_.current-1);h(r=>{let l=[...r];if(t>=l.length)return r;let f={...l[t]},C=[...f.children??[]].map(A=>A.status==="running"&&A.childId===void 0?{...A,status:"stopped",phase:void 0}:A);return C.push({index:d,objective:u,status:"running"}),f.children=C,f.status="running",l[t]=f,l})}else h(t=>{let r=W(t);return r.some(f=>f.index===d)?r.map(f=>f.index===d?{...f,status:"running",objective:u}:f):[...r,{index:d,objective:u,status:"running"}]});break}case"step_event":{e?.("STEP_EVENT",`Step ${n.index} ${n.event}`,{index:n.index,phase:n.event,action_type:n.action_type,detail:n.detail,child_id:n.child_id});let d=n.child_id,u=S.current&&!S.current.isSingleFlow;if(n.event==="cm_init"&&n.checkpoint_count!=null){H(s=>[...s,n.checkpoint_count]);break}if(n.event==="replay_started"){K({recordingLength:n.recording_length??0});break}if(n.event==="reasoning"&&n.detail&&n.detail!=="reasoning"&&o?.(n.detail),d){let s=t=>{if(t.index!==n.index||t.childId!==d)return t;let r={phase:n.event};return n.event==="reasoning"&&n.detail&&n.detail!=="reasoning"&&(r.objective=n.detail),n.action_type&&(r.actionType=n.action_type),{...t,...r}},a=t=>t.map(r=>{let l=s(r);return l!==r?l:r.children&&r.children.length>0?{...r,children:a(r.children)}:r});h(t=>t.map(r=>r.children?{...r,children:a(r.children)}:r))}else if(u){let s=Math.max(0,_.current-1);h(a=>{let t=[...a];if(s>=t.length)return a;let r={...t[s]},l=[...r.children??[]];if(!l.some(R=>R.index===n.index&&R.childId===void 0))l.push({index:n.index,objective:`Step ${n.index}`,status:"running",phase:n.event,actionType:n.action_type});else for(let R=0;R<l.length;R++){if(l[R].index!==n.index||l[R].childId!==void 0)continue;let C={phase:n.event};n.event==="reasoning"&&n.detail&&n.detail!=="reasoning"&&(C.objective=n.detail),n.action_type&&(C.actionType=n.action_type),l[R]={...l[R],...C}}return r.children=l,t[s]=r,t})}else h(s=>s.some(t=>t.index===n.index)?s.map(t=>{if(t.index!==n.index)return t;let r={phase:n.event};return n.event==="reasoning"&&n.detail&&n.detail!=="reasoning"&&(r.objective=n.detail),n.action_type&&(r.actionType=n.action_type),{...t,...r}}):[...W(s),{index:n.index,objective:`Step ${n.index}`,status:"running",phase:n.event,actionType:n.action_type}]);break}case"step_end":{e?.("STEP_END",`Step ${n.index} ${n.status}`,{index:n.index,status:n.status,duration:n.duration,summary:n.summary,child_id:n.child_id}),c?.();let d=n.child_id,u=S.current&&!S.current.isSingleFlow;if(d){let s=t=>t.index===n.index&&t.childId===d?{...t,status:n.status,duration:n.duration,phase:void 0,objective:t.objective.startsWith("Step ")?V(n.summary||t.objective):t.objective}:t,a=t=>t.map(r=>{let l=s(r);return l!==r?l:r.children&&r.children.length>0?{...r,children:a(r.children)}:r});h(t=>t.map(r=>r.children?{...r,children:a(r.children)}:r))}else if(u){let s=Math.max(0,_.current-1);h(a=>{let t=[...a];if(s>=t.length)return a;let r={...t[s]},l=(r.children??[]).map(f=>f.index===n.index&&f.childId===void 0?{...f,status:n.status,duration:n.duration,phase:void 0,objective:f.objective.startsWith("Step ")?V(n.summary||f.objective):f.objective}:f);return r.children=l,t[s]=r,t})}else h(s=>s.map(a=>a.index===n.index?{...a,status:n.status,duration:n.duration,phase:void 0,objective:a.objective.startsWith("Step ")?V(n.summary||a.objective):a.objective}:a));{let a=S.current&&!S.current.isSingleFlow?Math.max(0,_.current-1):0,t=typeof n.ordinal=="number"&&n.id?{ordinal:n.ordinal,id:n.id}:void 0;i?.(n.index,a,n.child_id,t)}break}case"child_agent_start":{let d=n.objective??"",u=n.child_id;h(s=>{let a=j(s,t=>t.status==="running");return a?N(s,a,t=>({...t,objective:`${d} (branch)`,phase:`child: ${d.slice(0,50)}`,branchObjective:d,branchChildId:u})):s});break}case"child_agent_end":{let d=n.child_id,u=`child ${n.success?"done":"failed"}`;h(s=>{let a=j(s,t=>t.branchChildId===d);return a?N(s,a,t=>({...t,phase:u})):s.map(t=>t.phase?.startsWith("child:")?{...t,phase:u}:t)});break}case"describe_trigger":g?.(n);break;case"ask_user":T(n.question??"");break;case"run_end":h(d=>d.map(u=>u.status==="running"?{...u,status:n.status,phase:void 0}:u)),v(!1),B(n);break;case"error":v(!1),I(n.message??"Runner error"),h(d=>d.map(u=>u.status==="running"?{...u,status:"failed",phase:void 0}:u));break}}})().catch(n=>{if(y.current!==L)return;let u=[n instanceof Error?n.message:String(n)],s=L.stderr;s&&!u.join(`
5
- `).includes(s)&&u.push(s),I(u.join(`
6
- `)),v(!1),h(a=>a.map(t=>t.status==="running"?{...t,status:"failed",phase:void 0}:t)),P("runner","Runner died mid-run"),y.current=null,E.current=null,$(a=>a+1)});O.current=q,q.finally(()=>{O.current===q&&(O.current=null)})},[i,e,o,c,g]),bn=(0,p.useCallback)(m=>{y.current?.sendUserResponse(m),T(null)},[]),_n=(0,p.useCallback)(()=>{let m=y.current;m&&(m.cancel(),v(!1),T(null))},[]),En=(0,p.useCallback)(async()=>{let m=y.current;if(m){try{await Promise.race([m.shutdown(),new Promise(x=>setTimeout(x,5e3))])}catch{}P("runner","Runner shut down"),y.current=null,E.current=null,$(x=>x+1)}},[]),In=(0,p.useCallback)(()=>{h([]),B(null),I(null)},[]);return(0,p.useEffect)(()=>()=>{F.current=!0,P("runner","Component unmounted"),y.current=null,E.current=null},[]),{isRunning:w,steps:b,askingUser:hn,lastRunEnd:fn,runError:mn,bifurcationInfo:vn,cmInitCounts:gn,replayInfo:Rn,maxSteps:Sn,sessionGen:wn,startRun:xn,sendAnswer:bn,cancelRun:_n,shutdownRunner:En,clearLastRun:In,getEvidenceState:()=>U.current}}export{D as a,cn as b,pn as c,Nn as d,Gn as e};
@@ -1,26 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as B,b as H,d as ie}from"./chunk-TJLGHGUO.js";import{a as j,b as N}from"./chunk-VDKGMVXZ.js";import{a as C,b as G,e as M,f as ne}from"./chunk-WHEWZR2C.js";import{a as oe,b as se}from"./chunk-2YQ6TW77.js";import{a as te,b as re}from"./chunk-IPEA7ZOF.js";import{a as L}from"./chunk-NTEI2O3O.js";import{a as ee}from"./chunk-CJD3EEPT.js";import{a as q}from"./chunk-H6KL3FSB.js";import{a as Z}from"./chunk-DPUV6OSP.js";import{a as A}from"./chunk-RZ4F3BHX.js";import{a as O}from"./chunk-6MJGCETZ.js";import{x as h}from"./chunk-DWHXXPDX.js";import{a as F}from"./chunk-HCBYKLMW.js";import{a as k,b as m,i as Q}from"./chunk-C44QQJR4.js";import{a as X}from"./chunk-6YGTRKDT.js";import{e as v}from"./chunk-UR6MHSHU.js";var D=v(X(),1);import{existsSync as P,readFileSync as Ge,rmSync as he,unlinkSync as He}from"fs";import{resolve as z}from"path";import{promises as ae,realpathSync as be}from"fs";import{homedir as Te}from"os";import{join as V,parse as Ee,relative as ce,resolve as le}from"path";var ue=new Set(["node_modules",".git","dist","build",".next",".venv","venv","target","__pycache__"]),R=class extends Error{constructor(s){super(`refusing to scan '${s}'. Run from your project root, or pass --root <dir>.`);this.cwd=s;this.name="HomeRefusedError"}};function de(e){try{return be(le(e))}catch{return le(e)}}function Se(e){let r=de(e),s=de(Te()),n=Ee(r).root;if(process.platform==="win32"){let o=t=>t.toLowerCase();return o(r)===o(s)||o(r)===o(n)}return r===s||r===n}async function U(e){if(Se(e.root))throw new R(e.root);let r=e.maxEntries??5e4,s=e.maxResults??5e3,n=new Set(e.ignore??[]),o=[],t=0,i=0,c=!1,f,l=[e.root];for(;l.length>0&&!c;){let a=l.shift(),g;try{g=await ae.readdir(a,{withFileTypes:!0})}catch{continue}i++;for(let b of g){if(t++,t>r){c=!0,f="max_entries";break}let x=b.name,E=V(a,x);if(b.isDirectory()){if(ue.has(x)||x.startsWith(".")||x.startsWith("output-")||n.has(x))continue;l.push(E)}else if(b.isFile()&&x.endsWith("_test.md")&&(o.push({path:E,relPath:ce(e.root,E),source:"cwd"}),o.length>=s)){c=!0,f="max_results";break}}e.onProgress?.(i,o.length)}if(!c){let g=[{dir:V(e.root,".testmuai","tests"),depth:0}];for(;g.length>0&&!c;){let{dir:b,depth:x}=g.shift(),E;try{E=await ae.readdir(b,{withFileTypes:!0})}catch{continue}i++;for(let u of E){if(t++,t>r){c=!0,f="max_entries";break}let w=u.name,y=V(b,w);if(u.isDirectory()){if(x>=20||w.startsWith(".")||w.startsWith("output-")||ue.has(w))continue;g.push({dir:y,depth:x+1})}else if(u.isFile()&&w.endsWith("_test.md")&&(o.push({path:y,relPath:ce(e.root,y),source:"tests-dir"}),o.length>=s)){c=!0,f="max_results";break}}}}return{results:o,aborted:c,abortReason:f,dirsScanned:i}}import{readFileSync as ve}from"fs";function Re(e){let r;try{r=ve(e,"utf8")}catch{return{tags:[]}}try{let{global:s}=te(e,r),n=re(s);return{tags:s.tags??[],...n?{mobileTarget:n}:{}}}catch{return{tags:[],...Me(r)?{mobileTarget:Pe}:{}}}}var Pe={platform:"",app:""};function Me(e){let r=/^---\r?\n([\s\S]*?)\r?\n---/.exec(e);if(!r)return!1;let s=r[1].split(/\r?\n/);if(s.some(o=>/^target:\s*['"]?(emulator|simulator)['"]?\s*$/.test(o)))return!0;let n=s.findIndex(o=>/^target:\s*$/.test(o));return n<0?!1:s.slice(n+1).some(o=>/^\s+\S/.test(o))}function W(e){return Re(e).tags}import{mkdirSync as De,writeFileSync as $e}from"fs";import{join as Ce}from"path";function fe(e,r){return`Basic ${Buffer.from(`${e}:${r}`).toString("base64")}`}async function Ie(e){let r=oe({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId,codeExport:{enabled:!0,language:e.language,skipValidation:e.skipValidation}}),s=await A(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:fe(e.auth.username,e.auth.access_key)},body:JSON.stringify(r.body)});if(!s.ok)throw new Error(`code-export trigger failed: ${s.status} ${await s.text()}`);e.log("info","CODE_EXPORT_TRIGGERED","Code export triggered",{testcase_id:e.testcaseId})}async function Fe(e){let r=se({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId}),s=e.pollIntervalMs??5e3,n=e.timeoutMs??3e5,o=Date.now()+n;for(;Date.now()<o;){let t=await A(r,{headers:{authorization:fe(e.auth.username,e.auth.access_key),accept:"application/json"}});if(!t.ok){await new Promise(l=>setTimeout(l,s));continue}let c=(await t.json()).data?.find(l=>l.code_name==="kane-cli-trigger");if(!c){await new Promise(l=>setTimeout(l,s));continue}let f=(c.status??"").toLowerCase();if(f==="in progress"||f==="in_progress"||f==="pending"){await new Promise(l=>setTimeout(l,s));continue}if(!c.url||c.url.length===0)throw new Error(`code-export status=${c.status} but no files returned`);De(e.outDir,{recursive:!0});for(let l of c.url){let a=Ce(e.outDir,l.file_name),g=await A(l.file_url);if(!g.ok){e.log("warn","CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:l.file_name,status:g.status});continue}let b=await g.text();$e(a,b,"utf-8")}return e.log("info","CODE_EXPORT_DOWNLOADED","Code export saved",{out_dir:e.outDir,file_count:c.url.length}),e.outDir}throw new Error("code-export polling timed out")}async function ge(e){return await Ie(e),await Fe(e)}var T=v(X(),1);import{existsSync as Oe,readFileSync as Ae}from"fs";var p=v(F(),1);function Le(e){B(e);let r=M(e);if(!Oe(r))return null;try{return JSON.parse(Ae(r,"utf8"))}catch{return{}}}function Be(e){return e===null?"never_run":e.testcase_id?"synced":"local_only"}function je(e){return e==="synced"?"\u2601":e==="local_only"?"\u25A3":"\u25CB"}function Ne(e){return e==="tests-dir"?"\u2726":" "}function Ue(e,r){return r==="all"?!0:r==="synced"?e.status==="synced":r==="local"?e.status==="local_only":r==="never_run"?e.status==="never_run":r==="cli"?e.source==="tests-dir":r==="hand"?e.source==="cwd":!0}var Y=["all","synced","local","never_run","cli","hand"];function We(e){let r=Y.indexOf(e);return Y[(r+1)%Y.length]}function me({root:e,currentOrgId:r,onSelect:s,onCancel:n}){let[o,t]=(0,T.useState)([]),[i,c]=(0,T.useState)(null),[f,l]=(0,T.useState)(!0),[a,g]=(0,T.useState)("all");(0,T.useEffect)(()=>{(async()=>{try{let u=await U({root:e}),w=[];for(let y of u.results){let K=Le(y.path);K?.org_id!==void 0&&K.org_id!==r||w.push({path:y.path,relPath:y.relPath,name:C(y.path),status:Be(K),source:y.source,tags:W(y.path)})}t(w),l(!1)}catch(u){u instanceof R,c(u.message),l(!1)}})()},[e,r]);let b=(0,T.useMemo)(()=>o.filter(u=>Ue(u,a)).map(u=>({id:u.path,label:`${je(u.status)} ${Ne(u.source)} ${u.relPath}${u.tags.length>0?` [${u.tags.join(", ")}]`:""}`})),[o,a]),x=(0,T.useMemo)(()=>Ke(a,o),[a,o]);if(i)return(0,p.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.red,paddingX:2,paddingY:1,children:[(0,p.jsx)(m,{color:h.red,bold:!0,children:"testmd"}),(0,p.jsx)(k,{marginTop:1,children:(0,p.jsx)(m,{color:h.red,children:i})})]});let E=a==="all"?"all":Je(a);return(0,p.jsx)(ee,{title:`testmd \xB7 filter: ${E}`,items:b,loading:f,itemNoun:"tests",onSelect:u=>{let w=o.find(y=>y.path===u.id);w&&s(w)},onCancel:n,onTab:()=>g(u=>We(u)),extraHint:"cycle filter",footer:x})}function Je(e){return e==="synced"?"synced (\u2601)":e==="local"?"local (\u25A3)":e==="never_run"?"never run (\u25CB)":e==="cli"?"cli-generated (\u2726)":e==="hand"?"hand-written":"all"}function Ke(e,r){let s={synced:r.filter(o=>o.status==="synced").length,local:r.filter(o=>o.status==="local_only").length,never:r.filter(o=>o.status==="never_run").length,cli:r.filter(o=>o.source==="tests-dir").length,hand:r.filter(o=>o.source==="cwd").length},n=o=>o?h.orange:h.dim;return(0,p.jsxs)(k,{flexDirection:"column",children:[(0,p.jsx)(m,{color:h.dim,children:"legend:"}),(0,p.jsxs)(k,{children:[(0,p.jsx)(m,{color:n(e==="synced"),children:` \u2601 synced (${s.synced}) `}),(0,p.jsx)(m,{color:n(e==="local"),children:`\u25A3 local (${s.local}) `}),(0,p.jsx)(m,{color:n(e==="never_run"),children:`\u25CB never run (${s.never})`})]}),(0,p.jsxs)(k,{children:[(0,p.jsx)(m,{color:n(e==="cli"),children:` \u2726 cli-generated (${s.cli}) `}),(0,p.jsx)(m,{color:n(e==="hand"),children:` hand-written (${s.hand})`})]})]})}var I=v(X(),1);import{existsSync as Xe,readFileSync as qe}from"fs";var d=v(F(),1);function pe({path:e,relPath:r,onAction:s,onBack:n,onView:o}){let[t,i]=(0,I.useState)(null),[c,f]=(0,I.useState)(!1);(0,I.useEffect)(()=>{let a=M(e);if(Xe(a))try{i(JSON.parse(qe(a,"utf8")))}catch{i(null)}},[e]),Q((a,g)=>{if(g.escape){if(c){f(!1);return}n();return}if(c){a==="y"||a==="Y"?(f(!1),s("delete")):(a==="n"||a==="N")&&f(!1);return}a==="r"&&s("run"),a==="e"&&t?.testcase_id&&s("export"),a==="d"&&f(!0),a==="v"&&o&&o()});let l=({k:a,v:g})=>g?(0,d.jsxs)(m,{children:[(0,d.jsx)(m,{color:h.dim,children:a.padEnd(14)}),g]}):null;return(0,d.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.orange,paddingX:2,paddingY:1,children:[(0,d.jsx)(m,{color:h.orange,bold:!0,children:r}),(0,d.jsx)(k,{marginTop:1,flexDirection:"column",children:t?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l,{k:"test_id",v:t.test_id}),(0,d.jsx)(l,{k:"testcase_id",v:t.testcase_id}),(0,d.jsx)(l,{k:"project_id",v:t.project_id}),(0,d.jsx)(l,{k:"folder_id",v:t.folder_id}),(0,d.jsx)(l,{k:"org_id",v:t.org_id}),(0,d.jsx)(l,{k:"session_name",v:t.session_name}),(0,d.jsx)(l,{k:"commit_id",v:t.commit_id})]}):(0,d.jsx)(m,{color:h.dim,children:"(never run \u2014 no meta.json)"})}),c?(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(m,{color:h.red,bold:!0,children:["Delete ",r," and its output dir? [y/n]"]})}):(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(m,{color:h.dim,children:["[r] run [e] export",t?.testcase_id?"":" (need testcase_id)"," [d] delete",o?" [v] view":""," [Esc] back"]})})]})}function $(e){B(e);let r=M(e);if(!P(r))return null;try{return JSON.parse(Ge(r,"utf8"))}catch{return null}}function _e(e,r){return!e||e.org_id===void 0?!0:e.org_id===r}function J(e,r){return _e(e,r)?null:(process.stderr.write(`error: this test belongs to org ${e.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 Xt(e={}){let r=!!process.stdin.isTTY&&!e.json,s=new O,n=new L;await H({isInteractive:r,creds:s,config:n});let o=s.getDefaultEnv()??"prod";try{let t=await N({creds:s,env:o,log:()=>{}});return t.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(t.resolvedCreds.org_id)}}catch(t){if(t instanceof j)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),{ok:!1,code:2};throw t}}async function qt(e,r){if(process.stdin.isTTY&&!e.json)return await ze(r,e.root);let s=e.root??process.cwd(),n;try{n=await U({root:s,ignore:e.ignore})}catch(o){if(o instanceof R)return process.stderr.write(`error: ${o.message}
5
- `),2;throw o}for(let o of n.results){let t=$(o.path);if(!_e(t,r))continue;let i={path:o.relPath.startsWith(".")?o.relPath:`./${o.relPath}`,name:C(o.path),has_meta:t!==null,source:o.source,synced:!!t?.testcase_id,tags:W(o.path)};t&&(t.test_id&&(i.test_id=t.test_id),t.testcase_id&&(i.testcase_id=t.testcase_id),t.org_id&&(i.org_id=t.org_id),t.project_id&&(i.project_id=t.project_id),t.folder_id&&(i.folder_id=t.folder_id)),process.stdout.write(JSON.stringify(i)+`
6
- `)}return n.aborted&&process.stderr.write(`warn: walk aborted (${n.abortReason}). Pass --root or --ignore to narrow.
7
- `),0}var ye=-1001,xe=-1002,we=-1003,_={action:null,path:null};function Ve(e,r){return _.action=e,_.path=r,e==="run"?ye:e==="export"?xe:we}function Ye({root:e,currentOrgId:r,onComplete:s}){let[n,o]=D.default.useState({kind:"list"});return D.default.useEffect(()=>{n.kind==="exiting"&&s(n.code)},[n,s]),n.kind==="list"?D.default.createElement(me,{root:e,currentOrgId:r,onSelect:t=>o({kind:"inspect",path:t.path,relPath:t.relPath}),onCancel:()=>o({kind:"exiting",code:0})}):n.kind==="inspect"?D.default.createElement(pe,{path:n.path,relPath:n.relPath,onAction:async t=>{o({kind:"exiting",code:Ve(t,n.path)})},onBack:()=>o({kind:"list"})}):null}async function ze(e,r){let s=r??process.cwd(),{render:n}=await import("./build-JIKYOZUH.js"),o=await new Promise(t=>{let{unmount:i,waitUntilExit:c}=n(D.default.createElement(Ye,{root:s,currentOrgId:e,onComplete:f=>{i(),t(f)}}),{stdout:process.stderr,exitOnCtrlC:!0});c().then(()=>t(0)).catch(()=>t(0))});if(o===ye&&_.path){let{runTestMdFile:t}=await import("./run-test-md-U5PSCPZU.js"),i=await t(_.path,{});return _.action=null,_.path=null,i}if(o===xe&&_.path){let t=await Ze(_.path,{},e);return _.action=null,_.path=null,t}if(o===we&&_.path){let t=await Qe(_.path,!0,e);return _.action=null,_.path=null,t}return o}async function Gt(e,r){let s=z(e);if(!P(s))return process.stderr.write(`error: file not found: ${s}
8
- `),2;let n=$(s),o=J(n,r);if(o!==null)return o;let t={path:s,name:C(s),has_meta:n!==null};return n&&(n.commit_id&&(t.commit_id=n.commit_id),n.test_id&&(t.test_id=n.test_id),n.testcase_id&&(t.testcase_id=n.testcase_id),n.project_id&&(t.project_id=n.project_id),n.folder_id&&(t.folder_id=n.folder_id),n.org_id&&(t.org_id=n.org_id),n.session_name&&(t.session_name=n.session_name)),process.stdout.write(JSON.stringify(t)+`
9
- `),0}async function Qe(e,r,s){let n=z(e);if(!P(n))return process.stderr.write(`error: file not found: ${n}
10
- `),2;let o=$(n),t=J(o,s);if(t!==null)return t;if(!r)return process.stderr.write(`error: refusing to delete without --yes.
11
- This will remove '${n}' and '${G(n)}/'.
12
- `),2;let i=G(n);if(P(i))try{he(i,{recursive:!0,force:!0})}catch(c){return process.stderr.write(`error: failed to remove ${i}: ${c.message}
13
- `),2}try{He(n)}catch(c){return process.stderr.write(`error: failed to remove ${n}: ${c.message}
14
- `),2}return process.stderr.write(`removed ${n} and ${i}/
15
- `),0}var S=class extends Error{kind;constructor(r,s){super(s),this.name="ExportError",this.kind=r}};async function Ht(e,r){let{codeDir:s}=await ke(e,r);return{codeDir:s}}async function ke(e,r){let s=$(e);if(!s?.testcase_id)throw new S("not-synced","this test has not been synced to TMS \u2014 run `kane-cli testmd run` first.");let n=new L().load(),o=r.language??n.code_export?.language;if(!o)throw new S("no-language","--language not provided and no default in tui-config.");let t=r.output??ne(e,"playwright",o),i=P(t);if(i&&!r.force){let a=!1;try{let{readdirSync:g}=await import("fs");a=g(t).length>0}catch{}if(a)return{kind:"reused",codeDir:t}}i&&r.force&&he(t,{recursive:!0,force:!0});let c=new O,f=r.env??c.getDefaultEnv()??"prod",l;try{l=await N({creds:c,env:f,log:()=>{}})}catch(a){throw a instanceof j?new S("auth-fail","not authenticated. Run `kane-cli login` first."):a}if(!l.basicAuth)throw new S("auth-incomplete","TMS basic auth could not be resolved. Run `kane-cli login` again.");try{let a=q(f);await ge({tmsBaseUrl:a.tmsBaseUrl,testcaseId:s.testcase_id,auth:l.basicAuth,language:o,framework:"playwright",skipValidation:n.code_export?.skip_validation??!0,outDir:t,log:()=>{}})}catch(a){throw new S("export-fail",`code export failed: ${a.message}`)}return{kind:"exported",codeDir:t}}async function Ze(e,r,s){let n=z(e);if(!P(n))return process.stderr.write(`error: file not found: ${n}
16
- `),2;let o=$(n),t=J(o,s);if(t!==null)return t;try{let i=await ke(n,r);return i.kind==="reused"?process.stderr.write(`reusing existing export at ${i.codeDir}
17
- `):process.stderr.write(`exported to ${i.codeDir}
18
- `),0}catch(i){if(i instanceof S)return i.kind==="not-synced"?(process.stderr.write("error: this test has not been synced to TMS \u2014 run `kane-cli testmd run` first.\n"),2):i.kind==="no-language"?(process.stderr.write(`error: --language not provided and no default in tui-config.
19
- `),2):i.kind==="auth-fail"?(process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),2):i.kind==="auth-incomplete"?(process.stderr.write("error: TMS basic auth could not be resolved. Run `kane-cli login` again.\n"),2):(process.stderr.write(`error: ${i.message}
20
- `),2);throw i}}async function Vt(e={}){let r=!!process.stdin.isTTY,s=new O,n=new L;await H({isInteractive:r,creds:s,config:n});let o=e.env??s.getDefaultEnv()??"prod";try{let t=await N({creds:s,env:o,usernameFlag:e.username,accessKeyFlag:e.accessKey,log:()=>{}});return t.resolvedCreds?.org_id===void 0||!t.basicAuth?(process.stderr.write("error: could not resolve TMS credentials. Run `kane-cli login` again.\n"),{ok:!1,code:2}):{ok:!0,orgId:String(t.resolvedCreds.org_id),basicAuth:t.basicAuth,controllerBaseUrl:q(o).controllerBaseUrl}}catch(t){if(t instanceof j)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),{ok:!1,code:2};throw t}}async function Yt(e,r,s=ie){if(!P(e))return process.stderr.write(`error: file not found: ${e}
21
- `),2;if(!e.endsWith("_test.md"))return process.stderr.write(`error: not a *_test.md file: ${e}
22
- `),2;let n=$(e),o=J(n,r.orgId);if(o!==null)return o;if(!n?.commit_id||!n?.test_id)return process.stderr.write(`error: ${e} is not authored \u2014 run \`kane-cli testmd run ${e}\` first.
23
- `),2;let t=await s({sourcePath:e,testId:n.test_id,sessionId:n.commit_id,commitId:n.commit_id,controller:new Z(r.controllerBaseUrl,{username:r.basicAuth.username,accessKey:r.basicAuth.access_key})}),i={type:"test_md_bundle_sync",status:t.ok?"ok":"failed",commit_id:n.commit_id,...t.ok?{bytes:t.bytes}:{stage:t.stage}};return process.stdout.write(JSON.stringify(i)+`
24
- `),t.ok?(process.stderr.write(`synced: ${n.commit_id}-testmd.zip (${t.bytes} bytes)
25
- `),0):(process.stderr.write(`error: bundle sync failed at ${t.stage}: ${t.error}
26
- `),t.stage==="collect"?2:1)}export{U as a,Re as b,me as c,pe as d,$ as e,_e as f,J as g,Xt as h,qt as i,ze as j,Gt as k,Qe as l,S as m,Ht as n,Ze as o,Vt as p,Yt as q};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{homedir as a}from"os";import{join as t}from"path";var m="0.8.9";var e=t(a(),".testmuai","kaneai"),d=t(e,"profiles"),g=t(e,"tui-config.json"),h=t(e,"media"),b="https://registry.npmjs.org/@testmuai/kane-cli",A="https://api.github.com/repos/LambdaTest/kane-cli/releases",n="@testmuai/kane-cli-skill",_=`https://registry.npmjs.org/${n}`,r="kane-cli",L=[{dir:t(a(),".claude","skills",r),agent:"Claude Code"},{dir:t(a(),".agents","skills",r),agent:"Codex CLI"},{dir:t(a(),".gemini","skills",r),agent:"Gemini CLI"}],x="https://dd-proxy.lambdatest.com/intake/kane-cli",U="https://kaneai-playground.lambdatest.io",u=9222,R=9230,I=t(e,"chrome-profiles"),o=t(e,"hints"),E=t(o,"state.json");function C(s){return t(o,`catalog-${s}.json`)}var c="127.0.0.1",T=18392,S=18400,i="/callback";function f(s){return`http://${c}:${s}${i}`}var B="KANE CLI",N="*",P={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",testGeneratorBaseUrl:"https://test-manager-api.lambdatest.com",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server",evidenceViewerUrl:"https://evidence.lambdatest.com",mediaArtefactsHost:"prod-mobile-artefacts.lambdatest.com",mobileAppBaseUrl:"https://api.lambdatest.com"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",testGeneratorBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server",evidenceViewerUrl:"https://stage-evidence.lambdatestinternal.com",mediaArtefactsHost:"stage-mobile-artefacts.lambdatestinternal.com",mobileAppBaseUrl:"https://stage-api.lambdatestinternal.com"}},O={orange:"#ff9500",generateAccent:"#0d9488",assuranceAccent:"#b388ff",purple:"#b388ff",secondary:"#888888",dim:"#666666",muted:"#444444",green:"#4ade80",red:"#ef4444",amber:"#fbbf24"};export{m as a,e as b,g as c,h as d,b as e,A as f,n as g,L as h,x as i,U as j,u as k,R as l,I as m,E as n,C as o,c as p,T as q,S as r,i as s,f as t,B as u,N as v,P as w,O as x};
@@ -1,6 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as J,c as P,e as q,h as z,i as Q,j as V,m as X,n as T}from"./chunk-WHEWZR2C.js";import{e as U}from"./chunk-EHN5HTUD.js";import{a as G}from"./chunk-IPEA7ZOF.js";import{copyFileSync as ae,cpSync as le,existsSync as w,mkdirSync as ue,readFileSync as Oe,readdirSync as pe,rmSync as Te,writeFileSync as _e}from"fs";import{dirname as Ae,isAbsolute as Le,join as R,relative as Ee,resolve as Ne}from"path";import{writeFileSync as ge,mkdirSync as Se,readFileSync as Re}from"fs";import{dirname as Ie,basename as Y}from"path";function ee(e){let t=e.outPath??P(e.sourcePath);Se(Ie(t),{recursive:!0});let s=[];s.push("---"),s.push(`test: ../${Y(e.sourcePath)}`),s.push(`status: ${e.overallStatus}`),s.push(`started: ${e.startedISO}`),s.push(`duration_s: ${e.durationS}`),s.push(`session_id: ${e.sessionId}`),s.push("---",""),s.push(`# ${e.title??Y(e.sourcePath)} \u2014 Result`,"");for(let l=0;l<e.rootSteps.length;l++){let a=e.rootSteps[l],i=e.outcomes.find(p=>p.rootStepIndex===l+1);if(s.push(ye(a,i)),i?.stepMd5&&s.push(`md5: ${i.stepMd5}`),i?.status==="failed"&&i.reason&&s.push(`Reason: ${i.reason}`),i?.softFailures?.length)for(let p of i.softFailures){let o=p.reason?`: ${p.reason}`:"";s.push(`\u26A0 optional sub-step ${p.subStepIndex} failed${o}`)}a.body.kind==="objective"&&i?.status!=="skipped"&&s.push(a.body.text),s.push("")}return ge(t,s.join(`
3
- `),"utf8"),t}function ye(e,t){if(!t)return`## ${e.heading} (no outcome)`;let s=t.duration_s!=null?`${t.duration_s}s`:"\u2014";if(t.status==="skipped")return`## ${e.heading} \u23ED skipped`;let l=t.softFailed?" (optional)":"";if(t.refKind&&t.status==="passed"){let a=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2713 passed (via @${t.refKind} ${t.refLabel} \u2014 ${t.inlinedCount} inlined steps, ${s}${a})`}if(t.refKind&&t.status==="failed"){let a=t.failedSubStepIndex&&t.failedSubStepIndex.length>0?` \u2014 at sub-step ${t.failedSubStepIndex.join(" \u2192 sub-step ")}`:"",i=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2717 failed${l} (via @${t.refKind} ${t.refLabel}${a}, ${s}${i})`}return t.status==="passed"?`## ${e.heading} \u2713 passed (${s})`:`## ${e.heading} \u2717 failed${l} (${s})`}var xe=/^##\s+(.+?)\s+(✓ passed|✗ failed(?:\s+\(optional\))?|⏭ skipped)(?:\s+\((.*)\))?\s*$/,be=/via\s+@\w+\s+(\S+).*?(?:→\s+(\S+))?\s*$/,ke=/^md5:\s+([a-f0-9]{32})\s*$/;function Z(e,t){for(let s=t;s<e.length&&!/^##\s/.test(e[s]);s++){if(e[s].trim()==="")continue;let l=ke.exec(e[s]);return l?l[1]:null}return null}function $(e){let s=Re(e,"utf8").split(`
4
- `),l="passed";if(s[0]?.trim()==="---")for(let i=1;i<s.length&&s[i].trim()!=="---";i++){let p=/^status:\s+(passed|failed|interrupted)\s*$/.exec(s[i]);p&&(l=p[1])}let a=[];for(let i=0;i<s.length;i++){let p=xe.exec(s[i]);if(!p)continue;let o=p[1],r=p[2],c=p[3]??"",m=r.startsWith("\u2713")?"passed":r.startsWith("\u23ED")?"skipped":"failed";if(/via\s+@/.test(c)){let f=be.exec(c),b=f?.[1]??"",g=f?.[2]??null;a.push({kind:"import",heading:o,status:m,md5:Z(s,i+1),importPath:b,helperResultRelPath:g})}else a.push({kind:"objective",heading:o,status:m,md5:Z(s,i+1)})}return{overallStatus:l,steps:a}}import{copyFileSync as te,existsSync as K,mkdirSync as ve,writeFileSync as se,promises as Ge}from"fs";import{join as D,dirname as re,basename as Pe}from"path";async function ne(e){for(let t=0;t<e.totalRunDirs;t++){let s=e.runIndex+t,l=D(e.sessionDir,"runs",String(s)),a=D(e.stagingStepDir,"flows",String(t));ve(a,{recursive:!0});let i=D(a,"actions.ndjson");if(e.packTestDir){let r=D(e.packTestDir,"logs",`${s}-actions.ndjson`);if(K(r)){te(r,i);continue}let c=re(re(e.packTestDir)),m=Pe(e.packTestDir),I=K(c)?await U(c,`tests/${m}/logs/${s}-actions.ndjson`).catch(()=>null):null;se(i,I??"");continue}let p=[D(l,"run-test","actions.ndjson"),D(l,"actions.ndjson")],o=!1;for(let r of p)if(K(r)){te(r,i),o=!0;break}o||se(i,"")}}import{existsSync as _,readdirSync as we}from"fs";import{dirname as $e,join as M,basename as C}from"path";function et(e){let t=[],s=new Set,l=new Map;function a(r){if(l.has(r))return l.get(r);let c=P(r),m=_(c)?$(c):null;return l.set(r,m),m}let i=new Map;function p(r){if(i.has(r))return i.get(r);let c=M(r,"Result.md"),m=_(c)?$(c):null;return i.set(r,m),m}function o(r){for(let c=1;c<r.trace.length;c++){let m=r.trace[c-1],I=a(m.file);if(!I)continue;let f=I.steps[m.stepIndex-1];if(f){if(f.kind!=="import")return{kind:"author",reason:"structure-mismatch"};if(C(f.importPath)!==C(r.trace[c].file))return{kind:"author",reason:"structure-mismatch"};if(f.md5!=null&&f.md5!==m.rowMd5)return{kind:"author",reason:"structure-mismatch"}}}return null}for(let r of e.steps){let c=r.trace[r.trace.length-1].stepIndex,m=s.has(r.owningFile);for(let g=0;g<r.trace.length-1&&!m;g++)s.has(r.trace[g].file)&&(m=!0);if(m){t.push({kind:"author",reason:a(r.owningFile)===null?"no-result-md":"downstream-of-divergence"});continue}let I=o(r);if(I){t.push(I);for(let g=0;g<r.trace.length;g++)s.add(r.trace[g].file);continue}let f=a(r.owningFile),b;if(f===null&&r.trace.length>1){let g=H(r.trace);b=ie(r,p(g),c,g)}else b=ie(r,f,c);if(t.push(b),b.kind==="author"){s.add(r.owningFile);for(let g=0;g<r.trace.length-1;g++)s.add(r.trace[g].file)}}return t}function ie(e,t,s,l=null){if(!t)return{kind:"author",reason:"no-result-md"};let a=t.steps[s-1];if(!a)return{kind:"author",reason:"no-result-md"};if(a.kind!=="objective")return{kind:"author",reason:"structure-mismatch"};if(a.status!=="passed")return{kind:"author",reason:"recorded-failed"};let i=T(e);if(i!==a.md5)return{kind:"author",reason:"md5-mismatch"};let p=l===null?V(e.owningFile,s,i.slice(0,8)):M(l,".internal","steps",`${s}-${i.slice(0,8)}`),o=De(p);return o===0?{kind:"author",reason:"missing-recording"}:{kind:"replay",recordingDir:p,flowCount:o}}function De(e){let t=M(e,"flows");if(!_(t))return 0;let s;try{s=we(t,{withFileTypes:!0}).filter(a=>a.isDirectory()&&/^\d+$/.test(a.name)).map(a=>parseInt(a.name,10))}catch{return 0}if(s.length===0)return 0;let l=Math.max(...s);for(let a=0;a<=l;a++)if(!_(M(t,String(a),"actions.ndjson")))return 0;return l+1}function tt(e){return e.some(t=>t.kind==="author")}function st(e){for(let t=0;t<e.length;t++)if(e[t].kind==="author")return t;return e.length}function H(e){let t=i=>{let p=C(i);return p.endsWith("_test.md")?p.slice(0,-8):p.endsWith(".md")?p.slice(0,-3):p},s=t(e[0].file),l=t(e[e.length-1].file),a=e.slice(0,-1).map(i=>String(i.stepIndex));return M($e(e[e.length-1].file),`helper-output-${l}-${s}-${a.join("-")}`)}function rt(e){return Array.from({length:e.flowCount},(t,s)=>M(e.recordingDir,"flows",String(s),"actions.ndjson"))}import{existsSync as oe,mkdirSync as Me,rmSync as je,cpSync as Fe}from"fs";function de(e,t){oe(e)&&(oe(t)&&je(t,{recursive:!0,force:!0}),Me(t,{recursive:!0}),Fe(e,t,{recursive:!0}))}async function gt(e){let t=new Map;for(let o of e.stepRunRecords)t.set(o.testmdStepIndex,o);let s=e.authoredFlatIdx??new Set,l=[],a=[],i=new Map,p=o=>{if(i.has(o))return i.get(o);let r=R(o,"Result.md"),c=w(r)?$(r):null;return i.set(o,c),c};for(let o of e.resolvedTest.unitFiles){let r=o.file===e.resolvedTest.rootPath,c=G(o.file,Oe(o.file,"utf8")),m=P(o.file),I=w(m)?$(m):null,f=[],b=[],g=[],j=[];if(!r)for(let d of e.resolvedTest.steps){if(d.owningFile!==o.file||d.trace.length<2)continue;let n=H(d.trace);j.includes(n)||j.push(n)}let F=d=>{if(I!==null)return null;for(let n of j){let v=p(n)?.steps[d-1];if(v)return{row:v,dir:n}}return null},W=[],A=!1,B=!1,L=!1,E=!1;for(let d of c.steps){let n=d.index,u=I?.steps[n-1];if(d.body.kind==="objective"){let h=e.resolvedTest.steps.filter(S=>S.owningFile===o.file&&S.trace[S.trace.length-1].stepIndex===n&&t.has(S.flatIndex)),y=h.length>0?h[h.length-1]:null;if(y){A=!0,s.has(y.flatIndex)&&(B=!0);let S=T(y),x;r?x=e.outcomes.find(he=>he.rootStepIndex===n)??{rootStepIndex:n,status:"skipped"}:x={rootStepIndex:n,status:ce(y,e.outcomes)},x.status==="failed"&&(L=!0),x.stepMd5==null&&(x.stepMd5=S),f.push(x),b.push({stepIndex:n,md5:S,rec:t.get(y.flatIndex)}),(!u||u.kind!=="objective"||u.status!==x.status||x.status==="passed"&&u.md5!==S)&&(E=!0)}else if(u&&u.kind==="objective")f.push({rootStepIndex:n,status:u.status,...u.md5?{stepMd5:u.md5}:{}}),g.push(n);else if(!r&&F(n)?.row.kind==="objective"){let S=F(n),x=S.row;f.push({rootStepIndex:n,status:x.status,...x.md5?{stepMd5:x.md5}:{}}),W.push({psIdx:n,dir:S.dir})}else r?f.push(e.outcomes.find(S=>S.rootStepIndex===n)??{rootStepIndex:n,status:"skipped"}):f.push({rootStepIndex:n,status:"skipped"});continue}let v=Le(d.body.path)?d.body.path:Ne(Ae(o.file),d.body.path),O=X({path:d.body.path,bindings:d.body.bindings,optional:d.optional??!1}),me=Ee(J(o.file),P(v)),N=e.resolvedTest.steps.filter(h=>h.trace.some((y,S)=>S<h.trace.length-1&&y.file===o.file&&y.stepIndex===n)&&t.has(h.flatIndex));if(N.length>0){A=!0;let h;if(r)h=e.outcomes.find(y=>y.rootStepIndex===n)??{rootStepIndex:n,status:"passed",refKind:"import",refLabel:d.body.path};else{let y=N.some(S=>ce(S,e.outcomes)==="failed");h={rootStepIndex:n,status:y?"failed":"passed",refKind:"import",refLabel:d.body.path,inlinedCount:N.length}}h.status==="failed"&&(L=!0),h.stepMd5==null&&(h.stepMd5=O),h.helperResultRelPath==null&&(h.helperResultRelPath=me),f.push(h),(!u||u.kind!=="import"||u.status!==h.status||u.md5!==O)&&(E=!0)}else if(u&&u.kind==="import")f.push({rootStepIndex:n,status:u.status,refKind:"import",refLabel:u.importPath,...u.md5?{stepMd5:u.md5}:{},...u.helperResultRelPath?{helperResultRelPath:u.helperResultRelPath}:{}});else if(!r&&F(n)?.row.kind==="import"){let h=F(n).row;f.push({rootStepIndex:n,status:h.status,refKind:"import",refLabel:d.body.path})}else r?f.push(e.outcomes.find(h=>h.rootStepIndex===n)??{rootStepIndex:n,status:"skipped",refKind:"import",refLabel:d.body.path}):f.push({rootStepIndex:n,status:"skipped",refKind:"import",refLabel:d.body.path})}if(!(r||A&&(B||L||I===null||E)))continue;l.push(o.file);let k=z(o.file);ue(R(k,".internal"),{recursive:!0});for(let d of b){let n=R(k,".internal","steps",`${d.stepIndex}-${d.md5.slice(0,8)}`);ue(n,{recursive:!0}),await ne({sessionDir:e.sessionDir,runIndex:d.rec.runIndex,totalRunDirs:d.rec.totalRunDirs,stagingStepDir:n,packTestDir:e.packTestDir})}if(g.length>0){let d=Q(o.file);if(w(d))for(let n of pe(d)){let u=parseInt(n.split("-")[0]??"",10);!Number.isNaN(u)&&g.includes(u)&&le(R(d,n),R(k,".internal","steps",n),{recursive:!0})}}for(let d of W){let n=R(d.dir,".internal","steps");if(w(n))for(let u of pe(n))parseInt(u.split("-")[0]??"",10)===d.psIdx&&le(R(n,u),R(k,".internal","steps",u),{recursive:!0})}let fe=f.some(d=>d.status==="failed");if(ee({sourcePath:o.file,title:c.title,rootSteps:c.steps,outcomes:f,overallStatus:r?e.overallStatus:fe?"failed":"passed",startedISO:e.startedISO,durationS:r?e.durationS:0,sessionId:e.sessionId,outPath:R(k,"Result.md")}),r){let d={};e.commitId&&(d.commit_id=e.commitId),e.tmsIds.testId&&(d.test_id=e.tmsIds.testId),e.tmsIds.testcaseId&&(d.testcase_id=e.tmsIds.testcaseId),e.tmsIds.projectId&&(d.project_id=e.tmsIds.projectId),e.tmsIds.folderId&&(d.folder_id=e.tmsIds.folderId),e.tmsIds.orgId&&(d.org_id=e.tmsIds.orgId),e.tmsIds.sessionName&&(d.session_name=e.tmsIds.sessionName),_e(R(k,".internal","meta.json"),JSON.stringify(d,null,2)+`
5
- `,"utf8");let n=R(e.sessionDir,"execution.json");if(w(n))try{ae(n,R(k,".internal","execution.json"))}catch{}if(e.codeExportDir){let u=e.codeExportLanguage??"python",v=R(k,`playwright-${u}-code`);try{de(e.codeExportDir,v)}catch(O){process.stderr.write(`warn: codegen copy failed: ${O.message}
6
- `)}}}else if(o.kind==="test"){let d=q(o.file);if(w(d))try{ae(d,R(k,".internal","meta.json"))}catch{}}!r&&j.length>0&&f.every(n=>n.status!=="skipped")&&a.push({unitFile:o.file,dirs:j.filter(n=>w(n))})}return{changedUnitFiles:l,legacySweep:a}}function St(e){for(let t of e)try{Te(t,{recursive:!0,force:!0})}catch{}}function ce(e,t){let s=e.trace[0].stepIndex,l=t.find(o=>o.rootStepIndex===s);if(!l)return"skipped";if(l.status==="passed")return"passed";if(l.status==="skipped")return"skipped";let a=e.trace.slice(1).map(o=>o.stepIndex),i=l.failedSubStepIndex??[],p=Math.min(a.length,i.length);for(let o=0;o<p;o++)if(a[o]!==i[o])return a[o]<i[o]?"passed":"skipped";return a.length===i.length?"failed":a.length<i.length?"passed":"skipped"}export{ee as a,et as b,tt as c,st as d,rt as e,de as f,gt as g,St as h};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as a}from"./chunk-WHMMOMUY.js";import"./chunk-TN4SXGAP.js";import"./chunk-DWHXXPDX.js";import"./chunk-UR6MHSHU.js";export{a as installPlugin};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-SV5ZTCQA.js";import"./chunk-RFHMDQXZ.js";import"./chunk-IPZFZUJX.js";import"./chunk-H6KL3FSB.js";import"./chunk-RZ4F3BHX.js";import"./chunk-6MJGCETZ.js";import"./chunk-DWHXXPDX.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
@@ -1,3 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{g as h}from"./chunk-HPBI3P6I.js";import{a as m,b as I,k as S,r as _}from"./chunk-WHEWZR2C.js";import"./chunk-EHN5HTUD.js";import"./chunk-IPEA7ZOF.js";import"./chunk-VZ7KXRXB.js";import{a as f}from"./chunk-NTEI2O3O.js";import"./chunk-EYOCNMUM.js";import"./chunk-DWHXXPDX.js";import"./chunk-UR6MHSHU.js";async function v(e,s={}){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=_(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"),T=g?"failed":l.length===0?"skipped":"passed";a.push({rootStepIndex:t+1,status:T,duration_s:l.reduce((n,E)=>n+(E.duration??0),0),reason:g?.reason})}let P=a.some(t=>t.status==="failed")?"failed":"passed",D=new f().load().code_export?.language==="javascript"?"javascript":"python",d=I(o);e.log("info","PERSIST_START","Building staging dir",{recorded_path:o,output_dir:d,session_dir:e.sessionDir,step_count:i.length,flow_count:u.length});try{await h({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:s.testcaseId,projectId:s.projectId,folderId:s.folderId,orgId:s.orgId??e.orgId??void 0,sessionName:e.sessionName??m(o)},codeExportDir:s.codeExportDir,codeExportLanguage:D,packTestDir:s.packTestDir}),e.log("info","PERSIST_STAGING_OK","Staging dir built",{output_dir:d}),S(d),e.log("info","PERSIST_OK","Persist complete",{output_dir:d})}catch(t){let r=t;e.log("error","PERSIST_FAILED","staging build / atomic replace failed",{error:r.message,stack:r.stack,output_dir:d}),process.stderr.write(`[persist] staging build / atomic replace failed: ${r.message}
3
- `)}return{recordedTestPath:o,outputDir:d}}export{v as persistRecordedSession};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c}from"./chunk-7UCICMK7.js";import"./chunk-2YQ6TW77.js";import"./chunk-OLKHUNSQ.js";import"./chunk-QQ5MHSSY.js";import"./chunk-Z2DT2QMX.js";import"./chunk-5GUD3CIH.js";import"./chunk-YMLC55J4.js";import"./chunk-H4WIA4IP.js";import"./chunk-EHN5HTUD.js";import"./chunk-IPEA7ZOF.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.js";import"./chunk-VZ7KXRXB.js";import"./chunk-P7YZ3PU3.js";import"./chunk-W3Z7AZNT.js";import"./chunk-JQW2QFSX.js";import"./chunk-6FCPS2VT.js";import"./chunk-UH2ZTX4E.js";import"./chunk-XMTSHHYQ.js";import"./chunk-DBIBROYW.js";import"./chunk-AKX4VRRR.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-DUEROGOF.js";import"./chunk-BPMSNGXQ.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-OR6M5HCV.js";import"./chunk-MSGW4JDG.js";import"./chunk-4JOD47QI.js";import"./chunk-H6KL3FSB.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-DWHXXPDX.js";import"./chunk-UR6MHSHU.js";export{c as UploadPipeline,b as packPresignEntry,a as readPackForUpload};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{e as a,f as b,g as c,h as d,i as e,j as f}from"./chunk-MJHLQKQC.js";import"./chunk-DUEROGOF.js";import"./chunk-NVNPXOOC.js";import"./chunk-R5PIIYN2.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-OR6M5HCV.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-RSSOJ3L2.js";import"./chunk-5EOX4MEY.js";import"./chunk-F5BI3ALG.js";import"./chunk-TAOHYWEO.js";import"./chunk-Z7S3IWUX.js";import"./chunk-4JOD47QI.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DWHXXPDX.js";import"./chunk-UR6MHSHU.js";export{a as MobileHostUnsupportedError,b as MobilePreflightError,c as PACKAGE_ID_REJECTED,e as isInstallablePath,f as prepareTarget,d as toAppSpec};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as a,c as b,d as c,e as d,f as e}from"./chunk-R5PIIYN2.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-OR6M5HCV.js";import"./chunk-MSGW4JDG.js";import"./chunk-Z7S3IWUX.js";import"./chunk-4JOD47QI.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DWHXXPDX.js";import"./chunk-UR6MHSHU.js";export{d as discoverAll,a as knownPlatforms,c as providerFor,b as registeredPlatforms,e as resolveTarget};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{f as a}from"./chunk-AARF24Z3.js";import"./chunk-3MSXQU2C.js";import"./chunk-IANCFSSL.js";import"./chunk-27P7PJAL.js";import"./chunk-JPZHCB4Z.js";import"./chunk-2DKJZPIH.js";import"./chunk-FT23VFSR.js";import"./chunk-D5MK4WTK.js";import"./chunk-TJLGHGUO.js";import"./chunk-VDKGMVXZ.js";import"./chunk-P2VERPOP.js";import"./chunk-HPBI3P6I.js";import"./chunk-WHEWZR2C.js";import"./chunk-W5BTYVZD.js";import"./chunk-UEIQTXB6.js";import"./chunk-EKCGZXZE.js";import"./chunk-S3DAAAE5.js";import"./chunk-BOZODWIZ.js";import"./chunk-7UCICMK7.js";import"./chunk-2YQ6TW77.js";import"./chunk-5DT7PIGB.js";import"./chunk-M7D7EHNN.js";import"./chunk-OLKHUNSQ.js";import"./chunk-QQ5MHSSY.js";import"./chunk-Z2DT2QMX.js";import"./chunk-5GUD3CIH.js";import"./chunk-YMLC55J4.js";import"./chunk-H4WIA4IP.js";import"./chunk-EHN5HTUD.js";import"./chunk-IPEA7ZOF.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.js";import"./chunk-COJGXGKZ.js";import"./chunk-H5TNYYZW.js";import"./chunk-DKUD2D5Y.js";import"./chunk-VZ7KXRXB.js";import"./chunk-367NASYK.js";import"./chunk-BVON52QL.js";import"./chunk-CCEXSCTN.js";import"./chunk-P7YZ3PU3.js";import"./chunk-TDPWFYTJ.js";import"./chunk-NTEI2O3O.js";import"./chunk-GWSGTZMK.js";import"./chunk-AROBXG66.js";import"./chunk-5Y2G4NC7.js";import"./chunk-4PMZ5FCD.js";import"./chunk-2YEHV2CX.js";import"./chunk-IBPF5IM5.js";import"./chunk-W3Z7AZNT.js";import"./chunk-JQW2QFSX.js";import"./chunk-6FCPS2VT.js";import"./chunk-UH2ZTX4E.js";import"./chunk-XMTSHHYQ.js";import"./chunk-DBIBROYW.js";import"./chunk-AKX4VRRR.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-MJHLQKQC.js";import"./chunk-DUEROGOF.js";import"./chunk-TJR4R45C.js";import"./chunk-R7GMVPAF.js";import"./chunk-YCCUBQY4.js";import"./chunk-CJD3EEPT.js";import"./chunk-QS3DXKZN.js";import"./chunk-BPMSNGXQ.js";import"./chunk-VE3SUJMA.js";import"./chunk-SV5ZTCQA.js";import"./chunk-RFHMDQXZ.js";import"./chunk-NVNPXOOC.js";import"./chunk-R5PIIYN2.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-OR6M5HCV.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-RSSOJ3L2.js";import"./chunk-5EOX4MEY.js";import"./chunk-F5BI3ALG.js";import"./chunk-TAOHYWEO.js";import"./chunk-AOB2ZX45.js";import"./chunk-22HCCSL7.js";import"./chunk-7RAIRUXO.js";import"./chunk-Z7S3IWUX.js";import"./chunk-4JOD47QI.js";import"./chunk-6UNXON3J.js";import"./chunk-IPZFZUJX.js";import"./chunk-H6KL3FSB.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-E47GFYXA.js";import"./chunk-EYOCNMUM.js";import"./chunk-6MJGCETZ.js";import"./chunk-HKCZ67AT.js";import"./chunk-SJBIXLL3.js";import"./chunk-DWHXXPDX.js";import{a as o}from"./chunk-DFS4RMVP.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{e as a,f as b,g as c,h as d,i as e,j as f,k as g,l as h,m as i,n as j,o as k,p as l,q as m}from"./chunk-D5MK4WTK.js";import"./chunk-TJLGHGUO.js";import"./chunk-VDKGMVXZ.js";import"./chunk-WHEWZR2C.js";import"./chunk-2YQ6TW77.js";import"./chunk-IPEA7ZOF.js";import"./chunk-VZ7KXRXB.js";import"./chunk-NTEI2O3O.js";import"./chunk-IBPF5IM5.js";import"./chunk-CJD3EEPT.js";import"./chunk-RSSOJ3L2.js";import"./chunk-5EOX4MEY.js";import"./chunk-7RAIRUXO.js";import"./chunk-6UNXON3J.js";import"./chunk-IPZFZUJX.js";import"./chunk-H6KL3FSB.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-6MJGCETZ.js";import"./chunk-DWHXXPDX.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{i as ExportError,c as assertOrgMatchOrExit,j as exportTestmd,b as metaMatchesOrg,a as readMetaIfExists,d as resolveCurrentOrgId,l as resolveSyncAuth,h as runDeleteAction,k as runExportAction,e as runListAction,f as runListTui,g as runStatusAction,m as runSyncAction};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-6UNXON3J.js";import"./chunk-IPZFZUJX.js";import"./chunk-H6KL3FSB.js";import"./chunk-RZ4F3BHX.js";import"./chunk-DWHXXPDX.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};