@testmuai/kane-cli 0.3.1 → 0.3.3
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-HGRJNQDM.js → ChromeProfilePicker-J6QIIHIE.js} +1 -1
- package/dist/{CliFeedbackPrompt-JXEPBJ63.js → CliFeedbackPrompt-SEH4MXTF.js} +1 -1
- package/dist/{CliUploadProgress-L5VJUXUC.js → CliUploadProgress-U6QLD76Y.js} +1 -1
- package/dist/{ConfigView-LOEAT3HQ.js → ConfigView-5ZCHVYM2.js} +1 -1
- package/dist/FolderPicker-VYJDEDN7.js +2 -0
- package/dist/HelpView-3ESCWBPB.js +2 -0
- package/dist/{InfoBox-MK7EEGCH.js → InfoBox-OVAOOQHC.js} +1 -1
- package/dist/{LinksBox-RSWQWL6G.js → LinksBox-P3VETMP6.js} +1 -1
- package/dist/{ProfilesView-KCOMTDR5.js → ProfilesView-UBVNEYVE.js} +1 -1
- package/dist/ProjectPicker-NJKUWRET.js +2 -0
- package/dist/{SaveSessionPrompt-RGL3LAEB.js → SaveSessionPrompt-S5RCU5DX.js} +1 -1
- package/dist/SingleShotApp-WOJWOQSV.js +2 -0
- package/dist/{SummaryBox-5YPKUIHB.js → SummaryBox-M4UFKKMD.js} +1 -1
- package/dist/{TestMdRunView-QS7IUANM.js → TestMdRunView-PI433EGP.js} +1 -1
- package/dist/{WhoamiView-GL3HZQ4Q.js → WhoamiView-VJBEYTCF.js} +1 -1
- package/dist/changelog-EFAQANXW.js +4 -0
- package/dist/chunk-4QLJMIBA.js +13 -0
- package/dist/{chunk-ZLQ7YLXO.js → chunk-53K3BK7I.js} +1 -1
- package/dist/chunk-AH4AXJML.js +2 -0
- package/dist/{chunk-NOH6RERF.js → chunk-D4P6GLSX.js} +1 -1
- package/dist/chunk-FAPS5ACQ.js +9 -0
- package/dist/chunk-FSIJOBVB.js +2 -0
- package/dist/chunk-G5HHHYH7.js +2 -0
- package/dist/chunk-GCAHPH2E.js +2 -0
- package/dist/chunk-H33BV5YV.js +2 -0
- package/dist/{chunk-TK7ZJ7YX.js → chunk-HNIH3GSQ.js} +1 -1
- package/dist/{chunk-ZX3PMRMO.js → chunk-IROWNPDG.js} +1 -1
- package/dist/chunk-IXWVTWOR.js +5 -0
- package/dist/{chunk-XP5SMOND.js → chunk-J3SCNSXX.js} +1 -1
- package/dist/chunk-JI7KJKG4.js +2 -0
- package/dist/{chunk-THNGNS36.js → chunk-JPEICMHK.js} +1 -1
- package/dist/chunk-KKZRPFWO.js +2 -0
- package/dist/chunk-L3MOXBKE.js +5 -0
- package/dist/chunk-L5LI2JF4.js +38 -0
- package/dist/chunk-N7YALZKA.js +17 -0
- package/dist/{chunk-QO6VFDI4.js → chunk-NOQKUOEK.js} +1 -1
- package/dist/chunk-OQZG3V6B.js +2 -0
- package/dist/{chunk-KVDOQY2Q.js → chunk-PNQ5YMED.js} +1 -1
- package/dist/{chunk-L4GAZTAQ.js → chunk-RHXWME7G.js} +1 -1
- package/dist/{chunk-VUBZQUP4.js → chunk-RURXFEOD.js} +1 -1
- package/dist/{chunk-34DK2AUH.js → chunk-SR5UDUMJ.js} +1 -1
- package/dist/{chunk-MEB2KLWF.js → chunk-TEH6AVF4.js} +1 -1
- package/dist/{chunk-3ELBJPHQ.js → chunk-TL4SB7MQ.js} +1 -1
- package/dist/{chunk-L4OZRHUT.js → chunk-U4QMSR5Z.js} +1 -1
- package/dist/{chunk-L2HVRWIT.js → chunk-UFNKCPUB.js} +11 -11
- package/dist/chunk-V7QXJKX7.js +3 -0
- package/dist/{chunk-BR2S57O2.js → chunk-WM6GZFTC.js} +1 -1
- package/dist/chunk-X7VI7KK3.js +11 -0
- package/dist/{chunk-RXMOIIQD.js → chunk-XM4H4TJD.js} +1 -1
- package/dist/{chunk-3QD3LA72.js → chunk-YF4OL463.js} +1 -1
- package/dist/{chunk-HJ3CHMEM.js → chunk-YVLFHMUW.js} +1 -1
- package/dist/chunk-YZTCCQHR.js +2 -0
- package/dist/{chunk-XMK4GYI7.js → chunk-ZYVYAIBS.js} +1 -1
- package/dist/controller-client-OMKEBP4B.js +2 -0
- package/dist/index.js +23 -23
- package/dist/logging-AIQHWRNQ.js +2 -0
- package/dist/login-flow-E6WMJ25A.js +2 -0
- package/dist/persist-recorded-session-V5DXMRKC.js +3 -0
- package/dist/pipeline-EUZIM2ZO.js +2 -0
- package/dist/{recording-banner-IDLY2FM6.js → recording-banner-7ZKIORL5.js} +1 -1
- package/dist/resolver-F6HCOZOX.js +2 -0
- package/dist/run-test-md-BQS5SZ7E.js +65 -0
- package/dist/testmd-actions-322GQYAH.js +20 -0
- package/dist/tms-client-XOARLBEP.js +2 -0
- package/dist/{validate-basic-27BIMJ2F.js → validate-basic-XKTSGLFO.js} +1 -1
- package/dist/version-check-LUCKH72U.js +2 -0
- package/package.json +5 -5
- package/dist/FolderPicker-I6JTRNAU.js +0 -2
- package/dist/HelpView-UEUKYHFR.js +0 -2
- package/dist/ProjectPicker-AX6H5MX3.js +0 -2
- package/dist/SingleShotApp-YTFAGVZD.js +0 -2
- package/dist/changelog-CLQ7HCB3.js +0 -4
- package/dist/chunk-BM4COXQU.js +0 -53
- package/dist/chunk-BQKDPI6L.js +0 -2
- package/dist/chunk-DUR6AFYA.js +0 -5
- package/dist/chunk-DXKKUGFG.js +0 -2
- package/dist/chunk-F6HEB4PA.js +0 -2
- package/dist/chunk-FFO5XXKV.js +0 -4
- package/dist/chunk-GTFULP6B.js +0 -13
- package/dist/chunk-K7MSPKEM.js +0 -5
- package/dist/chunk-KULEBWMB.js +0 -2
- package/dist/chunk-L5Y2GUO6.js +0 -2
- package/dist/chunk-NZSHFIZX.js +0 -3
- package/dist/chunk-PWGEMRBD.js +0 -2
- package/dist/chunk-SLA75N5B.js +0 -2
- package/dist/chunk-WAFO4MT4.js +0 -20
- package/dist/chunk-YUUZDFT7.js +0 -2
- package/dist/controller-client-7BIK5FYL.js +0 -2
- package/dist/logging-GG23EW5G.js +0 -2
- package/dist/login-flow-ZUZUZIXD.js +0 -2
- package/dist/persist-recorded-session-ZXKA4H7E.js +0 -5
- package/dist/pipeline-BVH3R7YP.js +0 -2
- package/dist/resolver-QLDOAIXU.js +0 -2
- package/dist/run-test-md-UPAR3DQY.js +0 -54
- package/dist/testmd-actions-YYFFNNIH.js +0 -20
- package/dist/tms-client-CTH4NVFM.js +0 -2
- package/dist/version-check-6DXFF6IN.js +0 -2
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
var o=new Set(["UNABLE_TO_VERIFY_LEAF_SIGNATURE","UNABLE_TO_GET_ISSUER_CERT","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","CERT_SIGNATURE_FAILURE","CERT_NOT_YET_VALID","CERT_HAS_EXPIRED","CERT_REVOKED","CERT_REJECTED","CERT_UNTRUSTED","DEPTH_ZERO_SELF_SIGNED_CERT","SELF_SIGNED_CERT_IN_CHAIN","CERT_CHAIN_TOO_LONG","PATH_LENGTH_EXCEEDED","ERR_TLS_CERT_ALTNAME_INVALID","HOSTNAME_MISMATCH","ERR_TLS_HANDSHAKE_TIMEOUT","ERR_SSL_WRONG_VERSION_NUMBER","ERR_SSL_DECRYPTION_FAILED_OR_BAD_RECORD_MAC"]),E="https://github.com/LambdaTest/kane-cli/blob/main/docs/user-guide/troubleshooting.md";function _(t){let e=t;for(let n=0;e&&n<5;n++){if(e instanceof Error&&"code"in e&&typeof e.code=="string"&&o.has(e.code))return e.code;if(e instanceof Error&&e.cause&&e.cause!==e)e=e.cause;else break}return null}function s(t){try{return typeof t=="string"?new URL(t).host:t instanceof URL?t.host:t instanceof Request?new URL(t.url).host:String(t)}catch{return String(t)}}function R(t,e){return[`TLS certificate verification failed (${t}) when connecting to ${s(e)}.`,"","Node uses its bundled Mozilla CA list and doesn't read the OS keychain by default,","so this usually shows up behind corporate endpoint security or TLS-inspecting proxies","where browsers and curl work but Node doesn't.","","Quickest fix \u2014 tell Node to also trust the system keychain (Node 22.19+ / 24.6+):"," export NODE_USE_SYSTEM_CA=1","","Or point at a CA bundle from your IT/security team:"," export NODE_EXTRA_CA_CERTS=/path/to/corp-ca.pem","",`Then re-run the command. Details: ${E}`].join(`
|
|
3
|
+
`)}async function i(t,e){try{return await fetch(t,e)}catch(n){let r=_(n);throw r?new Error(R(r,t),{cause:n}):n}}export{i as a};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as D,b as A}from"./chunk-
|
|
2
|
+
import{a as D,b as A}from"./chunk-IXWVTWOR.js";import{l as S,m as C,n as P,o as U,p as N}from"./chunk-TL4SB7MQ.js";import{createServer as Oe}from"http";import{randomBytes as He}from"crypto";import{URL as $e}from"url";import Z from"process";import{Buffer as ee}from"buffer";import re from"path";import{fileURLToPath as ke}from"url";import{promisify as Le}from"util";import te from"child_process";import Me,{constants as Ie}from"fs/promises";import Y from"process";import G,{constants as me}from"fs/promises";import j from"process";import le from"os";import L from"fs";import se from"fs";import z from"fs";var E;function ie(){try{return z.statSync("/.dockerenv"),!0}catch{return!1}}function ae(){try{return z.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function B(){return E===void 0&&(E=ie()||ae()),E}var k,ce=()=>{try{return se.statSync("/run/.containerenv"),!0}catch{return!1}};function u(){return k===void 0&&(k=ce()||B()),k}var K=()=>{if(j.platform!=="linux")return!1;if(le.release().toLowerCase().includes("microsoft"))return!u();try{if(L.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft"))return!u()}catch{}return L.existsSync("/proc/sys/fs/binfmt_misc/WSLInterop")||L.existsSync("/run/WSL")?!u():!1},d=j.env.__IS_WSL_TEST__?K:K();var de=(()=>{let e="/mnt/",r;return async function(){if(r)return r;let t="/etc/wsl.conf",n=!1;try{await G.access(t,me.F_OK),n=!0}catch{}if(!n)return e;let o=await G.readFile(t,{encoding:"utf8"}),i=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(o);return i?(r=i.groups.mountPoint.trim(),r=r.endsWith("/")?r:`${r}/`,r):e}})(),fe=async()=>`${await de()}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`,M=async()=>d?fe():`${Y.env.SYSTEMROOT||Y.env.windir||String.raw`C:\Windows`}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`;function f(e,r,t){let n=o=>Object.defineProperty(e,r,{value:o,enumerable:!0,writable:!0});return Object.defineProperty(e,r,{configurable:!0,enumerable:!0,get(){let o=t();return n(o),o},set(o){n(o)}}),e}import{promisify as Pe}from"util";import O from"process";import{execFile as Ae}from"child_process";import{promisify as pe}from"util";import ue from"process";import{execFile as ge}from"child_process";var he=pe(ge);async function I(){if(ue.platform!=="darwin")throw new Error("macOS only");let{stdout:e}=await he("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]),t=/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(e)?.groups.id??"com.apple.Safari";return t==="com.apple.safari"?"com.apple.Safari":t}import we from"process";import{promisify as xe}from"util";import{execFile as ye,execFileSync as cr}from"child_process";var ve=xe(ye);async function X(e,{humanReadableOutput:r=!0,signal:t}={}){if(we.platform!=="darwin")throw new Error("macOS only");let n=r?[]:["-ss"],o={};t&&(o.signal=t);let{stdout:i}=await ve("osascript",["-e",e,n],o);return i.trim()}async function T(e){return X(`tell application "Finder" to set app_path to application file id "${e}" as string
|
|
3
3
|
tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as be}from"util";import{execFile as Se}from"child_process";var Ce=be(Se),y={MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},MSEdgeBHTML:{name:"Edge Beta",id:"com.microsoft.edge.beta"},MSEdgeDHTML:{name:"Edge Dev",id:"com.microsoft.edge.dev"},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},ChromeBHTML:{name:"Chrome Beta",id:"com.google.chrome.beta"},ChromeDHTML:{name:"Chrome Dev",id:"com.google.chrome.dev"},ChromiumHTM:{name:"Chromium",id:"org.chromium.Chromium"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveDHTML:{name:"Brave Dev",id:"com.brave.Browser.dev"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},OperaStable:{name:"Opera",id:"com.operasoftware.Opera"},VivaldiHTM:{name:"Vivaldi",id:"com.vivaldi.Vivaldi"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"}},ur=new Map(Object.entries(y)),F=class extends Error{};async function _(e=Ce){let{stdout:r}=await e("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),t=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(r);if(!t)throw new F(`Cannot find Windows browser in stdout: ${JSON.stringify(r)}`);let{id:n}=t.groups,o=n.lastIndexOf("."),i=n.lastIndexOf("-"),c=o===-1?void 0:n.slice(0,o),a=i===-1?void 0:n.slice(0,i);return y[n]??y[c]??y[a]??{name:n,id:n}}var Ee=Pe(Ae),Be=e=>e.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,r=>r.toUpperCase());async function H(){if(O.platform==="darwin"){let e=await I();return{name:await T(e),id:e}}if(O.platform==="linux"){let{stdout:e}=await Ee("xdg-mime",["query","default","x-scheme-handler/http"]),r=e.trim();return{name:Be(r.replace(/.desktop$/,"").replace("-"," ")),id:r}}if(O.platform==="win32")return _();throw new Error("Only macOS, Linux, and Windows are supported")}var Te=Le(te.execFile),$=re.dirname(ke(import.meta.url)),q=re.join($,"xdg-open"),{platform:w,arch:V}=Z;async function Fe(){let e=await M(),r=String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,t=ee.from(r,"utf16le").toString("base64"),{stdout:n}=await Te(e,["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",t],{encoding:"utf8"}),o=n.trim(),i={ChromeHTML:"com.google.chrome",BraveHTML:"com.brave.Browser",MSEdgeHTM:"com.microsoft.edge",FirefoxURL:"org.mozilla.firefox"};return i[o]?{id:i[o]}:{}}var J=async(e,r)=>{let t;for(let n of e)try{return await r(n)}catch(o){t=o}throw t},v=async e=>{if(e={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...e},Array.isArray(e.app))return J(e.app,a=>v({...e,app:a}));let{name:r,arguments:t=[]}=e.app??{};if(t=[...t],Array.isArray(r))return J(r,a=>v({...e,app:{name:a,arguments:t}}));if(r==="browser"||r==="browserPrivate"){let a={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","com.brave.Browser":"brave","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge"},l={chrome:"--incognito",brave:"--incognito",firefox:"--private-window",edge:"--inPrivate"},s=d?await Fe():await H();if(s.id in a){let m=a[s.id];return r==="browserPrivate"&&t.push(l[m]),v({...e,app:{name:g[m],arguments:t}})}throw new Error(`${s.name} is not supported as a default browser`)}let n,o=[],i={};if(w==="darwin")n="open",e.wait&&o.push("--wait-apps"),e.background&&o.push("--background"),e.newInstance&&o.push("--new"),r&&o.push("-a",r);else if(w==="win32"||d&&!u()&&!r){n=await M(),o.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),d||(i.windowsVerbatimArguments=!0);let a=["Start"];e.wait&&a.push("-Wait"),r?(a.push(`"\`"${r}\`""`),e.target&&t.push(e.target)):e.target&&a.push(`"${e.target}"`),t.length>0&&(t=t.map(l=>`"\`"${l}\`""`),a.push("-ArgumentList",t.join(","))),e.target=ee.from(a.join(" "),"utf16le").toString("base64")}else{if(r)n=r;else{let a=!$||$==="/",l=!1;try{await Me.access(q,Ie.X_OK),l=!0}catch{}n=Z.versions.electron??(w==="android"||a||!l)?"xdg-open":q}t.length>0&&o.push(...t),e.wait||(i.stdio="ignore",i.detached=!0)}w==="darwin"&&t.length>0&&o.push("--args",...t),e.target&&o.push(e.target);let c=te.spawn(n,o,i);return e.wait?new Promise((a,l)=>{c.once("error",l),c.once("close",s=>{if(!e.allowNonzeroExitCode&&s>0){l(new Error(`Exited with code ${s}`));return}a(c)})}):(c.unref(),c)},_e=(e,r)=>{if(typeof e!="string")throw new TypeError("Expected a `target`");return v({...r,target:e})};function Q(e){if(typeof e=="string"||Array.isArray(e))return e;let{[V]:r}=e;if(!r)throw new Error(`${V} is not supported`);return r}function b({[w]:e},{wsl:r}){if(r&&d)return Q(r);if(!e)throw new Error(`${w} is not supported`);return Q(e)}var g={};f(g,"chrome",()=>b({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));f(g,"brave",()=>b({darwin:"brave browser",win32:"brave",linux:["brave-browser","brave"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe",x64:["/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe","/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe"]}}));f(g,"firefox",()=>b({darwin:"firefox",win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));f(g,"edge",()=>b({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));f(g,"browser",()=>"browser");f(g,"browserPrivate",()=>"browserPrivate");var oe=_e;var ne=class{profile;environment;creds;oauth;constructor(r="default",t="prod",n){this.profile=r,this.environment=t,this.creds=n??new D,this.oauth=new A(t)}async login(){let{server:r,port:t}=await this.startCallbackServer(),n=N(t);try{let o=this.creds.loadClient(this.profile,this.environment),i=o?.redirect_uris;(!o||!i?.includes(n))&&(o=await this.oauth.registerClient(n),this.creds.saveClient(this.profile,this.environment,o));let c=o.client_id,[a,l]=A.generatePkce(),s=He(32).toString("hex"),m=this.oauth.buildAuthorizationUrl(c,l,s,n),p=await this.waitForCallback(r,t,m,s);if(!p)throw new Error("Login cancelled or timed out");let h=await this.oauth.exchangeCode(p,c,a,n),x={access_token:h.access_token,refresh_token:h.refresh_token,expires_at:Math.floor(Date.now()/1e3)+h.expires_in,scope:h.scope??"*"};return this.creds.saveCredentials(this.profile,this.environment,x),this.creds.setActiveProfile(this.profile),x}catch(o){throw r.close(),o}}startCallbackServer(){return new Promise((r,t)=>{let n=C,o=()=>{let i=Oe();i.on("error",c=>{c.code==="EADDRINUSE"&&n<P?(n++,o()):t(new Error(`Failed to start callback server: ${c.message}. Ports ${C}-${P} are all in use.`))}),i.listen(n,S,()=>{r({server:i,port:n})})};o()})}waitForCallback(r,t,n,o){return new Promise(i=>{let c=!1,a=setTimeout(()=>l(null),12e4),l=s=>{c||(c=!0,clearTimeout(a),r.close(),i(s))};r.on("request",(s,m)=>{let p=new $e(s.url??"/",`http://${S}:${t}`);if(p.pathname!==U){m.writeHead(404),m.end();return}let h=p.searchParams.get("state"),x=p.searchParams.get("code");if(p.searchParams.get("error")){m.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),m.end(R({state:"error",title:"Login failed",message:"We couldn't complete the sign-in. You can close this tab and try again from your terminal."})),l(null);return}if(h!==o){m.writeHead(400,{"Content-Type":"text/html; charset=utf-8"}),m.end(R({state:"error",title:"Invalid state",message:"The sign-in response didn't match this session. Please return to your terminal and try again."})),l(null);return}m.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),m.end(R({state:"success",title:"You're signed in",message:"Head back to your terminal \u2014 KaneAI is ready when you are.",autoClose:!0})),l(x)}),oe(n).catch(s=>{let m=s instanceof Error?s.message:String(s);process.stderr.write(`[auth] Could not open browser: ${m}
|
|
4
4
|
Please open this URL manually: ${n}
|
|
5
5
|
`)})})}};function R(e){let r=e.state==="success",t=r?"#22c55e":"#ef4444",n=r?"rgba(34, 197, 94, 0.12)":"rgba(239, 68, 68, 0.12)",o=r?'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M5 12.5l4.5 4.5L19 7"/></svg>':'<svg viewBox="0 0 24 24" width="36" height="36" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg>',i=e.autoClose?"<script>setTimeout(function(){try{window.close();}catch(e){}}, 1500);</script>":"";return`<!doctype html>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{c as j,h as _}from"./chunk-AH4AXJML.js";import{a as x}from"./chunk-L5LI2JF4.js";import{mkdirSync as $,writeFileSync as ve}from"fs";import{join as S}from"path";import{createHash as W}from"crypto";function w(e){if(e==null)return null;if(Array.isArray(e))return e.map(w);if(typeof e=="object"){let t={};for(let n of Object.keys(e).sort()){let r=e[n];r!==void 0&&(t[n]=w(r))}return t}return e}function Y(e){if(e.body.kind!=="objective")throw new Error("stepMd5: only objective steps have an md5; @import rows do not");let t={...e.config??{},optional:e.optional??!1},n=JSON.stringify(w(t));return W("md5").update(e.body.text).update(`
|
|
3
|
+
`).update(n).digest("hex")}function R(e){return Y({index:e.trace[e.trace.length-1].stepIndex,heading:e.trace[e.trace.length-1].heading,body:{kind:"objective",text:e.objective},config:e.parsedConfig,headingLine:1,optional:e.optional})}import{writeFileSync as G,mkdirSync as J,readFileSync as q}from"fs";import{dirname as z,basename as O}from"path";function v(e){let t=e.outPath??j(e.sourcePath);J(z(t),{recursive:!0});let n=[];n.push("---"),n.push(`test: ../${O(e.sourcePath)}`),n.push(`status: ${e.overallStatus}`),n.push(`started: ${e.startedISO}`),n.push(`duration_s: ${e.durationS}`),n.push(`session_id: ${e.sessionId}`),n.push("---",""),n.push(`# ${e.title??O(e.sourcePath)} \u2014 Result`,"");for(let r=0;r<e.rootSteps.length;r++){let s=e.rootSteps[r],o=e.outcomes.find(i=>i.rootStepIndex===r+1);if(n.push(U(s,o)),s.body.kind==="objective"&&o?.stepMd5&&n.push(`md5: ${o.stepMd5}`),o?.status==="failed"&&o.reason&&n.push(`Reason: ${o.reason}`),o?.softFailures?.length)for(let i of o.softFailures){let d=i.reason?`: ${i.reason}`:"";n.push(`\u26A0 optional sub-step ${i.subStepIndex} failed${d}`)}s.body.kind==="objective"&&o?.status!=="skipped"&&n.push(s.body.text),n.push("")}return G(t,n.join(`
|
|
4
|
+
`),"utf8"),t}function U(e,t){if(!t)return`## ${e.heading} (no outcome)`;let n=t.duration_s!=null?`${t.duration_s}s`:"\u2014";if(t.status==="skipped")return`## ${e.heading} \u23ED skipped`;let r=t.softFailed?" (optional)":"";if(t.refKind&&t.status==="passed"){let s=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2713 passed (via @${t.refKind} ${t.refLabel} \u2014 ${t.inlinedCount} inlined steps, ${n}${s})`}if(t.refKind&&t.status==="failed"){let s=t.failedSubStepIndex&&t.failedSubStepIndex.length>0?` \u2014 at sub-step ${t.failedSubStepIndex.join(" \u2192 sub-step ")}`:"",o=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2717 failed${r} (via @${t.refKind} ${t.refLabel}${s}, ${n}${o})`}return t.status==="passed"?`## ${e.heading} \u2713 passed (${n})`:`## ${e.heading} \u2717 failed${r} (${n})`}var V=/^##\s+(.+?)\s+(✓ passed|✗ failed(?:\s+\(optional\))?|⏭ skipped)(?:\s+\((.*)\))?\s*$/,Q=/via\s+@\w+\s+(\S+).*?(?:→\s+(\S+))?\s*$/,X=/^md5:\s+([a-f0-9]{32})\s*$/;function Pe(e){let n=q(e,"utf8").split(`
|
|
5
|
+
`),r="passed";if(n[0]?.trim()==="---")for(let o=1;o<n.length&&n[o].trim()!=="---";o++){let i=/^status:\s+(passed|failed|interrupted)\s*$/.exec(n[o]);i&&(r=i[1])}let s=[];for(let o=0;o<n.length;o++){let i=V.exec(n[o]);if(!i)continue;let d=i[1],l=i[2],c=i[3]??"",p=l.startsWith("\u2713")?"passed":l.startsWith("\u23ED")?"skipped":"failed";if(/via\s+@/.test(c)){let g=Q.exec(c),a=g?.[1]??"",u=g?.[2]??null;s.push({kind:"import",heading:d,status:p,md5:null,importPath:a,helperResultRelPath:u})}else{let g=null;for(let a=o+1;a<n.length&&!/^##\s/.test(n[a]);a++){if(n[a].trim()==="")continue;let u=X.exec(n[a]);if(u){g=u[1];break}break}s.push({kind:"objective",heading:d,status:p,md5:g})}}return{overallStatus:r,steps:s}}import{copyFileSync as Z,existsSync as ee,mkdirSync as te,writeFileSync as se}from"fs";import{join as y}from"path";function D(e){for(let t=0;t<e.totalRunDirs;t++){let n=e.runIndex+t,r=y(e.sessionDir,"runs",String(n)),s=y(e.stagingStepDir,"flows",String(t));te(s,{recursive:!0});let o=[y(r,"run-test","actions.ndjson"),y(r,"actions.ndjson")],i=y(s,"actions.ndjson"),d=!1;for(let l of o)if(ee(l)){Z(l,i),d=!0;break}d||se(i,"")}}import{basename as ne,dirname as re,join as oe}from"path";function F(e){let t=ne(e);return t.endsWith("_test.md")?t.slice(0,-8):t.endsWith(".md")?t.slice(0,-3):t}function ie(e){if(e.length<2)throw new Error("helperOutputDirName requires trace length >= 2 (root + at least one helper)");let t=F(e[0].file),n=F(e[e.length-1].file),r=e.slice(0,-1).map(s=>String(s.stepIndex));return`helper-output-${n}-${t}-${r.join("-")}`}function b(e){if(e.length<2)throw new Error("helperOutputDirPath requires trace length >= 2");let t=e[e.length-1].file;return oe(re(t),ie(e))}import{existsSync as M,mkdirSync as ae,rmSync as le,cpSync as de}from"fs";function E(e,t){M(e)&&(M(t)&&le(t,{recursive:!0,force:!0}),ae(t,{recursive:!0}),de(e,t,{recursive:!0}))}import{readFileSync as Se}from"fs";import{join as ye,relative as be}from"path";var f=class extends Error{constructor(n,r,s){super(`[${r}${s!=null?`:${s}`:""}] ${n}`);this.file=r;this.line=s;this.name="TestMdParseError"}},pe=new Set(["username","access_key","oauth","profile","project_id","folder_id"]),L=new Set(["mode","max_steps","timeout","global_context","local_context","variables","session_context","code_export","code_language","target","chrome_profile","cdp_endpoint","ws_endpoint","headless","on_lock_conflict"]),k=new Set(["optional"]),ce=new Set(["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"]),ue=new Set(["mode","on_lock_conflict"]);function T(e,t){let n=t.split(`
|
|
6
|
+
`),{global:r,bodyStartLine:s}=fe(e,n),{title:o,steps:i}=ge(e,n,s);return{path:e,title:o,global:r,steps:i}}function fe(e,t){if(t[0]?.trim()!=="---")return{global:{},bodyStartLine:0};let n=-1;for(let o=1;o<t.length;o++)if(t[o].trim()==="---"){n=o;break}if(n===-1)throw new f("frontmatter is missing closing '---'",e,1);let r=t.slice(1,n).join(`
|
|
7
|
+
`),s;try{s=x(r)??{}}catch(o){throw new f(`invalid YAML in frontmatter: ${o.message}`,e,1)}if(C(e,s,"frontmatter",1),s.on_lock_conflict!==void 0){let o=s.on_lock_conflict;if(o!=="readonly"&&o!=="fail"&&o!=="wait")throw new f(`on_lock_conflict must be 'readonly' | 'fail' | 'wait', got: ${JSON.stringify(o)}`,e,1)}return B(e,s,1),{global:s,bodyStartLine:n+1}}function ge(e,t,n){let r,s=n;for(;s<t.length&&t[s].trim()==="";)s++;let o=s<t.length?/^#\s+(.+?)\s*$/.exec(t[s]):null;o&&(r=o[1],s++);let i=[];for(let l=s;l<t.length;l++)/^##\s/.test(t[l])&&i.push(l);let d=[];for(let l=0;l<i.length;l++){let c=i[l],p=i[l+1]??t.length,m=t[c].replace(/^##\s+/,"").trim(),g=t.slice(c+1,p),{config:a,body:u,optional:h}=me(e,c+1,g);d.push({index:l+1,heading:m,config:a,body:u,headingLine:c+1,optional:h})}return{title:r,steps:d}}function me(e,t,n){let r=0;for(;r<n.length&&n[r].trim()==="";)r++;let s,o=t;if(r<n.length&&/^```yaml\s*$/.test(n[r])){let a=r;o=t+a,r++;let u=-1;for(;r<n.length;){if(/^```\s*$/.test(n[r])){u=r;break}r++}if(u===-1)throw new f("step-config fenced ```yaml block is not closed",e,o);let h=n.slice(a+1,u).join(`
|
|
8
|
+
`);try{s=x(h)??{}}catch(I){throw new f(`invalid YAML in step config: ${I.message}`,e,o)}r=u+1}let i=he(n.slice(r)),d=i.filter(a=>a.trim()!=="");if(d.length>0&&/^@session\s+/.test(d[0].trim()))throw new f("@session is no longer supported (iteration 3); use @import instead",e,t);let l=/^@import\s+(\S.*)$/,p=i.filter(a=>l.test(a.trim())).length>0;if(p&&d.length!==1)throw new f("step body must be exactly one of prose / @import",e,t);let m=!1,g;if(s){if(C(e,s,p?"step config (ref)":"step config (objective)",o),p||B(e,s,o),typeof s.optional=="boolean")m=s.optional;else if(s.optional!==void 0)throw new f(`step config 'optional' must be boolean: got ${typeof s.optional}`,e,o);let a={...s};delete a.optional,Object.keys(a).length>0&&(g=a)}return p?{body:{kind:"import_ref",path:l.exec(d[0].trim())[1].trim()},optional:m}:{body:{kind:"objective",text:i.join(`
|
|
9
|
+
`).trim()},config:g,optional:m}}function he(e){let t=0,n=e.length;for(;t<n&&e[t].trim()==="";)t++;for(;n>t&&e[n-1].trim()==="";)n--;return e.slice(t,n)}function B(e,t,n){let r=t.variables;if(r==null)return;if(typeof r!="object"||Array.isArray(r))throw new f("variables must be an object map",e,n);let s={};for(let[o,i]of Object.entries(r))if(typeof i=="string")s[o]={value:i};else if(i&&typeof i=="object"&&!Array.isArray(i)&&typeof i.value=="string")s[o]=i;else throw new f(`variable '${o}' must be a string or { value: ... } object`,e,n);t.variables=s}function C(e,t,n,r){for(let s of Object.keys(t)){if(pe.has(s))throw new f(`auth/identity keys are CLI-only: ${s}`,e,r);if(n==="frontmatter"){if(k.has(s))throw new f(`step-only key in frontmatter: ${s}`,e,r);if(!L.has(s))throw new f(`unknown config key: ${s}`,e,r)}else if(n==="step config (objective)"){if(!L.has(s)&&!k.has(s))throw new f(`unknown config key: ${s}`,e,r);if(ce.has(s))throw new f(`chrome config is global-only: ${s}`,e,r);if(ue.has(s))throw new f(`'${s}' is run-level and cannot be set per-step`,e,r)}else if(!k.has(s))throw new f(`step config on @import may only contain 'optional': got ${s}`,e,r)}}function A(e){let t=Re(e.resolvedTest,e.runByStep),n=new Map;for(let r of t.values()){let s=n.get(r.helperFile);s||(s=T(r.helperFile,Se(r.helperFile,"utf8")),n.set(r.helperFile,s));let o=[],i=!1;for(let l of s.steps){let c=l.index,p=r.resolvedSteps.filter(a=>a.trace[r.helperDepth].stepIndex===c);if(p.length===0){o.push({rootStepIndex:c,status:"skipped"});continue}let m=p[0].trace[0].stepIndex,g=e.outcomes.find(a=>a.rootStepIndex===m);if(!g){o.push({rootStepIndex:c,status:"skipped"});continue}if(l.body.kind==="objective"){let a=p[0],u=K(a,g);u==="failed"&&(i=!0);let h={rootStepIndex:c,status:u};u==="passed"&&(h.stepMd5=R(a)),o.push(h)}else{let a=!1,u=!1;for(let N of p){let P=K(N,g);P!=="skipped"&&(u=!0),P==="failed"&&(a=!0)}let h=a?"failed":u?"passed":"skipped";h==="failed"&&(i=!0);let I=b(p[0].trace.slice(0,r.helperDepth+2)),H=be(r.finalDir,I);o.push({rootStepIndex:c,status:h,refKind:"import",refLabel:l.body.path,inlinedCount:p.length,helperResultRelPath:`${H}/Result.md`})}}let d=i?"failed":"passed";v({sourcePath:r.helperFile,title:s.title,rootSteps:s.steps,outcomes:o,overallStatus:d,startedISO:e.startedISO,durationS:0,sessionId:e.sessionId,outPath:ye(r.stagingDir,"Result.md")})}}function Re(e,t){let n=new Map;for(let r of e.steps)if(t.has(r.flatIndex))for(let s=1;s<r.trace.length;s++){let o=r.trace.slice(0,s+1),i=b(o),d=n.get(i);d||(d={stagingDir:`${i}.staging`,finalDir:i,helperFile:o[s].file,helperDepth:s,resolvedSteps:[]},n.set(i,d)),d.resolvedSteps.push(r)}return n}function K(e,t){if(t.status==="passed")return"passed";if(t.status==="skipped")return"skipped";let n=e.trace.slice(1).map(o=>o.stepIndex),r=t.failedSubStepIndex??[],s=Math.min(n.length,r.length);for(let o=0;o<s;o++)if(n[o]!==r[o])return n[o]<r[o]?"passed":"skipped";return n.length===r.length?"failed":n.length<r.length?"passed":"skipped"}function et(e){let t=_(e.resolvedTest.rootPath);$(S(t,".internal"),{recursive:!0});let n=new Map;for(let s of e.stepRunRecords)n.set(s.testmdStepIndex,s);for(let s of e.resolvedTest.steps){let o=n.get(s.flatIndex);if(!o)continue;let i=s.trace[s.trace.length-1].stepIndex,d=R(s),l=d.slice(0,8),c;if(s.trace.length===1)c=S(t,".internal","steps",`${i}-${l}`);else{let p=`${b(s.trace)}.staging`;$(S(p,".internal"),{recursive:!0}),c=S(p,".internal","steps",`${i}-${l}`)}if($(c,{recursive:!0}),D({sessionDir:e.sessionDir,runIndex:o.runIndex,totalRunDirs:o.totalRunDirs,stagingStepDir:c}),s.trace.length===1){let p=s.trace[0].stepIndex,m=e.outcomes.find(g=>g.rootStepIndex===p);m&&m.stepMd5==null&&(m.stepMd5=d)}}A({resolvedTest:e.resolvedTest,outcomes:e.outcomes,startedISO:e.startedISO,sessionId:e.sessionId,runByStep:n}),v({sourcePath:e.resolvedTest.rootPath,title:e.resolvedTest.rootTitle,rootSteps:e.resolvedTest.rootSteps,outcomes:e.outcomes,overallStatus:e.overallStatus,startedISO:e.startedISO,durationS:e.durationS,sessionId:e.sessionId,outPath:S(t,"Result.md")});let r={};if(e.commitId&&(r.commit_id=e.commitId),e.tmsIds.testId&&(r.test_id=e.tmsIds.testId),e.tmsIds.testcaseId&&(r.testcase_id=e.tmsIds.testcaseId),e.tmsIds.projectId&&(r.project_id=e.tmsIds.projectId),e.tmsIds.folderId&&(r.folder_id=e.tmsIds.folderId),e.tmsIds.orgId&&(r.org_id=e.tmsIds.orgId),e.tmsIds.sessionName&&(r.session_name=e.tmsIds.sessionName),ve(S(t,".internal","meta.json"),JSON.stringify(r,null,2)+`
|
|
10
|
+
`,"utf8"),e.codeExportDir){let s=e.codeExportLanguage??"python",o=S(t,`playwright-${s}-code`);try{E(e.codeExportDir,o)}catch(i){process.stderr.write(`warn: codegen copy failed: ${i.message}
|
|
11
|
+
`)}}}export{R as a,v as b,Pe as c,b as d,E as e,T as f,et as g};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as p}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-
|
|
2
|
+
import{a as p}from"./chunk-HCBYKLMW.js";import{t as a}from"./chunk-TL4SB7MQ.js";import{b as u}from"./chunk-C44QQJR4.js";import{a as l}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var m=n(l(),1);var o=n(l(),1);function c(r,e){let t=(0,o.useRef)(r);t.current=r,(0,o.useEffect)(()=>{if(e===null)return;let i=setInterval(()=>t.current(),e);return()=>clearInterval(i)},[e])}var s=n(p(),1),f=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function I({active:r=!0}){let[e,t]=(0,m.useState)(0);return c(()=>{t(i=>(i+1)%f.length)},r?80:null),(0,s.jsx)(u,{color:a.purple,children:r?f[e]:"\u25CF"})}export{c as a,I as b};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as A}from"./chunk-YCCUBQY4.js";import{a as _}from"./chunk-
|
|
2
|
+
import{a as A}from"./chunk-YCCUBQY4.js";import{a as _}from"./chunk-JPEICMHK.js";import{a as B}from"./chunk-HNIH3GSQ.js";import{a as R}from"./chunk-YVLFHMUW.js";import{a as P}from"./chunk-HCBYKLMW.js";import{t as c}from"./chunk-TL4SB7MQ.js";import{a as u,b as l}from"./chunk-C44QQJR4.js";import{a as J}from"./chunk-6YGTRKDT.js";import{a as k}from"./chunk-YZTCCQHR.js";import{e as L}from"./chunk-UR6MHSHU.js";var t=L(J(),1);var e=L(P(),1);function X(n,s,y,m){return{id:n,label:`${s} (${n}) \xB7 ${y} tests`,isActive:n===m}}function W({resolver:n,projectId:s,currentFolderId:y,env:m,onSelect:x,onCancel:w}){let[I,M]=(0,t.useState)([]),[$,d]=(0,t.useState)(!0),[O,g]=(0,t.useState)(!1),[U,N]=(0,t.useState)(null),[p,b]=(0,t.useState)("list"),[S,v]=(0,t.useState)(""),[E,f]=(0,t.useState)(null),h=(0,t.useRef)(!1);(0,t.useEffect)(()=>{if(!n){N("Login first to browse folders"),d(!1);return}let o=new AbortController;return d(!0),g(!0),(async()=>{try{let r=n.cached??await n.resolve();if(!r){N("Login first to browse folders"),d(!1),g(!1);return}let a=B(m),T=new k(a.tmsBaseUrl,r.username,r.access_key),F=(async function*(){if(o.signal.aborted)return;let i=await T.listFolders(s);yield{page:1,folders:i,totalLoaded:i.length,done:!0}})();for await(let i of F){if(d(!1),i.totalLoaded===0){h.current=!0,b("naming"),g(!1);return}M(i.folders.map(C=>X(C.id,C.name,C.test_cases_count,y))),i.done&&g(!1)}}catch(r){if(r?.name==="AbortError")return;N(r instanceof Error?r.message:String(r)),d(!1),g(!1)}})(),()=>o.abort()},[n,s,y,m]);let D=(0,t.useCallback)(o=>{let r=o.trim();if(!r){f("Name cannot be empty");return}if(!s){f("No project selected \u2014 pick a project first");return}f(null),b("creating"),(async()=>{try{if(!n)throw new Error("Not authenticated");let a=n.cached??await n.resolve();if(!a)throw new Error("Not authenticated");let T=B(m),i=await new k(T.tmsBaseUrl,a.username,a.access_key).createFolder(s,r);x(i.id,i.name)}catch(a){f(a instanceof Error?a.message:String(a)),b("naming")}})()},[n,s,m,x]),H=(0,t.useCallback)(()=>{v(""),f(null),h.current?w():b("list")},[w]);return p==="naming"||p==="creating"?(0,e.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:c.primary,paddingX:2,paddingY:1,children:[(0,e.jsx)(l,{color:c.primary,bold:!0,children:"Create new folder"}),h.current&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.dim,children:"No folders yet \u2014 let's create one."})}),(0,e.jsxs)(u,{marginTop:1,children:[(0,e.jsx)(l,{color:c.dim,children:"Name: "}),p==="naming"?(0,e.jsx)(A,{value:S,onChange:o=>{v(o),E&&f(null)},onSubmit:D,onCancel:H}):(0,e.jsx)(l,{children:S})]}),E&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.red,children:E})}),p==="creating"&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.dim,children:"Creating..."})}),p==="naming"&&(0,e.jsx)(R,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:h.current?"cancel":"back"})]}):(0,e.jsx)(_,{title:"Folders",items:I,loading:$,loadingMore:O,preserveSelectionById:!0,error:U,itemNoun:"folders",onTab:()=>{h.current=!1,b("naming")},extraHint:"tab to create new",onSelect:o=>{let r=o.label.split(" (")[0];x(o.id,r)},onCancel:w})}export{X as a,W as b};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as s}from"./chunk-HCBYKLMW.js";import{t as n}from"./chunk-
|
|
2
|
+
import{a as s}from"./chunk-HCBYKLMW.js";import{t as n}from"./chunk-TL4SB7MQ.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{b as u}from"./chunk-KKZRPFWO.js";import{a as n}from"./chunk-V7QXJKX7.js";var h=class extends u{constructor(e,t,s){super(e,{username:t,accessKey:s})}async listProjects(e){let t=[],s=!1;for await(let r of this.listProjectsStream({log:e})){if(e&&!s&&r.projects.length>0){let o=r.projects[0];e("info","PROJECT_SAMPLE","Project list sample",{project_id:o.project_id,name:o.name}),s=!0}t.push(...r.projects)}return t}async*listProjectsStream(e){let t=e?.perPage??200,s=e?.maxPages??100,r=e?.signal,o=e?.log,i=0;for(let a=1;a<=s;a++){if(r?.aborted)return;let c=`${this.baseUrl}/v1/projects?page=${a}&per_page=${t}&sort=created_at`,m=AbortSignal.timeout(15e3),b=r?AbortSignal.any([r,m]):m,d;try{d=await n(c,{method:"GET",headers:this.headers(),signal:b})}catch(l){if(r?.aborted)return;if(a===1)throw l;o?.("warn","PROJECTS_STREAM_PARTIAL","stream stopped mid-page",{page:a,total_loaded:i,error:l instanceof Error?l.message:String(l)}),yield{page:a,projects:[],totalLoaded:i,done:!0};return}if(!d.ok){if(a===1)throw new Error(`listProjects ${d.status}: ${await d.text()}`);o?.("warn","PROJECTS_STREAM_PARTIAL","stream stopped on non-OK response",{page:a,status:d.status,total_loaded:i}),yield{page:a,projects:[],totalLoaded:i,done:!0};return}let g=(await d.json()).data??[];i+=g.length;let p=g.length<t;if(yield{page:a,projects:g,totalLoaded:i,done:p},p)return}o?.("warn","PROJECTS_STREAM_MAXPAGES","max pages reached",{max_pages:s,total_loaded:i}),yield{page:s,projects:[],totalLoaded:i,done:!0}}async getDefaultFolder(e){let t=await n(`${this.baseUrl}/v1/projects/${e}/folder/default`,{method:"GET",headers:this.headers()});if(!t.ok)throw new Error(`Get default folder failed: ${t.status} ${await t.text()}`);return(await t.json()).id}async listFolders(e){let t=await n(`${this.baseUrl}/v1/folder/entity/${e}`,{method:"GET",headers:this.headers()});if(!t.ok)throw new Error(`List folders failed: ${t.status} ${await t.text()}`);return(await t.json()).data??[]}async createProject(e){let t=await n(`${this.baseUrl}/v1/projects`,{method:"POST",headers:{...this.headers(),"Content-Type":"application/json"},body:JSON.stringify({name:e,description:"",tags:[],source:"KTM"})});if(!t.ok)throw new Error(`Create project failed: ${t.status} ${await t.text()}`);return{id:(await t.json()).id,name:e}}async createFolder(e,t){let s=await n(`${this.baseUrl}/v1/folder`,{method:"POST",headers:{...this.headers(),"Content-Type":"application/json"},body:JSON.stringify({folders:[{name:t,description:"",entity_id:e,entity_type:"project"}]})});if(!s.ok)throw new Error(`Create folder failed: ${s.status} ${await s.text()}`);return{id:(await s.json()).id,name:t}}async createAtmTest(e,t){let s=t?`Bearer ${t}`:this.authHeader,r=await n(`${this.baseUrl}/kane-cli/v1/test`,{method:"POST",headers:{Authorization:s,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(e)});if(!r.ok)throw new Error(`Create ATM test failed: ${r.status} ${await r.text()}`);let o=await r.json();if(!o.test_id)throw new Error("Create ATM test returned no test_id");return o.test_id}async endTest(e,t,s){let r=s?`Bearer ${s}`:this.authHeader,o=new URLSearchParams({commit_id:t.commit_id,time_taken:String(t.time_taken),steps_count:String(t.steps_count),commit_message:t.commit_message}),i={};t.objectives&&t.objectives.length>0&&(i.objectives=t.objectives);let a=await n(`${this.baseUrl}/kane-cli/v1/test/${e}?${o.toString()}`,{method:"DELETE",headers:{Authorization:r,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)});if(!a.ok)throw new Error(`End test failed: ${a.status} ${await a.text()}`);let c=await a.json();return{testcase_id:c.data?.testcase_id??"",test_id:c.data?.test_id??e,project_id:c.data?.project_id??""}}async submitFeedback(e,t){let s=t?`Bearer ${t}`:this.authHeader,r={instruction_id:e.instruction_id,test_id:e.test_id,feedback_type:e.feedback_type,mode:e.mode??"human"};e.details&&(r.details=e.details);let o=await n(`${this.baseUrl}/atm/v1/generative-feedback`,{method:"POST",headers:{Authorization:s,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(r)});if(!o.ok)throw new Error(`Submit feedback failed: ${o.status} ${await o.text()}`);return await o.json()}};export{h as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as B}from"./chunk-S3DAAAE5.js";import{a as h}from"./chunk-
|
|
2
|
+
import{b as B}from"./chunk-S3DAAAE5.js";import{a as h}from"./chunk-IROWNPDG.js";import{a as w}from"./chunk-HCBYKLMW.js";import{t as s}from"./chunk-TL4SB7MQ.js";import{a as x,b as t,c as g,i as P,j as S}from"./chunk-C44QQJR4.js";import{a as C}from"./chunk-6YGTRKDT.js";import{e as T}from"./chunk-UR6MHSHU.js";var o=T(C(),1);var e=T(w(),1);function D({defaultName:i,onSubmit:c}){let[d,p]=(0,o.useState)("confirm"),[m,a]=(0,o.useState)(""),[f,u]=(0,o.useState)(null),l=(0,o.useMemo)(()=>m.trim()||i,[m,i]);return P((n,r)=>{if(d==="confirm"){if(n==="y"||n==="Y"){a(i),p("name");return}if(n==="n"||n==="N"||r.escape||r.ctrl&&n==="c"){c(null);return}if(r.return){c(i);return}return}if(r.return){if(!B(l)){u(`name "${l}" is invalid; allowed: letters, digits, underscore, hyphen`);return}c(l);return}if(r.escape||r.ctrl&&n==="c"){c(null);return}if(r.backspace||r.delete){a(v=>v.slice(0,-1)),u(null);return}n&&!r.ctrl&&!r.meta&&(a(v=>v+n),u(null))}),d==="confirm"?(0,e.jsx)(h,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsx)(t,{color:s.cyan,children:i})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[(0,e.jsx)(t,{color:s.dimmed,children:"enter \u2014 save with this name"}),(0,e.jsx)(t,{color:s.dimmed,children:"Y \u2014 edit name"}),(0,e.jsx)(t,{color:s.dimmed,children:"N/esc \u2014 discard session"})]})}):(0,e.jsx)(h,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsxs)(x,{children:[(0,e.jsx)(t,{color:s.cyan,children:m}),(0,e.jsx)(t,{inverse:!0,children:" "})]})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[f&&(0,e.jsx)(t,{color:s.red,children:f}),(0,e.jsx)(t,{color:s.dimmed,children:"enter \u2014 save \xB7 esc \u2014 discard"})]})})}function V(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}async function Y(i){return new Promise(c=>{function d(){let{exit:a}=S(),[f,u]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{if(f){let l=setTimeout(()=>a(),50);return()=>clearTimeout(l)}},[f,a]),(0,e.jsx)(D,{defaultName:i,onSubmit:l=>{c(l),u(!0)}})}let{waitUntilExit:p,unmount:m}=g((0,e.jsx)(d,{}),{stdout:process.stderr,exitOnCtrlC:!1});p().then(()=>{try{m()}catch{}})})}export{D as a,V as b,Y as c};
|