@testmuai/kane-cli 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/ChatSurface-I6PFL3OE.js +9 -0
  2. package/dist/{ChromeProfilePicker-PIWZY4WH.js → ChromeProfilePicker-YG7TKHM5.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-URXCHBZ5.js → CliFeedbackPrompt-5RUIP4KA.js} +1 -1
  4. package/dist/CliUploadProgress-YQYPZNEV.js +2 -0
  5. package/dist/{ConfigView-NWNDNTKW.js → ConfigView-HZ7MFCAJ.js} +1 -1
  6. package/dist/EvidenceViewOffer-N4UED7VY.js +2 -0
  7. package/dist/FolderPicker-NAFYP7ES.js +2 -0
  8. package/dist/HelpView-BLWTCQ6T.js +2 -0
  9. package/dist/{InfoBox-FPAWQZGQ.js → InfoBox-7ZZGMYHY.js} +1 -1
  10. package/dist/{LinksBox-O5ZFYSK2.js → LinksBox-63Q5YS5X.js} +1 -1
  11. package/dist/{ProfilesView-SPECXHZE.js → ProfilesView-AVYB43ES.js} +1 -1
  12. package/dist/{ProjectPicker-ANJ6NGNY.js → ProjectPicker-EINNALUG.js} +1 -1
  13. package/dist/{SaveSessionPrompt-W2GWELOP.js → SaveSessionPrompt-C3LCI2KZ.js} +1 -1
  14. package/dist/ScrollbackTap-Q3IOKNMS.js +2 -0
  15. package/dist/SingleShotApp-PS42WWT7.js +2 -0
  16. package/dist/{SummaryBox-DJUDYML7.js → SummaryBox-NRPQ2AMW.js} +1 -1
  17. package/dist/TestMdRunView-5FVCEQZI.js +2 -0
  18. package/dist/{WhoamiView-DH25ZD4C.js → WhoamiView-YLMIEJQN.js} +1 -1
  19. package/dist/archive-committer-3NI773TP.js +2 -0
  20. package/dist/bind-QYQ5IT4S.js +6 -0
  21. package/dist/bridge-QENVIWWC.js +2 -0
  22. package/dist/{changelog-RCKUVBFL.js → changelog-4RSI7UIO.js} +1 -1
  23. package/dist/chat-committer-RTJCKQMM.js +2 -0
  24. package/dist/chat-controller-OTBYHB4Y.js +3 -0
  25. package/dist/chunk-22A2ECA2.js +2 -0
  26. package/dist/{chunk-6E5UYAEB.js → chunk-25YSMNUP.js} +1 -1
  27. package/dist/{chunk-R5RHRG65.js → chunk-3SK5GXQM.js} +1 -1
  28. package/dist/chunk-427OQS2N.js +2 -0
  29. package/dist/chunk-5446YVGQ.js +4 -0
  30. package/dist/chunk-5ILXUQIX.js +2 -0
  31. package/dist/chunk-5Q46BEG7.js +2 -0
  32. package/dist/chunk-5U3GOEGG.js +7 -0
  33. package/dist/chunk-5Y2G4NC7.js +2 -0
  34. package/dist/{chunk-I4B2KY4X.js → chunk-6BQD2BXI.js} +1 -1
  35. package/dist/chunk-6PS65QFF.js +2 -0
  36. package/dist/chunk-ABSEKYIB.js +13 -0
  37. package/dist/chunk-AD46OCZ4.js +4 -0
  38. package/dist/chunk-AE6SS34N.js +4 -0
  39. package/dist/chunk-B2OAEEKI.js +14 -0
  40. package/dist/chunk-B2PZAB7J.js +4 -0
  41. package/dist/chunk-BC7UVJJB.js +2 -0
  42. package/dist/{chunk-T4PKTWZ6.js → chunk-BV3EARZO.js} +1 -1
  43. package/dist/{chunk-7IBNOVML.js → chunk-C5NNT7Y3.js} +1 -1
  44. package/dist/{chunk-NLIOFVMP.js → chunk-CBIW5DTU.js} +1 -1
  45. package/dist/chunk-CE664P73.js +2 -0
  46. package/dist/{chunk-GEAWRRR7.js → chunk-D5SHVZGD.js} +1 -1
  47. package/dist/chunk-D5T4ARTB.js +2 -0
  48. package/dist/chunk-DFS4RMVP.js +2 -0
  49. package/dist/chunk-DM2GL24Z.js +3 -0
  50. package/dist/chunk-FAXRERS6.js +6 -0
  51. package/dist/{chunk-QO6PAA7Q.js → chunk-FPGOV4AQ.js} +2 -2
  52. package/dist/chunk-FXPPQL4D.js +6 -0
  53. package/dist/chunk-FYOCF7DY.js +2 -0
  54. package/dist/chunk-GIGD4M7V.js +5 -0
  55. package/dist/chunk-GIRXJOJI.js +2 -0
  56. package/dist/{chunk-TPG2T5GH.js → chunk-GNGGFK7C.js} +1 -1
  57. package/dist/{chunk-THEZSXZM.js → chunk-H7ZQ4AWL.js} +1 -1
  58. package/dist/{chunk-TJWU7DOO.js → chunk-HYW5VDEC.js} +1 -1
  59. package/dist/chunk-I2S6KNZW.js +2 -0
  60. package/dist/chunk-IACKIGPX.js +2 -0
  61. package/dist/chunk-IF2R3AR4.js +6 -0
  62. package/dist/{chunk-UOGJUJCF.js → chunk-INP7FG6V.js} +1 -1
  63. package/dist/{chunk-C4LYBQT3.js → chunk-IPCC3P6T.js} +2 -2
  64. package/dist/chunk-JFAFKHDX.js +4 -0
  65. package/dist/chunk-KHDUQ33H.js +2 -0
  66. package/dist/chunk-KHU7C6EE.js +2 -0
  67. package/dist/chunk-LBBPMEO2.js +2 -0
  68. package/dist/chunk-LKXVYWKG.js +356 -0
  69. package/dist/chunk-LMJTY32X.js +6 -0
  70. package/dist/chunk-M5JQXOCE.js +12 -0
  71. package/dist/chunk-ME3GYVBV.js +2 -0
  72. package/dist/{chunk-7AEC572G.js → chunk-MESFNOY3.js} +1 -1
  73. package/dist/{chunk-HFXQU7UZ.js → chunk-MKD3KZPM.js} +1 -1
  74. package/dist/{chunk-LOQV5GME.js → chunk-MQ7DJ2XC.js} +1 -1
  75. package/dist/{chunk-YSIYPC4R.js → chunk-N2BUF6YU.js} +1 -1
  76. package/dist/chunk-NNZV5RCE.js +2 -0
  77. package/dist/{chunk-HZ46P2GR.js → chunk-NOOHQBUD.js} +1 -1
  78. package/dist/chunk-NTJDMMLC.js +61 -0
  79. package/dist/chunk-NWZTYAJB.js +9 -0
  80. package/dist/{chunk-IECUFWIZ.js → chunk-OXARXMMD.js} +1 -1
  81. package/dist/{chunk-ELBPBHTE.js → chunk-PGEMGGBS.js} +2 -2
  82. package/dist/{chunk-4IOOBSNB.js → chunk-QI6WZ56Y.js} +1 -1
  83. package/dist/{chunk-ZWAZ4QU4.js → chunk-QK6KZMYG.js} +1 -1
  84. package/dist/chunk-QPZRHAYK.js +4 -0
  85. package/dist/{chunk-3FN66LTP.js → chunk-RFHMDQXZ.js} +1 -1
  86. package/dist/chunk-RGEAEAZB.js +20 -0
  87. package/dist/chunk-RKWJG3WW.js +19 -0
  88. package/dist/chunk-RTWWPEQ7.js +8 -0
  89. package/dist/chunk-TZVURR5H.js +5 -0
  90. package/dist/chunk-VJUIW2ES.js +4 -0
  91. package/dist/chunk-VK7RF53I.js +2 -0
  92. package/dist/{chunk-XDERMCAU.js → chunk-VXS23M67.js} +1 -1
  93. package/dist/{chunk-IU53F4ZV.js → chunk-WFAMF4SG.js} +1 -1
  94. package/dist/chunk-WFSQZG26.js +11 -0
  95. package/dist/chunk-WG3BBXJF.js +7 -0
  96. package/dist/chunk-WUMNIGPR.js +2 -0
  97. package/dist/{chunk-AFCEFOIK.js → chunk-WUNN5OCH.js} +1 -1
  98. package/dist/{chunk-PISZLYS5.js → chunk-XQDDUVD3.js} +1 -1
  99. package/dist/{chunk-DTM4ZMMJ.js → chunk-Y2S3PW7N.js} +1 -1
  100. package/dist/chunk-YANCBRER.js +3 -0
  101. package/dist/{chunk-AM5WZPPY.js → chunk-YWWKKKXY.js} +1 -1
  102. package/dist/chunk-Z56AWGVY.js +2 -0
  103. package/dist/chunk-ZKYYZ5NO.js +6 -0
  104. package/dist/{chunk-PTP3WS3N.js → chunk-ZO7ROBPR.js} +1 -1
  105. package/dist/chunk-ZXDA4K6G.js +2 -0
  106. package/dist/chunk-ZZOSDBYN.js +23 -0
  107. package/dist/cover-cmd-Y5L4O4Q3.js +2 -0
  108. package/dist/{credentials-52QRPGET.js → credentials-WUEKK7FI.js} +1 -1
  109. package/dist/descriptor-SL5A7RQE.js +2 -0
  110. package/dist/distill-cmd-EYCCCFL3.js +2 -0
  111. package/dist/evidence-4BSNTVND.js +2 -0
  112. package/dist/evolve-cmd-VUWLH3CO.js +2 -0
  113. package/dist/{exit-manager-IUHAXFJ6.js → exit-manager-VCSIUYBR.js} +1 -1
  114. package/dist/explain-JIXUWEFJ.js +2 -0
  115. package/dist/explain-cmd-55WRDIMW.js +9 -0
  116. package/dist/explain-cmd-RIDEMDMY.js +3 -0
  117. package/dist/extract-bind-T7SUAID6.js +5 -0
  118. package/dist/extract-cmd-LZW7CRT3.js +6 -0
  119. package/dist/gaps-cmd-P2DRK6FW.js +2 -0
  120. package/dist/gate-FACZRGOC.js +2 -0
  121. package/dist/{generate-headless-WG6ZPINI.js → generate-headless-C55T3GGR.js} +2 -2
  122. package/dist/headless-io-GXHKDPHB.js +2 -0
  123. package/dist/index.js +55 -54
  124. package/dist/ingest-4CGBXC2L.js +2 -0
  125. package/dist/ingest-cmd-FJ3SLTT4.js +3 -0
  126. package/dist/interactive-bind-P6AGLUMM.js +7 -0
  127. package/dist/interrupt-guard-UREUWNRL.js +2 -0
  128. package/dist/lifecycle-cmd-56OZT4LY.js +2 -0
  129. package/dist/list-cmd-JB2ABACD.js +3 -0
  130. package/dist/list-commands-M34USUNO.js +2 -0
  131. package/dist/logical-ids-QRRUXV5E.js +2 -0
  132. package/dist/login-flow-GMLHK6JT.js +2 -0
  133. package/dist/maintenance-cmd-E3HEEVQW.js +2 -0
  134. package/dist/open-MQLQKFAW.js +2 -0
  135. package/dist/{persist-recorded-session-XKPZX7HW.js → persist-recorded-session-L2KAY37H.js} +1 -1
  136. package/dist/pipeline-FJXQIFW7.js +2 -0
  137. package/dist/readmodel-MPTENJ2R.js +2 -0
  138. package/dist/reconcile-cmd-KTCH4KZQ.js +8 -0
  139. package/dist/{recording-banner-2TNKQHP2.js → recording-banner-2KIVZAXY.js} +1 -1
  140. package/dist/{require-project-folder-SJG5FQY6.js → require-project-folder-NOGEHZTS.js} +1 -1
  141. package/dist/revert-3TKLOYQA.js +2 -0
  142. package/dist/review-cmd-SL52N4TM.js +4 -0
  143. package/dist/run-P4CHG2VH.js +2 -0
  144. package/dist/run-test-md-ICLG4OPX.js +17 -0
  145. package/dist/{scrollback-6GINSTL2.js → scrollback-JLPJR25X.js} +1 -1
  146. package/dist/sessions-cmd-STHKGDX4.js +23 -0
  147. package/dist/signals-cmd-LXHZQLXZ.js +2 -0
  148. package/dist/{skill-installer-M6AREQQW.js → skill-installer-KGPXQRCE.js} +1 -1
  149. package/dist/spawner-DDD3ICOX.js +2 -0
  150. package/dist/tcg-generate-KBXZIIHB.js +2 -0
  151. package/dist/testmd-actions-45BY3YFO.js +2 -0
  152. package/dist/token-refresh-OCFALJ7U.js +2 -0
  153. package/dist/turn-preflight-I5SM4UIZ.js +2 -0
  154. package/dist/ui-JEJGTURD.js +4 -0
  155. package/dist/{validate-basic-FO7C2URG.js → validate-basic-QCD4VN37.js} +1 -1
  156. package/dist/{version-check-PHZX5WS7.js → version-check-55YZMQUI.js} +1 -1
  157. package/dist/view-cmd-QE2FS3GB.js +436 -0
  158. package/package.json +6 -6
  159. package/dist/CliUploadProgress-DMH3C3UZ.js +0 -2
  160. package/dist/EvidenceViewOffer-HEBQ7C4H.js +0 -2
  161. package/dist/FolderPicker-5S23OTSY.js +0 -2
  162. package/dist/HelpView-YYKTP4JH.js +0 -2
  163. package/dist/SingleShotApp-5TYM356H.js +0 -2
  164. package/dist/TestMdRunView-BIVXQE54.js +0 -2
  165. package/dist/chunk-54TKNWXF.js +0 -5
  166. package/dist/chunk-5MTRNUAK.js +0 -2
  167. package/dist/chunk-7KDNH6JP.js +0 -10
  168. package/dist/chunk-7YRNLGUT.js +0 -11
  169. package/dist/chunk-C6S4IEBC.js +0 -2
  170. package/dist/chunk-DJL47DYJ.js +0 -8
  171. package/dist/chunk-H6QJ4YU7.js +0 -2
  172. package/dist/chunk-J75KVNX5.js +0 -18
  173. package/dist/chunk-MUPHP5W6.js +0 -27
  174. package/dist/chunk-NAYAVVTP.js +0 -6
  175. package/dist/chunk-P5XBCJYQ.js +0 -7
  176. package/dist/chunk-Q2I65L2W.js +0 -6
  177. package/dist/chunk-QCEWUUE6.js +0 -55
  178. package/dist/chunk-V2GYBVSM.js +0 -2
  179. package/dist/chunk-Y44AETOW.js +0 -2
  180. package/dist/chunk-YCNCW4O4.js +0 -8
  181. package/dist/evidence-O4AON5FU.js +0 -2
  182. package/dist/list-commands-VJAL4J3O.js +0 -2
  183. package/dist/login-flow-VZ2MITFA.js +0 -2
  184. package/dist/pipeline-CADTHPDV.js +0 -2
  185. package/dist/run-test-md-INJKPE2I.js +0 -13
  186. package/dist/tcg-generate-VKFXR5JT.js +0 -2
  187. package/dist/testmd-actions-4QLHD74A.js +0 -2
  188. package/dist/token-refresh-2HKIYD4Y.js +0 -2
