@testmuai/kane-cli 0.3.3 → 0.3.4

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 (64) hide show
  1. package/dist/{ChromeProfilePicker-J6QIIHIE.js → ChromeProfilePicker-DLK4RTFZ.js} +1 -1
  2. package/dist/{CliFeedbackPrompt-SEH4MXTF.js → CliFeedbackPrompt-HNB4SHPG.js} +1 -1
  3. package/dist/{CliUploadProgress-U6QLD76Y.js → CliUploadProgress-6KB7IKFV.js} +1 -1
  4. package/dist/{ConfigView-5ZCHVYM2.js → ConfigView-LMW2B764.js} +1 -1
  5. package/dist/FolderPicker-JBOPRMPT.js +2 -0
  6. package/dist/{HelpView-3ESCWBPB.js → HelpView-6HAZNUNN.js} +1 -1
  7. package/dist/{InfoBox-OVAOOQHC.js → InfoBox-6OL6MFL6.js} +1 -1
  8. package/dist/{LinksBox-P3VETMP6.js → LinksBox-Q6L6WY53.js} +1 -1
  9. package/dist/{ProfilesView-UBVNEYVE.js → ProfilesView-ERKUUJWU.js} +1 -1
  10. package/dist/ProjectPicker-Y4AXSEVW.js +2 -0
  11. package/dist/{SaveSessionPrompt-S5RCU5DX.js → SaveSessionPrompt-GKITQ3KR.js} +1 -1
  12. package/dist/SingleShotApp-MKACYNG2.js +2 -0
  13. package/dist/{SummaryBox-M4UFKKMD.js → SummaryBox-MB2JQIXZ.js} +1 -1
  14. package/dist/{TestMdRunView-PI433EGP.js → TestMdRunView-UMTYIRAE.js} +1 -1
  15. package/dist/{WhoamiView-VJBEYTCF.js → WhoamiView-UF5WWELM.js} +1 -1
  16. package/dist/{changelog-EFAQANXW.js → changelog-JFMKP277.js} +1 -1
  17. package/dist/{chunk-XM4H4TJD.js → chunk-535PXOLA.js} +1 -1
  18. package/dist/{chunk-N7YALZKA.js → chunk-6566EYUL.js} +2 -2
  19. package/dist/{chunk-WM6GZFTC.js → chunk-6JONCMIS.js} +1 -1
  20. package/dist/chunk-ANOIEEVS.js +13 -0
  21. package/dist/{chunk-NOQKUOEK.js → chunk-BNLJNHAZ.js} +1 -1
  22. package/dist/{chunk-L3MOXBKE.js → chunk-CB4WEGVB.js} +1 -1
  23. package/dist/{chunk-HNIH3GSQ.js → chunk-CBDUXGVQ.js} +1 -1
  24. package/dist/chunk-EJR3WRTW.js +2 -0
  25. package/dist/{chunk-G5HHHYH7.js → chunk-FOMM3MYV.js} +1 -1
  26. package/dist/{chunk-TL4SB7MQ.js → chunk-FOT6AMNP.js} +1 -1
  27. package/dist/{chunk-H33BV5YV.js → chunk-HZUU7USC.js} +1 -1
  28. package/dist/{chunk-IROWNPDG.js → chunk-KA23QNUA.js} +1 -1
  29. package/dist/chunk-LIJX5PIV.js +2 -0
  30. package/dist/{chunk-RURXFEOD.js → chunk-LJA5UGU6.js} +1 -1
  31. package/dist/{chunk-FAPS5ACQ.js → chunk-LT4VR7MQ.js} +2 -2
  32. package/dist/{chunk-TEH6AVF4.js → chunk-MIZDUPND.js} +1 -1
  33. package/dist/{chunk-U4QMSR5Z.js → chunk-ND5EFB3C.js} +1 -1
  34. package/dist/{chunk-RHXWME7G.js → chunk-OFX2RC33.js} +1 -1
  35. package/dist/{chunk-IXWVTWOR.js → chunk-PQLKQKQH.js} +1 -1
  36. package/dist/{chunk-D4P6GLSX.js → chunk-RHLK4XYO.js} +1 -1
  37. package/dist/{chunk-YF4OL463.js → chunk-T3JEMMTA.js} +1 -1
  38. package/dist/{chunk-YVLFHMUW.js → chunk-TI5CHPPN.js} +1 -1
  39. package/dist/{chunk-SR5UDUMJ.js → chunk-TXUKXLYR.js} +1 -1
  40. package/dist/{chunk-UFNKCPUB.js → chunk-V7M72PLH.js} +9 -9
  41. package/dist/{chunk-J3SCNSXX.js → chunk-VKPAHDXM.js} +1 -1
  42. package/dist/chunk-VZIBZDS2.js +2 -0
  43. package/dist/{chunk-PNQ5YMED.js → chunk-YEV3OBEO.js} +1 -1
  44. package/dist/{chunk-ZYVYAIBS.js → chunk-ZCHXYZGV.js} +1 -1
  45. package/dist/{chunk-FSIJOBVB.js → chunk-ZYJ4HQAI.js} +1 -1
  46. package/dist/index.js +15 -15
  47. package/dist/{logging-AIQHWRNQ.js → logging-M7EYIZTV.js} +1 -1
  48. package/dist/{login-flow-E6WMJ25A.js → login-flow-THKISL7X.js} +1 -1
  49. package/dist/{persist-recorded-session-V5DXMRKC.js → persist-recorded-session-CDT2I4SH.js} +1 -1
  50. package/dist/{pipeline-EUZIM2ZO.js → pipeline-IF775CGJ.js} +1 -1
  51. package/dist/{recording-banner-7ZKIORL5.js → recording-banner-YFDZ6CJ4.js} +1 -1
  52. package/dist/{run-test-md-BQS5SZ7E.js → run-test-md-6ELVP2MT.js} +19 -19
  53. package/dist/{testmd-actions-322GQYAH.js → testmd-actions-D3TJX2Q4.js} +2 -2
  54. package/dist/{tms-client-XOARLBEP.js → tms-client-T3EAD4Y7.js} +1 -1
  55. package/dist/{validate-basic-XKTSGLFO.js → validate-basic-LTATIAAW.js} +1 -1
  56. package/dist/{version-check-LUCKH72U.js → version-check-Q6M7YAML.js} +1 -1
  57. package/package.json +5 -5
  58. package/dist/FolderPicker-VYJDEDN7.js +0 -2
  59. package/dist/ProjectPicker-NJKUWRET.js +0 -2
  60. package/dist/SingleShotApp-WOJWOQSV.js +0 -2
  61. package/dist/chunk-4QLJMIBA.js +0 -13
  62. package/dist/chunk-53K3BK7I.js +0 -2
  63. package/dist/chunk-JPEICMHK.js +0 -2
  64. package/dist/chunk-YZTCCQHR.js +0 -2
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c}from"./chunk-TEH6AVF4.js";import"./chunk-YVLFHMUW.js";import"./chunk-HCBYKLMW.js";import"./chunk-TL4SB7MQ.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{c as ChromeProfilePicker,b as formatChromeProfileLine,a as listChromeProfiles};
2
+ import{a,b,c}from"./chunk-MIZDUPND.js";import"./chunk-TI5CHPPN.js";import"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{c as ChromeProfilePicker,b as formatChromeProfileLine,a as listChromeProfiles};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as r}from"./chunk-RHXWME7G.js";import"./chunk-YVLFHMUW.js";import"./chunk-HCBYKLMW.js";import"./chunk-TL4SB7MQ.js";import{c as e}from"./chunk-C44QQJR4.js";import{a as i}from"./chunk-6YGTRKDT.js";import{e as m}from"./chunk-UR6MHSHU.js";var t=m(i(),1);async function d(){return new Promise(o=>{let c=e(t.default.createElement(r,{onSubmit:n=>{c.unmount(),o(n)}}),{stdout:process.stderr,exitOnCtrlC:!1})})}export{d as renderFeedbackPrompt};
2
+ import{a as r}from"./chunk-OFX2RC33.js";import"./chunk-TI5CHPPN.js";import"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import{c as e}from"./chunk-C44QQJR4.js";import{a as i}from"./chunk-6YGTRKDT.js";import{e as m}from"./chunk-UR6MHSHU.js";var t=m(i(),1);async function d(){return new Promise(o=>{let c=e(t.default.createElement(r,{onSubmit:n=>{c.unmount(),o(n)}}),{stdout:process.stderr,exitOnCtrlC:!1})})}export{d as renderFeedbackPrompt};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as P,b as g,c as f}from"./chunk-RURXFEOD.js";import"./chunk-XM4H4TJD.js";import{a as c}from"./chunk-HCBYKLMW.js";import"./chunk-TL4SB7MQ.js";import{c as d}from"./chunk-C44QQJR4.js";import{a as h}from"./chunk-6YGTRKDT.js";import{e as p}from"./chunk-UR6MHSHU.js";var e=p(h(),1);var m=p(c(),1);function w({pipeline:t,buildShareUrl:r,onDone:o}){let[n,i]=(0,e.useState)(P()),[S,l]=(0,e.useState)("uploading"),[U,R]=(0,e.useState)(),[C,E]=(0,e.useState)();return(0,e.useEffect)(()=>{let x=t.config.onProgress;t.config.onProgress=(s,u,a)=>{x(s,u,a),i(y=>g(y,s,u,a))},t.execute().then(s=>{s.success?(R(r?.(s)),l("success")):(E(s.error),l("failed")),setTimeout(()=>o(s),1500)})},[]),(0,m.jsx)(f,{steps:n,status:S,testUrl:U,error:C})}async function O(t,r){return new Promise(o=>{let n=d(e.default.createElement(w,{pipeline:t,buildShareUrl:r,onDone:i=>{n.unmount(),o(i)}}),{stdout:process.stderr,exitOnCtrlC:!1})})}export{O as renderUploadProgress};
2
+ import{a as P,b as g,c as f}from"./chunk-LJA5UGU6.js";import"./chunk-535PXOLA.js";import{a as c}from"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import{c as d}from"./chunk-C44QQJR4.js";import{a as h}from"./chunk-6YGTRKDT.js";import{e as p}from"./chunk-UR6MHSHU.js";var e=p(h(),1);var m=p(c(),1);function w({pipeline:t,buildShareUrl:r,onDone:o}){let[n,i]=(0,e.useState)(P()),[S,l]=(0,e.useState)("uploading"),[U,R]=(0,e.useState)(),[C,E]=(0,e.useState)();return(0,e.useEffect)(()=>{let x=t.config.onProgress;t.config.onProgress=(s,u,a)=>{x(s,u,a),i(y=>g(y,s,u,a))},t.execute().then(s=>{s.success?(R(r?.(s)),l("success")):(E(s.error),l("failed")),setTimeout(()=>o(s),1500)})},[]),(0,m.jsx)(f,{steps:n,status:S,testUrl:U,error:C})}async function O(t,r){return new Promise(o=>{let n=d(e.default.createElement(w,{pipeline:t,buildShareUrl:r,onDone:i=>{n.unmount(),o(i)}}),{stdout:process.stderr,exitOnCtrlC:!1})})}export{O as renderUploadProgress};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as d,b as l,c as r}from"./chunk-SR5UDUMJ.js";import{a as m}from"./chunk-HCBYKLMW.js";import{t as o}from"./chunk-TL4SB7MQ.js";import{a as t,j as u}from"./chunk-C44QQJR4.js";import{a as C}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var f=n(C(),1);var e=n(m(),1);function D({model:c,authLabel:s,profile:g,env:p,defaultUrl:i,projectId:b,folderId:v,windowSize:x,chromeProfile:w}){let{exit:a}=u();return(0,f.useEffect)(()=>{let B=setTimeout(()=>a(),50);return()=>clearTimeout(B)},[a]),(0,e.jsx)(t,{flexDirection:"column",children:(0,e.jsx)(d,{title:"Configuration",children:(0,e.jsxs)(t,{flexDirection:"column",paddingY:1,children:[(0,e.jsx)(r,{label:"Auth"}),(0,e.jsx)(l,{label:" method",value:s}),(0,e.jsx)(l,{label:" profile",value:g}),(0,e.jsx)(l,{label:" env",value:p}),(0,e.jsx)(r,{label:"Defaults"}),(0,e.jsx)(l,{label:" url",value:i??"(none)",valueColor:i?o.cyan:o.dimmed}),(0,e.jsx)(l,{label:" model",value:c}),(0,e.jsx)(l,{label:" window",value:x}),(0,e.jsx)(l,{label:" project",value:b??"(none)"}),(0,e.jsx)(l,{label:" folder",value:v??"(none)"}),(0,e.jsx)(r,{label:"Paths"}),(0,e.jsx)(l,{label:" chrome",value:w,valueColor:o.dimmed})]})})})}export{D as ConfigView};
2
+ import{a as d,b as l,c as r}from"./chunk-TXUKXLYR.js";import{a as m}from"./chunk-HCBYKLMW.js";import{t as o}from"./chunk-FOT6AMNP.js";import{a as t,j as u}from"./chunk-C44QQJR4.js";import{a as C}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var f=n(C(),1);var e=n(m(),1);function D({model:c,authLabel:s,profile:g,env:p,defaultUrl:i,projectId:b,folderId:v,windowSize:x,chromeProfile:w}){let{exit:a}=u();return(0,f.useEffect)(()=>{let B=setTimeout(()=>a(),50);return()=>clearTimeout(B)},[a]),(0,e.jsx)(t,{flexDirection:"column",children:(0,e.jsx)(d,{title:"Configuration",children:(0,e.jsxs)(t,{flexDirection:"column",paddingY:1,children:[(0,e.jsx)(r,{label:"Auth"}),(0,e.jsx)(l,{label:" method",value:s}),(0,e.jsx)(l,{label:" profile",value:g}),(0,e.jsx)(l,{label:" env",value:p}),(0,e.jsx)(r,{label:"Defaults"}),(0,e.jsx)(l,{label:" url",value:i??"(none)",valueColor:i?o.cyan:o.dimmed}),(0,e.jsx)(l,{label:" model",value:c}),(0,e.jsx)(l,{label:" window",value:x}),(0,e.jsx)(l,{label:" project",value:b??"(none)"}),(0,e.jsx)(l,{label:" folder",value:v??"(none)"}),(0,e.jsx)(r,{label:"Paths"}),(0,e.jsx)(l,{label:" chrome",value:w,valueColor:o.dimmed})]})})})}export{D as ConfigView};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b}from"./chunk-T3JEMMTA.js";import"./chunk-YCCUBQY4.js";import"./chunk-EJR3WRTW.js";import"./chunk-CBDUXGVQ.js";import"./chunk-TI5CHPPN.js";import"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-LIJX5PIV.js";import"./chunk-KKZRPFWO.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{b as FolderPicker,a as formatFolderLine};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as T}from"./chunk-HCBYKLMW.js";import{a as f,b as i,t}from"./chunk-TL4SB7MQ.js";import{a as n,b as o,j as h,k as x}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as p}from"./chunk-UR6MHSHU.js";var w=p(b(),1);var e=p(T(),1),S="https://www.testmuai.com/support/docs/kane-cli-introduction",v="https://github.com/LambdaTest/kane-cli/issues";function L(){let{exit:r}=h(),{stdout:c}=x(),l=c?.columns??80;return(0,w.useEffect)(()=>{let g=setTimeout(()=>r(),50);return()=>clearTimeout(g)},[r]),(0,e.jsxs)(n,{flexDirection:"column",children:[(0,e.jsxs)(n,{paddingX:1,paddingTop:1,flexDirection:"column",children:[(0,e.jsx)(o,{color:t.purple,bold:!0,children:i}),(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Browser automation powered by AI "}),(0,e.jsxs)(o,{color:t.muted,children:[" v",f]})]})]}),(0,e.jsx)(o,{children:" "}),(0,e.jsxs)(d,{title:"USAGE",children:[(0,e.jsx)(m,{cmd:`${i}`,desc:"Single-shot prompt (no args, TTY)"}),(0,e.jsx)(m,{cmd:`${i} --tui`,desc:"Full interactive TUI",highlight:!0}),(0,e.jsx)(m,{cmd:`${i} run "<objective>"`,desc:"Inline objective"}),(0,e.jsx)(m,{cmd:`${i} testmd run <path>.md`,desc:"Replay a saved *_test.md file"})]}),(0,e.jsxs)(d,{title:"HELP",children:[(0,e.jsx)(m,{cmd:`${i} --help`,desc:"Show this help (long form)"}),(0,e.jsx)(m,{cmd:`${i} -h`,desc:"Show this help (short form)"}),(0,e.jsx)(m,{cmd:`${i} help`,desc:"Show this help (subcommand form)"}),(0,e.jsxs)(n,{marginLeft:2,marginTop:0,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dimmed,children:["These are the only supported help invocations. Anything else (e.g. ",(0,e.jsx)(o,{color:t.cyan,children:"-help"}),") is an unknown flag."]}),(0,e.jsxs)(o,{color:t.dimmed,children:["Terminal tab-completion is a shell feature; ",i," does not ship shell-completion scripts, so any flag your shell suggests is a generic guess \u2014 not from ",i,"."]})]})]}),(0,e.jsxs)(d,{title:"COMMANDS",children:[(0,e.jsx)(a,{cmd:"run",args:"<objective>",desc:"Run an objective (inline string)",highlight:!0}),(0,e.jsx)(a,{cmd:"testmd",args:"run|list|status|delete|export",desc:"Manage *_test.md files"}),(0,e.jsx)(a,{cmd:"login",desc:"Auth setup (interactive, --oauth, or --username)"}),(0,e.jsx)(a,{cmd:"logout",desc:"Revoke tokens + delete profile"}),(0,e.jsx)(a,{cmd:"whoami",desc:"Show authenticated identity"}),(0,e.jsx)(a,{cmd:"config",args:"show|set-\u2026|reset",desc:"Manage configuration"}),(0,e.jsx)(a,{cmd:"profiles",args:"list|switch|delete",desc:"Manage auth profiles"}),(0,e.jsx)(a,{cmd:"changelog",args:"[--all]",desc:"Show recent release notes"})]}),(0,e.jsxs)(d,{title:"TESTMD ACTIONS",children:[(0,e.jsx)(a,{cmd:"testmd run",args:"<path>",desc:"Replay a saved *_test.md file",highlight:!0}),(0,e.jsx)(a,{cmd:"testmd list",desc:"List *_test.md files in cwd (recursive)"}),(0,e.jsx)(a,{cmd:"testmd status",args:"<path>",desc:"Print local meta.json for a test"}),(0,e.jsx)(a,{cmd:"testmd delete",args:"<path>",desc:"Remove output-<stem>/ and the source file"}),(0,e.jsx)(a,{cmd:"testmd export",args:"<path> --language <py|js>",desc:"Generate standalone Playwright code"})]}),(0,e.jsxs)(d,{title:"RUN FLAGS",children:[(0,e.jsx)(s,{long:"--max-steps",arg:"<n>",desc:"Max agent steps (default: 30)"}),(0,e.jsx)(s,{long:"--timeout",arg:"<sec>",desc:"Kill run after N seconds"}),(0,e.jsx)(s,{long:"--headless",desc:"No visible browser window"}),(0,e.jsx)(s,{long:"--mode",arg:"<action|testing>",desc:"Run mode (default: testing)"}),(0,e.jsx)(s,{long:"--name",arg:"<name>",desc:"Persist session under this name"}),(0,e.jsx)(s,{long:"--variables",arg:"<json>",desc:"Inline variables as JSON"}),(0,e.jsx)(s,{long:"--variables-file",arg:"<path>",desc:"Load variables from file"}),(0,e.jsx)(s,{long:"--session-context",arg:"<json>",desc:"Prior runs context JSON"}),(0,e.jsx)(s,{long:"--global-context",arg:"<file>",desc:"Override global context markdown"}),(0,e.jsx)(s,{long:"--local-context",arg:"<file>",desc:"Override local context markdown"}),(0,e.jsx)(s,{long:"--ws-endpoint",arg:"<url>",desc:"Remote browser (LambdaTest)"}),(0,e.jsx)(s,{long:"--cdp-endpoint",arg:"<url>",desc:"Connect to existing Chrome CDP"}),(0,e.jsx)(s,{long:"--task-skills",desc:"Domain-specific task skills (experimental)"}),(0,e.jsx)(s,{long:"--code-export",desc:"Generate code export after upload"}),(0,e.jsx)(s,{long:"--code-language",arg:"<lang>",desc:"Code export language: python | javascript"}),(0,e.jsx)(s,{long:"--skip-code-validation",desc:"Skip post-codegen validation"}),(0,e.jsx)(s,{long:"--username",arg:"<user>",desc:"Basic auth (skip OAuth)"}),(0,e.jsx)(s,{long:"--access-key",arg:"<key>",desc:"Basic auth access key"}),(0,e.jsx)(s,{long:"--env",arg:"<name>",desc:"Environment (prod or stage)"}),(0,e.jsx)(s,{long:"--agent",desc:"NDJSON output (no UI)",highlight:!0})]}),(0,e.jsxs)(d,{title:"EXAMPLES",children:[(0,e.jsx)(u,{label:"Inline objective",cmd:`${i} run "Search for laptop"`}),(0,e.jsx)(u,{label:"Replay a saved test",cmd:`${i} testmd run smoke_test.md`}),(0,e.jsx)(u,{label:"Variables",cmd:`${i} run "Login as {{user}}" --variables '{"user":{"value":"alice"}}'`}),(0,e.jsx)(u,{label:"Agent mode (NDJSON)",cmd:`${i} run "Add to cart" --agent | jq .status`})]}),(0,e.jsx)(d,{title:"TEST FILES",children:(0,e.jsxs)(n,{marginLeft:2,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dimmed,children:[(0,e.jsx)(o,{color:t.cyan,children:"*_test.md"})," \u2014 markdown test files with YAML frontmatter and ",(0,e.jsx)(o,{color:t.cyan,children:"## "}),"step headings."]}),(0,e.jsxs)(o,{color:t.dimmed,children:["Run with ",(0,e.jsxs)(o,{color:t.cyan,children:[i," testmd run path/to/foo_test.md"]}),". (`.md` paths are not accepted by `",i," run`.)"]}),(0,e.jsxs)(o,{color:t.dimmed,children:["Sessions you run in TUI auto-save to ",(0,e.jsx)(o,{color:t.cyan,children:"<cwd>/.testmuai/tests/<name>_test.md"})," (testing mode prompts on exit)."]})]})}),(0,e.jsxs)(n,{flexDirection:"column",marginTop:0,paddingX:1,children:[(0,e.jsx)(o,{color:t.muted,children:"\u2500".repeat(Math.min(l-2,70))}),(0,e.jsxs)(n,{gap:3,children:[(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Docs "}),(0,e.jsx)(o,{color:t.cyan,underline:!0,children:S})]}),(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Bugs "}),(0,e.jsx)(o,{color:t.cyan,underline:!0,children:v})]})]})]}),(0,e.jsx)(o,{children:" "})]})}function d({title:r,children:c}){return(0,e.jsxs)(n,{flexDirection:"column",marginBottom:1,children:[(0,e.jsx)(n,{marginLeft:1,children:(0,e.jsx)(o,{bold:!0,color:t.dimmed,children:r})}),c]})}function m({cmd:r,desc:c,highlight:l}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsxs)(n,{width:40,children:[(0,e.jsx)(o,{color:t.dimmed,children:"$ "}),(0,e.jsx)(o,{color:l?t.purple:t.cyan,children:r})]}),(0,e.jsx)(o,{color:t.dimmed,children:c})]})}function a({cmd:r,args:c,desc:l,highlight:g}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsx)(n,{width:16,children:(0,e.jsx)(o,{color:g?t.purple:t.green,bold:!0,children:r})}),(0,e.jsx)(n,{width:32,children:c?(0,e.jsx)(o,{color:t.dimmed,children:c}):null}),(0,e.jsx)(o,{color:t.dimmed,children:l})]})}function s({long:r,arg:c,desc:l,highlight:g}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsxs)(n,{width:30,children:[(0,e.jsx)(o,{color:g?t.purple:t.cyan,children:r}),c&&(0,e.jsxs)(o,{color:t.dimmed,children:[" ",c]})]}),(0,e.jsx)(o,{color:t.dimmed,children:l})]})}function u({label:r,cmd:c}){return(0,e.jsxs)(n,{marginLeft:2,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dimmed,children:["# ",r]}),(0,e.jsxs)(o,{color:t.cyan,children:["$ ",c]})]})}export{L as HelpView};
2
+ import{a as T}from"./chunk-HCBYKLMW.js";import{a as f,b as i,t}from"./chunk-FOT6AMNP.js";import{a as n,b as o,j as h,k as x}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as p}from"./chunk-UR6MHSHU.js";var w=p(b(),1);var e=p(T(),1),S="https://www.testmuai.com/support/docs/kane-cli-introduction",v="https://github.com/LambdaTest/kane-cli/issues";function L(){let{exit:r}=h(),{stdout:c}=x(),l=c?.columns??80;return(0,w.useEffect)(()=>{let g=setTimeout(()=>r(),50);return()=>clearTimeout(g)},[r]),(0,e.jsxs)(n,{flexDirection:"column",children:[(0,e.jsxs)(n,{paddingX:1,paddingTop:1,flexDirection:"column",children:[(0,e.jsx)(o,{color:t.purple,bold:!0,children:i}),(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Browser automation powered by AI "}),(0,e.jsxs)(o,{color:t.muted,children:[" v",f]})]})]}),(0,e.jsx)(o,{children:" "}),(0,e.jsxs)(d,{title:"USAGE",children:[(0,e.jsx)(m,{cmd:`${i}`,desc:"Single-shot prompt (no args, TTY)"}),(0,e.jsx)(m,{cmd:`${i} --tui`,desc:"Full interactive TUI",highlight:!0}),(0,e.jsx)(m,{cmd:`${i} run "<objective>"`,desc:"Inline objective"}),(0,e.jsx)(m,{cmd:`${i} testmd run <path>.md`,desc:"Replay a saved *_test.md file"})]}),(0,e.jsxs)(d,{title:"HELP",children:[(0,e.jsx)(m,{cmd:`${i} --help`,desc:"Show this help (long form)"}),(0,e.jsx)(m,{cmd:`${i} -h`,desc:"Show this help (short form)"}),(0,e.jsx)(m,{cmd:`${i} help`,desc:"Show this help (subcommand form)"}),(0,e.jsxs)(n,{marginLeft:2,marginTop:0,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dimmed,children:["These are the only supported help invocations. Anything else (e.g. ",(0,e.jsx)(o,{color:t.cyan,children:"-help"}),") is an unknown flag."]}),(0,e.jsxs)(o,{color:t.dimmed,children:["Terminal tab-completion is a shell feature; ",i," does not ship shell-completion scripts, so any flag your shell suggests is a generic guess \u2014 not from ",i,"."]})]})]}),(0,e.jsxs)(d,{title:"COMMANDS",children:[(0,e.jsx)(a,{cmd:"run",args:"<objective>",desc:"Run an objective (inline string)",highlight:!0}),(0,e.jsx)(a,{cmd:"testmd",args:"run|list|status|delete|export",desc:"Manage *_test.md files"}),(0,e.jsx)(a,{cmd:"login",desc:"Auth setup (interactive, --oauth, or --username)"}),(0,e.jsx)(a,{cmd:"logout",desc:"Revoke tokens + delete profile"}),(0,e.jsx)(a,{cmd:"whoami",desc:"Show authenticated identity"}),(0,e.jsx)(a,{cmd:"config",args:"show|set-\u2026|reset",desc:"Manage configuration"}),(0,e.jsx)(a,{cmd:"profiles",args:"list|switch|delete",desc:"Manage auth profiles"}),(0,e.jsx)(a,{cmd:"changelog",args:"[--all]",desc:"Show recent release notes"})]}),(0,e.jsxs)(d,{title:"TESTMD ACTIONS",children:[(0,e.jsx)(a,{cmd:"testmd run",args:"<path>",desc:"Replay a saved *_test.md file",highlight:!0}),(0,e.jsx)(a,{cmd:"testmd list",desc:"List *_test.md files in cwd (recursive)"}),(0,e.jsx)(a,{cmd:"testmd status",args:"<path>",desc:"Print local meta.json for a test"}),(0,e.jsx)(a,{cmd:"testmd delete",args:"<path>",desc:"Remove output-<stem>/ and the source file"}),(0,e.jsx)(a,{cmd:"testmd export",args:"<path> --language <py|js>",desc:"Generate standalone Playwright code"})]}),(0,e.jsxs)(d,{title:"RUN FLAGS",children:[(0,e.jsx)(s,{long:"--max-steps",arg:"<n>",desc:"Max agent steps (default: 30)"}),(0,e.jsx)(s,{long:"--timeout",arg:"<sec>",desc:"Kill run after N seconds"}),(0,e.jsx)(s,{long:"--headless",desc:"No visible browser window"}),(0,e.jsx)(s,{long:"--mode",arg:"<action|testing>",desc:"Run mode (default: testing)"}),(0,e.jsx)(s,{long:"--name",arg:"<name>",desc:"Persist session under this name"}),(0,e.jsx)(s,{long:"--variables",arg:"<json>",desc:"Inline variables as JSON"}),(0,e.jsx)(s,{long:"--variables-file",arg:"<path>",desc:"Load variables from file"}),(0,e.jsx)(s,{long:"--session-context",arg:"<json>",desc:"Prior runs context JSON"}),(0,e.jsx)(s,{long:"--global-context",arg:"<file>",desc:"Override global context markdown"}),(0,e.jsx)(s,{long:"--local-context",arg:"<file>",desc:"Override local context markdown"}),(0,e.jsx)(s,{long:"--ws-endpoint",arg:"<url>",desc:"Remote browser (LambdaTest)"}),(0,e.jsx)(s,{long:"--cdp-endpoint",arg:"<url>",desc:"Connect to existing Chrome CDP"}),(0,e.jsx)(s,{long:"--task-skills",desc:"Domain-specific task skills (experimental)"}),(0,e.jsx)(s,{long:"--code-export",desc:"Generate code export after upload"}),(0,e.jsx)(s,{long:"--code-language",arg:"<lang>",desc:"Code export language: python | javascript"}),(0,e.jsx)(s,{long:"--skip-code-validation",desc:"Skip post-codegen validation"}),(0,e.jsx)(s,{long:"--username",arg:"<user>",desc:"Basic auth (skip OAuth)"}),(0,e.jsx)(s,{long:"--access-key",arg:"<key>",desc:"Basic auth access key"}),(0,e.jsx)(s,{long:"--env",arg:"<name>",desc:"Environment (prod or stage)"}),(0,e.jsx)(s,{long:"--agent",desc:"NDJSON output (no UI)",highlight:!0})]}),(0,e.jsxs)(d,{title:"EXAMPLES",children:[(0,e.jsx)(u,{label:"Inline objective",cmd:`${i} run "Search for laptop"`}),(0,e.jsx)(u,{label:"Replay a saved test",cmd:`${i} testmd run smoke_test.md`}),(0,e.jsx)(u,{label:"Variables",cmd:`${i} run "Login as {{user}}" --variables '{"user":{"value":"alice"}}'`}),(0,e.jsx)(u,{label:"Agent mode (NDJSON)",cmd:`${i} run "Add to cart" --agent | jq .status`})]}),(0,e.jsx)(d,{title:"TEST FILES",children:(0,e.jsxs)(n,{marginLeft:2,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dimmed,children:[(0,e.jsx)(o,{color:t.cyan,children:"*_test.md"})," \u2014 markdown test files with YAML frontmatter and ",(0,e.jsx)(o,{color:t.cyan,children:"## "}),"step headings."]}),(0,e.jsxs)(o,{color:t.dimmed,children:["Run with ",(0,e.jsxs)(o,{color:t.cyan,children:[i," testmd run path/to/foo_test.md"]}),". (`.md` paths are not accepted by `",i," run`.)"]}),(0,e.jsxs)(o,{color:t.dimmed,children:["Sessions you run in TUI auto-save to ",(0,e.jsx)(o,{color:t.cyan,children:"<cwd>/.testmuai/tests/<name>_test.md"})," (testing mode prompts on exit)."]})]})}),(0,e.jsxs)(n,{flexDirection:"column",marginTop:0,paddingX:1,children:[(0,e.jsx)(o,{color:t.muted,children:"\u2500".repeat(Math.min(l-2,70))}),(0,e.jsxs)(n,{gap:3,children:[(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Docs "}),(0,e.jsx)(o,{color:t.cyan,underline:!0,children:S})]}),(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Bugs "}),(0,e.jsx)(o,{color:t.cyan,underline:!0,children:v})]})]})]}),(0,e.jsx)(o,{children:" "})]})}function d({title:r,children:c}){return(0,e.jsxs)(n,{flexDirection:"column",marginBottom:1,children:[(0,e.jsx)(n,{marginLeft:1,children:(0,e.jsx)(o,{bold:!0,color:t.dimmed,children:r})}),c]})}function m({cmd:r,desc:c,highlight:l}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsxs)(n,{width:40,children:[(0,e.jsx)(o,{color:t.dimmed,children:"$ "}),(0,e.jsx)(o,{color:l?t.purple:t.cyan,children:r})]}),(0,e.jsx)(o,{color:t.dimmed,children:c})]})}function a({cmd:r,args:c,desc:l,highlight:g}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsx)(n,{width:16,children:(0,e.jsx)(o,{color:g?t.purple:t.green,bold:!0,children:r})}),(0,e.jsx)(n,{width:32,children:c?(0,e.jsx)(o,{color:t.dimmed,children:c}):null}),(0,e.jsx)(o,{color:t.dimmed,children:l})]})}function s({long:r,arg:c,desc:l,highlight:g}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsxs)(n,{width:30,children:[(0,e.jsx)(o,{color:g?t.purple:t.cyan,children:r}),c&&(0,e.jsxs)(o,{color:t.dimmed,children:[" ",c]})]}),(0,e.jsx)(o,{color:t.dimmed,children:l})]})}function u({label:r,cmd:c}){return(0,e.jsxs)(n,{marginLeft:2,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dimmed,children:["# ",r]}),(0,e.jsxs)(o,{color:t.cyan,children:["$ ",c]})]})}export{L as HelpView};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-IROWNPDG.js";import"./chunk-SR5UDUMJ.js";import"./chunk-HCBYKLMW.js";import"./chunk-TL4SB7MQ.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as InfoBox};
2
+ import{a}from"./chunk-KA23QNUA.js";import"./chunk-TXUKXLYR.js";import"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as InfoBox};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-J3SCNSXX.js";import"./chunk-HCBYKLMW.js";import"./chunk-TL4SB7MQ.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as LinksBox};
2
+ import{a}from"./chunk-VKPAHDXM.js";import"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as LinksBox};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-NOQKUOEK.js";import"./chunk-YVLFHMUW.js";import"./chunk-HCBYKLMW.js";import"./chunk-TL4SB7MQ.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{b as ProfilesView,a as formatProfileLine};
2
+ import{a,b}from"./chunk-BNLJNHAZ.js";import"./chunk-TI5CHPPN.js";import"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{b as ProfilesView,a as formatProfileLine};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b}from"./chunk-VZIBZDS2.js";import"./chunk-YCCUBQY4.js";import"./chunk-EJR3WRTW.js";import"./chunk-CBDUXGVQ.js";import"./chunk-TI5CHPPN.js";import"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-LIJX5PIV.js";import"./chunk-KKZRPFWO.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{b as ProjectPicker,a as formatProjectLine};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c}from"./chunk-ZYVYAIBS.js";import"./chunk-S3DAAAE5.js";import"./chunk-IROWNPDG.js";import"./chunk-SR5UDUMJ.js";import"./chunk-HCBYKLMW.js";import"./chunk-TL4SB7MQ.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as SaveSessionPrompt,b as defaultSessionTimestamp,c as renderSavePrompt};
2
+ import{a,b,c}from"./chunk-ZCHXYZGV.js";import"./chunk-S3DAAAE5.js";import"./chunk-KA23QNUA.js";import"./chunk-TXUKXLYR.js";import"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as SaveSessionPrompt,b as defaultSessionTimestamp,c as renderSavePrompt};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{f as a}from"./chunk-LT4VR7MQ.js";import"./chunk-6566EYUL.js";import"./chunk-G7VF5SDK.js";import"./chunk-L5LI2JF4.js";import"./chunk-YEV3OBEO.js";import"./chunk-VZIBZDS2.js";import"./chunk-T3JEMMTA.js";import"./chunk-YCCUBQY4.js";import"./chunk-EJR3WRTW.js";import"./chunk-VE3SUJMA.js";import"./chunk-PQLKQKQH.js";import"./chunk-CBDUXGVQ.js";import"./chunk-GCAHPH2E.js";import"./chunk-JI7KJKG4.js";import"./chunk-TI5CHPPN.js";import"./chunk-HCBYKLMW.js";import"./chunk-FOT6AMNP.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-LIJX5PIV.js";import"./chunk-KKZRPFWO.js";import"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";export{a as SingleShotApp};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as S}from"./chunk-IROWNPDG.js";import"./chunk-SR5UDUMJ.js";import{a as R}from"./chunk-HCBYKLMW.js";import{t as o}from"./chunk-TL4SB7MQ.js";import{a as b,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as y}from"./chunk-UR6MHSHU.js";var T=y(w(),1);var i=y(R(),1);function L(e){let t=e.decisions.filter(l=>l.kind==="replay").length,s=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.yellow,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let r=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${d} passed, ${p} failed, ${f} skipped)`,k=`${t} replay \xB7 ${s} author`,C=e.retryTriggered,v="yes \u2014 run recovered after a replay miss",u,g=o.dimmed;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 _=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,h=o.dimmed;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:r},breakdown:k,showRetries:C,retriesText:v,commitText:u,commitColor:g,artifactsText:_,uploadText:m,uploadColor:h}}function O(e){let t=e.decisions.filter(r=>r.kind==="replay").length,s=e.decisions.filter(r=>r.kind==="author").length,d=e.outcomes.filter(r=>r.status==="passed").length,p=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.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:s},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}:{}},cancelled:e.cancelled}}function A({data:e}){let t=L(e),s=[{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.dimmed,children:t.breakdown})}];return t.showRetries&&s.push({label:"retries",value:(0,i.jsx)(c,{color:o.yellow,children:t.retriesText})}),s.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),s.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dimmed,children:t.artifactsText})}),s.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:s})}function I({data:e}){let{exit:t}=x();return(0,T.useEffect)(()=>{let s=setTimeout(()=>t(),50);return()=>clearTimeout(s)},[t]),(0,i.jsx)(b,{flexDirection:"column",children:(0,i.jsx)(A,{data:e})})}export{I as AutoExitSummaryBox,A as SummaryBox,O as buildSummaryEvent,L as buildSummaryRendered};
2
+ import{a as S}from"./chunk-KA23QNUA.js";import"./chunk-TXUKXLYR.js";import{a as R}from"./chunk-HCBYKLMW.js";import{t as o}from"./chunk-FOT6AMNP.js";import{a as b,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as y}from"./chunk-UR6MHSHU.js";var T=y(w(),1);var i=y(R(),1);function L(e){let t=e.decisions.filter(l=>l.kind==="replay").length,s=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.yellow,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let r=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${d} passed, ${p} failed, ${f} skipped)`,k=`${t} replay \xB7 ${s} author`,C=e.retryTriggered,v="yes \u2014 run recovered after a replay miss",u,g=o.dimmed;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 _=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,h=o.dimmed;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:r},breakdown:k,showRetries:C,retriesText:v,commitText:u,commitColor:g,artifactsText:_,uploadText:m,uploadColor:h}}function O(e){let t=e.decisions.filter(r=>r.kind==="replay").length,s=e.decisions.filter(r=>r.kind==="author").length,d=e.outcomes.filter(r=>r.status==="passed").length,p=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.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:s},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}:{}},cancelled:e.cancelled}}function A({data:e}){let t=L(e),s=[{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.dimmed,children:t.breakdown})}];return t.showRetries&&s.push({label:"retries",value:(0,i.jsx)(c,{color:o.yellow,children:t.retriesText})}),s.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),s.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dimmed,children:t.artifactsText})}),s.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:s})}function I({data:e}){let{exit:t}=x();return(0,T.useEffect)(()=>{let s=setTimeout(()=>t(),50);return()=>clearTimeout(s)},[t]),(0,i.jsx)(b,{flexDirection:"column",children:(0,i.jsx)(A,{data:e})})}export{I as AutoExitSummaryBox,A as SummaryBox,O as buildSummaryEvent,L as buildSummaryRendered};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as $,b as j,c as L,d as N,e as T,f as _,g as F}from"./chunk-U4QMSR5Z.js";import"./chunk-XM4H4TJD.js";import"./chunk-L3MOXBKE.js";import"./chunk-G7VF5SDK.js";import"./chunk-HNIH3GSQ.js";import{a as A}from"./chunk-IROWNPDG.js";import"./chunk-SR5UDUMJ.js";import{a as I}from"./chunk-HCBYKLMW.js";import{t as p}from"./chunk-TL4SB7MQ.js";import{a as R,b as l,d as P,i as k,j as D}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as C}from"./chunk-UR6MHSHU.js";var a=C(B(),1);var i=C(B(),1);function U(e){let r=N(e.screenshotDispatcher,e.stepLogger,e.onReasoning,e.onStepComplete),[h,f]=(0,i.useState)(0),[y,c]=(0,i.useState)("idle"),d=(0,i.useRef)("idle"),S=(0,i.useRef)(0),w=(0,i.useRef)(!1),x=(0,i.useRef)(null),v=(0,i.useRef)(null),g=(0,i.useCallback)(u=>{d.current=u,c(u)},[]),m=(0,i.useCallback)(async u=>{let n=await e.getNextConfig(u);if(!n){g("done"),e.onAllComplete?.();return}let o=u?S.current+1:0;S.current=o,f(o),e.onStepStart?.(n,o),x.current=null,v.current=null,g("running"),await r.startRun(n,e.spawnOpts)},[r,e,g]);(0,i.useEffect)(()=>{w.current||(w.current=!0,m(null))},[]),(0,i.useEffect)(()=>{if(!r.lastRunEnd||r.lastRunEnd===x.current||d.current!=="running")return;x.current=r.lastRunEnd,d.current="transitioning",c("transitioning");let u=r.lastRunEnd,n=T(r.steps),o=r.bifurcationInfo,s={status:u.status==="passed"?"passed":"failed",duration_s:u.duration??0,reason:u.reason,runEnd:u,hadError:!1,stepsPassed:n.passed,stepsFailed:n.failed,stepsTotal:n.total,bifurcationFlows:o&&!o.isSingleFlow?o.flows:null};if(!(e.onStepEnd?.(s,S.current)??!0)){g("done"),e.onAllComplete?.();return}m(s)},[r.lastRunEnd]),(0,i.useEffect)(()=>{if(!r.runError||r.runError===v.current||r.lastRunEnd||d.current!=="running")return;v.current=r.runError,d.current="transitioning",c("transitioning");let u=T(r.steps),n={status:"failed",duration_s:0,reason:r.runError,runEnd:null,hadError:!0,stepsPassed:u.passed,stepsFailed:u.failed,stepsTotal:u.total,bifurcationFlows:null};if(!(e.onStepEnd?.(n,S.current)??!0)){g("done"),e.onAllComplete?.();return}m(n)},[r.runError,r.lastRunEnd]);let O=(0,i.useCallback)(()=>{r.cancelRun()},[r]);return{runner:r,currentStepIndex:h,phase:y,cancel:O}}var b=C(I(),1);function G({runner:e,runKey:r,onStepCommit:h}){let f=L({isRunning:e.isRunning,bifurcationInfo:e.bifurcationInfo,steps:e.steps,cmInitCounts:e.cmInitCounts,replayInfo:e.replayInfo});return(0,b.jsxs)(b.Fragment,{children:[f&&(0,b.jsx)(j,{label:f.label,hasBifurcation:f.hasBifurcation}),e.isRunning&&e.steps.length>0&&(0,b.jsx)($,{steps:e.steps,bifurcated:!!e.bifurcationInfo&&!e.bifurcationInfo.isSingleFlow,flows:e.bifurcationInfo?.flows,cmInitCounts:e.cmInitCounts,maxSteps:e.maxSteps,onStepCommit:h},`run-${r}`)]})}var t=C(I(),1);function le(e){let{exit:r}=D(),h=(0,a.useRef)(0),[f,y]=(0,a.useState)([{id:"top-banner",content:(0,t.jsx)(R,{flexDirection:"column",marginBottom:1,children:(0,t.jsxs)(R,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,t.jsx)(l,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,t.jsx)(l,{color:p.dimmed,children:" \u2502 "}),(0,t.jsx)(l,{color:p.cyan,children:e.topBanner.model}),(0,t.jsx)(l,{color:p.dimmed,children:" \u2502 "}),(0,t.jsx)(l,{color:p.dimmed,children:e.topBanner.auth})]})})},{id:"global-config",content:(0,t.jsx)(W,{data:e.globalConfig})},...e.priorAttemptRollup?[{id:"prior-rollup",content:(0,t.jsx)(l,{color:p.dimmed,children:` \u21B3 replayed ${e.priorAttemptRollup.startIdx}..${e.priorAttemptRollup.endIdx-1} (${e.priorAttemptRollup.count} steps, from prior attempt)`})}]:[]]),c=(0,a.useCallback)(n=>{let o=`s-${++h.current}`;y(s=>[...s,{id:o,content:n}])},[]),d=(0,a.useRef)(null),S=(0,a.useCallback)(async n=>{let o=await e.getNextStep(n);return o?(d.current=o,o.config):(d.current=null,null)},[e]),w=(0,a.useCallback)((n,o)=>{let s=d.current;if(!s)return;let E=s.mode==="replay"?"cyan":"#dc4e08",M=s.modeReason?` (${s.modeReason})`:"",q=s.perStepOverrides?Object.entries(s.perStepOverrides):[];c((0,t.jsxs)(R,{flexDirection:"column",marginBottom:0,children:[(0,t.jsxs)(l,{children:[(0,t.jsxs)(l,{color:p.dimmed,children:[s.banner.stepLabel," "]}),(0,t.jsxs)(l,{color:E,children:["[",s.mode,"]"]}),(0,t.jsx)(l,{color:p.dimmed,children:M})]}),(0,t.jsx)(l,{color:p.dimmed,children:s.banner.objective}),q.length>0&&(0,t.jsxs)(l,{color:p.dimmed,children:["overrides: ",q.map(([V,K])=>`${V}=${K}`).join(", ")]})]}))},[c]),x=(0,a.useRef)(0),v=(0,a.useRef)(!1),g=(0,a.useCallback)((n,o)=>(n.hadError?c((0,t.jsx)(F,{message:n.reason??"Runner error",code:"RUNNER_ERROR"})):c((0,t.jsx)(R,{flexDirection:"column",marginBottom:1,children:(0,t.jsx)(_,{status:n.status,summary:n.runEnd?.summary??"",duration:n.runEnd?.duration??0,steps:n.stepsTotal,stepsPassed:n.stepsPassed,stepsFailed:n.stepsFailed,reason:n.runEnd?.reason,creditsConsumed:n.runEnd?.credits_consumed})})),e.onStepEnd?.(n,o)??!0),[c,e]),m=U({getNextConfig:S,onStepStart:w,onStepEnd:g,onAllComplete:()=>{e.onAllComplete(),setImmediate(()=>r())},screenshotDispatcher:e.screenshotDispatcher,stepLogger:e.stepLogger,onReasoning:e.onReasoning,onStepComplete:e.onStepComplete,spawnOpts:e.spawnOpts}),O=250,u=5e3;return k((n,o)=>{if(o.ctrl&&n==="c"){let s=Date.now(),E=s-x.current;if(E<O)return;v.current&&E<u?(m.cancel(),e.onCancel?.(),setImmediate(()=>r())):(v.current=!0,c((0,t.jsx)(l,{color:"yellow",children:"press Ctrl+C again to cancel run"}))),x.current=s}}),(0,t.jsxs)(R,{flexDirection:"column",children:[(0,t.jsx)(P,{items:f,children:n=>(0,t.jsx)(R,{children:n.content},n.id)}),m.phase!=="done"&&(0,t.jsx)(G,{runner:m.runner,runKey:m.currentStepIndex,onStepCommit:c})]})}function W({data:e}){return(0,t.jsx)(A,{title:"test.md run",titleColor:"#ff9500",borderColor:p.dimmed,rows:[{label:"source",value:e.source},{label:"steps",value:`${e.steps.total} (${e.steps.replay} replay, ${e.steps.author} author per walker)`},{label:"model",value:e.model},{label:"viewport",value:`${e.viewport.width} x ${e.viewport.height}`},{label:"chrome",value:e.chrome},{label:"session",value:e.session},{label:"variables",value:`${e.variables.count} (${e.variables.secrets} secret)`},{label:"flags",value:e.flags.length>0?e.flags.join(" "):"(none)"}]})}export{le as TestMdRunView};
2
+ import{a as $,b as j,c as L,d as N,e as T,f as _,g as F}from"./chunk-ND5EFB3C.js";import"./chunk-535PXOLA.js";import"./chunk-CB4WEGVB.js";import"./chunk-G7VF5SDK.js";import"./chunk-CBDUXGVQ.js";import{a as A}from"./chunk-KA23QNUA.js";import"./chunk-TXUKXLYR.js";import{a as I}from"./chunk-HCBYKLMW.js";import{t as p}from"./chunk-FOT6AMNP.js";import{a as R,b as l,d as P,i as k,j as D}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as C}from"./chunk-UR6MHSHU.js";var a=C(B(),1);var i=C(B(),1);function U(e){let r=N(e.screenshotDispatcher,e.stepLogger,e.onReasoning,e.onStepComplete),[h,f]=(0,i.useState)(0),[y,c]=(0,i.useState)("idle"),d=(0,i.useRef)("idle"),S=(0,i.useRef)(0),w=(0,i.useRef)(!1),x=(0,i.useRef)(null),v=(0,i.useRef)(null),g=(0,i.useCallback)(u=>{d.current=u,c(u)},[]),m=(0,i.useCallback)(async u=>{let n=await e.getNextConfig(u);if(!n){g("done"),e.onAllComplete?.();return}let o=u?S.current+1:0;S.current=o,f(o),e.onStepStart?.(n,o),x.current=null,v.current=null,g("running"),await r.startRun(n,e.spawnOpts)},[r,e,g]);(0,i.useEffect)(()=>{w.current||(w.current=!0,m(null))},[]),(0,i.useEffect)(()=>{if(!r.lastRunEnd||r.lastRunEnd===x.current||d.current!=="running")return;x.current=r.lastRunEnd,d.current="transitioning",c("transitioning");let u=r.lastRunEnd,n=T(r.steps),o=r.bifurcationInfo,s={status:u.status==="passed"?"passed":"failed",duration_s:u.duration??0,reason:u.reason,runEnd:u,hadError:!1,stepsPassed:n.passed,stepsFailed:n.failed,stepsTotal:n.total,bifurcationFlows:o&&!o.isSingleFlow?o.flows:null};if(!(e.onStepEnd?.(s,S.current)??!0)){g("done"),e.onAllComplete?.();return}m(s)},[r.lastRunEnd]),(0,i.useEffect)(()=>{if(!r.runError||r.runError===v.current||r.lastRunEnd||d.current!=="running")return;v.current=r.runError,d.current="transitioning",c("transitioning");let u=T(r.steps),n={status:"failed",duration_s:0,reason:r.runError,runEnd:null,hadError:!0,stepsPassed:u.passed,stepsFailed:u.failed,stepsTotal:u.total,bifurcationFlows:null};if(!(e.onStepEnd?.(n,S.current)??!0)){g("done"),e.onAllComplete?.();return}m(n)},[r.runError,r.lastRunEnd]);let O=(0,i.useCallback)(()=>{r.cancelRun()},[r]);return{runner:r,currentStepIndex:h,phase:y,cancel:O}}var b=C(I(),1);function G({runner:e,runKey:r,onStepCommit:h}){let f=L({isRunning:e.isRunning,bifurcationInfo:e.bifurcationInfo,steps:e.steps,cmInitCounts:e.cmInitCounts,replayInfo:e.replayInfo});return(0,b.jsxs)(b.Fragment,{children:[f&&(0,b.jsx)(j,{label:f.label,hasBifurcation:f.hasBifurcation}),e.isRunning&&e.steps.length>0&&(0,b.jsx)($,{steps:e.steps,bifurcated:!!e.bifurcationInfo&&!e.bifurcationInfo.isSingleFlow,flows:e.bifurcationInfo?.flows,cmInitCounts:e.cmInitCounts,maxSteps:e.maxSteps,onStepCommit:h},`run-${r}`)]})}var t=C(I(),1);function le(e){let{exit:r}=D(),h=(0,a.useRef)(0),[f,y]=(0,a.useState)([{id:"top-banner",content:(0,t.jsx)(R,{flexDirection:"column",marginBottom:1,children:(0,t.jsxs)(R,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,t.jsx)(l,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,t.jsx)(l,{color:p.dimmed,children:" \u2502 "}),(0,t.jsx)(l,{color:p.cyan,children:e.topBanner.model}),(0,t.jsx)(l,{color:p.dimmed,children:" \u2502 "}),(0,t.jsx)(l,{color:p.dimmed,children:e.topBanner.auth})]})})},{id:"global-config",content:(0,t.jsx)(W,{data:e.globalConfig})},...e.priorAttemptRollup?[{id:"prior-rollup",content:(0,t.jsx)(l,{color:p.dimmed,children:` \u21B3 replayed ${e.priorAttemptRollup.startIdx}..${e.priorAttemptRollup.endIdx-1} (${e.priorAttemptRollup.count} steps, from prior attempt)`})}]:[]]),c=(0,a.useCallback)(n=>{let o=`s-${++h.current}`;y(s=>[...s,{id:o,content:n}])},[]),d=(0,a.useRef)(null),S=(0,a.useCallback)(async n=>{let o=await e.getNextStep(n);return o?(d.current=o,o.config):(d.current=null,null)},[e]),w=(0,a.useCallback)((n,o)=>{let s=d.current;if(!s)return;let E=s.mode==="replay"?"cyan":"#dc4e08",M=s.modeReason?` (${s.modeReason})`:"",q=s.perStepOverrides?Object.entries(s.perStepOverrides):[];c((0,t.jsxs)(R,{flexDirection:"column",marginBottom:0,children:[(0,t.jsxs)(l,{children:[(0,t.jsxs)(l,{color:p.dimmed,children:[s.banner.stepLabel," "]}),(0,t.jsxs)(l,{color:E,children:["[",s.mode,"]"]}),(0,t.jsx)(l,{color:p.dimmed,children:M})]}),(0,t.jsx)(l,{color:p.dimmed,children:s.banner.objective}),q.length>0&&(0,t.jsxs)(l,{color:p.dimmed,children:["overrides: ",q.map(([V,K])=>`${V}=${K}`).join(", ")]})]}))},[c]),x=(0,a.useRef)(0),v=(0,a.useRef)(!1),g=(0,a.useCallback)((n,o)=>(n.hadError?c((0,t.jsx)(F,{message:n.reason??"Runner error",code:"RUNNER_ERROR"})):c((0,t.jsx)(R,{flexDirection:"column",marginBottom:1,children:(0,t.jsx)(_,{status:n.status,summary:n.runEnd?.summary??"",duration:n.runEnd?.duration??0,steps:n.stepsTotal,stepsPassed:n.stepsPassed,stepsFailed:n.stepsFailed,reason:n.runEnd?.reason,creditsConsumed:n.runEnd?.credits_consumed})})),e.onStepEnd?.(n,o)??!0),[c,e]),m=U({getNextConfig:S,onStepStart:w,onStepEnd:g,onAllComplete:()=>{e.onAllComplete(),setImmediate(()=>r())},screenshotDispatcher:e.screenshotDispatcher,stepLogger:e.stepLogger,onReasoning:e.onReasoning,onStepComplete:e.onStepComplete,spawnOpts:e.spawnOpts}),O=250,u=5e3;return k((n,o)=>{if(o.ctrl&&n==="c"){let s=Date.now(),E=s-x.current;if(E<O)return;v.current&&E<u?(m.cancel(),e.onCancel?.(),setImmediate(()=>r())):(v.current=!0,c((0,t.jsx)(l,{color:"yellow",children:"press Ctrl+C again to cancel run"}))),x.current=s}}),(0,t.jsxs)(R,{flexDirection:"column",children:[(0,t.jsx)(P,{items:f,children:n=>(0,t.jsx)(R,{children:n.content},n.id)}),m.phase!=="done"&&(0,t.jsx)(G,{runner:m.runner,runKey:m.currentStepIndex,onStepCommit:c})]})}function W({data:e}){return(0,t.jsx)(A,{title:"test.md run",titleColor:"#ff9500",borderColor:p.dimmed,rows:[{label:"source",value:e.source},{label:"steps",value:`${e.steps.total} (${e.steps.replay} replay, ${e.steps.author} author per walker)`},{label:"model",value:e.model},{label:"viewport",value:`${e.viewport.width} x ${e.viewport.height}`},{label:"chrome",value:e.chrome},{label:"session",value:e.session},{label:"variables",value:`${e.variables.count} (${e.variables.secrets} secret)`},{label:"flags",value:e.flags.length>0?e.flags.join(" "):"(none)"}]})}export{le as TestMdRunView};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as s,b as o}from"./chunk-SR5UDUMJ.js";import{a as x}from"./chunk-HCBYKLMW.js";import{t as i}from"./chunk-TL4SB7MQ.js";import{a as r,b as n,j as u}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as t}from"./chunk-UR6MHSHU.js";var p=t(B(),1);var e=t(x(),1);function R({profile:f,env:g,authenticated:a,authMethod:v,username:m,tokenStatus:l,expiresAt:c}){let{exit:d}=u();return(0,p.useEffect)(()=>{let b=setTimeout(()=>d(),50);return()=>clearTimeout(b)},[d]),(0,e.jsx)(r,{flexDirection:"column",children:(0,e.jsx)(s,{title:"Identity",variant:a?"success":"warning",children:(0,e.jsxs)(r,{flexDirection:"column",paddingY:1,children:[(0,e.jsx)(r,{children:a?(0,e.jsx)(n,{color:i.green,bold:!0,children:"\u2713 Authenticated"}):(0,e.jsx)(n,{color:i.yellow,bold:!0,children:"\u26A0 Not logged in"})}),(0,e.jsxs)(r,{flexDirection:"column",marginTop:1,children:[(0,e.jsx)(o,{label:"Profile",value:f}),(0,e.jsx)(o,{label:"Environment",value:g}),(0,e.jsx)(o,{label:"Method",value:v}),m&&(0,e.jsx)(o,{label:"User",value:m}),l&&(0,e.jsx)(o,{label:"Token",value:l,valueColor:l==="valid"?i.green:l==="expired"?i.red:i.dimmed}),c&&(0,e.jsx)(o,{label:"Expires",value:c})]})]})})})}export{R as WhoamiView};
2
+ import{a as s,b as o}from"./chunk-TXUKXLYR.js";import{a as x}from"./chunk-HCBYKLMW.js";import{t as i}from"./chunk-FOT6AMNP.js";import{a as r,b as n,j as u}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as t}from"./chunk-UR6MHSHU.js";var p=t(B(),1);var e=t(x(),1);function R({profile:f,env:g,authenticated:a,authMethod:v,username:m,tokenStatus:l,expiresAt:c}){let{exit:d}=u();return(0,p.useEffect)(()=>{let b=setTimeout(()=>d(),50);return()=>clearTimeout(b)},[d]),(0,e.jsx)(r,{flexDirection:"column",children:(0,e.jsx)(s,{title:"Identity",variant:a?"success":"warning",children:(0,e.jsxs)(r,{flexDirection:"column",paddingY:1,children:[(0,e.jsx)(r,{children:a?(0,e.jsx)(n,{color:i.green,bold:!0,children:"\u2713 Authenticated"}):(0,e.jsx)(n,{color:i.yellow,bold:!0,children:"\u26A0 Not logged in"})}),(0,e.jsxs)(r,{flexDirection:"column",marginTop:1,children:[(0,e.jsx)(o,{label:"Profile",value:f}),(0,e.jsx)(o,{label:"Environment",value:g}),(0,e.jsx)(o,{label:"Method",value:v}),m&&(0,e.jsx)(o,{label:"User",value:m}),l&&(0,e.jsx)(o,{label:"Token",value:l,valueColor:l==="valid"?i.green:l==="expired"?i.red:i.dimmed}),c&&(0,e.jsx)(o,{label:"Expires",value:c})]})]})})})}export{R as WhoamiView};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as i,f as c}from"./chunk-TL4SB7MQ.js";import{a as l}from"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";import{readFileSync as u,writeFileSync as g,mkdirSync as d}from"fs";import{join as f}from"path";var h=f(i,"changelog-cache.json"),p=3600*1e3;function y(){try{let e=JSON.parse(u(h,"utf-8"));if(Date.now()-e.cachedAt<p)return e}catch{}return null}function m(e){try{d(i,{recursive:!0}),g(h,JSON.stringify({entries:e,cachedAt:Date.now()}))}catch{}}async function A(e){try{let t=y();if(t){let r=t.entries;return e?.all?r:r.slice(0,5)}let n=new AbortController,o=setTimeout(()=>n.abort(),5e3),a=await l(`${c}?per_page=30`,{headers:{Accept:"application/vnd.github+json"},signal:n.signal});if(clearTimeout(o),!a.ok)return[];let s=(await a.json()).map(r=>({version:r.tag_name.replace(/^v/,""),date:r.published_at?r.published_at.slice(0,10):"",body:r.body??""}));return m(s),e?.all?s:s.slice(0,5)}catch{return[]}}function v(e){if(e.length===0)return"Could not fetch changelog. Visit https://github.com/LambdaTest/kane-cli/releases";let t=["kane-cli Changelog","\u2500".repeat(40),""];for(let n of e){if(t.push(`v${n.version} (${n.date})`),n.body){let o=n.body.split(`
2
+ import{c as i,f as c}from"./chunk-FOT6AMNP.js";import{a as l}from"./chunk-V7QXJKX7.js";import"./chunk-UR6MHSHU.js";import{readFileSync as u,writeFileSync as g,mkdirSync as d}from"fs";import{join as f}from"path";var h=f(i,"changelog-cache.json"),p=3600*1e3;function y(){try{let e=JSON.parse(u(h,"utf-8"));if(Date.now()-e.cachedAt<p)return e}catch{}return null}function m(e){try{d(i,{recursive:!0}),g(h,JSON.stringify({entries:e,cachedAt:Date.now()}))}catch{}}async function A(e){try{let t=y();if(t){let r=t.entries;return e?.all?r:r.slice(0,5)}let n=new AbortController,o=setTimeout(()=>n.abort(),5e3),a=await l(`${c}?per_page=30`,{headers:{Accept:"application/vnd.github+json"},signal:n.signal});if(clearTimeout(o),!a.ok)return[];let s=(await a.json()).map(r=>({version:r.tag_name.replace(/^v/,""),date:r.published_at?r.published_at.slice(0,10):"",body:r.body??""}));return m(s),e?.all?s:s.slice(0,5)}catch{return[]}}function v(e){if(e.length===0)return"Could not fetch changelog. Visit https://github.com/LambdaTest/kane-cli/releases";let t=["kane-cli Changelog","\u2500".repeat(40),""];for(let n of e){if(t.push(`v${n.version} (${n.date})`),n.body){let o=n.body.split(`
3
3
  `).filter(a=>a.trim());for(let a of o)t.push(` ${a}`)}t.push("")}return t.join(`
4
4
  `)}export{A as fetchChangelog,v as formatChangelog};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as p}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-TL4SB7MQ.js";import{b as u}from"./chunk-C44QQJR4.js";import{a as l}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var m=n(l(),1);var o=n(l(),1);function c(r,e){let t=(0,o.useRef)(r);t.current=r,(0,o.useEffect)(()=>{if(e===null)return;let i=setInterval(()=>t.current(),e);return()=>clearInterval(i)},[e])}var s=n(p(),1),f=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function I({active:r=!0}){let[e,t]=(0,m.useState)(0);return c(()=>{t(i=>(i+1)%f.length)},r?80:null),(0,s.jsx)(u,{color:a.purple,children:r?f[e]:"\u25CF"})}export{c as a,I as b};
2
+ import{a as p}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-FOT6AMNP.js";import{b as u}from"./chunk-C44QQJR4.js";import{a as l}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var m=n(l(),1);var o=n(l(),1);function c(r,e){let t=(0,o.useRef)(r);t.current=r,(0,o.useEffect)(()=>{if(e===null)return;let i=setInterval(()=>t.current(),e);return()=>clearInterval(i)},[e])}var s=n(p(),1),f=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function I({active:r=!0}){let[e,t]=(0,m.useState)(0);return c(()=>{t(i=>(i+1)%f.length)},r?80:null),(0,s.jsx)(u,{color:a.purple,children:r?f[e]:"\u25CF"})}export{c as a,I as b};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as m}from"./chunk-L5LI2JF4.js";import{c as p}from"./chunk-TL4SB7MQ.js";import{randomUUID as L}from"crypto";import{mkdirSync as j,writeFileSync as _,appendFileSync as $,existsSync as f}from"fs";import{join as a}from"path";import{writeFileSync as R,mkdirSync as S,existsSync as b}from"fs";import{join as h,relative as w}from"path";var I=new Set(["username","access_key","oauth","profile","project_id","folder_id"]),x=new Set(["model","env"]),d=class{constructor(e){this.opts=e}objectives=[];flushed=!1;lastWrittenPath=null;lastCollisionSuffixed=!1;appendObjective(e){this.objectives.push(e)}flush(){if(this.flushed||(this.flushed=!0,this.objectives.length===0))return;let e=this.opts.getName();if(!e)return;let t=h(this.opts.cwd,".testmuai","tests");try{S(t,{recursive:!0})}catch(l){process.stderr.write(`
2
+ import{b as m}from"./chunk-L5LI2JF4.js";import{c as p}from"./chunk-FOT6AMNP.js";import{randomUUID as L}from"crypto";import{mkdirSync as j,writeFileSync as _,appendFileSync as $,existsSync as f}from"fs";import{join as a}from"path";import{writeFileSync as R,mkdirSync as S,existsSync as b}from"fs";import{join as h,relative as w}from"path";var I=new Set(["username","access_key","oauth","profile","project_id","folder_id"]),x=new Set(["model","env"]),d=class{constructor(e){this.opts=e}objectives=[];flushed=!1;lastWrittenPath=null;lastCollisionSuffixed=!1;appendObjective(e){this.objectives.push(e)}flush(){if(this.flushed||(this.flushed=!0,this.objectives.length===0))return;let e=this.opts.getName();if(!e)return;let t=h(this.opts.cwd,".testmuai","tests");try{S(t,{recursive:!0})}catch(l){process.stderr.write(`
3
3
  \u26A0 Failed to create ${w(this.opts.cwd,t)}/
4
4
  ${l.message}
5
5
  Your test recording was NOT saved.
@@ -10,7 +10,7 @@ import{b as m}from"./chunk-L5LI2JF4.js";import{c as p}from"./chunk-TL4SB7MQ.js";
10
10
  ${l.message}
11
11
  Path: ${s}
12
12
 
13
- `);return}this.lastWrittenPath=s,this.lastCollisionSuffixed=n}};function y(g){let e={};for(let[t,s]of Object.entries(g))I.has(t)||x.has(t)||(e[t]=s);return e}var E=a(p,"sessions"),v=class{sessionId;sessionDir;runs=[];_flows=[];_nextIndex=0;_started=!1;_testId=null;_testcaseId=null;_projectId=null;_orgId=null;_uploadStatus="pending";_uploadAttempts=0;_uploadError=null;_firstObjective=null;_firstUrl=null;_auteurVariables={};_screenshotSas=null;_model="";_environment="";_profile=null;_startedAt="";_remoteLogger=null;_earlyLogBuffer=[];_recorder=null;_resolvedGlobal={};_sessionName=null;_recordingEnabled=!0;_stepRunRecords=[];constructor(){this.sessionId=L(),this.sessionDir=a(E,this.sessionId)}setResolvedGlobal(e){this._resolvedGlobal={...this._resolvedGlobal,...e}}setSessionName(e){this._sessionName=e}get sessionName(){return this._sessionName}setRecordingEnabled(e){this._recordingEnabled=e}get recorder(){return this._recorder}flushRecorder(){try{this._recorder?.flush()}catch(e){process.stderr.write(`[recorder] flush failed: ${e.message}
13
+ `);return}this.lastWrittenPath=s,this.lastCollisionSuffixed=n}};function y(g){let e={};for(let[t,s]of Object.entries(g))I.has(t)||x.has(t)||(e[t]=s);return e}var E=a(p,"sessions"),v=class{sessionId;sessionDir;runs=[];_flows=[];_nextIndex=0;_started=!1;_testId=null;_testcaseId=null;_projectId=null;_orgId=null;_uploadStatus="pending";_uploadAttempts=0;_uploadError=null;_firstObjective=null;_firstUrl=null;_auteurVariables={};_screenshotSas=null;_model="";_environment="";_profile=null;_startedAt="";_remoteLogger=null;_earlyLogBuffer=[];_recorder=null;_resolvedGlobal={};_sessionName=null;_recordingEnabled=!0;_stepRunRecords=[];constructor(e){this.sessionId=L();let t=e?.baseDir?a(e.baseDir,"sessions"):E;this.sessionDir=a(t,this.sessionId)}setResolvedGlobal(e){this._resolvedGlobal={...this._resolvedGlobal,...e}}setSessionName(e){this._sessionName=e}get sessionName(){return this._sessionName}setRecordingEnabled(e){this._recordingEnabled=e}get recorder(){return this._recorder}flushRecorder(){try{this._recorder?.flush()}catch(e){process.stderr.write(`[recorder] flush failed: ${e.message}
14
14
  `)}}start(e){if(!this._started){this._started=!0,this._model=e.model,this._environment=e.environment,this._profile=e.profile,this._startedAt=new Date().toISOString();try{j(this.sessionDir,{recursive:!0}),this._recorder=new d({cwd:process.cwd(),getResolvedGlobal:()=>this._resolvedGlobal,getName:()=>this._sessionName});let t={session_id:this.sessionId,started_at:this._startedAt,model:e.model,environment:e.environment,profile:e.profile,objectives:[],runs:[],status:"in_progress"};_(a(this.sessionDir,"session.json"),JSON.stringify(t,null,2)+`
15
15
  `)}catch{}this._log(`SESSION START session_id=${this.sessionId}`),this._log(`CONFIG model=${e.model} env=${e.environment} profile=${e.profile}`),this._earlyLogBuffer.push({level:"info",event:"SESSION_START",message:"Session started",context:{session_id:this.sessionId}},{level:"info",event:"CONFIG",message:"Session config",context:{model:e.model,environment:e.environment,profile:e.profile}})}}setRemoteLogger(e){this._remoteLogger=e;for(let t of this._earlyLogBuffer)e.log(t.level,t.event,t.message,t.context);this._earlyLogBuffer=[]}get hasRemoteLogger(){return this._remoteLogger!==null}setAuteurVariables(e){Object.assign(this._auteurVariables,e)}get auteurVariables(){return this._auteurVariables}setScreenshotSas(e){this._screenshotSas=e}get screenshotSas(){return this._screenshotSas}get screenshotBaseUrl(){return this._screenshotSas?`${this._screenshotSas.base_url}/${this._screenshotSas.container}`:""}get startedAt(){return this._startedAt||new Date().toISOString()}log(e,t,s,r){if(t===void 0){this._log(e);let o=e.indexOf(" "),i=o>0?e.slice(0,o):e,l=o>0?e.slice(o+1):"",c=/fail|error/i.test(e)?"error":"info";this._remoteLogger?.log(c,i,l||e);return}let n=e,u=s;this._log(`${t} ${u}`),this._remoteLogger?.log(n,t,u,r)}logStep(e,t,s){this._log(`${e} ${t}`);let r=this._nextIndex>0?this._nextIndex-1:0;this._remoteLogger?.logStep(r,e,t,s)}logCommand(e){this._log(`COMMAND ${e}`)}logRunStart(e,t,s){this._log(`RUN ${e} START objective="${t.slice(0,100)}" url=${s}`),this._remoteLogger?.setRunIndex(e),this._remoteLogger?.log("info","RUN_START",`Run ${e} started`,{run_index:e,objective:t,url:s})}logRunEnd(e,t,s,r){let n=(s??0).toFixed(1),u=(r??"").slice(0,100);this._log(`RUN ${e} END status=${t} duration=${n}s summary="${u}"`),this._remoteLogger?.log("info","RUN_END",`Run ${e} ended`,{run_index:e,status:t,duration:s??0,summary:r??""}),t!=="failed"&&t!=="error"&&this._remoteLogger?.discardSteps(e)}escalateRun(e){this._remoteLogger?.escalate(e)}logChromeLaunch(e,t){this._log(`CHROME LAUNCH port=${e} endpoint=${t}`),this._remoteLogger?.log("info","CHROME_LAUNCH","Chrome launched",{port:e,cdp_endpoint:t})}async finish(e="complete"){this._log(`SESSION END status=${e} total_runs=${this.runs.length}`),this._remoteLogger?.log("info","SESSION_END","Session ended",{status:e,total_runs:this.runs.length}),await this._remoteLogger?.shutdown();let t={session_id:this.sessionId,started_at:this._startedAt,ended_at:new Date().toISOString(),model:this._model,environment:this._environment,profile:this._profile,status:e,total_runs:this.runs.length,test_id:this._testId,testcase_id:this._testcaseId,commit_id:this.sessionId,project_id:this._projectId,upload_status:this._uploadStatus,upload_attempts:this._uploadAttempts,last_upload_attempt:this._uploadAttempts>0?new Date().toISOString():null,upload_error:this._uploadError,runs:this.runs.map(s=>({index:s.index,objective:s.objective,status:s.status,summary:s.summary,run_dir:s.run_dir}))};f(this.sessionDir)&&_(a(this.sessionDir,"session.json"),JSON.stringify(t,null,2)+`
16
16
  `),this.flushRecorder(),this._recorder=null}nextRunIndex(){return this._nextIndex}addRunResult(e,t){this.runs.push(e),this._nextIndex+=t??1,this._recordingEnabled&&this._recorder?.appendObjective(e.objective)}getContext(){return{prior_runs:this.runs.map(e=>({index:e.index,objective:e.objective,summary:e.summary,status:e.status,memory:e.context.memory,variables:e.context.variables,pointer:e.context.pointer}))}}addFlow(e){let t={...e,index:this._flows.length+1};return this._flows.push(t),t}getFlows(){return[...this._flows]}getFlow(e){return this._flows.find(t=>t.index===e)}clearFlows(){this._flows=[]}recordStepRun(e){this._stepRunRecords.push(e)}getStepRunRecords(){return[...this._stepRunRecords]}getRunsAsStepRecords(){return this.runs.map((e,t)=>({testmdStepIndex:t+1,runIndex:e.index,totalRunDirs:e.run_dirs?.length??1}))}snapshot(){return{runsLen:this.runs.length,nextRunIndex:this._nextIndex,stepRunRecordsLen:this._stepRunRecords.length}}rollback(e){this.runs.length=e.runsLen,this._nextIndex=e.nextRunIndex,this._stepRunRecords.length=e.stepRunRecordsLen}setTestId(e){this._testId=e}get testId(){return this._testId}setTestcaseId(e){this._testcaseId=e}get testcaseId(){return this._testcaseId}setProjectId(e){this._projectId=e}setOrgId(e){this._orgId=e}get orgId(){return this._orgId}setFirstRun(e,t){this._firstObjective||(this._firstObjective=e,this._firstUrl=t)}get firstObjective(){return this._firstObjective}get firstUrl(){return this._firstUrl}getRunDirs(){let e=[];for(let t of this.runs)t.run_dirs&&t.run_dirs.length>0?e.push(...t.run_dirs):t.run_dir&&e.push(t.run_dir);return e}getRunObjectives(){let e=[];for(let t of this.runs)t.flow_objectives&&t.flow_objectives.length>0?e.push(...t.flow_objectives):e.push(t.objective);return e}getRunMetadata(){let e=[];for(let t of this.runs)if(t.perFlowMetadata&&t.perFlowMetadata.length>0)e.push(...t.perFlowMetadata);else{let s={resultCode:t.resultCode,reasonCode:t.reasonCode,errorMessage:t.status==="failed"?t.summary??null:null,summary:t.summary,oneLiner:t.oneLiner},r=t.run_dirs?.length??1;for(let n=0;n<r;n++)e.push(s)}return e}setUploadStatus(e,t){this._uploadStatus=e,this._uploadAttempts+=1,this._uploadError=t??null}_log(e){if(!(!this._started||!f(this.sessionDir)))try{let t=new Date().toISOString().slice(0,19).replace("T"," "),s=a(this.sessionDir,"tui.log");$(s,`[${t}] ${e}
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as D,b as A}from"./chunk-IXWVTWOR.js";import{l as S,m as C,n as P,o as U,p as N}from"./chunk-TL4SB7MQ.js";import{createServer as Oe}from"http";import{randomBytes as He}from"crypto";import{URL as $e}from"url";import Z from"process";import{Buffer as ee}from"buffer";import re from"path";import{fileURLToPath as ke}from"url";import{promisify as Le}from"util";import te from"child_process";import Me,{constants as Ie}from"fs/promises";import Y from"process";import G,{constants as me}from"fs/promises";import j from"process";import le from"os";import L from"fs";import se from"fs";import z from"fs";var E;function ie(){try{return z.statSync("/.dockerenv"),!0}catch{return!1}}function ae(){try{return z.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function B(){return E===void 0&&(E=ie()||ae()),E}var k,ce=()=>{try{return se.statSync("/run/.containerenv"),!0}catch{return!1}};function u(){return k===void 0&&(k=ce()||B()),k}var K=()=>{if(j.platform!=="linux")return!1;if(le.release().toLowerCase().includes("microsoft"))return!u();try{if(L.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft"))return!u()}catch{}return L.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop")||L.existsSync("/run/WSL")?!u():!1},d=j.env.__IS_WSL_TEST__?K:K();var de=(()=>{let e="/mnt/",r;return async function(){if(r)return r;let t="/etc/wsl.conf",n=!1;try{await G.access(t,me.F_OK),n=!0}catch{}if(!n)return e;let o=await G.readFile(t,{encoding:"utf8"}),i=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(o);return i?(r=i.groups.mountPoint.trim(),r=r.endsWith("/")?r:`${r}/`,r):e}})(),fe=async()=>`${await de()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`,M=async()=>d?fe():`${Y.env.SYSTEMROOT||Y.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`;function f(e,r,t){let n=o=>Object.defineProperty(e,r,{value:o,enumerable:!0,writable:!0});return Object.defineProperty(e,r,{configurable:!0,enumerable:!0,get(){let o=t();return n(o),o},set(o){n(o)}}),e}import{promisify as Pe}from"util";import O from"process";import{execFile as Ae}from"child_process";import{promisify as pe}from"util";import ue from"process";import{execFile as ge}from"child_process";var he=pe(ge);async function I(){if(ue.platform!=="darwin")throw new Error("macOS only");let{stdout:e}=await he("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]),t=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(e)?.groups.id??"com.apple.Safari";return t==="com.apple.safari"?"com.apple.Safari":t}import we from"process";import{promisify as xe}from"util";import{execFile as ye,execFileSync as cr}from"child_process";var ve=xe(ye);async function X(e,{humanReadableOutput:r=!0,signal:t}={}){if(we.platform!=="darwin")throw new Error("macOS only");let n=r?[]:["-ss"],o={};t&&(o.signal=t);let{stdout:i}=await ve("osascript",["-e",e,n],o);return i.trim()}async function T(e){return X(`tell application "Finder" to set app_path to application file id "${e}" as string
2
+ import{a as D,b as A}from"./chunk-PQLKQKQH.js";import{l as S,m as C,n as P,o as U,p as N}from"./chunk-FOT6AMNP.js";import{createServer as Oe}from"http";import{randomBytes as He}from"crypto";import{URL as $e}from"url";import Z from"process";import{Buffer as ee}from"buffer";import re from"path";import{fileURLToPath as ke}from"url";import{promisify as Le}from"util";import te from"child_process";import Me,{constants as Ie}from"fs/promises";import Y from"process";import G,{constants as me}from"fs/promises";import j from"process";import le from"os";import L from"fs";import se from"fs";import z from"fs";var E;function ie(){try{return z.statSync("/.dockerenv"),!0}catch{return!1}}function ae(){try{return z.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function B(){return E===void 0&&(E=ie()||ae()),E}var k,ce=()=>{try{return se.statSync("/run/.containerenv"),!0}catch{return!1}};function u(){return k===void 0&&(k=ce()||B()),k}var K=()=>{if(j.platform!=="linux")return!1;if(le.release().toLowerCase().includes("microsoft"))return!u();try{if(L.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft"))return!u()}catch{}return L.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop")||L.existsSync("/run/WSL")?!u():!1},d=j.env.__IS_WSL_TEST__?K:K();var de=(()=>{let e="/mnt/",r;return async function(){if(r)return r;let t="/etc/wsl.conf",n=!1;try{await G.access(t,me.F_OK),n=!0}catch{}if(!n)return e;let o=await G.readFile(t,{encoding:"utf8"}),i=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(o);return i?(r=i.groups.mountPoint.trim(),r=r.endsWith("/")?r:`${r}/`,r):e}})(),fe=async()=>`${await de()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`,M=async()=>d?fe():`${Y.env.SYSTEMROOT||Y.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`;function f(e,r,t){let n=o=>Object.defineProperty(e,r,{value:o,enumerable:!0,writable:!0});return Object.defineProperty(e,r,{configurable:!0,enumerable:!0,get(){let o=t();return n(o),o},set(o){n(o)}}),e}import{promisify as Pe}from"util";import O from"process";import{execFile as Ae}from"child_process";import{promisify as pe}from"util";import ue from"process";import{execFile as ge}from"child_process";var he=pe(ge);async function I(){if(ue.platform!=="darwin")throw new Error("macOS only");let{stdout:e}=await he("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]),t=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(e)?.groups.id??"com.apple.Safari";return t==="com.apple.safari"?"com.apple.Safari":t}import we from"process";import{promisify as xe}from"util";import{execFile as ye,execFileSync as cr}from"child_process";var ve=xe(ye);async function X(e,{humanReadableOutput:r=!0,signal:t}={}){if(we.platform!=="darwin")throw new Error("macOS only");let n=r?[]:["-ss"],o={};t&&(o.signal=t);let{stdout:i}=await ve("osascript",["-e",e,n],o);return i.trim()}async function T(e){return X(`tell application "Finder" to set app_path to application file id "${e}" as string
3
3
  tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as be}from"util";import{execFile as Se}from"child_process";var Ce=be(Se),y={MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},MSEdgeBHTML:{name:"Edge Beta",id:"com.microsoft.edge.beta"},MSEdgeDHTML:{name:"Edge Dev",id:"com.microsoft.edge.dev"},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},ChromeBHTML:{name:"Chrome Beta",id:"com.google.chrome.beta"},ChromeDHTML:{name:"Chrome Dev",id:"com.google.chrome.dev"},ChromiumHTM:{name:"Chromium",id:"org.chromium.Chromium"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveDHTML:{name:"Brave Dev",id:"com.brave.Browser.dev"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},OperaStable:{name:"Opera",id:"com.operasoftware.Opera"},VivaldiHTM:{name:"Vivaldi",id:"com.vivaldi.Vivaldi"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"}},ur=new Map(Object.entries(y)),F=class extends Error{};async function _(e=Ce){let{stdout:r}=await e("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),t=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(r);if(!t)throw new F(`Cannot find Windows browser in stdout: ${JSON.stringify(r)}`);let{id:n}=t.groups,o=n.lastIndexOf("."),i=n.lastIndexOf("-"),c=o===-1?void 0:n.slice(0,o),a=i===-1?void 0:n.slice(0,i);return y[n]??y[c]??y[a]??{name:n,id:n}}var Ee=Pe(Ae),Be=e=>e.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,r=>r.toUpperCase());async function H(){if(O.platform==="darwin"){let e=await I();return{name:await T(e),id:e}}if(O.platform==="linux"){let{stdout:e}=await Ee("xdg-mime",["query","default","x-scheme-handler/http"]),r=e.trim();return{name:Be(r.replace(/.desktop$/,"").replace("-"," ")),id:r}}if(O.platform==="win32")return _();throw new Error("Only macOS, Linux, and Windows are supported")}var Te=Le(te.execFile),$=re.dirname(ke(import.meta.url)),q=re.join($,"xdg-open"),{platform:w,arch:V}=Z;async function Fe(){let e=await M(),r=String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,t=ee.from(r,"utf16le").toString("base64"),{stdout:n}=await Te(e,["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",t],{encoding:"utf8"}),o=n.trim(),i={ChromeHTML:"com.google.chrome",BraveHTML:"com.brave.Browser",MSEdgeHTM:"com.microsoft.edge",FirefoxURL:"org.mozilla.firefox"};return i[o]?{id:i[o]}:{}}var J=async(e,r)=>{let t;for(let n of e)try{return await r(n)}catch(o){t=o}throw t},v=async e=>{if(e={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...e},Array.isArray(e.app))return J(e.app,a=>v({...e,app:a}));let{name:r,arguments:t=[]}=e.app??{};if(t=[...t],Array.isArray(r))return J(r,a=>v({...e,app:{name:a,arguments:t}}));if(r==="browser"||r==="browserPrivate"){let a={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","com.brave.Browser":"brave","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge"},l={chrome:"--incognito",brave:"--incognito",firefox:"--private-window",edge:"--inPrivate"},s=d?await Fe():await H();if(s.id in a){let m=a[s.id];return r==="browserPrivate"&&t.push(l[m]),v({...e,app:{name:g[m],arguments:t}})}throw new Error(`${s.name} is not supported as a default browser`)}let n,o=[],i={};if(w==="darwin")n="open",e.wait&&o.push("--wait-apps"),e.background&&o.push("--background"),e.newInstance&&o.push("--new"),r&&o.push("-a",r);else if(w==="win32"||d&&!u()&&!r){n=await M(),o.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),d||(i.windowsVerbatimArguments=!0);let a=["Start"];e.wait&&a.push("-Wait"),r?(a.push(`"\`"${r}\`""`),e.target&&t.push(e.target)):e.target&&a.push(`"${e.target}"`),t.length>0&&(t=t.map(l=>`"\`"${l}\`""`),a.push("-ArgumentList",t.join(","))),e.target=ee.from(a.join(" "),"utf16le").toString("base64")}else{if(r)n=r;else{let a=!$||$==="/",l=!1;try{await Me.access(q,Ie.X_OK),l=!0}catch{}n=Z.versions.electron??(w==="android"||a||!l)?"xdg-open":q}t.length>0&&o.push(...t),e.wait||(i.stdio="ignore",i.detached=!0)}w==="darwin"&&t.length>0&&o.push("--args",...t),e.target&&o.push(e.target);let c=te.spawn(n,o,i);return e.wait?new Promise((a,l)=>{c.once("error",l),c.once("close",s=>{if(!e.allowNonzeroExitCode&&s>0){l(new Error(`Exited with code ${s}`));return}a(c)})}):(c.unref(),c)},_e=(e,r)=>{if(typeof e!="string")throw new TypeError("Expected a `target`");return v({...r,target:e})};function Q(e){if(typeof e=="string"||Array.isArray(e))return e;let{[V]:r}=e;if(!r)throw new Error(`${V} is not supported`);return r}function b({[w]:e},{wsl:r}){if(r&&d)return Q(r);if(!e)throw new Error(`${w} is not supported`);return Q(e)}var g={};f(g,"chrome",()=>b({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));f(g,"brave",()=>b({darwin:"brave browser",win32:"brave",linux:["brave-browser","brave"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe",x64:["/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe","/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe"]}}));f(g,"firefox",()=>b({darwin:"firefox",win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));f(g,"edge",()=>b({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));f(g,"browser",()=>"browser");f(g,"browserPrivate",()=>"browserPrivate");var oe=_e;var ne=class{profile;environment;creds;oauth;constructor(r="default",t="prod",n){this.profile=r,this.environment=t,this.creds=n??new D,this.oauth=new A(t)}async login(){let{server:r,port:t}=await this.startCallbackServer(),n=N(t);try{let o=this.creds.loadClient(this.profile,this.environment),i=o?.redirect_uris;(!o||!i?.includes(n))&&(o=await this.oauth.registerClient(n),this.creds.saveClient(this.profile,this.environment,o));let c=o.client_id,[a,l]=A.generatePkce(),s=He(32).toString("hex"),m=this.oauth.buildAuthorizationUrl(c,l,s,n),p=await this.waitForCallback(r,t,m,s);if(!p)throw new Error("Login cancelled or timed out");let h=await this.oauth.exchangeCode(p,c,a,n),x={access_token:h.access_token,refresh_token:h.refresh_token,expires_at:Math.floor(Date.now()/1e3)+h.expires_in,scope:h.scope??"*"};return this.creds.saveCredentials(this.profile,this.environment,x),this.creds.setActiveProfile(this.profile),x}catch(o){throw r.close(),o}}startCallbackServer(){return new Promise((r,t)=>{let n=C,o=()=>{let i=Oe();i.on("error",c=>{c.code==="EADDRINUSE"&&n<P?(n++,o()):t(new Error(`Failed to start callback server: ${c.message}. Ports ${C}-${P} are all in use.`))}),i.listen(n,S,()=>{r({server:i,port:n})})};o()})}waitForCallback(r,t,n,o){return new Promise(i=>{let c=!1,a=setTimeout(()=>l(null),12e4),l=s=>{c||(c=!0,clearTimeout(a),r.close(),i(s))};r.on("request",(s,m)=>{let p=new $e(s.url??"/",`http://${S}:${t}`);if(p.pathname!==U){m.writeHead(404),m.end();return}let h=p.searchParams.get("state"),x=p.searchParams.get("code");if(p.searchParams.get("error")){m.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),m.end(R({state:"error",title:"Login failed",message:"We couldn't complete the sign-in. You can close this tab and try again from your terminal."})),l(null);return}if(h!==o){m.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),m.end(R({state:"error",title:"Invalid state",message:"The sign-in response didn't match this session. Please return to your terminal and try again."})),l(null);return}m.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),m.end(R({state:"success",title:"You're signed in",message:"Head back to your terminal \u2014 KaneAI is ready when you are.",autoClose:!0})),l(x)}),oe(n).catch(s=>{let m=s instanceof Error?s.message:String(s);process.stderr.write(`[auth] Could not open browser: ${m}
4
4
  Please open this URL manually: ${n}
5
5
  `)})})}};function R(e){let r=e.state==="success",t=r?"#22c55e":"#ef4444",n=r?"rgba(34, 197, 94, 0.12)":"rgba(239, 68, 68, 0.12)",o=r?'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7"/></svg>':'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg>',i=e.autoClose?"<script>setTimeout(function(){try{window.close();}catch(e){}}, 1500);</script>":"";return`<!doctype html>
@@ -0,0 +1,13 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as z}from"./chunk-CB4WEGVB.js";import{d as X,g as Y}from"./chunk-X7VI7KK3.js";import{b as Q,e as F,j as V}from"./chunk-AH4AXJML.js";import{b as J,d as W}from"./chunk-G7VF5SDK.js";import{b as $}from"./chunk-VE3SUJMA.js";import{a as E}from"./chunk-CBDUXGVQ.js";import{a as q}from"./chunk-E47GFYXA.js";import{i as N,j as U}from"./chunk-FOT6AMNP.js";import{a as P}from"./chunk-LIJX5PIV.js";import{a as A,b as G}from"./chunk-KKZRPFWO.js";import{a as g}from"./chunk-V7QXJKX7.js";import{dirname as Ee,join as Re}from"path";function nt(e,r,t){let s=e.total_runs??1,o=e.run_dir,n,i;if(s>1&&o){let a=Ee(o);n=Array.from({length:s},(c,l)=>Re(a,String(r+l))),t&&t.length===s&&(i=t)}return{allRunDirs:n,flowObjectives:i}}function it(e,r,t,s){return{index:t,objective:r,summary:e.summary,oneLiner:e.one_liner,status:e.status,resultCode:e.result_code,reasonCode:e.reason_code,perFlowMetadata:e.per_flow_metadata,context:e.context??{memory:{},variables:{},pointer:""},run_dir:e.run_dir,run_dirs:s.allRunDirs,flow_objectives:s.flowObjectives}}import{spawn as xe}from"child_process";async function Z(e,r,t=100){let s=`${e.replace(/\/+$/,"")}/json/version`,o=await g(s);if(!o.ok)throw new Error(`CDP /json/version returned ${o.status}`);let n=await o.json();if(!n.webSocketDebuggerUrl)throw new Error("CDP /json/version missing webSocketDebuggerUrl");let i=new q(n.webSocketDebuggerUrl);await new Promise((C,u)=>{i.once("open",C),i.once("error",u)});let a=1,c=new Map;i.on("message",C=>{let u;try{u=JSON.parse(C.toString())}catch{return}if(u.id==null)return;let y=c.get(u.id);y&&(c.delete(u.id),u.error?y.reject(new Error(u.error.message)):y.resolve(u.result))});function l(C,u){let y=a++;return new Promise((Ce,Se)=>{c.set(y,{resolve:ve=>Ce(ve),reject:Se});let H={id:y,method:C};u&&(H.params=u),i.send(JSON.stringify(H))})}let d=(await l("Target.getTargets")).targetInfos.find(C=>C.type==="page");if(!d)throw i.close(),new Error("CDP: no page target found");let S=(await l("Browser.getWindowForTarget",{targetId:d.targetId})).windowId,b="",h=!1,_=null,R=!1;i.on("close",()=>{R=!0}),i.on("error",()=>{R=!0});async function K(){if(!h){if(R){h=!0;return}try{let u=(await l("Browser.getWindowBounds",{windowId:S})).bounds,y=`${u.left}:${u.top}:${u.width}:${u.height}`;y!==b&&(b=y,r({left:u.left,top:u.top,width:u.width,height:u.height}))}catch{}h||(_=setTimeout(K,t))}}return K(),{stop(){if(!h){h=!0,_&&clearTimeout(_);try{i.close()}catch{}}}}}var Ie=new Set(["1","true","yes"]);function gt(e){if(e?.headless)return null;let r=process.env.KANE_CLI_DISABLE_MARKER;if(r!=null&&Ie.has(r.toLowerCase()))return null;let t=z();if(!t)return null;let s=[...t.args,"overlay"];e?.text&&s.push(e.text);let o;try{o=xe(t.cmd,s,{cwd:t.cwd,stdio:["pipe","ignore","ignore"],detached:!1,windowsHide:!0})}catch{return null}function n(c){if(!(!o.stdin||o.stdin.destroyed))try{o.stdin.write(JSON.stringify(c)+`
3
+ `)}catch{}}e?.chromePid&&e.chromePid>0&&n({type:"chrome_pid",pid:e.chromePid});let i=null;e?.cdpEndpoint&&Z(e.cdpEndpoint,c=>n({type:"bounds",...c})).then(c=>{i=c.stop}).catch(()=>{});let a=!1;return{setRunActive(c){a||n({type:"run_active",active:c})},setStepText(c){if(a)return;let l=c.trim();l&&n({type:"step_text",text:l})},setStepComplete(){a||n({type:"step_complete"})},kill(){if(!a){a=!0,i?.();try{o.stdin?.end()}catch{}try{o.kill("SIGTERM")}catch{}}}}}import{readFileSync as ke,existsSync as Ae}from"fs";function bt(e){if(!Ae(e))return null;try{return ke(e,"utf-8").trim()||null}catch{return null}}function ee(e,r,t){return`${e}/projects/${r}/test-cases/${t}`}function wt(e,r,t,s){return`${ee(e,r,t)}/dashboard/share/${s}?type=summary&agentView=true&fqdn=summary-page`}function _t(e,r,t){return`${ee(e,r,t)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{readFileSync as te,readdirSync as re,existsSync as v}from"fs";import{join as w}from"path";function Et(e,r,t,s,o,n){try{let i=w(e,"runs",String(r),"run-test");if(!v(i)){o("warn","SCREENSHOT_SKIP","Runs dir not found",{step_index:t,reason:"runsDir_not_found",path:i});return}let a=i;if(n){let h=w(i,`child-${n}`);if(!v(h)){o("warn","SCREENSHOT_SKIP","Child dir not found",{step_index:t,child_id:n,reason:"child_dir_not_found",path:h});return}let _=re(h).filter(R=>v(w(h,R,"screenshots")));if(_.length===0){o("warn","SCREENSHOT_SKIP","No screenshots dir under child",{step_index:t,child_id:n,reason:"no_child_screenshots_dir"});return}a=w(h,_[0])}else if(!v(w(i,"screenshots"))){let h=re(i).filter(_=>v(w(i,_,"screenshots")));if(h.length===0){o("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:t,reason:"no_screenshots_dir"});return}a=w(i,h[0])}let c=w(a,"screenshots",`step_${String(t).padStart(3,"0")}.png`);if(!v(c)){o("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:t,child_id:n,reason:"screenshot_not_found",path:c});return}let l=w(i,"actions.ndjson");if(!v(l)){o("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:t,reason:"ndjson_not_found"});return}let f=te(l,"utf-8").trim().split(`
4
+ `),d=f[f.length-1];if(!d){o("warn","SCREENSHOT_SKIP","NDJSON empty",{step_index:t,reason:"ndjson_empty"});return}let S=JSON.parse(d).action_id;if(!S){o("warn","SCREENSHOT_SKIP","No action_id in NDJSON",{step_index:t,reason:"no_action_id"});return}let b=te(c);s.enqueue(S,b),o("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{step_index:t,child_id:n,action_id:S,size:b.length})}catch(i){o("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{step_index:t,error:i instanceof Error?i.message:String(i)})}}var Pe=null,Te=()=>Pe??=import("sharp").then(e=>e.default??e).catch(()=>null),se=class{maxWorkers;maxRetries=2;queue=[];activeCount=0;drainResolvers=[];sas;log;uploadedExt=new Map;constructor(r,t=3,s){this.sas=r,this.maxWorkers=t,this.log=s}updateSas(r){this.sas=r}enqueue(r,t){this.queue.push({operationId:r,buffer:t}),this.pump()}async drain(r=3e4){if(!(this.queue.length===0&&this.activeCount===0))return new Promise(t=>{this.drainResolvers.push(t),setTimeout(()=>{t()},r)})}pump(){for(;this.activeCount<this.maxWorkers&&this.queue.length>0;){let r=this.queue.shift();this.activeCount++,this.processJob(r).finally(()=>{if(this.activeCount--,this.pump(),this.queue.length===0&&this.activeCount===0){for(let t of this.drainResolvers)t();this.drainResolvers=[]}})}}async processJob(r){let t,s="image/webp",o=await Te();if(o)try{let c=await o(r.buffer).webp({quality:80}).toBuffer();t=new Uint8Array(c)}catch(c){t=new Uint8Array(r.buffer),s="image/png",this.log?.("warn","SCREENSHOT_CONVERT_FAILED","WebP conversion failed, using PNG",{operation_id:r.operationId,error:c instanceof Error?c.message:String(c)})}else t=new Uint8Array(r.buffer),s="image/png";let n=s==="image/webp"?"webp":"png",i=`test_screenshots/untagged_screenshot/${r.operationId}.${n}`,a=`${this.sas.base_url}/${this.sas.container}/${i}?${this.sas.sas_token}`;for(let c=0;c<=this.maxRetries;c++)try{let l=await g(a,{method:"PUT",headers:{"Content-Type":s,"x-ms-blob-type":"BlockBlob"},body:t});if(l.ok){this.uploadedExt.set(r.operationId,n);return}if(c<this.maxRetries){await this.backoff(c);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed after retries",{operation_id:r.operationId,status:l.status,attempts:this.maxRetries+1})}catch{if(c<this.maxRetries){await this.backoff(c);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed (network error)",{operation_id:r.operationId,error:"network",attempts:this.maxRetries+1})}}backoff(r){let t=r===0?1e3:3e3;return new Promise(s=>setTimeout(s,t))}getExt(r){return this.uploadedExt.get(r)??"png"}getExtMap(){return this.uploadedExt}isNearExpiry(){if(!this.sas.expiry)return!1;let r=new Date(this.sas.expiry).getTime();return Date.now()>r-5*6e4}};function oe(e,r){let t={},s={},o=r;for(let[n,i]of Object.entries(e))if(i.secret){let a=`secrets.user.${n}`;t[a]={value:i.value,secret:!0,syntax:`{{secrets.user.${n}}}`,type:"secret"},s[n]=a,o=o.replaceAll(`{{${n}}}`,`{{secrets.user.${n}}}`)}else{let a=`global.${n}`;t[a]={value:i.value,secret:!1,syntax:`{{global.${n}}}`,type:"global"},s[n]=a,o=o.replaceAll(`{{${n}}}`,`{{global.${n}}}`)}return{variables:t,objective:o,keyMap:s}}var T=class{constructor(r){this.baseUrl=r}async pushSecret(r){let t=A(r.username,r.accessKey),s=await g(`${this.baseUrl}/logistics/v1.0/secrets/create`,{method:"PUT",headers:{Authorization:t,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({secretKey:r.secretKey,secretValue:r.secretValue,orgId:r.orgId,username:r.username,scope:"user",type:"user",accessKey:r.accessKey})});if(!s.ok)throw new Error(`Push secret failed: ${s.status} ${await s.text()}`)}static extractVariableKeys(r){let t=r.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g),s=new Set;for(let o of t)s.add(o[1]);return[...s]}};var j=class extends G{constructor(r,t,s){super(r,{username:t,accessKey:s})}async upsertVariable(r){let t=r.environmentId??0,s=await g(`${this.baseUrl}/v1/variables`,{method:"POST",headers:this.headers(),body:JSON.stringify({name:r.name,value:String(r.value),type:"variable",value_type:"string",is_persist:r.isPersist??!1,environment_id:t})});if(s.ok)return{id:(await s.json()).id??0};if(s.status!==409&&s.status!==422)return{id:0};if(!(await g(`${this.baseUrl}/v1/variables/name/${encodeURIComponent(r.name)}`,{method:"PUT",headers:this.headers(),body:JSON.stringify({value:String(r.value),value_type:"string",type:"variable",environment_id:t})})).ok)return{id:0};let n=await g(`${this.baseUrl}/v1/variables/${encodeURIComponent(r.name)}?environment_id=${t}`,{method:"GET",headers:this.headers()});return n.ok?{id:(await n.json()).data?.id??0}:{id:0}}};import{readdirSync as je,readFileSync as ie,existsSync as ae}from"fs";import{join as Oe}from"path";function ne(e,r){if(!ae(e))return{};let t={},s;try{s=je(e).filter(o=>o.endsWith(".json")).sort()}catch{return{}}for(let o of s)try{let n=ie(Oe(e,o),"utf-8"),i=JSON.parse(n);if(i&&typeof i=="object"){for(let[a,c]of Object.entries(i))if(c&&typeof c=="object"&&"value"in c){let l=c;t[a]={value:l.value,secret:l.secret??!1,syntax:l.syntax??`{{${a}}}`}}}}catch{r?r("warn","VARIABLE_PARSE_FAILED","Skipping invalid variables file",{file:o}):process.stderr.write(`[variables] Warning: skipping invalid variables file: ${o}
5
+ `)}return t}function ce(e){if(!ae(e))throw new Error(`Variables file not found: ${e}`);let r=ie(e,"utf-8"),t=JSON.parse(r),s={};if(t&&typeof t=="object"){for(let[o,n]of Object.entries(t))if(n&&typeof n=="object"&&"value"in n){let i=n;s[o]={value:i.value,secret:i.secret??!1,syntax:i.syntax??`{{${o}}}`}}}return s}function le(e){let r;try{r=JSON.parse(e)}catch{throw new Error("Invalid --variables JSON")}let t={};if(r&&typeof r=="object"){for(let[s,o]of Object.entries(r))if(o&&typeof o=="object"&&"value"in o){let n=o;t[s]={value:n.value,secret:n.secret??!1,syntax:n.syntax??`{{${s}}}`}}}return t}function de(e,r,t){let s=ne(e,t),o=ne(r,t);return{...s,...o}}function Kt(e,r){if(Object.keys(e).length===0)return{};let t={};for(let[s,o]of Object.entries(e)){let n=o.syntax??`{{${s}}}`;r.includes(n)&&(t[s]=o)}return t}function Ht(e){let r=de(e.globalDir,e.localDir,e.onLoadError),t=e.file?ce(e.file):{},s=e.inline?le(e.inline):{},o={...r,...t,...s},n=Object.keys(o).length>0,{variables:i,objective:a}=n?oe(o,e.objective):{variables:{},objective:e.objective},c=Object.entries(o).filter(([,f])=>f.secret),l=Object.entries(o).filter(([,f])=>!f.secret);return{raw:o,auteur:i,auteurObjective:a,secretEntries:c,nonSecretEntries:l}}async function qt(e){if(e.localMode)return{};let r=E(e.env);if(e.variables.secretEntries.length>0){let s=new T(r.secretsBaseUrl);for(let[o,n]of e.variables.secretEntries)s.pushSecret({secretKey:o,secretValue:n.value,username:e.auth.username,accessKey:e.auth.access_key,orgId:e.orgId}).then(()=>e.log("info","SECRET_PUSH_OK","Secret pushed",{key:o})).catch(i=>e.log("error","SECRET_PUSH_FAILED","Secret push failed",{key:o,error:String(i)}))}let t={};if(e.variables.nonSecretEntries.length>0){let s=new j(r.tmsBaseUrl,e.auth.username,e.auth.access_key);for(let[o,n]of e.variables.nonSecretEntries)try{let i=await s.upsertVariable({name:o,value:n.value});t[o]=i.id,e.log("info","VAR_PUSH_OK","Variable pushed",{name:o,id:i.id})}catch(i){e.log("error","VAR_PUSH_FAILED","Variable push failed",{name:o,error:String(i)})}}return t}function Jt(e){let r={objective:e.objective,model:e.model,width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,stream:!0,max_steps:e.maxSteps??30,headless:e.headless??!1};return e.url&&(r.url=e.url),e.chrome.wsEndpoint?r.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(r.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(r.username=e.auth.basicAuth.username,r.access_key=e.auth.basicAuth.access_key):e.auth.token&&(r.auth={type:"bearer",token:e.auth.token}),e.disableAskUser&&(r.disable_ask_user=!0),e.enableTaskSkills&&(r.enable_task_skills=!0),e.variables&&Object.keys(e.variables).length>0&&(r.variables=e.variables),e.globalContext&&(r.global_context=e.globalContext),e.localContext&&(r.local_context=e.localContext),e.sessionContext&&(r.session_context=e.sessionContext),r}var De=15e3,M=3,ue=[500,1e3];async function Xt(e){if(process.env.KANE_LOCK_CONFLICT_SIMULATE==="1")return{ok:!1,reason:"concurrent",httpStatus:409,message:"simulated contention (KANE_LOCK_CONFLICT_SIMULATE=1)"};let r=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground`,t=await O(r,{from_commit_id:e.fromCommitId,new_commit_id:e.newCommitId},e.auth);return t.ok?{ok:!0,sessionExpiresAt:m(t.body,"session_expires_at")??""}:{ok:!1,...Le(t)}}function Le(e){let r=m(e.body,"error")??m(e.body,"code")??"",t=m(e.body,"message")??m(e.body,"detail")??e.text??`HTTP ${e.status}`,s;return e.status===0?s="network":e.status===401||e.status===403?s="auth":e.status===409&&r==="PlaygroundBaseCommitMismatch"?s="base_mismatch":e.status===409?s="concurrent":e.status===422?s="disabled":e.status===400&&/no committed/i.test(t)?s="no_commits":e.status===400?s="missing_field":e.status>=500||e.status===408||e.status===429?s="network":s="other",{reason:s,httpStatus:e.status,message:t}}async function Yt(e){let r=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground/reserve`,t=await O(r,void 0,e.auth);return t.ok?{ok:!0,sessionExpiresAt:m(t.body,"session_expires_at")??""}:{ok:!1,expired:t.status===404,httpStatus:t.status,message:m(t.body,"message")??m(t.body,"detail")??t.text??`HTTP ${t.status}`}}async function fe(e){let r=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,t={commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:e.body.commitMessage,total_steps:e.body.totalSteps};e.body.timeTaken!==void 0&&(t.time_taken=e.body.timeTaken),e.body.objectives!==void 0&&(t.objectives=e.body.objectives);let s=await O(r,t,e.auth);return s.ok?{ok:!0,testId:m(s.body,"test_id")??e.testId,testcaseId:m(s.body,"testcase_id")??"",projectId:m(s.body,"project_id"),isTestCaseDeleted:typeof s.body?.is_test_case_deleted=="boolean"?s.body.is_test_case_deleted:void 0}:{ok:!1,...Ne(s)}}function Ne(e){let r=m(e.body,"error")??m(e.body,"code")??"",t=m(e.body,"message")??m(e.body,"detail")??e.text??`HTTP ${e.status}`,s;return e.status===0?s="network":e.status===401||e.status===403?s="auth":e.status===409&&r==="PlaygroundBaseCommitMismatch"?s="base_mismatch":e.status===409&&r==="PlaygroundCommitLockMismatch"?s="lock_mismatch":e.status===409?s="expired":e.status===422?s="not_found":e.status>=500||e.status===408||e.status===429?s="network":s="other",{reason:s,httpStatus:e.status,message:t}}async function Zt(e){let r=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,t={discard:!0,commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:"(discarded)",total_steps:1},s=await O(r,t,e.auth);return s.ok?{ok:!0}:{ok:!1,reason:m(s.body,"error")??"other",httpStatus:s.status,message:m(s.body,"message")??m(s.body,"detail")??s.text??`HTTP ${s.status}`}}async function O(e,r,t){let s=null;for(let o=1;o<=M;o++){let n=new AbortController,i=setTimeout(()=>n.abort(),De);try{let a=await g(e,{method:"POST",headers:{Authorization:A(t.username,t.accessKey),"Content-Type":"application/json",Accept:"application/json"},...r!==void 0?{body:JSON.stringify(r)}:{},signal:n.signal});clearTimeout(i);let c=await a.text(),l=null;if(c)try{l=JSON.parse(c)}catch{}let f=a.status>=500||a.status===408||a.status===429;if(a.ok||!f)return{ok:a.ok,status:a.status,body:l,text:c};if(o<M){await me(ue[o-1]??1e3);continue}return{ok:!1,status:a.status,body:l,text:c}}catch(a){if(clearTimeout(i),s=a,o<M){await me(ue[o-1]??1e3);continue}}}return{ok:!1,status:0,body:null,text:s?.message??"exhausted retries"}}function me(e){return new Promise(r=>setTimeout(r,e))}function m(e,r){if(typeof e!="object"||e===null)return;let t=e[r];return typeof t=="string"?t:void 0}import{readFileSync as pe,writeFileSync as he,existsSync as be}from"fs";function ge(e,r,t){if(t.forceAuthor)return"re-recorded from scratch";if(t.retryTriggered)return"re-recorded after retry";if(r.length>0&&r.every(i=>i.kind==="author"&&i.reason==="no-result-md"))return"initial recording";if(r.length>0&&r.every(i=>i.kind==="replay"))return t.wantsPush?"re-recorded (no source changes)":"no changes";let s=[];for(let i=0;i<r.length;i++){let a=r[i];if(!a||a.kind!=="author"||a.reason==="downstream-of-divergence"||a.reason==="no-result-md")continue;let c=Ue(e,e.steps[i]);switch(a.reason){case"structure-mismatch":s.push(`added/removed: ${c}`);break;case"md5-mismatch":s.push(`modified: ${c}`);break;case"missing-recording":s.push(`re-recorded: ${c}`);break;case"recorded-failed":s.push(`re-authored after failure: ${c}`);break}}if(s.length===0)return"automated commit";let o=s.filter((i,a)=>a===0||s[a-1]!==i),n=o.slice(0,3).join("; ");return o.length>3?`${n}; +${o.length-3} more`:n}function Ue(e,r){if(!r)return"unknown step";let t=r.trace[0]?.stepIndex;if(t==null)return"unknown step";let o=e.rootSteps[t-1]?.heading?.trim()??"";return r.trace.length>1?o?`imported step in "${o}"`:`imported step ${t}`:o||`step ${t}`}function $e(e){if(!(!e.shouldReplaceLocalOutput||!e.resolvedTest||!e.sourcePath||!e.stepRunRecords||!e.outcomes||!e.overallStatus))return async()=>{Y({resolvedTest:e.resolvedTest,sessionDir:e.session.sessionDir,stepRunRecords:e.stepRunRecords,outcomes:e.outcomes,overallStatus:e.overallStatus,startedISO:e.startedISO??new Date().toISOString(),durationS:e.durationS??0,sessionId:e.session.sessionId,commitId:e.fromCommitId??"",tmsIds:e.tmsIds??{},codeExportDir:e.codeExportDir}),V(Q(e.sourcePath));let r=new Set;for(let t of e.resolvedTest.steps)if(t.trace.length>1){let s=X(t.trace);if(r.has(s))continue;r.add(s),be(`${s}.staging`)&&V(s)}}}function Fe(e){if(!(!e.shouldCommit||e.isFirstRun||!e.tmsBaseUrl||!e.testId||!e.fromCommitId||!e.newCommitId||!e.basicAuth||!e.resolvedTest||!e.decisions))return async()=>{let r=ge(e.resolvedTest,e.decisions,{wantsPush:e.wantsPush??!1,retryTriggered:e.retryTriggered??!1,forceAuthor:e.forceAuthor??!1}),t=e.resolvedTest.steps.map(o=>o.objective).filter(o=>typeof o=="string"&&o.length>0).slice(0,50),s=await fe({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:e.testId,body:{commitId:e.newCommitId,fromCommitId:e.fromCommitId,commitMessage:r,totalSteps:e.resolvedTest.steps.length,timeTaken:Math.round(e.durationS??0),objectives:t},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(s.ok&&e.sourcePath){let o=F(e.sourcePath);try{let n=JSON.parse(pe(o,"utf8"));n.commit_id=e.newCommitId,he(o,JSON.stringify(n,null,2)+`
6
+ `,"utf8")}catch(n){process.stderr.write(`warn: failed to update meta.json commit_id: ${n.message}
7
+ `)}}return s}}function Ve(e){if(!(!e.isFirstRun||!e.sourcePath))return async r=>{if(!e.sourcePath)return;let t=F(e.sourcePath);try{let s=be(t)?JSON.parse(pe(t,"utf8")):{};e.session.sessionId&&(s.commit_id=e.session.sessionId),r&&(s.testcase_id=r),e.tmsIds?.testId&&(s.test_id=e.tmsIds.testId),e.tmsIds?.projectId&&(s.project_id=e.tmsIds.projectId),e.tmsIds?.folderId&&(s.folder_id=e.tmsIds.folderId),e.tmsIds?.orgId&&(s.org_id=e.tmsIds.orgId),e.tmsIds?.sessionName&&(s.session_name=e.tmsIds.sessionName),he(t,JSON.stringify(s,null,2)+`
8
+ `,"utf8")}catch(s){process.stderr.write(`warn: failed to update meta.json after endTest: ${s.message}
9
+ `)}}}function dr(e){let r=E(e.env),{session:t,auth:s}=e,o=s.basicAuth?{username:s.basicAuth.username,accessKey:s.basicAuth.access_key}:s.token,n=s.resolvedCreds?.username??s.basicAuth?.username??"",i=s.resolvedCreds?.access_key??s.basicAuth?.access_key??"",a=s.resolvedCreds?.org_id??0,c=s.resolvedCreds?.user_id??0,l=[];for(let b of Object.keys(t.auteurVariables))b.startsWith("secrets.user.")&&l.push({key_name:b.replace("secrets.user.",""),scope:"user"});let d=t.getContext().prior_runs.map(b=>b.status),p=t.auteurVariables,S=Object.keys(p).length>0;return{controllerBaseUrl:r.controllerBaseUrl,tmsBaseUrl:r.tmsBaseUrl,auth:o,authResolver:s.resolver,sessionId:t.sessionId,sessionDir:t.sessionDir,testId:t.testId,commitId:t.sessionId,projectId:e.projectId,folderId:e.folderId,firstObjective:t.firstObjective??"KaneAI Test",firstUrl:t.firstUrl??"",runDirs:t.getRunDirs(),runObjectives:t.getRunObjectives(),runMetadata:t.getRunMetadata(),startedAt:t.startedAt,endedAt:new Date().toISOString(),totalSteps:e.totalSteps,totalDuration:e.totalDuration,runStatuses:d,orgId:a,userId:c,tmsUsername:n,tmsAccessKey:i,screenshotBaseUrl:t.screenshotBaseUrl,screenshotExtMap:e.screenshotExtMap,shareApiBaseUrl:r.shareApiBaseUrl,variables:S?p:void 0,variableIds:e.variableIds,secrets:l,codeExport:e.codeExport,onProgress:e.onProgress,log:e.log,shouldUploadArtifacts:e.shouldUploadArtifacts,shouldReplaceLocalOutput:e.shouldReplaceLocalOutput,shouldCommit:e.shouldCommit,isFirstRun:e.isFirstRun,onAtomicReplace:$e(e),onCommitLock:Fe(e),onFinalizeSuccess:Ve(e)}}var ye=["python","javascript"];function Me(e){if(e!==void 0){if(!ye.includes(e))throw new Error(`--code-language must be one of: ${ye.join(", ")} (got "${e}")`);return e}}function mr(e,r){let t=Me(e.codeLanguage);return{enabled:e.codeExport??r.enabled,language:t??r.language,skipValidation:e.skipCodeValidation??r.skip_validation}}async function pr(e){try{let t=await new P(e.tmsBaseUrl,e.auth.username,e.auth.access_key).createAtmTest({objective:e.objective.slice(0,100),creation_mode:"KANECLI",playground_disabled:e.hasCustomProfile,testURL:e.url,project_id:e.projectId,folder_id:e.folderId,authoring_version:4});return e.log("info","ATM_CREATE_OK","Test created",{test_id:t}),t}catch(r){return e.log("error","ATM_CREATE_FAILED","Test creation failed",{error:r instanceof Error?r.message:String(r)}),null}}import{mkdtempSync as Ye,rmSync as Ze}from"fs";import{join as et}from"path";import{tmpdir as tt}from"os";import{spawn as we,spawnSync as Be}from"child_process";import{existsSync as B}from"fs";import{createConnection as Ke}from"net";import{homedir as x,platform as k}from"os";import{join as I}from"path";var He=new Set(["1","true","yes"]),D=class extends Error{constructor(r){super(r),this.name="ChromeNotFoundError"}};function Rr(e){return e instanceof D?e.message:`Chrome failed: ${e instanceof Error?e.message:String(e)}`}var L={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",I(x(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",I(x(),"Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing"),"/Applications/Chromium.app/Contents/MacOS/Chromium"],linux:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/google-chrome-for-testing","/usr/local/bin/google-chrome-for-testing",I(x(),"chrome-for-testing/chrome-linux64/chrome"),"/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium"],win32:["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",I(x(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",I(x(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe")]};function qe(){if(process.env.KANE_CLI_CHROME_PATH)return process.env.KANE_CLI_CHROME_PATH;let e=k(),r=L[e]??L.linux;for(let t of r)if(B(t))return t;return e==="win32"?"chrome.exe":"google-chrome"}function Ge(){if(process.env.KANE_CLI_CHROME_PATH)return B(process.env.KANE_CLI_CHROME_PATH);let e=k();if((L[e]??L.linux).some(o=>B(o)))return!0;let t=e==="win32"?"chrome.exe":"google-chrome",s=e==="win32"?"where":"which";try{return Be(s,[t],{stdio:"ignore"}).status===0}catch{return!1}}function Je(){let e=k();return e==="darwin"?["Google Chrome is required but was not found at any standard path.","","Install via Homebrew (recommended):"," brew install --cask google-chrome","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
10
+ `):e==="linux"?["Google Chrome is required but was not found at /usr/bin/google-chrome.","(amd64 / x86_64 only \u2014 Google does not ship Chrome for Linux ARM.)","","Debian / Ubuntu (any version):"," wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"," sudo apt install -y ./google-chrome-stable_current_amd64.deb","","Fedora / RHEL / AlmaLinux / Rocky:"," sudo dnf install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
11
+ `):e==="win32"?["Google Chrome is required but was not found in Program Files or AppData.","","Install via winget (Windows 10 1809+):"," winget install --id Google.Chrome -e --silent","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=C:\\path\\to\\chrome.exe","to point at a non-standard install."].join(`
12
+ `):["Google Chrome is required.","Install from https://www.google.com/chrome/","(Note: no official Chrome builds for BSD or Alpine/musl Linux.)"].join(`
13
+ `)}function We(e){let r=k(),t=[`--remote-debugging-port=${e.port}`,`--user-data-dir=${e.userDataDir}`,`--window-size=${e.width},${e.height}`,"--no-first-run","--no-default-browser-check","--disable-blink-features=AutomationControlled","--disable-features=DownloadBubble,DownloadBubbleV2","--safebrowsing-disable-download-protection","--disable-popup-blocking","--disable-notifications","--disable-infobars","--disable-translate","--disable-prompt-on-repost","--disable-background-networking","--disable-client-side-phishing-detection","--disable-default-apps","--disable-hang-monitor","--disable-sync","--metrics-recording-only","--safebrowsing-disable-auto-update","--disable-backgrounding-occluded-windows","--disable-background-timer-throttling","--test-type=webdriver","--allow-pre-commit-input","--enable-logging","--v=1"];return r==="linux"&&(t.push("--no-sandbox"),t.push("--disable-dev-shm-usage"),t.push("--password-store=basic")),r==="darwin"&&t.push("--use-mock-keychain"),e.headless&&t.push("--headless=new"),t}function ze(e){return new Promise(r=>{let t=Ke({port:e,host:"127.0.0.1"});t.setTimeout(1e3),t.on("connect",()=>{t.destroy(),r(!0)}),t.on("timeout",()=>{t.destroy(),r(!1)}),t.on("error",()=>{t.destroy(),r(!1)})})}async function Qe(){for(let e=N;e<=U;e++)if(!await ze(e))return e;throw new Error(`All CDP ports ${N}-${U} are in use. Close other Chrome instances.`)}async function Xe(e,r=15e3){let t=Date.now(),s=`http://127.0.0.1:${e}/json/version`;for(;Date.now()-t<r;){try{if((await g(s)).ok)return`http://127.0.0.1:${e}`}catch{}await new Promise(o=>setTimeout(o,200))}throw new Error(`Chrome CDP not ready after ${r}ms on port ${e}`)}async function _e(e){let r=process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD;if(!(r!=null&&He.has(r.toLowerCase()))&&!Ge())throw J()?.log("error","CHROME_NOT_FOUND","Startup gate: Chrome unavailable at standard system paths",{platform:process.platform,kane_cli_chrome_path:process.env.KANE_CLI_CHROME_PATH??null,skip_browser_download:process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD??null}),new D(Je());let s=k(),o=await Qe(),n=qe(),i=We({port:o,...e});e.startUrl&&i.push(e.startUrl);let a=we(n,i,{stdio:"ignore",detached:!0});a.unref();let c=await new Promise((l,f)=>{a.on("error",d=>{f(new Error(`Failed to launch Chrome: ${d.message}. Is Chrome installed at ${n}?`))}),a.on("close",d=>{d!==null&&d!==0&&f(new Error(`Chrome exited during startup with code ${d}`))}),Xe(o).then(l,f)});return{process:a,port:o,cdpEndpoint:c,kill(){try{if(a.pid)if(s==="win32")we("taskkill",["/pid",String(a.pid),"/T","/F"],{stdio:"ignore"});else try{process.kill(-a.pid,"SIGKILL")}catch{a.kill("SIGKILL")}else a.kill("SIGKILL")}catch{}}}}async function Or(e){if(e.cft)return{instance:null,tempDir:null};if(e.wsEndpoint)return{wsEndpoint:e.wsEndpoint,instance:null,tempDir:null};if(e.cdpEndpoint){let o=await g(`${e.cdpEndpoint}/json/version`);if(!o.ok)throw new Error(`CDP endpoint not reachable: ${e.cdpEndpoint} (${o.status})`);return{cdpEndpoint:e.cdpEndpoint,instance:null,tempDir:null}}let r,t=null;if(e.config.chrome_profile_path)r=e.config.chrome_profile_path.replace("~",process.env.HOME??"~");else{t=Ye(et(tt(),"kane-clean-")),r=t;let o=t;W("tempDir",()=>{try{Ze(o,{recursive:!0,force:!0})}catch{}})}let s=await _e({userDataDir:r,width:e.config.window_size.width,height:e.config.window_size.height,startUrl:e.startUrl,headless:e.headless});return{cdpEndpoint:s.cdpEndpoint,instance:s,tempDir:t}}var rt="KaneAI Generated",st="Untitled";async function $r(e){let r=e.config.load(),t=new P(E(e.env).tmsBaseUrl,e.tmsCreds.username,e.tmsCreds.access_key),s=e.projectName??rt,o=e.folderName??st,n=r.project_id??null,i=r.project_name??null;if(!n){let d=(await t.listProjects()).find(p=>p.name===s);if(d)n=d.project_id,i=d.name,e.log("info","ENSURE_PROJECT_FOUND","Found default project",{project_id:n,name:i});else{let p=await t.createProject(s);n=p.id,i=p.name,e.log("info","ENSURE_PROJECT_CREATED","Created default project",{project_id:n,name:i})}$(e.creds,e.config,e.profile,e.env,{projectId:n,projectName:i})}let a=r.folder_id??null,c=r.folder_name??null,l=!r.project_id;if(!a||l){let d=(await t.listFolders(n)).find(p=>p.name===o);if(d)a=d.id,c=d.name,e.log("info","ENSURE_FOLDER_FOUND","Found default folder",{folder_id:a,name:c});else{let p=await t.createFolder(n,o);a=p.id,c=p.name,e.log("info","ENSURE_FOLDER_CREATED","Created default folder",{folder_id:a,name:c})}$(e.creds,e.config,e.profile,e.env,{folderId:a,folderName:c})}return{projectId:n,projectName:i??s,folderId:a,folderName:c??o}}export{nt as a,it as b,D as c,Rr as d,_e as e,gt as f,bt as g,wt as h,_t as i,Et as j,se as k,oe as l,T as m,j as n,Kt as o,Ht as p,qt as q,Jt as r,Xt as s,Yt as t,Zt as u,dr as v,mr as w,pr as x,Or as y,$r as z};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as h}from"./chunk-YVLFHMUW.js";import{a as A}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-TL4SB7MQ.js";import{a as c,b as f,i as P}from"./chunk-C44QQJR4.js";import{a as y}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var L=x(y(),1);var r=x(A(),1);function B(i,d,l,u,p){let g=l==="basic"&&u?`basic (${u})`:l,n=20,s=`${i} [${d}]`,m="\xB7".repeat(Math.max(2,n-s.length+3));return{label:`${s} ${m} ${g}`,profile:i,env:d,isActive:p}}function I({creds:i,onSwitch:d,onCancel:l}){let u=i.listProfiles(),p=i.getActiveProfile(),g=i.getDefaultEnv(),n=u.map(e=>{let t=i.loadBasicAuth(e.profile,e.env),o=i.loadCredentials(e.profile,e.env)!==null,v=t?"basic":o?"oauth":"none",b=t?t.username:null,w=e.profile===p&&e.env===g;return B(e.profile,e.env,v,b,w)}),[s,m]=(0,L.useState)(()=>{let e=n.findIndex(t=>t.isActive);return e>=0?e:0});return P((e,t)=>{if(t.escape){l();return}if(t.upArrow){m(o=>Math.max(0,o-1));return}if(t.downArrow){m(o=>Math.min(n.length-1,o+1));return}if(t.return&&n[s]){let o=n[s];o.isActive||d(o.profile,o.env),l();return}}),n.length===0?(0,r.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:a.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(f,{color:a.primary,bold:!0,children:"Profiles"}),(0,r.jsx)(c,{marginTop:1,children:(0,r.jsx)(f,{color:a.dim,children:"No profiles \u2014 use Login to create one"})}),(0,r.jsx)(h,{bindings:[],escBackLabel:"back"})]}):(0,r.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:a.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(f,{color:a.primary,bold:!0,children:"Profiles"}),(0,r.jsx)(c,{flexDirection:"column",marginTop:1,children:n.map((e,t)=>{let o=t===s,v=o?"\u276F ":" ",b=e.isActive?a.statusPass:o?a.primary:void 0;return(0,r.jsxs)(f,{color:b,children:[v,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,r.jsx)(h,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"switch"}],escBackLabel:"back"})]})}export{B as a,I as b};
2
+ import{a as h}from"./chunk-TI5CHPPN.js";import{a as A}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-FOT6AMNP.js";import{a as c,b as f,i as P}from"./chunk-C44QQJR4.js";import{a as y}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var L=x(y(),1);var r=x(A(),1);function B(i,d,l,u,p){let g=l==="basic"&&u?`basic (${u})`:l,n=20,s=`${i} [${d}]`,m="\xB7".repeat(Math.max(2,n-s.length+3));return{label:`${s} ${m} ${g}`,profile:i,env:d,isActive:p}}function I({creds:i,onSwitch:d,onCancel:l}){let u=i.listProfiles(),p=i.getActiveProfile(),g=i.getDefaultEnv(),n=u.map(e=>{let t=i.loadBasicAuth(e.profile,e.env),o=i.loadCredentials(e.profile,e.env)!==null,v=t?"basic":o?"oauth":"none",b=t?t.username:null,w=e.profile===p&&e.env===g;return B(e.profile,e.env,v,b,w)}),[s,m]=(0,L.useState)(()=>{let e=n.findIndex(t=>t.isActive);return e>=0?e:0});return P((e,t)=>{if(t.escape){l();return}if(t.upArrow){m(o=>Math.max(0,o-1));return}if(t.downArrow){m(o=>Math.min(n.length-1,o+1));return}if(t.return&&n[s]){let o=n[s];o.isActive||d(o.profile,o.env),l();return}}),n.length===0?(0,r.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:a.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(f,{color:a.primary,bold:!0,children:"Profiles"}),(0,r.jsx)(c,{marginTop:1,children:(0,r.jsx)(f,{color:a.dim,children:"No profiles \u2014 use Login to create one"})}),(0,r.jsx)(h,{bindings:[],escBackLabel:"back"})]}):(0,r.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:a.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(f,{color:a.primary,bold:!0,children:"Profiles"}),(0,r.jsx)(c,{flexDirection:"column",marginTop:1,children:n.map((e,t)=>{let o=t===s,v=o?"\u276F ":" ",b=e.isActive?a.statusPass:o?a.primary:void 0;return(0,r.jsxs)(f,{color:b,children:[v,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,r.jsx)(h,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"switch"}],escBackLabel:"back"})]})}export{B as a,I as b};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as v}from"./chunk-HNIH3GSQ.js";import{spawn as x,execSync as b}from"child_process";import{existsSync as g}from"fs";import{resolve as e,dirname as h}from"path";import{fileURLToPath as N}from"url";import{createInterface as S}from"readline";async function*E(i){let n=S({input:i,crlfDelay:1/0});for await(let l of n){let r=l.trim();if(r)try{let d=JSON.parse(r);d&&typeof d.type=="string"&&(yield d)}catch{}}}function w(i){return i==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS"]}}var c=h(N(import.meta.url));function O(){for(let i of["python3","python"])try{return b(`${i} --version`,{stdio:"ignore"}),i}catch{}return null}function C(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",l={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},r=`${process.platform}-${process.arch}`,d=l[r];if(d)for(let t of d){let a=[e(c,"..","node_modules",t,"bin",n),e(c,"..","..","node_modules",t,"bin",n),e(c,"..","..","..","node_modules",t,"bin",n),e(c,"..","..","..","..","node_modules",t,"bin",n)];for(let u of a)if(g(u))return{cmd:u,args:[]}}let p=[e(c,"bin",n),e(c,"..","bin",n),e(c,"..","..","..","..","v16-runner","dist",n),e(c,"..","..","..","v16-runner","dist",n),e(process.cwd(),"v16-runner","dist",n),e(process.cwd(),"..","v16-runner","dist",n)];for(let t of p)if(g(t))return{cmd:t,args:[]};let s=[e(c,"..","..","..","..","v16-runner"),e(c,"..","..","..","v16-runner"),e(process.cwd(),"v16-runner"),e(process.cwd(),"..","v16-runner")];for(let t of s)if(g(e(t,"main.py"))){for(let u of[e(t,".venv","bin","python"),e(t,"..","browser-agent",".venv","bin","python")])if(g(u))return{cmd:u,args:["main.py"],cwd:t};let a=O();if(a)return{cmd:a,args:["main.py"],cwd:t}}return null}function G(i,n){let l=C();if(!l)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");let r={...process.env};n?.environment&&(r.TESTMUAI_ENV=n.environment),r.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(r.PYTHONIOENCODING="utf-8");let d=v(n?.environment);r.V16_SERVER_API_HOST=d.v16ServerHost,r.ATMS_URL=d.tmsBaseUrl.replace(/\/api\/?$/,""),i.username&&i.access_key&&(r.LT_USERNAME=i.username,r.LT_ACCESS_KEY=i.access_key),i.session_id&&(r.TESTMUAI_SESSION_ID=i.session_id);let p=w(n?.mode??"testing");Object.assign(r,p.set);for(let o of p.unset)delete r[o];let s=x(l.cmd,l.args,{stdio:["pipe","pipe","pipe"],env:r,cwd:l.cwd});s.stdin.on("error",()=>{}),s.stdin.write(JSON.stringify(i)+`
2
+ import{a as v}from"./chunk-CBDUXGVQ.js";import{spawn as x,execSync as b}from"child_process";import{existsSync as g}from"fs";import{resolve as e,dirname as h}from"path";import{fileURLToPath as N}from"url";import{createInterface as S}from"readline";async function*E(i){let n=S({input:i,crlfDelay:1/0});for await(let l of n){let r=l.trim();if(r)try{let d=JSON.parse(r);d&&typeof d.type=="string"&&(yield d)}catch{}}}function w(i){return i==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS"]}}var c=h(N(import.meta.url));function O(){for(let i of["python3","python"])try{return b(`${i} --version`,{stdio:"ignore"}),i}catch{}return null}function C(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",l={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},r=`${process.platform}-${process.arch}`,d=l[r];if(d)for(let t of d){let a=[e(c,"..","node_modules",t,"bin",n),e(c,"..","..","node_modules",t,"bin",n),e(c,"..","..","..","node_modules",t,"bin",n),e(c,"..","..","..","..","node_modules",t,"bin",n)];for(let u of a)if(g(u))return{cmd:u,args:[]}}let p=[e(c,"bin",n),e(c,"..","bin",n),e(c,"..","..","..","..","v16-runner","dist",n),e(c,"..","..","..","v16-runner","dist",n),e(process.cwd(),"v16-runner","dist",n),e(process.cwd(),"..","v16-runner","dist",n)];for(let t of p)if(g(t))return{cmd:t,args:[]};let s=[e(c,"..","..","..","..","v16-runner"),e(c,"..","..","..","v16-runner"),e(process.cwd(),"v16-runner"),e(process.cwd(),"..","v16-runner")];for(let t of s)if(g(e(t,"main.py"))){for(let u of[e(t,".venv","bin","python"),e(t,"..","browser-agent",".venv","bin","python")])if(g(u))return{cmd:u,args:["main.py"],cwd:t};let a=O();if(a)return{cmd:a,args:["main.py"],cwd:t}}return null}function G(i,n){let l=C();if(!l)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");let r={...process.env};n?.environment&&(r.TESTMUAI_ENV=n.environment),r.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(r.PYTHONIOENCODING="utf-8");let d=v(n?.environment);r.V16_SERVER_API_HOST=d.v16ServerHost,r.ATMS_URL=d.tmsBaseUrl.replace(/\/api\/?$/,""),i.username&&i.access_key&&(r.LT_USERNAME=i.username,r.LT_ACCESS_KEY=i.access_key),i.session_id&&(r.TESTMUAI_SESSION_ID=i.session_id);let p=w(n?.mode??"testing");Object.assign(r,p.set);for(let o of p.unset)delete r[o];let s=x(l.cmd,l.args,{stdio:["pipe","pipe","pipe"],env:r,cwd:l.cwd});s.stdin.on("error",()=>{}),s.stdin.write(JSON.stringify(i)+`
3
3
  `);let t=1e5,a="";s.stderr.on("data",o=>{a+=o.toString(),a.length>t&&(a=a.slice(-t))}),s.on("error",o=>{n?.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:o.message})});let u=null,f=null,R=new Promise(o=>{s.on("close",(m,y)=>{u=m,f=y?String(y):null,n?.log?.("info","RUNNER_EXIT","Runner exited",{code:m,signal:f??"none"}),o({code:m,signal:f})})}),_=E(s.stdout);return{child:s,events:_,sendUserResponse(o){let m=JSON.stringify({type:"user_response",answer:o});try{s.stdin.write(m+`
4
4
  `)}catch{}},sendCancel(o){let m=JSON.stringify({type:"cancel",reason:o});try{s.stdin.write(m+`
5
5
  `)}catch{}},cancel(){s.kill("SIGTERM")},get stderr(){return a},get exitCode(){return u},get exitSignal(){return f},exited:R}}export{C as a,G as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{s}from"./chunk-TL4SB7MQ.js";function n(r="prod"){let e=s[r];return r!=="stage"?e:{authBaseUrl:process.env.KANE_STAGE_AUTH_URL??e.authBaseUrl,consentUrl:process.env.KANE_STAGE_CONSENT_URL??e.consentUrl,controllerBaseUrl:process.env.TESTMUAI_BASE_URL??e.controllerBaseUrl,tmsBaseUrl:process.env.KANE_STAGE_TMS_URL??e.tmsBaseUrl,secretsBaseUrl:process.env.KANE_STAGE_SECRETS_URL??e.secretsBaseUrl,testManagerUiUrl:process.env.KANE_STAGE_TEST_MANAGER_UI_URL??e.testManagerUiUrl,shareApiBaseUrl:process.env.KANE_STAGE_SHARE_API_URL??e.shareApiBaseUrl,v16ServerHost:process.env.KANE_STAGE_V16_SERVER_HOST??e.v16ServerHost}}export{n as a};
2
+ import{s}from"./chunk-FOT6AMNP.js";function n(r="prod"){let e=s[r];return r!=="stage"?e:{authBaseUrl:process.env.KANE_STAGE_AUTH_URL??e.authBaseUrl,consentUrl:process.env.KANE_STAGE_CONSENT_URL??e.consentUrl,controllerBaseUrl:process.env.TESTMUAI_BASE_URL??e.controllerBaseUrl,tmsBaseUrl:process.env.KANE_STAGE_TMS_URL??e.tmsBaseUrl,secretsBaseUrl:process.env.KANE_STAGE_SECRETS_URL??e.secretsBaseUrl,testManagerUiUrl:process.env.KANE_STAGE_TEST_MANAGER_UI_URL??e.testManagerUiUrl,shareApiBaseUrl:process.env.KANE_STAGE_SHARE_API_URL??e.shareApiBaseUrl,v16ServerHost:process.env.KANE_STAGE_V16_SERVER_HOST??e.v16ServerHost}}export{n as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as P}from"./chunk-TI5CHPPN.js";import{a as X}from"./chunk-HCBYKLMW.js";import{t as r}from"./chunk-FOT6AMNP.js";import{a,b as i,i as N}from"./chunk-C44QQJR4.js";import{a as G}from"./chunk-6YGTRKDT.js";import{e as D}from"./chunk-UR6MHSHU.js";var g=D(G(),1);var e=D(X(),1),f=5;function K(t,I){if(!I)return t;let c=I.toLowerCase();return t.filter(B=>B.label.toLowerCase().includes(c))}function J(t){let{title:I,items:c,loading:B=!1,loadingText:Y,error:y=null,itemNoun:T="items",onSelect:H,onCancel:R,defaultActiveId:L,onTab:w,extraHint:E}=t,[x,s]=(0,g.useState)(0),[S,u]=(0,g.useState)(0),[d,A]=(0,g.useState)(""),[p,h]=(0,g.useState)(null);(0,g.useEffect)(()=>{if(c.length===0)return;if(t.preserveSelectionById&&p!==null){let n=c.findIndex(o=>o.id===p);if(n>=0){u(Math.floor(n/f)),s(n%f);return}}let l=L?c.findIndex(n=>n.id===L):c.findIndex(n=>n.isActive);l>=0?(u(Math.floor(l/f)),s(l%f),t.preserveSelectionById&&h(c[l].id)):t.preserveSelectionById&&(u(0),s(0),h(c[0]?.id??null))},[c,L,t.preserveSelectionById,p]),(0,g.useEffect)(()=>{if(!t.onSearch)return;let l=setTimeout(()=>t.onSearch(d),t.searchDebounceMs??250);return()=>clearTimeout(l)},[d,t.onSearch,t.searchDebounceMs]);let m=t.onSearch?c:K(c,d),C=S*f,F=Math.min(C+f,m.length),M=Math.ceil(m.length/f),O=F-C,v=m.slice(C,F);return N((l,n)=>{if(y){n.escape&&R();return}if(n.escape){d?(A(""),s(0),u(0)):R();return}if(n.tab&&w){w();return}if(n.upArrow){if(x>0){let o=x-1;s(o),t.preserveSelectionById&&h(v[o]?.id??null)}else if(S>0){let o=S-1,b=f-1;u(o),s(b),t.preserveSelectionById&&h(m[o*f+b]?.id??null)}return}if(n.downArrow){if(x<O-1){let o=x+1;s(o),t.preserveSelectionById&&h(v[o]?.id??null)}else if(S<M-1){let o=S+1,b=0;u(o),s(b),t.preserveSelectionById&&h(m[o*f+b]?.id??null)}return}if(n.return&&v[x]){H(v[x]);return}if(n.backspace||n.delete){A(o=>o.slice(0,-1)),s(0),u(0);return}l&&!n.ctrl&&!n.meta&&(A(o=>o+l),s(0),u(0))},{isActive:!B}),B?(0,e.jsxs)(a,{flexDirection:"column",borderStyle:"round",borderColor:r.primary,paddingX:2,paddingY:1,children:[(0,e.jsx)(i,{color:r.primary,bold:!0,children:I}),(0,e.jsx)(a,{marginTop:1,children:(0,e.jsx)(i,{color:r.secondary,children:Y??`Loading ${T}\u2026`})})]}):y?(0,e.jsxs)(a,{flexDirection:"column",borderStyle:"round",borderColor:r.statusFail,paddingX:2,paddingY:1,children:[(0,e.jsx)(i,{color:r.statusFail,bold:!0,children:I}),(0,e.jsx)(a,{marginTop:1,children:(0,e.jsx)(i,{color:r.statusFail,children:y})}),(0,e.jsx)(P,{bindings:[]})]}):(0,e.jsxs)(a,{flexDirection:"column",borderStyle:"round",borderColor:r.primary,paddingX:2,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(i,{color:r.primary,bold:!0,children:I}),(0,e.jsxs)(i,{color:r.dim,children:[" (",m.length,!t.onSearch&&d?`/${c.length}`:""," ",T,t.loadingMore?" \xB7 loading more":"",")"]})]}),(0,e.jsxs)(a,{marginTop:1,children:[(0,e.jsx)(i,{color:r.secondary,children:d?"filter: ":""}),d?(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(i,{children:d}),(0,e.jsx)(i,{inverse:!0,children:" "})]}):(0,e.jsxs)(e.Fragment,{children:[(0,e.jsxs)(i,{color:r.dim,children:["Search ",T,"\u2026"]}),(0,e.jsx)(i,{inverse:!0,children:" "})]})]}),(0,e.jsx)(a,{flexDirection:"column",marginTop:1,children:t.searching?(0,e.jsxs)(i,{color:r.secondary,children:["Searching ",T,"\u2026"]}):m.length===0?(0,e.jsxs)(i,{color:r.dim,children:["No ",T,' match "',d,'"']}):v.map((l,n)=>{let o=n===x,b=o?"\u276F ":" ",$=l.isActive?r.statusPass:o?r.primary:void 0;return(0,e.jsxs)(i,{color:$,children:[b,l.label,l.isActive?" \u25CF selected":""]},l.id)})}),!t.searching&&M>1&&(0,e.jsx)(a,{marginTop:1,children:(0,e.jsxs)(i,{color:r.dim,children:["Page ",S+1,"/",M]})}),t.footer&&(0,e.jsx)(a,{marginTop:1,flexDirection:"column",children:t.footer}),(0,e.jsx)(P,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"type",label:"to search"},{keys:"\u21B5",label:"select"},...w&&E?[{keys:"tab",label:E}]:[]],escBackLabel:d?"clear":"back to chat"})]})}export{J as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{f as v,g as b}from"./chunk-G7VF5SDK.js";import{b as f}from"./chunk-IXWVTWOR.js";import{a as m}from"./chunk-HNIH3GSQ.js";import{a as h}from"./chunk-GCAHPH2E.js";var p=class extends Error{constructor(n,s){super(n);this.code=s;this.name="AuthError"}};async function y(e){let o=e.credentials.expires_at,n=e.thresholdSeconds??300;if(o-Date.now()/1e3>=n)return null;let s=e.creds.loadClient(e.profile,e.env);if(!s)return null;let r=await new f(e.env).refreshToken(e.credentials.refresh_token,s.client_id),t=Math.floor(Date.now()/1e3)+r.expires_in;return e.creds.saveCredentials(e.profile,e.env,{access_token:r.access_token,refresh_token:r.refresh_token,expires_at:t,scope:r.scope}),{accessToken:r.access_token,refreshToken:r.refresh_token,expiresAt:t,scope:r.scope}}async function L(e){let{creds:o,env:n,usernameFlag:s,accessKeyFlag:a,log:r}=e,t=null,l=null;if(s&&a)t={username:s,access_key:a},r("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:s});else{let i=o.resolveAuth();i?.method==="basic"&&(t={username:i.username,access_key:i.access_key},r("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:i.username}))}if(!t){let{credentials:i,profile:E}=o.getActiveCredentials();if(!i)throw new p("Not authenticated \u2014 no credentials found","not_authenticated");if(l=i.access_token,i.expires_at-Date.now()/1e3<300)try{let c=await y({creds:o,profile:E,env:n,credentials:i});c&&(l=c.accessToken,r("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(c){let g=c instanceof Error?c.message:String(c);throw r("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:g}),new p(`Token refresh failed: ${g}`,"refresh_failed")}}let R=m(n),x=async()=>l,A=t?{username:t.username,access_key:t.access_key}:null,d=new h(R.controllerBaseUrl,x,A,r),u=await d.resolve();return u&&!t&&(t={username:u.username,access_key:u.access_key},r("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:u.username})),{basicAuth:t,token:l,resolver:d,resolvedCreds:u}}async function V(e){if(!e.isInteractive)return{recovered:!1};if(C(e.creds,e.config))return{recovered:!1};let{SingleShotApp:o}=await import("./SingleShotApp-WOJWOQSV.js"),{render:n}=await import("./build-JIKYOZUH.js"),s=await import("./react-QWOAB3TB.js"),a={current:null},r={current:!1},{waitUntilExit:t,unmount:l}=n(s.default.createElement(o,{resultRef:a,mode:"login",loginCompleteRef:r}),{exitOnCtrlC:!1});b(()=>l()),await t();try{process.stdin.setRawMode?.(!1)}catch{}return process.stdout.write("\x1B[?25h"),r.current?{recovered:!0}:(v(0,"Startup gate cancelled"),{recovered:!1})}function C(e,o){let n=e.getActiveProfile(),s=e.getDefaultEnv();if(!n||!!!(e.loadBasicAuth(n,s)||e.loadCredentials(n,s)))return!1;let r=o.load();return!!r.project_id&&!!r.folder_id}export{y as a,p as b,L as c,V as d};
2
+ import{f as v,g as b}from"./chunk-G7VF5SDK.js";import{b as f}from"./chunk-PQLKQKQH.js";import{a as m}from"./chunk-CBDUXGVQ.js";import{a as h}from"./chunk-GCAHPH2E.js";var p=class extends Error{constructor(n,s){super(n);this.code=s;this.name="AuthError"}};async function y(e){let o=e.credentials.expires_at,n=e.thresholdSeconds??300;if(o-Date.now()/1e3>=n)return null;let s=e.creds.loadClient(e.profile,e.env);if(!s)return null;let r=await new f(e.env).refreshToken(e.credentials.refresh_token,s.client_id),t=Math.floor(Date.now()/1e3)+r.expires_in;return e.creds.saveCredentials(e.profile,e.env,{access_token:r.access_token,refresh_token:r.refresh_token,expires_at:t,scope:r.scope}),{accessToken:r.access_token,refreshToken:r.refresh_token,expiresAt:t,scope:r.scope}}async function L(e){let{creds:o,env:n,usernameFlag:s,accessKeyFlag:a,log:r}=e,t=null,l=null;if(s&&a)t={username:s,access_key:a},r("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:s});else{let i=o.resolveAuth();i?.method==="basic"&&(t={username:i.username,access_key:i.access_key},r("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:i.username}))}if(!t){let{credentials:i,profile:A}=o.getActiveCredentials();if(!i)throw new p("Not authenticated \u2014 no credentials found","not_authenticated");if(l=i.access_token,i.expires_at-Date.now()/1e3<300)try{let c=await y({creds:o,profile:A,env:n,credentials:i});c&&(l=c.accessToken,r("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(c){let g=c instanceof Error?c.message:String(c);throw r("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:g}),new p(`Token refresh failed: ${g}`,"refresh_failed")}}let R=m(n),x=async()=>l,E=t?{username:t.username,access_key:t.access_key}:null,d=new h(R.controllerBaseUrl,x,E,r),u=await d.resolve();return u&&!t&&(t={username:u.username,access_key:u.access_key},r("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:u.username})),{basicAuth:t,token:l,resolver:d,resolvedCreds:u}}async function P(e){if(!e.isInteractive)return{recovered:!1};if(S(e.creds,e.config))return{recovered:!1};let{SingleShotApp:o}=await import("./SingleShotApp-MKACYNG2.js"),{render:n}=await import("./build-JIKYOZUH.js"),s=await import("./react-QWOAB3TB.js"),a={current:null},r={current:!1},{waitUntilExit:t,unmount:l}=n(s.default.createElement(o,{resultRef:a,mode:"login",loginCompleteRef:r}),{exitOnCtrlC:!1});b(()=>l()),await t();try{process.stdin.setRawMode?.(!1)}catch{}return process.stdout.write("\x1B[?25h"),r.current?{recovered:!0}:(v(0,"Startup gate cancelled"),{recovered:!1})}function S(e,o){let n=e.getActiveProfile(),s=e.getDefaultEnv();if(!n||!!!(e.loadBasicAuth(n,s)||e.loadCredentials(n,s)))return!1;let r=o.load();return!!r.project_id&&!!r.folder_id}export{y as a,p as b,L as c,P as d};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{homedir as s}from"os";import{join as t}from"path";var c="0.3.3",l="kane-cli",e=t(s(),".testmuai","kaneai"),m=t(e,"profiles"),i=t(e,"tui-config.json"),d="https://registry.npmjs.org/@testmuai/kane-cli",h="https://api.github.com/repos/LambdaTest/kane-cli/releases",f="https://dd-proxy.lambdatest.com/intake/kane-cli",u="https://kaneai-playground.lambdatest.io",_=9222,b=9230,U=t(e,"chrome-profiles"),r="127.0.0.1",x=18392,g=18400,o="/callback";function A(a){return`http://${r}:${a}${o}`}var R="KANE CLI",L="*",C={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server"}},E={base:"#ffffff",primary:"#ff9500",secondary:"#888888",accent:"#ffffff",dim:"#666666",ambient:"#444444",statusPass:"#4ade80",statusFail:"#ef4444",purple:"#ff9500",cyan:"#ff9500",yellow:"#ff9500",green:"#4ade80",greenDim:"#666666",red:"#ef4444",redDim:"#666666",dimmed:"#666666",muted:"#444444"};export{c as a,l as b,e as c,i as d,d as e,h as f,f as g,u as h,_ as i,b as j,U as k,r as l,x as m,g as n,o,A as p,R as q,L as r,C as s,E as t};
2
+ import{homedir as s}from"os";import{join as t}from"path";var c="0.3.4",l="kane-cli",e=t(s(),".testmuai","kaneai"),m=t(e,"profiles"),i=t(e,"tui-config.json"),d="https://registry.npmjs.org/@testmuai/kane-cli",h="https://api.github.com/repos/LambdaTest/kane-cli/releases",f="https://dd-proxy.lambdatest.com/intake/kane-cli",u="https://kaneai-playground.lambdatest.io",_=9222,b=9230,U=t(e,"chrome-profiles"),r="127.0.0.1",x=18392,g=18400,o="/callback";function A(a){return`http://${r}:${a}${o}`}var R="KANE CLI",L="*",C={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server"}},E={base:"#ffffff",primary:"#ff9500",secondary:"#888888",accent:"#ffffff",dim:"#666666",ambient:"#444444",statusPass:"#4ade80",statusFail:"#ef4444",purple:"#ff9500",cyan:"#ff9500",yellow:"#ff9500",green:"#4ade80",greenDim:"#666666",red:"#ef4444",redDim:"#666666",dimmed:"#666666",muted:"#444444"};export{c as a,l as b,e as c,i as d,d as e,h as f,f as g,u as h,_ as i,b as j,U as k,r as l,x as m,g as n,o,A as p,R as q,L as r,C as s,E as t};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as u,g as p}from"./chunk-TL4SB7MQ.js";import{a as f}from"./chunk-V7QXJKX7.js";var n=class{config;buffer=[];stepBuffer=new Map;flushTimer=null;currentRunIndex=null;stopped=!1;_droppedBatches=0;_droppedEntries=0;constructor(e){this.config=e}start(){if(this.flushTimer)return;let e=this.config.flushIntervalMs??5e3;this.flushTimer=setInterval(()=>{this.flush().catch(()=>{})},e),this.flushTimer.unref&&this.flushTimer.unref()}setRunIndex(e){this.currentRunIndex=e}log(e,t,i,s={}){if(this.stopped)return;let r=this.buildEntry(e,t,i,s);this.buffer.push(r)}logStep(e,t,i,s={}){if(this.stopped)return;let r=this.buildEntry("debug",t,i,s);r.run_index=e,this.stepBuffer.has(e)||this.stepBuffer.set(e,[]),this.stepBuffer.get(e).push(r)}escalate(e){let t=this.stepBuffer.get(e);t&&t.length>0&&this.buffer.push(...t),this.stepBuffer.delete(e)}discardSteps(e){this.stepBuffer.delete(e)}async flush(){if(this.buffer.length===0)return;let e=this.buffer.splice(0),t=null;try{t=await this.config.getToken()}catch{this.buffer.unshift(...e);return}let i={"Content-Type":"application/json"};t&&(i.Authorization=`Bearer ${t}`);let s=JSON.stringify(e);for(let r=0;r<3;r++){try{let h=new AbortController,d=setTimeout(()=>h.abort(),1e4),l=await f(this.config.proxyUrl,{method:"POST",headers:i,body:s,signal:h.signal});if(clearTimeout(d),l.ok)return}catch{}r<2&&await new Promise(h=>setTimeout(h,1e3*Math.pow(2,r)))}this._droppedBatches++,this._droppedEntries+=e.length}get droppedBatches(){return this._droppedBatches}get droppedEntries(){return this._droppedEntries}async shutdown(){this._droppedBatches>0&&this.log("warn","LOG_DROPS",`Dropped ${this._droppedEntries} entries in ${this._droppedBatches} batches`,{dropped_batches:this._droppedBatches,dropped_entries:this._droppedEntries}),this.stopped=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),await this.flush()}shutdownSync(){this.stopped=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null)}get bufferSize(){return this.buffer.length}stepBufferSize(e){return this.stepBuffer.get(e)?.length??0}buildEntry(e,t,i,s){return{hostname:"kane-cli",service:"kane-cli",ddsource:"kane-cli",ddtags:`version:${this.config.device.cli_version}`,level:e,event:t,message:i,session_id:this.config.sessionId,run_index:this.currentRunIndex,identity:this.config.identity,device:this.config.device,context:s,timestamp:new Date().toISOString()}}};import{platform as g,arch as a}from"os";function L(o){let e={proxyUrl:p,sessionId:o.sessionId,identity:o.identity,device:{cli_version:u,platform:g(),arch:a()},getToken:o.getToken};return new n(e)}export{n as a,L as b};
2
+ import{a as u,g as p}from"./chunk-FOT6AMNP.js";import{a as f}from"./chunk-V7QXJKX7.js";var n=class{config;buffer=[];stepBuffer=new Map;flushTimer=null;currentRunIndex=null;stopped=!1;_droppedBatches=0;_droppedEntries=0;constructor(e){this.config=e}start(){if(this.flushTimer)return;let e=this.config.flushIntervalMs??5e3;this.flushTimer=setInterval(()=>{this.flush().catch(()=>{})},e),this.flushTimer.unref&&this.flushTimer.unref()}setRunIndex(e){this.currentRunIndex=e}log(e,t,i,s={}){if(this.stopped)return;let r=this.buildEntry(e,t,i,s);this.buffer.push(r)}logStep(e,t,i,s={}){if(this.stopped)return;let r=this.buildEntry("debug",t,i,s);r.run_index=e,this.stepBuffer.has(e)||this.stepBuffer.set(e,[]),this.stepBuffer.get(e).push(r)}escalate(e){let t=this.stepBuffer.get(e);t&&t.length>0&&this.buffer.push(...t),this.stepBuffer.delete(e)}discardSteps(e){this.stepBuffer.delete(e)}async flush(){if(this.buffer.length===0)return;let e=this.buffer.splice(0),t=null;try{t=await this.config.getToken()}catch{this.buffer.unshift(...e);return}let i={"Content-Type":"application/json"};t&&(i.Authorization=`Bearer ${t}`);let s=JSON.stringify(e);for(let r=0;r<3;r++){try{let h=new AbortController,d=setTimeout(()=>h.abort(),1e4),l=await f(this.config.proxyUrl,{method:"POST",headers:i,body:s,signal:h.signal});if(clearTimeout(d),l.ok)return}catch{}r<2&&await new Promise(h=>setTimeout(h,1e3*Math.pow(2,r)))}this._droppedBatches++,this._droppedEntries+=e.length}get droppedBatches(){return this._droppedBatches}get droppedEntries(){return this._droppedEntries}async shutdown(){this._droppedBatches>0&&this.log("warn","LOG_DROPS",`Dropped ${this._droppedEntries} entries in ${this._droppedBatches} batches`,{dropped_batches:this._droppedBatches,dropped_entries:this._droppedEntries}),this.stopped=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),await this.flush()}shutdownSync(){this.stopped=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null)}get bufferSize(){return this.buffer.length}stepBufferSize(e){return this.stepBuffer.get(e)?.length??0}buildEntry(e,t,i,s){return{hostname:"kane-cli",service:"kane-cli",ddsource:"kane-cli",ddtags:`version:${this.config.device.cli_version}`,level:e,event:t,message:i,session_id:this.config.sessionId,run_index:this.currentRunIndex,identity:this.config.identity,device:this.config.device,context:s,timestamp:new Date().toISOString()}}};import{platform as g,arch as a}from"os";function L(o){let e={proxyUrl:p,sessionId:o.sessionId,identity:o.identity,device:{cli_version:u,platform:g(),arch:a()},getToken:o.getToken};return new n(e)}export{n as a,L as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as u,b as x}from"./chunk-SR5UDUMJ.js";import{a as f}from"./chunk-HCBYKLMW.js";import{t as m}from"./chunk-TL4SB7MQ.js";import{a as r,b as i}from"./chunk-C44QQJR4.js";import{e as n}from"./chunk-UR6MHSHU.js";var e=n(f(),1);function C({title:B,titleColor:d,borderColor:c,variant:p,rows:s,footer:t,labelWidth:l=14,marginBottom:b=1}){return(0,e.jsxs)(u,{title:B,titleColor:d,borderColor:c,variant:p,marginBottom:b,children:[s.map((o,a)=>typeof o.value=="string"?(0,e.jsx)(x,{label:o.label,value:o.value,valueColor:o.valueColor,labelWidth:l},`${o.label}-${a}`):(0,e.jsxs)(r,{children:[(0,e.jsx)(r,{width:l,children:(0,e.jsx)(i,{color:m.dimmed,children:o.label})}),o.value]},`${o.label}-${a}`)),t&&(0,e.jsx)(r,{marginTop:1,children:t})]})}export{C as a};
2
+ import{a as u,b as x}from"./chunk-TXUKXLYR.js";import{a as f}from"./chunk-HCBYKLMW.js";import{t as m}from"./chunk-FOT6AMNP.js";import{a as r,b as i}from"./chunk-C44QQJR4.js";import{e as n}from"./chunk-UR6MHSHU.js";var e=n(f(),1);function C({title:B,titleColor:d,borderColor:c,variant:p,rows:s,footer:t,labelWidth:l=14,marginBottom:b=1}){return(0,e.jsxs)(u,{title:B,titleColor:d,borderColor:c,variant:p,marginBottom:b,children:[s.map((o,a)=>typeof o.value=="string"?(0,e.jsx)(x,{label:o.label,value:o.value,valueColor:o.valueColor,labelWidth:l},`${o.label}-${a}`):(0,e.jsxs)(r,{children:[(0,e.jsx)(r,{width:l,children:(0,e.jsx)(i,{color:m.dimmed,children:o.label})}),o.value]},`${o.label}-${a}`)),t&&(0,e.jsx)(r,{marginTop:1,children:t})]})}export{C as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as h}from"./chunk-KKZRPFWO.js";import{a as n}from"./chunk-V7QXJKX7.js";var f=class extends h{constructor(e,t,s){super(e,{username:t,accessKey:s})}async listProjects(e){let t=[],s=!1;for await(let r of this.listProjectsStream({log:e})){if(e&&!s&&r.projects.length>0){let o=r.projects[0];e("info","PROJECT_SAMPLE","Project list sample",{project_id:o.project_id,name:o.name}),s=!0}t.push(...r.projects)}return t}async*listProjectsStream(e){let t=e?.perPage??200,s=e?.maxPages??100,r=e?.signal,o=e?.log,c=e?.name?.trim(),i=0;for(let a=1;a<=s;a++){if(r?.aborted)return;let g=`${this.baseUrl}/v1/projects?page=${a}&per_page=${t}&sort=created_at`;c&&(g+=`&filter[name]=${encodeURIComponent(c)}`);let p=AbortSignal.timeout(15e3),b=r?AbortSignal.any([r,p]):p,d;try{d=await n(g,{method:"GET",headers:this.headers(),signal:b})}catch(l){if(r?.aborted)return;if(a===1)throw l;o?.("warn","PROJECTS_STREAM_PARTIAL","stream stopped mid-page",{page:a,total_loaded:i,error:l instanceof Error?l.message:String(l)}),yield{page:a,projects:[],totalLoaded:i,done:!0};return}if(!d.ok){if(a===1)throw new Error(`listProjects ${d.status}: ${await d.text()}`);o?.("warn","PROJECTS_STREAM_PARTIAL","stream stopped on non-OK response",{page:a,status:d.status,total_loaded:i}),yield{page:a,projects:[],totalLoaded:i,done:!0};return}let m=(await d.json()).data??[];i+=m.length;let u=m.length<t;if(yield{page:a,projects:m,totalLoaded:i,done:u},u)return}o?.("warn","PROJECTS_STREAM_MAXPAGES","max pages reached",{max_pages:s,total_loaded:i}),yield{page:s,projects:[],totalLoaded:i,done:!0}}async getDefaultFolder(e){let t=await n(`${this.baseUrl}/v1/projects/${e}/folder/default`,{method:"GET",headers:this.headers()});if(!t.ok)throw new Error(`Get default folder failed: ${t.status} ${await t.text()}`);return(await t.json()).id}async listFolders(e){let t=await n(`${this.baseUrl}/v1/folder/entity/${e}`,{method:"GET",headers:this.headers()});if(!t.ok)throw new Error(`List folders failed: ${t.status} ${await t.text()}`);return(await t.json()).data??[]}async createProject(e){let t=await n(`${this.baseUrl}/v1/projects`,{method:"POST",headers:{...this.headers(),"Content-Type":"application/json"},body:JSON.stringify({name:e,description:"",tags:[],source:"KTM"})});if(!t.ok)throw new Error(`Create project failed: ${t.status} ${await t.text()}`);return{id:(await t.json()).id,name:e}}async createFolder(e,t){let s=await n(`${this.baseUrl}/v1/folder`,{method:"POST",headers:{...this.headers(),"Content-Type":"application/json"},body:JSON.stringify({folders:[{name:t,description:"",entity_id:e,entity_type:"project"}]})});if(!s.ok)throw new Error(`Create folder failed: ${s.status} ${await s.text()}`);return{id:(await s.json()).id,name:t}}async createAtmTest(e,t){let s=t?`Bearer ${t}`:this.authHeader,r=await n(`${this.baseUrl}/kane-cli/v1/test`,{method:"POST",headers:{Authorization:s,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)});if(!r.ok)throw new Error(`Create ATM test failed: ${r.status} ${await r.text()}`);let o=await r.json();if(!o.test_id)throw new Error("Create ATM test returned no test_id");return o.test_id}async endTest(e,t,s){let r=s?`Bearer ${s}`:this.authHeader,o=new URLSearchParams({commit_id:t.commit_id,time_taken:String(t.time_taken),steps_count:String(t.steps_count),commit_message:t.commit_message}),c={};t.objectives&&t.objectives.length>0&&(c.objectives=t.objectives);let i=await n(`${this.baseUrl}/kane-cli/v1/test/${e}?${o.toString()}`,{method:"DELETE",headers:{Authorization:r,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(c)});if(!i.ok)throw new Error(`End test failed: ${i.status} ${await i.text()}`);let a=await i.json();return{testcase_id:a.data?.testcase_id??"",test_id:a.data?.test_id??e,project_id:a.data?.project_id??""}}async submitFeedback(e,t){let s=t?`Bearer ${t}`:this.authHeader,r={instruction_id:e.instruction_id,test_id:e.test_id,feedback_type:e.feedback_type,mode:e.mode??"human"};e.details&&(r.details=e.details);let o=await n(`${this.baseUrl}/atm/v1/generative-feedback`,{method:"POST",headers:{Authorization:s,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r)});if(!o.ok)throw new Error(`Submit feedback failed: ${o.status} ${await o.text()}`);return await o.json()}};export{f as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as f}from"./chunk-XM4H4TJD.js";import{a as x}from"./chunk-HCBYKLMW.js";import{t}from"./chunk-TL4SB7MQ.js";import{a as r,b as n}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as c}from"./chunk-UR6MHSHU.js";var p=c(B(),1);var e=c(x(),1);function v(){return[{name:"convert",label:"Converting session data",status:"pending"},{name:"zip",label:"Compressing artifacts",status:"pending"},{name:"presign",label:"Requesting upload URLs",status:"pending"},{name:"upload",label:"Uploading to KaneAI",status:"pending"},{name:"atomic_replace",label:"Replacing local output",status:"pending"},{name:"commit_lock",label:"Committing to TMS",status:"pending"},{name:"finalize",label:"Finalizing test case",status:"pending"},{name:"code_export",label:"Downloading test code",status:"pending"}]}function U(s,o,d,a){return s.map(l=>l.name===o?{...l,status:d,detail:a}:l)}function R(s){let o=s/1e3;if(o<60)return`${o.toFixed(1)}s`;let d=Math.floor(o/60),a=Math.round(o%60);return`${d}m ${a}s`}function D(s){let[o,d]=(0,p.useState)(0),a=p.default.useRef(Date.now());return(0,p.useEffect)(()=>{if(!s)return;a.current=Date.now();let l=setInterval(()=>{d(Date.now()-a.current)},100);return()=>clearInterval(l)},[s]),o}function h({steps:s,status:o,testUrl:d,error:a}){let l=D(o==="uploading");return o==="uploading"?(0,e.jsxs)(r,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(r,{children:[(0,e.jsx)(n,{color:t.primary,children:"\u2601 "}),(0,e.jsx)(n,{color:t.primary,bold:!0,children:"Saving to KaneAI"}),(0,e.jsxs)(n,{color:t.dimmed,children:[" ",R(l)]})]}),(0,e.jsx)(r,{flexDirection:"column",marginTop:1,children:s.filter(i=>i.status!=="skipped").map((i,S,T)=>{let b=S===T.length-1?"\u2514\u2500":"\u251C\u2500",m=i.status==="done",u=i.status==="running",g=i.status==="failed";return(0,e.jsxs)(r,{children:[(0,e.jsxs)(n,{color:t.dimmed,children:[" ",b," "]}),(0,e.jsx)(r,{width:3,children:u?(0,e.jsx)(f,{}):m?(0,e.jsx)(n,{color:t.green,children:"\u2713"}):g?(0,e.jsx)(n,{color:t.red,children:"\u2717"}):(0,e.jsx)(n,{color:t.muted,children:"\u25CB"})}),(0,e.jsx)(n,{color:m?t.dim:u?t.base:g?t.red:t.muted,children:i.label}),i.detail&&(0,e.jsxs)(n,{color:t.dimmed,children:[" ",i.detail]})]},i.name)})}),(0,e.jsx)(r,{marginTop:1,children:(0,e.jsx)(n,{color:t.muted,children:" press Ctrl+C twice to force exit"})})]}):o==="success"?(0,e.jsx)(e.Fragment,{}):(0,e.jsxs)(r,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(r,{children:[(0,e.jsx)(n,{color:t.red,children:"\u2601 "}),(0,e.jsx)(n,{color:t.red,bold:!0,children:"Save failed"})]}),a&&(0,e.jsxs)(r,{marginTop:0,children:[(0,e.jsx)(n,{color:t.dimmed,children:" "}),(0,e.jsx)(n,{color:t.dim,children:a})]})]})}export{v as a,U as b,h as c};
2
+ import{b as f}from"./chunk-535PXOLA.js";import{a as x}from"./chunk-HCBYKLMW.js";import{t}from"./chunk-FOT6AMNP.js";import{a as r,b as n}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as c}from"./chunk-UR6MHSHU.js";var p=c(B(),1);var e=c(x(),1);function v(){return[{name:"convert",label:"Converting session data",status:"pending"},{name:"zip",label:"Compressing artifacts",status:"pending"},{name:"presign",label:"Requesting upload URLs",status:"pending"},{name:"upload",label:"Uploading to KaneAI",status:"pending"},{name:"atomic_replace",label:"Replacing local output",status:"pending"},{name:"commit_lock",label:"Committing to TMS",status:"pending"},{name:"finalize",label:"Finalizing test case",status:"pending"},{name:"code_export",label:"Downloading test code",status:"pending"}]}function U(s,o,d,a){return s.map(l=>l.name===o?{...l,status:d,detail:a}:l)}function R(s){let o=s/1e3;if(o<60)return`${o.toFixed(1)}s`;let d=Math.floor(o/60),a=Math.round(o%60);return`${d}m ${a}s`}function D(s){let[o,d]=(0,p.useState)(0),a=p.default.useRef(Date.now());return(0,p.useEffect)(()=>{if(!s)return;a.current=Date.now();let l=setInterval(()=>{d(Date.now()-a.current)},100);return()=>clearInterval(l)},[s]),o}function h({steps:s,status:o,testUrl:d,error:a}){let l=D(o==="uploading");return o==="uploading"?(0,e.jsxs)(r,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(r,{children:[(0,e.jsx)(n,{color:t.primary,children:"\u2601 "}),(0,e.jsx)(n,{color:t.primary,bold:!0,children:"Saving to KaneAI"}),(0,e.jsxs)(n,{color:t.dimmed,children:[" ",R(l)]})]}),(0,e.jsx)(r,{flexDirection:"column",marginTop:1,children:s.filter(i=>i.status!=="skipped").map((i,S,T)=>{let b=S===T.length-1?"\u2514\u2500":"\u251C\u2500",m=i.status==="done",u=i.status==="running",g=i.status==="failed";return(0,e.jsxs)(r,{children:[(0,e.jsxs)(n,{color:t.dimmed,children:[" ",b," "]}),(0,e.jsx)(r,{width:3,children:u?(0,e.jsx)(f,{}):m?(0,e.jsx)(n,{color:t.green,children:"\u2713"}):g?(0,e.jsx)(n,{color:t.red,children:"\u2717"}):(0,e.jsx)(n,{color:t.muted,children:"\u25CB"})}),(0,e.jsx)(n,{color:m?t.dim:u?t.base:g?t.red:t.muted,children:i.label}),i.detail&&(0,e.jsxs)(n,{color:t.dimmed,children:[" ",i.detail]})]},i.name)})}),(0,e.jsx)(r,{marginTop:1,children:(0,e.jsx)(n,{color:t.muted,children:" press Ctrl+C twice to force exit"})})]}):o==="success"?(0,e.jsx)(e.Fragment,{}):(0,e.jsxs)(r,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(r,{children:[(0,e.jsx)(n,{color:t.red,children:"\u2601 "}),(0,e.jsx)(n,{color:t.red,bold:!0,children:"Save failed"})]}),a&&(0,e.jsxs)(r,{marginTop:0,children:[(0,e.jsx)(n,{color:t.dimmed,children:" "}),(0,e.jsx)(n,{color:t.dim,children:a})]})]})}export{v as a,U as b,h as c};