@testmuai/kane-cli 0.8.4 → 0.8.5
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.
- package/dist/{ChatSurface-H26E7DM6.js → ChatSurface-HAIVTS4J.js} +1 -1
- package/dist/{ChromeProfilePicker-USUPENU2.js → ChromeProfilePicker-5ILSVC2K.js} +1 -1
- package/dist/{CliFeedbackPrompt-ZIAZ2M2U.js → CliFeedbackPrompt-LFKEYMKP.js} +1 -1
- package/dist/{CliUploadProgress-LEOJTXHT.js → CliUploadProgress-Y7ITY2I7.js} +1 -1
- package/dist/{ConfigView-JBIQPG7O.js → ConfigView-OECNNCXC.js} +1 -1
- package/dist/{EvidenceViewOffer-IWQ6Q2CI.js → EvidenceViewOffer-FODRAS6Z.js} +1 -1
- package/dist/FolderPicker-5U3RHHBE.js +2 -0
- package/dist/{InfoBox-ORHNXPET.js → InfoBox-HWMHNWPM.js} +1 -1
- package/dist/{LinksBox-6SKDUB5T.js → LinksBox-TAGYCFFO.js} +1 -1
- package/dist/{ProfilesView-Y5GTLDJY.js → ProfilesView-QJBR3RCM.js} +1 -1
- package/dist/{ProjectPicker-WDCMKWNQ.js → ProjectPicker-PP75ILZU.js} +1 -1
- package/dist/{SaveSessionPrompt-I4KLFESC.js → SaveSessionPrompt-UCRET3II.js} +1 -1
- package/dist/SingleShotApp-XWOPGLKZ.js +2 -0
- package/dist/{SummaryBox-QWKW5FHK.js → SummaryBox-SLM3OFS2.js} +1 -1
- package/dist/TestMdRunView-6BY3IUH5.js +2 -0
- package/dist/{TestrunEvidenceTable-ENJJ2GIW.js → TestrunEvidenceTable-PTIBYAXO.js} +1 -1
- package/dist/{WhoamiView-H6M536AY.js → WhoamiView-WPHMNYUV.js} +1 -1
- package/dist/{app-download-PSRQWDVW.js → app-download-GYQYLGT3.js} +1 -1
- package/dist/{auth-JVH2EHK2.js → auth-3DLNMZC2.js} +1 -1
- package/dist/{binary-YTQJP2FG.js → binary-XJ3RF3VO.js} +1 -1
- package/dist/{bind-OUXCFLSE.js → bind-2N4Q6YKH.js} +2 -2
- package/dist/{bootstrap-3NEI7O6I.js → bootstrap-5IHKW5SE.js} +1 -1
- package/dist/bridge-LOBTHY3P.js +2 -0
- package/dist/{changelog-WDKG4WCV.js → changelog-WCCTI47M.js} +1 -1
- package/dist/{chunk-BXRZGISN.js → chunk-2K2BX23I.js} +1 -1
- package/dist/{chunk-W75AVBFG.js → chunk-2WSOPZJU.js} +1 -1
- package/dist/{chunk-TXH2KG7U.js → chunk-35EUIBYJ.js} +1 -1
- package/dist/{chunk-NEHX45NQ.js → chunk-3AJ3QSF5.js} +11 -11
- package/dist/{chunk-66RJPH73.js → chunk-4D3DNCQY.js} +1 -1
- package/dist/{chunk-XHNPNYJP.js → chunk-4UMQDH52.js} +1 -1
- package/dist/{chunk-5HYXTFGB.js → chunk-5NSYHRDN.js} +1 -1
- package/dist/{chunk-BWSL2KQQ.js → chunk-5S46D5AJ.js} +1 -1
- package/dist/{chunk-PWFZZWYU.js → chunk-66BSTNLD.js} +1 -1
- package/dist/{chunk-UTIGOLON.js → chunk-6BTZ2Q4P.js} +1 -1
- package/dist/{chunk-BDUCWZYO.js → chunk-6DTWVLSJ.js} +1 -1
- package/dist/{chunk-NDAAY2RL.js → chunk-7JUUNZQP.js} +1 -1
- package/dist/chunk-7PADFQ5S.js +71 -0
- package/dist/{chunk-RN3YHD4S.js → chunk-AJPLHW4T.js} +1 -1
- package/dist/{chunk-DYGUHGZ6.js → chunk-AMULIFC5.js} +1 -1
- package/dist/{chunk-A6TJUSOS.js → chunk-BAL7E4OH.js} +1 -1
- package/dist/{chunk-7HXZZ3VA.js → chunk-BG66IAO6.js} +1 -1
- package/dist/{chunk-QBF5FJVL.js → chunk-BJHII5SD.js} +1 -1
- package/dist/chunk-BVKDHHPK.js +5 -0
- package/dist/chunk-CCUGKBIH.js +2 -0
- package/dist/{chunk-UONRTWLU.js → chunk-CGYSFLM2.js} +1 -1
- package/dist/{chunk-7LP4X25A.js → chunk-CNNJ4U2L.js} +1 -1
- package/dist/{chunk-QWDFFEEJ.js → chunk-DCUT3GJA.js} +1 -1
- package/dist/{chunk-2HT3RYKJ.js → chunk-DJ7T7BMV.js} +1 -1
- package/dist/{chunk-PRLTUEKP.js → chunk-E3BXNQYE.js} +1 -1
- package/dist/{chunk-U55NUF4E.js → chunk-EFRJNPBZ.js} +2 -2
- package/dist/chunk-EKCGZXZE.js +2 -0
- package/dist/{chunk-BGMI5PH4.js → chunk-FDWEL5HR.js} +1 -1
- package/dist/chunk-FRSHEJUS.js +2 -0
- package/dist/{chunk-SFXQFUM6.js → chunk-FTZPWXF7.js} +1 -1
- package/dist/{chunk-62WYSEAT.js → chunk-G4AFOZKU.js} +1 -1
- package/dist/{chunk-L4EDLDLZ.js → chunk-GYF4CH62.js} +2 -2
- package/dist/{chunk-DWWAIXVZ.js → chunk-GZ4X53ZA.js} +2 -2
- package/dist/{chunk-PQWSHTSH.js → chunk-HFCDUFV3.js} +1 -1
- package/dist/{chunk-YB73T7QH.js → chunk-HQWLSA5M.js} +1 -1
- package/dist/{chunk-KAMJ7U4M.js → chunk-JJWQUQJ2.js} +1 -1
- package/dist/{chunk-OVLCJ2VX.js → chunk-JN2DP4R2.js} +1 -1
- package/dist/{chunk-VYYTENPY.js → chunk-JRQKUQWL.js} +1 -1
- package/dist/{chunk-IXTFWIQ6.js → chunk-K2QV7FGP.js} +1 -1
- package/dist/{chunk-GJED4QGF.js → chunk-K7UYWAZH.js} +1 -1
- package/dist/{chunk-55NSNWM5.js → chunk-KBMQGNKO.js} +9 -9
- package/dist/{chunk-35L2QXWP.js → chunk-KWKUMBHS.js} +2 -2
- package/dist/{chunk-52GWEKFD.js → chunk-KX2GOJ4C.js} +2 -2
- package/dist/{chunk-BCCWICSS.js → chunk-LA2EMSHE.js} +1 -1
- package/dist/{chunk-N7N222VC.js → chunk-M335FQYJ.js} +2 -2
- package/dist/{chunk-HHHNQW5Z.js → chunk-MJ56GUKS.js} +1 -1
- package/dist/{chunk-NEAMQMYH.js → chunk-MUGMUKSZ.js} +1 -1
- package/dist/{chunk-HXSEA7JS.js → chunk-NHOHQBIF.js} +1 -1
- package/dist/{chunk-KUYJ6FEN.js → chunk-NLECZCMZ.js} +1 -1
- package/dist/{chunk-7HPEHQHH.js → chunk-NYSMQ7UY.js} +1 -1
- package/dist/{chunk-DXJKMZEC.js → chunk-O3AY6JHJ.js} +1 -1
- package/dist/{chunk-OSB32HJE.js → chunk-OWTEHU6B.js} +1 -1
- package/dist/{chunk-A3PGLDQY.js → chunk-PB3GADUD.js} +1 -1
- package/dist/{chunk-YBX2SQ5R.js → chunk-PCOSE5SW.js} +2 -2
- package/dist/{chunk-ZI6W65E3.js → chunk-PEI2566X.js} +1 -1
- package/dist/{chunk-PSWB3BWQ.js → chunk-PQUMOFT5.js} +1 -1
- package/dist/chunk-PUFJEU46.js +2 -0
- package/dist/{chunk-4CHO7SAT.js → chunk-PWYEOBXV.js} +1 -1
- package/dist/{chunk-VBCIDWSK.js → chunk-Q6JHBDW2.js} +1 -1
- package/dist/{chunk-JR46A564.js → chunk-R7OGNE3W.js} +1 -1
- package/dist/{chunk-A4XJUWAQ.js → chunk-RY6TFVAX.js} +1 -1
- package/dist/{chunk-ZK57J37M.js → chunk-T3XDMR5B.js} +1 -1
- package/dist/{chunk-N5JHMCRU.js → chunk-T5LKD2OB.js} +1 -1
- package/dist/{chunk-L77ZOU4N.js → chunk-TCK3QMKY.js} +1 -1
- package/dist/{chunk-GSYJUHRK.js → chunk-TJZMYU2W.js} +1 -1
- package/dist/{chunk-DZJQNL66.js → chunk-UX3KPYTI.js} +1 -1
- package/dist/{chunk-BSCMUMSV.js → chunk-VT2XNEOD.js} +3 -3
- package/dist/{chunk-J27JJWMT.js → chunk-W27F2NWA.js} +1 -1
- package/dist/{chunk-JT7I6OST.js → chunk-WLOGO44E.js} +1 -1
- package/dist/{chunk-6CR2HTIM.js → chunk-WYST42WI.js} +1 -1
- package/dist/{chunk-SIH6JG7S.js → chunk-YFLKS4UV.js} +3 -3
- package/dist/{chunk-JCILRPOM.js → chunk-Z2T7E5HM.js} +2 -2
- package/dist/{chunk-JRADU3PO.js → chunk-ZFZ7YXEU.js} +1 -1
- package/dist/{chunk-7VTYRTEJ.js → chunk-ZIRMSWKS.js} +1 -1
- package/dist/{config-SFM45WCV.js → config-OKTAPFOT.js} +1 -1
- package/dist/{credentials-3CENDBPH.js → credentials-SO3DSQEM.js} +1 -1
- package/dist/{deps-bundle-P37ZJDXC.js → deps-bundle-FRM65BQO.js} +1 -1
- package/dist/{deps-resolve-VSICFRWU.js → deps-resolve-RPZORKUN.js} +1 -1
- package/dist/{dispatch-HDGQAEWN.js → dispatch-OZRMWY25.js} +1 -1
- package/dist/doctor-VWGEQYBB.js +2 -0
- package/dist/{evidence-ABYJOIV2.js → evidence-5AUZMKE3.js} +1 -1
- package/dist/{evolve-cmd-MROTNJIV.js → evolve-cmd-TWYJL4EG.js} +1 -1
- package/dist/{extract-bind-LBZMEDUK.js → extract-bind-EW7XUDLQ.js} +2 -2
- package/dist/{extract-cmd-K4KBPMB7.js → extract-cmd-HOVGMBGM.js} +1 -1
- package/dist/{generate-headless-EBMWSLTR.js → generate-headless-FYTJULPG.js} +2 -2
- package/dist/index.js +163 -145
- package/dist/{ingest-cmd-ULEWNGCI.js → ingest-cmd-RJLTFNMN.js} +1 -1
- package/dist/install-46S4VOZ4.js +2 -0
- package/dist/{interactive-bind-IYAJN45L.js → interactive-bind-PSEYAL54.js} +3 -3
- package/dist/{list-commands-YPBJNGCE.js → list-commands-2SVSEAP6.js} +1 -1
- package/dist/login-flow-U43QVFPH.js +2 -0
- package/dist/{mobile-prompts-LHUYRSV7.js → mobile-prompts-T6HZ2YLY.js} +1 -1
- package/dist/{persist-recorded-session-KCXYXSQG.js → persist-recorded-session-O2NCYTSD.js} +1 -1
- package/dist/pipeline-BHEA7ODT.js +2 -0
- package/dist/prepare-target-27UN4KNO.js +2 -0
- package/dist/{reconcile-cmd-TSQDYEUT.js → reconcile-cmd-FU3JIHTO.js} +1 -1
- package/dist/{reconcile-deps-ETMGIQNM.js → reconcile-deps-SUKZA2FL.js} +2 -2
- package/dist/{reconcile-engine-TLFTAOTZ.js → reconcile-engine-ILL4M3NW.js} +1 -1
- package/dist/{recording-banner-ACOLKL4K.js → recording-banner-5VXVKCV4.js} +1 -1
- package/dist/{registry-3Q6PNWCK.js → registry-BKV3EDTK.js} +1 -1
- package/dist/replay-policy-CVQ6OJX5.js +2 -0
- package/dist/{require-project-folder-5KWTJAXN.js → require-project-folder-2IO6IX5W.js} +1 -1
- package/dist/{resolve-run-intent-L2I7G55O.js → resolve-run-intent-ZML3HKG7.js} +1 -1
- package/dist/{resolver-NRU6HGTL.js → resolver-CBTWTZZR.js} +1 -1
- package/dist/{run-RHLRZCV5.js → run-EXIYK6PU.js} +1 -1
- package/dist/{run-T53Z5TCY.js → run-R7GND73C.js} +1 -1
- package/dist/{run-test-md-JYDYT3XF.js → run-test-md-664ASWRQ.js} +2 -2
- package/dist/{skill-installer-NWF53JAB.js → skill-installer-QLQK4JJE.js} +1 -1
- package/dist/{spawner-LKYUMXSO.js → spawner-ANLF7OX3.js} +1 -1
- package/dist/tcg-generate-VBC5ODDI.js +2 -0
- package/dist/{testmd-actions-CRRUXYOP.js → testmd-actions-QZD3N4EH.js} +1 -1
- package/dist/token-refresh-PIUX5OFA.js +2 -0
- package/dist/{validate-basic-X2XPEBFD.js → validate-basic-D7IJUFUQ.js} +1 -1
- package/dist/{verdicts-J2SDU4MW.js → verdicts-EO5TZ5BW.js} +1 -1
- package/dist/{version-check-DAWGRSJ5.js → version-check-JRLPWQ6T.js} +1 -1
- package/dist/{walk-session-D6TCM33V.js → walk-session-IODOH7QU.js} +1 -1
- package/dist/{with-telemetry-RXLIXUMR.js → with-telemetry-ASNQQBGP.js} +1 -1
- package/package.json +11 -11
- package/dist/FolderPicker-G4DT3OEZ.js +0 -2
- package/dist/HelpView-I27LWSL5.js +0 -2
- package/dist/SingleShotApp-Y77CNTSO.js +0 -2
- package/dist/TestMdRunView-PPM6LD3I.js +0 -2
- package/dist/bridge-AFQTFWCU.js +0 -2
- package/dist/chunk-2PH43Z3P.js +0 -69
- package/dist/chunk-3JLWPEQW.js +0 -2
- package/dist/chunk-C5UNZ6ZY.js +0 -2
- package/dist/chunk-EQSE6NIB.js +0 -5
- package/dist/chunk-PH22FRN5.js +0 -2
- package/dist/chunk-QDIZQ3ZF.js +0 -2
- package/dist/doctor-CPMWU5TL.js +0 -2
- package/dist/install-YDH2CORO.js +0 -2
- package/dist/login-flow-W5SAB7NN.js +0 -2
- package/dist/pipeline-ELIXCTFZ.js +0 -2
- package/dist/prepare-target-OU2DQXSW.js +0 -2
- package/dist/replay-policy-6USQBT3E.js +0 -2
- package/dist/tcg-generate-2PHA7VNL.js +0 -2
- package/dist/token-refresh-XKXPM6H3.js +0 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testmuai/kane-cli",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.5",
|
|
4
4
|
"description": "KaneAI Terminal UI — browser automation testing agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -35,16 +35,16 @@
|
|
|
35
35
|
"ws": "^8.20.0"
|
|
36
36
|
},
|
|
37
37
|
"optionalDependencies": {
|
|
38
|
-
"@testmuai/kane-cli-assurance-darwin-arm64": "0.8.
|
|
39
|
-
"@testmuai/kane-cli-assurance-darwin-x64": "0.8.
|
|
40
|
-
"@testmuai/kane-cli-assurance-linux-arm64": "0.8.
|
|
41
|
-
"@testmuai/kane-cli-assurance-linux-x64": "0.8.
|
|
42
|
-
"@testmuai/kane-cli-assurance-win-x64": "0.8.
|
|
43
|
-
"@testmuai/kane-cli-darwin-arm64": "0.8.
|
|
44
|
-
"@testmuai/kane-cli-darwin-x64": "0.8.
|
|
45
|
-
"@testmuai/kane-cli-linux-x64": "0.8.
|
|
46
|
-
"@testmuai/kane-cli-linux-arm64": "0.8.
|
|
47
|
-
"@testmuai/kane-cli-win-x64": "0.8.
|
|
38
|
+
"@testmuai/kane-cli-assurance-darwin-arm64": "0.8.5",
|
|
39
|
+
"@testmuai/kane-cli-assurance-darwin-x64": "0.8.5",
|
|
40
|
+
"@testmuai/kane-cli-assurance-linux-arm64": "0.8.5",
|
|
41
|
+
"@testmuai/kane-cli-assurance-linux-x64": "0.8.5",
|
|
42
|
+
"@testmuai/kane-cli-assurance-win-x64": "0.8.5",
|
|
43
|
+
"@testmuai/kane-cli-darwin-arm64": "0.8.5",
|
|
44
|
+
"@testmuai/kane-cli-darwin-x64": "0.8.5",
|
|
45
|
+
"@testmuai/kane-cli-linux-x64": "0.8.5",
|
|
46
|
+
"@testmuai/kane-cli-linux-arm64": "0.8.5",
|
|
47
|
+
"@testmuai/kane-cli-win-x64": "0.8.5",
|
|
48
48
|
"@testmuai/kane-cli-node-darwin-arm64": "24.18.0",
|
|
49
49
|
"@testmuai/kane-cli-node-darwin-x64": "24.18.0",
|
|
50
50
|
"@testmuai/kane-cli-node-linux-x64": "24.18.0",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b}from"./chunk-PRLTUEKP.js";import"./chunk-YCCUBQY4.js";import"./chunk-BCCWICSS.js";import"./chunk-BPMSNGXQ.js";import"./chunk-7VTYRTEJ.js";import"./chunk-JT7I6OST.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-PH22FRN5.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{b as FolderPicker,a as formatFolderLine};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as f,b as r,y as t}from"./chunk-PH22FRN5.js";import{a as T}from"./chunk-HCBYKLMW.js";import{a as s,b as o,j as x,k as p}from"./chunk-C44QQJR4.js";import{a as v}from"./chunk-6YGTRKDT.js";import{e as h}from"./chunk-UR6MHSHU.js";var w=h(v(),1);var e=h(T(),1),b="https://www.testmuai.com/support/docs/kane-cli-introduction",S="https://github.com/LambdaTest/kane-cli/issues";function L(){let{exit:c}=x(),{stdout:a}=p(),l=a?.columns??80;return(0,w.useEffect)(()=>{let m=setTimeout(()=>c(),50);return()=>clearTimeout(m)},[c]),(0,e.jsxs)(s,{flexDirection:"column",children:[(0,e.jsxs)(s,{paddingX:1,paddingTop:1,flexDirection:"column",children:[(0,e.jsx)(o,{color:t.orange,bold:!0,children:r}),(0,e.jsxs)(s,{children:[(0,e.jsx)(o,{color:t.dim,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)(g,{cmd:`${r}`,desc:"Single-shot prompt (no args, TTY)"}),(0,e.jsx)(g,{cmd:`${r} --tui`,desc:"Full interactive TUI",highlight:!0}),(0,e.jsx)(g,{cmd:`${r} run "<objective>"`,desc:"Inline objective"}),(0,e.jsx)(g,{cmd:`${r} testmd run <path>.md`,desc:"Replay a saved *_test.md file"})]}),(0,e.jsxs)(d,{title:"HELP",children:[(0,e.jsx)(g,{cmd:`${r} --help`,desc:"Show this help (long form)"}),(0,e.jsx)(g,{cmd:`${r} -h`,desc:"Show this help (short form)"}),(0,e.jsx)(g,{cmd:`${r} help`,desc:"Show this help (subcommand form)"}),(0,e.jsxs)(s,{marginLeft:2,marginTop:0,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dim,children:["These are the only supported help invocations. Anything else (e.g. ",(0,e.jsx)(o,{color:t.orange,children:"-help"}),") is an unknown flag."]}),(0,e.jsxs)(o,{color:t.dim,children:["Terminal tab-completion is a shell feature; ",r," does not ship shell-completion scripts, so any flag your shell suggests is a generic guess \u2014 not from ",r,"."]})]})]}),(0,e.jsxs)(d,{title:"COMMANDS",children:[(0,e.jsx)(i,{cmd:"run",args:"<objective>",desc:"Run an objective (inline string)",highlight:!0}),(0,e.jsx)(i,{cmd:"testmd",args:"run|list|status|delete|export",desc:"Manage *_test.md files"}),(0,e.jsx)(i,{cmd:"testrun",args:"run",desc:"Run M *_test.md files as one sealed execution"}),(0,e.jsx)(i,{cmd:"login",desc:"Auth setup (interactive, --oauth, or --username)"}),(0,e.jsx)(i,{cmd:"logout",desc:"Revoke tokens + delete profile"}),(0,e.jsx)(i,{cmd:"whoami",desc:"Show authenticated identity"}),(0,e.jsx)(i,{cmd:"config",args:"show|set-mode|set-assertion-mode|\u2026",desc:"Chrome, run & generate settings"}),(0,e.jsx)(i,{cmd:"profiles",args:"list|switch|delete",desc:"Manage auth profiles"}),(0,e.jsx)(i,{cmd:"evidence",args:"validate|serve|merge",desc:"Validate, serve (viewer) or merge evidence packs"}),(0,e.jsx)(i,{cmd:"changelog",args:"[--all]",desc:"Show recent release notes"}),(0,e.jsx)(i,{cmd:"context",args:"ingest|extract|list|review|sessions|\u2026",desc:"Build & manage the assurance context store"}),(0,e.jsx)(i,{cmd:"design",args:"tests --use-case <ref>",desc:"Design tests from the context store"})]}),(0,e.jsxs)(d,{title:"TESTMD ACTIONS",children:[(0,e.jsx)(i,{cmd:"testmd run",args:"<path>",desc:"Replay a saved *_test.md file",highlight:!0}),(0,e.jsx)(i,{cmd:"testmd list",desc:"List *_test.md files in cwd (recursive)"}),(0,e.jsx)(i,{cmd:"testmd status",args:"<path>",desc:"Print local meta.json for a test"}),(0,e.jsx)(i,{cmd:"testmd delete",args:"<path>",desc:"Remove output-<stem>/ and the source file"}),(0,e.jsx)(i,{cmd:"testmd export",args:"<path> --language <py|js>",desc:"Generate standalone Playwright code"})]}),(0,e.jsxs)(d,{title:"RUN FLAGS",children:[(0,e.jsx)(n,{long:"--max-steps",arg:"<n>",desc:"Max agent steps (default: 50)"}),(0,e.jsx)(n,{long:"--timeout",arg:"<sec>",desc:"Kill run after N seconds"}),(0,e.jsx)(n,{long:"--headless",desc:"No visible browser window"}),(0,e.jsx)(n,{long:"--mode",arg:"<action|testing>",desc:"Run mode (default: testing)"}),(0,e.jsx)(n,{long:"--name",arg:"<name>",desc:"Persist session under this name"}),(0,e.jsx)(n,{long:"--variables",arg:"<json>",desc:"Inline variables as JSON"}),(0,e.jsx)(n,{long:"--variables-file",arg:"<path>",desc:"Load variables from file"}),(0,e.jsx)(n,{long:"--session-context",arg:"<json>",desc:"Prior runs context JSON"}),(0,e.jsx)(n,{long:"--global-context",arg:"<file>",desc:"Override global context markdown"}),(0,e.jsx)(n,{long:"--local-context",arg:"<file>",desc:"Override local context markdown"}),(0,e.jsx)(n,{long:"--ws-endpoint",arg:"<url>",desc:"Remote browser (LambdaTest)"}),(0,e.jsx)(n,{long:"--cdp-endpoint",arg:"<url>",desc:"Connect to existing Chrome CDP"}),(0,e.jsx)(n,{long:"--task-skills",desc:"Domain-specific task skills (experimental)"}),(0,e.jsx)(n,{long:"--code-export",desc:"Generate code export after upload"}),(0,e.jsx)(n,{long:"--code-language",arg:"<lang>",desc:"Code export language: python | javascript"}),(0,e.jsx)(n,{long:"--skip-code-validation",desc:"Skip post-codegen validation"}),(0,e.jsx)(n,{long:"--username",arg:"<user>",desc:"Basic auth (skip OAuth)"}),(0,e.jsx)(n,{long:"--access-key",arg:"<key>",desc:"Basic auth access key"}),(0,e.jsx)(n,{long:"--env",arg:"<name>",desc:"Environment (prod or stage)"}),(0,e.jsx)(n,{long:"--agent",desc:"NDJSON output (no UI)",highlight:!0})]}),(0,e.jsxs)(d,{title:"EXAMPLES",children:[(0,e.jsx)(u,{label:"Inline objective",cmd:`${r} run "Search for laptop"`}),(0,e.jsx)(u,{label:"Replay a saved test",cmd:`${r} testmd run smoke_test.md`}),(0,e.jsx)(u,{label:"Variables",cmd:`${r} run "Login as {{user}}" --variables '{"user":{"value":"alice"}}'`}),(0,e.jsx)(u,{label:"Agent mode (NDJSON)",cmd:`${r} run "Add to cart" --agent | jq .status`})]}),(0,e.jsx)(d,{title:"TEST FILES",children:(0,e.jsxs)(s,{marginLeft:2,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dim,children:[(0,e.jsx)(o,{color:t.orange,children:"*_test.md"})," \u2014 markdown test files with YAML frontmatter and ",(0,e.jsx)(o,{color:t.orange,children:"## "}),"step headings."]}),(0,e.jsxs)(o,{color:t.dim,children:["Run with ",(0,e.jsxs)(o,{color:t.orange,children:[r," testmd run path/to/foo_test.md"]}),". (`.md` paths are not accepted by `",r," run`.)"]}),(0,e.jsxs)(o,{color:t.dim,children:["Sessions you run in TUI auto-save to ",(0,e.jsx)(o,{color:t.orange,children:"<cwd>/.testmuai/tests/<name>_test.md"})," (testing mode prompts on exit)."]})]})}),(0,e.jsxs)(s,{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)(s,{gap:3,children:[(0,e.jsxs)(s,{children:[(0,e.jsx)(o,{color:t.dim,children:"Docs "}),(0,e.jsx)(o,{color:t.orange,underline:!0,children:b})]}),(0,e.jsxs)(s,{children:[(0,e.jsx)(o,{color:t.dim,children:"Bugs "}),(0,e.jsx)(o,{color:t.orange,underline:!0,children:S})]})]})]}),(0,e.jsx)(o,{children:" "})]})}function d({title:c,children:a}){return(0,e.jsxs)(s,{flexDirection:"column",marginBottom:1,children:[(0,e.jsx)(s,{marginLeft:1,children:(0,e.jsx)(o,{bold:!0,color:t.dim,children:c})}),a]})}function g({cmd:c,desc:a,highlight:l}){return(0,e.jsxs)(s,{marginLeft:2,children:[(0,e.jsxs)(s,{width:40,children:[(0,e.jsx)(o,{color:t.dim,children:"$ "}),(0,e.jsx)(o,{color:l?t.orange:t.orange,children:c})]}),(0,e.jsx)(o,{color:t.dim,children:a})]})}function i({cmd:c,args:a,desc:l,highlight:m}){return(0,e.jsxs)(s,{marginLeft:2,children:[(0,e.jsx)(s,{width:16,children:(0,e.jsx)(o,{color:m?t.orange:t.green,bold:!0,children:c})}),(0,e.jsx)(s,{width:32,children:a?(0,e.jsx)(o,{color:t.dim,children:a}):null}),(0,e.jsx)(o,{color:t.dim,children:l})]})}function n({long:c,arg:a,desc:l,highlight:m}){return(0,e.jsxs)(s,{marginLeft:2,children:[(0,e.jsxs)(s,{width:30,children:[(0,e.jsx)(o,{color:m?t.orange:t.orange,children:c}),a&&(0,e.jsxs)(o,{color:t.dim,children:[" ",a]})]}),(0,e.jsx)(o,{color:t.dim,children:l})]})}function u({label:c,cmd:a}){return(0,e.jsxs)(s,{marginLeft:2,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dim,children:["# ",c]}),(0,e.jsxs)(o,{color:t.orange,children:["$ ",a]})]})}export{L as HelpView};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-YB73T7QH.js";import"./chunk-4CHO7SAT.js";import"./chunk-L77ZOU4N.js";import"./chunk-UONRTWLU.js";import"./chunk-VZ7KXRXB.js";import"./chunk-TDPWFYTJ.js";import"./chunk-BDUCWZYO.js";import"./chunk-VYYTENPY.js";import"./chunk-GJED4QGF.js";import"./chunk-PRLTUEKP.js";import"./chunk-YCCUBQY4.js";import"./chunk-BCCWICSS.js";import"./chunk-BPMSNGXQ.js";import"./chunk-VE3SUJMA.js";import"./chunk-TZXXJWHA.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-66RJPH73.js";import"./chunk-TAOHYWEO.js";import"./chunk-7VTYRTEJ.js";import"./chunk-A3PGLDQY.js";import"./chunk-JT7I6OST.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-XHNPNYJP.js";import"./chunk-PH22FRN5.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as SingleShotApp};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{g as a}from"./chunk-KAMJ7U4M.js";import"./chunk-OSB32HJE.js";import"./chunk-DYGUHGZ6.js";import"./chunk-P7YZ3PU3.js";import"./chunk-TDPWFYTJ.js";import"./chunk-BDUCWZYO.js";import"./chunk-5HYXTFGB.js";import"./chunk-5Y2G4NC7.js";import"./chunk-7HXZZ3VA.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-JCILRPOM.js";import"./chunk-MSGW4JDG.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-4JOD47QI.js";import"./chunk-JT7I6OST.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-HXSEA7JS.js";import"./chunk-PSWB3BWQ.js";import"./chunk-PH22FRN5.js";import"./chunk-DFS4RMVP.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as TestMdRunView};
|
package/dist/bridge-AFQTFWCU.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-BWSL2KQQ.js";import"./chunk-NDAAY2RL.js";import"./chunk-DZJQNL66.js";import"./chunk-UD7KKHPW.js";import"./chunk-PH22FRN5.js";import"./chunk-UR6MHSHU.js";export{a as runAgent};
|
package/dist/chunk-2PH43Z3P.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as Kt,e as Sn}from"./chunk-L4EDLDLZ.js";import{a as Ht,b as In,c as mt,d as ft,e as _n,f as qt,g as An,h as xn}from"./chunk-TYI4MLFJ.js";import{a as Ke,b as X,e as xe,f as Bt,k as yn,q as Ie,r as Vt,u as wn}from"./chunk-DEZ7CXGM.js";import{a as He,b as Rn}from"./chunk-C5UNZ6ZY.js";import{c as kn}from"./chunk-S3DAAAE5.js";import{c as Cn,e as En}from"./chunk-6CR2HTIM.js";import{c as Pn}from"./chunk-EQSE6NIB.js";import{d as vn}from"./chunk-2YQ6TW77.js";import{c as Tn}from"./chunk-5DT7PIGB.js";import{A as on,B as an,C as ln,E as dn,F as cn,H as mn,I as fn,J as pn,S as gn,X as hn,Y as bn,h as ut,u as rn,v as nn,z as sn}from"./chunk-NEHX45NQ.js";import{a as un}from"./chunk-CH273NAE.js";import{b as Ae}from"./chunk-UONRTWLU.js";import{a as Xr,c as ct,d as $t}from"./chunk-OSB32HJE.js";import{a as dt,c as Qr,d as Zr,e as Mt}from"./chunk-DYGUHGZ6.js";import{c as en,e as tn}from"./chunk-P7YZ3PU3.js";import{a as Nt,b as Ft}from"./chunk-R5T4RLF5.js";import{a as Jr}from"./chunk-2YEHV2CX.js";import{d as Gr,h as zr}from"./chunk-BXRZGISN.js";import{g as Wr,h as Yr}from"./chunk-SFXQFUM6.js";import{a as lt}from"./chunk-BPMSNGXQ.js";import{i as Vr,k as jt,l as Kr,m as at,n as Hr,o as qr}from"./chunk-56PAQAX5.js";import{a as te}from"./chunk-JT7I6OST.js";import{a as Ee}from"./chunk-DPUV6OSP.js";import{a as it,b as Br}from"./chunk-NLCCBXXV.js";import{a as z}from"./chunk-RZ4F3BHX.js";import{a as Mr}from"./chunk-E47GFYXA.js";import{a as st,c as Dt,j as $r,k as ot,l as Ot,m as Ut}from"./chunk-PH22FRN5.js";import{join as ue,basename as Us}from"path";import{existsSync as Bo,readFileSync as Ns}from"fs";function Ln(e,t){if(process.env.KANE_REPLAY_TRACE==="1")for(let r=0;r<e.steps.length;r++){let n=e.steps[r],s=t[r],o=" ".repeat(n.trace.length-1),i=`step ${n.flatIndex}`;s.kind==="replay"?process.stderr.write(`[replay-trace] ${o}${i}: REPLAY (would skip; v1 always authors)
|
|
3
|
-
`):process.stderr.write(`[replay-trace] ${o}${i}: AUTHOR (${s.reason})
|
|
4
|
-
`)}}function Pe(e){process.env.KANE_REPLAY_TRACE==="1"&&process.stderr.write(e)}function Dn(e,t){let r=e===0?"(none)":`0..${e-1}`,n=e>=t?"(none)":`${e}..${t-1}`;Pe(`[replay-trace] phase: replay ${r}, author ${n}
|
|
5
|
-
`)}function On(e,t){Pe(`[replay-trace] step ${e}: REPLAY ${t==="ok"?"OK":"FAILED"}
|
|
6
|
-
`)}function Un(e,t,r){Pe(`[replay-trace] shrink ${e}/${t} \u2192 new boundary ${r}
|
|
7
|
-
`)}function jn(e,t){Pe(`[replay-trace] complete-reauthor (${e} shrinks exhausted of ${t})
|
|
8
|
-
`)}function Gt(){Pe(`[replay-trace] force-author (--author) \u2014 walker bypassed
|
|
9
|
-
`)}function Nn(e){Pe(`[replay-trace] cancelled at step ${e}
|
|
10
|
-
`)}import{join as Fn}from"path";function zt(e){let t=_n(e.decision),r={objective:e.step.objective,model:"v16-alpha",width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,mode:"replay",replay:{recording_path:t[0],...t.length>1?{recording_paths:t}:{},step_label:e.step.objective,...e.investigationAsync?{investigation:"async"}:{}},screenshot_dir:e.evidence?Fn(e.sessionDir,"scratch",String(e.runIndex)):Fn(e.sessionDir,"runs",String(e.runIndex)),run_id:"run",test_id:"test"};return e.forceNavigateUrl&&(r.url=e.forceNavigateUrl),e.chrome.wsEndpoint?r.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(r.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(r.username=e.auth.basicAuth.username,r.access_key=e.auth.basicAuth.access_key):e.auth.token&&(r.auth={type:"bearer",token:e.auth.token}),e.auth.resolvedCreds?.org_id&&(r.org_id=String(e.auth.resolvedCreds.org_id)),e.variables&&Object.keys(e.variables).length>0&&(r.variables=e.variables),e.sessionContext&&(r.session_context=e.sessionContext),e.device&&(r.device=e.device),e.evidence&&(r.evidence=ut(e.evidence.packTestDir,e.evidence.ordinalOffset)),r}async function Mn(e){let t=e.forceAuthor?0:ft(e.decisions),r=0,n=!1;for(;;){let s=e.session.snapshot(),o=e.accumulator.snapshot(),i=await e.runReplayPhase(t);if(i.cancelled)return n=!0,Nn(i.failedAt??0),{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};if(i.failedAt===null)return{authorBoundary:t,cancelledInPhase:n,shrinkCount:r};let p=Rn({failedAt:i.failedAt,shrinkCount:r,hasRetry:e.hasRetry,maxShrinks:e.maxShrinks});if(p.kind==="fail")return{authorBoundary:-1,cancelledInPhase:n,shrinkCount:r};if(e.acquireLockIfNeeded&&!await e.acquireLockIfNeeded())return{authorBoundary:-1,cancelledInPhase:n,shrinkCount:r};if(e.archiveAttempt&&await e.archiveAttempt(),e.session.rollback(s),e.accumulator.rollback(o),p.kind==="complete-reauthor")return jn(r+1,e.maxShrinks),{authorBoundary:0,cancelledInPhase:n,shrinkCount:r};r++,Un(r,He.maxShrinks,p.newAuthorBoundary),t=p.newAuthorBoundary}}var Js=15e3,Wt=3,$n=[500,1e3];async function Yt(e){if(process.env.KANE_LOCK_CONFLICT_SIMULATE==="1")return{ok:!1,reason:"concurrent",httpStatus:409,message:"simulated contention (KANE_LOCK_CONFLICT_SIMULATE=1)"};let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground`,r=await pt(t,{from_commit_id:e.fromCommitId,new_commit_id:e.newCommitId},e.auth);return r.ok?{ok:!0,sessionExpiresAt:V(r.body,"session_expires_at")??""}:{ok:!1,...Qs(r)}}function Qs(e){let t=V(e.body,"error")??V(e.body,"code")??"",r=V(e.body,"message")??V(e.body,"detail")??e.text??`HTTP ${e.status}`,n;return e.status===0?n="network":e.status===401||e.status===403?n="auth":e.status===409&&t==="PlaygroundBaseCommitMismatch"?n="base_mismatch":e.status===409?n="concurrent":e.status===422?n="disabled":e.status===400&&/no committed/i.test(r)?n="no_commits":e.status===400?n="missing_field":e.status>=500||e.status===408||e.status===429?n="network":n="other",{reason:n,httpStatus:e.status,message:r}}async function Vn(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground/reserve`,r=await pt(t,void 0,e.auth);return r.ok?{ok:!0,sessionExpiresAt:V(r.body,"session_expires_at")??""}:{ok:!1,expired:r.status===404,httpStatus:r.status,message:V(r.body,"message")??V(r.body,"detail")??r.text??`HTTP ${r.status}`}}async function Jt(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,r={commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:e.body.commitMessage,total_steps:e.body.totalSteps};e.body.timeTaken!==void 0&&(r.time_taken=e.body.timeTaken),e.body.objectives!==void 0&&(r.objectives=e.body.objectives);let n=await pt(t,r,e.auth);return n.ok?{ok:!0,testId:V(n.body,"test_id")??e.testId,testcaseId:V(n.body,"testcase_id")??"",projectId:V(n.body,"project_id"),isTestCaseDeleted:typeof n.body?.is_test_case_deleted=="boolean"?n.body.is_test_case_deleted:void 0}:{ok:!1,...Zs(n)}}function Zs(e){let t=V(e.body,"error")??V(e.body,"code")??"",r=V(e.body,"message")??V(e.body,"detail")??e.text??`HTTP ${e.status}`,n;return e.status===0?n="network":e.status===401||e.status===403?n="auth":e.status===409&&t==="PlaygroundBaseCommitMismatch"?n="base_mismatch":e.status===409&&t==="PlaygroundCommitLockMismatch"?n="lock_mismatch":e.status===409?n="expired":e.status===422?n="not_found":e.status>=500||e.status===408||e.status===429?n="network":n="other",{reason:n,httpStatus:e.status,message:r}}async function qe(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,r={discard:!0,commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:"(discarded)",total_steps:1},n=await pt(t,r,e.auth);return n.ok?{ok:!0}:{ok:!1,reason:V(n.body,"error")??"other",httpStatus:n.status,message:V(n.body,"message")??V(n.body,"detail")??n.text??`HTTP ${n.status}`}}async function pt(e,t,r){let n=null;for(let s=1;s<=Wt;s++){let o=new AbortController,i=setTimeout(()=>o.abort(),Js);try{let p=await z(e,{method:"POST",headers:{Authorization:it(r.username,r.accessKey),"Content-Type":"application/json",Accept:"application/json"},...t!==void 0?{body:JSON.stringify(t)}:{},signal:o.signal});clearTimeout(i);let l=await p.text(),c=null;if(l)try{c=JSON.parse(l)}catch{}let y=p.status>=500||p.status===408||p.status===429;if(p.ok||!y)return{ok:p.ok,status:p.status,body:c,text:l};if(s<Wt){await Bn($n[s-1]??1e3);continue}return{ok:!1,status:p.status,body:c,text:l}}catch(p){if(clearTimeout(i),n=p,s<Wt){await Bn($n[s-1]??1e3);continue}}}return{ok:!1,status:0,body:null,text:n?.message??"exhausted retries"}}function Bn(e){return new Promise(t=>setTimeout(t,e))}function V(e,t){if(typeof e!="object"||e===null)return;let r=e[t];return typeof r=="string"?r:void 0}var Xs=60*1e3,Kn="lock-heartbeat",he=new Map,Ge=null,eo={register:(e,t)=>at(e,t),deregister:e=>Hr(e),cleanup:(e,t)=>qr(e,t),remoteLogger:null};function Hn(e){if(e!==void 0){let t=he.get(e);t!==void 0&&(clearInterval(t),he.delete(e));return}for(let t of he.values())clearInterval(t);he.clear()}function gt(e){if(he.has(e.testId))return;let t=e.lifecycle??eo,r=setInterval(async()=>{let n=await Vn({baseUrl:e.baseUrl,testId:e.testId,auth:e.auth});if(!n.ok){let s=n.expired?"session expired":n.message;process.stderr.write(`[lock] heartbeat failed (${e.testId}): ${s}; continuing run
|
|
11
|
-
`)}},Xs);he.set(e.testId,r),Ge===null&&(Ge=t,t.register(Kn,()=>Hn()))}function _e(e){he.size!==0&&(Hn(e),he.size===0&&Ge!==null&&(Ge.deregister(Kn),Ge=null))}import{readFileSync as qn,readdirSync as Gn,existsSync as Re,promises as Qt}from"fs";import{join as le}from"path";async function to(e,t){let r=le(e,"steps",`${t.ordinal}-${t.id}`),n,s=null,o=[];try{n=JSON.parse(await Qt.readFile(le(r,"step.json"),"utf8")),s=n.action_id??null,Array.isArray(n.analyze_action_ids)&&(o=n.analyze_action_ids.filter(i=>typeof i=="string"))}catch{}if(typeof n?.screenshot=="string"&&/^screenshot\.(?:png|jpg)$/i.test(n.screenshot)){let i=n.screenshot;try{return{png:await Qt.readFile(le(r,i)),filename:i,actionId:s,analyzeActionIds:o}}catch{}}for(let i of["screenshot.png","screenshot.jpg"])try{return{png:await Qt.readFile(le(r,i)),filename:i,actionId:s,analyzeActionIds:o}}catch{}return null}function gi(){let e=[];return{track:t=>{e.push(t.catch(()=>{}))},settle:async()=>{await Promise.all(e)}}}async function zn(e,t,r,n){try{let s=await to(e,t);if(!s){n("warn","SCREENSHOT_SKIP","Pack step folder or screenshot not found",{ordinal:t.ordinal,id:t.id,reason:"pack_step_not_found"});return}let o=new Set;s.actionId&&o.add(s.actionId);for(let i of s.analyzeActionIds)o.add(i);if(o.size===0){n("warn","SCREENSHOT_SKIP","No action_id in step.json",{ordinal:t.ordinal,id:t.id,reason:"no_action_id"});return}for(let i of o)r.enqueue(i,s.png);n("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{ordinal:t.ordinal,id:t.id,action_id:s.actionId,action_ids:[...o],screenshot:s.filename,size:s.png.length})}catch(s){n("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{ordinal:t.ordinal,id:t.id,error:s instanceof Error?s.message:String(s)})}}function Wn(e,t,r,n,s,o){try{let i=le(e,"runs",String(t),"run-test");if(!Re(i)){s("warn","SCREENSHOT_SKIP","Runs dir not found",{step_index:r,reason:"runsDir_not_found",path:i});return}let p=i;if(o){let k=le(i,`child-${o}`);if(!Re(k)){s("warn","SCREENSHOT_SKIP","Child dir not found",{step_index:r,child_id:o,reason:"child_dir_not_found",path:k});return}let E=Gn(k).filter(a=>Re(le(k,a,"screenshots")));if(E.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir under child",{step_index:r,child_id:o,reason:"no_child_screenshots_dir"});return}p=le(k,E[0])}else if(!Re(le(i,"screenshots"))){let k=Gn(i).filter(E=>Re(le(i,E,"screenshots")));if(k.length===0){s("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:r,reason:"no_screenshots_dir"});return}p=le(i,k[0])}let l=le(p,"screenshots",`step_${String(r).padStart(3,"0")}.png`);if(!Re(l)){s("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:r,child_id:o,reason:"screenshot_not_found",path:l});return}let c=le(i,"actions.ndjson");if(!Re(c)){s("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:r,reason:"ndjson_not_found"});return}let y=qn(c,"utf-8").trim().split(`
|
|
12
|
-
`),v=y[y.length-1];if(!v){s("warn","SCREENSHOT_SKIP","NDJSON empty",{step_index:r,reason:"ndjson_empty"});return}let R=JSON.parse(v).action_id;if(!R){s("warn","SCREENSHOT_SKIP","No action_id in NDJSON",{step_index:r,reason:"no_action_id"});return}let x=qn(l);n.enqueue(R,x),s("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{step_index:r,child_id:o,action_id:R,size:x.length})}catch(i){s("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{step_index:r,error:i instanceof Error?i.message:String(i)})}}import{dirname as ro,join as no}from"path";function Yn(e,t,r){let n=e.total_runs??1,s=e.run_dir,o,i;if(n>1&&s){let p=ro(s);o=Array.from({length:n},(l,c)=>no(p,String(t+c))),r&&r.length===n&&(i=r)}return{allRunDirs:o,flowObjectives:i}}function Jn(e,t,r,n){return{index:r,objective:t,summary:e.summary,oneLiner:e.one_liner,status:e.status,resultCode:e.result_code,reasonCode:e.reason_code,perFlowMetadata:e.per_flow_metadata,context:e.context??{memory:{},variables:{},pointer:""},run_dir:e.run_dir,run_dirs:n.allRunDirs,flow_objectives:n.flowObjectives}}var ht=class{constructor(t){this.resolved=t;this.outcomes=t.rootSteps.map(r=>({rootStepIndex:r.index,status:"skipped"}))}outcomes;skipRoot=null;overallHalted=!1;shouldRunFlatStep(t){if(this.overallHalted)return!1;let r=t.trace[0].stepIndex;return!(this.skipRoot!==null&&r===this.skipRoot)}recordStep(t,r){let n=t.trace[0].stepIndex,s=this.outcomes.find(l=>l.rootStepIndex===n),o=this.resolved.rootSteps.find(l=>l.index===n),i=o.body.kind!=="objective";return i&&(s.refKind="import",s.refLabel=o.body.path,s.inlinedCount=(s.inlinedCount??0)+1,s.duration_s=(s.duration_s??0)+r.duration_s),r.status==="passed"?(i?s.status!=="failed"&&(s.status="passed"):(s.status="passed",s.duration_s=r.duration_s),{continueOverall:!0}):t.optional?(s.softFailures=s.softFailures??[],s.softFailures.push({subStepIndex:t.trace[t.trace.length-1].stepIndex,reason:r.reason}),{continueOverall:!0}):(s.status="failed",s.duration_s=i?s.duration_s:r.duration_s,s.failedSubStepIndex=i?t.trace.slice(1).map(l=>l.stepIndex):void 0,s.reason=r.reason,this.skipRoot=n,o.optional??!1?(s.softFailed=!0,{continueOverall:!0}):(this.overallHalted=!0,{continueOverall:!1}))}snapshotOutcomes(){return[...this.outcomes]}snapshot(){return{outcomes:this.outcomes.map(t=>({...t,softFailures:t.softFailures?[...t.softFailures]:void 0})),skipRoot:this.skipRoot,overallHalted:this.overallHalted}}rollback(t){this.outcomes=t.outcomes.map(r=>({...r,softFailures:r.softFailures?[...r.softFailures]:void 0})),this.skipRoot=t.skipRoot,this.overallHalted=t.overallHalted}finalize(){let t=this.outcomes.some(n=>n.status==="failed"&&!n.softFailed)?"failed":"passed",r=this.outcomes.reduce((n,s)=>n+(s.duration_s??0),0);return{overallStatus:t,outcomes:this.outcomes,totalDurationS:r}}};function Zt(e){if(!e)return null;let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function Qn(e){return Zt(e.flag)??Zt(e.frontmatter)??(e.configDefault&&e.configDefault!==ot?Zt(e.configDefault):null)}function Zn(e){return e.resolvedUrl!==null?!1:!((!!e.local||!!e.allowMissingUrl)&&!e.isTTY)}import{spawn as so}from"child_process";async function Xn(e,t,r=100){let n=`${e.replace(/\/+$/,"")}/json/version`,s=await z(n);if(!s.ok)throw new Error(`CDP /json/version returned ${s.status}`);let o=await s.json();if(!o.webSocketDebuggerUrl)throw new Error("CDP /json/version missing webSocketDebuggerUrl");let i=new Mr(o.webSocketDebuggerUrl);await new Promise((m,I)=>{i.once("open",m),i.once("error",I)});let p=1,l=new Map;i.on("message",m=>{let I;try{I=JSON.parse(m.toString())}catch{return}if(I.id==null)return;let D=l.get(I.id);D&&(l.delete(I.id),I.error?D.reject(new Error(I.error.message)):D.resolve(I.result))});function c(m,I){let D=p++;return new Promise((me,re)=>{l.set(D,{resolve:B=>me(B),reject:re});let de={id:D,method:m};I&&(de.params=I),i.send(JSON.stringify(de))})}let v=(await c("Target.getTargets")).targetInfos.find(m=>m.type==="page");if(!v)throw i.close(),new Error("CDP: no page target found");let R=(await c("Browser.getWindowForTarget",{targetId:v.targetId})).windowId,x="",k=!1,E=null,a=!1;i.on("close",()=>{a=!0}),i.on("error",()=>{a=!0});async function W(){if(!k){if(a){k=!0;return}try{let I=(await c("Browser.getWindowBounds",{windowId:R})).bounds,D=`${I.left}:${I.top}:${I.width}:${I.height}`;D!==x&&(x=D,t({left:I.left,top:I.top,width:I.width,height:I.height}))}catch{}k||(E=setTimeout(W,r))}}return W(),{stop(){if(!k){k=!0,E&&clearTimeout(E);try{i.close()}catch{}}}}}var oo=new Set(["1","true","yes"]);function es(e){if(e?.headless)return null;let t=process.env.KANE_CLI_DISABLE_MARKER;if(t!=null&&oo.has(t.toLowerCase()))return null;let r=dt();if(!r)return null;let n=[...r.args,"overlay"];e?.text&&n.push(e.text);let s;try{s=so(r.cmd,n,{cwd:r.cwd,stdio:["pipe","ignore","ignore"],detached:!1,windowsHide:!0})}catch{return null}s.stdin?.on("error",()=>{});let o=!1;s.on("exit",()=>{o=!0}),s.on("error",()=>{o=!0});function i(c){if(!(o||!s.stdin||s.stdin.destroyed))try{s.stdin.write(JSON.stringify(c)+`
|
|
13
|
-
`)}catch{}}e?.chromePid&&e.chromePid>0&&i({type:"chrome_pid",pid:e.chromePid});let p=null;e?.cdpEndpoint&&Xn(e.cdpEndpoint,c=>i({type:"bounds",...c})).then(c=>{p=c.stop}).catch(()=>{});let l=!1;return{setRunActive(c){l||i({type:"run_active",active:c})},setStepText(c){if(l)return;let y=c.trim();y&&i({type:"step_text",text:y})},setStepComplete(){l||i({type:"step_complete"})},kill(){if(!l){l=!0,p?.();try{s.stdin?.end()}catch{}try{s.kill("SIGTERM")}catch{}}}}}function ts(e,t,r){return`${e}/projects/${t}/test-cases/${r}`}function bt(e,t,r,n){return`${ts(e,t,r)}/dashboard/share/${n}?type=summary&agentView=true&fqdn=summary-page`}function rs(e,t,r,n){if(!(!t||!r||!n))return bt(e,t,r,n)}function ns(e,t,r){return`${ts(e,t,r)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{mkdtempSync as wo,rmSync as So}from"fs";import{join as Io}from"path";import{tmpdir as _o}from"os";import{spawn as is,spawnSync as io}from"child_process";import{existsSync as Xt}from"fs";import{createConnection as ao}from"net";import{homedir as ze,platform as Je}from"os";import{join as We}from"path";var lo=new Set(["1","true","yes"]),yt=class extends Error{constructor(t){super(t),this.name="ChromeNotFoundError"}};function Fi(e){return e instanceof yt?e.message:`Chrome failed: ${e instanceof Error?e.message:String(e)}`}var vt={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",We(ze(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",We(ze(),"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",We(ze(),"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",We(ze(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",We(ze(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe")]};function co(){if(process.env.KANE_CLI_CHROME_PATH)return process.env.KANE_CLI_CHROME_PATH;let e=Je(),t=vt[e]??vt.linux;for(let r of t)if(Xt(r))return r;return e==="win32"?"chrome.exe":"google-chrome"}function uo(){if(process.env.KANE_CLI_CHROME_PATH)return Xt(process.env.KANE_CLI_CHROME_PATH);let e=Je();if((vt[e]??vt.linux).some(s=>Xt(s)))return!0;let r=e==="win32"?"chrome.exe":"google-chrome",n=e==="win32"?"where":"which";try{return io(n,[r],{stdio:"ignore"}).status===0}catch{return!1}}function mo(){let e=Je();return e==="darwin"?["Google Chrome is required but was not found at any standard path.","","Install via Homebrew (recommended):"," brew install --cask google-chrome","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
|
|
14
|
-
`):e==="linux"?["Google Chrome is required but was not found at /usr/bin/google-chrome.","(amd64 / x86_64 only \u2014 Google does not ship Chrome for Linux ARM.)","","Debian / Ubuntu (any version):"," wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"," sudo apt install -y ./google-chrome-stable_current_amd64.deb","","Fedora / RHEL / AlmaLinux / Rocky:"," sudo dnf install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
|
|
15
|
-
`):e==="win32"?["Google Chrome is required but was not found in Program Files or AppData.","","Install via winget (Windows 10 1809+):"," winget install --id Google.Chrome -e --silent","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=C:\\path\\to\\chrome.exe","to point at a non-standard install."].join(`
|
|
16
|
-
`):["Google Chrome is required.","Install from https://www.google.com/chrome/","(Note: no official Chrome builds for BSD or Alpine/musl Linux.)"].join(`
|
|
17
|
-
`)}function fo(e){let t=Je(),r=[`--remote-debugging-port=${e.port}`,`--user-data-dir=${e.userDataDir}`,`--window-size=${e.width},${e.height}`,"--no-first-run","--no-default-browser-check","--disable-blink-features=AutomationControlled","--disable-features=DownloadBubble,DownloadBubbleV2","--safebrowsing-disable-download-protection","--disable-popup-blocking","--disable-notifications","--disable-infobars","--disable-translate","--disable-prompt-on-repost","--disable-background-networking","--disable-client-side-phishing-detection","--disable-default-apps","--disable-hang-monitor","--disable-sync","--metrics-recording-only","--safebrowsing-disable-auto-update","--disable-backgrounding-occluded-windows","--disable-background-timer-throttling","--test-type=webdriver","--allow-pre-commit-input","--enable-logging","--v=1"];return t==="linux"&&(r.push("--no-sandbox"),r.push("--disable-dev-shm-usage"),r.push("--password-store=basic")),t==="darwin"&&r.push("--use-mock-keychain"),e.headless&&r.push("--headless=new"),r}function po(e){return new Promise(t=>{let r=ao({port:e,host:"127.0.0.1"});r.setTimeout(1e3),r.on("connect",()=>{r.destroy(),t(!0)}),r.on("timeout",()=>{r.destroy(),t(!1)}),r.on("error",()=>{r.destroy(),t(!1)})})}async function go(){for(let e=Ot;e<=Ut;e++)if(!await po(e))return e;throw new Error(`All CDP ports ${Ot}-${Ut} are in use. Close other Chrome instances.`)}var Ye=class extends Error{constructor(t){super(t),this.name="CdpReadinessError"}};async function ho(e,t){let r=Date.now(),n=`http://127.0.0.1:${e}/json/version`;for(;Date.now()-r<t;){try{if((await z(n)).ok)return`http://127.0.0.1:${e}`}catch{}await new Promise(s=>setTimeout(s,200))}throw new Ye(`Chrome CDP not ready after ${t}ms on port ${e}`)}var bo=3e4,yo=2;function ss(e,t,r){let n=process.env[e];if(n==null||n.trim()==="")return t;let s=Number(n);return!Number.isInteger(s)||s<r?t:s}function vo(e){return Math.min(500*e,3e3)}function os(e,t){try{if(e.pid)if(t==="win32")is("taskkill",["/pid",String(e.pid),"/T","/F"],{stdio:"ignore"});else try{process.kill(-e.pid,"SIGKILL")}catch{e.kill("SIGKILL")}else e.kill("SIGKILL")}catch{}}async function as(e){let t=process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD;if(!(t!=null&&lo.has(t.toLowerCase()))&&!uo())throw jt()?.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 yt(mo());let n=Je(),s=co(),o=ss("KANE_CLI_CDP_TIMEOUT_MS",bo,1),p=ss("KANE_CLI_CDP_RETRIES",yo,0)+1,l;for(let c=1;c<=p;c++){let y=await go(),v=fo({port:y,...e});e.startUrl&&v.push(e.startUrl);let A=is(s,v,{stdio:"ignore",detached:!0});A.unref();try{let R=await new Promise((x,k)=>{A.on("error",E=>{k(new Error(`Failed to launch Chrome: ${E.message}. Is Chrome installed at ${s}?`))}),A.on("close",E=>{E!==null&&E!==0&&k(new Ye(`Chrome exited during startup with code ${E}`))}),ho(y,o).then(x,k)});return{process:A,port:y,cdpEndpoint:R,kill(){os(A,n)}}}catch(R){if(l=R,!(R instanceof Ye))throw R;os(A,n),jt()?.log("warn","CHROME_CDP_LAUNCH_RETRY",`Chrome CDP launch attempt ${c}/${p} failed`,{attempt:c,max_attempts:p,port:y,timeout_ms:o,headless:e.headless??!1,error:R.message}),c<p&&await new Promise(x=>setTimeout(x,vo(c)))}}throw l??new Error("Chrome launch failed after retries")}async function ls(e){if(e.cft)return{instance:null,tempDir:null};if(e.wsEndpoint)return{wsEndpoint:e.wsEndpoint,instance:null,tempDir:null};if(e.cdpEndpoint){let s=await z(`${e.cdpEndpoint}/json/version`);if(!s.ok)throw new Error(`CDP endpoint not reachable: ${e.cdpEndpoint} (${s.status})`);return{cdpEndpoint:e.cdpEndpoint,instance:null,tempDir:null}}let t,r=null;if(e.config.chrome_profile_path)t=e.config.chrome_profile_path.replace("~",process.env.HOME??"~");else{r=wo(Io(_o(),"kane-clean-")),t=r;let s=r;at("tempDir",()=>{try{So(s,{recursive:!0,force:!0})}catch{}})}let n=await as({userDataDir:t,width:e.config.window_size.width,height:e.config.window_size.height,startUrl:e.startUrl,headless:e.headless});return{cdpEndpoint:n.cdpEndpoint,instance:n,tempDir:r}}async function ds(e,t){if(e==="device"){let{device:r,appRef:n,appId:s}=await t.prepareDevice();return{kind:"device",device:r,...n?{appRef:n}:{},...s?{appId:s}:{}}}return{kind:"web",chrome:await t.prepareWeb()}}function zi(e,t={}){if(e.kind==="device"){let r=e.device.target_kind;return r==="emulator"||r==="simulator"?r:void 0}if(e.chrome.instance)return"chrome";if(t.cdpEndpoint)return"cdp";if(t.wsEndpoint)return"ws"}function Wi(e){if(e.kind!=="device")return;let t=e.device.target_kind;if(!(t!=="emulator"&&t!=="simulator"))return e.appRef??""}function cs(e){let t={objective:e.objective,model:e.model,width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,max_steps:e.maxSteps??30,headless:e.headless??!1};return e.url&&(t.url=e.url),e.requireStartUrl&&(t.require_start_url=!0),e.chrome.wsEndpoint?t.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(t.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(t.username=e.auth.basicAuth.username,t.access_key=e.auth.basicAuth.access_key):e.auth.token&&(t.auth={type:"bearer",token:e.auth.token}),e.auth.resolvedCreds?.org_id&&(t.org_id=String(e.auth.resolvedCreds.org_id)),e.disableAskUser&&(t.disable_ask_user=!0),e.enableTaskSkills&&(t.enable_task_skills=!0),e.networkWs&&(t.network_ws=!0),e.networkSse&&(t.network_sse=!0),(e.bugDetection==="stop"||e.bugDetection==="continue")&&(t.bug_detection=e.bugDetection),e.variables&&Object.keys(e.variables).length>0&&(t.variables=e.variables),e.globalContext&&(t.global_context=e.globalContext),e.localContext&&(t.local_context=e.localContext),e.sessionContext&&(t.session_context=e.sessionContext),e.device&&(t.device=e.device),e.evidence&&(t.evidence=ut(e.evidence.packTestDir,e.evidence.ordinalOffset)),t}import{readdirSync as Ro,readFileSync as ms,existsSync as fs}from"fs";import{join as ko}from"path";function us(e,t){if(!fs(e))return{};let r={},n;try{n=Ro(e).filter(s=>s.endsWith(".json")).sort()}catch{return{}}for(let s of n)try{let o=ms(ko(e,s),"utf-8"),i=JSON.parse(o);if(i&&typeof i=="object"){for(let[p,l]of Object.entries(i))if(l&&typeof l=="object"&&"value"in l){let c=l;r[p]={value:c.value,secret:c.secret??!1,syntax:c.syntax??`{{${p}}}`}}}}catch{t?t("warn","VARIABLE_PARSE_FAILED","Skipping invalid variables file",{file:s}):process.stderr.write(`[variables] Warning: skipping invalid variables file: ${s}
|
|
18
|
-
`)}return r}function ps(e){if(!fs(e))throw new Error(`Variables file not found: ${e}`);let t=ms(e,"utf-8"),r=JSON.parse(t),n={};if(r&&typeof r=="object"){for(let[s,o]of Object.entries(r))if(o&&typeof o=="object"&&"value"in o){let i=o;n[s]={value:i.value,secret:i.secret??!1,syntax:i.syntax??`{{${s}}}`}}}return n}function gs(e){let t;try{t=JSON.parse(e)}catch{throw new Error("Invalid --variables JSON")}let r={};if(t&&typeof t=="object"){for(let[n,s]of Object.entries(t))if(s&&typeof s=="object"&&"value"in s){let o=s;r[n]={value:o.value,secret:o.secret??!1,syntax:o.syntax??`{{${n}}}`}}}return r}function hs(e,t,r){let n=us(e,r),s=us(t,r);return{...n,...s}}var Te=class{constructor(t){this.baseUrl=t}async pushSecret(t){let r=it(t.username,t.accessKey),n=await z(`${this.baseUrl}/logistics/v1.0/secrets/create`,{method:"PUT",headers:{Authorization:r,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({secretKey:t.secretKey,secretValue:t.secretValue,orgId:t.orgId,username:t.username,scope:"user",type:"user",accessKey:t.accessKey})});if(!n.ok)throw new Error(`Push secret failed: ${n.status} ${await n.text()}`)}static extractVariableKeys(t){let r=t.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g),n=new Set;for(let s of r)n.add(s[1]);return[...n]}};var Le=class extends Br{constructor(t,r,n){super(t,{username:r,accessKey:n})}async upsertVariable(t){let r=t.environmentId??0,n=await z(`${this.baseUrl}/v1/variables`,{method:"POST",headers:this.headers(),body:JSON.stringify({name:t.name,value:String(t.value),type:"variable",value_type:"string",is_persist:t.isPersist??!1,environment_id:r})});if(n.ok){let l=await n.json().catch(()=>({}));if(l.type==="Success"&&l.id!=null)return{id:Number(l.id)||0}}let s=await z(`${this.baseUrl}/v1/variables/${encodeURIComponent(t.name)}?environment_id=${r}`,{method:"GET",headers:this.headers()});if(!s.ok)return{id:0};let i=(await s.json().catch(()=>({}))).data?.id;return i==null?{id:0}:(await z(`${this.baseUrl}/v1/variables/${i}`,{method:"PUT",headers:this.headers(),body:JSON.stringify({value:String(t.value),value_type:"string"})})).ok?{id:Number(i)||0}:{id:0}}};function bs(e,t){if(Object.keys(e).length===0)return{};let r={};for(let[n,s]of Object.entries(e)){let o=s.syntax??`{{${n}}}`;t.includes(o)&&(r[n]=s)}return r}function ys(e){let t=hs(e.globalDir,e.localDir,e.onLoadError),r=e.file?ps(e.file):{},n=e.inline?gs(e.inline):{},s={...t,...r,...n},o=Object.keys(s).length>0,{variables:i,objective:p}=o?Ae(s,e.objective):{variables:{},objective:e.objective},l=Object.entries(s).filter(([,y])=>y.secret),c=Object.entries(s).filter(([,y])=>!y.secret);return{raw:s,auteur:i,auteurObjective:p,secretEntries:l,nonSecretEntries:c}}async function vs(e){if(e.localMode)return{};let t=te(e.env);if(e.variables.secretEntries.length>0){let n=new Te(t.secretsBaseUrl);for(let[s,o]of e.variables.secretEntries)n.pushSecret({secretKey:s,secretValue:o.value,username:e.auth.username,accessKey:e.auth.access_key,orgId:e.orgId}).then(()=>e.log("info","SECRET_PUSH_OK","Secret pushed",{key:s})).catch(i=>e.log("error","SECRET_PUSH_FAILED","Secret push failed",{key:s,error:String(i)}))}let r={};if(e.variables.nonSecretEntries.length>0){let n=new Le(t.tmsBaseUrl,e.auth.username,e.auth.access_key);for(let[s,o]of e.variables.nonSecretEntries)try{let i=await n.upsertVariable({name:s,value:o.value});r[s]=i.id,e.log("info","VAR_PUSH_OK","Variable pushed",{name:s,id:i.id})}catch(i){e.log("error","VAR_PUSH_FAILED","Variable push failed",{name:s,error:String(i)})}}return r}import{readFileSync as Co,existsSync as Eo}from"fs";function er(e){if(!Eo(e))return null;try{return Co(e,"utf-8").trim()||null}catch{return null}}var Ao=()=>{};async function ws(e,t,r){let n=t.log??Ao,s=e.session.testId??null,o=null,i=null,p=null;if(!r.localMode&&t.performUpload)try{o=await t.performUpload(),o?.success&&(o.testId&&(s=o.testId),o.testcaseId&&e.session.setTestcaseId(o.testcaseId))}catch(l){n("error","FINALIZE_UPLOAD_ERROR","Upload pipeline threw",{error:String(l)})}if(t.renderFeedbackPrompt)try{i=await t.renderFeedbackPrompt(),i&&s&&t.submitFeedback&&t.submitFeedback(s,i).catch(l=>{n("error","FINALIZE_FEEDBACK_SUBMIT_ERROR","Feedback submit failed",{error:String(l)})})}catch(l){n("error","FINALIZE_FEEDBACK_RENDER_ERROR","Feedback prompt threw",{error:String(l)})}if(e.session.flushRecorder(),r.skipLocalWrites)n("info","FINALIZE_SKIP_LOCAL_WRITES","Skipping local writes (testmd flow handles via staging)");else if(r.sourcePath&&r.rootSteps&&r.outcomes){try{p=Ht({sourcePath:r.sourcePath,title:r.title,rootSteps:r.rootSteps,outcomes:r.outcomes,overallStatus:r.overallStatus,startedISO:r.startedISO,durationS:r.durationS,sessionId:e.session.sessionId})}catch(l){n("error","FINALIZE_RESULT_MD_ERROR","_Result.md write failed",{error:String(l)})}try{Vt({sourcePath:r.sourcePath,commitId:e.session.sessionId,testId:s??void 0,testcaseId:e.session.testcaseId??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,orgId:e.session.orgId??void 0,sessionName:e.session.sessionName??Ke(r.sourcePath),plan:e.session.plan??void 0})}catch(l){n("error","FINALIZE_META_WRITE_ERROR","meta.json write failed",{error:String(l)})}if(o?.codeExportDir)try{let l=e.tuiConfig.code_export?.language??"python";qt(o.codeExportDir,Bt(r.sourcePath,"playwright",l))}catch(l){n("error","FINALIZE_CODE_COPY_ERROR","code-export copy failed",{error:String(l)})}}else if(e.session.recorder?.lastWrittenPath){let l=e.session.recorder.lastWrittenPath,c=e.session.getFlows(),y=c.map((R,x)=>({index:x+1,heading:`Step ${x+1}`,verifies:[],headingLine:0,body:{kind:"objective",text:R.objective}})),v=c.map((R,x)=>({rootStepIndex:x+1,status:R.status==="passed"?"passed":R.status==="failed"?"failed":"skipped",duration_s:R.duration,reason:R.reason})),A=v.some(R=>R.status==="failed")?"failed":"passed";try{p=Ht({sourcePath:l,title:e.session.sessionName??"Session",rootSteps:y,outcomes:v,overallStatus:A,startedISO:e.session.startedAt,durationS:v.reduce((R,x)=>R+(x.duration_s??0),0),sessionId:e.session.sessionId})}catch(R){n("error","FINALIZE_TUI_RESULT_MD_ERROR","TUI _Result.md write failed",{error:String(R)})}try{Vt({sourcePath:l,commitId:e.session.sessionId,testId:s??void 0,testcaseId:e.session.testcaseId??void 0,sessionName:e.session.sessionName??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,plan:e.session.plan??void 0})}catch(R){n("error","FINALIZE_TUI_META_WRITE_ERROR","TUI meta.json write failed",{error:String(R)})}if(o?.codeExportDir)try{let R=e.tuiConfig.code_export?.language??"python";qt(o.codeExportDir,Bt(l,"playwright",R))}catch(R){n("error","FINALIZE_TUI_CODE_COPY_ERROR","TUI code-export copy failed",{error:String(R)})}e.session.recorder.lastCollisionSuffixed&&process.stderr.write(`Saved to ${l} (renamed: ${e.session.sessionName}_test.md already existed)
|
|
19
|
-
`)}try{t.runCleanup?.()}catch(l){n("error","FINALIZE_CLEANUP_ERROR","Cleanup hook threw",{error:String(l)})}try{await e.session.finish("complete")}catch(l){n("error","FINALIZE_SESSION_FINISH_ERROR","session.finish threw",{error:String(l)})}return{uploadResult:o,feedbackChoice:i,resultMdPath:p}}import{readFileSync as tr,writeFileSync as rr,existsSync as Is}from"fs";function Ss(e,t,r){if(r.forceAuthor)return"re-recorded from scratch";if(r.retryTriggered)return"re-recorded after retry";if(t.length>0&&t.every(i=>i.kind==="author"&&i.reason==="no-result-md"))return"initial recording";if(t.length>0&&t.every(i=>i.kind==="replay"))return r.wantsPush?"re-recorded (no source changes)":"no changes";let n=[];for(let i=0;i<t.length;i++){let p=t[i];if(!p||p.kind!=="author"||p.reason==="downstream-of-divergence"||p.reason==="no-result-md")continue;let l=xo(e,e.steps[i]);switch(p.reason){case"structure-mismatch":n.push(`added/removed: ${l}`);break;case"md5-mismatch":n.push(`modified: ${l}`);break;case"missing-recording":n.push(`re-recorded: ${l}`);break;case"recorded-failed":n.push(`re-authored after failure: ${l}`);break}}if(n.length===0)return"automated commit";let s=n.filter((i,p)=>p===0||n[p-1]!==i),o=s.slice(0,3).join("; ");return s.length>3?`${o}; +${s.length-3} more`:o}function xo(e,t){if(!t)return"unknown step";let r=t.trace[0]?.stepIndex;if(r==null)return"unknown step";let s=e.rootSteps[r-1]?.heading?.trim()??"";return t.trace.length>1?s?`imported step in "${s}"`:`imported step ${r}`:s||`step ${r}`}function Po(e,t){if(!(!e.shouldReplaceLocalOutput||!e.resolvedTest||!e.sourcePath||!e.stepRunRecords||!e.outcomes||!e.overallStatus))return async()=>{let{changedUnitFiles:r,legacySweep:n}=await An({resolvedTest:e.resolvedTest,sessionDir:e.session.sessionDir,stepRunRecords:e.stepRunRecords,outcomes:e.outcomes,overallStatus:e.overallStatus,startedISO:e.startedISO??new Date().toISOString(),durationS:e.durationS??0,sessionId:e.session.sessionId,commitId:e.fromCommitId??"",tmsIds:e.tmsIds??{},codeExportDir:e.codeExportDir,packTestDir:e.evidence?.packTestDir??e.evidenceRead?.packTestDir,authoredFlatIdx:new Set(e.authoredFlatIdx??[])});t.files=r;for(let s of r){let o=X(s);if(Is(`${o}.staging`)){yn(o);let i=n.find(p=>p.unitFile===s);i&&xn(i.dirs)}}}}function To(e,t){if(!(!e.shouldCommit||e.isFirstRun||!e.tmsBaseUrl||!e.testId||!e.fromCommitId||!e.newCommitId||!e.basicAuth||!e.resolvedTest||!e.decisions))return async()=>{let r=Ss(e.resolvedTest,e.decisions,{wantsPush:e.wantsPush??!1,retryTriggered:e.retryTriggered??!1,forceAuthor:e.forceAuthor??!1}),n=e.resolvedTest.steps.map(o=>o.objective).filter(o=>typeof o=="string"&&o.length>0).slice(0,50),s=await Jt({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:e.testId,body:{commitId:e.newCommitId,fromCommitId:e.fromCommitId,commitMessage:r,totalSteps:e.resolvedTest.steps.length,timeTaken:Math.round(e.durationS??0),objectives:n},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(s.ok&&e.sourcePath){let o=xe(e.sourcePath);try{let i=JSON.parse(tr(o,"utf8"));i.commit_id=e.newCommitId,rr(o,JSON.stringify(i,null,2)+`
|
|
20
|
-
`,"utf8")}catch(i){process.stderr.write(`warn: failed to update meta.json commit_id: ${i.message}
|
|
21
|
-
`)}}if(s.ok)for(let o of e.unitLocks??[]){if(!t.files.includes(o.file)){await qe({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:o.testId,body:{commitId:e.newCommitId,fromCommitId:o.fromCommitId},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}}),_e(o.testId);continue}let i=e.resolvedTest.steps.filter(c=>c.owningFile===o.file),p=i.map(c=>c.objective).filter(c=>typeof c=="string"&&c.length>0).slice(0,50),l=await Jt({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:o.testId,body:{commitId:e.newCommitId,fromCommitId:o.fromCommitId,commitMessage:`healed via importer ${e.sourcePath??""}`,totalSteps:i.length,timeTaken:0,objectives:p},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(l.ok){let c=xe(o.file);try{let y=JSON.parse(tr(c,"utf8"));y.commit_id=e.newCommitId,rr(c,JSON.stringify(y,null,2)+`
|
|
22
|
-
`,"utf8")}catch(y){process.stderr.write(`warn: failed to update unit meta commit_id (${o.file}): ${y.message}
|
|
23
|
-
`)}}else process.stderr.write(`warn: unit self-commit failed (${o.file}): ${l.reason??""} ${l.message??""}
|
|
24
|
-
`)}return s}}function Lo(e){if(!(!e.isFirstRun||!e.sourcePath))return async t=>{if(!e.sourcePath)return;let r=xe(e.sourcePath);try{let n=Is(r)?JSON.parse(tr(r,"utf8")):{};e.session.sessionId&&(n.commit_id=e.session.sessionId),t&&(n.testcase_id=t),e.tmsIds?.testId&&(n.test_id=e.tmsIds.testId),e.tmsIds?.projectId&&(n.project_id=e.tmsIds.projectId),e.tmsIds?.folderId&&(n.folder_id=e.tmsIds.folderId),e.tmsIds?.orgId&&(n.org_id=e.tmsIds.orgId),e.tmsIds?.sessionName&&(n.session_name=e.tmsIds.sessionName),rr(r,JSON.stringify(n,null,2)+`
|
|
25
|
-
`,"utf8")}catch(n){process.stderr.write(`warn: failed to update meta.json after endTest: ${n.message}
|
|
26
|
-
`)}}}function _s(e){let t=te(e.env),r={files:[]},{session:n,auth:s}=e,o=s.basicAuth?{username:s.basicAuth.username,accessKey:s.basicAuth.access_key}:s.token,i=s.resolvedCreds?.username??s.basicAuth?.username??"",p=s.resolvedCreds?.access_key??s.basicAuth?.access_key??"",l=s.resolvedCreds?.org_id??0,c=s.resolvedCreds?.user_id??0,y=[];for(let k of Object.keys(n.auteurVariables))k.startsWith("secrets.user.")&&y.push({key_name:k.replace("secrets.user.",""),scope:"user"});let A=n.getContext().prior_runs.map(k=>k.status),R=n.auteurVariables,x=Object.keys(R).length>0;return{controllerBaseUrl:t.controllerBaseUrl,tmsBaseUrl:t.tmsBaseUrl,auth:o,authResolver:s.resolver,sessionId:n.sessionId,sessionDir:n.sessionDir,testId:n.testId,commitId:n.sessionId,apMode:n.apMode,projectId:e.projectId,folderId:e.folderId,firstObjective:n.firstObjective??"KaneAI Test",firstUrl:n.firstUrl??"",runDirs:n.getRunDirs(),runObjectives:n.getRunObjectives(),runMetadata:n.getRunMetadata(),startedAt:n.startedAt,endedAt:new Date().toISOString(),totalSteps:e.totalSteps,totalDuration:e.totalDuration,runStatuses:A,orgId:l,userId:c,tmsUsername:i,tmsAccessKey:p,screenshotBaseUrl:n.screenshotBaseUrl,screenshotExtMap:e.screenshotExtMap,shareApiBaseUrl:t.shareApiBaseUrl,variables:x?R:void 0,variableIds:e.variableIds,secrets:y,codeExport:e.codeExport,...e.mobile?{mobile:!0}:{},onProgress:e.onProgress,log:e.log,shouldUploadArtifacts:e.shouldUploadArtifacts,shouldReplaceLocalOutput:e.shouldReplaceLocalOutput,shouldCommit:e.shouldCommit,isFirstRun:e.isFirstRun,onAtomicReplace:Po(e,r),onCommitLock:To(e,r),onFinalizeSuccess:Lo(e),evidence:e.evidence,evidenceRead:e.evidenceRead,authoredExecutionPath:e.authoredExecutionPath}}function Rs(e,t=process.env){return t.KANE_MOBILE_APP_BASE_URL||te(e).mobileAppBaseUrl}var ks=["python","javascript"];function Do(e){if(e!==void 0){if(!ks.includes(e))throw new Error(`--code-language must be one of: ${ks.join(", ")} (got "${e}")`);return e}}function Cs(e,t){let r=Do(e.codeLanguage);return{enabled:e.codeExport??t.enabled,language:r??t.language,skipValidation:e.skipCodeValidation??t.skip_validation}}function Es(e){return{platform:e.platform??"",...e.appId?{appId:e.appId}:{},...e.deviceName?{deviceName:e.deviceName}:{},...e.osVersion?{osVersion:e.osVersion}:{},...e.udid?{udid:e.udid}:{}}}async function As(e){try{let t=new lt(e.tmsBaseUrl,e.auth.username,e.auth.access_key);if(e.mobile){if(!e.mobile.appId)return e.log("warn","ATM_CREATE_SKIPPED","Mobile test not registered in TMS",{reason:"no cloud app id for the build under test"}),null;let n=await t.createMobileAtmTest({objective:e.objective.slice(0,100),creation_mode:"KANECLI",playground_disabled:e.hasCustomProfile,mobile_browser:!1,os:e.mobile.platform.toLowerCase(),app_id:e.mobile.appId,project_id:e.projectId,folder_id:e.folderId,authoring_version:4,...e.mobile.deviceName?{deviceName:e.mobile.deviceName}:{},...e.mobile.osVersion?{osVersion:e.mobile.osVersion}:{},...e.mobile.udid?{udid:e.mobile.udid}:{}});return e.log("info","ATM_CREATE_OK","Mobile test created",{test_id:n}),n}let r=await t.createAtmTest({objective:e.objective.slice(0,100),creation_mode:"KANECLI",playground_disabled:e.hasCustomProfile,testURL:e.url,project_id:e.projectId,folder_id:e.folderId,authoring_version:4});return e.log("info","ATM_CREATE_OK","Test created",{test_id:r}),r}catch(t){return e.log("error","ATM_CREATE_FAILED","Test creation failed",{error:t instanceof Error?t.message:String(t)}),null}}var Oo=null,Uo=()=>Oo??=import("sharp").then(e=>e.default??e).catch(()=>null),wt=class{maxWorkers;maxRetries=2;queue=[];activeCount=0;drainResolvers=[];sas;log;uploadedExt=new Map;constructor(t,r=3,n){this.sas=t,this.maxWorkers=r,this.log=n}updateSas(t){this.sas=t}enqueue(t,r){this.queue.push({operationId:t,buffer:r}),this.pump()}async drain(t=3e4){if(!(this.queue.length===0&&this.activeCount===0))return new Promise(r=>{this.drainResolvers.push(r),setTimeout(()=>{r()},t)})}pump(){for(;this.activeCount<this.maxWorkers&&this.queue.length>0;){let t=this.queue.shift();this.activeCount++,this.processJob(t).finally(()=>{if(this.activeCount--,this.pump(),this.queue.length===0&&this.activeCount===0){for(let r of this.drainResolvers)r();this.drainResolvers=[]}})}}async processJob(t){let r,n="image/webp",s=await Uo();if(s)try{let l=await s(t.buffer).webp({quality:80}).toBuffer();r=new Uint8Array(l)}catch(l){r=new Uint8Array(t.buffer),n="image/png",this.log?.("warn","SCREENSHOT_CONVERT_FAILED","WebP conversion failed, using PNG",{operation_id:t.operationId,error:l instanceof Error?l.message:String(l)})}else r=new Uint8Array(t.buffer),n="image/png";let o=n==="image/webp"?"webp":"png",i=`test_screenshots/untagged_screenshot/${t.operationId}.${o}`,p=`${this.sas.base_url}/${this.sas.container}/${i}?${this.sas.sas_token}`;for(let l=0;l<=this.maxRetries;l++)try{let c=await z(p,{method:"PUT",headers:{"Content-Type":n,"x-ms-blob-type":"BlockBlob"},body:r});if(c.ok){this.uploadedExt.set(t.operationId,o);return}if(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed after retries",{operation_id:t.operationId,status:c.status,attempts:this.maxRetries+1})}catch{if(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed (network error)",{operation_id:t.operationId,error:"network",attempts:this.maxRetries+1})}}backoff(t){let r=t===0?1e3:3e3;return new Promise(n=>setTimeout(n,r))}getExt(t){return this.uploadedExt.get(t)??"png"}getExtMap(){return this.uploadedExt}isNearExpiry(){if(!this.sas.expiry)return!1;let t=new Date(this.sas.expiry).getTime();return Date.now()>t-5*6e4}};import{platform as jo,arch as No}from"os";function xs(e){let t={proxyUrl:$r,sessionId:e.sessionId,identity:e.identity,device:{cli_version:st,platform:jo(),arch:No(),host_agent:Ft(),invocation_mode:e.invocationMode},getToken:e.getToken};return new Nt(t)}async function Fo(e){try{let t=te(e.env),n=await new Ee(t.controllerBaseUrl,e.auth).getScreenshotSas();return e.session.setScreenshotSas(n),e.log("info","SCREENSHOT_SAS_OK","Screenshot SAS fetched",{base_url:n.base_url,container:n.container,expiry:n.expiry}),new wt(n,3,e.log)}catch(t){return e.log("warn","SCREENSHOT_SAS_FAIL","Screenshot SAS fetch failed",{error:t instanceof Error?t.message:String(t)}),null}}async function Mo(e){if(e.session.hasRemoteLogger||!e.tmsCreds)return null;let t=e.tmsCreds,r=xs({sessionId:e.session.sessionId,identity:{org_id:String(t.org_id??""),user_id:String(t.user_id??""),machine_id:Jr(),email:t.email??null,email_domain:t.email_domain??"unknown",user_type:t.user_type??"unknown",env:e.env,plan:t.plan??"unknown"},invocationMode:e.invocationMode,getToken:e.getToken});return e.session.setRemoteLogger(r),r.start(),r}async function ir(e){let[t,r]=await Promise.allSettled([e.skipScreenshotQueue?Promise.resolve(null):Fo({env:e.env,auth:e.auth,session:e.session,log:e.log}),Mo({env:e.env,tmsCreds:e.tmsCreds,getToken:e.getToken,session:e.session,invocationMode:e.invocationMode})]);return{resolver:e.resolver,screenshotQueue:t.status==="fulfilled"?t.value:null,remoteLogger:r.status==="fulfilled"?r.value:null}}async function nr(e){await Promise.allSettled([e.screenshotQueue?.drain(),e.remoteLogger?.shutdown()])}async function Ya(e,t){switch(e.kind){case"boot":{if(t.state.identityServicesRef.current)return t.state.identityServicesRef.current;let r=t.auth.initResolver(e.env);r.prime(e.tmsCreds),t.state.setTmsCredsCache(e.tmsCreds);let n=await sr(e.env,e.tmsCreds,r,t);return or(n,t),n}case"login":case"switch":{let r=t.state.identityServicesRef.current;r&&(await nr(r),r.resolver.revoke()),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null,t.state.setTmsCredsCache(null);let n=t.auth.initResolver(e.env),s=await n.resolve(!0).catch(()=>null);if(!s)return t.log("warn","IDENTITY_VALIDATE_FAILED","Identity validation failed",{kind:e.kind,env:e.env}),null;t.state.setTmsCredsCache(s);let o=await sr(e.env,s,n,t);return or(o,t),o}case"logout":{let r=t.state.identityServicesRef.current;return r&&(await nr(r),r.resolver.revoke()),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null,t.state.setTmsCredsCache(null),null}case"resessionize":{let r=t.state.identityServicesRef.current;r&&await nr(r),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null;let n=t.state.getTmsCredsCache(),s=t.auth.getResolver(),o=s??t.auth.initResolver(e.env);!s&&n&&o.prime(n);let i=await sr(e.env,n,o,t);return or(i,t),i}}}async function sr(e,t,r,n){let s=n.auth.getBasicAuth(),o=s?null:await n.auth.getToken(),i=s?{username:s.username,accessKey:s.access_key}:o??null;return i===null?{resolver:r,screenshotQueue:null,remoteLogger:null}:ir({env:e,tmsCreds:t,resolver:r,auth:i,getToken:()=>n.auth.getToken(),session:n.getSession(),log:n.log,skipScreenshotQueue:n.options?.skipScreenshotQueue,invocationMode:"tui"})}function or(e,t){t.state.identityServicesRef.current=e,t.state.screenshotQueueRef.current=e.screenshotQueue,e.remoteLogger&&(t.exit.registerCleanup("remote-logger",()=>e.remoteLogger.shutdownSync()),t.exit.setExitRemoteLogger(e.remoteLogger))}function Ps(e){if(!e.executionId)return;let t={executionId:e.executionId,published:e.published};return e.testId&&(t.testId=e.testId),e.testcaseId&&(t.testcaseId=e.testcaseId),e.commitId&&(t.commitId=e.commitId),t}import{relative as Vo}from"path";import{readFile as $o}from"fs/promises";function Ts(e){return!e.mobile&&e.shouldUploadArtifacts&&!e.lockHeld&&!e.isFirstRun&&e.sealed&&!!e.testId}var ar=e=>e instanceof Error?e.message:String(e);async function Ls(e){let{controller:t,tms:r,testId:n,sessionId:s,executionId:o,sealedPackPath:i,projectId:p}=e,l;try{let c={key:"evidence",content_type:"application/zip",filename:`${o}.evidence`},v=(await t.getPresignedUrls(n,s,[c])).urls?.evidence?.upload_url;if(!v)return{ok:!1,stage:"presign",error:"presign response missing evidence upload_url"};l=v}catch(c){return{ok:!1,stage:"presign",error:ar(c)}}try{let c=await $o(i);await vn(l,c,"application/zip")}catch(c){return{ok:!1,stage:"upload",error:ar(c)}}try{await r.ingestEvidence(o,p)}catch(c){return{ok:!1,stage:"ingest",error:ar(c)}}return{ok:!0}}function Ds(e){return e.isFirstRun||mt(e.decisions)||e.push===!0||e.author===!0}function Os(e,t){return{projectId:e?.project_id??t.project_id??null,folderId:e?.folder_id??t.folder_id??null}}function lr(e){return e?"author":"replay"}function Ko(e,t){return e?{session:e,ownsLifecycle:!1}:{session:t,ownsLifecycle:!0}}function St(e,t){return e?.total_runs??t?.length??1}function Ho(e){let t=(e?.per_flow_metadata??[]).map(r=>({resultCode:r?.result_code!=null?Number(r.result_code):null}));return{resultCode:e?.result_code!=null?Number(e.result_code):null,...t.length?{perFlow:t}:{}}}var It=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"];async function dd(e,t,r){let{path:n,cwd:s,opts:o,isAgent:i,disableAskUser:p,resolved:l,resolvedAuth:c,cliOverrides:y,environment:v,envConfig:A,profile:R,model:x,creds:k,configStore:E,session:a}=e,W=!1,m=await Wo(n,l,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},a.sessionId,r);if(m.abort)return{overallStatus:"failed",exitCode:m.abort.exitCode,outputDir:X(n),durationS:0,uploadResult:null};let I=m.lockAcquired,D=!1,me=new Set,re=!1,de=!1;I&&t.onLockState({phase:"acquired",scope:"preemptive"}),a.start({model:x,environment:v,profile:R}),a.setRecordingEnabled(!1);let B=0,ur=c.basicAuth?{username:c.basicAuth.username,accessKey:c.basicAuth.access_key}:c.token??null,je=null;if(ur!==null){let d=await ir({env:v,tmsCreds:c.resolvedCreds??null,resolver:c.resolver,auth:ur,getToken:async()=>c.token??null,session:a,log:(u,f,b,h)=>a.log(u,f,b,h),skipScreenshotQueue:!!o.local||!c.basicAuth,invocationMode:i?"agent":"cli"});je=d.screenshotQueue,d.remoteLogger&&(r.register("remote-logger",()=>d.remoteLogger.shutdownSync()),r.remoteLogger=d.remoteLogger,e.skipGlobalRemoteLogger||Vr(d.remoteLogger))}if(o.name){try{kn(o.name)}catch(d){return process.stderr.write(`error: ${d.message}
|
|
27
|
-
`),{overallStatus:"failed",exitCode:2,outputDir:X(n),durationS:0,uploadResult:null}}a.setSessionName(o.name)}let _t={};for(let[d,u]of Object.entries(l.rootGlobal))It.includes(d)||(_t[d]=u);for(let[d,u]of Object.entries(y))It.includes(d)||u!==void 0&&(_t[d]=u);let ne={...l.chrome};for(let d of It){let u=y[d];u!==void 0&&(ne[d]=u)}let Ne={..._t,...ne},Fe=Cn({flags:{target:o.target,device:o.device,app:o.app},file:{target:l.rootGlobal.target,app:l.rootGlobal.app,no_reset:l.rootGlobal.no_reset}});if(Fe.kind==="invalid")return process.stderr.write(`error: ${Fe.message}
|
|
28
|
-
`),await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(n),durationS:0,uploadResult:null};for(let d of Fe.warnings)process.stderr.write(`warning: ${d}
|
|
29
|
-
`);let pe=Fe.kind==="mobile"?Fe:null;pe?(Ne.target=pe.target,pe.app&&(Ne.app=pe.app)):(l.rootGlobal.target==="emulator"||l.rootGlobal.target==="simulator")&&(delete Ne.app,delete Ne.no_reset),a.setResolvedGlobal(Ne);let mr=k.getActiveProfile()??"default",fr=k.getDefaultEnv(),{rehydrateIfStale:Ms}=await import("./profile-sync-DTTRRIVP.js");Ms(k,E,mr,fr);let j=E.load(),pr=(y.assertion_mode??j.assertion_mode)==="dom"?"dom":"visual",gr=y.final_validation,hr=gr===void 0?void 0:gr==="on",$=j.project_id??null,ge=j.folder_id??null,br=Ds({isFirstRun:m.isFirstRun,decisions:m.decisions,push:o.push===!0,author:o.author===!0});if(br){if(c.basicAuth){let d=await Yr({creds:k,config:E,profile:mr,env:fr,tmsCreds:c.basicAuth,isLocal:!!o.local,log:(u,f,b,h)=>a.log(u,f,b,h),onAnnounce:e.onAnnounce,onFatalExit:e.onFatalExit});if(d.status==="ok"){$=d.projectId,ge=d.folderId,j=E.load();let u=Ie(n);u?.project_id&&($=u.project_id,ge=u.folder_id??ge),i&&d.autoDefaulted&&t.onAgentEvent(Wr(d.autoDefaulted))}else if(d.status==="cancelled"){process.stderr.write(`error: project/folder configuration failed. See remediation above, or use --local.
|
|
30
|
-
`);let{shutdown:u}=await import("./exit-manager-3FVBTNYR.js");return u(2,"project/folder gate failed"),{}}}}else{let d=Ie(n);({projectId:$,folderId:ge}=Os(d,{project_id:j.project_id??null,folder_id:j.folder_id??null})),a.log("info","GATE_SKIP_REPLAY","Project/folder gate skipped (planned pure replay)",{meta_project:!!d?.project_id,config_project:!!j.project_id})}{let d=wn(l),u=c.resolvedCreds?.org_id!=null?String(c.resolvedCreds.org_id):void 0,f=d.find(g=>g.project_id&&$&&g.project_id!==String($)||g.org_id&&u&&g.org_id!==u),b=new Set(d.map(g=>g.project_id).filter(Boolean)),h=new Set(d.map(g=>g.org_id).filter(Boolean));if(f||b.size>1||h.size>1){let g=f??d[0];return process.stderr.write(`error: tenant mismatch \u2014 imported test '${g.file}' was authored under project ${g.project_id??"?"} / org ${g.org_id??"?"}, which differs from the run's project/org (or another imported test). Cross-tenant imports are not allowed.
|
|
31
|
-
`),await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(n),durationS:0,uploadResult:null}}}let be={},L;try{L=await ds(pe?"device":"web",{prepareDevice:async()=>{let d=pe,u=await zr({platform:d.platform,...d.device?{device:d.device}:{},...d.app?{app:d.app}:{},...d.noReset!==void 0?{noReset:d.noReset}:{},defaults:j.mobile,interactive:Tn()&&!i,agent:i,...!o.local&&c.basicAuth&&c.resolvedCreds?.org_id?{cloudUpload:{env:v,orgId:String(c.resolvedCreds.org_id),userId:String(c.resolvedCreds.user_id??""),baseUrl:Rs(v),auth:{username:c.basicAuth.username,accessKey:c.basicAuth.access_key}}}:{},onProgress:f=>process.stderr.write(`${f}
|
|
32
|
-
`)});return be.deviceName=u.target.displayName,u.target.osVersion&&(be.osVersion=u.target.osVersion),u.target.modelIdentifier&&(be.modelIdentifier=u.target.modelIdentifier),{device:u.device,...u.appRef?{appRef:u.appRef}:{},...u.appId?{appId:u.appId}:{}}},prepareWeb:()=>ls({config:{chrome_profile_path:ne.chrome_profile??null,window_size:{width:1920,height:1080}},startUrl:ot,headless:ne.headless??!1,wsEndpoint:ne.ws_endpoint,cdpEndpoint:ne.cdp_endpoint})})}catch(d){if(pe){let u=d instanceof Gr?`${d.doctorText}
|
|
33
|
-
${d.message}`:d.message;process.stderr.write(`error: mobile target preparation failed: ${u}
|
|
34
|
-
`)}else process.stderr.write(`error: Chrome launch failed: ${d.message}
|
|
35
|
-
`);return await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(n),durationS:0,uploadResult:null}}if(L.kind==="device"&&!L.device.app_package)return process.stderr.write(`error: ${En(pe.target,"app")}
|
|
36
|
-
`),await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(n),durationS:0,uploadResult:null};let ce=L.kind==="web"?L.chrome:{instance:null,tempDir:null},Qe=ce.instance;Qe&&r.register("chrome",()=>{try{Qe.kill()}catch{}});let yr=dn(ce.cdpEndpoint),se=null,vr=!1,Ze=()=>{if(!se?.diedUnexpectedly)return!1;if(!vr){vr=!0;let d=se.stderr.slice(-500);a.log("error","RUNNER_FATAL_DEATH","v16-runner exited unexpectedly mid-session",{stderr_tail:d}),process.stderr.write(`error: v16-runner exited unexpectedly mid-session \u2014 remaining steps skipped.
|
|
37
|
-
`)}return!0},Y=null,wr=ce.cdpEndpoint??ne.cdp_endpoint;if(wr&&!ne.ws_endpoint&&!ne.headless&&!e.isAgent)try{Y=es({headless:ne.headless??!1,cdpEndpoint:wr,chromePid:Qe?.process.pid}),Y&&r.register("marker-overlay",()=>Y.kill())}catch(d){a.log("warn","OVERLAY_SPAWN_FAILED","Marker overlay spawn failed",{error:String(d)})}c.resolvedCreds?.org_id!==void 0&&a.setOrgId(String(c.resolvedCreds.org_id)),a.setUserIdentity(c.resolvedCreds?.username??null,c.resolvedCreds?.email??null);let ye=ys({objective:"",globalDir:ue(Dt,"variables"),localDir:ue(s,".testmuai","variables"),file:o.variablesFile,inline:o.variables}),$s=l.rootGlobal.variables??{},oe=qo(ye.raw,$s);a.setAuteurVariables(oe.auteur);let Sr=er(ue(Dt,"global-memory.md"))??void 0,Ir=er(ue(s,".testmuai","context.md"))??void 0;o.local?process.stderr.write(`info: --local \u2014 cloud upload skipped
|
|
38
|
-
`):c.basicAuth?$||(br?process.stderr.write(`warn: cloud upload skipped \u2014 no project configured.
|
|
39
|
-
`):process.stderr.write(`warn: evidence publish will be skipped \u2014 no project_id in meta.json or config.
|
|
40
|
-
`)):process.stderr.write(`warn: cloud upload skipped \u2014 TMS credentials could not be resolved.
|
|
41
|
-
Run 'kane-cli login' (OAuth) or 'kane-cli config set-username/set-access-key' (basic auth).
|
|
42
|
-
`);let ke=!o.local&&!!c.basicAuth&&$!=null;if(a.log("info","PIPELINE_GATE_STATE","Initial gate state (run-start)",{phase:"run-start",shouldUploadArtifacts:ke,lockHeld:I,isFirstRun:m.isFirstRun,hasAuth:m.hasAuth}),ke&&m.testId==null&&!m.degradedReadonly){let d=te(v);try{let u=await As({tmsBaseUrl:d.tmsBaseUrl,auth:c.basicAuth,objective:l.steps[0].objective,url:"",projectId:$,folderId:ge??"",hasCustomProfile:!!ne.chrome_profile,...L.kind==="device"?{mobile:Es({platform:L.device.platform,appId:L.appId,deviceName:be.deviceName,osVersion:be.osVersion,udid:L.device.udid})}:{},log:(f,b,h,g)=>a.log(f,b,h,g)});u&&a.setTestId(u)}catch(u){process.stderr.write(`warn: ATM test creation failed: ${u.message}
|
|
43
|
-
`)}}else m.testId&&a.setTestId(m.testId);let Xe={};if(c.basicAuth&&!o.local&&(oe.secretEntries.length>0||oe.nonSecretEntries.length>0))try{Xe=await vs({variables:oe,auth:c.basicAuth,orgId:String(c.resolvedCreds?.org_id??""),env:v,localMode:!!o.local,log:(d,u,f,b)=>a.log(d,u,f,b)})}catch(d){process.stderr.write(`warn: variable/secret push failed: ${d.message}
|
|
44
|
-
`)}let Rt=new Map;for(let[d,u]of oe.nonSecretEntries)Rt.set(d,u.value);let kt=new Map;for(let[d,u]of oe.secretEntries)kt.set(d,u.value);async function Ct(d){if(!c.basicAuth||o.local)return;let u=[],f=[];for(let[h,g]of Object.entries(d))if(g.secret){if(kt.get(h)===g.value)continue;f.push([h,g])}else{if(Rt.get(h)===g.value)continue;u.push([h,g])}if(u.length===0&&f.length===0)return;let b=te(v);if(u.length>0){let h=new Le(b.tmsBaseUrl,c.basicAuth.username,c.basicAuth.access_key);for(let[g,_]of u)try{let C=await h.upsertVariable({name:g,value:_.value});Xe[g]=C.id,Rt.set(g,_.value),a.log("info","VAR_PUSH_STEP","Variable updated mid-run",{name:g})}catch(C){a.log("warn","VAR_PUSH_STEP_FAILED","Mid-run variable push failed",{name:g,error:String(C)})}}if(f.length>0){let h=new Te(b.secretsBaseUrl);for(let[g,_]of f)try{await h.pushSecret({secretKey:g,secretValue:_.value,username:c.basicAuth.username,accessKey:c.basicAuth.access_key,orgId:String(c.resolvedCreds?.org_id??"")}),kt.set(g,_.value),a.log("info","SECRET_PUSH_STEP","Secret updated mid-run",{name:g})}catch(C){a.log("warn","SECRET_PUSH_STEP_FAILED","Mid-run secret push failed",{name:g,error:String(C)})}}}let Me=je?(d,u,f,b)=>{if(!(I||m.isFirstRun))return;if(P&&b){zn(P.packTestDir,b,je,(g,_,C,N)=>a.log(g,_,C,N));return}let h=B+u;Wn(a.sessionDir,h,d,je,(g,_,C,N)=>a.log(g,_,C,N),f)}:void 0,_r=l.rootTitle??l.rootSteps[0]?.heading??Us(n),Bs=Object.keys(oe.raw).length>0?Ae(oe.raw,_r).objective:_r,ve=Qn({flag:o.url,frontmatter:l.rootGlobal?.url,configDefault:E.load().default_url}),Vs=Zn({resolvedUrl:ve,local:!!o.local,allowMissingUrl:!!o.allowMissingUrl,isTTY:!!process.stdin.isTTY});a.setFirstRun(Bs,ve??"");let fe=new ht(l),et=new Date().toISOString(),Rr=Date.now(),Et=e.evidenceAttach?null:new cn({origin:"testmd",runKind:"author",pid:process.pid,title:l.rootTitle??Us(n),started:et,producerVersion:st,surfaces:ve?[ve]:void 0,testmdRelPath:Vo(s,n),definition:{path:"test.md",content:Ns(n,"utf8")},cwd:s,packRootDir:ue(a.sessionDir,"evidence")}),ie=Ko(e.evidenceAttach,Et),K=ie.session,P=null;if(e.evidenceAttach)P={executionId:e.evidenceAttach.id,testId:e.evidenceAttach.test,packTestDir:e.evidenceAttach.packTestDir};else if(Et)try{P=await Et.start()}catch(d){a.log("warn","EVIDENCE_START_FAILED","Evidence pack creation failed",{error:String(d)})}let we=[],tt=[],kr,Ce,At=(d,u,f,b,h)=>{if(!P)return;K.noteSpawn(h?.length?{...d,steps:d.steps.map(_=>({..._,verifies:h}))}:d),d.resolution&&(kr=d.resolution),Ce=en(Ce,d.runnerEnvironment),we.push(Ho(u));let g=St(u,b);for(let _=0;_<g;_++)tt.push(f+_)},xt=()=>P?{packTestDir:P.packTestDir,ordinalOffset:K.nextOrdinalOffset()}:void 0,Cr=async()=>{if(!P||!K)return;let d=rn(we.length?we:[{resultCode:null}]);await K.archiveAttempt(d),we.length=0,tt.length=0},Ks=typeof o.maxSteps=="string"&&o.maxSteps!==""?parseInt(o.maxSteps,10):void 0;function Er(d,u){let f=l.steps[d],b=js(f.config,y),h=De(ye.raw,b.variables,f.objective);return cs({objective:h.objective,url:L.kind==="device"?void 0:d===0?ve??void 0:f.unitEntryUrl,requireStartUrl:L.kind==="web"&&d===0&&Vs,model:x,chrome:ce,device:L.kind==="device"?L.device:void 0,auth:c,sessionId:a.sessionId,runIndex:u,windowSize:{width:1920,height:1080},maxSteps:b.max_steps??Ks??30,headless:ne.headless??!1,disableAskUser:!0,variables:Object.keys(h.variables).length>0?h.variables:void 0,globalContext:b.global_context??Sr,localContext:b.local_context??Ir,sessionContext:a.getContext(),bugDetection:o.bugDetection??j.bug_detection,evidence:xt()})}function Ar(d){let f=l.steps[d].trace[0].stepIndex,b=l.rootSteps.find(g=>g.index===f);l.steps.slice(0,d).some(g=>g.trace[0].stepIndex===f)||t.onAgentEvent({type:"test_md_step_start",step_index:f,heading:b.heading,ref:b.body.kind==="import_ref"?{kind:"import",label:b.body.path,unit_kind:b.body.path.endsWith("_test.md")?"test":"helper"}:null})}function Pt(d,u,f,b,h,g){let _=l.steps[d],C=_.trace[0].stepIndex,N=!l.steps.slice(d+1).some(O=>O.trace[0].stepIndex===C),F=f?.status==="passed"?"passed":"failed",U=f?.reason??h??void 0,Q=f?.duration??g,S=f?.verdict;if(S&&typeof S=="object"){let O=typeof S.one_liner=="string"?S.one_liner:"",G=typeof S.bug_title=="string"&&S.bug_title?S.bug_title:O;if(G&&F==="failed"){let Z=[S.family,S.category].filter(Boolean).join("/"),ee=typeof S.confidence=="number"?`, confidence ${S.confidence.toFixed(2)}`:"";U=`${U??"failed"} \u2014 bug verdict: ${G}${Z?` [${Z}${ee}]`:""}`}let w=typeof S.category_proposal=="string"?S.category_proposal:"";w&&F==="failed"&&(U=`${U??"failed"}; category proposal: ${w} \u2014 consider adding to taxonomy`),t.onAgentEvent({type:"test_md_bug_verdict",step_index:_.trace[0].stepIndex,confirmed:S.confirmed===!0,bug_title:G||null,family:S.family??null,category:S.category??null,category_proposal:w||null,severity:S.severity??null,confidence:typeof S.confidence=="number"?S.confidence:null,one_liner:O||null})}let{continueOverall:M}=fe.recordStep(_,{status:F,duration_s:Q,reason:U}),H=js(_.config,y),q=De(ye.raw,H.variables,_.objective).objective;if(f){let O=Yn(f,u,b);a.addRunResult(Jn(f,q,u,O),f.total_runs)}else a.addRunResult({index:u,objective:q,status:F,summary:"",context:{memory:{},variables:{},pointer:""}},1);if(N||!M){let O=fe.snapshotOutcomes().find(G=>G.rootStepIndex===C);t.onAgentEvent({type:"test_md_step_end",step_index:C,status:O.status,duration_s:O.duration_s??0,ref_kind:O.refKind??null,unit_kind:O.refKind==="import"?(O.refLabel??"").endsWith("_test.md")?"test":"helper":null,inlined_count:O.inlinedCount??null,failed_sub_step_index:O.failedSubStepIndex??null})}return M}let Tt=[];async function Hs(d){Dn(d,l.steps.length);for(let u=0;u<d;u++){if(W||e.signal?.aborted)return{failedAt:u,cancelled:!0};if(Ze())return{failedAt:u,cancelled:!1};let f=l.steps[u],b=m.decisions[u];if(b.kind!=="replay")return process.stderr.write(`error: runReplayPhase invoked on a non-replay decision at step ${u}
|
|
45
|
-
`),{failedAt:u,cancelled:!1};let h=a.nextRunIndex();B=h;let g=u===0?ve??void 0:l.steps[u].unitEntryUrl,_={width:j.window_size.width,height:j.window_size.height},C=De(ye.raw,f.config.variables,f.objective),N=zt({step:f,decision:b,chrome:ce,device:L.kind==="device"?L.device:void 0,auth:c,sessionId:a.sessionId,runIndex:h,sessionDir:a.sessionDir,windowSize:_,forceNavigateUrl:L.kind==="device"?void 0:g,sessionContext:a.getContext(),variables:Object.keys(C.variables).length>0?C.variables:void 0,evidence:xt(),investigationAsync:!ie.ownsLifecycle});await Ct(C.raw),Ar(u);let F=Date.now(),U=null,Q=null,S=ct(),M={...N};delete M.run_id,Mt(M,{environment:v});let H=`run-${h}`;try{Y?.setRunActive(!0);try{for await(let w of se.run(H,"replay",M)){if(t.onAgentEvent(w),S=$t(S,w),w.type==="step_event"&&w.event==="reasoning"?Y?.setStepText(w.detail):w.type==="step_end"&&(w.status==="passed"&&Y?.setStepComplete(),Me&&Me(w.index,0,w.child_id,typeof w.ordinal=="number"&&w.id?{ordinal:w.ordinal,id:w.id}:void 0)),w.type==="run_end"){U=w;break}if(w.type==="error"){Q=w.message??"runner error";break}}!ie.ownsLifecycle&&U?.status==="failed"&&Tt.push({exited:se.exited.then(()=>{}).catch(()=>{}),cancel:()=>{try{se?.cancel()}catch{}}})}finally{Y?.setRunActive(!1)}}catch(w){Q=w.message}if(se.diedUnexpectedly&&Ze(),W)return{failedAt:u,cancelled:!0};let q=Math.round((Date.now()-F)/1e3),O=Pt(u,h,U,null,Q,q);a.recordStepRun({testmdStepIndex:l.steps[u].flatIndex,runIndex:h,totalRunDirs:St(U,null)}),At(S,U,h,null,l.steps[u].verifies);let G=!!Q||U?.status==="failed";if(On(u,G?"failed":"ok"),G||!O)return{failedAt:u,cancelled:!1}}return{failedAt:null,cancelled:!1}}let xr=async()=>{if(I)return!0;let d=c.basicAuth;if(!d){let h=await c.resolver.resolve(!0);h?.username&&h?.access_key&&(d={username:h.username,access_key:h.access_key},c.basicAuth=d)}if(!m.testId||!m.fromCommitId||!d)return process.stderr.write(`error: cannot acquire lock \u2014 missing required state
|
|
46
|
-
`),!1;let u=a.sessionId,f=o.onLockConflict??l.rootGlobal.on_lock_conflict??"readonly",b=await cr({tmsBaseUrl:A.tmsBaseUrl,testId:m.testId,fromCommitId:m.fromCommitId,newCommitId:u,basicAuth:d,onLockConflict:f});if(b==="ok"){I=!0,m.newCommitId=u,a.log("info","MID_RUN_LOCK_ACQUIRED","Mid-run lock acquired",{test_id:m.testId}),i&&t.onLockState({phase:"acquired",scope:"mid_run"}),gt({baseUrl:Oe(A.tmsBaseUrl),testId:m.testId,auth:Ue(d),lifecycle:r});let h=await Fs({resolved:l,decisions:m.decisions,tmsBaseUrl:A.tmsBaseUrl,newCommitId:u,basicAuth:d,mode:f,lifecycle:r,alreadyLocked:m.unitLocks,allUnits:!0});return h.outcome==="ok"?m.unitLocks.push(...h.locks):process.stderr.write(`warn: mid-run unit lock acquisition degraded (${h.outcome}) \u2014 affected units will not self-commit
|
|
47
|
-
`),!0}return a.log("error","MID_RUN_LOCK_CONFLICT","Mid-run lock acquisition failed",{reason:b}),i&&t.onLockState({phase:"conflict",scope:"mid_run",reason:b}),process.stderr.write(`error: mid-run lock acquisition failed (${b})
|
|
48
|
-
`),!1};if(i){let d=dt();if(!d)return process.stderr.write("error: v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.\n"),r.cleanup("marker-overlay","v16-runner not found"),r.cleanup("chrome","v16-runner not found"),await a.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(n),durationS:0,uploadResult:null};let u=Zr({environment:v,mode:y.mode??"testing",assertionMode:pr,finalValidation:hr,username:c.basicAuth?.username,accessKey:c.basicAuth?.access_key,sessionId:a.sessionId});L.kind==="device"&&await Qr(u,L.device),se=new Xr({env:u,runner:d,log:(C,N,F,U)=>a.log(C,N,F,U),sessionId:a.sessionId}),r.register("runner",()=>{(Kr()||e.signal?.aborted)&&(W=!0);try{se?.kill()}catch{}});let f={...L.kind==="device"?{device:L.device}:{},cdp_endpoint:ce.cdpEndpoint,ws_endpoint:ce.wsEndpoint,width:j.window_size.width,height:j.window_size.height,headless:ne.headless??!1,model:x,session_id:a.sessionId};c.basicAuth?(f.username=c.basicAuth.username,f.access_key=c.basicAuth.access_key):c.token&&(f.auth={type:"bearer",token:c.token}),await se.start(f);let b=o.author===!0;b&&(Gt(),a.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let{authorBoundary:h,cancelledInPhase:g,shrinkCount:_}=await Mn({decisions:m.decisions,forceAuthor:b,hasRetry:o.retry===!0||o.retryCount!==void 0,maxShrinks:o.retryCount!==void 0?parseInt(o.retryCount,10):He.maxShrinks,runReplayPhase:Hs,session:a,accumulator:fe,acquireLockIfNeeded:xr,archiveAttempt:Cr});if(de=_>0,_>0&&(a.log("info","RETRY_TRIGGERED","Retry loop triggered",{shrink_count:_,final_author_boundary:h}),t.onRetryAttempt({shrink_count:_,final_author_boundary:h,complete_reauthor:h===0})),h===0&&_>0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback",{shrink_count:_}),!g&&h>=0)for(let C=h;C<l.steps.length&&!e.signal?.aborted;C++){let N=l.steps[C];if(Ze()){fe.recordStep(N,{status:"failed",duration_s:0,reason:"v16-runner exited unexpectedly mid-session"});break}if(!fe.shouldRunFlatStep(N))continue;Ar(C),D=!0,me.add(l.steps[C].flatIndex);let F=a.nextRunIndex();B=F,await Ct(De(ye.raw,N.config.variables,N.objective).raw);let U=Er(C,F),Q=Date.now(),S=null,M=null,H=null,q=!1,O=0,G=ct(),w={...U};delete w.run_id,Mt(w,{environment:v});let Z=`run-${F}`;try{Y?.setRunActive(!0);try{for await(let T of se.run(Z,"author",w)){if(t.onAgentEvent(T),G=$t(G,T),T.type==="bifurcation"){let Ve=T.count??T.flows?.length??0;(T.is_single_flow??Ve<=1)||(H=T.flows??null,q=!0,O=0)}else if(T.type==="run_start"&&q)O++;else if(T.type==="step_event"&&T.event==="reasoning")Y?.setStepText(T.detail);else if(T.type==="step_end"&&(T.status==="passed"&&Y?.setStepComplete(),Me)){let Ve=q?Math.max(0,O-1):0;Me(T.index,Ve,T.child_id,typeof T.ordinal=="number"&&T.id?{ordinal:T.ordinal,id:T.id}:void 0)}if(T.type==="run_end"){S=T;break}if(T.type==="error"){M=T.message??"runner error";break}}}finally{Y?.setRunActive(!1)}}catch(T){M=T.message}se.diedUnexpectedly&&Ze();let ee=Math.round((Date.now()-Q)/1e3),Be=Pt(C,F,S,H,M,ee);if(a.recordStepRun({testmdStepIndex:l.steps[C].flatIndex,runIndex:F,totalRunDirs:St(S,H)}),At(G,S,F,H,l.steps[C].verifies),!Be||W||e.signal?.aborted)break}}else{let{effectiveDecisions:d}=await import("./effective-decisions-DRM3JSR4.js"),{decideRetry:u}=await import("./replay-policy-6USQBT3E.js"),f=o.retry===!0||o.retryCount!==void 0,b=o.retryCount!==void 0?parseInt(o.retryCount,10):He.maxShrinks,h=o.author===!0;h&&(Gt(),a.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let g=h?0:ft(m.decisions),_=0,C=null,N=m.decisions.filter(S=>S.kind==="replay").length,F=m.decisions.length-N,U=[];o.push&&U.push("--push"),f&&U.push("--retry"),o.retryCount!==void 0&&U.push(`--retry-count=${o.retryCount}`),h&&U.push("--author");let Q={source:n,steps:{total:m.decisions.length,replay:N,author:F},model:x,viewport:{width:j.window_size.width,height:j.window_size.height},chrome:ce.cdpEndpoint??ce.wsEndpoint??"managed",session:a.sessionName??"ephemeral",variables:{count:Object.keys(oe.raw).length,secrets:Object.values(oe.raw).filter(S=>S.secret).length,names:Object.keys(oe.raw)},flags:U,mode:y.mode??"testing"};for(;;){let S=a.snapshot(),M=fe.snapshot(),H=d(m.decisions,g,h);if(_>=1){let w=g===0?`\u21BB Complete re-author \u2014 retry budget exhausted (${_}/${b})`:`\u21BB Retry ${_}/${b} \u2014 replay 0..${g-1}, author ${g}..${m.decisions.length-1}
|
|
49
|
-
reason: replay miss at step ${(C??0)+1}`;process.stderr.write(w+`
|
|
50
|
-
`)}let q=_>=1&&g>0&&C!==null?{startIdx:0,endIdx:C,count:C}:void 0;Y?.setRunActive(!0);let O=await Jo({decisions:H,resolved:l,session:a,accumulator:fe,tuiConfig:j,globalConfig:Q,buildStepConfigAt:Er,buildReplayConfig:w=>{let Z=m.decisions[w];if(Z.kind!=="replay")throw new Error("expected replay decision at index "+w);let ee=l.steps[w];return zt({step:ee,decision:Z,chrome:ce,device:L.kind==="device"?L.device:void 0,auth:c,sessionId:a.sessionId,runIndex:a.nextRunIndex(),sessionDir:a.sessionDir,windowSize:{width:j.window_size.width,height:j.window_size.height},forceNavigateUrl:L.kind==="device"?void 0:w===0?ve??void 0:ee.unitEntryUrl,sessionContext:a.getContext(),variables:Go(ye.raw,ee.config.variables,ee.objective),evidence:xt()})},onAnyAuthorStep:w=>{D=!0,me.add(l.steps[w].flatIndex)},onCancel:()=>{re=!0},topBannerModel:x,topBannerAuth:`${k.getActiveProfile()??"no profile"}/${v}`,spawnOpts:{environment:v,mode:y.mode??"testing",assertionMode:pr,finalValidation:hr,log:(w,Z,ee,Be)=>a.log(w,Z,ee,Be)},priorAttemptRollup:q,pushStepLevelDelta:(w,Z)=>Ct(De(ye.raw,w,Z).raw),onSequencerStepEnd:(w,Z,ee,Be)=>{let T=Math.round((Date.now()-Be)/1e3),Ve=w.hadError?w.reason??"runner error":null,Ys=Pt(Z,ee,w.runEnd,w.bifurcationFlows??null,Ve,T);return a.recordStepRun({testmdStepIndex:l.steps[Z].flatIndex,runIndex:ee,totalRunDirs:St(w.runEnd,w.bifurcationFlows)}),At(w.evidence??ct(),w.runEnd,ee,w.bifurcationFlows,l.steps[Z].verifies),Ys},screenshotDispatcher:Me,onReasoning:w=>Y?.setStepText(w),onStepComplete:()=>Y?.setStepComplete(),onSpawnStart:w=>{B=w},host:t});if(Y?.setRunActive(!1),O.cancelled){r.cleanup("marker-overlay","user cancelled run"),r.cleanup("chrome","user cancelled run");break}if(O.failedAt===null)break;let G=u({failedAt:O.failedAt,shrinkCount:_,hasRetry:f,maxShrinks:b});if(G.kind==="fail"||!I&&!await xr())break;await Cr(),a.rollback(S),fe.rollback(M),G.kind==="complete-reauthor"?g=0:g=G.newAuthorBoundary,_++,de=!0,a.log("info","RETRY_TRIGGERED","Retry loop triggered (TTY)",{shrink_count:_,failed_at:C}),g===0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback (TTY)",{shrink_count:_}),C=O.failedAt}}let J=fe.finalize(),Se=Math.round((Date.now()-Rr)/1e3),qs={session:a,resolvedAuth:c,chromeResult:ce,chromeInstance:Qe??null,testId:a.testId??null,preparedVariables:oe,variableIds:Xe,globalContext:Sr,localContext:Ir,tuiConfig:j,env:v,localMode:!!o.local},Pr=!1,Tr=!1,Lr=!1,Lt=!1,Dr=async(d={})=>{if(!P)return!1;if(ie.ownsLifecycle?Pr:Lr)return!0;try{let u=await yr(),f=lr(D)==="replay",b=ue(X(n),".internal","execution.json"),h=ue(a.sessionDir,"execution.json"),g=gn(P.packTestDir,f?[b,h]:[h,b],(S,M,H,q)=>a.log(S,M,H,q)),{ids:_,linear:C}=g?bn(P.packTestDir):{ids:[],linear:!0},{steps:N,tail:F,unjoined:U}=hn(K.steps,_,f,C);g?U?a.log("warn","SKIPPED_TAIL_UNJOINED","Executed records don't align with the authored blob \u2014 skipped tail withheld",{executed:K.steps.length,leaves:_.length}):F.length>0&&a.log("info","SKIPPED_TAIL_APPENDED","Unexecuted authored actions recorded as skipped",{count:F.length}):a.log("warn","SKIPPED_TAIL_NO_BLOB","No auteur blob in pack \u2014 unexecuted actions cannot be recorded as skipped",{});let Q=await K.writeResult({steps:[...N,...F],spawns:we.length?we:[{resultCode:null}],tags:l.rootGlobal.tags,externalIdInput:{execution_id:P.executionId,session_id:a.sessionId,commit_id:f?m.fromCommitId??a.sessionId:a.sessionId,test_id:m.testId??a.testId??void 0,testcase_id:d.testcaseId??m.testcaseId??a.testcaseId??void 0,project_id:$??void 0,folder_id:ge??void 0,org_id:a.orgId!=null?String(a.orgId):void 0,session_name:a.sessionName??Ke(n),user_name:a.userName??void 0,user_email:a.userEmail??void 0,sharable_link:rs(te(v).testManagerUiUrl,$,d.testcaseId??m.testcaseId??a.testcaseId,d.shareId)},runnerEnv:ln({cdpBrowser:u,resolution:kr,runnerEnvironment:Ce,deviceName:be.deviceName,deviceModel:be.modelIdentifier,pixelResolution:P?await an(P.packTestDir):void 0}),intentEnv:tn(x,Ce,ie.ownsLifecycle?void 0:lr(D)),durationMs:Date.now()-Rr,log:(S,M,H,q)=>a.log(S,M,H,q)});if(!ie.ownsLifecycle)return await sn(K.pack,P.testId,ue(a.sessionDir,"tui.log"),{requireRealLog:!!Ce?.native_platform,appiumMarks:K.appiumMarks}),Lr=!0,a.log("info","EVIDENCE_RESULT_WRITTEN","Member result.yaml written",{execution_id:P.executionId,verdict:Q}),!0;if(!Tr)try{let S=fn({cwd:process.cwd(),members:[{path:n,verdict:Q,executionId:P.executionId,startedAt:new Date().toISOString(),acs:mn(K.steps),mode:"testmd",local:!!o.local}]});Tr=!0;for(let M of S.warnings)a.log("warn","EXEC_SYNC",M,{});S.synced>0&&a.log("info","EXEC_SYNC",`context sync: ${S.synced} fact(s), ${S.superseded} supersession(s)`,{})}catch(S){a.log("warn","EXEC_SYNC",`exec-sync failed: ${S instanceof Error?S.message:String(S)}`,{})}try{let S=pn(K.pack,un(process.cwd()));S.status==="skipped"&&a.log("warn","EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${S.reason}`,{})}catch(S){a.log("warn","EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(S)})}return await on({executionId:P.executionId,testId:P.testId,saved:!0,runKind:lr(D),verdict:Q,outputStemDir:X(n),cwd:s,packDir:K.pack,tuiLogPath:ue(a.sessionDir,"tui.log"),expectStatusDisagrees:(o.bugDetection??j.bug_detection)==="continue",log:(S,M,H,q)=>a.log(S,M,H,q),surface:"testmd",requireRealLog:!!Ce?.native_platform,appiumMarks:K.appiumMarks}),Pr=!0,a.log("info","EVIDENCE_SEALED","Evidence pack sealed",{execution_id:P.executionId,verdict:Q}),!0}catch(u){return a.log("warn","EVIDENCE_SEAL_FAILED","Evidence pack seal failed",{error:String(u)}),!1}},$e=ke&&(I||m.isFirstRun)&&!m.degradedReadonly,Gs=async()=>{if(!c.basicAuth)return null;let d=te(v),u=(D||o.push===!0)&&!re,f=(I||m.isFirstRun)&&!re&&J.overallStatus==="passed"&&!m.degradedReadonly;a.log("info","PIPELINE_GATE_STATE","Derived gate state (finalize)",{phase:"finalize",shouldUploadArtifacts:ke,shouldUploadPipeline:$e,shouldReplaceLocalOutput:u,shouldCommit:f,lockHeld:I,anyAuthorStepRan:D,cancelled:re,overallStatus:J.overallStatus});let b=_s({mobile:L.kind==="device",session:a,env:v,auth:c,variables:oe,variableIds:Xe,projectId:$,folderId:ge,totalSteps:J.outcomes.length,totalDuration:Se,screenshotExtMap:je?.getExtMap(),codeExport:Cs({codeExport:o.codeExport,codeLanguage:o.codeLanguage,skipCodeValidation:o.skipCodeValidation},j.code_export),onProgress:()=>{},log:(g,_,C,N)=>a.log(g,_,C,N),shouldUploadArtifacts:$e,shouldReplaceLocalOutput:u,shouldCommit:f,isFirstRun:m.isFirstRun,resolvedTest:l,sourcePath:n,stepRunRecords:a.getStepRunRecords(),authoredFlatIdx:[...me],unitLocks:m.unitLocks,outcomes:J.outcomes,overallStatus:J.overallStatus,fromCommitId:m.fromCommitId,startedISO:et,durationS:Se,tmsIds:{testId:m.testId??a.testId??void 0,testcaseId:m.testcaseId??a.testcaseId??void 0,projectId:$??void 0,folderId:ge??void 0,orgId:a.orgId??void 0,sessionName:a.sessionName??Ke(n)},tmsBaseUrl:A.tmsBaseUrl,testId:m.testId??void 0,newCommitId:m.newCommitId??void 0,basicAuth:c.basicAuth??void 0,decisions:m.decisions,wantsPush:o.push===!0,retryTriggered:de,forceAuthor:o.author===!0,evidence:P&&ie.ownsLifecycle?{executionId:P.executionId,packTestDir:P.packTestDir,sealedPackPath:K.pack,cwd:s,runIndices:tt,sealFn:Dr}:void 0,evidenceRead:P&&!ie.ownsLifecycle?{packTestDir:P.packTestDir,runIndices:tt}:void 0,authoredExecutionPath:D?void 0:ue(X(n),".internal","execution.json")});m.newCommitId!=null&&(b.skipTmsFinalize=!0);let h=new Pn(b);return i?await h.execute():await t.runUpload(h,g=>{if(g.testcaseId&&g.shareId&&$)return bt(d.testManagerUiUrl,$,g.testcaseId,g.shareId)})};P&&await yr(),se&&(await se.shutdown(),r.cleanup("runner","test.md run complete"));let ae=await ws(qs,{performUpload:Gs,runCleanup:()=>{r.cleanup("chrome","test.md run complete")},log:(d,u,f,b)=>a.log(d,u,f,b)},{overallStatus:J.overallStatus,outcomes:J.outcomes,sourcePath:n,title:l.rootTitle,rootSteps:l.rootSteps,startedISO:et,durationS:Se,localMode:!!o.local,skipLocalWrites:!0});ie.ownsLifecycle&&$e&&ae.uploadResult?.success&&(Lt=!0);let Or=await Dr({testcaseId:ae.uploadResult?.testcaseId,shareId:ae.uploadResult?.shareId}),Ur=o.evidencePublish===!1,jr=ie.ownsLifecycle&&!!P&&!!c.basicAuth&&Ts({shouldUploadArtifacts:ke,lockHeld:I,isFirstRun:m.isFirstRun,sealed:Or,testId:m.testId,mobile:L.kind==="device"});if(jr&&Ur)a.log("info","EVIDENCE_PUBLISH_SKIPPED","Replay evidence publish skipped (--no-evidence-publish)",{execution_id:P.executionId}),process.stderr.write(`info: evidence publish skipped (--no-evidence-publish)
|
|
51
|
-
`);else if(L.kind==="device"&&ie.ownsLifecycle&&P)a.log("info","EVIDENCE_PUBLISH_SKIPPED","Evidence publish skipped for a device run"),process.stderr.write(`note: evidence publish skipped \u2014 not supported for device runs yet
|
|
52
|
-
`);else if(Ur&&(I||m.isFirstRun))process.stderr.write(`note: --no-evidence-publish has no effect on author/commit runs
|
|
53
|
-
`);else if(jr){let d=c.basicAuth,u=P,f=$,b=await Ls({controller:new Ee(A.controllerBaseUrl,{username:d.username,accessKey:d.access_key}),tms:new lt(A.tmsBaseUrl,c.resolvedCreds?.username??d.username,c.resolvedCreds?.access_key??d.access_key),testId:m.testId,sessionId:a.sessionId,executionId:u.executionId,sealedPackPath:K.pack,projectId:f});Lt=b.ok,b.ok?a.log("info","EVIDENCE_INGESTED","Replay evidence uploaded and ingested",{execution_id:u.executionId,project_id:f}):(a.log("warn","EVIDENCE_PUBLISH_FAILED","Replay evidence publish failed",{execution_id:u.executionId,stage:b.stage,error:b.error}),process.stderr.write(` \u26A0 evidence publish failed (${b.stage}): ${b.error}
|
|
54
|
-
`)),t.onAgentEvent({type:"test_md_evidence_ingest",status:b.ok?"ok":"failed",evidence_id:u.executionId,...b.ok?{}:{stage:b.stage}})}await Yo(n,m,a,J.outcomes,J.overallStatus,et,Se,ae.uploadResult,j,o,{resolvedAuth:c,tmsBaseUrl:A.tmsBaseUrl},I,re);try{let d=Ie(n);if(Sn({shouldUploadPipeline:$e,uploadSucceeded:!!ae.uploadResult?.success,metaCommitId:d?.commit_id,metaTestId:d?.test_id})){let u=await Kt({sourcePath:n,testId:d.test_id,sessionId:a.sessionId,commitId:d.commit_id,controller:new Ee(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});u.ok?a.log("info","BUNDLE_SYNC_OK","testmd bundle pushed",{commit_id:d.commit_id,bytes:u.bytes}):(a.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync failed",{commit_id:d.commit_id,stage:u.stage,error:u.error}),process.stderr.write(` \u26A0 bundle sync failed (${u.stage}): ${u.error}
|
|
55
|
-
`)),t.onAgentEvent({type:"test_md_bundle_sync",status:u.ok?"ok":"failed",commit_id:d.commit_id,path:n,...u.ok?{bytes:u.bytes}:{stage:u.stage}})}}catch(d){a.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync threw",{error:d instanceof Error?d.message:String(d)})}if($e&&ae.uploadResult?.success)for(let d of m.unitLocks)try{let u=Ie(d.file);if(u?.commit_id!==a.sessionId||!u?.test_id)continue;let f=await Kt({sourcePath:d.file,testId:String(u.test_id),sessionId:a.sessionId,commitId:String(u.commit_id),controller:new Ee(A.controllerBaseUrl,{username:c.basicAuth.username,accessKey:c.basicAuth.access_key})});f.ok?a.log("info","BUNDLE_SYNC_OK","unit bundle pushed",{commit_id:u.commit_id,path:d.file,bytes:f.bytes}):a.log("warn","BUNDLE_SYNC_FAILED","unit bundle sync failed",{commit_id:u.commit_id,path:d.file,stage:f.stage,error:f.error}),t.onAgentEvent({type:"test_md_bundle_sync",status:f.ok?"ok":"failed",commit_id:u.commit_id,path:d.file,...f.ok?{bytes:f.bytes}:{stage:f.stage}})}catch(u){a.log("warn","BUNDLE_SYNC_FAILED","unit bundle sync threw",{path:d.file,error:u instanceof Error?u.message:String(u)})}let Nr=te(v),rt=ae.uploadResult?.testcaseId,nt=rt&&ae.uploadResult?.shareId&&$?bt(Nr.testManagerUiUrl,$,rt,ae.uploadResult.shareId):void 0,zs=l.unitFiles.filter(d=>d.file!==l.rootPath).map(d=>{let u=l.steps.filter(g=>g.owningFile===d.file),f=u.filter(g=>me.has(g.flatIndex)).length,h=(d.kind==="test"?Ie(d.file):null)?.commit_id===a.sessionId;return{path:d.file,kind:d.kind,replayed:u.length-f,authored:f,committed:h,...h?{commit_id:a.sessionId}:{}}}),Fr={overallStatus:J.overallStatus,durationS:Se,decisions:m.decisions,outcomes:J.outcomes,cancelled:re,retryTriggered:de,lockHeld:I,anyAuthorStepRan:D,isFirstRun:m.isFirstRun,wantsPush:o.push===!0,uploadResult:ae.uploadResult,shouldUploadArtifacts:ke,shouldReplaceLocalOutput:D&&!re,shouldCommit:(I||m.isFirstRun)&&!re&&J.overallStatus==="passed"&&!m.degradedReadonly,shareUrl:nt,imports:zs},{buildSummaryEvent:Ws}=await import("./SummaryBox-QWKW5FHK.js");if(i?t.onAgentEvent(Ws(Fr)):await t.onSummary(Fr),!i){let d=rt&&$?ns(Nr.testManagerUiUrl,$,rt):void 0;await t.onLinks({recordedTestPath:n,outputDir:X(n),shareableLink:nt,testCaseLink:d,codeExportDir:ae.uploadResult?.codeExportDir})}if(ie.ownsLifecycle&&K&&Or&&!e.suppressEvidenceOffer){let{offerEvidenceView:d}=await import("./evidence-ABYJOIV2.js");await d({packPath:K.pack,env:v,isTTY:!i&&!re&&!!process.stdin.isTTY&&!!process.stderr.isTTY,log:u=>process.stderr.write(u+`
|
|
56
|
-
`)})}return t.onAgentEvent({type:"test_md_done",overall_status:J.overallStatus,duration_s:Se,session_id:a.sessionId,...nt?{share_url:nt}:{}}),{overallStatus:J.overallStatus,exitCode:J.overallStatus==="passed"?0:1,outputDir:X(n),durationS:Se,uploadResult:ae.uploadResult,anyAuthorStepRan:D,resultCode:nn(we),...Tt.length?{pendingInvestigations:Tt}:{},ownPack:ie.ownsLifecycle?Ps({executionId:P?.executionId,testId:m.testId??P?.testId,testcaseId:ae?.uploadResult?.testcaseId,commitId:a.sessionId,published:Lt}):void 0}}function qo(e,t){let r={...e,...t},n=Object.keys(r).length>0?Ae(r,""):{variables:{},objective:"",keyMap:{}};return{raw:r,auteur:n.variables,auteurObjective:"",secretEntries:Object.entries(r).filter(([,s])=>s.secret),nonSecretEntries:Object.entries(r).filter(([,s])=>!s.secret)}}function De(e,t,r){let n={...e,...t??{}};if(Object.keys(n).length===0)return{raw:n,variables:{},objective:r};let s=Ae(n,r);return{raw:n,variables:bs(s.variables,s.objective),objective:s.objective}}function Go(e,t,r){let n=De(e,t,r).variables;return Object.keys(n).length>0?n:void 0}function js(e,t){let r=new Set(It),n={...e};for(let[s,o]of Object.entries(t))r.has(s)||s!=="variables"&&o!==void 0&&e[s]===void 0&&(n[s]=o);return n}function zo(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}async function Wo(e,t,r,n,s,o){let i=In(t);Ln(t,i);let p=xe(e),l=Bo(p)?JSON.parse(Ns(p,"utf8")):null,c=l?.testcase_id,y=l?.test_id,v=l?.commit_id,A=r.push===!0,R=r.retry===!0||r.retryCount!==void 0,x=r.author===!0;A&&!c&&process.stderr.write(`[--push] no meta.json yet \u2014 flag is a no-op on first run
|
|
57
|
-
`),x&&(c=void 0,y=void 0,v=void 0);let k=n.resolvedAuth.basicAuth;if(!k){let B=await n.resolvedAuth.resolver.resolve(!0);B?.username&&B?.access_key&&(k={username:B.username,access_key:B.access_key},n.resolvedAuth.basicAuth=k)}let E=!!k,a=!r.local&&E&&y!=null&&v!=null&&c!=null,W=a&&(mt(i)||A);if(A&&!a)return process.stderr.write(`error: --push requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
|
|
58
|
-
`),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(R&&!a)return process.stderr.write(`error: --retry requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
|
|
59
|
-
`),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(x&&!E)return process.stderr.write(`error: --author requires authenticated credentials for the TMS API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
|
|
60
|
-
`),{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};let m=null,I=!1,D=!1;if(W){m=s;let de=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",B=await cr({tmsBaseUrl:n.tmsBaseUrl,testId:y,fromCommitId:v,newCommitId:m,basicAuth:k,onLockConflict:de});if(B==="ok")I=!0,gt({baseUrl:Oe(n.tmsBaseUrl),testId:y,auth:Ue(k),lifecycle:o});else{if(B==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:!1,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};m=null,D=!0}}let me=[],re=W&&!I;if(!r.local&&E&&!re){let de=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",B=await Fs({resolved:t,decisions:i,tmsBaseUrl:n.tmsBaseUrl,newCommitId:m??s,basicAuth:k,mode:de,lifecycle:o});if(B.outcome==="ok")me=B.locks;else{if(I&&y&&v&&m&&await dr(n,y,v,m),_e(),B.outcome==="abort")return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:null,isFirstRun:c==null,hasAuth:E,canLock:a,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};process.stderr.write(`[lock] imported-unit conflict \u2014 whole run degrades to readonly (no commits, no uploads)
|
|
61
|
-
`),m=null,I=!1,D=!0}}return{resolved:t,decisions:i,testId:y,testcaseId:c,fromCommitId:v,newCommitId:m,isFirstRun:c==null,hasAuth:E,canLock:a,lockAcquired:I,unitLocks:me,degradedReadonly:D}}async function Fs(e){let t=new Set(e.resolved.steps.filter((n,s)=>e.decisions[s]?.kind==="author").map(n=>n.owningFile)),r=[];for(let n of e.resolved.unitFiles){if(n.kind!=="test"||n.file===e.resolved.rootPath||!e.allUnits&&!t.has(n.file)||e.alreadyLocked?.some(i=>i.file===n.file))continue;let s=Ie(n.file);if(!s?.test_id||!s?.commit_id)continue;let o=await cr({tmsBaseUrl:e.tmsBaseUrl,testId:String(s.test_id),fromCommitId:String(s.commit_id),newCommitId:e.newCommitId,basicAuth:e.basicAuth,onLockConflict:e.mode});if(o==="ok"){r.push({file:n.file,testId:String(s.test_id),fromCommitId:String(s.commit_id)}),gt({baseUrl:Oe(e.tmsBaseUrl),testId:String(s.test_id),auth:Ue(e.basicAuth),lifecycle:e.lifecycle});continue}for(let i of r)await qe({baseUrl:Oe(e.tmsBaseUrl),testId:i.testId,body:{commitId:e.newCommitId,fromCommitId:i.fromCommitId},auth:Ue(e.basicAuth)}),_e(i.testId);return{outcome:o,locks:[]}}return{outcome:"ok",locks:r}}function Oe(e){return`${e}/kane-cli/v1`}function Ue(e){return{username:e.username,accessKey:e.access_key}}async function cr(e){let t=Oe(e.tmsBaseUrl),r=Ue(e.basicAuth),n={baseUrl:t,testId:e.testId,fromCommitId:e.fromCommitId,newCommitId:e.newCommitId,auth:r},s=await Yt(n);if(s.ok)return"ok";if(!(s.reason==="concurrent"||s.reason==="base_mismatch"))return process.stderr.write(`[lock] acquire failed: ${s.reason} (HTTP ${s.httpStatus}): ${s.message}
|
|
62
|
-
`),"abort";let i=s.reason==="concurrent"?"concurrent session":"base commit mismatch (pull latest)";if(e.onLockConflict==="fail")return process.stderr.write(`[lock] ${i}; aborting (--on-lock-conflict fail)
|
|
63
|
-
`),"abort";if(e.onLockConflict==="wait"){if(s.reason==="base_mismatch")return process.stderr.write(`[lock] base commit mismatch \u2014 pull latest; aborting
|
|
64
|
-
`),"abort";for(;;){process.stderr.write(`[lock] waiting (concurrent session)...
|
|
65
|
-
`),await new Promise(l=>setTimeout(l,3e4));let p=await Yt(n);if(p.ok)return"ok";if(p.reason!=="concurrent")return process.stderr.write(`[lock] wait drifted to ${p.reason} (HTTP ${p.httpStatus}): ${p.message}; aborting
|
|
66
|
-
`),"abort"}}return process.stderr.write(`[lock] ${i} \u2014 running in readonly mode (no commit)
|
|
67
|
-
`),"readonly"}async function Yo(e,t,r,n,s,o,i,p,l,c,y,v,A){let{decisions:R,testId:x,testcaseId:k,fromCommitId:E,newCommitId:a}=t;if(!(s==="passed")||A){let m=A?"cancelled":s;v&&x&&E&&a&&(process.stderr.write(`[lock] run not committed (${m}); discarding playground lock
|
|
68
|
-
`),await dr(y,x,E,a));for(let I of t.unitLocks)await dr(y,I.testId,I.fromCommitId,a??r.sessionId);_e();return}_e()}async function dr(e,t,r,n){let s=e.resolvedAuth.basicAuth;if(!s){let i=await e.resolvedAuth.resolver.resolve(!0);i?.username&&i?.access_key&&(s={username:i.username,access_key:i.access_key},e.resolvedAuth.basicAuth=s)}if(!s)return;let o=await qe({baseUrl:Oe(e.tmsBaseUrl),testId:t,body:{commitId:n,fromCommitId:r},auth:Ue(s)});o.ok||process.stderr.write(`warn: discardLock failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
|
|
69
|
-
`)}async function Jo(e){let t=null,r=!1,n=0,s=-1,o=-1,i=0,p=async l=>{if(l&&l.status==="failed")return n>0&&e.decisions[n-1].kind==="replay"&&(t=n-1),null;for(;n<e.decisions.length&&!e.accumulator.shouldRunFlatStep(e.resolved.steps[n]);)n++;if(n>=e.decisions.length)return null;let c=e.decisions[n],y=e.resolved.steps[n],v=n;n++;let A=e.session.nextRunIndex();s=v,o=A,i=Date.now(),e.onSpawnStart?.(A),c.kind==="author"&&e.onAnyAuthorStep(v),await e.pushStepLevelDelta(y.config.variables,y.objective);let R=c.kind==="replay"?e.buildReplayConfig(v):e.buildStepConfigAt(v,A),x=c.kind==="replay"?"md5-match":c.reason,k=y.config??{},E={};for(let[a,W]of Object.entries(k))W!=null&&a!=="variables"&&a!=="assurance"&&(E[a]=W);return{config:R,banner:{stepLabel:`Step ${v+1}/${e.decisions.length}`,objective:zo(y.objective,100)},mode:c.kind,modeReason:x,perStepOverrides:Object.keys(E).length>0?E:void 0}};return await e.host.runSteps({topBanner:{model:e.topBannerModel,auth:e.topBannerAuth},globalConfig:e.globalConfig,getNextStep:p,onStepEnd:l=>(l.status==="failed"&&s>=0&&e.decisions[s]?.kind==="replay"&&(t=s),e.onSequencerStepEnd(l,s,o,i)),onAllComplete:()=>{},onCancel:()=>{r=!0,e.onCancel()},spawnOpts:e.spawnOpts,priorAttemptRollup:e.priorAttemptRollup,screenshotDispatcher:e.screenshotDispatcher,onReasoning:e.onReasoning,onStepComplete:e.onStepComplete}),{failedAt:t,cancelled:r}}export{Rs as a,Yn as b,Jn as c,yt as d,Fi as e,as as f,es as g,gi as h,zn as i,Wn as j,Zt as k,Qn as l,Zn as m,bt as n,rs as o,ns as p,ls as q,ds as r,zi as s,Wi as t,cs as u,Te as v,bs as w,ys as x,vs as y,er as z,_s as A,Cs as B,Es as C,As as D,xs as E,ir as F,Ya as G,Ls as H,lr as I,dd as J,qo as K,De as L,Go as M,js as N};
|
package/dist/chunk-3JLWPEQW.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as l}from"./chunk-RZ4F3BHX.js";import{a,c,f as o}from"./chunk-PH22FRN5.js";import{readFileSync as f,writeFileSync as d,mkdirSync as h,realpathSync as g}from"fs";import{join as y}from"path";var C="npm install -g @testmuai/kane-cli@latest",b="brew upgrade lambdatest/kane/kane-cli";function w(){try{let t=process.argv[1];if(t&&g(t).includes("/Cellar/"))return b}catch{}return C}var m=y(c,"version-check.json"),S=1440*60*1e3;function k(){try{let t=JSON.parse(f(m,"utf-8"));if(Date.now()-t.checkedAt<S)return t}catch{}return null}function A(t){try{h(c,{recursive:!0}),d(m,JSON.stringify({latest:t,checkedAt:Date.now()}))}catch{}}function u(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);for(let s=0;s<3;s++){let e=(n[s]??0)-(i[s]??0);if(e!==0)return e}return 0}function p(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);return(n[0]??0)!==(i[0]??0)?"major":(n[1]??0)!==(i[1]??0)?"minor":"patch"}async function j(){try{let t=k();if(t)return u(a,t.latest)>0?{current:a,latest:t.latest,severity:p(a,t.latest)}:null;let r=new AbortController,i=setTimeout(()=>r.abort(),5e3),n=await l(o,{headers:{Accept:"application/json"},signal:r.signal});if(clearTimeout(i),!n.ok)return null;let e=(await n.json())["dist-tags"]?.latest;return e?(A(e),u(a,e)>0?{current:a,latest:e,severity:p(a,e)}:null):null}catch{return null}}export{w as a,u as b,p as c,j as d};
|
package/dist/chunk-C5UNZ6ZY.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
var r={maxShrinks:3};function n(e){return e.hasRetry?e.shrinkCount>=e.maxShrinks?{kind:"complete-reauthor"}:{kind:"retry",newAuthorBoundary:e.failedAt}:{kind:"fail"}}export{r as a,n as b};
|
package/dist/chunk-EQSE6NIB.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as V,b as $,c as ce,d as R}from"./chunk-2YQ6TW77.js";import{b as z}from"./chunk-5GUD3CIH.js";import{a as B}from"./chunk-BPMSNGXQ.js";import{a as M}from"./chunk-DPUV6OSP.js";import{a as F}from"./chunk-NLCCBXXV.js";import{a as x}from"./chunk-RZ4F3BHX.js";import{e as le}from"./chunk-UR6MHSHU.js";import{readFileSync as oe,existsSync as j,readdirSync as Se,mkdirSync as U,writeFileSync as O}from"fs";import{readFile as ae,unlink as Te}from"fs/promises";import{join as E}from"path";import{existsSync as ye,mkdirSync as Ae,readdirSync as ee,writeFileSync as Re}from"fs";import{join as N}from"path";import{randomUUID as P}from"crypto";var ue="/home/kaneai/Downloads";function w(t){return`${ue}/${t}`}function K(t){return"FILE__"+t.replace(/[^A-Za-z0-9]/g,"_")}function C(t){let e=t?.media;return!e||!e.name||!e.media_url?null:{media_id:e.media_id??"",name:e.name,media_url:e.media_url,type:e.type??"doc"}}function H(t){return t?t.includes(`
|
|
3
|
-
`)?t.split(`
|
|
4
|
-
`).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function T(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(s,i)=>{let n=e[i];return n?n.value:s}).replace(/\$\{(.+?)\}/g,(s,i)=>{let n=e[i];return n?n.value:s})}var de={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",clear:"CLEAR",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD"},X={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},_e=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function W(t,e){if(t==="analyze"){let i=e?.action_params?.analyzer_type??"";return X[i]}if(t==="scroll"&&e?.action_params?.into_view===!0)return"SCROLL_UNTIL_ELEMENT";let s=de[t];return s||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),s??t.toUpperCase()}function Y(t,e){if(!t||!e)return"";try{let s=new Date(t);return isNaN(s.getTime())?"":new Date(s.getTime()+e).toISOString()}catch{return""}}function J(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function pe(t){let e=t.output_variable??"";if(!e)return"[]";let i={...J(t)};return delete i.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||P().replace(/-/g,"").slice(0,8),value:i,variable_description:"API Response"}])}function ge(t,e,s){let i=t.action_params??{},n=_e.has(e)?"Vision Agent":"Operation Agent",r={operation_type:e};if(e==="OPEN"&&(r.url=i.url??""),e==="SET_VARIABLE"&&(r.variable_name=t.output_variable??i.key??"",r.variable_value=t.output_value??""),e==="UPLOAD_FILE"){let m=C(i);m&&(r.value=w(m.name))}let o={},l={},a=t.action_instruction??"",c=i.text??"",u=i.url??"",p=[["intent",a],["value",c],["url",u]];for(let[m,h]of Object.entries(s)){let I=String(h);if(m.startsWith("secrets."))for(let[b,v]of p)v.includes(I)&&(l[b]=m);for(let[b,v]of p)v.includes(I)&&!(b in o)&&(o[b]=v)}let d=t.action_type,_={operation:t.action_instruction??"",agent:n,operation_dict:r,reasoning:d==="analyze"?i.query??"":t.intent??t.action_instruction??"",variable:o,secrets:l,params:{}};d==="analyze"&&typeof i.code=="string"&&i.code&&(_.code=i.code),d==="analyze"&&typeof i.code_js=="string"&&i.code_js&&(_.code_js=i.code_js),d==="analyze"&&typeof i.condition_expression=="string"&&i.condition_expression&&(_.condition_expression=i.condition_expression),i.uses_websocket===!0&&(_.uses_websocket=!0),i.uses_sse===!0&&(_.uses_sse=!0),d==="analyze"&&i.analyzer_type==="textual_visual"&&(typeof i.wrapped_js=="string"&&(_.wrapped_js=i.wrapped_js),Array.isArray(i.locators)&&(_.locators=i.locators),typeof i.operator=="string"&&(_.operator=i.operator),Array.isArray(i.transforms)&&(_.transforms=i.transforms),typeof i.query=="string"&&(_.query=i.query),typeof i.expected_value=="string"&&(_.expected_value=i.expected_value),typeof i.needs_unit_conversion=="boolean"&&(_.needs_unit_conversion=i.needs_unit_conversion),typeof i.condition=="string"&&(_.condition=i.condition));let f={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[d];return f&&i[f]!==void 0&&(_[f]=i[f]),d==="set_clipboard"&&typeof i.html=="string"&&i.html&&(_.html=i.html),_}function fe(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let s=e.sub_results??[];return s.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?s.some(n=>n.passed===!0):s.every(n=>n.passed===!0)}function Z(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function me(t){let e=t.assertion_tree??{},s=e.sub_results??[],i=Z(s);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:s,sub_checks:i,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function he(t){let s=(t.action_params??{}).assertion_tree??{},i=s.sub_results??[],n=Z(i);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:i,sub_checks:n,composite_operator:s.composite_operator??"and",verification:"",claim:s.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function Ee(t,e,s,i){let n=t.visual_data;if(!n||n.x==null||n.y==null)return null;let r=e?`${e}/test_screenshots`:"";return{x:n.x,y:n.y,confidence:0,bbox:n.bbox??null,bbox_source:n.bbox?"accessibility_tree":"fallback",viewport_width:n.viewport_width??1280,viewport_height:n.viewport_height??800,scale_factor:null,raw_image_url:r?`${r}/untagged_screenshot/${s}.${i?.get(s)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function be(t){if(!t)return"";let e=t;return typeof t=="object"&&!Array.isArray(t)&&Array.isArray(t.frameInfo)&&(e=t.frameInfo),!Array.isArray(e)||e.length===0?"":JSON.stringify(e)}function Ie(t){return/^(android|ios)_native$/i.test(t.platform??"")}function q(t,e={},s="",i){let n=t.action_type,r=W(n,t),o=t.action_params??{},l=t.coordinates??null,a=t.selectors??null,c=!!(a&&a.length>0),u=Ie(t),p=t.timestamp??"",d=t.duration_ms??0,_=t.variables_used??{},g=t.action_id??P(),f=P(),m=Y(p,d),h="",I="";if(n==="navigate")I=o.url??"",h=I;else if(n==="type"||n==="fill")h=o.text??"";else if(n==="press_key")h=o.key??"";else if(n==="wait")h=String(o.ms??o.timeout_ms??"");else if(n==="evaluate_js")h=o.script??"";else if(n==="upload_files"){let A=C(o);A&&(h=w(A.name))}else n==="analyze"&&r==="SET_VARIABLE"&&(h=t.output_value??"");let b="";n==="go_back"?b="back":n==="go_forward"&&(b="forward");let v=T(h,e),k=T(I,e),y=T(t.action_instruction??"",e),S=ge(t,r,_);return{operation_id:g,instruction_id:f,instruction:y,intent:y,operation_start:p,operation_end:m,status:t.status??"",command:r,name:"",target:"",value:v,message:"",operation_dict:"",frame:be(t.frame_info),error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(S),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:s?`${s}/test_screenshots/untagged_screenshot/${g}.${i?.get(g)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:k,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:r==="ASSERTION"?fe(o):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(o.tab_index??""),tab_identifier:String(o.tab_identifier??""),scroll_value:o.amount??1,scroll_direction:o.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:n==="evaluate_js"?o.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:u,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:l!==null&&!c,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:c?null:l?.x??null,y_coord:c?null:l?.y??null,target_x_coord:o.target_x??null,target_y_coord:o.target_y??null,source_description:o.source_description??null,target_description:o.target_description??null,use_coordinates:l!==null&&!c,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:c?a.map(A=>({...A,type:u?A.strategy??A.type??"native":A.isXPath?"xpath":"css"})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:r==="ASSERTION"?me(o):o.expression_tree??{},assertion_tree:o.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:r==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:o.source_coordinates?{x:o.source_coordinates[0],y:o.source_coordinates[1]}:{},end_coordinates:o.target_coordinates?{x:o.target_coordinates[0],y:o.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:n==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:n==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:Ee(t,s,g,i),reasoning:n==="analyze"?o.query??"":t.intent??t.action_instruction??""}}function G(t,e,s={}){let i=t.action_type,n=W(i,t),r=t.timestamp??"",o=t.duration_ms??0,l=Y(r,o),a=n==="ASSERTION"||n==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:a?"non_driver_action":"driver_action",module_id:"",instruction:T(t.action_instruction??"",s),command:n,error:null,parent_instruction_id:"",classification_layer_resp:n==="ASSERTION"?he(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:r,end_timestamp:l,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?t.action_params?.script??"":"",user_variables:i==="api"?pe(t):"[]",api_data:i==="api"?{request:t.action_params?.api_data?.request??{},response:J(t)}:{},params_used:!1,hard_assertion:n==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function ve(t,e=[]){let s=t.action_params??{},i=s.branches??[],n=s.winning_index??-1,r=s.sub_results??[],o={};for(let a of r){let c=a.sub_results;if(c)for(let u of c){let p=u.store_key;p&&(o[p]=u)}}let l=i.map((a,c)=>{let u=c===n,p=(a.sub_checks??[]).map(d=>{let _=o[d.store_key];return{description:d.description,store_key:d.store_key,expected_value:d.expected_value,stored_value:_?.extracted_value??d.stored_value,operator:d.operator??_?.operator??"equals",transforms:d.transforms??_?.transforms??[]}});if(p.length===0&&a.condition&&r.length>0){let _=r.find(g=>g.branch_index===c)?.sub_results??[];_.length>0&&(p=_.map(g=>({description:g.description??a.condition,store_key:g.store_key??"",expected_value:g.expected??"true",stored_value:g.extracted_value??void 0,operator:g.operator??"equals",transforms:g.transforms??[]})))}return{branch_index:c,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:a.custom_event??null,children:u?e:[],sub_checks:a.condition?p:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${P().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:n,branches:l,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function Q(t,e,s){for(let i of t)i.content_type==="instruction"&&"generative_id"in i&&(i.generative_id=e,i.generative_objective=s)}function D(t,e={},s="",i,n){let r=[],o=0;for(;o<t.length;){let l=t[o],a=l.action_type;if(!n?.keepFailedActions&&l.status==="error"&&a!=="assert"&&a!=="if_else"&&a!=="child_agent_start"&&a!=="child_agent_end"&&!(l.until_condition&&!l.error)){o+=1;continue}if(a==="analyze"&&!X[l.action_params?.analyzer_type??""]){o+=1;continue}if(a==="child_agent_start"){let c=l.action_params?.child_id??"",u=l.action_params?.objective??"",p=[];o+=1;let d=1,_="error",g;for(;o<t.length&&d>0;){let y=t[o],S=y.action_type;if(S==="child_agent_start")d+=1;else if(S==="child_agent_end"&&(d-=1,d===0)){_=y.status??"success",g=y,o+=1;break}d>0&&p.push(y),o+=1}let f=D(p,e,s,i);Q(f,c,u);let m=g?.action_params?.result_code??null,h=g?.action_params?.reason_code??null,I=g?.action_params?.error_message??null,b=g?.action_params?.summary??null,v=g?.action_params?.one_liner??null,k=_==="error";r.push({content_type:"generative_block",instruction_id:`generative_block_${c}`,generative_id:c,objective:u,status:_,children:f,error_message:k?I??null:null,error_code:k?h??null:null,result_code:m??null,bifurcation_context:[],approach_reason:H(b),one_liner:v??null});continue}else if(a==="child_agent_end"){o+=1;continue}else if(a==="if_else"){o+=1;let c=[];for(;o<t.length&&t[o].action_type==="child_agent_start";){let u=t[o],p=u.action_params?.child_id??"",d=u.action_params?.objective??"",_=[];o+=1;let g=1,f="error";for(;o<t.length&&g>0;){let h=t[o];if(h.action_type==="child_agent_start")g+=1;else if(h.action_type==="child_agent_end"&&(g-=1,g===0)){f=h.status??"success",o+=1;break}g>0&&_.push(h),o+=1}let m=D(_,e,s,i);c.push(...m)}r.push(ve(l,c));continue}else if(a==="query_tool"){o+=1;continue}else if(l.until_condition){let c=q(l,e,s,i),u=G(l,c,e),p=typeof l.until_condition_met=="boolean"?l.until_condition_met:l.status==="success";r.push({content_type:"until_block",instruction_id:`until_${P().slice(0,8)}`,condition:l.until_condition,max_retries:l.until_max_retries??10,settle_ms:l.until_settle_ms??500,current_count:0,condition_met:p,children:[u],generative_id:"",generative_objective:"",variables_used:{},status:l.status??"success"})}else{let c=q(l,e,s,i),u=G(l,c,e);r.push(u)}o+=1}return r}function L(t,e={},s="",i,n){let r=[];for(let o of t){let l=D(o.records,e,s,i,n);if(l.length===0)continue;let a=P().replace(/-/g,"");Q(l,a,o.objective);let c=l.some(_=>"status"in _&&typeof _.status=="string"?_.status==="error"||_.status==="failed":!1),u=o.resultCode?parseInt(o.resultCode,10):null,p=u!==null&&!isNaN(u)&&u>=200,d=c||p?"error":"success";r.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:o.objective,status:d,children:l,error_message:d==="error"?o.errorMessage??null:null,error_code:d==="error"?o.reasonCode??null:null,result_code:o.resultCode??null,bifurcation_context:[],approach_reason:H(o.summary),one_liner:o.oneLiner??null})}return{instructions:r}}function te(t,e){let s;try{s=ee(t)}catch{return 0}let i=0,n=s.filter(r=>/^\d+$/.test(r)).sort((r,o)=>Number(r)-Number(o));for(let r of n){let o=N(t,r),l=N(o,"logs");if(!ye(l))continue;let a;try{a=ee(l)}catch{continue}let c=a.filter(d=>d.endsWith("-actions.ndjson")).sort((d,_)=>(parseInt(d,10)||0)-(parseInt(_,10)||0)),u=[];for(let d of c){let _=e.readActions(N(l,d));_.length&&u.push({objective:e.objective??"",records:_})}if(u.length===0)continue;let{instructions:p}=L(u,e.vars??{},e.screenshotBaseUrl??"",e.extMap,{keepFailedActions:!0});if(p.length!==0)try{let d=N(o,"auteur");Ae(d,{recursive:!0}),Re(N(d,"execution.json"),JSON.stringify(e.buildBlob(p),null,2)),i++,e.log?.("info","EVIDENCE_ARCHIVED_ATTEMPT_BLOB","Derived nested attempt blob",{attempt:r,instructions:p.length})}catch(d){e.log?.("debug","EVIDENCE_ARCHIVED_ATTEMPT_BLOB_FAILED","Nested attempt blob derivation failed",{attempt:r,error:d instanceof Error?d.message:String(d)})}}return i}var ie=le(ce(),1);import{createWriteStream as Pe}from"fs";import{readFile as xe}from"fs/promises";import{join as Le,basename as Ne}from"path";import{tmpdir as Oe}from"os";var ke=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function ne(t){let e=Le(Oe(),`${Ne(t)}_artifacts.zip`);return new Promise((s,i)=>{let n=Pe(e),r=(0,ie.default)("zip",{zlib:{level:6}});n.on("close",()=>s(e)),r.on("error",i),r.pipe(n),r.glob("**/*",{cwd:t,ignore:ke}),r.finalize()})}async function se(t){return xe(t)}async function we(t,e){return ae(z(t,e))}function Ce(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var re=class{config;controller;testId;constructor(e){this.config=e,this.controller=new M(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,s,i,n){this.config.log?.(e,s,i,n)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let s=this.config.evidence,i=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let l=this.collectNdjsonPerRun(),a=l.reduce((f,m)=>f+m.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:l.length});let c=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(c)});let{instructions:u}=l.length>0?L(l,c,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),d=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(d.length/1024).toFixed(1)});let _=E(this.config.sessionDir,"execution.json");O(_,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:_});let g=s?.packTestDir??this.config.evidenceRead?.packTestDir;if(g){let f=E(g,"auteur");U(f,{recursive:!0}),O(E(f,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(f,"execution.json")}),this.deriveArchivedAttemptBlobs(g,c)}if(e("convert","done"),s)i=d;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let f=null,m;try{f=await ne(this.config.sessionDir),m=await se(f),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(m.length/1024/1024).toFixed(1),path:f}),e("zip","done",`${(m.length/1024/1024).toFixed(1)}MB`)}finally{f&&await Te(f).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(m.length/1024/1024).toFixed(1),blob_size_kb:+(d.length/1024).toFixed(1)}),await Promise.all([R(h.urls.artifacts.upload_url,m,"application/zip"),R(h.urls.blob.upload_url,d,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let l=this.collectNdjsonPerRun(),a=this.config.variables??{},{instructions:c}=l.length>0?L(l,a,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},u=this.buildExecutionEnvelope(c),p=E(this.config.sessionDir,"execution.json");O(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let d=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(d){let _=E(d,"auteur");U(_,{recursive:!0});let g=this.readAuthoredExecution();O(E(_,"execution.json"),g??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(_,"execution.json"),source:g?"authored":"run_envelope"}),this.deriveArchivedAttemptBlobs(d,a)}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(l){let a=l instanceof Error?l.message:String(l);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),e("atomic_replace","failed",a),l}}else e("atomic_replace","skipped");let n,r;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let l=await this.config.onCommitLock();if(l.ok)n=l.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:n??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:l.reason,message:l.message}),e("commit_lock","failed",`${l.reason??"unknown"}: ${l.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${l.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let l=new B(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(n=(await l.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:n??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(n)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(n&&this.config.shareApiBaseUrl)try{r=await this.generateShareLink(n),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:r})}catch(l){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(l)})}if(s&&i){let l=null;e("zip","running");try{await s.sealFn({testcaseId:n,shareId:r}),l=s.sealedPackPath?await ae(s.sealedPackPath):await we(s.executionId,s.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:s.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(l.length/1024/1024).toFixed(1)})}catch(a){let c=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:s.executionId,error:c})}if(l){e("zip","done",`${(l.length/1024/1024).toFixed(1)}MB`),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Ce(s.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(l.length/1024/1024).toFixed(1),blob_size_kb:+(i.length/1024).toFixed(1)}),await Promise.all([R(a.urls.artifacts.upload_url,l,"application/zip"),R(a.urls.blob.upload_url,i,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(i.length/1024).toFixed(1)}),await R(a.urls.blob.upload_url,i,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let o;if(this.config.mobile&&this.config.codeExport?.enabled)this.log("info","PIPELINE_CODE_EXPORT_SKIPPED","Code export is not supported for device runs"),e("code_export","skipped","not supported on mobile yet");else if(this.config.codeExport?.enabled&&n){let l=!1;try{await this.triggerCodeExport(n),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),l=!0}catch(a){let c=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:c}),e("code_export","failed",`trigger failed: ${c}`)}if(l){e("code_export","running","Waiting for code generation\u2026");try{o=await this.pollAndDownloadCode(n,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:o}),e("code_export","done",o)}catch(a){let c=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:c}),e("code_export","failed",c)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:n,shareId:r,codeExportDir:o}}catch(s){return{success:!1,testId:this.testId,error:s instanceof Error?s.message:String(s)}}}async runCodeExport(e,s){let i=s??this.config.onProgress,n=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),n=!0}catch(r){let o=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:o}),i("code_export","failed",`trigger failed: ${o}`)}if(n){i("code_export","running","Waiting for code generation\u2026");try{let r=await this.pollAndDownloadCode(e,i);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:r}),i("code_export","done",r),r}catch(r){let o=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:o}),i("code_export","failed",o);return}}}deriveArchivedAttemptBlobs(e,s){try{let i=te(e,{readActions:n=>this.readNdjsonFromFile(n),buildBlob:n=>this.buildExecutionEnvelope(n),objective:this.config.firstObjective,vars:s,screenshotBaseUrl:this.config.screenshotBaseUrl??"",extMap:this.config.screenshotExtMap,log:(n,r,o,l)=>this.log(n,r,o,l)});i>0&&this.log("info","PIPELINE_ARCHIVED_ATTEMPTS","Nested retry-attempt blobs derived",{count:i})}catch(i){this.log("debug","PIPELINE_ARCHIVED_ATTEMPTS_FAILED","Nested attempt blob pass failed",{error:i instanceof Error?i.message:String(i)})}}collectNdjsonPerRun(){let e=[],s=this.config.runObjectives??[],i=this.config.runMetadata??[],n=this.config.evidence??this.config.evidenceRead;for(let r=0;r<this.config.runDirs.length;r++){let o=this.config.runDirs[r],l=s[r]||this.config.firstObjective,a=i[r],c=n?this.readNdjsonFromFile(E(n.packTestDir,"logs",`${n.runIndices?.[r]??r}-actions.ndjson`)):this.readNdjsonFromDir(o);c.length>0&&e.push({objective:l,records:c,resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}if(e.length===0){let r=E(this.config.sessionDir,"runs");if(j(r))try{let l=Se(r,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of l){let c=E(r,a),u=this.readNdjsonFromDir(c);u.length>0&&e.push({objective:this.config.firstObjective,records:u})}}catch{}}return e}readNdjsonFromDir(e){let s=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let i of s)if(j(i))return this.readNdjsonFromFile(i);return[]}readNdjsonFromFile(e){let s=[];if(!j(e))return s;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let i=oe(e,"utf-8");for(let n of i.split(`
|
|
5
|
-
`)){let r=n.trim();if(r)try{s.push(JSON.parse(r))}catch{}}return s}async generateShareLink(e){let s=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:s,testcase_id:e});let i={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},n=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:n,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let r=n?await this.config.authResolver.fetch(s,i):await x(s,{...i,headers:{...i.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Share link API failed: ${r.status} ${await r.text()}`);let o=await r.json();if(!o.shareId)throw new Error("Share link API returned no shareId");return o.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:s,body:i}=V({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:s});let n={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)},r=this.config.authResolver?await this.config.authResolver.fetch(s,n):await x(s,{...n,headers:{...n.headers,Authorization:this.buildAuthHeader()}});if(!r.ok)throw new Error(`Code export failed: ${r.status} ${await r.text()}`)}async pollAndDownloadCode(e,s){let i=$({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),n=this.config.exitTimeoutMs??3e5,r=5e3,o=Date.now()+n;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:i,timeout_ms:n});let l=(a,c)=>this.config.authResolver?this.config.authResolver.fetch(a,c):x(a,{...c,headers:{...c?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<o;){let a=await l(i,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let _=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:_.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let u=(await a.json()).data?.find(_=>_.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),s("code_export","running","Waiting for code generation\u2026"),await this.sleep(r);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),s("code_export","running","Generating code\u2026"),await this.sleep(r);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let d=this.config.codeExportDir??E(this.config.sessionDir,"code-export");U(d,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:d}),s("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let _ of u.url){let g=E(d,_.file_name),f=await x(_.file_url);if(!f.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:_.file_name,status:f.status});continue}let m=await f.text();O(g,m,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:_.file_name,size_bytes:m.length})}return d}throw new Error("Code export timed out")}sleep(e){return new Promise(s=>setTimeout(s,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:F(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let s=oe(e,"utf8");return JSON.parse(s),s}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let s=this.config.runStatuses.every(a=>a==="passed")?"success":"error",i=this.config.variableIds??{},n=[];if(this.config.variables)for(let[a,c]of Object.entries(this.config.variables)){if(c.secret)continue;let u=a.startsWith("global.")?a.slice(7):a;n.push({id:i[u]??0,name:u,value:c.value,session_value:c.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let r=[],o=[],l=new Set;for(let a of this.collectNdjsonPerRun())for(let c of a.records)if(c.output_variable&&c.output_value!=null&&r.push({name:c.output_variable,value:String(c.output_value),value_type:"test_level",variable_description:"ANALYZE result"}),c.action_type==="upload_files"){let u=C(c.action_params);if(u){let p=u.media_id||u.media_url;if(!l.has(p)){l.add(p),o.push({media_url:u.media_url,media_id:u.media_id,name:u.name,type:u.type});let d=w(u.name);r.push({name:K(u.name),value:d,value_type:"string",variable_description:`variable for ${d}`})}}}return{test_id:this.testId,version:"v4",auto_heal_version:this.config.apMode==="v2"?"AH2":"",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:s,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:o,test_params:[],test_level_variables:JSON.stringify(r),test_global_variables:n,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{we as a,Ce as b,re as c};
|
package/dist/chunk-PH22FRN5.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{homedir as a}from"os";import{join as t}from"path";var m="0.8.4",d="kane-cli",e=t(a(),".testmuai","kaneai"),g=t(e,"profiles"),h=t(e,"tui-config.json"),b=t(e,"media"),A="https://registry.npmjs.org/@testmuai/kane-cli",_="https://api.github.com/repos/LambdaTest/kane-cli/releases",n="@testmuai/kane-cli-skill",L=`https://registry.npmjs.org/${n}`,r="kane-cli",x=[{dir:t(a(),".claude","skills",r),agent:"Claude Code"},{dir:t(a(),".agents","skills",r),agent:"Codex CLI"},{dir:t(a(),".gemini","skills",r),agent:"Gemini CLI"}],U="https://dd-proxy.lambdatest.com/intake/kane-cli",u="https://kaneai-playground.lambdatest.io",R=9222,I=9230,E=t(e,"chrome-profiles"),o=t(e,"hints"),C=t(o,"state.json");function T(s){return t(o,`catalog-${s}.json`)}var c="127.0.0.1",S=18392,f=18400,i="/callback";function B(s){return`http://${c}:${s}${i}`}var N="KANE CLI",P="*",O={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",testGeneratorBaseUrl:"https://test-manager-api.lambdatest.com",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",evidenceViewerUrl:"https://evidence.lambdatest.com",mediaArtefactsHost:"prod-mobile-artefacts.lambdatest.com",mobileAppBaseUrl:"https://api.lambdatest.com"},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",testGeneratorBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com",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",evidenceViewerUrl:"https://stage-evidence.lambdatestinternal.com",mediaArtefactsHost:"stage-mobile-artefacts.lambdatestinternal.com",mobileAppBaseUrl:"https://stage-api.lambdatestinternal.com"}},k={orange:"#ff9500",generateAccent:"#0d9488",assuranceAccent:"#b388ff",purple:"#b388ff",secondary:"#888888",dim:"#666666",muted:"#444444",green:"#4ade80",red:"#ef4444",amber:"#fbbf24"};export{m as a,d as b,e as c,h as d,b as e,A as f,_ as g,n as h,x as i,U as j,u as k,R as l,I as m,E as n,C as o,T as p,c as q,S as r,f as s,i as t,B as u,N as v,P as w,O as x,k as y};
|
package/dist/chunk-QDIZQ3ZF.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as S}from"./chunk-HXSEA7JS.js";import{y as o}from"./chunk-PH22FRN5.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as y,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var k=b(w(),1);var i=b(R(),1);function A(e){let t=e.decisions.filter(r=>r.kind==="replay").length,l=e.decisions.filter(r=>r.kind==="author").length,p=e.outcomes.filter(r=>r.status==="passed").length,d=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.status==="skipped").length,a=o.green,n;e.cancelled||e.overallStatus==="interrupted"?(a=o.orange,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let s=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${p} passed, ${d} failed, ${f} skipped)`,T=`${t} replay \xB7 ${l} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,h=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",h=o.red;else if(!e.shouldCommit)e.isFirstRun?u="\u2013 not committed (first run skipped commit)":e.lockHeld?u="\u2013 not committed":u="\u2013 not committed (readonly fallback / no lock)";else{let r=e.uploadResult?.testcaseId;u=r?`\u2713 pushed (testcase=${r})`:"\u2713 pushed",h=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,g=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",g=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,g=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:T,showRetries:C,retriesText:_,commitText:u,commitColor:h,artifactsText:v,uploadText:m,uploadColor:g}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,l=e.decisions.filter(s=>s.kind==="author").length,p=e.outcomes.filter(s=>s.status==="passed").length,d=e.outcomes.filter(s=>s.status==="failed").length,f=e.outcomes.filter(s=>s.status==="skipped").length,a,n=!1;return e.cancelled?a="cancellation":e.overallStatus==="failed"?a="run_failed":e.shouldCommit&&e.uploadResult?.testcaseId?(a="ok",n=!0):!e.shouldCommit&&!e.lockHeld&&!e.isFirstRun?a="readonly_fallback":a="not_committed",{type:"test_md_summary",overall_status:e.overallStatus,duration_s:e.durationS,steps:{total:e.outcomes.length,passed:p,failed:d,skipped:f,replay_decisions:t,author_decisions:l},retries:{triggered:e.retryTriggered},commit:{committed:n,reason:a,...e.uploadResult?.testcaseId?{testcase_id:e.uploadResult.testcaseId}:{}},artifacts:{replaced:e.shouldReplaceLocalOutput},upload:{performed:e.shouldUploadArtifacts,...e.uploadResult?{succeeded:!!e.uploadResult.success}:{}},...e.shareUrl?{share_url:e.shareUrl}:{},cancelled:e.cancelled,...e.imports&&e.imports.length>0?{imports:e.imports}:{}}}function D({data:e}){let t=A(e),l=[{label:"result",value:(0,i.jsx)(c,{color:t.resultLine.color,bold:!0,children:t.resultLine.text})},{label:"breakdown",value:(0,i.jsx)(c,{color:o.dim,children:t.breakdown})}];return t.showRetries&&l.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),l.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),l.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),l.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:l})}function I({data:e}){let{exit:t}=x();return(0,k.useEffect)(()=>{let l=setTimeout(()=>t(),50);return()=>clearTimeout(l)},[t]),(0,i.jsx)(y,{flexDirection:"column",children:(0,i.jsx)(D,{data:e})})}export{A as a,O as b,D as c,I as d};
|
package/dist/doctor-CPMWU5TL.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b,c,d}from"./chunk-TXH2KG7U.js";import"./chunk-7HXZZ3VA.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-JCILRPOM.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-4JOD47QI.js";import"./chunk-RZ4F3BHX.js";import"./chunk-PH22FRN5.js";import"./chunk-UR6MHSHU.js";export{d as doctorExitCode,c as doctorPreflightBlocked,b as renderDoctorText,a as runDoctor};
|
package/dist/install-YDH2CORO.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-BGMI5PH4.js";import"./chunk-RFHMDQXZ.js";import"./chunk-A3PGLDQY.js";import"./chunk-JT7I6OST.js";import"./chunk-RZ4F3BHX.js";import"./chunk-XHNPNYJP.js";import"./chunk-PH22FRN5.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b,c}from"./chunk-EQSE6NIB.js";import"./chunk-2YQ6TW77.js";import"./chunk-NEHX45NQ.js";import"./chunk-5DBK6QNS.js";import"./chunk-GSYJUHRK.js";import"./chunk-5GUD3CIH.js";import"./chunk-XWKUZJCP.js";import"./chunk-ZSXDZI56.js";import"./chunk-EHN5HTUD.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.js";import"./chunk-VZ7KXRXB.js";import"./chunk-P7YZ3PU3.js";import"./chunk-TH47OOBV.js";import"./chunk-VAYBKR76.js";import"./chunk-CUM23TLF.js";import"./chunk-DUAXZYAD.js";import"./chunk-DBIBROYW.js";import"./chunk-WXHQYYD5.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-52GWEKFD.js";import"./chunk-BPMSNGXQ.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-JCILRPOM.js";import"./chunk-MSGW4JDG.js";import"./chunk-4JOD47QI.js";import"./chunk-JT7I6OST.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-PH22FRN5.js";import"./chunk-UR6MHSHU.js";export{c as UploadPipeline,b as packPresignEntry,a as readPackForUpload};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{c as a,d as b,e as c,f as d,g as e,h as f}from"./chunk-BXRZGISN.js";import"./chunk-52GWEKFD.js";import"./chunk-TXH2KG7U.js";import"./chunk-7HXZZ3VA.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-JCILRPOM.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-66RJPH73.js";import"./chunk-TAOHYWEO.js";import"./chunk-UOMRMCMI.js";import"./chunk-4JOD47QI.js";import"./chunk-RZ4F3BHX.js";import"./chunk-PH22FRN5.js";import"./chunk-UR6MHSHU.js";export{a as MobileHostUnsupportedError,b as MobilePreflightError,c as PACKAGE_ID_REJECTED,e as isInstallablePath,f as prepareTarget,d as toAppSpec};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{f as a}from"./chunk-55NSNWM5.js";import"./chunk-3MSXQU2C.js";import"./chunk-62WYSEAT.js";import"./chunk-UTIGOLON.js";import"./chunk-N5JHMCRU.js";import"./chunk-ZK57J37M.js";import"./chunk-2PH43Z3P.js";import"./chunk-35L2QXWP.js";import"./chunk-L4EDLDLZ.js";import"./chunk-NEAMQMYH.js";import"./chunk-A4XJUWAQ.js";import"./chunk-TYI4MLFJ.js";import"./chunk-DEZ7CXGM.js";import"./chunk-QDIZQ3ZF.js";import"./chunk-A6TJUSOS.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-6CR2HTIM.js";import"./chunk-EQSE6NIB.js";import"./chunk-2YQ6TW77.js";import"./chunk-5DT7PIGB.js";import"./chunk-IXTFWIQ6.js";import"./chunk-NEHX45NQ.js";import"./chunk-5DBK6QNS.js";import"./chunk-GSYJUHRK.js";import"./chunk-5GUD3CIH.js";import"./chunk-XWKUZJCP.js";import"./chunk-ZSXDZI56.js";import"./chunk-EHN5HTUD.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.js";import"./chunk-4CHO7SAT.js";import"./chunk-L77ZOU4N.js";import"./chunk-UONRTWLU.js";import"./chunk-VZ7KXRXB.js";import"./chunk-KAMJ7U4M.js";import"./chunk-OSB32HJE.js";import"./chunk-DYGUHGZ6.js";import"./chunk-P7YZ3PU3.js";import"./chunk-TDPWFYTJ.js";import"./chunk-BDUCWZYO.js";import"./chunk-KUYJ6FEN.js";import"./chunk-5HYXTFGB.js";import"./chunk-5Y2G4NC7.js";import"./chunk-R5T4RLF5.js";import"./chunk-2YEHV2CX.js";import"./chunk-VYYTENPY.js";import"./chunk-TH47OOBV.js";import"./chunk-VAYBKR76.js";import"./chunk-CUM23TLF.js";import"./chunk-DUAXZYAD.js";import"./chunk-DBIBROYW.js";import"./chunk-WXHQYYD5.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-BXRZGISN.js";import"./chunk-52GWEKFD.js";import"./chunk-GJED4QGF.js";import"./chunk-PRLTUEKP.js";import"./chunk-YCCUBQY4.js";import"./chunk-BCCWICSS.js";import"./chunk-SFXQFUM6.js";import"./chunk-BPMSNGXQ.js";import"./chunk-VE3SUJMA.js";import"./chunk-BGMI5PH4.js";import"./chunk-RFHMDQXZ.js";import"./chunk-TXH2KG7U.js";import"./chunk-7HXZZ3VA.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-JCILRPOM.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-66RJPH73.js";import"./chunk-TAOHYWEO.js";import"./chunk-7HPEHQHH.js";import"./chunk-HHHNQW5Z.js";import"./chunk-7VTYRTEJ.js";import"./chunk-UOMRMCMI.js";import"./chunk-4JOD47QI.js";import"./chunk-JRADU3PO.js";import"./chunk-A3PGLDQY.js";import"./chunk-JT7I6OST.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-E47GFYXA.js";import"./chunk-EYOCNMUM.js";import"./chunk-XHNPNYJP.js";import"./chunk-HXSEA7JS.js";import"./chunk-PSWB3BWQ.js";import"./chunk-PH22FRN5.js";import{a as o}from"./chunk-DFS4RMVP.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-JRADU3PO.js";import"./chunk-A3PGLDQY.js";import"./chunk-JT7I6OST.js";import"./chunk-RZ4F3BHX.js";import"./chunk-PH22FRN5.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};
|