@testmuai/kane-cli 0.6.4 → 0.6.6
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/bin/kane-cli.cjs +91 -0
- package/bin/resolve-runtime.cjs +45 -0
- package/dist/{ChatSurface-VXYU6KFW.js → ChatSurface-LV3KW6WN.js} +1 -1
- package/dist/{ChromeProfilePicker-QWTM7DK6.js → ChromeProfilePicker-6PLUQ5TW.js} +1 -1
- package/dist/{CliFeedbackPrompt-6NVWMONO.js → CliFeedbackPrompt-I4F56IVK.js} +1 -1
- package/dist/{CliUploadProgress-2YRQLECI.js → CliUploadProgress-ULRSPKY3.js} +1 -1
- package/dist/{ConfigView-I4R5M7BO.js → ConfigView-7NMYALEA.js} +1 -1
- package/dist/{EvidenceViewOffer-54GEARRX.js → EvidenceViewOffer-KQKPTMXA.js} +1 -1
- package/dist/{FolderPicker-5VWBYTAK.js → FolderPicker-4IOVDO2P.js} +1 -1
- package/dist/{HelpView-OJZW4XWX.js → HelpView-SHMVMHNU.js} +1 -1
- package/dist/{InfoBox-TGELGCBR.js → InfoBox-W2LZVGQS.js} +1 -1
- package/dist/{LinksBox-B5EBRY26.js → LinksBox-ZS25VTBY.js} +1 -1
- package/dist/{ProfilesView-3SJRIBHQ.js → ProfilesView-XBBRIQ3U.js} +1 -1
- package/dist/{ProjectPicker-72HKMBEY.js → ProjectPicker-AUN47FXS.js} +1 -1
- package/dist/{SaveSessionPrompt-CK5SGNRO.js → SaveSessionPrompt-Z2K225VN.js} +1 -1
- package/dist/SingleShotApp-M7R5PW4X.js +2 -0
- package/dist/{SummaryBox-ABB7ST26.js → SummaryBox-4T545XRB.js} +1 -1
- package/dist/TestMdRunView-JXRXMACE.js +2 -0
- package/dist/{WhoamiView-OF354UGC.js → WhoamiView-GCVD35EX.js} +1 -1
- package/dist/{bind-BWILBZGR.js → bind-JLMT57Q3.js} +2 -2
- package/dist/{bridge-LNDJS3HH.js → bridge-PDJEOSAJ.js} +1 -1
- package/dist/{changelog-BWCEZQ23.js → changelog-D65HWZDM.js} +1 -1
- package/dist/{chunk-AXABTFCD.js → chunk-24OFJ7SE.js} +1 -1
- package/dist/{chunk-UZSG54OY.js → chunk-24VYAMMK.js} +1 -1
- package/dist/{chunk-6LRKYF67.js → chunk-262ES67I.js} +2 -2
- package/dist/{chunk-64QURIT6.js → chunk-2BWRAY3Y.js} +1 -1
- package/dist/{chunk-2K4XOHVK.js → chunk-2WO7G2HO.js} +1 -1
- package/dist/{chunk-BYUARJE7.js → chunk-32GP7KTM.js} +1 -1
- package/dist/{chunk-IRRGSC7B.js → chunk-3Z3UIW5H.js} +1 -1
- package/dist/{chunk-QNNBNIR7.js → chunk-4A6BLXQN.js} +2 -2
- package/dist/{chunk-ACEODVSC.js → chunk-4R2HOA7J.js} +1 -1
- package/dist/{chunk-XUJ5EPVW.js → chunk-4SXD6XWV.js} +1 -1
- package/dist/{chunk-ADOXYGZE.js → chunk-5JJ245FW.js} +1 -1
- package/dist/{chunk-OB6CKLEL.js → chunk-6CZIEK6B.js} +1 -1
- package/dist/{chunk-POI6DCP6.js → chunk-6NIV7AVZ.js} +1 -1
- package/dist/chunk-6SGPN76K.js +2 -0
- package/dist/{chunk-I2JUBAPU.js → chunk-6XHAXAL2.js} +1 -1
- package/dist/{chunk-DNOBOZPO.js → chunk-AKHUNBQS.js} +1 -1
- package/dist/{chunk-IOTJZTHX.js → chunk-BLSZ4H5W.js} +12 -12
- package/dist/{chunk-5KSB5MOF.js → chunk-BV5QKFMJ.js} +1 -1
- package/dist/{chunk-4MUHS3UL.js → chunk-C42WWO7Y.js} +1 -1
- package/dist/chunk-D7L6UW5Z.js +7 -0
- package/dist/{chunk-MVF4KRHA.js → chunk-EOLQUB4Q.js} +1 -1
- package/dist/{chunk-PYB2EXRE.js → chunk-EWTX7HSU.js} +2 -2
- package/dist/chunk-GLS46X7N.js +5 -0
- package/dist/{chunk-YI4XULHR.js → chunk-HA5GE57Z.js} +15 -15
- package/dist/{chunk-YMSN25DX.js → chunk-HWA7WD44.js} +1 -1
- package/dist/{chunk-3HEPW6SN.js → chunk-JF7Q2I45.js} +1 -1
- package/dist/{chunk-QZI43UNV.js → chunk-JTEY32TL.js} +1 -1
- package/dist/{chunk-HNE4TDOZ.js → chunk-JU5KRCKD.js} +4 -4
- package/dist/{chunk-ANIVHX3P.js → chunk-JV356AYH.js} +1 -1
- package/dist/{chunk-MK2G7VIF.js → chunk-KI2DVQSA.js} +1 -1
- package/dist/{chunk-DXK55KGR.js → chunk-KNCHEM6A.js} +1 -1
- package/dist/{chunk-CT2I5KUM.js → chunk-KYHXDJN4.js} +1 -1
- package/dist/{chunk-652FEDL4.js → chunk-L26LU6TU.js} +2 -2
- package/dist/{chunk-3WJJ43MT.js → chunk-LABIRPOT.js} +1 -1
- package/dist/{chunk-IXVR66NS.js → chunk-LEQ2B3PR.js} +1 -1
- package/dist/{chunk-WE57PD6K.js → chunk-LLS47HUA.js} +1 -1
- package/dist/{chunk-OLXOZJ7X.js → chunk-LURGFJEE.js} +1 -1
- package/dist/{chunk-5CTMOJG4.js → chunk-MSPZOEFB.js} +1 -1
- package/dist/{chunk-PICCLJSO.js → chunk-MY32TBBR.js} +1 -1
- package/dist/{chunk-STH6I3UB.js → chunk-N6DO2LBH.js} +1 -1
- package/dist/{chunk-O66EU5UV.js → chunk-OFEOWKM3.js} +1 -1
- package/dist/{chunk-BOO7YXAV.js → chunk-P4HW2NTZ.js} +1 -1
- package/dist/{chunk-CY5NDMO7.js → chunk-RIMJDJWY.js} +1 -1
- package/dist/{chunk-ZQP3MCZW.js → chunk-RV2NXHIC.js} +1 -1
- package/dist/{chunk-WT3SMSY5.js → chunk-S2C62SDY.js} +1 -1
- package/dist/{chunk-FV4LLU3T.js → chunk-UZJ7MRBV.js} +1 -1
- package/dist/{chunk-W36P7S5W.js → chunk-VBCE4U4B.js} +1 -1
- package/dist/{chunk-CLTANA4L.js → chunk-WJGBXJT4.js} +2 -2
- package/dist/{chunk-BNN6ZDJW.js → chunk-WWH7CW5R.js} +1 -1
- package/dist/{chunk-WFEGGQJ4.js → chunk-XQL53VB7.js} +1 -1
- package/dist/{config-OJF53CHL.js → config-6PAZZ7CR.js} +1 -1
- package/dist/{credentials-NLJHSVBY.js → credentials-BJCIWQWA.js} +1 -1
- package/dist/{evidence-UPOFW3XC.js → evidence-7VE5EGEF.js} +1 -1
- package/dist/{evolve-cmd-MVALOB3G.js → evolve-cmd-RUGUWKAG.js} +1 -1
- package/dist/{extract-bind-SSTKQGTV.js → extract-bind-YS7C4KZ3.js} +2 -2
- package/dist/{extract-cmd-GO4UV7ER.js → extract-cmd-Z4PMDIMZ.js} +1 -1
- package/dist/{generate-headless-2HYMSVN5.js → generate-headless-IWY32HC4.js} +2 -2
- package/dist/index.js +12 -12
- package/dist/{interactive-bind-Q5TQFQ6N.js → interactive-bind-ZIIJDRBU.js} +2 -2
- package/dist/{list-commands-6WDXAECV.js → list-commands-SSXJQGE7.js} +1 -1
- package/dist/login-flow-HRS6YACY.js +2 -0
- package/dist/{persist-recorded-session-KHIMN4A3.js → persist-recorded-session-3AOYZJT2.js} +1 -1
- package/dist/{pipeline-2HRAWT5U.js → pipeline-IZSODNCC.js} +1 -1
- package/dist/{reconcile-cmd-DH4VV6PG.js → reconcile-cmd-6HVZJFG3.js} +1 -1
- package/dist/{recording-banner-SADVYNEP.js → recording-banner-KKEUWS3N.js} +1 -1
- package/dist/{require-project-folder-LP7V26IU.js → require-project-folder-NPTKR2AW.js} +1 -1
- package/dist/{run-RT2VMPTQ.js → run-2A7M7EJK.js} +1 -1
- package/dist/{run-XAZMT7WO.js → run-6AFY35QW.js} +1 -1
- package/dist/{run-test-md-ATB2HZRG.js → run-test-md-QNC6KDMN.js} +2 -2
- package/dist/{skill-installer-DE2LSSKU.js → skill-installer-ULFNSE6X.js} +1 -1
- package/dist/{spawner-GOTVIFR5.js → spawner-DWONVIPI.js} +1 -1
- package/dist/tcg-generate-IHHPRVNG.js +2 -0
- package/dist/{testmd-actions-RYQHBX4K.js → testmd-actions-S3ZNOZEK.js} +1 -1
- package/dist/token-refresh-CFVOA62N.js +2 -0
- package/dist/{validate-basic-6BQ2L7TT.js → validate-basic-4OLDKIA2.js} +1 -1
- package/dist/{version-check-YW3FUWDH.js → version-check-UL4S6R4N.js} +1 -1
- package/dist/{walk-session-O4TMVORI.js → walk-session-N3BP57HK.js} +1 -1
- package/package.json +15 -7
- package/bin/kane-cli.js +0 -2
- package/dist/SingleShotApp-AJBIWW74.js +0 -2
- package/dist/TestMdRunView-5PMLLLFT.js +0 -2
- package/dist/chunk-E3BO7OVR.js +0 -7
- package/dist/chunk-HJGUEZLW.js +0 -2
- package/dist/chunk-IJPFAWBH.js +0 -5
- package/dist/login-flow-XQMJFC4H.js +0 -2
- package/dist/tcg-generate-7PUXJ5R4.js +0 -2
- package/dist/token-refresh-F5KRV7ER.js +0 -2
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
2
|
function l(r){let{isAgent:c,log:m}=r,a=r.stdout??process.stderr,s=r.stdin??process.stdin,p=t=>{c&&process.stdout.write(JSON.stringify(t)+`
|
|
3
|
-
`)};return{async runSteps(t){let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{TestMdRunView:i}=await import("./TestMdRunView-
|
|
3
|
+
`)};return{async runSteps(t){let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{TestMdRunView:i}=await import("./TestMdRunView-JXRXMACE.js"),{ScrollbackProvider:n}=await import("./scrollback-JLPJR25X.js"),{waitUntilExit:d}=o(e.createElement(n,null,e.createElement(i,t)),{stdout:a,stdin:s,exitOnCtrlC:!1});await d()},async runUpload(t,e){let{renderUploadProgress:o}=await import("./CliUploadProgress-ULRSPKY3.js");return await o(t,e)},async onSummary(t){try{let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{AutoExitSummaryBox:i}=await import("./SummaryBox-4T545XRB.js"),{waitUntilExit:n}=o(e.createElement(i,{data:t}),{stdout:a,stdin:s});await n()}catch(e){m("warn","TEST_MD_SUMMARY_RENDER_FAILED","Summary box render failed",{error:String(e)})}},async onLinks(t){try{let{default:e}=await import("./react-QWOAB3TB.js"),{render:o}=await import("./build-JIKYOZUH.js"),{LinksBox:i}=await import("./LinksBox-ZS25VTBY.js"),{waitUntilExit:n}=o(e.createElement(i,t),{stdout:a,stdin:s});await n()}catch(e){m("warn","TEST_MD_LINKS_RENDER_FAILED","LinksBox render failed",{error:String(e)})}},onLockState(t){p({type:"test_md_lock_state",...t})},onRetryAttempt(t){p({type:"test_md_retry_attempt",...t})},onAgentEvent(t){p(t)}}}export{l as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as n}from"./chunk-RZ4F3BHX.js";import{a as c}from"./chunk-
|
|
2
|
+
import{a as n}from"./chunk-RZ4F3BHX.js";import{a as c}from"./chunk-AKHUNBQS.js";import{v as s,w as a}from"./chunk-6SGPN76K.js";import{createHash as h,randomBytes as g}from"crypto";var l=class{authBaseUrl;consentUrl;constructor(t="prod"){let e=c(t);this.authBaseUrl=e.authBaseUrl,this.consentUrl=e.consentUrl}static generatePkce(){let t=g(96).toString("base64url").slice(0,128),e=h("sha256").update(t).digest("base64url");return[t,e]}buildAuthorizationUrl(t,e,r,o){let i=new URLSearchParams({response_type:"code",client_id:t,redirect_uri:o,scope:a,code_challenge:e,code_challenge_method:"S256",state:r});return`${this.consentUrl}/oauth2?${i.toString()}`}async registerClient(t){let e=await n(`${this.authBaseUrl}/oauth2/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_name:s,redirect_uris:[t],grant_types:["authorization_code"],response_types:["code"],client_type:"public",application_type:"native"})});if(!e.ok)throw new Error(`DCR failed: ${e.status} ${await e.text()}`);return e.json()}async exchangeCode(t,e,r,o){let i=await n(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"authorization_code",code:t,redirect_uri:o,client_id:e,code_verifier:r})});if(!i.ok)throw new Error(`Token exchange failed: ${i.status}`);return i.json()}async refreshToken(t,e){let r=await n(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:t,client_id:e})});if(!r.ok)throw new Error(`Token refresh failed: ${r.status}`);return r.json()}async revokeToken(t,e,r="access_token"){await n(`${this.authBaseUrl}/oauth2/revoke`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t,token_type_hint:r,client_id:e})})}async validateToken(t){let e=new AbortController,r=setTimeout(()=>e.abort(),1e4);try{let o=await n(`${this.authBaseUrl}/api/user`,{headers:{Authorization:`Bearer ${t}`,Accept:"application/json","Content-Type":"application/json"},signal:e.signal});return clearTimeout(r),o.ok}catch{return clearTimeout(r),!1}}};export{l as a};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as b}from"./chunk-VBCE4U4B.js";import{a as O}from"./chunk-AKHUNBQS.js";import{e as w,j as N}from"./chunk-6SGPN76K.js";import{spawn as U,execSync as B}from"child_process";import{appendFileSync as L,existsSync as E,mkdirSync as K}from"fs";import{homedir as D}from"os";import{join as G,resolve as t,dirname as C}from"path";import{fileURLToPath as W}from"url";import{createInterface as V}from"readline";async function*T(e){let n=V({input:e,crlfDelay:1/0});for await(let l of n){let r=l.trim();if(r)try{let a=JSON.parse(r);a&&typeof a.type=="string"&&(yield a)}catch{}}}function M(e){return e==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function h(e){return e?{set:{},unset:["V16_AGENT_SKIP_CP_FINAL"]}:{set:{V16_AGENT_SKIP_CP_FINAL:"true"},unset:[]}}function I(e){return e==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var o=C(W(import.meta.url));function j(){for(let e of["python3","python"])try{return B(`${e} --version`,{stdio:"ignore"}),e}catch{}return null}function $(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",l={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},r=`${process.platform}-${process.arch}`,a=l[r];if(a)for(let s of a){let m=[t(o,"..","node_modules",s,"bin",n),t(o,"..","..","node_modules",s,"bin",n),t(o,"..","..","..","node_modules",s,"bin",n),t(o,"..","..","..","..","node_modules",s,"bin",n)];for(let u of m)if(E(u))return{cmd:u,args:[]}}let f=[t(o,"bin",n),t(o,"..","bin",n),t(o,"..","..","..","..","v16-runner","dist",n),t(o,"..","..","..","v16-runner","dist",n),t(o,"..","..","v16-runner","dist",n),t(process.cwd(),"v16-runner","dist",n),t(process.cwd(),"..","v16-runner","dist",n)];for(let s of f)if(E(s))return{cmd:s,args:[]};let v=[t(o,"..","..","v16-runner"),t(o,"..","..","..","..","v16-runner"),t(o,"..","..","..","v16-runner"),t(process.cwd(),"v16-runner"),t(process.cwd(),"..","v16-runner")];for(let s of v)if(E(t(s,"main.py"))){for(let u of[t(s,".venv","bin","python"),t(s,"..",".venv","bin","python"),t(s,"..","browser-agent",".venv","bin","python")])if(E(u))return{cmd:u,args:["main.py"],cwd:s};let m=j();if(m)return{cmd:m,args:["main.py"],cwd:s}}return null}function ie(e,n){let l=$();if(!l)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");process.env.KANE_SPAWN_DEBUG&&process.stderr.write(`[spawn-debug] ${JSON.stringify(l)}
|
|
3
|
+
`);let r={...process.env};n?.environment&&(r.TESTMUAI_ENV=n.environment),r.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(r.PYTHONIOENCODING="utf-8");let a=O(n?.environment);r.V16_SERVER_API_HOST=a.v16ServerHost,r.ATMS_URL=a.tmsBaseUrl.replace(/\/api\/?$/,""),e.username&&e.access_key&&(r.LT_USERNAME=e.username,r.LT_ACCESS_KEY=e.access_key),e.session_id&&(r.TESTMUAI_SESSION_ID=e.session_id);let f=M(n?.mode??"testing");Object.assign(r,f.set);for(let i of f.unset)delete r[i];let v=new b().load(),s=I(n?.assertionMode??(v.assertion_mode==="visual"?"visual":"dom"));Object.assign(r,s.set);for(let i of s.unset)delete r[i];let m=n?.finalValidation??v.final_validation,u=h(m);Object.assign(r,u.set);for(let i of u.unset)delete r[i];let g=process.env.KANE_AP_MODE,S=g?{v1:"v1",v2:"v2"}[g]:void 0;S!==void 0&&e.ap_mode===void 0&&(e.ap_mode=S),e.telemetry_proxy_url===void 0&&process.env.KANE_TELEMETRY!=="0"&&(e.telemetry_proxy_url=N),e.media_upload===void 0&&e.org_id&&e.username&&e.access_key&&(e.media_upload={url:a.shareApiBaseUrl.replace(/\/$/,"")+"/mfs/v1.0/media/upload",artefacts_host:a.mediaArtefactsHost,org_id:e.org_id,media_dir:w});let d=U(l.cmd,l.args,{stdio:["pipe","pipe","pipe"],env:r,cwd:l.cwd});d.stdin.on("error",()=>{}),d.stdin.write(JSON.stringify(e)+`
|
|
4
|
+
`);let p=e.session_id?G(D(),".testmuai","kaneai","sessions",e.session_id,"runner-stderr.log"):null;if(p)try{K(C(p),{recursive:!0}),L(p,`--- runner spawn ${new Date().toISOString()} run_index=${e.run_index} ---
|
|
5
|
+
`)}catch{}let R=1e5,_="";d.stderr.on("data",i=>{if(_+=i.toString(),_.length>R&&(_=_.slice(-R)),p)try{L(p,i)}catch{}}),d.on("error",i=>{n?.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:i.message})});let A=null,y=null,k=new Promise(i=>{d.on("close",(c,x)=>{A=c,y=x?String(x):null,n?.log?.("info","RUNNER_EXIT","Runner exited",{code:c,signal:y??"none"}),i({code:c,signal:y})})}),P=T(d.stdout);return{child:d,events:P,sendUserResponse(i){let c=JSON.stringify({type:"user_response",answer:i});try{d.stdin.write(c+`
|
|
6
|
+
`)}catch{}},sendCancel(i){let c=JSON.stringify({type:"cancel",reason:i});try{d.stdin.write(c+`
|
|
7
|
+
`)}catch{}},cancel(){d.kill("SIGTERM")},get stderr(){return _},get exitCode(){return A},get exitSignal(){return y},exited:k}}export{$ as a,ie as b};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as t}from"./chunk-
|
|
2
|
+
import{a as t}from"./chunk-C42WWO7Y.js";async function l(e){let o=e.credentials.expires_at,i=e.thresholdSeconds??300;if(o-Date.now()/1e3>=i)return null;let r=e.creds.loadClient(e.profile,e.env);if(!r)return null;let n=await new t(e.env).refreshToken(e.credentials.refresh_token,r.client_id),s=Math.floor(Date.now()/1e3)+n.expires_in;return e.creds.saveCredentials(e.profile,e.env,{access_token:n.access_token,refresh_token:n.refresh_token,expires_at:s,scope:n.scope}),{accessToken:n.access_token,refreshToken:n.refresh_token,expiresAt:s,scope:n.scope}}export{l as a};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{c as H,d as z}from"./chunk-2YQ6TW77.js";import{b as p,c as E,d as j,e as y,f as M,g as C,i as A,l as D,m as F,p as T,r as $,s as O}from"./chunk-RKWJG3WW.js";import{a as B}from"./chunk-
|
|
2
|
+
import{c as H,d as z}from"./chunk-2YQ6TW77.js";import{b as p,c as E,d as j,e as y,f as M,g as C,i as A,l as D,m as F,p as T,r as $,s as O}from"./chunk-RKWJG3WW.js";import{a as B}from"./chunk-VBCE4U4B.js";import{h as R,i as k}from"./chunk-M5JQXOCE.js";import{a as P}from"./chunk-6SGPN76K.js";import{e as q}from"./chunk-UR6MHSHU.js";import{existsSync as f,mkdirSync as V,readFileSync as Z,renameSync as N,writeFileSync as K}from"fs";import{join as Q}from"path";function fe(e){D(p(e));let t=p(e);if(!f(t))return;let n=Q(t,"meta.json"),r=y(e);if(f(n)&&!f(r))try{V(j(e),{recursive:!0}),N(n,r)}catch(o){process.stderr.write(`warn: meta.json migration failed: ${o.message}
|
|
3
3
|
`)}let i=C(e);if(f(i)){let o="python";try{let c=new B().load();c.code_export?.language&&(o=c.code_export.language)}catch{}let a=M(e,"playwright",o);if(!f(a))try{N(i,a)}catch(c){process.stderr.write(`warn: generated-code migration failed: ${c.message}
|
|
4
4
|
`)}}if(f(r))try{let o=JSON.parse(Z(r,"utf8"));"md5sum"in o&&(delete o.md5sum,K(r,JSON.stringify(o,null,2)+`
|
|
5
5
|
`,"utf8"))}catch(o){process.stderr.write(`warn: meta.json md5sum strip failed: ${o.message}
|
|
6
|
-
`)}}async function ye(e){if(!e.isInteractive)return{recovered:!1};if(W(e.creds))return{recovered:!1};let{SingleShotApp:t}=await import("./SingleShotApp-
|
|
6
|
+
`)}}async function ye(e){if(!e.isInteractive)return{recovered:!1};if(W(e.creds))return{recovered:!1};let{SingleShotApp:t}=await import("./SingleShotApp-M7R5PW4X.js"),{ScrollbackProvider:n}=await import("./scrollback-JLPJR25X.js"),{render:r}=await import("./build-JIKYOZUH.js"),i=await import("./react-QWOAB3TB.js"),o={current:null},a={current:!1},{waitUntilExit:c,unmount:l}=r(i.default.createElement(n,null,i.default.createElement(t,{resultRef:o,mode:"login",loginCompleteRef:a})),{exitOnCtrlC:!1});k(()=>l()),await c();try{process.stdin.setRawMode?.(!1)}catch{}return process.stdout.write("\x1B[?25h"),a.current?{recovered:!0}:(R(0,"Startup gate cancelled"),{recovered:!1})}function W(e){let t=e.getActiveProfile(),n=e.getDefaultEnv();if(!t||!!!(e.loadBasicAuth(t,n)||e.loadCredentials(t,n)))return!1;let i=e.loadProfileConfig(t,n)??{};return!!i.project_id&&!!i.folder_id}var J=q(H(),1);import{existsSync as v,readFileSync as U,readdirSync as X,statSync as Y}from"fs";import{dirname as ee,isAbsolute as te,join as g,relative as x,resolve as re,sep as h}from"path";import{createHash as ne}from"crypto";var S="testmd-bundle.json",d=class extends Error{constructor(t){super(t),this.name="BundleUsageError"}},_=e=>e.split(h).join("/");function I(e){if(!v(e))return[];let t=[];for(let n of X(e).sort()){let r=g(e,n);Y(r).isDirectory()?t.push(...I(r)):t.push(r)}return t}function se(e){let t=e.map(r=>ee(r).split(h)),n=t[0];for(let r of t.slice(1)){let i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;n=n.slice(0,i)}return n.join(h)||h}function ie(e){for(let t of e){let n=F(t,U(t,"utf8"));for(let r of n.steps)if(r.body.kind==="import_ref"&&te(r.body.path))throw new d(`bundle sync: absolute @import is not portable after unzip: ${t} step ${r.index} (@import ${r.body.path})`)}}function G(e){let t=re(e),n=T(t);if(!n?.commit_id||!n?.test_id)throw new d(`bundle sync: ${t} is not authored \u2014 run \`kane-cli testmd run\` first (output-<stem>/.internal/meta.json needs commit_id + test_id)`);let r;try{r=O(t)}catch(s){throw s instanceof $?new d(`bundle sync: ${s.message}`):s}let i=[t];for(let s of r.steps)for(let u of s.trace.slice(1))i.includes(u.file)||i.push(u.file);ie(i);let o=[];for(let s of r.unitFiles){if(s.file===t)continue;let u=p(s.file);o.includes(u)||o.push(u)}let a=[...i],c=s=>{v(s)&&a.push(s)};c(E(t)),a.push(y(t)),c(g(p(t),".internal","execution.json")),a.push(...I(A(t)));for(let s of o)c(g(s,"Result.md")),a.push(...I(g(s,".internal","steps")));let l=se(a);if(v(g(l,S)))throw new d(`bundle sync: a real file named ${S} exists at the zip root (${l}) \u2014 it would collide with the generated manifest`);let b=a.map(s=>{let u=U(s);return{abs:s,rel:_(x(l,s)),sha256:ne("sha256").update(u).digest("hex"),bytes:u.length}}).sort((s,u)=>s.rel<u.rel?-1:1),m=_(x(l,t)),L={schema_version:2,entry:m,commit_id:n.commit_id,test_id:n.test_id,testcase_id:n.testcase_id??null,project_id:n.project_id??null,folder_id:n.folder_id??null,org_id:n.org_id??null,created_at:new Date().toISOString(),producer:{name:"kane-cli",version:P},files:b.map(s=>({path:s.rel,sha256:s.sha256,bytes:s.bytes})),units:r.unitFiles.filter(s=>s.file!==t).map(s=>({path:_(x(l,s.file)),kind:s.kind}))};return{zipRoot:l,entry:m,files:b,manifest:L}}var w=e=>e instanceof Error?e.message:String(e);function oe(e){return new Promise((t,n)=>{let r=(0,J.default)("zip",{zlib:{level:6}}),i=[];r.on("data",o=>i.push(o)),r.on("error",n),r.on("end",()=>t(Buffer.concat(i))),r.append(JSON.stringify(e.manifest,null,2)+`
|
|
7
7
|
`,{name:S});for(let o of e.files)r.file(o.abs,{name:o.rel});r.finalize()})}async function ae(e){let{plan:t,controller:n,testId:r,sessionId:i,commitId:o}=e,a;try{a=await oe(t)}catch(l){return{ok:!1,stage:"zip",error:w(l)}}let c;try{let l={key:"testmd",content_type:"application/zip",filename:`${o}-testmd.zip`},m=(await n.getPresignedUrls(r,i,[l])).urls?.testmd?.upload_url;if(!m)return{ok:!1,stage:"presign",error:"presign response missing testmd upload_url"};c=m}catch(l){return{ok:!1,stage:"presign",error:w(l)}}try{await z(c,a,"application/zip")}catch(l){return{ok:!1,stage:"upload",error:w(l)}}return{ok:!0,bytes:a.length}}async function Ee(e){let t;try{t=G(e.sourcePath)}catch(n){return n instanceof d?{ok:!1,stage:"collect",error:n.message}:{ok:!1,stage:"collect",error:w(n)}}return ae({...e,plan:t})}function je(e){return e.shouldUploadPipeline&&e.uploadSucceeded&&!!e.metaCommitId&&!!e.metaTestId}export{fe as a,ye as b,Ee as c,je as d};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as M,b as B,c as oe,d as P}from"./chunk-2YQ6TW77.js";import{a as F}from"./chunk-WAOCHXJ5.js";import{b as z}from"./chunk-CJJXT5DO.js";import{a as U}from"./chunk-2WVKOZ6W.js";import{a as j}from"./chunk-NLCCBXXV.js";import{a as k}from"./chunk-RZ4F3BHX.js";import{e as se}from"./chunk-UR6MHSHU.js";import{readFileSync as te,existsSync as C,readdirSync as ye,mkdirSync as D,writeFileSync as x}from"fs";import{readFile as ne,unlink as Re}from"fs/promises";import{join as E}from"path";import{randomUUID as A}from"crypto";var re="/home/kaneai/Downloads";function N(t){return`${re}/${t}`}function $(t){return"FILE__"+t.replace(/[^A-Za-z0-9]/g,"_")}function S(t){let e=t?.media;return!e||!e.name||!e.media_url?null:{media_id:e.media_id??"",name:e.name,media_url:e.media_url,type:e.type??"doc"}}function K(t){return t?t.includes(`
|
|
3
|
+
`)?t.split(`
|
|
4
|
+
`).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function L(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(n,i)=>{let s=e[i];return s?s.value:n}).replace(/\$\{(.+?)\}/g,(n,i)=>{let s=e[i];return s?s.value:n})}var ae={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD"},G={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},le=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function X(t,e){if(t==="analyze"){let i=e?.action_params?.analyzer_type??"";return G[i]}let n=ae[t];return n||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),n??t.toUpperCase()}function Y(t,e){if(!t||!e)return"";try{let n=new Date(t);return isNaN(n.getTime())?"":new Date(n.getTime()+e).toISOString()}catch{return""}}function W(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function ce(t){let e=t.output_variable??"";if(!e)return"[]";let i={...W(t)};return delete i.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||A().replace(/-/g,"").slice(0,8),value:i,variable_description:"API Response"}])}function ue(t,e,n){let i=t.action_params??{},s=le.has(e)?"Vision Agent":"Operation Agent",a={operation_type:e};if(e==="OPEN"&&(a.url=i.url??""),e==="SET_VARIABLE"&&(a.variable_name=t.output_variable??i.key??"",a.variable_value=t.output_value??""),e==="UPLOAD_FILE"){let f=S(i);f&&(a.value=N(f.name))}let o={},l={},r=t.action_instruction??"",c=i.text??"",u=i.url??"",p=[["intent",r],["value",c],["url",u]];for(let[f,h]of Object.entries(n)){let b=String(h);if(f.startsWith("secrets."))for(let[I,v]of p)v.includes(b)&&(l[I]=f);for(let[I,v]of p)v.includes(b)&&!(I in o)&&(o[I]=v)}let _=t.action_type,d={operation:t.action_instruction??"",agent:s,operation_dict:a,reasoning:_==="analyze"?i.query??"":t.intent??t.action_instruction??"",variable:o,secrets:l,params:{}};_==="analyze"&&typeof i.code=="string"&&i.code&&(d.code=i.code),_==="analyze"&&typeof i.code_js=="string"&&i.code_js&&(d.code_js=i.code_js),_==="analyze"&&typeof i.condition_expression=="string"&&i.condition_expression&&(d.condition_expression=i.condition_expression),i.uses_websocket===!0&&(d.uses_websocket=!0),i.uses_sse===!0&&(d.uses_sse=!0),_==="analyze"&&i.analyzer_type==="textual_visual"&&(typeof i.wrapped_js=="string"&&(d.wrapped_js=i.wrapped_js),Array.isArray(i.locators)&&(d.locators=i.locators),typeof i.operator=="string"&&(d.operator=i.operator),Array.isArray(i.transforms)&&(d.transforms=i.transforms),typeof i.query=="string"&&(d.query=i.query),typeof i.expected_value=="string"&&(d.expected_value=i.expected_value),typeof i.needs_unit_conversion=="boolean"&&(d.needs_unit_conversion=i.needs_unit_conversion),typeof i.condition=="string"&&(d.condition=i.condition));let m={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[_];return m&&i[m]!==void 0&&(d[m]=i[m]),_==="set_clipboard"&&typeof i.html=="string"&&i.html&&(d.html=i.html),d}function de(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let n=e.sub_results??[];return n.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?n.some(s=>s.passed===!0):n.every(s=>s.passed===!0)}function H(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function _e(t){let e=t.assertion_tree??{},n=e.sub_results??[],i=H(n);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:n,sub_checks:i,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function pe(t){let n=(t.action_params??{}).assertion_tree??{},i=n.sub_results??[],s=H(i);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:i,sub_checks:s,composite_operator:n.composite_operator??"and",verification:"",claim:n.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function ge(t,e,n,i){let s=t.visual_data;if(!s||s.x==null||s.y==null)return null;let a=e?`${e}/test_screenshots`:"";return{x:s.x,y:s.y,confidence:0,bbox:s.bbox??null,bbox_source:s.bbox?"accessibility_tree":"fallback",viewport_width:s.viewport_width??1280,viewport_height:s.viewport_height??800,scale_factor:null,raw_image_url:a?`${a}/untagged_screenshot/${n}.${i?.get(n)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function V(t,e={},n="",i){let s=t.action_type,a=X(s,t),o=t.action_params??{},l=t.coordinates??null,r=t.selectors??null,c=!!(r&&r.length>0),u=t.timestamp??"",p=t.duration_ms??0,_=t.variables_used??{},d=t.action_id??A(),g=A(),m=Y(u,p),f="",h="";if(s==="navigate")h=o.url??"",f=h;else if(s==="type"||s==="fill")f=o.text??"";else if(s==="press_key")f=o.key??"";else if(s==="wait")f=String(o.ms??o.timeout_ms??"");else if(s==="evaluate_js")f=o.script??"";else if(s==="upload_files"){let y=S(o);y&&(f=N(y.name))}else s==="analyze"&&a==="SET_VARIABLE"&&(f=t.output_value??"");let b="";s==="go_back"?b="back":s==="go_forward"&&(b="forward");let I=L(f,e),v=L(h,e),O=L(t.action_instruction??"",e),R=ue(t,a,_);return{operation_id:d,instruction_id:g,instruction:O,intent:O,operation_start:u,operation_end:m,status:t.status??"",command:a,name:"",target:"",value:I,message:"",operation_dict:"",frame:t.frame_info?JSON.stringify(t.frame_info):"",error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(R),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:n?`${n}/test_screenshots/untagged_screenshot/${d}.${i?.get(d)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:v,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:a==="ASSERTION"?de(o):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(o.tab_index??""),tab_identifier:String(o.tab_identifier??""),scroll_value:o.amount??1,scroll_direction:o.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:s==="evaluate_js"?o.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:!1,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:l!==null&&!c,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:c?null:l?.x??null,y_coord:c?null:l?.y??null,target_x_coord:o.target_x??null,target_y_coord:o.target_y??null,source_description:o.source_description??null,target_description:o.target_description??null,use_coordinates:l!==null&&!c,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:c?r.map(y=>({type:y.isXPath?"xpath":"css",...y})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:a==="ASSERTION"?_e(o):o.expression_tree??{},assertion_tree:o.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:a==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:o.source_coordinates?{x:o.source_coordinates[0],y:o.source_coordinates[1]}:{},end_coordinates:o.target_coordinates?{x:o.target_coordinates[0],y:o.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:s==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:s==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:ge(t,n,d,i),reasoning:s==="analyze"?o.query??"":t.intent??t.action_instruction??""}}function q(t,e,n={}){let i=t.action_type,s=X(i,t),a=t.timestamp??"",o=t.duration_ms??0,l=Y(a,o),r=s==="ASSERTION"||s==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:r?"non_driver_action":"driver_action",module_id:"",instruction:L(t.action_instruction??"",n),command:s,error:null,parent_instruction_id:"",classification_layer_resp:s==="ASSERTION"?pe(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:a,end_timestamp:l,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?t.action_params?.script??"":"",user_variables:i==="api"?ce(t):"[]",api_data:i==="api"?{request:t.action_params?.api_data?.request??{},response:W(t)}:{},params_used:!1,hard_assertion:s==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function fe(t,e=[]){let n=t.action_params??{},i=n.branches??[],s=n.winning_index??-1,a=n.sub_results??[],o={};for(let r of a){let c=r.sub_results;if(c)for(let u of c){let p=u.store_key;p&&(o[p]=u)}}let l=i.map((r,c)=>{let u=c===s,p=(r.sub_checks??[]).map(_=>{let d=o[_.store_key];return{description:_.description,store_key:_.store_key,expected_value:_.expected_value,stored_value:d?.extracted_value??_.stored_value,operator:_.operator??d?.operator??"equals",transforms:_.transforms??d?.transforms??[]}});if(p.length===0&&r.condition&&a.length>0){let d=a.find(g=>g.branch_index===c)?.sub_results??[];d.length>0&&(p=d.map(g=>({description:g.description??r.condition,store_key:g.store_key??"",expected_value:g.expected??"true",stored_value:g.extracted_value??void 0,operator:g.operator??"equals",transforms:g.transforms??[]})))}return{branch_index:c,condition:r.condition??null,branch_type:r.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:r.custom_event??null,children:u?e:[],sub_checks:r.condition?p:[],composite_operator:r.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${A().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:s,branches:l,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function J(t,e,n){for(let i of t)i.content_type==="instruction"&&"generative_id"in i&&(i.generative_id=e,i.generative_objective=n)}function w(t,e={},n="",i,s){let a=[],o=0;for(;o<t.length;){let l=t[o],r=l.action_type;if(!s?.keepFailedActions&&l.status==="error"&&r!=="assert"&&r!=="if_else"&&r!=="child_agent_start"&&r!=="child_agent_end"&&!(l.until_condition&&!l.error)){o+=1;continue}if(r==="analyze"&&!G[l.action_params?.analyzer_type??""]){o+=1;continue}if(r==="child_agent_start"){let c=l.action_params?.child_id??"",u=l.action_params?.objective??"",p=[];o+=1;let _=1,d="error",g;for(;o<t.length&&_>0;){let R=t[o],y=R.action_type;if(y==="child_agent_start")_+=1;else if(y==="child_agent_end"&&(_-=1,_===0)){d=R.status??"success",g=R,o+=1;break}_>0&&p.push(R),o+=1}let m=w(p,e,n,i);J(m,c,u);let f=g?.action_params?.result_code??null,h=g?.action_params?.reason_code??null,b=g?.action_params?.error_message??null,I=g?.action_params?.summary??null,v=g?.action_params?.one_liner??null,O=d==="error";a.push({content_type:"generative_block",instruction_id:`generative_block_${c}`,generative_id:c,objective:u,status:d,children:m,error_message:O?b??null:null,error_code:O?h??null:null,result_code:f??null,bifurcation_context:[],approach_reason:K(I),one_liner:v??null});continue}else if(r==="child_agent_end"){o+=1;continue}else if(r==="if_else"){o+=1;let c=[];for(;o<t.length&&t[o].action_type==="child_agent_start";){let u=t[o],p=u.action_params?.child_id??"",_=u.action_params?.objective??"",d=[];o+=1;let g=1,m="error";for(;o<t.length&&g>0;){let h=t[o];if(h.action_type==="child_agent_start")g+=1;else if(h.action_type==="child_agent_end"&&(g-=1,g===0)){m=h.status??"success",o+=1;break}g>0&&d.push(h),o+=1}let f=w(d,e,n,i);c.push(...f)}a.push(fe(l,c));continue}else if(r==="query_tool"){o+=1;continue}else if(l.until_condition){let c=V(l,e,n,i),u=q(l,c,e),p=typeof l.until_condition_met=="boolean"?l.until_condition_met:l.status==="success";a.push({content_type:"until_block",instruction_id:`until_${A().slice(0,8)}`,condition:l.until_condition,max_retries:l.until_max_retries??10,settle_ms:l.until_settle_ms??500,current_count:0,condition_met:p,children:[u],generative_id:"",generative_objective:"",variables_used:{},status:l.status??"success"})}else{let c=V(l,e,n,i),u=q(l,c,e);a.push(u)}o+=1}return a}function T(t,e={},n="",i,s){let a=[];for(let o of t){let l=w(o.records,e,n,i,s);if(l.length===0)continue;let r=A().replace(/-/g,"");J(l,r,o.objective);let c=l.some(d=>"status"in d&&typeof d.status=="string"?d.status==="error"||d.status==="failed":!1),u=o.resultCode?parseInt(o.resultCode,10):null,p=u!==null&&!isNaN(u)&&u>=200,_=c||p?"error":"success";a.push({content_type:"generative_block",instruction_id:`generative_block_${r}`,generative_id:r,objective:o.objective,status:_,children:l,error_message:_==="error"?o.errorMessage??null:null,error_code:_==="error"?o.reasonCode??null:null,result_code:o.resultCode??null,bifurcation_context:[],approach_reason:K(o.summary),one_liner:o.oneLiner??null})}return{instructions:a}}var Z=se(oe(),1);import{createWriteStream as me}from"fs";import{readFile as he}from"fs/promises";import{join as Ee,basename as be}from"path";import{tmpdir as Ie}from"os";var ve=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function Q(t){let e=Ee(Ie(),`${be(t)}_artifacts.zip`);return new Promise((n,i)=>{let s=me(e),a=(0,Z.default)("zip",{zlib:{level:6}});s.on("close",()=>n(e)),a.on("error",i),a.pipe(s),a.glob("**/*",{cwd:t,ignore:ve}),a.finalize()})}async function ee(t){return he(t)}async function Pe(t,e){return ne(z(t,e))}function Ae(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var ie=class{config;controller;testId;constructor(e){this.config=e,this.controller=new F(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,n,i,s){this.config.log?.(e,n,i,s)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let n=this.config.evidence,i=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let l=this.collectNdjsonPerRun(),r=l.reduce((m,f)=>m+f.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:r,run_groups:l.length});let c=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(c)});let{instructions:u}=l.length>0?T(l,c,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),_=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(_.length/1024).toFixed(1)});let d=E(this.config.sessionDir,"execution.json");x(d,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:d});let g=n?.packTestDir??this.config.evidenceRead?.packTestDir;if(g){let m=E(g,"auteur");D(m,{recursive:!0}),x(E(m,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(m,"execution.json")})}if(e("convert","done"),n)i=_;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let m=null,f;try{m=await Q(this.config.sessionDir),f=await ee(m),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(f.length/1024/1024).toFixed(1),path:m}),e("zip","done",`${(f.length/1024/1024).toFixed(1)}MB`)}finally{m&&await Re(m).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(f.length/1024/1024).toFixed(1),blob_size_kb:+(_.length/1024).toFixed(1)}),await Promise.all([P(h.urls.artifacts.upload_url,f,"application/zip"),P(h.urls.blob.upload_url,_,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let l=this.collectNdjsonPerRun(),r=this.config.variables??{},{instructions:c}=l.length>0?T(l,r,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},u=this.buildExecutionEnvelope(c),p=E(this.config.sessionDir,"execution.json");x(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let _=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(_){let d=E(_,"auteur");D(d,{recursive:!0});let g=this.readAuthoredExecution();x(E(d,"execution.json"),g??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(d,"execution.json"),source:g?"authored":"run_envelope"})}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(l){let r=l instanceof Error?l.message:String(l);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:r}),e("atomic_replace","failed",r),l}}else e("atomic_replace","skipped");let s,a;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let l=await this.config.onCommitLock();if(l.ok)s=l.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:s??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:l.reason,message:l.message}),e("commit_lock","failed",`${l.reason??"unknown"}: ${l.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${l.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let l=new U(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),r=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(s=(await l.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:r})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:s??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(s)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(s&&this.config.shareApiBaseUrl)try{a=await this.generateShareLink(s),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:a})}catch(l){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(l)})}if(n&&i){let l=null;e("zip","running");try{await n.sealFn({testcaseId:s,shareId:a}),l=n.sealedPackPath?await ne(n.sealedPackPath):await Pe(n.executionId,n.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:n.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(l.length/1024/1024).toFixed(1)})}catch(r){let c=r instanceof Error?r.message:String(r);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:n.executionId,error:c})}if(l){e("zip","done",`${(l.length/1024/1024).toFixed(1)}MB`),e("presign","running");let r=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Ae(n.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:r.urls.artifacts?.blob_url,blob_url:r.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(l.length/1024/1024).toFixed(1),blob_size_kb:+(i.length/1024).toFixed(1)}),await Promise.all([P(r.urls.artifacts.upload_url,l,"application/zip"),P(r.urls.blob.upload_url,i,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let r=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(i.length/1024).toFixed(1)}),await P(r.urls.blob.upload_url,i,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let o;if(this.config.codeExport?.enabled&&s){let l=!1;try{await this.triggerCodeExport(s),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),l=!0}catch(r){let c=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:c}),e("code_export","failed",`trigger failed: ${c}`)}if(l){e("code_export","running","Waiting for code generation\u2026");try{o=await this.pollAndDownloadCode(s,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:o}),e("code_export","done",o)}catch(r){let c=r instanceof Error?r.message:String(r);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:c}),e("code_export","failed",c)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:s,shareId:a,codeExportDir:o}}catch(n){return{success:!1,testId:this.testId,error:n instanceof Error?n.message:String(n)}}}async runCodeExport(e,n){let i=n??this.config.onProgress,s=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),s=!0}catch(a){let o=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:o}),i("code_export","failed",`trigger failed: ${o}`)}if(s){i("code_export","running","Waiting for code generation\u2026");try{let a=await this.pollAndDownloadCode(e,i);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:a}),i("code_export","done",a),a}catch(a){let o=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:o}),i("code_export","failed",o);return}}}collectNdjsonPerRun(){let e=[],n=this.config.runObjectives??[],i=this.config.runMetadata??[],s=this.config.evidence??this.config.evidenceRead;for(let a=0;a<this.config.runDirs.length;a++){let o=this.config.runDirs[a],l=n[a]||this.config.firstObjective,r=i[a],c=s?this.readNdjsonFromFile(E(s.packTestDir,"logs",`${s.runIndices?.[a]??a}-actions.ndjson`)):this.readNdjsonFromDir(o);c.length>0&&e.push({objective:l,records:c,resultCode:r?.resultCode,reasonCode:r?.reasonCode,errorMessage:r?.errorMessage,summary:r?.summary,oneLiner:r?.oneLiner})}if(e.length===0){let a=E(this.config.sessionDir,"runs");if(C(a))try{let l=ye(a,{withFileTypes:!0}).filter(r=>r.isDirectory()).map(r=>r.name).sort();for(let r of l){let c=E(a,r),u=this.readNdjsonFromDir(c);u.length>0&&e.push({objective:this.config.firstObjective,records:u})}}catch{}}return e}readNdjsonFromDir(e){let n=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let i of n)if(C(i))return this.readNdjsonFromFile(i);return[]}readNdjsonFromFile(e){let n=[];if(!C(e))return n;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let i=te(e,"utf-8");for(let s of i.split(`
|
|
5
|
+
`)){let a=s.trim();if(a)try{n.push(JSON.parse(a))}catch{}}return n}async generateShareLink(e){let n=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:n,testcase_id:e});let i={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},s=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:s,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let a=s?await this.config.authResolver.fetch(n,i):await k(n,{...i,headers:{...i.headers,Authorization:this.buildAuthHeader()}});if(!a.ok)throw new Error(`Share link API failed: ${a.status} ${await a.text()}`);let o=await a.json();if(!o.shareId)throw new Error("Share link API returned no shareId");return o.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:n,body:i}=M({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:n});let s={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)},a=this.config.authResolver?await this.config.authResolver.fetch(n,s):await k(n,{...s,headers:{...s.headers,Authorization:this.buildAuthHeader()}});if(!a.ok)throw new Error(`Code export failed: ${a.status} ${await a.text()}`)}async pollAndDownloadCode(e,n){let i=B({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),s=this.config.exitTimeoutMs??3e5,a=5e3,o=Date.now()+s;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:i,timeout_ms:s});let l=(r,c)=>this.config.authResolver?this.config.authResolver.fetch(r,c):k(r,{...c,headers:{...c?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<o;){let r=await l(i,{method:"GET",headers:{Accept:"application/json"}});if(!r.ok){let d=await r.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:r.status,body:d.slice(0,200)}),new Error(`code export poll skipped: HTTP ${r.status}`)}let u=(await r.json()).data?.find(d=>d.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),n("code_export","running","Waiting for code generation\u2026"),await this.sleep(a);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),n("code_export","running","Generating code\u2026"),await this.sleep(a);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let _=this.config.codeExportDir??E(this.config.sessionDir,"code-export");D(_,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:_}),n("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let d of u.url){let g=E(_,d.file_name),m=await k(d.file_url);if(!m.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:d.file_name,status:m.status});continue}let f=await m.text();x(g,f,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:d.file_name,size_bytes:f.length})}return _}throw new Error("Code export timed out")}sleep(e){return new Promise(n=>setTimeout(n,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:j(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let n=te(e,"utf8");return JSON.parse(n),n}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let n=this.config.runStatuses.every(r=>r==="passed")?"success":"error",i=this.config.variableIds??{},s=[];if(this.config.variables)for(let[r,c]of Object.entries(this.config.variables)){if(c.secret)continue;let u=r.startsWith("global.")?r.slice(7):r;s.push({id:i[u]??0,name:u,value:c.value,session_value:c.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let a=[],o=[],l=new Set;for(let r of this.collectNdjsonPerRun())for(let c of r.records)if(c.output_variable&&c.output_value!=null&&a.push({name:c.output_variable,value:String(c.output_value),value_type:"test_level",variable_description:"ANALYZE result"}),c.action_type==="upload_files"){let u=S(c.action_params);if(u){let p=u.media_id||u.media_url;if(!l.has(p)){l.add(p),o.push({media_url:u.media_url,media_id:u.media_id,name:u.name,type:u.type});let _=N(u.name);a.push({name:$(u.name),value:_,value_type:"string",variable_description:`variable for ${_}`})}}}return{test_id:this.testId,version:"v4",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:n,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:o,test_params:[],test_level_variables:JSON.stringify(a),test_global_variables:s,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{Pe as a,Ae as b,ie as c};
|