@testmuai/kane-cli 0.6.10 → 0.7.0

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 (157) hide show
  1. package/dist/ChatSurface-PMEOJBZG.js +8 -0
  2. package/dist/{ChromeProfilePicker-IDKFTIHW.js → ChromeProfilePicker-DK2A3NYY.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-SZOU5FGZ.js → CliFeedbackPrompt-D5QDOBE2.js} +1 -1
  4. package/dist/{CliUploadProgress-W2FC33Q4.js → CliUploadProgress-AIZL7N6Z.js} +1 -1
  5. package/dist/{ConfigView-JB2NSZ2N.js → ConfigView-SDBCTYUU.js} +1 -1
  6. package/dist/{EvidenceViewOffer-5YST67KY.js → EvidenceViewOffer-EOKJE2B6.js} +1 -1
  7. package/dist/{FolderPicker-SPNZESAR.js → FolderPicker-IVBHPPMW.js} +1 -1
  8. package/dist/{HelpView-XBDXXHFB.js → HelpView-YYYX4RKI.js} +1 -1
  9. package/dist/{InfoBox-2T7GYSFT.js → InfoBox-MQV3XBT4.js} +1 -1
  10. package/dist/{LinksBox-2NNZZDQT.js → LinksBox-NCFNBUMW.js} +1 -1
  11. package/dist/{ProfilesView-KJZVGU5B.js → ProfilesView-6GXF6CP2.js} +1 -1
  12. package/dist/{ProjectPicker-AUTZNEPE.js → ProjectPicker-W6XDGNDJ.js} +1 -1
  13. package/dist/{SaveSessionPrompt-LHLSJQSQ.js → SaveSessionPrompt-QF3P7ERS.js} +1 -1
  14. package/dist/SingleShotApp-T673X7BS.js +2 -0
  15. package/dist/{SummaryBox-5G7WULUN.js → SummaryBox-4SZI4XSO.js} +1 -1
  16. package/dist/TestMdRunView-SNYEO6CS.js +2 -0
  17. package/dist/{WhoamiView-XNWBDMQR.js → WhoamiView-N3HAJ3TN.js} +1 -1
  18. package/dist/auth-RXNBQZI2.js +2 -0
  19. package/dist/{bind-FEOGBJ2O.js → bind-NSGW5BBZ.js} +2 -2
  20. package/dist/{bootstrap-T6DSUI34.js → bootstrap-RPT3JOGD.js} +1 -1
  21. package/dist/{bridge-WMGH3O3B.js → bridge-BTSWCJ3B.js} +1 -1
  22. package/dist/{changelog-AGFDNTTW.js → changelog-MI3IPBJS.js} +1 -1
  23. package/dist/{chat-committer-4ENYH3RC.js → chat-committer-OS7ULZMH.js} +1 -1
  24. package/dist/chat-controller-QLORQWJZ.js +2 -0
  25. package/dist/{chunk-JHPZXF77.js → chunk-3CJIMPQK.js} +2 -2
  26. package/dist/{chunk-SKRZN25J.js → chunk-3RZ63RBO.js} +1 -1
  27. package/dist/{chunk-YOFKDRY4.js → chunk-44IWSV6L.js} +1 -1
  28. package/dist/{chunk-7LWXIRI3.js → chunk-4BAMZSFU.js} +1 -1
  29. package/dist/{chunk-TW3K2DKB.js → chunk-4GLYNAK7.js} +1 -1
  30. package/dist/{chunk-7APDXIKI.js → chunk-4SJC64KQ.js} +9 -9
  31. package/dist/{chunk-5Z7GAIPP.js → chunk-4XSW6WZD.js} +2 -2
  32. package/dist/{chunk-6NWPK2MS.js → chunk-5WE4DHXL.js} +1 -1
  33. package/dist/chunk-5YHVK2EO.js +6 -0
  34. package/dist/{chunk-TLL7KFLY.js → chunk-67SSEGDO.js} +1 -1
  35. package/dist/{chunk-L4JIMNKW.js → chunk-6HYW5RFX.js} +1 -1
  36. package/dist/{chunk-A46NBRAP.js → chunk-6W6AIDLJ.js} +1 -1
  37. package/dist/{chunk-VYQMCLKG.js → chunk-77WMTCUQ.js} +1 -1
  38. package/dist/{chunk-SDRFTIRU.js → chunk-7E24OCGX.js} +1 -1
  39. package/dist/chunk-7YPK6EDR.js +4 -0
  40. package/dist/{chunk-RH4GCEFX.js → chunk-A2IQRVPR.js} +1 -1
  41. package/dist/{chunk-YVXC46DY.js → chunk-AIMINJVP.js} +1 -1
  42. package/dist/{chunk-C3OGWCII.js → chunk-AV6E6WLY.js} +2 -2
  43. package/dist/{chunk-5LTUYXMP.js → chunk-AYY7RYMK.js} +1 -1
  44. package/dist/chunk-B4LLKQTK.js +2 -0
  45. package/dist/{chunk-FYDBD7Q4.js → chunk-BCH3JCND.js} +1 -1
  46. package/dist/{chunk-SACSQY3Q.js → chunk-CH3VWCRZ.js} +1 -1
  47. package/dist/{chunk-WSZ7IENQ.js → chunk-CSGQIY7X.js} +3 -3
  48. package/dist/{chunk-QGBLC4ZJ.js → chunk-DFDDUMG5.js} +1 -1
  49. package/dist/{chunk-JTCW76YG.js → chunk-DGIPQINV.js} +1 -1
  50. package/dist/chunk-E5PWL3BG.js +7 -0
  51. package/dist/{chunk-6MTVGARW.js → chunk-EN7NW7DU.js} +1 -1
  52. package/dist/{chunk-QPT4ERGK.js → chunk-F7WKDMX7.js} +1 -1
  53. package/dist/{chunk-7Z64BL5D.js → chunk-FCHTL74E.js} +1 -1
  54. package/dist/{chunk-OSALXGD4.js → chunk-FMR2KPSK.js} +1 -1
  55. package/dist/{chunk-RGDQMKNJ.js → chunk-FRBYGSGJ.js} +1 -1
  56. package/dist/{chunk-KA7Q5IIC.js → chunk-GQ3NCBYR.js} +1 -1
  57. package/dist/{chunk-XZW3TBOV.js → chunk-HOOXUO3X.js} +1 -1
  58. package/dist/{chunk-7C6G4V43.js → chunk-IQODWB32.js} +1 -1
  59. package/dist/{chunk-MBXWXBDM.js → chunk-J2KSZUOO.js} +1 -1
  60. package/dist/{chunk-W54W762O.js → chunk-J3EMJ7US.js} +1 -1
  61. package/dist/{chunk-ZFFRHV5U.js → chunk-JSF5JYZC.js} +1 -1
  62. package/dist/{chunk-MSK7AC4E.js → chunk-K4VIM4RM.js} +2 -2
  63. package/dist/{chunk-2H3XNXL3.js → chunk-KCBS57IF.js} +1 -1
  64. package/dist/chunk-KHQHVSZ6.js +5 -0
  65. package/dist/{chunk-DHF3VO2R.js → chunk-LGVHW4ZA.js} +1 -1
  66. package/dist/{chunk-KK7DYHK6.js → chunk-MAO5BAQI.js} +1 -1
  67. package/dist/{chunk-6CGNLFSN.js → chunk-MTHCUBDF.js} +1 -1
  68. package/dist/{chunk-3KN2UW37.js → chunk-MV4UYTZT.js} +1 -1
  69. package/dist/{chunk-Z25FKS3Y.js → chunk-N4LMQR7C.js} +1 -1
  70. package/dist/{chunk-5F7PU5AJ.js → chunk-NR23HZU4.js} +1 -1
  71. package/dist/chunk-QBCS57EO.js +62 -0
  72. package/dist/{chunk-J4WS2SXT.js → chunk-QQUZF2DZ.js} +1 -1
  73. package/dist/{chunk-WV42KKEU.js → chunk-RCTM7NGT.js} +1 -1
  74. package/dist/{chunk-76I6NJBX.js → chunk-RODHDQU3.js} +1 -1
  75. package/dist/{chunk-AYDUHTPA.js → chunk-RQYS3KGU.js} +1 -1
  76. package/dist/{chunk-MJF3USZF.js → chunk-SBZWFULF.js} +2 -2
  77. package/dist/{chunk-6JTEWZ75.js → chunk-T7ZPMTGS.js} +1 -1
  78. package/dist/chunk-TDPWFYTJ.js +2 -0
  79. package/dist/{chunk-OESHJ4J2.js → chunk-UXPQRALY.js} +2 -2
  80. package/dist/chunk-V3UE6RJP.js +2 -0
  81. package/dist/chunk-VJFFMOUA.js +2 -0
  82. package/dist/{chunk-GWJ76BLF.js → chunk-VYMCE7UR.js} +2 -2
  83. package/dist/{chunk-YJIESLN6.js → chunk-WREVEATJ.js} +1 -1
  84. package/dist/{chunk-XY5KWIRF.js → chunk-WTXHOWUP.js} +1 -1
  85. package/dist/{chunk-LPBAQQ7E.js → chunk-X5P2T7MA.js} +1 -1
  86. package/dist/{chunk-6ZJ7ZFEX.js → chunk-XIXR63FI.js} +1 -1
  87. package/dist/{chunk-ECFOND7B.js → chunk-XLKRV2JH.js} +1 -1
  88. package/dist/{chunk-FEF75YKV.js → chunk-YHQFYZJ5.js} +1 -1
  89. package/dist/chunk-Z2JSEL3I.js +4 -0
  90. package/dist/{config-7WI6TBDV.js → config-5GOFF5F4.js} +1 -1
  91. package/dist/{cover-cmd-J2ZJUL6P.js → cover-cmd-SV3I23UM.js} +1 -1
  92. package/dist/{credentials-MX5ABDPF.js → credentials-GXDXVMXW.js} +1 -1
  93. package/dist/docx-convert-ZBVQO2LG.js +2 -0
  94. package/dist/{dossier-UVTGCL7T.js → dossier-KJSJPWOW.js} +1 -1
  95. package/dist/{evidence-TZYIOSPG.js → evidence-VDNZ3K23.js} +1 -1
  96. package/dist/{evolve-cmd-IDS5ZIUY.js → evolve-cmd-BLSVVW4I.js} +1 -1
  97. package/dist/{explain-VTRHEVUQ.js → explain-EBVIUS2X.js} +1 -1
  98. package/dist/{explain-cmd-NPKN63XL.js → explain-cmd-DBUTPZHA.js} +1 -1
  99. package/dist/{explain-cmd-R3WCNR2A.js → explain-cmd-NWIYH5MI.js} +1 -1
  100. package/dist/{extract-bind-CISTQFI3.js → extract-bind-3SWPBZX6.js} +3 -3
  101. package/dist/{extract-cmd-HG3DHHSL.js → extract-cmd-HEX7F4IS.js} +1 -1
  102. package/dist/{gaps-cmd-XLVUFSTY.js → gaps-cmd-CKCHH3HQ.js} +1 -1
  103. package/dist/{generate-headless-4VJMAHCU.js → generate-headless-LZ4HRSQ4.js} +2 -2
  104. package/dist/index.js +52 -52
  105. package/dist/ingest-FIIO67ZN.js +2 -0
  106. package/dist/ingest-cmd-KRPZVB7W.js +7 -0
  107. package/dist/{interactive-bind-IXFRXBBL.js → interactive-bind-PTAZVCE7.js} +3 -3
  108. package/dist/{lifecycle-cmd-VTFZ3TF2.js → lifecycle-cmd-32LG364Q.js} +1 -1
  109. package/dist/{list-cmd-KXL4WQII.js → list-cmd-UTZ2PQUK.js} +1 -1
  110. package/dist/{list-commands-BJYJ34HT.js → list-commands-WIVODSEL.js} +1 -1
  111. package/dist/{logical-ids-LMBNMENR.js → logical-ids-I7B3VJEH.js} +1 -1
  112. package/dist/login-flow-GX7CTVWN.js +2 -0
  113. package/dist/{maintenance-cmd-UJG4LPWD.js → maintenance-cmd-BZAGSYGI.js} +1 -1
  114. package/dist/{persist-recorded-session-QR7RVAXR.js → persist-recorded-session-J6Z2SCTT.js} +1 -1
  115. package/dist/pipeline-HT7FCEXA.js +2 -0
  116. package/dist/readmodel-S5RAQH3F.js +2 -0
  117. package/dist/{reconcile-cmd-E2MMQM7Z.js → reconcile-cmd-2VHBKFA5.js} +1 -1
  118. package/dist/{recording-banner-QAIKLV6E.js → recording-banner-IRFMIZSJ.js} +1 -1
  119. package/dist/{require-project-folder-OANMHOVE.js → require-project-folder-XSBJGIVF.js} +1 -1
  120. package/dist/{revert-FRXNIP5R.js → revert-RQJE56HF.js} +1 -1
  121. package/dist/{review-cmd-2FCGP55U.js → review-cmd-7LXGYHHQ.js} +1 -1
  122. package/dist/run-4LTYFTF2.js +2 -0
  123. package/dist/run-YGJZ2SXX.js +2 -0
  124. package/dist/{run-test-md-5E53A5DT.js → run-test-md-QCERS7FQ.js} +2 -2
  125. package/dist/{skill-installer-LGEIIQ4Q.js → skill-installer-WAVEVCSG.js} +1 -1
  126. package/dist/{spawner-6FHAXNOA.js → spawner-YNYB4Z7K.js} +1 -1
  127. package/dist/tcg-generate-D35EMRMQ.js +2 -0
  128. package/dist/{testmd-actions-2OFH5GRJ.js → testmd-actions-NB5Z6QJ3.js} +1 -1
  129. package/dist/token-refresh-OY3WLAKD.js +2 -0
  130. package/dist/{validate-basic-Z46MAH2G.js → validate-basic-IJKKRQRU.js} +1 -1
  131. package/dist/{version-check-64M5JQQ7.js → version-check-O5GYZYTP.js} +1 -1
  132. package/dist/{view-cmd-PG66UQK7.js → view-cmd-GQBFCPDL.js} +1 -1
  133. package/dist/{walk-session-7PM2RXEF.js → walk-session-OPAEV4WR.js} +1 -1
  134. package/package.json +6 -6
  135. package/dist/ChatSurface-PLXUGRBV.js +0 -8
  136. package/dist/SingleShotApp-Z2HGSZXG.js +0 -2
  137. package/dist/TestMdRunView-B4IZHRDT.js +0 -2
  138. package/dist/chat-controller-M4QYRH7Y.js +0 -2
  139. package/dist/chunk-26H3PDVN.js +0 -4
  140. package/dist/chunk-2KS2YRIS.js +0 -2
  141. package/dist/chunk-2OQLMW3F.js +0 -7
  142. package/dist/chunk-4OSW2WEN.js +0 -61
  143. package/dist/chunk-GLS46X7N.js +0 -5
  144. package/dist/chunk-JHHMXU76.js +0 -2
  145. package/dist/chunk-KFUZYEHX.js +0 -2
  146. package/dist/chunk-RLZA4VJT.js +0 -4
  147. package/dist/chunk-ZPENY2Q3.js +0 -4
  148. package/dist/docx-convert-IAX54REO.js +0 -2
  149. package/dist/ingest-UAIKHOB4.js +0 -2
  150. package/dist/ingest-cmd-7HJLRLMG.js +0 -4
  151. package/dist/login-flow-KW5T7WRJ.js +0 -2
  152. package/dist/pipeline-L6V24KGN.js +0 -2
  153. package/dist/readmodel-AGAPK2AI.js +0 -2
  154. package/dist/run-FYJZCWYS.js +0 -2
  155. package/dist/run-IOBBB7GN.js +0 -2
  156. package/dist/tcg-generate-CEDA6DZJ.js +0 -2
  157. package/dist/token-refresh-R75DGT4X.js +0 -2
