@testmuai/kane-cli 0.8.4 → 0.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ChatSurface-H26E7DM6.js → ChatSurface-HAIVTS4J.js} +1 -1
- package/dist/{ChromeProfilePicker-USUPENU2.js → ChromeProfilePicker-5ILSVC2K.js} +1 -1
- package/dist/{CliFeedbackPrompt-ZIAZ2M2U.js → CliFeedbackPrompt-LFKEYMKP.js} +1 -1
- package/dist/{CliUploadProgress-LEOJTXHT.js → CliUploadProgress-Y7ITY2I7.js} +1 -1
- package/dist/{ConfigView-JBIQPG7O.js → ConfigView-OECNNCXC.js} +1 -1
- package/dist/{EvidenceViewOffer-IWQ6Q2CI.js → EvidenceViewOffer-FODRAS6Z.js} +1 -1
- package/dist/FolderPicker-5U3RHHBE.js +2 -0
- package/dist/{InfoBox-ORHNXPET.js → InfoBox-HWMHNWPM.js} +1 -1
- package/dist/{LinksBox-6SKDUB5T.js → LinksBox-TAGYCFFO.js} +1 -1
- package/dist/{ProfilesView-Y5GTLDJY.js → ProfilesView-QJBR3RCM.js} +1 -1
- package/dist/{ProjectPicker-WDCMKWNQ.js → ProjectPicker-PP75ILZU.js} +1 -1
- package/dist/{SaveSessionPrompt-I4KLFESC.js → SaveSessionPrompt-UCRET3II.js} +1 -1
- package/dist/SingleShotApp-XWOPGLKZ.js +2 -0
- package/dist/{SummaryBox-QWKW5FHK.js → SummaryBox-SLM3OFS2.js} +1 -1
- package/dist/TestMdRunView-6BY3IUH5.js +2 -0
- package/dist/{TestrunEvidenceTable-ENJJ2GIW.js → TestrunEvidenceTable-PTIBYAXO.js} +1 -1
- package/dist/{WhoamiView-H6M536AY.js → WhoamiView-WPHMNYUV.js} +1 -1
- package/dist/{app-download-PSRQWDVW.js → app-download-GYQYLGT3.js} +1 -1
- package/dist/{auth-JVH2EHK2.js → auth-3DLNMZC2.js} +1 -1
- package/dist/{binary-YTQJP2FG.js → binary-XJ3RF3VO.js} +1 -1
- package/dist/{bind-OUXCFLSE.js → bind-2N4Q6YKH.js} +2 -2
- package/dist/{bootstrap-3NEI7O6I.js → bootstrap-5IHKW5SE.js} +1 -1
- package/dist/bridge-LOBTHY3P.js +2 -0
- package/dist/{changelog-WDKG4WCV.js → changelog-WCCTI47M.js} +1 -1
- package/dist/{chunk-BXRZGISN.js → chunk-2K2BX23I.js} +1 -1
- package/dist/{chunk-W75AVBFG.js → chunk-2WSOPZJU.js} +1 -1
- package/dist/{chunk-TXH2KG7U.js → chunk-35EUIBYJ.js} +1 -1
- package/dist/{chunk-NEHX45NQ.js → chunk-3AJ3QSF5.js} +11 -11
- package/dist/{chunk-66RJPH73.js → chunk-4D3DNCQY.js} +1 -1
- package/dist/{chunk-XHNPNYJP.js → chunk-4UMQDH52.js} +1 -1
- package/dist/{chunk-5HYXTFGB.js → chunk-5NSYHRDN.js} +1 -1
- package/dist/{chunk-BWSL2KQQ.js → chunk-5S46D5AJ.js} +1 -1
- package/dist/{chunk-PWFZZWYU.js → chunk-66BSTNLD.js} +1 -1
- package/dist/{chunk-UTIGOLON.js → chunk-6BTZ2Q4P.js} +1 -1
- package/dist/{chunk-BDUCWZYO.js → chunk-6DTWVLSJ.js} +1 -1
- package/dist/{chunk-NDAAY2RL.js → chunk-7JUUNZQP.js} +1 -1
- package/dist/chunk-7PADFQ5S.js +71 -0
- package/dist/{chunk-RN3YHD4S.js → chunk-AJPLHW4T.js} +1 -1
- package/dist/{chunk-DYGUHGZ6.js → chunk-AMULIFC5.js} +1 -1
- package/dist/{chunk-A6TJUSOS.js → chunk-BAL7E4OH.js} +1 -1
- package/dist/{chunk-7HXZZ3VA.js → chunk-BG66IAO6.js} +1 -1
- package/dist/{chunk-QBF5FJVL.js → chunk-BJHII5SD.js} +1 -1
- package/dist/chunk-BVKDHHPK.js +5 -0
- package/dist/chunk-CCUGKBIH.js +2 -0
- package/dist/{chunk-UONRTWLU.js → chunk-CGYSFLM2.js} +1 -1
- package/dist/{chunk-7LP4X25A.js → chunk-CNNJ4U2L.js} +1 -1
- package/dist/{chunk-QWDFFEEJ.js → chunk-DCUT3GJA.js} +1 -1
- package/dist/{chunk-2HT3RYKJ.js → chunk-DJ7T7BMV.js} +1 -1
- package/dist/{chunk-PRLTUEKP.js → chunk-E3BXNQYE.js} +1 -1
- package/dist/{chunk-U55NUF4E.js → chunk-EFRJNPBZ.js} +2 -2
- package/dist/chunk-EKCGZXZE.js +2 -0
- package/dist/{chunk-BGMI5PH4.js → chunk-FDWEL5HR.js} +1 -1
- package/dist/chunk-FRSHEJUS.js +2 -0
- package/dist/{chunk-SFXQFUM6.js → chunk-FTZPWXF7.js} +1 -1
- package/dist/{chunk-62WYSEAT.js → chunk-G4AFOZKU.js} +1 -1
- package/dist/{chunk-L4EDLDLZ.js → chunk-GYF4CH62.js} +2 -2
- package/dist/{chunk-DWWAIXVZ.js → chunk-GZ4X53ZA.js} +2 -2
- package/dist/{chunk-PQWSHTSH.js → chunk-HFCDUFV3.js} +1 -1
- package/dist/{chunk-YB73T7QH.js → chunk-HQWLSA5M.js} +1 -1
- package/dist/{chunk-KAMJ7U4M.js → chunk-JJWQUQJ2.js} +1 -1
- package/dist/{chunk-OVLCJ2VX.js → chunk-JN2DP4R2.js} +1 -1
- package/dist/{chunk-VYYTENPY.js → chunk-JRQKUQWL.js} +1 -1
- package/dist/{chunk-IXTFWIQ6.js → chunk-K2QV7FGP.js} +1 -1
- package/dist/{chunk-GJED4QGF.js → chunk-K7UYWAZH.js} +1 -1
- package/dist/{chunk-55NSNWM5.js → chunk-KBMQGNKO.js} +9 -9
- package/dist/{chunk-35L2QXWP.js → chunk-KWKUMBHS.js} +2 -2
- package/dist/{chunk-52GWEKFD.js → chunk-KX2GOJ4C.js} +2 -2
- package/dist/{chunk-BCCWICSS.js → chunk-LA2EMSHE.js} +1 -1
- package/dist/{chunk-N7N222VC.js → chunk-M335FQYJ.js} +2 -2
- package/dist/{chunk-HHHNQW5Z.js → chunk-MJ56GUKS.js} +1 -1
- package/dist/{chunk-NEAMQMYH.js → chunk-MUGMUKSZ.js} +1 -1
- package/dist/{chunk-HXSEA7JS.js → chunk-NHOHQBIF.js} +1 -1
- package/dist/{chunk-KUYJ6FEN.js → chunk-NLECZCMZ.js} +1 -1
- package/dist/{chunk-7HPEHQHH.js → chunk-NYSMQ7UY.js} +1 -1
- package/dist/{chunk-DXJKMZEC.js → chunk-O3AY6JHJ.js} +1 -1
- package/dist/{chunk-OSB32HJE.js → chunk-OWTEHU6B.js} +1 -1
- package/dist/{chunk-A3PGLDQY.js → chunk-PB3GADUD.js} +1 -1
- package/dist/{chunk-YBX2SQ5R.js → chunk-PCOSE5SW.js} +2 -2
- package/dist/{chunk-ZI6W65E3.js → chunk-PEI2566X.js} +1 -1
- package/dist/{chunk-PSWB3BWQ.js → chunk-PQUMOFT5.js} +1 -1
- package/dist/chunk-PUFJEU46.js +2 -0
- package/dist/{chunk-4CHO7SAT.js → chunk-PWYEOBXV.js} +1 -1
- package/dist/{chunk-VBCIDWSK.js → chunk-Q6JHBDW2.js} +1 -1
- package/dist/{chunk-JR46A564.js → chunk-R7OGNE3W.js} +1 -1
- package/dist/{chunk-A4XJUWAQ.js → chunk-RY6TFVAX.js} +1 -1
- package/dist/{chunk-ZK57J37M.js → chunk-T3XDMR5B.js} +1 -1
- package/dist/{chunk-N5JHMCRU.js → chunk-T5LKD2OB.js} +1 -1
- package/dist/{chunk-L77ZOU4N.js → chunk-TCK3QMKY.js} +1 -1
- package/dist/{chunk-GSYJUHRK.js → chunk-TJZMYU2W.js} +1 -1
- package/dist/{chunk-DZJQNL66.js → chunk-UX3KPYTI.js} +1 -1
- package/dist/{chunk-BSCMUMSV.js → chunk-VT2XNEOD.js} +3 -3
- package/dist/{chunk-J27JJWMT.js → chunk-W27F2NWA.js} +1 -1
- package/dist/{chunk-JT7I6OST.js → chunk-WLOGO44E.js} +1 -1
- package/dist/{chunk-6CR2HTIM.js → chunk-WYST42WI.js} +1 -1
- package/dist/{chunk-SIH6JG7S.js → chunk-YFLKS4UV.js} +3 -3
- package/dist/{chunk-JCILRPOM.js → chunk-Z2T7E5HM.js} +2 -2
- package/dist/{chunk-JRADU3PO.js → chunk-ZFZ7YXEU.js} +1 -1
- package/dist/{chunk-7VTYRTEJ.js → chunk-ZIRMSWKS.js} +1 -1
- package/dist/{config-SFM45WCV.js → config-OKTAPFOT.js} +1 -1
- package/dist/{credentials-3CENDBPH.js → credentials-SO3DSQEM.js} +1 -1
- package/dist/{deps-bundle-P37ZJDXC.js → deps-bundle-FRM65BQO.js} +1 -1
- package/dist/{deps-resolve-VSICFRWU.js → deps-resolve-RPZORKUN.js} +1 -1
- package/dist/{dispatch-HDGQAEWN.js → dispatch-OZRMWY25.js} +1 -1
- package/dist/doctor-VWGEQYBB.js +2 -0
- package/dist/{evidence-ABYJOIV2.js → evidence-5AUZMKE3.js} +1 -1
- package/dist/{evolve-cmd-MROTNJIV.js → evolve-cmd-TWYJL4EG.js} +1 -1
- package/dist/{extract-bind-LBZMEDUK.js → extract-bind-EW7XUDLQ.js} +2 -2
- package/dist/{extract-cmd-K4KBPMB7.js → extract-cmd-HOVGMBGM.js} +1 -1
- package/dist/{generate-headless-EBMWSLTR.js → generate-headless-FYTJULPG.js} +2 -2
- package/dist/index.js +163 -145
- package/dist/{ingest-cmd-ULEWNGCI.js → ingest-cmd-RJLTFNMN.js} +1 -1
- package/dist/install-46S4VOZ4.js +2 -0
- package/dist/{interactive-bind-IYAJN45L.js → interactive-bind-PSEYAL54.js} +3 -3
- package/dist/{list-commands-YPBJNGCE.js → list-commands-2SVSEAP6.js} +1 -1
- package/dist/login-flow-U43QVFPH.js +2 -0
- package/dist/{mobile-prompts-LHUYRSV7.js → mobile-prompts-T6HZ2YLY.js} +1 -1
- package/dist/{persist-recorded-session-KCXYXSQG.js → persist-recorded-session-O2NCYTSD.js} +1 -1
- package/dist/pipeline-BHEA7ODT.js +2 -0
- package/dist/prepare-target-27UN4KNO.js +2 -0
- package/dist/{reconcile-cmd-TSQDYEUT.js → reconcile-cmd-FU3JIHTO.js} +1 -1
- package/dist/{reconcile-deps-ETMGIQNM.js → reconcile-deps-SUKZA2FL.js} +2 -2
- package/dist/{reconcile-engine-TLFTAOTZ.js → reconcile-engine-ILL4M3NW.js} +1 -1
- package/dist/{recording-banner-ACOLKL4K.js → recording-banner-5VXVKCV4.js} +1 -1
- package/dist/{registry-3Q6PNWCK.js → registry-BKV3EDTK.js} +1 -1
- package/dist/replay-policy-CVQ6OJX5.js +2 -0
- package/dist/{require-project-folder-5KWTJAXN.js → require-project-folder-2IO6IX5W.js} +1 -1
- package/dist/{resolve-run-intent-L2I7G55O.js → resolve-run-intent-ZML3HKG7.js} +1 -1
- package/dist/{resolver-NRU6HGTL.js → resolver-CBTWTZZR.js} +1 -1
- package/dist/{run-RHLRZCV5.js → run-EXIYK6PU.js} +1 -1
- package/dist/{run-T53Z5TCY.js → run-R7GND73C.js} +1 -1
- package/dist/{run-test-md-JYDYT3XF.js → run-test-md-664ASWRQ.js} +2 -2
- package/dist/{skill-installer-NWF53JAB.js → skill-installer-QLQK4JJE.js} +1 -1
- package/dist/{spawner-LKYUMXSO.js → spawner-ANLF7OX3.js} +1 -1
- package/dist/tcg-generate-VBC5ODDI.js +2 -0
- package/dist/{testmd-actions-CRRUXYOP.js → testmd-actions-QZD3N4EH.js} +1 -1
- package/dist/token-refresh-PIUX5OFA.js +2 -0
- package/dist/{validate-basic-X2XPEBFD.js → validate-basic-D7IJUFUQ.js} +1 -1
- package/dist/{verdicts-J2SDU4MW.js → verdicts-EO5TZ5BW.js} +1 -1
- package/dist/{version-check-DAWGRSJ5.js → version-check-JRLPWQ6T.js} +1 -1
- package/dist/{walk-session-D6TCM33V.js → walk-session-IODOH7QU.js} +1 -1
- package/dist/{with-telemetry-RXLIXUMR.js → with-telemetry-ASNQQBGP.js} +1 -1
- package/package.json +11 -11
- package/dist/FolderPicker-G4DT3OEZ.js +0 -2
- package/dist/HelpView-I27LWSL5.js +0 -2
- package/dist/SingleShotApp-Y77CNTSO.js +0 -2
- package/dist/TestMdRunView-PPM6LD3I.js +0 -2
- package/dist/bridge-AFQTFWCU.js +0 -2
- package/dist/chunk-2PH43Z3P.js +0 -69
- package/dist/chunk-3JLWPEQW.js +0 -2
- package/dist/chunk-C5UNZ6ZY.js +0 -2
- package/dist/chunk-EQSE6NIB.js +0 -5
- package/dist/chunk-PH22FRN5.js +0 -2
- package/dist/chunk-QDIZQ3ZF.js +0 -2
- package/dist/doctor-CPMWU5TL.js +0 -2
- package/dist/install-YDH2CORO.js +0 -2
- package/dist/login-flow-W5SAB7NN.js +0 -2
- package/dist/pipeline-ELIXCTFZ.js +0 -2
- package/dist/prepare-target-OU2DQXSW.js +0 -2
- package/dist/replay-policy-6USQBT3E.js +0 -2
- package/dist/tcg-generate-2PHA7VNL.js +0 -2
- package/dist/token-refresh-XKXPM6H3.js +0 -2
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as lt,g as pt}from"./chunk-5DBK6QNS.js";import{b as pe,c as B,d as fe,e as me}from"./chunk-
|
|
3
|
-
`),await Z.rename(s,i)}async function Zt(t){try{let e=await ht(t);return e&&Array.isArray(e.executions)?e.executions:[]}catch{return[]}}async function Qt(t,e,r=process.cwd()){let n=await de(t,r);if(!n){let s=`evidence: no pack found for "${t}"`;return e.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:t})):console.error(s),2}let i=await N(n,e.profile??"L1");return e.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${e.profile??"L1"}, status ${i.status})`),i.valid?0:1}function De(t){let e=[];for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)e.push(
|
|
4
|
-
`;or(wt(t,"diagnostics.ndjson"),s)}catch{}}import{promises as I}from"fs";import{dirname as mr,join as C}from"path";import{statSync as sr}from"fs";import{promises as Fe}from"fs";import{basename as ar,join as cr}from"path";var dr=1e6,ur=2e6;function lr(){return Je.map(t=>Xe(t))}function yt(t=lr()){return t.map(e=>{let r=0;try{r=sr(e).size}catch{}return{path:e,offset:r}})}var pr=/\x1b\[[0-9;]*[A-Za-z]/g;async function fr(t,e,r){let n;try{n=await Fe.open(t,"r");let i=(await n.stat()).size,s=e<=i?e:0,o=i-s;if(o<=0)return null;let a=o>r?i-r:s,c=Buffer.alloc(Math.min(o,r));return await n.read(c,0,c.length,a),c.toString("utf8")}catch{return null}finally{await n?.close().catch(()=>{})}}async function xt(t,e){let r=e.caps?.stderr??dr,n=e.caps?.appium??ur,i=[];e.runnerStderrPath&&i.push({src:e.runnerStderrPath,from:0,cap:r});for(let s of e.appiumMarks??[])i.push({src:s.path,from:s.offset,cap:n});for(let s of i){let o=await fr(s.src,s.from,s.cap);if(o===null)continue;let a=o.replace(pr,"");if(a!=="")try{await Fe.mkdir(t,{recursive:!0}),await Fe.writeFile(cr(t,ar(s.src)),a)}catch{}}}async function gr(t){try{let e=C(t,"tests"),r=await I.readdir(e).catch(()=>[]);for(let n of r){let i=C(e,n,"steps"),s=await I.readdir(i).catch(()=>[]);for(let o of s){let a=await I.readFile(C(i,o,"failure.yaml"),"utf8").catch(()=>null);if(a!=null)try{let c=E(a);if(c&&typeof c=="object"&&c.triage)return!0}catch{}}}}catch{}return!1}async function _t(t,e,r,n={}){let i=C(t,"tests",e,"logs");if(r)try{await I.mkdir(i,{recursive:!0}),await I.copyFile(r,C(i,"tui.log"))}catch{}await xt(i,{runnerStderrPath:r?C(mr(r),"runner-stderr.log"):void 0,appiumMarks:n.appiumMarks});let s=await Ce(i);if(!s.length&&n.requireRealLog)throw new Error(`evidence test ${e} has no real log to declare`);s.length&&await Pe(t,e,Ee(s))}async function Oe(t){let e=t.cwd??process.cwd(),r=t.packDir??h(t.executionId,e);if(!t.saved&&!t.packDir)return await be(t.executionId,e),{sealed:!1};await _t(r,t.testId,t.tuiLogPath,{requireRealLog:t.requireRealLog,appiumMarks:t.appiumMarks});let n=C(r,"run.yaml"),i=E(await I.readFile(n,"utf8"));i.environment={...i.environment??{},saved:t.saved,run_kind:t.runKind},await I.writeFile(n,v(i,{lineWidth:-1}));let s=await I.open(n,"r+");try{await s.sync()}finally{await s.close()}let o=await gr(r);await T(r,new Date().toISOString());let a;try{let l=await N(r,"L1");a=l.valid;let d=(l.diagnostics??[]).filter(p=>String(p?.code??"").includes("failure.status_disagrees"));if(d.length>0)if(t.expectStatusDisagrees||o){let p=t.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${d.length} status_disagrees advisory(ies) \u2014 ${p}`)}else console.warn(`evidence: ${d.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,d);if(!l.valid){console.warn(`evidence: sealed pack ${t.executionId} failed L1 validation`,l.diagnostics);let p=String(l.diagnostics?.[0]?.code??"");Le($e(r,t.testId),"warn","EVIDENCE_INVALID",{execution_id:t.executionId,first_code:p,surface:t.surface??"testmd"},t.log)}}catch(l){console.warn(`evidence: validation error for ${t.executionId}`,l)}let c;if(t.saved&&t.packDir)try{c=await rt(r,t.executionId,e)}catch(l){console.warn(`evidence: store install failed for ${t.executionId}`,l)}if(t.outputStemDir)try{await Ae(t.outputStemDir,{execution_id:t.executionId,run_kind:t.runKind,status:t.verdict,valid:a,at:new Date().toISOString()})}catch(l){console.warn(`evidence: execution-pointer append failed for ${t.executionId} (pack is sealed)`,l)}return{sealed:!0,valid:a,storePath:c}}import{release as Et}from"os";import{execFileSync as hr}from"child_process";import{promises as kt}from"fs";import{join as bt}from"path";function St(t){return t.replace(/\([^)]*\)/g," ").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||void 0}async function It(t){try{let e=bt(t,"steps"),r=(await kt.readdir(e,{withFileTypes:!0})).filter(n=>n.isDirectory()).map(n=>n.name).sort((n,i)=>(parseInt(n,10)||0)-(parseInt(i,10)||0));for(let n of r)try{let i=await kt.readFile(bt(e,n,"step.json"),"utf8"),o=JSON.parse(i).basis?.window;if(Array.isArray(o)&&o.length===2&&Number.isFinite(Number(o[0]))&&Number.isFinite(Number(o[1]))&&Number(o[0])>0&&Number(o[1])>0)return`${Math.round(Number(o[0]))}x${Math.round(Number(o[1]))}`}catch{}return}catch{return}}var Rt=!1,Q;function vr(){if(!Rt)if(Rt=!0,process.platform==="darwin")try{Q=hr("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{Q=Et()||void 0}else Q=Et()||void 0;return Q}function Me(t){let e={os:se(process.platform)},r=vr();if(r&&(e.os_version=r),t.cdpBrowser){let i=/^([A-Za-z]+)\/(\d+)/.exec(t.cdpBrowser);i&&(e.browser=i[1].replace(/^Headless/,""),e.browser_version=i[2])}t.resolution&&(e.resolution=t.resolution);let n=Qe(e,t.runnerEnvironment);if(!n.native_platform)return n;if(t.deviceName&&(n.device=t.deviceName),t.deviceModel){let i=St(t.deviceModel);i&&(n.device_slug=i)}return t.pixelResolution&&(n.viewport=n.resolution??wr(t.pixelResolution,n.pixel_ratio)??t.pixelResolution,n.resolution=t.pixelResolution),n}function wr(t,e){if(!e||!Number.isFinite(e)||e<=0)return;let r=/^(\d+)x(\d+)$/.exec(t);if(r)return`${Math.round(Number(r[1])/e)}x${Math.round(Number(r[2])/e)}`}async function Pt(t){if(t)try{let e=await fetch(`${t}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!e.ok)return;let r=await e.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function yr(t){let e;return()=>(e||(e=Pt(t)),e)}import{promises as $,existsSync as L,readFileSync as br}from"fs";import{basename as Sr,join as m}from"path";import{readFileSync as xr}from"fs";import{dirname as _r,resolve as kr}from"path";function At(t,e){let r=kr(t),n=xr(r,"utf8");return R(e?V(n,U(_r(r),e)):n)}var z=class t{constructor(e){this.opts=e}executionId;testId;definitionPath=null;definitionContent=null;accumulatedSteps=[];maxOrdinal=0;_attempts=[];_packDirOverride;_attached=!1;appiumMarks=yt();get attached(){return this._attached}static async attach(e){let r=Sr(e.packDir).replace(/\.evidence$/,""),n=new t({origin:"testrun",runKind:"author",pid:process.pid,title:e.testId,started:new Date().toISOString(),producerVersion:qe,cwd:e.cwd});n.executionId=r,n.testId=e.testId,n._packDirOverride=e.packDir,n._attached=!0;let i=m(e.packDir,"tests",e.testId);return await $.mkdir(i,{recursive:!0}),e.definition&&(await $.writeFile(m(i,e.definition.path),e.definition.content),n.definitionPath=e.definition.path,n.definitionContent=e.definition.content),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=ce(),this.testId=this.opts.testmdRelPath?we(this.opts.testmdRelPath):ye(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let e=this.opts.definition??null;return await ke({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,e,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),e&&(this.definitionPath=e.path,this.definitionContent=e.content),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?m(this.opts.packRootDir,`${this.executionId}.evidence`):h(this.executionId,this.opts.cwd)}get packTestDir(){return m(this.pack,"tests",this.testId)}async writeDefinition(e,r="test.md"){await $.writeFile(m(this.packTestDir,r),e),this.definitionPath=r,this.definitionContent=e}computeAssuranceId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=m(this.opts.cwd,this.opts.testmdRelPath);if(L(e))return P(br(e,"utf8"))?.id}}catch{}}computeDefinitionId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=m(this.opts.cwd,this.opts.testmdRelPath),r=m(this.opts.cwd,".context"),n=L(r)?y(r):void 0;if(L(e))return At(e,n)}if(this.definitionContent!=null)return R(this.definitionContent)}catch{}}noteSpawn(e){this.accumulatedSteps.push(...e.steps),this.maxOrdinal=Math.max(this.maxOrdinal,e.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}get attempts(){return this._attempts}async archiveAttempt(e,r){let n=this._attempts.length+1,i=m(this.packTestDir,String(n));try{await $.mkdir(i,{recursive:!0});for(let s of["steps","logs","v16-trajectory"]){let o=m(this.packTestDir,s);L(o)&&await $.rename(o,m(i,s))}this.definitionPath&&L(m(this.packTestDir,this.definitionPath))&&await $.copyFile(m(this.packTestDir,this.definitionPath),m(i,this.definitionPath))}catch{}return this._attempts.push({n,status:e,steps:this.accumulatedSteps,...r!==void 0?{durationMs:r}:{}}),this.accumulatedSteps=[],this.maxOrdinal=0,n}async writeResult(e){let r=De(e.spawns),n=this._attempts.length?[...this._attempts.map(d=>({status:d.status,...d.durationMs!==void 0?{duration_ms:d.durationMs}:{}})),{status:r,...e.durationMs!==void 0?{duration_ms:e.durationMs}:{}}]:void 0,i=n?new Set(n.map(d=>d.status)).size>1:void 0,s=this.pack,o=xe(e.externalIdInput),a=ae(e.runnerEnv,e.intentEnv),c=this.computeDefinitionId(),l=this.computeAssuranceId();await Re(s,this.testId,X({testId:this.testId,status:r,durationMs:e.durationMs,definitionPath:this.definitionPath,definitionId:c,assuranceId:l,externalId:o,environment:a,steps:e.steps,tags:e.tags,attempts:n,flaky:i}));for(let d of this._attempts){let p=m(this.packTestDir,String(d.n));L(p)&&await $.writeFile(m(p,"result.yaml"),X({testId:this.testId,status:d.status,durationMs:d.durationMs,definitionPath:this.definitionPath,definitionId:c,assuranceId:l,externalId:o,environment:a,steps:d.steps,tags:e.tags}))}let u=e.externalIdInput;return e.log&&(u.commit_id||u.test_id||u.testcase_id)&&e.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:u.commit_id??null,test_id:u.test_id??null,testcase_id:u.testcase_id??null,project_id:u.project_id??null,session_id:u.session_id??null,session_name:u.session_name??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function Ir(t,e,r=ue){try{let n=await r(t);if(n.aborted.length>0||n.removed.length>0)try{e?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as Hr}from"fs";import{existsSync as Te,mkdirSync as Vr,readdirSync as Br,readFileSync as zr,rmSync as Gr,statSync as Yr,writeFileSync as Kr}from"fs";import{join as O}from"path";import{mkdirSync as Er,renameSync as Rr,rmSync as Pr,writeFileSync as Ar}from"fs";import{join as Dt}from"path";var Dr=5e6;function Ct(t,e,r){let n=Dt(t,"coverage","sources"),i=new Map,s=!1;try{for(let o of r.usecases)for(let a of o.sources){if(i.has(a.id)){a.file=i.get(a.id);continue}if(!a.cid)continue;let c=ft(e,a.cid);if(c===null||c.byteLength>Dr)continue;s||(Er(n,{recursive:!0}),s=!0);let l=Dt(n,a.id),u=`${l}.tmp-${process.pid}`;Ar(u,c),Rr(u,l);let d=`coverage/sources/${a.id}`;i.set(a.id,d),a.file=d}}catch{for(let o of r.usecases)for(let a of o.sources)delete a.file;if(s)try{Pr(n,{recursive:!0,force:!0})}catch{}}}import{existsSync as ee,readFileSync as F,renameSync as Fr,writeFileSync as Or}from"fs";import{dirname as Ne,isAbsolute as te,resolve as re}from"path";var Cr=new Set(["inline","testmd","testrun"]),$r=new Set(["inferred","authored","runtime-derived"]),je=new Set(["passed","failed","broken","skipped"]);function $t(t,e,r){if(r.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let n=e;for(let i=0;;i++){let s=H(t);if(n.latestHash!==s){if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(n.latestHash)} but chain head is ${String(s)} \u2014 retry budget exhausted`}]};n=y(t);continue}let o=Lr(t,n,r);if(o!=="cas")return o;if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:"concurrent appends kept moving the head \u2014 retry budget exhausted"}]};n=y(t)}}function Lr(t,e,r){let n=[],i=[];for(let o of r.facts){let a=`executions[${o.ref}]`,c=e.resolve(o.ref),l=c?e.tipOf(c.cid):null;if(!c||!l||e.superseded.has(l)){n.push({code:"UNKNOWN_REF",detail:`${a}: '${o.ref}' is not a live committed node`});continue}if(e.nodeLabel.get(l)!==le.TEST){n.push({code:"ILLEGAL_TARGET",detail:`${a}: execution facts attach to tests \u2014 '${o.ref}' is a ${e.nodeLabel.get(l)}`});continue}if(!Cr.has(o.mode)){n.push({code:"BAD_MODE",detail:`${a}: mode '${o.mode}' not in inline|testmd|testrun`});continue}if(!je.has(o.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}: verdict '${o.verdict}' not in ${[...je].join("|")}`});continue}if(!$r.has(o.oracle_mode)){n.push({code:"BAD_ORACLE_MODE",detail:`${a}: oracle_mode '${o.oracle_mode}' not in inferred|authored|runtime-derived`});continue}if(typeof o.drift_flag!="boolean"||typeof o.stale_at_run!="boolean"){n.push({code:"MISSING_FIELD",detail:`${a}: drift_flag and stale_at_run are required booleans`});continue}if(!o.execution_id||!o.started_at||!o.definition_id_at_run){n.push({code:"MISSING_FIELD",detail:`${a}: execution_id, started_at and definition_id_at_run are required`});continue}let u=[];for(let d of o.per_ac??[]){let p=e.resolve(d.ac_ref),f=p?e.tipOf(p.cid):null;if(!p||!f||e.superseded.has(f)||e.nodeLabel.get(f)!==le.AC){n.push({code:"UNKNOWN_REF",detail:`${a}.per_ac: '${d.ac_ref}' is not a live AC`});continue}if(!je.has(d.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}.per_ac['${d.ac_ref}']: verdict '${d.verdict}'`});continue}u.push({ac_ref:e.nameOf.get(f)??f,verdict:d.verdict})}i.push({about:l,definition_id_at_run:o.definition_id_at_run,verdict:o.verdict,...u.length?{per_ac:u}:{},drift_flag:o.drift_flag,oracle_mode:o.oracle_mode,stale_at_run:o.stale_at_run,...o.unresolved_acs?.length?{unresolved_acs:o.unresolved_acs}:{},execution_id:o.execution_id,...o.evidence_id?{evidence_id:o.evidence_id}:{},...o.duration_ms!==void 0?{duration_ms:o.duration_ms}:{},started_at:o.started_at,mode:o.mode,local:o.local,...o.via_parent?{via_parent:o.via_parent}:{}})}if(n.length>0)return{record:null,errors:n};let s;try{s=W(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:i,...r.eventIds&&r.eventIds.length>0?{event_ids:r.eventIds}:{},source_head_moves:{}},{expectPrev:e.latestHash})}catch(o){if(o instanceof ut)return"cas";throw o}return q(t),{record:s.record,errors:null}}function Mt(t){let e={failed:3,broken:2,skipped:1,passed:0},r=new Map;for(let n of t)for(let i of n.verifies??[]){let s=r.get(i);(s===void 0||(e[n.status]??0)>(e[s]??0))&&r.set(i,n.status)}return[...r.entries()].map(([n,i])=>({ref:n,verdict:i}))}function jt(t){let e=[],r=J(t.cwd);if(!ee(r))return{synced:0,superseded:0,skipped:"no-context",warnings:e};let n=t.by??{kind:"ai",id:"exec-sync"},i=y(r),s=[],o=0,a=new Set,c=new Set(t.members.map(d=>te(d.path)?d.path:re(t.cwd,d.path))),l=new Map;for(let d of t.members){let p=te(d.path)?d.path:re(t.cwd,d.path);for(let f of Mr(p)){if(a.has(f.path))continue;let w=f.path===p,_=!w&&c.has(f.path),b=w?void 0:P(F(p,"utf8"))?.id,G=F(f.path,"utf8"),x=P(G);if(!x?.id){a.add(f.path);continue}let ie=i.resolve(x.id),M=ie?i.tipOf(ie.cid):null;if(!ie||!M||i.superseded.has(M)){a.add(f.path),e.push(`sync: ${x.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let Y=R(V(G,U(Ne(f.path),i))),Ut=String(i.getNode(M)?.content.test_md_blob??""),K=R(V(Ut,st(i))),j=!1,oe=M;if(Y===K)x.base!==K&&Ot(f.path,G,K,e);else if(x.base===K){let g=Nr(r,i,M,G,Y,Ne(f.path),n);g.error?(e.push(`sync: could not supersede ${x.id}: ${g.error}`),j=!0):(o++,oe=g.newCid,j=g.oracleTier,Ot(f.path,F(f.path,"utf8"),Y,e),i=y(r))}else j=!0,e.push(x.base?`sync: ${x.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${x.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);if(_){j&&l.set(f.path,!0);continue}a.add(f.path);let Ke=i.getNode(oe)?.content.check,Ue=w?d.acs??[]:[],He=Ue.filter(g=>Lt(i,g.ref)),We=Ue.filter(g=>!Lt(i,g.ref)).map(g=>g.ref);s.push({ref:x.id,definition_id_at_run:Y,verdict:d.verdict,...He.length?{per_ac:He.map(g=>({ac_ref:g.ref,verdict:g.verdict}))}:{},drift_flag:j||l.get(f.path)===!0||w&&d.driftFlag===!0,oracle_mode:Ke?.expected_mode??(nt(Ke?.operand)?"runtime-derived":"inferred"),stale_at_run:i.stale(oe)!=="fresh",...We.length?{unresolved_acs:We}:{},execution_id:d.executionId,...d.evidenceId?{evidence_id:d.evidenceId}:{},...d.durationMs!==void 0?{duration_ms:d.durationMs}:{},started_at:d.startedAt,mode:d.mode,local:d.local,...b?{via_parent:b}:{}})}}if(s.length===0)return{synced:0,superseded:o,warnings:e};let u=$t(r,y(r),{facts:s,by:n});return u.errors?(e.push(...u.errors.map(d=>`sync facts: ${d.code}: ${d.detail}`)),{synced:0,superseded:o,warnings:e}):{synced:s.length,superseded:o,warnings:e}}function Mr(t){let e=[],r=new Set,n=i=>{if(r.has(i)||!ee(i))return;r.add(i);let s=F(i,"utf8");for(let o of s.split(`
|
|
5
|
-
`)){let a=/^@import\s+(\S+)\s*$/.exec(o.trim());if(!a)continue;let c=te(a[1])?a[1]:re(Ne(i),a[1]);ee(c)&&
|
|
6
|
-
`),i=ot(n);return n.map((s,o)=>{let a=it.exec(s.trim());if(!a||i.has(o))return s;let c=a[1];if(r.resolve(c))return s;let l=te(c)?c:re(e,c);if(!ee(l))return s;let
|
|
7
|
-
`)}function Nr(t,e,r,n,i,s,o){let a=e.getNode(r);if(!a)return{oracleTier:!1,error:"tip unreadable"};let c=jr(at(n),s,e),l=String(a.content.test_md_blob??""),
|
|
2
|
+
import{d as lt,g as pt}from"./chunk-5DBK6QNS.js";import{b as pe,c as B,d as fe,e as me}from"./chunk-TJZMYU2W.js";import{b as h,c as ce,d as rt,f as de,g as ue}from"./chunk-5GUD3CIH.js";import{a as nt,e as A,f as it,g as ot,h as V,i as st,j as K,k as D,l as at}from"./chunk-ZSXDZI56.js";import{a as N,b as T,d as tt}from"./chunk-EHN5HTUD.js";import{d as ft}from"./chunk-NVGBE2DR.js";import{a as J}from"./chunk-CH273NAE.js";import{b as P,c as v}from"./chunk-VZ7KXRXB.js";import{a as se,c as Ze,d as Qe,e as et,f as ae}from"./chunk-P7YZ3PU3.js";import{A as w}from"./chunk-TH47OOBV.js";import{b as q}from"./chunk-VAYBKR76.js";import{a as dt}from"./chunk-CUM23TLF.js";import{b as ut,f as U,i as W}from"./chunk-DUAXZYAD.js";import{d as le,f as ct}from"./chunk-WXHQYYD5.js";import{a as Je,b as Xe}from"./chunk-KX2GOJ4C.js";import{a as qe}from"./chunk-CCUGKBIH.js";function C(t){if(t===null)return"broken";let e=Math.floor(t/100);return e===1?"passed":e===7?"failed":e===2?"skipped":"broken"}var $={failed:3,broken:2,passed:1,skipped:0};function ge(t){let e="skipped";for(let r of t)$[r]>$[e]&&(e=r);return e}import{createHash as Ut}from"crypto";import{basename as Wt}from"path";function he(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return e.length>0?e:"session"}function ve(t){return Ut("sha256").update(t).digest("hex").slice(0,8)}function ye(t){let e=Wt(t).replace(/_test\.md$/i,"").replace(/\.md$/i,"");return`${he(e)}-${ve(t)}`}function we(t,e){return`${he(t)}-${ve(e)}`}function xe(t){let e={};for(let[r,n]of Object.entries(t))typeof n=="string"&&n.length>0&&(e[r]=n);return e}function qt(t,e){return{pack_test_dir:t,ordinal_offset:e}}import{promises as k}from"fs";import{join as S}from"path";function _e(t){let e={evidence:"0.1",run_id:t.execution_id,status:"running",title:t.title,started:t.started,environment:{producer:{name:"kane-cli",version:t.producerVersion},...t.surfaces?{surfaces:t.surfaces}:{},run_kind:t.run_kind,origin:t.origin,pid:t.pid},...t.credits!==void 0?{metrics:{credits:{value:t.credits,type:"count"}}}:{}};return v(e,{lineWidth:-1})}async function ke(t,e,r,n=process.cwd(),i){let s=i??h(t.execution_id,n),o=S(s,"tests",e);return await k.mkdir(S(s,"coverage"),{recursive:!0}),await k.writeFile(S(s,"coverage",".keep"),""),await k.mkdir(o,{recursive:!0}),await k.writeFile(S(s,"run.yaml"),_e(t)),r&&await k.writeFile(S(o,r.path),r.content),s}async function Jt(t,e=process.cwd()){let r=h(t.execution_id,e);await k.mkdir(S(r,"coverage"),{recursive:!0}),await k.writeFile(S(r,"coverage",".keep"),"");let n=P(_e(t));return n.environment&&delete n.environment.run_kind,await k.writeFile(S(r,"run.yaml"),v(n,{lineWidth:-1})),r}async function Xt(t,e=process.cwd()){return T(h(t,e),new Date().toISOString())}async function be(t,e=process.cwd()){await k.rm(h(t,e),{recursive:!0,force:!0})}import{promises as Se}from"fs";import{join as Ie}from"path";function X(t){let e={evidence:"0.1",test:t.testId,status:t.status,...t.durationMs!==void 0?{duration_ms:t.durationMs}:{},...t.attempts&&t.attempts.length?{attempts:t.attempts}:{},...t.flaky!==void 0?{flaky:t.flaky}:{},...t.adaptiveHeal?{adaptive_heal:t.adaptiveHeal}:{},...t.definitionPath?{definition:{path:t.definitionPath}}:{},...t.definitionId?{definition_id:t.definitionId}:{},...t.assuranceId?{assurance_id:t.assuranceId}:{},...Object.keys(t.externalId).length?{external_id:t.externalId}:{},...t.tags&&t.tags.length?{tags:t.tags}:{},...Object.keys(t.environment).length?{environment:t.environment}:{},steps:t.steps};return v(e,{lineWidth:-1})}function Ee(t){return v({logs:t},{lineWidth:-1})}async function Re(t,e,r){await Se.writeFile(Ie(t,"tests",e,"result.yaml"),r)}async function Pe(t,e,r){let n=Ie(t,"tests",e,"logs");await Se.mkdir(n,{recursive:!0}),await Se.writeFile(Ie(n,"meta.yaml"),r)}import{promises as Z}from"fs";import{join as mt}from"path";function gt(t){return mt(t,".internal","meta.json")}async function ht(t){let e;try{e=await Z.readFile(gt(t),"utf8")}catch(n){if(n?.code==="ENOENT")return null;throw n}let r=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("meta.json is not a JSON object");return r}async function Ae(t,e){let r;try{r=await ht(t)??{}}catch(o){console.warn(`evidence: meta.json at ${t} unreadable \u2014 skipping execution-pointer append to preserve identity`,o);return}let n=Array.isArray(r.executions)?r.executions:[];n.push(e),r.executions=n,await Z.mkdir(mt(t,".internal"),{recursive:!0});let i=gt(t),s=`${i}.tmp-${process.pid}-${Date.now()}`;await Z.writeFile(s,JSON.stringify(r,null,2)+`
|
|
3
|
+
`),await Z.rename(s,i)}async function Zt(t){try{let e=await ht(t);return e&&Array.isArray(e.executions)?e.executions:[]}catch{return[]}}async function Qt(t,e,r=process.cwd()){let n=await de(t,r);if(!n){let s=`evidence: no pack found for "${t}"`;return e.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:t})):console.error(s),2}let i=await N(n,e.profile??"L1");return e.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${e.profile??"L1"}, status ${i.status})`),i.valid?0:1}function De(t){let e=[];for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)e.push(C(i))}return ge(e)}function er(t){let e=null;for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)i!=null&&(e==null||$[C(i)]>$[C(e)]||$[C(i)]===$[C(e)]&&i>e)&&(e=i)}return e}import{promises as tr}from"fs";import{extname as vt,basename as rr}from"path";var nr={".ndjson":"ndjson",".log":"log",".json":"json",".har":"har"};async function $e(t){let e;try{e=await tr.readdir(t)}catch{return[]}return e.filter(r=>r!=="meta.yaml").sort().map(r=>({name:rr(r,vt(r)),file:r,format:nr[vt(r)]??"txt"}))}import{mkdirSync as ir,appendFileSync as or}from"fs";import{join as yt}from"path";function Ce(t,e){return yt(t,"tests",e,"logs")}function Le(t,e,r,n={},i){try{i?.(e,r,r,n)}catch{}if(t)try{ir(t,{recursive:!0});let s=JSON.stringify({ts:new Date().toISOString(),level:e,event:r,...n})+`
|
|
4
|
+
`;or(yt(t,"diagnostics.ndjson"),s)}catch{}}import{promises as I}from"fs";import{dirname as mr,join as L}from"path";import{statSync as sr}from"fs";import{promises as Fe}from"fs";import{basename as ar,join as cr}from"path";var dr=1e6,ur=2e6;function lr(){return Je.map(t=>Xe(t))}function wt(t=lr()){return t.map(e=>{let r=0;try{r=sr(e).size}catch{}return{path:e,offset:r}})}var pr=/\x1b\[[0-9;]*[A-Za-z]/g;async function fr(t,e,r){let n;try{n=await Fe.open(t,"r");let i=(await n.stat()).size,s=e<=i?e:0,o=i-s;if(o<=0)return null;let a=o>r?i-r:s,c=Buffer.alloc(Math.min(o,r));return await n.read(c,0,c.length,a),c.toString("utf8")}catch{return null}finally{await n?.close().catch(()=>{})}}async function xt(t,e){let r=e.caps?.stderr??dr,n=e.caps?.appium??ur,i=[];e.runnerStderrPath&&i.push({src:e.runnerStderrPath,from:0,cap:r});for(let s of e.appiumMarks??[])i.push({src:s.path,from:s.offset,cap:n});for(let s of i){let o=await fr(s.src,s.from,s.cap);if(o===null)continue;let a=o.replace(pr,"");if(a!=="")try{await Fe.mkdir(t,{recursive:!0}),await Fe.writeFile(cr(t,ar(s.src)),a)}catch{}}}async function gr(t){try{let e=L(t,"tests"),r=await I.readdir(e).catch(()=>[]);for(let n of r){let i=L(e,n,"steps"),s=await I.readdir(i).catch(()=>[]);for(let o of s){let a=await I.readFile(L(i,o,"failure.yaml"),"utf8").catch(()=>null);if(a!=null)try{let c=P(a);if(c&&typeof c=="object"&&c.triage)return!0}catch{}}}}catch{}return!1}async function _t(t,e,r,n={}){let i=L(t,"tests",e,"logs");if(r)try{await I.mkdir(i,{recursive:!0}),await I.copyFile(r,L(i,"tui.log"))}catch{}await xt(i,{runnerStderrPath:r?L(mr(r),"runner-stderr.log"):void 0,appiumMarks:n.appiumMarks});let s=await $e(i);if(!s.length&&n.requireRealLog)throw new Error(`evidence test ${e} has no real log to declare`);s.length&&await Pe(t,e,Ee(s))}async function Oe(t){let e=t.cwd??process.cwd(),r=t.packDir??h(t.executionId,e);if(!t.saved&&!t.packDir)return await be(t.executionId,e),{sealed:!1};await _t(r,t.testId,t.tuiLogPath,{requireRealLog:t.requireRealLog,appiumMarks:t.appiumMarks});let n=L(r,"run.yaml"),i=P(await I.readFile(n,"utf8"));i.environment={...i.environment??{},saved:t.saved,run_kind:t.runKind},await I.writeFile(n,v(i,{lineWidth:-1}));let s=await I.open(n,"r+");try{await s.sync()}finally{await s.close()}let o=await gr(r);await T(r,new Date().toISOString());let a;try{let l=await N(r,"L1");a=l.valid;let d=(l.diagnostics??[]).filter(u=>String(u?.code??"").includes("failure.status_disagrees"));if(d.length>0)if(t.expectStatusDisagrees||o){let u=t.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${d.length} status_disagrees advisory(ies) \u2014 ${u}`)}else console.warn(`evidence: ${d.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,d);if(!l.valid){console.warn(`evidence: sealed pack ${t.executionId} failed L1 validation`,l.diagnostics);let u=String(l.diagnostics?.[0]?.code??"");Le(Ce(r,t.testId),"warn","EVIDENCE_INVALID",{execution_id:t.executionId,first_code:u,surface:t.surface??"testmd"},t.log)}}catch(l){console.warn(`evidence: validation error for ${t.executionId}`,l)}let c;if(t.saved&&t.packDir)try{c=await rt(r,t.executionId,e)}catch(l){console.warn(`evidence: store install failed for ${t.executionId}`,l)}if(t.outputStemDir)try{await Ae(t.outputStemDir,{execution_id:t.executionId,run_kind:t.runKind,status:t.verdict,valid:a,at:new Date().toISOString()})}catch(l){console.warn(`evidence: execution-pointer append failed for ${t.executionId} (pack is sealed)`,l)}return{sealed:!0,valid:a,storePath:c}}import{release as Et}from"os";import{execFileSync as hr}from"child_process";import{promises as kt}from"fs";import{join as bt}from"path";function St(t){return t.replace(/\([^)]*\)/g," ").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||void 0}async function It(t){try{let e=bt(t,"steps"),r=(await kt.readdir(e,{withFileTypes:!0})).filter(n=>n.isDirectory()).map(n=>n.name).sort((n,i)=>(parseInt(n,10)||0)-(parseInt(i,10)||0));for(let n of r)try{let i=await kt.readFile(bt(e,n,"step.json"),"utf8"),o=JSON.parse(i).basis?.window;if(Array.isArray(o)&&o.length===2&&Number.isFinite(Number(o[0]))&&Number.isFinite(Number(o[1]))&&Number(o[0])>0&&Number(o[1])>0)return`${Math.round(Number(o[0]))}x${Math.round(Number(o[1]))}`}catch{}return}catch{return}}var Rt=!1,Q;function vr(){if(!Rt)if(Rt=!0,process.platform==="darwin")try{Q=hr("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{Q=Et()||void 0}else Q=Et()||void 0;return Q}function Me(t){let e={os:se(process.platform)},r=vr();if(r&&(e.os_version=r),t.cdpBrowser){let i=/^([A-Za-z]+)\/(\d+)/.exec(t.cdpBrowser);i&&(e.browser=i[1].replace(/^Headless/,""),e.browser_version=i[2])}t.resolution&&(e.resolution=t.resolution);let n=Qe(e,t.runnerEnvironment);if(!n.native_platform)return n;if(t.deviceName&&(n.device=t.deviceName),t.deviceModel){let i=St(t.deviceModel);i&&(n.device_slug=i)}return t.pixelResolution&&(n.viewport=n.resolution??yr(t.pixelResolution,n.pixel_ratio)??t.pixelResolution,n.resolution=t.pixelResolution),n}function yr(t,e){if(!e||!Number.isFinite(e)||e<=0)return;let r=/^(\d+)x(\d+)$/.exec(t);if(r)return`${Math.round(Number(r[1])/e)}x${Math.round(Number(r[2])/e)}`}async function Pt(t){if(t)try{let e=await fetch(`${t}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!e.ok)return;let r=await e.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function wr(t){let e;return()=>(e||(e=Pt(t)),e)}import{promises as E,existsSync as R,readFileSync as br}from"fs";import{basename as Sr,join as m}from"path";import{readFileSync as xr}from"fs";import{dirname as _r,resolve as kr}from"path";function At(t,e){let r=kr(t),n=xr(r,"utf8");return A(e?V(n,K(_r(r),e)):n)}var z=class t{constructor(e){this.opts=e}executionId;testId;definitionPath=null;definitionContent=null;accumulatedSteps=[];maxOrdinal=0;_attempts=[];_packDirOverride;_attached=!1;appiumMarks=wt();get attached(){return this._attached}static async attach(e){let r=Sr(e.packDir).replace(/\.evidence$/,""),n=new t({origin:"testrun",runKind:"author",pid:process.pid,title:e.testId,started:new Date().toISOString(),producerVersion:qe,cwd:e.cwd});n.executionId=r,n.testId=e.testId,n._packDirOverride=e.packDir,n._attached=!0;let i=m(e.packDir,"tests",e.testId);return await E.mkdir(i,{recursive:!0}),e.definition&&(await E.writeFile(m(i,e.definition.path),e.definition.content),n.definitionPath=e.definition.path,n.definitionContent=e.definition.content),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=ce(),this.testId=this.opts.testmdRelPath?ye(this.opts.testmdRelPath):we(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let e=this.opts.definition??null;return await ke({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,e,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),e&&(this.definitionPath=e.path,this.definitionContent=e.content),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?m(this.opts.packRootDir,`${this.executionId}.evidence`):h(this.executionId,this.opts.cwd)}get packTestDir(){return m(this.pack,"tests",this.testId)}async writeDefinition(e,r="test.md"){await E.writeFile(m(this.packTestDir,r),e),this.definitionPath=r,this.definitionContent=e}computeAssuranceId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=m(this.opts.cwd,this.opts.testmdRelPath);if(R(e))return D(br(e,"utf8"))?.id}}catch{}}computeDefinitionId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=m(this.opts.cwd,this.opts.testmdRelPath),r=m(this.opts.cwd,".context"),n=R(r)?w(r):void 0;if(R(e))return At(e,n)}if(this.definitionContent!=null)return A(this.definitionContent)}catch{}}noteSpawn(e){this.accumulatedSteps.push(...e.steps),this.maxOrdinal=Math.max(this.maxOrdinal,e.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}get attempts(){return this._attempts}async archiveAttempt(e,r){let n=this._attempts.length+1,i=m(this.packTestDir,String(n)),s;try{await E.mkdir(i,{recursive:!0});for(let a of["steps","logs","v16-trajectory"]){let c=m(this.packTestDir,a);R(c)&&await E.rename(c,m(i,a))}this.definitionPath&&R(m(this.packTestDir,this.definitionPath))&&await E.copyFile(m(this.packTestDir,this.definitionPath),m(i,this.definitionPath));let o=m(i,"steps");if(R(o)){for(let a of await E.readdir(o))if(R(m(o,a,"failure.yaml"))){s=`${n}/steps/${a}/failure.yaml`;break}}}catch{}return this._attempts.push({n,status:e,steps:this.accumulatedSteps,...r!==void 0?{failedAt:r}:{},...s?{failure:s}:{}}),this.accumulatedSteps=[],this.maxOrdinal=0,n}async writeResult(e){let r=De(e.spawns),n=this._attempts.length?[...this._attempts.map(u=>({status:u.status})),{status:r,...e.durationMs!==void 0?{duration_ms:e.durationMs}:{}}]:void 0,i=n?new Set(n.map(u=>u.status)).size>1:void 0,s=this._attempts.length?{triggered:!0,outcome:r==="passed"?"healed":"exhausted",attempts:this._attempts.map(u=>({n:u.n,status:u.status,failed_at:u.failedAt??-1,...u.failure?{failure:u.failure}:{}}))}:void 0,o=this.pack,a=xe(e.externalIdInput),c=ae(e.runnerEnv,e.intentEnv),l=this.computeDefinitionId(),p=this.computeAssuranceId();await Re(o,this.testId,X({testId:this.testId,status:r,durationMs:e.durationMs,definitionPath:this.definitionPath,definitionId:l,assuranceId:p,externalId:a,environment:c,steps:e.steps,tags:e.tags,attempts:n,flaky:i,adaptiveHeal:s}));for(let u of this._attempts){let f=m(this.packTestDir,String(u.n));R(f)&&await E.writeFile(m(f,"result.yaml"),X({testId:this.testId,status:u.status,definitionPath:this.definitionPath,definitionId:l,assuranceId:p,externalId:a,environment:c,steps:u.steps,tags:e.tags}))}let d=e.externalIdInput;return e.log&&(d.commit_id||d.test_id||d.testcase_id)&&e.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:d.commit_id??null,test_id:d.test_id??null,testcase_id:d.testcase_id??null,project_id:d.project_id??null,session_id:d.session_id??null,session_name:d.session_name??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function Ir(t,e,r=ue){try{let n=await r(t);if(n.aborted.length>0||n.removed.length>0)try{e?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as Ur}from"fs";import{existsSync as Te,mkdirSync as Vr,readdirSync as Br,readFileSync as zr,rmSync as Gr,statSync as Yr,writeFileSync as Hr}from"fs";import{join as O}from"path";import{mkdirSync as Er,renameSync as Rr,rmSync as Pr,writeFileSync as Ar}from"fs";import{join as Dt}from"path";var Dr=5e6;function $t(t,e,r){let n=Dt(t,"coverage","sources"),i=new Map,s=!1;try{for(let o of r.usecases)for(let a of o.sources){if(i.has(a.id)){a.file=i.get(a.id);continue}if(!a.cid)continue;let c=ft(e,a.cid);if(c===null||c.byteLength>Dr)continue;s||(Er(n,{recursive:!0}),s=!0);let l=Dt(n,a.id),p=`${l}.tmp-${process.pid}`;Ar(p,c),Rr(p,l);let d=`coverage/sources/${a.id}`;i.set(a.id,d),a.file=d}}catch{for(let o of r.usecases)for(let a of o.sources)delete a.file;if(s)try{Pr(n,{recursive:!0,force:!0})}catch{}}}import{existsSync as ee,readFileSync as F,renameSync as Fr,writeFileSync as Or}from"fs";import{dirname as Ne,isAbsolute as te,resolve as re}from"path";var $r=new Set(["inline","testmd","testrun"]),Cr=new Set(["inferred","authored","runtime-derived"]),je=new Set(["passed","failed","broken","skipped"]);function Ct(t,e,r){if(r.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let n=e;for(let i=0;;i++){let s=U(t);if(n.latestHash!==s){if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(n.latestHash)} but chain head is ${String(s)} \u2014 retry budget exhausted`}]};n=w(t);continue}let o=Lr(t,n,r);if(o!=="cas")return o;if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:"concurrent appends kept moving the head \u2014 retry budget exhausted"}]};n=w(t)}}function Lr(t,e,r){let n=[],i=[];for(let o of r.facts){let a=`executions[${o.ref}]`,c=e.resolve(o.ref),l=c?e.tipOf(c.cid):null;if(!c||!l||e.superseded.has(l)){n.push({code:"UNKNOWN_REF",detail:`${a}: '${o.ref}' is not a live committed node`});continue}if(e.nodeLabel.get(l)!==le.TEST){n.push({code:"ILLEGAL_TARGET",detail:`${a}: execution facts attach to tests \u2014 '${o.ref}' is a ${e.nodeLabel.get(l)}`});continue}if(!$r.has(o.mode)){n.push({code:"BAD_MODE",detail:`${a}: mode '${o.mode}' not in inline|testmd|testrun`});continue}if(!je.has(o.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}: verdict '${o.verdict}' not in ${[...je].join("|")}`});continue}if(!Cr.has(o.oracle_mode)){n.push({code:"BAD_ORACLE_MODE",detail:`${a}: oracle_mode '${o.oracle_mode}' not in inferred|authored|runtime-derived`});continue}if(typeof o.drift_flag!="boolean"||typeof o.stale_at_run!="boolean"){n.push({code:"MISSING_FIELD",detail:`${a}: drift_flag and stale_at_run are required booleans`});continue}if(!o.execution_id||!o.started_at||!o.definition_id_at_run){n.push({code:"MISSING_FIELD",detail:`${a}: execution_id, started_at and definition_id_at_run are required`});continue}let p=[];for(let d of o.per_ac??[]){let u=e.resolve(d.ac_ref),f=u?e.tipOf(u.cid):null;if(!u||!f||e.superseded.has(f)||e.nodeLabel.get(f)!==le.AC){n.push({code:"UNKNOWN_REF",detail:`${a}.per_ac: '${d.ac_ref}' is not a live AC`});continue}if(!je.has(d.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}.per_ac['${d.ac_ref}']: verdict '${d.verdict}'`});continue}p.push({ac_ref:e.nameOf.get(f)??f,verdict:d.verdict})}i.push({about:l,definition_id_at_run:o.definition_id_at_run,verdict:o.verdict,...p.length?{per_ac:p}:{},drift_flag:o.drift_flag,oracle_mode:o.oracle_mode,stale_at_run:o.stale_at_run,...o.unresolved_acs?.length?{unresolved_acs:o.unresolved_acs}:{},execution_id:o.execution_id,...o.evidence_id?{evidence_id:o.evidence_id}:{},...o.duration_ms!==void 0?{duration_ms:o.duration_ms}:{},started_at:o.started_at,mode:o.mode,local:o.local,...o.via_parent?{via_parent:o.via_parent}:{}})}if(n.length>0)return{record:null,errors:n};let s;try{s=W(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:i,...r.eventIds&&r.eventIds.length>0?{event_ids:r.eventIds}:{},source_head_moves:{}},{expectPrev:e.latestHash})}catch(o){if(o instanceof ut)return"cas";throw o}return q(t),{record:s.record,errors:null}}function Mt(t){let e={failed:3,broken:2,skipped:1,passed:0},r=new Map;for(let n of t)for(let i of n.verifies??[]){let s=r.get(i);(s===void 0||(e[n.status]??0)>(e[s]??0))&&r.set(i,n.status)}return[...r.entries()].map(([n,i])=>({ref:n,verdict:i}))}function jt(t){let e=[],r=J(t.cwd);if(!ee(r))return{synced:0,superseded:0,skipped:"no-context",warnings:e};let n=t.by??{kind:"ai",id:"exec-sync"},i=w(r),s=[],o=0,a=new Set,c=new Set(t.members.map(d=>te(d.path)?d.path:re(t.cwd,d.path))),l=new Map;for(let d of t.members){let u=te(d.path)?d.path:re(t.cwd,d.path);for(let f of Mr(u)){if(a.has(f.path))continue;let y=f.path===u,_=!y&&c.has(f.path),b=y?void 0:D(F(u,"utf8"))?.id,G=F(f.path,"utf8"),x=D(G);if(!x?.id){a.add(f.path);continue}let ie=i.resolve(x.id),M=ie?i.tipOf(ie.cid):null;if(!ie||!M||i.superseded.has(M)){a.add(f.path),e.push(`sync: ${x.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let Y=A(V(G,K(Ne(f.path),i))),Kt=String(i.getNode(M)?.content.test_md_blob??""),H=A(V(Kt,st(i))),j=!1,oe=M;if(Y===H)x.base!==H&&Ot(f.path,G,H,e);else if(x.base===H){let g=Nr(r,i,M,G,Y,Ne(f.path),n);g.error?(e.push(`sync: could not supersede ${x.id}: ${g.error}`),j=!0):(o++,oe=g.newCid,j=g.oracleTier,Ot(f.path,F(f.path,"utf8"),Y,e),i=w(r))}else j=!0,e.push(x.base?`sync: ${x.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${x.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);if(_){j&&l.set(f.path,!0);continue}a.add(f.path);let He=i.getNode(oe)?.content.check,Ke=y?d.acs??[]:[],Ue=Ke.filter(g=>Lt(i,g.ref)),We=Ke.filter(g=>!Lt(i,g.ref)).map(g=>g.ref);s.push({ref:x.id,definition_id_at_run:Y,verdict:d.verdict,...Ue.length?{per_ac:Ue.map(g=>({ac_ref:g.ref,verdict:g.verdict}))}:{},drift_flag:j||l.get(f.path)===!0||y&&d.driftFlag===!0,oracle_mode:He?.expected_mode??(nt(He?.operand)?"runtime-derived":"inferred"),stale_at_run:i.stale(oe)!=="fresh",...We.length?{unresolved_acs:We}:{},execution_id:d.executionId,...d.evidenceId?{evidence_id:d.evidenceId}:{},...d.durationMs!==void 0?{duration_ms:d.durationMs}:{},started_at:d.startedAt,mode:d.mode,local:d.local,...b?{via_parent:b}:{}})}}if(s.length===0)return{synced:0,superseded:o,warnings:e};let p=Ct(r,w(r),{facts:s,by:n});return p.errors?(e.push(...p.errors.map(d=>`sync facts: ${d.code}: ${d.detail}`)),{synced:0,superseded:o,warnings:e}):{synced:s.length,superseded:o,warnings:e}}function Mr(t){let e=[],r=new Set,n=i=>{if(r.has(i)||!ee(i))return;r.add(i);let s=F(i,"utf8");for(let o of s.split(`
|
|
5
|
+
`)){let a=/^@import\s+(\S+)\s*$/.exec(o.trim());if(!a)continue;let c=te(a[1])?a[1]:re(Ne(i),a[1]);ee(c)&&D(F(c,"utf8"))?.id&&n(c)}e.push({path:i})};return n(t),e}function Lt(t,e){let r=t.resolve(e),n=r?t.tipOf(r.cid):null;return!!(r&&n&&!t.superseded.has(n)&&t.nodeLabel.get(n)==="ac")}function jr(t,e,r){let n=t.split(`
|
|
6
|
+
`),i=ot(n);return n.map((s,o)=>{let a=it.exec(s.trim());if(!a||i.has(o))return s;let c=a[1];if(r.resolve(c))return s;let l=te(c)?c:re(e,c);if(!ee(l))return s;let p=D(F(l,"utf8"))?.id;return!p||!r.resolve(p)?s:`@import ${p}`}).join(`
|
|
7
|
+
`)}function Nr(t,e,r,n,i,s,o){let a=e.getNode(r);if(!a)return{oracleTier:!1,error:"tip unreadable"};let c=jr(at(n),s,e),l=String(a.content.test_md_blob??""),p=/^#\s+(.+?)\s*$/m.exec(c)?.[1]??String(a.content.title??""),d={...a.content,test_md_blob:c,definitionId:i,title:p},u=ct("test",d);if(u.length>0)return{oracleTier:!1,error:u.map(b=>b.detail).join("; ")};let f=dt("test",d);if(f===r)return{newCid:r,oracleTier:!1};let y=Ft(l)!==Ft(c),_=U(t);if(e.latestHash!==_)return{oracleTier:y,error:`store advanced under the sync (basis ${String(e.latestHash)} vs head ${String(_)}) \u2014 re-run to retry`};try{W(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:f,label:"test",content:d}],edges:[],review:[{id:f,kind:"review-item",resolution:"edited",edit:null,reason:"edited on disk (run sync)",by:o}],supersessions:[{kind:"node",old:r,new:f,reason:"edited on disk (run sync)",by:o}],source_head_moves:{}},{expectPrev:_})}catch(b){return{oracleTier:y,error:b instanceof Error?b.message:String(b)}}return q(t),{newCid:f,oracleTier:y}}var Tr=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/;function Ft(t){let e=[],r=t.split(`
|
|
8
8
|
`),n=!1;for(let i of r){if(/^##\s/.test(i)){n=/\bassert\b/i.test(i);let s=Tr.exec(i);s&&e.push(`v:${s[1].trim()}`);continue}n&&i.trim()!==""&&e.push(i.trim())}return e.join(`
|
|
9
9
|
`)}function Ot(t,e,r,n){try{let i=e.split(`
|
|
10
10
|
`),s=-1;if(i[0]?.trim()==="---"){for(let c=1;c<i.length;c++)if(i[c].trim()==="---"){s=c;break}}if(s<0)return;let o=!1;for(let c=1;c<s;c++){if(/^\s+base:\s*sha256:[0-9a-f]+\s*$/.test(i[c])){i[c]=i[c].replace(/sha256:[0-9a-f]+/,r),o=!0;break}if(/^assurance:\s*$/.test(i[c])&&!i.slice(c,Math.min(c+3,s)).some(l=>/^\s+base:/.test(l))){i.splice(c+2,0,` base: ${r}`),o=!0;break}}if(!o)return;let a=`${t}.tmp-sync`;Or(a,i.join(`
|
|
11
|
-
`)),Fr(a,t)}catch(i){n.push(`sync: pin refresh failed for ${t} (${i instanceof Error?i.message:String(i)}) \u2014 next run self-heals`)}}var
|
|
12
|
-
`)),i=
|
|
13
|
-
`)),c;try{c=await pe({packs:o,allowedOrigins:[new URL(s).origin],port:e.port,log:a})}catch(
|
|
14
|
-
`)),s=n.err??(
|
|
15
|
-
`)),o=
|
|
11
|
+
`)),Fr(a,t)}catch(i){n.push(`sync: pin refresh failed for ${t} (${i instanceof Error?i.message:String(i)}) \u2014 next run self-heals`)}}var Kr={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"},Nt=(t,e)=>{try{if(!Te(e))return{status:"skipped",reason:"no context store at the project root"};let r=O(t,"tests");if(!Te(r))return{status:"skipped",reason:"pack has no tests/"};let n=new Map;for(let a of Br(r)){let c=O(r,a,"result.yaml");if(!Te(c)||!Yr(O(r,a)).isDirectory())continue;let l=P(zr(c,"utf8"));if(!l?.definition_id&&!l?.assurance_id)continue;let p=Mt(l.steps??[]),d={testShortId:String(l.test??a),execution:Kr[String(l.status)]??"not-run",...p.length?{acs:p}:{}};l.assurance_id&&n.set(`id:${l.assurance_id}`,d),l.definition_id&&n.set(`def:${l.definition_id}`,d)}let i=pt(w(e),n,{scope:"run"}),s=lt(i);$t(t,e,i);let o=v({...i,rollup:s},{lineWidth:-1});return Vr(O(t,"coverage"),{recursive:!0}),Hr(O(t,"coverage","usecases.yaml"),o),{status:"written"}}catch(r){try{Gr(O(t,"coverage","sources"),{recursive:!0,force:!0})}catch{}return{status:"skipped",reason:r instanceof Error?r.message:String(r)}}};async function Wr(t){try{let e=new z({origin:"inline",runKind:"author",pid:t.pid,title:t.title,started:new Date().toISOString(),producerVersion:t.producerVersion,surfaces:t.surfaces,objectiveOrName:t.objectiveOrName,sessionId:t.sessionId,cwd:t.cwd,packRootDir:t.packRootDir}),r=await e.start();return{session:e,...r,packDir:e.pack,spawns:[],startedAtMs:Date.now(),cwd:t.cwd}}catch(e){return console.warn("evidence: inline pack creation failed",e),null}}function qr(t,e,r){if(!t)return;t.session.noteSpawn(e),e.resolution&&(t.resolution=e.resolution),t.runnerEnvironment=Ze(t.runnerEnvironment,e.runnerEnvironment);let n=(r?.per_flow_metadata??[]).map(i=>({resultCode:i?.result_code!=null?Number(i.result_code):null}));t.spawns.push({resultCode:r?.result_code!=null?Number(r.result_code):null,...n.length?{perFlow:n}:{}})}function Jr(t){if(t)return{packTestDir:t.packTestDir,ordinalOffset:t.session.nextOrdinalOffset()}}async function Xr(t,e){if(!t)return null;if(t.finalized)return t.finalized;let r=(n,i,s)=>e.log?e.log("warn",n,i,s):console.warn(`evidence: ${i}`,s??"");try{if(e.recordedTestPath)try{await t.session.writeDefinition(await Ur.readFile(e.recordedTestPath,"utf8"))}catch(o){r("EVIDENCE_DEFINITION_FAILED","could not attach synthesized test.md",{error:String(o)})}let n=e.cdpBrowserCapture?await e.cdpBrowserCapture():void 0,i=await t.session.writeResult({steps:t.session.steps,spawns:t.spawns.length?t.spawns:[{resultCode:null}],externalIdInput:{...e.externalIdInput,execution_id:t.executionId},runnerEnv:Me({cdpBrowser:n,resolution:t.resolution,runnerEnvironment:t.runnerEnvironment,deviceName:e.deviceName,deviceModel:e.deviceModel,pixelResolution:await It(t.packTestDir)}),intentEnv:et(e.model,t.runnerEnvironment),durationMs:e.durationMs??Date.now()-t.startedAtMs,log:e.log});try{if(e.recordedTestPath){let o=jt({cwd:e.cwd??t.cwd??process.cwd(),members:[{path:e.recordedTestPath,verdict:i,executionId:t.executionId,startedAt:new Date(t.startedAtMs).toISOString(),mode:"inline",local:e.local??!1}]});for(let a of o.warnings)r("EXEC_SYNC",a)}}catch(o){r("EXEC_SYNC","exec-sync failed",{error:String(o)})}try{let o=(e.coverageWriter??Nt)(t.packDir,J(e.cwd??t.cwd??process.cwd()));o.status==="skipped"&&r("EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${o.reason}`)}catch(o){r("EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(o)})}let s=await Oe({executionId:t.executionId,testId:t.testId,saved:e.saved,runKind:"author",verdict:i,cwd:e.cwd??t.cwd,packDir:t.packDir,tuiLogPath:e.tuiLogPath,log:e.log,surface:"inline",requireRealLog:!!t.runnerEnvironment?.native_platform,appiumMarks:t.session.appiumMarks});return t.finalized=s,e.log?.("info","EVIDENCE_SEALED","Inline pack sealed",{execution_id:t.executionId,verdict:i,valid:s.valid,pack:t.packDir,store_copy:s.storePath??null}),s}catch(n){return r("EVIDENCE_SEAL_FAILED","inline pack finalize failed",{error:String(n)}),null}}import{statSync as Zr,openSync as Qr,readSync as en,closeSync as tn}from"fs";import{basename as rn,resolve as nn}from"path";async function on(t,e,r={}){let n=r.out??(p=>process.stdout.write(p+`
|
|
12
|
+
`)),i=p=>(n(`error: ${p}`),2);if(e.env!=="prod"&&e.env!=="stage")return i(`invalid --env: ${String(e.env)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))return i("invalid --port: expected an integer 1-65535");let s;try{s=B(e.env,e.viewerUrl),new URL(s)}catch{return i(`invalid --viewer-url: ${e.viewerUrl}`)}if(t.length===0)return i("no pack paths given");let o=new Map;for(let p of t){let d=nn(p),u;try{u=Zr(d)}catch{return i(`${p}: not found`)}if(u.isDirectory())return i(`${p}: is a directory \u2014 packs must be sealed .evidence files (run the execution to completion, or seal it, first)`);if(!u.isFile())return i(`${p}: not a regular file`);let f=Buffer.alloc(2),y=Qr(d,"r");try{en(y,f,0,2,0)}finally{tn(y)}if(f.toString("latin1")!=="PK")return i(`${p}: not a sealed evidence pack (zip magic missing)`);let _=rn(d);if(o.has(_))return i(`duplicate pack basename: ${_} (URL names collide \u2014 rename one)`);o.set(_,d)}let a=r.log??((p,d,u)=>process.stderr.write(`warn: ${d} reason=${u.reason} path=${u.path}
|
|
13
|
+
`)),c;try{c=await pe({packs:o,allowedOrigins:[new URL(s).origin],port:e.port,log:a})}catch(p){return i(`could not bind 127.0.0.1${e.port?`:${e.port}`:""} \u2014 ${p.message}`)}n(`serving ${o.size} pack${o.size===1?"":"s"} on http://127.0.0.1:${c.port}`);for(let p of o.keys()){let d=c.urlFor(p);n(p),n(` pack ${d}`),n(` viewer ${fe(d,s)}`)}return n("press Ctrl-C to stop"),await(r.hold??sn)(),await c.close(),0}function sn(){return new Promise(t=>{let e=process.listeners("SIGINT");process.removeAllListeners("SIGINT"),process.once("SIGINT",()=>{for(let r of e)process.on("SIGINT",r);t()})})}import{promises as ne}from"fs";import{tmpdir as un}from"os";import{join as Bt,resolve as Be}from"path";var an=["error","prefer_first","prefer_latest","discard"],cn=["external_id.commit_id","external_id.test_id"];function Tt(t){let e=t.replace(/-/g,"_");return an.includes(e)?e:null}function Vt(t){let e=t==="discard"?{on_collision:"discard"}:{on_collision:"error",identity:{keys:[...cn],on_same:t??"nest",on_different:t?"error":"split"}};return v({packs:{require_status:"finalized",require_valid:"L1",on_ineligible:"abort"},tests:e,rules:[{file:"run.yaml",key:"run_id",must:"different",on_violation:"skip"},{file:"result.yaml",key:"external_id.project_id",must:"same",on_violation:"error"},{file:"result.yaml",key:"external_id.org_id",must:"same",on_violation:"error"}]},{lineWidth:-1})}async function Ve(t){try{if(!t.isTTY){t.log(me(t.packPath));return}let e=B(t.env);await(t.renderPrompt??dn)(t.packPath,e)}catch(e){try{t.log(`evidence view failed \u2014 ${e.message}`)}catch{}}}async function dn(t,e){let r=await import("./react-QWOAB3TB.js"),{render:n}=await import("./build-JIKYOZUH.js"),{EvidenceViewOffer:i}=await import("./EvidenceViewOffer-FODRAS6Z.js");await new Promise(s=>{let o=n(r.default.createElement(i,{packPath:t,viewerBase:e,onDone:()=>{o.unmount(),s()}}),{stdout:process.stderr,exitOnCtrlC:!1})})}async function ln(t,e,r=process.cwd(),n={}){let i=n.out??(u=>process.stdout.write(u+`
|
|
14
|
+
`)),s=n.err??(u=>process.stderr.write(u+`
|
|
15
|
+
`)),o=u=>(s(`evidence merge: ${u}`),2);if(!e.runId)return o("--run-id is required (merged identity is the caller's fact)");if(e.rules&&e.onCollision)return o("--rules and --on-collision are mutually exclusive");let a;if(e.onCollision!==void 0){let u=Tt(e.onCollision);if(!u)return o(`invalid --on-collision: ${e.onCollision} (expected error | prefer-first | prefer-latest | discard)`);a=u}let c=[];for(let u of t){let f=await pn(u,r);if(!f)return o(`no pack found for "${u}"`);c.push(f)}let l=e.out?Be(r,e.out):h(e.runId,r),p=null,d;e.rules?d=Be(r,e.rules):(p=await ne.mkdtemp(Bt(un(),"kane-merge-rules-")),d=Bt(p,"merge-rules.yaml"),await ne.writeFile(d,Vt(a)));try{let u=await(n.mergeFn??tt)(c,{runId:e.runId,out:l,rulesPath:d,title:e.title,finalize:e.finalize});return e.json?i(JSON.stringify(u)):fn(i,u),u.output.finalized&&!e.json&&await(n.offer??Ve)({packPath:l,env:e.env,isTTY:n.isTTY??(!!process.stdin.isTTY&&!!process.stderr.isTTY),log:s}),0}catch(u){let f=u instanceof Error?u.message:String(u);return u?.code==="ABORT"?(s(`evidence merge: aborted \u2014 ${f}`),1):o(f)}finally{p&&await ne.rm(p,{recursive:!0,force:!0}).catch(()=>{})}}async function pn(t,e){let r=Be(e,t);if(await zt(r))return r;let n=h(t,e);return await zt(n)?n:null}async function zt(t){try{return await ne.stat(t),!0}catch{return!1}}function fn(t,e){let{packs:r,tests:n,output:i}=e;t(`evidence: merged ${n.merged} tests from ${r.eligible.length} packs -> ${i.path} (${i.finalized?"sealed":"live"})`);for(let s of r.skipped)t(` skipped ${s.runId}: ${s.rule} \u2014 ${s.reason}`);for(let s of n.collisions){let o;s.action==="nest"?o=`nested into ${s.folder}, latest ${s.winner}`:s.action==="split"?o=`split into ${s.folder}`:o=`winner ${s.winner}`,t(` collision ${s.test}: ${o} (${s.rule})`)}for(let s of n.discarded)t(` discarded ${s}`)}import{copyFileSync as mn,existsSync as ze,mkdirSync as gn}from"fs";import{join as Gt}from"path";function hn(t,e,r){try{let n=Gt(t,"auteur","execution.json");if(ze(n))return!0;for(let i of e)if(!(!i||!ze(i)))return gn(Gt(t,"auteur"),{recursive:!0}),mn(i,n),!0}catch(n){try{r?.("debug","EVIDENCE_BLOB_COPY_FAILED","auteur execution blob copy failed",{operation:"ensureAuteurExecution",source:e.find(i=>i&&ze(i))??null,error:n instanceof Error?n.message:String(n)})}catch{}}return!1}import{readFileSync as vn}from"fs";import{join as yn}from"path";function Ye(t){let e=[],r=!0,n=s=>{if(s===null||typeof s!="object")return;let o=s;if(Array.isArray(o.operations))for(let a of o.operations){let c=a?.operation_id;typeof c=="string"&&c&&e.push(c)}if(Array.isArray(o.children)){o.content_type!=="generative_block"&&(r=!1);for(let a of o.children)n(a)}if(Array.isArray(o.branches)){r=!1;for(let a of o.branches){let c=a?.children;if(Array.isArray(c))for(let l of c)n(l)}}},i=t?.instructions;if(Array.isArray(i))for(let s of i)n(s);return{ids:e,linear:r}}function wn(t){return Ye(t).ids}function Ge(t,e){let r=new Set(e.map(a=>a.action_id).filter(Boolean)),n=-1;for(let a of r){let c=t.indexOf(a);c>n&&(n=c)}let i=e.reduce((a,c)=>Math.max(a,c.ordinal),0),s=new Set,o=[];for(let a of t.slice(n+1))r.has(a)||s.has(a)||(s.add(a),o.push({id:a,ordinal:++i,status:"skipped",action_id:a}));return o}function Yt(t,e){let r=new Set(e),n=t.filter(s=>s.action_id);if(n.some(s=>r.has(s.action_id))||n.length>e.length)return null;let i=0;return t.map(s=>s.action_id?{...s,action_id:e[i++]}:s)}function xn(t,e){if(t.length>e.length)return!1;for(let r=0;r<t.length;r++)if(e[r]!==t[r].action_id)return!1;return!0}function _n(t,e,r,n=!0){if(e.length===0)return{steps:t,tail:[]};let i=(r&&n?Yt(t,e):null)??t,s=i.filter(a=>a.action_id),o=new Set(e);return s.length>0&&s.every(a=>o.has(a.action_id))?{steps:i,tail:Ge(e,i)}:s.length>0&&!xn(s,e)?{steps:i,tail:[],unjoined:!0}:{steps:i,tail:Ge(e,i)}}function Ht(t){try{let e=vn(yn(t,"auteur","execution.json"),"utf8");return Ye(JSON.parse(e))}catch{return{ids:[],linear:!0}}}function kn(t){return Ht(t).ids}export{C as a,ge as b,he as c,ve as d,ye as e,we as f,xe as g,qt as h,_e as i,ke as j,Jt as k,Xt as l,be as m,X as n,Ee as o,Re as p,Pe as q,Ae as r,Zt as s,Qt as t,De as u,er as v,$e as w,Ce as x,Le as y,_t as z,Oe as A,It as B,Me as C,Pt as D,wr as E,z as F,Ir as G,Mt as H,jt as I,Nt as J,Wr as K,qr as L,Jr as M,Xr as N,on as O,Vt as P,Ve as Q,ln as R,hn as S,Ye as T,wn as U,Ge as V,Yt as W,_n as X,Ht as Y,kn as Z};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{h as w}from"./chunk-TAOHYWEO.js";import{a as h}from"./chunk-RZ4F3BHX.js";import{
|
|
2
|
+
import{h as w}from"./chunk-TAOHYWEO.js";import{a as h}from"./chunk-RZ4F3BHX.js";import{b as f}from"./chunk-CCUGKBIH.js";import{mkdtemp as O,rm as $}from"fs/promises";import{createWriteStream as R}from"fs";import{Readable as U}from"stream";import{pipeline as F}from"stream/promises";import{tmpdir as T}from"os";import{basename as z,join as A}from"path";import{access as x,cp as P,mkdir as g,readdir as y,readFile as S,rename as I,rm as k,stat as b,writeFile as v}from"fs/promises";import{basename as D,join as d}from"path";function u(){return d(f,"mobile","apps")}function m(){return d(u(),"index.json")}function C(){return{readIndex:async()=>{try{let e=JSON.parse(await S(m(),"utf8"));return{apps:Array.isArray(e.apps)?e.apps:[]}}catch{return{apps:[]}}},writeIndex:async r=>{await g(u(),{recursive:!0});let e=`${m()}.tmp`;await v(e,JSON.stringify(r,null,2)),await I(e,m())},exists:async r=>{try{return await x(r),!0}catch{return!1}},copy:(r,e)=>P(r,e,{recursive:!0,force:!0}),remove:r=>k(r,{recursive:!0,force:!0}),sizeOf:async r=>{try{return(await b(r)).size}catch{return}},now:()=>new Date}}var c=class{deps;constructor(e={}){this.deps={...C(),...e}}async list(){let{apps:e}=await this.deps.readIndex();return[...e].sort((t,s)=>s.lastUsedAt.localeCompare(t.lastUsedAt))}async find(e){return(await this.deps.readIndex()).apps.find(t=>t.key===e)}async put(e){let t=await this.deps.readIndex(),s=t.apps.find(n=>n.key===e.key),a=this.deps.now().toISOString();if(s&&await this.deps.exists(s.path))return s.lastUsedAt=a,await this.deps.writeIndex(t),s;s&&(t.apps=t.apps.filter(n=>n.key!==e.key));let l=D(e.name??e.sourcePath),o=d(u(),e.key),p=d(o,l);await g(o,{recursive:!0}),await this.deps.copy(e.sourcePath,p);let i={key:e.key,path:p,name:l,source:e.source,...e.source==="local"?{originPath:e.sourcePath}:{},addedAt:a,lastUsedAt:a,...await this.deps.sizeOf(p).then(n=>n?{bytes:n}:{})};return t.apps=[...t.apps.filter(n=>n.key!==e.key),i],await this.deps.writeIndex(t),i}async exists(e){if(await this.deps.sizeOf(e.path)!==void 0)return!0;try{return await y(e.path),!0}catch{return!1}}async forget(e){let t=await this.deps.readIndex(),s=t.apps.find(a=>a.key===e);s&&(await this.deps.remove(s.path),t.apps=t.apps.filter(a=>a.key!==e),await this.deps.writeIndex(t))}async prune(){let e=await this.deps.readIndex(),t=[];for(let s of e.apps)if(await this.deps.sizeOf(s.path)!==void 0)t.push(s);else try{await y(s.path),t.push(s)}catch{}return t.length!==e.apps.length&&await this.deps.writeIndex({apps:t}),t}};var E=30*6e4,j=/^APP\d{6,}$/;function Y(r){return!!r&&j.test(r.trim())}function _(){return{store:new c,client:(r,e)=>new w(r,e),fetchToFile:async(r,e)=>{let t=await h(r,{method:"GET",signal:AbortSignal.timeout(E)});if(!t.ok)throw new Error(`Downloading the app failed: ${t.status} ${t.statusText}`);if(!t.body)throw new Error("Downloading the app failed: empty response body");await F(U.fromWeb(t.body),R(e))}}}async function Z(r,e={}){let t={..._(),...e},s=r.appId.trim(),a=await t.store.find(s);if(a&&await t.store.exists(a))return r.onProgress?.(`using the copy of ${a.name} already on this machine`),await t.store.put({key:s,sourcePath:a.path,source:"cloud",name:a.name}),{path:a.path,name:a.name,fromStore:!0};r.onProgress?.(`looking up ${s}\u2026`);let o=await t.client(r.baseUrl,r.auth).details(s);if(r.accepts&&!r.accepts.some(i=>o.name.toLowerCase().endsWith(i)))throw new Error(`${o.name} cannot run on this device \u2014 expected ${r.accepts.join(" or ")}.`);r.onProgress?.(`downloading ${o.name} \u2014 this can take a while, please wait\u2026`);let p=await O(A(T(),"kane-app-dl-"));try{let i=A(p,z(o.name));await t.fetchToFile(o.url,i);let n=await t.store.put({key:s,sourcePath:i,source:"cloud",name:o.name});return r.onProgress?.(`${o.name} is ready`),{path:n.path,name:n.name,fromStore:!1,details:o}}finally{await $(p,{recursive:!0,force:!0})}}export{c as a,Y as b,Z as c};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{
|
|
2
|
+
import{b as g}from"./chunk-CCUGKBIH.js";import{readFileSync as o,writeFileSync as h,mkdirSync as u,readdirSync as a,unlinkSync as s,existsSync as l,chmodSync as f}from"fs";import{join as n,dirname as P}from"path";var d=class{baseDir;profilesDir;configFile;constructor(t=g){this.baseDir=t,this.profilesDir=n(t,"profiles"),this.configFile=n(t,"config.json")}readConfig(){try{return JSON.parse(o(this.configFile,"utf-8"))}catch{return{}}}writeConfig(t){u(this.baseDir,{recursive:!0,mode:448}),h(this.configFile,JSON.stringify(t,null,2)+`
|
|
3
3
|
`),f(this.configFile,384)}getActiveProfile(){return this.readConfig().active_profile??null}setActiveProfile(t){let i=this.readConfig();i.active_profile=t,this.writeConfig(i)}getDefaultEnv(){return this.readConfig().default_env??"prod"}setDefaultEnv(t){let i=this.readConfig();i.default_env=t,this.writeConfig(i)}credentialsPath(t,i){return n(this.profilesDir,t,i,"credentials")}clientPath(t,i){return n(this.profilesDir,t,i,"client.json")}basicAuthPath(t,i){return n(this.profilesDir,t,i,"basic-auth")}profileConfigPath(t,i){return n(this.profilesDir,t,i,"profile-config.json")}saveProfileConfig(t,i,r){let e=this.loadProfileConfig(t,i)??{};this.writeSecure(this.profileConfigPath(t,i),{...e,...r})}loadProfileConfig(t,i){try{return JSON.parse(o(this.profileConfigPath(t,i),"utf-8"))}catch{return null}}writeSecure(t,i){try{u(P(t),{recursive:!0,mode:448}),h(t,JSON.stringify(i,null,2)+`
|
|
4
4
|
`),f(t,384)}catch(r){let e=r instanceof Error?r.message:String(r);process.stderr.write(`[auth] Failed to save credentials: ${e}
|
|
5
5
|
`)}}saveCredentials(t,i,r){this.writeSecure(this.credentialsPath(t,i),r)}loadCredentials(t,i){try{return JSON.parse(o(this.credentialsPath(t,i),"utf-8"))}catch{return null}}saveClient(t,i,r){this.writeSecure(this.clientPath(t,i),r)}loadClient(t,i){try{return JSON.parse(o(this.clientPath(t,i),"utf-8"))}catch{return null}}getActiveCredentials(){let t=this.getActiveProfile();if(!t)return{credentials:null,profile:null,env:null};let i=this.getDefaultEnv();return{credentials:this.loadCredentials(t,i),profile:t,env:i}}saveBasicAuth(t,i,r){this.writeSecure(this.basicAuthPath(t,i),r)}loadBasicAuth(t,i){try{return JSON.parse(o(this.basicAuthPath(t,i),"utf-8"))}catch{return null}}deleteBasicAuth(t,i){try{s(this.basicAuthPath(t,i))}catch{}}resolveAuth(){let t=this.getActiveProfile();if(!t)return null;let i=this.getDefaultEnv(),r=this.loadBasicAuth(t,i);return r?{method:"basic",...r,profile:t,env:i}:this.loadCredentials(t,i)?{method:"oauth",profile:t,env:i}:null}listProfiles(){let t=[];try{for(let i of a(this.profilesDir)){let r=n(this.profilesDir,i);try{for(let e of a(r)){let c=n(r,e),v=l(n(c,"credentials")),p=l(n(c,"client.json")),y=l(n(c,"basic-auth"));(v||p||y)&&t.push({profile:i,env:e})}}catch{}}}catch{}return t}deleteProfile(t,i){try{s(this.credentialsPath(t,i))}catch{}if(this.getActiveProfile()===t){let r=this.readConfig();delete r.active_profile,this.writeConfig(r)}}deleteProfileFull(t,i){if(i){try{s(this.credentialsPath(t,i))}catch{}try{s(this.clientPath(t,i))}catch{}try{s(this.basicAuthPath(t,i))}catch{}try{s(this.profileConfigPath(t,i))}catch{}}else try{let r=n(this.profilesDir,t);for(let e of a(r)){try{s(n(r,e,"credentials"))}catch{}try{s(n(r,e,"client.json"))}catch{}try{s(n(r,e,"basic-auth"))}catch{}try{s(n(r,e,"profile-config.json"))}catch{}}}catch{}}};export{d as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-5Y2G4NC7.js";import{
|
|
2
|
+
import{a}from"./chunk-5Y2G4NC7.js";import{x as o}from"./chunk-CCUGKBIH.js";import{a as n}from"./chunk-HCBYKLMW.js";import{b as t}from"./chunk-C44QQJR4.js";import{a as s}from"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var l=r(s(),1);var m=r(n(),1),i=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function b({active:e=!0}){let[p,c]=(0,l.useState)(0);return a(()=>{c(f=>(f+1)%i.length)},e?80:null),(0,m.jsx)(t,{color:o.orange,children:e?i[p]:"\u25CF"})}export{b as a};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{c as u,d as p}from"./chunk-
|
|
2
|
+
import{c as u,d as p}from"./chunk-7JUUNZQP.js";import{spawn as h}from"child_process";var k=new Set(["progress","ask_user","graph_query","ingest_request","proposal","design","error","done","reasoning_delta","reasoning_done","tool_activity","decision_activity","text_delta","usage","receipt","chat_ops","session_paused","session_complete","state_checkpoint"]);function v(g,n={}){let a=n.spawnCmd!==void 0?n.spawnCmd:u();if(!a)throw new Error("assurance agent not found \u2014 your platform package may be missing; reinstall kane-cli (npm i -g @testmuai/kane-cli)");let f=g.source.images?.length??0;a.tier==="dev-python"&&f>0&&n.onWarn?.("warn: development agent in use \u2014 if image citations are missing, update the agent package");let t=h(a.cmd,a.args,{stdio:["pipe","pipe","pipe"],env:p(g.session_id,n.auth)});if(t.stdin.write(JSON.stringify(g)+`
|
|
3
3
|
`),n.onStderr){let e="";t.stderr.on("data",r=>{e+=r.toString("utf8");let i;for(;(i=e.indexOf(`
|
|
4
4
|
`))>=0;){let o=e.slice(0,i);e=e.slice(i+1),o.trim()&&n.onStderr(o)}})}let d=new Promise(e=>{t.on("exit",(r,i)=>e({code:r,signal:i}))});async function*m(){let e="",r=!1;for await(let i of t.stdout){e+=i.toString("utf8");let o;for(;(o=e.indexOf(`
|
|
5
5
|
`))>=0;){let l=e.slice(0,o).trim();if(e=e.slice(o+1),!l)continue;let c;try{c=JSON.parse(l)}catch{n.onWarn?.(`agent: skipping malformed line: ${l.slice(0,120)}`);continue}let s=c;if(!s||typeof s!="object"||!k.has(s.type)){n.onWarn?.(`agent: skipping unknown event type "${s&&typeof s=="object"?String(s.type??"?"):"?"}"`);continue}if(yield s,s.type==="done"){r=!0;break}}if(r)break}await d.catch(()=>{})}return{events:m(),send:e=>{t.stdin&&!t.stdin.destroyed&&t.stdin.write(JSON.stringify(e)+`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as o,b as i}from"./chunk-
|
|
2
|
+
import{a as o,b as i}from"./chunk-CNNJ4U2L.js";import{resolve as n}from"path";async function w(c,s,r={}){let e=i({verb:c,mode:"cli",contextRoot:n(process.cwd(),".context"),env:o(),write:r.write});try{let t=await s(e);return r.write&&t===0&&await e.lateBindContext(n(process.cwd(),".context")),t===1&&process.stderr.write(e.supportFooter()+`
|
|
3
3
|
`),await e.end({exit_code:t}),t}catch(t){throw e.error("cli_crash"),process.stderr.write(e.supportFooter()+`
|
|
4
4
|
`),await e.end({exit_code:1}),t}}export{w as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as m}from"./chunk-
|
|
2
|
+
import{a as m}from"./chunk-ZIRMSWKS.js";import{x as t}from"./chunk-CCUGKBIH.js";import{a as p}from"./chunk-HCBYKLMW.js";import{a,b as r,i as u}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var c=n(b(),1);var e=n(p(),1);function R({onSubmit:l}){let[o,f]=(0,c.useState)(0),s=(0,c.useRef)(!1);return u((x,i)=>{s.current||(i.leftArrow||i.rightArrow?f(d=>d===0?1:0):i.return?(s.current=!0,l(o===0?"positive":"negative")):i.escape&&(s.current=!0,l(null)))}),(0,e.jsxs)(a,{flexDirection:"column",marginTop:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(r,{color:t.secondary,children:"Rate this session: "}),(0,e.jsx)(r,{color:o===0?t.orange:t.dim,children:o===0?"[ \u{1F44D} ]":" \u{1F44D} "}),(0,e.jsx)(r,{children:" "}),(0,e.jsx)(r,{color:o===1?t.orange:t.dim,children:o===1?"[ \u{1F44E} ]":" \u{1F44E} "})]}),(0,e.jsx)(m,{bindings:[{keys:"\u2190/\u2192",label:"select"},{keys:"\u21B5",label:"submit"}],escBackLabel:"skip"})]})}export{R as a};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as f,c as u}from"./chunk-EYOCNMUM.js";import{
|
|
2
|
+
import{a as f,c as u}from"./chunk-EYOCNMUM.js";import{c as g,j as p}from"./chunk-CCUGKBIH.js";import{readFileSync as _,writeFileSync as m,mkdirSync as b,existsSync as h}from"fs";import{dirname as v}from"path";var s={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:p,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0};function w(o){let{mobile:e,...i}=o,t={...i};delete t.target,delete t.device,delete t.app;let n=e??{};n.tui_target&&(t.target=n.tui_target);let r=n.default_target?.id?.trim();r&&(t.device=r),n.default_app&&(t.app=n.default_app);let a={};return n.no_reset!==void 0&&(a.no_reset=n.no_reset),n.appium_url!==void 0&&(a.appium_url=n.appium_url),Object.keys(a).length>0&&(t.mobile=a),t}function C(o){let e=o.mobile??{},i=typeof o.target=="string"?o.target:void 0,t=typeof o.device=="string"&&o.device.trim()!==""?o.device.trim():void 0,n=typeof o.app=="string"&&o.app!==""?o.app:void 0,r={},a=i??e.tui_target;if(a&&(r.tui_target=a),t){let d=f(a,void 0);(d.kind==="emulator"||d.kind==="simulator")&&(r.default_target={platform:u(d.kind),kind:d.kind,id:t})}else e.default_target?.id?.trim()&&(r.default_target=e.default_target);let l=n??e.default_app;return l&&(r.default_app=l),e.no_reset!==void 0&&(r.no_reset=e.no_reset),e.appium_url!==void 0&&(r.appium_url=e.appium_url),Object.keys(r).length>0?r:void 0}var c=class{constructor(e=g){this.path=e}exists(){return h(this.path)}load(){try{let e=_(this.path,"utf-8"),i=JSON.parse(e),t=C(i),{target:n,device:r,app:a,...l}=i;return{...s,...l,...t?{mobile:t}:{},code_export:{...s.code_export,...i.code_export??{}},generate:{...s.generate,...i.generate??{}}}}catch{return{...s,code_export:{...s.code_export},generate:{...s.generate}}}}write(e){try{b(v(this.path),{recursive:!0}),m(this.path,JSON.stringify(w(e),null,2)+`
|
|
3
3
|
`)}catch(i){let t=i instanceof Error?i.message:String(i);process.stderr.write(`[config] Failed to save config: ${t}
|
|
4
4
|
`)}}set(e,i){let t=this.load();t[e]=i,this.write(t)}save(e){this.write({...this.load(),...e})}getMobile(){return this.load().mobile??{}}setMobile(e){let i={...this.getMobile()};for(let t of Object.keys(e)){let n=e[t];n===void 0?delete i[t]:i[t]=n}this.set("mobile",Object.keys(i).length>0?i:void 0)}writeRaw(e){this.write(e)}};export{c as a};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as f}from"./chunk-
|
|
2
|
+
import{b as f}from"./chunk-UX3KPYTI.js";import{c as g}from"./chunk-UD7KKHPW.js";import{existsSync as u}from"fs";import{dirname as A,resolve as l}from"path";import{fileURLToPath as E}from"url";var p=A(E(import.meta.url));function _(){return[l(p,".."),l(p,"../../..")]}function x(s){return{"darwin-arm64":"kane-cli-darwin-arm64","darwin-x64":"kane-cli-darwin-x64","linux-x64":"kane-cli-linux-x64","linux-arm64":"kane-cli-linux-arm64","win32-x64":"kane-cli-win-x64"}[s]??null}function T(s){return{"darwin-arm64":"kane-cli-assurance-darwin-arm64","darwin-x64":"kane-cli-assurance-darwin-x64","linux-x64":"kane-cli-assurance-linux-x64","linux-arm64":"kane-cli-assurance-linux-arm64","win32-x64":"kane-cli-assurance-win-x64"}[s]??null}function I(s=_()){let n=x(`${process.platform}-${process.arch}`),i=T(`${process.platform}-${process.arch}`),a=process.platform==="win32"?"assurance-agent.exe":"assurance-agent";for(let e of s){for(let t of i?["@testmuai","@lambdatestincprivate"]:[]){let m=l(e,"node_modules",t,i,"bin",a);if(u(m))return{cmd:m,args:[],tier:"platform"}}for(let t of n?["@testmuai","@lambdatestincprivate"]:[]){let m=l(e,"node_modules",t,n,"bin",a);if(u(m))return{cmd:m,args:[],tier:"platform"}}let c=l(e,"dist","bin",a);if(u(c))return{cmd:c,args:[],tier:"embedded"};let r=l(e,"../assurance-agent/dist",a);if(u(r))return{cmd:r,args:[],tier:"sibling"};let o=l(e,"../assurance-agent/main.py");if(u(o)){let t=l(e,"../assurance-agent/.venv/bin/python");return{cmd:u(t)?t:"python3",args:[o],tier:"dev-python"}}}return null}function U(s,n={}){return{...process.env,...n,...f(),TESTMUAI_SOURCE:"kane-cli",TESTMUAI_SESSION_ID:s,ASSURANCE_LOG_LEVEL:process.env.ASSURANCE_LOG_LEVEL??"info"}}async function P(){if(process.env.TESTMUAI_API_KEY||process.env.TESTMUAI_BASIC_AUTH)return{};try{let{CredentialsManager:s}=await import("./credentials-SO3DSQEM.js"),n=process.env.TESTMUAI_ENV==="stage"?"stage":"prod",i=new s,a=i.getActiveProfile()??"default",e={TESTMUAI_ENV:n},c=i.loadBasicAuth(a,n);if(c)return e.TESTMUAI_BASIC_AUTH=Buffer.from(`${c.username}:${c.access_key}`,"utf8").toString("base64"),e;let r=i.loadCredentials(a,n);if(r){try{let{refreshOAuthToken:t}=await import("./token-refresh-PIUX5OFA.js");await t({creds:i,profile:a,env:n,credentials:r})}catch{}let o=i.loadCredentials(a,n)??r;if(typeof o.access_token=="string"){let t=await w(n,o.access_token);return t?(e.TESTMUAI_BASIC_AUTH=t,e):(e.TESTMUAI_API_KEY=o.access_token,e)}}return{}}catch{return{}}}var h=8e3;function d(){return g("warn: session auth may expire during long runs \u2014 if that happens, run `kane-cli login` and retry","AUTH_EXCHANGE_FAILED"),null}async function w(s,n){try{let[{getEnvironment:i},{ControllerClient:a}]=await Promise.all([import("./config-OKTAPFOT.js"),import("./controller-client-OB4WD2C4.js")]),e=new a(i(s).controllerBaseUrl,n),c;try{let r=await Promise.race([e.getTmsCredentials().catch(()=>null),new Promise(o=>{c=setTimeout(()=>o(null),h)})]);if(typeof r?.username!="string"||!r.username||typeof r.access_key!="string"||!r.access_key)return d();try{let[{refreshIdentitySnapshot:o},{telemetryEnvName:t}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-5IHKW5SE.js")]);await o(t(),r)}catch{}return Buffer.from(`${r.username}:${r.access_key}`,"utf8").toString("base64")}finally{clearTimeout(c)}}catch{return d()}}export{x as a,T as b,I as c,U as d,P as e};
|