@@ -1,5 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as F,b as z,c as ne,d as P}from"./chunk-2YQ6TW77.js";import{l as U}from"./chunk-DJL47DYJ.js";import{a as D}from"./chunk-WAOCHXJ5.js";import{a as j}from"./chunk-2WVKOZ6W.js";import{a as C}from"./chunk-NLCCBXXV.js";import{a as O}from"./chunk-RZ4F3BHX.js";import{e as te}from"./chunk-UR6MHSHU.js";import{readFileSync as Z,existsSync as w,readdirSync as Ee,mkdirSync as T,writeFileSync as x}from"fs";import{readFile as ee,unlink as be}from"fs/promises";import{join as E}from"path";import{randomUUID as A}from"crypto";function V(t){return t?t.includes(`
3
- `)?t.split(`
4
- `).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function L(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(s,n)=>{let o=e[n];return o?o.value:s}).replace(/\$\{(.+?)\}/g,(s,n)=>{let o=e[n];return o?o.value:s})}var ie={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD"},q={literal:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},se=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD","VISION_QUERY","DRAG_DROP","SELECT"]);function $(t,e){if(t==="analyze"){let n=e?.action_params?.analyzer_type??"";return q[n]}let s=ie[t];return s||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),s??t.toUpperCase()}function K(t,e){if(!t||!e)return"";try{let s=new Date(t);return isNaN(s.getTime())?"":new Date(s.getTime()+e).toISOString()}catch{return""}}function G(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function oe(t){let e=t.output_variable??"";if(!e)return"[]";let n={...G(t)};return delete n.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||A().replace(/-/g,"").slice(0,8),value:n,variable_description:"API Response"}])}function re(t,e,s){let n=t.action_params??{},o=se.has(e)?"Vision Agent":"Operation Agent",l={operation_type:e};e==="OPEN"&&(l.url=n.url??""),e==="SET_VARIABLE"&&(l.variable_name=t.output_variable??n.key??"",l.variable_value=t.output_value??"");let i={},r={},a=t.action_instruction??"",u=n.text??"",d=n.url??"",g=[["intent",a],["value",u],["url",d]];for(let[h,m]of Object.entries(s)){let b=String(m);if(h.startsWith("secrets."))for(let[I,v]of g)v.includes(b)&&(r[I]=h);for(let[I,v]of g)v.includes(b)&&!(I in i)&&(i[I]=v)}let _=t.action_type,c={operation:t.action_instruction??"",agent:o,operation_dict:l,reasoning:_==="analyze"?n.query??"":t.intent??t.action_instruction??"",variable:i,secrets:r,params:{}};_==="analyze"&&typeof n.code=="string"&&n.code&&(c.code=n.code),_==="analyze"&&typeof n.code_js=="string"&&n.code_js&&(c.code_js=n.code_js),n.uses_websocket===!0&&(c.uses_websocket=!0),n.uses_sse===!0&&(c.uses_sse=!0),_==="analyze"&&n.analyzer_type==="textual_visual"&&(typeof n.wrapped_js=="string"&&(c.wrapped_js=n.wrapped_js),Array.isArray(n.locators)&&(c.locators=n.locators),typeof n.operator=="string"&&(c.operator=n.operator),Array.isArray(n.transforms)&&(c.transforms=n.transforms),typeof n.query=="string"&&(c.query=n.query),typeof n.expected_value=="string"&&(c.expected_value=n.expected_value),typeof n.needs_unit_conversion=="boolean"&&(c.needs_unit_conversion=n.needs_unit_conversion));let f={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[_];return f&&n[f]!==void 0&&(c[f]=n[f]),_==="set_clipboard"&&typeof n.html=="string"&&n.html&&(c.html=n.html),c}function ae(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let s=e.sub_results??[];return s.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?s.some(o=>o.passed===!0):s.every(o=>o.passed===!0)}function X(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function le(t){let e=t.assertion_tree??{},s=e.sub_results??[],n=X(s);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:s,sub_checks:n,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function ce(t){let s=(t.action_params??{}).assertion_tree??{},n=s.sub_results??[],o=X(n);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:n,sub_checks:o,composite_operator:s.composite_operator??"and",verification:"",claim:s.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function ue(t,e,s,n){let o=t.visual_data;if(!o||o.x==null||o.y==null)return null;let l=e?`${e}/test_screenshots`:"";return{x:o.x,y:o.y,confidence:0,bbox:o.bbox??null,bbox_source:o.bbox?"accessibility_tree":"fallback",viewport_width:o.viewport_width??1280,viewport_height:o.viewport_height??800,scale_factor:null,raw_image_url:l?`${l}/untagged_screenshot/${s}.${n?.get(s)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function M(t,e={},s="",n){let o=t.action_type,l=$(o,t),i=t.action_params??{},r=t.coordinates??null,a=t.selectors??null,u=!!(a&&a.length>0),d=t.timestamp??"",g=t.duration_ms??0,_=t.variables_used??{},c=t.action_id??A(),p=A(),f=K(d,g),h="",m="";o==="navigate"?(m=i.url??"",h=m):o==="type"||o==="fill"?h=i.text??"":o==="press_key"?h=i.key??"":o==="wait"?h=String(i.ms??i.timeout_ms??""):o==="evaluate_js"?h=i.script??"":o==="analyze"&&(i.analyzer_type??"")==="literal"&&(h=t.output_value??"");let b="";o==="go_back"?b="back":o==="go_forward"&&(b="forward");let I=L(h,e),v=L(m,e),k=L(t.action_instruction??"",e),y=re(t,l,_);return{operation_id:c,instruction_id:p,instruction:k,intent:k,operation_start:d,operation_end:f,status:t.status??"",command:l,name:"",target:"",value:I,message:"",operation_dict:"",frame:t.frame_info?JSON.stringify(t.frame_info):"",error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(y),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:s?`${s}/test_screenshots/untagged_screenshot/${c}.${n?.get(c)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:v,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:l==="ASSERTION"?ae(i):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(i.tab_index??""),tab_identifier:String(i.tab_identifier??""),scroll_value:i.amount??1,scroll_direction:i.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:o==="evaluate_js"?i.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:!1,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:r!==null&&!u,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:u?null:r?.x??null,y_coord:u?null:r?.y??null,target_x_coord:i.target_x??null,target_y_coord:i.target_y??null,source_description:i.source_description??null,target_description:i.target_description??null,use_coordinates:r!==null&&!u,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:u?a.map(R=>({type:R.isXPath?"xpath":"css",...R})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:l==="ASSERTION"?le(i):i.expression_tree??{},assertion_tree:i.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:l==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:i.source_coordinates?{x:i.source_coordinates[0],y:i.source_coordinates[1]}:{},end_coordinates:i.target_coordinates?{x:i.target_coordinates[0],y:i.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:o==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:o==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:ue(t,s,c,n),reasoning:o==="analyze"?i.query??"":t.intent??t.action_instruction??""}}function B(t,e,s={}){let n=t.action_type,o=$(n,t),l=t.timestamp??"",i=t.duration_ms??0,r=K(l,i),a=o==="ASSERTION"||o==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:a?"non_driver_action":"driver_action",module_id:"",instruction:L(t.action_instruction??"",s),command:o,error:null,parent_instruction_id:"",classification_layer_resp:o==="ASSERTION"?ce(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:l,end_timestamp:r,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:n==="api"?"api":n==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":n==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:n==="evaluate_js"?t.action_params?.script??"":"",user_variables:n==="api"?oe(t):"[]",api_data:n==="api"?{request:t.action_params?.api_data?.request??{},response:G(t)}:{},params_used:!1,hard_assertion:o==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:n==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function de(t,e=[]){let s=t.action_params??{},n=s.branches??[],o=s.winning_index??-1,l=s.sub_results??[],i={};for(let a of l){let u=a.sub_results;if(u)for(let d of u){let g=d.store_key;g&&(i[g]=d)}}let r=n.map((a,u)=>{let d=u===o,g=(a.sub_checks??[]).map(_=>{let c=i[_.store_key];return{description:_.description,store_key:_.store_key,expected_value:_.expected_value,stored_value:c?.extracted_value??_.stored_value,operator:_.operator??c?.operator??"equals",transforms:_.transforms??c?.transforms??[]}});if(g.length===0&&a.condition&&l.length>0){let c=l.find(p=>p.branch_index===u)?.sub_results??[];c.length>0&&(g=c.map(p=>({description:p.description??a.condition,store_key:p.store_key??"",expected_value:p.expected??"true",stored_value:p.extracted_value??void 0,operator:p.operator??"equals",transforms:p.transforms??[]})))}return{branch_index:u,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:d,sub_objective:null,custom_event:a.custom_event??null,children:d?e:[],sub_checks:a.condition?g:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${A().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:o,branches:r,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function Y(t,e,s){for(let n of t)n.content_type==="instruction"&&"generative_id"in n&&(n.generative_id=e,n.generative_objective=s)}function N(t,e={},s="",n,o){let l=[],i=0;for(;i<t.length;){let r=t[i],a=r.action_type;if(!o?.keepFailedActions&&r.status==="error"&&a!=="assert"&&a!=="if_else"&&a!=="child_agent_start"&&a!=="child_agent_end"&&!(r.until_condition&&!r.error)){i+=1;continue}if(a==="analyze"&&!q[r.action_params?.analyzer_type??""]){i+=1;continue}if(a==="child_agent_start"){let u=r.action_params?.child_id??"",d=r.action_params?.objective??"",g=[];i+=1;let _=1,c="error",p;for(;i<t.length&&_>0;){let y=t[i],R=y.action_type;if(R==="child_agent_start")_+=1;else if(R==="child_agent_end"&&(_-=1,_===0)){c=y.status??"success",p=y,i+=1;break}_>0&&g.push(y),i+=1}let f=N(g,e,s,n);Y(f,u,d);let h=p?.action_params?.result_code??null,m=p?.action_params?.reason_code??null,b=p?.action_params?.error_message??null,I=p?.action_params?.summary??null,v=p?.action_params?.one_liner??null,k=c==="error";l.push({content_type:"generative_block",instruction_id:`generative_block_${u}`,generative_id:u,objective:d,status:c,children:f,error_message:k?b??null:null,error_code:k?m??null:null,result_code:h??null,bifurcation_context:[],approach_reason:V(I),one_liner:v??null});continue}else if(a==="child_agent_end"){i+=1;continue}else if(a==="if_else"){i+=1;let u=[];for(;i<t.length&&t[i].action_type==="child_agent_start";){let d=t[i],g=d.action_params?.child_id??"",_=d.action_params?.objective??"",c=[];i+=1;let p=1,f="error";for(;i<t.length&&p>0;){let m=t[i];if(m.action_type==="child_agent_start")p+=1;else if(m.action_type==="child_agent_end"&&(p-=1,p===0)){f=m.status??"success",i+=1;break}p>0&&c.push(m),i+=1}let h=N(c,e,s,n);u.push(...h)}l.push(de(r,u));continue}else if(a==="query_tool"){i+=1;continue}else if(r.until_condition){let u=M(r,e,s,n),d=B(r,u,e),g=typeof r.until_condition_met=="boolean"?r.until_condition_met:r.status==="success";l.push({content_type:"until_block",instruction_id:`until_${A().slice(0,8)}`,condition:r.until_condition,max_retries:r.until_max_retries??10,settle_ms:r.until_settle_ms??500,current_count:0,condition_met:g,children:[d],generative_id:"",generative_objective:"",variables_used:{},status:r.status??"success"})}else{let u=M(r,e,s,n),d=B(r,u,e);l.push(d)}i+=1}return l}function S(t,e={},s="",n,o){let l=[];for(let i of t){let r=N(i.records,e,s,n,o);if(r.length===0)continue;let a=A().replace(/-/g,"");Y(r,a,i.objective);let u=r.some(c=>"status"in c&&typeof c.status=="string"?c.status==="error"||c.status==="failed":!1),d=i.resultCode?parseInt(i.resultCode,10):null,g=d!==null&&!isNaN(d)&&d>=200,_=u||g?"error":"success";l.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:i.objective,status:_,children:r,error_message:_==="error"?i.errorMessage??null:null,error_code:_==="error"?i.reasonCode??null:null,result_code:i.resultCode??null,bifurcation_context:[],approach_reason:V(i.summary),one_liner:i.oneLiner??null})}return{instructions:l}}var H=te(ne(),1);import{createWriteStream as _e}from"fs";import{readFile as pe}from"fs/promises";import{join as ge,basename as fe}from"path";import{tmpdir as he}from"os";var me=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function W(t){let e=ge(he(),`${fe(t)}_artifacts.zip`);return new Promise((s,n)=>{let o=_e(e),l=(0,H.default)("zip",{zlib:{level:6}});o.on("close",()=>s(e)),l.on("error",n),l.pipe(o),l.glob("**/*",{cwd:t,ignore:me}),l.finalize()})}async function J(t){return pe(t)}async function Ie(t,e){return ee(U(t,e))}function ve(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var Q=class{config;controller;testId;constructor(e){this.config=e,this.controller=new D(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,s,n,o){this.config.log?.(e,s,n,o)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let s=this.config.evidence,n=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let r=this.collectNdjsonPerRun(),a=r.reduce((f,h)=>f+h.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:r.length});let u=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(u)});let{instructions:d}=r.length>0?S(r,u,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:d.length});let g=this.buildExecutionEnvelope(d),_=Buffer.from(JSON.stringify(g));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(_.length/1024).toFixed(1)});let c=E(this.config.sessionDir,"execution.json");x(c,JSON.stringify(g,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:c});let p=s?.packTestDir??this.config.evidenceRead?.packTestDir;if(p){let f=E(p,"auteur");T(f,{recursive:!0}),x(E(f,"execution.json"),JSON.stringify(g,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(f,"execution.json")})}if(e("convert","done"),s)n=_;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let f=null,h;try{f=await W(this.config.sessionDir),h=await J(f),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(h.length/1024/1024).toFixed(1),path:f}),e("zip","done",`${(h.length/1024/1024).toFixed(1)}MB`)}finally{f&&await be(f).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let m=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:m.urls.artifacts?.blob_url,blob_url:m.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(h.length/1024/1024).toFixed(1),blob_size_kb:+(_.length/1024).toFixed(1)}),await Promise.all([P(m.urls.artifacts.upload_url,h,"application/zip"),P(m.urls.blob.upload_url,_,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let r=this.collectNdjsonPerRun(),a=this.config.variables??{},{instructions:u}=r.length>0?S(r,a,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},d=this.buildExecutionEnvelope(u),g=E(this.config.sessionDir,"execution.json");x(g,JSON.stringify(d,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:g});let _=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(_){let c=E(_,"auteur");T(c,{recursive:!0});let p=this.readAuthoredExecution();x(E(c,"execution.json"),p??JSON.stringify(d,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(c,"execution.json"),source:p?"authored":"run_envelope"})}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(r){let a=r instanceof Error?r.message:String(r);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),e("atomic_replace","failed",a),r}}else e("atomic_replace","skipped");let o,l;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let r=await this.config.onCommitLock();if(r.ok)o=r.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:o??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:r.reason,message:r.message}),e("commit_lock","failed",`${r.reason??"unknown"}: ${r.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${r.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let r=new j(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(o=(await r.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:o??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(o)}catch(d){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(d)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(o&&this.config.shareApiBaseUrl)try{l=await this.generateShareLink(o),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:l})}catch(r){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(r)})}if(s&&n){let r=null;e("zip","running");try{await s.sealFn({testcaseId:o,shareId:l}),r=s.sealedPackPath?await ee(s.sealedPackPath):await Ie(s.executionId,s.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:s.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(r.length/1024/1024).toFixed(1)})}catch(a){let u=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:s.executionId,error:u})}if(r){e("zip","done",`${(r.length/1024/1024).toFixed(1)}MB`),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[ve(s.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(r.length/1024/1024).toFixed(1),blob_size_kb:+(n.length/1024).toFixed(1)}),await Promise.all([P(a.urls.artifacts.upload_url,r,"application/zip"),P(a.urls.blob.upload_url,n,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(n.length/1024).toFixed(1)}),await P(a.urls.blob.upload_url,n,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let i;if(this.config.codeExport?.enabled&&o){let r=!1;try{await this.triggerCodeExport(o),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),r=!0}catch(a){let u=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:u}),e("code_export","failed",`trigger failed: ${u}`)}if(r){e("code_export","running","Waiting for code generation\u2026");try{i=await this.pollAndDownloadCode(o,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:i}),e("code_export","done",i)}catch(a){let u=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:u}),e("code_export","failed",u)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:o,shareId:l,codeExportDir:i}}catch(s){return{success:!1,testId:this.testId,error:s instanceof Error?s.message:String(s)}}}async runCodeExport(e,s){let n=s??this.config.onProgress,o=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),o=!0}catch(l){let i=l instanceof Error?l.message:String(l);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:i}),n("code_export","failed",`trigger failed: ${i}`)}if(o){n("code_export","running","Waiting for code generation\u2026");try{let l=await this.pollAndDownloadCode(e,n);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:l}),n("code_export","done",l),l}catch(l){let i=l instanceof Error?l.message:String(l);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:i}),n("code_export","failed",i);return}}}collectNdjsonPerRun(){let e=[],s=this.config.runObjectives??[],n=this.config.runMetadata??[],o=this.config.evidence??this.config.evidenceRead;for(let l=0;l<this.config.runDirs.length;l++){let i=this.config.runDirs[l],r=s[l]||this.config.firstObjective,a=n[l],u=o?this.readNdjsonFromFile(E(o.packTestDir,"logs",`${o.runIndices?.[l]??l}-actions.ndjson`)):this.readNdjsonFromDir(i);u.length>0&&e.push({objective:r,records:u,resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}if(e.length===0){let l=E(this.config.sessionDir,"runs");if(w(l))try{let r=Ee(l,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of r){let u=E(l,a),d=this.readNdjsonFromDir(u);d.length>0&&e.push({objective:this.config.firstObjective,records:d})}}catch{}}return e}readNdjsonFromDir(e){let s=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let n of s)if(w(n))return this.readNdjsonFromFile(n);return[]}readNdjsonFromFile(e){let s=[];if(!w(e))return s;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let n=Z(e,"utf-8");for(let o of n.split(`
5
- `)){let l=o.trim();if(l)try{s.push(JSON.parse(l))}catch{}}return s}async generateShareLink(e){let s=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:s,testcase_id:e});let n={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},o=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:o,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let l=o?await this.config.authResolver.fetch(s,n):await O(s,{...n,headers:{...n.headers,Authorization:this.buildAuthHeader()}});if(!l.ok)throw new Error(`Share link API failed: ${l.status} ${await l.text()}`);let i=await l.json();if(!i.shareId)throw new Error("Share link API returned no shareId");return i.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:s,body:n}=F({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:s});let o={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(n)},l=this.config.authResolver?await this.config.authResolver.fetch(s,o):await O(s,{...o,headers:{...o.headers,Authorization:this.buildAuthHeader()}});if(!l.ok)throw new Error(`Code export failed: ${l.status} ${await l.text()}`)}async pollAndDownloadCode(e,s){let n=z({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),o=this.config.exitTimeoutMs??3e5,l=5e3,i=Date.now()+o;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:n,timeout_ms:o});let r=(a,u)=>this.config.authResolver?this.config.authResolver.fetch(a,u):O(a,{...u,headers:{...u?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<i;){let a=await r(n,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let c=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:c.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let d=(await a.json()).data?.find(c=>c.code_name==="kane-cli-trigger");if(!d){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),s("code_export","running","Waiting for code generation\u2026"),await this.sleep(l);continue}let g=d.status.toLowerCase();if(g==="in progress"||g==="in_progress"||g==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:d.status}),s("code_export","running","Generating code\u2026"),await this.sleep(l);continue}if(!d.url||d.url.length===0)throw new Error(`Code export status=${d.status} but no files returned`);let _=this.config.codeExportDir??E(this.config.sessionDir,"code-export");T(_,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:d.url.length,dir:_}),s("code_export","running",`Downloading ${d.url.length} files\u2026`);for(let c of d.url){let p=E(_,c.file_name),f=await O(c.file_url);if(!f.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:c.file_name,status:f.status});continue}let h=await f.text();x(p,h,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:c.file_name,size_bytes:h.length})}return _}throw new Error("Code export timed out")}sleep(e){return new Promise(s=>setTimeout(s,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:C(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let s=Z(e,"utf8");return JSON.parse(s),s}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let s=this.config.runStatuses.every(i=>i==="passed")?"success":"error",n=this.config.variableIds??{},o=[];if(this.config.variables)for(let[i,r]of Object.entries(this.config.variables)){if(r.secret)continue;let a=i.startsWith("global.")?i.slice(7):i;o.push({id:n[a]??0,name:a,value:r.value,session_value:r.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let l=[];for(let i of this.collectNdjsonPerRun())for(let r of i.records)r.output_variable&&r.output_value!=null&&l.push({name:r.output_variable,value:String(r.output_value),value_type:"test_level",variable_description:"ANALYZE result"});return{test_id:this.testId,version:"v4",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:s,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:[],test_params:[],test_level_variables:JSON.stringify(l),test_global_variables:o,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{Ie as a,ve as b,Q as c};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as K,c as V,d as z,e as ee,f as te}from"./chunk-7YRNLGUT.js";import{c as J}from"./chunk-T4PKTWZ6.js";import{a as Q}from"./chunk-YCNCW4O4.js";import{a as Z}from"./chunk-FPFOW6BS.js";import{b as H}from"./chunk-6E5UYAEB.js";import{b as W}from"./chunk-XDERMCAU.js";import{h as E}from"./chunk-7KDNH6JP.js";import{a as O}from"./chunk-2WVKOZ6W.js";import{a as k,b as A,d as Y}from"./chunk-VE3SUJMA.js";import{a as _}from"./chunk-UOGJUJCF.js";import{a as q}from"./chunk-IECUFWIZ.js";import{a as G}from"./chunk-HCBYKLMW.js";import{a as c,b as u,i as I,j as X}from"./chunk-C44QQJR4.js";import{a as ue}from"./chunk-6YGTRKDT.js";import{e as F}from"./chunk-UR6MHSHU.js";var i=F(ue(),1);var r=F(G(),1);function _e({resultRef:h,mode:d="singleshot",loginCompleteRef:f}){let{exit:m}=X(),C=(0,i.useRef)(new q),S=(0,i.useRef)(new Q),v=(0,i.useRef)(new J),t=C.current,l=S.current,$=v.current,ne=K(),[P,g]=(0,i.useState)(d==="login"?"login":"gate"),[L,re]=(0,i.useState)(null),[de,R]=(0,i.useState)(null),[ge,T]=(0,i.useState)(null),[N,oe]=(0,i.useState)(null),[U,B]=(0,i.useState)([]),x=(0,i.useCallback)((e,n,s,o)=>$.log(e,n,s,o),[$]),pe=(0,i.useCallback)((e,n)=>{e?k(t,l,e,n):l.save({project_id:null,project_name:null,folder_id:null,folder_name:null})},[t,l]),y=(0,i.useCallback)(()=>{d==="login"?(f&&(f.current=!0),m()):g("input")},[d,m,f]),D=(0,i.useCallback)((e,n)=>{let s=k(t,l,e,n);if(d==="login"){g("ensure-project");return}Y(s)?y():s.projectId?g("ensure-folder"):g("ensure-project")},[t,l,y,d]);I((e,n)=>{n.ctrl&&e==="c"&&E(0,"Ctrl+C exit")});let M=(0,i.useRef)(!1);i.default.useEffect(()=>{M.current||(M.current=!0,d!=="login"&&te(t,x).then(e=>{re(e),e.status==="authenticated"?D(e.result.profile,e.result.env):e.status==="needs_pick"?g("pick"):(R(e.profile??null),T(e.env??null),g("login"))}).catch(e=>{oe(`Auth check failed: ${e instanceof Error?e.message:String(e)}`)}))},[t,x]);let ie=(0,i.useCallback)(e=>{h.current={objective:e},m()},[h,m]),se=(0,i.useCallback)(async(e,n)=>{t.setActiveProfile(e),t.setDefaultEnv(n),(await ee(t,e,n,x)).status==="authenticated"?D(e,n):(R(e),T(n),g("login"))},[t,x,D]),w=(0,i.useCallback)(()=>{let e=t.getActiveProfile(),n=t.getDefaultEnv();if(!e)return null;let s=_(n),o=t.loadBasicAuth(e,n);return new Z(s.controllerBaseUrl,async()=>t.loadCredentials(e,n)?.access_token??null,o,x)},[t,x]),le=(0,i.useCallback)(async()=>{let e=w();if(!e)return null;let n=e.cached??await e.resolve();if(!n)return null;let s=_(t.getDefaultEnv()),o=new O(s.tmsBaseUrl,n.username,n.access_key);try{let p=(await o.listProjects()).find(b=>b.name==="KaneAI Generated");if(p)return{id:p.project_id,name:p.name};let j=await o.createProject("KaneAI Generated");return{id:j.id,name:j.name}}catch{return null}},[w,t]),ae=(0,i.useCallback)(async e=>{let n=w();if(!n)return null;let s=n.cached??await n.resolve();if(!s)return null;let o=_(t.getDefaultEnv()),a=new O(o.tmsBaseUrl,s.username,s.access_key);try{let j=(await a.listFolders(e)).find(ce=>ce.name==="Untitled");if(j)return{id:j.id,name:j.name};let b=await a.createFolder(e,"Untitled");return{id:b.id,name:b.name}}catch{return null}},[w,t]);if(P==="gate")return(0,r.jsx)(c,{paddingX:1,children:(0,r.jsx)(u,{color:"yellow",children:"Checking authentication..."})});if(N)return(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"red",children:N}),(0,r.jsx)(u,{color:"gray",children:"Press Ctrl+C to exit."})]});if(P==="pick"&&L?.status==="needs_pick")return(0,r.jsx)(fe,{profiles:L.profiles,onSelect:se});if(P==="login")return(0,r.jsx)(z,{devMode:process.env.KANE_DEV_MODE==="1",profiles:t.listProfiles(),onBasicLogin:async(e,n,s,o)=>{let{validateBasicAuth:a}=await import("./validate-basic-FO7C2URG.js");await a(n,s,o),t.saveBasicAuth(e,n,{username:s,access_key:o}),t.setActiveProfile(e),t.setDefaultEnv(n)},onOAuthLogin:async(e,n)=>{let{LoginFlow:s}=await import("./login-flow-VZ2MITFA.js");t.setDefaultEnv(n),t.setActiveProfile(e),await new s(e,n,t).login()},onComplete:(e,n)=>{R(e),T(n),t.setActiveProfile(e),t.setDefaultEnv(n),D(e,n)},onCancel:()=>{E(0,"Login cancelled")}});if(P==="ensure-project"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=()=>{if(d==="login"){g("ensure-folder");return}k(t,l,e,n).folderId?y():g("ensure-folder")};return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(H,{resolver:w(),currentProjectId:l.load().project_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{projectId:o,projectName:a}),B(p=>[...p,`\u2713 Project: ${a} (${o})`]),s()},onCancel:async()=>{let o=await le();o&&(A(t,l,e,n,{projectId:o.id,projectName:o.name}),B(a=>[...a,`\u2713 Default project: ${o.name} (${o.id})`]),s())}})]})}if(P==="ensure-folder"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=t.loadProfileConfig(e,n);return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(W,{resolver:w(),projectId:s?.project_id??"",currentFolderId:l.load().folder_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{folderId:o,folderName:a}),B(p=>[...p,`\u2713 Folder: ${a} (${o})`]),y()},onCancel:async()=>{if(!s?.project_id)return;let o=await ae(s.project_id);o&&(A(t,l,e,n,{folderId:o.id,folderName:o.name}),B(a=>[...a,`\u2713 Default folder: ${o.name} (${o.id})`]),y())}})]})}return P==="input"?(0,r.jsxs)(c,{flexDirection:"column",children:[U.length>0&&(0,r.jsx)(c,{flexDirection:"column",paddingX:1,marginBottom:1,children:U.map((e,n)=>(0,r.jsx)(u,{color:"green",children:e},n))}),(0,r.jsx)(V,{onSubmit:ie,onEscape:()=>E(0,"User pressed Escape"),history:ne,placeholder:"Type an objective..."})]}):(0,r.jsx)(r.Fragment,{})}function fe({profiles:h,onSelect:d}){let[f,m]=(0,i.useState)(0),[C,S]=(0,i.useState)(!1);return I((v,t)=>{if(!C){if(t.escape){E(0,"Profile picker cancelled");return}if(t.upArrow&&f>0&&m(l=>l-1),t.downArrow&&f<h.length-1&&m(l=>l+1),t.return){S(!0);let l=h[f];d(l.profile,l.env).catch(()=>S(!1))}}}),(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,r.jsx)(c,{marginTop:1,flexDirection:"column",children:h.map((v,t)=>(0,r.jsxs)(u,{children:[t===f?"\u276F ":" ",(0,r.jsx)(u,{color:t===f?"#ff9500":"white",bold:t===f,children:v.profile}),(0,r.jsxs)(u,{color:"gray",children:[" [",v.env,"]"]})]},`${v.profile}-${v.env}`))}),C&&(0,r.jsx)(c,{marginTop:1,children:(0,r.jsx)(u,{color:"yellow",children:"Validating credentials..."})})]})}export{_e as a};
@@ -1,10 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- var x=()=>!!process.env.KANE_DEV_MODE,o=[],c=!1,p=null,g=null,f=null,i=null,l=[];function m(e){if(i=e,e&&l.length>0){let t=l;l=[];for(let n of t)try{e.log(n.level,n.event,n.message,n.context)}catch{}}}function h(e,t,n,s){if(i){try{i.log(e,t,n,s)}catch{}return}l.push({level:e,event:t,message:n,context:s})}function y(){return i}function R(){return c}function w(e,t){o=o.filter(n=>n.name!==e),o.push({name:e,fn:t})}function L(e){o=o.filter(t=>t.name!==e)}function E(e,t){let n=o.find(r=>r.name===e);if(!n)return;o=o.filter(r=>r.name!==e);let s=!0;try{n.fn()}catch(r){s=!1,process.stderr.write(`[exit-manager] cleanup(${e}) failed: ${r instanceof Error?r.message:String(r)}
3
- `)}t&&s&&x()&&process.stderr.write(`[exit-manager] cleanup(${e}): ${t}
4
- `)}function u(e,t,n=!1){if(c){process.exit(p??e);return}if(c=!0,p=e,n&&i)try{i.log("error","CRASH",t),i.shutdownSync()}catch{}let s=[...o].reverse(),r=[];for(let a of s)try{a.fn(),r.push(a.name)}catch(d){process.stderr.write(`[exit-manager] cleanup(${a.name}) failed: ${d instanceof Error?d.message:String(d)}
5
- `)}if(o=[],x()&&(process.stderr.write(`[exit-manager] shutdown(${e}): ${t}
6
- `),r.length>0&&process.stderr.write(`[exit-manager] cleaned up: ${r.join(", ")}
7
- `)),n&&f){try{f()}catch{}process.stderr.write(`
8
- Kane CLI crashed unexpectedly: ${t}
9
- `+(r.length>0?`Resources cleaned up (${r.join(", ")}).
10
- `:"")),process.exit(e);return}if(g&&!n){g();return}process.exit(e)}function $(e){g=e}function S(e){f=e}var v=!1;function I(){v||(v=!0,process.on("SIGINT",()=>{u(130,"Received SIGINT",!0)}),process.on("SIGTERM",()=>{u(143,"Received SIGTERM",!0)}),process.on("uncaughtException",e=>{u(1,`Uncaught exception: ${e.message}`,!0)}),process.on("unhandledRejection",e=>{u(1,`Unhandled rejection: ${String(e)}`,!0)}))}function k(){o=[],c=!1,p=null,g=null,f=null,i=null,l=[],v=!1}export{m as a,h as b,y as c,R as d,w as e,L as f,E as g,u as h,$ as i,S as j,I as k,k as l};
@@ -1,11 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as $e}from"./chunk-YCNCW4O4.js";import{a as Fe}from"./chunk-FPFOW6BS.js";import{a as ke}from"./chunk-YCCUBQY4.js";import{a as Ke}from"./chunk-VE3SUJMA.js";import{a as Ue}from"./chunk-GEAWRRR7.js";import{a as Oe}from"./chunk-UOGJUJCF.js";import{a as de}from"./chunk-YSIYPC4R.js";import{c as Re,x as u}from"./chunk-HFXQU7UZ.js";import{a as Z}from"./chunk-HCBYKLMW.js";import{a as x,b as f,h as Le,i as be,k as De}from"./chunk-C44QQJR4.js";import{a as xe}from"./chunk-6YGTRKDT.js";import{e as O}from"./chunk-UR6MHSHU.js";var Ne=O(xe(),1);import{readFileSync as et,writeFileSync as tt,mkdirSync as nt}from"fs";import{dirname as rt,join as We}from"path";var ot=We(Re,"command-history.json"),yt=We(Re,"generate-history.json"),it=200,_e=class{entries;filePath;max;constructor(t=ot,e=it){this.filePath=t,this.max=e,this.entries=this._load()}push(t){this.entries.length>0&&this.entries[this.entries.length-1]===t||(this.entries.push(t),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(t){let e=t.toLowerCase(),i=[];for(let l=this.entries.length-1;l>=0;l--)this.entries[l].toLowerCase().includes(e)&&i.push(this.entries[l]);return i}_load(){try{let t=et(this.filePath,"utf-8"),e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}_save(){try{nt(rt(this.filePath),{recursive:!0}),tt(this.filePath,JSON.stringify(this.entries)+`
3
- `)}catch{}}};function At(r){let t=(0,Ne.useRef)(null);return t.current||(t.current=new _e(r)),t.current}var L=O(xe(),1);var Ie=O(xe(),1);var X=O(Z(),1);function He({history:r,onSelect:t,onClose:e}){let[i,l]=(0,Ie.useState)(""),[a,g]=(0,Ie.useState)(0),v=i?r.search(i).slice(0,8):[];return be((T,d)=>{if(d.escape){e();return}if(d.return){v.length>0&&v[a]?t(v[a]):e();return}if(d.upArrow){g(w=>Math.max(0,w-1));return}if(d.downArrow){g(w=>Math.min(v.length-1,w+1));return}if(d.backspace||d.delete){l(w=>w.slice(0,-1)),g(0);return}T&&!d.ctrl&&!d.meta&&(l(w=>w+T),g(0))}),(0,X.jsxs)(x,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,X.jsx)(f,{color:u.muted,bold:!0,children:"reverse search"}),(0,X.jsxs)(x,{gap:1,children:[(0,X.jsx)(f,{color:u.dim,children:"search:"}),(0,X.jsx)(f,{children:i}),(0,X.jsx)(f,{color:u.orange,children:"\u2588"})]}),v.length>0&&(0,X.jsx)(f,{children:" "}),v.map((T,d)=>(0,X.jsx)(x,{marginLeft:2,children:(0,X.jsxs)(f,{color:d===a?u.orange:u.dim,bold:d===a,children:[d===a?"\u25B8 ":" ",T]})},`${d}-${T}`))]})}var ce=O(Z(),1);function Ge({commands:r,selectedIndex:t}){return r.length===0?null:(0,ce.jsx)(x,{flexDirection:"column",marginBottom:0,children:r.map((e,i)=>{let l=i===t;return(0,ce.jsxs)(x,{children:[(0,ce.jsx)(f,{color:l?u.orange:u.dim,children:l?"\u276F ":" "}),(0,ce.jsxs)(f,{color:l?u.orange:void 0,bold:l,children:["/",e.name]}),e.args&&(0,ce.jsxs)(f,{color:u.dim,children:[" ",e.args]}),(0,ce.jsxs)(f,{color:u.dim,children:[" ",e.description]})]},e.name)})})}var Ye=O(xe(),1);var H=O(Z(),1),qe={scenario:"Scenarios",case:"Test Cases",file:"Files"};function Ve(r){let t={scenario:0,case:0,file:0};for(let e of r)t[e.kind]++;return["scenario","case","file"].filter(e=>t[e]>0).map(e=>`${t[e]} ${qe[e]}`).join(" \xB7 ")}var Ee=7;function je({items:r,selectedIndex:t,accent:e=u.orange}){let i=r.length;if(i===0)return null;let l=Math.floor(Ee/2),a=i<=Ee?0:Math.max(0,Math.min(t-l,i-Ee)),g=Math.min(i,a+Ee),v=a,T=i-g;return(0,H.jsxs)(x,{flexDirection:"column",marginBottom:0,children:[v>0&&(0,H.jsx)(x,{children:(0,H.jsx)(f,{color:u.dim,children:` \u22EF ${v} above \u2014 ${Ve(r.slice(0,a))}`})}),r.slice(a,g).map((d,w)=>{let K=a+w,D=K===t,C=w===0||r[K-1].kind!==d.kind;return(0,H.jsxs)(Ye.default.Fragment,{children:[C&&(0,H.jsx)(x,{children:(0,H.jsx)(f,{color:u.dim,children:qe[d.kind]})}),(0,H.jsxs)(x,{children:[(0,H.jsx)(f,{color:D?e:u.dim,children:D?"\u276F ":" "}),(0,H.jsx)(f,{color:D?e:void 0,bold:D,children:d.label})]})]},`${d.kind}:${d.value}:${K}`)}),T>0&&(0,H.jsx)(x,{children:(0,H.jsx)(f,{color:u.dim,children:` \u22EF ${T} more \u2014 ${Ve(r.slice(g))}`})})]})}var ye=O(xe(),1);var st=27,lt=127,at=11;function ct(r){return r>=64&&r<=126}function ut(r,t){r===at&&t({killToEnd:!0,ctrl:!0,raw:String.fromCharCode(r)})}function ft(r,t){r===lt&&t({backspace:!0,meta:!0,raw:"\x1B\x7F"})}function dt(r,t){let e=r.map(l=>String.fromCharCode(l)).join(""),i=/^\[1;([0-9]+)([A-D])$/.exec(e);if(i){let l=parseInt(i[1],10),a=i[2],g={raw:"\x1B"+e};if(l===2)g.shift=!0;else if(l===3)g.meta=!0;else if(l===5)g.ctrl=!0;else return;a==="A"?g.arrowUp=!0:a==="B"?g.arrowDown=!0:a==="C"?g.arrowRight=!0:a==="D"&&(g.arrowLeft=!0),t(g);return}if(e==="[H"||e==="[1~"||e==="[7~"){t({home:!0,raw:"\x1B"+e});return}if(e==="[F"||e==="[4~"||e==="[8~"){t({end:!0,raw:"\x1B"+e});return}if(e==="[3;5~"){t({delete:!0,ctrl:!0,raw:"\x1B"+e});return}if(e==="[3;3~"){t({delete:!0,meta:!0,raw:"\x1B"+e});return}}function mt(r,t){r===72?t({home:!0,raw:"\x1BO"+String.fromCharCode(r)}):r===70&&t({end:!0,raw:"\x1BO"+String.fromCharCode(r)})}function ht(){let r="IDLE",t=[];function e(){r="IDLE",t=[]}return{feed(i,l){for(let a of i)r==="IDLE"?a===st?(r="ESC",t=[]):ut(a,l):r==="ESC"?a===91?(r="CSI",t=[]):a===79?(r="SS3",t=[]):(ft(a,l),e()):r==="CSI"?(t.push(a),ct(a)&&(dt([91,...t],l),e())):r==="SS3"&&(mt(a,l),e())},flushIdle(i){r==="ESC"&&t.length===0&&i({raw:"\x1B"}),e()}}}function ze(r,t={}){let e=(0,ye.useRef)(r);e.current=r;let{stdin:i}=Le();(0,ye.useEffect)(()=>{if(t.isActive===!1||!i)return;let l=ht(),a=null,g=v=>{a&&(clearTimeout(a),a=null);let T=Buffer.isBuffer(v)?v:Buffer.from(v,"binary");l.feed(T,d=>e.current(d)),a=setTimeout(()=>{l.flushIdle(d=>e.current(d)),a=null},50)};return i.on("data",g),()=>{i.removeListener("data",g),a&&clearTimeout(a)}},[t.isActive,i])}var E=O(Z(),1);function gt(r,t){let e=t-1;for(;e>=0&&r[e]!=="@"&&r[e]!==" "&&r[e]!==`
4
- `;)e--;return e<0||r[e]!=="@"||e>0&&r[e-1]!==" "&&r[e-1]!==`
5
- `?null:{at:e,query:r.slice(e+1,t).join("")}}var Pe=10;function pt(r){return r.replace(/\x1b?\[200~/g,"").replace(/\x1b?\[201~/g,"").replace(/\r\n/g,`
6
- `).replace(/\r/g,`
7
- `).replace(/[\x00-\x08\x0b-\x1f\x7f]/g,"")}function xt(r,t){let e=[],i=0;for(;i<=r.length;){let l=i;for(;l<r.length&&r[l]!==`
8
- `;)l++;if(i===l)e.push({start:i,end:i});else{let a=i;for(;a<l;){let g=Math.min(a+t,l);e.push({start:a,end:g}),a=g}}if(l>=r.length)break;i=l+1}return e}function bt(r,t,e){if(r.length===0)return 0;if(t>=e.length)return r.length-1;if(e[t]===`
9
- `){for(let i=r.length-1;i>=0;i--)if(r[i].end===t)return i;return r.length-1}for(let i=0;i<r.length;i++){let l=r[i];if(l.start<=t&&t<l.end)return i}return r.length-1}function Xe(r,t,e,i){let l=xt(r,e);if(l.length===0)return null;let a=bt(l,t,r),g=a+i;if(g<0||g>=l.length)return null;let v=t-l[a].start,T=l[g],d=T.end-T.start;return T.start+Math.min(v,d)}function qt({onSubmit:r,onEscape:t,history:e,placeholder:i="Type an objective or /command...",commands:l,clearSeq:a,submitVerb:g,footerBindings:v,inert:T=!1,clearOnSubmit:d=!0,noHistory:w=!1,accent:K=u.orange,scenarios:D,mentionFiles:C}){let[s,R]=(0,L.useState)([]),[m,h]=(0,L.useState)(0),[W,G]=(0,L.useState)("none"),[ee,M]=(0,L.useState)(-1),V=(0,L.useRef)(""),[ve,ie]=(0,L.useState)(!0),{stdout:te}=De(),se=te?.columns??80,[U,Y]=(0,L.useState)(0),[ne,J]=(0,L.useState)(0),[Ae,Te]=(0,L.useState)([]),[me,he]=(0,L.useState)(null),P=(0,L.useRef)(!1);(0,L.useEffect)(()=>{if(a!==void 0){if(!P.current){P.current=!0;return}R([]),h(0),M(-1),V.current="",ie(!0),G("none"),Y(0)}},[a]);let p=s.join(""),A=(()=>{if(W!=="none"||s.length===0)return"";if(p.startsWith("/")&&l&&p.length>=2){let n=p.slice(1).toLowerCase(),o=l.find(S=>S.name.startsWith(n)&&S.name!==n);return o?`/${o.name}`.slice(p.length):""}if(p.startsWith("/")||w)return"";let c=e.getAll();for(let n=c.length-1;n>=0;n--)if(c[n].startsWith(p)&&c[n]!==p)return c[n].slice(p.length);return""})(),_=(()=>{if(!l||!p.startsWith("/"))return[];let c=p.length>=2?p.slice(1).toLowerCase():"";return c&&l.some(n=>n.name===c)?[]:l.filter(n=>!c||n.name.startsWith(c))})(),k=_.length>0&&p.startsWith("/"),q=!!C||!!(D&&D.length)?gt(s,m):null,Ce=q?q.query:null,re=(()=>{if(!q)return[];let c=q.query.toLowerCase(),n=[];(D??[]).forEach((o,S)=>{let y=`s${S+1}`;(!c||y.includes(c)||(o.title??"").toLowerCase().includes(c))&&n.push({kind:"scenario",value:y,label:`@${y} ${o.title??o.sid??""}`.trim()})}),(D??[]).forEach((o,S)=>{let I=S+1;(o.test_cases??[]).forEach((y,F)=>{let j=`s${I}.c${F+1}`;(!c||j.includes(c)||(y.title??"").toLowerCase().includes(c))&&n.push({kind:"case",value:j,label:`@${j} ${y.title??""}`.trim()})})});for(let o of Ae)n.push({kind:"file",value:o,label:o});return n})(),ge=q!==null&&q.at!==me&&!k&&W==="none"&&re.length>0;(0,L.useEffect)(()=>{if(!C||Ce===null){Te([]);return}let c=!1;return C(Ce).then(n=>{c||Te(n)}).catch(()=>{c||Te([])}),()=>{c=!0}},[Ce,C]),(0,L.useEffect)(()=>{ne>=re.length&&J(0)},[re.length]);let Me=c=>{if(!q)return;let n=c.kind==="file"&&/\s/.test(c.value)?`@"${c.value}"`:`@${c.value}`,o=[...s.slice(0,q.at),...n,...s.slice(m)];R(o),h(q.at+n.length),J(0),he(q.at),ie(!1)};if(be((c,n)=>{if(ve&&c&&ie(!1),n.return){if(ge&&re[ne]){Me(re[ne]);return}if(k&&_[U]){let o=`/${_[U].name}`;w||e.push(o),r(o),R([]),h(0),G("none"),M(-1),V.current="",ie(!0),Y(0);return}p.trim()&&(w||e.push(p.trim()),r(p.trim()),d&&(R([]),h(0),G("none"),M(-1),V.current="",ie(!0),Y(0)));return}if(n.escape){if(ge){he(q.at);return}W!=="none"?G("none"):s.length>0?(R([]),h(0),M(-1),V.current=""):t?.();return}if(n.tab&&!n.shift){if(ge&&re[ne]){Me(re[ne]);return}if(k&&_[U]){let o=`/${_[U].name}`;R([...o]),h(o.length),Y(0);return}if(A){let o=p+A;R([...o]),h(o.length);return}return}if(n.ctrl&&c==="r"){if(w)return;G("search");return}if(n.ctrl&&c==="a"){h(0);return}if(n.ctrl&&c==="e"){h(s.length);return}if(n.ctrl&&c==="w"){if(m===0)return;let o=m-1;for(;o>0&&s[o]===" ";)o--;for(;o>0&&s[o-1]!==" ";)o--;let S=[...s.slice(0,o),...s.slice(m)];R(S),h(o);return}if(n.ctrl&&c==="u"){R([]),h(0),M(-1),G("none");return}if(n.meta&&c==="b"){let o=m-1;for(;o>0&&s[o]===" ";)o--;for(;o>0&&s[o-1]!==" ";)o--;h(Math.max(0,o));return}if(n.meta&&c==="f"){let o=m;for(;o<s.length&&s[o]!==" ";)o++;for(;o<s.length&&s[o]===" ";)o++;h(o);return}if(n.leftArrow){if(n.ctrl||n.shift)return;h(o=>Math.max(0,o-1));return}if(n.rightArrow){if(n.ctrl||n.shift)return;if(m>=s.length&&A){let o=p+A;R([...o]),h(o.length)}else h(o=>Math.min(s.length,o+1));return}if(n.upArrow){if(n.shift)return;if(ge){J(o=>Math.max(0,o-1));return}if(k){Y(o=>Math.max(0,o-1));return}if(W==="none"){let o=Math.max(1,se-2),S=Xe(s,m,o,-1);if(S!==null){h(S);return}if(w)return;let I=e.getAll();if(I.length===0)return;if(ee===-1){V.current=p,M(I.length-1);let y=I[I.length-1];R([...y]),h(y.length)}else if(ee>0){let y=ee-1;M(y);let F=I[y];R([...F]),h(F.length)}}return}if(n.downArrow){if(n.shift)return;if(ge){J(o=>Math.min(re.length-1,o+1));return}if(k){Y(o=>Math.min(_.length-1,o+1));return}if(W==="none"){let o=Math.max(1,se-2),S=Xe(s,m,o,1);if(S!==null){h(S);return}if(w)return;let I=e.getAll();if(ee===-1)return;if(ee<I.length-1){let y=ee+1;M(y);let F=I[y];R([...F]),h(F.length)}else{M(-1);let y=V.current;R([...y]),h(y.length)}}return}if(n.backspace||n.delete){if(n.meta||n.ctrl)return;if(m>0){let o=[...s.slice(0,m-1),...s.slice(m)];R(o),h(m-1),M(-1),Y(0),he(null),J(0)}return}if(c&&!n.ctrl&&!n.meta){let o=pt(c);if(!o)return;let S=[...s.slice(0,m),...o,...s.slice(m)];R(S),h(m+o.length),M(-1),Y(0),he(null),J(0)}},{isActive:!T&&W!=="search"}),ze(c=>{if(c.home){h(0);return}if(c.end){h(s.length);return}if(c.killToEnd){R(s.slice(0,m));return}if(c.arrowLeft&&(c.ctrl||c.meta)){let n=m-1;for(;n>0&&s[n]===" ";)n--;for(;n>0&&s[n-1]!==" ";)n--;h(Math.max(0,n));return}if(c.arrowRight&&(c.ctrl||c.meta)){let n=m;for(;n<s.length&&s[n]!==" ";)n++;for(;n<s.length&&s[n]===" ";)n++;h(n);return}if(c.backspace&&c.meta){if(m===0)return;let n=m-1;for(;n>0&&s[n]===" ";)n--;for(;n>0&&s[n-1]!==" ";)n--;let o=[...s.slice(0,n),...s.slice(m)];R(o),h(n);return}if(c.delete&&(c.ctrl||c.meta)){let n=m;for(;n<s.length&&s[n]===" ";)n++;for(;n<s.length&&s[n]!==" ";)n++;R([...s.slice(0,m),...s.slice(n)]);return}},{isActive:!T&&W!=="search"}),T)return(0,E.jsxs)(x,{flexDirection:"column",children:[(0,E.jsx)(f,{color:u.muted,children:"\u2500".repeat(se)}),(0,E.jsxs)(x,{children:[(0,E.jsx)(f,{color:u.muted,children:"\u276F "}),(0,E.jsx)(f,{color:u.dim,children:i})]}),(0,E.jsx)(de,{bindings:v??[{keys:"ctrl+c",label:"cancel"},{keys:"/cancel",label:"stop turn"},{keys:"ctrl+t",label:"thinking"}],suppressEscBack:!0})]});let Qe=c=>{R([...c]),h(c.length),G("none")},Ze=()=>{G("none")},we=(()=>{if(ve&&s.length===0)return null;let c=m>=s.length,n=s.slice(0,m).join(""),o,S;c?(o=" ",S=""):s[m]===`
10
- `?(o=" ",S=s.slice(m).join("")):(o=s[m],S=s.slice(m+1).join(""));let I=n+o+S+A,y=n.length,F=y+1,j=F+S.length,Se=Math.max(1,se-2),B=[],oe=0;for(;oe<=I.length;){let N=I.indexOf(`
11
- `,oe);if(N===-1&&(N=I.length),oe===N)B.push({type:"content",start:oe,end:oe});else{let z=oe;for(;z<N;){let le=Math.min(z+Se,N);B.push({type:"content",start:z,end:le}),z=le}}if(N>=I.length)break;oe=N+1}let Q=Math.max(0,B.findIndex(N=>N.start<=y&&y<=N.end)),fe;if(B.length<=Pe)fe=B;else{let z=Pe-1-4;if(Q<4||Q>=B.length-z)fe=[...B.slice(0,4),{type:"ellipsis",hidden:B.length-4-z},...B.slice(B.length-z)];else{let le=Pe-2,Be=Math.floor(le/2),ae=Q-Be,pe=Q+(le-Be)-1;ae<1&&(pe+=1-ae,ae=1),pe>B.length-2&&(ae-=pe-(B.length-2),pe=B.length-2),ae=Math.max(1,ae),fe=[{type:"ellipsis",hidden:ae},...B.slice(ae,pe+1),{type:"ellipsis",hidden:B.length-pe-1}]}}return{full:I,b:y,c:F,a:j,rows:fe}})();return(0,E.jsxs)(x,{flexDirection:"column",children:[W==="search"&&(0,E.jsx)(He,{history:e,onSelect:Qe,onClose:Ze}),k&&(0,E.jsx)(Ge,{commands:_,selectedIndex:U}),ge&&(0,E.jsx)(je,{items:re,selectedIndex:ne,accent:K}),(0,E.jsx)(f,{color:u.muted,children:"\u2500".repeat(se)}),we===null?(0,E.jsxs)(x,{children:[(0,E.jsx)(f,{color:K,children:"\u276F "}),(0,E.jsx)(f,{inverse:!0,children:" "}),(0,E.jsx)(f,{color:u.dim,children:i})]}):(()=>{let c=we.rows.findIndex(n=>n.type==="content");return(0,E.jsx)(x,{flexDirection:"column",children:we.rows.map((n,o)=>{if(n.type==="ellipsis")return(0,E.jsx)(x,{children:(0,E.jsxs)(f,{color:u.dim,children:[" \u22EF ","(",n.hidden," more line",n.hidden===1?"":"s",")"]})},o);let{full:S,b:I,c:y,a:F}=we,j=n.start,ue=n.end,Se=o===c,B=Se?"\u276F ":" ",oe=Se?K:u.muted,Q=[(0,E.jsx)(f,{color:oe,children:B},"p")];j<Math.min(I,ue)&&Q.push((0,E.jsx)(f,{children:S.slice(j,Math.min(I,ue))},"b"));let fe=Math.max(I,j),N=Math.min(y,ue);fe<N&&Q.push((0,E.jsx)(f,{color:K,inverse:!0,children:S.slice(fe,N)},"c"));let z=Math.max(y,j),le=Math.min(F,ue);return z<le&&Q.push((0,E.jsx)(f,{children:S.slice(z,le)},"a")),ue>F&&Q.push((0,E.jsx)(f,{color:u.dim,children:S.slice(Math.max(F,j),ue)},"g")),(0,E.jsx)(x,{children:Q},o)})})})(),(0,E.jsx)(de,{bindings:v??[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:g??"submit"},{keys:"tab",label:"complete"},{keys:"ctrl+r",label:"search"}],escBackLabel:"clear"})]})}var $=O(xe(),1);var b=O(Z(),1);function Tt(r){let t=[{id:"method",label:"Auth method",options:[{label:"Basic Auth",value:"basic"},{label:"OAuth (browser)",value:"oauth"}]}];return r&&t.push({id:"env",label:"Environment",options:[{label:"prod",value:"prod"},{label:"stage",value:"stage"}]}),t.push({id:"profile",label:"Profile"}),t.push({id:"credentials",label:"Credentials"}),t}function en({devMode:r,profiles:t,onBasicLogin:e,onOAuthLogin:i,onComplete:l,onCancel:a}){let g=Tt(r),[v,T]=(0,$.useState)(0),[d,w]=(0,$.useState)(0),[K,D]=(0,$.useState)({}),[C,s]=(0,$.useState)("select"),[R,m]=(0,$.useState)(""),[h,W]=(0,$.useState)("username"),[G,ee]=(0,$.useState)(""),[M,V]=(0,$.useState)(null),[ve,ie]=(0,$.useState)(null),te=g[v],se=K.method??"basic",U=K.env??"prod",Y=(0,$.useCallback)(()=>{let p=t.filter(A=>A.env===U).map(A=>({label:`${A.profile} [${A.env}]`,value:A.profile}));return p.push({label:"+ Create new",value:"__new__"}),p},[t,U]),ne=(0,$.useCallback)(()=>{v===0?a():(T(P=>P-1),w(0),s("select"),m(""),V(null))},[v,a]),J=(0,$.useCallback)(P=>{se==="basic"?(s("text-input"),W("username"),m("")):(s("waiting"),i(P,U).then(()=>{ie(`Logged in via OAuth as ${P} [${U}]`),s("done")}).catch(p=>{V(p.message),s("error")}))},[se,U,i]),Ae=(0,$.useCallback)(P=>{let p=P.trim();if(p){if(h==="profileName"){let A=p;D(_=>({..._,profile:A})),J(A);return}if(h==="username"){ee(p),m(""),W("accessKey"),s("text-input-masked");return}if(h==="accessKey"){let A=K.profile??"default";s("waiting"),(async()=>{try{await e(A,U,G,p),ie(`Logged in as ${A} [${U}] via basic auth`),s("done")}catch{V("Credentials not valid. Please use valid credentials."),ee(""),m(""),W("username"),s("text-input")}})()}}},[h,K.profile,U,e,G,J]),Te=(0,$.useCallback)(P=>{m(P),M&&V(null)},[M]);be((P,p)=>{if(C==="done"){let _=K.profile??"default";l(_,U);return}if(C==="error"){a();return}if(C==="waiting"){p.escape&&a();return}if(C==="text-input"||C==="text-input-masked")return;if(p.escape){ne();return}let A=te?.id==="profile"?Y():te?.options??[];if(p.upArrow){w(_=>Math.max(0,_-1));return}if(p.downArrow){w(_=>Math.min(A.length-1,_+1));return}if(p.return&&A[d]){let _=A[d];if(te.id==="profile"){if(_.value==="__new__"){s("text-input"),W("profileName"),m("");return}D(k=>({...k,profile:_.value})),T(k=>k+1),w(0),J(_.value);return}D(k=>({...k,[te.id]:_.value})),T(k=>k+1),w(0)}});let me="Login";if(C==="done")return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.green,paddingX:2,paddingY:1,children:[(0,b.jsxs)(f,{color:u.green,bold:!0,children:["\u2713 ",ve]}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.dim,children:"press any key"})})]});if(C==="error")return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.red,paddingX:2,paddingY:1,children:[(0,b.jsx)(f,{color:u.red,bold:!0,children:"Login failed"}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.red,children:M})}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.dim,children:"press any key"})})]});if(C==="waiting")return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.orange,paddingX:2,paddingY:1,children:[(0,b.jsxs)(f,{color:u.orange,bold:!0,children:[me," \u203A OAuth"]}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.secondary,children:"Opening browser for login..."})}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.orange,children:"Waiting for callback \u27F3"})}),(0,b.jsx)(de,{bindings:[],escBackLabel:"cancel"})]});if(C==="text-input"||C==="text-input-masked"){let P=h==="username"?"Username":h==="accessKey"?"Access Key":"Profile name",p=h==="username"||h==="accessKey"?`${me} \u203A Basic Auth`:`${me} \u203A New Profile`;return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.orange,paddingX:2,paddingY:1,children:[M&&(h==="username"||h==="accessKey")&&(0,b.jsx)(x,{marginBottom:1,children:(0,b.jsxs)(f,{color:u.red,children:["\u2717 ",M]})}),(0,b.jsx)(f,{color:u.orange,bold:!0,children:p}),h==="accessKey"&&(0,b.jsxs)(x,{marginTop:1,children:[(0,b.jsx)(f,{color:u.secondary,children:"Username: "}),(0,b.jsx)(f,{children:G})]}),(0,b.jsxs)(x,{marginTop:1,children:[(0,b.jsxs)(f,{color:u.secondary,children:[P,": "]}),(0,b.jsx)(ke,{value:R,onChange:Te,onSubmit:Ae,onCancel:ne,masked:C==="text-input-masked"})]}),(0,b.jsx)(de,{bindings:[{keys:"\u21B5",label:"confirm"}],escBackLabel:"back"})]})}let he=te?.id==="profile"?Y():te?.options??[];return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.orange,paddingX:2,paddingY:1,children:[(0,b.jsx)(f,{color:u.orange,bold:!0,children:me}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsxs)(f,{color:u.secondary,children:[te?.label,":"]})}),(0,b.jsx)(x,{flexDirection:"column",marginTop:1,children:he.map((P,p)=>{let A=p===d,_=A?"\u276F ":" ",k=P.value==="__new__"?u.green:A?u.orange:void 0;return(0,b.jsxs)(f,{color:k,children:[_,P.label]},P.value)})}),(0,b.jsx)(de,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}async function Je(r,t,e,i){let l=r.loadBasicAuth(t,e),a=r.loadCredentials(t,e);if(!l&&!a)return i("info","STARTUP_GATE_NO_CREDS","Profile has no credentials",{profile:t,env:e}),{status:"needs_login",profile:t,env:e};let g=Oe(e),v=async()=>r.loadCredentials(t,e)?.access_token??null,T=new Fe(g.controllerBaseUrl,v,l,i);i("info","STARTUP_GATE_VALIDATE","Validating credentials with controller",{profile:t,env:e,method:l?"basic":"oauth"});let d=await T.resolve(!0);if(d)return i("info","STARTUP_GATE_VALID","Credentials validated",{profile:t,env:e,username:d.username,org_id:d.org_id}),{status:"authenticated",result:{profile:t,env:e,credentials:a,basicAuth:l,tmsCreds:d,resolver:T}};if(!l&&a){let w=a.refresh_token,D=r.loadClient(t,e)?.client_id;if(w&&D){i("info","STARTUP_GATE_REFRESH","Attempting token refresh",{profile:t,env:e});try{let s=await new Ue(e).refreshToken(w,D);if(s.access_token){r.saveCredentials(t,e,{...a,...s,expires_at:Date.now()/1e3+(s.expires_in??3600)});let m=await T.resolve(!0);if(m)return i("info","STARTUP_GATE_REFRESH_OK","Token refreshed and validated",{profile:t,env:e,username:m.username}),{status:"authenticated",result:{profile:t,env:e,credentials:{...a,...s},basicAuth:null,tmsCreds:m,resolver:T}}}i("warn","STARTUP_GATE_REFRESH_INVALID","Refreshed token still invalid",{profile:t,env:e})}catch(C){i("warn","STARTUP_GATE_REFRESH_FAILED","Token refresh failed",{profile:t,env:e,error:C instanceof Error?C.message:String(C)})}}else i("info","STARTUP_GATE_NO_REFRESH","No refresh_token or client_id \u2014 login required",{profile:t,env:e})}return i("info","STARTUP_GATE_INVALID","Credentials invalid \u2014 login required",{profile:t,env:e}),{status:"needs_login",profile:t,env:e}}async function an(r,t,e=new $e){let i=r.listProfiles();if(t("info","STARTUP_GATE_START","Auth startup gate",{profile_count:i.length}),i.length===0)return t("info","STARTUP_GATE_NONE","No profiles found \u2014 login required"),{status:"needs_login"};if(i.length>1){let g=r.getActiveProfile(),v=r.getDefaultEnv();if(g&&i.some(d=>d.profile===g&&d.env===v)){t("info","STARTUP_GATE_TRY_ACTIVE","Multiple profiles \u2014 trying active first",{activeProfile:g,activeEnv:v});let d=await Je(r,g,v,t);if(d.status==="authenticated")return d;t("info","STARTUP_GATE_ACTIVE_FAILED","Active profile invalid \u2014 showing picker",{activeProfile:g,activeEnv:v})}return t("info","STARTUP_GATE_MULTI","Multiple profiles \u2014 picker required",{profiles:i.map(T=>`${T.profile}/${T.env}`)}),{status:"needs_pick",profiles:i}}let{profile:l,env:a}=i[0];return r.setActiveProfile(l),r.setDefaultEnv(a),Ke(r,e,l,a),Je(r,l,a,t)}export{yt as a,At as b,qt as c,en as d,Je as e,an as f};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as l}from"./chunk-HCBYKLMW.js";import{a as i,d as a}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as c}from"./chunk-UR6MHSHU.js";var e=c(b(),1);var t=c(l(),1),d=(0,e.createContext)(null);function f({children:o}){let[n,p]=(0,e.useState)([]),s=(0,e.useRef)(0),u=(0,e.useMemo)(()=>({append:r=>p(S=>[...S,{id:`sb-${++s.current}`,content:r}])}),[]);return(0,t.jsxs)(d.Provider,{value:u,children:[n.length>0&&(0,t.jsx)(a,{items:n,children:r=>(0,t.jsx)(i,{children:r.content},r.id)}),o]})}function v(){let o=(0,e.useContext)(d);if(!o)throw new Error("useScrollback must be used within a ScrollbackProvider. Wrap this Ink render() root in <ScrollbackProvider>. Never render <Static> directly \u2014 push via append().");return o}export{f as a,v as b};
@@ -1,8 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as _,b as D,c as V,d as Ee}from"./chunk-NFOBDHZK.js";import{a as I,b as g}from"./chunk-L5LI2JF4.js";import{a as be}from"./chunk-UOGJUJCF.js";import{a as Ie}from"./chunk-HFXQU7UZ.js";function E(e){if(e===null)return"broken";let t=Math.floor(e/100);return t===1?"passed":t===7?"failed":t===2?"skipped":"broken"}var b={failed:3,broken:2,passed:1,skipped:0};function M(e){let t="skipped";for(let r of e)b[r]>b[t]&&(t=r);return t}import{createHash as Ye}from"crypto";import{basename as Ke}from"path";function B(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return t.length>0?t:"session"}function z(e){return Ye("sha256").update(e).digest("hex").slice(0,8)}function H(e){let t=Ke(e).replace(/_test\.md$/i,"").replace(/\.md$/i,"");return`${B(t)}-${z(e)}`}function U(e,t){return`${B(e)}-${z(t)}`}function Y(e){let t={};for(let[r,n]of Object.entries(e))typeof n=="string"&&n.length>0&&(t[r]=n);return t}var We={darwin:"macOS",linux:"Linux",win32:"Windows"};function K(e){return We[e]??e}function W(e,t){let r={},n=(i,o)=>{o!==void 0&&o!==""&&(r[i]=o)};return n("model",t.model),n("os",e.os),n("browser",e.browser),n("browser_version",e.browser_version),n("resolution",e.resolution),n("platform",t.platform),n("platform_type",t.platform_type),n("run_kind",t.run_kind),n("os_version",e.os_version),e.device!==void 0&&e.device!==""?r.device=e.device:t.platform_type&&t.platform_type!=="web"&&(r.device=null),r}function Je(e,t){return{pack_test_dir:e,ordinal_offset:t}}import{randomUUID as Ge,randomBytes as Xe}from"crypto";import{promises as v}from"fs";import{join as S}from"path";function C(e=process.cwd()){return S(e,".testmuai","evidence")}function m(e,t=process.cwd()){return S(C(t),`${e}.evidence`)}function J(){return Ge()}var Ze=/\.evidence\.tmp-(\d+)-[0-9a-f]+$/;async function Re(e,t,r=process.cwd()){let n=C(r);await v.mkdir(n,{recursive:!0});let i=m(t,r),o=S(n,`${t}.evidence.tmp-${process.pid}-${Xe(6).toString("hex")}`);return await v.copyFile(e,o),await v.rename(o,i),i}async function Qe(e=process.cwd()){let t=C(e),r;try{r=await v.readdir(t)}catch{return[]}return r.filter(n=>n.endsWith(".evidence")).sort().map(n=>S(t,n))}async function G(e,t=process.cwd()){if(await Se(e))return e;let r=m(e,t);return await Se(r)?r:null}async function Se(e){try{return await v.stat(e),!0}catch{return!1}}function qe(e){try{return process.kill(e,0),!0}catch(t){return t?.code==="EPERM"}}async function X(e=process.cwd(),t=qe){let r=C(e);await V(r).catch(()=>({restored:[],removed:[]}));let n=[],i=[],o;try{o=await v.readdir(r,{withFileTypes:!0})}catch{return{aborted:n,removed:i}}for(let s of o){let a=s.name.match(Ze);if(a){let f=Number(a[1]);if(Number.isFinite(f)&&t(f))continue;let h=S(r,s.name);await v.rm(h,{force:!0}),i.push(h);continue}if(!s.isDirectory()||!s.name.endsWith(".evidence"))continue;let u=S(r,s.name),p=S(u,"run.yaml"),c;try{c=I(await v.readFile(p,"utf8"))}catch{continue}if(c?.status!=="running")continue;let l=c?.environment?.pid;if(typeof l=="number"&&t(l))continue;let d=c?.environment?.saved===!0;c?.environment?.origin==="inline"&&!d?(await v.rm(u,{recursive:!0,force:!0}),i.push(u)):(c.status="aborted",await v.writeFile(p,g(c,{lineWidth:-1})),n.push(u))}return{aborted:n,removed:i}}import{promises as y}from"fs";import{join as x}from"path";function Z(e){let t={evidence:"0.1",run_id:e.execution_id,status:"running",title:e.title,started:e.started,environment:{producer:{name:"kane-cli",version:e.producerVersion},...e.surfaces?{surfaces:e.surfaces}:{},run_kind:e.run_kind,origin:e.origin,pid:e.pid},...e.credits!==void 0?{metrics:{credits:{value:e.credits,type:"count"}}}:{}};return g(t,{lineWidth:-1})}async function Q(e,t,r,n=process.cwd(),i){let o=i??m(e.execution_id,n),s=x(o,"tests",t);return await y.mkdir(x(o,"coverage"),{recursive:!0}),await y.writeFile(x(o,"coverage",".keep"),""),await y.mkdir(s,{recursive:!0}),await y.writeFile(x(o,"run.yaml"),Z(e)),r&&await y.writeFile(x(s,r.path),r.content),o}async function et(e,t=process.cwd()){let r=m(e.execution_id,t);await y.mkdir(x(r,"coverage"),{recursive:!0}),await y.writeFile(x(r,"coverage",".keep"),"");let n=I(Z(e));return n.environment&&delete n.environment.run_kind,await y.writeFile(x(r,"run.yaml"),g(n,{lineWidth:-1})),r}async function tt(e,t=process.cwd()){return D(m(e,t),new Date().toISOString())}async function q(e,t=process.cwd()){await y.rm(m(e,t),{recursive:!0,force:!0})}import{promises as ee}from"fs";import{join as te}from"path";function re(e){let t={evidence:"0.1",test:e.testId,status:e.status,...e.durationMs!==void 0?{duration_ms:e.durationMs}:{},...e.definitionPath?{definition:{path:e.definitionPath}}:{},...Object.keys(e.externalId).length?{external_id:e.externalId}:{},...e.tags&&e.tags.length?{tags:e.tags}:{},...Object.keys(e.environment).length?{environment:e.environment}:{},steps:e.steps};return g(t,{lineWidth:-1})}function ne(e){return g({logs:e},{lineWidth:-1})}async function ie(e,t,r){await ee.writeFile(te(e,"tests",t,"result.yaml"),r)}async function oe(e,t,r){let n=te(e,"tests",t,"logs");await ee.mkdir(n,{recursive:!0}),await ee.writeFile(te(n,"meta.yaml"),r)}import{promises as $}from"fs";import{join as Pe}from"path";function _e(e){return Pe(e,".internal","meta.json")}async function De(e){let t;try{t=await $.readFile(_e(e),"utf8")}catch(n){if(n?.code==="ENOENT")return null;throw n}let r=JSON.parse(t);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("meta.json is not a JSON object");return r}async function se(e,t){let r;try{r=await De(e)??{}}catch(s){console.warn(`evidence: meta.json at ${e} unreadable \u2014 skipping execution-pointer append to preserve identity`,s);return}let n=Array.isArray(r.executions)?r.executions:[];n.push(t),r.executions=n,await $.mkdir(Pe(e,".internal"),{recursive:!0});let i=_e(e),o=`${i}.tmp-${process.pid}-${Date.now()}`;await $.writeFile(o,JSON.stringify(r,null,2)+`
3
- `),await $.rename(o,i)}async function rt(e){try{let t=await De(e);return t&&Array.isArray(t.executions)?t.executions:[]}catch{return[]}}async function nt(e,t,r=process.cwd()){let n=await G(e,r);if(!n){let o=`evidence: no pack found for "${e}"`;return t.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:e})):console.error(o),2}let i=await _(n,t.profile??"L1");return t.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${t.profile??"L1"}, status ${i.status})`),i.valid?0:1}function ae(e){let t=[];for(let r of e){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)t.push(E(i))}return M(t)}function it(e){let t=null;for(let r of e){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)i!=null&&(t==null||b[E(i)]>b[E(t)]||b[E(i)]===b[E(t)]&&i>t)&&(t=i)}return t}import{promises as ot}from"fs";import{extname as Ce,basename as st}from"path";var at={".ndjson":"ndjson",".log":"log",".json":"json",".har":"har"};async function ce(e){let t;try{t=await ot.readdir(e)}catch{return[]}return t.filter(r=>r!=="meta.yaml").sort().map(r=>({name:st(r,Ce(r)),file:r,format:at[Ce(r)]??"txt"}))}import{mkdirSync as ct,appendFileSync as dt}from"fs";import{join as Oe}from"path";function de(e,t){return Oe(e,"tests",t,"logs")}function ue(e,t,r,n={},i){try{i?.(t,r,r,n)}catch{}if(e)try{ct(e,{recursive:!0});let o=JSON.stringify({ts:new Date().toISOString(),level:t,event:r,...n})+`
4
- `;dt(Oe(e,"diagnostics.ndjson"),o)}catch{}}import{promises as k}from"fs";import{join as P}from"path";async function ut(e){try{let t=P(e,"tests"),r=await k.readdir(t).catch(()=>[]);for(let n of r){let i=P(t,n,"steps"),o=await k.readdir(i).catch(()=>[]);for(let s of o){let a=await k.readFile(P(i,s,"failure.yaml"),"utf8").catch(()=>null);if(a!=null)try{let u=I(a);if(u&&typeof u=="object"&&u.triage)return!0}catch{}}}}catch{}return!1}async function Le(e,t,r){let n=P(e,"tests",t,"logs");if(r)try{await k.mkdir(n,{recursive:!0}),await k.copyFile(r,P(n,"tui.log"))}catch{}let i=await ce(n);i.length&&await oe(e,t,ne(i))}async function le(e){let t=e.cwd??process.cwd(),r=e.packDir??m(e.executionId,t);if(!e.saved&&!e.packDir)return await q(e.executionId,t),{sealed:!1};await Le(r,e.testId,e.tuiLogPath);let n=P(r,"run.yaml"),i=I(await k.readFile(n,"utf8"));i.environment={...i.environment??{},saved:e.saved,run_kind:e.runKind},await k.writeFile(n,g(i,{lineWidth:-1}));let o=await k.open(n,"r+");try{await o.sync()}finally{await o.close()}let s=await ut(r);await D(r,new Date().toISOString());let a;try{let p=await _(r,"L1");a=p.valid;let l=(p.diagnostics??[]).filter(d=>String(d?.code??"").includes("failure.status_disagrees"));if(l.length>0)if(e.expectStatusDisagrees||s){let d=e.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${l.length} status_disagrees advisory(ies) \u2014 ${d}`)}else console.warn(`evidence: ${l.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,l);if(!p.valid){console.warn(`evidence: sealed pack ${e.executionId} failed L1 validation`,p.diagnostics);let d=String(p.diagnostics?.[0]?.code??"");ue(de(r,e.testId),"warn","EVIDENCE_INVALID",{execution_id:e.executionId,first_code:d,surface:e.surface??"testmd"},e.log)}}catch(p){console.warn(`evidence: validation error for ${e.executionId}`,p)}let u;if(e.saved&&e.packDir)try{u=await Re(r,e.executionId,t)}catch(p){console.warn(`evidence: store install failed for ${e.executionId}`,p)}if(e.outputStemDir)try{await se(e.outputStemDir,{execution_id:e.executionId,run_kind:e.runKind,status:e.verdict,valid:a,at:new Date().toISOString()})}catch(p){console.warn(`evidence: execution-pointer append failed for ${e.executionId} (pack is sealed)`,p)}return{sealed:!0,valid:a,storePath:u}}import{release as Ae}from"os";import{execFileSync as lt}from"child_process";var $e=!1,F;function pt(){if(!$e)if($e=!0,process.platform==="darwin")try{F=lt("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{F=Ae()||void 0}else F=Ae()||void 0;return F}function pe(e){let t={os:K(process.platform)},r=pt();if(r&&(t.os_version=r),e.cdpBrowser){let n=/^([A-Za-z]+)\/(\d+)/.exec(e.cdpBrowser);n&&(t.browser=n[1].replace(/^Headless/,""),t.browser_version=n[2])}return e.resolution&&(t.resolution=e.resolution),t}async function Fe(e){if(e)try{let t=await fetch(`${e}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!t.ok)return;let r=await t.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function ft(e){let t;return()=>(t||(t=Fe(e)),t)}import{promises as fe}from"fs";import{basename as mt,join as O}from"path";var L=class e{constructor(t){this.opts=t}executionId;testId;definitionPath=null;accumulatedSteps=[];maxOrdinal=0;_packDirOverride;_attached=!1;get attached(){return this._attached}static async attach(t){let r=mt(t.packDir).replace(/\.evidence$/,""),n=new e({origin:"testrun",runKind:"author",pid:process.pid,title:t.testId,started:new Date().toISOString(),producerVersion:Ie,cwd:t.cwd});n.executionId=r,n.testId=t.testId,n._packDirOverride=t.packDir,n._attached=!0;let i=O(t.packDir,"tests",t.testId);return await fe.mkdir(i,{recursive:!0}),t.definition&&(await fe.writeFile(O(i,t.definition.path),t.definition.content),n.definitionPath=t.definition.path),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=J(),this.testId=this.opts.testmdRelPath?H(this.opts.testmdRelPath):U(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let t=this.opts.definition??null;return await Q({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,t,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),t&&(this.definitionPath=t.path),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?O(this.opts.packRootDir,`${this.executionId}.evidence`):m(this.executionId,this.opts.cwd)}get packTestDir(){return O(this.pack,"tests",this.testId)}async writeDefinition(t,r="test.md"){await fe.writeFile(O(this.packTestDir,r),t),this.definitionPath=r}noteSpawn(t){this.accumulatedSteps.push(...t.steps),this.maxOrdinal=Math.max(this.maxOrdinal,t.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}async writeResult(t){let r=ae(t.spawns),n=this.pack;await ie(n,this.testId,re({testId:this.testId,status:r,durationMs:t.durationMs,definitionPath:this.definitionPath,externalId:Y(t.externalIdInput),environment:W(t.runnerEnv,t.intentEnv),steps:t.steps,tags:t.tags}));let i=t.externalIdInput;return t.log&&(i.commit_id||i.test_id||i.testcase_id)&&t.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:i.commit_id??null,test_id:i.test_id??null,testcase_id:i.testcase_id??null,project_id:i.project_id??null,session_id:i.session_id??null,session_name:i.session_name??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function gt(e,t,r=X){try{let n=await r(e);if(n.aborted.length>0||n.removed.length>0)try{t?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as wt}from"fs";async function vt(e){try{let t=new L({origin:"inline",runKind:"author",pid:e.pid,title:e.title,started:new Date().toISOString(),producerVersion:e.producerVersion,surfaces:e.surfaces,objectiveOrName:e.objectiveOrName,sessionId:e.sessionId,cwd:e.cwd,packRootDir:e.packRootDir}),r=await t.start();return{session:t,...r,packDir:t.pack,spawns:[],startedAtMs:Date.now(),cwd:e.cwd}}catch(t){return console.warn("evidence: inline pack creation failed",t),null}}function ht(e,t,r){if(!e)return;e.session.noteSpawn(t),t.resolution&&(e.resolution=t.resolution);let n=(r?.per_flow_metadata??[]).map(i=>({resultCode:i?.result_code!=null?Number(i.result_code):null}));e.spawns.push({resultCode:r?.result_code!=null?Number(r.result_code):null,...n.length?{perFlow:n}:{}})}function yt(e){if(e)return{packTestDir:e.packTestDir,ordinalOffset:e.session.nextOrdinalOffset()}}async function xt(e,t){if(!e)return null;if(e.finalized)return e.finalized;let r=(n,i,o)=>t.log?t.log("warn",n,i,o):console.warn(`evidence: ${i}`,o??"");try{if(t.recordedTestPath)try{await e.session.writeDefinition(await wt.readFile(t.recordedTestPath,"utf8"))}catch(s){r("EVIDENCE_DEFINITION_FAILED","could not attach synthesized test.md",{error:String(s)})}let n=t.cdpBrowserCapture?await t.cdpBrowserCapture():void 0,i=await e.session.writeResult({steps:e.session.steps,spawns:e.spawns.length?e.spawns:[{resultCode:null}],externalIdInput:{...t.externalIdInput,execution_id:e.executionId},runnerEnv:pe({cdpBrowser:n,resolution:e.resolution}),intentEnv:{model:t.model,platform:"Desktop",platform_type:"web"},durationMs:t.durationMs??Date.now()-e.startedAtMs,log:t.log}),o=await le({executionId:e.executionId,testId:e.testId,saved:t.saved,runKind:"author",verdict:i,cwd:t.cwd??e.cwd,packDir:e.packDir,tuiLogPath:t.tuiLogPath,log:t.log,surface:"inline"});return e.finalized=o,t.log?.("info","EVIDENCE_SEALED","Inline pack sealed",{execution_id:e.executionId,verdict:i,valid:o.valid,pack:e.packDir,store_copy:o.storePath??null}),o}catch(n){return r("EVIDENCE_SEAL_FAILED","inline pack finalize failed",{error:String(n)}),null}}import{statSync as Rt,openSync as Pt,readSync as _t,closeSync as Dt}from"fs";import{basename as Ct,resolve as Ot}from"path";import{createServer as kt}from"http";import{createReadStream as It,promises as bt}from"fs";import{randomBytes as Et}from"crypto";var j="127.0.0.1";function je(e,t){if(!e)return null;let r=/^bytes=(\d*)-(\d*)$/.exec(e.trim());if(!r)return null;let[,n,i]=r;if(n===""&&i==="")return null;if(n===""){let a=Number(i);return a===0||t===0?"unsatisfiable":{start:Math.max(0,t-a),end:t-1}}let o=Number(n);if(o>=t)return"unsatisfiable";let s=i===""?t-1:Math.min(Number(i),t-1);return s<o?null:{start:o,end:s}}async function me(e){let t=Et(16).toString("hex"),r=kt((i,o)=>{St(i,o,e,t).catch(()=>o.destroy())});await new Promise((i,o)=>{r.once("error",o),r.listen(e.port??0,j,()=>{r.removeListener("error",o),i()})});let n=r.address().port;return{port:n,urlFor:i=>`http://${j}:${n}/${t}/${encodeURIComponent(i)}`,close:()=>new Promise(i=>{r.close(()=>i()),r.closeAllConnections()})}}async function St(e,t,r,n){let i=e.url??"/",o=w=>{try{r.log?.("warn","EVIDENCE_SERVE_DENIED",{reason:w,path:i})}catch{}};if(e.headers.host!==`${j}:${e.socket.localPort}`){o("host_mismatch"),t.writeHead(403).end();return}let s=e.headers.origin;if(s!==void 0&&!r.allowedOrigins.includes(s)){o("origin_denied"),t.writeHead(403).end();return}let a=s?{"Access-Control-Allow-Origin":s,Vary:"Origin","Access-Control-Expose-Headers":"Content-Range, Content-Length"}:{};if(e.method==="OPTIONS"){let w={...a,"Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Headers":"range","Access-Control-Max-Age":"86400"};e.headers["access-control-request-private-network"]==="true"&&(w["Access-Control-Allow-Private-Network"]="true"),t.writeHead(204,w).end();return}if(e.method!=="GET"&&e.method!=="HEAD"){t.writeHead(405,a).end();return}let u;try{let w=new URL(e.url??"/",`http://${j}`).pathname.split("/");if(w.length!==3||w[1]!==n){o("bad_token"),t.writeHead(404,a).end();return}u=decodeURIComponent(w[2])}catch{o("not_found"),t.writeHead(404,a).end();return}let p=r.packs.get(u);if(!p){o("not_found"),t.writeHead(404,a).end();return}let c;try{let w=await bt.stat(p);if(!w.isFile())throw new Error("not a file");c=w.size}catch{o("not_found"),t.writeHead(404,a).end();return}let l={...a,"Accept-Ranges":"bytes","Content-Type":"application/zip","Cache-Control":"no-store"};if(e.method==="HEAD"){t.writeHead(200,{...l,"Content-Length":String(c)}).end();return}let d=je(e.headers.range,c);if(d==="unsatisfiable"){o("unsatisfiable"),t.writeHead(416,{...a,"Content-Range":`bytes */${c}`}).end();return}let[f,h,R]=d===null?[0,c-1,200]:[d.start,d.end,206],ke={...l,"Content-Length":String(h-f+1)};if(R===206&&(ke["Content-Range"]=`bytes ${f}-${h}/${c}`),t.writeHead(R,ke),c===0){t.end();return}let N=It(p,{start:f,end:h});N.on("error",()=>t.destroy()),t.on("close",()=>N.destroy()),N.pipe(t)}function A(e,t){return(t??be(e).evidenceViewerUrl).replace(/\/+$/,"")}function ge(e,t){return`${t}/?pack=${encodeURIComponent(e)}`}function we(e){return`evidence: view locally with \`kane-cli evidence serve ${e}\``}async function Lt(e,t,r={}){let n=r.out??(c=>process.stdout.write(c+`
5
- `)),i=c=>(n(`error: ${c}`),2);if(t.env!=="prod"&&t.env!=="stage")return i(`invalid --env: ${String(t.env)} (expected prod or stage)`);if(t.port!==void 0&&(!Number.isInteger(t.port)||t.port<1||t.port>65535))return i("invalid --port: expected an integer 1-65535");let o;try{o=A(t.env,t.viewerUrl),new URL(o)}catch{return i(`invalid --viewer-url: ${t.viewerUrl}`)}if(e.length===0)return i("no pack paths given");let s=new Map;for(let c of e){let l=Ot(c),d;try{d=Rt(l)}catch{return i(`${c}: not found`)}if(d.isDirectory())return i(`${c}: is a directory \u2014 packs must be sealed .evidence files (run the execution to completion, or seal it, first)`);if(!d.isFile())return i(`${c}: not a regular file`);let f=Buffer.alloc(2),h=Pt(l,"r");try{_t(h,f,0,2,0)}finally{Dt(h)}if(f.toString("latin1")!=="PK")return i(`${c}: not a sealed evidence pack (zip magic missing)`);let R=Ct(l);if(s.has(R))return i(`duplicate pack basename: ${R} (URL names collide \u2014 rename one)`);s.set(R,l)}let a=r.log??((c,l,d)=>process.stderr.write(`warn: ${l} reason=${d.reason} path=${d.path}
6
- `)),u;try{u=await me({packs:s,allowedOrigins:[new URL(o).origin],port:t.port,log:a})}catch(c){return i(`could not bind 127.0.0.1${t.port?`:${t.port}`:""} \u2014 ${c.message}`)}n(`serving ${s.size} pack${s.size===1?"":"s"} on http://127.0.0.1:${u.port}`);for(let c of s.keys()){let l=u.urlFor(c);n(c),n(` pack ${l}`),n(` viewer ${ge(l,o)}`)}return n("press Ctrl-C to stop"),await(r.hold??At)(),await u.close(),0}function At(){return new Promise(e=>{let t=process.listeners("SIGINT");process.removeAllListeners("SIGINT"),process.once("SIGINT",()=>{for(let r of t)process.on("SIGINT",r);e()})})}import{promises as T}from"fs";import{tmpdir as jt}from"os";import{join as Ve,resolve as he}from"path";var $t=["error","prefer_first","prefer_latest","discard"];function Te(e){let t=e.replace(/-/g,"_");return $t.includes(t)?t:null}function Ne(e="error"){return g({packs:{require_status:"finalized",require_valid:"L1",on_ineligible:"abort"},tests:{on_collision:e},rules:[{file:"run.yaml",key:"run_id",must:"different",on_violation:"skip"},{file:"result.yaml",key:"external_id.project_id",must:"same",on_violation:"error"},{file:"result.yaml",key:"external_id.org_id",must:"same",on_violation:"error"}]},{lineWidth:-1})}async function ve(e){try{if(!e.isTTY){e.log(we(e.packPath));return}let t=A(e.env);await(e.renderPrompt??Ft)(e.packPath,t)}catch(t){try{e.log(`evidence view failed \u2014 ${t.message}`)}catch{}}}async function Ft(e,t){let r=await import("./react-QWOAB3TB.js"),{render:n}=await import("./build-JIKYOZUH.js"),{EvidenceViewOffer:i}=await import("./EvidenceViewOffer-HEBQ7C4H.js");await new Promise(o=>{let s=n(r.default.createElement(i,{packPath:e,viewerBase:t,onDone:()=>{s.unmount(),o()}}),{stdout:process.stderr,exitOnCtrlC:!1})})}async function Tt(e,t,r=process.cwd(),n={}){let i=n.out??(d=>process.stdout.write(d+`
7
- `)),o=n.err??(d=>process.stderr.write(d+`
8
- `)),s=d=>(o(`evidence merge: ${d}`),2);if(!t.runId)return s("--run-id is required (merged identity is the caller's fact)");if(t.rules&&t.onCollision)return s("--rules and --on-collision are mutually exclusive");let a="error";if(t.onCollision!==void 0&&(a=Te(t.onCollision),!a))return s(`invalid --on-collision: ${t.onCollision} (expected error | prefer-first | prefer-latest | discard)`);let u=[];for(let d of e){let f=await Nt(d,r);if(!f)return s(`no pack found for "${d}"`);u.push(f)}let p=t.out?he(r,t.out):m(t.runId,r),c=null,l;t.rules?l=he(r,t.rules):(c=await T.mkdtemp(Ve(jt(),"kane-merge-rules-")),l=Ve(c,"merge-rules.yaml"),await T.writeFile(l,Ne(a)));try{let d=await(n.mergeFn??Ee)(u,{runId:t.runId,out:p,rulesPath:l,title:t.title,finalize:t.finalize});return t.json?i(JSON.stringify(d)):Vt(i,d),d.output.finalized&&!t.json&&await(n.offer??ve)({packPath:p,env:t.env,isTTY:n.isTTY??(!!process.stdin.isTTY&&!!process.stderr.isTTY),log:o}),0}catch(d){let f=d instanceof Error?d.message:String(d);return d?.code==="ABORT"?(o(`evidence merge: aborted \u2014 ${f}`),1):s(f)}finally{c&&await T.rm(c,{recursive:!0,force:!0}).catch(()=>{})}}async function Nt(e,t){let r=he(t,e);if(await Me(r))return r;let n=m(e,t);return await Me(n)?n:null}async function Me(e){try{return await T.stat(e),!0}catch{return!1}}function Vt(e,t){let{packs:r,tests:n,output:i}=t;e(`evidence: merged ${n.merged} tests from ${r.eligible.length} packs -> ${i.path} (${i.finalized?"sealed":"live"})`);for(let o of r.skipped)e(` skipped ${o.runId}: ${o.rule} \u2014 ${o.reason}`);for(let o of n.collisions)e(` collision ${o.test}: winner ${o.winner} (${o.rule})`);for(let o of n.discarded)e(` discarded ${o}`)}import{copyFileSync as Mt,existsSync as ye,mkdirSync as Bt}from"fs";import{join as Be}from"path";function zt(e,t,r){try{let n=Be(e,"auteur","execution.json");if(ye(n))return!0;for(let i of t)if(!(!i||!ye(i)))return Bt(Be(e,"auteur"),{recursive:!0}),Mt(i,n),!0}catch(n){try{r?.("debug","EVIDENCE_BLOB_COPY_FAILED","auteur execution blob copy failed",{operation:"ensureAuteurExecution",source:t.find(i=>i&&ye(i))??null,error:n instanceof Error?n.message:String(n)})}catch{}}return!1}import{readFileSync as Ht}from"fs";import{join as Ut}from"path";function xe(e){let t=[],r=!0,n=o=>{if(o===null||typeof o!="object")return;let s=o;if(Array.isArray(s.operations))for(let a of s.operations){let u=a?.operation_id;typeof u=="string"&&u&&t.push(u)}if(Array.isArray(s.children)){s.content_type!=="generative_block"&&(r=!1);for(let a of s.children)n(a)}if(Array.isArray(s.branches)){r=!1;for(let a of s.branches){let u=a?.children;if(Array.isArray(u))for(let p of u)n(p)}}},i=e?.instructions;if(Array.isArray(i))for(let o of i)n(o);return{ids:t,linear:r}}function Yt(e){return xe(e).ids}function ze(e,t){let r=new Set(t.map(a=>a.action_id).filter(Boolean)),n=-1;for(let a of r){let u=e.indexOf(a);u>n&&(n=u)}let i=t.reduce((a,u)=>Math.max(a,u.ordinal),0),o=new Set,s=[];for(let a of e.slice(n+1))r.has(a)||o.has(a)||(o.add(a),s.push({id:a,ordinal:++i,status:"skipped",action_id:a}));return s}function He(e,t){let r=new Set(t),n=e.filter(o=>o.action_id);if(n.some(o=>r.has(o.action_id))||n.length>t.length)return null;let i=0;return e.map(o=>o.action_id?{...o,action_id:t[i++]}:o)}function Kt(e,t){if(e.length>t.length)return!1;for(let r=0;r<e.length;r++)if(t[r]!==e[r].action_id)return!1;return!0}function Wt(e,t,r,n=!0){if(t.length===0)return{steps:e,tail:[]};let i=(r&&n?He(e,t):null)??e,o=i.filter(s=>s.action_id);return o.length>0&&!Kt(o,t)?{steps:i,tail:[],unjoined:!0}:{steps:i,tail:ze(t,i)}}function Ue(e){try{let t=Ht(Ut(e,"auteur","execution.json"),"utf8");return xe(JSON.parse(t))}catch{return{ids:[],linear:!0}}}function Jt(e){return Ue(e).ids}export{E as a,M as b,B as c,z as d,H as e,U as f,Y as g,K as h,W as i,Je as j,C as k,m as l,J as m,Qe as n,G as o,X as p,Z as q,Q as r,et as s,tt as t,q as u,re as v,ne as w,ie as x,oe as y,se as z,rt as A,nt as B,ae as C,it as D,ce as E,de as F,ue as G,Le as H,le as I,pe as J,Fe as K,ft as L,L as M,gt as N,vt as O,ht as P,yt as Q,xt as R,je as S,me as T,A as U,ge as V,we as W,Lt as X,ve as Y,Tt as Z,zt as _,xe as $,Yt as aa,ze as ba,He as ca,Wt as da,Ue as ea,Jt as fa};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as S}from"./chunk-ZWAZ4QU4.js";import{x as o}from"./chunk-HFXQU7UZ.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as x,b as c,j as y}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var T=b(w(),1);var i=b(R(),1);function L(e){let t=e.decisions.filter(l=>l.kind==="replay").length,r=e.decisions.filter(l=>l.kind==="author").length,d=e.outcomes.filter(l=>l.status==="passed").length,p=e.outcomes.filter(l=>l.status==="failed").length,f=e.outcomes.filter(l=>l.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 (${d} passed, ${p} failed, ${f} skipped)`,k=`${t} replay \xB7 ${r} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,g=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",g=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 l=e.uploadResult?.testcaseId;u=l?`\u2713 pushed (testcase=${l})`:"\u2713 pushed",g=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,h=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",h=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,h=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:k,showRetries:C,retriesText:_,commitText:u,commitColor:g,artifactsText:v,uploadText:m,uploadColor:h}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,r=e.decisions.filter(s=>s.kind==="author").length,d=e.outcomes.filter(s=>s.status==="passed").length,p=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:d,failed:p,skipped:f,replay_decisions:t,author_decisions:r},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}}function A({data:e}){let t=L(e),r=[{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&&r.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),r.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),r.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),r.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:r})}function I({data:e}){let{exit:t}=y();return(0,T.useEffect)(()=>{let r=setTimeout(()=>t(),50);return()=>clearTimeout(r)},[t]),(0,i.jsx)(x,{flexDirection:"column",children:(0,i.jsx)(A,{data:e})})}export{L as a,O as b,A as c,I as d};
@@ -1,18 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as g,c as j,d as B,e as p,f as k,g as E,i as C,l as F,m as D,n as $,o as A,p as O}from"./chunk-Q2I65L2W.js";import{c as Z,d as T}from"./chunk-2YQ6TW77.js";import{a as P}from"./chunk-YCNCW4O4.js";import{h as M,i as R}from"./chunk-7KDNH6JP.js";import{a as v}from"./chunk-HFXQU7UZ.js";import{e as V}from"./chunk-UR6MHSHU.js";import{existsSync as f,mkdirSync as K,readFileSync as Q,renameSync as z,writeFileSync as X}from"fs";import{join as Y}from"path";function _e(e){F(g(e));let t=g(e);if(!f(t))return;let r=Y(t,"meta.json"),n=p(e);if(f(r)&&!f(n))try{K(B(e),{recursive:!0}),z(r,n)}catch(o){process.stderr.write(`warn: meta.json migration failed: ${o.message}
3
- `)}let s=E(e);if(f(s)){let o="python";try{let c=new P().load();c.code_export?.language&&(o=c.code_export.language)}catch{}let a=k(e,"playwright",o);if(!f(a))try{z(s,a)}catch(c){process.stderr.write(`warn: generated-code migration failed: ${c.message}
4
- `)}}if(f(n))try{let o=JSON.parse(Q(n,"utf8"));"md5sum"in o&&(delete o.md5sum,X(n,JSON.stringify(o,null,2)+`
5
- `,"utf8"))}catch(o){process.stderr.write(`warn: meta.json md5sum strip failed: ${o.message}
6
- `)}}async function xe(e){if(!e.isInteractive)return{recovered:!1};if(ee(e.creds))return{recovered:!1};let{SingleShotApp:t}=await import("./SingleShotApp-5TYM356H.js"),{ScrollbackProvider:r}=await import("./scrollback-6GINSTL2.js"),{render:n}=await import("./build-JIKYOZUH.js"),s=await import("./react-QWOAB3TB.js"),o={current:null},a={current:!1},{waitUntilExit:c,unmount:l}=n(s.default.createElement(r,null,s.default.createElement(t,{resultRef:o,mode:"login",loginCompleteRef:a})),{exitOnCtrlC:!1});R(()=>l()),await c();try{process.stdin.setRawMode?.(!1)}catch{}return process.stdout.write("\x1B[?25h"),a.current?{recovered:!0}:(M(0,"Startup gate cancelled"),{recovered:!1})}function ee(e){let t=e.getActiveProfile(),r=e.getDefaultEnv();if(!t||!!!(e.loadBasicAuth(t,r)||e.loadCredentials(t,r)))return!1;let s=e.loadProfileConfig(t,r)??{};return!!s.project_id&&!!s.folder_id}var q=V(Z(),1);import{existsSync as I,readFileSync as L,readdirSync as se,statSync as ie}from"fs";import{dirname as oe,isAbsolute as ae,join as y,relative as G,resolve as le,sep as h}from"path";import{createHash as ce}from"crypto";import{writeFileSync as te,mkdirSync as re,readFileSync as ne}from"fs";import{dirname as N}from"path";function U(e){try{return JSON.parse(ne(p(e),"utf8"))}catch{return null}}function Re(e){let t=p(e.sourcePath);try{re(N(t),{recursive:!0})}catch(n){return process.stderr.write(`
7
- \u26A0 Failed to create output directory.
8
- ${n.message}
9
- Path: ${N(t)}
10
-
11
- `),t}let r={commit_id:e.commitId};e.testId!==void 0&&(r.test_id=e.testId),e.testcaseId!==void 0&&(r.testcase_id=e.testcaseId),e.projectId!==void 0&&(r.project_id=e.projectId),e.folderId!==void 0&&(r.folder_id=e.folderId),e.orgId!==void 0&&(r.org_id=e.orgId),e.sessionName!==void 0&&(r.session_name=e.sessionName),e.plan!==void 0&&(r.plan=e.plan);try{te(t,JSON.stringify(r,null,2)+`
12
- `,"utf8")}catch(n){process.stderr.write(`
13
- \u26A0 Failed to write meta.json.
14
- ${n.message}
15
- Path: ${t}
16
-
17
- `)}return t}var S="testmd-bundle.json",u=class extends Error{constructor(t){super(t),this.name="BundleUsageError"}},J=e=>e.split(h).join("/");function x(e){if(!I(e))return[];let t=[];for(let r of se(e).sort()){let n=y(e,r);ie(n).isDirectory()?t.push(...x(n)):t.push(n)}return t}function de(e){let t=e.map(n=>oe(n).split(h)),r=t[0];for(let n of t.slice(1)){let s=0;for(;s<r.length&&s<n.length&&r[s]===n[s];)s++;r=r.slice(0,s)}return r.join(h)||h}function ue(e){for(let t of e){let r=D(t,L(t,"utf8"));for(let n of r.steps)if(n.body.kind==="import_ref"&&ae(n.body.path))throw new u(`bundle sync: absolute @import is not portable after unzip: ${t} step ${n.index} (@import ${n.body.path})`)}}function W(e){let t=le(e),r=U(t);if(!r?.commit_id||!r?.test_id)throw new u(`bundle sync: ${t} is not authored \u2014 run \`kane-cli testmd run\` first (output-<stem>/.internal/meta.json needs commit_id + test_id)`);let n;try{n=A(t)}catch(i){throw i instanceof $?new u(`bundle sync: ${i.message}`):i}let s=[t];for(let i of n.steps)for(let d of i.trace.slice(1))s.includes(d.file)||s.push(d.file);ue(s);let o=[];for(let i of n.steps)for(let d=2;d<=i.trace.length;d++){let b=O(i.trace.slice(0,d));o.includes(b)||o.push(b)}let a=[...s],c=i=>{I(i)&&a.push(i)};c(j(t)),a.push(p(t)),c(y(g(t),".internal","execution.json")),a.push(...x(C(t)));for(let i of o)c(y(i,"Result.md")),a.push(...x(y(i,".internal","steps")));let l=de(a);if(I(y(l,S)))throw new u(`bundle sync: a real file named ${S} exists at the zip root (${l}) \u2014 it would collide with the generated manifest`);let w=a.map(i=>{let d=L(i);return{abs:i,rel:J(G(l,i)),sha256:ce("sha256").update(d).digest("hex"),bytes:d.length}}).sort((i,d)=>i.rel<d.rel?-1:1),m=J(G(l,t)),H={schema_version:1,entry:m,commit_id:r.commit_id,test_id:r.test_id,testcase_id:r.testcase_id??null,project_id:r.project_id??null,folder_id:r.folder_id??null,org_id:r.org_id??null,created_at:new Date().toISOString(),producer:{name:"kane-cli",version:v},files:w.map(i=>({path:i.rel,sha256:i.sha256,bytes:i.bytes}))};return{zipRoot:l,entry:m,files:w,manifest:H}}var _=e=>e instanceof Error?e.message:String(e);function pe(e){return new Promise((t,r)=>{let n=(0,q.default)("zip",{zlib:{level:6}}),s=[];n.on("data",o=>s.push(o)),n.on("error",r),n.on("end",()=>t(Buffer.concat(s))),n.append(JSON.stringify(e.manifest,null,2)+`
18
- `,{name:S});for(let o of e.files)n.file(o.abs,{name:o.rel});n.finalize()})}async function fe(e){let{plan:t,controller:r,testId:n,sessionId:s,commitId:o}=e,a;try{a=await pe(t)}catch(l){return{ok:!1,stage:"zip",error:_(l)}}let c;try{let l={key:"testmd",content_type:"application/zip",filename:`${o}-testmd.zip`},m=(await r.getPresignedUrls(n,s,[l])).urls?.testmd?.upload_url;if(!m)return{ok:!1,stage:"presign",error:"presign response missing testmd upload_url"};c=m}catch(l){return{ok:!1,stage:"presign",error:_(l)}}try{await T(c,a,"application/zip")}catch(l){return{ok:!1,stage:"upload",error:_(l)}}return{ok:!0,bytes:a.length}}async function Ue(e){let t;try{t=W(e.sourcePath)}catch(r){return r instanceof u?{ok:!1,stage:"collect",error:r.message}:{ok:!1,stage:"collect",error:_(r)}}return fe({...e,plan:t})}function Ge(e){return e.shouldUploadPipeline&&e.uploadSucceeded&&!!e.metaCommitId&&!!e.metaTestId}export{_e as a,xe as b,U as c,Re as d,Ue as e,Ge as f};