@@ -1,61 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Dt,b as Ot,c as sn}from"./chunk-2XMJ6YAE.js";import{c as nn}from"./chunk-GLS46X7N.js";import{c as Pt,d as Qr}from"./chunk-GWJ76BLF.js";import{d as Yr}from"./chunk-2YQ6TW77.js";import{a as Tt,b as Jr,c as Xe,d as et,e as Zr,f as Lt,g as tn,h as rn}from"./chunk-OIYGGEUL.js";import{a as Te,b as ne,e as _e,f as At,k as zr,p as he,q as xt,t as Wr}from"./chunk-RKWJG3WW.js";import{b as Se}from"./chunk-7APDXIKI.js";import{a as Je,b as Et}from"./chunk-RLZA4VJT.js";import{a as Dr,b as Ct}from"./chunk-2OQLMW3F.js";import{a as Le,b as Xr}from"./chunk-C5UNZ6ZY.js";import{c as en}from"./chunk-S3DAAAE5.js";import{a as we}from"./chunk-WAOCHXJ5.js";import{B as Ur,C as jr,D as Fr,F as Nr,G as $r,I as Br,J as Vr,K as Kr,X as Hr,aa as qr,ba as Gr,j as Ze,x as Or}from"./chunk-OESHJ4J2.js";import{a as Mr}from"./chunk-BC7UVJJB.js";import{i as Ar,k as Rt,l as kt,m as Qe,n as xr,o as Pr}from"./chunk-Y5RNCJAN.js";import{g as Tr,h as Lr}from"./chunk-5LTUYXMP.js";import{a as We}from"./chunk-2WVKOZ6W.js";import{a as Ye,b as Er}from"./chunk-NLCCBXXV.js";import{a as q}from"./chunk-RZ4F3BHX.js";import{a as re}from"./chunk-RH4GCEFX.js";import{a as kr}from"./chunk-E47GFYXA.js";import{a as Ge,c as wt,j as Cr,k as ze,l as _t,m as It}from"./chunk-2KS2YRIS.js";import{join as le,basename as is}from"path";import{existsSync as go,readFileSync as ls}from"fs";function on(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 Ie(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}`;Ie(`[replay-trace] phase: replay ${r}, author ${n}
5
- `)}function ln(e,t){Ie(`[replay-trace] step ${e}: REPLAY ${t==="ok"?"OK":"FAILED"}
6
- `)}function cn(e,t,r){Ie(`[replay-trace] shrink ${e}/${t} \u2192 new boundary ${r}
7
- `)}function dn(e,t){Ie(`[replay-trace] complete-reauthor (${e} shrinks exhausted of ${t})
8
- `)}function Ut(){Ie(`[replay-trace] force-author (--author) \u2014 walker bypassed
9
- `)}function un(e){Ie(`[replay-trace] cancelled at step ${e}
10
- `)}import{join as mn}from"path";function jt(e){let t=Zr(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,stream:!0,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?mn(e.sessionDir,"scratch",String(e.runIndex)):mn(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.evidence&&(r.evidence=Ze(e.evidence.packTestDir,e.evidence.ordinalOffset)),r}async function fn(e){let t=e.forceAuthor?0:et(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,un(i.failedAt??0),{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};if(i.failedAt===null)return{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};let f=Xr({failedAt:i.failedAt,shrinkCount:r,hasRetry:e.hasRetry,maxShrinks:e.maxShrinks});if(f.kind==="fail")return{authorBoundary:-1,cancelledInPhase:n,shrinkCount:r};if(e.acquireLockIfNeeded&&!await e.acquireLockIfNeeded())return{authorBoundary:-1,cancelledInPhase:n,shrinkCount:r};if(e.session.rollback(s),e.accumulator.rollback(o),f.kind==="complete-reauthor")return dn(r+1,e.maxShrinks),{authorBoundary:0,cancelledInPhase:n,shrinkCount:r};r++,cn(r,Le.maxShrinks,f.newAuthorBoundary),t=f.newAuthorBoundary}}var Rs=15e3,Ft=3,pn=[500,1e3];async function Nt(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 tt(t,{from_commit_id:e.fromCommitId,new_commit_id:e.newCommitId},e.auth);return r.ok?{ok:!0,sessionExpiresAt:M(r.body,"session_expires_at")??""}:{ok:!1,...ks(r)}}function ks(e){let t=M(e.body,"error")??M(e.body,"code")??"",r=M(e.body,"message")??M(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 hn(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground/reserve`,r=await tt(t,void 0,e.auth);return r.ok?{ok:!0,sessionExpiresAt:M(r.body,"session_expires_at")??""}:{ok:!1,expired:r.status===404,httpStatus:r.status,message:M(r.body,"message")??M(r.body,"detail")??r.text??`HTTP ${r.status}`}}async function $t(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 tt(t,r,e.auth);return n.ok?{ok:!0,testId:M(n.body,"test_id")??e.testId,testcaseId:M(n.body,"testcase_id")??"",projectId:M(n.body,"project_id"),isTestCaseDeleted:typeof n.body?.is_test_case_deleted=="boolean"?n.body.is_test_case_deleted:void 0}:{ok:!1,...Cs(n)}}function Cs(e){let t=M(e.body,"error")??M(e.body,"code")??"",r=M(e.body,"message")??M(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 De(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 tt(t,r,e.auth);return n.ok?{ok:!0}:{ok:!1,reason:M(n.body,"error")??"other",httpStatus:n.status,message:M(n.body,"message")??M(n.body,"detail")??n.text??`HTTP ${n.status}`}}async function tt(e,t,r){let n=null;for(let s=1;s<=Ft;s++){let o=new AbortController,i=setTimeout(()=>o.abort(),Rs);try{let f=await q(e,{method:"POST",headers:{Authorization:Ye(r.username,r.accessKey),"Content-Type":"application/json",Accept:"application/json"},...t!==void 0?{body:JSON.stringify(t)}:{},signal:o.signal});clearTimeout(i);let a=await f.text(),c=null;if(a)try{c=JSON.parse(a)}catch{}let y=f.status>=500||f.status===408||f.status===429;if(f.ok||!y)return{ok:f.ok,status:f.status,body:c,text:a};if(s<Ft){await gn(pn[s-1]??1e3);continue}return{ok:!1,status:f.status,body:c,text:a}}catch(f){if(clearTimeout(i),n=f,s<Ft){await gn(pn[s-1]??1e3);continue}}}return{ok:!1,status:0,body:null,text:n?.message??"exhausted retries"}}function gn(e){return new Promise(t=>setTimeout(t,e))}function M(e,t){if(typeof e!="object"||e===null)return;let r=e[t];return typeof r=="string"?r:void 0}var Es=60*1e3,bn="lock-heartbeat",me=new Map,Oe=null,As={register:(e,t)=>Qe(e,t),deregister:e=>xr(e),cleanup:(e,t)=>Pr(e,t),remoteLogger:null};function yn(e){if(e!==void 0){let t=me.get(e);t!==void 0&&(clearInterval(t),me.delete(e));return}for(let t of me.values())clearInterval(t);me.clear()}function rt(e){if(me.has(e.testId))return;let t=e.lifecycle??As,r=setInterval(async()=>{let n=await hn({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
- `)}},Es);me.set(e.testId,r),Oe===null&&(Oe=t,t.register(bn,()=>yn()))}function be(e){me.size!==0&&(yn(e),me.size===0&&Oe!==null&&(Oe.deregister(bn),Oe=null))}import{readFileSync as vn,readdirSync as Sn,existsSync as ye,promises as wn}from"fs";import{join as se}from"path";async function xs(e,t){let r=se(e,"steps",`${t.ordinal}-${t.id}`),n;try{n=await wn.readFile(se(r,"screenshot.png"))}catch{return null}let s=null;try{s=JSON.parse(await wn.readFile(se(r,"step.json"),"utf8")).action_id??null}catch{}return{png:n,actionId:s}}function Ko(){let e=[];return{track:t=>{e.push(t.catch(()=>{}))},settle:async()=>{await Promise.all(e)}}}async function _n(e,t,r,n){try{let s=await xs(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}if(!s.actionId){n("warn","SCREENSHOT_SKIP","No action_id in step.json",{ordinal:t.ordinal,id:t.id,reason:"no_action_id"});return}r.enqueue(s.actionId,s.png),n("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{ordinal:t.ordinal,id:t.id,action_id:s.actionId,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 In(e,t,r,n,s,o){try{let i=se(e,"runs",String(t),"run-test");if(!ye(i)){s("warn","SCREENSHOT_SKIP","Runs dir not found",{step_index:r,reason:"runsDir_not_found",path:i});return}let f=i;if(o){let k=se(i,`child-${o}`);if(!ye(k)){s("warn","SCREENSHOT_SKIP","Child dir not found",{step_index:r,child_id:o,reason:"child_dir_not_found",path:k});return}let C=Sn(k).filter(l=>ye(se(k,l,"screenshots")));if(C.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir under child",{step_index:r,child_id:o,reason:"no_child_screenshots_dir"});return}f=se(k,C[0])}else if(!ye(se(i,"screenshots"))){let k=Sn(i).filter(C=>ye(se(i,C,"screenshots")));if(k.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:r,reason:"no_screenshots_dir"});return}f=se(i,k[0])}let a=se(f,"screenshots",`step_${String(r).padStart(3,"0")}.png`);if(!ye(a)){s("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:r,child_id:o,reason:"screenshot_not_found",path:a});return}let c=se(i,"actions.ndjson");if(!ye(c)){s("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:r,reason:"ndjson_not_found"});return}let y=vn(c,"utf-8").trim().split(`
12
- `),w=y[y.length-1];if(!w){s("warn","SCREENSHOT_SKIP","NDJSON empty",{step_index:r,reason:"ndjson_empty"});return}let R=JSON.parse(w).action_id;if(!R){s("warn","SCREENSHOT_SKIP","No action_id in NDJSON",{step_index:r,reason:"no_action_id"});return}let x=vn(a);n.enqueue(R,x),s("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{step_index:r,child_id:o,action_id:R,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 Ps,join as Ts}from"path";function Rn(e,t,r){let n=e.total_runs??1,s=e.run_dir,o,i;if(n>1&&s){let f=Ps(s);o=Array.from({length:n},(a,c)=>Ts(f,String(t+c))),r&&r.length===n&&(i=r)}return{allRunDirs:o,flowObjectives:i}}function kn(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 nt=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(a=>a.rootStepIndex===n),o=this.resolved.rootSteps.find(a=>a.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(a=>a.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 Mt(e){if(!e)return null;let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function Cn(e){return Mt(e.flag)??Mt(e.frontmatter)??(e.configDefault&&e.configDefault!==ze?Mt(e.configDefault):null)}function En(e){return e.resolvedUrl!==null?!1:!((!!e.local||!!e.allowMissingUrl)&&!e.isTTY)}import{spawn as Ls}from"child_process";async function An(e,t,r=100){let n=`${e.replace(/\/+$/,"")}/json/version`,s=await q(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 kr(o.webSocketDebuggerUrl);await new Promise((m,_)=>{i.once("open",m),i.once("error",_)});let f=1,a=new Map;i.on("message",m=>{let _;try{_=JSON.parse(m.toString())}catch{return}if(_.id==null)return;let D=a.get(_.id);D&&(a.delete(_.id),_.error?D.reject(new Error(_.error.message)):D.resolve(_.result))});function c(m,_){let D=f++;return new Promise((ce,Q)=>{a.set(D,{resolve:N=>ce(N),reject:Q});let X={id:D,method:m};_&&(X.params=_),i.send(JSON.stringify(X))})}let w=(await c("Target.getTargets")).targetInfos.find(m=>m.type==="page");if(!w)throw i.close(),new Error("CDP: no page target found");let R=(await c("Browser.getWindowForTarget",{targetId:w.targetId})).windowId,x="",k=!1,C=null,l=!1;i.on("close",()=>{l=!0}),i.on("error",()=>{l=!0});async function K(){if(!k){if(l){k=!0;return}try{let _=(await c("Browser.getWindowBounds",{windowId:R})).bounds,D=`${_.left}:${_.top}:${_.width}:${_.height}`;D!==x&&(x=D,t({left:_.left,top:_.top,width:_.width,height:_.height}))}catch{}k||(C=setTimeout(K,r))}}return K(),{stop(){if(!k){k=!0,C&&clearTimeout(C);try{i.close()}catch{}}}}}var Ds=new Set(["1","true","yes"]);function xn(e){if(e?.headless)return null;let t=process.env.KANE_CLI_DISABLE_MARKER;if(t!=null&&Ds.has(t.toLowerCase()))return null;let r=Dr();if(!r)return null;let n=[...r.args,"overlay"];e?.text&&n.push(e.text);let s;try{s=Ls(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 f=null;e?.cdpEndpoint&&An(e.cdpEndpoint,c=>i({type:"bounds",...c})).then(c=>{f=c.stop}).catch(()=>{});let a=!1;return{setRunActive(c){a||i({type:"run_active",active:c})},setStepText(c){if(a)return;let y=c.trim();y&&i({type:"step_text",text:y})},setStepComplete(){a||i({type:"step_complete"})},kill(){if(!a){a=!0,f?.();try{s.stdin?.end()}catch{}try{s.kill("SIGTERM")}catch{}}}}}function Pn(e,t,r){return`${e}/projects/${t}/test-cases/${r}`}function st(e,t,r,n){return`${Pn(e,t,r)}/dashboard/share/${n}?type=summary&agentView=true&fqdn=summary-page`}function Tn(e,t,r,n){if(!(!t||!r||!n))return st(e,t,r,n)}function Ln(e,t,r){return`${Pn(e,t,r)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{mkdtempSync as zs,rmSync as Ys}from"fs";import{join as Ws}from"path";import{tmpdir as Qs}from"os";import{spawn as Un,spawnSync as Os}from"child_process";import{existsSync as Bt}from"fs";import{createConnection as Us}from"net";import{homedir as Ue,platform as Ne}from"os";import{join as je}from"path";var js=new Set(["1","true","yes"]),ot=class extends Error{constructor(t){super(t),this.name="ChromeNotFoundError"}};function mi(e){return e instanceof ot?e.message:`Chrome failed: ${e instanceof Error?e.message:String(e)}`}var it={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",je(Ue(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",je(Ue(),"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",je(Ue(),"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",je(Ue(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",je(Ue(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe")]};function Fs(){if(process.env.KANE_CLI_CHROME_PATH)return process.env.KANE_CLI_CHROME_PATH;let e=Ne(),t=it[e]??it.linux;for(let r of t)if(Bt(r))return r;return e==="win32"?"chrome.exe":"google-chrome"}function Ns(){if(process.env.KANE_CLI_CHROME_PATH)return Bt(process.env.KANE_CLI_CHROME_PATH);let e=Ne();if((it[e]??it.linux).some(s=>Bt(s)))return!0;let r=e==="win32"?"chrome.exe":"google-chrome",n=e==="win32"?"where":"which";try{return Os(n,[r],{stdio:"ignore"}).status===0}catch{return!1}}function $s(){let e=Ne();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 Ms(e){let t=Ne(),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 Bs(e){return new Promise(t=>{let r=Us({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 Vs(){for(let e=_t;e<=It;e++)if(!await Bs(e))return e;throw new Error(`All CDP ports ${_t}-${It} are in use. Close other Chrome instances.`)}var Fe=class extends Error{constructor(t){super(t),this.name="CdpReadinessError"}};async function Ks(e,t){let r=Date.now(),n=`http://127.0.0.1:${e}/json/version`;for(;Date.now()-r<t;){try{if((await q(n)).ok)return`http://127.0.0.1:${e}`}catch{}await new Promise(s=>setTimeout(s,200))}throw new Fe(`Chrome CDP not ready after ${t}ms on port ${e}`)}var Hs=3e4,qs=2;function Dn(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 Gs(e){return Math.min(500*e,3e3)}function On(e,t){try{if(e.pid)if(t==="win32")Un("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 jn(e){let t=process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD;if(!(t!=null&&js.has(t.toLowerCase()))&&!Ns())throw Rt()?.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 ot($s());let n=Ne(),s=Fs(),o=Dn("KANE_CLI_CDP_TIMEOUT_MS",Hs,1),f=Dn("KANE_CLI_CDP_RETRIES",qs,0)+1,a;for(let c=1;c<=f;c++){let y=await Vs(),w=Ms({port:y,...e});e.startUrl&&w.push(e.startUrl);let A=Un(s,w,{stdio:"ignore",detached:!0});A.unref();try{let R=await new Promise((x,k)=>{A.on("error",C=>{k(new Error(`Failed to launch Chrome: ${C.message}. Is Chrome installed at ${s}?`))}),A.on("close",C=>{C!==null&&C!==0&&k(new Fe(`Chrome exited during startup with code ${C}`))}),Ks(y,o).then(x,k)});return{process:A,port:y,cdpEndpoint:R,kill(){On(A,n)}}}catch(R){if(a=R,!(R instanceof Fe))throw R;On(A,n),Rt()?.log("warn","CHROME_CDP_LAUNCH_RETRY",`Chrome CDP launch attempt ${c}/${f} failed`,{attempt:c,max_attempts:f,port:y,timeout_ms:o,headless:e.headless??!1,error:R.message}),c<f&&await new Promise(x=>setTimeout(x,Gs(c)))}}throw a??new Error("Chrome launch failed after retries")}async function Fn(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 q(`${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=zs(Ws(Qs(),"kane-clean-")),t=r;let s=r;Qe("tempDir",()=>{try{Ys(s,{recursive:!0,force:!0})}catch{}})}let n=await jn({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}}function Nn(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,stream:!0,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.evidence&&(t.evidence=Ze(e.evidence.packTestDir,e.evidence.ordinalOffset)),t}import{readdirSync as Js,readFileSync as Mn,existsSync as Bn}from"fs";import{join as Zs}from"path";function $n(e,t){if(!Bn(e))return{};let r={},n;try{n=Js(e).filter(s=>s.endsWith(".json")).sort()}catch{return{}}for(let s of n)try{let o=Mn(Zs(e,s),"utf-8"),i=JSON.parse(o);if(i&&typeof i=="object"){for(let[f,a]of Object.entries(i))if(a&&typeof a=="object"&&"value"in a){let c=a;r[f]={value:c.value,secret:c.secret??!1,syntax:c.syntax??`{{${f}}}`}}}}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 Vn(e){if(!Bn(e))throw new Error(`Variables file not found: ${e}`);let t=Mn(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 Kn(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 Hn(e,t,r){let n=$n(e,r),s=$n(t,r);return{...n,...s}}var Re=class{constructor(t){this.baseUrl=t}async pushSecret(t){let r=Ye(t.username,t.accessKey),n=await q(`${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 ke=class extends Er{constructor(t,r,n){super(t,{username:r,accessKey:n})}async upsertVariable(t){let r=t.environmentId??0,n=await q(`${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 a=await n.json().catch(()=>({}));if(a.type==="Success"&&a.id!=null)return{id:Number(a.id)||0}}let s=await q(`${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 q(`${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 qn(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 Gn(e){let t=Hn(e.globalDir,e.localDir,e.onLoadError),r=e.file?Vn(e.file):{},n=e.inline?Kn(e.inline):{},s={...t,...r,...n},o=Object.keys(s).length>0,{variables:i,objective:f}=o?Se(s,e.objective):{variables:{},objective:e.objective},a=Object.entries(s).filter(([,y])=>y.secret),c=Object.entries(s).filter(([,y])=>!y.secret);return{raw:s,auteur:i,auteurObjective:f,secretEntries:a,nonSecretEntries:c}}async function zn(e){if(e.localMode)return{};let t=re(e.env);if(e.variables.secretEntries.length>0){let n=new Re(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 ke(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 Xs,existsSync as eo}from"fs";function Vt(e){if(!eo(e))return null;try{return Xs(e,"utf-8").trim()||null}catch{return null}}var to=()=>{};async function Yn(e,t,r){let n=t.log??to,s=e.session.testId??null,o=null,i=null,f=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(a){n("error","FINALIZE_UPLOAD_ERROR","Upload pipeline threw",{error:String(a)})}if(t.renderFeedbackPrompt)try{i=await t.renderFeedbackPrompt(),i&&s&&t.submitFeedback&&t.submitFeedback(s,i).catch(a=>{n("error","FINALIZE_FEEDBACK_SUBMIT_ERROR","Feedback submit failed",{error:String(a)})})}catch(a){n("error","FINALIZE_FEEDBACK_RENDER_ERROR","Feedback prompt threw",{error:String(a)})}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{f=Tt({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(a){n("error","FINALIZE_RESULT_MD_ERROR","_Result.md write failed",{error:String(a)})}try{xt({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??Te(r.sourcePath),plan:e.session.plan??void 0})}catch(a){n("error","FINALIZE_META_WRITE_ERROR","meta.json write failed",{error:String(a)})}if(o?.codeExportDir)try{let a=e.tuiConfig.code_export?.language??"python";Lt(o.codeExportDir,At(r.sourcePath,"playwright",a))}catch(a){n("error","FINALIZE_CODE_COPY_ERROR","code-export copy failed",{error:String(a)})}}else if(e.session.recorder?.lastWrittenPath){let a=e.session.recorder.lastWrittenPath,c=e.session.getFlows(),y=c.map((R,x)=>({index:x+1,heading:`Step ${x+1}`,verifies:[],headingLine:0,body:{kind:"objective",text:R.objective}})),w=c.map((R,x)=>({rootStepIndex:x+1,status:R.status==="passed"?"passed":R.status==="failed"?"failed":"skipped",duration_s:R.duration,reason:R.reason})),A=w.some(R=>R.status==="failed")?"failed":"passed";try{f=Tt({sourcePath:a,title:e.session.sessionName??"Session",rootSteps:y,outcomes:w,overallStatus:A,startedISO:e.session.startedAt,durationS:w.reduce((R,x)=>R+(x.duration_s??0),0),sessionId:e.session.sessionId})}catch(R){n("error","FINALIZE_TUI_RESULT_MD_ERROR","TUI _Result.md write failed",{error:String(R)})}try{xt({sourcePath:a,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(R){n("error","FINALIZE_TUI_META_WRITE_ERROR","TUI meta.json write failed",{error:String(R)})}if(o?.codeExportDir)try{let R=e.tuiConfig.code_export?.language??"python";Lt(o.codeExportDir,At(a,"playwright",R))}catch(R){n("error","FINALIZE_TUI_CODE_COPY_ERROR","TUI code-export copy failed",{error:String(R)})}e.session.recorder.lastCollisionSuffixed&&process.stderr.write(`Saved to ${a} (renamed: ${e.session.sessionName}_test.md already existed)
19
- `)}try{t.runCleanup?.()}catch(a){n("error","FINALIZE_CLEANUP_ERROR","Cleanup hook threw",{error:String(a)})}try{await e.session.finish("complete")}catch(a){n("error","FINALIZE_SESSION_FINISH_ERROR","session.finish threw",{error:String(a)})}return{uploadResult:o,feedbackChoice:i,resultMdPath:f}}import{readFileSync as Kt,writeFileSync as Ht,existsSync as Qn}from"fs";function Wn(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 f=t[i];if(!f||f.kind!=="author"||f.reason==="downstream-of-divergence"||f.reason==="no-result-md")continue;let a=ro(e,e.steps[i]);switch(f.reason){case"structure-mismatch":n.push(`added/removed: ${a}`);break;case"md5-mismatch":n.push(`modified: ${a}`);break;case"missing-recording":n.push(`re-recorded: ${a}`);break;case"recorded-failed":n.push(`re-authored after failure: ${a}`);break}}if(n.length===0)return"automated commit";let s=n.filter((i,f)=>f===0||n[f-1]!==i),o=s.slice(0,3).join("; ");return s.length>3?`${o}; +${s.length-3} more`:o}function ro(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 no(e,t){if(!(!e.shouldReplaceLocalOutput||!e.resolvedTest||!e.sourcePath||!e.stepRunRecords||!e.outcomes||!e.overallStatus))return async()=>{let{changedUnitFiles:r,legacySweep:n}=await tn({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=ne(s);if(Qn(`${o}.staging`)){zr(o);let i=n.find(f=>f.unitFile===s);i&&rn(i.dirs)}}}}function so(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=Wn(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 $t({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=_e(e.sourcePath);try{let i=JSON.parse(Kt(o,"utf8"));i.commit_id=e.newCommitId,Ht(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 De({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}}),be(o.testId);continue}let i=e.resolvedTest.steps.filter(c=>c.owningFile===o.file),f=i.map(c=>c.objective).filter(c=>typeof c=="string"&&c.length>0).slice(0,50),a=await $t({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:f},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(a.ok){let c=_e(o.file);try{let y=JSON.parse(Kt(c,"utf8"));y.commit_id=e.newCommitId,Ht(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}): ${a.reason??""} ${a.message??""}
24
- `)}return s}}function oo(e){if(!(!e.isFirstRun||!e.sourcePath))return async t=>{if(!e.sourcePath)return;let r=_e(e.sourcePath);try{let n=Qn(r)?JSON.parse(Kt(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),Ht(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 Jn(e){let t=re(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??"",f=s.resolvedCreds?.access_key??s.basicAuth?.access_key??"",a=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),R=n.auteurVariables,x=Object.keys(R).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,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:a,userId:c,tmsUsername:i,tmsAccessKey:f,screenshotBaseUrl:n.screenshotBaseUrl,screenshotExtMap:e.screenshotExtMap,shareApiBaseUrl:t.shareApiBaseUrl,variables:x?R:void 0,variableIds:e.variableIds,secrets:y,codeExport:e.codeExport,onProgress:e.onProgress,log:e.log,shouldUploadArtifacts:e.shouldUploadArtifacts,shouldReplaceLocalOutput:e.shouldReplaceLocalOutput,shouldCommit:e.shouldCommit,isFirstRun:e.isFirstRun,onAtomicReplace:no(e,r),onCommitLock:so(e,r),onFinalizeSuccess:oo(e),evidence:e.evidence,evidenceRead:e.evidenceRead,authoredExecutionPath:e.authoredExecutionPath}}var Zn=["python","javascript"];function io(e){if(e!==void 0){if(!Zn.includes(e))throw new Error(`--code-language must be one of: ${Zn.join(", ")} (got "${e}")`);return e}}function Xn(e,t){let r=io(e.codeLanguage);return{enabled:e.codeExport??t.enabled,language:r??t.language,skipValidation:e.skipCodeValidation??t.skip_validation}}async function es(e){try{let r=await new We(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});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 ao=null,lo=()=>ao??=import("sharp").then(e=>e.default??e).catch(()=>null),at=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 lo();if(s)try{let a=await s(t.buffer).webp({quality:80}).toBuffer();r=new Uint8Array(a)}catch(a){r=new Uint8Array(t.buffer),n="image/png",this.log?.("warn","SCREENSHOT_CONVERT_FAILED","WebP conversion failed, using PNG",{operation_id:t.operationId,error:a instanceof Error?a.message:String(a)})}else r=new Uint8Array(t.buffer),n="image/png";let o=n==="image/webp"?"webp":"png",i=`test_screenshots/untagged_screenshot/${t.operationId}.${o}`,f=`${this.sas.base_url}/${this.sas.container}/${i}?${this.sas.sas_token}`;for(let a=0;a<=this.maxRetries;a++)try{let c=await q(f,{method:"PUT",headers:{"Content-Type":n,"x-ms-blob-type":"BlockBlob"},body:r});if(c.ok){this.uploadedExt.set(t.operationId,o);return}if(a<this.maxRetries){await this.backoff(a);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(a<this.maxRetries){await this.backoff(a);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 co,arch as uo}from"os";function ts(e){let t={proxyUrl:Cr,sessionId:e.sessionId,identity:e.identity,device:{cli_version:Ge,platform:co(),arch:uo(),host_agent:Ot(),invocation_mode:e.invocationMode},getToken:e.getToken};return new Dt(t)}async function mo(e){try{let t=re(e.env),n=await new we(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 at(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 fo(e){if(e.session.hasRemoteLogger||!e.tmsCreds)return null;let t=e.tmsCreds,r=ts({sessionId:e.session.sessionId,identity:{org_id:String(t.org_id??""),user_id:String(t.user_id??""),machine_id:sn(),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 Yt(e){let[t,r]=await Promise.allSettled([e.skipScreenshotQueue?Promise.resolve(null):mo({env:e.env,auth:e.auth,session:e.session,log:e.log}),fo({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 qt(e){await Promise.allSettled([e.screenshotQueue?.drain(),e.remoteLogger?.shutdown()])}async function ya(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 Gt(e.env,e.tmsCreds,r,t);return zt(n,t),n}case"login":case"switch":{let r=t.state.identityServicesRef.current;r&&(await qt(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 Gt(e.env,s,n,t);return zt(o,t),o}case"logout":{let r=t.state.identityServicesRef.current;return r&&(await qt(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 qt(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 Gt(e.env,n,o,t);return zt(i,t),i}}}async function Gt(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}:Yt({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 zt(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 ho}from"path";import{readFile as po}from"fs/promises";function rs(e){return e.shouldUploadArtifacts&&!e.lockHeld&&!e.isFirstRun&&e.sealed&&!!e.testId}var Wt=e=>e instanceof Error?e.message:String(e);async function ns(e){let{controller:t,tms:r,testId:n,sessionId:s,executionId:o,sealedPackPath:i,projectId:f}=e,a;try{let c={key:"evidence",content_type:"application/zip",filename:`${o}.evidence`},w=(await t.getPresignedUrls(n,s,[c])).urls?.evidence?.upload_url;if(!w)return{ok:!1,stage:"presign",error:"presign response missing evidence upload_url"};a=w}catch(c){return{ok:!1,stage:"presign",error:Wt(c)}}try{let c=await po(i);await Yr(a,c,"application/zip")}catch(c){return{ok:!1,stage:"upload",error:Wt(c)}}try{await r.ingestEvidence(o,f)}catch(c){return{ok:!1,stage:"ingest",error:Wt(c)}}return{ok:!0}}function ss(e){return e.isFirstRun||Xe(e.decisions)||e.push===!0||e.author===!0}function os(e,t){return{projectId:e?.project_id??t.project_id??null,folderId:e?.folder_id??t.folder_id??null}}function Qt(e){return e?"author":"replay"}function bo(e,t){return e?{session:e,ownsLifecycle:!1}:{session:t,ownsLifecycle:!0}}function lt(e,t){return e?.total_runs??t?.length??1}function yo(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 ct=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"];async function _l(e,t,r){let{path:n,cwd:s,opts:o,isAgent:i,disableAskUser:f,resolved:a,resolvedAuth:c,cliOverrides:y,environment:w,envConfig:A,profile:R,model:x,creds:k,configStore:C,session:l}=e,K=!1,m=await _o(n,a,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},l.sessionId,r);if(m.abort)return{overallStatus:"failed",exitCode:m.abort.exitCode,outputDir:ne(n),durationS:0,uploadResult:null};let _=m.lockAcquired,D=!1,ce=new Set,Q=!1,X=!1;_&&t.onLockState({phase:"acquired",scope:"preemptive"}),l.start({model:x,environment:w,profile:R}),l.setRecordingEnabled(!1);let N=0,Xt=c.basicAuth?{username:c.basicAuth.username,accessKey:c.basicAuth.access_key}:c.token??null,xe=null;if(Xt!==null){let d=await Yt({env:w,tmsCreds:c.resolvedCreds??null,resolver:c.resolver,auth:Xt,getToken:async()=>c.token??null,session:l,log:(u,p,b,h)=>l.log(u,p,b,h),skipScreenshotQueue:!!o.local||!c.basicAuth,invocationMode:i?"agent":"cli"});xe=d.screenshotQueue,d.remoteLogger&&(r.register("remote-logger",()=>d.remoteLogger.shutdownSync()),r.remoteLogger=d.remoteLogger,e.skipGlobalRemoteLogger||Ar(d.remoteLogger))}if(o.name){try{en(o.name)}catch(d){return process.stderr.write(`error: ${d.message}
27
- `),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null}}l.setSessionName(o.name)}let dt={};for(let[d,u]of Object.entries(a.rootGlobal))ct.includes(d)||(dt[d]=u);for(let[d,u]of Object.entries(y))ct.includes(d)||u!==void 0&&(dt[d]=u);let ee={...a.chrome};for(let d of ct){let u=y[d];u!==void 0&&(ee[d]=u)}let ds={...dt,...ee};l.setResolvedGlobal(ds);let er=k.getActiveProfile()??"default",tr=k.getDefaultEnv(),{rehydrateIfStale:us}=await import("./profile-sync-DTTRRIVP.js");us(k,C,er,tr);let j=C.load(),rr=(y.assertion_mode??j.assertion_mode)==="dom"?"dom":"visual",nr=y.final_validation,sr=nr===void 0?void 0:nr==="on",F=j.project_id??null,de=j.folder_id??null,or=ss({isFirstRun:m.isFirstRun,decisions:m.decisions,push:o.push===!0,author:o.author===!0});if(or){if(c.basicAuth){let d=await Lr({creds:k,config:C,profile:er,env:tr,tmsCreds:c.basicAuth,isLocal:!!o.local,log:(u,p,b,h)=>l.log(u,p,b,h),onAnnounce:e.onAnnounce,onFatalExit:e.onFatalExit});if(d.status==="ok"){F=d.projectId,de=d.folderId,j=C.load();let u=he(n);u?.project_id&&(F=u.project_id,de=u.folder_id??de),i&&d.autoDefaulted&&t.onAgentEvent(Tr(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-MXUD7GQ7.js");return u(2,"project/folder gate failed"),{}}}}else{let d=he(n);({projectId:F,folderId:de}=os(d,{project_id:j.project_id??null,folder_id:j.folder_id??null})),l.log("info","GATE_SKIP_REPLAY","Project/folder gate skipped (planned pure replay)",{meta_project:!!d?.project_id,config_project:!!j.project_id})}{let d=Wr(a),u=c.resolvedCreds?.org_id!=null?String(c.resolvedCreds.org_id):void 0,p=d.find(g=>g.project_id&&F&&g.project_id!==String(F)||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(p||b.size>1||h.size>1){let g=p??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 l.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null}}}let ie;try{ie=await Fn({config:{chrome_profile_path:ee.chrome_profile??null,window_size:{width:1920,height:1080}},startUrl:ze,headless:ee.headless??!1,wsEndpoint:ee.ws_endpoint,cdpEndpoint:ee.cdp_endpoint})}catch(d){return process.stderr.write(`error: Chrome launch failed: ${d.message}
30
- `),await l.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null}}let $e=ie.instance;$e&&r.register("chrome",()=>{try{$e.kill()}catch{}});let ir=Nr(ie.cdpEndpoint),G=null,ar=ie.cdpEndpoint??ee.cdp_endpoint;if(ar&&!ee.ws_endpoint&&!ee.headless&&!e.isAgent)try{G=xn({headless:ee.headless??!1,cdpEndpoint:ar,chromePid:$e?.process.pid}),G&&r.register("marker-overlay",()=>G.kill())}catch(d){l.log("warn","OVERLAY_SPAWN_FAILED","Marker overlay spawn failed",{error:String(d)})}c.resolvedCreds?.org_id!==void 0&&l.setOrgId(String(c.resolvedCreds.org_id)),l.setUserIdentity(c.resolvedCreds?.username??null,c.resolvedCreds?.email??null);let fe=Gn({objective:"",globalDir:le(wt,"variables"),localDir:le(s,".testmuai","variables"),file:o.variablesFile,inline:o.variables}),ms=a.rootGlobal.variables??{},J=vo(fe.raw,ms);l.setAuteurVariables(J.auteur);let lr=Vt(le(wt,"global-memory.md"))??void 0,cr=Vt(le(s,".testmuai","context.md"))??void 0;o.local?process.stderr.write(`info: --local \u2014 KaneAI upload skipped
31
- `):c.basicAuth?F||(or?process.stderr.write(`warn: KaneAI upload skipped \u2014 no project configured.
32
- `):process.stderr.write(`warn: evidence publish will be skipped \u2014 no project_id in meta.json or config.
33
- `)):process.stderr.write(`warn: KaneAI upload skipped \u2014 TMS credentials could not be resolved.
34
- Run 'kane-cli login' (OAuth) or 'kane-cli config set-username/set-access-key' (basic auth).
35
- `);let ve=!o.local&&!!c.basicAuth&&F!=null;if(l.log("info","PIPELINE_GATE_STATE","Initial gate state (run-start)",{phase:"run-start",shouldUploadArtifacts:ve,lockHeld:_,isFirstRun:m.isFirstRun,hasAuth:m.hasAuth}),ve&&m.testId==null&&!m.degradedReadonly){let d=re(w);try{let u=await es({tmsBaseUrl:d.tmsBaseUrl,auth:c.basicAuth,objective:a.steps[0].objective,url:"",projectId:F,folderId:de??"",hasCustomProfile:!!ee.chrome_profile,log:(p,b,h,g)=>l.log(p,b,h,g)});u&&l.setTestId(u)}catch(u){process.stderr.write(`warn: ATM test creation failed: ${u.message}
36
- `)}}else m.testId&&l.setTestId(m.testId);let Me={};if(c.basicAuth&&!o.local&&(J.secretEntries.length>0||J.nonSecretEntries.length>0))try{Me=await zn({variables:J,auth:c.basicAuth,orgId:String(c.resolvedCreds?.org_id??""),env:w,localMode:!!o.local,log:(d,u,p,b)=>l.log(d,u,p,b)})}catch(d){process.stderr.write(`warn: variable/secret push failed: ${d.message}
37
- `)}let ut=new Map;for(let[d,u]of J.nonSecretEntries)ut.set(d,u.value);let mt=new Map;for(let[d,u]of J.secretEntries)mt.set(d,u.value);async function ft(d){if(!c.basicAuth||o.local)return;let u=[],p=[];for(let[h,g]of Object.entries(d))if(g.secret){if(mt.get(h)===g.value)continue;p.push([h,g])}else{if(ut.get(h)===g.value)continue;u.push([h,g])}if(u.length===0&&p.length===0)return;let b=re(w);if(u.length>0){let h=new ke(b.tmsBaseUrl,c.basicAuth.username,c.basicAuth.access_key);for(let[g,I]of u)try{let P=await h.upsertVariable({name:g,value:I.value});Me[g]=P.id,ut.set(g,I.value),l.log("info","VAR_PUSH_STEP","Variable updated mid-run",{name:g})}catch(P){l.log("warn","VAR_PUSH_STEP_FAILED","Mid-run variable push failed",{name:g,error:String(P)})}}if(p.length>0){let h=new Re(b.secretsBaseUrl);for(let[g,I]of p)try{await h.pushSecret({secretKey:g,secretValue:I.value,username:c.basicAuth.username,accessKey:c.basicAuth.access_key,orgId:String(c.resolvedCreds?.org_id??"")}),mt.set(g,I.value),l.log("info","SECRET_PUSH_STEP","Secret updated mid-run",{name:g})}catch(P){l.log("warn","SECRET_PUSH_STEP_FAILED","Mid-run secret push failed",{name:g,error:String(P)})}}}let Pe=xe?(d,u,p,b)=>{if(!(_||m.isFirstRun))return;if(L&&b){_n(L.packTestDir,b,xe,(g,I,P,H)=>l.log(g,I,P,H));return}let h=N+u;In(l.sessionDir,h,d,xe,(g,I,P,H)=>l.log(g,I,P,H),p)}:void 0,dr=a.rootTitle??a.rootSteps[0]?.heading??is(n),fs=Object.keys(J.raw).length>0?Se(J.raw,dr).objective:dr,pe=Cn({flag:o.url,frontmatter:a.rootGlobal?.url,configDefault:C.load().default_url}),ps=En({resolvedUrl:pe,local:!!o.local,allowMissingUrl:!!o.allowMissingUrl,isTTY:!!process.stdin.isTTY});l.setFirstRun(fs,pe??"");let ue=new nt(a),Be=new Date().toISOString(),ur=Date.now(),pt=e.evidenceAttach?null:new $r({origin:"testmd",runKind:"author",pid:process.pid,title:a.rootTitle??is(n),started:Be,producerVersion:Ge,surfaces:pe?[pe]:void 0,testmdRelPath:ho(s,n),definition:{path:"test.md",content:ls(n,"utf8")},cwd:s,packRootDir:le(l.sessionDir,"evidence")}),ae=bo(e.evidenceAttach,pt),Z=ae.session,L=null;if(e.evidenceAttach)L={executionId:e.evidenceAttach.id,testId:e.evidenceAttach.test,packTestDir:e.evidenceAttach.packTestDir};else if(pt)try{L=await pt.start()}catch(d){l.log("warn","EVIDENCE_START_FAILED","Evidence pack creation failed",{error:String(d)})}let Ve=[],gt=[],mr,ht=(d,u,p,b,h)=>{if(!L)return;Z.noteSpawn(h?.length?{...d,steps:d.steps.map(I=>({...I,verifies:h}))}:d),d.resolution&&(mr=d.resolution),Ve.push(yo(u));let g=lt(u,b);for(let I=0;I<g;I++)gt.push(p+I)},bt=()=>L?{packTestDir:L.packTestDir,ordinalOffset:Z.nextOrdinalOffset()}:void 0,gs=typeof o.maxSteps=="string"&&o.maxSteps!==""?parseInt(o.maxSteps,10):void 0;function fr(d,u){let p=a.steps[d],b=as(p.config,y),h=Ce(fe.raw,b.variables,p.objective);return Nn({objective:h.objective,url:d===0?pe??void 0:p.unitEntryUrl,requireStartUrl:d===0&&ps,model:x,chrome:ie,auth:c,sessionId:l.sessionId,runIndex:u,windowSize:{width:1920,height:1080},maxSteps:b.max_steps??gs??30,headless:ee.headless??!1,disableAskUser:!0,variables:Object.keys(h.variables).length>0?h.variables:void 0,globalContext:b.global_context??lr,localContext:b.local_context??cr,sessionContext:l.getContext(),bugDetection:o.bugDetection??j.bug_detection,evidence:bt()})}function pr(d){let p=a.steps[d].trace[0].stepIndex,b=a.rootSteps.find(g=>g.index===p);a.steps.slice(0,d).some(g=>g.trace[0].stepIndex===p)||t.onAgentEvent({type:"test_md_step_start",step_index:p,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 yt(d,u,p,b,h,g){let I=a.steps[d],P=I.trace[0].stepIndex,H=!a.steps.slice(d+1).some(T=>T.trace[0].stepIndex===P),B=p?.status==="passed"?"passed":"failed",O=p?.reason??h??void 0,U=p?.duration??g,S=p?.verdict;if(S&&typeof S=="object"){let T=typeof S.one_liner=="string"?S.one_liner:"",E=typeof S.bug_title=="string"&&S.bug_title?S.bug_title:T;if(E&&B==="failed"){let V=[S.family,S.category].filter(Boolean).join("/"),te=typeof S.confidence=="number"?`, confidence ${S.confidence.toFixed(2)}`:"";O=`${O??"failed"} \u2014 bug verdict: ${E}${V?` [${V}${te}]`:""}`}let v=typeof S.category_proposal=="string"?S.category_proposal:"";v&&B==="failed"&&(O=`${O??"failed"}; category proposal: ${v} \u2014 consider adding to taxonomy`),t.onAgentEvent({type:"test_md_bug_verdict",step_index:I.trace[0].stepIndex,confirmed:S.confirmed===!0,bug_title:E||null,family:S.family??null,category:S.category??null,category_proposal:v||null,severity:S.severity??null,confidence:typeof S.confidence=="number"?S.confidence:null,one_liner:T||null})}let{continueOverall:$}=ue.recordStep(I,{status:B,duration_s:U,reason:O}),Y=as(I.config,y),W=Ce(fe.raw,Y.variables,I.objective).objective;if(p){let T=Rn(p,u,b);l.addRunResult(kn(p,W,u,T),p.total_runs)}else l.addRunResult({index:u,objective:W,status:B,summary:"",context:{memory:{},variables:{},pointer:""}},1);if(H||!$){let T=ue.snapshotOutcomes().find(E=>E.rootStepIndex===P);t.onAgentEvent({type:"test_md_step_end",step_index:P,status:T.status,duration_s:T.duration_s??0,ref_kind:T.refKind??null,unit_kind:T.refKind==="import"?(T.refLabel??"").endsWith("_test.md")?"test":"helper":null,inlined_count:T.inlinedCount??null,failed_sub_step_index:T.failedSubStepIndex??null})}return $}let vt=[];async function hs(d){an(d,a.steps.length);for(let u=0;u<d;u++){if(K||e.signal?.aborted)return{failedAt:u,cancelled:!0};let p=a.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}
38
- `),{failedAt:u,cancelled:!1};let h=l.nextRunIndex();N=h;let g=u===0?pe??void 0:a.steps[u].unitEntryUrl,I={width:j.window_size.width,height:j.window_size.height},P=Ce(fe.raw,p.config.variables,p.objective),H=jt({step:p,decision:b,chrome:ie,auth:c,sessionId:l.sessionId,runIndex:h,sessionDir:l.sessionDir,windowSize:I,forceNavigateUrl:g,sessionContext:l.getContext(),variables:Object.keys(P.variables).length>0?P.variables:void 0,evidence:bt(),investigationAsync:!ae.ownsLifecycle});await ft(P.raw),pr(u);let B=Date.now(),O=null,U=null,S=Je();try{let T=Ct(H,{environment:w});r.register("runner",()=>{(kt()||e.signal?.aborted)&&(K=!0);try{T.cancel()}catch{}}),G?.setRunActive(!0);try{for await(let E of T.events){if(t.onAgentEvent(E),S=Et(S,E),E.type==="step_event"&&E.event==="reasoning"?G?.setStepText(E.detail):E.type==="step_end"&&(E.status==="passed"&&G?.setStepComplete(),Pe&&Pe(E.index,0,E.child_id,typeof E.ordinal=="number"&&E.id?{ordinal:E.ordinal,id:E.id}:void 0)),E.type==="run_end"){O=E;break}if(E.type==="error"){U=E.message??"runner error";break}}if(!ae.ownsLifecycle&&O?.status==="failed")r.deregister("runner"),vt.push({exited:T.exited.then(()=>{}).catch(()=>{}),cancel:()=>{try{T.cancel()}catch{}}});else try{T.cancel()}catch{}if(!O&&!U){let{code:E}=await T.exited;E!==0&&(U=`runner exited with code ${E}`)}}finally{G?.setRunActive(!1),r.cleanup("runner","Replay step complete")}}catch(T){U=T.message}if(K)return{failedAt:u,cancelled:!0};let $=Math.round((Date.now()-B)/1e3),Y=yt(u,h,O,null,U,$);l.recordStepRun({testmdStepIndex:a.steps[u].flatIndex,runIndex:h,totalRunDirs:lt(O,null)}),ht(S,O,h,null,a.steps[u].verifies);let W=!!U||O?.status==="failed";if(ln(u,W?"failed":"ok"),W||!Y)return{failedAt:u,cancelled:!1}}return{failedAt:null,cancelled:!1}}let gr=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
39
- `),!1;let u=l.sessionId,p=o.onLockConflict??a.rootGlobal.on_lock_conflict??"readonly",b=await Zt({tmsBaseUrl:A.tmsBaseUrl,testId:m.testId,fromCommitId:m.fromCommitId,newCommitId:u,basicAuth:d,onLockConflict:p});if(b==="ok"){_=!0,m.newCommitId=u,l.log("info","MID_RUN_LOCK_ACQUIRED","Mid-run lock acquired",{test_id:m.testId}),i&&t.onLockState({phase:"acquired",scope:"mid_run"}),rt({baseUrl:Ee(A.tmsBaseUrl),testId:m.testId,auth:Ae(d),lifecycle:r});let h=await cs({resolved:a,decisions:m.decisions,tmsBaseUrl:A.tmsBaseUrl,newCommitId:u,basicAuth:d,mode:p,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
40
- `),!0}return l.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})
41
- `),!1};if(i){let d=o.author===!0;d&&(Ut(),l.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let{authorBoundary:u,cancelledInPhase:p,shrinkCount:b}=await fn({decisions:m.decisions,forceAuthor:d,hasRetry:o.retry===!0||o.retryCount!==void 0,maxShrinks:o.retryCount!==void 0?parseInt(o.retryCount,10):Le.maxShrinks,runReplayPhase:hs,session:l,accumulator:ue,acquireLockIfNeeded:gr});if(X=b>0,b>0&&(l.log("info","RETRY_TRIGGERED","Retry loop triggered",{shrink_count:b,final_author_boundary:u}),t.onRetryAttempt({shrink_count:b,final_author_boundary:u,complete_reauthor:u===0})),u===0&&b>0&&l.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback",{shrink_count:b}),!p&&u>=0)for(let h=u;h<a.steps.length&&!e.signal?.aborted;h++){let g=a.steps[h];if(!ue.shouldRunFlatStep(g))continue;pr(h),D=!0,ce.add(a.steps[h].flatIndex);let I=l.nextRunIndex();N=I,await ft(Ce(fe.raw,g.config.variables,g.objective).raw);let P=fr(h,I),H=Date.now(),B=null,O=null,U=null,S=!1,$=0,Y=Je();try{let E=Ct(P,{environment:w,assertionMode:rr,finalValidation:sr});r.register("runner",()=>{(kt()||e.signal?.aborted)&&(K=!0);try{E.cancel()}catch{}}),G?.setRunActive(!0);try{for await(let v of E.events){if(t.onAgentEvent(v),Y=Et(Y,v),v.type==="bifurcation"){let V=v.count??v.flows?.length??0;(v.is_single_flow??V<=1)||(U=v.flows??null,S=!0,$=0)}else if(v.type==="run_start"&&S)$++;else if(v.type==="step_event"&&v.event==="reasoning")G?.setStepText(v.detail);else if(v.type==="step_end"&&(v.status==="passed"&&G?.setStepComplete(),Pe)){let V=S?Math.max(0,$-1):0;Pe(v.index,V,v.child_id,typeof v.ordinal=="number"&&v.id?{ordinal:v.ordinal,id:v.id}:void 0)}if(v.type==="run_end"){B=v;break}if(v.type==="error"){O=v.message??"runner error";break}}try{E.cancel()}catch{}}finally{G?.setRunActive(!1),r.cleanup("runner","Step complete")}}catch(E){O=E.message}let W=Math.round((Date.now()-H)/1e3),T=yt(h,I,B,U,O,W);if(l.recordStepRun({testmdStepIndex:a.steps[h].flatIndex,runIndex:I,totalRunDirs:lt(B,U)}),ht(Y,B,I,U,a.steps[h].verifies),!T||K||e.signal?.aborted)break}}else{let{effectiveDecisions:d}=await import("./effective-decisions-DRM3JSR4.js"),{decideRetry:u}=await import("./replay-policy-6USQBT3E.js"),p=o.retry===!0||o.retryCount!==void 0,b=o.retryCount!==void 0?parseInt(o.retryCount,10):Le.maxShrinks,h=o.author===!0;h&&(Ut(),l.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let g=h?0:et(m.decisions),I=0,P=null,H=m.decisions.filter(S=>S.kind==="replay").length,B=m.decisions.length-H,O=[];o.push&&O.push("--push"),p&&O.push("--retry"),o.retryCount!==void 0&&O.push(`--retry-count=${o.retryCount}`),h&&O.push("--author");let U={source:n,steps:{total:m.decisions.length,replay:H,author:B},model:x,viewport:{width:j.window_size.width,height:j.window_size.height},chrome:ie.cdpEndpoint??ie.wsEndpoint??"managed",session:l.sessionName??"ephemeral",variables:{count:Object.keys(J.raw).length,secrets:Object.values(J.raw).filter(S=>S.secret).length,names:Object.keys(J.raw)},flags:O,mode:y.mode??"testing"};for(;;){let S=l.snapshot(),$=ue.snapshot(),Y=d(m.decisions,g,h);if(I>=1){let v=g===0?`\u21BB Complete re-author \u2014 retry budget exhausted (${I}/${b})`:`\u21BB Retry ${I}/${b} \u2014 replay 0..${g-1}, author ${g}..${m.decisions.length-1}
42
- reason: replay miss at step ${(P??0)+1}`;process.stderr.write(v+`
43
- `)}let W=I>=1&&g>0&&P!==null?{startIdx:0,endIdx:P,count:P}:void 0;G?.setRunActive(!0);let T=await Ro({decisions:Y,resolved:a,session:l,accumulator:ue,tuiConfig:j,globalConfig:U,buildStepConfigAt:fr,buildReplayConfig:v=>{let V=m.decisions[v];if(V.kind!=="replay")throw new Error("expected replay decision at index "+v);let te=a.steps[v];return jt({step:te,decision:V,chrome:ie,auth:c,sessionId:l.sessionId,runIndex:l.nextRunIndex(),sessionDir:l.sessionDir,windowSize:{width:j.window_size.width,height:j.window_size.height},forceNavigateUrl:v===0?pe??void 0:te.unitEntryUrl,sessionContext:l.getContext(),variables:So(fe.raw,te.config.variables,te.objective),evidence:bt()})},onAnyAuthorStep:v=>{D=!0,ce.add(a.steps[v].flatIndex)},onCancel:()=>{Q=!0},topBannerModel:x,topBannerAuth:`${k.getActiveProfile()??"no profile"}/${w}`,spawnOpts:{environment:w,mode:y.mode??"testing",assertionMode:rr,finalValidation:sr,log:(v,V,te,St)=>l.log(v,V,te,St)},priorAttemptRollup:W,pushStepLevelDelta:(v,V)=>ft(Ce(fe.raw,v,V).raw),onSequencerStepEnd:(v,V,te,St)=>{let ws=Math.round((Date.now()-St)/1e3),_s=v.hadError?v.reason??"runner error":null,Is=yt(V,te,v.runEnd,v.bifurcationFlows??null,_s,ws);return l.recordStepRun({testmdStepIndex:a.steps[V].flatIndex,runIndex:te,totalRunDirs:lt(v.runEnd,v.bifurcationFlows)}),ht(v.evidence??Je(),v.runEnd,te,v.bifurcationFlows,a.steps[V].verifies),Is},screenshotDispatcher:Pe,onReasoning:v=>G?.setStepText(v),onStepComplete:()=>G?.setStepComplete(),onSpawnStart:v=>{N=v},host:t});if(G?.setRunActive(!1),T.cancelled){r.cleanup("marker-overlay","user cancelled run"),r.cleanup("chrome","user cancelled run");break}if(T.failedAt===null)break;let E=u({failedAt:T.failedAt,shrinkCount:I,hasRetry:p,maxShrinks:b});if(E.kind==="fail"||!_&&!await gr())break;l.rollback(S),ue.rollback($),E.kind==="complete-reauthor"?g=0:g=E.newAuthorBoundary,I++,X=!0,l.log("info","RETRY_TRIGGERED","Retry loop triggered (TTY)",{shrink_count:I,failed_at:P}),g===0&&l.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback (TTY)",{shrink_count:I}),P=T.failedAt}}let z=ue.finalize(),ge=Math.round((Date.now()-ur)/1e3),bs={session:l,resolvedAuth:c,chromeResult:ie,chromeInstance:$e??null,testId:l.testId??null,preparedVariables:J,variableIds:Me,globalContext:lr,localContext:cr,tuiConfig:j,env:w,localMode:!!o.local},hr=!1,br=!1,yr=!1,vr=async(d={})=>{if(!L)return!1;if(ae.ownsLifecycle?hr:yr)return!0;try{let u=await ir(),p=Qt(D)==="replay",b=le(ne(n),".internal","execution.json"),h=le(l.sessionDir,"execution.json"),g=Hr(L.packTestDir,p?[b,h]:[h,b],(S,$,Y,W)=>l.log(S,$,Y,W)),{ids:I,linear:P}=g?Gr(L.packTestDir):{ids:[],linear:!0},{steps:H,tail:B,unjoined:O}=qr(Z.steps,I,p,P);g?O?l.log("warn","SKIPPED_TAIL_UNJOINED","Executed records don't align with the authored blob \u2014 skipped tail withheld",{executed:Z.steps.length,leaves:I.length}):B.length>0&&l.log("info","SKIPPED_TAIL_APPENDED","Unexecuted authored actions recorded as skipped",{count:B.length}):l.log("warn","SKIPPED_TAIL_NO_BLOB","No auteur blob in pack \u2014 unexecuted actions cannot be recorded as skipped",{});let U=await Z.writeResult({steps:[...H,...B],spawns:Ve.length?Ve:[{resultCode:null}],tags:a.rootGlobal.tags,externalIdInput:{execution_id:L.executionId,session_id:l.sessionId,commit_id:p?m.fromCommitId??l.sessionId:l.sessionId,test_id:m.testId??l.testId??void 0,testcase_id:d.testcaseId??m.testcaseId??l.testcaseId??void 0,project_id:F??void 0,folder_id:de??void 0,org_id:l.orgId!=null?String(l.orgId):void 0,session_name:l.sessionName??Te(n),user_name:l.userName??void 0,user_email:l.userEmail??void 0,sharable_link:Tn(re(w).testManagerUiUrl,F,d.testcaseId??m.testcaseId??l.testcaseId,d.shareId)},runnerEnv:Fr({cdpBrowser:u,resolution:mr}),intentEnv:{model:x,platform:"Desktop",platform_type:"web",...ae.ownsLifecycle?{}:{run_kind:Qt(D)}},durationMs:Date.now()-ur,log:(S,$,Y,W)=>l.log(S,$,Y,W)});if(!ae.ownsLifecycle)return await Ur(Z.pack,L.testId,le(l.sessionDir,"tui.log")),yr=!0,l.log("info","EVIDENCE_RESULT_WRITTEN","Member result.yaml written",{execution_id:L.executionId,verdict:U}),!0;if(!br)try{let S=Vr({cwd:process.cwd(),members:[{path:n,verdict:U,executionId:L.executionId,startedAt:new Date().toISOString(),acs:Br(Z.steps),mode:"testmd",local:!!o.local}]});br=!0;for(let $ of S.warnings)l.log("warn","EXEC_SYNC",$,{});S.synced>0&&l.log("info","EXEC_SYNC",`context sync: ${S.synced} fact(s), ${S.superseded} supersession(s)`,{})}catch(S){l.log("warn","EXEC_SYNC",`exec-sync failed: ${S instanceof Error?S.message:String(S)}`,{})}try{let S=Kr(Z.pack,Mr(process.cwd()));S.status==="skipped"&&l.log("warn","EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${S.reason}`,{})}catch(S){l.log("warn","EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(S)})}return await jr({executionId:L.executionId,testId:L.testId,saved:!0,runKind:Qt(D),verdict:U,outputStemDir:ne(n),cwd:s,packDir:Z.pack,tuiLogPath:le(l.sessionDir,"tui.log"),expectStatusDisagrees:(o.bugDetection??j.bug_detection)==="continue",log:(S,$,Y,W)=>l.log(S,$,Y,W),surface:"testmd"}),hr=!0,l.log("info","EVIDENCE_SEALED","Evidence pack sealed",{execution_id:L.executionId,verdict:U}),!0}catch(u){return l.log("warn","EVIDENCE_SEAL_FAILED","Evidence pack seal failed",{error:String(u)}),!1}},Ke=ve&&(_||m.isFirstRun)&&!m.degradedReadonly,ys=async()=>{if(!c.basicAuth)return null;let d=re(w),u=(D||o.push===!0)&&!Q,p=(_||m.isFirstRun)&&!Q&&z.overallStatus==="passed"&&!m.degradedReadonly;l.log("info","PIPELINE_GATE_STATE","Derived gate state (finalize)",{phase:"finalize",shouldUploadArtifacts:ve,shouldUploadPipeline:Ke,shouldReplaceLocalOutput:u,shouldCommit:p,lockHeld:_,anyAuthorStepRan:D,cancelled:Q,overallStatus:z.overallStatus});let b=Jn({session:l,env:w,auth:c,variables:J,variableIds:Me,projectId:F,folderId:de,totalSteps:z.outcomes.length,totalDuration:ge,screenshotExtMap:xe?.getExtMap(),codeExport:Xn({codeExport:o.codeExport,codeLanguage:o.codeLanguage,skipCodeValidation:o.skipCodeValidation},j.code_export),onProgress:()=>{},log:(g,I,P,H)=>l.log(g,I,P,H),shouldUploadArtifacts:Ke,shouldReplaceLocalOutput:u,shouldCommit:p,isFirstRun:m.isFirstRun,resolvedTest:a,sourcePath:n,stepRunRecords:l.getStepRunRecords(),authoredFlatIdx:[...ce],unitLocks:m.unitLocks,outcomes:z.outcomes,overallStatus:z.overallStatus,fromCommitId:m.fromCommitId,startedISO:Be,durationS:ge,tmsIds:{testId:m.testId??l.testId??void 0,testcaseId:m.testcaseId??l.testcaseId??void 0,projectId:F??void 0,folderId:de??void 0,orgId:l.orgId??void 0,sessionName:l.sessionName??Te(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:X,forceAuthor:o.author===!0,evidence:L&&ae.ownsLifecycle?{executionId:L.executionId,packTestDir:L.packTestDir,sealedPackPath:Z.pack,cwd:s,runIndices:gt,sealFn:vr}:void 0,evidenceRead:L&&!ae.ownsLifecycle?{packTestDir:L.packTestDir,runIndices:gt}:void 0,authoredExecutionPath:D?void 0:le(ne(n),".internal","execution.json")});m.newCommitId!=null&&(b.skipTmsFinalize=!0);let h=new nn(b);return i?await h.execute():await t.runUpload(h,g=>{if(g.testcaseId&&g.shareId&&F)return st(d.testManagerUiUrl,F,g.testcaseId,g.shareId)})};L&&await ir();let oe=await Yn(bs,{performUpload:ys,runCleanup:()=>{r.cleanup("chrome","test.md run complete")},log:(d,u,p,b)=>l.log(d,u,p,b)},{overallStatus:z.overallStatus,outcomes:z.outcomes,sourcePath:n,title:a.rootTitle,rootSteps:a.rootSteps,startedISO:Be,durationS:ge,localMode:!!o.local,skipLocalWrites:!0}),Sr=await vr({testcaseId:oe.uploadResult?.testcaseId,shareId:oe.uploadResult?.shareId}),wr=o.evidencePublish===!1,_r=ae.ownsLifecycle&&!!L&&!!c.basicAuth&&rs({shouldUploadArtifacts:ve,lockHeld:_,isFirstRun:m.isFirstRun,sealed:Sr,testId:m.testId});if(_r&&wr)l.log("info","EVIDENCE_PUBLISH_SKIPPED","Replay evidence publish skipped (--no-evidence-publish)",{execution_id:L.executionId}),process.stderr.write(`info: evidence publish skipped (--no-evidence-publish)
44
- `);else if(wr&&(_||m.isFirstRun))process.stderr.write(`note: --no-evidence-publish has no effect on author/commit runs
45
- `);else if(_r){let d=c.basicAuth,u=L,p=F,b=await ns({controller:new we(A.controllerBaseUrl,{username:d.username,accessKey:d.access_key}),tms:new We(A.tmsBaseUrl,c.resolvedCreds?.username??d.username,c.resolvedCreds?.access_key??d.access_key),testId:m.testId,sessionId:l.sessionId,executionId:u.executionId,sealedPackPath:Z.pack,projectId:p});b.ok?l.log("info","EVIDENCE_INGESTED","Replay evidence uploaded and ingested",{execution_id:u.executionId,project_id:p}):(l.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}
46
- `)),t.onAgentEvent({type:"test_md_evidence_ingest",status:b.ok?"ok":"failed",evidence_id:u.executionId,...b.ok?{}:{stage:b.stage}})}await Io(n,m,l,z.outcomes,z.overallStatus,Be,ge,oe.uploadResult,j,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},_,Q);try{let d=he(n);if(Qr({shouldUploadPipeline:Ke,uploadSucceeded:!!oe.uploadResult?.success,metaCommitId:d?.commit_id,metaTestId:d?.test_id})){let u=await Pt({sourcePath:n,testId:d.test_id,sessionId:l.sessionId,commitId:d.commit_id,controller:new we(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});u.ok?l.log("info","BUNDLE_SYNC_OK","testmd bundle pushed",{commit_id:d.commit_id,bytes:u.bytes}):(l.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}
47
- `)),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){l.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync threw",{error:d instanceof Error?d.message:String(d)})}if(Ke&&oe.uploadResult?.success)for(let d of m.unitLocks)try{let u=he(d.file);if(u?.commit_id!==l.sessionId||!u?.test_id)continue;let p=await Pt({sourcePath:d.file,testId:String(u.test_id),sessionId:l.sessionId,commitId:String(u.commit_id),controller:new we(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});p.ok?l.log("info","BUNDLE_SYNC_OK","unit bundle pushed",{commit_id:u.commit_id,path:d.file,bytes:p.bytes}):l.log("warn","BUNDLE_SYNC_FAILED","unit bundle sync failed",{commit_id:u.commit_id,path:d.file,stage:p.stage,error:p.error}),t.onAgentEvent({type:"test_md_bundle_sync",status:p.ok?"ok":"failed",commit_id:u.commit_id,path:d.file,...p.ok?{bytes:p.bytes}:{stage:p.stage}})}catch(u){l.log("warn","BUNDLE_SYNC_FAILED","unit bundle sync threw",{path:d.file,error:u instanceof Error?u.message:String(u)})}let Ir=re(w),He=oe.uploadResult?.testcaseId,qe=He&&oe.uploadResult?.shareId&&F?st(Ir.testManagerUiUrl,F,He,oe.uploadResult.shareId):void 0,vs=a.unitFiles.filter(d=>d.file!==a.rootPath).map(d=>{let u=a.steps.filter(g=>g.owningFile===d.file),p=u.filter(g=>ce.has(g.flatIndex)).length,h=(d.kind==="test"?he(d.file):null)?.commit_id===l.sessionId;return{path:d.file,kind:d.kind,replayed:u.length-p,authored:p,committed:h,...h?{commit_id:l.sessionId}:{}}}),Rr={overallStatus:z.overallStatus,durationS:ge,decisions:m.decisions,outcomes:z.outcomes,cancelled:Q,retryTriggered:X,lockHeld:_,anyAuthorStepRan:D,isFirstRun:m.isFirstRun,wantsPush:o.push===!0,uploadResult:oe.uploadResult,shouldUploadArtifacts:ve,shouldReplaceLocalOutput:D&&!Q,shouldCommit:(_||m.isFirstRun)&&!Q&&z.overallStatus==="passed"&&!m.degradedReadonly,shareUrl:qe,imports:vs},{buildSummaryEvent:Ss}=await import("./SummaryBox-5G7WULUN.js");if(i?t.onAgentEvent(Ss(Rr)):await t.onSummary(Rr),!i){let d=He&&F?Ln(Ir.testManagerUiUrl,F,He):void 0;await t.onLinks({recordedTestPath:n,outputDir:ne(n),shareableLink:qe,testCaseLink:d,codeExportDir:oe.uploadResult?.codeExportDir})}if(ae.ownsLifecycle&&Z&&Sr){let{offerEvidenceView:d}=await import("./evidence-TZYIOSPG.js");await d({packPath:Z.pack,env:w,isTTY:!i&&!Q&&!!process.stdin.isTTY&&!!process.stderr.isTTY,log:u=>process.stderr.write(u+`
48
- `)})}return t.onAgentEvent({type:"test_md_done",overall_status:z.overallStatus,duration_s:ge,session_id:l.sessionId,...qe?{share_url:qe}:{}}),{overallStatus:z.overallStatus,exitCode:z.overallStatus==="passed"?0:1,outputDir:ne(n),durationS:ge,uploadResult:oe.uploadResult,anyAuthorStepRan:D,resultCode:Or(Ve),...vt.length?{pendingInvestigations:vt}:{}}}function vo(e,t){let r={...e,...t},n=Object.keys(r).length>0?Se(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 Ce(e,t,r){let n={...e,...t??{}};if(Object.keys(n).length===0)return{raw:n,variables:{},objective:r};let s=Se(n,r);return{raw:n,variables:qn(s.variables,s.objective),objective:s.objective}}function So(e,t,r){let n=Ce(e,t,r).variables;return Object.keys(n).length>0?n:void 0}function as(e,t){let r=new Set(ct),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 wo(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}async function _o(e,t,r,n,s,o){let i=Jr(t);on(t,i);let f=_e(e),a=go(f)?JSON.parse(ls(f,"utf8")):null,c=a?.testcase_id,y=a?.test_id,w=a?.commit_id,A=r.push===!0,R=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
49
- `),x&&(c=void 0,y=void 0,w=void 0);let k=n.resolvedAuth.basicAuth;if(!k){let N=await n.resolvedAuth.resolver.resolve(!0);N?.username&&N?.access_key&&(k={username:N.username,access_key:N.access_key},n.resolvedAuth.basicAuth=k)}let C=!!k,l=!r.local&&C&&y!=null&&w!=null&&c!=null,K=l&&(Xe(i)||A);if(A&&!l)return process.stderr.write(`error: --push requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
50
- `),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:C,canLock:l,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(R&&!l)return process.stderr.write(`error: --retry requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
51
- `),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:C,canLock:l,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(x&&!C)return process.stderr.write(`error: --author requires authenticated credentials for the TMS API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
52
- `),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:C,canLock:l,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};let m=null,_=!1,D=!1;if(K){m=s;let X=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",N=await Zt({tmsBaseUrl:n.tmsBaseUrl,testId:y,fromCommitId:w,newCommitId:m,basicAuth:k,onLockConflict:X});if(N==="ok")_=!0,rt({baseUrl:Ee(n.tmsBaseUrl),testId:y,auth:Ae(k),lifecycle:o});else{if(N==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:C,canLock:l,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};m=null,D=!0}}let ce=[],Q=K&&!_;if(!r.local&&C&&!Q){let X=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",N=await cs({resolved:t,decisions:i,tmsBaseUrl:n.tmsBaseUrl,newCommitId:m??s,basicAuth:k,mode:X,lifecycle:o});if(N.outcome==="ok")ce=N.locks;else{if(_&&y&&w&&m&&await Jt(n,y,w,m),be(),N.outcome==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:c==null,hasAuth:C,canLock:l,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)
53
- `),m=null,_=!1,D=!0}}return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:m,isFirstRun:c==null,hasAuth:C,canLock:l,lockAcquired:_,unitLocks:ce,degradedReadonly:D}}async function cs(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=he(n.file);if(!s?.test_id||!s?.commit_id)continue;let o=await Zt({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)}),rt({baseUrl:Ee(e.tmsBaseUrl),testId:String(s.test_id),auth:Ae(e.basicAuth),lifecycle:e.lifecycle});continue}for(let i of r)await De({baseUrl:Ee(e.tmsBaseUrl),testId:i.testId,body:{commitId:e.newCommitId,fromCommitId:i.fromCommitId},auth:Ae(e.basicAuth)}),be(i.testId);return{outcome:o,locks:[]}}return{outcome:"ok",locks:r}}function Ee(e){return`${e}/kane-cli/v1`}function Ae(e){return{username:e.username,accessKey:e.access_key}}async function Zt(e){let t=Ee(e.tmsBaseUrl),r=Ae(e.basicAuth),n={baseUrl:t,testId:e.testId,fromCommitId:e.fromCommitId,newCommitId:e.newCommitId,auth:r},s=await Nt(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}
54
- `),"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)
55
- `),"abort";if(e.onLockConflict==="wait"){if(s.reason==="base_mismatch")return process.stderr.write(`[lock] base commit mismatch \u2014 pull latest; aborting
56
- `),"abort";for(;;){process.stderr.write(`[lock] waiting (concurrent session)...
57
- `),await new Promise(a=>setTimeout(a,3e4));let f=await Nt(n);if(f.ok)return"ok";if(f.reason!=="concurrent")return process.stderr.write(`[lock] wait drifted to ${f.reason} (HTTP ${f.httpStatus}): ${f.message}; aborting
58
- `),"abort"}}return process.stderr.write(`[lock] ${i} \u2014 running in readonly mode (no commit)
59
- `),"readonly"}async function Io(e,t,r,n,s,o,i,f,a,c,y,w,A){let{decisions:R,testId:x,testcaseId:k,fromCommitId:C,newCommitId:l}=t;if(!(s==="passed")||A){let m=A?"cancelled":s;w&&x&&C&&l&&(process.stderr.write(`[lock] run not committed (${m}); discarding playground lock
60
- `),await Jt(y,x,C,l));for(let _ of t.unitLocks)await Jt(y,_.testId,_.fromCommitId,l??r.sessionId);be();return}be()}async function Jt(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 De({baseUrl:Ee(e.tmsBaseUrl),testId:t,body:{commitId:n,fromCommitId:r},auth:Ae(s)});o.ok||process.stderr.write(`warn: discardLock failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
61
- `)}async function Ro(e){let t=null,r=!1,n=0,s=-1,o=-1,i=0,f=async a=>{if(a&&a.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],w=n;n++;let A=e.session.nextRunIndex();s=w,o=A,i=Date.now(),e.onSpawnStart?.(A),c.kind==="author"&&e.onAnyAuthorStep(w),await e.pushStepLevelDelta(y.config.variables,y.objective);let R=c.kind==="replay"?e.buildReplayConfig(w):e.buildStepConfigAt(w,A),x=c.kind==="replay"?"md5-match":c.reason,k=y.config??{},C={};for(let[l,K]of Object.entries(k))K!=null&&l!=="variables"&&l!=="assurance"&&(C[l]=K);return{config:R,banner:{stepLabel:`Step ${w+1}/${e.decisions.length}`,objective:wo(y.objective,100)},mode:c.kind,modeReason:x,perStepOverrides:Object.keys(C).length>0?C:void 0}};return await e.host.runSteps({topBanner:{model:e.topBannerModel,auth:e.topBannerAuth},globalConfig:e.globalConfig,getNextStep:f,onStepEnd:a=>(a.status==="failed"&&s>=0&&e.decisions[s]?.kind==="replay"&&(t=s),e.onSequencerStepEnd(a,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{Rn as a,kn as b,ot as c,mi as d,jn as e,xn as f,Ko as g,_n as h,In as i,Mt as j,Cn as k,En as l,st as m,Tn as n,Ln as o,Fn as p,Nn as q,qn as r,Gn as s,zn as t,Vt as u,Jn as v,Xn as w,es as x,ts as y,Yt as z,ya as A,ns as B,Qt as C,_l as D,vo as E,Ce as F,So as G,as as H};
@@ -1,5 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as M,b as B,c as oe,d as P}from"./chunk-2YQ6TW77.js";import{a as F}from"./chunk-WAOCHXJ5.js";import{b as z}from"./chunk-CJJXT5DO.js";import{a as U}from"./chunk-2WVKOZ6W.js";import{a as j}from"./chunk-NLCCBXXV.js";import{a as k}from"./chunk-RZ4F3BHX.js";import{e as se}from"./chunk-UR6MHSHU.js";import{readFileSync as te,existsSync as C,readdirSync as ye,mkdirSync as D,writeFileSync as x}from"fs";import{readFile as ne,unlink as Re}from"fs/promises";import{join as E}from"path";import{randomUUID as A}from"crypto";var re="/home/kaneai/Downloads";function N(t){return`${re}/${t}`}function $(t){return"FILE__"+t.replace(/[^A-Za-z0-9]/g,"_")}function S(t){let e=t?.media;return!e||!e.name||!e.media_url?null:{media_id:e.media_id??"",name:e.name,media_url:e.media_url,type:e.type??"doc"}}function K(t){return t?t.includes(`
3
- `)?t.split(`
4
- `).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function L(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(n,i)=>{let s=e[i];return s?s.value:n}).replace(/\$\{(.+?)\}/g,(n,i)=>{let s=e[i];return s?s.value:n})}var ae={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD"},G={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},le=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function X(t,e){if(t==="analyze"){let i=e?.action_params?.analyzer_type??"";return G[i]}let n=ae[t];return n||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),n??t.toUpperCase()}function Y(t,e){if(!t||!e)return"";try{let n=new Date(t);return isNaN(n.getTime())?"":new Date(n.getTime()+e).toISOString()}catch{return""}}function W(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function ce(t){let e=t.output_variable??"";if(!e)return"[]";let i={...W(t)};return delete i.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||A().replace(/-/g,"").slice(0,8),value:i,variable_description:"API Response"}])}function ue(t,e,n){let i=t.action_params??{},s=le.has(e)?"Vision Agent":"Operation Agent",a={operation_type:e};if(e==="OPEN"&&(a.url=i.url??""),e==="SET_VARIABLE"&&(a.variable_name=t.output_variable??i.key??"",a.variable_value=t.output_value??""),e==="UPLOAD_FILE"){let f=S(i);f&&(a.value=N(f.name))}let o={},l={},r=t.action_instruction??"",c=i.text??"",u=i.url??"",p=[["intent",r],["value",c],["url",u]];for(let[f,h]of Object.entries(n)){let b=String(h);if(f.startsWith("secrets."))for(let[I,v]of p)v.includes(b)&&(l[I]=f);for(let[I,v]of p)v.includes(b)&&!(I in o)&&(o[I]=v)}let _=t.action_type,d={operation:t.action_instruction??"",agent:s,operation_dict:a,reasoning:_==="analyze"?i.query??"":t.intent??t.action_instruction??"",variable:o,secrets:l,params:{}};_==="analyze"&&typeof i.code=="string"&&i.code&&(d.code=i.code),_==="analyze"&&typeof i.code_js=="string"&&i.code_js&&(d.code_js=i.code_js),_==="analyze"&&typeof i.condition_expression=="string"&&i.condition_expression&&(d.condition_expression=i.condition_expression),i.uses_websocket===!0&&(d.uses_websocket=!0),i.uses_sse===!0&&(d.uses_sse=!0),_==="analyze"&&i.analyzer_type==="textual_visual"&&(typeof i.wrapped_js=="string"&&(d.wrapped_js=i.wrapped_js),Array.isArray(i.locators)&&(d.locators=i.locators),typeof i.operator=="string"&&(d.operator=i.operator),Array.isArray(i.transforms)&&(d.transforms=i.transforms),typeof i.query=="string"&&(d.query=i.query),typeof i.expected_value=="string"&&(d.expected_value=i.expected_value),typeof i.needs_unit_conversion=="boolean"&&(d.needs_unit_conversion=i.needs_unit_conversion),typeof i.condition=="string"&&(d.condition=i.condition));let m={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[_];return m&&i[m]!==void 0&&(d[m]=i[m]),_==="set_clipboard"&&typeof i.html=="string"&&i.html&&(d.html=i.html),d}function de(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let n=e.sub_results??[];return n.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?n.some(s=>s.passed===!0):n.every(s=>s.passed===!0)}function H(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function _e(t){let e=t.assertion_tree??{},n=e.sub_results??[],i=H(n);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:n,sub_checks:i,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function pe(t){let n=(t.action_params??{}).assertion_tree??{},i=n.sub_results??[],s=H(i);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:i,sub_checks:s,composite_operator:n.composite_operator??"and",verification:"",claim:n.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function ge(t,e,n,i){let s=t.visual_data;if(!s||s.x==null||s.y==null)return null;let a=e?`${e}/test_screenshots`:"";return{x:s.x,y:s.y,confidence:0,bbox:s.bbox??null,bbox_source:s.bbox?"accessibility_tree":"fallback",viewport_width:s.viewport_width??1280,viewport_height:s.viewport_height??800,scale_factor:null,raw_image_url:a?`${a}/untagged_screenshot/${n}.${i?.get(n)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function V(t,e={},n="",i){let s=t.action_type,a=X(s,t),o=t.action_params??{},l=t.coordinates??null,r=t.selectors??null,c=!!(r&&r.length>0),u=t.timestamp??"",p=t.duration_ms??0,_=t.variables_used??{},d=t.action_id??A(),g=A(),m=Y(u,p),f="",h="";if(s==="navigate")h=o.url??"",f=h;else if(s==="type"||s==="fill")f=o.text??"";else if(s==="press_key")f=o.key??"";else if(s==="wait")f=String(o.ms??o.timeout_ms??"");else if(s==="evaluate_js")f=o.script??"";else if(s==="upload_files"){let y=S(o);y&&(f=N(y.name))}else s==="analyze"&&a==="SET_VARIABLE"&&(f=t.output_value??"");let b="";s==="go_back"?b="back":s==="go_forward"&&(b="forward");let I=L(f,e),v=L(h,e),O=L(t.action_instruction??"",e),R=ue(t,a,_);return{operation_id:d,instruction_id:g,instruction:O,intent:O,operation_start:u,operation_end:m,status:t.status??"",command:a,name:"",target:"",value:I,message:"",operation_dict:"",frame:t.frame_info?JSON.stringify(t.frame_info):"",error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(R),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:n?`${n}/test_screenshots/untagged_screenshot/${d}.${i?.get(d)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:v,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:a==="ASSERTION"?de(o):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(o.tab_index??""),tab_identifier:String(o.tab_identifier??""),scroll_value:o.amount??1,scroll_direction:o.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:s==="evaluate_js"?o.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:!1,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:l!==null&&!c,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:c?null:l?.x??null,y_coord:c?null:l?.y??null,target_x_coord:o.target_x??null,target_y_coord:o.target_y??null,source_description:o.source_description??null,target_description:o.target_description??null,use_coordinates:l!==null&&!c,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:c?r.map(y=>({type:y.isXPath?"xpath":"css",...y})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:a==="ASSERTION"?_e(o):o.expression_tree??{},assertion_tree:o.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:a==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:o.source_coordinates?{x:o.source_coordinates[0],y:o.source_coordinates[1]}:{},end_coordinates:o.target_coordinates?{x:o.target_coordinates[0],y:o.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:s==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:s==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:ge(t,n,d,i),reasoning:s==="analyze"?o.query??"":t.intent??t.action_instruction??""}}function q(t,e,n={}){let i=t.action_type,s=X(i,t),a=t.timestamp??"",o=t.duration_ms??0,l=Y(a,o),r=s==="ASSERTION"||s==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:r?"non_driver_action":"driver_action",module_id:"",instruction:L(t.action_instruction??"",n),command:s,error:null,parent_instruction_id:"",classification_layer_resp:s==="ASSERTION"?pe(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:a,end_timestamp:l,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?t.action_params?.script??"":"",user_variables:i==="api"?ce(t):"[]",api_data:i==="api"?{request:t.action_params?.api_data?.request??{},response:W(t)}:{},params_used:!1,hard_assertion:s==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function fe(t,e=[]){let n=t.action_params??{},i=n.branches??[],s=n.winning_index??-1,a=n.sub_results??[],o={};for(let r of a){let c=r.sub_results;if(c)for(let u of c){let p=u.store_key;p&&(o[p]=u)}}let l=i.map((r,c)=>{let u=c===s,p=(r.sub_checks??[]).map(_=>{let d=o[_.store_key];return{description:_.description,store_key:_.store_key,expected_value:_.expected_value,stored_value:d?.extracted_value??_.stored_value,operator:_.operator??d?.operator??"equals",transforms:_.transforms??d?.transforms??[]}});if(p.length===0&&r.condition&&a.length>0){let d=a.find(g=>g.branch_index===c)?.sub_results??[];d.length>0&&(p=d.map(g=>({description:g.description??r.condition,store_key:g.store_key??"",expected_value:g.expected??"true",stored_value:g.extracted_value??void 0,operator:g.operator??"equals",transforms:g.transforms??[]})))}return{branch_index:c,condition:r.condition??null,branch_type:r.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:r.custom_event??null,children:u?e:[],sub_checks:r.condition?p:[],composite_operator:r.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${A().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:s,branches:l,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function J(t,e,n){for(let i of t)i.content_type==="instruction"&&"generative_id"in i&&(i.generative_id=e,i.generative_objective=n)}function w(t,e={},n="",i,s){let a=[],o=0;for(;o<t.length;){let l=t[o],r=l.action_type;if(!s?.keepFailedActions&&l.status==="error"&&r!=="assert"&&r!=="if_else"&&r!=="child_agent_start"&&r!=="child_agent_end"&&!(l.until_condition&&!l.error)){o+=1;continue}if(r==="analyze"&&!G[l.action_params?.analyzer_type??""]){o+=1;continue}if(r==="child_agent_start"){let c=l.action_params?.child_id??"",u=l.action_params?.objective??"",p=[];o+=1;let _=1,d="error",g;for(;o<t.length&&_>0;){let R=t[o],y=R.action_type;if(y==="child_agent_start")_+=1;else if(y==="child_agent_end"&&(_-=1,_===0)){d=R.status??"success",g=R,o+=1;break}_>0&&p.push(R),o+=1}let m=w(p,e,n,i);J(m,c,u);let f=g?.action_params?.result_code??null,h=g?.action_params?.reason_code??null,b=g?.action_params?.error_message??null,I=g?.action_params?.summary??null,v=g?.action_params?.one_liner??null,O=d==="error";a.push({content_type:"generative_block",instruction_id:`generative_block_${c}`,generative_id:c,objective:u,status:d,children:m,error_message:O?b??null:null,error_code:O?h??null:null,result_code:f??null,bifurcation_context:[],approach_reason:K(I),one_liner:v??null});continue}else if(r==="child_agent_end"){o+=1;continue}else if(r==="if_else"){o+=1;let c=[];for(;o<t.length&&t[o].action_type==="child_agent_start";){let u=t[o],p=u.action_params?.child_id??"",_=u.action_params?.objective??"",d=[];o+=1;let g=1,m="error";for(;o<t.length&&g>0;){let h=t[o];if(h.action_type==="child_agent_start")g+=1;else if(h.action_type==="child_agent_end"&&(g-=1,g===0)){m=h.status??"success",o+=1;break}g>0&&d.push(h),o+=1}let f=w(d,e,n,i);c.push(...f)}a.push(fe(l,c));continue}else if(r==="query_tool"){o+=1;continue}else if(l.until_condition){let c=V(l,e,n,i),u=q(l,c,e),p=typeof l.until_condition_met=="boolean"?l.until_condition_met:l.status==="success";a.push({content_type:"until_block",instruction_id:`until_${A().slice(0,8)}`,condition:l.until_condition,max_retries:l.until_max_retries??10,settle_ms:l.until_settle_ms??500,current_count:0,condition_met:p,children:[u],generative_id:"",generative_objective:"",variables_used:{},status:l.status??"success"})}else{let c=V(l,e,n,i),u=q(l,c,e);a.push(u)}o+=1}return a}function T(t,e={},n="",i,s){let a=[];for(let o of t){let l=w(o.records,e,n,i,s);if(l.length===0)continue;let r=A().replace(/-/g,"");J(l,r,o.objective);let c=l.some(d=>"status"in d&&typeof d.status=="string"?d.status==="error"||d.status==="failed":!1),u=o.resultCode?parseInt(o.resultCode,10):null,p=u!==null&&!isNaN(u)&&u>=200,_=c||p?"error":"success";a.push({content_type:"generative_block",instruction_id:`generative_block_${r}`,generative_id:r,objective:o.objective,status:_,children:l,error_message:_==="error"?o.errorMessage??null:null,error_code:_==="error"?o.reasonCode??null:null,result_code:o.resultCode??null,bifurcation_context:[],approach_reason:K(o.summary),one_liner:o.oneLiner??null})}return{instructions:a}}var Z=se(oe(),1);import{createWriteStream as me}from"fs";import{readFile as he}from"fs/promises";import{join as Ee,basename as be}from"path";import{tmpdir as Ie}from"os";var ve=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function Q(t){let e=Ee(Ie(),`${be(t)}_artifacts.zip`);return new Promise((n,i)=>{let s=me(e),a=(0,Z.default)("zip",{zlib:{level:6}});s.on("close",()=>n(e)),a.on("error",i),a.pipe(s),a.glob("**/*",{cwd:t,ignore:ve}),a.finalize()})}async function ee(t){return he(t)}async function Pe(t,e){return ne(z(t,e))}function Ae(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var ie=class{config;controller;testId;constructor(e){this.config=e,this.controller=new F(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,n,i,s){this.config.log?.(e,n,i,s)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let n=this.config.evidence,i=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let l=this.collectNdjsonPerRun(),r=l.reduce((m,f)=>m+f.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:r,run_groups:l.length});let c=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(c)});let{instructions:u}=l.length>0?T(l,c,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),_=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(_.length/1024).toFixed(1)});let d=E(this.config.sessionDir,"execution.json");x(d,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:d});let g=n?.packTestDir??this.config.evidenceRead?.packTestDir;if(g){let m=E(g,"auteur");D(m,{recursive:!0}),x(E(m,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(m,"execution.json")})}if(e("convert","done"),n)i=_;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let m=null,f;try{m=await Q(this.config.sessionDir),f=await ee(m),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(f.length/1024/1024).toFixed(1),path:m}),e("zip","done",`${(f.length/1024/1024).toFixed(1)}MB`)}finally{m&&await Re(m).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(f.length/1024/1024).toFixed(1),blob_size_kb:+(_.length/1024).toFixed(1)}),await Promise.all([P(h.urls.artifacts.upload_url,f,"application/zip"),P(h.urls.blob.upload_url,_,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let l=this.collectNdjsonPerRun(),r=this.config.variables??{},{instructions:c}=l.length>0?T(l,r,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},u=this.buildExecutionEnvelope(c),p=E(this.config.sessionDir,"execution.json");x(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let _=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(_){let d=E(_,"auteur");D(d,{recursive:!0});let g=this.readAuthoredExecution();x(E(d,"execution.json"),g??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(d,"execution.json"),source:g?"authored":"run_envelope"})}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(l){let r=l instanceof Error?l.message:String(l);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:r}),e("atomic_replace","failed",r),l}}else e("atomic_replace","skipped");let s,a;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let l=await this.config.onCommitLock();if(l.ok)s=l.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:s??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:l.reason,message:l.message}),e("commit_lock","failed",`${l.reason??"unknown"}: ${l.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${l.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let l=new U(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),r=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(s=(await l.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:r})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:s??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(s)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(s&&this.config.shareApiBaseUrl)try{a=await this.generateShareLink(s),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:a})}catch(l){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(l)})}if(n&&i){let l=null;e("zip","running");try{await n.sealFn({testcaseId:s,shareId:a}),l=n.sealedPackPath?await ne(n.sealedPackPath):await Pe(n.executionId,n.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:n.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(l.length/1024/1024).toFixed(1)})}catch(r){let c=r instanceof Error?r.message:String(r);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:n.executionId,error:c})}if(l){e("zip","done",`${(l.length/1024/1024).toFixed(1)}MB`),e("presign","running");let r=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Ae(n.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:r.urls.artifacts?.blob_url,blob_url:r.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(l.length/1024/1024).toFixed(1),blob_size_kb:+(i.length/1024).toFixed(1)}),await Promise.all([P(r.urls.artifacts.upload_url,l,"application/zip"),P(r.urls.blob.upload_url,i,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let r=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(i.length/1024).toFixed(1)}),await P(r.urls.blob.upload_url,i,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let o;if(this.config.codeExport?.enabled&&s){let l=!1;try{await this.triggerCodeExport(s),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),l=!0}catch(r){let c=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:c}),e("code_export","failed",`trigger failed: ${c}`)}if(l){e("code_export","running","Waiting for code generation\u2026");try{o=await this.pollAndDownloadCode(s,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:o}),e("code_export","done",o)}catch(r){let c=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:c}),e("code_export","failed",c)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:s,shareId:a,codeExportDir:o}}catch(n){return{success:!1,testId:this.testId,error:n instanceof Error?n.message:String(n)}}}async runCodeExport(e,n){let i=n??this.config.onProgress,s=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),s=!0}catch(a){let o=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:o}),i("code_export","failed",`trigger failed: ${o}`)}if(s){i("code_export","running","Waiting for code generation\u2026");try{let a=await this.pollAndDownloadCode(e,i);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:a}),i("code_export","done",a),a}catch(a){let o=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:o}),i("code_export","failed",o);return}}}collectNdjsonPerRun(){let e=[],n=this.config.runObjectives??[],i=this.config.runMetadata??[],s=this.config.evidence??this.config.evidenceRead;for(let a=0;a<this.config.runDirs.length;a++){let o=this.config.runDirs[a],l=n[a]||this.config.firstObjective,r=i[a],c=s?this.readNdjsonFromFile(E(s.packTestDir,"logs",`${s.runIndices?.[a]??a}-actions.ndjson`)):this.readNdjsonFromDir(o);c.length>0&&e.push({objective:l,records:c,resultCode:r?.resultCode,reasonCode:r?.reasonCode,errorMessage:r?.errorMessage,summary:r?.summary,oneLiner:r?.oneLiner})}if(e.length===0){let a=E(this.config.sessionDir,"runs");if(C(a))try{let l=ye(a,{withFileTypes:!0}).filter(r=>r.isDirectory()).map(r=>r.name).sort();for(let r of l){let c=E(a,r),u=this.readNdjsonFromDir(c);u.length>0&&e.push({objective:this.config.firstObjective,records:u})}}catch{}}return e}readNdjsonFromDir(e){let n=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let i of n)if(C(i))return this.readNdjsonFromFile(i);return[]}readNdjsonFromFile(e){let n=[];if(!C(e))return n;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let i=te(e,"utf-8");for(let s of i.split(`
5
- `)){let a=s.trim();if(a)try{n.push(JSON.parse(a))}catch{}}return n}async generateShareLink(e){let n=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:n,testcase_id:e});let i={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},s=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:s,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let a=s?await this.config.authResolver.fetch(n,i):await k(n,{...i,headers:{...i.headers,Authorization:this.buildAuthHeader()}});if(!a.ok)throw new Error(`Share link API failed: ${a.status} ${await a.text()}`);let o=await a.json();if(!o.shareId)throw new Error("Share link API returned no shareId");return o.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:n,body:i}=M({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:n});let s={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)},a=this.config.authResolver?await this.config.authResolver.fetch(n,s):await k(n,{...s,headers:{...s.headers,Authorization:this.buildAuthHeader()}});if(!a.ok)throw new Error(`Code export failed: ${a.status} ${await a.text()}`)}async pollAndDownloadCode(e,n){let i=B({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),s=this.config.exitTimeoutMs??3e5,a=5e3,o=Date.now()+s;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:i,timeout_ms:s});let l=(r,c)=>this.config.authResolver?this.config.authResolver.fetch(r,c):k(r,{...c,headers:{...c?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<o;){let r=await l(i,{method:"GET",headers:{Accept:"application/json"}});if(!r.ok){let d=await r.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:r.status,body:d.slice(0,200)}),new Error(`code export poll skipped: HTTP ${r.status}`)}let u=(await r.json()).data?.find(d=>d.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),n("code_export","running","Waiting for code generation\u2026"),await this.sleep(a);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),n("code_export","running","Generating code\u2026"),await this.sleep(a);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let _=this.config.codeExportDir??E(this.config.sessionDir,"code-export");D(_,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:_}),n("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let d of u.url){let g=E(_,d.file_name),m=await k(d.file_url);if(!m.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:d.file_name,status:m.status});continue}let f=await m.text();x(g,f,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:d.file_name,size_bytes:f.length})}return _}throw new Error("Code export timed out")}sleep(e){return new Promise(n=>setTimeout(n,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:j(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let n=te(e,"utf8");return JSON.parse(n),n}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let n=this.config.runStatuses.every(r=>r==="passed")?"success":"error",i=this.config.variableIds??{},s=[];if(this.config.variables)for(let[r,c]of Object.entries(this.config.variables)){if(c.secret)continue;let u=r.startsWith("global.")?r.slice(7):r;s.push({id:i[u]??0,name:u,value:c.value,session_value:c.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let a=[],o=[],l=new Set;for(let r of this.collectNdjsonPerRun())for(let c of r.records)if(c.output_variable&&c.output_value!=null&&a.push({name:c.output_variable,value:String(c.output_value),value_type:"test_level",variable_description:"ANALYZE result"}),c.action_type==="upload_files"){let u=S(c.action_params);if(u){let p=u.media_id||u.media_url;if(!l.has(p)){l.add(p),o.push({media_url:u.media_url,media_id:u.media_id,name:u.name,type:u.type});let _=N(u.name);a.push({name:$(u.name),value:_,value_type:"string",variable_description:`variable for ${_}`})}}}return{test_id:this.testId,version:"v4",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:n,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:o,test_params:[],test_level_variables:JSON.stringify(a),test_global_variables:s,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{Pe as a,Ae as b,ie as c};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{extname as o}from"path";var n=[{kind:"text",media_type:"text/plain",extensions:[".txt"],cite:"verbatim",maxBytes:2e6},{kind:"markdown",media_type:"text/markdown",extensions:[".md",".markdown"],cite:"verbatim",maxBytes:2e6},{kind:"image",media_type:"image/png",extensions:[".png"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/jpeg",extensions:[".jpg",".jpeg"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/webp",extensions:[".webp"],cite:"anchor-only",maxBytes:5e6},{kind:"text",media_type:"application/json",extensions:[".json"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/yaml",extensions:[".yaml",".yml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/toml",extensions:[".toml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/xml",extensions:[".xml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"text/plain",extensions:[".log"],cite:"verbatim",maxBytes:2e6},{kind:"pdf",media_type:"application/pdf",extensions:[".pdf"],cite:"verbatim",maxBytes:25e6,sniff:e=>e.subarray(0,5).toString("latin1")==="%PDF-"},{kind:"docx",media_type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",extensions:[".docx"],cite:"verbatim",maxBytes:25e6,sniff:e=>e.length>=4&&e[0]===80&&e[1]===75&&e[2]===3&&e[3]===4,sniffFail:e=>e.length>=8&&e.subarray(0,8).equals(s)?"DOCX_ENCRYPTED_OR_LEGACY: password-protected Office file (or a legacy .doc renamed .docx) \u2014 remove the password / save as .docx and re-ingest":void 0}],s=Buffer.from([208,207,17,224,161,177,26,225]),d={pdf:"pdf",docx:"docx"},x=new Set(Object.keys(d));function r(e){let a=o(e).toLowerCase(),i=n.find(t=>t.extensions.includes(a));return i?{ok:!0,media:i}:{ok:!1,code:"UNSUPPORTED_MEDIA",allowlist:n.flatMap(t=>t.extensions)}}export{d as a,x as b,r as c};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as E}from"./chunk-YCCUBQY4.js";import{y as a}from"./chunk-2KS2YRIS.js";import{a as B}from"./chunk-HCBYKLMW.js";import{a as b,b as n,i as C,k as O}from"./chunk-C44QQJR4.js";import{a as D}from"./chunk-6YGTRKDT.js";import{e as v}from"./chunk-UR6MHSHU.js";var o=v(B(),1);function W(d){let e=d.findIndex(c=>c.free);return e>=0?e:null}var L=60,F=100;function H({headline:d,ask:e=!1,rows:c,sel:t,focused:T,legend:u,freeText:l=null,freeTextNote:m}){let{stdout:i}=O(),r=i?.columns??80,f=r<L,A=Math.min(r-1,F),s=x=>T&&t===x?(0,o.jsx)(n,{color:a.assuranceAccent,children:"\u276F"}):" ",g=e?`? ${d}`:d,p=0,w=c.map((x,S)=>x.free?l?(0,o.jsxs)(b,{flexDirection:"column",children:[(0,o.jsxs)(b,{children:[(0,o.jsxs)(n,{children:[(0,o.jsx)(n,{color:a.assuranceAccent,children:"\u276F"})," ",(0,o.jsx)(n,{color:a.dim,children:"\u270E "})]}),(0,o.jsx)(E,{value:l.value,onChange:l.onChange,onSubmit:l.onSubmit,onCancel:l.onCancel,placeholder:x.label})]}),m?(0,o.jsx)(n,{color:a.muted,children:` ${m}`}):null]},x.key):(0,o.jsxs)(n,{children:[s(S)," ",(0,o.jsx)(n,{color:a.dim,children:`\u270E ${x.label}`})]},x.key):(p+=1,(0,o.jsxs)(n,{bold:T&&t===S,children:[s(S),` ${p}. ${x.label}`,x.detail?(0,o.jsx)(n,{color:a.dim,bold:!1,children:` \u2014 ${x.detail}`}):null]},x.key)));if(f)return(0,o.jsxs)(b,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsx)(n,{bold:!0,color:a.assuranceAccent,children:g}),w,(0,o.jsx)(n,{color:a.muted,children:u})]});let h=Math.max(2,A-(3+g.length+1)),P=Math.max(2,A-(3+u.length+1));return(0,o.jsxs)(b,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsxs)(n,{color:a.assuranceAccent,children:["\u2500\u2500 ",(0,o.jsx)(n,{bold:!0,children:g}),` ${"\u2500".repeat(h)}`]}),(0,o.jsx)(n,{children:" "}),w,(0,o.jsx)(n,{children:" "}),(0,o.jsxs)(n,{color:a.assuranceAccent,children:["\u2500\u2500 ",(0,o.jsx)(n,{color:a.muted,children:u}),` ${"\u2500".repeat(P)}`]})]})}var R=v(B(),1),N="ctrl+t thinking \xB7 ctrl+c exit";function $(d,e){if(d.length<=e)return d;if(e<=1)return"\u2026";let c=Math.ceil((e-1)/2),t=Math.floor((e-1)/2);return`${d.slice(0,c)}\u2026${t>0?d.slice(-t):""}`}function q({verb:d,subject:e,pendingCount:c,creditsTotal:t,state:T,hints:u=N}){let{stdout:l}=O(),m=l?.columns??80,i=[];i.push(d),T&&i.push(T),t!==void 0&&i.push(`${t.toFixed(1)} credits`);let r=c?`[${c} pending]`:null,f=" \xB7 ",s=[...i,...r?[r]:[]].join(f).length,g,p=[...i,...e?[e]:[],...r?[r]:[],u].join(f);if(p.length<=m)g=p;else{let w=m-s-(e?f.length:0)-f.length-u.length;if(e&&w>=8)g=[...i,$(e,w),...r?[r]:[],u].join(f);else{let h=m-s-(e?f.length:0);g=[...i,...e&&h>=4?[$(e,h)]:[],...r?[r]:[]].join(f)}}if(T){let w=` \xB7 ${T}`,h=g.indexOf(w);if(h>=0)return(0,R.jsxs)(n,{color:a.dim,children:[g.slice(0,h+3),(0,R.jsx)(n,{color:a.assuranceAccent,children:T}),g.slice(h+w.length)]})}return(0,R.jsx)(n,{color:a.dim,children:g})}var M=v(D(),1);function J({onToggleThinking:d,onCtrlC:e,explorer:c,panel:t}){let u=(0,M.useRef)(null),l=(0,M.useRef)(""),m=()=>{u.current&&clearTimeout(u.current),u.current=null,l.current=""};return(0,M.useEffect)(()=>m,[]),C((i,r)=>{if(r.ctrl&&i==="t"){d();return}if(r.ctrl&&i==="c"){e();return}if(!r.ctrl&&i.includes("")){e();return}if(!r.ctrl&&i.includes("")){d();return}if(c&&c.isOpen()){let f=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{m(),c.onBack()},150)};if(u.current){if(r.upArrow||r.downArrow||r.return){m(),r.return?c.onEnter():c.onMove(r.upArrow?-1:1);return}if(l.current+=i,l.current==="["){f();return}let A=l.current;m();let s=/^\[([ABCD])/.exec(A);if(s){(s[1]==="A"||s[1]==="B")&&c.onMove(s[1]==="A"?-1:1);return}c.onBack();return}if(r.upArrow){c.onMove(-1);return}if(r.downArrow){c.onMove(1);return}if(r.return){c.onEnter();return}if(r.escape){l.current="",f();return}return}if(t&&t.isFocused()){let f=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{m(),t.onBack()},150)};if(u.current){if(r.upArrow||r.downArrow||r.return||r.leftArrow||r.rightArrow){m(),r.return?t.onSelect():r.leftArrow?t.onLeft?.():r.rightArrow?t.onRight?.():t.onMove(r.upArrow?-1:1);return}if(l.current+=i,l.current==="["){f();return}let A=l.current;m();let s=/^\[([ABCD])/.exec(A);if(s){s[1]==="A"||s[1]==="B"?t.onMove(s[1]==="A"?-1:1):s[1]==="C"?t.onRight?.():t.onLeft?.();return}t.onBack();return}if(r.upArrow){t.onMove(-1);return}if(r.downArrow){t.onMove(1);return}if(r.leftArrow){t.onLeft?.();return}if(r.rightArrow){t.onRight?.();return}if(r.return){t.onSelect();return}if(r.escape){l.current="",f();return}if(/^[1-9]$/.test(i)){t.onDigit(Number(i));return}if(r.tab){t.onTab?.();return}if(i===" "&&t.isMulti()){t.onSpace();return}if(i&&!r.ctrl&&!r.meta){t.onType(i);return}return}}),null}export{W as a,H as b,q as c,J as d};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as J}from"./chunk-2OQLMW3F.js";import{m as H,o as P}from"./chunk-Y5RNCJAN.js";import{a as ce}from"./chunk-6YGTRKDT.js";import{e as ue}from"./chunk-UR6MHSHU.js";var u=ue(ce(),1);function $(p,r){let f=null,R=(b,j)=>{for(let S=0;S<b.length;S++){let y=b[S],l=[...j,S];r(y)&&(f===null||l.length>f.length)&&(f=l),y.children&&y.children.length>0&&R(y.children,l)}};return R(p,[]),f}function T(p,r,f){if(r.length===0)return[...p];let R=r[0],b=[...p],j=b[R];if(r.length===1)b[R]=f(j);else{let S=r.slice(1),y=T(j.children??[],S,f);b[R]={...j,children:y}}return b}function K(){return{steps:[],maxOrdinal:0}}function le(p,r){if(r.type==="run_start"&&r.environment?.resolution)return{...p,resolution:r.environment.resolution};if(r.type==="step_end"&&typeof r.ordinal=="number"&&r.id){let f={id:r.id,ordinal:r.ordinal,status:r.status,...r.kind?{kind:r.kind}:{},...typeof r.duration=="number"?{duration_ms:Math.round(r.duration*1e3)}:{},...typeof r.action_id=="string"&&r.action_id?{action_id:r.action_id}:{}};return{...p,steps:[...p.steps,f],maxOrdinal:Math.max(p.maxOrdinal,r.ordinal)}}return p}function D(p){let r=p.indexOf(": ");return r>0&&r<15?p.slice(r+2):p}function W(p){return p.map(r=>{let f=r.children?W(r.children):r.children;return r.status==="running"?{...r,status:"stopped",phase:void 0,children:f}:f!==r.children?{...r,children:f}:r})}function Se(p,r,f,R,b){let[j,S]=(0,u.useState)(!1),[y,l]=(0,u.useState)([]),[Q,B]=(0,u.useState)(null),[X,F]=(0,u.useState)(null),[Y,w]=(0,u.useState)(null),[Z,L]=(0,u.useState)(null),[ee,q]=(0,u.useState)([]),[ne,G]=(0,u.useState)(null),[te,ie]=(0,u.useState)(void 0),m=(0,u.useRef)(null),x=(0,u.useRef)(null),_=(0,u.useRef)(0),A=(0,u.useRef)(!1),O=(0,u.useRef)(K()),re=(0,u.useCallback)(async(I,V)=>{let z=m.current;if(z){try{await z.exited}catch{}m.current=null}l([]),B(null),F(null),w(null),L(null),q([]),G(null),ie(I.max_steps),S(!0),x.current=null,_.current=0,O.current=K();let h;try{h=J(I,V)}catch(E){w(E instanceof Error?E.message:String(E)),S(!1);return}m.current=h,H("runner",()=>h.cancel()),(async()=>{A.current=!1;let E=!1;for await(let e of h.events){if(A.current)break;switch(O.current=le(O.current,e),e.type){case"run_start":if(e.child_id)break;if(x.current&&!x.current.isSingleFlow){let o=_.current;_.current++,l(d=>d.map((i,s)=>s===o?{...i,status:"running"}:i.status==="running"&&!i.children?.some(n=>n.status==="running")?{...i,status:i.children?.some(n=>n.status==="failed")?"failed":"passed"}:i))}break;case"bifurcation":{let o=e.flows??[],d=e.count??o.length,i={flows:o,isSingleFlow:e.is_single_flow??d<=1};L(i),x.current=i,_.current=0,l(o.map((s,n)=>({index:n+1,objective:s??`Flow ${n+1}`,status:"pending"})));break}case"step_start":{r?.("STEP_START",`Step ${e.index} started`,{index:e.index,objective:e.objective,child_id:e.child_id});let o=e.index,d=e.objective??`Step ${o}`,i=e.child_id,s=x.current&&!x.current.isSingleFlow;if(i)l(n=>{let t=$(n,a=>a.branchChildId===i)??$(n,a=>a.status==="running");return t?T(n,t,a=>{let c=(a.children??[]).map(g=>g.status==="running"&&g.childId===i?{...g,status:"stopped",phase:void 0}:g);return c.push({index:o,objective:d,status:"running",childId:i}),{...a,children:c}}):n});else if(s){let n=Math.max(0,_.current-1);l(t=>{let a=[...t];if(n>=a.length)return t;let c={...a[n]},k=[...c.children??[]].map(U=>U.status==="running"&&U.childId===void 0?{...U,status:"stopped",phase:void 0}:U);return k.push({index:o,objective:d,status:"running"}),c.children=k,c.status="running",a[n]=c,a})}else l(n=>{let t=W(n);return t.some(c=>c.index===o)?t.map(c=>c.index===o?{...c,status:"running",objective:d}:c):[...t,{index:o,objective:d,status:"running"}]});break}case"step_event":{r?.("STEP_EVENT",`Step ${e.index} ${e.event}`,{index:e.index,phase:e.event,action_type:e.action_type,detail:e.detail,child_id:e.child_id});let o=e.child_id,d=x.current&&!x.current.isSingleFlow;if(e.event==="cm_init"&&e.checkpoint_count!=null){q(i=>[...i,e.checkpoint_count]);break}if(e.event==="replay_started"){G({recordingLength:e.recording_length??0});break}if(e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&f?.(e.detail),o){let i=n=>{if(n.index!==e.index||n.childId!==o)return n;let t={phase:e.event};return e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&(t.objective=e.detail),e.action_type&&(t.actionType=e.action_type),{...n,...t}},s=n=>n.map(t=>{let a=i(t);return a!==t?a:t.children&&t.children.length>0?{...t,children:s(t.children)}:t});l(n=>n.map(t=>t.children?{...t,children:s(t.children)}:t))}else if(d){let i=Math.max(0,_.current-1);l(s=>{let n=[...s];if(i>=n.length)return s;let t={...n[i]},a=[...t.children??[]];if(!a.some(g=>g.index===e.index&&g.childId===void 0))a.push({index:e.index,objective:`Step ${e.index}`,status:"running",phase:e.event,actionType:e.action_type});else for(let g=0;g<a.length;g++){if(a[g].index!==e.index||a[g].childId!==void 0)continue;let k={phase:e.event};e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&(k.objective=e.detail),e.action_type&&(k.actionType=e.action_type),a[g]={...a[g],...k}}return t.children=a,n[i]=t,n})}else l(i=>i.some(n=>n.index===e.index)?i.map(n=>{if(n.index!==e.index)return n;let t={phase:e.event};return e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&(t.objective=e.detail),e.action_type&&(t.actionType=e.action_type),{...n,...t}}):[...W(i),{index:e.index,objective:`Step ${e.index}`,status:"running",phase:e.event,actionType:e.action_type}]);break}case"step_end":{r?.("STEP_END",`Step ${e.index} ${e.status}`,{index:e.index,status:e.status,duration:e.duration,summary:e.summary,child_id:e.child_id}),R?.();let o=e.child_id,d=x.current&&!x.current.isSingleFlow;if(o){let i=n=>n.index===e.index&&n.childId===o?{...n,status:e.status,duration:e.duration,phase:void 0,objective:n.objective.startsWith("Step ")?D(e.summary||n.objective):n.objective}:n,s=n=>n.map(t=>{let a=i(t);return a!==t?a:t.children&&t.children.length>0?{...t,children:s(t.children)}:t});l(n=>n.map(t=>t.children?{...t,children:s(t.children)}:t))}else if(d){let i=Math.max(0,_.current-1);l(s=>{let n=[...s];if(i>=n.length)return s;let t={...n[i]},a=(t.children??[]).map(c=>c.index===e.index&&c.childId===void 0?{...c,status:e.status,duration:e.duration,phase:void 0,objective:c.objective.startsWith("Step ")?D(e.summary||c.objective):c.objective}:c);return t.children=a,n[i]=t,n})}else l(i=>i.map(s=>s.index===e.index?{...s,status:e.status,duration:e.duration,phase:void 0,objective:s.objective.startsWith("Step ")?D(e.summary||s.objective):s.objective}:s));{let s=x.current&&!x.current.isSingleFlow?Math.max(0,_.current-1):0,n=typeof e.ordinal=="number"&&e.id?{ordinal:e.ordinal,id:e.id}:void 0;p?.(e.index,s,e.child_id,n)}break}case"child_agent_start":{let o=e.objective??"",d=e.child_id;l(i=>{let s=$(i,n=>n.status==="running");return s?T(i,s,n=>({...n,objective:`${o} (branch)`,phase:`child: ${o.slice(0,50)}`,branchObjective:o,branchChildId:d})):i});break}case"child_agent_end":{let o=e.child_id,d=`child ${e.success?"done":"failed"}`;l(i=>{let s=$(i,n=>n.branchChildId===o);return s?T(i,s,n=>({...n,phase:d})):i.map(n=>n.phase?.startsWith("child:")?{...n,phase:d}:n)});break}case"describe_trigger":b?.(e);break;case"ask_user":B(e.question??"");break;case"run_end":l(o=>o.map(d=>d.status==="running"?{...d,status:e.status,phase:void 0}:d)),S(!1),F(e),E=!0;break;case"error":S(!1),w(e.message??"Runner error"),l(o=>o.map(d=>d.status==="running"?{...d,status:"failed",phase:void 0}:d));break}}let{code:v,signal:M}=await h.exited,N=h.stderr,de=v===0&&!M,C=[];v!==null&&v!==0&&C.push(`Runner exited with code ${v}`),M&&C.push(`Runner killed by signal ${M}`),N&&(!de||!E?C.push(N):V?.log?.("debug","RUNNER_STDERR_BENIGN","Runner stderr on clean exit",{stderr:N})),m.current===h&&(C.length>0&&w(C.join(`
3
- `)),S(!1),P("runner","Event stream ended"),m.current=null)})().catch(E=>{let v=[`Runner event loop error: ${E}`];h.exitCode!==null&&h.exitCode!==0&&v.push(`Exit code: ${h.exitCode}`),h.exitSignal&&v.push(`Signal: ${h.exitSignal}`),h.stderr&&v.push(h.stderr),m.current===h&&(w(v.join(`
4
- `)),S(!1),P("runner","Event loop error"),m.current=null)})},[p,r,f,R,b]),se=(0,u.useCallback)(I=>{m.current?.sendUserResponse(I),B(null)},[]),ae=(0,u.useCallback)(()=>{let I=m.current;I&&(I.sendCancel("user"),S(!1),B(null),setTimeout(()=>{m.current===I&&(P("runner","User cancelled run"),m.current=null)},5e3))},[]),oe=(0,u.useCallback)(()=>{l([]),F(null),w(null)},[]);return(0,u.useEffect)(()=>()=>{A.current=!0,P("runner","Component unmounted"),m.current=null},[]),{isRunning:j,steps:y,askingUser:Q,lastRunEnd:X,runError:Y,bifurcationInfo:Z,cmInitCounts:ee,replayInfo:ne,maxSteps:te,startRun:re,sendAnswer:se,cancelRun:ae,clearLastRun:oe,getEvidenceState:()=>O.current}}export{K as a,le as b,Se as c};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as k,c as A}from"./chunk-JHHMXU76.js";import{b as M}from"./chunk-DNNZ353O.js";import{a as T}from"./chunk-Q2F5QB2W.js";import{b as E,c as f}from"./chunk-NVGBE2DR.js";import{a as F}from"./chunk-SDRFTIRU.js";import{a as C,c as R}from"./chunk-L4JIMNKW.js";import{e as L}from"./chunk-MBXWXBDM.js";import{a as N,d as x,f as $}from"./chunk-5YPBPZUR.js";import{existsSync as V,mkdirSync as H,readFileSync as K,writeFileSync as Z}from"fs";import{basename as X,extname as U,join as Y}from"path";var B=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function G(e){return typeof e=="string"&&e!=="."&&e!==".."&&B.test(e)}function w(e){if(!G(e))throw new Error(`unsafe logical_id: ${JSON.stringify(e)} \u2014 must match ${String(B)} (no path separators)`)}function q(e,r,n){return T({source_id:e,source_cid:"sha256:".padEnd(71,"0"),doc_kind:r,numbered_text:M(n)})}var P=2e3;function Q(e){let n=X(e,U(e)).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^[^a-z0-9]+/,"");return w(n),n}function ue(e){let r=/^(.*?)[-_.]?v?\d+$/.exec(e);if(!r)return null;let n=(r[1]??"").replace(/[-_.]+$/,"");return n.length>0&&n!==e?n:null}function W(e){let r=Y(e,"meta.json");V(r)||(H(e,{recursive:!0}),Z(r,JSON.stringify({schema:N,canonicalizer:"v1"},null,2)+`
3
- `))}async function fe(e){let{contextDir:r,filePath:n,asId:g,confirmSameSource:S,converters:j}=e;W(r);let a=K(n),t=A(n);if(!t.ok)throw new Error(`UNSUPPORTED_MEDIA: ${U(n)} \u2014 supported: ${t.allowlist.join(" ")}`);if(a.byteLength>t.media.maxBytes)throw new Error(`FILE_TOO_LARGE: ${a.byteLength} bytes > ${t.media.maxBytes} cap for ${t.media.media_type}`);if(t.media.sniff&&!t.media.sniff(a)){let i=t.media.sniffFail?.(a);throw new Error(i??`MEDIA_SNIFF_MISMATCH: ${n} does not look like ${t.media.media_type}`)}let p=[],d=k[t.media.kind];if(t.media.cite==="verbatim"&&!d){try{new TextDecoder("utf-8",{fatal:!0}).decode(a)}catch{throw new Error(`ENCODING_UNSUPPORTED: ${n} is not valid UTF-8 \u2014 re-save it as UTF-8 and re-ingest`)}a.toString("utf8").split(`
4
- `).some(i=>i.length>P)&&p.push(`long line detected (> ${P} chars) \u2014 anchors lose granularity; consider pretty-printing before ingest`)}let c=E(a),s;g!==void 0?(w(g),s=g):s=Q(n);let u=F(r),l=u.heads.get(s),z=l!=null?u.getNode(l)?.content:void 0;if(l!=null&&z?.blob===c)return{status:"unchanged",source_id:s,cid:l,blob:c};if(l==null){for(let[i,o]of u.heads.entries())if(!(i===s||o==null)&&u.getNode(o)?.content.blob===c){if(S&&await S(i))return{status:"unchanged",source_id:i,cid:o,blob:c};break}}let I={},b,m=null,h=null;if(d){let i=j?.[d];if(!i)throw new Error(`${d.toUpperCase()}_CONVERTER_MISSING: ${d} ingestion requires the converter \u2014 the command layer wires it`);let o=await i(a);m=Buffer.from(o.projection,"utf8");let O=q(s,t.media.kind,m);if(O>4e5)throw new Error(`PROJECTION_TOO_LARGE: serialized source payload ${O} bytes > ${4e5} \u2014 split the document and re-ingest`);I={text_blob:E(m),...o.inventory.length>0?{images:o.inventory}:{},converter:o.converter},h=o.blobs,b={kind:t.media.kind,...o.pages!==void 0?{pages:o.pages}:{},delivered:o.delivered.length,omitted:o.inventory.length-o.delivered.length}}if(f(r,a),m!==null&&f(r,m),h!==null)for(let[,i]of h)f(r,i);let _=R(s,c),y=$("source",_);if(y.length>0)throw new Error(`source node fails ${y[0].code}: ${y[0].detail}`);let v=C("source",_);return L(r,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:v,label:x.SOURCE,content:_}],edges:[],review:[],supersessions:[],media:{[s]:{format:t.media.kind,media_type:t.media.media_type,anchors_supported:d?["L-L","img#ref"]:t.media.cite==="verbatim"?["L-L"]:[],...I}},source_head_moves:{[s]:v}}),{status:l!=null?"versioned":"created",source_id:s,cid:v,blob:c,...p.length?{warnings:p}:{},...b?{composite:b}:{}}}export{q as a,Q as b,ue as c,fe as d};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d,e,f,g,h,i}from"./chunk-QPT4ERGK.js";import"./chunk-Q2F5QB2W.js";import"./chunk-VOHQA2SP.js";import"./chunk-NVGBE2DR.js";import"./chunk-IAHKTEET.js";import"./chunk-UR6MHSHU.js";export{a as DOCX_CONVERTER_POLICY,b as DOCX_CONVERTER_VERSION,d as DOCX_IMAGE_CAP,c as DOCX_IMAGE_DIMENSION_FLOOR,f as DOCX_IMAGE_MAX_BYTES,g as DOCX_IMAGE_MAX_PIXELS,e as DOCX_VISION_BYTE_BUDGET,i as convertDocx,h as renderTokens};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d}from"./chunk-ZPENY2Q3.js";import"./chunk-JHHMXU76.js";import"./chunk-DNNZ353O.js";import"./chunk-Q2F5QB2W.js";import"./chunk-NVGBE2DR.js";import"./chunk-SDRFTIRU.js";import"./chunk-RGDQMKNJ.js";import"./chunk-A46NBRAP.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{a as compositePayloadBytes,d as ingestFile,b as slugFromFilename,c as versionBaseOf};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as g}from"./chunk-RN4OSVTG.js";import{b as l,c as p,d as $}from"./chunk-ZPENY2Q3.js";import"./chunk-JHHMXU76.js";import"./chunk-DNNZ353O.js";import{g as b}from"./chunk-EV3EHXEI.js";import{i as v}from"./chunk-QPT4ERGK.js";import"./chunk-Q2F5QB2W.js";import"./chunk-VOHQA2SP.js";import{a as u}from"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import{a as f}from"./chunk-SDRFTIRU.js";import"./chunk-RGDQMKNJ.js";import"./chunk-A46NBRAP.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{existsSync as O}from"fs";import{appendFileSync as y,mkdirSync as h}from"fs";import{homedir as T}from"os";import{dirname as w,join as S}from"path";function x(n,a){let e=/^(DOCX_[A-Z_]+):/.exec(a)?.[1];if(e)try{let s=process.env.KANE_CONTEXT_REFUSAL_LOG??S(T(),".testmuai","kaneai","context-refusals.log");h(w(s),{recursive:!0}),y(s,`${new Date().toISOString()} ${e} ${n}
3
- `)}catch{}}async function _(n,a,e,s=process.cwd()){let i=u(s);if(a.as!==void 0&&n.length>1)return(e.err??e.out)(`error: --as names ONE source identity \u2014 pass a single file (got ${n.length})`),2;for(let c of n){let d=a.as;if(e.isTTY&&d===void 0&&O(i)){let o=l(c),r=p(o);if(r){let m=f(i);m.heads.get(r)!=null&&m.heads.get(o)==null&&await e.confirm(`${o} looks like a new version of existing source '${r}' \u2014 ingest as '${r}' (moves its head)?`)&&(d=r)}}let t;try{t=await $({contextDir:i,filePath:c,asId:d,confirmSameSource:e.isTTY?o=>e.confirm(`identical bytes already ingested as ${o} \u2014 treat as the same source?`):void 0,converters:{pdf:b,docx:v}})}catch(o){let r=o instanceof Error?o.message:String(o);return x(c,r),e.out(`error: ${c}: ${r}`),1}e.out(`${t.status} ${t.source_id} source ${t.cid} blob ${t.blob}`);for(let o of t.warnings??[])e.out(`warning: ${o}`);if(t.composite){let o=t.composite.pages!==void 0?` ${t.composite.pages} pages,`:"";e.out(`${t.source_id}: ${t.composite.kind},${o} ${t.composite.delivered} images delivered (${t.composite.omitted} omitted)`)}if(!e.isTTY&&t.status==="created"){let o=f(i);for(let[r,m]of o.heads.entries())if(!(r===t.source_id||m==null)&&o.getNode(m)?.content.blob===t.blob){e.out(`hint: identical bytes already ingested as ${r} \u2014 merged later via review`);break}}}return 0}async function G(n,a){let{createInterface:e}=await import("readline/promises");return _(n,a,{out:s=>process.stdout.write(s+`
4
- `),isTTY:g(),confirm:async s=>{let i=e({input:process.stdin,output:process.stdout});try{let c=await i.question(`${s} [Y/n] `);return!/^n(o)?$/i.test(c.trim())}finally{i.close()}}})}export{G as ingestCommand,_ as runIngestCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-6ZJ7ZFEX.js";import"./chunk-5F7PU5AJ.js";import"./chunk-RFHMDQXZ.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RH4GCEFX.js";import"./chunk-YJIESLN6.js";import"./chunk-2KS2YRIS.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c}from"./chunk-GLS46X7N.js";import"./chunk-2YQ6TW77.js";import"./chunk-WAOCHXJ5.js";import"./chunk-OESHJ4J2.js";import"./chunk-FCMLIK7P.js";import"./chunk-CJJXT5DO.js";import"./chunk-QM4S2APK.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-SDRFTIRU.js";import"./chunk-RGDQMKNJ.js";import"./chunk-A46NBRAP.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RH4GCEFX.js";import"./chunk-2KS2YRIS.js";import"./chunk-UR6MHSHU.js";export{c as UploadPipeline,b as packPresignEntry,a as readPackForUpload};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-SDRFTIRU.js";import"./chunk-RGDQMKNJ.js";import"./chunk-A46NBRAP.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{a as openGraph,b as staleForEvolve};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b,b as c,c as d,d as e,e as f,f as g}from"./chunk-JTCW76YG.js";import"./chunk-K7USHLVZ.js";import{f as a}from"./chunk-ZFFRHV5U.js";import"./chunk-JFAFKHDX.js";import"./chunk-J44RN3FB.js";import"./chunk-GG43HSU2.js";import"./chunk-OSALXGD4.js";import"./chunk-JHHMXU76.js";import"./chunk-DNNZ353O.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import"./chunk-FHKDTM5L.js";import"./chunk-NVGBE2DR.js";import"./chunk-SDRFTIRU.js";import"./chunk-RGDQMKNJ.js";import"./chunk-A46NBRAP.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-5EOX4MEY.js";import"./chunk-2KS2YRIS.js";import"./chunk-UR6MHSHU.js";export{f as dedupPreFlags,b as deliveredImagesWire,d as displaySourceName,a as resolveAnswers,g as runExtract,c as sessionSourceRef,e as sourceBanner};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-KK7DYHK6.js";import"./chunk-KHU7C6EE.js";import"./chunk-SKRZN25J.js";import"./chunk-ZFFRHV5U.js";import"./chunk-JFAFKHDX.js";import"./chunk-J44RN3FB.js";import"./chunk-3C5GMAM4.js";import"./chunk-GG43HSU2.js";import"./chunk-OSALXGD4.js";import"./chunk-DNNZ353O.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import"./chunk-FHKDTM5L.js";import"./chunk-ZPDM6FO7.js";import"./chunk-NVGBE2DR.js";import"./chunk-L5LI2JF4.js";import"./chunk-SDRFTIRU.js";import"./chunk-RGDQMKNJ.js";import"./chunk-A46NBRAP.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-5EOX4MEY.js";import"./chunk-2KS2YRIS.js";import"./chunk-UR6MHSHU.js";export{a as runDesign};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as a}from"./chunk-WSZ7IENQ.js";import"./chunk-3MSXQU2C.js";import"./chunk-LPBAQQ7E.js";import"./chunk-MJF3USZF.js";import"./chunk-TLL7KFLY.js";import"./chunk-4OSW2WEN.js";import"./chunk-2XMJ6YAE.js";import"./chunk-GLS46X7N.js";import"./chunk-C3OGWCII.js";import"./chunk-GWJ76BLF.js";import"./chunk-XZW3TBOV.js";import"./chunk-2YQ6TW77.js";import"./chunk-76I6NJBX.js";import"./chunk-OIYGGEUL.js";import"./chunk-RKWJG3WW.js";import"./chunk-VYQMCLKG.js";import"./chunk-7APDXIKI.js";import"./chunk-DHF3VO2R.js";import"./chunk-RLZA4VJT.js";import"./chunk-2OQLMW3F.js";import"./chunk-6JTEWZ75.js";import"./chunk-J4WS2SXT.js";import"./chunk-YVXC46DY.js";import"./chunk-5Y2G4NC7.js";import"./chunk-FYDBD7Q4.js";import"./chunk-ECFOND7B.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-6MTVGARW.js";import"./chunk-6ZJ7ZFEX.js";import"./chunk-5F7PU5AJ.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-KA7Q5IIC.js";import"./chunk-RFHMDQXZ.js";import"./chunk-OESHJ4J2.js";import"./chunk-FCMLIK7P.js";import"./chunk-CJJXT5DO.js";import"./chunk-QM4S2APK.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-SDRFTIRU.js";import"./chunk-RGDQMKNJ.js";import"./chunk-A46NBRAP.js";import"./chunk-L4JIMNKW.js";import"./chunk-MBXWXBDM.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-6CGNLFSN.js";import"./chunk-SACSQY3Q.js";import"./chunk-7LWXIRI3.js";import"./chunk-YCCUBQY4.js";import"./chunk-AYDUHTPA.js";import"./chunk-Y5RNCJAN.js";import"./chunk-5EOX4MEY.js";import"./chunk-5LTUYXMP.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RH4GCEFX.js";import"./chunk-VE3SUJMA.js";import"./chunk-E47GFYXA.js";import"./chunk-YJIESLN6.js";import"./chunk-W54W762O.js";import"./chunk-6NWPK2MS.js";import{a as o}from"./chunk-DFS4RMVP.js";import"./chunk-FEF75YKV.js";import"./chunk-TW3K2DKB.js";import"./chunk-2KS2YRIS.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-6MTVGARW.js";import"./chunk-5F7PU5AJ.js";import"./chunk-RZ4F3BHX.js";import"./chunk-RH4GCEFX.js";import"./chunk-2KS2YRIS.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};