@testmuai/kane-cli 0.2.10 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ChromeProfilePicker-U2SEKNEQ.js +2 -0
- package/dist/CliFeedbackPrompt-EADRWA76.js +2 -0
- package/dist/CliUploadProgress-DV34KLES.js +2 -0
- package/dist/ConfigView-32U22T7S.js +2 -0
- package/dist/FolderPicker-C4ANRIT7.js +2 -0
- package/dist/HelpView-PUE5XHCB.js +2 -0
- package/dist/InfoBox-QNOWEKMD.js +2 -0
- package/dist/{LinksBox-FR4WLNX4.js → LinksBox-UCNEPFJD.js} +1 -1
- package/dist/ProfilesView-P6JL2BTH.js +2 -0
- package/dist/ProjectPicker-XEZIFGJ6.js +2 -0
- package/dist/SaveSessionPrompt-DIZX3M6X.js +2 -0
- package/dist/SingleShotApp-RLZN2PVQ.js +2 -0
- package/dist/SummaryBox-72NGQYS7.js +2 -0
- package/dist/TestMdRunView-DD6YI7CY.js +2 -0
- package/dist/{WhoamiView-AP6NXPTL.js → WhoamiView-LSMM65UI.js} +1 -1
- package/dist/{changelog-DFV22SXX.js → changelog-P7XOVZ6M.js} +1 -1
- package/dist/chunk-3MSXQU2C.js +2 -0
- package/dist/chunk-445V6RTR.js +2 -0
- package/dist/chunk-4SNZTVJB.js +2 -0
- package/dist/chunk-5KH7U63E.js +6 -0
- package/dist/chunk-66CVM7JL.js +53 -0
- package/dist/chunk-75SVKFKD.js +2 -0
- package/dist/chunk-7VX5H5MK.js +5 -0
- package/dist/{chunk-43D3E7EA.js → chunk-BAKBO5YA.js} +1 -1
- package/dist/chunk-BSQVYLV7.js +2 -0
- package/dist/chunk-C5UNZ6ZY.js +2 -0
- package/dist/{chunk-FK2AWXZN.js → chunk-CFFWCE27.js} +1 -1
- package/dist/chunk-FFO5XXKV.js +4 -0
- package/dist/chunk-FJ6L63SP.js +8 -0
- package/dist/chunk-G7I7EAV6.js +2 -0
- package/dist/chunk-G7VF5SDK.js +10 -0
- package/dist/chunk-GTFULP6B.js +13 -0
- package/dist/chunk-I4AD2L5R.js +2 -0
- package/dist/chunk-JPKW7SRP.js +2 -0
- package/dist/chunk-JYQO6G7F.js +2 -0
- package/dist/{chunk-SOUKF5VL.js → chunk-L2HVRWIT.js} +8 -8
- package/dist/chunk-MBQIYYLD.js +2 -0
- package/dist/chunk-MDBXYXSC.js +2 -0
- package/dist/chunk-MH26PIS4.js +2 -0
- package/dist/chunk-MNAVXLW4.js +20 -0
- package/dist/{chunk-UNQM5247.js → chunk-NLYBR5FP.js} +1 -1
- package/dist/chunk-OMYNAZW4.js +2 -0
- package/dist/{chunk-5WXHT4JD.js → chunk-OU2XDMNW.js} +1 -1
- package/dist/chunk-PINXGH2T.js +3 -0
- package/dist/chunk-Q6INY5JA.js +2 -0
- package/dist/chunk-QV2VR72Q.js +5 -0
- package/dist/chunk-S3DAAAE5.js +2 -0
- package/dist/chunk-SLA75N5B.js +2 -0
- package/dist/chunk-VE3SUJMA.js +2 -0
- package/dist/chunk-XJ7OYQ7M.js +2 -0
- package/dist/chunk-XW32PCGX.js +5 -0
- package/dist/chunk-Y5RLPELZ.js +103 -0
- package/dist/chunk-YCCUBQY4.js +2 -0
- package/dist/chunk-YUUZDFT7.js +2 -0
- package/dist/chunk-YV5KDJLP.js +2 -0
- package/dist/effective-decisions-DRM3JSR4.js +2 -0
- package/dist/index.js +38 -58
- package/dist/{logging-WJPMWUL5.js → logging-NPMKABVV.js} +1 -1
- package/dist/login-flow-QCYF5347.js +2 -0
- package/dist/name-validator-5YGJXLZ7.js +2 -0
- package/dist/persist-recorded-session-53YCJK7U.js +5 -0
- package/dist/pipeline-BVH3R7YP.js +2 -0
- package/dist/profile-sync-DTTRRIVP.js +2 -0
- package/dist/recording-banner-ABFX6FI4.js +3 -0
- package/dist/replay-policy-6USQBT3E.js +2 -0
- package/dist/run-test-md-C63UB65T.js +54 -0
- package/dist/testmd-actions-GPYFEL7F.js +20 -0
- package/dist/{tms-client-VH42IFUF.js → tms-client-CTH4NVFM.js} +1 -1
- package/dist/validate-basic-TW5CQAL3.js +2 -0
- package/dist/{version-check-AGBPWJQA.js → version-check-6XDFGFCG.js} +1 -1
- package/package.json +5 -5
- package/dist/ChromeProfilePicker-VPCR7EPX.js +0 -2
- package/dist/CliFeedbackPrompt-CKWGADHU.js +0 -2
- package/dist/CliUploadProgress-ZVRZFMGT.js +0 -2
- package/dist/ConfigView-XCWDFTNS.js +0 -2
- package/dist/FolderPicker-DN4OV6BI.js +0 -2
- package/dist/HelpView-DOYUDPWZ.js +0 -2
- package/dist/LoginWizard-NJ22OXIH.js +0 -2
- package/dist/ProfilesView-ENBYW7PJ.js +0 -2
- package/dist/ProjectPicker-43LFS6S6.js +0 -2
- package/dist/chunk-5PATFYIN.js +0 -2
- package/dist/chunk-6REBTGNQ.js +0 -106
- package/dist/chunk-75XK2HKS.js +0 -2
- package/dist/chunk-7E2QYCMX.js +0 -2
- package/dist/chunk-7H6IY5KC.js +0 -2
- package/dist/chunk-FBK6UISI.js +0 -2
- package/dist/chunk-HFQ7T5KT.js +0 -2
- package/dist/chunk-KJAVR2NX.js +0 -2
- package/dist/chunk-OILYCYAD.js +0 -2
- package/dist/chunk-PXIG2FKV.js +0 -2
- package/dist/chunk-YSOCZU7T.js +0 -2
- package/dist/chunk-YTG6V347.js +0 -2
- package/dist/login-flow-5WUX5JKU.js +0 -2
- package/dist/pipeline-ZSNZGJIH.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b}from"./chunk-
|
|
2
|
+
import{a,b}from"./chunk-OU2XDMNW.js";import"./chunk-JYQO6G7F.js";import"./chunk-UR6MHSHU.js";export{a as RemoteLogger,b as createRemoteLogger};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as m}from"./chunk-GTFULP6B.js";import{a as c,c as u}from"./chunk-FFO5XXKV.js";import{b as n,f as p}from"./chunk-SLA75N5B.js";import{a as i}from"./chunk-FJ6L63SP.js";import"./chunk-JYQO6G7F.js";import"./chunk-UR6MHSHU.js";function P(t,s={}){t.flushRecorder();let o=t.recorder?.lastWrittenPath??null;if(!o)return null;let a=t.getFlows(),g=a.map((e,r)=>({index:r+1,heading:`Step ${r+1}`,headingLine:0,body:{kind:"objective",text:e.objective}})),d=a.map((e,r)=>({rootStepIndex:r+1,status:e.status==="passed"?"passed":e.status==="failed"?"failed":"skipped",duration_s:e.duration,reason:e.reason})),l=d.some(e=>e.status==="failed")?"failed":"passed";try{c({sourcePath:o,title:t.sessionName??"Session",rootSteps:g,outcomes:d,overallStatus:l,startedISO:t.startedAt,durationS:d.reduce((e,r)=>e+(r.duration_s??0),0),sessionId:t.sessionId})}catch(e){process.stderr.write(`[persist] Result.md write failed: ${e.message}
|
|
3
|
+
`)}try{m({sourcePath:o,commitId:t.sessionId,sessionName:t.sessionName??void 0,testId:t.testId??void 0,testcaseId:s.testcaseId,projectId:s.projectId,folderId:s.folderId,orgId:s.orgId??t.orgId??void 0})}catch(e){process.stderr.write(`[persist] meta.json write failed: ${e.message}
|
|
4
|
+
`)}if(s.codeExportDir)try{let r=new i().load().code_export?.language??"python";u(s.codeExportDir,p(o,"playwright",r))}catch(e){process.stderr.write(`[persist] code-export copy failed: ${e.message}
|
|
5
|
+
`)}return{recordedTestPath:o,outputDir:n(o)}}export{P as persistRecordedSession};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a}from"./chunk-L2HVRWIT.js";import"./chunk-MDBXYXSC.js";import"./chunk-L5Y2GUO6.js";import"./chunk-YUUZDFT7.js";import"./chunk-DXKKUGFG.js";import"./chunk-UR6MHSHU.js";export{a as UploadPipeline};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as n}from"./chunk-3MSXQU2C.js";import"./chunk-UR6MHSHU.js";function p(t){let s=t.sessionName!==null,e={type:"recording_state",enabled:!0,session_id:t.sessionId,persist:s};return t.sessionName&&(e.session_name=t.sessionName),t.testPath&&(e.test_path=t.testPath),t.outputPath&&(e.output_path=t.outputPath),e}async function g(t){if(t.isAgent){process.stdout.write(JSON.stringify(p(t))+`
|
|
3
|
+
`);return}let s=(await import("./react-QWOAB3TB.js")).default,{render:e,useApp:a}=await import("./build-JIKYOZUH.js"),{useEffect:o}=s,{InfoBox:r}=await import("./InfoBox-QNOWEKMD.js"),u=t.sessionName?[{label:"session",value:t.sessionName},{label:"test",value:n(t.testPath??"")},{label:"output",value:n(t.outputPath??"")}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];function l(){let{exit:i}=a();return o(()=>{let c=setTimeout(()=>i(),50);return()=>clearTimeout(c)},[i]),s.createElement(r,{title:"Recording",titleColor:"#ff9500",rows:u})}await e(s.createElement(l),{stdout:process.stderr}).waitUntilExit()}export{p as buildRecordingStateEvent,g as printRecordingBanner};
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as ce,b as zt}from"./chunk-C5UNZ6ZY.js";import{a as Ht}from"./chunk-5KH7U63E.js";import{a as Ge}from"./chunk-GTFULP6B.js";import{A as Mt,B as Bt,C as qt,a as pt,b as ft,f as bt,g as Me,h as $e,i as yt,j as St,k as vt,l as Re,m as kt,n as It,o as Ct,p as _t,q as Et,r as At,s as Tt,t as He,u as jt,v as Ke,w as Dt,x as Lt,y as Ut,z as Nt}from"./chunk-MNAVXLW4.js";import{b as Ne}from"./chunk-7VX5H5MK.js";import{d as Ye,e as $t,f as Vt}from"./chunk-YV5KDJLP.js";import{a as Rt}from"./chunk-L2HVRWIT.js";import"./chunk-MDBXYXSC.js";import{c as wt}from"./chunk-S3DAAAE5.js";import{a as Ve,b as qe,c as ze}from"./chunk-FFO5XXKV.js";import{a as ye,b as xt,c as Pt,e as Ot,f as Be,i as Ft}from"./chunk-SLA75N5B.js";import{b as ut}from"./chunk-66CVM7JL.js";import{a as gt,c as Ue,d as Z,e as W}from"./chunk-G7VF5SDK.js";import{a as mt}from"./chunk-FJ6L63SP.js";import"./chunk-VE3SUJMA.js";import{a as dt}from"./chunk-QV2VR72Q.js";import{a as Q}from"./chunk-NLYBR5FP.js";import"./chunk-PWGEMRBD.js";import{a as ht}from"./chunk-L5Y2GUO6.js";import"./chunk-E47GFYXA.js";import{c as Le,h as re}from"./chunk-JYQO6G7F.js";import"./chunk-YUUZDFT7.js";import"./chunk-DXKKUGFG.js";import"./chunk-UR6MHSHU.js";import{resolve as Ur,join as ke,basename as Nr}from"path";import{existsSync as Xe,readFileSync as Mr}from"fs";import{readFileSync as Er,existsSync as Ar}from"fs";import{basename as Kt,dirname as xr,isAbsolute as Pr,resolve as Gt}from"path";var Yt=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"],ne=class extends Error{constructor(t){super(t),this.name="TestMdResolveError"}};function Zt(e){let t=Gt(e),r=Wt(t),i=Or(r.global),o=[];return Jt(r,[],o,[],t),o.forEach((n,R)=>n.flatIndex=R+1),{rootPath:t,rootTitle:r.title,rootGlobal:r.global,rootSteps:r.steps,chrome:i,steps:o}}function Wt(e){if(!Ar(e))throw new ne(`@import path not found: ${e}`);let t=Er(e,"utf8");return jt(e,t)}function Jt(e,t,r,i,o){if(t.includes(e.path)){let n=[...t,e.path].map(R=>Kt(R)).join(" \u2192 ");throw new ne(`cyclic reference: ${n}`)}t.push(e.path);let p=i.length===0;for(let n of e.steps){let R=n.body.kind!=="objective";if(n.optional&&R&&!p)throw new ne(`intermediate-ref 'optional' is not supported in v1: ${e.path}:${n.headingLine}`);let l={file:e.path,stepIndex:n.index,heading:n.heading,optional:n.optional??!1};if(n.body.kind==="objective"){let O=Fr(e.global,n.config);r.push({flatIndex:0,objective:n.body.text,sourceFile:e.path,trace:[...i,l],config:O,parsedConfig:n.config,optional:n.optional??!1});continue}let y=xr(e.path),v=Pr(n.body.path)?n.body.path:Gt(y,n.body.path);if(Kt(v).endsWith("_test.md"))throw new ne(`cannot @import a test file: only helpers may be imported (got ${v})`);let k=Wt(v);Jt(k,t,r,[...i,l],o)}t.pop()}function Or(e){let t={};for(let r of Yt)e[r]!==void 0&&(t[r]=e[r]);return t}function Fr(e,t){let r={};for(let[i,o]of Object.entries(e))Yt.includes(i)||(r[i]=o);return{...r,...t??{}}}import{existsSync as Ze}from"fs";import{join as Se,basename as Qt}from"path";function Xt(e,t){if(!t||!Ze(t))return e.steps.map(()=>({kind:"author",reason:"no-result-md"}));let r=qe(t),i=[],o=new Set,p=new Map;function n(l){let y=He(l),v=Se(y,"Result.md");if(p.has(v))return p.get(v);let k=Ze(v)?qe(v):null;return p.set(v,k),k}function R(l){for(let y=1;y<l.trace.length;y++){let k=l.trace[y-1].file===e.rootPath?r:n(l.trace.slice(0,y));if(!k)return{kind:"author",reason:"no-result-md"};let O=l.trace[y-1].stepIndex,f=k.steps[O-1];if(!f)return{kind:"author",reason:"no-result-md"};if(f.kind!=="import")return{kind:"author",reason:"structure-mismatch"};let C=Qt(f.importPath),w=Qt(l.trace[y].file);if(C!==w)return{kind:"author",reason:"structure-mismatch"};if(f.status!=="passed")return{kind:"author",reason:"recorded-failed"}}return null}for(let l of e.steps){let y=l.trace[l.trace.length-1].file,v=l.trace[l.trace.length-1].stepIndex,k=o.has(y);for(let w=0;w<l.trace.length-1&&!k;w++)o.has(l.trace[w].file)&&(k=!0);if(k){i.push({kind:"author",reason:"downstream-of-divergence"});continue}let O=R(l);if(O){i.push(O);for(let w=0;w<l.trace.length;w++)o.add(l.trace[w].file);continue}let f=y===e.rootPath?r:n(l.trace),C=Tr(l,f,v);if(i.push(C),C.kind==="author"){o.add(y);for(let w=0;w<l.trace.length-1;w++)o.add(l.trace[w].file)}}return i}function Tr(e,t,r){if(!t)return{kind:"author",reason:"no-result-md"};let i=t.steps[r-1];if(!i)return{kind:"author",reason:"no-result-md"};if(i.kind!=="objective")return{kind:"author",reason:"structure-mismatch"};if(i.status!=="passed")return{kind:"author",reason:"recorded-failed"};let o=Tt(e);if(o!==i.md5)return{kind:"author",reason:"md5-mismatch"};let p=e.trace.length===1?Ft(e.trace[0].file,r,o.slice(0,8)):Se(He(e.trace),".internal","steps",`${r}-${o.slice(0,8)}`),n=Se(p,"flows","0","actions.ndjson");return Ze(n)?{kind:"replay",recordingDir:p}:{kind:"author",reason:"missing-recording"}}function er(e){return e.some(t=>t.kind==="author")}function we(e){for(let t=0;t<e.length;t++)if(e[t].kind==="author")return t;return e.length}function tr(e){return Se(e.recordingDir,"flows","0","actions.ndjson")}function rr(e,t){if(process.env.KANE_REPLAY_TRACE==="1")for(let r=0;r<e.steps.length;r++){let i=e.steps[r],o=t[r],p=" ".repeat(i.trace.length-1),n=`step ${i.flatIndex}`;o.kind==="replay"?process.stderr.write(`[replay-trace] ${p}${n}: REPLAY (would skip; v1 always authors)
|
|
3
|
+
`):process.stderr.write(`[replay-trace] ${p}${n}: AUTHOR (${o.reason})
|
|
4
|
+
`)}}function oe(e){process.env.KANE_REPLAY_TRACE==="1"&&process.stderr.write(e)}function nr(e,t){let r=e===0?"(none)":`0..${e-1}`,i=e>=t?"(none)":`${e}..${t-1}`;oe(`[replay-trace] phase: replay ${r}, author ${i}
|
|
5
|
+
`)}function or(e,t){oe(`[replay-trace] step ${e}: REPLAY ${t==="ok"?"OK":"FAILED"}
|
|
6
|
+
`)}function sr(e,t,r){oe(`[replay-trace] shrink ${e}/${t} \u2192 new boundary ${r}
|
|
7
|
+
`)}function ir(e,t){oe(`[replay-trace] complete-reauthor (${e} shrinks exhausted of ${t})
|
|
8
|
+
`)}function ar(){oe(`[replay-trace] force-author (--author) \u2014 walker bypassed
|
|
9
|
+
`)}function lr(e){oe(`[replay-trace] cancelled at step ${e}
|
|
10
|
+
`)}import{join as jr}from"path";function We(e){let t={objective:e.step.objective,model:"v16-alpha",width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,stream:!0,mode:"replay",replay:{recording_path:tr(e.decision),step_label:e.step.objective},screenshot_dir:jr(e.sessionDir,"runs",String(e.runIndex)),run_id:"run",test_id:"test"};return e.forceNavigateUrl&&(t.url=e.forceNavigateUrl),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.variables&&Object.keys(e.variables).length>0&&(t.variables=e.variables),e.sessionContext&&(t.session_context=e.sessionContext),t}async function cr(e){let t=we(e.decisions),r=0,i=!1;for(;;){let o=e.session.snapshot(),p=e.accumulator.snapshot(),n=await e.runReplayPhase(t);if(n.cancelled)return i=!0,lr(n.failedAt??0),{authorBoundary:t,cancelledInPhase:i,shrinkCount:r};if(n.failedAt===null)return{authorBoundary:t,cancelledInPhase:i,shrinkCount:r};let R=zt({failedAt:n.failedAt,shrinkCount:r,hasRetry:e.hasRetry,maxShrinks:e.maxShrinks});if(R.kind==="fail")return{authorBoundary:-1,cancelledInPhase:i,shrinkCount:r};if(e.acquireLockIfNeeded&&!await e.acquireLockIfNeeded())return{authorBoundary:-1,cancelledInPhase:i,shrinkCount:r};if(e.session.rollback(o),e.accumulator.rollback(p),R.kind==="complete-reauthor")return ir(r+1,e.maxShrinks),{authorBoundary:0,cancelledInPhase:i,shrinkCount:r};r++,sr(r,ce.maxShrinks,R.newAuthorBoundary),t=R.newAuthorBoundary}}var Dr=60*1e3,dr="lock-heartbeat",se=null;function Je(e){se===null&&(se=setInterval(async()=>{let t=await Dt({baseUrl:e.baseUrl,testId:e.testId,auth:e.auth});if(!t.ok){let r=t.expired?"session expired":t.message;process.stderr.write(`[lock] heartbeat failed: ${r}; continuing run
|
|
11
|
+
`)}},Dr),Z(dr,()=>{se!==null&&(clearInterval(se),se=null)}))}function Qe(){se!==null&&W(dr,"stopped")}var ve=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 i=t.trace[0].stepIndex,o=this.outcomes.find(l=>l.rootStepIndex===i),p=this.resolved.rootSteps.find(l=>l.index===i),n=p.body.kind!=="objective";return n&&(o.refKind="import",o.refLabel=p.body.path,o.inlinedCount=(o.inlinedCount??0)+1,o.duration_s=(o.duration_s??0)+r.duration_s),r.status==="passed"?(n?o.status!=="failed"&&(o.status="passed"):(o.status="passed",o.duration_s=r.duration_s),{continueOverall:!0}):t.optional?(o.softFailures=o.softFailures??[],o.softFailures.push({subStepIndex:t.trace[t.trace.length-1].stepIndex,reason:r.reason}),{continueOverall:!0}):(o.status="failed",o.duration_s=n?o.duration_s:r.duration_s,o.failedSubStepIndex=n?t.trace.slice(1).map(l=>l.stepIndex):void 0,o.reason=r.reason,this.skipRoot=i,p.optional??!1?(o.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(i=>i.status==="failed"&&!i.softFailed)?"failed":"passed",r=this.outcomes.reduce((i,o)=>i+(o.duration_s??0),0);return{overallStatus:t,outcomes:this.outcomes,totalDurationS:r}}};var Lr=()=>{};async function ur(e,t,r){let i=t.log??Lr,o=e.session.testId??null,p=null,n=null,R=null;if(!r.localMode&&t.performUpload)try{p=await t.performUpload(),p?.success&&(p.testId&&(o=p.testId),p.testcaseId&&e.session.setTestcaseId(p.testcaseId))}catch(l){i("error","FINALIZE_UPLOAD_ERROR","Upload pipeline threw",{error:String(l)})}if(t.renderFeedbackPrompt)try{n=await t.renderFeedbackPrompt(),n&&o&&t.submitFeedback&&t.submitFeedback(o,n).catch(l=>{i("error","FINALIZE_FEEDBACK_SUBMIT_ERROR","Feedback submit failed",{error:String(l)})})}catch(l){i("error","FINALIZE_FEEDBACK_RENDER_ERROR","Feedback prompt threw",{error:String(l)})}if(e.session.flushRecorder(),r.skipLocalWrites)i("info","FINALIZE_SKIP_LOCAL_WRITES","Skipping local writes (testmd flow handles via staging)");else if(r.sourcePath&&r.rootSteps&&r.outcomes){try{R=Ve({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){i("error","FINALIZE_RESULT_MD_ERROR","_Result.md write failed",{error:String(l)})}try{Ge({sourcePath:r.sourcePath,commitId:e.session.sessionId,testId:o??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??ye(r.sourcePath)})}catch(l){i("error","FINALIZE_META_WRITE_ERROR","meta.json write failed",{error:String(l)})}if(p?.codeExportDir)try{let l=e.tuiConfig.code_export?.language??"python";ze(p.codeExportDir,Be(r.sourcePath,"playwright",l))}catch(l){i("error","FINALIZE_CODE_COPY_ERROR","code-export copy failed",{error:String(l)})}}else if(e.session.recorder?.lastWrittenPath){let l=e.session.recorder.lastWrittenPath,y=e.session.getFlows(),v=y.map((f,C)=>({index:C+1,heading:`Step ${C+1}`,headingLine:0,body:{kind:"objective",text:f.objective}})),k=y.map((f,C)=>({rootStepIndex:C+1,status:f.status==="passed"?"passed":f.status==="failed"?"failed":"skipped",duration_s:f.duration,reason:f.reason})),O=k.some(f=>f.status==="failed")?"failed":"passed";try{R=Ve({sourcePath:l,title:e.session.sessionName??"Session",rootSteps:v,outcomes:k,overallStatus:O,startedISO:e.session.startedAt,durationS:k.reduce((f,C)=>f+(C.duration_s??0),0),sessionId:e.session.sessionId})}catch(f){i("error","FINALIZE_TUI_RESULT_MD_ERROR","TUI _Result.md write failed",{error:String(f)})}try{Ge({sourcePath:l,commitId:e.session.sessionId,testId:o??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})}catch(f){i("error","FINALIZE_TUI_META_WRITE_ERROR","TUI meta.json write failed",{error:String(f)})}if(p?.codeExportDir)try{let f=e.tuiConfig.code_export?.language??"python";ze(p.codeExportDir,Be(l,"playwright",f))}catch(f){i("error","FINALIZE_TUI_CODE_COPY_ERROR","TUI code-export copy failed",{error:String(f)})}e.session.recorder.lastCollisionSuffixed&&process.stderr.write(`Saved to ${l} (renamed: ${e.session.sessionName}_test.md already existed)
|
|
12
|
+
`)}try{t.runCleanup?.()}catch(l){i("error","FINALIZE_CLEANUP_ERROR","Cleanup hook threw",{error:String(l)})}try{await e.session.finish("complete")}catch(l){i("error","FINALIZE_SESSION_FINISH_ERROR","session.finish threw",{error:String(l)})}return{uploadResult:p,feedbackChoice:n,resultMdPath:R}}var Ie=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"];async function mo(e,t){let r=Ur(e);if(!Xe(r))return process.stderr.write(`error: file not found: ${r}
|
|
13
|
+
`),2;Ht(r);let i=!process.stdin.isTTY||!!t.agent,o=!1,p=i?s=>process.stdout.write(JSON.stringify(s)+`
|
|
14
|
+
`):s=>{},n;try{n=Zt(r)}catch(s){return process.stderr.write(`error: ${s.message}
|
|
15
|
+
`),2}if(n.steps.length===0)return process.stderr.write(`info: no steps in ${r}; nothing to run.
|
|
16
|
+
`),0;let R=$r(t),l=new dt,y=new mt,v=!!(t.username&&t.accessKey);await Vt({isInteractive:!!process.stdin.isTTY&&!t.agent&&!v,creds:l,config:y});let k=l.getActiveProfile()??"default",f=t.env??void 0??l.getDefaultEnv()??"prod",C=Q(f),w="v16-alpha",u;try{u=await $t({creds:l,env:f,usernameFlag:t.username,accessKeyFlag:t.accessKey,log:()=>{}})}catch(s){return s instanceof Ye&&s.code==="not_authenticated"?process.stderr.write(`error: Not authenticated. Choose one:
|
|
17
|
+
\u2022 Pass credentials inline: --username <user> --access-key <key>
|
|
18
|
+
\u2022 Run 'kane-cli login --oauth' (browser-based)
|
|
19
|
+
\u2022 Run 'kane-cli login --username <user> --access-key <key>'
|
|
20
|
+
`):s instanceof Ye&&s.code==="refresh_failed"?process.stderr.write(`error: Token refresh failed. Run 'kane-cli login' to re-authenticate.
|
|
21
|
+
`):process.stderr.write(`error: auth resolution failed: ${s.message}
|
|
22
|
+
`),2}let J=String(u.resolvedCreds?.org_id??"");if(!J)return process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),2;{let{readMetaIfExists:s,assertOrgMatchOrExit:c}=await import("./testmd-actions-GPYFEL7F.js"),d=c(s(r),J);if(d!==null)return d}let a=new ut,h=await qr(r,n,t,{resolvedAuth:u,tmsBaseUrl:C.tmsBaseUrl},a.sessionId);if(h.abort)return h.abort.exitCode;let F=h.lockAcquired,$=!1,q=!1,ue=!1;if(F&&p({type:"test_md_lock_state",phase:"acquired",scope:"preemptive"}),a.start({model:w,environment:f,profile:k}),a.setRecordingEnabled(!1),t.name){try{wt(t.name)}catch(s){return process.stderr.write(`error: ${s.message}
|
|
23
|
+
`),2}a.setSessionName(t.name)}let Ee={};for(let[s,c]of Object.entries(n.rootGlobal))Ie.includes(s)||(Ee[s]=c);for(let[s,c]of Object.entries(R))Ie.includes(s)||c!==void 0&&(Ee[s]=c);let B={...n.chrome};for(let s of Ie){let c=R[s];c!==void 0&&(B[s]=c)}let mr={...Ee,...B};a.setResolvedGlobal(mr);let K;try{K=await Bt({config:{chrome_profile_path:B.chrome_profile??null,window_size:{width:1920,height:1080}},startUrl:re,headless:B.headless??!1,wsEndpoint:B.ws_endpoint,cdpEndpoint:B.cdp_endpoint})}catch(s){return process.stderr.write(`error: Chrome launch failed: ${s.message}
|
|
24
|
+
`),await a.finish("complete"),2}let pe=K.instance;pe&&Z("chrome",()=>{try{pe.kill()}catch{}});let j=null,et=K.cdpEndpoint??B.cdp_endpoint;if(et&&!B.ws_endpoint&&!B.headless)try{j=bt({headless:B.headless??!1,cdpEndpoint:et,chromePid:pe?.process.pid}),j&&Z("marker-overlay",()=>j.kill())}catch(s){a.log("warn","OVERLAY_SPAWN_FAILED","Marker overlay spawn failed",{error:String(s)})}if(u.resolvedCreds?.org_id!==void 0&&a.setOrgId(String(u.resolvedCreds.org_id)),u.resolvedCreds)try{let{createRemoteLogger:s}=await import("./logging-NPMKABVV.js"),{getMachineId:c}=await import("./machine-id-DZN4MYOO.js"),d=s({sessionId:a.sessionId,identity:{org_id:String(u.resolvedCreds.org_id??""),user_id:String(u.resolvedCreds.user_id??""),machine_id:c(),email:u.resolvedCreds.email??null,email_domain:u.resolvedCreds.email_domain??"unknown",user_type:u.resolvedCreds.user_type??"unknown",env:f},getToken:async()=>u.token});a.setRemoteLogger(d),d.start(),Z("remote-logger",()=>d.shutdownSync()),gt(d)}catch(s){process.stderr.write(`warn: remote logger init failed: ${s.message}
|
|
25
|
+
`)}let X=_t({objective:"",globalDir:ke(Le,"variables"),localDir:ke(process.cwd(),".testmuai","variables"),file:t.variablesFile,inline:t.variables}),hr=n.rootGlobal.variables??{},L=Br(X.raw,hr);a.setAuteurVariables(L.auteur);let tt=Me(ke(Le,"global-memory.md"))??void 0,rt=Me(ke(process.cwd(),".testmuai","context.md"))??void 0,nt=l.getActiveProfile()??"default",ot=l.getDefaultEnv(),{rehydrateIfStale:gr}=await import("./profile-sync-DTTRRIVP.js");gr(l,y,nt,ot);let U=y.load(),N=U.project_id??null,fe=U.folder_id??null;if(!t.local&&!N&&u.basicAuth)try{let s=await qt({creds:l,config:y,profile:nt,env:ot,tmsCreds:u.basicAuth,log:(c,d,m,b)=>a.log(c,d,m,b)});N=s.projectId,fe=s.folderId,U=y.load(),process.stderr.write(`info: using project '${s.projectName}' / folder '${s.folderName}' (auto-configured)
|
|
26
|
+
`)}catch(s){process.stderr.write(`warn: could not auto-configure project/folder: ${s.message}
|
|
27
|
+
KaneAI upload will be skipped for this run.
|
|
28
|
+
`)}t.local?process.stderr.write(`info: --local \u2014 KaneAI upload skipped
|
|
29
|
+
`):u.basicAuth?N||process.stderr.write(`warn: KaneAI upload skipped \u2014 no project configured.
|
|
30
|
+
`):process.stderr.write(`warn: KaneAI upload skipped \u2014 TMS credentials could not be resolved.
|
|
31
|
+
Run 'kane-cli login' (OAuth) or 'kane-cli config set-username/set-access-key' (basic auth).
|
|
32
|
+
`);let ie=!t.local&&!!u.basicAuth&&N!=null;if(a.log("info","PIPELINE_GATE_STATE","Initial gate state (run-start)",{phase:"run-start",shouldUploadArtifacts:ie,lockHeld:F,isFirstRun:h.isFirstRun,hasBasic:h.hasBasic}),ie&&h.testId==null){let s=Q(f);try{let c=await Mt({tmsBaseUrl:s.tmsBaseUrl,auth:u.basicAuth,objective:n.steps[0].objective,url:"",projectId:N,folderId:fe??"",hasCustomProfile:!!B.chrome_profile,log:(d,m,b,g)=>a.log(d,m,b,g)});c&&a.setTestId(c)}catch(c){process.stderr.write(`warn: ATM test creation failed: ${c.message}
|
|
33
|
+
`)}}else h.testId&&a.setTestId(h.testId);let me={};if(u.basicAuth&&!t.local&&(L.secretEntries.length>0||L.nonSecretEntries.length>0))try{me=await Et({variables:L,auth:u.basicAuth,orgId:String(u.resolvedCreds?.org_id??""),env:f,localMode:!!t.local,log:(s,c,d,m)=>a.log(s,c,d,m)})}catch(s){process.stderr.write(`warn: variable/secret push failed: ${s.message}
|
|
34
|
+
`)}let Ae=new Map;for(let[s,c]of L.nonSecretEntries)Ae.set(s,c.value);let xe=new Map;for(let[s,c]of L.secretEntries)xe.set(s,c.value);async function Pe(s){if(!u.basicAuth||t.local)return;let c=[],d=[];for(let[b,g]of Object.entries(s))if(g.secret){if(xe.get(b)===g.value)continue;d.push([b,g])}else{if(Ae.get(b)===g.value)continue;c.push([b,g])}if(c.length===0&&d.length===0)return;let m=Q(f);if(c.length>0){let b=new It(m.tmsBaseUrl,u.basicAuth.username,u.basicAuth.access_key);for(let[g,_]of c)try{let I=await b.upsertVariable({name:g,value:_.value});me[g]=I.id,Ae.set(g,_.value),a.log("info","VAR_PUSH_STEP","Variable updated mid-run",{name:g})}catch(I){a.log("warn","VAR_PUSH_STEP_FAILED","Mid-run variable push failed",{name:g,error:String(I)})}}if(d.length>0){let b=new kt(m.secretsBaseUrl);for(let[g,_]of d)try{await b.pushSecret({secretKey:g,secretValue:_.value,username:u.basicAuth.username,accessKey:u.basicAuth.access_key,orgId:String(u.resolvedCreds?.org_id??"")}),xe.set(g,_.value),a.log("info","SECRET_PUSH_STEP","Secret updated mid-run",{name:g})}catch(I){a.log("warn","SECRET_PUSH_STEP_FAILED","Mid-run secret push failed",{name:g,error:String(I)})}}}let Oe=null,he=0;if(u.basicAuth&&!t.local)try{let c=await new ht(Q(f).controllerBaseUrl,{username:u.basicAuth.username,accessKey:u.basicAuth.access_key}).getScreenshotSas();a.setScreenshotSas(c),Oe=new vt(c,3,(d,m,b,g)=>a.log(d,m,b,g)),a.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched",{base_url:c.base_url,container:c.container,expiry:c.expiry})}catch(s){a.log("warn","SCREENSHOT_SAS_FAIL","Screenshot SAS token fetch failed",{error:s instanceof Error?s.message:String(s)})}let ae=Oe?(s,c,d)=>{if(!(F||h.isFirstRun))return;let m=he+c;St(a.sessionDir,m,s,Oe,(b,g,_,I)=>a.log(b,g,_,I),d)}:void 0,st=n.rootTitle??n.rootSteps[0]?.heading??Nr(r),br=Object.keys(L.raw).length>0?Re(L.raw,st).objective:st;a.setFirstRun(br,re);let Y=new ve(n),Fe=new Date().toISOString(),Rr=Date.now(),yr=typeof t.maxSteps=="string"&&t.maxSteps!==""?parseInt(t.maxSteps,10):void 0;function it(s,c){let d=n.steps[s],m=pr(d.config,R),b=de(X.raw,m.variables,d.objective);return At({objective:b.objective,url:s===0?re:void 0,model:w,chrome:K,auth:u,sessionId:a.sessionId,runIndex:c,windowSize:{width:1920,height:1080},maxSteps:m.max_steps??yr??30,headless:B.headless??!1,variables:Object.keys(b.variables).length>0?b.variables:void 0,globalContext:m.global_context??tt,localContext:m.local_context??rt,sessionContext:a.getContext()})}function at(s){let d=n.steps[s].trace[0].stepIndex,m=n.rootSteps.find(g=>g.index===d);n.steps.slice(0,s).some(g=>g.trace[0].stepIndex===d)||p({type:"test_md_step_start",step_index:d,heading:m.heading,ref:m.body.kind==="import_ref"?{kind:"import",label:m.body.path}:null})}function Te(s,c,d,m,b,g){let _=n.steps[s],I=_.trace[0].stepIndex,T=!n.steps.slice(s+1).some(S=>S.trace[0].stepIndex===I),E=d?.status==="passed"?"passed":"failed",P=d?.reason??b??void 0,H=d?.duration??g,{continueOverall:z}=Y.recordStep(_,{status:E,duration_s:H,reason:P}),V=pr(_.config,R),M=de(X.raw,V.variables,_.objective).objective;if(d){let S=pt(d,c,m);a.addRunResult(ft(d,M,c,S),d.total_runs)}else a.addRunResult({index:c,objective:M,status:E,summary:"",context:{memory:{},variables:{},pointer:""}},1);if(T||!z){let S=Y.snapshotOutcomes().find(A=>A.rootStepIndex===I);p({type:"test_md_step_end",step_index:I,status:S.status,duration_s:S.duration_s??0,ref_kind:S.refKind??null,inlined_count:S.inlinedCount??null,failed_sub_step_index:S.failedSubStepIndex??null})}return z}async function Sr(s){nr(s,n.steps.length);for(let c=0;c<s;c++){if(o)return{failedAt:c,cancelled:!0};let d=n.steps[c],m=h.decisions[c];if(m.kind!=="replay")return process.stderr.write(`error: runReplayPhase invoked on a non-replay decision at step ${c}
|
|
35
|
+
`),{failedAt:c,cancelled:!1};let b=a.nextRunIndex();he=b;let g=c===0?re:void 0,_={width:U.window_size.width,height:U.window_size.height},I=We({step:d,decision:m,chrome:K,auth:u,sessionId:a.sessionId,runIndex:b,sessionDir:a.sessionDir,windowSize:_,forceNavigateUrl:g,sessionContext:a.getContext()});await Pe(de(X.raw,d.config.variables,d.objective).variables),at(c);let T=Date.now(),E=null,P=null;try{let M=Ne(I,{environment:f});Z("runner",()=>{Ue()&&(o=!0);try{M.cancel()}catch{}}),j?.setRunActive(!0);try{for await(let S of M.events){if(i&&process.stdout.write(JSON.stringify(S)+`
|
|
36
|
+
`),S.type==="step_event"&&S.event==="reasoning"?j?.setStepText(S.detail):S.type==="step_end"&&(S.status==="passed"&&j?.setStepComplete(),ae&&ae(S.index,0,S.child_id)),S.type==="run_end"){E=S;break}if(S.type==="error"){P=S.message??"runner error";break}}try{M.cancel()}catch{}if(!E&&!P){let{code:S}=await M.exited;S!==0&&(P=`runner exited with code ${S}`)}}finally{j?.setRunActive(!1),W("runner","Replay step complete")}}catch(M){P=M.message}if(o)return{failedAt:c,cancelled:!0};let H=Math.round((Date.now()-T)/1e3),z=Te(c,b,E,null,P,H);a.recordStepRun({testmdStepIndex:n.steps[c].flatIndex,runIndex:b,totalRunDirs:1});let V=!!P||E?.status==="failed";if(or(c,V?"failed":"ok"),V||!z)return{failedAt:c,cancelled:!1}}return{failedAt:null,cancelled:!1}}let lt=async()=>{if(F)return!0;if(!h.testId||!h.fromCommitId||!u.basicAuth)return process.stderr.write(`error: cannot acquire lock \u2014 missing required state
|
|
37
|
+
`),!1;let s=a.sessionId,c=t.onLockConflict??n.rootGlobal.on_lock_conflict??"readonly",d=await fr({tmsBaseUrl:C.tmsBaseUrl,testId:h.testId,fromCommitId:h.fromCommitId,newCommitId:s,basicAuth:u.basicAuth,onLockConflict:c});return d==="ok"?(F=!0,h.newCommitId=s,a.log("info","MID_RUN_LOCK_ACQUIRED","Mid-run lock acquired",{test_id:h.testId}),i&&p({type:"test_md_lock_state",phase:"acquired",scope:"mid_run"}),Je({baseUrl:Ce(C.tmsBaseUrl),testId:h.testId,auth:_e(u.basicAuth)}),!0):(a.log("error","MID_RUN_LOCK_CONFLICT","Mid-run lock acquisition failed",{reason:d}),i&&p({type:"test_md_lock_state",phase:"conflict",scope:"mid_run",reason:d}),process.stderr.write(`error: mid-run lock acquisition failed (${d})
|
|
38
|
+
`),!1)};if(i){let{authorBoundary:s,cancelledInPhase:c,shrinkCount:d}=await cr({decisions:h.decisions,hasRetry:t.retry===!0||t.retryCount!==void 0,maxShrinks:t.retryCount!==void 0?parseInt(t.retryCount,10):ce.maxShrinks,runReplayPhase:Sr,session:a,accumulator:Y,acquireLockIfNeeded:lt});if(ue=d>0,d>0&&(a.log("info","RETRY_TRIGGERED","Retry loop triggered",{shrink_count:d,final_author_boundary:s}),p({type:"test_md_retry_attempt",shrink_count:d,final_author_boundary:s,complete_reauthor:s===0})),s===0&&d>0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback",{shrink_count:d}),!c&&s>=0)for(let m=s;m<n.steps.length;m++){let b=n.steps[m];if(!Y.shouldRunFlatStep(b))continue;at(m),$=!0;let g=a.nextRunIndex();he=g,await Pe(de(X.raw,b.config.variables,b.objective).variables);let _=it(m,g),I=Date.now(),T=null,E=null,P=null,H=!1,z=0;try{let S=Ne(_,{environment:f});Z("runner",()=>{Ue()&&(o=!0);try{S.cancel()}catch{}}),j?.setRunActive(!0);try{for await(let A of S.events){if(process.stdout.write(JSON.stringify(A)+`
|
|
39
|
+
`),A.type==="bifurcation"){let le=A.count??A.flows?.length??0;(A.is_single_flow??le<=1)||(P=A.flows??null,H=!0,z=0)}else if(A.type==="run_start"&&H)z++;else if(A.type==="step_event"&&A.event==="reasoning")j?.setStepText(A.detail);else if(A.type==="step_end"&&(A.status==="passed"&&j?.setStepComplete(),ae)){let le=H?Math.max(0,z-1):0;ae(A.index,le,A.child_id)}if(A.type==="run_end"){T=A;break}if(A.type==="error"){E=A.message??"runner error";break}}try{S.cancel()}catch{}}finally{j?.setRunActive(!1),W("runner","Step complete")}}catch(S){E=S.message}let V=Math.round((Date.now()-I)/1e3),M=Te(m,g,T,P,E,V);if(a.recordStepRun({testmdStepIndex:n.steps[m].flatIndex,runIndex:g,totalRunDirs:T?.total_runs??1}),!M||o)break}}else{let{default:s}=await import("./react-QWOAB3TB.js"),{render:c}=await import("./build-JIKYOZUH.js"),{TestMdRunView:d}=await import("./TestMdRunView-DD6YI7CY.js"),{effectiveDecisions:m}=await import("./effective-decisions-DRM3JSR4.js"),{decideRetry:b}=await import("./replay-policy-6USQBT3E.js"),g=t.retry===!0||t.retryCount!==void 0,_=t.retryCount!==void 0?parseInt(t.retryCount,10):ce.maxShrinks,I=t.author===!0;I&&(ar(),a.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed"));let T=I?0:we(h.decisions),E=0,P=null,H=h.decisions.filter(S=>S.kind==="replay").length,z=h.decisions.length-H,V=[];t.push&&V.push("--push"),g&&V.push("--retry"),t.retryCount!==void 0&&V.push(`--retry-count=${t.retryCount}`),I&&V.push("--author");let M={source:r,steps:{total:h.decisions.length,replay:H,author:z},model:w,viewport:{width:U.window_size.width,height:U.window_size.height},chrome:K.cdpEndpoint??K.wsEndpoint??"managed",session:a.sessionName??"ephemeral",variables:{count:Object.keys(L.raw).length,secrets:Object.values(L.raw).filter(S=>S.secret).length,names:Object.keys(L.raw)},flags:V,mode:R.mode??"testing"};for(;;){let S=a.snapshot(),A=Y.snapshot(),le=m(h.decisions,T,I);if(E>=1){let x=T===0?`\u21BB Complete re-author \u2014 retry budget exhausted (${E}/${_})`:`\u21BB Retry ${E}/${_} \u2014 replay 0..${T-1}, author ${T}..${h.decisions.length-1}
|
|
40
|
+
reason: replay miss at step ${(P??0)+1}`;process.stderr.write(x+`
|
|
41
|
+
`)}let kr=E>=1&&T>0&&P!==null?{startIdx:0,endIdx:P,count:P}:void 0;j?.setRunActive(!0);let ge=await Kr({decisions:le,resolved:n,session:a,accumulator:Y,tuiConfig:U,globalConfig:M,buildStepConfigAt:it,buildReplayConfig:x=>{let G=h.decisions[x];if(G.kind!=="replay")throw new Error("expected replay decision at index "+x);return We({step:n.steps[x],decision:G,chrome:K,auth:u,sessionId:a.sessionId,runIndex:a.nextRunIndex(),sessionDir:a.sessionDir,windowSize:{width:U.window_size.width,height:U.window_size.height},forceNavigateUrl:x===0?re:void 0,sessionContext:a.getContext()})},onAnyAuthorStep:()=>{$=!0},onCancel:()=>{q=!0},topBannerModel:w,topBannerAuth:`${l.getActiveProfile()??"no profile"}/${f}`,spawnOpts:{environment:f,mode:R.mode??"testing",log:(x,G,be,De)=>a.log(x,G,be,De)},priorAttemptRollup:kr,pushStepLevelDelta:(x,G)=>Pe(de(X.raw,x,G).variables),onSequencerStepEnd:(x,G,be,De)=>{let Ir=Math.round((Date.now()-De)/1e3),Cr=x.hadError?x.reason??"runner error":null,_r=Te(G,be,x.runEnd,x.bifurcationFlows??null,Cr,Ir);return a.recordStepRun({testmdStepIndex:n.steps[G].flatIndex,runIndex:be,totalRunDirs:x.runEnd?.total_runs??x.bifurcationFlows?.length??1}),_r},screenshotDispatcher:ae,onReasoning:x=>j?.setStepText(x),onStepComplete:()=>j?.setStepComplete(),onSpawnStart:x=>{he=x}});if(j?.setRunActive(!1),ge.cancelled){W("marker-overlay","user cancelled run"),W("chrome","user cancelled run");break}if(ge.failedAt===null)break;let je=b({failedAt:ge.failedAt,shrinkCount:E,hasRetry:g,maxShrinks:_});if(je.kind==="fail"||!F&&!await lt())break;a.rollback(S),Y.rollback(A),je.kind==="complete-reauthor"?T=0:T=je.newAuthorBoundary,E++,ue=!0,a.log("info","RETRY_TRIGGERED","Retry loop triggered (TTY)",{shrink_count:E,failed_at:P}),T===0&&a.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback (TTY)",{shrink_count:E}),P=ge.failedAt}}let D=Y.finalize(),ee=Math.round((Date.now()-Rr)/1e3),wr={session:a,resolvedAuth:u,chromeResult:K,chromeInstance:pe??null,testId:a.testId??null,preparedVariables:L,variableIds:me,globalContext:tt,localContext:rt,tuiConfig:U,env:f,localMode:!!t.local},te=await ur(wr,{performUpload:async()=>{if(!u.basicAuth)return null;let s=Q(f),c=($||t.push===!0)&&!q,d=(F||h.isFirstRun)&&!q&&D.overallStatus==="passed",m=ie&&(F||h.isFirstRun);a.log("info","PIPELINE_GATE_STATE","Derived gate state (finalize)",{phase:"finalize",shouldUploadArtifacts:ie,shouldUploadPipeline:m,shouldReplaceLocalOutput:c,shouldCommit:d,lockHeld:F,anyAuthorStepRan:$,cancelled:q,overallStatus:D.overallStatus});let b=Ut({session:a,env:f,auth:u,variables:L,variableIds:me,projectId:N,folderId:fe,totalSteps:D.outcomes.length,totalDuration:ee,codeExport:Nt({codeExport:t.codeExport,codeLanguage:t.codeLanguage,skipCodeValidation:t.skipCodeValidation},U.code_export),onProgress:()=>{},log:(I,T,E,P)=>a.log(I,T,E,P),shouldUploadArtifacts:m,shouldReplaceLocalOutput:c,shouldCommit:d,isFirstRun:h.isFirstRun,resolvedTest:n,sourcePath:r,stepRunRecords:a.getStepRunRecords(),outcomes:D.outcomes,overallStatus:D.overallStatus,fromCommitId:h.fromCommitId,startedISO:Fe,durationS:ee,tmsIds:{testId:h.testId??a.testId??void 0,testcaseId:h.testcaseId??a.testcaseId??void 0,projectId:N??void 0,folderId:fe??void 0,orgId:a.orgId??void 0,sessionName:a.sessionName??ye(r)},tmsBaseUrl:C.tmsBaseUrl,testId:h.testId??void 0,newCommitId:h.newCommitId??void 0,basicAuth:u.basicAuth??void 0,decisions:h.decisions,wantsPush:t.push===!0,retryTriggered:ue,forceAuthor:t.author===!0});h.newCommitId!=null&&(b.skipTmsFinalize=!0);let g=new Rt(b);if(i)return await g.execute();let{renderUploadProgress:_}=await import("./CliUploadProgress-DV34KLES.js");return await _(g,I=>{if(I.testcaseId&&I.shareId&&N)return $e(s.testManagerUiUrl,N,I.testcaseId,I.shareId)})},runCleanup:()=>{W("chrome","test.md run complete")},log:(s,c,d,m)=>a.log(s,c,d,m)},{overallStatus:D.overallStatus,outcomes:D.outcomes,sourcePath:r,title:n.rootTitle,rootSteps:n.rootSteps,startedISO:Fe,durationS:ee,localMode:!!t.local,skipLocalWrites:!0});await Hr(r,h,a,D.outcomes,D.overallStatus,Fe,ee,te.uploadResult,U,t,{resolvedAuth:u,tmsBaseUrl:C.tmsBaseUrl},F);let ct={overallStatus:D.overallStatus,durationS:ee,decisions:h.decisions,outcomes:D.outcomes,cancelled:q,retryTriggered:ue,lockHeld:F,anyAuthorStepRan:$,isFirstRun:h.isFirstRun,wantsPush:t.push===!0,uploadResult:te.uploadResult,shouldUploadArtifacts:ie,shouldReplaceLocalOutput:$&&!q,shouldCommit:(F||h.isFirstRun)&&!q&&D.overallStatus==="passed"},{buildSummaryEvent:vr}=await import("./SummaryBox-72NGQYS7.js");if(i)p(vr(ct));else try{let{default:s}=await import("./react-QWOAB3TB.js"),{render:c}=await import("./build-JIKYOZUH.js"),{AutoExitSummaryBox:d}=await import("./SummaryBox-72NGQYS7.js"),{waitUntilExit:m}=c(s.createElement(d,{data:ct}),{stdout:process.stderr});await m()}catch(s){a.log("warn","TEST_MD_SUMMARY_RENDER_FAILED","Summary box render failed",{error:String(s)})}if(!i)try{let{default:s}=await import("./react-QWOAB3TB.js"),{render:c}=await import("./build-JIKYOZUH.js"),{LinksBox:d}=await import("./LinksBox-UCNEPFJD.js"),m=Q(f),b=te.uploadResult?.testcaseId,g=b&&te.uploadResult?.shareId&&N?$e(m.testManagerUiUrl,N,b,te.uploadResult.shareId):void 0,_=b&&N?yt(m.testManagerUiUrl,N,b):void 0,{waitUntilExit:I}=c(s.createElement(d,{recordedTestPath:r,outputDir:xt(r),shareableLink:g,testCaseLink:_,codeExportDir:te.uploadResult?.codeExportDir}),{stdout:process.stderr});await I()}catch(s){a.log("warn","TEST_MD_LINKS_RENDER_FAILED","LinksBox render failed",{error:String(s)})}return p({type:"test_md_done",overall_status:D.overallStatus,duration_s:ee,session_id:a.sessionId}),D.overallStatus==="passed"?0:1}function $r(e){let t={mode:"mode",maxSteps:"max_steps",timeout:"timeout",globalContext:"global_context",localContext:"local_context",codeExport:"code_export",codeLanguage:"code_language",headless:"headless",cdpEndpoint:"cdp_endpoint",wsEndpoint:"ws_endpoint"},r=new Set(["max_steps","timeout"]),i={};for(let[o,p]of Object.entries(t)){let n=e[o];if(n===void 0||n==="")continue;let R=n;if(r.has(p)&&(R=Number(n),Number.isNaN(R))){let l="--"+o.replace(/[A-Z]/g,y=>"-"+y.toLowerCase());process.stderr.write(`error: ${l} must be a number
|
|
42
|
+
`),process.exit(2)}i[p]=R}return i}function Br(e,t){let r={...e,...t},i=Object.keys(r).length>0?Re(r,""):{variables:{},objective:"",keyMap:{}};return{raw:r,auteur:i.variables,auteurObjective:"",secretEntries:Object.entries(r).filter(([,o])=>o.secret),nonSecretEntries:Object.entries(r).filter(([,o])=>!o.secret)}}function de(e,t,r){let i={...e,...t??{}};if(Object.keys(i).length===0)return{variables:{},objective:r};let o=Re(i,r);return{variables:Ct(o.variables,o.objective),objective:o.objective}}function pr(e,t){let r=new Set(Ie),i={...e};for(let[o,p]of Object.entries(t))r.has(o)||o!=="variables"&&p!==void 0&&e[o]===void 0&&(i[o]=p);return i}function Vr(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}async function qr(e,t,r,i,o){let p=Pt(e),n=Xt(t,Xe(p)?p:null);rr(t,n);let R=Ot(e),l=Xe(R)?JSON.parse(Mr(R,"utf8")):null,y=l?.testcase_id,v=l?.test_id,k=l?.commit_id,O=r.push===!0,f=r.retry===!0||r.retryCount!==void 0,C=r.author===!0;O&&!y&&process.stderr.write(`[--push] no meta.json yet \u2014 flag is a no-op on first run
|
|
43
|
+
`),C&&(y=void 0,v=void 0,k=void 0);let w=!!i.resolvedAuth.basicAuth,u=!r.local&&w&&v!=null&&k!=null&&y!=null,J=u&&(er(n)||O);if(O&&!u)return process.stderr.write(`error: --push requires basic auth credentials for the lock API. Run 'kane-cli config set-username/set-access-key' or pass --username/--access-key inline.
|
|
44
|
+
`),{resolved:t,decisions:n,testId:v,testcaseId:y,fromCommitId:k,newCommitId:null,isFirstRun:!1,hasBasic:w,canLock:u,lockAcquired:!1,abort:{exitCode:2}};if(f&&!u)return process.stderr.write(`error: --retry requires basic auth credentials for the lock API. Run 'kane-cli config set-username/set-access-key' or pass --username/--access-key inline.
|
|
45
|
+
`),{resolved:t,decisions:n,testId:v,testcaseId:y,fromCommitId:k,newCommitId:null,isFirstRun:!1,hasBasic:w,canLock:u,lockAcquired:!1,abort:{exitCode:2}};if(C&&!w)return process.stderr.write(`error: --author requires basic auth credentials for the TMS API. Run 'kane-cli config set-username/set-access-key' or pass --username/--access-key inline.
|
|
46
|
+
`),{resolved:t,decisions:n,testId:v,testcaseId:y,fromCommitId:k,newCommitId:null,isFirstRun:!1,hasBasic:w,canLock:u,lockAcquired:!1,abort:{exitCode:2}};let a=null,h=!1;if(J){a=o;let F=r.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",$=await fr({tmsBaseUrl:i.tmsBaseUrl,testId:v,fromCommitId:k,newCommitId:a,basicAuth:i.resolvedAuth.basicAuth,onLockConflict:F});if($==="ok")h=!0,Je({baseUrl:Ce(i.tmsBaseUrl),testId:v,auth:_e(i.resolvedAuth.basicAuth)});else{if($==="abort")return{resolved:t,decisions:n,testId:v,testcaseId:y,fromCommitId:k,newCommitId:null,isFirstRun:!1,hasBasic:w,canLock:u,lockAcquired:!1,abort:{exitCode:2}};a=null}}return{resolved:t,decisions:n,testId:v,testcaseId:y,fromCommitId:k,newCommitId:a,isFirstRun:y==null,hasBasic:w,canLock:u,lockAcquired:h}}function Ce(e){return`${e}/kane-cli/v1`}function _e(e){return{username:e.username,accessKey:e.access_key}}async function fr(e){let t=Ce(e.tmsBaseUrl),r=_e(e.basicAuth),i={baseUrl:t,testId:e.testId,fromCommitId:e.fromCommitId,newCommitId:e.newCommitId,auth:r},o=await Ke(i);if(o.ok)return"ok";if(!(o.reason==="concurrent"||o.reason==="base_mismatch"))return process.stderr.write(`[lock] acquire failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
|
|
47
|
+
`),"abort";let n=o.reason==="concurrent"?"concurrent session":"base commit mismatch (pull latest)";if(e.onLockConflict==="fail")return process.stderr.write(`[lock] ${n}; aborting (--on-lock-conflict fail)
|
|
48
|
+
`),"abort";if(e.onLockConflict==="wait"){if(o.reason==="base_mismatch")return process.stderr.write(`[lock] base commit mismatch \u2014 pull latest; aborting
|
|
49
|
+
`),"abort";for(;;){process.stderr.write(`[lock] waiting (concurrent session)...
|
|
50
|
+
`),await new Promise(l=>setTimeout(l,3e4));let R=await Ke(i);if(R.ok)return"ok";if(R.reason!=="concurrent")return process.stderr.write(`[lock] wait drifted to ${R.reason} (HTTP ${R.httpStatus}): ${R.message}; aborting
|
|
51
|
+
`),"abort"}}return process.stderr.write(`[lock] ${n} \u2014 running in readonly mode (no commit)
|
|
52
|
+
`),"readonly"}async function Hr(e,t,r,i,o,p,n,R,l,y,v,k){let{decisions:O,testId:f,testcaseId:C,fromCommitId:w,newCommitId:u}=t;if(!(o==="passed")&&k&&f&&w&&u){process.stderr.write(`[lock] run failed (${o}); discarding new commit
|
|
53
|
+
`),await zr(v,f,w,u),Qe();return}Qe()}async function zr(e,t,r,i){if(!e.resolvedAuth.basicAuth)return;let o=await Lt({baseUrl:Ce(e.tmsBaseUrl),testId:t,body:{commitId:i,fromCommitId:r},auth:_e(e.resolvedAuth.basicAuth)});o.ok||process.stderr.write(`warn: discardLock failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
|
|
54
|
+
`)}async function Kr(e){let{default:t}=await import("./react-QWOAB3TB.js"),{render:r}=await import("./build-JIKYOZUH.js"),{TestMdRunView:i}=await import("./TestMdRunView-DD6YI7CY.js"),o=null,p=!1,n=0,R=-1,l=-1,y=0,v=async O=>{if(O&&O.status==="failed")return n>0&&e.decisions[n-1].kind==="replay"&&(o=n-1),null;for(;n<e.decisions.length&&!e.accumulator.shouldRunFlatStep(e.resolved.steps[n]);)n++;if(n>=e.decisions.length)return null;let f=e.decisions[n],C=e.resolved.steps[n],w=n;n++;let u=e.session.nextRunIndex();R=w,l=u,y=Date.now(),e.onSpawnStart?.(u),f.kind==="author"&&e.onAnyAuthorStep(),await e.pushStepLevelDelta(C.config.variables,C.objective);let J=f.kind==="replay"?e.buildReplayConfig(w):e.buildStepConfigAt(w,u),a=f.kind==="replay"?"md5-match":f.reason,h=C.config??{},F={};for(let[$,q]of Object.entries(h))q!=null&&$!=="variables"&&(F[$]=q);return{config:J,banner:{stepLabel:`Step ${w+1}/${e.decisions.length}`,objective:Vr(C.objective,100)},mode:f.kind,modeReason:a,perStepOverrides:Object.keys(F).length>0?F:void 0}},{waitUntilExit:k}=r(t.createElement(i,{topBanner:{model:e.topBannerModel,auth:e.topBannerAuth},globalConfig:e.globalConfig,getNextStep:v,onStepEnd:O=>e.onSequencerStepEnd(O,R,l,y),onAllComplete:()=>{},onCancel:()=>{p=!0,e.onCancel()},spawnOpts:e.spawnOpts,priorAttemptRollup:e.priorAttemptRollup,screenshotDispatcher:e.screenshotDispatcher,onReasoning:e.onReasoning,onStepComplete:e.onStepComplete}),{stdout:process.stderr,exitOnCtrlC:!1});return await k(),{failedAt:o,cancelled:p}}export{pr as applyCliStepConfig,de as buildStepRunVariables,Br as buildTestLevelVariables,mo as runTestMdFile};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as O}from"./chunk-5KH7U63E.js";import{d as W,e as J,f as Z}from"./chunk-YV5KDJLP.js";import{a as z,b as K}from"./chunk-MDBXYXSC.js";import{a as C,b as N,e as S,f as Q}from"./chunk-SLA75N5B.js";import"./chunk-G7VF5SDK.js";import{a as B}from"./chunk-FJ6L63SP.js";import{a as G}from"./chunk-XJ7OYQ7M.js";import{a as A}from"./chunk-QV2VR72Q.js";import{a as q}from"./chunk-NLYBR5FP.js";import"./chunk-PWGEMRBD.js";import"./chunk-L5Y2GUO6.js";import"./chunk-BSQVYLV7.js";import{a as F}from"./chunk-HCBYKLMW.js";import{t as _}from"./chunk-JYQO6G7F.js";import{a as y,b as g,i as H}from"./chunk-C44QQJR4.js";import{a as j}from"./chunk-6YGTRKDT.js";import"./chunk-DXKKUGFG.js";import{e as T}from"./chunk-UR6MHSHU.js";var P=T(j(),1);import{existsSync as v,readFileSync as It,rmSync as ct,unlinkSync as Lt}from"fs";import{resolve as X}from"path";import{promises as tt,realpathSync as mt}from"fs";import{homedir as gt}from"os";import{join as U,parse as pt,relative as et,resolve as rt}from"path";var ht=new Set(["node_modules",".git","dist","build",".next",".venv","venv","target","__pycache__"]),R=class extends Error{constructor(i){super(`refusing to scan '${i}'. Run from your project root, or pass --root <dir>.`);this.cwd=i;this.name="HomeRefusedError"}};function nt(t){try{return mt(rt(t))}catch{return rt(t)}}function _t(t){let r=nt(t),i=nt(gt()),n=pt(r).root;if(process.platform==="win32"){let e=o=>o.toLowerCase();return e(r)===e(i)||e(r)===e(n)}return r===i||r===n}async function $(t){if(_t(t.root))throw new R(t.root);let r=t.maxEntries??5e4,i=t.maxResults??5e3,n=new Set(t.ignore??[]),e=[],o=0,c=0,a=!1,l,s=[t.root];for(;s.length>0&&!a;){let u=s.shift(),w;try{w=await tt.readdir(u,{withFileTypes:!0})}catch{continue}c++;for(let h of w){if(o++,o>r){a=!0,l="max_entries";break}let f=h.name,b=U(u,f);if(h.isDirectory()){if(ht.has(f)||f.startsWith(".")||f.startsWith("output-")||n.has(f))continue;s.push(b)}else if(h.isFile()&&f.endsWith("_test.md")&&(e.push({path:b,relPath:et(t.root,b),source:"cwd"}),e.length>=i)){a=!0,l="max_results";break}}t.onProgress?.(c,e.length)}if(!a){let u=U(t.root,".testmuai","tests");try{let w=await tt.readdir(u,{withFileTypes:!0});c++;for(let h of w){if(!h.isFile()||!h.name.endsWith("_test.md"))continue;let f=U(u,h.name);if(e.push({path:f,relPath:et(t.root,f),source:"tests-dir"}),e.length>=i){a=!0,l="max_results";break}}}catch{}}return{results:e,aborted:a,abortReason:l,dirsScanned:c}}import{mkdirSync as xt,writeFileSync as wt}from"fs";import{join as yt}from"path";function ot(t,r){return`Basic ${Buffer.from(`${t}:${r}`).toString("base64")}`}async function kt(t){let r=z({tmsBaseUrl:t.tmsBaseUrl,testcaseId:t.testcaseId,codeExport:{enabled:!0,language:t.language,skipValidation:t.skipValidation}}),i=await fetch(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:ot(t.auth.username,t.auth.access_key)},body:JSON.stringify(r.body)});if(!i.ok)throw new Error(`code-export trigger failed: ${i.status} ${await i.text()}`);t.log("info","CODE_EXPORT_TRIGGERED","Code export triggered",{testcase_id:t.testcaseId})}async function bt(t){let r=K({tmsBaseUrl:t.tmsBaseUrl,testcaseId:t.testcaseId}),i=t.pollIntervalMs??5e3,n=t.timeoutMs??3e5,e=Date.now()+n;for(;Date.now()<e;){let o=await fetch(r,{headers:{authorization:ot(t.auth.username,t.auth.access_key),accept:"application/json"}});if(!o.ok){await new Promise(s=>setTimeout(s,i));continue}let a=(await o.json()).data?.find(s=>s.code_name==="kane-cli-trigger");if(!a){await new Promise(s=>setTimeout(s,i));continue}let l=(a.status??"").toLowerCase();if(l==="in progress"||l==="in_progress"||l==="pending"){await new Promise(s=>setTimeout(s,i));continue}if(!a.url||a.url.length===0)throw new Error(`code-export status=${a.status} but no files returned`);xt(t.outDir,{recursive:!0});for(let s of a.url){let u=yt(t.outDir,s.file_name),w=await fetch(s.file_url);if(!w.ok){t.log("warn","CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:s.file_name,status:w.status});continue}let h=await w.text();wt(u,h,"utf-8")}return t.log("info","CODE_EXPORT_DOWNLOADED","Code export saved",{out_dir:t.outDir,file_count:a.url.length}),t.outDir}throw new Error("code-export polling timed out")}async function it(t){return await kt(t),await bt(t)}var k=T(j(),1);import{existsSync as Et,readFileSync as Tt}from"fs";var p=T(F(),1);function Rt(t){O(t);let r=S(t);if(!Et(r))return null;try{return JSON.parse(Tt(r,"utf8"))}catch{return{}}}function St(t){return t===null?"never_run":t.testcase_id?"synced":"local_only"}function Pt(t){return t==="synced"?"\u2601":t==="local_only"?"\u25A3":"\u25CB"}function vt(t){return t==="tests-dir"?"\u2726":" "}function Mt(t,r){return r==="all"?!0:r==="synced"?t.status==="synced":r==="local"?t.status==="local_only":r==="never_run"?t.status==="never_run":r==="cli"?t.source==="tests-dir":r==="hand"?t.source==="cwd":!0}var V=["all","synced","local","never_run","cli","hand"];function Ct(t){let r=V.indexOf(t);return V[(r+1)%V.length]}function st({root:t,currentOrgId:r,onSelect:i,onCancel:n}){let[e,o]=(0,k.useState)([]),[c,a]=(0,k.useState)(null),[l,s]=(0,k.useState)(!0),[u,w]=(0,k.useState)("all");(0,k.useEffect)(()=>{(async()=>{try{let m=await $({root:t}),M=[];for(let E of m.results){let L=Rt(E.path);L?.org_id!==void 0&&L.org_id!==r||M.push({path:E.path,relPath:E.relPath,name:C(E.path),status:St(L),source:E.source})}o(M),s(!1)}catch(m){m instanceof R,a(m.message),s(!1)}})()},[t,r]);let h=(0,k.useMemo)(()=>e.filter(m=>Mt(m,u)).map(m=>({id:m.path,label:`${Pt(m.status)} ${vt(m.source)} ${m.relPath}`})),[e,u]),f=(0,k.useMemo)(()=>Ft(u,e),[u,e]);if(c)return(0,p.jsxs)(y,{flexDirection:"column",borderStyle:"round",borderColor:_.statusFail,paddingX:2,paddingY:1,children:[(0,p.jsx)(g,{color:_.statusFail,bold:!0,children:"testmd"}),(0,p.jsx)(y,{marginTop:1,children:(0,p.jsx)(g,{color:_.statusFail,children:c})})]});let b=u==="all"?"all":Dt(u);return(0,p.jsx)(G,{title:`testmd \xB7 filter: ${b}`,items:h,loading:l,itemNoun:"tests",onSelect:m=>{let M=e.find(E=>E.path===m.id);M&&i(M)},onCancel:n,onTab:()=>w(m=>Ct(m)),extraHint:"cycle filter",footer:f})}function Dt(t){return t==="synced"?"synced (\u2601)":t==="local"?"local (\u25A3)":t==="never_run"?"never run (\u25CB)":t==="cli"?"cli-generated (\u2726)":t==="hand"?"hand-written":"all"}function Ft(t,r){let i={synced:r.filter(e=>e.status==="synced").length,local:r.filter(e=>e.status==="local_only").length,never:r.filter(e=>e.status==="never_run").length,cli:r.filter(e=>e.source==="tests-dir").length,hand:r.filter(e=>e.source==="cwd").length},n=e=>e?_.primary:_.dim;return(0,p.jsxs)(y,{flexDirection:"column",children:[(0,p.jsx)(g,{color:_.dim,children:"legend:"}),(0,p.jsxs)(y,{children:[(0,p.jsx)(g,{color:n(t==="synced"),children:` \u2601 synced (${i.synced}) `}),(0,p.jsx)(g,{color:n(t==="local"),children:`\u25A3 local (${i.local}) `}),(0,p.jsx)(g,{color:n(t==="never_run"),children:`\u25CB never run (${i.never})`})]}),(0,p.jsxs)(y,{children:[(0,p.jsx)(g,{color:n(t==="cli"),children:` \u2726 cli-generated (${i.cli}) `}),(0,p.jsx)(g,{color:n(t==="hand"),children:` hand-written (${i.hand})`})]})]})}var D=T(j(),1);import{existsSync as Ot,readFileSync as $t}from"fs";var d=T(F(),1);function at({path:t,relPath:r,onAction:i,onBack:n}){let[e,o]=(0,D.useState)(null),[c,a]=(0,D.useState)(!1);(0,D.useEffect)(()=>{let s=S(t);if(Ot(s))try{o(JSON.parse($t(s,"utf8")))}catch{o(null)}},[t]),H((s,u)=>{if(u.escape){if(c){a(!1);return}n();return}if(c){s==="y"||s==="Y"?(a(!1),i("delete")):(s==="n"||s==="N")&&a(!1);return}s==="r"&&i("run"),s==="e"&&e?.testcase_id&&i("export"),s==="d"&&a(!0)});let l=({k:s,v:u})=>u?(0,d.jsxs)(g,{children:[(0,d.jsx)(g,{color:_.dim,children:s.padEnd(14)}),u]}):null;return(0,d.jsxs)(y,{flexDirection:"column",borderStyle:"round",borderColor:_.primary,paddingX:2,paddingY:1,children:[(0,d.jsx)(g,{color:_.primary,bold:!0,children:r}),(0,d.jsx)(y,{marginTop:1,flexDirection:"column",children:e?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l,{k:"test_id",v:e.test_id}),(0,d.jsx)(l,{k:"testcase_id",v:e.testcase_id}),(0,d.jsx)(l,{k:"project_id",v:e.project_id}),(0,d.jsx)(l,{k:"folder_id",v:e.folder_id}),(0,d.jsx)(l,{k:"org_id",v:e.org_id}),(0,d.jsx)(l,{k:"session_name",v:e.session_name}),(0,d.jsx)(l,{k:"commit_id",v:e.commit_id})]}):(0,d.jsx)(g,{color:_.dim,children:"(never run \u2014 no meta.json)"})}),c?(0,d.jsx)(y,{marginTop:1,children:(0,d.jsxs)(g,{color:_.statusFail,bold:!0,children:["Delete ",r," and its output dir? [y/n]"]})}):(0,d.jsx)(y,{marginTop:1,children:(0,d.jsxs)(g,{color:_.dim,children:["[r] run [e] export",e?.testcase_id?"":" (need testcase_id)"," [d] delete [Esc] back"]})})]})}function I(t){O(t);let r=S(t);if(!v(r))return null;try{return JSON.parse(It(r,"utf8"))}catch{return null}}function lt(t,r){return!t||t.org_id===void 0?!0:t.org_id===r}function Y(t,r){return lt(t,r)?null:(process.stderr.write(`error: this test belongs to org ${t.org_id}; you are logged in as org ${r}.
|
|
3
|
+
Switch profiles with \`kane-cli profiles switch\` to act on it.
|
|
4
|
+
`),2)}async function Re(t={}){let r=!!process.stdin.isTTY&&!t.json,i=new A,n=new B;await Z({isInteractive:r,creds:i,config:n});let e=i.getDefaultEnv()??"prod";try{let o=await J({creds:i,env:e,log:()=>{}});return o.resolvedCreds?.org_id===void 0?(process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),{ok:!1,code:2}):{ok:!0,orgId:String(o.resolvedCreds.org_id)}}catch(o){if(o instanceof W)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),{ok:!1,code:2};throw o}}async function Se(t,r){if(process.stdin.isTTY&&!t.json)return await Bt(r,t.root);let i=t.root??process.cwd(),n;try{n=await $({root:i,ignore:t.ignore})}catch(e){if(e instanceof R)return process.stderr.write(`error: ${e.message}
|
|
5
|
+
`),2;throw e}for(let e of n.results){let o=I(e.path);if(!lt(o,r))continue;let c={path:e.relPath.startsWith(".")?e.relPath:`./${e.relPath}`,name:C(e.path),has_meta:o!==null,source:e.source,synced:!!o?.testcase_id};o&&(o.test_id&&(c.test_id=o.test_id),o.testcase_id&&(c.testcase_id=o.testcase_id),o.org_id&&(c.org_id=o.org_id),o.project_id&&(c.project_id=o.project_id),o.folder_id&&(c.folder_id=o.folder_id)),process.stdout.write(JSON.stringify(c)+`
|
|
6
|
+
`)}return n.aborted&&process.stderr.write(`warn: walk aborted (${n.abortReason}). Pass --root or --ignore to narrow.
|
|
7
|
+
`),0}var ut=-1001,dt=-1002,ft=-1003,x={action:null,path:null};function jt(t,r){return x.action=t,x.path=r,t==="run"?ut:t==="export"?dt:ft}function At({root:t,currentOrgId:r,onComplete:i}){let[n,e]=P.default.useState({kind:"list"});return P.default.useEffect(()=>{n.kind==="exiting"&&i(n.code)},[n,i]),n.kind==="list"?P.default.createElement(st,{root:t,currentOrgId:r,onSelect:o=>e({kind:"inspect",path:o.path,relPath:o.relPath}),onCancel:()=>e({kind:"exiting",code:0})}):n.kind==="inspect"?P.default.createElement(at,{path:n.path,relPath:n.relPath,onAction:async o=>{e({kind:"exiting",code:jt(o,n.path)})},onBack:()=>e({kind:"list"})}):null}async function Bt(t,r){let i=r??process.cwd(),{render:n}=await import("./build-JIKYOZUH.js"),e=await new Promise(o=>{let{unmount:c,waitUntilExit:a}=n(P.default.createElement(At,{root:i,currentOrgId:t,onComplete:l=>{c(),o(l)}}),{stdout:process.stderr,exitOnCtrlC:!0});a().then(()=>o(0)).catch(()=>o(0))});if(e===ut&&x.path){let{runTestMdFile:o}=await import("./run-test-md-C63UB65T.js"),c=await o(x.path,{});return x.action=null,x.path=null,c}if(e===dt&&x.path){let o=await Wt(x.path,{},t);return x.action=null,x.path=null,o}if(e===ft&&x.path){let o=await Nt(x.path,!0,t);return x.action=null,x.path=null,o}return e}async function Pe(t,r){let i=X(t);if(!v(i))return process.stderr.write(`error: file not found: ${i}
|
|
8
|
+
`),2;let n=I(i),e=Y(n,r);if(e!==null)return e;let o={path:i,name:C(i),has_meta:n!==null};return n&&(n.commit_id&&(o.commit_id=n.commit_id),n.test_id&&(o.test_id=n.test_id),n.testcase_id&&(o.testcase_id=n.testcase_id),n.project_id&&(o.project_id=n.project_id),n.folder_id&&(o.folder_id=n.folder_id),n.org_id&&(o.org_id=n.org_id),n.session_name&&(o.session_name=n.session_name)),process.stdout.write(JSON.stringify(o)+`
|
|
9
|
+
`),0}async function Nt(t,r,i){let n=X(t);if(!v(n))return process.stderr.write(`error: file not found: ${n}
|
|
10
|
+
`),2;let e=I(n),o=Y(e,i);if(o!==null)return o;if(!r)return process.stderr.write(`error: refusing to delete without --yes.
|
|
11
|
+
This will remove '${n}' and '${N(n)}/'.
|
|
12
|
+
`),2;let c=N(n);if(v(c))try{ct(c,{recursive:!0,force:!0})}catch(a){return process.stderr.write(`error: failed to remove ${c}: ${a.message}
|
|
13
|
+
`),2}try{Lt(n)}catch(a){return process.stderr.write(`error: failed to remove ${n}: ${a.message}
|
|
14
|
+
`),2}return process.stderr.write(`removed ${n} and ${c}/
|
|
15
|
+
`),0}async function Wt(t,r,i){let n=X(t);if(!v(n))return process.stderr.write(`error: file not found: ${n}
|
|
16
|
+
`),2;let e=I(n),o=Y(e,i);if(o!==null)return o;if(!e?.testcase_id)return process.stderr.write("error: this test has not been synced to TMS \u2014 run `kane-cli testmd run` first.\n"),2;let c=new B().load(),a=r.language??c.code_export?.language;if(!a)return process.stderr.write(`error: --language not provided and no default in tui-config.
|
|
17
|
+
`),2;let l=r.output??Q(n,"playwright",a),s=v(l);if(s&&!r.force){let f=!1;try{let{readdirSync:b}=await import("fs");f=b(l).length>0}catch{}if(f)return process.stderr.write(`reusing existing export at ${l}
|
|
18
|
+
`),0}s&&r.force&&ct(l,{recursive:!0,force:!0});let u=new A,w=u.getDefaultEnv()??"prod",h;try{h=await J({creds:u,env:w,log:()=>{}})}catch(f){if(f instanceof W)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),2;throw f}if(!h.basicAuth)return process.stderr.write("error: TMS basic auth could not be resolved. Run `kane-cli login` again.\n"),2;try{let f=q(w);await it({tmsBaseUrl:f.tmsBaseUrl,testcaseId:e.testcase_id,auth:h.basicAuth,language:a,framework:"playwright",skipValidation:c.code_export?.skip_validation??!0,outDir:l,log:()=>{}})}catch(f){return process.stderr.write(`error: code export failed: ${f.message}
|
|
19
|
+
`),2}return process.stderr.write(`exported to ${l}
|
|
20
|
+
`),0}export{Y as assertOrgMatchOrExit,lt as metaMatchesOrg,I as readMetaIfExists,Re as resolveCurrentOrgId,Nt as runDeleteAction,Wt as runExportAction,Se as runListAction,Bt as runListTui,Pe as runStatusAction};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-
|
|
2
|
+
import{a}from"./chunk-YUUZDFT7.js";import"./chunk-DXKKUGFG.js";import"./chunk-UR6MHSHU.js";export{a as TmsClient};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as t}from"./chunk-NLYBR5FP.js";import"./chunk-JYQO6G7F.js";import"./chunk-UR6MHSHU.js";async function a(n,e,o){let{TmsClient:r}=await import("./tms-client-CTH4NVFM.js"),i=new r(t(n).tmsBaseUrl,e,o);for await(let m of i.listProjectsStream({perPage:1,maxPages:1}))return}export{a as validateBasicAuth};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b,c,d}from"./chunk-
|
|
2
|
+
import{a,b,c,d}from"./chunk-BAKBO5YA.js";import"./chunk-JYQO6G7F.js";import"./chunk-UR6MHSHU.js";export{d as checkForUpdate,b as compareVersions,c as getSeverity,a as getUpdateCommand};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testmuai/kane-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "KaneAI Terminal UI — browser automation testing agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"sharp": "^0.34.5"
|
|
24
24
|
},
|
|
25
25
|
"optionalDependencies": {
|
|
26
|
-
"@testmuai/kane-cli-darwin-arm64": "0.
|
|
27
|
-
"@testmuai/kane-cli-darwin-x64": "0.
|
|
28
|
-
"@testmuai/kane-cli-linux-x64": "0.
|
|
29
|
-
"@testmuai/kane-cli-win-x64": "0.
|
|
26
|
+
"@testmuai/kane-cli-darwin-arm64": "0.3.0",
|
|
27
|
+
"@testmuai/kane-cli-darwin-x64": "0.3.0",
|
|
28
|
+
"@testmuai/kane-cli-linux-x64": "0.3.0",
|
|
29
|
+
"@testmuai/kane-cli-win-x64": "0.3.0"
|
|
30
30
|
},
|
|
31
31
|
"publishConfig": {
|
|
32
32
|
"registry": "https://registry.npmjs.org",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b,c}from"./chunk-5PATFYIN.js";import"./chunk-HCBYKLMW.js";import"./chunk-75XK2HKS.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{c as ChromeProfilePicker,b as formatChromeProfileLine,a as listChromeProfiles};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as r}from"./chunk-7H6IY5KC.js";import"./chunk-HCBYKLMW.js";import"./chunk-75XK2HKS.js";import{c as e}from"./chunk-C44QQJR4.js";import{a as i}from"./chunk-6YGTRKDT.js";import{e as m}from"./chunk-UR6MHSHU.js";var t=m(i(),1);async function d(){return new Promise(o=>{let c=e(t.default.createElement(r,{onSubmit:n=>{c.unmount(),o(n)}}),{stdout:process.stderr,exitOnCtrlC:!1})})}export{d as renderFeedbackPrompt};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{c as P,d as g,e as f}from"./chunk-7E2QYCMX.js";import{a as c}from"./chunk-HCBYKLMW.js";import"./chunk-75XK2HKS.js";import{c as d}from"./chunk-C44QQJR4.js";import{a as h}from"./chunk-6YGTRKDT.js";import{e as p}from"./chunk-UR6MHSHU.js";var e=p(h(),1);var m=p(c(),1);function w({pipeline:t,buildShareUrl:r,onDone:o}){let[n,i]=(0,e.useState)(P()),[S,l]=(0,e.useState)("uploading"),[U,R]=(0,e.useState)(),[C,E]=(0,e.useState)();return(0,e.useEffect)(()=>{let x=t.config.onProgress;t.config.onProgress=(s,u,a)=>{x(s,u,a),i(y=>g(y,s,u,a))},t.execute().then(s=>{s.success?(R(r?.(s)),l("success")):(E(s.error),l("failed")),setTimeout(()=>o(s),1500)})},[]),(0,m.jsx)(f,{steps:n,status:S,testUrl:U,error:C})}async function O(t,r){return new Promise(o=>{let n=d(e.default.createElement(w,{pipeline:t,buildShareUrl:r,onDone:i=>{n.unmount(),o(i)}}),{stdout:process.stderr,exitOnCtrlC:!1})})}export{O as renderUploadProgress};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as d,b as l,c as r}from"./chunk-FK2AWXZN.js";import{a as m}from"./chunk-HCBYKLMW.js";import{t as o}from"./chunk-75XK2HKS.js";import{a as t,j as u}from"./chunk-C44QQJR4.js";import{a as h}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var f=n(h(),1);var e=n(m(),1);function S({model:c,mode:s,authLabel:g,profile:b,env:p,defaultUrl:i,projectId:v,folderId:x,windowSize:w,chromeProfile:B}){let{exit:a}=u();return(0,f.useEffect)(()=>{let C=setTimeout(()=>a(),50);return()=>clearTimeout(C)},[a]),(0,e.jsx)(t,{flexDirection:"column",children:(0,e.jsx)(d,{title:"Configuration",children:(0,e.jsxs)(t,{flexDirection:"column",paddingY:1,children:[(0,e.jsx)(r,{label:"Auth"}),(0,e.jsx)(l,{label:" method",value:g}),(0,e.jsx)(l,{label:" profile",value:b}),(0,e.jsx)(l,{label:" env",value:p}),(0,e.jsx)(r,{label:"Defaults"}),(0,e.jsx)(l,{label:" url",value:i??"(none)",valueColor:i?o.cyan:o.dimmed}),(0,e.jsx)(l,{label:" model",value:c}),(0,e.jsx)(l,{label:" mode",value:s}),(0,e.jsx)(l,{label:" window",value:w}),(0,e.jsx)(l,{label:" project",value:v??"(none)"}),(0,e.jsx)(l,{label:" folder",value:x??"(none)"}),(0,e.jsx)(r,{label:"Paths"}),(0,e.jsx)(l,{label:" chrome",value:B,valueColor:o.dimmed})]})})})}export{S as ConfigView};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b}from"./chunk-KJAVR2NX.js";import"./chunk-YTG6V347.js";import"./chunk-UNQM5247.js";import"./chunk-HCBYKLMW.js";import"./chunk-75XK2HKS.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-HFQ7T5KT.js";import"./chunk-DXKKUGFG.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}from"./chunk-HCBYKLMW.js";import{a as h,b as l,t}from"./chunk-75XK2HKS.js";import{a as n,b as o,j as x,k as p}from"./chunk-C44QQJR4.js";import{a as T}from"./chunk-6YGTRKDT.js";import{e as u}from"./chunk-UR6MHSHU.js";var b=u(T(),1);var e=u(f(),1),w="https://www.testmuai.com/support/docs/kane-cli-introduction",B="https://github.com/LambdaTest/kane-cli/issues";function L(){let{exit:c}=x(),{stdout:i}=p(),s=i?.columns??80;return(0,b.useEffect)(()=>{let d=setTimeout(()=>c(),50);return()=>clearTimeout(d)},[c]),(0,e.jsxs)(n,{flexDirection:"column",children:[(0,e.jsxs)(n,{paddingX:1,paddingTop:1,flexDirection:"column",children:[(0,e.jsx)(o,{color:t.purple,bold:!0,children:l}),(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Browser automation powered by AI "}),(0,e.jsxs)(o,{color:t.muted,children:[" v",h]})]})]}),(0,e.jsx)(o,{children:" "}),(0,e.jsx)(m,{title:"USAGE",children:(0,e.jsxs)(o,{color:t.cyan,children:[" $ ",l," ","<command>"," [flags]"]})}),(0,e.jsxs)(m,{title:"COMMANDS",children:[(0,e.jsx)(a,{cmd:"run",args:"<objective>",desc:"Run a browser automation task",highlight:!0}),(0,e.jsx)(a,{cmd:"login",desc:"Auth setup (interactive, --oauth, or --username)"}),(0,e.jsx)(a,{cmd:"logout",desc:"Revoke tokens + delete profile"}),(0,e.jsx)(a,{cmd:"whoami",desc:"Show authenticated identity"}),(0,e.jsx)(a,{cmd:"config",args:"show|set-\u2026|reset",desc:"Manage configuration"}),(0,e.jsx)(a,{cmd:"profiles",args:"list|switch|delete",desc:"Manage auth profiles"})]}),(0,e.jsxs)(m,{title:"RUN FLAGS",children:[(0,e.jsx)(r,{long:"--max-steps",arg:"<n>",desc:"Max agent steps (default: 30)"}),(0,e.jsx)(r,{long:"--timeout",arg:"<sec>",desc:"Kill run after N seconds"}),(0,e.jsx)(r,{long:"--headless",desc:"No visible browser window"}),(0,e.jsx)(r,{long:"--variables",arg:"<json>",desc:"Inline variables as JSON"}),(0,e.jsx)(r,{long:"--variables-file",arg:"<path>",desc:"Load variables from file"}),(0,e.jsx)(r,{long:"--ws-endpoint",arg:"<url>",desc:"Remote browser (LambdaTest)"}),(0,e.jsx)(r,{long:"--cdp-endpoint",arg:"<url>",desc:"Connect to existing Chrome CDP"}),(0,e.jsx)(r,{long:"--cft",desc:"Use Playwright Chromium instead of managed Chrome"}),(0,e.jsx)(r,{long:"--global-context",arg:"<file>",desc:"Override global context markdown"}),(0,e.jsx)(r,{long:"--local-context",arg:"<file>",desc:"Override local context markdown"}),(0,e.jsx)(r,{long:"--username",arg:"<user>",desc:"Basic auth (skip OAuth)"}),(0,e.jsx)(r,{long:"--access-key",arg:"<key>",desc:"Basic auth access key"}),(0,e.jsx)(r,{long:"--env",arg:"<name>",desc:"Environment (prod or stage)"}),(0,e.jsx)(r,{long:"--agent",desc:"NDJSON output (no UI)",highlight:!0})]}),(0,e.jsxs)(m,{title:"EXAMPLES",children:[(0,e.jsx)(g,{label:"Search",cmd:`${l} run "Search for laptop"`}),(0,e.jsx)(g,{label:"Headless",cmd:`${l} run "Verify login" --headless`}),(0,e.jsx)(g,{label:"Variables",cmd:`${l} run "Login as {{user}}" --variables '{"user":{"value":"alice"}}'`}),(0,e.jsx)(g,{label:"Agent",cmd:`${l} run "Add to cart" --agent | jq .status`})]}),(0,e.jsxs)(n,{flexDirection:"column",marginTop:0,paddingX:1,children:[(0,e.jsx)(o,{color:t.muted,children:"\u2500".repeat(Math.min(s-2,70))}),(0,e.jsxs)(n,{gap:3,children:[(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Docs "}),(0,e.jsx)(o,{color:t.cyan,underline:!0,children:w})]}),(0,e.jsxs)(n,{children:[(0,e.jsx)(o,{color:t.dimmed,children:"Bugs "}),(0,e.jsx)(o,{color:t.cyan,underline:!0,children:B})]})]})]}),(0,e.jsx)(o,{children:" "})]})}function m({title:c,children:i}){return(0,e.jsxs)(n,{flexDirection:"column",marginBottom:1,children:[(0,e.jsx)(n,{marginLeft:1,children:(0,e.jsx)(o,{bold:!0,color:t.dimmed,children:c})}),i]})}function a({cmd:c,args:i,desc:s,highlight:d}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsx)(n,{width:12,children:(0,e.jsx)(o,{color:d?t.purple:t.green,bold:!0,children:c})}),(0,e.jsx)(n,{width:28,children:i?(0,e.jsx)(o,{color:t.dimmed,children:i}):null}),(0,e.jsx)(o,{color:t.dimmed,children:s})]})}function r({long:c,arg:i,desc:s,highlight:d}){return(0,e.jsxs)(n,{marginLeft:2,children:[(0,e.jsxs)(n,{width:26,children:[(0,e.jsx)(o,{color:d?t.purple:t.cyan,children:c}),i&&(0,e.jsxs)(o,{color:t.dimmed,children:[" ",i]})]}),(0,e.jsx)(o,{color:t.dimmed,children:s})]})}function g({label:c,cmd:i}){return(0,e.jsxs)(n,{marginLeft:2,flexDirection:"column",children:[(0,e.jsxs)(o,{color:t.dimmed,children:["# ",c]}),(0,e.jsxs)(o,{color:t.cyan,children:["$ ",i]})]})}export{L as HelpView};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b}from"./chunk-YSOCZU7T.js";import"./chunk-HCBYKLMW.js";import"./chunk-75XK2HKS.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{b as LoginWizard,a as getWizardSteps};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b}from"./chunk-FBK6UISI.js";import"./chunk-HCBYKLMW.js";import"./chunk-75XK2HKS.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{b as ProfilesView,a as formatProfileLine};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b}from"./chunk-OILYCYAD.js";import"./chunk-YTG6V347.js";import"./chunk-UNQM5247.js";import"./chunk-HCBYKLMW.js";import"./chunk-75XK2HKS.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-HFQ7T5KT.js";import"./chunk-DXKKUGFG.js";import"./chunk-UR6MHSHU.js";export{b as ProjectPicker,a as formatProjectLine};
|
package/dist/chunk-5PATFYIN.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as S}from"./chunk-HCBYKLMW.js";import{k as p,t}from"./chunk-75XK2HKS.js";import{a as m,b as n,i as y}from"./chunk-C44QQJR4.js";import{a as L}from"./chunk-6YGTRKDT.js";import{e as h}from"./chunk-UR6MHSHU.js";var g=h(L(),1);import{readdirSync as D,mkdirSync as A,statSync as N}from"fs";import{join as P}from"path";var r=h(S(),1);function O(c){try{return D(c).filter(s=>{try{return N(P(c,s)).isDirectory()}catch{return!1}})}catch{return[]}}function E(c,s,f,T){return{name:c,path:s,label:c,isActive:T}}function F({currentPath:c,onSelect:s,onCancel:f}){let l=O(p).map(i=>{let e=P(p,i);return E(i,e,c,e===c)}),d=!c,B=l.length+2,[a,b]=(0,g.useState)(()=>{if(d)return 0;let i=l.findIndex(e=>e.isActive);return i>=0?i+1:0}),[v,C]=(0,g.useState)(!1),[I,x]=(0,g.useState)("");return y((i,e)=>{if(v){if(e.escape){C(!1),x("");return}if(e.return){let o=I.trim();if(o){let u=P(p,o);A(u,{recursive:!0}),s(u),f()}return}if(e.backspace||e.delete){x(o=>o.slice(0,-1));return}i&&!e.ctrl&&!e.meta&&x(o=>o+i);return}if(e.escape){f();return}if(e.upArrow){b(o=>Math.max(0,o-1));return}if(e.downArrow){b(o=>Math.min(B-1,o+1));return}if(e.return){if(a===0){d||s(""),f();return}if(a===l.length+1){A(p,{recursive:!0}),C(!0),x("");return}let o=l[a-1];o&&!o.isActive&&s(o.path),f();return}}),v?(0,r.jsxs)(m,{flexDirection:"column",borderStyle:"round",borderColor:t.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(n,{color:t.primary,bold:!0,children:"Chrome Profile \u203A New"}),(0,r.jsxs)(m,{marginTop:1,children:[(0,r.jsx)(n,{color:t.secondary,children:"Name: "}),(0,r.jsx)(n,{children:I}),(0,r.jsx)(n,{color:t.dimmed,children:"\u2588"})]}),(0,r.jsx)(m,{marginTop:1,children:(0,r.jsx)(n,{color:t.dim,children:"\u21B5 create \xB7 esc back"})})]}):(0,r.jsxs)(m,{flexDirection:"column",borderStyle:"round",borderColor:t.primary,paddingX:2,paddingY:1,children:[(0,r.jsx)(n,{color:t.primary,bold:!0,children:"Chrome Profile"}),(0,r.jsxs)(m,{flexDirection:"column",marginTop:1,children:[(0,r.jsxs)(n,{color:d?t.statusPass:a===0?t.primary:t.dim,children:[a===0?"\u276F ":" ","Use temporary (no profile)",d?" \u25CF active":""]}),l.map((i,e)=>{let u=e+1===a,R=u?"\u276F ":" ",w=i.isActive?t.statusPass:u?t.primary:void 0;return(0,r.jsxs)(n,{color:w,children:[R,i.label,i.isActive?" \u25CF active":""]},i.name)}),(0,r.jsxs)(n,{color:a===l.length+1?t.primary:t.dim,children:[a===l.length+1?"\u276F ":" ","+ Create new"]})]}),(0,r.jsx)(m,{marginTop:1,children:(0,r.jsx)(n,{color:t.dim,children:"\u2191\u2193 navigate \xB7 \u21B5 select \xB7 esc back"})})]})}export{O as a,E as b,F as c};
|
package/dist/chunk-6REBTGNQ.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as V}from"./chunk-UNQM5247.js";import{c as K,l as _,m as B,n as E,o as Y,p as G,q as X,r as q}from"./chunk-75XK2HKS.js";import{createServer as qe}from"http";import{randomBytes as Ve}from"crypto";import{URL as Qe}from"url";import ce from"process";import{Buffer as le}from"buffer";import de from"path";import{fileURLToPath as Ue}from"url";import{promisify as He}from"util";import fe from"child_process";import je,{constants as ze}from"fs/promises";import re from"process";import te,{constants as Se}from"fs/promises";import ee from"process";import be from"os";import L from"fs";import ve from"fs";import Q from"fs";var T;function we(){try{return Q.statSync("/.dockerenv"),!0}catch{return!1}}function ye(){try{return Q.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function F(){return T===void 0&&(T=we()||ye()),T}var O,xe=()=>{try{return ve.statSync("/run/.containerenv"),!0}catch{return!1}};function h(){return O===void 0&&(O=xe()||F()),O}var Z=()=>{if(ee.platform!=="linux")return!1;if(be.release().toLowerCase().includes("microsoft"))return!h();try{if(L.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft"))return!h()}catch{}return L.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop")||L.existsSync("/run/WSL")?!h():!1},m=ee.env.__IS_WSL_TEST__?Z:Z();var Pe=(()=>{let o="/mnt/",e;return async function(){if(e)return e;let r="/etc/wsl.conf",t=!1;try{await te.access(r,Se.F_OK),t=!0}catch{}if(!t)return o;let i=await te.readFile(r,{encoding:"utf8"}),n=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(i);return n?(e=n.groups.mountPoint.trim(),e=e.endsWith("/")?e:`${e}/`,e):o}})(),Ce=async()=>`${await Pe()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`,I=async()=>m?Ce():`${re.env.SYSTEMROOT||re.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`;function p(o,e,r){let t=i=>Object.defineProperty(o,e,{value:i,enumerable:!0,writable:!0});return Object.defineProperty(o,e,{configurable:!0,enumerable:!0,get(){let i=r();return t(i),i},set(i){t(i)}}),o}import{promisify as $e}from"util";import N from"process";import{execFile as Re}from"child_process";import{promisify as Ae}from"util";import ke from"process";import{execFile as _e}from"child_process";var Be=Ae(_e);async function M(){if(ke.platform!=="darwin")throw new Error("macOS only");let{stdout:o}=await Be("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]),r=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(o)?.groups.id??"com.apple.Safari";return r==="com.apple.safari"?"com.apple.Safari":r}import Ee from"process";import{promisify as Te}from"util";import{execFile as Fe,execFileSync as Pr}from"child_process";var Oe=Te(Fe);async function oe(o,{humanReadableOutput:e=!0,signal:r}={}){if(Ee.platform!=="darwin")throw new Error("macOS only");let t=e?[]:["-ss"],i={};r&&(i.signal=r);let{stdout:n}=await Oe("osascript",["-e",o,t],i);return n.trim()}async function $(o){return oe(`tell application "Finder" to set app_path to application file id "${o}" as string
|
|
3
|
-
tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as Le}from"util";import{execFile as Ie}from"child_process";var Me=Le(Ie),P={MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},MSEdgeBHTML:{name:"Edge Beta",id:"com.microsoft.edge.beta"},MSEdgeDHTML:{name:"Edge Dev",id:"com.microsoft.edge.dev"},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},ChromeBHTML:{name:"Chrome Beta",id:"com.google.chrome.beta"},ChromeDHTML:{name:"Chrome Dev",id:"com.google.chrome.dev"},ChromiumHTM:{name:"Chromium",id:"org.chromium.Chromium"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveDHTML:{name:"Brave Dev",id:"com.brave.Browser.dev"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},OperaStable:{name:"Opera",id:"com.operasoftware.Opera"},VivaldiHTM:{name:"Vivaldi",id:"com.vivaldi.Vivaldi"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"}},Er=new Map(Object.entries(P)),R=class extends Error{};async function D(o=Me){let{stdout:e}=await o("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),r=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(e);if(!r)throw new R(`Cannot find Windows browser in stdout: ${JSON.stringify(e)}`);let{id:t}=r.groups,i=t.lastIndexOf("."),n=t.lastIndexOf("-"),a=i===-1?void 0:t.slice(0,i),s=n===-1?void 0:t.slice(0,n);return P[t]??P[a]??P[s]??{name:t,id:t}}var De=$e(Re),Ne=o=>o.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,e=>e.toUpperCase());async function U(){if(N.platform==="darwin"){let o=await M();return{name:await $(o),id:o}}if(N.platform==="linux"){let{stdout:o}=await De("xdg-mime",["query","default","x-scheme-handler/http"]),e=o.trim();return{name:Ne(e.replace(/.desktop$/,"").replace("-"," ")),id:e}}if(N.platform==="win32")return D();throw new Error("Only macOS, Linux, and Windows are supported")}var We=He(fe.execFile),H=de.dirname(Ue(import.meta.url)),ie=de.join(H,"xdg-open"),{platform:v,arch:ne}=ce;async function Je(){let o=await I(),e=String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,r=le.from(e,"utf16le").toString("base64"),{stdout:t}=await We(o,["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",r],{encoding:"utf8"}),i=t.trim(),n={ChromeHTML:"com.google.chrome",BraveHTML:"com.brave.Browser",MSEdgeHTM:"com.microsoft.edge",FirefoxURL:"org.mozilla.firefox"};return n[i]?{id:n[i]}:{}}var se=async(o,e)=>{let r;for(let t of o)try{return await e(t)}catch(i){r=i}throw r},C=async o=>{if(o={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...o},Array.isArray(o.app))return se(o.app,s=>C({...o,app:s}));let{name:e,arguments:r=[]}=o.app??{};if(r=[...r],Array.isArray(e))return se(e,s=>C({...o,app:{name:s,arguments:r}}));if(e==="browser"||e==="browserPrivate"){let s={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","com.brave.Browser":"brave","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge"},c={chrome:"--incognito",brave:"--incognito",firefox:"--private-window",edge:"--inPrivate"},l=m?await Je():await U();if(l.id in s){let f=s[l.id];return e==="browserPrivate"&&r.push(c[f]),C({...o,app:{name:w[f],arguments:r}})}throw new Error(`${l.name} is not supported as a default browser`)}let t,i=[],n={};if(v==="darwin")t="open",o.wait&&i.push("--wait-apps"),o.background&&i.push("--background"),o.newInstance&&i.push("--new"),e&&i.push("-a",e);else if(v==="win32"||m&&!h()&&!e){t=await I(),i.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),m||(n.windowsVerbatimArguments=!0);let s=["Start"];o.wait&&s.push("-Wait"),e?(s.push(`"\`"${e}\`""`),o.target&&r.push(o.target)):o.target&&s.push(`"${o.target}"`),r.length>0&&(r=r.map(c=>`"\`"${c}\`""`),s.push("-ArgumentList",r.join(","))),o.target=le.from(s.join(" "),"utf16le").toString("base64")}else{if(e)t=e;else{let s=!H||H==="/",c=!1;try{await je.access(ie,ze.X_OK),c=!0}catch{}t=ce.versions.electron??(v==="android"||s||!c)?"xdg-open":ie}r.length>0&&i.push(...r),o.wait||(n.stdio="ignore",n.detached=!0)}v==="darwin"&&r.length>0&&i.push("--args",...r),o.target&&i.push(o.target);let a=fe.spawn(t,i,n);return o.wait?new Promise((s,c)=>{a.once("error",c),a.once("close",l=>{if(!o.allowNonzeroExitCode&&l>0){c(new Error(`Exited with code ${l}`));return}s(a)})}):(a.unref(),a)},Ke=(o,e)=>{if(typeof o!="string")throw new TypeError("Expected a `target`");return C({...e,target:o})};function ae(o){if(typeof o=="string"||Array.isArray(o))return o;let{[ne]:e}=o;if(!e)throw new Error(`${ne} is not supported`);return e}function A({[v]:o},{wsl:e}){if(e&&m)return ae(e);if(!o)throw new Error(`${v} is not supported`);return ae(o)}var w={};p(w,"chrome",()=>A({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));p(w,"brave",()=>A({darwin:"brave browser",win32:"brave",linux:["brave-browser","brave"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe",x64:["/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe","/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe"]}}));p(w,"firefox",()=>A({darwin:"firefox",win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));p(w,"edge",()=>A({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));p(w,"browser",()=>"browser");p(w,"browserPrivate",()=>"browserPrivate");var ue=Ke;import{createHash as Ye,randomBytes as Ge}from"crypto";var x=class{authBaseUrl;consentUrl;constructor(e="prod"){let r=V(e);this.authBaseUrl=r.authBaseUrl,this.consentUrl=r.consentUrl}static generatePkce(){let e=Ge(96).toString("base64url").slice(0,128),r=Ye("sha256").update(e).digest("base64url");return[e,r]}buildAuthorizationUrl(e,r,t,i){let n=new URLSearchParams({response_type:"code",client_id:e,redirect_uri:i,scope:q,code_challenge:r,code_challenge_method:"S256",state:t});return`${this.consentUrl}/oauth2?${n.toString()}`}async registerClient(e){let r=await fetch(`${this.authBaseUrl}/oauth2/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_name:X,redirect_uris:[e],grant_types:["authorization_code"],response_types:["code"],client_type:"public",application_type:"native"})});if(!r.ok)throw new Error(`DCR failed: ${r.status} ${await r.text()}`);return r.json()}async exchangeCode(e,r,t,i){let n=await fetch(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"authorization_code",code:e,redirect_uri:i,client_id:r,code_verifier:t})});if(!n.ok)throw new Error(`Token exchange failed: ${n.status}`);return n.json()}async refreshToken(e,r){let t=await fetch(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:e,client_id:r})});if(!t.ok)throw new Error(`Token refresh failed: ${t.status}`);return t.json()}async revokeToken(e,r,t="access_token"){await fetch(`${this.authBaseUrl}/oauth2/revoke`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:e,token_type_hint:t,client_id:r})})}async validateToken(e){let r=new AbortController,t=setTimeout(()=>r.abort(),1e4);try{let i=await fetch(`${this.authBaseUrl}/api/user`,{headers:{Authorization:`Bearer ${e}`,Accept:"application/json","Content-Type":"application/json"},signal:r.signal});return clearTimeout(t),i.ok}catch{return clearTimeout(t),!1}}};import{readFileSync as b,writeFileSync as me,mkdirSync as pe,readdirSync as j,unlinkSync as u,existsSync as z,chmodSync as ge}from"fs";import{join as d,dirname as Xe}from"path";var k=class{baseDir;profilesDir;configFile;constructor(e=K){this.baseDir=e,this.profilesDir=d(e,"profiles"),this.configFile=d(e,"config.json")}readConfig(){try{return JSON.parse(b(this.configFile,"utf-8"))}catch{return{}}}writeConfig(e){pe(this.baseDir,{recursive:!0,mode:448}),me(this.configFile,JSON.stringify(e,null,2)+`
|
|
4
|
-
`),ge(this.configFile,384)}getActiveProfile(){return this.readConfig().active_profile??null}setActiveProfile(e){let r=this.readConfig();r.active_profile=e,this.writeConfig(r)}getDefaultEnv(){return this.readConfig().default_env??"prod"}setDefaultEnv(e){let r=this.readConfig();r.default_env=e,this.writeConfig(r)}credentialsPath(e,r){return d(this.profilesDir,e,r,"credentials")}clientPath(e,r){return d(this.profilesDir,e,r,"client.json")}basicAuthPath(e,r){return d(this.profilesDir,e,r,"basic-auth")}profileConfigPath(e,r){return d(this.profilesDir,e,r,"profile-config.json")}saveProfileConfig(e,r,t){let i=this.loadProfileConfig(e,r)??{};this.writeSecure(this.profileConfigPath(e,r),{...i,...t})}loadProfileConfig(e,r){try{return JSON.parse(b(this.profileConfigPath(e,r),"utf-8"))}catch{return null}}writeSecure(e,r){try{pe(Xe(e),{recursive:!0,mode:448}),me(e,JSON.stringify(r,null,2)+`
|
|
5
|
-
`),ge(e,384)}catch(t){let i=t instanceof Error?t.message:String(t);process.stderr.write(`[auth] Failed to save credentials: ${i}
|
|
6
|
-
`)}}saveCredentials(e,r,t){this.writeSecure(this.credentialsPath(e,r),t)}loadCredentials(e,r){try{return JSON.parse(b(this.credentialsPath(e,r),"utf-8"))}catch{return null}}saveClient(e,r,t){this.writeSecure(this.clientPath(e,r),t)}loadClient(e,r){try{return JSON.parse(b(this.clientPath(e,r),"utf-8"))}catch{return null}}getActiveCredentials(){let e=this.getActiveProfile();if(!e)return{credentials:null,profile:null,env:null};let r=this.getDefaultEnv();return{credentials:this.loadCredentials(e,r),profile:e,env:r}}saveBasicAuth(e,r,t){this.writeSecure(this.basicAuthPath(e,r),t)}loadBasicAuth(e,r){try{return JSON.parse(b(this.basicAuthPath(e,r),"utf-8"))}catch{return null}}deleteBasicAuth(e,r){try{u(this.basicAuthPath(e,r))}catch{}}resolveAuth(){let e=this.getActiveProfile();if(!e)return null;let r=this.getDefaultEnv(),t=this.loadBasicAuth(e,r);return t?{method:"basic",...t,profile:e,env:r}:this.loadCredentials(e,r)?{method:"oauth",profile:e,env:r}:null}listProfiles(){let e=[];try{for(let r of j(this.profilesDir)){let t=d(this.profilesDir,r);try{for(let i of j(t)){let n=d(t,i),a=z(d(n,"credentials")),s=z(d(n,"client.json")),c=z(d(n,"basic-auth"));(a||s||c)&&e.push({profile:r,env:i})}}catch{}}}catch{}return e}deleteProfile(e,r){try{u(this.credentialsPath(e,r))}catch{}if(this.getActiveProfile()===e){let t=this.readConfig();delete t.active_profile,this.writeConfig(t)}}deleteProfileFull(e,r){if(r){try{u(this.credentialsPath(e,r))}catch{}try{u(this.clientPath(e,r))}catch{}try{u(this.basicAuthPath(e,r))}catch{}try{u(this.profileConfigPath(e,r))}catch{}}else try{let t=d(this.profilesDir,e);for(let i of j(t)){try{u(d(t,i,"credentials"))}catch{}try{u(d(t,i,"client.json"))}catch{}try{u(d(t,i,"basic-auth"))}catch{}try{u(d(t,i,"profile-config.json"))}catch{}}}catch{}}};var he=class{profile;environment;creds;oauth;constructor(e="default",r="prod",t){this.profile=e,this.environment=r,this.creds=t??new k,this.oauth=new x(r)}async login(){let{server:e,port:r}=await this.startCallbackServer(),t=G(r);try{let i=this.creds.loadClient(this.profile,this.environment),n=i?.redirect_uris;(!i||!n?.includes(t))&&(i=await this.oauth.registerClient(t),this.creds.saveClient(this.profile,this.environment,i));let a=i.client_id,[s,c]=x.generatePkce(),l=Ve(32).toString("hex"),f=this.oauth.buildAuthorizationUrl(a,c,l,t),g=await this.waitForCallback(e,r,f,l);if(!g)throw new Error("Login cancelled or timed out");let y=await this.oauth.exchangeCode(g,a,s,t),S={access_token:y.access_token,refresh_token:y.refresh_token,expires_at:Math.floor(Date.now()/1e3)+y.expires_in,scope:y.scope??"*"};return this.creds.saveCredentials(this.profile,this.environment,S),this.creds.setActiveProfile(this.profile),S}catch(i){throw e.close(),i}}startCallbackServer(){return new Promise((e,r)=>{let t=B,i=()=>{let n=qe();n.on("error",a=>{a.code==="EADDRINUSE"&&t<E?(t++,i()):r(new Error(`Failed to start callback server: ${a.message}. Ports ${B}-${E} are all in use.`))}),n.listen(t,_,()=>{e({server:n,port:t})})};i()})}waitForCallback(e,r,t,i){return new Promise(n=>{let a=!1,s=setTimeout(()=>c(null),12e4),c=l=>{a||(a=!0,clearTimeout(s),e.close(),n(l))};e.on("request",(l,f)=>{let g=new Qe(l.url??"/",`http://${_}:${r}`);if(g.pathname!==Y){f.writeHead(404),f.end();return}let y=g.searchParams.get("state"),S=g.searchParams.get("code");if(g.searchParams.get("error")){f.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),f.end(W({state:"error",title:"Login failed",message:"We couldn't complete the sign-in. You can close this tab and try again from your terminal."})),c(null);return}if(y!==i){f.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),f.end(W({state:"error",title:"Invalid state",message:"The sign-in response didn't match this session. Please return to your terminal and try again."})),c(null);return}f.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),f.end(W({state:"success",title:"You're signed in",message:"Head back to your terminal \u2014 KaneAI is ready when you are.",autoClose:!0})),c(S)}),ue(t).catch(l=>{let f=l instanceof Error?l.message:String(l);process.stderr.write(`[auth] Could not open browser: ${f}
|
|
7
|
-
Please open this URL manually: ${t}
|
|
8
|
-
`)})})}};function W(o){let e=o.state==="success",r=e?"#22c55e":"#ef4444",t=e?"rgba(34, 197, 94, 0.12)":"rgba(239, 68, 68, 0.12)",i=e?'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7"/></svg>':'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg>',n=o.autoClose?"<script>setTimeout(function(){try{window.close();}catch(e){}}, 1500);</script>":"";return`<!doctype html>
|
|
9
|
-
<html lang="en">
|
|
10
|
-
<head>
|
|
11
|
-
<meta charset="utf-8" />
|
|
12
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
13
|
-
<title>${J(o.title)} \xB7 KaneAI</title>
|
|
14
|
-
<style>
|
|
15
|
-
:root {
|
|
16
|
-
color-scheme: light dark;
|
|
17
|
-
--bg: #f7f7f8;
|
|
18
|
-
--card: #ffffff;
|
|
19
|
-
--fg: #0a0a0a;
|
|
20
|
-
--muted: #6b7280;
|
|
21
|
-
--border: rgba(0, 0, 0, 0.06);
|
|
22
|
-
--shadow: 0 10px 40px rgba(0, 0, 0, 0.08);
|
|
23
|
-
}
|
|
24
|
-
@media (prefers-color-scheme: dark) {
|
|
25
|
-
:root {
|
|
26
|
-
--bg: #0a0a0a;
|
|
27
|
-
--card: #141416;
|
|
28
|
-
--fg: #f5f5f7;
|
|
29
|
-
--muted: #9ca3af;
|
|
30
|
-
--border: rgba(255, 255, 255, 0.08);
|
|
31
|
-
--shadow: 0 10px 40px rgba(0, 0, 0, 0.5);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
* { box-sizing: border-box; }
|
|
35
|
-
html, body { height: 100%; }
|
|
36
|
-
body {
|
|
37
|
-
margin: 0;
|
|
38
|
-
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, "Helvetica Neue", Arial, sans-serif;
|
|
39
|
-
background: var(--bg);
|
|
40
|
-
color: var(--fg);
|
|
41
|
-
display: flex;
|
|
42
|
-
align-items: center;
|
|
43
|
-
justify-content: center;
|
|
44
|
-
padding: 24px;
|
|
45
|
-
-webkit-font-smoothing: antialiased;
|
|
46
|
-
}
|
|
47
|
-
.card {
|
|
48
|
-
width: 100%;
|
|
49
|
-
max-width: 420px;
|
|
50
|
-
background: var(--card);
|
|
51
|
-
border: 1px solid var(--border);
|
|
52
|
-
border-radius: 16px;
|
|
53
|
-
box-shadow: var(--shadow);
|
|
54
|
-
padding: 40px 32px 32px;
|
|
55
|
-
text-align: center;
|
|
56
|
-
animation: rise 280ms cubic-bezier(0.2, 0.8, 0.2, 1) both;
|
|
57
|
-
}
|
|
58
|
-
@keyframes rise {
|
|
59
|
-
from { opacity: 0; transform: translateY(8px); }
|
|
60
|
-
to { opacity: 1; transform: translateY(0); }
|
|
61
|
-
}
|
|
62
|
-
.icon {
|
|
63
|
-
width: 64px;
|
|
64
|
-
height: 64px;
|
|
65
|
-
margin: 0 auto 20px;
|
|
66
|
-
border-radius: 999px;
|
|
67
|
-
display: flex;
|
|
68
|
-
align-items: center;
|
|
69
|
-
justify-content: center;
|
|
70
|
-
background: ${t};
|
|
71
|
-
color: ${r};
|
|
72
|
-
}
|
|
73
|
-
h1 {
|
|
74
|
-
font-size: 22px;
|
|
75
|
-
font-weight: 600;
|
|
76
|
-
letter-spacing: -0.01em;
|
|
77
|
-
margin: 0 0 8px;
|
|
78
|
-
}
|
|
79
|
-
p {
|
|
80
|
-
margin: 0;
|
|
81
|
-
color: var(--muted);
|
|
82
|
-
font-size: 14.5px;
|
|
83
|
-
line-height: 1.5;
|
|
84
|
-
}
|
|
85
|
-
.brand {
|
|
86
|
-
margin-top: 28px;
|
|
87
|
-
padding-top: 20px;
|
|
88
|
-
border-top: 1px solid var(--border);
|
|
89
|
-
font-size: 12px;
|
|
90
|
-
letter-spacing: 0.08em;
|
|
91
|
-
text-transform: uppercase;
|
|
92
|
-
color: var(--muted);
|
|
93
|
-
}
|
|
94
|
-
.brand strong { color: var(--fg); font-weight: 600; letter-spacing: 0.08em; }
|
|
95
|
-
</style>
|
|
96
|
-
</head>
|
|
97
|
-
<body>
|
|
98
|
-
<main class="card" role="status" aria-live="polite">
|
|
99
|
-
<div class="icon">${i}</div>
|
|
100
|
-
<h1>${J(o.title)}</h1>
|
|
101
|
-
<p>${J(o.message)}</p>
|
|
102
|
-
<div class="brand"><strong>KaneAI</strong> \xB7 CLI</div>
|
|
103
|
-
</main>
|
|
104
|
-
${n}
|
|
105
|
-
</body>
|
|
106
|
-
</html>`}function J(o){return o.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}export{k as a,x as b,he as c};
|
package/dist/chunk-75XK2HKS.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{homedir as s}from"os";import{join as t}from"path";var c="0.2.10",l="kane-cli",e=t(s(),".testmuai","kaneai"),m=t(e,"profiles"),i=t(e,"tui-config.json"),d="https://registry.npmjs.org/@testmuai/kane-cli",h="https://api.github.com/repos/LambdaTest/kane-cli/releases",f="https://dd-proxy.lambdatest.com/intake/kane-cli",u="https://kaneai-playground.lambdatest.io",_=9222,b=9230,U=t(e,"chrome-profiles"),r="127.0.0.1",x=18392,g=18400,o="/callback";function A(a){return`http://${r}:${a}${o}`}var R="KANE CLI",L="*",C={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server"}},E={base:"#ffffff",primary:"#ff9500",secondary:"#888888",accent:"#ffffff",dim:"#666666",ambient:"#444444",statusPass:"#4ade80",statusFail:"#ef4444",purple:"#ff9500",cyan:"#ff9500",yellow:"#ff9500",green:"#4ade80",greenDim:"#666666",red:"#ef4444",redDim:"#666666",dimmed:"#666666",muted:"#444444"};export{c as a,l as b,e as c,i as d,d as e,h as f,f as g,u as h,_ as i,b as j,U as k,r as l,x as m,g as n,o,A as p,R as q,L as r,C as s,E as t};
|
package/dist/chunk-7E2QYCMX.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as d}from"./chunk-HCBYKLMW.js";import{t}from"./chunk-75XK2HKS.js";import{a as s,b as n}from"./chunk-C44QQJR4.js";import{a as f}from"./chunk-6YGTRKDT.js";import{e as u}from"./chunk-UR6MHSHU.js";var c=u(f(),1);var R=u(f(),1);var m=u(f(),1);function b(o,r){let a=(0,m.useRef)(o);a.current=o,(0,m.useEffect)(()=>{if(r===null)return;let i=setInterval(()=>a.current(),r);return()=>clearInterval(i)},[r])}var B=u(d(),1),T=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function v({active:o=!0}){let[r,a]=(0,R.useState)(0);return b(()=>{a(i=>(i+1)%T.length)},o?80:null),(0,B.jsx)(n,{color:t.purple,children:o?T[r]:"\u25CF"})}var e=u(d(),1);function $(){return[{name:"convert",label:"Converting session data",status:"pending"},{name:"zip",label:"Compressing artifacts",status:"pending"},{name:"presign",label:"Requesting upload URLs",status:"pending"},{name:"upload",label:"Uploading to KaneAI",status:"pending"},{name:"finalize",label:"Finalizing test case",status:"pending"},{name:"code_export",label:"Downloading test code",status:"pending"}]}function k(o,r,a,i){return o.map(p=>p.name===r?{...p,status:a,detail:i}:p)}function I(o){let r=o/1e3;if(r<60)return`${r.toFixed(1)}s`;let a=Math.floor(r/60),i=Math.round(r%60);return`${a}m ${i}s`}function O(o){let[r,a]=(0,c.useState)(0),i=c.default.useRef(Date.now());return(0,c.useEffect)(()=>{if(!o)return;i.current=Date.now();let p=setInterval(()=>{a(Date.now()-i.current)},100);return()=>clearInterval(p)},[o]),r}function y({steps:o,status:r,testUrl:a,error:i}){let p=O(r==="uploading");return r==="uploading"?(0,e.jsxs)(s,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(s,{children:[(0,e.jsx)(n,{color:t.primary,children:"\u2601 "}),(0,e.jsx)(n,{color:t.primary,bold:!0,children:"Saving to KaneAI"}),(0,e.jsxs)(n,{color:t.dimmed,children:[" ",I(p)]})]}),(0,e.jsx)(s,{flexDirection:"column",marginTop:1,children:o.filter(l=>l.status!=="skipped").map((l,E,P)=>{let D=E===P.length-1?"\u2514\u2500":"\u251C\u2500",g=l.status==="done",x=l.status==="running",S=l.status==="failed";return(0,e.jsxs)(s,{children:[(0,e.jsxs)(n,{color:t.dimmed,children:[" ",D," "]}),(0,e.jsx)(s,{width:3,children:x?(0,e.jsx)(v,{}):g?(0,e.jsx)(n,{color:t.green,children:"\u2713"}):S?(0,e.jsx)(n,{color:t.red,children:"\u2717"}):(0,e.jsx)(n,{color:t.muted,children:"\u25CB"})}),(0,e.jsx)(n,{color:g?t.dim:x?t.base:S?t.red:t.muted,children:l.label}),l.detail&&(0,e.jsxs)(n,{color:t.dimmed,children:[" ",l.detail]})]},l.name)})}),(0,e.jsx)(s,{marginTop:1,children:(0,e.jsx)(n,{color:t.muted,children:" press Ctrl+C twice to force exit"})})]}):r==="success"?(0,e.jsx)(e.Fragment,{}):(0,e.jsxs)(s,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(s,{children:[(0,e.jsx)(n,{color:t.red,children:"\u2601 "}),(0,e.jsx)(n,{color:t.red,bold:!0,children:"Save failed"})]}),i&&(0,e.jsxs)(s,{marginTop:0,children:[(0,e.jsx)(n,{color:t.dimmed,children:" "}),(0,e.jsx)(n,{color:t.dim,children:i})]})]})}export{b as a,v as b,$ as c,k as d,y as e};
|
package/dist/chunk-7H6IY5KC.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as m}from"./chunk-HCBYKLMW.js";import{t}from"./chunk-75XK2HKS.js";import{a as p,b as r,i as a}from"./chunk-C44QQJR4.js";import{a as f}from"./chunk-6YGTRKDT.js";import{e as s}from"./chunk-UR6MHSHU.js";var c=s(f(),1);var e=s(m(),1);function R({onSubmit:n}){let[o,l]=(0,c.useState)(0),u=(0,c.useRef)(!1);return a((x,i)=>{u.current||(i.leftArrow||i.rightArrow?l(d=>d===0?1:0):i.return?(u.current=!0,n(o===0?"positive":"negative")):i.escape&&(u.current=!0,n(null)))}),(0,e.jsxs)(p,{marginTop:1,children:[(0,e.jsx)(r,{color:t.secondary,children:"Rate this session: "}),(0,e.jsx)(r,{color:o===0?t.primary:t.dim,children:o===0?"[ \u{1F44D} ]":" \u{1F44D} "}),(0,e.jsx)(r,{children:" "}),(0,e.jsx)(r,{color:o===1?t.primary:t.dim,children:o===1?"[ \u{1F44E} ]":" \u{1F44E} "}),(0,e.jsx)(r,{color:t.dim,children:" \u2190/\u2192 select \xB7 Enter submit \xB7 Esc skip"})]})}export{R as a};
|
package/dist/chunk-FBK6UISI.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as P}from"./chunk-HCBYKLMW.js";import{t as i}from"./chunk-75XK2HKS.js";import{a,b as l,i as h}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var A=b(w(),1);var o=b(P(),1);function B(n,d,f,m,p){let x=f==="basic"&&m?`basic (${m})`:f,s=20,c=`${n} [${d}]`,u="\xB7".repeat(Math.max(2,s-c.length+3));return{label:`${c} ${u} ${x}`,profile:n,env:d,isActive:p}}function y({creds:n,onSwitch:d,onCancel:f}){let m=n.listProfiles(),p=n.getActiveProfile(),x=n.getDefaultEnv(),s=m.map(e=>{let t=n.loadBasicAuth(e.profile,e.env),r=n.loadCredentials(e.profile,e.env)!==null,g=t?"basic":r?"oauth":"none",v=t?t.username:null,T=e.profile===p&&e.env===x;return B(e.profile,e.env,g,v,T)}),[c,u]=(0,A.useState)(()=>{let e=s.findIndex(t=>t.isActive);return e>=0?e:0});return h((e,t)=>{if(t.escape){f();return}if(t.upArrow){u(r=>Math.max(0,r-1));return}if(t.downArrow){u(r=>Math.min(s.length-1,r+1));return}if(t.return&&s[c]){let r=s[c];r.isActive||d(r.profile,r.env),f();return}}),s.length===0?(0,o.jsxs)(a,{flexDirection:"column",borderStyle:"round",borderColor:i.primary,paddingX:2,paddingY:1,children:[(0,o.jsx)(l,{color:i.primary,bold:!0,children:"Profiles"}),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(l,{color:i.dim,children:"No profiles \u2014 use Login to create one"})}),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(l,{color:i.dim,children:"esc back"})})]}):(0,o.jsxs)(a,{flexDirection:"column",borderStyle:"round",borderColor:i.primary,paddingX:2,paddingY:1,children:[(0,o.jsx)(l,{color:i.primary,bold:!0,children:"Profiles"}),(0,o.jsx)(a,{flexDirection:"column",marginTop:1,children:s.map((e,t)=>{let r=t===c,g=r?"\u276F ":" ",v=e.isActive?i.statusPass:r?i.primary:void 0;return(0,o.jsxs)(l,{color:v,children:[g,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(l,{color:i.dim,children:"\u2191\u2193 navigate \xB7 \u21B5 switch \xB7 esc back"})})]})}export{B as a,y as b};
|
package/dist/chunk-HFQ7T5KT.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as h}from"./chunk-DXKKUGFG.js";var m=class extends h{constructor(e,t,s){super(e,{username:t,accessKey:s})}async listProjects(e){let i=[],r=!1;for(let a=1;a<=100;a++){let n=`${this.baseUrl}/v1/projects?page=${a}&per_page=200&sort=created_at`,o=await fetch(n,{method:"GET",headers:this.headers()});if(!o.ok)throw new Error(`List projects failed: ${o.status} ${await o.text()}`);let d=(await o.json()).data??[];if(e&&!r&&d.length>0){let c=d[0];e("info","PROJECT_SAMPLE","Project list sample",{project_id:c.project_id,name:c.name}),r=!0}if(i.push(...d),d.length<200)break}return i}async getDefaultFolder(e){let t=await fetch(`${this.baseUrl}/v1/projects/${e}/folder/default`,{method:"GET",headers:this.headers()});if(!t.ok)throw new Error(`Get default folder failed: ${t.status} ${await t.text()}`);return(await t.json()).id}async listFolders(e){let t=await fetch(`${this.baseUrl}/v1/folder/entity/${e}`,{method:"GET",headers:this.headers()});if(!t.ok)throw new Error(`List folders failed: ${t.status} ${await t.text()}`);return(await t.json()).data??[]}async createProject(e){let t=await fetch(`${this.baseUrl}/v1/projects`,{method:"POST",headers:{...this.headers(),"Content-Type":"application/json"},body:JSON.stringify({name:e,description:"",tags:[],source:"KTM"})});if(!t.ok)throw new Error(`Create project failed: ${t.status} ${await t.text()}`);return{id:(await t.json()).id,name:e}}async createFolder(e,t){let s=await fetch(`${this.baseUrl}/v1/folder`,{method:"POST",headers:{...this.headers(),"Content-Type":"application/json"},body:JSON.stringify({folders:[{name:t,description:"",entity_id:e,entity_type:"project"}]})});if(!s.ok)throw new Error(`Create folder failed: ${s.status} ${await s.text()}`);return{id:(await s.json()).id,name:t}}async createAtmTest(e,t){let s=t?`Bearer ${t}`:this.authHeader,i=await fetch(`${this.baseUrl}/kane-cli/v1/test`,{method:"POST",headers:{Authorization:s,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)});if(!i.ok)throw new Error(`Create ATM test failed: ${i.status} ${await i.text()}`);let r=await i.json();if(!r.test_id)throw new Error("Create ATM test returned no test_id");return r.test_id}async endTest(e,t,s){let i=s?`Bearer ${s}`:this.authHeader,r=new URLSearchParams({commit_id:t.commit_id,time_taken:String(t.time_taken),steps_count:String(t.steps_count),commit_message:t.commit_message}),a={};t.objectives&&t.objectives.length>0&&(a.objectives=t.objectives);let n=await fetch(`${this.baseUrl}/kane-cli/v1/test/${e}?${r.toString()}`,{method:"DELETE",headers:{Authorization:i,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(a)});if(!n.ok)throw new Error(`End test failed: ${n.status} ${await n.text()}`);let o=await n.json();return{testcase_id:o.data?.testcase_id??"",test_id:o.data?.test_id??e,project_id:o.data?.project_id??""}}async submitFeedback(e,t){let s=t?`Bearer ${t}`:this.authHeader,i={instruction_id:e.instruction_id,test_id:e.test_id,feedback_type:e.feedback_type,mode:e.mode??"human"};e.details&&(i.details=e.details);let r=await fetch(`${this.baseUrl}/atm/v1/generative-feedback`,{method:"POST",headers:{Authorization:s,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)});if(!r.ok)throw new Error(`Submit feedback failed: ${r.status} ${await r.text()}`);return await r.json()}};export{m as a};
|
package/dist/chunk-KJAVR2NX.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as I}from"./chunk-YTG6V347.js";import{a as v}from"./chunk-UNQM5247.js";import{a as S}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-75XK2HKS.js";import{a as l,b as i,i as F}from"./chunk-C44QQJR4.js";import{a as O}from"./chunk-6YGTRKDT.js";import{a as y}from"./chunk-HFQ7T5KT.js";import{e as N}from"./chunk-UR6MHSHU.js";var o=N(O(),1);var e=N(S(),1);function U(r,m,x,u){return{id:r,label:`${m} (${r}) \xB7 ${x} tests`,isActive:r===u}}function q({resolver:r,projectId:m,currentFolderId:x,env:u,onSelect:B,onCancel:C}){let[_,A]=(0,o.useState)([]),[$,b]=(0,o.useState)(!0),[k,w]=(0,o.useState)(null),[f,d]=(0,o.useState)("list"),[L,E]=(0,o.useState)(""),[P,g]=(0,o.useState)(null),p=(0,o.useRef)(!1);return(0,o.useEffect)(()=>{if(!r){w("Login first to browse folders"),b(!1);return}(async()=>{try{let t=r.cached??await r.resolve();if(!t){w("Login first to browse folders"),b(!1);return}let n=v(u),h=(await new y(n.tmsBaseUrl,t.username,t.access_key).listFolders(m)).map(T=>U(T.id,T.name,T.test_cases_count,x));A(h),h.length===0&&(p.current=!0,d("naming"))}catch(t){w(t instanceof Error?t.message:String(t))}finally{b(!1)}})()},[r,m,x,u]),F((t,n)=>{if(f==="naming"){if(n.escape){E(""),g(null),p.current?C():d("list");return}if(n.return){let c=L.trim();if(!c){g("Name cannot be empty");return}if(!m){g("No project selected \u2014 pick a project first");return}g(null),d("creating"),(async()=>{try{if(!r)throw new Error("Not authenticated");let s=r.cached??await r.resolve();if(!s)throw new Error("Not authenticated");let h=v(u),R=await new y(h.tmsBaseUrl,s.username,s.access_key).createFolder(m,c);B(R.id,R.name)}catch(s){g(s instanceof Error?s.message:String(s)),d("naming")}})();return}if(n.backspace||n.delete){E(c=>c.slice(0,-1));return}n.tab||n.ctrl||n.meta||t&&E(c=>c+t)}}),f==="naming"||f==="creating"?(0,e.jsxs)(l,{flexDirection:"column",borderStyle:"round",borderColor:a.primary,paddingX:2,paddingY:1,children:[(0,e.jsx)(i,{color:a.primary,bold:!0,children:"Create new folder"}),p.current&&(0,e.jsx)(l,{marginTop:1,children:(0,e.jsx)(i,{color:a.dim,children:"No folders yet \u2014 let's create one."})}),(0,e.jsxs)(l,{marginTop:1,children:[(0,e.jsx)(i,{color:a.dim,children:"Name: "}),(0,e.jsx)(i,{children:L}),f==="naming"&&(0,e.jsx)(i,{inverse:!0,children:" "})]}),P&&(0,e.jsx)(l,{marginTop:1,children:(0,e.jsx)(i,{color:a.red,children:P})}),f==="creating"&&(0,e.jsx)(l,{marginTop:1,children:(0,e.jsx)(i,{color:a.dim,children:"Creating..."})}),f==="naming"&&(0,e.jsx)(l,{marginTop:1,children:(0,e.jsxs)(i,{color:a.dim,children:["\u21B5 create \xB7 esc ",p.current?"cancel":"back"]})})]}):(0,e.jsx)(I,{title:"Folders",items:_,loading:$,error:k,itemNoun:"folders",onTab:()=>{p.current=!1,d("naming")},extraHint:"tab to create new",onSelect:t=>{let n=t.label.split(" (")[0];B(t.id,n)},onCancel:C})}export{U as a,q as b};
|
package/dist/chunk-OILYCYAD.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as S}from"./chunk-YTG6V347.js";import{a as E}from"./chunk-UNQM5247.js";import{a as R}from"./chunk-HCBYKLMW.js";import{t as s}from"./chunk-75XK2HKS.js";import{a as m,b as i,i as L}from"./chunk-C44QQJR4.js";import{a as O}from"./chunk-6YGTRKDT.js";import{a as w}from"./chunk-HFQ7T5KT.js";import{e as b}from"./chunk-UR6MHSHU.js";var o=b(O(),1);var e=b(R(),1);function U(r,p,u){return{id:r,label:`${p} (${r})`,isActive:r===u}}function q({resolver:r,currentProjectId:p,env:u,onSelect:N,onCancel:y}){let[I,A]=(0,o.useState)([]),[_,h]=(0,o.useState)(!0),[$,j]=(0,o.useState)(null),[l,f]=(0,o.useState)("list"),[v,T]=(0,o.useState)(""),[B,d]=(0,o.useState)(null),g=(0,o.useRef)(!1);return(0,o.useEffect)(()=>{if(!r){j("Login first to browse projects"),h(!1);return}(async()=>{try{let t=r.cached??await r.resolve();if(!t){j("Login first to browse projects"),h(!1);return}let n=E(u),x=(await new w(n.tmsBaseUrl,t.username,t.access_key).listProjects()).map(P=>U(P.project_id,P.name,p));A(x),x.length===0&&(g.current=!0,f("naming"))}catch(t){j(t instanceof Error?t.message:String(t))}finally{h(!1)}})()},[r,p,u]),L((t,n)=>{if(l==="naming"){if(n.escape){T(""),d(null),g.current?y():f("list");return}if(n.return){let c=v.trim();if(!c){d("Name cannot be empty");return}d(null),f("creating"),(async()=>{try{if(!r)throw new Error("Not authenticated");let a=r.cached??await r.resolve();if(!a)throw new Error("Not authenticated");let x=E(u),C=await new w(x.tmsBaseUrl,a.username,a.access_key).createProject(c);N(C.id,C.name)}catch(a){d(a instanceof Error?a.message:String(a)),f("naming")}})();return}if(n.backspace||n.delete){T(c=>c.slice(0,-1));return}n.tab||n.ctrl||n.meta||t&&T(c=>c+t)}}),l==="naming"||l==="creating"?(0,e.jsxs)(m,{flexDirection:"column",borderStyle:"round",borderColor:s.primary,paddingX:2,paddingY:1,children:[(0,e.jsx)(i,{color:s.primary,bold:!0,children:"Create new project"}),g.current&&(0,e.jsx)(m,{marginTop:1,children:(0,e.jsx)(i,{color:s.dim,children:"No projects yet \u2014 let's create one."})}),(0,e.jsxs)(m,{marginTop:1,children:[(0,e.jsx)(i,{color:s.dim,children:"Name: "}),(0,e.jsx)(i,{children:v}),l==="naming"&&(0,e.jsx)(i,{inverse:!0,children:" "})]}),B&&(0,e.jsx)(m,{marginTop:1,children:(0,e.jsx)(i,{color:s.red,children:B})}),l==="creating"&&(0,e.jsx)(m,{marginTop:1,children:(0,e.jsx)(i,{color:s.dim,children:"Creating..."})}),l==="naming"&&(0,e.jsx)(m,{marginTop:1,children:(0,e.jsxs)(i,{color:s.dim,children:["\u21B5 create \xB7 esc ",g.current?"cancel":"back"]})})]}):(0,e.jsx)(S,{title:"Projects",items:I,loading:_,error:$,itemNoun:"projects",onTab:()=>{g.current=!1,f("naming")},extraHint:"tab to create new",onSelect:t=>{let n=t.label.replace(` (${t.id})`,"");N(t.id,n)},onCancel:y})}export{U as a,q as b};
|
package/dist/chunk-PXIG2FKV.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as c}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-75XK2HKS.js";import{a as s,b as u,j as p}from"./chunk-C44QQJR4.js";import{a as T}from"./chunk-6YGTRKDT.js";import{e as l}from"./chunk-UR6MHSHU.js";var x=l(T(),1);function g(n,e){if(!e)return n;let i=n.trim()||e;return`\x1B]8;;${e}\x07${i}\x1B]8;;\x07`}var r=l(c(),1);function h({shareableLink:n,testCaseLink:e,codeExportDir:i,autoExit:m=!0}){let{exit:f}=p();(0,x.useEffect)(()=>{if(!m)return;let t=setTimeout(()=>f(),100);return()=>clearTimeout(t)},[f,m]);let o=[];return n&&o.push({label:"ShareLink",url:n}),e&&o.push({label:"TestCase",url:e}),i&&o.push({label:"CodeExport",url:i,linkUrl:`file://${i}`}),o.length===0?(0,r.jsx)(r.Fragment,{}):(0,r.jsx)(s,{flexDirection:"column",marginTop:1,marginLeft:1,children:o.map(t=>(0,r.jsxs)(s,{flexDirection:"column",marginBottom:1,children:[(0,r.jsxs)(u,{color:a.primary,children:[t.label,":"]}),(0,r.jsx)(u,{color:a.dim,children:g(t.url,t.linkUrl??t.url)})]},t.label))})}export{h as a};
|