@testmuai/kane-cli 0.7.2 → 0.8.1

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 (207) hide show
  1. package/dist/{ChatSurface-E7QKI4LA.js → ChatSurface-U37VZDCW.js} +1 -1
  2. package/dist/{ChromeProfilePicker-DGDWGCZD.js → ChromeProfilePicker-AUU7JF6F.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-SYCZXSME.js → CliFeedbackPrompt-4W74Y3UF.js} +1 -1
  4. package/dist/{CliUploadProgress-VDEAKXJY.js → CliUploadProgress-6HL7WTEX.js} +1 -1
  5. package/dist/ConfigView-6BSCZP5Y.js +2 -0
  6. package/dist/EvidenceViewOffer-62XHEEGW.js +2 -0
  7. package/dist/FolderPicker-S7U2EN2M.js +2 -0
  8. package/dist/{HelpView-ON6BFGJM.js → HelpView-TU7ED43J.js} +1 -1
  9. package/dist/{InfoBox-B23NZ6IG.js → InfoBox-JLTMKVDE.js} +1 -1
  10. package/dist/{LinksBox-TI26VFFH.js → LinksBox-LREUUJDV.js} +1 -1
  11. package/dist/{ProfilesView-CRO5AH3H.js → ProfilesView-W3GX2N2E.js} +1 -1
  12. package/dist/{ProjectPicker-3N7LJOXU.js → ProjectPicker-SYQUJK2J.js} +1 -1
  13. package/dist/{SaveSessionPrompt-UTOEC5AW.js → SaveSessionPrompt-MR5NJMRP.js} +1 -1
  14. package/dist/SingleShotApp-XOKVOM7C.js +2 -0
  15. package/dist/{SummaryBox-JK64EKC2.js → SummaryBox-UAYSVFB7.js} +1 -1
  16. package/dist/TestMdRunView-7UVSDAF4.js +2 -0
  17. package/dist/{WhoamiView-6QSLPNF6.js → WhoamiView-2YU76ASQ.js} +1 -1
  18. package/dist/adbkit-apkreader-ORZBGCJQ.js +184 -0
  19. package/dist/app-client-OEXESV4U.js +2 -0
  20. package/dist/app-download-AEEFQ63M.js +2 -0
  21. package/dist/{auth-IKFVW3NX.js → auth-HET3TBRI.js} +1 -1
  22. package/dist/{bind-KCUSVJXG.js → bind-STKXOUYI.js} +3 -3
  23. package/dist/bootstrap-44YKVWWE.js +2 -0
  24. package/dist/bridge-5Z3BIB77.js +2 -0
  25. package/dist/{changelog-AAH2ZBYO.js → changelog-7OWRHFHZ.js} +1 -1
  26. package/dist/{chat-committer-UUC6JTRJ.js → chat-committer-ZWWCLJFD.js} +1 -1
  27. package/dist/{chunk-ZUGCHQFC.js → chunk-27U4PLPX.js} +1 -1
  28. package/dist/{chunk-ZBOWFJB2.js → chunk-2BGUUWNF.js} +2 -2
  29. package/dist/chunk-2KDGIZED.js +4 -0
  30. package/dist/{chunk-SFII7HPP.js → chunk-3LJWYRAA.js} +1 -1
  31. package/dist/chunk-3PECJD6S.js +11 -0
  32. package/dist/{chunk-7QJ75SYR.js → chunk-3POR47RC.js} +2 -2
  33. package/dist/chunk-4JOD47QI.js +2 -0
  34. package/dist/{chunk-QIGPXYMF.js → chunk-56PAQAX5.js} +6 -6
  35. package/dist/{chunk-DZPGG4S6.js → chunk-65ZTD5SJ.js} +2 -2
  36. package/dist/chunk-6IA6QMPH.js +2 -0
  37. package/dist/{chunk-VT54ARGE.js → chunk-6O3DDOP2.js} +1 -1
  38. package/dist/chunk-6XX4LEVJ.js +2 -0
  39. package/dist/{chunk-4NFCAGRK.js → chunk-766WGMBU.js} +1 -1
  40. package/dist/{chunk-VMM4LC4V.js → chunk-7BZSCUPP.js} +3 -3
  41. package/dist/{chunk-PLOWZLG5.js → chunk-7JWKHKFU.js} +2 -2
  42. package/dist/chunk-7Q6M6P4X.js +26 -0
  43. package/dist/chunk-AW2XUHH4.js +2 -0
  44. package/dist/{chunk-7OYZR6JA.js → chunk-BRHNRCEZ.js} +1 -1
  45. package/dist/chunk-BRIEBB2U.js +2 -0
  46. package/dist/{chunk-APPYQZFK.js → chunk-C7HSWZP6.js} +1 -1
  47. package/dist/chunk-CTW2VQKS.js +6 -0
  48. package/dist/{chunk-FDIPQRX4.js → chunk-DCY6R5DP.js} +1 -1
  49. package/dist/{chunk-KWIK22R6.js → chunk-DO5HAO3H.js} +1 -1
  50. package/dist/chunk-DPUV6OSP.js +2 -0
  51. package/dist/{chunk-B5RS2XZU.js → chunk-DZGCXKKI.js} +3 -3
  52. package/dist/{chunk-JKM2PUHI.js → chunk-EDSZJZFG.js} +1 -1
  53. package/dist/{chunk-OIYGGEUL.js → chunk-ELM6MXGJ.js} +1 -1
  54. package/dist/{chunk-VHZ4S57N.js → chunk-EWCAFKLX.js} +1 -1
  55. package/dist/chunk-EYOCNMUM.js +2 -0
  56. package/dist/{chunk-GYNTNKNB.js → chunk-FEJXWJ3L.js} +1 -1
  57. package/dist/{chunk-UC7MNPIN.js → chunk-FMRSMN34.js} +1 -1
  58. package/dist/chunk-FNH55WSR.js +19 -0
  59. package/dist/chunk-FQLIW3LM.js +2 -0
  60. package/dist/{chunk-O75ZHGJG.js → chunk-G7VQCS4J.js} +1 -1
  61. package/dist/{chunk-2WFZIQ62.js → chunk-GCBKDX2J.js} +1 -1
  62. package/dist/chunk-GKYPNSQP.js +26 -0
  63. package/dist/chunk-GPG3FIN3.js +21 -0
  64. package/dist/chunk-GZPK6FRP.js +7 -0
  65. package/dist/{chunk-XUS4WKDS.js → chunk-HCKH44I2.js} +1 -1
  66. package/dist/chunk-HEAIJCGZ.js +2 -0
  67. package/dist/{chunk-SL6PCVM2.js → chunk-HMYMSRA4.js} +1 -1
  68. package/dist/chunk-IOFZSQAA.js +2 -0
  69. package/dist/{chunk-YTHQNN2L.js → chunk-IP2O264K.js} +1 -1
  70. package/dist/{chunk-AXTGYOMK.js → chunk-JJHG3BWO.js} +1 -1
  71. package/dist/chunk-KFSUPQAG.js +66 -0
  72. package/dist/chunk-KRKGZ2ZW.js +47 -0
  73. package/dist/{chunk-AJ56AMT6.js → chunk-KU6IXFGZ.js} +1 -1
  74. package/dist/chunk-L7MXYCD7.js +2 -0
  75. package/dist/{chunk-5ZQZOVWY.js → chunk-MA34UWKX.js} +3 -3
  76. package/dist/chunk-MBF3FP5P.js +5 -0
  77. package/dist/chunk-MSGW4JDG.js +2 -0
  78. package/dist/{chunk-C3T7TKAC.js → chunk-MXHHMIO2.js} +2 -2
  79. package/dist/{chunk-RDNFVZEB.js → chunk-NX7TM662.js} +1 -1
  80. package/dist/chunk-OMQCD3KR.js +2 -0
  81. package/dist/{chunk-OR6MCL6Z.js → chunk-OTTGS2TE.js} +1 -1
  82. package/dist/chunk-QGKPLOUI.js +2 -0
  83. package/dist/{chunk-FBHRBFHP.js → chunk-QRZRSAZH.js} +1 -1
  84. package/dist/{chunk-VLWMMOMF.js → chunk-QSDH5P7C.js} +1 -1
  85. package/dist/{chunk-VOOPWFHW.js → chunk-QW6EZC53.js} +1 -1
  86. package/dist/{chunk-ZRASQ63J.js → chunk-RC52N7PC.js} +1 -1
  87. package/dist/{chunk-M6FKJKC6.js → chunk-RFR4ZKIC.js} +3 -3
  88. package/dist/{chunk-AFBKGZFG.js → chunk-RLRNLIRS.js} +1 -1
  89. package/dist/{chunk-5FJJJNJK.js → chunk-SDPRO2LE.js} +1 -1
  90. package/dist/chunk-T5Y6MOLM.js +4 -0
  91. package/dist/{chunk-VRLUNZAK.js → chunk-TFPPEOAK.js} +1 -1
  92. package/dist/{chunk-5SXMV66P.js → chunk-TKGUT425.js} +1 -1
  93. package/dist/chunk-TYLYFERW.js +10 -0
  94. package/dist/chunk-TZXXJWHA.js +2 -0
  95. package/dist/{chunk-KQZA2QSC.js → chunk-UDIQOJEL.js} +1 -1
  96. package/dist/chunk-UV462FZR.js +2 -0
  97. package/dist/{chunk-HYSFJSIG.js → chunk-UXDL4XDL.js} +1 -1
  98. package/dist/{chunk-53IBTIL3.js → chunk-V2R3LCA3.js} +1 -1
  99. package/dist/{chunk-VFII6C46.js → chunk-W2JFDDIB.js} +1 -1
  100. package/dist/{chunk-4LTXE3IX.js → chunk-XO5ZH3ZR.js} +1 -1
  101. package/dist/{chunk-EOLFTMWF.js → chunk-YFYCCTSL.js} +1 -1
  102. package/dist/{chunk-JPWLGHPM.js → chunk-YJELGSKJ.js} +1 -1
  103. package/dist/chunk-YRFMPIU2.js +4 -0
  104. package/dist/{chunk-F7ISS545.js → chunk-ZGBSGZZM.js} +1 -1
  105. package/dist/{chunk-VWKVUOXU.js → chunk-ZIUAOEUC.js} +1 -1
  106. package/dist/chunk-ZVHCQMJ6.js +13 -0
  107. package/dist/{config-CWZV6XPT.js → config-RS47F5SC.js} +1 -1
  108. package/dist/{controller-client-RD2YEMAH.js → controller-client-OB4WD2C4.js} +1 -1
  109. package/dist/{cover-cmd-NWIRJY5Z.js → cover-cmd-HDZZWJXG.js} +1 -1
  110. package/dist/{credentials-YHTJGKEO.js → credentials-OH6AVI6N.js} +1 -1
  111. package/dist/deps-resolve-XC5S53DG.js +2 -0
  112. package/dist/{dispatch-WVNXB7AD.js → dispatch-SE5GY3Z2.js} +1 -1
  113. package/dist/doctor-FSECFZUU.js +2 -0
  114. package/dist/docx-convert-JMUMT5C4.js +2 -0
  115. package/dist/evidence-OYPHZUKI.js +2 -0
  116. package/dist/evolve-cmd-BCPNXAMV.js +2 -0
  117. package/dist/exec-P2IKJRRR.js +2 -0
  118. package/dist/exit-manager-3FVBTNYR.js +2 -0
  119. package/dist/{explain-cmd-IZEHWZV5.js → explain-cmd-3GEKR7O5.js} +1 -1
  120. package/dist/{explain-cmd-75MCF2ZV.js → explain-cmd-EX24XKD6.js} +1 -1
  121. package/dist/{extract-bind-5OWELRME.js → extract-bind-LLEASZAK.js} +3 -3
  122. package/dist/{extract-cmd-ZRYMJ6IC.js → extract-cmd-UZMEZMGP.js} +2 -2
  123. package/dist/{gaps-cmd-XBRXKXDL.js → gaps-cmd-IVXFPFAQ.js} +1 -1
  124. package/dist/{generate-headless-D6BISWDC.js → generate-headless-D3SVQ2AI.js} +3 -3
  125. package/dist/host-7GZPBA74.js +2 -0
  126. package/dist/index.js +85 -69
  127. package/dist/ingest-cmd-EAE7N5RC.js +2 -0
  128. package/dist/{interactive-bind-XSRD36MO.js → interactive-bind-ORMN2REX.js} +3 -3
  129. package/dist/{lifecycle-cmd-EQSFAZG6.js → lifecycle-cmd-O2324GN6.js} +1 -1
  130. package/dist/{list-cmd-IRJSUCM5.js → list-cmd-N4KMA34H.js} +1 -1
  131. package/dist/list-commands-MRXL5HGS.js +2 -0
  132. package/dist/login-flow-QJQM3RHT.js +2 -0
  133. package/dist/{maintenance-cmd-MVFA6H74.js → maintenance-cmd-6XSVO6FO.js} +1 -1
  134. package/dist/mobile-prompts-TOX35ER6.js +2 -0
  135. package/dist/persist-recorded-session-TLDQ5HKP.js +3 -0
  136. package/dist/{phase-seed-DIRETNU6.js → phase-seed-VFHIH6FL.js} +1 -1
  137. package/dist/pipeline-UOM4LNAI.js +2 -0
  138. package/dist/prepare-target-QYWIJIVQ.js +2 -0
  139. package/dist/reconcile-cmd-3H34KVVD.js +2 -0
  140. package/dist/{reconcile-deps-HTT6IPHT.js → reconcile-deps-XIH75ZLY.js} +2 -2
  141. package/dist/reconcile-engine-UKWPG2LV.js +2 -0
  142. package/dist/{recording-banner-76GCIPUN.js → recording-banner-4M7XHVGI.js} +1 -1
  143. package/dist/registry-PYOTKZYZ.js +2 -0
  144. package/dist/{require-project-folder-ACRDP5ZB.js → require-project-folder-4UPQNEBJ.js} +1 -1
  145. package/dist/resolve-run-intent-X72V3KJA.js +7 -0
  146. package/dist/{resolver-SRPCFW7P.js → resolver-UBOZLFFE.js} +1 -1
  147. package/dist/{review-cmd-L3V5UP5T.js → review-cmd-DQRKQUMG.js} +1 -1
  148. package/dist/run-2COODVX2.js +2 -0
  149. package/dist/run-URPGHOQM.js +2 -0
  150. package/dist/{run-test-md-KEHSRMCM.js → run-test-md-76ZPKXO6.js} +3 -3
  151. package/dist/session-target-UWROGOCY.js +2 -0
  152. package/dist/{sessions-cmd-ZVYGSRJ3.js → sessions-cmd-ZZIZN2VB.js} +1 -1
  153. package/dist/{skill-installer-HBN3A35K.js → skill-installer-CIS6GAYF.js} +1 -1
  154. package/dist/spawner-J67QR4QP.js +2 -0
  155. package/dist/{structured-answers-A43Q25CZ.js → structured-answers-5EY2AZN7.js} +1 -1
  156. package/dist/tcg-generate-BDTRKY2A.js +2 -0
  157. package/dist/testmd-actions-77ELR5UU.js +2 -0
  158. package/dist/token-refresh-4BPAPXKK.js +2 -0
  159. package/dist/types-6E2HTDKJ.js +2 -0
  160. package/dist/{validate-basic-ZGWPBYB6.js → validate-basic-2GVSQ2R5.js} +1 -1
  161. package/dist/{verdicts-SCETLY5J.js → verdicts-TRSTJLCL.js} +1 -1
  162. package/dist/{version-check-CJWKDAXV.js → version-check-O6PYTI4T.js} +1 -1
  163. package/dist/{view-cmd-SOVM64L2.js → view-cmd-KPJTP4DI.js} +1 -1
  164. package/dist/{walk-session-YUYRULPY.js → walk-session-CHJXHZMO.js} +1 -1
  165. package/dist/with-telemetry-CQCWLVOC.js +2 -0
  166. package/package.json +12 -6
  167. package/dist/ConfigView-HPKRQXMC.js +0 -2
  168. package/dist/EvidenceViewOffer-F5YG54OC.js +0 -2
  169. package/dist/FolderPicker-4NSDXQY5.js +0 -2
  170. package/dist/SingleShotApp-Y3YDFQSD.js +0 -2
  171. package/dist/TestMdRunView-O6JTHV5W.js +0 -2
  172. package/dist/bootstrap-NFYYRGGR.js +0 -2
  173. package/dist/bridge-JSKEO4N3.js +0 -2
  174. package/dist/chunk-23VPUWBD.js +0 -23
  175. package/dist/chunk-2WRBTLFN.js +0 -13
  176. package/dist/chunk-5WXGMXGA.js +0 -26
  177. package/dist/chunk-74HTO7K3.js +0 -11
  178. package/dist/chunk-AECMF3T2.js +0 -8
  179. package/dist/chunk-BXYWX4J3.js +0 -2
  180. package/dist/chunk-DBKNJRJG.js +0 -2
  181. package/dist/chunk-H32GM5G4.js +0 -2
  182. package/dist/chunk-J5FBU425.js +0 -62
  183. package/dist/chunk-MK7JUOYV.js +0 -6
  184. package/dist/chunk-ORQNKZ2Z.js +0 -5
  185. package/dist/chunk-OUJQVBUT.js +0 -7
  186. package/dist/chunk-QOFZSHSC.js +0 -47
  187. package/dist/chunk-RKWJG3WW.js +0 -19
  188. package/dist/chunk-STVP2XHO.js +0 -2
  189. package/dist/chunk-WAOCHXJ5.js +0 -2
  190. package/dist/docx-convert-CHLJUTFH.js +0 -2
  191. package/dist/evidence-IVDNXWPL.js +0 -2
  192. package/dist/evolve-cmd-XBX4SX5H.js +0 -2
  193. package/dist/exit-manager-XZL4KIJU.js +0 -2
  194. package/dist/ingest-cmd-YTGOICTC.js +0 -2
  195. package/dist/list-commands-RCYHJ5Y3.js +0 -2
  196. package/dist/login-flow-PYAPYCPY.js +0 -2
  197. package/dist/persist-recorded-session-DTYCLXTQ.js +0 -3
  198. package/dist/pipeline-MXFOD6ES.js +0 -2
  199. package/dist/reconcile-cmd-EG6BOU3A.js +0 -2
  200. package/dist/reconcile-engine-JQNXALNY.js +0 -2
  201. package/dist/run-GMZCDRDD.js +0 -2
  202. package/dist/run-TFRWPGXP.js +0 -2
  203. package/dist/spawner-GC5CFAJ7.js +0 -2
  204. package/dist/tcg-generate-V7YFNC5O.js +0 -2
  205. package/dist/testmd-actions-MNDOO76O.js +0 -2
  206. package/dist/token-refresh-3UYMCYG3.js +0 -2
  207. package/dist/with-telemetry-E7QWPGL6.js +0 -2
