@testmuai/kane-cli 0.6.11 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/dist/ChatSurface-D66CACLX.js +8 -0
  2. package/dist/{ChromeProfilePicker-54CAJDUF.js → ChromeProfilePicker-4CDSPBWL.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-TCAH4AHL.js → CliFeedbackPrompt-TLRVBA4E.js} +1 -1
  4. package/dist/{CliUploadProgress-UURZ63VQ.js → CliUploadProgress-WGGFLUSF.js} +1 -1
  5. package/dist/{ConfigView-5QGB7MUS.js → ConfigView-DBANTBXC.js} +1 -1
  6. package/dist/EvidenceViewOffer-DNCQ3A6R.js +2 -0
  7. package/dist/{FolderPicker-Y5MAYFIJ.js → FolderPicker-W7RCIFEL.js} +1 -1
  8. package/dist/{HelpView-S3GJGSCE.js → HelpView-FBCX32U7.js} +1 -1
  9. package/dist/{InfoBox-LYTNNMVJ.js → InfoBox-KK2ICVS4.js} +1 -1
  10. package/dist/{LinksBox-5MSEKNSV.js → LinksBox-KKRANMR3.js} +1 -1
  11. package/dist/{ProfilesView-LTHE5UIO.js → ProfilesView-DGPXSAQN.js} +1 -1
  12. package/dist/{ProjectPicker-XMXIGHSE.js → ProjectPicker-ESQSL4TT.js} +1 -1
  13. package/dist/{SaveSessionPrompt-VQDEA4WA.js → SaveSessionPrompt-AQGP5W6E.js} +1 -1
  14. package/dist/SingleShotApp-SMCAIKCE.js +2 -0
  15. package/dist/{SummaryBox-WWF3G263.js → SummaryBox-BFZJW2KK.js} +1 -1
  16. package/dist/TestMdRunView-FMKZJ3A3.js +2 -0
  17. package/dist/{WhoamiView-PDURYP7E.js → WhoamiView-JABY3I5Q.js} +1 -1
  18. package/dist/{auth-I4RB4KO3.js → auth-76LVI6B5.js} +1 -1
  19. package/dist/bind-AACBTSAA.js +12 -0
  20. package/dist/bootstrap-CNOZ5VRB.js +2 -0
  21. package/dist/bridge-T4HL4TG7.js +2 -0
  22. package/dist/{changelog-OKYH4F7I.js → changelog-PSWPPOAF.js} +1 -1
  23. package/dist/chat-committer-4BQBOKI4.js +2 -0
  24. package/dist/chat-controller-NNTMKEPG.js +2 -0
  25. package/dist/{chunk-NUQ423YE.js → chunk-2KBD6JZX.js} +1 -1
  26. package/dist/chunk-2SREGETM.js +4 -0
  27. package/dist/chunk-2XGDWUJ5.js +2 -0
  28. package/dist/{chunk-MJBCBQC2.js → chunk-322JEJEH.js} +1 -1
  29. package/dist/{chunk-SURF5Z7Y.js → chunk-323MLBYA.js} +1 -1
  30. package/dist/{chunk-HOQEMPMQ.js → chunk-33QXD75Y.js} +2 -2
  31. package/dist/{chunk-K7USHLVZ.js → chunk-36OC3TFE.js} +1 -1
  32. package/dist/{chunk-ZNHXIRCM.js → chunk-3FN5VJMV.js} +2 -2
  33. package/dist/chunk-3LWTUMDG.js +2 -0
  34. package/dist/chunk-3STZLM5J.js +4 -0
  35. package/dist/{chunk-KXUSG5ZI.js → chunk-4OPQJ7PE.js} +1 -1
  36. package/dist/chunk-5JTUL6XL.js +2 -0
  37. package/dist/{chunk-FMR2KPSK.js → chunk-5KFS3GAZ.js} +1 -1
  38. package/dist/{chunk-XZRIQ3GF.js → chunk-6HEGD6H2.js} +1 -1
  39. package/dist/{chunk-XWSAKVEY.js → chunk-6UJDOAYR.js} +2 -2
  40. package/dist/{chunk-QJIJC3KC.js → chunk-73C4PRYU.js} +1 -1
  41. package/dist/chunk-AAONIIQV.js +6 -0
  42. package/dist/chunk-AH7ZZIZY.js +2 -0
  43. package/dist/chunk-AM5S4KG4.js +6 -0
  44. package/dist/{chunk-7MRBMDZ5.js → chunk-APAIWBIH.js} +1 -1
  45. package/dist/{chunk-HMM5FJJO.js → chunk-BAL64WSI.js} +1 -1
  46. package/dist/chunk-BB2W35TW.js +2 -0
  47. package/dist/chunk-BQHKBOSF.js +11 -0
  48. package/dist/chunk-C4G7RVJ6.js +2 -0
  49. package/dist/{chunk-NTGYFYBP.js → chunk-CDQX6HGJ.js} +1 -1
  50. package/dist/{chunk-KSZ72BSC.js → chunk-CSQ46PJ7.js} +1 -1
  51. package/dist/chunk-DQ54MH7F.js +13 -0
  52. package/dist/{chunk-3AZTXJY4.js → chunk-DXV6MBTD.js} +1 -1
  53. package/dist/chunk-DYW5C6II.js +2 -0
  54. package/dist/{chunk-LHDNJJGE.js → chunk-F6ZOJXYU.js} +1 -1
  55. package/dist/chunk-GVIPTX6T.js +6 -0
  56. package/dist/chunk-GW5DWAXY.js +2 -0
  57. package/dist/chunk-HJERKSBK.js +349 -0
  58. package/dist/{chunk-POYZ6SAI.js → chunk-HPMS5KO6.js} +2 -2
  59. package/dist/{chunk-3RZ63RBO.js → chunk-IBNC444G.js} +1 -1
  60. package/dist/{chunk-73OQDAXF.js → chunk-IQDWBTRJ.js} +1 -1
  61. package/dist/chunk-IXVOXJP6.js +6 -0
  62. package/dist/{chunk-IQODWB32.js → chunk-JEUA4UWK.js} +1 -1
  63. package/dist/{chunk-GLA6QL3T.js → chunk-JKTFTF24.js} +1 -1
  64. package/dist/{chunk-KHJXOFDM.js → chunk-JRMDGLLT.js} +1 -1
  65. package/dist/{chunk-GIMTSDNC.js → chunk-KNDSQ4PS.js} +1 -1
  66. package/dist/chunk-KRXSXQBU.js +12 -0
  67. package/dist/{chunk-4CJ55EUY.js → chunk-KT6G7AF2.js} +1 -1
  68. package/dist/chunk-KVQOBPAZ.js +2 -0
  69. package/dist/chunk-L2TV4G56.js +4 -0
  70. package/dist/{chunk-6HYW5RFX.js → chunk-L4JIMNKW.js} +1 -1
  71. package/dist/{chunk-FSB3FTIQ.js → chunk-L7VREJTG.js} +1 -1
  72. package/dist/{chunk-MRP54NCJ.js → chunk-LQZ2BU7Q.js} +1 -1
  73. package/dist/{chunk-EAUUULJQ.js → chunk-LR5XO2KD.js} +1 -1
  74. package/dist/chunk-M7WQM4UA.js +4 -0
  75. package/dist/{chunk-KHQHVSZ6.js → chunk-NAC7SFBE.js} +1 -1
  76. package/dist/{chunk-DSOA6L73.js → chunk-NAE7MBR2.js} +3 -3
  77. package/dist/{chunk-NTNAHN25.js → chunk-NBKQT7LJ.js} +1 -1
  78. package/dist/{chunk-7NLQ3QQD.js → chunk-NJPTOKW5.js} +1 -1
  79. package/dist/{chunk-RFJAYURU.js → chunk-NOCIMJSN.js} +1 -1
  80. package/dist/chunk-NRC2G4Y5.js +5 -0
  81. package/dist/{chunk-H2W2UNTN.js → chunk-NRTHYROA.js} +1 -1
  82. package/dist/chunk-O56PUUNL.js +9 -0
  83. package/dist/chunk-OHRS3H7Z.js +5 -0
  84. package/dist/{chunk-FCHTL74E.js → chunk-PMHJRT3A.js} +1 -1
  85. package/dist/{chunk-GRB66C5S.js → chunk-QROUKGKU.js} +1 -1
  86. package/dist/{chunk-XXMNUJX4.js → chunk-R2RGSO4B.js} +1 -1
  87. package/dist/{chunk-MFOH7EYR.js → chunk-RNSSM2BK.js} +1 -1
  88. package/dist/chunk-SE6WNCYU.js +4 -0
  89. package/dist/{chunk-ICGHBZFZ.js → chunk-SRDHPKJT.js} +1 -1
  90. package/dist/chunk-SWESH2J7.js +10 -0
  91. package/dist/chunk-SY3HLQMV.js +4 -0
  92. package/dist/chunk-T63R6QT4.js +4 -0
  93. package/dist/{chunk-ZP4S5WGW.js → chunk-UBFKZEX3.js} +2 -2
  94. package/dist/chunk-UI7KULSI.js +7 -0
  95. package/dist/chunk-UPPEOQJQ.js +3 -0
  96. package/dist/chunk-URQUQWGW.js +62 -0
  97. package/dist/chunk-UX2B7L6K.js +2 -0
  98. package/dist/{chunk-XSKLH2MC.js → chunk-V36ATG7A.js} +2 -2
  99. package/dist/chunk-VGFTNLQQ.js +2 -0
  100. package/dist/{chunk-RGJIRS3B.js → chunk-W5DOU2DV.js} +1 -1
  101. package/dist/chunk-W6VD2XFO.js +19 -0
  102. package/dist/chunk-WJ5HDEVH.js +6 -0
  103. package/dist/chunk-WWNSD6FA.js +6 -0
  104. package/dist/{chunk-ZPCU6546.js → chunk-X3ICV5M5.js} +1 -1
  105. package/dist/chunk-XDHZMCTA.js +4 -0
  106. package/dist/{chunk-2WKX3RMA.js → chunk-XVDJ423L.js} +1 -1
  107. package/dist/chunk-ZLCZDAEX.js +6 -0
  108. package/dist/{chunk-NJAHRITS.js → chunk-ZM5PVRJK.js} +1 -1
  109. package/dist/committer-2EJPVVCQ.js +2 -0
  110. package/dist/{config-QISRENF5.js → config-R3GF2FZA.js} +1 -1
  111. package/dist/cover-cmd-TXICWHUU.js +3 -0
  112. package/dist/{credentials-OGLK7MPV.js → credentials-XN4ROCQ3.js} +1 -1
  113. package/dist/design-committer-BQUWD6AC.js +2 -0
  114. package/dist/docx-convert-ZBVQO2LG.js +1 -1
  115. package/dist/dossier-QZV74XOS.js +3 -0
  116. package/dist/evidence-V23FPVXQ.js +2 -0
  117. package/dist/evolve-cmd-PZCPXDMR.js +2 -0
  118. package/dist/{exit-manager-MXUD7GQ7.js → exit-manager-HNFATGSM.js} +1 -1
  119. package/dist/explain-UE4IACQH.js +2 -0
  120. package/dist/{explain-cmd-NWIYH5MI.js → explain-cmd-RZW6QJYM.js} +1 -1
  121. package/dist/{explain-cmd-DBUTPZHA.js → explain-cmd-X7JZLSZZ.js} +1 -1
  122. package/dist/extract-bind-BFY7IRL4.js +10 -0
  123. package/dist/extract-cmd-U3MGK2LP.js +6 -0
  124. package/dist/feeder-XGTFV7TZ.js +2 -0
  125. package/dist/gaps-cmd-BWCRLLBK.js +3 -0
  126. package/dist/{gate-B6C6KLFA.js → gate-YHBPWEM5.js} +1 -1
  127. package/dist/{generate-headless-TUA3HGRX.js → generate-headless-BSTDLZZY.js} +2 -2
  128. package/dist/{headless-io-PWW6YKH2.js → headless-io-BL3TEAX5.js} +1 -1
  129. package/dist/index.js +67 -68
  130. package/dist/ingest-AL6CABJT.js +2 -0
  131. package/dist/ingest-cmd-O6OWWZT4.js +2 -0
  132. package/dist/interactive-bind-43HGDF5K.js +24 -0
  133. package/dist/lifecycle-cmd-D6TVTYRK.js +2 -0
  134. package/dist/list-cmd-XCAV2FKA.js +3 -0
  135. package/dist/{list-commands-F53ZNYOZ.js → list-commands-747UTUSS.js} +1 -1
  136. package/dist/locks-cmd-QAULI5LV.js +2 -0
  137. package/dist/logical-ids-4G4FAHNJ.js +2 -0
  138. package/dist/login-flow-CV76ENHV.js +2 -0
  139. package/dist/maintenance-cmd-ZRB4NTGG.js +2 -0
  140. package/dist/next-TRSKMBO5.js +2 -0
  141. package/dist/paths-JCYX6UWL.js +2 -0
  142. package/dist/{persist-recorded-session-5ZFS5SMZ.js → persist-recorded-session-MDPWWUA7.js} +1 -1
  143. package/dist/phase-seed-52LRE3LH.js +2 -0
  144. package/dist/pipeline-LM5JAK7F.js +2 -0
  145. package/dist/readmodel-X7L7W2BA.js +2 -0
  146. package/dist/reconcile-cmd-DGCSDML6.js +2 -0
  147. package/dist/{recording-banner-ZZUF2MGT.js → recording-banner-TALO7PUR.js} +1 -1
  148. package/dist/records-5SVUXJBW.js +2 -0
  149. package/dist/{require-project-folder-NQBZFUPF.js → require-project-folder-R347LFDQ.js} +1 -1
  150. package/dist/revert-DXXYXJGN.js +2 -0
  151. package/dist/review-cmd-2QF5HTI7.js +4 -0
  152. package/dist/run-52UIBPXD.js +2 -0
  153. package/dist/run-VRVH4VO3.js +2 -0
  154. package/dist/{run-test-md-XOSCYVSS.js → run-test-md-DFNIGYB7.js} +2 -2
  155. package/dist/sessions-BLXZVK5U.js +2 -0
  156. package/dist/sessions-cmd-AQWLL5ZN.js +25 -0
  157. package/dist/{skill-installer-VYIIWAK7.js → skill-installer-ANXTCXQV.js} +1 -1
  158. package/dist/spawner-AH5FTUYU.js +2 -0
  159. package/dist/structured-answers-QHFGZPSS.js +5 -0
  160. package/dist/tcg-generate-WKCBBKI5.js +2 -0
  161. package/dist/testmd-actions-RPYG6TJG.js +2 -0
  162. package/dist/token-refresh-NIDUOTRM.js +2 -0
  163. package/dist/trust-gate-EX7R2P4Y.js +2 -0
  164. package/dist/{validate-basic-LP3S5PK7.js → validate-basic-O2DP2XJL.js} +1 -1
  165. package/dist/verdicts-TJH3O5UW.js +2 -0
  166. package/dist/{version-check-XP62HWLJ.js → version-check-RNR3JCQ5.js} +1 -1
  167. package/dist/{view-cmd-GQBFCPDL.js → view-cmd-YSEGA5PI.js} +1 -1
  168. package/dist/walk-session-HXW4OSA2.js +2 -0
  169. package/dist/with-telemetry-PNP6CAVM.js +2 -0
  170. package/package.json +6 -6
  171. package/dist/ChatSurface-TZ554O4U.js +0 -8
  172. package/dist/EvidenceViewOffer-SSAM4RRP.js +0 -2
  173. package/dist/SingleShotApp-A6PCNPLM.js +0 -2
  174. package/dist/TestMdRunView-MQ7ZPFN2.js +0 -2
  175. package/dist/bind-QJT726NE.js +0 -6
  176. package/dist/bootstrap-566PPFCC.js +0 -2
  177. package/dist/bridge-QCMEOQDD.js +0 -2
  178. package/dist/chat-committer-OS7ULZMH.js +0 -2
  179. package/dist/chat-controller-QLORQWJZ.js +0 -2
  180. package/dist/chunk-3C5GMAM4.js +0 -2
  181. package/dist/chunk-54IB6CXK.js +0 -5
  182. package/dist/chunk-54VQ46U2.js +0 -14
  183. package/dist/chunk-55Y65VPA.js +0 -347
  184. package/dist/chunk-6W6AIDLJ.js +0 -4
  185. package/dist/chunk-7E24OCGX.js +0 -2
  186. package/dist/chunk-7YPK6EDR.js +0 -4
  187. package/dist/chunk-FHKDTM5L.js +0 -6
  188. package/dist/chunk-FRBYGSGJ.js +0 -4
  189. package/dist/chunk-GG43HSU2.js +0 -3
  190. package/dist/chunk-HLRLP6TQ.js +0 -2
  191. package/dist/chunk-J2KSZUOO.js +0 -4
  192. package/dist/chunk-J44RN3FB.js +0 -2
  193. package/dist/chunk-JXKRO2ZJ.js +0 -13
  194. package/dist/chunk-M5PJQ5Y3.js +0 -6
  195. package/dist/chunk-MMPFU2YC.js +0 -2
  196. package/dist/chunk-MR7CX5VT.js +0 -9
  197. package/dist/chunk-MTNUZEO7.js +0 -12
  198. package/dist/chunk-OGWC3J3C.js +0 -4
  199. package/dist/chunk-RN4OSVTG.js +0 -6
  200. package/dist/chunk-RZJVQUBA.js +0 -61
  201. package/dist/chunk-V3UE6RJP.js +0 -2
  202. package/dist/chunk-Y5RNCJAN.js +0 -19
  203. package/dist/chunk-YSSTGJ7O.js +0 -7
  204. package/dist/chunk-Z2JSEL3I.js +0 -4
  205. package/dist/cover-cmd-SV3I23UM.js +0 -2
  206. package/dist/dossier-KJSJPWOW.js +0 -3
  207. package/dist/evidence-HDD7T7DX.js +0 -2
  208. package/dist/evolve-cmd-UE2BIMXK.js +0 -2
  209. package/dist/explain-EBVIUS2X.js +0 -2
  210. package/dist/extract-bind-6MQYKN3G.js +0 -8
  211. package/dist/extract-cmd-2RUIWFZG.js +0 -6
  212. package/dist/gaps-cmd-CKCHH3HQ.js +0 -2
  213. package/dist/ingest-FIIO67ZN.js +0 -2
  214. package/dist/ingest-cmd-CRMY46YC.js +0 -7
  215. package/dist/interactive-bind-53FCRK34.js +0 -10
  216. package/dist/lifecycle-cmd-32LG364Q.js +0 -2
  217. package/dist/list-cmd-UTZ2PQUK.js +0 -3
  218. package/dist/logical-ids-I7B3VJEH.js +0 -2
  219. package/dist/login-flow-D7KBR7XR.js +0 -2
  220. package/dist/maintenance-cmd-BZAGSYGI.js +0 -2
  221. package/dist/pipeline-MX3ZR5B3.js +0 -2
  222. package/dist/readmodel-S5RAQH3F.js +0 -2
  223. package/dist/reconcile-cmd-4377PWF5.js +0 -2
  224. package/dist/revert-RQJE56HF.js +0 -2
  225. package/dist/review-cmd-7LXGYHHQ.js +0 -4
  226. package/dist/run-2AIQUJ55.js +0 -2
  227. package/dist/run-YH5SCBYD.js +0 -2
  228. package/dist/sessions-cmd-DTQYDZNT.js +0 -23
  229. package/dist/spawner-7KXVKAD5.js +0 -2
  230. package/dist/tcg-generate-U6OCCS2E.js +0 -2
  231. package/dist/testmd-actions-RPALXRZK.js +0 -2
  232. package/dist/token-refresh-S7CYBZTE.js +0 -2
  233. package/dist/walk-session-YIKHE6PT.js +0 -2
  234. /package/dist/{chunk-BC7UVJJB.js → chunk-CH273NAE.js} +0 -0
