@testmuai/kane-cli 0.3.7 → 0.4.1
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-CBF6SP67.js → ChromeProfilePicker-63JS7QX6.js} +1 -1
- package/dist/{CliFeedbackPrompt-P2FJBV3S.js → CliFeedbackPrompt-3SDJ5GZP.js} +1 -1
- package/dist/{CliUploadProgress-B4CVWX62.js → CliUploadProgress-ZSZ7TGCN.js} +1 -1
- package/dist/ConfigView-OOQYCHWM.js +2 -0
- package/dist/FolderPicker-FILMS64I.js +2 -0
- package/dist/HelpView-KBFE4EMP.js +2 -0
- package/dist/{InfoBox-SYT7CVM4.js → InfoBox-QECFIGGW.js} +1 -1
- package/dist/{LinksBox-R3VLKMYS.js → LinksBox-2L2UX4LB.js} +1 -1
- package/dist/{ProfilesView-XKUXSFMQ.js → ProfilesView-72UTQ5PX.js} +1 -1
- package/dist/ProjectPicker-NLEAW232.js +2 -0
- package/dist/{SaveSessionPrompt-WAVXAYCK.js → SaveSessionPrompt-VNJDLJTF.js} +1 -1
- package/dist/SingleShotApp-V2UTGNZO.js +2 -0
- package/dist/SummaryBox-O772FRGO.js +2 -0
- package/dist/TestMdRunView-OVHCLNI7.js +2 -0
- package/dist/WhoamiView-LR2EFCTK.js +2 -0
- package/dist/{changelog-M5VP33UN.js → changelog-VCAUV47V.js} +1 -1
- package/dist/chunk-45VTQLJS.js +6 -0
- package/dist/chunk-4QO6JYHX.js +2 -0
- package/dist/chunk-77SZF4ZU.js +2 -0
- package/dist/chunk-7I2SQ2KP.js +2 -0
- package/dist/chunk-7NDFOI6Z.js +2 -0
- package/dist/chunk-7U4NY37W.js +22 -0
- package/dist/chunk-AGS57DSG.js +17 -0
- package/dist/chunk-C6S4IEBC.js +2 -0
- package/dist/chunk-CMRNCZGV.js +6 -0
- package/dist/chunk-DAVPOA2L.js +2 -0
- package/dist/{chunk-VUIXILBR.js → chunk-EEF6OT52.js} +8 -8
- package/dist/chunk-FGC74Z76.js +2 -0
- package/dist/chunk-FPFOW6BS.js +2 -0
- package/dist/chunk-G6AXOEED.js +2 -0
- package/dist/{chunk-74MJWDIW.js → chunk-H4XK55B3.js} +1 -1
- package/dist/chunk-HN7DVSVI.js +11 -0
- package/dist/chunk-HUOC7DUT.js +2 -0
- package/dist/chunk-IBDWHXNE.js +2 -0
- package/dist/{chunk-QKM3RHSQ.js → chunk-J2KTLZAW.js} +1 -1
- package/dist/{chunk-PQGNWC33.js → chunk-JGXJDTMO.js} +1 -1
- package/dist/chunk-JJERCR2W.js +5 -0
- package/dist/{chunk-L256AYYL.js → chunk-KJEJ7VW5.js} +1 -1
- package/dist/chunk-LAR7I5SR.js +2 -0
- package/dist/chunk-LEXQLAWB.js +60 -0
- package/dist/chunk-LOIRZFV3.js +10 -0
- package/dist/chunk-LPUQ4HWQ.js +2 -0
- package/dist/{chunk-X5CCG35O.js → chunk-OFEPMULV.js} +1 -1
- package/dist/chunk-OIPVMEM7.js +2 -0
- package/dist/chunk-P7ZUISQG.js +2 -0
- package/dist/chunk-RHUD7MK4.js +20 -0
- package/dist/chunk-RJNGCQCL.js +2 -0
- package/dist/chunk-T46Z27UL.js +5 -0
- package/dist/chunk-TCLKNUAL.js +17 -0
- package/dist/chunk-UHFCCGVX.js +2 -0
- package/dist/chunk-UYHNJUPY.js +2 -0
- package/dist/chunk-V3FSESZ4.js +2 -0
- package/dist/chunk-VKG45YIL.js +2 -0
- package/dist/chunk-YAVIOVVP.js +2 -0
- package/dist/chunk-YSSBAIJI.js +8 -0
- package/dist/chunk-Z7AXAKPX.js +9 -0
- package/dist/chunk-ZUIWBVGF.js +14 -0
- package/dist/exit-manager-V2NW7A7U.js +2 -0
- package/dist/generate-headless-XWVVEFQR.js +18 -0
- package/dist/index.js +39 -38
- package/dist/list-commands-Y6A3XR4L.js +2 -0
- package/dist/login-flow-MKAYO6IS.js +2 -0
- package/dist/persist-recorded-session-WBPLUA55.js +3 -0
- package/dist/{pipeline-L3VM7QEX.js → pipeline-L5TDZMLS.js} +1 -1
- package/dist/{recording-banner-Q66Y2UIC.js → recording-banner-Q36WARSF.js} +1 -1
- package/dist/require-project-folder-DBXAG7FB.js +2 -0
- package/dist/resolver-IDCGRPFJ.js +2 -0
- package/dist/run-test-md-H2X6CUIX.js +14 -0
- package/dist/scrollback-6GINSTL2.js +2 -0
- package/dist/tcg-generate-WURS7TXW.js +2 -0
- package/dist/testmd-actions-MQ3N7IS4.js +2 -0
- package/dist/{tms-client-R5ZIAOBH.js → tms-client-NNYXLXZK.js} +1 -1
- package/dist/token-refresh-HHNMHTYX.js +2 -0
- package/dist/validate-basic-VFJZKHOE.js +2 -0
- package/dist/{version-check-WWOS4OEZ.js → version-check-5NUDIYG4.js} +1 -1
- package/package.json +5 -5
- package/dist/ConfigView-PCX3TZNC.js +0 -2
- package/dist/FolderPicker-UTY6XQHP.js +0 -2
- package/dist/HelpView-CDK7II5Q.js +0 -2
- package/dist/ProjectPicker-TWTR6SWR.js +0 -2
- package/dist/SingleShotApp-JH6A65TZ.js +0 -2
- package/dist/SummaryBox-FDNFQYSC.js +0 -2
- package/dist/TestMdRunView-E4UDWIGT.js +0 -2
- package/dist/WhoamiView-YG6SSQTV.js +0 -2
- package/dist/chunk-2SXNPFGD.js +0 -2
- package/dist/chunk-5XTLIGWL.js +0 -2
- package/dist/chunk-7CLUJYMW.js +0 -2
- package/dist/chunk-BDC7IOXP.js +0 -17
- package/dist/chunk-BPF7TDRU.js +0 -2
- package/dist/chunk-EIZXV3UH.js +0 -2
- package/dist/chunk-G7VF5SDK.js +0 -10
- package/dist/chunk-HROFBRMS.js +0 -5
- package/dist/chunk-JHNEE2MB.js +0 -2
- package/dist/chunk-KMTNMUVS.js +0 -8
- package/dist/chunk-KX7K3Y7R.js +0 -5
- package/dist/chunk-LYSEA5FB.js +0 -6
- package/dist/chunk-MJQ2EHSC.js +0 -2
- package/dist/chunk-OQZG3V6B.js +0 -2
- package/dist/chunk-PJMTAAZ7.js +0 -2
- package/dist/chunk-PYU2JPAY.js +0 -2
- package/dist/chunk-QCNKJUPT.js +0 -2
- package/dist/chunk-R7JZMKC7.js +0 -9
- package/dist/chunk-TP6KYKPD.js +0 -2
- package/dist/chunk-U4XV5KUD.js +0 -2
- package/dist/chunk-VS5FTXRZ.js +0 -13
- package/dist/chunk-WZCGEQ6M.js +0 -2
- package/dist/chunk-X7VI7KK3.js +0 -11
- package/dist/chunk-YX3YFXT5.js +0 -2
- package/dist/chunk-ZAUHYR76.js +0 -2
- package/dist/chunk-ZY4BZQHD.js +0 -2
- package/dist/login-flow-3YFO62HA.js +0 -2
- package/dist/persist-recorded-session-LVQLORT4.js +0 -3
- package/dist/resolver-OA35IO7J.js +0 -2
- package/dist/run-test-md-5TNUTTEA.js +0 -64
- package/dist/testmd-actions-O4NTH2OR.js +0 -20
- package/dist/validate-basic-JJOEAFLT.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a,b,c,d,e,f,g,h,i,j,k}from"./chunk-LOIRZFV3.js";import"./chunk-UR6MHSHU.js";export{k as _reset,f as cleanup,e as deregister,b as getRemoteLogger,j as installHandlers,c as isShuttingDown,d as register,h as setInkExit,a as setRemoteLogger,i as setTerminalRestore,g as shutdown};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{a as R,f as H,g as E,h as x,j as A,k as G,l as N,m as S,n as M,o as T,p as $}from"./chunk-45VTQLJS.js";import{d as B}from"./chunk-OFEPMULV.js";import{b}from"./chunk-77SZF4ZU.js";import{c as C}from"./chunk-AGS57DSG.js";import"./chunk-L5LI2JF4.js";import{a as _}from"./chunk-YSSBAIJI.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-H4XK55B3.js";import{d as j,e as D}from"./chunk-LOIRZFV3.js";import{g as q}from"./chunk-TCLKNUAL.js";import"./chunk-LPUQ4HWQ.js";import"./chunk-NLCCBXXV.js";import"./chunk-VE3SUJMA.js";import"./chunk-YAVIOVVP.js";import{a as k}from"./chunk-T46Z27UL.js";import"./chunk-OIPVMEM7.js";import{a as I}from"./chunk-LAR7I5SR.js";import"./chunk-RZ4F3BHX.js";import"./chunk-IBDWHXNE.js";import"./chunk-UR6MHSHU.js";import{join as Q}from"path";async function L(t){let e=t.projectId,r=t.folderId,n=null;if(!e&&t.autoResolve){let a=await t.resolver.resolve();if(!a)throw new E("unauthorized; run `kane-cli login`");let c=await q({creds:t.autoResolve.creds,config:t.autoResolve.config,profile:t.autoResolve.profile,env:t.autoResolve.envName,tmsCreds:{username:a.username,access_key:a.access_key},isLocal:!1,log:t.log});c.status==="ok"&&(e=c.projectId,r=r??c.folderId,c.autoDefaulted&&(n={projectId:c.autoDefaulted.projectId,projectName:c.autoDefaulted.projectName,folderId:c.autoDefaulted.folderId,folderName:c.autoDefaulted.folderName}))}return{baseUrl:`${t.env.testGeneratorBaseUrl}/test-generator/api/v2`,authResolver:t.resolver,projectId:e,folderId:r,suiteName:t.suiteName,autoDefaulted:n,log:t.log}}function K(t){return t.reduce((e,r)=>e+(r.test_cases?.length??0),0)}var h=class{constructor(e=r=>process.stdout.write(r)){this.write=e}emit(e){this.write(JSON.stringify(e)+`
|
|
3
|
+
`)}onStart(e){this.emit({type:"generate_start",request_id:e.requestId,objective_chars:e.objectiveChars,scenario_limit:e.scenarioLimit,per_scenario_limit:e.perScenarioLimit,is_refine:e.isRefine})}onThinking(e){this.emit({type:"generate_thinking",took_ms:e.tookMs})}onProgress(e){this.emit({type:"generate_progress",pct:e})}onSnapshot(e){this.emit({type:"generate_snapshot",scenario_count:e.scenarios.length,case_count:K(e.scenarios),scenarios:e.scenarios})}onClarification(e){this.emit({type:"generate_clarification",text:e})}onChat(e){this.emit({type:"generate_chat",text:e})}onError(e){this.emit({type:"error",message:e})}onSaveResult(e){this.emit({type:"generate_save_result",suite_dir:e.suiteDir,saved:e.saved,fell_back:e.fellBack,...e.warning?{warning:e.warning}:{}})}onDone(e){this.emit({type:"generate_done",request_id:e.requestId,status:e.status,scenario_count:e.scenarioCount,case_count:e.caseCount,refine_hint:e.refineHint,save_hint:e.saveHint,...e.suiteDir?{suite_dir:e.suiteDir}:{}})}onUpdateAvailable(e){this.emit({type:"update_available",current:e.current,latest:e.latest,severity:e.severity})}},y=class{constructor(e=r=>process.stdout.write(r)){this.write=e}onStart(e){let r=e.isRefine?"Refining":"Generating";this.write(`${r} (request ${e.requestId})\u2026
|
|
4
|
+
`)}onThinking(e){let r=e.tookMs?` (${Math.round(e.tookMs/1e3)}s)`:"";this.write(` thinking${r}
|
|
5
|
+
`)}onProgress(e){this.write(` progress ${e}%
|
|
6
|
+
`)}onSnapshot(e){for(let r of e.scenarios){this.write(` \u2022 ${r.title??r.sid??"scenario"}
|
|
7
|
+
`);for(let n of r.test_cases??[])this.write(` - ${n.title??`case ${n.id}`}
|
|
8
|
+
`)}}onClarification(e){this.write(`? ${e}
|
|
9
|
+
`)}onChat(e){this.write(`${e}
|
|
10
|
+
`)}onError(e){this.write(`error: ${e}
|
|
11
|
+
`)}onSaveResult(e){this.write(` saved ${e.saved} test(s) to ${e.suiteDir}${e.fellBack?` (${e.fellBack} prose fallback)`:""}
|
|
12
|
+
`),e.warning&&this.write(` warning: ${e.warning}
|
|
13
|
+
`)}onDone(e){this.write(`\u2713 Generated ${e.scenarioCount} scenarios \xB7 ${e.caseCount} cases (request ${e.requestId})
|
|
14
|
+
`),this.write(` Refine: ${e.refineHint}
|
|
15
|
+
`),this.write(` Save: ${e.saveHint}
|
|
16
|
+
`),e.suiteDir&&this.write(` Saved: ${e.suiteDir}
|
|
17
|
+
`)}onUpdateAvailable(e){this.write(`(update available: ${e.current} \u2192 ${e.latest})
|
|
18
|
+
`)}};import{createHash as J}from"crypto";function Y(t){return J("sha1").update(JSON.stringify({t:t.title,p:t.preconditions,m:t.manual_steps})).digest("hex")}function V(t){let e=[];for(let r of t.scenarios)for(let n of r.test_cases??[])S(n)&&n.manual_steps!=null&&e.push(n);return e}async function X(t,e,r){let n=new Array(t.length),a=0,c=Array.from({length:Math.min(e,t.length)},async()=>{for(;;){let l=a++;if(l>=t.length)return;try{n[l]={ok:!0,value:await r(t[l])}}catch{n[l]={ok:!1}}}});return await Promise.all(c),n}async function P(t,e,r){let n=V(t),a=r.run??(async(i,f)=>{let p=await r.resolveAuth(),U=T({objective:i,model:r.model,sessionId:r.sessionId,auth:p});return $(U,r.spawnOpts,f)}),c=n.map(Y),l=[...new Set(c)],u=new Map;l.forEach(i=>{u.set(i,n[c.indexOf(i)])});let g=l.map(i=>u.get(i)),o=await X(g,r.concurrency??3,i=>a(M(i))),m=new Map;l.forEach((i,f)=>{let p=o[f];p.ok&&m.set(i,p.value)});let d=new Map;n.forEach((i,f)=>{d.set(i.id,m.get(c[f]))});let v=0;for(let i of t.scenarios)for(let f of i.test_cases??[])S(f)&&!d.get(f.id)&&v++;let s=i=>{let f=d.get(i.id);return f?A(f,i):G(i)};return{...await N(t,e,{suiteName:r.suiteName,redirectBareCwd:!1},s),fellBack:v}}function Ce(t,e){let r=!!t.agent||!!t.refine||!!t.save||!e,n=t.agent?"agent":"plain";return{headless:r,mode:n}}function _e(t){return t.refine&&t.save?{error:"use --refine or --save, not both"}:t.save?t.objective?{error:"--save takes no objective; use --refine to add to a request"}:t.req?{op:"save"}:{error:"--save requires --req <id>"}:t.refine?t.req?t.objective?t.out?{error:"--out is only valid with --save"}:{op:"refine"}:{error:"--refine needs a refinement objective"}:{error:"--refine requires --req <id>"}:t.req?{error:"--req requires --refine or --save"}:t.out?{error:"--out is only valid with --save"}:t.objective?{op:"new"}:{error:"provide an objective, or use --refine/--save with --req"}}function W(){return Q(process.cwd(),".testmuai","tests")}var z="tcg-generate-headless";function F(t){return{refineHint:`kane-cli generate "<refinement>" --refine --req ${t}`,saveHint:`kane-cli generate --save --req ${t}`}}function O(t){return t.scenarios.reduce((e,r)=>e+(r.test_cases?.length??0),0)}function Z(t){return t==="completed"?0:t==="stopped"?3:1}async function je(t,e){let r=e.write??(u=>process.stdout.write(u)),n=e.sink??(e.mode==="agent"?new h(r):new y(r)),a,c=null;try{let u=await e.makeClient();a=u.client,c=u.autoDefaulted}catch(u){return n.onError(u.message),2}if(e.mode==="agent"&&c){let{buildAutoDefaultedNdjson:u}=await import("./require-project-folder-DBXAG7FB.js");r(u(c))}try{let u=await(e.checkUpdate??B)();u&&n.onUpdateAvailable(u)}catch{}let l=t.reqId??null;j(z,()=>{l&&a.cancel(l).catch(()=>{})});try{if(t.op==="save"){let s;try{s=(await a.attach(t.reqId)).state}catch(p){return n.onError(p.message),2}l=s.requestId,n.onSnapshot(s);let w=t.outDir??W(),i=await e.materialize(s,w,t.suiteName);n.onSaveResult({suiteDir:i.suiteDir,saved:i.paths.length,fellBack:i.fellBack,warning:i.warning});let f=F(s.requestId);return n.onDone({requestId:s.requestId,status:"completed",scenarioCount:s.scenarios.length,caseCount:O(s),refineHint:f.refineHint,saveHint:f.saveHint,suiteDir:i.suiteDir}),0}let u=t.op==="refine",g,o;try{if(u){let s=await a.attach(t.reqId);if(o=s.state,l=o.requestId,o.error)return n.onError(o.error),2;n.onStart({requestId:o.requestId,objectiveChars:(t.objective??"").length,scenarioLimit:t.scenarioLimit,perScenarioLimit:t.perScenarioLimit,isRefine:!0}),await a.chat(t.reqId,t.objective,void 0),g=s.events}else{let s=await a.start({prompt:t.objective,scenarioLimit:t.scenarioLimit,perScenarioLimit:t.perScenarioLimit,memoryEnhancement:t.memory});o=s.state,l=o.requestId,n.onStart({requestId:o.requestId,objectiveChars:t.objective.length,scenarioLimit:t.scenarioLimit,perScenarioLimit:t.perScenarioLimit,isRefine:!1}),g=s.events}}catch(s){return n.onError(s.message),2}let m="";for await(let s of g){switch(o=H(o,s),s.type){case"thinking_done":n.onThinking({tookMs:s.tookMs});break;case"progress":n.onProgress(s.pct);break;case"clarification":n.onClarification(s.text);break;case"chat":n.onChat(s.text);break;case"error":n.onError(s.message);break;case"done":m=s.status;break;default:break}if(s.type==="done"||s.type!=="thinking"&&o.status&&R(o.status))break}n.onSnapshot(o);let d=m||o.status||"completed",v=F(o.requestId);return n.onDone({requestId:o.requestId,status:d,scenarioCount:o.scenarios.length,caseCount:O(o),refineHint:v.refineHint,saveHint:v.saveHint,suiteDir:void 0}),Z(d)}finally{D(z)}}var ee=()=>{};async function De(t){let e=new k,r=new _,n=e.getActiveProfile()??"default",a=t.env??e.getDefaultEnv()??"prod",c=I(a),l=new C;t.name&&l.setSessionName(t.name);let u=r.load().model,g=async()=>{let m=await b({creds:e,env:a,usernameFlag:t.username,accessKeyFlag:t.accessKey,log:()=>{}}),d=await L({resolver:m.resolver,env:c,log:ee,projectId:t.projectId,folderId:t.folderId,autoResolve:t.projectId?void 0:{creds:e,config:r,profile:n,envName:a}});return{client:x(d),autoDefaulted:d.autoDefaulted??null}},o=async()=>{let m=await b({creds:e,env:a,usernameFlag:t.username,accessKeyFlag:t.accessKey,log:()=>{}});return m.basicAuth?{username:m.basicAuth.username,access_key:m.basicAuth.access_key}:m.token?{auth:{type:"bearer",token:m.token}}:{}};return{mode:t.mode,makeClient:g,materialize:(m,d,v)=>P(m,d,{model:u,sessionId:l.sessionId,resolveAuth:o,spawnOpts:{environment:a},suiteName:v})}}export{De as buildHeadlessDeps,Ce as decideGenerateMode,W as defaultOutDir,_e as resolveGenerateOp,je as runGenerateHeadless};
|