@@ -0,0 +1,7 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as R}from"./chunk-TDPWFYTJ.js";import{a as x}from"./chunk-T5Y6MOLM.js";import{d as S}from"./chunk-FNH55WSR.js";import{d as y}from"./chunk-TYLYFERW.js";import{a as p}from"./chunk-G7VQCS4J.js";import{e as g,j as E}from"./chunk-27U4PLPX.js";import{spawn as M,execSync as h}from"child_process";import{appendFileSync as b,existsSync as m,mkdirSync as C}from"fs";import{homedir as L}from"os";import{join as V,resolve as s,dirname as v,delimiter as T}from"path";import{fileURLToPath as U}from"url";import{createInterface as I}from"readline";async function*A(e){let n=I({input:e,crlfDelay:1/0});for await(let r of n){let o=r.trim();if(o)try{let i=JSON.parse(o);i&&typeof i.type=="string"&&(yield i)}catch{}}}function O(e){return e==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function w(e){return e?{set:{},unset:["V16_AGENT_SKIP_CP_FINAL"]}:{set:{V16_AGENT_SKIP_CP_FINAL:"true"},unset:[]}}function N(e){return e==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var c=v(U(import.meta.url));function k(){for(let e of["python3","python"])try{return h(`${e} --version`,{stdio:"ignore"}),e}catch{}return null}function D(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",r={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},o=`${process.platform}-${process.arch}`,i=r[o];if(i)for(let t of i){let a=[s(c,"..","node_modules",t,"bin",n),s(c,"..","..","node_modules",t,"bin",n),s(c,"..","..","..","node_modules",t,"bin",n),s(c,"..","..","..","..","node_modules",t,"bin",n)];for(let u of a)if(m(u))return{cmd:u,args:[]}}let d=[s(c,"bin",n),s(c,"..","bin",n),s(c,"..","..","..","..","v16-runner","dist",n),s(c,"..","..","..","v16-runner","dist",n),s(c,"..","..","v16-runner","dist",n),s(process.cwd(),"v16-runner","dist",n),s(process.cwd(),"..","v16-runner","dist",n)];for(let t of d)if(m(t))return{cmd:t,args:[]};let l=[s(c,"..","..","v16-runner"),s(c,"..","..","..","..","v16-runner"),s(c,"..","..","..","v16-runner"),s(process.cwd(),"v16-runner"),s(process.cwd(),"..","v16-runner")];for(let t of l)if(m(s(t,"main.py"))){for(let u of[s(t,".venv","bin","python"),s(t,"..",".venv","bin","python"),s(t,"..","browser-agent",".venv","bin","python")])if(m(u))return{cmd:u,args:["main.py"],cwd:t};let a=k();if(a)return{cmd:a,args:["main.py"],cwd:t}}return null}function P(e){return e?V(L(),".testmuai","kaneai","sessions",e,"runner-stderr.log"):null}function K(e){let n=M(e.runner.cmd,e.runner.args,{stdio:["pipe","pipe","pipe"],env:e.env,cwd:e.runner.cwd});n.stdin.on("error",()=>{});let r=P(e.sessionId);if(r)try{C(v(r),{recursive:!0})}catch{}let o=1e5,i="";n.stderr.on("data",u=>{if(i+=u.toString(),i.length>o&&(i=i.slice(-o)),r)try{b(r,u)}catch{}}),n.on("error",u=>{e.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:u.message})});let d=null,l=null,t=new Promise(u=>{n.on("close",(f,_)=>{d=f,l=_?String(_):null,e.log?.("info","RUNNER_EXIT","Runner exited",{code:f,signal:l??"none"}),u({code:f,signal:l})})}),a=A(n.stdout);return{child:n,events:a,getStderr:()=>i,getExitCode:()=>d,getExitSignal:()=>l,exited:t}}async function B(e,n){if(!n?.platform||!n.target_kind)return;let r=await S(n.platform)?.toolEnv(n.target_kind)??{dirs:[]};if(r.dirs.length>0&&(e.PATH=[...r.dirs,e.PATH??""].filter(Boolean).join(T)),r.appiumHome&&(e.APPIUM_HOME=r.appiumHome),r.wdaRoot&&(e.TESTMU_IOS_WDA_DERIVED_DATA=r.wdaRoot),n.platform==="android"){let o=y();o&&(e.PATH=[o.platformToolsDir,e.PATH??""].filter(Boolean).join(T),e.ANDROID_HOME=o.root,e.ANDROID_SDK_ROOT=o.root)}}function H(e){let n={...process.env};e.environment&&(n.TESTMUAI_ENV=e.environment),n.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(n.PYTHONIOENCODING="utf-8",n.PYTHONUTF8="1");let r=p(e.environment);n.V16_SERVER_API_HOST=r.v16ServerHost,n.ATMS_URL=r.tmsBaseUrl.replace(/\/api\/?$/,""),e.username&&e.accessKey&&(n.LT_USERNAME=e.username,n.LT_ACCESS_KEY=e.accessKey),e.sessionId&&(n.TESTMUAI_SESSION_ID=e.sessionId);let o=O(e.mode??"testing");Object.assign(n,o.set);for(let a of o.unset)delete n[a];let i=new x().load(),d=N(e.assertionMode??(i.assertion_mode==="visual"?"visual":"dom"));Object.assign(n,d.set);for(let a of d.unset)delete n[a];let l=e.finalValidation??i.final_validation,t=w(l);Object.assign(n,t.set);for(let a of t.unset)delete n[a];return n}function G(e,n){let r=p(n?.environment),o=R();o!==void 0&&e.ap_mode===void 0&&(e.ap_mode=o),e.telemetry_proxy_url===void 0&&process.env.KANE_TELEMETRY!=="0"&&(e.telemetry_proxy_url=E),e.media_upload===void 0&&e.org_id&&e.username&&e.access_key&&(e.media_upload={url:r.shareApiBaseUrl.replace(/\/$/,"")+"/mfs/v1.0/media/upload",artefacts_host:r.mediaArtefactsHost,org_id:e.org_id,media_dir:g})}async function oe(e,n){let r=D();if(!r)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");process.env.KANE_SPAWN_DEBUG&&process.stderr.write(`[spawn-debug] ${JSON.stringify(r)}
3
+ `);let o=H({environment:n?.environment,mode:n?.mode,assertionMode:n?.assertionMode,finalValidation:n?.finalValidation,username:e.username,accessKey:e.access_key,sessionId:e.session_id});e.device?.platform&&await B(o,e.device),G(e,{environment:n?.environment});let i=K({env:o,runner:r,log:n?.log,sessionId:e.session_id}),d=i.child;d.stdin.write(JSON.stringify(e)+`
4
+ `);let l=P(e.session_id);if(l)try{C(v(l),{recursive:!0}),b(l,`--- runner spawn ${new Date().toISOString()} run_index=${e.run_index} ---
5
+ `)}catch{}return{child:d,events:i.events,sendUserResponse(t){let a=JSON.stringify({type:"user_response",answer:t});try{d.stdin.write(a+`
6
+ `)}catch{}},sendCancel(t){let a=JSON.stringify({type:"cancel",reason:t});try{d.stdin.write(a+`
7
+ `)}catch{}},cancel(){d.kill("SIGTERM")},get stderr(){return i.getStderr()},get exitCode(){return i.getExitCode()},get exitSignal(){return i.getExitSignal()},exited:i.exited}}export{D as a,K as b,B as c,H as d,G as e,oe as f};
@@ -1,3 +1,3 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
2
  function l(r){let{isAgent:c,log:m}=r,a=r.stdout??process.stderr,s=r.stdin??process.stdin,p=t=>{c&&process.stdout.write(JSON.stringify(t)+`
3
- `)};return{async runSteps(t){let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{TestMdRunView:i}=await import("./TestMdRunView-O6JTHV5W.js"),{ScrollbackProvider:n}=await import("./scrollback-JLPJR25X.js"),{waitUntilExit:d}=o(e.createElement(n,null,e.createElement(i,t)),{stdout:a,stdin:s,exitOnCtrlC:!1});await d()},async runUpload(t,e){let{renderUploadProgress:o}=await import("./CliUploadProgress-VDEAKXJY.js");return await o(t,e)},async onSummary(t){try{let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{AutoExitSummaryBox:i}=await import("./SummaryBox-JK64EKC2.js"),{waitUntilExit:n}=o(e.createElement(i,{data:t}),{stdout:a,stdin:s});await n()}catch(e){m("warn","TEST_MD_SUMMARY_RENDER_FAILED","Summary box render failed",{error:String(e)})}},async onLinks(t){try{let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{LinksBox:i}=await import("./LinksBox-TI26VFFH.js"),{waitUntilExit:n}=o(e.createElement(i,t),{stdout:a,stdin:s});await n()}catch(e){m("warn","TEST_MD_LINKS_RENDER_FAILED","LinksBox render failed",{error:String(e)})}},onLockState(t){p({type:"test_md_lock_state",...t})},onRetryAttempt(t){p({type:"test_md_retry_attempt",...t})},onAgentEvent(t){p(t)}}}export{l as a};
3
+ `)};return{async runSteps(t){let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{TestMdRunView:i}=await import("./TestMdRunView-7UVSDAF4.js"),{ScrollbackProvider:n}=await import("./scrollback-JLPJR25X.js"),{waitUntilExit:d}=o(e.createElement(n,null,e.createElement(i,t)),{stdout:a,stdin:s,exitOnCtrlC:!1});await d()},async runUpload(t,e){let{renderUploadProgress:o}=await import("./CliUploadProgress-6HL7WTEX.js");return await o(t,e)},async onSummary(t){try{let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{AutoExitSummaryBox:i}=await import("./SummaryBox-UAYSVFB7.js"),{waitUntilExit:n}=o(e.createElement(i,{data:t}),{stdout:a,stdin:s});await n()}catch(e){m("warn","TEST_MD_SUMMARY_RENDER_FAILED","Summary box render failed",{error:String(e)})}},async onLinks(t){try{let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{LinksBox:i}=await import("./LinksBox-LREUUJDV.js"),{waitUntilExit:n}=o(e.createElement(i,t),{stdout:a,stdin:s});await n()}catch(e){m("warn","TEST_MD_LINKS_RENDER_FAILED","LinksBox render failed",{error:String(e)})}},onLockState(t){p({type:"test_md_lock_state",...t})},onRetryAttempt(t){p({type:"test_md_retry_attempt",...t})},onAgentEvent(t){p(t)}}}export{l as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as l}from"./chunk-RZ4F3BHX.js";import{openAsBlob as g}from"fs";import{basename as f}from"path";var h={emulator:"application/vnd.android.package-archive",simulator:"application/zip"},m=30*6e4,p=3e4;function y(n){let e=n??{},t=Array.isArray(e.apps)?e.apps:[],s=[];for(let r of t){let a=r??{},o=typeof a.app_id=="string"?a.app_id:void 0;o&&s.push({appId:o,name:typeof a.name=="string"&&a.name.trim()!==""?a.name:o,...typeof a.package=="string"?{packageName:a.package}:{},...typeof a.updated_at=="string"?{updatedAt:a.updated_at}:{}})}return{apps:s,total:typeof e.total=="number"?e.total:s.length}}function w(){return{fileBody:n=>g(n),request:l}}function A(n){if(!n||typeof n!="object")return null;let e=n,t=typeof e.app_id=="string"?e.app_id:void 0;return t?{appId:t,...typeof e.app_url=="string"?{appUrl:e.app_url}:{},...typeof e.url=="string"?{url:e.url}:{},cached:e.cached===!0,...typeof e.name=="string"?{name:e.name}:{}}:null}function b(n){if(!n||typeof n!="object")return null;let e=n,t=typeof e.app_id=="string"?e.app_id:void 0,s=typeof e.url=="string"?e.url:void 0;if(!t||!s)return null;let r=typeof e.name=="string"&&e.name.trim()!==""?e.name:`${t}.bin`;return{appId:t,name:r,url:s,...typeof e.package=="string"?{packageName:e.package}:{},...typeof e.type=="string"?{type:e.type}:{}}}function k(n){let e=n?.cause,t=e instanceof Error?e.message:typeof e=="string"?e:void 0,s=n instanceof Error?n.message:String(n);return t&&t!==s?`${s} (${t})`:s}var i=class extends Error{constructor(t,s){super(t);this.status=s;this.name="AppUploadError"}};async function u(n){let e=await n.text(),t;try{let s=JSON.parse(e);t=s.error??s.message??e}catch{t=e}return n.status===503&&t.includes("app service not configured")?"the controller has the app routes but its app service is not configured (LMAO_BASE_URL is unset) \u2014 ask whoever runs this environment to set it.":t}var d=class{constructor(e,t,s={}){this.baseUrl=e;this.auth=t;this.deps={...w(),...s}}deps;headers(){return{Authorization:typeof this.auth=="string"?`Bearer ${this.auth}`:`Basic ${Buffer.from(`${this.auth.username}:${this.auth.accessKey}`).toString("base64")}`}}async upload(e,t,s={}){let r=f(e),a=await this.uploadTarget(r,t);s.onProgress?.(`uploading ${r}\u2026`);let o=await this.deps.request(a.uploadUrl,{method:"PUT",headers:{"Content-Type":h[t]},body:await this.deps.fileBody(e),signal:s.signal??AbortSignal.timeout(m)});if(!o.ok)throw new i(`Uploading ${r} failed: ${o.status} ${await o.text()}`,o.status);let c=a.uploadUrl.split("?")[0];return this.register(r,t,c)}async uploadTarget(e,t){let s=`name=${encodeURIComponent(e)}&device_class=${encodeURIComponent(t)}`,r=await this.deps.request(`${this.baseUrl}/mobile-app/upload-url?${s}`,{method:"GET",headers:this.headers(),signal:AbortSignal.timeout(p)});if(!r.ok)throw new i(`Could not start the upload of ${e}: ${await u(r)}`,r.status);let a=await r.json();if(!a.upload_url)throw new i(`Could not start the upload of ${e}: no upload url.`);return{key:a.key??"",uploadUrl:a.upload_url}}async register(e,t,s){let r=await this.deps.request(`${this.baseUrl}/mobile-app/register`,{method:"POST",headers:{...this.headers(),"Content-Type":"application/json"},body:JSON.stringify({name:e,device_class:t,url:s}),signal:AbortSignal.timeout(p)});if(!r.ok)throw new i(`Could not register ${e}: ${await u(r)}`,r.status);let a=A(await r.json());if(!a)throw new i(`Registering ${e} returned no app id.`);return a}async list(e){let t=new URLSearchParams({device_class:e.type});e.limit!==void 0&&t.set("limit",String(e.limit)),e.offset!==void 0&&t.set("offset",String(e.offset)),e.search&&t.set("search",e.search);let s=`${this.baseUrl}/mobile-app/list?${t.toString()}`,r;try{r=await this.deps.request(s,{method:"GET",headers:this.headers(),signal:AbortSignal.timeout(p)})}catch(a){throw new i(k(a))}if(!r.ok)throw r.status===404?new i("Browsing uploads needs a newer v16 controller than this environment is running.",404):new i(`Could not list your uploads: ${await u(r)}`,r.status);return y(await r.json())}async details(e){let t=await this.deps.request(`${this.baseUrl}/mobile-app/${encodeURIComponent(e)}`,{method:"GET",headers:this.headers(),signal:AbortSignal.timeout(p)});if(!t.ok)throw new i(`${e}: ${await u(t)}`,t.status);let s=b(await t.json());if(!s)throw new i(`${e} returned no download url.`);return s}async liveness(e){try{return await this.details(e),"alive"}catch(t){let s=t instanceof i?t.status:void 0;return s!==void 0&&s>=400&&s<500?"gone":"unknown"}}};export{h as a,y as b,A as c,b as d,k as e,i as f,d as g};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as _}from"./chunk-TDPWFYTJ.js";import{b as m}from"./chunk-L5LI2JF4.js";import{c as h}from"./chunk-ZUGCHQFC.js";import{randomUUID as F}from"crypto";import{mkdirSync as A,writeFileSync as v,appendFileSync as O,existsSync as b}from"fs";import{join as u}from"path";import{writeFileSync as x,mkdirSync as I,existsSync as j}from"fs";import{join as p,relative as L}from"path";function f(n){let t=Object.keys(n.frontmatter).length>0?m(n.frontmatter).trimEnd():"",s=["---"];return t&&s.push(t),s.push("---",""),s.push(`# ${n.heading}`,""),n.steps.forEach((i,r)=>{s.push(`## Step ${r+1}`,i,"")}),s.join(`
2
+ import{b as m}from"./chunk-L5LI2JF4.js";import{a as _}from"./chunk-TDPWFYTJ.js";import{c as h}from"./chunk-27U4PLPX.js";import{randomUUID as F}from"crypto";import{mkdirSync as A,writeFileSync as v,appendFileSync as O,existsSync as b}from"fs";import{join as u}from"path";import{writeFileSync as x,mkdirSync as I,existsSync as j}from"fs";import{join as p,relative as L}from"path";function f(n){let t=Object.keys(n.frontmatter).length>0?m(n.frontmatter).trimEnd():"",s=["---"];return t&&s.push(t),s.push("---",""),s.push(`# ${n.heading}`,""),n.steps.forEach((i,r)=>{s.push(`## Step ${r+1}`,i,"")}),s.join(`
3
3
  `)}function T(n,e){let t={},s={},i=e;for(let[r,l]of Object.entries(n)){if(r.startsWith("global.")||r.startsWith("secrets.user.")||r.startsWith("environment.")){let o=r.startsWith("secrets.user.");t[r]={value:l.value,secret:o,syntax:`{{${r}}}`,type:o?"secret":r.startsWith("environment.")?"environment":"global"},s[r]=r;continue}if(l.secret){let o=`secrets.user.${r}`;t[o]={value:l.value,secret:!0,syntax:`{{secrets.user.${r}}}`,type:"secret"},s[r]=o,i=i.replaceAll(`{{${r}}}`,`{{secrets.user.${r}}}`)}else{let o=`global.${r}`;t[o]={value:l.value,secret:!1,syntax:`{{global.${r}}}`,type:"global"},s[r]=o,i=i.replaceAll(`{{${r}}}`,`{{global.${r}}}`)}}return{variables:t,objective:i,keyMap:s}}var w=/\{\{\s*(?:global|secrets\.user|environment)\.([^{}]+?)\s*\}\}/g;function c(n){return typeof n!="string"||!n.includes("{{")?n:n.replace(w,"{{$1}}")}function d(n){if(typeof n=="string")return c(n);if(Array.isArray(n))return n.map(e=>d(e));if(n&&typeof n=="object"){let e={};for(let[t,s]of Object.entries(n))e[t]=d(s);return e}return n}var N=new Set(["username","access_key","oauth","profile","project_id","folder_id"]),$=new Set(["model","env"]),g=class{constructor(e){this.opts=e}objectives=[];flushed=!1;lastWrittenPath=null;lastCollisionSuffixed=!1;appendObjective(e){this.objectives.push(e)}flush(){if(this.flushed||(this.flushed=!0,this.objectives.length===0))return;let e=this.opts.getName();if(!e)return;let t=p(this.opts.cwd,".testmuai","tests");try{I(t,{recursive:!0})}catch(a){process.stderr.write(`
4
4
  \u26A0 Failed to create ${L(this.opts.cwd,t)}/
5
5
  ${a.message}
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as f}from"./chunk-TFPPEOAK.js";import{y as r}from"./chunk-27U4PLPX.js";import{a as g}from"./chunk-HCBYKLMW.js";import{a as i,b as n,i as p}from"./chunk-C44QQJR4.js";import{a as x}from"./chunk-6YGTRKDT.js";import{e as d}from"./chunk-UR6MHSHU.js";var b=d(x(),1);var e=d(g(),1),v=[{value:"desktop",label:"Desktop",hint:"Chrome on this machine"},{value:"emulator",label:"Emulator",hint:"a virtual Android device"},{value:"simulator",label:"Simulator",hint:"a virtual iOS device"}];function T(a){return a==="all"?v:v.filter(l=>l.value!=="desktop")}function B({mode:a="all",onSelect:l,onCancel:c}){let u=T(a),[h,m]=(0,b.useState)(0);return p((s,o)=>{if(o.escape&&c){c();return}o.upArrow&&m(t=>Math.max(0,t-1)),o.downArrow&&m(t=>Math.min(u.length-1,t+1)),o.return&&l(u[h].value)}),(0,e.jsxs)(i,{flexDirection:"column",borderStyle:"round",borderColor:r.orange,paddingX:2,paddingY:1,children:[(0,e.jsx)(n,{color:r.orange,bold:!0,children:a==="all"?"Where should tests run?":"Which kind of device?"}),(0,e.jsx)(i,{marginTop:1,flexDirection:"column",children:u.map((s,o)=>{let t=o===h;return(0,e.jsxs)(i,{children:[(0,e.jsxs)(n,{color:t?r.orange:void 0,children:[t?"\u276F ":" ",s.label]}),(0,e.jsxs)(n,{color:r.dim,children:[" ",s.hint]})]},s.value)})}),(0,e.jsx)(i,{marginTop:1,children:(0,e.jsx)(n,{color:r.dim,children:"You can change this any time with /desktop or /mobile."})}),(0,e.jsx)(f,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],suppressEscBack:!c,escBackLabel:"skip"})]})}export{B as a};
@@ -1,3 +1,3 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as w,b as O}from"./chunk-R5T4RLF5.js";import{a as I}from"./chunk-KBM3XHAM.js";import{e as L}from"./chunk-IDX3TOPY.js";import{a as N,b as k}from"./chunk-BKM2LWU2.js";import{a as R,b as y,c as T,d as m,e as A,f as b,g as r}from"./chunk-QIGPXYMF.js";import{b as x}from"./chunk-5EOX4MEY.js";import{a as E}from"./chunk-RZ4F3BHX.js";import{a as g,j as v}from"./chunk-ZUGCHQFC.js";import{platform as X,arch as Y}from"os";import P from"fs";import M from"fs";import D from"path";var V=1e3,d=0,j=new Set([130,3]),a=class t{ids;logger;opts;ended=!1;createdAt=Date.now();errorState;constructor(e,n={emitted:!1}){this.ids=e.envelope,this.logger=e.logger,this.opts=e,this.errorState=n}get enabled(){return this.logger!==null}event(e,n={}){if(!this.logger)return;e==="ASR_ERROR"&&(this.errorState.emitted=!0);let i=m(this.ids,e,n);this.logger.log(R[e],e,e,C(i))}error(e,n={}){this.logger&&(this.logger.escalate(d),this.event("ASR_ERROR",{...n,error_code:e}))}child(e,n){return new t({...this.opts,envelope:{...this.ids,operation_id:n,parent_operation_id:this.ids.operation_id,verb:"design"}},this.errorState)}async lateBindContext(e){if(!(!this.logger||this.ids.context_instance_id))try{let{ensureStoreIds:n}=await import("./store-id-EOSGEKVK.js"),{ids:i,cloned:s}=n(e);this.ids.context_lineage_id=i.context_lineage_id,this.ids.context_instance_id=i.context_instance_id,s&&this.event("ASR_CONTEXT_CLONED")}catch{}}agentSession(e){this.ids.agent_session_id=e}spawnEnv(){if(!this.opts.telemetryEnabled)return{};let e={TESTMUAI_USER_SESSION_ID:this.ids.session_id,TESTMUAI_OPERATION_ID:this.ids.operation_id,TESTMUAI_CLIENT_VERSION:this.opts.clientVersion,TESTMUAI_TELEMETRY_PROXY_URL:this.opts.proxyUrl};return this.ids.context_instance_id&&(e.TESTMUAI_CONTEXT_INSTANCE_ID=this.ids.context_instance_id),e}traceTee(){return e=>{if(!this.logger)return;let n=typeof e.kind=="string"?e.kind.slice(0,64):"trace",i={...C(m(this.ids,"ASR_CMD_START",{})),trace_kind:n};typeof e.code=="string"&&(i.trace_code=e.code.slice(0,64)),delete i.event,this.logger.logStep(d,`trace_${n}`,n,i)}}wireTrace(e,n,i){if(!this.logger)return;i&&this.agentSession(i);let s=n&&typeof n=="object"?n:{};switch(e){case"spawn":this.event("ASR_AGENT_SPAWN",{tier:s.tier});break;case"session_paused":this.event("ASR_SESSION_PAUSED",s);break;case"commit":this.event("ASR_COMMIT",s);break;default:this.traceTee()({kind:e,code:typeof s.code=="string"?s.code:void 0})}}banner(){return`session: ${this.ids.session_id}`}supportFooter(){return`if this keeps failing, share this id with support: ${this.ids.session_id}`}async end(e){if(!this.ended){if(this.ended=!0,e.duration_ms===void 0&&(e={...e,duration_ms:Date.now()-this.createdAt}),this.logger)if(e.exit_code===0?this.logger.discardSteps(d):this.logger.escalate(d),e.exit_code>0&&!j.has(e.exit_code)&&!this.errorState.emitted&&this.event("ASR_ERROR",{error_code:e.exit_code===2?"usage_exit_unattributed":`exit_${e.exit_code}_unattributed`,exit_code:e.exit_code}),this.event("ASR_CMD_END",e),this.opts.longSession)await this.logger.shutdown();else{let n=await this.logger.flushOnce(V);(n==="failed"||n==="timeout")&&A(this.logger.drainBuffer())}this.logger&&this.writeManifestLine(e.exit_code),r(null)}}writeManifestLine(e){try{let n=x(this.ids.context_instance_id??null);M.mkdirSync(D.dirname(n),{recursive:!0});let i={ts:new Date().toISOString(),session_id:this.ids.session_id,operation_id:this.ids.operation_id,agent_session_id:this.ids.agent_session_id,verb:this.ids.verb,mode:this.ids.mode,exit_code:e};M.appendFileSync(n,JSON.stringify(i)+`
2
+ import{a as w,b as O}from"./chunk-R5T4RLF5.js";import{e as L}from"./chunk-IDX3TOPY.js";import{a as N,b as k}from"./chunk-BKM2LWU2.js";import{a as I}from"./chunk-KBM3XHAM.js";import{a as R,b as y,c as T,d as m,e as A,f as b,g as r}from"./chunk-56PAQAX5.js";import{b as x}from"./chunk-5EOX4MEY.js";import{a as E}from"./chunk-RZ4F3BHX.js";import{a as g,j as v}from"./chunk-27U4PLPX.js";import{platform as X,arch as Y}from"os";import P from"fs";import M from"fs";import D from"path";var V=1e3,d=0,j=new Set([130,3]),a=class t{ids;logger;opts;ended=!1;createdAt=Date.now();errorState;constructor(e,n={emitted:!1}){this.ids=e.envelope,this.logger=e.logger,this.opts=e,this.errorState=n}get enabled(){return this.logger!==null}event(e,n={}){if(!this.logger)return;e==="ASR_ERROR"&&(this.errorState.emitted=!0);let i=m(this.ids,e,n);this.logger.log(R[e],e,e,C(i))}error(e,n={}){this.logger&&(this.logger.escalate(d),this.event("ASR_ERROR",{...n,error_code:e}))}child(e,n){return new t({...this.opts,envelope:{...this.ids,operation_id:n,parent_operation_id:this.ids.operation_id,verb:"design"}},this.errorState)}async lateBindContext(e){if(!(!this.logger||this.ids.context_instance_id))try{let{ensureStoreIds:n}=await import("./store-id-EOSGEKVK.js"),{ids:i,cloned:s}=n(e);this.ids.context_lineage_id=i.context_lineage_id,this.ids.context_instance_id=i.context_instance_id,s&&this.event("ASR_CONTEXT_CLONED")}catch{}}agentSession(e){this.ids.agent_session_id=e}spawnEnv(){if(!this.opts.telemetryEnabled)return{};let e={TESTMUAI_USER_SESSION_ID:this.ids.session_id,TESTMUAI_OPERATION_ID:this.ids.operation_id,TESTMUAI_CLIENT_VERSION:this.opts.clientVersion,TESTMUAI_TELEMETRY_PROXY_URL:this.opts.proxyUrl};return this.ids.context_instance_id&&(e.TESTMUAI_CONTEXT_INSTANCE_ID=this.ids.context_instance_id),e}traceTee(){return e=>{if(!this.logger)return;let n=typeof e.kind=="string"?e.kind.slice(0,64):"trace",i={...C(m(this.ids,"ASR_CMD_START",{})),trace_kind:n};typeof e.code=="string"&&(i.trace_code=e.code.slice(0,64)),delete i.event,this.logger.logStep(d,`trace_${n}`,n,i)}}wireTrace(e,n,i){if(!this.logger)return;i&&this.agentSession(i);let s=n&&typeof n=="object"?n:{};switch(e){case"spawn":this.event("ASR_AGENT_SPAWN",{tier:s.tier});break;case"session_paused":this.event("ASR_SESSION_PAUSED",s);break;case"commit":this.event("ASR_COMMIT",s);break;default:this.traceTee()({kind:e,code:typeof s.code=="string"?s.code:void 0})}}banner(){return`session: ${this.ids.session_id}`}supportFooter(){return`if this keeps failing, share this id with support: ${this.ids.session_id}`}async end(e){if(!this.ended){if(this.ended=!0,e.duration_ms===void 0&&(e={...e,duration_ms:Date.now()-this.createdAt}),this.logger)if(e.exit_code===0?this.logger.discardSteps(d):this.logger.escalate(d),e.exit_code>0&&!j.has(e.exit_code)&&!this.errorState.emitted&&this.event("ASR_ERROR",{error_code:e.exit_code===2?"usage_exit_unattributed":`exit_${e.exit_code}_unattributed`,exit_code:e.exit_code}),this.event("ASR_CMD_END",e),this.opts.longSession)await this.logger.shutdown();else{let n=await this.logger.flushOnce(V);(n==="failed"||n==="timeout")&&A(this.logger.drainBuffer())}this.logger&&this.writeManifestLine(e.exit_code),r(null)}}writeManifestLine(e){try{let n=x(this.ids.context_instance_id??null);M.mkdirSync(D.dirname(n),{recursive:!0});let i={ts:new Date().toISOString(),session_id:this.ids.session_id,operation_id:this.ids.operation_id,agent_session_id:this.ids.agent_session_id,verb:this.ids.verb,mode:this.ids.mode,exit_code:e};M.appendFileSync(n,JSON.stringify(i)+`
3
3
  `,{flag:"a",mode:384})}catch{}}};function C(t){let e={event:t.event,session_id:t.session_id,operation_id:t.operation_id,verb:t.verb,mode:t.mode,component:t.component,seq:t.seq,context_lineage_id:t.context_lineage_id,context_instance_id:t.context_instance_id};t.parent_operation_id&&(e.parent_operation_id=t.parent_operation_id),t.agent_session_id&&(e.agent_session_id=t.agent_session_id);for(let[n,i]of Object.entries(t.context))e[n]=i;return e}var u=process.env.KANE_TELEMETRY_URL||v;function B(){return process.env.TESTMUAI_BASE_URL?"custom":process.env.TESTMUAI_ENV==="stage"?"stage":"prod"}function _e(t){let e=process.env.KANE_TELEMETRY!=="0"&&(!process.env.VITEST||process.env.KANE_TELEMETRY==="1"),n=t.env??B(),i=null;if(t.resumeSid&&t.contextRoot)try{let o=L(t.contextRoot,t.resumeSid);o?.user_session_id&&(i=o.user_session_id)}catch{}if(!i&&t.applyPlanPath)try{let o=JSON.parse(P.readFileSync(t.applyPlanPath,"utf8"));o.telemetry?.user_session_id&&(i=o.telemetry.user_session_id)}catch{}let s=i!==null;i||(i=y());let l=null,c=null,f=!1;if(t.contextRoot&&P.existsSync(t.contextRoot))if(t.write&&e){let o=k(t.contextRoot);l=o.ids.context_lineage_id,c=o.ids.context_instance_id,f=o.cloned}else{let o=N(t.contextRoot);l=o?.context_lineage_id??null,c=o?.context_instance_id??null}let h={session_id:i,operation_id:T(),context_lineage_id:l,context_instance_id:c,verb:t.verb,mode:t.mode,component:"kane-cli"},_=null;if(e){let o=I(n),S={org_id:o.org_id??"",user_id:o.user_id??"",machine_id:o.machine_id,email:null,email_domain:"",user_type:o.user_type??"unknown",env:o.env,plan:o.plan??"unknown"},U=t.mode==="interactive"||t.mode==="cli"?"cli":"agent";_=new w({proxyUrl:u,sessionId:i,identity:S,device:{cli_version:g,platform:X(),arch:Y(),host_agent:O(),invocation_mode:U},getToken:async()=>null}),t.longSession&&_.start()}let p=new a({envelope:h,logger:_,longSession:!!t.longSession,proxyUrl:u,clientVersion:`kane-cli/${g}`,telemetryEnabled:e});return e&&(r(h),p.event("ASR_CMD_START",{resumed:s,applied_plan:!!t.applyPlanPath}),f&&p.event("ASR_CONTEXT_CLONED"),b(async o=>{try{return(await E(u,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)})).ok}catch{return!1}}).catch(()=>{})),p}export{B as a,_e as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{y as m}from"./chunk-ZUGCHQFC.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a as u,b as a,j as g}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as f}from"./chunk-UR6MHSHU.js";var T=f(b(),1);function k(i,n){if(!n)return i;let l=i.trim()||n;return`\x1B]8;;${n}\x07${l}\x1B]8;;\x07`}var r=f(x(),1);function $({shareableLink:i,testCaseLink:n,codeExportDir:l,recordedTestPath:s,outputDir:o,autoExit:p=!0}){let{exit:c}=g();(0,T.useEffect)(()=>{if(!p)return;let t=setTimeout(()=>c(),100);return()=>clearTimeout(t)},[c,p]);let e=[];return s&&e.push({label:"Test",url:s,linkUrl:`file://${s}`}),o&&e.push({label:"Output",url:o,linkUrl:`file://${o}`}),i&&e.push({label:"ShareLink",url:i}),n&&e.push({label:"TestCase",url:n}),l&&!o&&e.push({label:"CodeExport",url:l,linkUrl:`file://${l}`}),e.length===0?(0,r.jsx)(r.Fragment,{}):(0,r.jsx)(u,{flexDirection:"column",marginTop:1,marginLeft:1,children:e.map(t=>(0,r.jsxs)(u,{flexDirection:"column",marginBottom:1,children:[(0,r.jsxs)(a,{color:m.orange,children:[t.label,":"]}),(0,r.jsx)(a,{color:m.dim,children:k(t.url,t.linkUrl??t.url)})]},t.label))})}export{$ as a};
2
+ import{y as m}from"./chunk-27U4PLPX.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a as u,b as a,j as g}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as f}from"./chunk-UR6MHSHU.js";var T=f(b(),1);function k(i,n){if(!n)return i;let l=i.trim()||n;return`\x1B]8;;${n}\x07${l}\x1B]8;;\x07`}var r=f(x(),1);function $({shareableLink:i,testCaseLink:n,codeExportDir:l,recordedTestPath:s,outputDir:o,autoExit:p=!0}){let{exit:c}=g();(0,T.useEffect)(()=>{if(!p)return;let t=setTimeout(()=>c(),100);return()=>clearTimeout(t)},[c,p]);let e=[];return s&&e.push({label:"Test",url:s,linkUrl:`file://${s}`}),o&&e.push({label:"Output",url:o,linkUrl:`file://${o}`}),i&&e.push({label:"ShareLink",url:i}),n&&e.push({label:"TestCase",url:n}),l&&!o&&e.push({label:"CodeExport",url:l,linkUrl:`file://${l}`}),e.length===0?(0,r.jsx)(r.Fragment,{}):(0,r.jsx)(u,{flexDirection:"column",marginTop:1,marginLeft:1,children:e.map(t=>(0,r.jsxs)(u,{flexDirection:"column",marginBottom:1,children:[(0,r.jsxs)(a,{color:m.orange,children:[t.label,":"]}),(0,r.jsx)(a,{color:m.dim,children:k(t.url,t.linkUrl??t.url)})]},t.label))})}export{$ as a};
@@ -0,0 +1,66 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as Mt,b as vn,c as ct,d as dt,e as wn,f as Bt,g as Rn,h as In}from"./chunk-ELM6MXGJ.js";import{a as Me,b as Sn}from"./chunk-C5UNZ6ZY.js";import{c as _n}from"./chunk-S3DAAAE5.js";import{c as kn}from"./chunk-MBF3FP5P.js";import{c as Cn}from"./chunk-5DT7PIGB.js";import{c as $t,d as yn}from"./chunk-RFR4ZKIC.js";import{a as $e,b as oe,e as Ae,f as Ft,k as pn,n as gn,q as we,r as Nt,u as bn}from"./chunk-GPG3FIN3.js";import{d as hn}from"./chunk-2YQ6TW77.js";import{$ as fn,A as rn,B as nn,D as sn,E as on,G as ln,H as cn,I as dn,V as un,_ as mn,h as lt,u as Xr,v as en,z as tn}from"./chunk-ZVHCQMJ6.js";import{a as an}from"./chunk-CH273NAE.js";import{b as Ee}from"./chunk-HMYMSRA4.js";import{a as Jr,c as at,d as jt}from"./chunk-CTW2VQKS.js";import{a as it,c as Yr,d as Wr,e as Ut}from"./chunk-GZPK6FRP.js";import{c as Qr,e as Zr}from"./chunk-6IA6QMPH.js";import{a as Dt,b as Ot}from"./chunk-R5T4RLF5.js";import{g as qr,h as Gr}from"./chunk-DZGCXKKI.js";import{a as ot}from"./chunk-2WVKOZ6W.js";import{a as zr}from"./chunk-2YEHV2CX.js";import{d as Kr,h as Hr}from"./chunk-QGKPLOUI.js";import{i as $r,k as Lt,l as Mr,m as st,n as Br,o as Vr}from"./chunk-56PAQAX5.js";import{a as se}from"./chunk-G7VQCS4J.js";import{a as Ce}from"./chunk-DPUV6OSP.js";import{a as nt,b as Nr}from"./chunk-NLCCBXXV.js";import{a as z}from"./chunk-RZ4F3BHX.js";import{a as jr}from"./chunk-E47GFYXA.js";import{a as tt,c as xt,j as Fr,k as rt,l as Pt,m as Tt}from"./chunk-27U4PLPX.js";import{join as ue,basename as As}from"path";import{existsSync as Oo,readFileSync as Ps}from"fs";function En(e,t){if(process.env.KANE_REPLAY_TRACE==="1")for(let r=0;r<e.steps.length;r++){let n=e.steps[r],s=t[r],o=" ".repeat(n.trace.length-1),i=`step ${n.flatIndex}`;s.kind==="replay"?process.stderr.write(`[replay-trace] ${o}${i}: REPLAY (would skip; v1 always authors)
3
+ `):process.stderr.write(`[replay-trace] ${o}${i}: AUTHOR (${s.reason})
4
+ `)}}function xe(e){process.env.KANE_REPLAY_TRACE==="1"&&process.stderr.write(e)}function An(e,t){let r=e===0?"(none)":`0..${e-1}`,n=e>=t?"(none)":`${e}..${t-1}`;xe(`[replay-trace] phase: replay ${r}, author ${n}
5
+ `)}function xn(e,t){xe(`[replay-trace] step ${e}: REPLAY ${t==="ok"?"OK":"FAILED"}
6
+ `)}function Pn(e,t,r){xe(`[replay-trace] shrink ${e}/${t} \u2192 new boundary ${r}
7
+ `)}function Tn(e,t){xe(`[replay-trace] complete-reauthor (${e} shrinks exhausted of ${t})
8
+ `)}function Vt(){xe(`[replay-trace] force-author (--author) \u2014 walker bypassed
9
+ `)}function Ln(e){xe(`[replay-trace] cancelled at step ${e}
10
+ `)}import{join as Dn}from"path";function Kt(e){let t=wn(e.decision),r={objective:e.step.objective,model:"v16-alpha",width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,mode:"replay",replay:{recording_path:t[0],...t.length>1?{recording_paths:t}:{},step_label:e.step.objective,...e.investigationAsync?{investigation:"async"}:{}},screenshot_dir:e.evidence?Dn(e.sessionDir,"scratch",String(e.runIndex)):Dn(e.sessionDir,"runs",String(e.runIndex)),run_id:"run",test_id:"test"};return e.forceNavigateUrl&&(r.url=e.forceNavigateUrl),e.chrome.wsEndpoint?r.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(r.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(r.username=e.auth.basicAuth.username,r.access_key=e.auth.basicAuth.access_key):e.auth.token&&(r.auth={type:"bearer",token:e.auth.token}),e.auth.resolvedCreds?.org_id&&(r.org_id=String(e.auth.resolvedCreds.org_id)),e.variables&&Object.keys(e.variables).length>0&&(r.variables=e.variables),e.sessionContext&&(r.session_context=e.sessionContext),e.device&&(r.device=e.device),e.evidence&&(r.evidence=lt(e.evidence.packTestDir,e.evidence.ordinalOffset)),r}async function On(e){let t=e.forceAuthor?0:dt(e.decisions),r=0,n=!1;for(;;){let s=e.session.snapshot(),o=e.accumulator.snapshot(),i=await e.runReplayPhase(t);if(i.cancelled)return n=!0,Ln(i.failedAt??0),{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};if(i.failedAt===null)return{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};let p=Sn({failedAt:i.failedAt,shrinkCount:r,hasRetry:e.hasRetry,maxShrinks:e.maxShrinks});if(p.kind==="fail")return{authorBoundary:-1,cancelledInPhase:n,shrinkCount:r};if(e.acquireLockIfNeeded&&!await e.acquireLockIfNeeded())return{authorBoundary:-1,cancelledInPhase:n,shrinkCount:r};if(e.archiveAttempt&&await e.archiveAttempt(),e.session.rollback(s),e.accumulator.rollback(o),p.kind==="complete-reauthor")return Tn(r+1,e.maxShrinks),{authorBoundary:0,cancelledInPhase:n,shrinkCount:r};r++,Pn(r,Me.maxShrinks,p.newAuthorBoundary),t=p.newAuthorBoundary}}var Ks=15e3,Ht=3,Un=[500,1e3];async function qt(e){if(process.env.KANE_LOCK_CONFLICT_SIMULATE==="1")return{ok:!1,reason:"concurrent",httpStatus:409,message:"simulated contention (KANE_LOCK_CONFLICT_SIMULATE=1)"};let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground`,r=await ut(t,{from_commit_id:e.fromCommitId,new_commit_id:e.newCommitId},e.auth);return r.ok?{ok:!0,sessionExpiresAt:V(r.body,"session_expires_at")??""}:{ok:!1,...Hs(r)}}function Hs(e){let t=V(e.body,"error")??V(e.body,"code")??"",r=V(e.body,"message")??V(e.body,"detail")??e.text??`HTTP ${e.status}`,n;return e.status===0?n="network":e.status===401||e.status===403?n="auth":e.status===409&&t==="PlaygroundBaseCommitMismatch"?n="base_mismatch":e.status===409?n="concurrent":e.status===422?n="disabled":e.status===400&&/no committed/i.test(r)?n="no_commits":e.status===400?n="missing_field":e.status>=500||e.status===408||e.status===429?n="network":n="other",{reason:n,httpStatus:e.status,message:r}}async function Fn(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground/reserve`,r=await ut(t,void 0,e.auth);return r.ok?{ok:!0,sessionExpiresAt:V(r.body,"session_expires_at")??""}:{ok:!1,expired:r.status===404,httpStatus:r.status,message:V(r.body,"message")??V(r.body,"detail")??r.text??`HTTP ${r.status}`}}async function Gt(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,r={commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:e.body.commitMessage,total_steps:e.body.totalSteps};e.body.timeTaken!==void 0&&(r.time_taken=e.body.timeTaken),e.body.objectives!==void 0&&(r.objectives=e.body.objectives);let n=await ut(t,r,e.auth);return n.ok?{ok:!0,testId:V(n.body,"test_id")??e.testId,testcaseId:V(n.body,"testcase_id")??"",projectId:V(n.body,"project_id"),isTestCaseDeleted:typeof n.body?.is_test_case_deleted=="boolean"?n.body.is_test_case_deleted:void 0}:{ok:!1,...qs(n)}}function qs(e){let t=V(e.body,"error")??V(e.body,"code")??"",r=V(e.body,"message")??V(e.body,"detail")??e.text??`HTTP ${e.status}`,n;return e.status===0?n="network":e.status===401||e.status===403?n="auth":e.status===409&&t==="PlaygroundBaseCommitMismatch"?n="base_mismatch":e.status===409&&t==="PlaygroundCommitLockMismatch"?n="lock_mismatch":e.status===409?n="expired":e.status===422?n="not_found":e.status>=500||e.status===408||e.status===429?n="network":n="other",{reason:n,httpStatus:e.status,message:r}}async function Be(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,r={discard:!0,commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:"(discarded)",total_steps:1},n=await ut(t,r,e.auth);return n.ok?{ok:!0}:{ok:!1,reason:V(n.body,"error")??"other",httpStatus:n.status,message:V(n.body,"message")??V(n.body,"detail")??n.text??`HTTP ${n.status}`}}async function ut(e,t,r){let n=null;for(let s=1;s<=Ht;s++){let o=new AbortController,i=setTimeout(()=>o.abort(),Ks);try{let p=await z(e,{method:"POST",headers:{Authorization:nt(r.username,r.accessKey),"Content-Type":"application/json",Accept:"application/json"},...t!==void 0?{body:JSON.stringify(t)}:{},signal:o.signal});clearTimeout(i);let l=await p.text(),c=null;if(l)try{c=JSON.parse(l)}catch{}let y=p.status>=500||p.status===408||p.status===429;if(p.ok||!y)return{ok:p.ok,status:p.status,body:c,text:l};if(s<Ht){await jn(Un[s-1]??1e3);continue}return{ok:!1,status:p.status,body:c,text:l}}catch(p){if(clearTimeout(i),n=p,s<Ht){await jn(Un[s-1]??1e3);continue}}}return{ok:!1,status:0,body:null,text:n?.message??"exhausted retries"}}function jn(e){return new Promise(t=>setTimeout(t,e))}function V(e,t){if(typeof e!="object"||e===null)return;let r=e[t];return typeof r=="string"?r:void 0}var Gs=60*1e3,Nn="lock-heartbeat",ge=new Map,Ve=null,zs={register:(e,t)=>st(e,t),deregister:e=>Br(e),cleanup:(e,t)=>Vr(e,t),remoteLogger:null};function $n(e){if(e!==void 0){let t=ge.get(e);t!==void 0&&(clearInterval(t),ge.delete(e));return}for(let t of ge.values())clearInterval(t);ge.clear()}function mt(e){if(ge.has(e.testId))return;let t=e.lifecycle??zs,r=setInterval(async()=>{let n=await Fn({baseUrl:e.baseUrl,testId:e.testId,auth:e.auth});if(!n.ok){let s=n.expired?"session expired":n.message;process.stderr.write(`[lock] heartbeat failed (${e.testId}): ${s}; continuing run
11
+ `)}},Gs);ge.set(e.testId,r),Ve===null&&(Ve=t,t.register(Nn,()=>$n()))}function Se(e){ge.size!==0&&($n(e),ge.size===0&&Ve!==null&&(Ve.deregister(Nn),Ve=null))}import{readFileSync as Mn,readdirSync as Bn,existsSync as _e,promises as zt}from"fs";import{join as ie}from"path";async function Ys(e,t){let r=ie(e,"steps",`${t.ordinal}-${t.id}`),n,s=null,o=[];try{n=JSON.parse(await zt.readFile(ie(r,"step.json"),"utf8")),s=n.action_id??null,Array.isArray(n.analyze_action_ids)&&(o=n.analyze_action_ids.filter(i=>typeof i=="string"))}catch{}if(typeof n?.screenshot=="string"&&/^screenshot\.(?:png|jpg)$/i.test(n.screenshot)){let i=n.screenshot;try{return{png:await zt.readFile(ie(r,i)),filename:i,actionId:s,analyzeActionIds:o}}catch{}}for(let i of["screenshot.png","screenshot.jpg"])try{return{png:await zt.readFile(ie(r,i)),filename:i,actionId:s,analyzeActionIds:o}}catch{}return null}function li(){let e=[];return{track:t=>{e.push(t.catch(()=>{}))},settle:async()=>{await Promise.all(e)}}}async function Vn(e,t,r,n){try{let s=await Ys(e,t);if(!s){n("warn","SCREENSHOT_SKIP","Pack step folder or screenshot not found",{ordinal:t.ordinal,id:t.id,reason:"pack_step_not_found"});return}let o=new Set;s.actionId&&o.add(s.actionId);for(let i of s.analyzeActionIds)o.add(i);if(o.size===0){n("warn","SCREENSHOT_SKIP","No action_id in step.json",{ordinal:t.ordinal,id:t.id,reason:"no_action_id"});return}for(let i of o)r.enqueue(i,s.png);n("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{ordinal:t.ordinal,id:t.id,action_id:s.actionId,action_ids:[...o],screenshot:s.filename,size:s.png.length})}catch(s){n("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{ordinal:t.ordinal,id:t.id,error:s instanceof Error?s.message:String(s)})}}function Kn(e,t,r,n,s,o){try{let i=ie(e,"runs",String(t),"run-test");if(!_e(i)){s("warn","SCREENSHOT_SKIP","Runs dir not found",{step_index:r,reason:"runsDir_not_found",path:i});return}let p=i;if(o){let k=ie(i,`child-${o}`);if(!_e(k)){s("warn","SCREENSHOT_SKIP","Child dir not found",{step_index:r,child_id:o,reason:"child_dir_not_found",path:k});return}let E=Bn(k).filter(a=>_e(ie(k,a,"screenshots")));if(E.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir under child",{step_index:r,child_id:o,reason:"no_child_screenshots_dir"});return}p=ie(k,E[0])}else if(!_e(ie(i,"screenshots"))){let k=Bn(i).filter(E=>_e(ie(i,E,"screenshots")));if(k.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:r,reason:"no_screenshots_dir"});return}p=ie(i,k[0])}let l=ie(p,"screenshots",`step_${String(r).padStart(3,"0")}.png`);if(!_e(l)){s("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:r,child_id:o,reason:"screenshot_not_found",path:l});return}let c=ie(i,"actions.ndjson");if(!_e(c)){s("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:r,reason:"ndjson_not_found"});return}let y=Mn(c,"utf-8").trim().split(`
12
+ `),v=y[y.length-1];if(!v){s("warn","SCREENSHOT_SKIP","NDJSON empty",{step_index:r,reason:"ndjson_empty"});return}let I=JSON.parse(v).action_id;if(!I){s("warn","SCREENSHOT_SKIP","No action_id in NDJSON",{step_index:r,reason:"no_action_id"});return}let x=Mn(l);n.enqueue(I,x),s("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{step_index:r,child_id:o,action_id:I,size:x.length})}catch(i){s("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{step_index:r,error:i instanceof Error?i.message:String(i)})}}import{dirname as Ws,join as Js}from"path";function Hn(e,t,r){let n=e.total_runs??1,s=e.run_dir,o,i;if(n>1&&s){let p=Ws(s);o=Array.from({length:n},(l,c)=>Js(p,String(t+c))),r&&r.length===n&&(i=r)}return{allRunDirs:o,flowObjectives:i}}function qn(e,t,r,n){return{index:r,objective:t,summary:e.summary,oneLiner:e.one_liner,status:e.status,resultCode:e.result_code,reasonCode:e.reason_code,perFlowMetadata:e.per_flow_metadata,context:e.context??{memory:{},variables:{},pointer:""},run_dir:e.run_dir,run_dirs:n.allRunDirs,flow_objectives:n.flowObjectives}}var ft=class{constructor(t){this.resolved=t;this.outcomes=t.rootSteps.map(r=>({rootStepIndex:r.index,status:"skipped"}))}outcomes;skipRoot=null;overallHalted=!1;shouldRunFlatStep(t){if(this.overallHalted)return!1;let r=t.trace[0].stepIndex;return!(this.skipRoot!==null&&r===this.skipRoot)}recordStep(t,r){let n=t.trace[0].stepIndex,s=this.outcomes.find(l=>l.rootStepIndex===n),o=this.resolved.rootSteps.find(l=>l.index===n),i=o.body.kind!=="objective";return i&&(s.refKind="import",s.refLabel=o.body.path,s.inlinedCount=(s.inlinedCount??0)+1,s.duration_s=(s.duration_s??0)+r.duration_s),r.status==="passed"?(i?s.status!=="failed"&&(s.status="passed"):(s.status="passed",s.duration_s=r.duration_s),{continueOverall:!0}):t.optional?(s.softFailures=s.softFailures??[],s.softFailures.push({subStepIndex:t.trace[t.trace.length-1].stepIndex,reason:r.reason}),{continueOverall:!0}):(s.status="failed",s.duration_s=i?s.duration_s:r.duration_s,s.failedSubStepIndex=i?t.trace.slice(1).map(l=>l.stepIndex):void 0,s.reason=r.reason,this.skipRoot=n,o.optional??!1?(s.softFailed=!0,{continueOverall:!0}):(this.overallHalted=!0,{continueOverall:!1}))}snapshotOutcomes(){return[...this.outcomes]}snapshot(){return{outcomes:this.outcomes.map(t=>({...t,softFailures:t.softFailures?[...t.softFailures]:void 0})),skipRoot:this.skipRoot,overallHalted:this.overallHalted}}rollback(t){this.outcomes=t.outcomes.map(r=>({...r,softFailures:r.softFailures?[...r.softFailures]:void 0})),this.skipRoot=t.skipRoot,this.overallHalted=t.overallHalted}finalize(){let t=this.outcomes.some(n=>n.status==="failed"&&!n.softFailed)?"failed":"passed",r=this.outcomes.reduce((n,s)=>n+(s.duration_s??0),0);return{overallStatus:t,outcomes:this.outcomes,totalDurationS:r}}};function Yt(e){if(!e)return null;let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function Gn(e){return Yt(e.flag)??Yt(e.frontmatter)??(e.configDefault&&e.configDefault!==rt?Yt(e.configDefault):null)}function zn(e){return e.resolvedUrl!==null?!1:!((!!e.local||!!e.allowMissingUrl)&&!e.isTTY)}import{spawn as Qs}from"child_process";async function Yn(e,t,r=100){let n=`${e.replace(/\/+$/,"")}/json/version`,s=await z(n);if(!s.ok)throw new Error(`CDP /json/version returned ${s.status}`);let o=await s.json();if(!o.webSocketDebuggerUrl)throw new Error("CDP /json/version missing webSocketDebuggerUrl");let i=new jr(o.webSocketDebuggerUrl);await new Promise((m,_)=>{i.once("open",m),i.once("error",_)});let p=1,l=new Map;i.on("message",m=>{let _;try{_=JSON.parse(m.toString())}catch{return}if(_.id==null)return;let L=l.get(_.id);L&&(l.delete(_.id),_.error?L.reject(new Error(_.error.message)):L.resolve(_.result))});function c(m,_){let L=p++;return new Promise((me,ee)=>{l.set(L,{resolve:B=>me(B),reject:ee});let ae={id:L,method:m};_&&(ae.params=_),i.send(JSON.stringify(ae))})}let v=(await c("Target.getTargets")).targetInfos.find(m=>m.type==="page");if(!v)throw i.close(),new Error("CDP: no page target found");let I=(await c("Browser.getWindowForTarget",{targetId:v.targetId})).windowId,x="",k=!1,E=null,a=!1;i.on("close",()=>{a=!0}),i.on("error",()=>{a=!0});async function Y(){if(!k){if(a){k=!0;return}try{let _=(await c("Browser.getWindowBounds",{windowId:I})).bounds,L=`${_.left}:${_.top}:${_.width}:${_.height}`;L!==x&&(x=L,t({left:_.left,top:_.top,width:_.width,height:_.height}))}catch{}k||(E=setTimeout(Y,r))}}return Y(),{stop(){if(!k){k=!0,E&&clearTimeout(E);try{i.close()}catch{}}}}}var Zs=new Set(["1","true","yes"]);function Wn(e){if(e?.headless)return null;let t=process.env.KANE_CLI_DISABLE_MARKER;if(t!=null&&Zs.has(t.toLowerCase()))return null;let r=it();if(!r)return null;let n=[...r.args,"overlay"];e?.text&&n.push(e.text);let s;try{s=Qs(r.cmd,n,{cwd:r.cwd,stdio:["pipe","ignore","ignore"],detached:!1,windowsHide:!0})}catch{return null}s.stdin?.on("error",()=>{});let o=!1;s.on("exit",()=>{o=!0}),s.on("error",()=>{o=!0});function i(c){if(!(o||!s.stdin||s.stdin.destroyed))try{s.stdin.write(JSON.stringify(c)+`
13
+ `)}catch{}}e?.chromePid&&e.chromePid>0&&i({type:"chrome_pid",pid:e.chromePid});let p=null;e?.cdpEndpoint&&Yn(e.cdpEndpoint,c=>i({type:"bounds",...c})).then(c=>{p=c.stop}).catch(()=>{});let l=!1;return{setRunActive(c){l||i({type:"run_active",active:c})},setStepText(c){if(l)return;let y=c.trim();y&&i({type:"step_text",text:y})},setStepComplete(){l||i({type:"step_complete"})},kill(){if(!l){l=!0,p?.();try{s.stdin?.end()}catch{}try{s.kill("SIGTERM")}catch{}}}}}function Jn(e,t,r){return`${e}/projects/${t}/test-cases/${r}`}function pt(e,t,r,n){return`${Jn(e,t,r)}/dashboard/share/${n}?type=summary&agentView=true&fqdn=summary-page`}function Qn(e,t,r,n){if(!(!t||!r||!n))return pt(e,t,r,n)}function Zn(e,t,r){return`${Jn(e,t,r)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{mkdtempSync as fo,rmSync as po}from"fs";import{join as go}from"path";import{tmpdir as ho}from"os";import{spawn as ts,spawnSync as Xs}from"child_process";import{existsSync as Wt}from"fs";import{createConnection as eo}from"net";import{homedir as Ke,platform as Ge}from"os";import{join as He}from"path";var to=new Set(["1","true","yes"]),gt=class extends Error{constructor(t){super(t),this.name="ChromeNotFoundError"}};function Ti(e){return e instanceof gt?e.message:`Chrome failed: ${e instanceof Error?e.message:String(e)}`}var ht={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",He(Ke(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",He(Ke(),"Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing"),"/Applications/Chromium.app/Contents/MacOS/Chromium"],linux:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/google-chrome-for-testing","/usr/local/bin/google-chrome-for-testing",He(Ke(),"chrome-for-testing/chrome-linux64/chrome"),"/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium"],win32:["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",He(Ke(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",He(Ke(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe")]};function ro(){if(process.env.KANE_CLI_CHROME_PATH)return process.env.KANE_CLI_CHROME_PATH;let e=Ge(),t=ht[e]??ht.linux;for(let r of t)if(Wt(r))return r;return e==="win32"?"chrome.exe":"google-chrome"}function no(){if(process.env.KANE_CLI_CHROME_PATH)return Wt(process.env.KANE_CLI_CHROME_PATH);let e=Ge();if((ht[e]??ht.linux).some(s=>Wt(s)))return!0;let r=e==="win32"?"chrome.exe":"google-chrome",n=e==="win32"?"where":"which";try{return Xs(n,[r],{stdio:"ignore"}).status===0}catch{return!1}}function so(){let e=Ge();return e==="darwin"?["Google Chrome is required but was not found at any standard path.","","Install via Homebrew (recommended):"," brew install --cask google-chrome","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
14
+ `):e==="linux"?["Google Chrome is required but was not found at /usr/bin/google-chrome.","(amd64 / x86_64 only \u2014 Google does not ship Chrome for Linux ARM.)","","Debian / Ubuntu (any version):"," wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"," sudo apt install -y ./google-chrome-stable_current_amd64.deb","","Fedora / RHEL / AlmaLinux / Rocky:"," sudo dnf install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
15
+ `):e==="win32"?["Google Chrome is required but was not found in Program Files or AppData.","","Install via winget (Windows 10 1809+):"," winget install --id Google.Chrome -e --silent","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=C:\\path\\to\\chrome.exe","to point at a non-standard install."].join(`
16
+ `):["Google Chrome is required.","Install from https://www.google.com/chrome/","(Note: no official Chrome builds for BSD or Alpine/musl Linux.)"].join(`
17
+ `)}function oo(e){let t=Ge(),r=[`--remote-debugging-port=${e.port}`,`--user-data-dir=${e.userDataDir}`,`--window-size=${e.width},${e.height}`,"--no-first-run","--no-default-browser-check","--disable-blink-features=AutomationControlled","--disable-features=DownloadBubble,DownloadBubbleV2","--safebrowsing-disable-download-protection","--disable-popup-blocking","--disable-notifications","--disable-infobars","--disable-translate","--disable-prompt-on-repost","--disable-background-networking","--disable-client-side-phishing-detection","--disable-default-apps","--disable-hang-monitor","--disable-sync","--metrics-recording-only","--safebrowsing-disable-auto-update","--disable-backgrounding-occluded-windows","--disable-background-timer-throttling","--test-type=webdriver","--allow-pre-commit-input","--enable-logging","--v=1"];return t==="linux"&&(r.push("--no-sandbox"),r.push("--disable-dev-shm-usage"),r.push("--password-store=basic")),t==="darwin"&&r.push("--use-mock-keychain"),e.headless&&r.push("--headless=new"),r}function io(e){return new Promise(t=>{let r=eo({port:e,host:"127.0.0.1"});r.setTimeout(1e3),r.on("connect",()=>{r.destroy(),t(!0)}),r.on("timeout",()=>{r.destroy(),t(!1)}),r.on("error",()=>{r.destroy(),t(!1)})})}async function ao(){for(let e=Pt;e<=Tt;e++)if(!await io(e))return e;throw new Error(`All CDP ports ${Pt}-${Tt} are in use. Close other Chrome instances.`)}var qe=class extends Error{constructor(t){super(t),this.name="CdpReadinessError"}};async function lo(e,t){let r=Date.now(),n=`http://127.0.0.1:${e}/json/version`;for(;Date.now()-r<t;){try{if((await z(n)).ok)return`http://127.0.0.1:${e}`}catch{}await new Promise(s=>setTimeout(s,200))}throw new qe(`Chrome CDP not ready after ${t}ms on port ${e}`)}var co=3e4,uo=2;function Xn(e,t,r){let n=process.env[e];if(n==null||n.trim()==="")return t;let s=Number(n);return!Number.isInteger(s)||s<r?t:s}function mo(e){return Math.min(500*e,3e3)}function es(e,t){try{if(e.pid)if(t==="win32")ts("taskkill",["/pid",String(e.pid),"/T","/F"],{stdio:"ignore"});else try{process.kill(-e.pid,"SIGKILL")}catch{e.kill("SIGKILL")}else e.kill("SIGKILL")}catch{}}async function rs(e){let t=process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD;if(!(t!=null&&to.has(t.toLowerCase()))&&!no())throw Lt()?.log("error","CHROME_NOT_FOUND","Startup gate: Chrome unavailable at standard system paths",{platform:process.platform,kane_cli_chrome_path:process.env.KANE_CLI_CHROME_PATH??null,skip_browser_download:process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD??null}),new gt(so());let n=Ge(),s=ro(),o=Xn("KANE_CLI_CDP_TIMEOUT_MS",co,1),p=Xn("KANE_CLI_CDP_RETRIES",uo,0)+1,l;for(let c=1;c<=p;c++){let y=await ao(),v=oo({port:y,...e});e.startUrl&&v.push(e.startUrl);let A=ts(s,v,{stdio:"ignore",detached:!0});A.unref();try{let I=await new Promise((x,k)=>{A.on("error",E=>{k(new Error(`Failed to launch Chrome: ${E.message}. Is Chrome installed at ${s}?`))}),A.on("close",E=>{E!==null&&E!==0&&k(new qe(`Chrome exited during startup with code ${E}`))}),lo(y,o).then(x,k)});return{process:A,port:y,cdpEndpoint:I,kill(){es(A,n)}}}catch(I){if(l=I,!(I instanceof qe))throw I;es(A,n),Lt()?.log("warn","CHROME_CDP_LAUNCH_RETRY",`Chrome CDP launch attempt ${c}/${p} failed`,{attempt:c,max_attempts:p,port:y,timeout_ms:o,headless:e.headless??!1,error:I.message}),c<p&&await new Promise(x=>setTimeout(x,mo(c)))}}throw l??new Error("Chrome launch failed after retries")}async function ns(e){if(e.cft)return{instance:null,tempDir:null};if(e.wsEndpoint)return{wsEndpoint:e.wsEndpoint,instance:null,tempDir:null};if(e.cdpEndpoint){let s=await z(`${e.cdpEndpoint}/json/version`);if(!s.ok)throw new Error(`CDP endpoint not reachable: ${e.cdpEndpoint} (${s.status})`);return{cdpEndpoint:e.cdpEndpoint,instance:null,tempDir:null}}let t,r=null;if(e.config.chrome_profile_path)t=e.config.chrome_profile_path.replace("~",process.env.HOME??"~");else{r=fo(go(ho(),"kane-clean-")),t=r;let s=r;st("tempDir",()=>{try{po(s,{recursive:!0,force:!0})}catch{}})}let n=await rs({userDataDir:t,width:e.config.window_size.width,height:e.config.window_size.height,startUrl:e.startUrl,headless:e.headless});return{cdpEndpoint:n.cdpEndpoint,instance:n,tempDir:r}}async function ss(e,t){if(e==="device"){let{device:r,appRef:n,appId:s}=await t.prepareDevice();return{kind:"device",device:r,...n?{appRef:n}:{},...s?{appId:s}:{}}}return{kind:"web",chrome:await t.prepareWeb()}}function Mi(e,t={}){if(e.kind==="device"){let r=e.device.target_kind;return r==="emulator"||r==="simulator"?r:void 0}if(e.chrome.instance)return"chrome";if(t.cdpEndpoint)return"cdp";if(t.wsEndpoint)return"ws"}function Bi(e){if(e.kind!=="device")return;let t=e.device.target_kind;if(!(t!=="emulator"&&t!=="simulator"))return e.appRef??""}function os(e){let t={objective:e.objective,model:e.model,width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,max_steps:e.maxSteps??30,headless:e.headless??!1};return e.url&&(t.url=e.url),e.requireStartUrl&&(t.require_start_url=!0),e.chrome.wsEndpoint?t.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(t.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(t.username=e.auth.basicAuth.username,t.access_key=e.auth.basicAuth.access_key):e.auth.token&&(t.auth={type:"bearer",token:e.auth.token}),e.auth.resolvedCreds?.org_id&&(t.org_id=String(e.auth.resolvedCreds.org_id)),e.disableAskUser&&(t.disable_ask_user=!0),e.enableTaskSkills&&(t.enable_task_skills=!0),e.networkWs&&(t.network_ws=!0),e.networkSse&&(t.network_sse=!0),(e.bugDetection==="stop"||e.bugDetection==="continue")&&(t.bug_detection=e.bugDetection),e.variables&&Object.keys(e.variables).length>0&&(t.variables=e.variables),e.globalContext&&(t.global_context=e.globalContext),e.localContext&&(t.local_context=e.localContext),e.sessionContext&&(t.session_context=e.sessionContext),e.device&&(t.device=e.device),e.evidence&&(t.evidence=lt(e.evidence.packTestDir,e.evidence.ordinalOffset)),t}import{readdirSync as bo,readFileSync as as,existsSync as ls}from"fs";import{join as yo}from"path";function is(e,t){if(!ls(e))return{};let r={},n;try{n=bo(e).filter(s=>s.endsWith(".json")).sort()}catch{return{}}for(let s of n)try{let o=as(yo(e,s),"utf-8"),i=JSON.parse(o);if(i&&typeof i=="object"){for(let[p,l]of Object.entries(i))if(l&&typeof l=="object"&&"value"in l){let c=l;r[p]={value:c.value,secret:c.secret??!1,syntax:c.syntax??`{{${p}}}`}}}}catch{t?t("warn","VARIABLE_PARSE_FAILED","Skipping invalid variables file",{file:s}):process.stderr.write(`[variables] Warning: skipping invalid variables file: ${s}
18
+ `)}return r}function cs(e){if(!ls(e))throw new Error(`Variables file not found: ${e}`);let t=as(e,"utf-8"),r=JSON.parse(t),n={};if(r&&typeof r=="object"){for(let[s,o]of Object.entries(r))if(o&&typeof o=="object"&&"value"in o){let i=o;n[s]={value:i.value,secret:i.secret??!1,syntax:i.syntax??`{{${s}}}`}}}return n}function ds(e){let t;try{t=JSON.parse(e)}catch{throw new Error("Invalid --variables JSON")}let r={};if(t&&typeof t=="object"){for(let[n,s]of Object.entries(t))if(s&&typeof s=="object"&&"value"in s){let o=s;r[n]={value:o.value,secret:o.secret??!1,syntax:o.syntax??`{{${n}}}`}}}return r}function us(e,t,r){let n=is(e,r),s=is(t,r);return{...n,...s}}var Pe=class{constructor(t){this.baseUrl=t}async pushSecret(t){let r=nt(t.username,t.accessKey),n=await z(`${this.baseUrl}/logistics/v1.0/secrets/create`,{method:"PUT",headers:{Authorization:r,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({secretKey:t.secretKey,secretValue:t.secretValue,orgId:t.orgId,username:t.username,scope:"user",type:"user",accessKey:t.accessKey})});if(!n.ok)throw new Error(`Push secret failed: ${n.status} ${await n.text()}`)}static extractVariableKeys(t){let r=t.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g),n=new Set;for(let s of r)n.add(s[1]);return[...n]}};var Te=class extends Nr{constructor(t,r,n){super(t,{username:r,accessKey:n})}async upsertVariable(t){let r=t.environmentId??0,n=await z(`${this.baseUrl}/v1/variables`,{method:"POST",headers:this.headers(),body:JSON.stringify({name:t.name,value:String(t.value),type:"variable",value_type:"string",is_persist:t.isPersist??!1,environment_id:r})});if(n.ok){let l=await n.json().catch(()=>({}));if(l.type==="Success"&&l.id!=null)return{id:Number(l.id)||0}}let s=await z(`${this.baseUrl}/v1/variables/${encodeURIComponent(t.name)}?environment_id=${r}`,{method:"GET",headers:this.headers()});if(!s.ok)return{id:0};let i=(await s.json().catch(()=>({}))).data?.id;return i==null?{id:0}:(await z(`${this.baseUrl}/v1/variables/${i}`,{method:"PUT",headers:this.headers(),body:JSON.stringify({value:String(t.value),value_type:"string"})})).ok?{id:Number(i)||0}:{id:0}}};function ms(e,t){if(Object.keys(e).length===0)return{};let r={};for(let[n,s]of Object.entries(e)){let o=s.syntax??`{{${n}}}`;t.includes(o)&&(r[n]=s)}return r}function fs(e){let t=us(e.globalDir,e.localDir,e.onLoadError),r=e.file?cs(e.file):{},n=e.inline?ds(e.inline):{},s={...t,...r,...n},o=Object.keys(s).length>0,{variables:i,objective:p}=o?Ee(s,e.objective):{variables:{},objective:e.objective},l=Object.entries(s).filter(([,y])=>y.secret),c=Object.entries(s).filter(([,y])=>!y.secret);return{raw:s,auteur:i,auteurObjective:p,secretEntries:l,nonSecretEntries:c}}async function ps(e){if(e.localMode)return{};let t=se(e.env);if(e.variables.secretEntries.length>0){let n=new Pe(t.secretsBaseUrl);for(let[s,o]of e.variables.secretEntries)n.pushSecret({secretKey:s,secretValue:o.value,username:e.auth.username,accessKey:e.auth.access_key,orgId:e.orgId}).then(()=>e.log("info","SECRET_PUSH_OK","Secret pushed",{key:s})).catch(i=>e.log("error","SECRET_PUSH_FAILED","Secret push failed",{key:s,error:String(i)}))}let r={};if(e.variables.nonSecretEntries.length>0){let n=new Te(t.tmsBaseUrl,e.auth.username,e.auth.access_key);for(let[s,o]of e.variables.nonSecretEntries)try{let i=await n.upsertVariable({name:s,value:o.value});r[s]=i.id,e.log("info","VAR_PUSH_OK","Variable pushed",{name:s,id:i.id})}catch(i){e.log("error","VAR_PUSH_FAILED","Variable push failed",{name:s,error:String(i)})}}return r}import{readFileSync as vo,existsSync as wo}from"fs";function Jt(e){if(!wo(e))return null;try{return vo(e,"utf-8").trim()||null}catch{return null}}var So=()=>{};async function gs(e,t,r){let n=t.log??So,s=e.session.testId??null,o=null,i=null,p=null;if(!r.localMode&&t.performUpload)try{o=await t.performUpload(),o?.success&&(o.testId&&(s=o.testId),o.testcaseId&&e.session.setTestcaseId(o.testcaseId))}catch(l){n("error","FINALIZE_UPLOAD_ERROR","Upload pipeline threw",{error:String(l)})}if(t.renderFeedbackPrompt)try{i=await t.renderFeedbackPrompt(),i&&s&&t.submitFeedback&&t.submitFeedback(s,i).catch(l=>{n("error","FINALIZE_FEEDBACK_SUBMIT_ERROR","Feedback submit failed",{error:String(l)})})}catch(l){n("error","FINALIZE_FEEDBACK_RENDER_ERROR","Feedback prompt threw",{error:String(l)})}if(e.session.flushRecorder(),r.skipLocalWrites)n("info","FINALIZE_SKIP_LOCAL_WRITES","Skipping local writes (testmd flow handles via staging)");else if(r.sourcePath&&r.rootSteps&&r.outcomes){try{p=Mt({sourcePath:r.sourcePath,title:r.title,rootSteps:r.rootSteps,outcomes:r.outcomes,overallStatus:r.overallStatus,startedISO:r.startedISO,durationS:r.durationS,sessionId:e.session.sessionId})}catch(l){n("error","FINALIZE_RESULT_MD_ERROR","_Result.md write failed",{error:String(l)})}try{Nt({sourcePath:r.sourcePath,commitId:e.session.sessionId,testId:s??void 0,testcaseId:e.session.testcaseId??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,orgId:e.session.orgId??void 0,sessionName:e.session.sessionName??$e(r.sourcePath),plan:e.session.plan??void 0})}catch(l){n("error","FINALIZE_META_WRITE_ERROR","meta.json write failed",{error:String(l)})}if(o?.codeExportDir)try{let l=e.tuiConfig.code_export?.language??"python";Bt(o.codeExportDir,Ft(r.sourcePath,"playwright",l))}catch(l){n("error","FINALIZE_CODE_COPY_ERROR","code-export copy failed",{error:String(l)})}}else if(e.session.recorder?.lastWrittenPath){let l=e.session.recorder.lastWrittenPath,c=e.session.getFlows(),y=c.map((I,x)=>({index:x+1,heading:`Step ${x+1}`,verifies:[],headingLine:0,body:{kind:"objective",text:I.objective}})),v=c.map((I,x)=>({rootStepIndex:x+1,status:I.status==="passed"?"passed":I.status==="failed"?"failed":"skipped",duration_s:I.duration,reason:I.reason})),A=v.some(I=>I.status==="failed")?"failed":"passed";try{p=Mt({sourcePath:l,title:e.session.sessionName??"Session",rootSteps:y,outcomes:v,overallStatus:A,startedISO:e.session.startedAt,durationS:v.reduce((I,x)=>I+(x.duration_s??0),0),sessionId:e.session.sessionId})}catch(I){n("error","FINALIZE_TUI_RESULT_MD_ERROR","TUI _Result.md write failed",{error:String(I)})}try{Nt({sourcePath:l,commitId:e.session.sessionId,testId:s??void 0,testcaseId:e.session.testcaseId??void 0,sessionName:e.session.sessionName??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,plan:e.session.plan??void 0})}catch(I){n("error","FINALIZE_TUI_META_WRITE_ERROR","TUI meta.json write failed",{error:String(I)})}if(o?.codeExportDir)try{let I=e.tuiConfig.code_export?.language??"python";Bt(o.codeExportDir,Ft(l,"playwright",I))}catch(I){n("error","FINALIZE_TUI_CODE_COPY_ERROR","TUI code-export copy failed",{error:String(I)})}e.session.recorder.lastCollisionSuffixed&&process.stderr.write(`Saved to ${l} (renamed: ${e.session.sessionName}_test.md already existed)
19
+ `)}try{t.runCleanup?.()}catch(l){n("error","FINALIZE_CLEANUP_ERROR","Cleanup hook threw",{error:String(l)})}try{await e.session.finish("complete")}catch(l){n("error","FINALIZE_SESSION_FINISH_ERROR","session.finish threw",{error:String(l)})}return{uploadResult:o,feedbackChoice:i,resultMdPath:p}}import{readFileSync as Qt,writeFileSync as Zt,existsSync as bs}from"fs";function hs(e,t,r){if(r.forceAuthor)return"re-recorded from scratch";if(r.retryTriggered)return"re-recorded after retry";if(t.length>0&&t.every(i=>i.kind==="author"&&i.reason==="no-result-md"))return"initial recording";if(t.length>0&&t.every(i=>i.kind==="replay"))return r.wantsPush?"re-recorded (no source changes)":"no changes";let n=[];for(let i=0;i<t.length;i++){let p=t[i];if(!p||p.kind!=="author"||p.reason==="downstream-of-divergence"||p.reason==="no-result-md")continue;let l=_o(e,e.steps[i]);switch(p.reason){case"structure-mismatch":n.push(`added/removed: ${l}`);break;case"md5-mismatch":n.push(`modified: ${l}`);break;case"missing-recording":n.push(`re-recorded: ${l}`);break;case"recorded-failed":n.push(`re-authored after failure: ${l}`);break}}if(n.length===0)return"automated commit";let s=n.filter((i,p)=>p===0||n[p-1]!==i),o=s.slice(0,3).join("; ");return s.length>3?`${o}; +${s.length-3} more`:o}function _o(e,t){if(!t)return"unknown step";let r=t.trace[0]?.stepIndex;if(r==null)return"unknown step";let s=e.rootSteps[r-1]?.heading?.trim()??"";return t.trace.length>1?s?`imported step in "${s}"`:`imported step ${r}`:s||`step ${r}`}function Ro(e,t){if(!(!e.shouldReplaceLocalOutput||!e.resolvedTest||!e.sourcePath||!e.stepRunRecords||!e.outcomes||!e.overallStatus))return async()=>{let{changedUnitFiles:r,legacySweep:n}=await Rn({resolvedTest:e.resolvedTest,sessionDir:e.session.sessionDir,stepRunRecords:e.stepRunRecords,outcomes:e.outcomes,overallStatus:e.overallStatus,startedISO:e.startedISO??new Date().toISOString(),durationS:e.durationS??0,sessionId:e.session.sessionId,commitId:e.fromCommitId??"",tmsIds:e.tmsIds??{},codeExportDir:e.codeExportDir,packTestDir:e.evidence?.packTestDir??e.evidenceRead?.packTestDir,authoredFlatIdx:new Set(e.authoredFlatIdx??[])});t.files=r;for(let s of r){let o=oe(s);if(bs(`${o}.staging`)){pn(o);let i=n.find(p=>p.unitFile===s);i&&In(i.dirs)}}}}function Io(e,t){if(!(!e.shouldCommit||e.isFirstRun||!e.tmsBaseUrl||!e.testId||!e.fromCommitId||!e.newCommitId||!e.basicAuth||!e.resolvedTest||!e.decisions))return async()=>{let r=hs(e.resolvedTest,e.decisions,{wantsPush:e.wantsPush??!1,retryTriggered:e.retryTriggered??!1,forceAuthor:e.forceAuthor??!1}),n=e.resolvedTest.steps.map(o=>o.objective).filter(o=>typeof o=="string"&&o.length>0).slice(0,50),s=await Gt({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:e.testId,body:{commitId:e.newCommitId,fromCommitId:e.fromCommitId,commitMessage:r,totalSteps:e.resolvedTest.steps.length,timeTaken:Math.round(e.durationS??0),objectives:n},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(s.ok&&e.sourcePath){let o=Ae(e.sourcePath);try{let i=JSON.parse(Qt(o,"utf8"));i.commit_id=e.newCommitId,Zt(o,JSON.stringify(i,null,2)+`
20
+ `,"utf8")}catch(i){process.stderr.write(`warn: failed to update meta.json commit_id: ${i.message}
21
+ `)}}if(s.ok)for(let o of e.unitLocks??[]){if(!t.files.includes(o.file)){await Be({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:o.testId,body:{commitId:e.newCommitId,fromCommitId:o.fromCommitId},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}}),Se(o.testId);continue}let i=e.resolvedTest.steps.filter(c=>c.owningFile===o.file),p=i.map(c=>c.objective).filter(c=>typeof c=="string"&&c.length>0).slice(0,50),l=await Gt({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:o.testId,body:{commitId:e.newCommitId,fromCommitId:o.fromCommitId,commitMessage:`healed via importer ${e.sourcePath??""}`,totalSteps:i.length,timeTaken:0,objectives:p},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(l.ok){let c=Ae(o.file);try{let y=JSON.parse(Qt(c,"utf8"));y.commit_id=e.newCommitId,Zt(c,JSON.stringify(y,null,2)+`
22
+ `,"utf8")}catch(y){process.stderr.write(`warn: failed to update unit meta commit_id (${o.file}): ${y.message}
23
+ `)}}else process.stderr.write(`warn: unit self-commit failed (${o.file}): ${l.reason??""} ${l.message??""}
24
+ `)}return s}}function ko(e){if(!(!e.isFirstRun||!e.sourcePath))return async t=>{if(!e.sourcePath)return;let r=Ae(e.sourcePath);try{let n=bs(r)?JSON.parse(Qt(r,"utf8")):{};e.session.sessionId&&(n.commit_id=e.session.sessionId),t&&(n.testcase_id=t),e.tmsIds?.testId&&(n.test_id=e.tmsIds.testId),e.tmsIds?.projectId&&(n.project_id=e.tmsIds.projectId),e.tmsIds?.folderId&&(n.folder_id=e.tmsIds.folderId),e.tmsIds?.orgId&&(n.org_id=e.tmsIds.orgId),e.tmsIds?.sessionName&&(n.session_name=e.tmsIds.sessionName),Zt(r,JSON.stringify(n,null,2)+`
25
+ `,"utf8")}catch(n){process.stderr.write(`warn: failed to update meta.json after endTest: ${n.message}
26
+ `)}}}function ys(e){let t=se(e.env),r={files:[]},{session:n,auth:s}=e,o=s.basicAuth?{username:s.basicAuth.username,accessKey:s.basicAuth.access_key}:s.token,i=s.resolvedCreds?.username??s.basicAuth?.username??"",p=s.resolvedCreds?.access_key??s.basicAuth?.access_key??"",l=s.resolvedCreds?.org_id??0,c=s.resolvedCreds?.user_id??0,y=[];for(let k of Object.keys(n.auteurVariables))k.startsWith("secrets.user.")&&y.push({key_name:k.replace("secrets.user.",""),scope:"user"});let A=n.getContext().prior_runs.map(k=>k.status),I=n.auteurVariables,x=Object.keys(I).length>0;return{controllerBaseUrl:t.controllerBaseUrl,tmsBaseUrl:t.tmsBaseUrl,auth:o,authResolver:s.resolver,sessionId:n.sessionId,sessionDir:n.sessionDir,testId:n.testId,commitId:n.sessionId,apMode:n.apMode,projectId:e.projectId,folderId:e.folderId,firstObjective:n.firstObjective??"KaneAI Test",firstUrl:n.firstUrl??"",runDirs:n.getRunDirs(),runObjectives:n.getRunObjectives(),runMetadata:n.getRunMetadata(),startedAt:n.startedAt,endedAt:new Date().toISOString(),totalSteps:e.totalSteps,totalDuration:e.totalDuration,runStatuses:A,orgId:l,userId:c,tmsUsername:i,tmsAccessKey:p,screenshotBaseUrl:n.screenshotBaseUrl,screenshotExtMap:e.screenshotExtMap,shareApiBaseUrl:t.shareApiBaseUrl,variables:x?I:void 0,variableIds:e.variableIds,secrets:y,codeExport:e.codeExport,...e.mobile?{mobile:!0}:{},onProgress:e.onProgress,log:e.log,shouldUploadArtifacts:e.shouldUploadArtifacts,shouldReplaceLocalOutput:e.shouldReplaceLocalOutput,shouldCommit:e.shouldCommit,isFirstRun:e.isFirstRun,onAtomicReplace:Ro(e,r),onCommitLock:Io(e,r),onFinalizeSuccess:ko(e),evidence:e.evidence,evidenceRead:e.evidenceRead,authoredExecutionPath:e.authoredExecutionPath}}function vs(e,t,r=process.env){return r.KANE_MOBILE_APP_BASE_URL||t(e)}var ws=["python","javascript"];function Co(e){if(e!==void 0){if(!ws.includes(e))throw new Error(`--code-language must be one of: ${ws.join(", ")} (got "${e}")`);return e}}function Ss(e,t){let r=Co(e.codeLanguage);return{enabled:e.codeExport??t.enabled,language:r??t.language,skipValidation:e.skipCodeValidation??t.skip_validation}}async function _s(e){try{let r=await new ot(e.tmsBaseUrl,e.auth.username,e.auth.access_key).createAtmTest({objective:e.objective.slice(0,100),creation_mode:"KANECLI",playground_disabled:e.hasCustomProfile,testURL:e.url,project_id:e.projectId,folder_id:e.folderId,authoring_version:4,...e.mobile?{is_mobile:!0,os:e.mobile.platform.toLowerCase(),...e.mobile.appId?{app_id:e.mobile.appId}:{}}:{}});return e.log("info","ATM_CREATE_OK","Test created",{test_id:r}),r}catch(t){return e.log("error","ATM_CREATE_FAILED","Test creation failed",{error:t instanceof Error?t.message:String(t)}),null}}var Eo=null,Ao=()=>Eo??=import("sharp").then(e=>e.default??e).catch(()=>null),bt=class{maxWorkers;maxRetries=2;queue=[];activeCount=0;drainResolvers=[];sas;log;uploadedExt=new Map;constructor(t,r=3,n){this.sas=t,this.maxWorkers=r,this.log=n}updateSas(t){this.sas=t}enqueue(t,r){this.queue.push({operationId:t,buffer:r}),this.pump()}async drain(t=3e4){if(!(this.queue.length===0&&this.activeCount===0))return new Promise(r=>{this.drainResolvers.push(r),setTimeout(()=>{r()},t)})}pump(){for(;this.activeCount<this.maxWorkers&&this.queue.length>0;){let t=this.queue.shift();this.activeCount++,this.processJob(t).finally(()=>{if(this.activeCount--,this.pump(),this.queue.length===0&&this.activeCount===0){for(let r of this.drainResolvers)r();this.drainResolvers=[]}})}}async processJob(t){let r,n="image/webp",s=await Ao();if(s)try{let l=await s(t.buffer).webp({quality:80}).toBuffer();r=new Uint8Array(l)}catch(l){r=new Uint8Array(t.buffer),n="image/png",this.log?.("warn","SCREENSHOT_CONVERT_FAILED","WebP conversion failed, using PNG",{operation_id:t.operationId,error:l instanceof Error?l.message:String(l)})}else r=new Uint8Array(t.buffer),n="image/png";let o=n==="image/webp"?"webp":"png",i=`test_screenshots/untagged_screenshot/${t.operationId}.${o}`,p=`${this.sas.base_url}/${this.sas.container}/${i}?${this.sas.sas_token}`;for(let l=0;l<=this.maxRetries;l++)try{let c=await z(p,{method:"PUT",headers:{"Content-Type":n,"x-ms-blob-type":"BlockBlob"},body:r});if(c.ok){this.uploadedExt.set(t.operationId,o);return}if(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed after retries",{operation_id:t.operationId,status:c.status,attempts:this.maxRetries+1})}catch{if(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed (network error)",{operation_id:t.operationId,error:"network",attempts:this.maxRetries+1})}}backoff(t){let r=t===0?1e3:3e3;return new Promise(n=>setTimeout(n,r))}getExt(t){return this.uploadedExt.get(t)??"png"}getExtMap(){return this.uploadedExt}isNearExpiry(){if(!this.sas.expiry)return!1;let t=new Date(this.sas.expiry).getTime();return Date.now()>t-5*6e4}};import{platform as xo,arch as Po}from"os";function Rs(e){let t={proxyUrl:Fr,sessionId:e.sessionId,identity:e.identity,device:{cli_version:tt,platform:xo(),arch:Po(),host_agent:Ot(),invocation_mode:e.invocationMode},getToken:e.getToken};return new Dt(t)}async function To(e){try{let t=se(e.env),n=await new Ce(t.controllerBaseUrl,e.auth).getScreenshotSas();return e.session.setScreenshotSas(n),e.log("info","SCREENSHOT_SAS_OK","Screenshot SAS fetched",{base_url:n.base_url,container:n.container,expiry:n.expiry}),new bt(n,3,e.log)}catch(t){return e.log("warn","SCREENSHOT_SAS_FAIL","Screenshot SAS fetch failed",{error:t instanceof Error?t.message:String(t)}),null}}async function Lo(e){if(e.session.hasRemoteLogger||!e.tmsCreds)return null;let t=e.tmsCreds,r=Rs({sessionId:e.session.sessionId,identity:{org_id:String(t.org_id??""),user_id:String(t.user_id??""),machine_id:zr(),email:t.email??null,email_domain:t.email_domain??"unknown",user_type:t.user_type??"unknown",env:e.env,plan:t.plan??"unknown"},invocationMode:e.invocationMode,getToken:e.getToken});return e.session.setRemoteLogger(r),r.start(),r}async function rr(e){let[t,r]=await Promise.allSettled([e.skipScreenshotQueue?Promise.resolve(null):To({env:e.env,auth:e.auth,session:e.session,log:e.log}),Lo({env:e.env,tmsCreds:e.tmsCreds,getToken:e.getToken,session:e.session,invocationMode:e.invocationMode})]);return{resolver:e.resolver,screenshotQueue:t.status==="fulfilled"?t.value:null,remoteLogger:r.status==="fulfilled"?r.value:null}}async function Xt(e){await Promise.allSettled([e.screenshotQueue?.drain(),e.remoteLogger?.shutdown()])}async function Ba(e,t){switch(e.kind){case"boot":{if(t.state.identityServicesRef.current)return t.state.identityServicesRef.current;let r=t.auth.initResolver(e.env);r.prime(e.tmsCreds),t.state.setTmsCredsCache(e.tmsCreds);let n=await er(e.env,e.tmsCreds,r,t);return tr(n,t),n}case"login":case"switch":{let r=t.state.identityServicesRef.current;r&&(await Xt(r),r.resolver.revoke()),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null,t.state.setTmsCredsCache(null);let n=t.auth.initResolver(e.env),s=await n.resolve(!0).catch(()=>null);if(!s)return t.log("warn","IDENTITY_VALIDATE_FAILED","Identity validation failed",{kind:e.kind,env:e.env}),null;t.state.setTmsCredsCache(s);let o=await er(e.env,s,n,t);return tr(o,t),o}case"logout":{let r=t.state.identityServicesRef.current;return r&&(await Xt(r),r.resolver.revoke()),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null,t.state.setTmsCredsCache(null),null}case"resessionize":{let r=t.state.identityServicesRef.current;r&&await Xt(r),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null;let n=t.state.getTmsCredsCache(),s=t.auth.getResolver(),o=s??t.auth.initResolver(e.env);!s&&n&&o.prime(n);let i=await er(e.env,n,o,t);return tr(i,t),i}}}async function er(e,t,r,n){let s=n.auth.getBasicAuth(),o=s?null:await n.auth.getToken(),i=s?{username:s.username,accessKey:s.access_key}:o??null;return i===null?{resolver:r,screenshotQueue:null,remoteLogger:null}:rr({env:e,tmsCreds:t,resolver:r,auth:i,getToken:()=>n.auth.getToken(),session:n.getSession(),log:n.log,skipScreenshotQueue:n.options?.skipScreenshotQueue,invocationMode:"tui"})}function tr(e,t){t.state.identityServicesRef.current=e,t.state.screenshotQueueRef.current=e.screenshotQueue,e.remoteLogger&&(t.exit.registerCleanup("remote-logger",()=>e.remoteLogger.shutdownSync()),t.exit.setExitRemoteLogger(e.remoteLogger))}import{relative as Uo}from"path";import{readFile as Do}from"fs/promises";function Is(e){return!e.mobile&&e.shouldUploadArtifacts&&!e.lockHeld&&!e.isFirstRun&&e.sealed&&!!e.testId}var nr=e=>e instanceof Error?e.message:String(e);async function ks(e){let{controller:t,tms:r,testId:n,sessionId:s,executionId:o,sealedPackPath:i,projectId:p}=e,l;try{let c={key:"evidence",content_type:"application/zip",filename:`${o}.evidence`},v=(await t.getPresignedUrls(n,s,[c])).urls?.evidence?.upload_url;if(!v)return{ok:!1,stage:"presign",error:"presign response missing evidence upload_url"};l=v}catch(c){return{ok:!1,stage:"presign",error:nr(c)}}try{let c=await Do(i);await hn(l,c,"application/zip")}catch(c){return{ok:!1,stage:"upload",error:nr(c)}}try{await r.ingestEvidence(o,p)}catch(c){return{ok:!1,stage:"ingest",error:nr(c)}}return{ok:!0}}function Cs(e){return e.isFirstRun||ct(e.decisions)||e.push===!0||e.author===!0}function Es(e,t){return{projectId:e?.project_id??t.project_id??null,folderId:e?.folder_id??t.folder_id??null}}function sr(e){return e?"author":"replay"}function jo(e,t){return e?{session:e,ownsLifecycle:!1}:{session:t,ownsLifecycle:!0}}function yt(e,t){return e?.total_runs??t?.length??1}function Fo(e){let t=(e?.per_flow_metadata??[]).map(r=>({resultCode:r?.result_code!=null?Number(r.result_code):null}));return{resultCode:e?.result_code!=null?Number(e.result_code):null,...t.length?{perFlow:t}:{}}}var vt=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"];async function Zl(e,t,r){let{path:n,cwd:s,opts:o,isAgent:i,disableAskUser:p,resolved:l,resolvedAuth:c,cliOverrides:y,environment:v,envConfig:A,profile:I,model:x,creds:k,configStore:E,session:a}=e,Y=!1,m=await Bo(n,l,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},a.sessionId,r);if(m.abort)return{overallStatus:"failed",exitCode:m.abort.exitCode,outputDir:oe(n),durationS:0,uploadResult:null};let _=m.lockAcquired,L=!1,me=new Set,ee=!1,ae=!1;_&&t.onLockState({phase:"acquired",scope:"preemptive"}),a.start({model:x,environment:v,profile:I}),a.setRecordingEnabled(!1);let B=0,ar=c.basicAuth?{username:c.basicAuth.username,accessKey:c.basicAuth.access_key}:c.token??null,Ue=null;if(ar!==null){let d=await rr({env:v,tmsCreds:c.resolvedCreds??null,resolver:c.resolver,auth:ar,getToken:async()=>c.token??null,session:a,log:(u,f,b,h)=>a.log(u,f,b,h),skipScreenshotQueue:!!o.local||!c.basicAuth,invocationMode:i?"agent":"cli"});Ue=d.screenshotQueue,d.remoteLogger&&(r.register("remote-logger",()=>d.remoteLogger.shutdownSync()),r.remoteLogger=d.remoteLogger,e.skipGlobalRemoteLogger||$r(d.remoteLogger))}if(o.name){try{_n(o.name)}catch(d){return process.stderr.write(`error: ${d.message}
27
+ `),{overallStatus:"failed",exitCode:2,outputDir:oe(n),durationS:0,uploadResult:null}}a.setSessionName(o.name)}let wt={};for(let[d,u]of Object.entries(l.rootGlobal))vt.includes(d)||(wt[d]=u);for(let[d,u]of Object.entries(y))vt.includes(d)||u!==void 0&&(wt[d]=u);let te={...l.chrome};for(let d of vt){let u=y[d];u!==void 0&&(te[d]=u)}let lr={...wt,...te},Re=gn(l.rootGlobal);Re&&(lr.target=l.rootGlobal.target),a.setResolvedGlobal(lr);let cr=k.getActiveProfile()??"default",dr=k.getDefaultEnv(),{rehydrateIfStale:Ls}=await import("./profile-sync-DTTRRIVP.js");Ls(k,E,cr,dr);let j=E.load(),ur=(y.assertion_mode??j.assertion_mode)==="dom"?"dom":"visual",mr=y.final_validation,fr=mr===void 0?void 0:mr==="on",M=j.project_id??null,pe=j.folder_id??null,pr=Cs({isFirstRun:m.isFirstRun,decisions:m.decisions,push:o.push===!0,author:o.author===!0});if(pr){if(c.basicAuth){let d=await Gr({creds:k,config:E,profile:cr,env:dr,tmsCreds:c.basicAuth,isLocal:!!o.local,log:(u,f,b,h)=>a.log(u,f,b,h),onAnnounce:e.onAnnounce,onFatalExit:e.onFatalExit});if(d.status==="ok"){M=d.projectId,pe=d.folderId,j=E.load();let u=we(n);u?.project_id&&(M=u.project_id,pe=u.folder_id??pe),i&&d.autoDefaulted&&t.onAgentEvent(qr(d.autoDefaulted))}else if(d.status==="cancelled"){process.stderr.write(`error: project/folder configuration failed. See remediation above, or use --local.
28
+ `);let{shutdown:u}=await import("./exit-manager-3FVBTNYR.js");return u(2,"project/folder gate failed"),{}}}}else{let d=we(n);({projectId:M,folderId:pe}=Es(d,{project_id:j.project_id??null,folder_id:j.folder_id??null})),a.log("info","GATE_SKIP_REPLAY","Project/folder gate skipped (planned pure replay)",{meta_project:!!d?.project_id,config_project:!!j.project_id})}{let d=bn(l),u=c.resolvedCreds?.org_id!=null?String(c.resolvedCreds.org_id):void 0,f=d.find(g=>g.project_id&&M&&g.project_id!==String(M)||g.org_id&&u&&g.org_id!==u),b=new Set(d.map(g=>g.project_id).filter(Boolean)),h=new Set(d.map(g=>g.org_id).filter(Boolean));if(f||b.size>1||h.size>1){let g=f??d[0];return process.stderr.write(`error: tenant mismatch \u2014 imported test '${g.file}' was authored under project ${g.project_id??"?"} / org ${g.org_id??"?"}, which differs from the run's project/org (or another imported test). Cross-tenant imports are not allowed.
29
+ `),await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:oe(n),durationS:0,uploadResult:null}}}let O;try{O=await ss(Re?"device":"web",{prepareDevice:async()=>{let d=await Hr({platform:Re.platform,app:Re.app,noReset:Re.no_reset,defaults:j.mobile,interactive:Cn()&&!i,agent:i,...!o.local&&c.basicAuth&&c.resolvedCreds?.org_id?{cloudUpload:{env:v,orgId:String(c.resolvedCreds.org_id),userId:String(c.resolvedCreds.user_id??""),baseUrl:vs(v,u=>se(u).controllerBaseUrl),auth:{username:c.basicAuth.username,accessKey:c.basicAuth.access_key}}}:{},onProgress:u=>process.stderr.write(`${u}
30
+ `)});return{device:d.device,...d.appRef?{appRef:d.appRef}:{},...d.appId?{appId:d.appId}:{}}},prepareWeb:()=>ns({config:{chrome_profile_path:te.chrome_profile??null,window_size:{width:1920,height:1080}},startUrl:rt,headless:te.headless??!1,wsEndpoint:te.ws_endpoint,cdpEndpoint:te.cdp_endpoint})})}catch(d){if(Re){let u=d instanceof Kr?`${d.doctorText}
31
+ ${d.message}`:d.message;process.stderr.write(`error: mobile target preparation failed: ${u}
32
+ `)}else process.stderr.write(`error: Chrome launch failed: ${d.message}
33
+ `);return await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:oe(n),durationS:0,uploadResult:null}}let le=O.kind==="web"?O.chrome:{instance:null,tempDir:null},ze=le.instance;ze&&r.register("chrome",()=>{try{ze.kill()}catch{}});let gr=sn(le.cdpEndpoint),re=null,hr=!1,Ye=()=>{if(!re?.diedUnexpectedly)return!1;if(!hr){hr=!0;let d=re.stderr.slice(-500);a.log("error","RUNNER_FATAL_DEATH","v16-runner exited unexpectedly mid-session",{stderr_tail:d}),process.stderr.write(`error: v16-runner exited unexpectedly mid-session \u2014 remaining steps skipped.
34
+ `)}return!0},W=null,br=le.cdpEndpoint??te.cdp_endpoint;if(br&&!te.ws_endpoint&&!te.headless&&!e.isAgent)try{W=Wn({headless:te.headless??!1,cdpEndpoint:br,chromePid:ze?.process.pid}),W&&r.register("marker-overlay",()=>W.kill())}catch(d){a.log("warn","OVERLAY_SPAWN_FAILED","Marker overlay spawn failed",{error:String(d)})}c.resolvedCreds?.org_id!==void 0&&a.setOrgId(String(c.resolvedCreds.org_id)),a.setUserIdentity(c.resolvedCreds?.username??null,c.resolvedCreds?.email??null);let he=fs({objective:"",globalDir:ue(xt,"variables"),localDir:ue(s,".testmuai","variables"),file:o.variablesFile,inline:o.variables}),Ds=l.rootGlobal.variables??{},ne=No(he.raw,Ds);a.setAuteurVariables(ne.auteur);let yr=Jt(ue(xt,"global-memory.md"))??void 0,vr=Jt(ue(s,".testmuai","context.md"))??void 0;o.local?process.stderr.write(`info: --local \u2014 cloud upload skipped
35
+ `):c.basicAuth?M||(pr?process.stderr.write(`warn: cloud upload skipped \u2014 no project configured.
36
+ `):process.stderr.write(`warn: evidence publish will be skipped \u2014 no project_id in meta.json or config.
37
+ `)):process.stderr.write(`warn: cloud upload skipped \u2014 TMS credentials could not be resolved.
38
+ Run 'kane-cli login' (OAuth) or 'kane-cli config set-username/set-access-key' (basic auth).
39
+ `);let Ie=!o.local&&!!c.basicAuth&&M!=null;if(a.log("info","PIPELINE_GATE_STATE","Initial gate state (run-start)",{phase:"run-start",shouldUploadArtifacts:Ie,lockHeld:_,isFirstRun:m.isFirstRun,hasAuth:m.hasAuth}),Ie&&m.testId==null&&!m.degradedReadonly){let d=se(v);try{let u=await _s({tmsBaseUrl:d.tmsBaseUrl,auth:c.basicAuth,objective:l.steps[0].objective,url:"",projectId:M,folderId:pe??"",hasCustomProfile:!!te.chrome_profile,...O.kind==="device"?{mobile:{platform:O.device.platform??"",...O.appId?{appId:O.appId}:{}}}:{},log:(f,b,h,g)=>a.log(f,b,h,g)});u&&a.setTestId(u)}catch(u){process.stderr.write(`warn: ATM test creation failed: ${u.message}
40
+ `)}}else m.testId&&a.setTestId(m.testId);let We={};if(c.basicAuth&&!o.local&&(ne.secretEntries.length>0||ne.nonSecretEntries.length>0))try{We=await ps({variables:ne,auth:c.basicAuth,orgId:String(c.resolvedCreds?.org_id??""),env:v,localMode:!!o.local,log:(d,u,f,b)=>a.log(d,u,f,b)})}catch(d){process.stderr.write(`warn: variable/secret push failed: ${d.message}
41
+ `)}let St=new Map;for(let[d,u]of ne.nonSecretEntries)St.set(d,u.value);let _t=new Map;for(let[d,u]of ne.secretEntries)_t.set(d,u.value);async function Rt(d){if(!c.basicAuth||o.local)return;let u=[],f=[];for(let[h,g]of Object.entries(d))if(g.secret){if(_t.get(h)===g.value)continue;f.push([h,g])}else{if(St.get(h)===g.value)continue;u.push([h,g])}if(u.length===0&&f.length===0)return;let b=se(v);if(u.length>0){let h=new Te(b.tmsBaseUrl,c.basicAuth.username,c.basicAuth.access_key);for(let[g,R]of u)try{let C=await h.upsertVariable({name:g,value:R.value});We[g]=C.id,St.set(g,R.value),a.log("info","VAR_PUSH_STEP","Variable updated mid-run",{name:g})}catch(C){a.log("warn","VAR_PUSH_STEP_FAILED","Mid-run variable push failed",{name:g,error:String(C)})}}if(f.length>0){let h=new Pe(b.secretsBaseUrl);for(let[g,R]of f)try{await h.pushSecret({secretKey:g,secretValue:R.value,username:c.basicAuth.username,accessKey:c.basicAuth.access_key,orgId:String(c.resolvedCreds?.org_id??"")}),_t.set(g,R.value),a.log("info","SECRET_PUSH_STEP","Secret updated mid-run",{name:g})}catch(C){a.log("warn","SECRET_PUSH_STEP_FAILED","Mid-run secret push failed",{name:g,error:String(C)})}}}let je=Ue?(d,u,f,b)=>{if(!(_||m.isFirstRun))return;if(P&&b){Vn(P.packTestDir,b,Ue,(g,R,C,F)=>a.log(g,R,C,F));return}let h=B+u;Kn(a.sessionDir,h,d,Ue,(g,R,C,F)=>a.log(g,R,C,F),f)}:void 0,wr=l.rootTitle??l.rootSteps[0]?.heading??As(n),Os=Object.keys(ne.raw).length>0?Ee(ne.raw,wr).objective:wr,be=Gn({flag:o.url,frontmatter:l.rootGlobal?.url,configDefault:E.load().default_url}),Us=zn({resolvedUrl:be,local:!!o.local,allowMissingUrl:!!o.allowMissingUrl,isTTY:!!process.stdin.isTTY});a.setFirstRun(Os,be??"");let fe=new ft(l),Je=new Date().toISOString(),Sr=Date.now(),It=e.evidenceAttach?null:new on({origin:"testmd",runKind:"author",pid:process.pid,title:l.rootTitle??As(n),started:Je,producerVersion:tt,surfaces:be?[be]:void 0,testmdRelPath:Uo(s,n),definition:{path:"test.md",content:Ps(n,"utf8")},cwd:s,packRootDir:ue(a.sessionDir,"evidence")}),ce=jo(e.evidenceAttach,It),K=ce.session,P=null;if(e.evidenceAttach)P={executionId:e.evidenceAttach.id,testId:e.evidenceAttach.test,packTestDir:e.evidenceAttach.packTestDir};else if(It)try{P=await It.start()}catch(d){a.log("warn","EVIDENCE_START_FAILED","Evidence pack creation failed",{error:String(d)})}let ye=[],Qe=[],_r,ke,kt=(d,u,f,b,h)=>{if(!P)return;K.noteSpawn(h?.length?{...d,steps:d.steps.map(R=>({...R,verifies:h}))}:d),d.resolution&&(_r=d.resolution),ke=Qr(ke,d.runnerEnvironment),ye.push(Fo(u));let g=yt(u,b);for(let R=0;R<g;R++)Qe.push(f+R)},Ct=()=>P?{packTestDir:P.packTestDir,ordinalOffset:K.nextOrdinalOffset()}:void 0,Rr=async()=>{if(!P||!K)return;let d=Xr(ye.length?ye:[{resultCode:null}]);await K.archiveAttempt(d),ye.length=0,Qe.length=0},js=typeof o.maxSteps=="string"&&o.maxSteps!==""?parseInt(o.maxSteps,10):void 0;function Ir(d,u){let f=l.steps[d],b=xs(f.config,y),h=Le(he.raw,b.variables,f.objective);return os({objective:h.objective,url:O.kind==="device"?void 0:d===0?be??void 0:f.unitEntryUrl,requireStartUrl:O.kind==="web"&&d===0&&Us,model:x,chrome:le,device:O.kind==="device"?O.device:void 0,auth:c,sessionId:a.sessionId,runIndex:u,windowSize:{width:1920,height:1080},maxSteps:b.max_steps??js??30,headless:te.headless??!1,disableAskUser:!0,variables:Object.keys(h.variables).length>0?h.variables:void 0,globalContext:b.global_context??yr,localContext:b.local_context??vr,sessionContext:a.getContext(),bugDetection:o.bugDetection??j.bug_detection,evidence:Ct()})}function kr(d){let f=l.steps[d].trace[0].stepIndex,b=l.rootSteps.find(g=>g.index===f);l.steps.slice(0,d).some(g=>g.trace[0].stepIndex===f)||t.onAgentEvent({type:"test_md_step_start",step_index:f,heading:b.heading,ref:b.body.kind==="import_ref"?{kind:"import",label:b.body.path,unit_kind:b.body.path.endsWith("_test.md")?"test":"helper"}:null})}function Et(d,u,f,b,h,g){let R=l.steps[d],C=R.trace[0].stepIndex,F=!l.steps.slice(d+1).some(D=>D.trace[0].stepIndex===C),N=f?.status==="passed"?"passed":"failed",U=f?.reason??h??void 0,Q=f?.duration??g,S=f?.verdict;if(S&&typeof S=="object"){let D=typeof S.one_liner=="string"?S.one_liner:"",G=typeof S.bug_title=="string"&&S.bug_title?S.bug_title:D;if(G&&N==="failed"){let Z=[S.family,S.category].filter(Boolean).join("/"),X=typeof S.confidence=="number"?`, confidence ${S.confidence.toFixed(2)}`:"";U=`${U??"failed"} \u2014 bug verdict: ${G}${Z?` [${Z}${X}]`:""}`}let w=typeof S.category_proposal=="string"?S.category_proposal:"";w&&N==="failed"&&(U=`${U??"failed"}; category proposal: ${w} \u2014 consider adding to taxonomy`),t.onAgentEvent({type:"test_md_bug_verdict",step_index:R.trace[0].stepIndex,confirmed:S.confirmed===!0,bug_title:G||null,family:S.family??null,category:S.category??null,category_proposal:w||null,severity:S.severity??null,confidence:typeof S.confidence=="number"?S.confidence:null,one_liner:D||null})}let{continueOverall:$}=fe.recordStep(R,{status:N,duration_s:Q,reason:U}),H=xs(R.config,y),q=Le(he.raw,H.variables,R.objective).objective;if(f){let D=Hn(f,u,b);a.addRunResult(qn(f,q,u,D),f.total_runs)}else a.addRunResult({index:u,objective:q,status:N,summary:"",context:{memory:{},variables:{},pointer:""}},1);if(F||!$){let D=fe.snapshotOutcomes().find(G=>G.rootStepIndex===C);t.onAgentEvent({type:"test_md_step_end",step_index:C,status:D.status,duration_s:D.duration_s??0,ref_kind:D.refKind??null,unit_kind:D.refKind==="import"?(D.refLabel??"").endsWith("_test.md")?"test":"helper":null,inlined_count:D.inlinedCount??null,failed_sub_step_index:D.failedSubStepIndex??null})}return $}let At=[];async function Fs(d){An(d,l.steps.length);for(let u=0;u<d;u++){if(Y||e.signal?.aborted)return{failedAt:u,cancelled:!0};if(Ye())return{failedAt:u,cancelled:!1};let f=l.steps[u],b=m.decisions[u];if(b.kind!=="replay")return process.stderr.write(`error: runReplayPhase invoked on a non-replay decision at step ${u}
42
+ `),{failedAt:u,cancelled:!1};let h=a.nextRunIndex();B=h;let g=u===0?be??void 0:l.steps[u].unitEntryUrl,R={width:j.window_size.width,height:j.window_size.height},C=Le(he.raw,f.config.variables,f.objective),F=Kt({step:f,decision:b,chrome:le,device:O.kind==="device"?O.device:void 0,auth:c,sessionId:a.sessionId,runIndex:h,sessionDir:a.sessionDir,windowSize:R,forceNavigateUrl:O.kind==="device"?void 0:g,sessionContext:a.getContext(),variables:Object.keys(C.variables).length>0?C.variables:void 0,evidence:Ct(),investigationAsync:!ce.ownsLifecycle});await Rt(C.raw),kr(u);let N=Date.now(),U=null,Q=null,S=at(),$={...F};delete $.run_id,Ut($,{environment:v});let H=`run-${h}`;try{W?.setRunActive(!0);try{for await(let w of re.run(H,"replay",$)){if(t.onAgentEvent(w),S=jt(S,w),w.type==="step_event"&&w.event==="reasoning"?W?.setStepText(w.detail):w.type==="step_end"&&(w.status==="passed"&&W?.setStepComplete(),je&&je(w.index,0,w.child_id,typeof w.ordinal=="number"&&w.id?{ordinal:w.ordinal,id:w.id}:void 0)),w.type==="run_end"){U=w;break}if(w.type==="error"){Q=w.message??"runner error";break}}!ce.ownsLifecycle&&U?.status==="failed"&&At.push({exited:re.exited.then(()=>{}).catch(()=>{}),cancel:()=>{try{re?.cancel()}catch{}}})}finally{W?.setRunActive(!1)}}catch(w){Q=w.message}if(re.diedUnexpectedly&&Ye(),Y)return{failedAt:u,cancelled:!0};let q=Math.round((Date.now()-N)/1e3),D=Et(u,h,U,null,Q,q);a.recordStepRun({testmdStepIndex:l.steps[u].flatIndex,runIndex:h,totalRunDirs:yt(U,null)}),kt(S,U,h,null,l.steps[u].verifies);let G=!!Q||U?.status==="failed";if(xn(u,G?"failed":"ok"),G||!D)return{failedAt:u,cancelled:!1}}return{failedAt:null,cancelled:!1}}let Cr=async()=>{if(_)return!0;let d=c.basicAuth;if(!d){let h=await c.resolver.resolve(!0);h?.username&&h?.access_key&&(d={username:h.username,access_key:h.access_key},c.basicAuth=d)}if(!m.testId||!m.fromCommitId||!d)return process.stderr.write(`error: cannot acquire lock \u2014 missing required state
43
+ `),!1;let u=a.sessionId,f=o.onLockConflict??l.rootGlobal.on_lock_conflict??"readonly",b=await ir({tmsBaseUrl:A.tmsBaseUrl,testId:m.testId,fromCommitId:m.fromCommitId,newCommitId:u,basicAuth:d,onLockConflict:f});if(b==="ok"){_=!0,m.newCommitId=u,a.log("info","MID_RUN_LOCK_ACQUIRED","Mid-run lock acquired",{test_id:m.testId}),i&&t.onLockState({phase:"acquired",scope:"mid_run"}),mt({baseUrl:De(A.tmsBaseUrl),testId:m.testId,auth:Oe(d),lifecycle:r});let h=await Ts({resolved:l,decisions:m.decisions,tmsBaseUrl:A.tmsBaseUrl,newCommitId:u,basicAuth:d,mode:f,lifecycle:r,alreadyLocked:m.unitLocks,allUnits:!0});return h.outcome==="ok"?m.unitLocks.push(...h.locks):process.stderr.write(`warn: mid-run unit lock acquisition degraded (${h.outcome}) \u2014 affected units will not self-commit
44
+ `),!0}return a.log("error","MID_RUN_LOCK_CONFLICT","Mid-run lock acquisition failed",{reason:b}),i&&t.onLockState({phase:"conflict",scope:"mid_run",reason:b}),process.stderr.write(`error: mid-run lock acquisition failed (${b})
45
+ `),!1};if(i){let d=it();if(!d)return process.stderr.write("error: v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.\n"),r.cleanup("marker-overlay","v16-runner not found"),r.cleanup("chrome","v16-runner not found"),await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:oe(n),durationS:0,uploadResult:null};let u=Wr({environment:v,mode:y.mode??"testing",assertionMode:ur,finalValidation:fr,username:c.basicAuth?.username,accessKey:c.basicAuth?.access_key,sessionId:a.sessionId});O.kind==="device"&&await Yr(u,O.device),re=new Jr({env:u,runner:d,log:(C,F,N,U)=>a.log(C,F,N,U),sessionId:a.sessionId}),r.register("runner",()=>{(Mr()||e.signal?.aborted)&&(Y=!0);try{re?.kill()}catch{}});let f={...O.kind==="device"?{device:O.device}:{},cdp_endpoint:le.cdpEndpoint,ws_endpoint:le.wsEndpoint,width:j.window_size.width,height:j.window_size.height,headless:te.headless??!1,model:x,session_id:a.sessionId};c.basicAuth?(f.username=c.basicAuth.username,f.access_key=c.basicAuth.access_key):c.token&&(f.auth={type:"bearer",token:c.token}),await re.start(f);let b=o.author===!0;b&&(Vt(),a.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let{authorBoundary:h,cancelledInPhase:g,shrinkCount:R}=await On({decisions:m.decisions,forceAuthor:b,hasRetry:o.retry===!0||o.retryCount!==void 0,maxShrinks:o.retryCount!==void 0?parseInt(o.retryCount,10):Me.maxShrinks,runReplayPhase:Fs,session:a,accumulator:fe,acquireLockIfNeeded:Cr,archiveAttempt:Rr});if(ae=R>0,R>0&&(a.log("info","RETRY_TRIGGERED","Retry loop triggered",{shrink_count:R,final_author_boundary:h}),t.onRetryAttempt({shrink_count:R,final_author_boundary:h,complete_reauthor:h===0})),h===0&&R>0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback",{shrink_count:R}),!g&&h>=0)for(let C=h;C<l.steps.length&&!e.signal?.aborted;C++){let F=l.steps[C];if(Ye()){fe.recordStep(F,{status:"failed",duration_s:0,reason:"v16-runner exited unexpectedly mid-session"});break}if(!fe.shouldRunFlatStep(F))continue;kr(C),L=!0,me.add(l.steps[C].flatIndex);let N=a.nextRunIndex();B=N,await Rt(Le(he.raw,F.config.variables,F.objective).raw);let U=Ir(C,N),Q=Date.now(),S=null,$=null,H=null,q=!1,D=0,G=at(),w={...U};delete w.run_id,Ut(w,{environment:v});let Z=`run-${N}`;try{W?.setRunActive(!0);try{for await(let T of re.run(Z,"author",w)){if(t.onAgentEvent(T),G=jt(G,T),T.type==="bifurcation"){let Ne=T.count??T.flows?.length??0;(T.is_single_flow??Ne<=1)||(H=T.flows??null,q=!0,D=0)}else if(T.type==="run_start"&&q)D++;else if(T.type==="step_event"&&T.event==="reasoning")W?.setStepText(T.detail);else if(T.type==="step_end"&&(T.status==="passed"&&W?.setStepComplete(),je)){let Ne=q?Math.max(0,D-1):0;je(T.index,Ne,T.child_id,typeof T.ordinal=="number"&&T.id?{ordinal:T.ordinal,id:T.id}:void 0)}if(T.type==="run_end"){S=T;break}if(T.type==="error"){$=T.message??"runner error";break}}}finally{W?.setRunActive(!1)}}catch(T){$=T.message}re.diedUnexpectedly&&Ye();let X=Math.round((Date.now()-Q)/1e3),Fe=Et(C,N,S,H,$,X);if(a.recordStepRun({testmdStepIndex:l.steps[C].flatIndex,runIndex:N,totalRunDirs:yt(S,H)}),kt(G,S,N,H,l.steps[C].verifies),!Fe||Y||e.signal?.aborted)break}}else{let{effectiveDecisions:d}=await import("./effective-decisions-DRM3JSR4.js"),{decideRetry:u}=await import("./replay-policy-6USQBT3E.js"),f=o.retry===!0||o.retryCount!==void 0,b=o.retryCount!==void 0?parseInt(o.retryCount,10):Me.maxShrinks,h=o.author===!0;h&&(Vt(),a.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let g=h?0:dt(m.decisions),R=0,C=null,F=m.decisions.filter(S=>S.kind==="replay").length,N=m.decisions.length-F,U=[];o.push&&U.push("--push"),f&&U.push("--retry"),o.retryCount!==void 0&&U.push(`--retry-count=${o.retryCount}`),h&&U.push("--author");let Q={source:n,steps:{total:m.decisions.length,replay:F,author:N},model:x,viewport:{width:j.window_size.width,height:j.window_size.height},chrome:le.cdpEndpoint??le.wsEndpoint??"managed",session:a.sessionName??"ephemeral",variables:{count:Object.keys(ne.raw).length,secrets:Object.values(ne.raw).filter(S=>S.secret).length,names:Object.keys(ne.raw)},flags:U,mode:y.mode??"testing"};for(;;){let S=a.snapshot(),$=fe.snapshot(),H=d(m.decisions,g,h);if(R>=1){let w=g===0?`\u21BB Complete re-author \u2014 retry budget exhausted (${R}/${b})`:`\u21BB Retry ${R}/${b} \u2014 replay 0..${g-1}, author ${g}..${m.decisions.length-1}
46
+ reason: replay miss at step ${(C??0)+1}`;process.stderr.write(w+`
47
+ `)}let q=R>=1&&g>0&&C!==null?{startIdx:0,endIdx:C,count:C}:void 0;W?.setRunActive(!0);let D=await Ko({decisions:H,resolved:l,session:a,accumulator:fe,tuiConfig:j,globalConfig:Q,buildStepConfigAt:Ir,buildReplayConfig:w=>{let Z=m.decisions[w];if(Z.kind!=="replay")throw new Error("expected replay decision at index "+w);let X=l.steps[w];return Kt({step:X,decision:Z,chrome:le,device:O.kind==="device"?O.device:void 0,auth:c,sessionId:a.sessionId,runIndex:a.nextRunIndex(),sessionDir:a.sessionDir,windowSize:{width:j.window_size.width,height:j.window_size.height},forceNavigateUrl:O.kind==="device"?void 0:w===0?be??void 0:X.unitEntryUrl,sessionContext:a.getContext(),variables:$o(he.raw,X.config.variables,X.objective),evidence:Ct()})},onAnyAuthorStep:w=>{L=!0,me.add(l.steps[w].flatIndex)},onCancel:()=>{ee=!0},topBannerModel:x,topBannerAuth:`${k.getActiveProfile()??"no profile"}/${v}`,spawnOpts:{environment:v,mode:y.mode??"testing",assertionMode:ur,finalValidation:fr,log:(w,Z,X,Fe)=>a.log(w,Z,X,Fe)},priorAttemptRollup:q,pushStepLevelDelta:(w,Z)=>Rt(Le(he.raw,w,Z).raw),onSequencerStepEnd:(w,Z,X,Fe)=>{let T=Math.round((Date.now()-Fe)/1e3),Ne=w.hadError?w.reason??"runner error":null,Vs=Et(Z,X,w.runEnd,w.bifurcationFlows??null,Ne,T);return a.recordStepRun({testmdStepIndex:l.steps[Z].flatIndex,runIndex:X,totalRunDirs:yt(w.runEnd,w.bifurcationFlows)}),kt(w.evidence??at(),w.runEnd,X,w.bifurcationFlows,l.steps[Z].verifies),Vs},screenshotDispatcher:je,onReasoning:w=>W?.setStepText(w),onStepComplete:()=>W?.setStepComplete(),onSpawnStart:w=>{B=w},host:t});if(W?.setRunActive(!1),D.cancelled){r.cleanup("marker-overlay","user cancelled run"),r.cleanup("chrome","user cancelled run");break}if(D.failedAt===null)break;let G=u({failedAt:D.failedAt,shrinkCount:R,hasRetry:f,maxShrinks:b});if(G.kind==="fail"||!_&&!await Cr())break;await Rr(),a.rollback(S),fe.rollback($),G.kind==="complete-reauthor"?g=0:g=G.newAuthorBoundary,R++,ae=!0,a.log("info","RETRY_TRIGGERED","Retry loop triggered (TTY)",{shrink_count:R,failed_at:C}),g===0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback (TTY)",{shrink_count:R}),C=D.failedAt}}let J=fe.finalize(),ve=Math.round((Date.now()-Sr)/1e3),Ns={session:a,resolvedAuth:c,chromeResult:le,chromeInstance:ze??null,testId:a.testId??null,preparedVariables:ne,variableIds:We,globalContext:yr,localContext:vr,tuiConfig:j,env:v,localMode:!!o.local},Er=!1,Ar=!1,xr=!1,Pr=async(d={})=>{if(!P)return!1;if(ce.ownsLifecycle?Er:xr)return!0;try{let u=await gr(),f=sr(L)==="replay",b=ue(oe(n),".internal","execution.json"),h=ue(a.sessionDir,"execution.json"),g=un(P.packTestDir,f?[b,h]:[h,b],(S,$,H,q)=>a.log(S,$,H,q)),{ids:R,linear:C}=g?fn(P.packTestDir):{ids:[],linear:!0},{steps:F,tail:N,unjoined:U}=mn(K.steps,R,f,C);g?U?a.log("warn","SKIPPED_TAIL_UNJOINED","Executed records don't align with the authored blob \u2014 skipped tail withheld",{executed:K.steps.length,leaves:R.length}):N.length>0&&a.log("info","SKIPPED_TAIL_APPENDED","Unexecuted authored actions recorded as skipped",{count:N.length}):a.log("warn","SKIPPED_TAIL_NO_BLOB","No auteur blob in pack \u2014 unexecuted actions cannot be recorded as skipped",{});let Q=await K.writeResult({steps:[...F,...N],spawns:ye.length?ye:[{resultCode:null}],tags:l.rootGlobal.tags,externalIdInput:{execution_id:P.executionId,session_id:a.sessionId,commit_id:f?m.fromCommitId??a.sessionId:a.sessionId,test_id:m.testId??a.testId??void 0,testcase_id:d.testcaseId??m.testcaseId??a.testcaseId??void 0,project_id:M??void 0,folder_id:pe??void 0,org_id:a.orgId!=null?String(a.orgId):void 0,session_name:a.sessionName??$e(n),user_name:a.userName??void 0,user_email:a.userEmail??void 0,sharable_link:Qn(se(v).testManagerUiUrl,M,d.testcaseId??m.testcaseId??a.testcaseId,d.shareId)},runnerEnv:nn({cdpBrowser:u,resolution:_r,runnerEnvironment:ke}),intentEnv:Zr(x,ke,ce.ownsLifecycle?void 0:sr(L)),durationMs:Date.now()-Sr,log:(S,$,H,q)=>a.log(S,$,H,q)});if(!ce.ownsLifecycle)return await tn(K.pack,P.testId,ue(a.sessionDir,"tui.log"),{requireRealLog:!!ke?.native_platform,appiumMarks:K.appiumMarks}),xr=!0,a.log("info","EVIDENCE_RESULT_WRITTEN","Member result.yaml written",{execution_id:P.executionId,verdict:Q}),!0;if(!Ar)try{let S=cn({cwd:process.cwd(),members:[{path:n,verdict:Q,executionId:P.executionId,startedAt:new Date().toISOString(),acs:ln(K.steps),mode:"testmd",local:!!o.local}]});Ar=!0;for(let $ of S.warnings)a.log("warn","EXEC_SYNC",$,{});S.synced>0&&a.log("info","EXEC_SYNC",`context sync: ${S.synced} fact(s), ${S.superseded} supersession(s)`,{})}catch(S){a.log("warn","EXEC_SYNC",`exec-sync failed: ${S instanceof Error?S.message:String(S)}`,{})}try{let S=dn(K.pack,an(process.cwd()));S.status==="skipped"&&a.log("warn","EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${S.reason}`,{})}catch(S){a.log("warn","EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(S)})}return await rn({executionId:P.executionId,testId:P.testId,saved:!0,runKind:sr(L),verdict:Q,outputStemDir:oe(n),cwd:s,packDir:K.pack,tuiLogPath:ue(a.sessionDir,"tui.log"),expectStatusDisagrees:(o.bugDetection??j.bug_detection)==="continue",log:(S,$,H,q)=>a.log(S,$,H,q),surface:"testmd",requireRealLog:!!ke?.native_platform,appiumMarks:K.appiumMarks}),Er=!0,a.log("info","EVIDENCE_SEALED","Evidence pack sealed",{execution_id:P.executionId,verdict:Q}),!0}catch(u){return a.log("warn","EVIDENCE_SEAL_FAILED","Evidence pack seal failed",{error:String(u)}),!1}},Ze=Ie&&(_||m.isFirstRun)&&!m.degradedReadonly,$s=async()=>{if(!c.basicAuth)return null;let d=se(v),u=(L||o.push===!0)&&!ee,f=(_||m.isFirstRun)&&!ee&&J.overallStatus==="passed"&&!m.degradedReadonly;a.log("info","PIPELINE_GATE_STATE","Derived gate state (finalize)",{phase:"finalize",shouldUploadArtifacts:Ie,shouldUploadPipeline:Ze,shouldReplaceLocalOutput:u,shouldCommit:f,lockHeld:_,anyAuthorStepRan:L,cancelled:ee,overallStatus:J.overallStatus});let b=ys({mobile:O.kind==="device",session:a,env:v,auth:c,variables:ne,variableIds:We,projectId:M,folderId:pe,totalSteps:J.outcomes.length,totalDuration:ve,screenshotExtMap:Ue?.getExtMap(),codeExport:Ss({codeExport:o.codeExport,codeLanguage:o.codeLanguage,skipCodeValidation:o.skipCodeValidation},j.code_export),onProgress:()=>{},log:(g,R,C,F)=>a.log(g,R,C,F),shouldUploadArtifacts:Ze,shouldReplaceLocalOutput:u,shouldCommit:f,isFirstRun:m.isFirstRun,resolvedTest:l,sourcePath:n,stepRunRecords:a.getStepRunRecords(),authoredFlatIdx:[...me],unitLocks:m.unitLocks,outcomes:J.outcomes,overallStatus:J.overallStatus,fromCommitId:m.fromCommitId,startedISO:Je,durationS:ve,tmsIds:{testId:m.testId??a.testId??void 0,testcaseId:m.testcaseId??a.testcaseId??void 0,projectId:M??void 0,folderId:pe??void 0,orgId:a.orgId??void 0,sessionName:a.sessionName??$e(n)},tmsBaseUrl:A.tmsBaseUrl,testId:m.testId??void 0,newCommitId:m.newCommitId??void 0,basicAuth:c.basicAuth??void 0,decisions:m.decisions,wantsPush:o.push===!0,retryTriggered:ae,forceAuthor:o.author===!0,evidence:P&&ce.ownsLifecycle?{executionId:P.executionId,packTestDir:P.packTestDir,sealedPackPath:K.pack,cwd:s,runIndices:Qe,sealFn:Pr}:void 0,evidenceRead:P&&!ce.ownsLifecycle?{packTestDir:P.packTestDir,runIndices:Qe}:void 0,authoredExecutionPath:L?void 0:ue(oe(n),".internal","execution.json")});m.newCommitId!=null&&(b.skipTmsFinalize=!0);let h=new kn(b);return i?await h.execute():await t.runUpload(h,g=>{if(g.testcaseId&&g.shareId&&M)return pt(d.testManagerUiUrl,M,g.testcaseId,g.shareId)})};P&&await gr(),re&&(await re.shutdown(),r.cleanup("runner","test.md run complete"));let de=await gs(Ns,{performUpload:$s,runCleanup:()=>{r.cleanup("chrome","test.md run complete")},log:(d,u,f,b)=>a.log(d,u,f,b)},{overallStatus:J.overallStatus,outcomes:J.outcomes,sourcePath:n,title:l.rootTitle,rootSteps:l.rootSteps,startedISO:Je,durationS:ve,localMode:!!o.local,skipLocalWrites:!0}),Tr=await Pr({testcaseId:de.uploadResult?.testcaseId,shareId:de.uploadResult?.shareId}),Lr=o.evidencePublish===!1,Dr=ce.ownsLifecycle&&!!P&&!!c.basicAuth&&Is({shouldUploadArtifacts:Ie,lockHeld:_,isFirstRun:m.isFirstRun,sealed:Tr,testId:m.testId,mobile:O.kind==="device"});if(Dr&&Lr)a.log("info","EVIDENCE_PUBLISH_SKIPPED","Replay evidence publish skipped (--no-evidence-publish)",{execution_id:P.executionId}),process.stderr.write(`info: evidence publish skipped (--no-evidence-publish)
48
+ `);else if(O.kind==="device"&&ce.ownsLifecycle&&P)a.log("info","EVIDENCE_PUBLISH_SKIPPED","Evidence publish skipped for a device run"),process.stderr.write(`note: evidence publish skipped \u2014 not supported for device runs yet
49
+ `);else if(Lr&&(_||m.isFirstRun))process.stderr.write(`note: --no-evidence-publish has no effect on author/commit runs
50
+ `);else if(Dr){let d=c.basicAuth,u=P,f=M,b=await ks({controller:new Ce(A.controllerBaseUrl,{username:d.username,accessKey:d.access_key}),tms:new ot(A.tmsBaseUrl,c.resolvedCreds?.username??d.username,c.resolvedCreds?.access_key??d.access_key),testId:m.testId,sessionId:a.sessionId,executionId:u.executionId,sealedPackPath:K.pack,projectId:f});b.ok?a.log("info","EVIDENCE_INGESTED","Replay evidence uploaded and ingested",{execution_id:u.executionId,project_id:f}):(a.log("warn","EVIDENCE_PUBLISH_FAILED","Replay evidence publish failed",{execution_id:u.executionId,stage:b.stage,error:b.error}),process.stderr.write(` \u26A0 evidence publish failed (${b.stage}): ${b.error}
51
+ `)),t.onAgentEvent({type:"test_md_evidence_ingest",status:b.ok?"ok":"failed",evidence_id:u.executionId,...b.ok?{}:{stage:b.stage}})}await Vo(n,m,a,J.outcomes,J.overallStatus,Je,ve,de.uploadResult,j,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},_,ee);try{let d=we(n);if(yn({shouldUploadPipeline:Ze,uploadSucceeded:!!de.uploadResult?.success,metaCommitId:d?.commit_id,metaTestId:d?.test_id})){let u=await $t({sourcePath:n,testId:d.test_id,sessionId:a.sessionId,commitId:d.commit_id,controller:new Ce(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});u.ok?a.log("info","BUNDLE_SYNC_OK","testmd bundle pushed",{commit_id:d.commit_id,bytes:u.bytes}):(a.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync failed",{commit_id:d.commit_id,stage:u.stage,error:u.error}),process.stderr.write(` \u26A0 bundle sync failed (${u.stage}): ${u.error}
52
+ `)),t.onAgentEvent({type:"test_md_bundle_sync",status:u.ok?"ok":"failed",commit_id:d.commit_id,path:n,...u.ok?{bytes:u.bytes}:{stage:u.stage}})}}catch(d){a.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync threw",{error:d instanceof Error?d.message:String(d)})}if(Ze&&de.uploadResult?.success)for(let d of m.unitLocks)try{let u=we(d.file);if(u?.commit_id!==a.sessionId||!u?.test_id)continue;let f=await $t({sourcePath:d.file,testId:String(u.test_id),sessionId:a.sessionId,commitId:String(u.commit_id),controller:new Ce(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});f.ok?a.log("info","BUNDLE_SYNC_OK","unit bundle pushed",{commit_id:u.commit_id,path:d.file,bytes:f.bytes}):a.log("warn","BUNDLE_SYNC_FAILED","unit bundle sync failed",{commit_id:u.commit_id,path:d.file,stage:f.stage,error:f.error}),t.onAgentEvent({type:"test_md_bundle_sync",status:f.ok?"ok":"failed",commit_id:u.commit_id,path:d.file,...f.ok?{bytes:f.bytes}:{stage:f.stage}})}catch(u){a.log("warn","BUNDLE_SYNC_FAILED","unit bundle sync threw",{path:d.file,error:u instanceof Error?u.message:String(u)})}let Or=se(v),Xe=de.uploadResult?.testcaseId,et=Xe&&de.uploadResult?.shareId&&M?pt(Or.testManagerUiUrl,M,Xe,de.uploadResult.shareId):void 0,Ms=l.unitFiles.filter(d=>d.file!==l.rootPath).map(d=>{let u=l.steps.filter(g=>g.owningFile===d.file),f=u.filter(g=>me.has(g.flatIndex)).length,h=(d.kind==="test"?we(d.file):null)?.commit_id===a.sessionId;return{path:d.file,kind:d.kind,replayed:u.length-f,authored:f,committed:h,...h?{commit_id:a.sessionId}:{}}}),Ur={overallStatus:J.overallStatus,durationS:ve,decisions:m.decisions,outcomes:J.outcomes,cancelled:ee,retryTriggered:ae,lockHeld:_,anyAuthorStepRan:L,isFirstRun:m.isFirstRun,wantsPush:o.push===!0,uploadResult:de.uploadResult,shouldUploadArtifacts:Ie,shouldReplaceLocalOutput:L&&!ee,shouldCommit:(_||m.isFirstRun)&&!ee&&J.overallStatus==="passed"&&!m.degradedReadonly,shareUrl:et,imports:Ms},{buildSummaryEvent:Bs}=await import("./SummaryBox-UAYSVFB7.js");if(i?t.onAgentEvent(Bs(Ur)):await t.onSummary(Ur),!i){let d=Xe&&M?Zn(Or.testManagerUiUrl,M,Xe):void 0;await t.onLinks({recordedTestPath:n,outputDir:oe(n),shareableLink:et,testCaseLink:d,codeExportDir:de.uploadResult?.codeExportDir})}if(ce.ownsLifecycle&&K&&Tr){let{offerEvidenceView:d}=await import("./evidence-OYPHZUKI.js");await d({packPath:K.pack,env:v,isTTY:!i&&!ee&&!!process.stdin.isTTY&&!!process.stderr.isTTY,log:u=>process.stderr.write(u+`
53
+ `)})}return t.onAgentEvent({type:"test_md_done",overall_status:J.overallStatus,duration_s:ve,session_id:a.sessionId,...et?{share_url:et}:{}}),{overallStatus:J.overallStatus,exitCode:J.overallStatus==="passed"?0:1,outputDir:oe(n),durationS:ve,uploadResult:de.uploadResult,anyAuthorStepRan:L,resultCode:en(ye),...At.length?{pendingInvestigations:At}:{}}}function No(e,t){let r={...e,...t},n=Object.keys(r).length>0?Ee(r,""):{variables:{},objective:"",keyMap:{}};return{raw:r,auteur:n.variables,auteurObjective:"",secretEntries:Object.entries(r).filter(([,s])=>s.secret),nonSecretEntries:Object.entries(r).filter(([,s])=>!s.secret)}}function Le(e,t,r){let n={...e,...t??{}};if(Object.keys(n).length===0)return{raw:n,variables:{},objective:r};let s=Ee(n,r);return{raw:n,variables:ms(s.variables,s.objective),objective:s.objective}}function $o(e,t,r){let n=Le(e,t,r).variables;return Object.keys(n).length>0?n:void 0}function xs(e,t){let r=new Set(vt),n={...e};for(let[s,o]of Object.entries(t))r.has(s)||s!=="variables"&&o!==void 0&&e[s]===void 0&&(n[s]=o);return n}function Mo(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}async function Bo(e,t,r,n,s,o){let i=vn(t);En(t,i);let p=Ae(e),l=Oo(p)?JSON.parse(Ps(p,"utf8")):null,c=l?.testcase_id,y=l?.test_id,v=l?.commit_id,A=r.push===!0,I=r.retry===!0||r.retryCount!==void 0,x=r.author===!0;A&&!c&&process.stderr.write(`[--push] no meta.json yet \u2014 flag is a no-op on first run
54
+ `),x&&(c=void 0,y=void 0,v=void 0);let k=n.resolvedAuth.basicAuth;if(!k){let B=await n.resolvedAuth.resolver.resolve(!0);B?.username&&B?.access_key&&(k={username:B.username,access_key:B.access_key},n.resolvedAuth.basicAuth=k)}let E=!!k,a=!r.local&&E&&y!=null&&v!=null&&c!=null,Y=a&&(ct(i)||A);if(A&&!a)return process.stderr.write(`error: --push requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
55
+ `),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(I&&!a)return process.stderr.write(`error: --retry requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
56
+ `),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(x&&!E)return process.stderr.write(`error: --author requires authenticated credentials for the TMS API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
57
+ `),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};let m=null,_=!1,L=!1;if(Y){m=s;let ae=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",B=await ir({tmsBaseUrl:n.tmsBaseUrl,testId:y,fromCommitId:v,newCommitId:m,basicAuth:k,onLockConflict:ae});if(B==="ok")_=!0,mt({baseUrl:De(n.tmsBaseUrl),testId:y,auth:Oe(k),lifecycle:o});else{if(B==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};m=null,L=!0}}let me=[],ee=Y&&!_;if(!r.local&&E&&!ee){let ae=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",B=await Ts({resolved:t,decisions:i,tmsBaseUrl:n.tmsBaseUrl,newCommitId:m??s,basicAuth:k,mode:ae,lifecycle:o});if(B.outcome==="ok")me=B.locks;else{if(_&&y&&v&&m&&await or(n,y,v,m),Se(),B.outcome==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:c==null,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};process.stderr.write(`[lock] imported-unit conflict \u2014 whole run degrades to readonly (no commits, no uploads)
58
+ `),m=null,_=!1,L=!0}}return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:m,isFirstRun:c==null,hasAuth:E,canLock:a,lockAcquired:_,unitLocks:me,degradedReadonly:L}}async function Ts(e){let t=new Set(e.resolved.steps.filter((n,s)=>e.decisions[s]?.kind==="author").map(n=>n.owningFile)),r=[];for(let n of e.resolved.unitFiles){if(n.kind!=="test"||n.file===e.resolved.rootPath||!e.allUnits&&!t.has(n.file)||e.alreadyLocked?.some(i=>i.file===n.file))continue;let s=we(n.file);if(!s?.test_id||!s?.commit_id)continue;let o=await ir({tmsBaseUrl:e.tmsBaseUrl,testId:String(s.test_id),fromCommitId:String(s.commit_id),newCommitId:e.newCommitId,basicAuth:e.basicAuth,onLockConflict:e.mode});if(o==="ok"){r.push({file:n.file,testId:String(s.test_id),fromCommitId:String(s.commit_id)}),mt({baseUrl:De(e.tmsBaseUrl),testId:String(s.test_id),auth:Oe(e.basicAuth),lifecycle:e.lifecycle});continue}for(let i of r)await Be({baseUrl:De(e.tmsBaseUrl),testId:i.testId,body:{commitId:e.newCommitId,fromCommitId:i.fromCommitId},auth:Oe(e.basicAuth)}),Se(i.testId);return{outcome:o,locks:[]}}return{outcome:"ok",locks:r}}function De(e){return`${e}/kane-cli/v1`}function Oe(e){return{username:e.username,accessKey:e.access_key}}async function ir(e){let t=De(e.tmsBaseUrl),r=Oe(e.basicAuth),n={baseUrl:t,testId:e.testId,fromCommitId:e.fromCommitId,newCommitId:e.newCommitId,auth:r},s=await qt(n);if(s.ok)return"ok";if(!(s.reason==="concurrent"||s.reason==="base_mismatch"))return process.stderr.write(`[lock] acquire failed: ${s.reason} (HTTP ${s.httpStatus}): ${s.message}
59
+ `),"abort";let i=s.reason==="concurrent"?"concurrent session":"base commit mismatch (pull latest)";if(e.onLockConflict==="fail")return process.stderr.write(`[lock] ${i}; aborting (--on-lock-conflict fail)
60
+ `),"abort";if(e.onLockConflict==="wait"){if(s.reason==="base_mismatch")return process.stderr.write(`[lock] base commit mismatch \u2014 pull latest; aborting
61
+ `),"abort";for(;;){process.stderr.write(`[lock] waiting (concurrent session)...
62
+ `),await new Promise(l=>setTimeout(l,3e4));let p=await qt(n);if(p.ok)return"ok";if(p.reason!=="concurrent")return process.stderr.write(`[lock] wait drifted to ${p.reason} (HTTP ${p.httpStatus}): ${p.message}; aborting
63
+ `),"abort"}}return process.stderr.write(`[lock] ${i} \u2014 running in readonly mode (no commit)
64
+ `),"readonly"}async function Vo(e,t,r,n,s,o,i,p,l,c,y,v,A){let{decisions:I,testId:x,testcaseId:k,fromCommitId:E,newCommitId:a}=t;if(!(s==="passed")||A){let m=A?"cancelled":s;v&&x&&E&&a&&(process.stderr.write(`[lock] run not committed (${m}); discarding playground lock
65
+ `),await or(y,x,E,a));for(let _ of t.unitLocks)await or(y,_.testId,_.fromCommitId,a??r.sessionId);Se();return}Se()}async function or(e,t,r,n){let s=e.resolvedAuth.basicAuth;if(!s){let i=await e.resolvedAuth.resolver.resolve(!0);i?.username&&i?.access_key&&(s={username:i.username,access_key:i.access_key},e.resolvedAuth.basicAuth=s)}if(!s)return;let o=await Be({baseUrl:De(e.tmsBaseUrl),testId:t,body:{commitId:n,fromCommitId:r},auth:Oe(s)});o.ok||process.stderr.write(`warn: discardLock failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
66
+ `)}async function Ko(e){let t=null,r=!1,n=0,s=-1,o=-1,i=0,p=async l=>{if(l&&l.status==="failed")return n>0&&e.decisions[n-1].kind==="replay"&&(t=n-1),null;for(;n<e.decisions.length&&!e.accumulator.shouldRunFlatStep(e.resolved.steps[n]);)n++;if(n>=e.decisions.length)return null;let c=e.decisions[n],y=e.resolved.steps[n],v=n;n++;let A=e.session.nextRunIndex();s=v,o=A,i=Date.now(),e.onSpawnStart?.(A),c.kind==="author"&&e.onAnyAuthorStep(v),await e.pushStepLevelDelta(y.config.variables,y.objective);let I=c.kind==="replay"?e.buildReplayConfig(v):e.buildStepConfigAt(v,A),x=c.kind==="replay"?"md5-match":c.reason,k=y.config??{},E={};for(let[a,Y]of Object.entries(k))Y!=null&&a!=="variables"&&a!=="assurance"&&(E[a]=Y);return{config:I,banner:{stepLabel:`Step ${v+1}/${e.decisions.length}`,objective:Mo(y.objective,100)},mode:c.kind,modeReason:x,perStepOverrides:Object.keys(E).length>0?E:void 0}};return await e.host.runSteps({topBanner:{model:e.topBannerModel,auth:e.topBannerAuth},globalConfig:e.globalConfig,getNextStep:p,onStepEnd:l=>(l.status==="failed"&&s>=0&&e.decisions[s]?.kind==="replay"&&(t=s),e.onSequencerStepEnd(l,s,o,i)),onAllComplete:()=>{},onCancel:()=>{r=!0,e.onCancel()},spawnOpts:e.spawnOpts,priorAttemptRollup:e.priorAttemptRollup,screenshotDispatcher:e.screenshotDispatcher,onReasoning:e.onReasoning,onStepComplete:e.onStepComplete}),{failedAt:t,cancelled:r}}export{vs as a,Hn as b,qn as c,gt as d,Ti as e,rs as f,Wn as g,li as h,Vn as i,Kn as j,Yt as k,Gn as l,zn as m,pt as n,Qn as o,Zn as p,ns as q,ss as r,Mi as s,Bi as t,os as u,ms as v,fs as w,ps as x,Jt as y,ys as z,Ss as A,_s as B,Rs as C,rr as D,Ba as E,ks as F,sr as G,Zl as H,No as I,Le as J,$o as K,xs as L};
@@ -0,0 +1,47 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as Ot,b as Mt}from"./chunk-2UIHS2FH.js";import{a as vt}from"./chunk-BKHXPBWN.js";import{a as kt}from"./chunk-N2P4MI32.js";import{b as wt}from"./chunk-NVGBE2DR.js";import{a as Nt,b as Ft,c as St}from"./chunk-MSGW4JDG.js";import{c as G,e as Rt}from"./chunk-UR6MHSHU.js";var Lt=G(x=>{"use strict";Object.defineProperty(x,"__esModule",{value:!0});x.CHAR=`
3
+ \r -\uD7FF\uE000-\uFFFD\u{10000}-\u{10FFFF}`;x.S=` \r
4
+ `;x.NAME_START_CHAR=":A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}";x.NAME_CHAR="-"+x.NAME_START_CHAR+".0-9\xB7\u0300-\u036F\u203F-\u2040";x.CHAR_RE=new RegExp("^["+x.CHAR+"]$","u");x.S_RE=new RegExp("^["+x.S+"]+$","u");x.NAME_START_CHAR_RE=new RegExp("^["+x.NAME_START_CHAR+"]$","u");x.NAME_CHAR_RE=new RegExp("^["+x.NAME_CHAR+"]$","u");x.NAME_RE=new RegExp("^["+x.NAME_START_CHAR+"]["+x.NAME_CHAR+"]*$","u");x.NMTOKEN_RE=new RegExp("^["+x.NAME_CHAR+"]+$","u");var tt=9,et=10,st=13,it=32;x.S_LIST=[it,et,st,tt];function Ne(e){return e>=it&&e<=55295||e===et||e===st||e===tt||e>=57344&&e<=65533||e>=65536&&e<=1114111}x.isChar=Ne;function Fe(e){return e===it||e===et||e===st||e===tt}x.isS=Fe;function Pt(e){return e>=65&&e<=90||e>=97&&e<=122||e===58||e===95||e===8204||e===8205||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}x.isNameStartChar=Pt;function Se(e){return Pt(e)||e>=48&&e<=57||e===45||e===46||e===183||e>=768&&e<=879||e>=8255&&e<=8256}x.isNameChar=Se});var Ht=G(f=>{"use strict";Object.defineProperty(f,"__esModule",{value:!0});f.CHAR="-\uD7FF\uE000-\uFFFD\u{10000}-\u{10FFFF}";f.RESTRICTED_CHAR="-\b\v\f-\x7F-\x84\x86-\x9F";f.S=` \r
5
+ `;f.NAME_START_CHAR=":A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}";f.NAME_CHAR="-"+f.NAME_START_CHAR+".0-9\xB7\u0300-\u036F\u203F-\u2040";f.CHAR_RE=new RegExp("^["+f.CHAR+"]$","u");f.RESTRICTED_CHAR_RE=new RegExp("^["+f.RESTRICTED_CHAR+"]$","u");f.S_RE=new RegExp("^["+f.S+"]+$","u");f.NAME_START_CHAR_RE=new RegExp("^["+f.NAME_START_CHAR+"]$","u");f.NAME_CHAR_RE=new RegExp("^["+f.NAME_CHAR+"]$","u");f.NAME_RE=new RegExp("^["+f.NAME_START_CHAR+"]["+f.NAME_CHAR+"]*$","u");f.NMTOKEN_RE=new RegExp("^["+f.NAME_CHAR+"]+$","u");var yt=9,It=10,Bt=13,Xt=32;f.S_LIST=[Xt,It,Bt,yt];function we(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}f.isChar=we;function ke(e){return e>=1&&e<=8||e===11||e===12||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159}f.isRestrictedChar=ke;function ve(e){return e===9||e===10||e===13||e>31&&e<127||e===133||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111}f.isCharAndNotRestricted=ve;function Oe(e){return e===Xt||e===It||e===Bt||e===yt}f.isS=Oe;function $t(e){return e>=65&&e<=90||e>=97&&e<=122||e===58||e===95||e===8204||e===8205||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}f.isNameStartChar=$t;function Me(e){return $t(e)||e>=48&&e<=57||e===45||e===46||e===183||e>=768&&e<=879||e>=8255&&e<=8256}f.isNameChar=Me});var Ut=G(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.NC_NAME_START_CHAR="A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u{10000}-\u{EFFFF}";N.NC_NAME_CHAR="-"+N.NC_NAME_START_CHAR+".0-9\xB7\u0300-\u036F\u203F-\u2040";N.NC_NAME_START_CHAR_RE=new RegExp("^["+N.NC_NAME_START_CHAR+"]$","u");N.NC_NAME_CHAR_RE=new RegExp("^["+N.NC_NAME_CHAR+"]$","u");N.NC_NAME_RE=new RegExp("^["+N.NC_NAME_START_CHAR+"]["+N.NC_NAME_CHAR+"]*$","u");function Wt(e){return e>=65&&e<=90||e===95||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}N.isNCNameStartChar=Wt;function Pe(e){return Wt(e)||e===45||e===46||e>=48&&e<=57||e===183||e>=768&&e<=879||e>=8255&&e<=8256}N.isNCNameChar=Pe});var Ct=G(B=>{"use strict";Object.defineProperty(B,"__esModule",{value:!0});B.SaxesParser=B.EVENTS=void 0;var X=Lt(),Le=Ht(),xt=Ut(),F=X.isS,ye=X.isChar,W=X.isNameStartChar,Vt=X.isNameChar,ne=X.S_LIST,Ie=X.NAME_RE,Be=Le.isChar,Xe=xt.isNCNameStartChar,$e=xt.isNCNameChar,He=xt.NC_NAME_RE,K="http://www.w3.org/XML/1998/namespace",I="http://www.w3.org/2000/xmlns/",We={__proto__:null,xml:K,xmlns:I},Ue={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},C=-1,k=-2,Gt=0,Ve=1,nt=2,Ge=3,P=4,qe=5,je=6,ze=7,rt=8,Ye=9,Qe=10,Ke=11,Ze=12,A=13,q=14,at=15,Je=16,ot=17,ts=18,es=19,ht=20,ss=21,is=22,ns=23,qt=24,lt=25,j=26,jt=27,rs=28,as=29,zt=30,os=31,hs=32,O=33,ls=34,ct=35,U=36,ut=37,cs=38,Yt=39,Qt=40,us=41,Kt=42,ds=43,fs=44,dt=9,w=10,ft=13,Zt=32,Jt=33,re=34,V=38,ae=39,z=45,Y=47,ps=59,v=60,L=61,D=62,T=63,oe=91,y=93,te=133,ee=8232,Q=e=>e===re||e===ae,he=[re,ae],ms=[...he,oe,D],gs=[...he,v,y],xs=[L,T,...ne],Cs=[...ne,D,V,v];function mt(e,t,s){switch(t){case"xml":s!==K&&e.fail(`xml prefix must be bound to ${K}.`);break;case"xmlns":s!==I&&e.fail(`xmlns prefix must be bound to ${I}.`);break;default:}switch(s){case I:e.fail(t===""?`the default namespace may not be set to ${s}.`:`may not assign a prefix (even "xmlns") to the URI ${I}.`);break;case K:switch(t){case"xml":break;case"":e.fail(`the default namespace may not be set to ${s}.`);break;default:e.fail("may not assign the xml namespace to another prefix.")}break;default:}}function _s(e,t){for(let s of Object.keys(t))mt(e,s,t[s])}var Es=e=>He.test(e),Ds=e=>Ie.test(e),M=0,se=1,pt=2;B.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];var ie={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"},gt=class{constructor(t){this.opt=t??{},this.fragmentOpt=!!this.opt.fragment;let s=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=this.opt.position!==!1,this.fileName=this.opt.fileName,s){this.nameStartCheck=Xe,this.nameCheck=$e,this.isName=Es,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},We);let i=this.opt.additionalNamespaces;i!=null&&(_s(this,i),Object.assign(this.ns,i))}else this.nameStartCheck=W,this.nameCheck=Vt,this.isName=Ds,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var t;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=M,this.attribList=[];let{fragmentOpt:s}=this;this.state=s?A:Gt,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=s,this.xmlDeclPossible=!s,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:i}=this.opt;if(i===void 0){if(this.opt.forceXMLVersion===!0)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");i="1.0"}this.setXMLVersion(i),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(Ue),(t=this.readyHandler)===null||t===void 0||t.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(t,s){this[ie[t]]=s}off(t){this[ie[t]]=void 0}makeError(t){var s;let i=(s=this.fileName)!==null&&s!==void 0?s:"";return this.trackPosition&&(i.length>0&&(i+=":"),i+=`${this.line}:${this.column}`),i.length>0&&(i+=": "),new Error(i+t)}fail(t){let s=this.makeError(t),i=this.errorHandler;if(i===void 0)throw s;return i(s),this}write(t){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let s=!1;t===null?(s=!0,t=""):typeof t=="object"&&(t=t.toString()),this.carriedFromPrevious!==void 0&&(t=`${this.carriedFromPrevious}${t}`,this.carriedFromPrevious=void 0);let i=t.length,n=t.charCodeAt(i-1);!s&&(n===ft||n>=55296&&n<=56319)&&(this.carriedFromPrevious=t[i-1],i--,t=t.slice(0,i));let{stateTable:r}=this;for(this.chunk=t,this.i=0;this.i<i;)r[this.state].call(this);return this.chunkPosition+=i,s?this.end():this}close(){return this.write(null)}getCode10(){let{chunk:t,i:s}=this;if(this.prevI=s,this.i=s+1,s>=t.length)return C;let i=t.charCodeAt(s);if(this.column++,i<55296){if(i>=Zt||i===dt)return i;switch(i){case w:return this.line++,this.column=0,this.positionAtNewLine=this.position,w;case ft:return t.charCodeAt(s+1)===w&&(this.i=s+2),this.line++,this.column=0,this.positionAtNewLine=this.position,k;default:return this.fail("disallowed character."),i}}if(i>56319)return i>=57344&&i<=65533||this.fail("disallowed character."),i;let n=65536+(i-55296)*1024+(t.charCodeAt(s+1)-56320);return this.i=s+2,n>1114111&&this.fail("disallowed character."),n}getCode11(){let{chunk:t,i:s}=this;if(this.prevI=s,this.i=s+1,s>=t.length)return C;let i=t.charCodeAt(s);if(this.column++,i<55296){if(i>31&&i<127||i>159&&i!==ee||i===dt)return i;switch(i){case w:return this.line++,this.column=0,this.positionAtNewLine=this.position,w;case ft:{let r=t.charCodeAt(s+1);(r===w||r===te)&&(this.i=s+2)}case te:case ee:return this.line++,this.column=0,this.positionAtNewLine=this.position,k;default:return this.fail("disallowed character."),i}}if(i>56319)return i>=57344&&i<=65533||this.fail("disallowed character."),i;let n=65536+(i-55296)*1024+(t.charCodeAt(s+1)-56320);return this.i=s+2,n>1114111&&this.fail("disallowed character."),n}getCodeNorm(){let t=this.getCode();return t===k?w:t}unget(){this.i=this.prevI,this.column--}captureTo(t){let{i:s}=this,{chunk:i}=this;for(;;){let n=this.getCode(),r=n===k,a=r?w:n;if(a===C||t.includes(a))return this.text+=i.slice(s,this.prevI),a;r&&(this.text+=`${i.slice(s,this.prevI)}
6
+ `,s=this.i)}}captureToChar(t){let{i:s}=this,{chunk:i}=this;for(;;){let n=this.getCode();switch(n){case k:this.text+=`${i.slice(s,this.prevI)}
7
+ `,s=this.i,n=w;break;case C:return this.text+=i.slice(s),!1;default:}if(n===t)return this.text+=i.slice(s,this.prevI),!0}}captureNameChars(){let{chunk:t,i:s}=this;for(;;){let i=this.getCode();if(i===C)return this.name+=t.slice(s),C;if(!Vt(i))return this.name+=t.slice(s,this.prevI),i===k?w:i}}skipSpaces(){for(;;){let t=this.getCodeNorm();if(t===C||!F(t))return t}}setXMLVersion(t){this.currentXMLVersion=t,t==="1.0"?(this.isChar=ye,this.getCode=this.getCode10):(this.isChar=Be,this.getCode=this.getCode11)}sBegin(){this.chunk.charCodeAt(0)===65279&&(this.i++,this.column++),this.state=Ve}sBeginWhitespace(){let t=this.i,s=this.skipSpaces();switch(this.prevI!==t&&(this.xmlDeclPossible=!1),s){case v:if(this.state=at,this.text.length!==0)throw new Error("no-empty text at start");break;case C:break;default:this.unget(),this.state=A,this.xmlDeclPossible=!1}}sDoctype(){var t;let s=this.captureTo(ms);switch(s){case D:{(t=this.doctypeHandler)===null||t===void 0||t.call(this,this.text),this.text="",this.state=A,this.doctype=!0;break}case C:break;default:this.text+=String.fromCodePoint(s),s===oe?this.state=P:Q(s)&&(this.state=Ge,this.q=s)}}sDoctypeQuote(){let t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.q=null,this.state=nt)}sDTD(){let t=this.captureTo(gs);t!==C&&(this.text+=String.fromCodePoint(t),t===y?this.state=nt:t===v?this.state=je:Q(t)&&(this.state=qe,this.q=t))}sDTDQuoted(){let t=this.q;this.captureToChar(t)&&(this.text+=String.fromCodePoint(t),this.state=P,this.q=null)}sDTDOpenWaka(){let t=this.getCodeNorm();switch(this.text+=String.fromCodePoint(t),t){case Jt:this.state=ze,this.openWakaBang="";break;case T:this.state=Ke;break;default:this.state=P}}sDTDOpenWakaBang(){let t=String.fromCodePoint(this.getCodeNorm()),s=this.openWakaBang+=t;this.text+=t,s!=="-"&&(this.state=s==="--"?rt:P,this.openWakaBang="")}sDTDComment(){this.captureToChar(z)&&(this.text+="-",this.state=Ye)}sDTDCommentEnding(){let t=this.getCodeNorm();this.text+=String.fromCodePoint(t),this.state=t===z?Qe:rt}sDTDCommentEnded(){let t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===D?this.state=P:(this.fail("malformed comment."),this.state=rt)}sDTDPI(){this.captureToChar(T)&&(this.text+="?",this.state=Ze)}sDTDPIEnding(){let t=this.getCodeNorm();this.text+=String.fromCodePoint(t),t===D&&(this.state=P)}sText(){this.tags.length!==0?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:t}=this,{chunk:s}=this;t:for(;;)switch(this.getCode()){case k:this.entity+=`${s.slice(t,this.prevI)}
8
+ `,t=this.i;break;case ps:{let{entityReturnState:i}=this,n=this.entity+s.slice(t,this.prevI);this.state=i;let r;n===""?(this.fail("empty entity name."),r="&;"):(r=this.parseEntity(n),this.entity=""),(i!==A||this.textHandler!==void 0)&&(this.text+=r);break t}case C:this.entity+=s.slice(t);break t;default:}}sOpenWaka(){let t=this.getCode();if(W(t))this.state=ls,this.unget(),this.xmlDeclPossible=!1;else switch(t){case Y:this.state=ds,this.xmlDeclPossible=!1;break;case Jt:this.state=Je,this.openWakaBang="",this.xmlDeclPossible=!1;break;case T:this.state=ns;break;default:this.fail("disallowed character in tag name"),this.state=A,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=ht,this.openWakaBang="";break;case"--":this.state=ot,this.openWakaBang="";break;case"DOCTYPE":this.state=nt,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(z)&&(this.state=ts)}sCommentEnding(){var t;let s=this.getCodeNorm();s===z?(this.state=es,(t=this.commentHandler)===null||t===void 0||t.call(this,this.text),this.text=""):(this.text+=`-${String.fromCodePoint(s)}`,this.state=ot)}sCommentEnded(){let t=this.getCodeNorm();t!==D?(this.fail("malformed comment."),this.text+=`--${String.fromCodePoint(t)}`,this.state=ot):this.state=A}sCData(){this.captureToChar(y)&&(this.state=ss)}sCDataEnding(){let t=this.getCodeNorm();t===y?this.state=is:(this.text+=`]${String.fromCodePoint(t)}`,this.state=ht)}sCDataEnding2(){var t;let s=this.getCodeNorm();switch(s){case D:{(t=this.cdataHandler)===null||t===void 0||t.call(this,this.text),this.text="",this.state=A;break}case y:this.text+="]";break;default:this.text+=`]]${String.fromCodePoint(s)}`,this.state=ht}}sPIFirstChar(){let t=this.getCodeNorm();this.nameStartCheck(t)?(this.piTarget+=String.fromCodePoint(t),this.state=qt):t===T||F(t)?(this.fail("processing instruction without a target."),this.state=t===T?j:lt):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(t),this.state=qt)}sPIRest(){let{chunk:t,i:s}=this;for(;;){let i=this.getCodeNorm();if(i===C){this.piTarget+=t.slice(s);return}if(!this.nameCheck(i)){this.piTarget+=t.slice(s,this.prevI);let n=i===T;n||F(i)?this.piTarget==="xml"?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=n?O:jt):this.state=n?j:lt:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(i));break}}}sPIBody(){if(this.text.length===0){let t=this.getCodeNorm();t===T?this.state=j:F(t)||(this.text=String.fromCodePoint(t))}else this.captureToChar(T)&&(this.state=j)}sPIEnding(){var t;let s=this.getCodeNorm();if(s===D){let{piTarget:i}=this;i.toLowerCase()==="xml"&&this.fail("the XML declaration must appear at the start of the document."),(t=this.piHandler)===null||t===void 0||t.call(this,{target:i,body:this.text}),this.piTarget=this.text="",this.state=A}else s===T?this.text+="?":(this.text+=`?${String.fromCodePoint(s)}`,this.state=lt);this.xmlDeclPossible=!1}sXMLDeclNameStart(){let t=this.skipSpaces();if(t===T){this.state=O;return}t!==C&&(this.state=rs,this.name=String.fromCodePoint(t))}sXMLDeclName(){let t=this.captureTo(xs);if(t===T){this.state=O,this.name+=this.text,this.text="",this.fail("XML declaration is incomplete.");return}if(F(t)||t===L){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`)}this.state=t===L?zt:as}}sXMLDeclEq(){let t=this.getCodeNorm();if(t===T){this.state=O,this.fail("XML declaration is incomplete.");return}F(t)||(t!==L&&this.fail("value required."),this.state=zt)}sXMLDeclValueStart(){let t=this.getCodeNorm();if(t===T){this.state=O,this.fail("XML declaration is incomplete.");return}F(t)||(Q(t)?this.q=t:(this.fail("value must be quoted."),this.q=Zt),this.state=os)}sXMLDeclValue(){let t=this.captureTo([this.q,T]);if(t===T){this.state=O,this.text="",this.fail("XML declaration is incomplete.");return}if(t===C)return;let s=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];let i=s;this.xmlDecl.version=i,/^1\.[0-9]+$/.test(i)?this.opt.forceXMLVersion||this.setXMLVersion(i):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(s)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=s;break;case"standalone":s!=="yes"&&s!=="no"&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=s;break;default:}this.name="",this.state=hs}sXMLDeclSeparator(){let t=this.getCodeNorm();if(t===T){this.state=O;return}F(t)||(this.fail("whitespace required."),this.unget()),this.state=jt}sXMLDeclEnding(){var t;this.getCodeNorm()===D?(this.piTarget!=="xml"?this.fail("processing instructions are not allowed before root."):this.name!=="version"&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),(t=this.xmldeclHandler)===null||t===void 0||t.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=A):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var t;let s=this.captureNameChars();if(s===C)return;let i=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=i.ns=Object.create(null)),(t=this.openTagStartHandler)===null||t===void 0||t.call(this,i),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),s){case D:this.openTag();break;case Y:this.state=ct;break;default:F(s)||this.fail("disallowed character in tag name."),this.state=U}}sOpenTagSlash(){this.getCode()===D?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=U)}sAttrib(){let t=this.skipSpaces();t!==C&&(W(t)?(this.unget(),this.state=ut):t===D?this.openTag():t===Y?this.state=ct:this.fail("disallowed character in attribute name."))}sAttribName(){let t=this.captureNameChars();t===L?this.state=Yt:F(t)?this.state=cs:t===D?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):t!==C&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){let t=this.skipSpaces();switch(t){case C:return;case L:this.state=Yt;break;default:this.fail("attribute without value."),this.text="",this.name="",t===D?this.openTag():W(t)?(this.unget(),this.state=ut):(this.fail("disallowed character in attribute name."),this.state=U)}}sAttribValue(){let t=this.getCodeNorm();Q(t)?(this.q=t,this.state=Qt):F(t)||(this.fail("unquoted attribute value."),this.state=Kt,this.unget())}sAttribValueQuoted(){let{q:t,chunk:s}=this,{i}=this;for(;;)switch(this.getCode()){case t:this.pushAttrib(this.name,this.text+s.slice(i,this.prevI)),this.name=this.text="",this.q=null,this.state=us;return;case V:this.text+=s.slice(i,this.prevI),this.state=q,this.entityReturnState=Qt;return;case w:case k:case dt:this.text+=`${s.slice(i,this.prevI)} `,i=this.i;break;case v:this.text+=s.slice(i,this.prevI),this.fail("disallowed character.");return;case C:this.text+=s.slice(i);return;default:}}sAttribValueClosed(){let t=this.getCodeNorm();F(t)?this.state=U:t===D?this.openTag():t===Y?this.state=ct:W(t)?(this.fail("no whitespace between attributes."),this.unget(),this.state=ut):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){let t=this.captureTo(Cs);switch(t){case V:this.state=q,this.entityReturnState=Kt;break;case v:this.fail("disallowed character.");break;case C:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",t===D?this.openTag():this.state=U}}sCloseTag(){let t=this.captureNameChars();t===D?this.closeTag():F(t)?this.state=fs:t!==C&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case D:this.closeTag();break;case C:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:t,forbiddenState:s}=this,{chunk:i,textHandler:n}=this;t:for(;;)switch(this.getCode()){case v:{if(this.state=at,n!==void 0){let{text:r}=this,a=i.slice(t,this.prevI);r.length!==0?(n(r+a),this.text=""):a.length!==0&&n(a)}s=M;break t}case V:this.state=q,this.entityReturnState=A,n!==void 0&&(this.text+=i.slice(t,this.prevI)),s=M;break t;case y:switch(s){case M:s=se;break;case se:s=pt;break;case pt:break;default:throw new Error("impossible state")}break;case D:s===pt&&this.fail('the string "]]>" is disallowed in char data.'),s=M;break;case k:n!==void 0&&(this.text+=`${i.slice(t,this.prevI)}
9
+ `),t=this.i,s=M;break;case C:n!==void 0&&(this.text+=i.slice(t));break t;default:s=M}this.forbiddenState=s}handleTextOutsideRoot(){let{i:t}=this,{chunk:s,textHandler:i}=this,n=!1;t:for(;;){let r=this.getCode();switch(r){case v:{if(this.state=at,i!==void 0){let{text:a}=this,o=s.slice(t,this.prevI);a.length!==0?(i(a+o),this.text=""):o.length!==0&&i(o)}break t}case V:this.state=q,this.entityReturnState=A,i!==void 0&&(this.text+=s.slice(t,this.prevI)),n=!0;break t;case k:i!==void 0&&(this.text+=`${s.slice(t,this.prevI)}
10
+ `),t=this.i;break;case C:i!==void 0&&(this.text+=s.slice(t));break t;default:F(r)||(n=!0)}}n&&(!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(t,s){var i;let{prefix:n,local:r}=this.qname(t),a={name:t,prefix:n,local:r,value:s};if(this.attribList.push(a),(i=this.attributeHandler)===null||i===void 0||i.call(this,a),n==="xmlns"){let o=s.trim();this.currentXMLVersion==="1.0"&&o===""&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[r]=o,mt(this,r,o)}else if(t==="xmlns"){let o=s.trim();this.topNS[""]=o,mt(this,"",o)}}pushAttribPlain(t,s){var i;let n={name:t,value:s};this.attribList.push(n),(i=this.attributeHandler)===null||i===void 0||i.call(this,n)}end(){var t,s;this.sawRoot||this.fail("document must contain a root element.");let{tags:i}=this;for(;i.length>0;){let r=i.pop();this.fail(`unclosed tag: ${r.name}`)}this.state!==Gt&&this.state!==A&&this.fail("unexpected end.");let{text:n}=this;return n.length!==0&&((t=this.textHandler)===null||t===void 0||t.call(this,n),this.text=""),this._closed=!0,(s=this.endHandler)===null||s===void 0||s.call(this),this._init(),this}resolve(t){var s,i;let n=this.topNS[t];if(n!==void 0)return n;let{tags:r}=this;for(let a=r.length-1;a>=0;a--)if(n=r[a].ns[t],n!==void 0)return n;return n=this.ns[t],n!==void 0?n:(i=(s=this.opt).resolvePrefix)===null||i===void 0?void 0:i.call(s,t)}qname(t){let s=t.indexOf(":");if(s===-1)return{prefix:"",local:t};let i=t.slice(s+1),n=t.slice(0,s);return(n===""||i===""||i.includes(":"))&&this.fail(`malformed name: ${t}.`),{prefix:n,local:i}}processAttribsNS(){var t;let{attribList:s}=this,i=this.tag;{let{prefix:a,local:o}=this.qname(i.name);i.prefix=a,i.local=o;let c=i.uri=(t=this.resolve(a))!==null&&t!==void 0?t:"";a!==""&&(a==="xmlns"&&this.fail('tags may not have "xmlns" as prefix.'),c===""&&(this.fail(`unbound namespace prefix: ${JSON.stringify(a)}.`),i.uri=a))}if(s.length===0)return;let{attributes:n}=i,r=new Set;for(let a of s){let{name:o,prefix:c,local:_}=a,p,d;c===""?(p=o==="xmlns"?I:"",d=o):(p=this.resolve(c),p===void 0&&(this.fail(`unbound namespace prefix: ${JSON.stringify(c)}.`),p=c),d=`{${p}}${_}`),r.has(d)&&this.fail(`duplicate attribute: ${d}.`),r.add(d),a.uri=p,n[o]=a}this.attribList=[]}processAttribsPlain(){let{attribList:t}=this,s=this.tag.attributes;for(let{name:i,value:n}of t)s[i]!==void 0&&this.fail(`duplicate attribute: ${i}.`),s[i]=n;this.attribList=[]}openTag(){var t;this.processAttribs();let{tags:s}=this,i=this.tag;i.isSelfClosing=!1,(t=this.openTagHandler)===null||t===void 0||t.call(this,i),s.push(i),this.state=A,this.name=""}openSelfClosingTag(){var t,s,i;this.processAttribs();let{tags:n}=this,r=this.tag;r.isSelfClosing=!0,(t=this.openTagHandler)===null||t===void 0||t.call(this,r),(s=this.closeTagHandler)===null||s===void 0||s.call(this,r),(this.tag=(i=n[n.length-1])!==null&&i!==void 0?i:null)===null&&(this.closedRoot=!0),this.state=A,this.name=""}closeTag(){let{tags:t,name:s}=this;if(this.state=A,this.name="",s===""){this.fail("weird empty close tag."),this.text+="</>";return}let i=this.closeTagHandler,n=t.length;for(;n-- >0;){let r=this.tag=t.pop();if(this.topNS=r.ns,i?.(r),r.name===s)break;this.fail("unexpected close tag.")}n===0?this.closedRoot=!0:n<0&&(this.fail(`unmatched closing tag: ${s}.`),this.text+=`</${s}>`)}parseEntity(t){if(t[0]!=="#"){let i=this.ENTITIES[t];return i!==void 0?i:(this.fail(this.isName(t)?"undefined entity.":"disallowed character in entity name."),`&${t};`)}let s=NaN;return t[1]==="x"&&/^#x[0-9a-f]+$/i.test(t)?s=parseInt(t.slice(2),16):/^#[0-9]+$/.test(t)&&(s=parseInt(t.slice(1),10)),this.isChar(s)?String.fromCodePoint(s):(this.fail("malformed character entity."),`&${t};`)}};B.SaxesParser=gt});var ue=Rt(Ct(),1);var Ts=1e4,bs=5e7,As=25e7,de=5e6,fe=256,pe=65536,_t=256,me=3e4,l=class extends Error{constructor(s,i){super(`${s}: ${i}`);this.code=s}},Rs="http://schemas.openxmlformats.org/package/2006/relationships",Ns="http://schemas.openxmlformats.org/package/2006/content-types",Fs=new Set(["http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument","http://purl.oclc.org/ooxml/officeDocument/relationships/officeDocument"]),Ss=["application/vnd.openxmlformats-officedocument.wordprocessingml.document.main","application/vnd.ms-word.document.main"];function ge(e){return e.length===0?"empty name":e.includes("\\")?"backslash":e.includes("\0")?"NUL byte":e.startsWith("/")?"absolute path":/^[a-zA-Z]:/.test(e)?"drive letter":e.split("/").some(t=>t==="..")?"dot-dot segment":null}function ws(e,t){let s=Math.max(0,e.length-65557),i=-1;for(let _=e.length-22;_>=s;_--)if(e.readUInt32LE(_)===101010256){i=_;break}if(i<0)throw new l("DOCX_UNREADABLE","not a zip archive (no end-of-central-directory)");let n=e.readUInt16LE(i+10);if(n>t)throw new l("DOCX_TOO_MANY_PARTS",`${n} entries > ${t} cap`);let r=e.readUInt32LE(i+16),a=[],o=new Set,c=r;for(let _=0;_<n;_++){if(c+46>e.length||e.readUInt32LE(c)!==33639248)throw new l("DOCX_UNREADABLE","malformed central directory");let p=e.readUInt32LE(c+16),d=e.readUInt16LE(c+28),h=e.readUInt16LE(c+30),m=e.readUInt16LE(c+32),u=e.subarray(c+46,c+46+d).toString("utf8"),b=ge(u);if(b!==null)throw new l("DOCX_UNREADABLE",`unsafe entry name (${b}): ${JSON.stringify(u)}`);if(o.has(u))throw new l("DOCX_UNREADABLE",`duplicate entry: ${u}`);o.add(u),a.push({name:u,crc:p}),c+=46+d+h+m}return a}function ks(e,t){let s=new Map,i=0,n=null,r=o=>{n||(n=o)},a=new St(o=>{let c=ge(o.name);if(c!==null){r(new l("DOCX_UNREADABLE",`unsafe entry name (${c}): ${JSON.stringify(o.name)}`));return}let _=[],p=0;o.ondata=(d,h,m)=>{if(d){r(new l("DOCX_UNREADABLE",`entry ${o.name}: ${d.message??String(d)}`));return}if(h&&h.length>0){if(p+=h.length,i+=h.length,p>t.maxPartBytes){r(new l("DOCX_PART_TOO_LARGE",`${o.name}: ${p} actual bytes > ${t.maxPartBytes} cap`));return}if(i>t.maxTotalBytes){r(new l("DOCX_BOMB",`total actual inflated bytes exceed ${t.maxTotalBytes} cap`));return}_.push(h)}m&&!n&&s.set(o.name,Buffer.concat(_))},o.start()});a.register(Nt),a.register(Ft);try{for(let o=0;o<e.length;o+=65536)if(a.push(e.subarray(o,Math.min(o+65536,e.length)),o+65536>=e.length),n)throw n}catch(o){throw o instanceof l?o:new l("DOCX_UNREADABLE",`zip stream: ${o instanceof Error?o.message:String(o)}`)}if(n)throw n;return s}function xe(e,t,s){let i=new ue.SaxesParser({xmlns:!0}),n=null;if(i.on("doctype",()=>{n=new l("DOCX_UNREADABLE",`DOCTYPE not allowed (${t})`)}),i.on("error",r=>{n=n??new l("DOCX_UNREADABLE",`${t}: ${r.message}`)}),i.on("opentag",r=>{if(n)return;let a={};for(let[o,c]of Object.entries(r.attributes))a[c.local||o]=c.value;s(r.uri??"",r.local,a)}),i.write(e).close(),n)throw n}function le(e,t){let s=new Map;return xe(e,t,(i,n,r)=>{i===Rs&&n==="Relationship"&&r.Id&&r.Type&&r.Target!==void 0&&s.set(r.Id,{type:r.Type,target:r.Target,targetMode:r.TargetMode==="External"?"External":"Internal"})}),s}function vs(e){let t=new Map,s=new Map;return xe(e,"[Content_Types].xml",(i,n,r)=>{i===Ns&&(n==="Default"&&r.Extension&&r.ContentType?t.set(r.Extension.toLowerCase(),r.ContentType):n==="Override"&&r.PartName&&r.ContentType&&s.set(r.PartName.replace(/^\//,""),r.ContentType))}),{defaults:t,overrides:s}}function Os(e,t){let s=e.overrides.get(t);if(s)return s;let i=t.lastIndexOf(".");if(!(i<0))return e.defaults.get(t.slice(i+1).toLowerCase())}function ce(e,t){if(/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(t)||t.includes("\\")||t.includes("\0"))return null;let s;try{s=decodeURIComponent(t)}catch{return null}let i=s.startsWith("/")?[]:e.split("/").slice(0,-1).filter(n=>n.length>0);for(let n of s.split("/"))if(!(n===""||n===".")){if(n===".."){if(i.length===0)return null;i.pop();continue}i.push(n)}return i.length>0?i.join("/"):null}var Ms=Buffer.from([208,207,17,224,161,177,26,225]);function $(e){try{return e.length>=3&&e[0]===239&&e[1]===187&&e[2]===191?new TextDecoder("utf-8",{fatal:!0}).decode(e.subarray(3)):e.length>=2&&e[0]===255&&e[1]===254?new TextDecoder("utf-16le",{fatal:!0}).decode(e.subarray(2)):e.length>=2&&e[0]===254&&e[1]===255?new TextDecoder("utf-16be",{fatal:!0}).decode(e.subarray(2)):new TextDecoder("utf-8",{fatal:!0}).decode(e)}catch{throw new l("DOCX_UNREADABLE","XML part is not valid UTF-8/UTF-16 text")}}function Ce(e,t){if(e.length>=8&&e.subarray(0,8).equals(Ms))throw new l("DOCX_ENCRYPTED_OR_LEGACY","password-protected Office file (or a legacy .doc renamed .docx) \u2014 remove the password / save as .docx and re-ingest");let s={maxEntries:t?.maxEntries??Ts,maxPartBytes:t?.maxPartBytes??bs,maxTotalBytes:t?.maxTotalBytes??As},i=ws(e,s.maxEntries),n=ks(e,s),r=new Map(i.map(h=>[h.name,h]));if(n.size!==i.length)throw new l("DOCX_UNREADABLE",`central directory lists ${i.length} entries, stream produced ${n.size}`);for(let[h,m]of n){let u=r.get(h);if(!u)throw new l("DOCX_UNREADABLE",`entry ${h} missing from central directory`);if(vt(m)!==u.crc)throw new l("DOCX_UNREADABLE",`CRC mismatch: ${h}`)}let a=n.get("_rels/.rels");if(!a)throw new l("DOCX_NOT_WORDPROCESSING","no package relationships (_rels/.rels missing)");let o=le($(a),"_rels/.rels"),c=null;for(let h of o.values()){if(!Fs.has(h.type)||h.targetMode!=="Internal")continue;let m=ce("",h.target);if(m!==null&&n.has(m)){c=m;break}}if(c===null)throw new l("DOCX_NOT_WORDPROCESSING","this zip is not a Word document (no officeDocument relationship)");let _=n.get("[Content_Types].xml");if(!_)throw new l("DOCX_NOT_WORDPROCESSING","package has no [Content_Types].xml");let p=Os(vs($(_)),c);if(!p||!Ss.some(h=>p.startsWith(h)))throw new l("DOCX_NOT_WORDPROCESSING",`this zip is not a Word document (main part content type: ${p??"unknown"} \u2014 pptx/xlsx or unknown package)`);let d=new Map;return{parts:n,mainPart:c,relsFor(h){let m=d.get(h);if(m)return m;let u=h.lastIndexOf("/"),b=`${u>=0?h.slice(0,u+1):""}_rels/${u>=0?h.slice(u+1):h}.rels`,g=n.get(b),E=g?le($(g),b):new Map;return d.set(h,E),E},resolveTarget:ce}}var Ee=Rt(Ct(),1);var Z=new Set(["http://schemas.openxmlformats.org/wordprocessingml/2006/main","http://purl.oclc.org/ooxml/wordprocessingml/main"]),Ps=new Set(["http://schemas.openxmlformats.org/drawingml/2006/main","http://purl.oclc.org/ooxml/drawingml/main"]),Ls=new Set(["http://schemas.openxmlformats.org/officeDocument/2006/math","http://purl.oclc.org/ooxml/officeDocument/math"]),_e="urn:schemas-microsoft-com:vml",Et="http://schemas.openxmlformats.org/markup-compatibility/2006",J=class{constructor(t,s,i=n=>this.tokens.push(n)){this.partName=t;this.budget=s;this.sink=i}tokens=[];storyRefs=[];stack=[];skipUntilDepth=[];fields=[];runVanish=[];acStack=[];txbxDepths=[];drawing=null;failed=null;setSink(t){this.sink=t}fail(t){this.failed||(this.failed=t)}abort(t){throw!this.failed&&t instanceof l&&(this.failed=t),t}emit(t){this.failed||(this.drawing&&t.t==="text"&&this.txbxDepths.length>0&&(this.drawing.emittedContent=!0),this.sink(t))}suppressed(){return this.skipUntilDepth.length>0}inInstruction(){return this.fields.some(t=>!t.hasSeparate)}parent(){return this.stack.length>=2?this.stack[this.stack.length-2]:void 0}depth(){return this.stack.length}onOpen(t,s,i){if(this.failed)return;this.budget.nodesRemaining-=1,this.budget.nodesRemaining<0&&this.abort(new l("DOCX_UNREADABLE",`XML node budget exhausted (${this.partName})`)),(this.budget.nodesRemaining&4095)===0&&this.budget.deadline!==void 0&&Date.now()>this.budget.deadline&&this.abort(new l("DOCX_UNREADABLE",`conversion budget exhausted (${this.partName})`)),this.stack.push({uri:t,local:s});let n=this.depth();if(n>_t&&this.abort(new l("DOCX_UNREADABLE",`XML nesting exceeds ${_t} (${this.partName})`)),this.suppressed())return;if(t===Et&&s==="AlternateContent"){this.acStack.push({branchTaken:!1});return}if(t===Et&&(s==="Choice"||s==="Fallback")){let a=this.acStack[this.acStack.length-1];if(!a)return;a.branchTaken?this.skipUntilDepth.push(n):a.branchTaken=!0;return}let r=Z.has(t);if((r&&s==="txbxContent"||t===_e&&s==="textbox")&&this.txbxDepths.push(n),r&&(s==="del"||s==="moveFrom"||s==="sdtPr"||s==="delText"||s==="pPrChange"||s==="rPrChange"||s==="sectPrChange"||s==="tblPrChange"||s==="trPrChange"||s==="tcPrChange")){this.skipUntilDepth.push(n);return}if(Ls.has(t)&&(s==="oMath"||s==="oMathPara")){this.emit({t:"marker",value:"[equation omitted]"}),this.skipUntilDepth.push(n);return}if(r&&s==="altChunk"){this.emit({t:"marker",value:"[embedded content omitted]"}),this.skipUntilDepth.push(n);return}if(r&&s==="tabs"){this.skipUntilDepth.push(n);return}if(r){switch(s){case"r":this.runVanish.push(!1);break;case"vanish":{let a=i.val;this.parent()?.local==="rPr"&&a!=="false"&&a!=="0"&&this.runVanish.length>0&&(this.runVanish[this.runVanish.length-1]=!0);break}case"fldChar":{let a=i.fldCharType;if(a==="begin")this.fields.push({hasSeparate:!1});else if(a==="separate"){let o=this.fields[this.fields.length-1];o&&(o.hasSeparate=!0)}else if(a==="end"){let o=this.fields.pop();o&&!o.hasSeparate&&this.emit({t:"marker",value:"[field: no stored result]"})}break}case"tab":this.parent()?.local==="r"&&!this.textSuppressed()&&this.emit({t:"tab"});break;case"br":case"cr":this.textSuppressed()||this.emit({t:"break"});break;case"noBreakHyphen":this.textSuppressed()||this.emit({t:"text",value:"\u2011"});break;case"softHyphen":break;case"sym":this.textSuppressed()||this.emit({t:"marker",value:"[symbol]"});break;case"numPr":this.parent()?.local==="pPr"&&this.emit({t:"marker",value:"- "});break;case"footnoteReference":i.id!==void 0&&!this.textSuppressed()&&this.emit({t:"note-ref",noteKind:"footnote",id:i.id});break;case"endnoteReference":i.id!==void 0&&!this.textSuppressed()&&this.emit({t:"note-ref",noteKind:"endnote",id:i.id});break;case"headerReference":case"footerReference":{let a=i.id;if(a){let o=i.type==="first"?"first":i.type==="even"?"even":"default";this.storyRefs.push({kind:s==="headerReference"?"header":"footer",type:o,relId:a})}break}case"drawing":this.drawing||(this.drawing={relId:null,kind:"drawing",external:!1,found:!1,emittedContent:!1});break;case"pict":case"object":this.drawing||(this.drawing={relId:null,kind:"vml",external:!1,found:!1,emittedContent:!1});break}return}if(Ps.has(t)&&s==="blip"&&this.drawing&&!this.drawing.found){let a=this.relAttr(i,"embed"),o=this.relAttr(i,"link");a?(this.drawing.relId=a,this.drawing.external=!1,this.drawing.found=!0):o&&(this.drawing.relId=o,this.drawing.external=!0,this.drawing.found=!0);return}if(t===_e&&s==="imagedata"&&this.drawing&&!this.drawing.found){let a=this.relAttr(i,"id")??i.relid;a&&(this.drawing.relId=a,this.drawing.kind="vml",this.drawing.found=!0);return}}onClose(){let t=this.depth();this.skipUntilDepth[this.skipUntilDepth.length-1]===t&&this.skipUntilDepth.pop(),this.txbxDepths[this.txbxDepths.length-1]===t&&this.txbxDepths.pop();let i=this.stack.pop();if(!(!i||this.failed)&&!this.suppressed()){if(i.uri===Et&&i.local==="AlternateContent"){this.acStack.pop();return}if(Z.has(i.uri))switch(i.local){case"r":this.runVanish.pop();break;case"p":this.emit({t:"para-end"});break;case"tc":this.emit({t:"table-cell-end"});break;case"tr":this.emit({t:"table-row-end"});break;case"drawing":case"pict":case"object":{let n=this.drawing;if(this.drawing=null,!n)break;n.found?this.emit({t:"image",relId:n.relId,kind:n.kind,external:n.external}):n.emittedContent||this.emit({t:"marker",value:"[object omitted: drawing]"});break}}}}onText(t){if(this.failed||this.suppressed()||t.length===0)return;let s=this.stack[this.stack.length-1];!s||!Z.has(s.uri)||s.local==="t"&&(this.textSuppressed()||(this.budget.textCharsRemaining!==void 0&&(this.budget.textCharsRemaining-=t.length,this.budget.textCharsRemaining<0&&this.abort(new Error(`PROJECTION_TOO_LARGE: projection text exceeds the conversion cap during the walk (${this.partName}) \u2014 split the document and re-ingest`))),this.emit({t:"text",value:t})))}textSuppressed(){return this.inInstruction()?!0:this.runVanish.length>0&&this.runVanish[this.runVanish.length-1]}relAttr(t,s){return t[s]}run(t){let s=new Ee.SaxesParser({xmlns:!0});if(s.on("doctype",()=>{this.fail(new l("DOCX_UNREADABLE",`DOCTYPE not allowed (${this.partName})`))}),s.on("error",i=>{this.fail(new l("DOCX_UNREADABLE",`${this.partName}: ${i.message}`))}),s.on("opentag",i=>{let n={},r=Object.entries(i.attributes);r.length>fe&&this.abort(new l("DOCX_UNREADABLE",`too many attributes (${this.partName})`));for(let[a,o]of r)o.value.length>pe&&this.abort(new l("DOCX_UNREADABLE",`oversized attribute (${this.partName})`)),n[o.local||a]=o.value;this.onOpen(i.uri??"",i.local,n)}),s.on("closetag",()=>this.onClose()),s.on("text",i=>this.onText(i)),s.write(t).close(),this.failed)throw this.failed}};function De(e,t){let s=t.budget??{nodesRemaining:Number.MAX_SAFE_INTEGER},i=new J(t.partName,s);return i.run(e),{tokens:i.tokens,storyRefs:i.storyRefs}}var Dt=class extends J{notes=new Map;current=null;noteDepth=0;constructor(t,s){super(t,s),this.setSink(i=>this.current?.push(i))}onOpen(t,s,i){super.onOpen(t,s,i),!(!Z.has(t)||s!=="footnote"&&s!=="endnote")&&(i.type!==void 0&&i.type!=="normal"||(this.current=[],i.id!==void 0&&this.notes.set(i.id,this.current),this.noteDepth=this.depth()))}onClose(){let t=this.depth();super.onClose(),this.noteDepth===t&&(this.current=null,this.noteDepth=0)}};function Te(e,t){let s=new Dt(t.partName,t.budget??{nodesRemaining:Number.MAX_SAFE_INTEGER});return s.run(e),s.notes}var Is="v1",Bs="1.0.0+saxes6.0.0+fflate0.8.3+pngjs7.0.0+jpeg-js0.4.4",Xs=64,$s=16,Hs=12e6,Ws=6e6,Us=5e7,Vs=new Set(["http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes","http://purl.oclc.org/ooxml/officeDocument/relationships/footnotes"]),Gs=new Set(["http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes","http://purl.oclc.org/ooxml/officeDocument/relationships/endnotes"]),qs={png:"image/png",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",bmp:"image/bmp",tiff:"image/tiff",emf:"image/emf",wmf:"image/wmf",unknown:"application/octet-stream"},js=new Set(["png","jpeg","webp"]);function zs(e){if(e==="body")return"in body";if(e.startsWith("header:"))return"in header";if(e.startsWith("footer:"))return"in footer";let t=/^(footnote|endnote):(.+)$/.exec(e);return t?`in ${t[1]} ${t[2]}`:`in ${e}`}var At=class{constructor(t,s){this.pkg=t;this.caps=s}inventory=[];blobs=new Map;delivered=[];n=0;deliveredBytes=0;firstRefByFp=new Map;count(){return this.n}occurrence(t,s,i){this.n+=1;let n=`i${this.n}`,r=zs(i),a=(g,E,S)=>{this.inventory.push({ref:n,loc:i,media_type:g,...S?.blob?{blob:S.blob}:{},...S?.appearance?{appearance:S.appearance}:{},delivery:E,...S?.duplicate_of?{duplicate_of:S.duplicate_of}:{}})},o=g=>`[img#${n} omitted: ${g}]`,c=t.relId!==null?this.pkg.relsFor(s).get(t.relId):void 0;if(t.external||c?.targetMode==="External")return a("application/octet-stream","external-image-not-fetched"),o("external-image-not-fetched");let _=c?this.pkg.resolveTarget(s,c.target):null,p=_!==null?this.pkg.parts.get(_):void 0;if(!p)return a("application/octet-stream","undecodable"),o("undecodable");let d=Ot(p),h=qs[d.format],m=wt(p);if(this.blobs.set(m,p),!js.has(d.format)){let g=d.format==="gif"||d.format==="bmp"||d.format==="tiff"?"unsupported-vision-media-type":"unsupported-image-kind";return a(h,g,{blob:m}),o(g)}if(d.width===void 0||d.height===void 0||d.width*d.height>this.caps.maxPixels)return a(h,"undecodable",{blob:m}),o("undecodable");let u;if(d.format==="png"||d.format==="jpeg"){let g=Mt(p,d.format);if(g===null)return a(h,"undecodable",{blob:m}),o("undecodable");u=kt(g.data,{width:g.width,height:g.height,channels:g.channels})}if(d.width<this.caps.dimensionFloor||d.height<this.caps.dimensionFloor)return a(h,"below-dimension-floor",{blob:m,appearance:u}),o("below-dimension-floor");let b=this.firstRefByFp.get(m);return b!==void 0?(a(h,"duplicate",{blob:m,appearance:u,duplicate_of:b}),`[img#${n}: image ${r} \u2014 same as img#${b}; cite img#${b}]`):p.byteLength>this.caps.imageMaxBytes?(a(h,"image-too-large",{blob:m,appearance:u}),o("image-too-large")):this.deliveredBytes+p.byteLength>this.caps.visionByteBudget?(a(h,"vision-byte-budget-reached",{blob:m,appearance:u}),o("vision-byte-budget-reached")):this.delivered.length>=this.caps.imageCap?(a(h,"image-cap-reached",{blob:m,appearance:u}),o("image-cap-reached")):(this.firstRefByFp.set(m,n),this.deliveredBytes+=p.byteLength,this.delivered.push(n),a(h,"selected",{blob:m,appearance:u}),`[img#${n}: image ${r}]`)}};function Tt(e,t){let s=[];for(let i of e)switch(i.t){case"text":s.push(i.value);break;case"tab":s.push(" ");break;case"break":s.push(`
11
+ `);break;case"para-end":s.push(`
12
+ `);break;case"table-cell-end":s[s.length-1]===`
13
+ `&&s.pop(),s.push(" ");break;case"table-row-end":s[s.length-1]===" "&&s.pop(),s.push(`
14
+ `);break;case"marker":s.push(i.value);break;case"note-ref":s.push(`[${i.noteKind} ${i.id}]`);break;case"image":{let n=t(i);n!==null&&s.push(n);break}}return s.join("")}function bt(e){let t=0;for(let s of e)s.t==="text"&&(t+=s.value.length);return t}function be(e,t,s){let i=e.parts.get(t);if(!i)throw new l("DOCX_UNREADABLE",`referenced part missing: ${t}`);return De($(i),{partName:t,budget:s})}async function ci(e,t){let s=Date.now()+(t?.budgetMs??me),i=u=>{if(Date.now()>s)throw new l("DOCX_UNREADABLE",`conversion budget exhausted (${u})`)},n=Ce(e),r={nodesRemaining:de,textCharsRemaining:2*4e5,deadline:s},a={dimensionFloor:t?.caps?.dimensionFloor??Xs,imageCap:t?.caps?.imageCap??$s,visionByteBudget:t?.caps?.visionByteBudget??Hs,imageMaxBytes:t?.caps?.imageMaxBytes??Ws,maxPixels:t?.caps?.maxPixels??Us},o=new At(n,a),c=be(n,n.mainPart,r);i(n.mainPart);let _=bt(c.tokens),p=[Tt(c.tokens,u=>o.occurrence(u,n.mainPart,"body"))],d=n.relsFor(n.mainPart),h=new Set;for(let u of["header","footer"])for(let b of c.storyRefs.filter(g=>g.kind===u)){let g=d.get(b.relId);if(!g||g.targetMode!=="Internal")continue;let E=n.resolveTarget(n.mainPart,g.target);if(E===null||!n.parts.has(E)||h.has(E))continue;h.add(E);let S=be(n,E,r);i(E),_+=bt(S.tokens);let R=b.type==="default"?`[${u}]`:`[${u} ${b.type}]`;p.push(`${R}
15
+ ${Tt(S.tokens,H=>o.occurrence(H,E,`${u}:${E}`))}`)}for(let[u,b]of[["footnote",Vs],["endnote",Gs]]){let g=[];for(let R of c.tokens)R.t==="note-ref"&&R.noteKind===u&&!g.includes(R.id)&&g.push(R.id);if(g.length===0)continue;let E=null;for(let R of d.values())if(b.has(R.type)&&R.targetMode==="Internal"){E=n.resolveTarget(n.mainPart,R.target);break}if(E===null||!n.parts.has(E))continue;let S=Te($(n.parts.get(E)),{partName:E,budget:r});i(E);for(let R of g){let H=S.get(R);if(!H)continue;_+=bt(H);let Ae=E;p.push(`[${u} ${R}]
16
+ ${Tt(H,Re=>o.occurrence(Re,Ae,`${u}:${R}`))}`)}}if(_===0&&o.count()===0)throw new l("DOCX_NO_TEXT","no extractable text or images \u2014 nothing citable in this document");let m=p.join("");return m.endsWith(`
17
+ `)||(m+=`
18
+ `),{projection:m,inventory:o.inventory,blobs:o.blobs,delivered:o.delivered,converter:{name:"ooxml-walk",version:Bs,policy:Is}}}export{Is as a,Bs as b,Xs as c,$s as d,Hs as e,Ws as f,Us as g,Tt as h,ci as i};
19
+ /*! Bundled license information:
20
+
21
+ xmlchars/xml/1.0/ed5.js:
22
+ (**
23
+ * Character classes and associated utilities for the 5th edition of XML 1.0.
24
+ *
25
+ * @author Louis-Dominique Dubeau
26
+ * @license MIT
27
+ * @copyright Louis-Dominique Dubeau
28
+ *)
29
+
30
+ xmlchars/xml/1.1/ed2.js:
31
+ (**
32
+ * Character classes and associated utilities for the 2nd edition of XML 1.1.
33
+ *
34
+ * @author Louis-Dominique Dubeau
35
+ * @license MIT
36
+ * @copyright Louis-Dominique Dubeau
37
+ *)
38
+
39
+ xmlchars/xmlns/1.0/ed3.js:
40
+ (**
41
+ * Character class utilities for XML NS 1.0 edition 3.
42
+ *
43
+ * @author Louis-Dominique Dubeau
44
+ * @license MIT
45
+ * @copyright Louis-Dominique Dubeau
46
+ *)
47
+ */