@@ -0,0 +1,7 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as E}from"./chunk-TDPWFYTJ.js";import{a as S}from"./chunk-DXV6MBTD.js";import{a as v}from"./chunk-JRMDGLLT.js";import{e as _,j as y}from"./chunk-C4G7RVJ6.js";import{spawn as T,execSync as h}from"child_process";import{appendFileSync as N,existsSync as m,mkdirSync as O}from"fs";import{homedir as M}from"os";import{join as I,resolve as i,dirname as p}from"path";import{fileURLToPath as L}from"url";import{createInterface as C}from"readline";async function*R(e){let n=C({input:e,crlfDelay:1/0});for await(let s of n){let a=s.trim();if(a)try{let t=JSON.parse(a);t&&typeof t.type=="string"&&(yield t)}catch{}}}function x(e){return e==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function A(e){return e?{set:{},unset:["V16_AGENT_SKIP_CP_FINAL"]}:{set:{V16_AGENT_SKIP_CP_FINAL:"true"},unset:[]}}function w(e){return e==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var c=p(L(import.meta.url));function P(){for(let e of["python3","python"])try{return h(`${e} --version`,{stdio:"ignore"}),e}catch{}return null}function V(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",s={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},a=`${process.platform}-${process.arch}`,t=s[a];if(t)for(let r of t){let o=[i(c,"..","node_modules",r,"bin",n),i(c,"..","..","node_modules",r,"bin",n),i(c,"..","..","..","node_modules",r,"bin",n),i(c,"..","..","..","..","node_modules",r,"bin",n)];for(let u of o)if(m(u))return{cmd:u,args:[]}}let d=[i(c,"bin",n),i(c,"..","bin",n),i(c,"..","..","..","..","v16-runner","dist",n),i(c,"..","..","..","v16-runner","dist",n),i(c,"..","..","v16-runner","dist",n),i(process.cwd(),"v16-runner","dist",n),i(process.cwd(),"..","v16-runner","dist",n)];for(let r of d)if(m(r))return{cmd:r,args:[]};let l=[i(c,"..","..","v16-runner"),i(c,"..","..","..","..","v16-runner"),i(c,"..","..","..","v16-runner"),i(process.cwd(),"v16-runner"),i(process.cwd(),"..","v16-runner")];for(let r of l)if(m(i(r,"main.py"))){for(let u of[i(r,".venv","bin","python"),i(r,"..",".venv","bin","python"),i(r,"..","browser-agent",".venv","bin","python")])if(m(u))return{cmd:u,args:["main.py"],cwd:r};let o=P();if(o)return{cmd:o,args:["main.py"],cwd:r}}return null}function b(e){return e?I(M(),".testmuai","kaneai","sessions",e,"runner-stderr.log"):null}function k(e){let n=T(e.runner.cmd,e.runner.args,{stdio:["pipe","pipe","pipe"],env:e.env,cwd:e.runner.cwd});n.stdin.on("error",()=>{});let s=b(e.sessionId);if(s)try{O(p(s),{recursive:!0})}catch{}let a=1e5,t="";n.stderr.on("data",u=>{if(t+=u.toString(),t.length>a&&(t=t.slice(-a)),s)try{N(s,u)}catch{}}),n.on("error",u=>{e.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:u.message})});let d=null,l=null,r=new Promise(u=>{n.on("close",(f,g)=>{d=f,l=g?String(g):null,e.log?.("info","RUNNER_EXIT","Runner exited",{code:f,signal:l??"none"}),u({code:f,signal:l})})}),o=R(n.stdout);return{child:n,events:o,getStderr:()=>t,getExitCode:()=>d,getExitSignal:()=>l,exited:r}}function U(e){let n={...process.env};e.environment&&(n.TESTMUAI_ENV=e.environment),n.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(n.PYTHONIOENCODING="utf-8");let s=v(e.environment);n.V16_SERVER_API_HOST=s.v16ServerHost,n.ATMS_URL=s.tmsBaseUrl.replace(/\/api\/?$/,""),e.username&&e.accessKey&&(n.LT_USERNAME=e.username,n.LT_ACCESS_KEY=e.accessKey),e.sessionId&&(n.TESTMUAI_SESSION_ID=e.sessionId);let a=x(e.mode??"testing");Object.assign(n,a.set);for(let o of a.unset)delete n[o];let t=new S().load(),d=w(e.assertionMode??(t.assertion_mode==="visual"?"visual":"dom"));Object.assign(n,d.set);for(let o of d.unset)delete n[o];let l=e.finalValidation??t.final_validation,r=A(l);Object.assign(n,r.set);for(let o of r.unset)delete n[o];return n}function K(e,n){let s=v(n?.environment),a=E();a!==void 0&&e.ap_mode===void 0&&(e.ap_mode=a),e.telemetry_proxy_url===void 0&&process.env.KANE_TELEMETRY!=="0"&&(e.telemetry_proxy_url=y),e.media_upload===void 0&&e.org_id&&e.username&&e.access_key&&(e.media_upload={url:s.shareApiBaseUrl.replace(/\/$/,"")+"/mfs/v1.0/media/upload",artefacts_host:s.mediaArtefactsHost,org_id:e.org_id,media_dir:_})}function Z(e,n){let s=V();if(!s)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");process.env.KANE_SPAWN_DEBUG&&process.stderr.write(`[spawn-debug] ${JSON.stringify(s)}
3
+ `);let a=U({environment:n?.environment,mode:n?.mode,assertionMode:n?.assertionMode,finalValidation:n?.finalValidation,username:e.username,accessKey:e.access_key,sessionId:e.session_id});K(e,{environment:n?.environment});let t=k({env:a,runner:s,log:n?.log,sessionId:e.session_id}),d=t.child;d.stdin.write(JSON.stringify(e)+`
4
+ `);let l=b(e.session_id);if(l)try{O(p(l),{recursive:!0}),N(l,`--- runner spawn ${new Date().toISOString()} run_index=${e.run_index} ---
5
+ `)}catch{}return{child:d,events:t.events,sendUserResponse(r){let o=JSON.stringify({type:"user_response",answer:r});try{d.stdin.write(o+`
6
+ `)}catch{}},sendCancel(r){let o=JSON.stringify({type:"cancel",reason:r});try{d.stdin.write(o+`
7
+ `)}catch{}},cancel(){d.kill("SIGTERM")},get stderr(){return t.getStderr()},get exitCode(){return t.getExitCode()},get exitSignal(){return t.getExitSignal()},exited:t.exited}}export{V as a,k as b,U as c,K as d,Z as e};
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ var v="usecase-dedup";function w(n,r){let i=Math.min(n.length,r.length),u=0,s=0,c=0;for(let e=0;e<i;e++)u+=n[e]*r[e],s+=n[e]*n[e],c+=r[e]*r[e];return s===0||c===0?0:u/(Math.sqrt(s)*Math.sqrt(c))}function y(n,r,i){return i*n+(1-i)*r}var C=.7;function H(n){return new Set(n.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function R(n,...r){let i=H(n);if(i.size===0)return 0;let u=n.trim().toLowerCase(),s=0;for(let c of r){let e=H(c);if(e.size===0)continue;let p=0;for(let m of i)e.has(m)&&p++;let b=i.size+e.size-p,d=b===0?0:p/b;u&&c.toLowerCase().includes(u)&&(d=Math.max(d,.9)),s=Math.max(s,d)}return s}var S=n=>String(n.title??"");function A(n){return n.byLabel("usecase").filter(r=>!n.superseded.has(r.cid)).map(r=>({cid:r.cid,text:S(r.content)}))}function _(n,r){let i=r.threshold??.8,u=new Map,s=null;return{async batchSimilar(c,e){let p=c.latestHash;if(e.length===0)return{hits:[],degraded:!1,probeBasis:p};let b=A(c),d=[];try{s=(await r.resolveAlias(v)).alias;let f=new Map,g=[];for(let t of b){let a=r.readVector?.(s,t.cid)??null;a!==null?f.set(t.cid,a):g.push(t)}let o=[...e.map(t=>t.probeText),...g.map(t=>t.text)],{vectors:P}=await r.embed(v,o);e.forEach((t,a)=>u.set(t.tempRef,Float32Array.from(P[a]))),g.forEach((t,a)=>{let l=Float32Array.from(P[e.length+a]);f.set(t.cid,l),r.writeVector?.(s,t.cid,l)});for(let t of e){let a=u.get(t.tempRef);for(let l of b){let x=f.get(l.cid);if(x===void 0)continue;let h=y(w(a,x),R(t.probeText,l.text),C);h>=i&&d.push({tempRef:t.tempRef,candidateCid:l.cid,score:h,scorer:"embedding"})}}return{hits:d,degraded:!1,probeBasis:p}}catch(m){process.stderr.write(JSON.stringify({event:"dedup_probe_degraded",contextDir:n,candidates:e.length,reason:String(m?.message??m).slice(0,160),ts:new Date().toISOString()})+`
3
+ `);for(let f of e)for(let g of b){let o=R(f.probeText,g.text);o>=i&&d.push({tempRef:f.tempRef,candidateCid:g.cid,score:o,scorer:"lexical_fallback"})}return{hits:d,degraded:!0,probeBasis:p}}},recheckLocal(c,e,p,b){let d=[],m=[],f=new Set;for(let g of b)for(let o of g.nodes){if(o.label!=="usecase"||f.has(o.cid)||(f.add(o.cid),c.superseded.has(o.cid)||!c.hasNode(o.cid)))continue;let P=S(o.content),t=s!==null?r.readVector?.(s,o.cid)??null:null,a=t!==null;for(let l of e){let x=u.get(l.tempRef),h;t!==null&&x!==void 0?h=y(w(x,t),R(l.probeText,P),C):(h=R(l.probeText,P),a=a&&!1),h>=i&&d.push({tempRef:l.tempRef,candidateCid:o.cid,score:h,scorer:t!==null&&x!==void 0?"embedding":"lexical_fallback"})}a||m.push(o.cid)}return{hits:d,uncachedNewNodes:m}}}}export{_ as a};
@@ -0,0 +1,62 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as Ut,b as sn,c as ot,d as it,e as on,f as jt,g as cn,h as dn}from"./chunk-OIYGGEUL.js";import{a as Ft,b as Nt,c as mn}from"./chunk-2XMJ6YAE.js";import{a as je,b as an}from"./chunk-C5UNZ6ZY.js";import{c as un}from"./chunk-NAC7SFBE.js";import{c as Ot,d as nn}from"./chunk-33QXD75Y.js";import{a as Ue,b as ne,e as Re,f as Lt,k as en,p as ye,q as Dt,t as rn}from"./chunk-RKWJG3WW.js";import{d as tn}from"./chunk-2YQ6TW77.js";import{c as ln}from"./chunk-S3DAAAE5.js";import{B as Vr,C as Kr,D as Hr,F as qr,G as zr,I as Yr,J as Wr,K as Qr,X as Jr,aa as Zr,ba as Xr,j as st,x as Br}from"./chunk-DQ54MH7F.js";import{a as Gr}from"./chunk-CH273NAE.js";import{b as _e}from"./chunk-3FN5VJMV.js";import{a as Mr,b as nt,c as Tt}from"./chunk-IXVOXJP6.js";import{a as rt,c as $r,d as Pt}from"./chunk-UI7KULSI.js";import{a as Ie}from"./chunk-WAOCHXJ5.js";import{i as Dr,k as xt,l as Or,m as tt,n as Ur,o as jr}from"./chunk-W6VD2XFO.js";import{g as Fr,h as Nr}from"./chunk-HPMS5KO6.js";import{a as et}from"./chunk-2WVKOZ6W.js";import{a as Xe,b as Lr}from"./chunk-NLCCBXXV.js";import{a as q}from"./chunk-RZ4F3BHX.js";import{a as ie}from"./chunk-JRMDGLLT.js";import{a as Pr}from"./chunk-E47GFYXA.js";import{a as Je,c as Ct,j as Tr,k as Ze,l as Et,m as At}from"./chunk-C4G7RVJ6.js";import{join as de,basename as fs}from"path";import{existsSync as So,readFileSync as gs}from"fs";function fn(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 ke(e){process.env.KANE_REPLAY_TRACE==="1"&&process.stderr.write(e)}function pn(e,t){let r=e===0?"(none)":`0..${e-1}`,n=e>=t?"(none)":`${e}..${t-1}`;ke(`[replay-trace] phase: replay ${r}, author ${n}
5
+ `)}function gn(e,t){ke(`[replay-trace] step ${e}: REPLAY ${t==="ok"?"OK":"FAILED"}
6
+ `)}function hn(e,t,r){ke(`[replay-trace] shrink ${e}/${t} \u2192 new boundary ${r}
7
+ `)}function bn(e,t){ke(`[replay-trace] complete-reauthor (${e} shrinks exhausted of ${t})
8
+ `)}function $t(){ke(`[replay-trace] force-author (--author) \u2014 walker bypassed
9
+ `)}function yn(e){ke(`[replay-trace] cancelled at step ${e}
10
+ `)}import{join as vn}from"path";function Mt(e){let t=on(e.decision),r={objective:e.step.objective,model:"v16-alpha",width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,mode:"replay",replay:{recording_path:t[0],...t.length>1?{recording_paths:t}:{},step_label:e.step.objective,...e.investigationAsync?{investigation:"async"}:{}},screenshot_dir:e.evidence?vn(e.sessionDir,"scratch",String(e.runIndex)):vn(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=st(e.evidence.packTestDir,e.evidence.ordinalOffset)),r}async function Sn(e){let t=e.forceAuthor?0:it(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,yn(i.failedAt??0),{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};if(i.failedAt===null)return{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};let f=an({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 bn(r+1,e.maxShrinks),{authorBoundary:0,cancelledInPhase:n,shrinkCount:r};r++,hn(r,je.maxShrinks,f.newAuthorBoundary),t=f.newAuthorBoundary}}var xs=15e3,Bt=3,wn=[500,1e3];async function Vt(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 at(t,{from_commit_id:e.fromCommitId,new_commit_id:e.newCommitId},e.auth);return r.ok?{ok:!0,sessionExpiresAt:B(r.body,"session_expires_at")??""}:{ok:!1,...Ps(r)}}function Ps(e){let t=B(e.body,"error")??B(e.body,"code")??"",r=B(e.body,"message")??B(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 In(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground/reserve`,r=await at(t,void 0,e.auth);return r.ok?{ok:!0,sessionExpiresAt:B(r.body,"session_expires_at")??""}:{ok:!1,expired:r.status===404,httpStatus:r.status,message:B(r.body,"message")??B(r.body,"detail")??r.text??`HTTP ${r.status}`}}async function Kt(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 at(t,r,e.auth);return n.ok?{ok:!0,testId:B(n.body,"test_id")??e.testId,testcaseId:B(n.body,"testcase_id")??"",projectId:B(n.body,"project_id"),isTestCaseDeleted:typeof n.body?.is_test_case_deleted=="boolean"?n.body.is_test_case_deleted:void 0}:{ok:!1,...Ts(n)}}function Ts(e){let t=B(e.body,"error")??B(e.body,"code")??"",r=B(e.body,"message")??B(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 Fe(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 at(t,r,e.auth);return n.ok?{ok:!0}:{ok:!1,reason:B(n.body,"error")??"other",httpStatus:n.status,message:B(n.body,"message")??B(n.body,"detail")??n.text??`HTTP ${n.status}`}}async function at(e,t,r){let n=null;for(let s=1;s<=Bt;s++){let o=new AbortController,i=setTimeout(()=>o.abort(),xs);try{let f=await q(e,{method:"POST",headers:{Authorization:Xe(r.username,r.accessKey),"Content-Type":"application/json",Accept:"application/json"},...t!==void 0?{body:JSON.stringify(t)}:{},signal:o.signal});clearTimeout(i);let l=await f.text(),c=null;if(l)try{c=JSON.parse(l)}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:l};if(s<Bt){await _n(wn[s-1]??1e3);continue}return{ok:!1,status:f.status,body:c,text:l}}catch(f){if(clearTimeout(i),n=f,s<Bt){await _n(wn[s-1]??1e3);continue}}}return{ok:!1,status:0,body:null,text:n?.message??"exhausted retries"}}function _n(e){return new Promise(t=>setTimeout(t,e))}function B(e,t){if(typeof e!="object"||e===null)return;let r=e[t];return typeof r=="string"?r:void 0}var Ls=60*1e3,Rn="lock-heartbeat",pe=new Map,Ne=null,Ds={register:(e,t)=>tt(e,t),deregister:e=>Ur(e),cleanup:(e,t)=>jr(e,t),remoteLogger:null};function kn(e){if(e!==void 0){let t=pe.get(e);t!==void 0&&(clearInterval(t),pe.delete(e));return}for(let t of pe.values())clearInterval(t);pe.clear()}function lt(e){if(pe.has(e.testId))return;let t=e.lifecycle??Ds,r=setInterval(async()=>{let n=await In({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
+ `)}},Ls);pe.set(e.testId,r),Ne===null&&(Ne=t,t.register(Rn,()=>kn()))}function ve(e){pe.size!==0&&(kn(e),pe.size===0&&Ne!==null&&(Ne.deregister(Rn),Ne=null))}import{readFileSync as Cn,readdirSync as En,existsSync as Se,promises as An}from"fs";import{join as ae}from"path";async function Os(e,t){let r=ae(e,"steps",`${t.ordinal}-${t.id}`),n;try{n=await An.readFile(ae(r,"screenshot.png"))}catch{return null}let s=null,o=[];try{let i=JSON.parse(await An.readFile(ae(r,"step.json"),"utf8"));s=i.action_id??null,Array.isArray(i.analyze_action_ids)&&(o=i.analyze_action_ids.filter(f=>typeof f=="string"))}catch{}return{png:n,actionId:s,analyzeActionIds:o}}function Yo(){let e=[];return{track:t=>{e.push(t.catch(()=>{}))},settle:async()=>{await Promise.all(e)}}}async function xn(e,t,r,n){try{let s=await Os(e,t);if(!s){n("warn","SCREENSHOT_SKIP","Pack step folder or screenshot not found",{ordinal:t.ordinal,id:t.id,reason:"pack_step_not_found"});return}let o=new Set;s.actionId&&o.add(s.actionId);for(let i of s.analyzeActionIds)o.add(i);if(o.size===0){n("warn","SCREENSHOT_SKIP","No action_id in step.json",{ordinal:t.ordinal,id:t.id,reason:"no_action_id"});return}for(let i of o)r.enqueue(i,s.png);n("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{ordinal:t.ordinal,id:t.id,action_id:s.actionId,action_ids:[...o],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 Pn(e,t,r,n,s,o){try{let i=ae(e,"runs",String(t),"run-test");if(!Se(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=ae(i,`child-${o}`);if(!Se(k)){s("warn","SCREENSHOT_SKIP","Child dir not found",{step_index:r,child_id:o,reason:"child_dir_not_found",path:k});return}let E=En(k).filter(a=>Se(ae(k,a,"screenshots")));if(E.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir under child",{step_index:r,child_id:o,reason:"no_child_screenshots_dir"});return}f=ae(k,E[0])}else if(!Se(ae(i,"screenshots"))){let k=En(i).filter(E=>Se(ae(i,E,"screenshots")));if(k.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:r,reason:"no_screenshots_dir"});return}f=ae(i,k[0])}let l=ae(f,"screenshots",`step_${String(r).padStart(3,"0")}.png`);if(!Se(l)){s("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:r,child_id:o,reason:"screenshot_not_found",path:l});return}let c=ae(i,"actions.ndjson");if(!Se(c)){s("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:r,reason:"ndjson_not_found"});return}let y=Cn(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=Cn(l);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 Us,join as js}from"path";function Tn(e,t,r){let n=e.total_runs??1,s=e.run_dir,o,i;if(n>1&&s){let f=Us(s);o=Array.from({length:n},(l,c)=>js(f,String(t+c))),r&&r.length===n&&(i=r)}return{allRunDirs:o,flowObjectives:i}}function Ln(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 ct=class{constructor(t){this.resolved=t;this.outcomes=t.rootSteps.map(r=>({rootStepIndex:r.index,status:"skipped"}))}outcomes;skipRoot=null;overallHalted=!1;shouldRunFlatStep(t){if(this.overallHalted)return!1;let r=t.trace[0].stepIndex;return!(this.skipRoot!==null&&r===this.skipRoot)}recordStep(t,r){let n=t.trace[0].stepIndex,s=this.outcomes.find(l=>l.rootStepIndex===n),o=this.resolved.rootSteps.find(l=>l.index===n),i=o.body.kind!=="objective";return i&&(s.refKind="import",s.refLabel=o.body.path,s.inlinedCount=(s.inlinedCount??0)+1,s.duration_s=(s.duration_s??0)+r.duration_s),r.status==="passed"?(i?s.status!=="failed"&&(s.status="passed"):(s.status="passed",s.duration_s=r.duration_s),{continueOverall:!0}):t.optional?(s.softFailures=s.softFailures??[],s.softFailures.push({subStepIndex:t.trace[t.trace.length-1].stepIndex,reason:r.reason}),{continueOverall:!0}):(s.status="failed",s.duration_s=i?s.duration_s:r.duration_s,s.failedSubStepIndex=i?t.trace.slice(1).map(l=>l.stepIndex):void 0,s.reason=r.reason,this.skipRoot=n,o.optional??!1?(s.softFailed=!0,{continueOverall:!0}):(this.overallHalted=!0,{continueOverall:!1}))}snapshotOutcomes(){return[...this.outcomes]}snapshot(){return{outcomes:this.outcomes.map(t=>({...t,softFailures:t.softFailures?[...t.softFailures]:void 0})),skipRoot:this.skipRoot,overallHalted:this.overallHalted}}rollback(t){this.outcomes=t.outcomes.map(r=>({...r,softFailures:r.softFailures?[...r.softFailures]:void 0})),this.skipRoot=t.skipRoot,this.overallHalted=t.overallHalted}finalize(){let t=this.outcomes.some(n=>n.status==="failed"&&!n.softFailed)?"failed":"passed",r=this.outcomes.reduce((n,s)=>n+(s.duration_s??0),0);return{overallStatus:t,outcomes:this.outcomes,totalDurationS:r}}};function Ht(e){if(!e)return null;let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function Dn(e){return Ht(e.flag)??Ht(e.frontmatter)??(e.configDefault&&e.configDefault!==Ze?Ht(e.configDefault):null)}function On(e){return e.resolvedUrl!==null?!1:!((!!e.local||!!e.allowMissingUrl)&&!e.isTTY)}import{spawn as Fs}from"child_process";async function Un(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 Pr(o.webSocketDebuggerUrl);await new Promise((m,_)=>{i.once("open",m),i.once("error",_)});let f=1,l=new Map;i.on("message",m=>{let _;try{_=JSON.parse(m.toString())}catch{return}if(_.id==null)return;let L=l.get(_.id);L&&(l.delete(_.id),_.error?L.reject(new Error(_.error.message)):L.resolve(_.result))});function c(m,_){let L=f++;return new Promise((ue,Z)=>{l.set(L,{resolve:M=>ue(M),reject:Z});let se={id:L,method:m};_&&(se.params=_),i.send(JSON.stringify(se))})}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,E=null,a=!1;i.on("close",()=>{a=!0}),i.on("error",()=>{a=!0});async function z(){if(!k){if(a){k=!0;return}try{let _=(await c("Browser.getWindowBounds",{windowId:R})).bounds,L=`${_.left}:${_.top}:${_.width}:${_.height}`;L!==x&&(x=L,t({left:_.left,top:_.top,width:_.width,height:_.height}))}catch{}k||(E=setTimeout(z,r))}}return z(),{stop(){if(!k){k=!0,E&&clearTimeout(E);try{i.close()}catch{}}}}}var Ns=new Set(["1","true","yes"]);function jn(e){if(e?.headless)return null;let t=process.env.KANE_CLI_DISABLE_MARKER;if(t!=null&&Ns.has(t.toLowerCase()))return null;let r=rt();if(!r)return null;let n=[...r.args,"overlay"];e?.text&&n.push(e.text);let s;try{s=Fs(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&&Un(e.cdpEndpoint,c=>i({type:"bounds",...c})).then(c=>{f=c.stop}).catch(()=>{});let l=!1;return{setRunActive(c){l||i({type:"run_active",active:c})},setStepText(c){if(l)return;let y=c.trim();y&&i({type:"step_text",text:y})},setStepComplete(){l||i({type:"step_complete"})},kill(){if(!l){l=!0,f?.();try{s.stdin?.end()}catch{}try{s.kill("SIGTERM")}catch{}}}}}function Fn(e,t,r){return`${e}/projects/${t}/test-cases/${r}`}function dt(e,t,r,n){return`${Fn(e,t,r)}/dashboard/share/${n}?type=summary&agentView=true&fqdn=summary-page`}function Nn(e,t,r,n){if(!(!t||!r||!n))return dt(e,t,r,n)}function $n(e,t,r){return`${Fn(e,t,r)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{mkdtempSync as Zs,rmSync as Xs}from"fs";import{join as eo}from"path";import{tmpdir as to}from"os";import{spawn as Vn,spawnSync as $s}from"child_process";import{existsSync as qt}from"fs";import{createConnection as Ms}from"net";import{homedir as $e,platform as Ve}from"os";import{join as Me}from"path";var Bs=new Set(["1","true","yes"]),ut=class extends Error{constructor(t){super(t),this.name="ChromeNotFoundError"}};function bi(e){return e instanceof ut?e.message:`Chrome failed: ${e instanceof Error?e.message:String(e)}`}var mt={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",Me($e(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",Me($e(),"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",Me($e(),"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",Me($e(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",Me($e(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe")]};function Vs(){if(process.env.KANE_CLI_CHROME_PATH)return process.env.KANE_CLI_CHROME_PATH;let e=Ve(),t=mt[e]??mt.linux;for(let r of t)if(qt(r))return r;return e==="win32"?"chrome.exe":"google-chrome"}function Ks(){if(process.env.KANE_CLI_CHROME_PATH)return qt(process.env.KANE_CLI_CHROME_PATH);let e=Ve();if((mt[e]??mt.linux).some(s=>qt(s)))return!0;let r=e==="win32"?"chrome.exe":"google-chrome",n=e==="win32"?"where":"which";try{return $s(n,[r],{stdio:"ignore"}).status===0}catch{return!1}}function Hs(){let e=Ve();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 qs(e){let t=Ve(),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 zs(e){return new Promise(t=>{let r=Ms({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 Gs(){for(let e=Et;e<=At;e++)if(!await zs(e))return e;throw new Error(`All CDP ports ${Et}-${At} are in use. Close other Chrome instances.`)}var Be=class extends Error{constructor(t){super(t),this.name="CdpReadinessError"}};async function Ys(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 Be(`Chrome CDP not ready after ${t}ms on port ${e}`)}var Ws=3e4,Qs=2;function Mn(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 Js(e){return Math.min(500*e,3e3)}function Bn(e,t){try{if(e.pid)if(t==="win32")Vn("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 Kn(e){let t=process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD;if(!(t!=null&&Bs.has(t.toLowerCase()))&&!Ks())throw xt()?.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 ut(Hs());let n=Ve(),s=Vs(),o=Mn("KANE_CLI_CDP_TIMEOUT_MS",Ws,1),f=Mn("KANE_CLI_CDP_RETRIES",Qs,0)+1,l;for(let c=1;c<=f;c++){let y=await Gs(),w=qs({port:y,...e});e.startUrl&&w.push(e.startUrl);let A=Vn(s,w,{stdio:"ignore",detached:!0});A.unref();try{let R=await new Promise((x,k)=>{A.on("error",E=>{k(new Error(`Failed to launch Chrome: ${E.message}. Is Chrome installed at ${s}?`))}),A.on("close",E=>{E!==null&&E!==0&&k(new Be(`Chrome exited during startup with code ${E}`))}),Ys(y,o).then(x,k)});return{process:A,port:y,cdpEndpoint:R,kill(){Bn(A,n)}}}catch(R){if(l=R,!(R instanceof Be))throw R;Bn(A,n),xt()?.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,Js(c)))}}throw l??new Error("Chrome launch failed after retries")}async function Hn(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(eo(to(),"kane-clean-")),t=r;let s=r;tt("tempDir",()=>{try{Xs(s,{recursive:!0,force:!0})}catch{}})}let n=await Kn({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 qn(e){let t={objective:e.objective,model:e.model,width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,max_steps:e.maxSteps??30,headless:e.headless??!1};return e.url&&(t.url=e.url),e.requireStartUrl&&(t.require_start_url=!0),e.chrome.wsEndpoint?t.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(t.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(t.username=e.auth.basicAuth.username,t.access_key=e.auth.basicAuth.access_key):e.auth.token&&(t.auth={type:"bearer",token:e.auth.token}),e.auth.resolvedCreds?.org_id&&(t.org_id=String(e.auth.resolvedCreds.org_id)),e.disableAskUser&&(t.disable_ask_user=!0),e.enableTaskSkills&&(t.enable_task_skills=!0),e.networkWs&&(t.network_ws=!0),e.networkSse&&(t.network_sse=!0),(e.bugDetection==="stop"||e.bugDetection==="continue")&&(t.bug_detection=e.bugDetection),e.variables&&Object.keys(e.variables).length>0&&(t.variables=e.variables),e.globalContext&&(t.global_context=e.globalContext),e.localContext&&(t.local_context=e.localContext),e.sessionContext&&(t.session_context=e.sessionContext),e.evidence&&(t.evidence=st(e.evidence.packTestDir,e.evidence.ordinalOffset)),t}import{readdirSync as ro,readFileSync as Gn,existsSync as Yn}from"fs";import{join as no}from"path";function zn(e,t){if(!Yn(e))return{};let r={},n;try{n=ro(e).filter(s=>s.endsWith(".json")).sort()}catch{return{}}for(let s of n)try{let o=Gn(no(e,s),"utf-8"),i=JSON.parse(o);if(i&&typeof i=="object"){for(let[f,l]of Object.entries(i))if(l&&typeof l=="object"&&"value"in l){let c=l;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 Wn(e){if(!Yn(e))throw new Error(`Variables file not found: ${e}`);let t=Gn(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 Qn(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 Jn(e,t,r){let n=zn(e,r),s=zn(t,r);return{...n,...s}}var Ce=class{constructor(t){this.baseUrl=t}async pushSecret(t){let r=Xe(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 Ee=class extends Lr{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 l=await n.json().catch(()=>({}));if(l.type==="Success"&&l.id!=null)return{id:Number(l.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 Zn(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 Xn(e){let t=Jn(e.globalDir,e.localDir,e.onLoadError),r=e.file?Wn(e.file):{},n=e.inline?Qn(e.inline):{},s={...t,...r,...n},o=Object.keys(s).length>0,{variables:i,objective:f}=o?_e(s,e.objective):{variables:{},objective:e.objective},l=Object.entries(s).filter(([,y])=>y.secret),c=Object.entries(s).filter(([,y])=>!y.secret);return{raw:s,auteur:i,auteurObjective:f,secretEntries:l,nonSecretEntries:c}}async function es(e){if(e.localMode)return{};let t=ie(e.env);if(e.variables.secretEntries.length>0){let n=new Ce(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 Ee(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 so,existsSync as oo}from"fs";function zt(e){if(!oo(e))return null;try{return so(e,"utf-8").trim()||null}catch{return null}}var io=()=>{};async function ts(e,t,r){let n=t.log??io,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(l){n("error","FINALIZE_UPLOAD_ERROR","Upload pipeline threw",{error:String(l)})}if(t.renderFeedbackPrompt)try{i=await t.renderFeedbackPrompt(),i&&s&&t.submitFeedback&&t.submitFeedback(s,i).catch(l=>{n("error","FINALIZE_FEEDBACK_SUBMIT_ERROR","Feedback submit failed",{error:String(l)})})}catch(l){n("error","FINALIZE_FEEDBACK_RENDER_ERROR","Feedback prompt threw",{error:String(l)})}if(e.session.flushRecorder(),r.skipLocalWrites)n("info","FINALIZE_SKIP_LOCAL_WRITES","Skipping local writes (testmd flow handles via staging)");else if(r.sourcePath&&r.rootSteps&&r.outcomes){try{f=Ut({sourcePath:r.sourcePath,title:r.title,rootSteps:r.rootSteps,outcomes:r.outcomes,overallStatus:r.overallStatus,startedISO:r.startedISO,durationS:r.durationS,sessionId:e.session.sessionId})}catch(l){n("error","FINALIZE_RESULT_MD_ERROR","_Result.md write failed",{error:String(l)})}try{Dt({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??Ue(r.sourcePath),plan:e.session.plan??void 0})}catch(l){n("error","FINALIZE_META_WRITE_ERROR","meta.json write failed",{error:String(l)})}if(o?.codeExportDir)try{let l=e.tuiConfig.code_export?.language??"python";jt(o.codeExportDir,Lt(r.sourcePath,"playwright",l))}catch(l){n("error","FINALIZE_CODE_COPY_ERROR","code-export copy failed",{error:String(l)})}}else if(e.session.recorder?.lastWrittenPath){let l=e.session.recorder.lastWrittenPath,c=e.session.getFlows(),y=c.map((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=Ut({sourcePath:l,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{Dt({sourcePath:l,commitId:e.session.sessionId,testId:s??void 0,testcaseId:e.session.testcaseId??void 0,sessionName:e.session.sessionName??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,plan:e.session.plan??void 0})}catch(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";jt(o.codeExportDir,Lt(l,"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 ${l} (renamed: ${e.session.sessionName}_test.md already existed)
19
+ `)}try{t.runCleanup?.()}catch(l){n("error","FINALIZE_CLEANUP_ERROR","Cleanup hook threw",{error:String(l)})}try{await e.session.finish("complete")}catch(l){n("error","FINALIZE_SESSION_FINISH_ERROR","session.finish threw",{error:String(l)})}return{uploadResult:o,feedbackChoice:i,resultMdPath:f}}import{readFileSync as Gt,writeFileSync as Yt,existsSync as ns}from"fs";function rs(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 l=ao(e,e.steps[i]);switch(f.reason){case"structure-mismatch":n.push(`added/removed: ${l}`);break;case"md5-mismatch":n.push(`modified: ${l}`);break;case"missing-recording":n.push(`re-recorded: ${l}`);break;case"recorded-failed":n.push(`re-authored after failure: ${l}`);break}}if(n.length===0)return"automated commit";let s=n.filter((i,f)=>f===0||n[f-1]!==i),o=s.slice(0,3).join("; ");return s.length>3?`${o}; +${s.length-3} more`:o}function ao(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 lo(e,t){if(!(!e.shouldReplaceLocalOutput||!e.resolvedTest||!e.sourcePath||!e.stepRunRecords||!e.outcomes||!e.overallStatus))return async()=>{let{changedUnitFiles:r,legacySweep:n}=await cn({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(ns(`${o}.staging`)){en(o);let i=n.find(f=>f.unitFile===s);i&&dn(i.dirs)}}}}function co(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=rs(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 Kt({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=Re(e.sourcePath);try{let i=JSON.parse(Gt(o,"utf8"));i.commit_id=e.newCommitId,Yt(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 Fe({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}}),ve(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),l=await Kt({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(l.ok){let c=Re(o.file);try{let y=JSON.parse(Gt(c,"utf8"));y.commit_id=e.newCommitId,Yt(c,JSON.stringify(y,null,2)+`
22
+ `,"utf8")}catch(y){process.stderr.write(`warn: failed to update unit meta commit_id (${o.file}): ${y.message}
23
+ `)}}else process.stderr.write(`warn: unit self-commit failed (${o.file}): ${l.reason??""} ${l.message??""}
24
+ `)}return s}}function uo(e){if(!(!e.isFirstRun||!e.sourcePath))return async t=>{if(!e.sourcePath)return;let r=Re(e.sourcePath);try{let n=ns(r)?JSON.parse(Gt(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),Yt(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 ss(e){let t=ie(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??"",l=s.resolvedCreds?.org_id??0,c=s.resolvedCreds?.user_id??0,y=[];for(let k of Object.keys(n.auteurVariables))k.startsWith("secrets.user.")&&y.push({key_name:k.replace("secrets.user.",""),scope:"user"});let A=n.getContext().prior_runs.map(k=>k.status),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,apMode:n.apMode,projectId:e.projectId,folderId:e.folderId,firstObjective:n.firstObjective??"KaneAI Test",firstUrl:n.firstUrl??"",runDirs:n.getRunDirs(),runObjectives:n.getRunObjectives(),runMetadata:n.getRunMetadata(),startedAt:n.startedAt,endedAt:new Date().toISOString(),totalSteps:e.totalSteps,totalDuration:e.totalDuration,runStatuses:A,orgId:l,userId:c,tmsUsername:i,tmsAccessKey: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:lo(e,r),onCommitLock:co(e,r),onFinalizeSuccess:uo(e),evidence:e.evidence,evidenceRead:e.evidenceRead,authoredExecutionPath:e.authoredExecutionPath}}var os=["python","javascript"];function mo(e){if(e!==void 0){if(!os.includes(e))throw new Error(`--code-language must be one of: ${os.join(", ")} (got "${e}")`);return e}}function is(e,t){let r=mo(e.codeLanguage);return{enabled:e.codeExport??t.enabled,language:r??t.language,skipValidation:e.skipCodeValidation??t.skip_validation}}async function as(e){try{let r=await new et(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 fo=null,po=()=>fo??=import("sharp").then(e=>e.default??e).catch(()=>null),ft=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 po();if(s)try{let l=await s(t.buffer).webp({quality:80}).toBuffer();r=new Uint8Array(l)}catch(l){r=new Uint8Array(t.buffer),n="image/png",this.log?.("warn","SCREENSHOT_CONVERT_FAILED","WebP conversion failed, using PNG",{operation_id:t.operationId,error:l instanceof Error?l.message:String(l)})}else r=new Uint8Array(t.buffer),n="image/png";let o=n==="image/webp"?"webp":"png",i=`test_screenshots/untagged_screenshot/${t.operationId}.${o}`,f=`${this.sas.base_url}/${this.sas.container}/${i}?${this.sas.sas_token}`;for(let l=0;l<=this.maxRetries;l++)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(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed after retries",{operation_id:t.operationId,status:c.status,attempts:this.maxRetries+1})}catch{if(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed (network error)",{operation_id:t.operationId,error:"network",attempts:this.maxRetries+1})}}backoff(t){let r=t===0?1e3:3e3;return new Promise(n=>setTimeout(n,r))}getExt(t){return this.uploadedExt.get(t)??"png"}getExtMap(){return this.uploadedExt}isNearExpiry(){if(!this.sas.expiry)return!1;let t=new Date(this.sas.expiry).getTime();return Date.now()>t-5*6e4}};import{platform as go,arch as ho}from"os";function ls(e){let t={proxyUrl:Tr,sessionId:e.sessionId,identity:e.identity,device:{cli_version:Je,platform:go(),arch:ho(),host_agent:Nt(),invocation_mode:e.invocationMode},getToken:e.getToken};return new Ft(t)}async function bo(e){try{let t=ie(e.env),n=await new Ie(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 ft(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 yo(e){if(e.session.hasRemoteLogger||!e.tmsCreds)return null;let t=e.tmsCreds,r=ls({sessionId:e.session.sessionId,identity:{org_id:String(t.org_id??""),user_id:String(t.user_id??""),machine_id:mn(),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 Zt(e){let[t,r]=await Promise.allSettled([e.skipScreenshotQueue?Promise.resolve(null):bo({env:e.env,auth:e.auth,session:e.session,log:e.log}),yo({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 Wt(e){await Promise.allSettled([e.screenshotQueue?.drain(),e.remoteLogger?.shutdown()])}async function Ia(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 Qt(e.env,e.tmsCreds,r,t);return Jt(n,t),n}case"login":case"switch":{let r=t.state.identityServicesRef.current;r&&(await Wt(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 Qt(e.env,s,n,t);return Jt(o,t),o}case"logout":{let r=t.state.identityServicesRef.current;return r&&(await Wt(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 Wt(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 Qt(e.env,n,o,t);return Jt(i,t),i}}}async function Qt(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}:Zt({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 Jt(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 wo}from"path";import{readFile as vo}from"fs/promises";function cs(e){return e.shouldUploadArtifacts&&!e.lockHeld&&!e.isFirstRun&&e.sealed&&!!e.testId}var Xt=e=>e instanceof Error?e.message:String(e);async function ds(e){let{controller:t,tms:r,testId:n,sessionId:s,executionId:o,sealedPackPath:i,projectId:f}=e,l;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"};l=w}catch(c){return{ok:!1,stage:"presign",error:Xt(c)}}try{let c=await vo(i);await tn(l,c,"application/zip")}catch(c){return{ok:!1,stage:"upload",error:Xt(c)}}try{await r.ingestEvidence(o,f)}catch(c){return{ok:!1,stage:"ingest",error:Xt(c)}}return{ok:!0}}function us(e){return e.isFirstRun||ot(e.decisions)||e.push===!0||e.author===!0}function ms(e,t){return{projectId:e?.project_id??t.project_id??null,folderId:e?.folder_id??t.folder_id??null}}function er(e){return e?"author":"replay"}function _o(e,t){return e?{session:e,ownsLifecycle:!1}:{session:t,ownsLifecycle:!0}}function pt(e,t){return e?.total_runs??t?.length??1}function Io(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 gt=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"];async function Al(e,t,r){let{path:n,cwd:s,opts:o,isAgent:i,disableAskUser:f,resolved:l,resolvedAuth:c,cliOverrides:y,environment:w,envConfig:A,profile:R,model:x,creds:k,configStore:E,session:a}=e,z=!1,m=await Eo(n,l,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},a.sessionId,r);if(m.abort)return{overallStatus:"failed",exitCode:m.abort.exitCode,outputDir:ne(n),durationS:0,uploadResult:null};let _=m.lockAcquired,L=!1,ue=new Set,Z=!1,se=!1;_&&t.onLockState({phase:"acquired",scope:"preemptive"}),a.start({model:x,environment:w,profile:R}),a.setRecordingEnabled(!1);let M=0,nr=c.basicAuth?{username:c.basicAuth.username,accessKey:c.basicAuth.access_key}:c.token??null,Te=null;if(nr!==null){let d=await Zt({env:w,tmsCreds:c.resolvedCreds??null,resolver:c.resolver,auth:nr,getToken:async()=>c.token??null,session:a,log:(u,p,b,h)=>a.log(u,p,b,h),skipScreenshotQueue:!!o.local||!c.basicAuth,invocationMode:i?"agent":"cli"});Te=d.screenshotQueue,d.remoteLogger&&(r.register("remote-logger",()=>d.remoteLogger.shutdownSync()),r.remoteLogger=d.remoteLogger,e.skipGlobalRemoteLogger||Dr(d.remoteLogger))}if(o.name){try{ln(o.name)}catch(d){return process.stderr.write(`error: ${d.message}
27
+ `),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null}}a.setSessionName(o.name)}let ht={};for(let[d,u]of Object.entries(l.rootGlobal))gt.includes(d)||(ht[d]=u);for(let[d,u]of Object.entries(y))gt.includes(d)||u!==void 0&&(ht[d]=u);let X={...l.chrome};for(let d of gt){let u=y[d];u!==void 0&&(X[d]=u)}let bs={...ht,...X};a.setResolvedGlobal(bs);let sr=k.getActiveProfile()??"default",or=k.getDefaultEnv(),{rehydrateIfStale:ys}=await import("./profile-sync-DTTRRIVP.js");ys(k,E,sr,or);let U=E.load(),ir=(y.assertion_mode??U.assertion_mode)==="dom"?"dom":"visual",ar=y.final_validation,lr=ar===void 0?void 0:ar==="on",$=U.project_id??null,fe=U.folder_id??null,cr=us({isFirstRun:m.isFirstRun,decisions:m.decisions,push:o.push===!0,author:o.author===!0});if(cr){if(c.basicAuth){let d=await Nr({creds:k,config:E,profile:sr,env:or,tmsCreds:c.basicAuth,isLocal:!!o.local,log:(u,p,b,h)=>a.log(u,p,b,h),onAnnounce:e.onAnnounce,onFatalExit:e.onFatalExit});if(d.status==="ok"){$=d.projectId,fe=d.folderId,U=E.load();let u=ye(n);u?.project_id&&($=u.project_id,fe=u.folder_id??fe),i&&d.autoDefaulted&&t.onAgentEvent(Fr(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-HNFATGSM.js");return u(2,"project/folder gate failed"),{}}}}else{let d=ye(n);({projectId:$,folderId:fe}=ms(d,{project_id:U.project_id??null,folder_id:U.folder_id??null})),a.log("info","GATE_SKIP_REPLAY","Project/folder gate skipped (planned pure replay)",{meta_project:!!d?.project_id,config_project:!!U.project_id})}{let d=rn(l),u=c.resolvedCreds?.org_id!=null?String(c.resolvedCreds.org_id):void 0,p=d.find(g=>g.project_id&&$&&g.project_id!==String($)||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 a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null}}}let oe;try{oe=await Hn({config:{chrome_profile_path:X.chrome_profile??null,window_size:{width:1920,height:1080}},startUrl:Ze,headless:X.headless??!1,wsEndpoint:X.ws_endpoint,cdpEndpoint:X.cdp_endpoint})}catch(d){return process.stderr.write(`error: Chrome launch failed: ${d.message}
30
+ `),await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null}}let Ke=oe.instance;Ke&&r.register("chrome",()=>{try{Ke.kill()}catch{}});let dr=qr(oe.cdpEndpoint),ee=null,ur=!1,He=()=>{if(!ee?.diedUnexpectedly)return!1;if(!ur){ur=!0;let d=ee.stderr.slice(-500);a.log("error","RUNNER_FATAL_DEATH","v16-runner exited unexpectedly mid-session",{stderr_tail:d}),process.stderr.write(`error: v16-runner exited unexpectedly mid-session \u2014 remaining steps skipped.
31
+ `)}return!0},G=null,mr=oe.cdpEndpoint??X.cdp_endpoint;if(mr&&!X.ws_endpoint&&!X.headless&&!e.isAgent)try{G=jn({headless:X.headless??!1,cdpEndpoint:mr,chromePid:Ke?.process.pid}),G&&r.register("marker-overlay",()=>G.kill())}catch(d){a.log("warn","OVERLAY_SPAWN_FAILED","Marker overlay spawn failed",{error:String(d)})}c.resolvedCreds?.org_id!==void 0&&a.setOrgId(String(c.resolvedCreds.org_id)),a.setUserIdentity(c.resolvedCreds?.username??null,c.resolvedCreds?.email??null);let ge=Xn({objective:"",globalDir:de(Ct,"variables"),localDir:de(s,".testmuai","variables"),file:o.variablesFile,inline:o.variables}),vs=l.rootGlobal.variables??{},te=Ro(ge.raw,vs);a.setAuteurVariables(te.auteur);let fr=zt(de(Ct,"global-memory.md"))??void 0,pr=zt(de(s,".testmuai","context.md"))??void 0;o.local?process.stderr.write(`info: --local \u2014 KaneAI upload skipped
32
+ `):c.basicAuth?$||(cr?process.stderr.write(`warn: KaneAI upload skipped \u2014 no project configured.
33
+ `):process.stderr.write(`warn: evidence publish will be skipped \u2014 no project_id in meta.json or config.
34
+ `)):process.stderr.write(`warn: KaneAI upload skipped \u2014 TMS credentials could not be resolved.
35
+ Run 'kane-cli login' (OAuth) or 'kane-cli config set-username/set-access-key' (basic auth).
36
+ `);let we=!o.local&&!!c.basicAuth&&$!=null;if(a.log("info","PIPELINE_GATE_STATE","Initial gate state (run-start)",{phase:"run-start",shouldUploadArtifacts:we,lockHeld:_,isFirstRun:m.isFirstRun,hasAuth:m.hasAuth}),we&&m.testId==null&&!m.degradedReadonly){let d=ie(w);try{let u=await as({tmsBaseUrl:d.tmsBaseUrl,auth:c.basicAuth,objective:l.steps[0].objective,url:"",projectId:$,folderId:fe??"",hasCustomProfile:!!X.chrome_profile,log:(p,b,h,g)=>a.log(p,b,h,g)});u&&a.setTestId(u)}catch(u){process.stderr.write(`warn: ATM test creation failed: ${u.message}
37
+ `)}}else m.testId&&a.setTestId(m.testId);let qe={};if(c.basicAuth&&!o.local&&(te.secretEntries.length>0||te.nonSecretEntries.length>0))try{qe=await es({variables:te,auth:c.basicAuth,orgId:String(c.resolvedCreds?.org_id??""),env:w,localMode:!!o.local,log:(d,u,p,b)=>a.log(d,u,p,b)})}catch(d){process.stderr.write(`warn: variable/secret push failed: ${d.message}
38
+ `)}let bt=new Map;for(let[d,u]of te.nonSecretEntries)bt.set(d,u.value);let yt=new Map;for(let[d,u]of te.secretEntries)yt.set(d,u.value);async function vt(d){if(!c.basicAuth||o.local)return;let u=[],p=[];for(let[h,g]of Object.entries(d))if(g.secret){if(yt.get(h)===g.value)continue;p.push([h,g])}else{if(bt.get(h)===g.value)continue;u.push([h,g])}if(u.length===0&&p.length===0)return;let b=ie(w);if(u.length>0){let h=new Ee(b.tmsBaseUrl,c.basicAuth.username,c.basicAuth.access_key);for(let[g,I]of u)try{let C=await h.upsertVariable({name:g,value:I.value});qe[g]=C.id,bt.set(g,I.value),a.log("info","VAR_PUSH_STEP","Variable updated mid-run",{name:g})}catch(C){a.log("warn","VAR_PUSH_STEP_FAILED","Mid-run variable push failed",{name:g,error:String(C)})}}if(p.length>0){let h=new Ce(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??"")}),yt.set(g,I.value),a.log("info","SECRET_PUSH_STEP","Secret updated mid-run",{name:g})}catch(C){a.log("warn","SECRET_PUSH_STEP_FAILED","Mid-run secret push failed",{name:g,error:String(C)})}}}let Le=Te?(d,u,p,b)=>{if(!(_||m.isFirstRun))return;if(T&&b){xn(T.packTestDir,b,Te,(g,I,C,j)=>a.log(g,I,C,j));return}let h=M+u;Pn(a.sessionDir,h,d,Te,(g,I,C,j)=>a.log(g,I,C,j),p)}:void 0,gr=l.rootTitle??l.rootSteps[0]?.heading??fs(n),Ss=Object.keys(te.raw).length>0?_e(te.raw,gr).objective:gr,he=Dn({flag:o.url,frontmatter:l.rootGlobal?.url,configDefault:E.load().default_url}),ws=On({resolvedUrl:he,local:!!o.local,allowMissingUrl:!!o.allowMissingUrl,isTTY:!!process.stdin.isTTY});a.setFirstRun(Ss,he??"");let me=new ct(l),ze=new Date().toISOString(),hr=Date.now(),St=e.evidenceAttach?null:new zr({origin:"testmd",runKind:"author",pid:process.pid,title:l.rootTitle??fs(n),started:ze,producerVersion:Je,surfaces:he?[he]:void 0,testmdRelPath:wo(s,n),definition:{path:"test.md",content:gs(n,"utf8")},cwd:s,packRootDir:de(a.sessionDir,"evidence")}),ce=_o(e.evidenceAttach,St),re=ce.session,T=null;if(e.evidenceAttach)T={executionId:e.evidenceAttach.id,testId:e.evidenceAttach.test,packTestDir:e.evidenceAttach.packTestDir};else if(St)try{T=await St.start()}catch(d){a.log("warn","EVIDENCE_START_FAILED","Evidence pack creation failed",{error:String(d)})}let Ge=[],wt=[],br,_t=(d,u,p,b,h)=>{if(!T)return;re.noteSpawn(h?.length?{...d,steps:d.steps.map(I=>({...I,verifies:h}))}:d),d.resolution&&(br=d.resolution),Ge.push(Io(u));let g=pt(u,b);for(let I=0;I<g;I++)wt.push(p+I)},It=()=>T?{packTestDir:T.packTestDir,ordinalOffset:re.nextOrdinalOffset()}:void 0,_s=typeof o.maxSteps=="string"&&o.maxSteps!==""?parseInt(o.maxSteps,10):void 0;function yr(d,u){let p=l.steps[d],b=ps(p.config,y),h=Ae(ge.raw,b.variables,p.objective);return qn({objective:h.objective,url:d===0?he??void 0:p.unitEntryUrl,requireStartUrl:d===0&&ws,model:x,chrome:oe,auth:c,sessionId:a.sessionId,runIndex:u,windowSize:{width:1920,height:1080},maxSteps:b.max_steps??_s??30,headless:X.headless??!1,disableAskUser:!0,variables:Object.keys(h.variables).length>0?h.variables:void 0,globalContext:b.global_context??fr,localContext:b.local_context??pr,sessionContext:a.getContext(),bugDetection:o.bugDetection??U.bug_detection,evidence:It()})}function vr(d){let p=l.steps[d].trace[0].stepIndex,b=l.rootSteps.find(g=>g.index===p);l.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 Rt(d,u,p,b,h,g){let I=l.steps[d],C=I.trace[0].stepIndex,j=!l.steps.slice(d+1).some(D=>D.trace[0].stepIndex===C),F=p?.status==="passed"?"passed":"failed",O=p?.reason??h??void 0,W=p?.duration??g,S=p?.verdict;if(S&&typeof S=="object"){let D=typeof S.one_liner=="string"?S.one_liner:"",H=typeof S.bug_title=="string"&&S.bug_title?S.bug_title:D;if(H&&F==="failed"){let Q=[S.family,S.category].filter(Boolean).join("/"),J=typeof S.confidence=="number"?`, confidence ${S.confidence.toFixed(2)}`:"";O=`${O??"failed"} \u2014 bug verdict: ${H}${Q?` [${Q}${J}]`:""}`}let v=typeof S.category_proposal=="string"?S.category_proposal:"";v&&F==="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:H||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:D||null})}let{continueOverall:N}=me.recordStep(I,{status:F,duration_s:W,reason:O}),V=ps(I.config,y),K=Ae(ge.raw,V.variables,I.objective).objective;if(p){let D=Tn(p,u,b);a.addRunResult(Ln(p,K,u,D),p.total_runs)}else a.addRunResult({index:u,objective:K,status:F,summary:"",context:{memory:{},variables:{},pointer:""}},1);if(j||!N){let D=me.snapshotOutcomes().find(H=>H.rootStepIndex===C);t.onAgentEvent({type:"test_md_step_end",step_index:C,status:D.status,duration_s:D.duration_s??0,ref_kind:D.refKind??null,unit_kind:D.refKind==="import"?(D.refLabel??"").endsWith("_test.md")?"test":"helper":null,inlined_count:D.inlinedCount??null,failed_sub_step_index:D.failedSubStepIndex??null})}return N}let kt=[];async function Is(d){pn(d,l.steps.length);for(let u=0;u<d;u++){if(z||e.signal?.aborted)return{failedAt:u,cancelled:!0};if(He())return{failedAt:u,cancelled:!1};let p=l.steps[u],b=m.decisions[u];if(b.kind!=="replay")return process.stderr.write(`error: runReplayPhase invoked on a non-replay decision at step ${u}
39
+ `),{failedAt:u,cancelled:!1};let h=a.nextRunIndex();M=h;let g=u===0?he??void 0:l.steps[u].unitEntryUrl,I={width:U.window_size.width,height:U.window_size.height},C=Ae(ge.raw,p.config.variables,p.objective),j=Mt({step:p,decision:b,chrome:oe,auth:c,sessionId:a.sessionId,runIndex:h,sessionDir:a.sessionDir,windowSize:I,forceNavigateUrl:g,sessionContext:a.getContext(),variables:Object.keys(C.variables).length>0?C.variables:void 0,evidence:It(),investigationAsync:!ce.ownsLifecycle});await vt(C.raw),vr(u);let F=Date.now(),O=null,W=null,S=nt(),N={...j};delete N.run_id,Pt(N,{environment:w});let V=`run-${h}`;try{G?.setRunActive(!0);try{for await(let v of ee.run(V,"replay",N)){if(t.onAgentEvent(v),S=Tt(S,v),v.type==="step_event"&&v.event==="reasoning"?G?.setStepText(v.detail):v.type==="step_end"&&(v.status==="passed"&&G?.setStepComplete(),Le&&Le(v.index,0,v.child_id,typeof v.ordinal=="number"&&v.id?{ordinal:v.ordinal,id:v.id}:void 0)),v.type==="run_end"){O=v;break}if(v.type==="error"){W=v.message??"runner error";break}}!ce.ownsLifecycle&&O?.status==="failed"&&kt.push({exited:ee.exited.then(()=>{}).catch(()=>{}),cancel:()=>{try{ee?.cancel()}catch{}}})}finally{G?.setRunActive(!1)}}catch(v){W=v.message}if(ee.diedUnexpectedly&&He(),z)return{failedAt:u,cancelled:!0};let K=Math.round((Date.now()-F)/1e3),D=Rt(u,h,O,null,W,K);a.recordStepRun({testmdStepIndex:l.steps[u].flatIndex,runIndex:h,totalRunDirs:pt(O,null)}),_t(S,O,h,null,l.steps[u].verifies);let H=!!W||O?.status==="failed";if(gn(u,H?"failed":"ok"),H||!D)return{failedAt:u,cancelled:!1}}return{failedAt:null,cancelled:!1}}let Sr=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
40
+ `),!1;let u=a.sessionId,p=o.onLockConflict??l.rootGlobal.on_lock_conflict??"readonly",b=await rr({tmsBaseUrl:A.tmsBaseUrl,testId:m.testId,fromCommitId:m.fromCommitId,newCommitId:u,basicAuth:d,onLockConflict:p});if(b==="ok"){_=!0,m.newCommitId=u,a.log("info","MID_RUN_LOCK_ACQUIRED","Mid-run lock acquired",{test_id:m.testId}),i&&t.onLockState({phase:"acquired",scope:"mid_run"}),lt({baseUrl:xe(A.tmsBaseUrl),testId:m.testId,auth:Pe(d),lifecycle:r});let h=await hs({resolved:l,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
41
+ `),!0}return a.log("error","MID_RUN_LOCK_CONFLICT","Mid-run lock acquisition failed",{reason:b}),i&&t.onLockState({phase:"conflict",scope:"mid_run",reason:b}),process.stderr.write(`error: mid-run lock acquisition failed (${b})
42
+ `),!1};if(i){let d=rt();if(!d)return process.stderr.write("error: v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.\n"),r.cleanup("marker-overlay","v16-runner not found"),r.cleanup("chrome","v16-runner not found"),await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:ne(n),durationS:0,uploadResult:null};let u=$r({environment:w,mode:y.mode??"testing",assertionMode:ir,finalValidation:lr,username:c.basicAuth?.username,accessKey:c.basicAuth?.access_key,sessionId:a.sessionId});ee=new Mr({env:u,runner:d,log:(C,j,F,O)=>a.log(C,j,F,O),sessionId:a.sessionId}),r.register("runner",()=>{(Or()||e.signal?.aborted)&&(z=!0);try{ee?.kill()}catch{}});let p={cdp_endpoint:oe.cdpEndpoint,ws_endpoint:oe.wsEndpoint,width:U.window_size.width,height:U.window_size.height,headless:X.headless??!1,model:x,session_id:a.sessionId};c.basicAuth?(p.username=c.basicAuth.username,p.access_key=c.basicAuth.access_key):c.token&&(p.auth={type:"bearer",token:c.token}),await ee.start(p);let b=o.author===!0;b&&($t(),a.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let{authorBoundary:h,cancelledInPhase:g,shrinkCount:I}=await Sn({decisions:m.decisions,forceAuthor:b,hasRetry:o.retry===!0||o.retryCount!==void 0,maxShrinks:o.retryCount!==void 0?parseInt(o.retryCount,10):je.maxShrinks,runReplayPhase:Is,session:a,accumulator:me,acquireLockIfNeeded:Sr});if(se=I>0,I>0&&(a.log("info","RETRY_TRIGGERED","Retry loop triggered",{shrink_count:I,final_author_boundary:h}),t.onRetryAttempt({shrink_count:I,final_author_boundary:h,complete_reauthor:h===0})),h===0&&I>0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback",{shrink_count:I}),!g&&h>=0)for(let C=h;C<l.steps.length&&!e.signal?.aborted;C++){let j=l.steps[C];if(He()){me.recordStep(j,{status:"failed",duration_s:0,reason:"v16-runner exited unexpectedly mid-session"});break}if(!me.shouldRunFlatStep(j))continue;vr(C),L=!0,ue.add(l.steps[C].flatIndex);let F=a.nextRunIndex();M=F,await vt(Ae(ge.raw,j.config.variables,j.objective).raw);let O=yr(C,F),W=Date.now(),S=null,N=null,V=null,K=!1,D=0,H=nt(),v={...O};delete v.run_id,Pt(v,{environment:w});let Q=`run-${F}`;try{G?.setRunActive(!0);try{for await(let P of ee.run(Q,"author",v)){if(t.onAgentEvent(P),H=Tt(H,P),P.type==="bifurcation"){let Oe=P.count??P.flows?.length??0;(P.is_single_flow??Oe<=1)||(V=P.flows??null,K=!0,D=0)}else if(P.type==="run_start"&&K)D++;else if(P.type==="step_event"&&P.event==="reasoning")G?.setStepText(P.detail);else if(P.type==="step_end"&&(P.status==="passed"&&G?.setStepComplete(),Le)){let Oe=K?Math.max(0,D-1):0;Le(P.index,Oe,P.child_id,typeof P.ordinal=="number"&&P.id?{ordinal:P.ordinal,id:P.id}:void 0)}if(P.type==="run_end"){S=P;break}if(P.type==="error"){N=P.message??"runner error";break}}}finally{G?.setRunActive(!1)}}catch(P){N=P.message}ee.diedUnexpectedly&&He();let J=Math.round((Date.now()-W)/1e3),De=Rt(C,F,S,V,N,J);if(a.recordStepRun({testmdStepIndex:l.steps[C].flatIndex,runIndex:F,totalRunDirs:pt(S,V)}),_t(H,S,F,V,l.steps[C].verifies),!De||z||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):je.maxShrinks,h=o.author===!0;h&&($t(),a.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let g=h?0:it(m.decisions),I=0,C=null,j=m.decisions.filter(S=>S.kind==="replay").length,F=m.decisions.length-j,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 W={source:n,steps:{total:m.decisions.length,replay:j,author:F},model:x,viewport:{width:U.window_size.width,height:U.window_size.height},chrome:oe.cdpEndpoint??oe.wsEndpoint??"managed",session:a.sessionName??"ephemeral",variables:{count:Object.keys(te.raw).length,secrets:Object.values(te.raw).filter(S=>S.secret).length,names:Object.keys(te.raw)},flags:O,mode:y.mode??"testing"};for(;;){let S=a.snapshot(),N=me.snapshot(),V=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}
43
+ reason: replay miss at step ${(C??0)+1}`;process.stderr.write(v+`
44
+ `)}let K=I>=1&&g>0&&C!==null?{startIdx:0,endIdx:C,count:C}:void 0;G?.setRunActive(!0);let D=await xo({decisions:V,resolved:l,session:a,accumulator:me,tuiConfig:U,globalConfig:W,buildStepConfigAt:yr,buildReplayConfig:v=>{let Q=m.decisions[v];if(Q.kind!=="replay")throw new Error("expected replay decision at index "+v);let J=l.steps[v];return Mt({step:J,decision:Q,chrome:oe,auth:c,sessionId:a.sessionId,runIndex:a.nextRunIndex(),sessionDir:a.sessionDir,windowSize:{width:U.window_size.width,height:U.window_size.height},forceNavigateUrl:v===0?he??void 0:J.unitEntryUrl,sessionContext:a.getContext(),variables:ko(ge.raw,J.config.variables,J.objective),evidence:It()})},onAnyAuthorStep:v=>{L=!0,ue.add(l.steps[v].flatIndex)},onCancel:()=>{Z=!0},topBannerModel:x,topBannerAuth:`${k.getActiveProfile()??"no profile"}/${w}`,spawnOpts:{environment:w,mode:y.mode??"testing",assertionMode:ir,finalValidation:lr,log:(v,Q,J,De)=>a.log(v,Q,J,De)},priorAttemptRollup:K,pushStepLevelDelta:(v,Q)=>vt(Ae(ge.raw,v,Q).raw),onSequencerStepEnd:(v,Q,J,De)=>{let P=Math.round((Date.now()-De)/1e3),Oe=v.hadError?v.reason??"runner error":null,As=Rt(Q,J,v.runEnd,v.bifurcationFlows??null,Oe,P);return a.recordStepRun({testmdStepIndex:l.steps[Q].flatIndex,runIndex:J,totalRunDirs:pt(v.runEnd,v.bifurcationFlows)}),_t(v.evidence??nt(),v.runEnd,J,v.bifurcationFlows,l.steps[Q].verifies),As},screenshotDispatcher:Le,onReasoning:v=>G?.setStepText(v),onStepComplete:()=>G?.setStepComplete(),onSpawnStart:v=>{M=v},host:t});if(G?.setRunActive(!1),D.cancelled){r.cleanup("marker-overlay","user cancelled run"),r.cleanup("chrome","user cancelled run");break}if(D.failedAt===null)break;let H=u({failedAt:D.failedAt,shrinkCount:I,hasRetry:p,maxShrinks:b});if(H.kind==="fail"||!_&&!await Sr())break;a.rollback(S),me.rollback(N),H.kind==="complete-reauthor"?g=0:g=H.newAuthorBoundary,I++,se=!0,a.log("info","RETRY_TRIGGERED","Retry loop triggered (TTY)",{shrink_count:I,failed_at:C}),g===0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback (TTY)",{shrink_count:I}),C=D.failedAt}}let Y=me.finalize(),be=Math.round((Date.now()-hr)/1e3),Rs={session:a,resolvedAuth:c,chromeResult:oe,chromeInstance:Ke??null,testId:a.testId??null,preparedVariables:te,variableIds:qe,globalContext:fr,localContext:pr,tuiConfig:U,env:w,localMode:!!o.local},wr=!1,_r=!1,Ir=!1,Rr=async(d={})=>{if(!T)return!1;if(ce.ownsLifecycle?wr:Ir)return!0;try{let u=await dr(),p=er(L)==="replay",b=de(ne(n),".internal","execution.json"),h=de(a.sessionDir,"execution.json"),g=Jr(T.packTestDir,p?[b,h]:[h,b],(S,N,V,K)=>a.log(S,N,V,K)),{ids:I,linear:C}=g?Xr(T.packTestDir):{ids:[],linear:!0},{steps:j,tail:F,unjoined:O}=Zr(re.steps,I,p,C);g?O?a.log("warn","SKIPPED_TAIL_UNJOINED","Executed records don't align with the authored blob \u2014 skipped tail withheld",{executed:re.steps.length,leaves:I.length}):F.length>0&&a.log("info","SKIPPED_TAIL_APPENDED","Unexecuted authored actions recorded as skipped",{count:F.length}):a.log("warn","SKIPPED_TAIL_NO_BLOB","No auteur blob in pack \u2014 unexecuted actions cannot be recorded as skipped",{});let W=await re.writeResult({steps:[...j,...F],spawns:Ge.length?Ge:[{resultCode:null}],tags:l.rootGlobal.tags,externalIdInput:{execution_id:T.executionId,session_id:a.sessionId,commit_id:p?m.fromCommitId??a.sessionId:a.sessionId,test_id:m.testId??a.testId??void 0,testcase_id:d.testcaseId??m.testcaseId??a.testcaseId??void 0,project_id:$??void 0,folder_id:fe??void 0,org_id:a.orgId!=null?String(a.orgId):void 0,session_name:a.sessionName??Ue(n),user_name:a.userName??void 0,user_email:a.userEmail??void 0,sharable_link:Nn(ie(w).testManagerUiUrl,$,d.testcaseId??m.testcaseId??a.testcaseId,d.shareId)},runnerEnv:Hr({cdpBrowser:u,resolution:br}),intentEnv:{model:x,platform:"Desktop",platform_type:"web",...ce.ownsLifecycle?{}:{run_kind:er(L)}},durationMs:Date.now()-hr,log:(S,N,V,K)=>a.log(S,N,V,K)});if(!ce.ownsLifecycle)return await Vr(re.pack,T.testId,de(a.sessionDir,"tui.log")),Ir=!0,a.log("info","EVIDENCE_RESULT_WRITTEN","Member result.yaml written",{execution_id:T.executionId,verdict:W}),!0;if(!_r)try{let S=Wr({cwd:process.cwd(),members:[{path:n,verdict:W,executionId:T.executionId,startedAt:new Date().toISOString(),acs:Yr(re.steps),mode:"testmd",local:!!o.local}]});_r=!0;for(let N of S.warnings)a.log("warn","EXEC_SYNC",N,{});S.synced>0&&a.log("info","EXEC_SYNC",`context sync: ${S.synced} fact(s), ${S.superseded} supersession(s)`,{})}catch(S){a.log("warn","EXEC_SYNC",`exec-sync failed: ${S instanceof Error?S.message:String(S)}`,{})}try{let S=Qr(re.pack,Gr(process.cwd()));S.status==="skipped"&&a.log("warn","EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${S.reason}`,{})}catch(S){a.log("warn","EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(S)})}return await Kr({executionId:T.executionId,testId:T.testId,saved:!0,runKind:er(L),verdict:W,outputStemDir:ne(n),cwd:s,packDir:re.pack,tuiLogPath:de(a.sessionDir,"tui.log"),expectStatusDisagrees:(o.bugDetection??U.bug_detection)==="continue",log:(S,N,V,K)=>a.log(S,N,V,K),surface:"testmd"}),wr=!0,a.log("info","EVIDENCE_SEALED","Evidence pack sealed",{execution_id:T.executionId,verdict:W}),!0}catch(u){return a.log("warn","EVIDENCE_SEAL_FAILED","Evidence pack seal failed",{error:String(u)}),!1}},Ye=we&&(_||m.isFirstRun)&&!m.degradedReadonly,ks=async()=>{if(!c.basicAuth)return null;let d=ie(w),u=(L||o.push===!0)&&!Z,p=(_||m.isFirstRun)&&!Z&&Y.overallStatus==="passed"&&!m.degradedReadonly;a.log("info","PIPELINE_GATE_STATE","Derived gate state (finalize)",{phase:"finalize",shouldUploadArtifacts:we,shouldUploadPipeline:Ye,shouldReplaceLocalOutput:u,shouldCommit:p,lockHeld:_,anyAuthorStepRan:L,cancelled:Z,overallStatus:Y.overallStatus});let b=ss({session:a,env:w,auth:c,variables:te,variableIds:qe,projectId:$,folderId:fe,totalSteps:Y.outcomes.length,totalDuration:be,screenshotExtMap:Te?.getExtMap(),codeExport:is({codeExport:o.codeExport,codeLanguage:o.codeLanguage,skipCodeValidation:o.skipCodeValidation},U.code_export),onProgress:()=>{},log:(g,I,C,j)=>a.log(g,I,C,j),shouldUploadArtifacts:Ye,shouldReplaceLocalOutput:u,shouldCommit:p,isFirstRun:m.isFirstRun,resolvedTest:l,sourcePath:n,stepRunRecords:a.getStepRunRecords(),authoredFlatIdx:[...ue],unitLocks:m.unitLocks,outcomes:Y.outcomes,overallStatus:Y.overallStatus,fromCommitId:m.fromCommitId,startedISO:ze,durationS:be,tmsIds:{testId:m.testId??a.testId??void 0,testcaseId:m.testcaseId??a.testcaseId??void 0,projectId:$??void 0,folderId:fe??void 0,orgId:a.orgId??void 0,sessionName:a.sessionName??Ue(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:se,forceAuthor:o.author===!0,evidence:T&&ce.ownsLifecycle?{executionId:T.executionId,packTestDir:T.packTestDir,sealedPackPath:re.pack,cwd:s,runIndices:wt,sealFn:Rr}:void 0,evidenceRead:T&&!ce.ownsLifecycle?{packTestDir:T.packTestDir,runIndices:wt}:void 0,authoredExecutionPath:L?void 0:de(ne(n),".internal","execution.json")});m.newCommitId!=null&&(b.skipTmsFinalize=!0);let h=new un(b);return i?await h.execute():await t.runUpload(h,g=>{if(g.testcaseId&&g.shareId&&$)return dt(d.testManagerUiUrl,$,g.testcaseId,g.shareId)})};T&&await dr(),ee&&(await ee.shutdown(),r.cleanup("runner","test.md run complete"));let le=await ts(Rs,{performUpload:ks,runCleanup:()=>{r.cleanup("chrome","test.md run complete")},log:(d,u,p,b)=>a.log(d,u,p,b)},{overallStatus:Y.overallStatus,outcomes:Y.outcomes,sourcePath:n,title:l.rootTitle,rootSteps:l.rootSteps,startedISO:ze,durationS:be,localMode:!!o.local,skipLocalWrites:!0}),kr=await Rr({testcaseId:le.uploadResult?.testcaseId,shareId:le.uploadResult?.shareId}),Cr=o.evidencePublish===!1,Er=ce.ownsLifecycle&&!!T&&!!c.basicAuth&&cs({shouldUploadArtifacts:we,lockHeld:_,isFirstRun:m.isFirstRun,sealed:kr,testId:m.testId});if(Er&&Cr)a.log("info","EVIDENCE_PUBLISH_SKIPPED","Replay evidence publish skipped (--no-evidence-publish)",{execution_id:T.executionId}),process.stderr.write(`info: evidence publish skipped (--no-evidence-publish)
45
+ `);else if(Cr&&(_||m.isFirstRun))process.stderr.write(`note: --no-evidence-publish has no effect on author/commit runs
46
+ `);else if(Er){let d=c.basicAuth,u=T,p=$,b=await ds({controller:new Ie(A.controllerBaseUrl,{username:d.username,accessKey:d.access_key}),tms:new et(A.tmsBaseUrl,c.resolvedCreds?.username??d.username,c.resolvedCreds?.access_key??d.access_key),testId:m.testId,sessionId:a.sessionId,executionId:u.executionId,sealedPackPath:re.pack,projectId:p});b.ok?a.log("info","EVIDENCE_INGESTED","Replay evidence uploaded and ingested",{execution_id:u.executionId,project_id:p}):(a.log("warn","EVIDENCE_PUBLISH_FAILED","Replay evidence publish failed",{execution_id:u.executionId,stage:b.stage,error:b.error}),process.stderr.write(` \u26A0 evidence publish failed (${b.stage}): ${b.error}
47
+ `)),t.onAgentEvent({type:"test_md_evidence_ingest",status:b.ok?"ok":"failed",evidence_id:u.executionId,...b.ok?{}:{stage:b.stage}})}await Ao(n,m,a,Y.outcomes,Y.overallStatus,ze,be,le.uploadResult,U,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},_,Z);try{let d=ye(n);if(nn({shouldUploadPipeline:Ye,uploadSucceeded:!!le.uploadResult?.success,metaCommitId:d?.commit_id,metaTestId:d?.test_id})){let u=await Ot({sourcePath:n,testId:d.test_id,sessionId:a.sessionId,commitId:d.commit_id,controller:new Ie(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});u.ok?a.log("info","BUNDLE_SYNC_OK","testmd bundle pushed",{commit_id:d.commit_id,bytes:u.bytes}):(a.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync failed",{commit_id:d.commit_id,stage:u.stage,error:u.error}),process.stderr.write(` \u26A0 bundle sync failed (${u.stage}): ${u.error}
48
+ `)),t.onAgentEvent({type:"test_md_bundle_sync",status:u.ok?"ok":"failed",commit_id:d.commit_id,path:n,...u.ok?{bytes:u.bytes}:{stage:u.stage}})}}catch(d){a.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync threw",{error:d instanceof Error?d.message:String(d)})}if(Ye&&le.uploadResult?.success)for(let d of m.unitLocks)try{let u=ye(d.file);if(u?.commit_id!==a.sessionId||!u?.test_id)continue;let p=await Ot({sourcePath:d.file,testId:String(u.test_id),sessionId:a.sessionId,commitId:String(u.commit_id),controller:new Ie(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});p.ok?a.log("info","BUNDLE_SYNC_OK","unit bundle pushed",{commit_id:u.commit_id,path:d.file,bytes:p.bytes}):a.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){a.log("warn","BUNDLE_SYNC_FAILED","unit bundle sync threw",{path:d.file,error:u instanceof Error?u.message:String(u)})}let Ar=ie(w),We=le.uploadResult?.testcaseId,Qe=We&&le.uploadResult?.shareId&&$?dt(Ar.testManagerUiUrl,$,We,le.uploadResult.shareId):void 0,Cs=l.unitFiles.filter(d=>d.file!==l.rootPath).map(d=>{let u=l.steps.filter(g=>g.owningFile===d.file),p=u.filter(g=>ue.has(g.flatIndex)).length,h=(d.kind==="test"?ye(d.file):null)?.commit_id===a.sessionId;return{path:d.file,kind:d.kind,replayed:u.length-p,authored:p,committed:h,...h?{commit_id:a.sessionId}:{}}}),xr={overallStatus:Y.overallStatus,durationS:be,decisions:m.decisions,outcomes:Y.outcomes,cancelled:Z,retryTriggered:se,lockHeld:_,anyAuthorStepRan:L,isFirstRun:m.isFirstRun,wantsPush:o.push===!0,uploadResult:le.uploadResult,shouldUploadArtifacts:we,shouldReplaceLocalOutput:L&&!Z,shouldCommit:(_||m.isFirstRun)&&!Z&&Y.overallStatus==="passed"&&!m.degradedReadonly,shareUrl:Qe,imports:Cs},{buildSummaryEvent:Es}=await import("./SummaryBox-BFZJW2KK.js");if(i?t.onAgentEvent(Es(xr)):await t.onSummary(xr),!i){let d=We&&$?$n(Ar.testManagerUiUrl,$,We):void 0;await t.onLinks({recordedTestPath:n,outputDir:ne(n),shareableLink:Qe,testCaseLink:d,codeExportDir:le.uploadResult?.codeExportDir})}if(ce.ownsLifecycle&&re&&kr){let{offerEvidenceView:d}=await import("./evidence-V23FPVXQ.js");await d({packPath:re.pack,env:w,isTTY:!i&&!Z&&!!process.stdin.isTTY&&!!process.stderr.isTTY,log:u=>process.stderr.write(u+`
49
+ `)})}return t.onAgentEvent({type:"test_md_done",overall_status:Y.overallStatus,duration_s:be,session_id:a.sessionId,...Qe?{share_url:Qe}:{}}),{overallStatus:Y.overallStatus,exitCode:Y.overallStatus==="passed"?0:1,outputDir:ne(n),durationS:be,uploadResult:le.uploadResult,anyAuthorStepRan:L,resultCode:Br(Ge),...kt.length?{pendingInvestigations:kt}:{}}}function Ro(e,t){let r={...e,...t},n=Object.keys(r).length>0?_e(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 Ae(e,t,r){let n={...e,...t??{}};if(Object.keys(n).length===0)return{raw:n,variables:{},objective:r};let s=_e(n,r);return{raw:n,variables:Zn(s.variables,s.objective),objective:s.objective}}function ko(e,t,r){let n=Ae(e,t,r).variables;return Object.keys(n).length>0?n:void 0}function ps(e,t){let r=new Set(gt),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 Co(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}async function Eo(e,t,r,n,s,o){let i=sn(t);fn(t,i);let f=Re(e),l=So(f)?JSON.parse(gs(f,"utf8")):null,c=l?.testcase_id,y=l?.test_id,w=l?.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
50
+ `),x&&(c=void 0,y=void 0,w=void 0);let k=n.resolvedAuth.basicAuth;if(!k){let M=await n.resolvedAuth.resolver.resolve(!0);M?.username&&M?.access_key&&(k={username:M.username,access_key:M.access_key},n.resolvedAuth.basicAuth=k)}let E=!!k,a=!r.local&&E&&y!=null&&w!=null&&c!=null,z=a&&(ot(i)||A);if(A&&!a)return process.stderr.write(`error: --push requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
51
+ `),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(R&&!a)return process.stderr.write(`error: --retry requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
52
+ `),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(x&&!E)return process.stderr.write(`error: --author requires authenticated credentials for the TMS API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
53
+ `),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};let m=null,_=!1,L=!1;if(z){m=s;let se=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",M=await rr({tmsBaseUrl:n.tmsBaseUrl,testId:y,fromCommitId:w,newCommitId:m,basicAuth:k,onLockConflict:se});if(M==="ok")_=!0,lt({baseUrl:xe(n.tmsBaseUrl),testId:y,auth:Pe(k),lifecycle:o});else{if(M==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};m=null,L=!0}}let ue=[],Z=z&&!_;if(!r.local&&E&&!Z){let se=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",M=await hs({resolved:t,decisions:i,tmsBaseUrl:n.tmsBaseUrl,newCommitId:m??s,basicAuth:k,mode:se,lifecycle:o});if(M.outcome==="ok")ue=M.locks;else{if(_&&y&&w&&m&&await tr(n,y,w,m),ve(),M.outcome==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:null,isFirstRun:c==null,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};process.stderr.write(`[lock] imported-unit conflict \u2014 whole run degrades to readonly (no commits, no uploads)
54
+ `),m=null,_=!1,L=!0}}return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:w,newCommitId:m,isFirstRun:c==null,hasAuth:E,canLock:a,lockAcquired:_,unitLocks:ue,degradedReadonly:L}}async function hs(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=ye(n.file);if(!s?.test_id||!s?.commit_id)continue;let o=await rr({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)}),lt({baseUrl:xe(e.tmsBaseUrl),testId:String(s.test_id),auth:Pe(e.basicAuth),lifecycle:e.lifecycle});continue}for(let i of r)await Fe({baseUrl:xe(e.tmsBaseUrl),testId:i.testId,body:{commitId:e.newCommitId,fromCommitId:i.fromCommitId},auth:Pe(e.basicAuth)}),ve(i.testId);return{outcome:o,locks:[]}}return{outcome:"ok",locks:r}}function xe(e){return`${e}/kane-cli/v1`}function Pe(e){return{username:e.username,accessKey:e.access_key}}async function rr(e){let t=xe(e.tmsBaseUrl),r=Pe(e.basicAuth),n={baseUrl:t,testId:e.testId,fromCommitId:e.fromCommitId,newCommitId:e.newCommitId,auth:r},s=await Vt(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}
55
+ `),"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)
56
+ `),"abort";if(e.onLockConflict==="wait"){if(s.reason==="base_mismatch")return process.stderr.write(`[lock] base commit mismatch \u2014 pull latest; aborting
57
+ `),"abort";for(;;){process.stderr.write(`[lock] waiting (concurrent session)...
58
+ `),await new Promise(l=>setTimeout(l,3e4));let f=await Vt(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
59
+ `),"abort"}}return process.stderr.write(`[lock] ${i} \u2014 running in readonly mode (no commit)
60
+ `),"readonly"}async function Ao(e,t,r,n,s,o,i,f,l,c,y,w,A){let{decisions:R,testId:x,testcaseId:k,fromCommitId:E,newCommitId:a}=t;if(!(s==="passed")||A){let m=A?"cancelled":s;w&&x&&E&&a&&(process.stderr.write(`[lock] run not committed (${m}); discarding playground lock
61
+ `),await tr(y,x,E,a));for(let _ of t.unitLocks)await tr(y,_.testId,_.fromCommitId,a??r.sessionId);ve();return}ve()}async function tr(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 Fe({baseUrl:xe(e.tmsBaseUrl),testId:t,body:{commitId:n,fromCommitId:r},auth:Pe(s)});o.ok||process.stderr.write(`warn: discardLock failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
62
+ `)}async function xo(e){let t=null,r=!1,n=0,s=-1,o=-1,i=0,f=async l=>{if(l&&l.status==="failed")return n>0&&e.decisions[n-1].kind==="replay"&&(t=n-1),null;for(;n<e.decisions.length&&!e.accumulator.shouldRunFlatStep(e.resolved.steps[n]);)n++;if(n>=e.decisions.length)return null;let c=e.decisions[n],y=e.resolved.steps[n],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??{},E={};for(let[a,z]of Object.entries(k))z!=null&&a!=="variables"&&a!=="assurance"&&(E[a]=z);return{config:R,banner:{stepLabel:`Step ${w+1}/${e.decisions.length}`,objective:Co(y.objective,100)},mode:c.kind,modeReason:x,perStepOverrides:Object.keys(E).length>0?E:void 0}};return await e.host.runSteps({topBanner:{model:e.topBannerModel,auth:e.topBannerAuth},globalConfig:e.globalConfig,getNextStep:f,onStepEnd:l=>(l.status==="failed"&&s>=0&&e.decisions[s]?.kind==="replay"&&(t=s),e.onSequencerStepEnd(l,s,o,i)),onAllComplete:()=>{},onCancel:()=>{r=!0,e.onCancel()},spawnOpts:e.spawnOpts,priorAttemptRollup:e.priorAttemptRollup,screenshotDispatcher:e.screenshotDispatcher,onReasoning:e.onReasoning,onStepComplete:e.onStepComplete}),{failedAt:t,cancelled:r}}export{Tn as a,Ln as b,ut as c,bi as d,Kn as e,jn as f,Yo as g,xn as h,Pn as i,Ht as j,Dn as k,On as l,dt as m,Nn as n,$n as o,Hn as p,qn as q,Zn as r,Xn as s,es as t,zt as u,ss as v,is as w,as as x,ls as y,Zt as z,Ia as A,ds as B,er as C,Al as D,Ro as E,Ae as F,ko as G,ps as H};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as g}from"./chunk-XDHZMCTA.js";import{existsSync as u}from"fs";import{dirname as d,resolve as i}from"path";import{fileURLToPath as p}from"url";var f=d(p(import.meta.url));function A(){return[i(f,".."),i(f,"../../..")]}function _(o){return{"darwin-arm64":"kane-cli-darwin-arm64","darwin-x64":"kane-cli-darwin-x64","linux-x64":"kane-cli-linux-x64","linux-arm64":"kane-cli-linux-arm64","win32-x64":"kane-cli-win-x64"}[o]??null}function w(){let o=_(`${process.platform}-${process.arch}`),n=process.platform==="win32"?"assurance-agent.exe":"assurance-agent";for(let r of A()){for(let s of o?["@testmuai","@lambdatestincprivate"]:[]){let e=i(r,"node_modules",s,o,"bin",n);if(u(e))return{cmd:e,args:[],tier:"platform"}}let a=i(r,"../assurance-agent/dist",n);if(u(a))return{cmd:a,args:[],tier:"sibling"};let t=i(r,"../assurance-agent/main.py");if(u(t)){let s=i(r,"../assurance-agent/.venv/bin/python");return{cmd:u(s)?s:"python3",args:[t],tier:"dev-python"}}}return null}function x(o,n={}){return{...process.env,...n,...g(),TESTMUAI_SOURCE:"kane-cli",TESTMUAI_SESSION_ID:o,ASSURANCE_LOG_LEVEL:process.env.ASSURANCE_LOG_LEVEL??"info"}}async function k(){if(process.env.TESTMUAI_API_KEY||process.env.TESTMUAI_BASIC_AUTH)return{};try{let{CredentialsManager:o}=await import("./credentials-XN4ROCQ3.js"),n=process.env.TESTMUAI_ENV==="stage"?"stage":"prod",r=new o,a=r.getActiveProfile()??"default",t={TESTMUAI_ENV:n},s=r.loadBasicAuth(a,n);if(s)return t.TESTMUAI_BASIC_AUTH=Buffer.from(`${s.username}:${s.access_key}`,"utf8").toString("base64"),t;let e=r.loadCredentials(a,n);if(e){try{let{refreshOAuthToken:l}=await import("./token-refresh-NIDUOTRM.js");await l({creds:r,profile:a,env:n,credentials:e})}catch{}let c=r.loadCredentials(a,n)??e;if(typeof c.access_token=="string"){let l=await T(n,c.access_token);return l?(t.TESTMUAI_BASIC_AUTH=l,t):(t.TESTMUAI_API_KEY=c.access_token,t)}}return{}}catch{return{}}}var E=8e3;function m(){return process.stderr.write("warn: session auth may expire during long runs \u2014 if that happens, run `kane-cli login` and retry\n"),null}async function T(o,n){try{let[{getEnvironment:r},{ControllerClient:a}]=await Promise.all([import("./config-R3GF2FZA.js"),import("./controller-client-RD2YEMAH.js")]),t=new a(r(o).controllerBaseUrl,n),s;try{let e=await Promise.race([t.getTmsCredentials().catch(()=>null),new Promise(c=>{s=setTimeout(()=>c(null),E)})]);return typeof e?.username!="string"||!e.username||typeof e.access_key!="string"||!e.access_key?m():Buffer.from(`${e.username}:${e.access_key}`,"utf8").toString("base64")}finally{clearTimeout(s)}}catch{return m()}}export{_ as a,w as b,x as c,k as d};
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as k}from"./chunk-FPFOW6BS.js";import{p as a}from"./chunk-Y5RNCJAN.js";import{a as m}from"./chunk-2WVKOZ6W.js";import{a as y}from"./chunk-KHJXOFDM.js";import{a as h}from"./chunk-LHDNJJGE.js";var $=10,u=200,N=1e4,S=1e6;function T(t,e,r="streaming"){let n=r==="full-fetch"?S:N,o=$,i=0;if(t!==void 0){let s=Number(t);if(!Number.isInteger(s)||s<1||s>u)return{error:`--limit must be an integer in [1, ${u}] (got "${t}")`};o=s}if(e!==void 0){let s=Number(e);if(!Number.isInteger(s)||s<0||s>n)return{error:`--offset must be an integer in [0, ${n}] (got "${e}")`};i=s}return{limit:o,offset:i}}function C(t,e){if(!e)return t;let r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r))}function j(t,{limit:e,offset:r}){let n=t.slice(r,r+e),o=t.length>r+e;return{slice:n,hasMore:o}}function v(t,e,r=n=>process.stdout.write(`${n}
2
+ import{a as k}from"./chunk-FPFOW6BS.js";import{p as a}from"./chunk-W6VD2XFO.js";import{a as m}from"./chunk-2WVKOZ6W.js";import{a as y}from"./chunk-JRMDGLLT.js";import{a as h}from"./chunk-F6ZOJXYU.js";var $=10,u=200,N=1e4,S=1e6;function T(t,e,r="streaming"){let n=r==="full-fetch"?S:N,o=$,i=0;if(t!==void 0){let s=Number(t);if(!Number.isInteger(s)||s<1||s>u)return{error:`--limit must be an integer in [1, ${u}] (got "${t}")`};o=s}if(e!==void 0){let s=Number(e);if(!Number.isInteger(s)||s<0||s>n)return{error:`--offset must be an integer in [0, ${n}] (got "${e}")`};i=s}return{limit:o,offset:i}}function C(t,e){if(!e)return t;let r=e.toLowerCase();return t.filter(n=>n.name.toLowerCase().includes(r))}function j(t,{limit:e,offset:r}){let n=t.slice(r,r+e),o=t.length>r+e;return{slice:n,hasMore:o}}function v(t,e,r=n=>process.stdout.write(`${n}
3
3
  `)){for(let n of t)r(JSON.stringify(n));r(JSON.stringify({_meta:"page",limit:e.limit,offset:e.offset,returned:t.length,has_more:e.has_more}))}function b(t,e,r=n=>process.stdout.write(`${n}
4
- `)){if(t.length===0){r("(no results)");return}let n=Math.max(2,...t.map(s=>s.id.length)),o=`${"ID".padEnd(n)} NAME`;r(o),r(`${"-".repeat(n)} ----`);for(let s of t)r(`${s.id.padEnd(n)} ${s.name}`);r("");let i=e.offset+t.length;if(e.hasMore){let s=e.totalIsLowerBound?`${e.total}+`:`${e.total}`;r(`${i} of ${s} \u2014 next: --offset ${e.offset+e.limit}`)}else r(`${t.length} shown (${e.total} total)`)}async function B(t,e,r){if(r.username&&r.accessKey)return{ok:!0,creds:{username:r.username,access_key:r.accessKey}};let n=new h,o=n.loadBasicAuth(t,e);if(o)return{ok:!0,creds:{username:o.username,access_key:o.access_key}};let i=n.loadCredentials(t,e);if(!i)return{ok:!1,reason:"no_credentials"};let s=i.access_token;try{let{refreshOAuthToken:d}=await import("./token-refresh-S7CYBZTE.js"),w=await d({creds:n,profile:t,env:e,credentials:i});w&&(s=w.accessToken)}catch(d){return{ok:!1,reason:"refresh_failed",detail:d instanceof Error?d.message:String(d)}}let c=y(e),f=await new k(c.controllerBaseUrl,async()=>s,null).resolve();return f?{ok:!0,creds:{username:f.username,access_key:f.access_key}}:{ok:!1,reason:"exchange_failed"}}function E(t,e,r){switch(r.reason){case"no_credentials":return{message:`error: no credentials for profile "${t}" [${e}]. Run \`kane-cli login\` or pass --username/--access-key.
4
+ `)){if(t.length===0){r("(no results)");return}let n=Math.max(2,...t.map(s=>s.id.length)),o=`${"ID".padEnd(n)} NAME`;r(o),r(`${"-".repeat(n)} ----`);for(let s of t)r(`${s.id.padEnd(n)} ${s.name}`);r("");let i=e.offset+t.length;if(e.hasMore){let s=e.totalIsLowerBound?`${e.total}+`:`${e.total}`;r(`${i} of ${s} \u2014 next: --offset ${e.offset+e.limit}`)}else r(`${t.length} shown (${e.total} total)`)}async function B(t,e,r){if(r.username&&r.accessKey)return{ok:!0,creds:{username:r.username,access_key:r.accessKey}};let n=new h,o=n.loadBasicAuth(t,e);if(o)return{ok:!0,creds:{username:o.username,access_key:o.access_key}};let i=n.loadCredentials(t,e);if(!i)return{ok:!1,reason:"no_credentials"};let s=i.access_token;try{let{refreshOAuthToken:d}=await import("./token-refresh-NIDUOTRM.js"),w=await d({creds:n,profile:t,env:e,credentials:i});w&&(s=w.accessToken)}catch(d){return{ok:!1,reason:"refresh_failed",detail:d instanceof Error?d.message:String(d)}}let c=y(e),f=await new k(c.controllerBaseUrl,async()=>s,null).resolve();return f?{ok:!0,creds:{username:f.username,access_key:f.access_key}}:{ok:!1,reason:"exchange_failed"}}function E(t,e,r){switch(r.reason){case"no_credentials":return{message:`error: no credentials for profile "${t}" [${e}]. Run \`kane-cli login\` or pass --username/--access-key.
5
5
  `,exitCode:2};case"refresh_failed":return{message:`error: OAuth token refresh failed for profile "${t}" [${e}]${r.detail?`: ${r.detail}`:""}. Run \`kane-cli login\` to re-auth.
6
6
  `,exitCode:2};case"exchange_failed":return{message:`error: TMS credential exchange failed for profile "${t}" [${e}]. Token may be revoked \u2014 try \`kane-cli login\`; if the problem persists, TMS may be down.
7
7
  `,exitCode:2}}}function O(t){return{id:t.project_id,name:t.name}}function M(t){return{id:t.id,name:t.name}}async function P(t,e,r,n){let o=r+n+1,i=[],s=!0;for await(let c of t.listProjectsStream({name:e})){if(i.push(...c.projects),c.done){s=!0;break}if(i.length>=o){s=!1;break}}return{items:i,doneStreaming:s}}function g(t){return!!t.agent||!process.stdin.isTTY||!process.stdout.isTTY}function _(t,e=r=>process.stdout.write(`${r}
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ var a={graph_search_similar:"search graph",graph_get_node:"read node",graph_get_edges:"read edges",graph_match_by_type:"match by type",graph_find_by_provenance:"trace provenance",graph_stale_nodes:"check stale",ask_user:"ask",finalize_proposal:"propose use-cases",chat_turn:"apply changes",read_image:"read image",source_read:"read source",source_grep:"search source",finalize_design:"propose design",expand_bva:"expand boundaries",covering_array:"combine classes",dedupe_candidates:"dedupe",budget_cut:"trim to budget",source_list:"list sources",graph_search_similar_batch:"search graph",graph_history:"read history"};function o(t){let e=a[t.name],n=t.status==="error"||t.status==="aborted"?" \u2717":"",i=t.detail?` \u2014 ${t.detail}`:"";return e?`\u2692 ${e}${i}${n}`:`\u2692 working\u2026${i}${n}`}function r(t){return o(t).replace(/^\S+ /,"")}function d(){return{currentAttempt:null,liveThinking:"",thinkingLog:[],activity:[]}}var s={dedup_candidate:"checking a possible duplicate",ambiguity:"asking to resolve an ambiguity",validation_repair:"repairing a validation failure",finalize:"finalizing the proposal",terminal_call:"putting the result together",validation_failed:"fixing a validation issue",no_tool_calls:"nudging a stalled turn",evidence_readback:"reading the evidence back",evidence_search:"searching the evidence",provenance_check:"checking provenance"};function c(t){return s[t.reason_code]??t.reason_code.replace(/_/g," ")}function u(t){let e=r({name:t.name});return t.status==="started"?`\u2192 ${e}\u2026`:t.status==="error"||t.status==="aborted"?`\u2717 ${e}`:`\u2713 ${e}`}function g(t,e){return e.turn_id!==t.turn_id?e.turn_id<t.turn_id:e.attempt<t.attempt}function h(t,e){let n=t.currentAttempt;if(n===null||n.turn_id!==e.turn_id||n.attempt!==e.attempt){if(n!==null&&g(n,e))return t;t={...t,currentAttempt:{turn_id:e.turn_id,attempt:e.attempt},liveThinking:""}}switch(e.type){case"reasoning_delta":return{...t,liveThinking:t.liveThinking+e.text};case"reasoning_done":return e.present?{...t,thinkingLog:[...t.thinkingLog,{text:t.liveThinking,tookMs:e.took_ms}],liveThinking:""}:{...t,liveThinking:""};case"tool_activity":return{...t,activity:[...t.activity,{name:e.name,status:e.status,label:u(e)}]};case"decision_activity":return{...t,activity:[...t.activity,{name:e.action,status:"decision",label:c(e)}]}}}export{o as a,r as b,d as c,c as d,h as e};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as P}from"./chunk-YCCUBQY4.js";import{y as a}from"./chunk-MMPFU2YC.js";import{a as S}from"./chunk-HCBYKLMW.js";import{a as M,b as n,i as $,k as B}from"./chunk-C44QQJR4.js";import{a as N}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var o=b(S(),1);function Q(m){let e=m.findIndex(c=>c.free);return e>=0?e:null}var _=60,I=100;function X({headline:m,ask:e=!1,rows:c,sel:r,focused:T,legend:u,freeText:l=null,freeTextNote:x,sublines:i=[]}){let{stdout:t}=B(),f=t?.columns??80,A=f<_,s=Math.min(f-1,I),g=d=>T&&r===d?(0,o.jsx)(n,{color:a.assuranceAccent,children:"\u276F"}):" ",p=e?`? ${m}`:m,w=Math.max(4,s-3),h=i.map((d,v)=>(0,o.jsx)(n,{color:a.dim,children:` ${d.length>w?`${d.slice(0,w-1)}\u2026`:d}`},`sub-${v}`)),C=0,E=c.map((d,v)=>d.free?l?(0,o.jsxs)(M,{flexDirection:"column",children:[(0,o.jsxs)(M,{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)(P,{value:l.value,onChange:l.onChange,onSubmit:l.onSubmit,onCancel:l.onCancel,placeholder:d.label})]}),x?(0,o.jsx)(n,{color:a.muted,children:` ${x}`}):null]},d.key):(0,o.jsxs)(n,{children:[g(v)," ",(0,o.jsx)(n,{color:a.dim,children:`\u270E ${d.label}`})]},d.key):(C+=1,(0,o.jsxs)(n,{bold:T&&r===v,children:[g(v),` ${C}. ${d.label}`,d.detail?(0,o.jsx)(n,{color:a.dim,bold:!1,children:` \u2014 ${d.detail}`}):null]},d.key)));if(A)return(0,o.jsxs)(M,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsx)(n,{bold:!0,color:a.assuranceAccent,children:p}),h,E,(0,o.jsx)(n,{color:a.muted,children:u})]});let L=Math.max(2,s-(3+p.length+1)),F=Math.max(2,s-(3+u.length+1));return(0,o.jsxs)(M,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsxs)(n,{color:a.assuranceAccent,children:["\u2500\u2500 ",(0,o.jsx)(n,{bold:!0,children:p}),` ${"\u2500".repeat(L)}`]}),h,(0,o.jsx)(n,{children:" "}),E,(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(F)}`]})]})}var R=b(S(),1),K="ctrl+t thinking \xB7 ctrl+c exit";function D(m,e){if(m.length<=e)return m;if(e<=1)return"\u2026";let c=Math.ceil((e-1)/2),r=Math.floor((e-1)/2);return`${m.slice(0,c)}\u2026${r>0?m.slice(-r):""}`}function J({verb:m,subject:e,pendingCount:c,creditsTotal:r,state:T,hints:u=K}){let{stdout:l}=B(),x=l?.columns??80,i=[];i.push(m),T&&i.push(T),r!==void 0&&i.push(`${r.toFixed(1)} credits`);let t=c?`[${c} pending]`:null,f=" \xB7 ",s=[...i,...t?[t]:[]].join(f).length,g,p=[...i,...e?[e]:[],...t?[t]:[],u].join(f);if(p.length<=x)g=p;else{let w=x-s-(e?f.length:0)-f.length-u.length;if(e&&w>=8)g=[...i,D(e,w),...t?[t]:[],u].join(f);else{let h=x-s-(e?f.length:0);g=[...i,...e&&h>=4?[D(e,h)]:[],...t?[t]:[]].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 O=b(N(),1);function Z({onToggleThinking:m,onCtrlC:e,explorer:c,panel:r}){let u=(0,O.useRef)(null),l=(0,O.useRef)(""),x=()=>{u.current&&clearTimeout(u.current),u.current=null,l.current=""};return(0,O.useEffect)(()=>x,[]),$((i,t)=>{if(t.ctrl&&i==="t"){m();return}if(t.ctrl&&i==="c"){e();return}if(!t.ctrl&&i.includes("")){e();return}if(!t.ctrl&&i.includes("")){m();return}if(c&&c.isOpen()){let f=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{x(),c.onBack()},150)};if(u.current){if(t.upArrow||t.downArrow||t.return){x(),t.return?c.onEnter():c.onMove(t.upArrow?-1:1);return}if(l.current+=i,l.current==="["){f();return}let A=l.current;x();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(t.upArrow){c.onMove(-1);return}if(t.downArrow){c.onMove(1);return}if(t.return){c.onEnter();return}if(t.escape){l.current="",f();return}return}if(r&&r.isFocused()){let f=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{x(),r.onBack()},150)};if(u.current){if(t.upArrow||t.downArrow||t.return||t.leftArrow||t.rightArrow){x(),t.return?r.onSelect():t.leftArrow?r.onLeft?.():t.rightArrow?r.onRight?.():r.onMove(t.upArrow?-1:1);return}if(l.current+=i,l.current==="["){f();return}let A=l.current;x();let s=/^\[([ABCD])/.exec(A);if(s){s[1]==="A"||s[1]==="B"?r.onMove(s[1]==="A"?-1:1):s[1]==="C"?r.onRight?.():r.onLeft?.();return}r.onBack();return}if(t.upArrow){r.onMove(-1);return}if(t.downArrow){r.onMove(1);return}if(t.leftArrow){r.onLeft?.();return}if(t.rightArrow){r.onRight?.();return}if(t.return){r.onSelect();return}if(t.escape){l.current="",f();return}if(/^[1-9]$/.test(i)){r.onDigit(Number(i));return}if(t.tab){r.onTab?.();return}if(i===" "&&r.isMulti()){r.onSpace();return}if(i&&!t.ctrl&&!t.meta){r.onType(i);return}return}}),null}export{Q as a,X as b,J as c,Z as d};
2
+ import{a as P}from"./chunk-YCCUBQY4.js";import{y as a}from"./chunk-C4G7RVJ6.js";import{a as S}from"./chunk-HCBYKLMW.js";import{a as M,b as n,i as $,k as B}from"./chunk-C44QQJR4.js";import{a as N}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var o=b(S(),1);function Q(m){let e=m.findIndex(c=>c.free);return e>=0?e:null}var _=60,I=100;function X({headline:m,ask:e=!1,rows:c,sel:r,focused:T,legend:u,freeText:l=null,freeTextNote:x,sublines:i=[]}){let{stdout:t}=B(),f=t?.columns??80,A=f<_,s=Math.min(f-1,I),g=d=>T&&r===d?(0,o.jsx)(n,{color:a.assuranceAccent,children:"\u276F"}):" ",p=e?`? ${m}`:m,w=Math.max(4,s-3),h=i.map((d,v)=>(0,o.jsx)(n,{color:a.dim,children:` ${d.length>w?`${d.slice(0,w-1)}\u2026`:d}`},`sub-${v}`)),C=0,E=c.map((d,v)=>d.free?l?(0,o.jsxs)(M,{flexDirection:"column",children:[(0,o.jsxs)(M,{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)(P,{value:l.value,onChange:l.onChange,onSubmit:l.onSubmit,onCancel:l.onCancel,placeholder:d.label})]}),x?(0,o.jsx)(n,{color:a.muted,children:` ${x}`}):null]},d.key):(0,o.jsxs)(n,{children:[g(v)," ",(0,o.jsx)(n,{color:a.dim,children:`\u270E ${d.label}`})]},d.key):(C+=1,(0,o.jsxs)(n,{bold:T&&r===v,children:[g(v),` ${C}. ${d.label}`,d.detail?(0,o.jsx)(n,{color:a.dim,bold:!1,children:` \u2014 ${d.detail}`}):null]},d.key)));if(A)return(0,o.jsxs)(M,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsx)(n,{bold:!0,color:a.assuranceAccent,children:p}),h,E,(0,o.jsx)(n,{color:a.muted,children:u})]});let L=Math.max(2,s-(3+p.length+1)),F=Math.max(2,s-(3+u.length+1));return(0,o.jsxs)(M,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsxs)(n,{color:a.assuranceAccent,children:["\u2500\u2500 ",(0,o.jsx)(n,{bold:!0,children:p}),` ${"\u2500".repeat(L)}`]}),h,(0,o.jsx)(n,{children:" "}),E,(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(F)}`]})]})}var R=b(S(),1),K="ctrl+t thinking \xB7 ctrl+c exit";function D(m,e){if(m.length<=e)return m;if(e<=1)return"\u2026";let c=Math.ceil((e-1)/2),r=Math.floor((e-1)/2);return`${m.slice(0,c)}\u2026${r>0?m.slice(-r):""}`}function J({verb:m,subject:e,pendingCount:c,creditsTotal:r,state:T,hints:u=K}){let{stdout:l}=B(),x=l?.columns??80,i=[];i.push(m),T&&i.push(T),r!==void 0&&i.push(`${r.toFixed(1)} credits`);let t=c?`[${c} pending]`:null,f=" \xB7 ",s=[...i,...t?[t]:[]].join(f).length,g,p=[...i,...e?[e]:[],...t?[t]:[],u].join(f);if(p.length<=x)g=p;else{let w=x-s-(e?f.length:0)-f.length-u.length;if(e&&w>=8)g=[...i,D(e,w),...t?[t]:[],u].join(f);else{let h=x-s-(e?f.length:0);g=[...i,...e&&h>=4?[D(e,h)]:[],...t?[t]:[]].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 O=b(N(),1);function Z({onToggleThinking:m,onCtrlC:e,explorer:c,panel:r}){let u=(0,O.useRef)(null),l=(0,O.useRef)(""),x=()=>{u.current&&clearTimeout(u.current),u.current=null,l.current=""};return(0,O.useEffect)(()=>x,[]),$((i,t)=>{if(t.ctrl&&i==="t"){m();return}if(t.ctrl&&i==="c"){e();return}if(!t.ctrl&&i.includes("")){e();return}if(!t.ctrl&&i.includes("")){m();return}if(c&&c.isOpen()){let f=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{x(),c.onBack()},150)};if(u.current){if(t.upArrow||t.downArrow||t.return){x(),t.return?c.onEnter():c.onMove(t.upArrow?-1:1);return}if(l.current+=i,l.current==="["){f();return}let A=l.current;x();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(t.upArrow){c.onMove(-1);return}if(t.downArrow){c.onMove(1);return}if(t.return){c.onEnter();return}if(t.escape){l.current="",f();return}return}if(r&&r.isFocused()){let f=()=>{u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{x(),r.onBack()},150)};if(u.current){if(t.upArrow||t.downArrow||t.return||t.leftArrow||t.rightArrow){x(),t.return?r.onSelect():t.leftArrow?r.onLeft?.():t.rightArrow?r.onRight?.():r.onMove(t.upArrow?-1:1);return}if(l.current+=i,l.current==="["){f();return}let A=l.current;x();let s=/^\[([ABCD])/.exec(A);if(s){s[1]==="A"||s[1]==="B"?r.onMove(s[1]==="A"?-1:1):s[1]==="C"?r.onRight?.():r.onLeft?.();return}r.onBack();return}if(t.upArrow){r.onMove(-1);return}if(t.downArrow){r.onMove(1);return}if(t.leftArrow){r.onLeft?.();return}if(t.rightArrow){r.onRight?.();return}if(t.return){r.onSelect();return}if(t.escape){l.current="",f();return}if(/^[1-9]$/.test(i)){r.onDigit(Number(i));return}if(t.tab){r.onTab?.();return}if(i===" "&&r.isMulti()){r.onSpace();return}if(i&&!t.ctrl&&!t.meta){r.onType(i);return}return}}),null}export{Q as a,X as b,J as c,Z as d};
@@ -0,0 +1,19 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{c as g}from"./chunk-5EOX4MEY.js";var D={ASR_CMD_START:"info",ASR_CMD_END:"info",ASR_AGENT_SPAWN:"info",ASR_WORK_ITEM_START:"info",ASR_WORK_ITEM_END:"info",ASR_PROPOSAL:"info",ASR_VALIDATE_FAILED:"warn",ASR_COMMIT:"info",ASR_SESSION_PAUSED:"info",ASR_SESSION_RESUMED:"info",ASR_SESSION_COMPLETE:"info",ASR_AGENT_EXIT:"warn",ASR_RECONCILE_PLAN:"info",ASR_RECONCILE_ROW_END:"info",ASR_HIGH_RISK_CI:"warn",ASR_INGEST:"info",ASR_EMBED_DEGRADED:"warn",ASR_CONTEXT_CLONED:"warn",ASR_ERROR:"error",ASR_CRASH:"error"},h={ASR_CMD_START:["source_count","resumed","applied_plan"],ASR_CMD_END:["exit_code","duration_ms","credits_total","work_items_total","work_items_failed"],ASR_AGENT_SPAWN:["tier","duration_ms"],ASR_WORK_ITEM_START:["work_item_index","work_item_count","source_kind"],ASR_WORK_ITEM_END:["work_item_index","work_item_count","outcome","duration_ms","error_domain","error_code"],ASR_PROPOSAL:["item_count","turn_index"],ASR_VALIDATE_FAILED:["error_code","count","turn_index"],ASR_COMMIT:["trusted","derived","archived","items","items_dropped","record_seq"],ASR_SESSION_PAUSED:["pending_questions","pending_proposals"],ASR_SESSION_RESUMED:["resume_count","expired_session_id"],ASR_SESSION_COMPLETE:["duration_ms","credits_total"],ASR_AGENT_EXIT:["exit_code","signal"],ASR_RECONCILE_PLAN:["row_count","add_count","modify_count","archive_count"],ASR_RECONCILE_ROW_END:["row_index","kind","outcome","duration_ms"],ASR_HIGH_RISK_CI:["count"],ASR_INGEST:["work_item_index","work_item_count","format","bytes","media_facts"],ASR_EMBED_DEGRADED:["held"],ASR_CONTEXT_CLONED:[],ASR_ERROR:["error_domain","error_code","exit_code","turn_index"],ASR_CRASH:["error_domain","error_code","error_name"]},k=[[/^(auth_expired|401|preflight_auth|AUTH)/i,"auth"],[/^(credit_denied|402|CREDIT)/i,"credit"],[/^(stream_drop|read_timeout|connect_failed|dns|E(CONN|AI_AGAIN|TIMEDOUT)|network)/i,"network"],[/^(frame_parse|post_terminal_data|eof_without_terminal|turn_id_mismatch|binding_mismatch|schema_invalid|frame_too_large|protocol)/i,"protocol"],[/^(provider_error|http_5\d\d|turn_exhausted|adapter_integrity)/i,"provider"],[/^(STALE_BASIS|R\d+|validation|criteria)/i,"validation"],[/^(BLOB_MISSING|SOURCE_UNKNOWN|SESSION_(LOCKED|EXPIRED|MISSING|LOCK_LOST)|NO_STORE|fsck|store)/i,"store"],[/^(usage|EX2|SOURCE_WITH_RESUME|HIGH_RISK_CI|bad_flag|no_tty)/i,"usage"],[/^agent_(crash|exit)/i,"agent_crash"]];function O(e){let t=(e||"unknown").slice(0,64);for(let[n,r]of k)if(n.test(t))return{error_domain:r,error_code:t};return{error_domain:"cli_crash",error_code:t}}import{randomBytes as L}from"crypto";var v=/^(uc|sc|ac|t|gap|sty)-\d+$/,$="0123456789abcdefghijklmnopqrstuvwxyz";function b(e){let t="",n=L(e);for(let r=0;r<e;r++)t+=$[n[r]%36];return t}function q(e=new Date){let t=(r,o)=>String(r).padStart(o,"0");return`as-${`${e.getUTCFullYear()}${t(e.getUTCMonth()+1,2)}${t(e.getUTCDate(),2)}T${t(e.getUTCHours(),2)}${t(e.getUTCMinutes(),2)}`}-${b(8)}`}var C=-1,p=0;function z(e=new Date){let t=e.getTime(),n=L(10);t===C?p=p+1&4095:(C=t,p=(n[0]<<8|n[1])&4095);let r=Buffer.alloc(16);r.writeUIntBE(t,0,6),r[6]=112|p>>8,r[7]=p&255,r[8]=128|n[2]&63,n.copy(r,9,3,10);let o=r.toString("hex");return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20)}`}var G=64,U=128,P=/^[A-Za-z0-9._:@\/-]+$/,H=0;function W(e,t){if(typeof t=="number"&&Number.isFinite(t)||typeof t=="boolean")return t;if(typeof t!="string")return;let n=e.endsWith("_id")||e==="signal"?U:G;if(!(t.length===0||t.length>n)&&P.test(t))return t}function w(e,t,n={}){let r=h[t],o={};for(let i of r){let s=n[i];if(s==null)continue;if(i==="items"){let u=Array.isArray(s)?s.filter(y=>typeof y=="string"):[],f=u.filter(y=>v.test(y));f.length>0&&(o.items=f.slice(0,50).join(","));let S=u.length-f.length;S>0&&(o.items_dropped=S);continue}let a=W(i,s);a!==void 0&&(o[i]=a)}if(typeof n.error_code=="string"&&r.includes("error_code")){let{error_domain:i,error_code:s}=O(n.error_code);o.error_code=s,r.includes("error_domain")&&(o.error_domain=i)}return{level:D[t],event:t,message:t,session_id:e.session_id,operation_id:e.operation_id,...e.parent_operation_id?{parent_operation_id:e.parent_operation_id}:{},...e.agent_session_id?{agent_session_id:e.agent_session_id}:{},context_lineage_id:e.context_lineage_id??null,context_instance_id:e.context_instance_id??null,verb:e.verb,mode:e.mode,component:"kane-cli",seq:H++,event_time:new Date().toISOString(),context:o}}import _ from"fs";import F from"path";var K=500,j=7;function M(e){if(e.length!==0)try{let t=g();_.mkdirSync(F.dirname(t),{recursive:!0});let n=e.map(r=>JSON.stringify(r)).join(`
3
+ `)+`
4
+ `;_.appendFileSync(t,n,{flag:"a",mode:384}),B()}catch{}}async function re(e){let t=g(),n=`${t}.claim-${process.pid}`,r;try{_.renameSync(t,n),r=_.readFileSync(n,"utf8")}catch{return}let o=[];for(let i of r.split(`
5
+ `))if(i.trim())try{o.push(JSON.parse(i))}catch{}try{(o.length===0?!0:await e(o))?_.unlinkSync(n):(_.appendFileSync(t,r,{flag:"a",mode:384}),_.unlinkSync(n))}catch{try{_.appendFileSync(t,r,{flag:"a",mode:384}),_.unlinkSync(n)}catch{}}}function B(e=K,t=j){try{let n=g(),o=_.readFileSync(n,"utf8").split(`
6
+ `).filter(u=>u.trim()),i=Date.now()-t*24*3600*1e3,a=o.filter(u=>{try{let f=JSON.parse(u),S=Date.parse(f.event_time??f.timestamp??"");return Number.isNaN(S)||S>=i}catch{return!1}}).slice(-e);a.length!==o.length&&_.writeFileSync(n,a.length?a.join(`
7
+ `)+`
8
+ `:"",{mode:384})}catch{}}var l=null;function _e(e){l=e}function ce(){return l}var I=()=>!!process.env.KANE_DEV_MODE,c=[],R=!1,N=null,A=null,x=null,d=null,E=[];function ae(e){if(d=e,e&&E.length>0){let t=E;E=[];for(let n of t)try{e.log(n.level,n.event,n.message,n.context)}catch{}}}function de(e,t,n,r){if(d){try{d.log(e,t,n,r)}catch{}return}E.push({level:e,event:t,message:n,context:r})}function le(){return d}function ue(){return R}function fe(e,t){c=c.filter(n=>n.name!==e),c.push({name:e,fn:t})}function Se(e){c=c.filter(t=>t.name!==e)}function pe(e,t){let n=c.find(o=>o.name===e);if(!n)return;c=c.filter(o=>o.name!==e);let r=!0;try{n.fn()}catch(o){r=!1,process.stderr.write(`[exit-manager] cleanup(${e}) failed: ${o instanceof Error?o.message:String(o)}
9
+ `)}t&&r&&I()&&process.stderr.write(`[exit-manager] cleanup(${e}): ${t}
10
+ `)}function m(e,t,n=!1,r){if(R){process.exit(N??e);return}if(R=!0,N=e,n&&d)try{d.log("error","CRASH",t),d.shutdownSync()}catch{}if(n&&l&&e!==130&&e!==143)try{let s=/Uncaught exception:\s*([A-Za-z0-9_$]+)/.exec(t)?.[1]??"crash";M([w(l,"ASR_CRASH",{error_code:"cli_crash",error_name:s})])}catch{}let o=[...c].reverse(),i=[];for(let s of o)try{s.fn(),i.push(s.name)}catch(a){process.stderr.write(`[exit-manager] cleanup(${s.name}) failed: ${a instanceof Error?a.message:String(a)}
11
+ `)}if(c=[],I()&&(process.stderr.write(`[exit-manager] shutdown(${e}): ${t}
12
+ `),i.length>0&&process.stderr.write(`[exit-manager] cleaned up: ${i.join(", ")}
13
+ `)),n){if(x)try{x()}catch{}e===130||e===143||(process.stderr.write(`
14
+ kane-cli crashed: ${t}
15
+ `+(i.length>0?`Resources cleaned up (${i.join(", ")}).
16
+ `:"")),l&&process.stderr.write(`session: ${l.session_id} \u2014 share this id with support
17
+ `),r&&I()?process.stderr.write(`${r}
18
+ `):process.stderr.write(`(re-run with KANE_DEV_MODE=1 for the full stack)
19
+ `)),process.exit(e);return}if(A&&!n){A();return}process.exit(e)}function Ee(e){A=e}function ge(e){x=e}var T=!1;function me(){T||(T=!0,process.on("SIGINT",()=>{m(130,"Received SIGINT",!0)}),process.on("SIGTERM",()=>{m(143,"Received SIGTERM",!0)}),process.on("uncaughtException",e=>{m(1,`Uncaught exception: ${e.name}: ${e.message}`,!0,e.stack)}),process.on("unhandledRejection",e=>{m(1,`Unhandled rejection: ${String(e)}`,!0,e instanceof Error?e.stack:void 0)}))}function Re(){c=[],R=!1,N=null,A=null,x=null,d=null,E=[],T=!1,l=null}export{D as a,q as b,z as c,w as d,M as e,re as f,_e as g,ce as h,ae as i,de as j,le as k,ue as l,fe as m,Se as n,pe as o,m as p,Ee as q,ge as r,me as s,Re as t};
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as u,c as p}from"./chunk-UX2B7L6K.js";import{spawn as h}from"child_process";var k=new Set(["progress","ask_user","graph_query","ingest_request","proposal","design","error","done","reasoning_delta","reasoning_done","tool_activity","decision_activity","text_delta","usage","receipt","chat_ops","session_paused","session_complete","state_checkpoint"]);function v(g,n={}){let a=n.spawnCmd!==void 0?n.spawnCmd:u();if(!a)throw new Error("assurance agent not found \u2014 your platform package may be missing; reinstall kane-cli (npm i -g @testmuai/kane-cli)");let f=g.source.images?.length??0;a.tier==="dev-python"&&f>0&&n.onWarn?.("warn: development agent in use \u2014 if image citations are missing, update the agent package");let t=h(a.cmd,a.args,{stdio:["pipe","pipe","pipe"],env:p(g.session_id,n.auth)});if(t.stdin.write(JSON.stringify(g)+`
3
+ `),n.onStderr){let e="";t.stderr.on("data",r=>{e+=r.toString("utf8");let i;for(;(i=e.indexOf(`
4
+ `))>=0;){let o=e.slice(0,i);e=e.slice(i+1),o.trim()&&n.onStderr(o)}})}let d=new Promise(e=>{t.on("exit",(r,i)=>e({code:r,signal:i}))});async function*m(){let e="",r=!1;for await(let i of t.stdout){e+=i.toString("utf8");let o;for(;(o=e.indexOf(`
5
+ `))>=0;){let l=e.slice(0,o).trim();if(e=e.slice(o+1),!l)continue;let c;try{c=JSON.parse(l)}catch{n.onWarn?.(`agent: skipping malformed line: ${l.slice(0,120)}`);continue}let s=c;if(!s||typeof s!="object"||!k.has(s.type)){n.onWarn?.(`agent: skipping unknown event type "${s&&typeof s=="object"?String(s.type??"?"):"?"}"`);continue}if(yield s,s.type==="done"){r=!0;break}}if(r)break}await d.catch(()=>{})}return{events:m(),send:e=>{t.stdin&&!t.stdin.destroyed&&t.stdin.write(JSON.stringify(e)+`
6
+ `)},kill:()=>{t.kill("SIGTERM")},exited:d}}export{v as a};
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{closeSync as A,existsSync as R,mkdirSync as N,openSync as J,readFileSync as I,readdirSync as W,renameSync as C,rmSync as g,watch as D,writeFileSync as _}from"fs";import{join as h}from"path";import{randomBytes as U}from"crypto";var X=1440*60*1e3,L=class extends Error{constructor(l,u,f,k){super(`${l}: ${f}`);this.code=l;this.key=u;this.holder=k}},E=e=>(e?.now??(()=>new Date))();function M(e){if(!Number.isInteger(e)||e<=0)return!1;try{return process.kill(e,0),!0}catch(s){return s.code==="EPERM"}}function $(e,s){let l=s.getTime()-new Date(e.ts).getTime();return!M(e.pid)||l>=X||Number.isNaN(l)}var m=e=>h(e,"locks"),G=e=>h(m(e),"waiters");function T(e,s){return s.kind==="context"?h(m(e),"context.lock"):s.kind==="extract"?h(m(e),"extract.lock"):h(m(e),`uc-${s.id}.lock`)}var x=e=>e.kind==="uc"?e.id:e.kind,v=e=>e.kind==="uc"?`uc:${e.id}`:e.kind,K=e=>e.kind==="uc"?e.id:`~${e.kind}`;function H(e){return[...e].sort((s,l)=>K(s)<K(l)?-1:K(s)>K(l)?1:0)}function p(e){try{return JSON.parse(I(e,"utf8"))}catch{return null}}function F(e,s,l){let u=`${e}.break-${l}`;try{C(e,u)}catch(k){if(k.code==="ENOENT")return!1;throw k}let f;try{f=JSON.parse(I(u,"utf8"))}catch{f=null}if(f===null||f.nonce===s)return g(u,{force:!0}),!0;try{C(u,e)}catch{g(u,{force:!0})}return!1}var y=new Map,O=new Map;function B(e,s,l){let u=o=>`${e}|${s}|${x(o)}`;function f(o,d,c=0){if(c>20)throw new L("LOCK_CONTENTION_UNSETTLED",o,`${v(o)}: lock contention did not settle`);let i=T(e,o);N(m(e),{recursive:!0});let n=U(8).toString("hex");try{let t=J(i,"wx",384);return _(t,JSON.stringify({...d,nonce:n})+`
3
+ `),A(t),n}catch(t){if(t.code!=="EEXIST")throw t;let r=p(i),a=E(l);if(r!==null&&!$(r,a)){let S=o.kind==="context"?"CONTEXT_HELD":o.kind==="extract"?"EXTRACT_HELD":"UC_HELD";throw new L(S,o,`${v(o)} is held by ${r.owner_sid} (${r.verb})`,{owner_sid:r.owner_sid,pid:r.pid,ts:r.ts,verb:r.verb,alive:M(r.pid)})}return F(i,r?.nonce,n)&&process.stderr.write(JSON.stringify({event:"lock_steal",key:v(o),stale_owner:r?.owner_sid??"corrupt",by:s,ts:a.toISOString()})+`
4
+ `),f(o,d,c+1)}}function k(o,d){let c=!1;return{keys:d,assertHeld(){for(let{key:i,sk:n}of o){let t=y.get(n),r=t?p(t.path):null;if(!t||r===null||r.nonce!==t.nonce)throw new L("LOCK_LOST",i,`${v(i)} grant was taken over or removed`)}},touch(){for(let{sk:i}of o){let n=y.get(i);if(!n)continue;let t=p(n.path);t!==null&&t.nonce===n.nonce&&_(n.path,JSON.stringify({...t,ts:E(l).toISOString()})+`
5
+ `,{mode:384})}},release(){if(!c){c=!0;for(let{sk:i}of[...o].reverse()){let n=y.get(i);if(n&&(n.count-=1,n.count<=0)){y.delete(i);let t=p(n.path);t!==null&&t.nonce===n.nonce&&g(n.path,{force:!0})}}}}}}function w(o,d){let c=H(o),i=[];try{for(let n of c){let t=u(n),r=y.get(t);if(r)r.count+=1;else{let a=f(n,{owner_sid:s,pid:process.pid,ts:E(l).toISOString(),verb:d.verb??"unknown",hold:d.hold,...n.kind==="uc"?{logical_display:n.id.toUpperCase()}:{}});y.set(t,{nonce:a,count:1,path:T(e,n),key:n})}i.push({key:n,sk:t})}return k(i,c)}catch(n){for(let{sk:t}of[...i].reverse()){let r=y.get(t);if(r&&(r.count-=1,r.count<=0)){y.delete(t);let a=p(r.path);a!==null&&a.nonce===r.nonce&&g(r.path,{force:!0})}}throw n}}return{acquire:w,tryAcquire(o,d){try{return w(o,d)}catch(c){if(c instanceof L&&(c.code==="UC_HELD"||c.code==="CONTEXT_HELD"||c.code==="EXTRACT_HELD"))return{contended:c};throw c}},holder(o){return p(T(e,o))},async wait(o,d){let c=T(e,o);N(G(e),{recursive:!0});let i=h(G(e),`${x(o)}.${s}.${process.pid}.json`);try{_(i,JSON.stringify({sid:s,pid:process.pid,ts:E(l).toISOString()})+`
6
+ `,{mode:384})}catch{}let n=Date.now()+d.timeoutMs,t=null,r=null;try{try{t=D(m(e),()=>{r?.()}),t.on("error",()=>{r?.(),t=null})}catch{t=null}for(;;){if(d.signal?.aborted)return"cancelled";let a=p(c);if(a===null||$(a,E(l)))return"free";let S=n-Date.now();if(S<=0)return"timeout";await new Promise(b=>{r=b;let P=setTimeout(b,Math.min(t?250:100,Math.max(1,S)));d.signal?.addEventListener?.("abort",()=>{clearTimeout(P),b()},{once:!0})}),r=null}}finally{t?.close(),g(i,{force:!0})}},async withKeySerialized(o,d){let i=H(o).map(a=>`${e}|${x(a)}`),n=i.map(a=>O.get(a)??Promise.resolve()),t,r=new Promise(a=>{t=a});for(let a of i)O.set(a,r);await Promise.all(n);try{return await d()}finally{t();for(let a of i)O.get(a)===r&&O.delete(a)}},releaseAll(o){let d=`${e}|${o}|`;for(let[c,i]of[...y]){if(!c.startsWith(d))continue;y.delete(c);let n=p(i.path);n!==null&&n.nonce===i.nonce&&g(i.path,{force:!0})}}}}function Q(e,s){let l=e.resolve(s);if(l===null)return{key:{kind:"uc",id:s.toLowerCase()},display:s};let u=e.displayNameOf(l.tip)??e.displayNameOf(l.cid);if(u!==null&&/^uc-\d+$/i.test(u))return{key:{kind:"uc",id:u.toLowerCase()},display:u.toUpperCase()};let f=new Map;for(let[d,c]of e.superseded)typeof c=="string"&&f.set(c,d);let k=l.cid,w=new Set;for(;f.has(k)&&!w.has(k);)w.add(k),k=f.get(k);let o=k.slice(0,12);return{key:{kind:"uc",id:o},display:u??o}}export{L as a,M as b,G as c,H as d,B as e,Q as f};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as l}from"./chunk-MJBCBQC2.js";import{a as p}from"./chunk-RZ4F3BHX.js";import{a as m}from"./chunk-KHJXOFDM.js";import{a as f}from"./chunk-LHDNJJGE.js";import{a as c,c as s,i as a,x as u}from"./chunk-MMPFU2YC.js";var v="/public/skills/kane-cli";function C(){try{let n=new f().getDefaultEnv();if(n in u)return n}catch{}return"prod"}function k(){return`${m(C()).controllerBaseUrl}${v}`}import{readFileSync as S,writeFileSync as E,mkdirSync as g}from"fs";import{join as d}from"path";var h=d(s,"skill-check.json"),y=3600*1e3;function V(){try{let n=JSON.parse(S(h,"utf-8"));if(Date.now()-n.checkedAt<y)return n}catch{}return null}function A(n){try{g(s,{recursive:!0}),E(h,JSON.stringify({map:n,checkedAt:Date.now()}))}catch{}}function I(){for(let{dir:n}of a)try{let t=S(d(n,"VERSION"),"utf-8").trim();if(t)return t}catch{}return null}function M(n,t){let i=Object.keys(n.versions??{});if(i.length===0)return null;let o=i.slice().sort((r,e)=>l(r,e));for(let r of o){let e=n.versions[r]?.kaneCliMinVersion;if(!e||l(t,e)<=0)return r}return null}async function U(){try{let n=V()?.map;if(!n){let o=new AbortController,r=setTimeout(()=>o.abort(),5e3),e=await p(k(),{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(r),!e.ok)return null;n=await e.json(),A(n)}let t=M(n,c);if(!t)return null;let i=I();return i===null?{current:null,latestCompatible:t}:l(i,t)>0?{current:i,latestCompatible:t}:null}catch{return null}}export{k as a,M as b,U as c};
2
+ import{b as l}from"./chunk-322JEJEH.js";import{a as p}from"./chunk-RZ4F3BHX.js";import{a as m}from"./chunk-JRMDGLLT.js";import{a as f}from"./chunk-F6ZOJXYU.js";import{a as c,c as s,i as a,x as u}from"./chunk-C4G7RVJ6.js";var v="/public/skills/kane-cli";function C(){try{let n=new f().getDefaultEnv();if(n in u)return n}catch{}return"prod"}function k(){return`${m(C()).controllerBaseUrl}${v}`}import{readFileSync as S,writeFileSync as E,mkdirSync as g}from"fs";import{join as d}from"path";var h=d(s,"skill-check.json"),y=3600*1e3;function V(){try{let n=JSON.parse(S(h,"utf-8"));if(Date.now()-n.checkedAt<y)return n}catch{}return null}function A(n){try{g(s,{recursive:!0}),E(h,JSON.stringify({map:n,checkedAt:Date.now()}))}catch{}}function I(){for(let{dir:n}of a)try{let t=S(d(n,"VERSION"),"utf-8").trim();if(t)return t}catch{}return null}function M(n,t){let i=Object.keys(n.versions??{});if(i.length===0)return null;let o=i.slice().sort((r,e)=>l(r,e));for(let r of o){let e=n.versions[r]?.kaneCliMinVersion;if(!e||l(t,e)<=0)return r}return null}async function U(){try{let n=V()?.map;if(!n){let o=new AbortController,r=setTimeout(()=>o.abort(),5e3),e=await p(k(),{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(r),!e.ok)return null;n=await e.json(),A(n)}let t=M(n,c);if(!t)return null;let i=I();return i===null?{current:null,latestCompatible:t}:l(i,t)>0?{current:i,latestCompatible:t}:null}catch{return null}}export{k as a,M as b,U as c};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as n}from"./chunk-C4G7RVJ6.js";import{createHash as _}from"crypto";import{existsSync as m,readFileSync as u}from"fs";import{dirname as T,join as f,resolve as o}from"path";import{fileURLToPath as E}from"url";var s=T(E(import.meta.url)),l=2;function p(e,r){let t=_("sha256");return t.update(`kane-assurance-contract
3
+ `),t.update(e),t.update(`
4
+ agent_state_schema=${r}`),"sha256:"+t.digest("hex")}function d(){return[o(s,".."),o(s,"../../..")]}function i(){return"sha256:526e52a085d54094af869b1eac8d0e7360dd3a86181b0d06c43837871050a164"}var a=class extends Error{constructor(t,c){super(`agent/cli contract mismatch (cli ${t||"<unset>"}, agent ${c||"<unset>"}) \u2014 rebuild or reinstall the stale half`);this.expected=t;this.actual=c;this.name="PairMismatchError"}};function I(){return{TESTMUAI_CONTRACT_DIGEST:i(),TESTMUAI_CLIENT_VERSION:process.env.KANE_DEV_FORCE_CLIENT_RELEASE??`kane-cli/${n}`}}export{a,I as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as S}from"./chunk-7MRBMDZ5.js";import{y as o}from"./chunk-MMPFU2YC.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as y,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var k=b(w(),1);var i=b(R(),1);function A(e){let t=e.decisions.filter(r=>r.kind==="replay").length,l=e.decisions.filter(r=>r.kind==="author").length,p=e.outcomes.filter(r=>r.status==="passed").length,d=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.status==="skipped").length,a=o.green,n;e.cancelled||e.overallStatus==="interrupted"?(a=o.orange,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let s=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${p} passed, ${d} failed, ${f} skipped)`,T=`${t} replay \xB7 ${l} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,h=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",h=o.red;else if(!e.shouldCommit)e.isFirstRun?u="\u2013 not committed (first run skipped commit)":e.lockHeld?u="\u2013 not committed":u="\u2013 not committed (readonly fallback / no lock)";else{let r=e.uploadResult?.testcaseId;u=r?`\u2713 pushed (testcase=${r})`:"\u2713 pushed",h=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,g=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",g=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,g=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:T,showRetries:C,retriesText:_,commitText:u,commitColor:h,artifactsText:v,uploadText:m,uploadColor:g}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,l=e.decisions.filter(s=>s.kind==="author").length,p=e.outcomes.filter(s=>s.status==="passed").length,d=e.outcomes.filter(s=>s.status==="failed").length,f=e.outcomes.filter(s=>s.status==="skipped").length,a,n=!1;return e.cancelled?a="cancellation":e.overallStatus==="failed"?a="run_failed":e.shouldCommit&&e.uploadResult?.testcaseId?(a="ok",n=!0):!e.shouldCommit&&!e.lockHeld&&!e.isFirstRun?a="readonly_fallback":a="not_committed",{type:"test_md_summary",overall_status:e.overallStatus,duration_s:e.durationS,steps:{total:e.outcomes.length,passed:p,failed:d,skipped:f,replay_decisions:t,author_decisions:l},retries:{triggered:e.retryTriggered},commit:{committed:n,reason:a,...e.uploadResult?.testcaseId?{testcase_id:e.uploadResult.testcaseId}:{}},artifacts:{replaced:e.shouldReplaceLocalOutput},upload:{performed:e.shouldUploadArtifacts,...e.uploadResult?{succeeded:!!e.uploadResult.success}:{}},...e.shareUrl?{share_url:e.shareUrl}:{},cancelled:e.cancelled,...e.imports&&e.imports.length>0?{imports:e.imports}:{}}}function D({data:e}){let t=A(e),l=[{label:"result",value:(0,i.jsx)(c,{color:t.resultLine.color,bold:!0,children:t.resultLine.text})},{label:"breakdown",value:(0,i.jsx)(c,{color:o.dim,children:t.breakdown})}];return t.showRetries&&l.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),l.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),l.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),l.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:l})}function I({data:e}){let{exit:t}=x();return(0,k.useEffect)(()=>{let l=setTimeout(()=>t(),50);return()=>clearTimeout(l)},[t]),(0,i.jsx)(y,{flexDirection:"column",children:(0,i.jsx)(D,{data:e})})}export{A as a,O as b,D as c,I as d};
2
+ import{a as S}from"./chunk-APAIWBIH.js";import{y as o}from"./chunk-C4G7RVJ6.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as y,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var k=b(w(),1);var i=b(R(),1);function A(e){let t=e.decisions.filter(r=>r.kind==="replay").length,l=e.decisions.filter(r=>r.kind==="author").length,p=e.outcomes.filter(r=>r.status==="passed").length,d=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.status==="skipped").length,a=o.green,n;e.cancelled||e.overallStatus==="interrupted"?(a=o.orange,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let s=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${p} passed, ${d} failed, ${f} skipped)`,T=`${t} replay \xB7 ${l} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,h=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",h=o.red;else if(!e.shouldCommit)e.isFirstRun?u="\u2013 not committed (first run skipped commit)":e.lockHeld?u="\u2013 not committed":u="\u2013 not committed (readonly fallback / no lock)";else{let r=e.uploadResult?.testcaseId;u=r?`\u2713 pushed (testcase=${r})`:"\u2713 pushed",h=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,g=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",g=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,g=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:T,showRetries:C,retriesText:_,commitText:u,commitColor:h,artifactsText:v,uploadText:m,uploadColor:g}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,l=e.decisions.filter(s=>s.kind==="author").length,p=e.outcomes.filter(s=>s.status==="passed").length,d=e.outcomes.filter(s=>s.status==="failed").length,f=e.outcomes.filter(s=>s.status==="skipped").length,a,n=!1;return e.cancelled?a="cancellation":e.overallStatus==="failed"?a="run_failed":e.shouldCommit&&e.uploadResult?.testcaseId?(a="ok",n=!0):!e.shouldCommit&&!e.lockHeld&&!e.isFirstRun?a="readonly_fallback":a="not_committed",{type:"test_md_summary",overall_status:e.overallStatus,duration_s:e.durationS,steps:{total:e.outcomes.length,passed:p,failed:d,skipped:f,replay_decisions:t,author_decisions:l},retries:{triggered:e.retryTriggered},commit:{committed:n,reason:a,...e.uploadResult?.testcaseId?{testcase_id:e.uploadResult.testcaseId}:{}},artifacts:{replaced:e.shouldReplaceLocalOutput},upload:{performed:e.shouldUploadArtifacts,...e.uploadResult?{succeeded:!!e.uploadResult.success}:{}},...e.shareUrl?{share_url:e.shareUrl}:{},cancelled:e.cancelled,...e.imports&&e.imports.length>0?{imports:e.imports}:{}}}function D({data:e}){let t=A(e),l=[{label:"result",value:(0,i.jsx)(c,{color:t.resultLine.color,bold:!0,children:t.resultLine.text})},{label:"breakdown",value:(0,i.jsx)(c,{color:o.dim,children:t.breakdown})}];return t.showRetries&&l.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),l.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),l.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),l.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:l})}function I({data:e}){let{exit:t}=x();return(0,k.useEffect)(()=>{let l=setTimeout(()=>t(),50);return()=>clearTimeout(l)},[t]),(0,i.jsx)(y,{flexDirection:"column",children:(0,i.jsx)(D,{data:e})})}export{A as a,O as b,D as c,I as d};
@@ -0,0 +1,6 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ var p=1;function f(e){return e==="agent"?"ndjson":"human"}function c(){return!!(process.stdin.isTTY&&process.stdout.isTTY)}var d=/^(∷ |· |→ |✓ |✗ |… )/;function a(e){return e===0?"complete":e===2?"refused":e===3?"paused":e===130?"interrupted":"error"}function l(e,n,s={stdout:t=>process.stdout.write(t),stderr:t=>process.stderr.write(t)}){let t=!1,u=r=>{if(e!=="ndjson")return;if(r.type==="done"){if(t)return;t=!0}let{type:i,...o}=r;s.stdout(JSON.stringify({type:i,v:1,verb:n,...o})+`
3
+ `)};return{encoding:e,out:e==="ndjson"?r=>s.stderr(r+`
4
+ `):r=>s.stdout(r+`
5
+ `),progress:e==="ndjson"?()=>{}:r=>s.stderr(r.replace(d,"").replace(/…$/,"")+`
6
+ `),event:u,done:(r,i,o)=>(u({type:"done",status:i??a(r),exit_code:r,...o!==void 0&&o.length>0?{next:o}:{}}),r)}}var g=8*1024;function m(e,n){return e.message==null?null:e.message.trim()?e.resume?Buffer.byteLength(e.message,"utf8")>g?`${n==="extract"?"extract":"design"}: --message is over 8KB \u2014 the agent would silently drop it; shorten the statement`:null:`${n==="extract"?"extract":"design"}: --message only rides a resume \u2014 pair it with --resume <sid> (a fresh run takes its direction from the sources)`:`${n==="extract"?"extract":"design"}: --message is empty \u2014 say what you want the agent to know`}function x(e,n,s){return e.event({type:"error",message:n,...s?{code:s}:{}}),e.done(2,"refused")}function E(e,n,s){return{out:t=>{n()&&s.test(t)||e.out(t)},emit:t=>{n()&&t.type==="error"&&s.test(String(t.message??""))||e.event(t)}}}export{p as a,f as b,c,l as d,g as e,m as f,x as g,E as h};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as f}from"./chunk-XZRIQ3GF.js";import{a as h}from"./chunk-FPFOW6BS.js";import{a as m}from"./chunk-KHJXOFDM.js";var o=class extends Error{constructor(a,l){super(a);this.code=l;this.name="AuthError"}};async function k(c){let{creds:i,env:a,usernameFlag:l,accessKeyFlag:p,log:t}=c,e=null,u=null;if(l&&p)e={username:l,access_key:p},t("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:l});else{let r=i.resolveAuth();r?.method==="basic"&&(e={username:r.username,access_key:r.access_key},t("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:r.username}))}if(!e){let{credentials:r,profile:E}=i.getActiveCredentials();if(!r)throw new o("Not authenticated \u2014 no credentials found","not_authenticated");if(u=r.access_token,r.expires_at-Date.now()/1e3<300)try{let n=await f({creds:i,profile:E,env:a,credentials:r});n&&(u=n.accessToken,t("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(n){let d=n instanceof Error?n.message:String(n);throw t("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:d}),new o(`Token refresh failed: ${d}`,"refresh_failed")}}let v=m(a),b=async()=>u,y=e?{username:e.username,access_key:e.access_key}:null,g=new h(v.controllerBaseUrl,b,y,t),s=await g.resolve();return s&&!e&&(e={username:s.username,access_key:s.access_key},t("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:s.username})),{basicAuth:e,token:u,resolver:g,resolvedCreds:s}}export{o as a,k as b};
2
+ import{a as f}from"./chunk-6HEGD6H2.js";import{a as h}from"./chunk-FPFOW6BS.js";import{a as m}from"./chunk-JRMDGLLT.js";var o=class extends Error{constructor(a,l){super(a);this.code=l;this.name="AuthError"}};async function k(c){let{creds:i,env:a,usernameFlag:l,accessKeyFlag:p,log:t}=c,e=null,u=null;if(l&&p)e={username:l,access_key:p},t("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:l});else{let r=i.resolveAuth();r?.method==="basic"&&(e={username:r.username,access_key:r.access_key},t("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:r.username}))}if(!e){let{credentials:r,profile:E}=i.getActiveCredentials();if(!r)throw new o("Not authenticated \u2014 no credentials found","not_authenticated");if(u=r.access_token,r.expires_at-Date.now()/1e3<300)try{let n=await f({creds:i,profile:E,env:a,credentials:r});n&&(u=n.accessToken,t("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(n){let d=n instanceof Error?n.message:String(n);throw t("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:d}),new o(`Token refresh failed: ${d}`,"refresh_failed")}}let v=m(a),b=async()=>u,y=e?{username:e.username,access_key:e.access_key}:null,g=new h(v.controllerBaseUrl,b,y,t),s=await g.resolve();return s&&!e&&(e={username:s.username,access_key:s.access_key},t("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:s.username})),{basicAuth:e,token:u,resolver:g,resolvedCreds:s}}export{o as a,k as b};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as b,e as c,f as d,g as e,h as f,i as g,j as h,k as i,l as j,m as k,n as l,o as m,p as n,q as o,r as p}from"./chunk-3STZLM5J.js";import"./chunk-L4JIMNKW.js";import{h as a}from"./chunk-M7WQM4UA.js";import"./chunk-WWNSD6FA.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{b as SLUG_RE,c as checkAcyclic,d as checkCardinality,e as citesOf,o as commitNames,n as commitPairMerge,l as commitProposal,p as commitRetire,m as commitReviewFacts,f as criteriaShape,i as mintEventId,j as nextEventIds,a as recordsSince,k as resolveLivingTip,g as validateCriterionOps,h as validateProposal};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-KHJXOFDM.js";import"./chunk-MMPFU2YC.js";import"./chunk-UR6MHSHU.js";export{a as getEnvironment};
2
+ import{a}from"./chunk-JRMDGLLT.js";import"./chunk-C4G7RVJ6.js";import"./chunk-UR6MHSHU.js";export{a as getEnvironment};
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as O}from"./chunk-DYW5C6II.js";import{a as g,b as S,d as G}from"./chunk-QROUKGKU.js";import"./chunk-ZLCZDAEX.js";import{e as w,f as $}from"./chunk-CJJXT5DO.js";import{d as x}from"./chunk-QM4S2APK.js";import{e as k}from"./chunk-EHN5HTUD.js";import"./chunk-CH273NAE.js";import{a as b}from"./chunk-L5LI2JF4.js";import{a as R}from"./chunk-GW5DWAXY.js";import"./chunk-T63R6QT4.js";import"./chunk-3STZLM5J.js";import"./chunk-L4JIMNKW.js";import"./chunk-M7WQM4UA.js";import"./chunk-WWNSD6FA.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";import{basename as h}from"path";import{statSync as A}from"fs";function C(t,e){if(!t)return 1;let o=t.resolve(e);return!o||o.superseded?1:t.getNode(o.tip)?.content.risk==="high"?3:1}function D(t,e){return t.usecases.map(o=>{let s=o.acceptance_criteria??[],a=s.filter(n=>(n.covered_by??[]).length>0),l=s.filter(n=>n.execution==="passed"),i=s.filter(n=>n.execution==="failed"),u=s.filter(n=>n.execution==="blocked"),d=0,m=0;for(let n of s){let f=C(e,n.id);d+=f,n.execution==="passed"&&(m+=f)}let r=d===0?0:Math.round(100*m/d),p=a.length===0?"uncovered":s.length===l.length?"covered":u.length>0&&i.length===0?"blocked":"partial";return{id:o.id,title:o.title,status:p,pct:r,acs:{total:s.length,covered:a.length,passed:l.length,failed:i.length,blocked:u.length},stale:s.filter(n=>n.fresh==="stale").map(n=>n.id)}})}async function P(t){let e=await w(t);return e.length===0?null:e.map(o=>({p:o,m:A(o).mtimeMs})).sort((o,s)=>s.m-o.m)[0].p}var N={covered:"\u2714",partial:"\u25D0",uncovered:"\u2716",blocked:"\u23F8"};function _(t){let e=Math.round(t/10);return"\u2588".repeat(e)+"\u2591".repeat(10-e)}async function I(t,e=G(),o=process.cwd()){if(t.mode!==void 0&&t.mode!=="agent"&&t.mode!=="ci"&&t.mode!=="interactive")return g(e,`--mode must be interactive | agent | ci, got '${t.mode}'`),2;if(t.mode==="agent"||t.mode==="ci"){let{makeHeadlessIO:r,agentRefusal:p}=await import("./headless-io-BL3TEAX5.js"),n=r("ndjson","cover",{stdout:c=>e.out(c.replace(/\n$/,"")),stderr:c=>(e.err??e.out)(c.replace(/\n$/,""))}),f=[],v=[],j={out:c=>f.push(c),err:c=>v.push(c),confirm:async()=>!1,isTTY:!1};if(await I({...t,json:!0,mode:void 0},j,o)!==0)return p(n,v.join("; ")||"cover refused");let y=JSON.parse(f.join(`
3
+ `));return n.event({type:"coverage",...y}),n.done(0,void 0,M(y.completeness??[]))}let s=S(o,e);if(!s)return 2;let a=t.from?await $(t.from,o):await P(o);if(!a)return g(e,t.from?`no evidence pack at '${t.from}'`:"no evidence pack in .testmuai/evidence \u2014 run a test first, or pass --from <pack>"),2;let l=await k(a,"coverage/usecases.yaml");if(l==null)return g(e,`${h(a)} carries no coverage/usecases.yaml \u2014 the pack predates coverage or its project had no .context at seal time`),2;let i=b(l);if(!i||!Array.isArray(i.usecases))return g(e,`${h(a)}: coverage/usecases.yaml is not a usecases document`),2;let u=R(s),d=D(i,u),m=await x(u,"design");if(t.json)return e.out(JSON.stringify({pack:a,depth:d,completeness:m},null,2)),0;e.out(`coverage \u2014 ${h(a)}`),e.out(""),e.out("depth (proven by the pack):");for(let r of d){let p=r.stale.length?` \xB7 ${r.stale.length} stale`:"";e.out(` ${N[r.status]} ${_(r.pct)} ${String(r.pct).padStart(3)}% ${r.id} \u2014 ${r.status} (${r.acs.passed}/${r.acs.total} ACs proven${r.acs.failed?`, ${r.acs.failed} failed`:""}${r.acs.blocked?`, ${r.acs.blocked} blocked`:""})${p}`)}e.out(""),e.out("completeness (live graph):"),m.length===0&&e.out(" no design gaps \u2014 every AC verified, every use-case scenarioed");for(let r of m)e.out(` [${r.risk}] ${r.tag} ${r.ref} \u2014 ${r.why}`),e.out(` \u2192 ${r.ready_command}`);return 0}function M(t){return t.filter(e=>e.ready_command.startsWith("kane-cli ")&&O(e.ready_command)).slice(0,4).map(e=>({cmd:e.ready_command,why:e.why}))}export{I as coverCommand,M as coverNext,D as depthRows};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-LHDNJJGE.js";import"./chunk-MMPFU2YC.js";import"./chunk-UR6MHSHU.js";export{a as CredentialsManager};
2
+ import{a}from"./chunk-F6ZOJXYU.js";import"./chunk-C4G7RVJ6.js";import"./chunk-UR6MHSHU.js";export{a as CredentialsManager};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c}from"./chunk-KVQOBPAZ.js";import"./chunk-AM5S4KG4.js";import"./chunk-BB2W35TW.js";import"./chunk-DNNZ353O.js";import"./chunk-NVGBE2DR.js";import"./chunk-3STZLM5J.js";import"./chunk-L4JIMNKW.js";import"./chunk-M7WQM4UA.js";import"./chunk-WWNSD6FA.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{a as captureForceScope,b as commitDesign,c as designPhaseLadder};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as a,d as b,e as c,f as d,g as e,h as f,i as g,j as h,k as i}from"./chunk-F7WKDMX7.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};
2
+ import{c as a,d as b,e as c,f as d,g as e,h as f,i as g,j as h,k as i}from"./chunk-F7WKDMX7.js";import"./chunk-VOHQA2SP.js";import"./chunk-Q2F5QB2W.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};