@testmuai/kane-cli 0.8.5 → 0.8.7
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-HAIVTS4J.js → ChatSurface-3PEXML4X.js} +1 -1
- package/dist/{ChromeProfilePicker-5ILSVC2K.js → ChromeProfilePicker-E3CZ52RH.js} +1 -1
- package/dist/{CliFeedbackPrompt-LFKEYMKP.js → CliFeedbackPrompt-BEVZRLQA.js} +1 -1
- package/dist/{CliUploadProgress-Y7ITY2I7.js → CliUploadProgress-V2FLLVR6.js} +1 -1
- package/dist/ConfigView-ZOGKVFQT.js +2 -0
- package/dist/EvidenceViewOffer-KWX27WNZ.js +2 -0
- package/dist/FolderPicker-EIKQSSF6.js +2 -0
- package/dist/{InfoBox-HWMHNWPM.js → InfoBox-4TNE7QMG.js} +1 -1
- package/dist/{LinksBox-TAGYCFFO.js → LinksBox-TXO5X5UD.js} +1 -1
- package/dist/{ProfilesView-QJBR3RCM.js → ProfilesView-S4YPEZEF.js} +1 -1
- package/dist/{ProjectPicker-PP75ILZU.js → ProjectPicker-LWFX2QT2.js} +1 -1
- package/dist/{SaveSessionPrompt-UCRET3II.js → SaveSessionPrompt-MJTCIQIZ.js} +1 -1
- package/dist/SingleShotApp-5LCIH6DQ.js +2 -0
- package/dist/{SummaryBox-SLM3OFS2.js → SummaryBox-UIVK3QDR.js} +1 -1
- package/dist/TestMdRunView-RE5GX5QX.js +2 -0
- package/dist/{TestrunEvidenceTable-PTIBYAXO.js → TestrunEvidenceTable-GYGVNCYW.js} +1 -1
- package/dist/{WhoamiView-WPHMNYUV.js → WhoamiView-NRGMMLL4.js} +1 -1
- package/dist/{app-download-GYQYLGT3.js → app-download-HTQOD3YF.js} +1 -1
- package/dist/{auth-3DLNMZC2.js → auth-5URO2XJU.js} +1 -1
- package/dist/{binary-XJ3RF3VO.js → binary-2U4YTTFS.js} +1 -1
- package/dist/{bind-2N4Q6YKH.js → bind-NO4TMSHJ.js} +3 -3
- package/dist/{bootstrap-5IHKW5SE.js → bootstrap-UOEW3VZM.js} +1 -1
- package/dist/bridge-P2EBLXPY.js +2 -0
- package/dist/{changelog-WCCTI47M.js → changelog-7BPYLUDK.js} +1 -1
- package/dist/chat-committer-GUK6IBCL.js +2 -0
- package/dist/{chat-controller-R4THYYPU.js → chat-controller-6GUUMUVP.js} +1 -1
- package/dist/{chunk-EFRJNPBZ.js → chunk-2RO2BWCZ.js} +2 -2
- package/dist/chunk-3BY7MX3D.js +8 -0
- package/dist/{chunk-AMULIFC5.js → chunk-3IM5QGVV.js} +1 -1
- package/dist/{chunk-MUGMUKSZ.js → chunk-3YKNJIVB.js} +1 -1
- package/dist/{chunk-7JUUNZQP.js → chunk-44PZPNXJ.js} +1 -1
- package/dist/{chunk-GZ4X53ZA.js → chunk-46HYKID6.js} +2 -2
- package/dist/{chunk-CNNJ4U2L.js → chunk-4EFDEDTL.js} +1 -1
- package/dist/chunk-5ZV64NAG.js +5 -0
- package/dist/{chunk-E3BXNQYE.js → chunk-6AUSG5SB.js} +1 -1
- package/dist/{chunk-AJPLHW4T.js → chunk-6YVVTYVO.js} +1 -1
- package/dist/{chunk-HFCDUFV3.js → chunk-72J4V3DA.js} +1 -1
- package/dist/{chunk-4UMQDH52.js → chunk-76ILJPZF.js} +1 -1
- package/dist/{chunk-NLECZCMZ.js → chunk-7CU5EBC6.js} +1 -1
- package/dist/{chunk-O3AY6JHJ.js → chunk-7EFG27IZ.js} +4 -4
- package/dist/chunk-7UCICMK7.js +5 -0
- package/dist/{chunk-M335FQYJ.js → chunk-7VAE7WXF.js} +2 -2
- package/dist/{chunk-DJ7T7BMV.js → chunk-A66ZGHO2.js} +1 -1
- package/dist/chunk-AJXOJF2X.js +4 -0
- package/dist/{chunk-K7UYWAZH.js → chunk-AUERMBX5.js} +1 -1
- package/dist/{chunk-PCOSE5SW.js → chunk-B27X3C2E.js} +1 -1
- package/dist/chunk-B2KXIFZD.js +2 -0
- package/dist/{chunk-R7OGNE3W.js → chunk-BISBPWN3.js} +1 -1
- package/dist/{chunk-RY6TFVAX.js → chunk-BPHQNTUD.js} +1 -1
- package/dist/{chunk-JFAFKHDX.js → chunk-BZAGVBCX.js} +1 -1
- package/dist/chunk-C4OVX65Q.js +4 -0
- package/dist/{chunk-JRQKUQWL.js → chunk-C5ZIKKIB.js} +1 -1
- package/dist/{chunk-PUFJEU46.js → chunk-C765HUXU.js} +1 -1
- package/dist/{chunk-MJ56GUKS.js → chunk-DJC6MLO4.js} +1 -1
- package/dist/{chunk-PEI2566X.js → chunk-DMOZM22N.js} +1 -1
- package/dist/{chunk-FRSHEJUS.js → chunk-DSNB7EI6.js} +1 -1
- package/dist/{chunk-JN2DP4R2.js → chunk-DTBKKC2R.js} +1 -1
- package/dist/chunk-E5C3HUIY.js +2 -0
- package/dist/chunk-E5Q5CDOX.js +2 -0
- package/dist/{chunk-7PADFQ5S.js → chunk-E6AF53HZ.js} +42 -43
- package/dist/chunk-EU5ZH334.js +2 -0
- package/dist/{chunk-GFKCTYCA.js → chunk-F43KOMVB.js} +1 -1
- package/dist/{chunk-FDWEL5HR.js → chunk-F7RR24BL.js} +1 -1
- package/dist/{chunk-KWKUMBHS.js → chunk-FVKLNQ4T.js} +2 -2
- package/dist/{chunk-ZGBSGZZM.js → chunk-GAO6ZMCT.js} +1 -1
- package/dist/chunk-GDB2V6QA.js +21 -0
- package/dist/{chunk-5NSYHRDN.js → chunk-GJ6RJVXH.js} +1 -1
- package/dist/{chunk-OWTEHU6B.js → chunk-GYTZLUFV.js} +1 -1
- package/dist/{chunk-WLOGO44E.js → chunk-HAGJA7KG.js} +1 -1
- package/dist/{chunk-7KORP5FF.js → chunk-HEWWWMUN.js} +1 -1
- package/dist/{chunk-KX2GOJ4C.js → chunk-HHQ67JCU.js} +1 -1
- package/dist/chunk-HL4UXOHV.js +2 -0
- package/dist/{chunk-DUAXZYAD.js → chunk-HLXOYLZV.js} +3 -3
- package/dist/{chunk-BJHII5SD.js → chunk-HO3T5LJH.js} +1 -1
- package/dist/{chunk-PWYEOBXV.js → chunk-IJABR5SX.js} +1 -1
- package/dist/chunk-ILKSL4PI.js +4 -0
- package/dist/{chunk-2WSOPZJU.js → chunk-IQBKCLLR.js} +1 -1
- package/dist/{chunk-GYF4CH62.js → chunk-IRPAWAK7.js} +2 -2
- package/dist/{chunk-T3XDMR5B.js → chunk-K7VX6YIT.js} +1 -1
- package/dist/{chunk-DCUT3GJA.js → chunk-LOMPRMG3.js} +1 -1
- package/dist/{chunk-ZFZ7YXEU.js → chunk-LRZXVDPY.js} +1 -1
- package/dist/chunk-LWZ7EIXX.js +2 -0
- package/dist/{chunk-Q6JHBDW2.js → chunk-MROHDW4W.js} +1 -1
- package/dist/{chunk-CCUGKBIH.js → chunk-N2N5T5JN.js} +1 -1
- package/dist/{chunk-TYI4MLFJ.js → chunk-NM6PEYED.js} +1 -1
- package/dist/{chunk-TJZMYU2W.js → chunk-NQFAZM2D.js} +1 -1
- package/dist/{chunk-W27F2NWA.js → chunk-OADHU5HL.js} +1 -1
- package/dist/{chunk-66BSTNLD.js → chunk-OHD4CZXT.js} +1 -1
- package/dist/{chunk-T5LKD2OB.js → chunk-P4JUY54O.js} +1 -1
- package/dist/chunk-Q3S5EKX5.js +21 -0
- package/dist/{chunk-AFPHLUQ5.js → chunk-Q4CTSXDM.js} +1 -1
- package/dist/{chunk-CGYSFLM2.js → chunk-QQ67Z4IW.js} +1 -1
- package/dist/{chunk-NHOHQBIF.js → chunk-QZB7CBRO.js} +1 -1
- package/dist/{chunk-PB3GADUD.js → chunk-R2JRQD4I.js} +1 -1
- package/dist/{chunk-CLGC7VEO.js → chunk-SWXEBLKX.js} +1 -1
- package/dist/{chunk-5S46D5AJ.js → chunk-SZTUZZEA.js} +1 -1
- package/dist/{chunk-PQUMOFT5.js → chunk-T3DVIDBA.js} +1 -1
- package/dist/{chunk-YFLKS4UV.js → chunk-T4LAHU57.js} +3 -3
- package/dist/{chunk-4D3DNCQY.js → chunk-TKQSIKMR.js} +1 -1
- package/dist/chunk-TMFFHGCT.js +17 -0
- package/dist/{chunk-35EUIBYJ.js → chunk-U35Y7SGB.js} +1 -1
- package/dist/{chunk-V444REBC.js → chunk-UASEGQ7B.js} +1 -1
- package/dist/{chunk-K2QV7FGP.js → chunk-UFYIQ4E3.js} +1 -1
- package/dist/chunk-UOLERTKE.js +2 -0
- package/dist/{chunk-NYSMQ7UY.js → chunk-VHA7UNDW.js} +1 -1
- package/dist/{chunk-JJWQUQJ2.js → chunk-VMRP44MN.js} +1 -1
- package/dist/{chunk-FTZPWXF7.js → chunk-VOXDZS4N.js} +1 -1
- package/dist/{chunk-6KPPGMO2.js → chunk-WNHLKDOT.js} +1 -1
- package/dist/chunk-X7R2JWOJ.js +4 -0
- package/dist/chunk-XAQ3Y63J.js +21 -0
- package/dist/chunk-YC2TFACE.js +5 -0
- package/dist/{chunk-UX3KPYTI.js → chunk-YC6HYBLN.js} +1 -1
- package/dist/{chunk-ZIRMSWKS.js → chunk-YDEK2FJQ.js} +1 -1
- package/dist/chunk-YGVY63PE.js +20 -0
- package/dist/chunk-YKYZKBMH.js +26 -0
- package/dist/{chunk-BAL7E4OH.js → chunk-YYSWJU6H.js} +1 -1
- package/dist/{chunk-VRVFPMCR.js → chunk-Z3EEMIVV.js} +1 -1
- package/dist/{chunk-6BTZ2Q4P.js → chunk-Z7HUW3L4.js} +1 -1
- package/dist/chunk-Z7S3IWUX.js +2 -0
- package/dist/{chunk-TCK3QMKY.js → chunk-ZFRWVWUR.js} +1 -1
- package/dist/{chunk-Z2T7E5HM.js → chunk-ZH2ROVHE.js} +2 -2
- package/dist/committer-JC6BIBNR.js +2 -0
- package/dist/{config-OKTAPFOT.js → config-XNDP425N.js} +1 -1
- package/dist/cover-cmd-HREOYWWD.js +3 -0
- package/dist/{credentials-SO3DSQEM.js → credentials-ZTBWB3LK.js} +1 -1
- package/dist/{deps-bundle-FRM65BQO.js → deps-bundle-OHCYH5KL.js} +1 -1
- package/dist/{deps-resolve-RPZORKUN.js → deps-resolve-K2NX2W3K.js} +1 -1
- package/dist/design-committer-IIHKNEYF.js +2 -0
- package/dist/device-ref-LAZWPRQN.js +2 -0
- package/dist/dispatch-JZWIFKRB.js +2 -0
- package/dist/doctor-XXOGVMAI.js +2 -0
- package/dist/dossier-2M62K2PA.js +3 -0
- package/dist/evidence-FN2SQB6Z.js +2 -0
- package/dist/evolve-cmd-WQB7E2B5.js +2 -0
- package/dist/{explain-UAAQWHYR.js → explain-AOZNHWMB.js} +1 -1
- package/dist/{explain-cmd-2TKO7GRW.js → explain-cmd-2SCD5T6U.js} +1 -1
- package/dist/{explain-cmd-EX24XKD6.js → explain-cmd-7VTWRROR.js} +1 -1
- package/dist/{extract-bind-EW7XUDLQ.js → extract-bind-3YXY7ZU2.js} +3 -3
- package/dist/{extract-cmd-HOVGMBGM.js → extract-cmd-WGXEJ54C.js} +2 -2
- package/dist/{feeder-C3TOJPKK.js → feeder-GVZSWX6Q.js} +1 -1
- package/dist/gaps-cmd-MFZ52DC7.js +3 -0
- package/dist/{generate-headless-FYTJULPG.js → generate-headless-PCNAJ2LS.js} +2 -2
- package/dist/index.js +141 -135
- package/dist/ingest-TTSDUMH5.js +2 -0
- package/dist/ingest-cmd-D2MD6EAK.js +2 -0
- package/dist/install-RHINEFR5.js +2 -0
- package/dist/{interactive-bind-PSEYAL54.js → interactive-bind-ZFMG2JIX.js} +4 -4
- package/dist/lifecycle-cmd-5FRGYY3M.js +2 -0
- package/dist/list-cmd-DD4WYJSH.js +3 -0
- package/dist/{list-commands-2SVSEAP6.js → list-commands-64THS67Y.js} +1 -1
- package/dist/logical-ids-U2OUMYCP.js +2 -0
- package/dist/login-flow-B5J6JXQN.js +2 -0
- package/dist/{maintenance-cmd-6XSVO6FO.js → maintenance-cmd-7V44VGL4.js} +1 -1
- package/dist/{mobile-prompts-T6HZ2YLY.js → mobile-prompts-RITBS32L.js} +1 -1
- package/dist/{persist-recorded-session-O2NCYTSD.js → persist-recorded-session-Z5SCYWXR.js} +1 -1
- package/dist/phase-seed-ATH337WF.js +2 -0
- package/dist/pipeline-HMFLLUZJ.js +2 -0
- package/dist/prepare-target-HOEFIKXN.js +2 -0
- package/dist/readmodel-UZETCXV6.js +2 -0
- package/dist/reconcile-cmd-Q7CBNPRX.js +2 -0
- package/dist/reconcile-deps-XEUZHUQX.js +4 -0
- package/dist/reconcile-engine-ES2INERY.js +2 -0
- package/dist/{recording-banner-5VXVKCV4.js → recording-banner-NLS7K2RV.js} +1 -1
- package/dist/records-XWF6KDQH.js +2 -0
- package/dist/registry-E5RSXYQJ.js +2 -0
- package/dist/{require-project-folder-2IO6IX5W.js → require-project-folder-V4F74R4A.js} +1 -1
- package/dist/resolve-run-intent-WSOCGJUN.js +2 -0
- package/dist/{resolver-CBTWTZZR.js → resolver-7EAM4A6O.js} +1 -1
- package/dist/revert-2UCOMQ4J.js +2 -0
- package/dist/review-cmd-VN6VGUWJ.js +4 -0
- package/dist/run-45ODACZR.js +2 -0
- package/dist/run-ZYARNPAS.js +2 -0
- package/dist/{run-test-md-664ASWRQ.js → run-test-md-CPGKD3DD.js} +2 -2
- package/dist/{sessions-cmd-ZZIZN2VB.js → sessions-cmd-ME7NM6ES.js} +1 -1
- package/dist/{skill-installer-QLQK4JJE.js → skill-installer-WEV2M32J.js} +1 -1
- package/dist/{spawner-ANLF7OX3.js → spawner-GG6YQB4A.js} +1 -1
- package/dist/{structured-answers-5EY2AZN7.js → structured-answers-2WOTULBQ.js} +1 -1
- package/dist/tcg-generate-DASCY23M.js +2 -0
- package/dist/{testmd-actions-QZD3N4EH.js → testmd-actions-X6HEL5NH.js} +1 -1
- package/dist/token-refresh-ZTQFC3Q3.js +2 -0
- package/dist/{validate-basic-D7IJUFUQ.js → validate-basic-QJL4DCKY.js} +1 -1
- package/dist/verdicts-CRNN765C.js +2 -0
- package/dist/{version-check-JRLPWQ6T.js → version-check-KONSQ4M3.js} +1 -1
- package/dist/{view-cmd-KPJTP4DI.js → view-cmd-ZSMU4I4J.js} +1 -1
- package/dist/walk-session-X2N4XHLU.js +2 -0
- package/dist/{with-telemetry-ASNQQBGP.js → with-telemetry-Y6MVROKX.js} +1 -1
- package/package.json +11 -11
- package/dist/ConfigView-OECNNCXC.js +0 -2
- package/dist/EvidenceViewOffer-FODRAS6Z.js +0 -2
- package/dist/FolderPicker-5U3RHHBE.js +0 -2
- package/dist/SingleShotApp-XWOPGLKZ.js +0 -2
- package/dist/TestMdRunView-6BY3IUH5.js +0 -2
- package/dist/bridge-LOBTHY3P.js +0 -2
- package/dist/chat-committer-ZWWCLJFD.js +0 -2
- package/dist/chunk-2K2BX23I.js +0 -2
- package/dist/chunk-3AJ3QSF5.js +0 -15
- package/dist/chunk-3Q6WAK6P.js +0 -2
- package/dist/chunk-6DTWVLSJ.js +0 -4
- package/dist/chunk-BG66IAO6.js +0 -19
- package/dist/chunk-BVKDHHPK.js +0 -5
- package/dist/chunk-DEZ7CXGM.js +0 -21
- package/dist/chunk-G4AFOZKU.js +0 -2
- package/dist/chunk-HQWLSA5M.js +0 -2
- package/dist/chunk-KBMQGNKO.js +0 -26
- package/dist/chunk-LA2EMSHE.js +0 -2
- package/dist/chunk-LQQXPY5B.js +0 -4
- package/dist/chunk-R5T4RLF5.js +0 -2
- package/dist/chunk-TH47OOBV.js +0 -4
- package/dist/chunk-TRJUD3XJ.js +0 -5
- package/dist/chunk-UOMRMCMI.js +0 -2
- package/dist/chunk-VAYBKR76.js +0 -4
- package/dist/chunk-VT2XNEOD.js +0 -10
- package/dist/chunk-WYST42WI.js +0 -7
- package/dist/chunk-X2FM67OM.js +0 -4
- package/dist/chunk-ZSXDZI56.js +0 -20
- package/dist/committer-SWEWEYNX.js +0 -2
- package/dist/cover-cmd-7JILZJUK.js +0 -3
- package/dist/design-committer-VYT6NU3T.js +0 -2
- package/dist/dispatch-OZRMWY25.js +0 -2
- package/dist/doctor-VWGEQYBB.js +0 -2
- package/dist/dossier-KTLTGT2X.js +0 -3
- package/dist/evidence-5AUZMKE3.js +0 -2
- package/dist/evolve-cmd-TWYJL4EG.js +0 -2
- package/dist/gaps-cmd-3ZX3PZF4.js +0 -3
- package/dist/ingest-4447MYLF.js +0 -2
- package/dist/ingest-cmd-RJLTFNMN.js +0 -2
- package/dist/install-46S4VOZ4.js +0 -2
- package/dist/lifecycle-cmd-O2324GN6.js +0 -2
- package/dist/list-cmd-N4KMA34H.js +0 -3
- package/dist/logical-ids-TEBCQJGO.js +0 -2
- package/dist/login-flow-U43QVFPH.js +0 -2
- package/dist/phase-seed-DIRETNU6.js +0 -2
- package/dist/pipeline-BHEA7ODT.js +0 -2
- package/dist/prepare-target-27UN4KNO.js +0 -2
- package/dist/readmodel-XOYGGQ3S.js +0 -2
- package/dist/reconcile-cmd-FU3JIHTO.js +0 -2
- package/dist/reconcile-deps-SUKZA2FL.js +0 -4
- package/dist/reconcile-engine-ILL4M3NW.js +0 -2
- package/dist/records-IOZTZUZV.js +0 -2
- package/dist/registry-BKV3EDTK.js +0 -2
- package/dist/resolve-run-intent-ZML3HKG7.js +0 -2
- package/dist/revert-NQ7GEVSE.js +0 -2
- package/dist/review-cmd-DQRKQUMG.js +0 -4
- package/dist/run-EXIYK6PU.js +0 -2
- package/dist/run-R7GND73C.js +0 -2
- package/dist/tcg-generate-VBC5ODDI.js +0 -2
- package/dist/token-refresh-PIUX5OFA.js +0 -2
- package/dist/types-VYEOJ6U2.js +0 -2
- package/dist/verdicts-EO5TZ5BW.js +0 -2
- package/dist/walk-session-IODOH7QU.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as T}from"./chunk-OS4VSIHT.js";import"./chunk-5DT7PIGB.js";import"./chunk-CH273NAE.js";import{
|
|
2
|
+
import{b as T}from"./chunk-OS4VSIHT.js";import"./chunk-5DT7PIGB.js";import"./chunk-CH273NAE.js";import{C as V}from"./chunk-AJXOJF2X.js";import"./chunk-B2KXIFZD.js";import"./chunk-ILKSL4PI.js";import"./chunk-CUM23TLF.js";import{e as I}from"./chunk-HLXOYLZV.js";import"./chunk-DBIBROYW.js";import{d as f,e as x}from"./chunk-WXHQYYD5.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";import{writeFileSync as ce,mkdirSync as pe}from"fs";import{tmpdir as ue}from"os";import{dirname as fe,join as ge}from"path";var F={DERIVES:"derivation",automates:"linkage",exercises:"mesh",verifies:"mesh",depends_on:"crosslink",reuses:"crosslink",belongs_to:"containment",scoped_to:"containment",annotates:"annotation"},re=(t,r)=>t===f.SOURCE?String(r.source_id??""):t===f.AC?String(r.text??""):t===f.STYLENOTE?String(r.statement??r.text??""):t===f.GAP?String(r.text??r.question??""):String(r.title??"");function H(t){let r=[];for(let[o,p]of t.nodeLabel){let g=t.getNode(o)?.content??{};r.push({cid:o,label:p,slug:p===f.SOURCE?String(g.source_id??""):t.displayNameOf?.(o)??t.nameOf.get(o)??o.slice(0,19),trust:t.trust.get(o)??"derived",fresh:t.stale(o),title:re(p,g),content:g,superseded:t.superseded.has(o)})}let e=new Map;for(let[o]of t.nodeLabel)for(let p of t.edgesFrom(o)){let g=`${p.type}|${p.src}|${p.dst}`,v=typeof p.props?.anchor=="string"?p.props.anchor:void 0,w=e.get(g);w?(w.count++,v&&w.anchors.push(v)):e.set(g,{key:g,type:p.type,family:F[p.type]??"mesh",src:p.src,dst:p.dst,count:1,anchors:v?[v]:[],container:F[p.type]==="containment"})}let s=[...e.values()],i={},l={trusted:0,derived:0,archived:0},d={fresh:0,stale:0,orphaned:0,superseded:0},a=0;for(let o of r)o.superseded||(a++,i[o.label]=(i[o.label]??0)+1,o.label!==f.SOURCE&&l[o.trust]++,d[o.fresh]++);return{nodes:r,edges:s,summary:{nodes:a,edges:s.reduce((o,p)=>o+p.count,0),byLabel:i,trust:l,fresh:d,usecases:i[f.USECASE]??0,designed:0}}}var P=/^([a-z]+)-(\d+)$/,E=(t,r)=>{let e=P.exec(t),s=P.exec(r);return e&&s&&e[1]===s[1]?Number(e[2])-Number(s[2]):t<r?-1:t>r?1:0};function se(t,r,e){let s=new Set,i=d=>{let a=e.nodeLabel.get(d);if(a===f.USECASE)s.add(d);else if(a===f.SCENARIO)for(let o of e.edgesFrom(d))o.type===x.BELONGS_TO&&s.add(o.dst)},l=e.edgesFrom(t);if(r===f.SCENARIO)for(let d of l)d.type===x.BELONGS_TO&&s.add(d.dst);if(r===f.AC)for(let d of l)d.type===x.SCOPED_TO&&i(d.dst);if(r===f.TEST)for(let d of l)d.type===x.AUTOMATES&&i(d.dst);return s}function G(t,r){let e=new Map,s=t.nodes.filter(a=>a.label===f.USECASE).map(a=>a.cid),i=s.map(a=>({ucCid:a,slug:r.nameOf.get(a)??a.slice(0,19),designed:r.designOf.has(a),nodeCids:[a]})).sort((a,o)=>E(a.slug,o.slug)),l={ucCid:"__shared__",slug:"cross-cutting",designed:!1,nodeCids:[]},d=new Map(i.map(a=>[a.ucCid,a]));for(let a of s)e.set(a,a);for(let a of t.nodes){if(a.label===f.SOURCE||a.label===f.USECASE)continue;let o=se(a.cid,a.label,r);if(o.size===1){let p=[...o][0];e.set(a.cid,p),d.get(p).nodeCids.push(a.cid)}else e.set(a.cid,"__shared__"),l.nodeCids.push(a.cid)}return{laneOf:e,lanes:[...i,l]}}var N={source:0,usecase:1,scenario:2,ac:3,test:4,stylenote:5,gap:5},ie=6,z=260,R=64,B=28;function U(t,r,e){let{lanes:s}=r,i=new Map(t.nodes.map(n=>[n.cid,n])),l=new Map,d=[],a=[],o=n=>{let m=n.map(h=>l.get(h)).filter(h=>h!==void 0);return m.length?m.reduce((h,S)=>h+S,0)/m.length:Number.MAX_SAFE_INTEGER},p=s.filter(n=>n.ucCid!=="__shared__"||n.nodeCids.length>0),g=t.nodes.filter(n=>n.label===f.SOURCE).sort((n,m)=>E(n.slug,m.slug)),v=0;for(let n of p){let m=n.nodeCids.map(c=>i.get(c)).filter(Boolean),h=c=>m.filter(u=>u.label===c),S=h(f.USECASE).sort((c,u)=>E(c.slug,u.slug));S.forEach((c,u)=>l.set(c.cid,u));let D=h(f.SCENARIO).sort((c,u)=>E(c.slug,u.slug));D.forEach((c,u)=>l.set(c.cid,u));let M=h(f.AC).sort((c,u)=>{let _=o(e.edgesInto(c.cid).filter(b=>b.type===x.EXERCISES).map(b=>b.src)),O=o(e.edgesInto(u.cid).filter(b=>b.type===x.EXERCISES).map(b=>b.src));return _-O||E(c.slug,u.slug)});M.forEach((c,u)=>l.set(c.cid,u));let j=h(f.TEST).sort((c,u)=>{let _=o(e.edgesFrom(c.cid).filter(b=>b.type===x.VERIFIES).map(b=>b.dst)),O=o(e.edgesFrom(u.cid).filter(b=>b.type===x.VERIFIES).map(b=>b.dst));return _-O||E(c.slug,u.slug)});j.forEach((c,u)=>l.set(c.cid,u));let q=m.filter(c=>N[c.label]===void 0||N[c.label]>=5).sort((c,u)=>E(c.slug,u.slug));q.forEach((c,u)=>l.set(c.cid,u));let A=Math.max(1,S.length,D.length,M.length,j.length,q.length)*R+B;for(let c of m){let u=N[c.label]??4,_=l.get(c.cid)??0;d.push({...c,lane:n.ucCid,col:u,x:u*z,y:v+B/2+_*R})}a.push({...n,y0:v,y1:v+A}),v+=A}let w=Math.max(v,R);g.forEach((n,m)=>d.push({...n,lane:"__spine__",col:0,x:0,y:w/(g.length+1)*(m+1)}));let L=ie*z;return{nodes:d,lanes:a,width:L,height:w}}function ae(t){return t.design_of?"design":t.review.length>0?"review":t.nodes.some(r=>r.label==="source")?"ingest":t.nodes.length>0?"extract":"other"}function $(t){let r=new Map,e=new Map,s=[];for(let i of t){for(let n of i.nodes)r.has(n.cid)||r.set(n.cid,i.seq);let l=new Map(e);for(let n of i.nodes)n.content?.derived===!0&&!e.has(n.cid)&&e.set(n.cid,"derived");for(let n of i.review)n.resolution==="approved"||n.resolution==="edited"?e.set(n.id,"trusted"):n.resolution==="rejected"?e.set(n.id,"archived"):n.resolution==="reset"&&e.set(n.id,"derived");let d=n=>{let m=0;for(let[h,S]of e)S===n&&l.get(h)!==n&&m++;return m},a=0;for(let[n,m]of e){let h=l.get(n);m==="derived"&&(h==="trusted"||h==="archived")&&a++}let o={trusted:d("trusted"),archived:d("archived"),reset:a},p=ae(i),g=i.nodes.map(n=>n.cid),v=i.edges.map(n=>`${n.type}|${n.src}|${n.dst}`),w=i.review.map(n=>n.id),L=p==="review"?"review \xB7 +"+o.trusted+" trusted"+(o.archived?", +"+o.archived+" archived":""):p+" \xB7 +"+g.length+" nodes";s.push({seq:i.seq,ts:i.ts,kind:p,label:L,mintedNodeCids:g,mintedEdgeKeys:v,reviewedNodeCids:w,trustDelta:o})}return{commits:s,bornSeq:r}}function Y(t,r,e){let s=[];for(let i of t){i.nodes.some(l=>l.cid===r)&&s.push({seq:i.seq,ts:i.ts,kind:"minted",detail:"minted here"});for(let l of i.review)l.id===r&&s.push({seq:i.seq,ts:i.ts,kind:"review",detail:l.resolution+(l.reason?": "+l.reason:"")})}return e.length&&s.push({seq:0,ts:"",kind:"derived_from",detail:"source lines "+e.join(", ")}),s}var oe={"&":"&","<":"<",">":">",'"':""","'":"'"};function k(t){return String(t).replace(/[&<>"']/g,r=>oe[r])}var W=t=>"\\u"+t.charCodeAt(0).toString(16).padStart(4,"0"),de=new RegExp("[\u2028\u2029]","g");function X(t){return t.replace(/[<>&]/g,W).replace(de,W)}var K=t=>t.replace("sha256:","").slice(0,12);function J(t){if(!t||typeof t!="object")return"";let r=String(t.operator??""),e=t.operand!=null?String(t.operand):"",s=t.unit!=null?" "+String(t.unit):"",i=t.baseline!=null?String(t.baseline):"",l=t.within&&typeof t.within=="object"?t.within:null,d;switch(r){case"exists":d="exists: "+e;break;case"forall":d="for all "+e;break;case"contains":d="contains "+e;break;case"gte":d=">= "+e+s;break;case"lte":d="<= "+e+s;break;case"equals":d="= "+e+s+(i?" (was "+i+")":"");break;case"changed-by":d="changed by "+e+s;break;default:d=(r+" "+e+s).trim()}if(l){let a=l.threshold!=null?String(l.threshold):"",o=l.unit!=null?String(l.unit):"";(a||o)&&(d+=" within "+a+o)}return d.trim()}var C=t=>t==null||t===""?"":`<span class="chip">${k(t)}</span>`,y=(t,r)=>r==null||r===""?"":`<div class="kv"><span class="k">${k(t)}</span><span class="v">${k(r)}</span></div>`,le=t=>Array.isArray(t)&&t.length?`<ul class="crit">${t.map(r=>`<li>${k(r)}</li>`).join("")}</ul>`:"";function Q(t,r){let e=r??{};switch(t){case"usecase":return[y("description",e.description),y("value",e.value),[C(e.risk?"risk: "+e.risk:""),...Array.isArray(e.actors)?e.actors.map(s=>C(s)):[]].join(""),le(e.criteria)].join("");case"scenario":return[y("intent",e.intent),[C(e.case_type)].join(""),e.parameters&&typeof e.parameters=="object"?Object.entries(e.parameters).map(([s,i])=>y(s,i)).join(""):"",y("techniques",e.technique_notes)].join("");case"ac":return[y("",e.text),[C(e.kind),C(e.risk?"risk: "+e.risk:"")].join(""),(()=>{let s=J(e.expected_answer);return s?`<div class="pred">${k(s)}</div>`:""})()].join("");case"test":{let s=J(e.check),i=e.test_md_blob!=null?`<pre class="md">${k(String(e.test_md_blob))}</pre>`:"";return[s?`<div class="pred">${k(s)}</div>`:"",y("definitionId",e.definitionId),i].join("")}case"source":return[y("source_id",e.source_id),y("blob",e.blob)].join("");case"stylenote":return[e.statement?`<div class="pred">${k(e.statement)}</div>`:"",[C(e.learned_from_kind?"learned from: "+e.learned_from_kind:"")].join(""),y("",e.text),Array.isArray(e.tags)?e.tags.map(s=>C(s)).join(""):""].join("");case"gap":return[y("",e.text??e.question),[C(e.kind),C(e.risk?"risk: "+e.risk:"")].join(""),y("why",e.risk_rationale),y("ref",e.ref)].join("");default:return""}}function Z(t,r,e,s){let i=H(t),l=G(i,t),d=U(i,l,t),{commits:a}=$(r);i.summary.designed=l.lanes.filter(n=>n.designed&&n.ucCid!=="__shared__").length;let o={},p={};for(let n of i.nodes){o[n.cid]=Q(n.label,n.content);let m=t.edgesInto(n.cid).filter(h=>h.type===x.DERIVES&&typeof h.props?.anchor=="string").map(h=>h.props.anchor);p[n.cid]=Y(r,n.cid,m)}let g=d.nodes.map(n=>({cid:n.cid,slug:n.slug,label:n.label,trust:n.trust,fresh:n.fresh,title:n.title,superseded:n.superseded,lane:n.lane,col:n.col,x:n.x,y:n.y})),v=d.lanes.map(n=>({ucCid:n.ucCid,slug:n.slug,designed:n.designed,y0:n.y0,y1:n.y1})),L=i.nodes.some(n=>n.label===f.SOURCE)?{}:void 0;return{meta:{fromSeq:r[0]?.seq??0,tipHash:e[e.length-1]??null,storePath:s,schema:"assurance/context@1",asOf:r[r.length-1]?.ts??null},summary:i.summary,lanes:v,nodes:g,edges:i.edges,commits:a,lineage:p,contentHtml:o,width:d.width,height:d.height,source:L}}var ee="__PAYLOAD__",te=`<!doctype html>
|
|
3
3
|
<html lang="en">
|
|
4
4
|
<head>
|
|
5
5
|
<meta charset="utf-8">
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
+
import{c as ke}from"./chunk-Z3EEMIVV.js";import{k as he}from"./chunk-7VAE7WXF.js";import{a as ne,c as ie,d as ve}from"./chunk-LOMPRMG3.js";import"./chunk-OS4VSIHT.js";import"./chunk-YC2TFACE.js";import{a as J}from"./chunk-A2SQD2AY.js";import"./chunk-Q4CTSXDM.js";import"./chunk-JZ26R6UL.js";import{b as Z,c as re,d as de,e as ue,f as K,h as G,i as me,k as fe,m as pe,n as ge}from"./chunk-DMOZM22N.js";import{a as ee,b as te}from"./chunk-UJZZDPDY.js";import{a as N}from"./chunk-SWXEBLKX.js";import"./chunk-RKXHVP2Z.js";import"./chunk-BZAGVBCX.js";import"./chunk-F43KOMVB.js";import"./chunk-DNNZ353O.js";import"./chunk-5DT7PIGB.js";import"./chunk-XWKUZJCP.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.js";import"./chunk-5Y2G4NC7.js";import{C as V}from"./chunk-AJXOJF2X.js";import"./chunk-B2KXIFZD.js";import{b as le}from"./chunk-ILKSL4PI.js";import"./chunk-CUM23TLF.js";import{j as ce}from"./chunk-HLXOYLZV.js";import"./chunk-DBIBROYW.js";import"./chunk-WXHQYYD5.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import{a as se}from"./chunk-YCCUBQY4.js";import{x as h}from"./chunk-N2N5T5JN.js";import{a as Y}from"./chunk-HCBYKLMW.js";import{a as F,b as x,k as ae}from"./chunk-C44QQJR4.js";import{a as We}from"./chunk-6YGTRKDT.js";import{e as U}from"./chunk-UR6MHSHU.js";var S=U(We(),1);function be(t,g,k){let{ref:D,reason:I,by:T}=k;if(!I||I.trim().length===0)return{record:null,errors:[{code:"REASON_REQUIRED",detail:"archiving a node needs a reason \u2014 it becomes the tombstone's provenance"}]};let C=g.resolve(D);if(!C)return{record:null,errors:[{code:"UNKNOWN_REF",detail:`no node '${D}' in the graph`}]};let l=g.tipOf(C.cid);if(g.superseded.has(l))return{record:null,errors:[{code:"ALREADY_ARCHIVED",detail:`${D} is already superseded at its tip (${l.slice(0,19)}\u2026)`}]};let b=ce(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:l,new:null,reason:I,by:T}],source_head_moves:{}},{expectPrev:g.latestHash});return le(t),{record:b.record,errors:null}}function we(t){let g=t.by??{kind:"human",id:process.env.USER??"operator"},k=t.mode==="interactive"?"override":t.mode,D=k==="override"?{note:"override \xB7 auto-answers, won't ask"}:{},I=(r,i)=>ee(t.onChild,{verb:"design",subject:r,...D,fixCmd:`kane-cli design tests --use-case ${r}`},i,d=>({ok:d===0,exitCode:d})),T=(r,i,d)=>ee(t.onChild,{verb:"evolve",subject:r,...D,fixCmd:`kane-cli maintain evolve ${i}`},d,a=>({ok:a.outcome==="evolved",exitCode:a.code})),C={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},l={applied:0,committed:0,retired:0,skipped:0,deferred:0,failed:0},b=new Map;for(let r of t.planRows)if(r.held_ref&&t.held){let i=t.held.rows.find(a=>a.temp_ref===r.held_ref);if(!i)continue;let d={kind:i.kind,ref:i.temp_ref,title:i.title,why:i.why,origin:"content-change",...r.impact?{impact:r.impact}:{}};b.set(d.ref,{card:d,source:"held",heldRef:i.temp_ref})}else if(r.kind==="MODIFY"){let i={kind:"MODIFY",ref:r.ref,title:r.ref,why:`${r.reason}: ${r.provenance}`,origin:r.origin??"structural-stale",...r.impact?{impact:r.impact}:{}};b.set(i.ref,{card:i,source:"row",row:r})}else if(r.kind==="ADD"){let i={kind:"ADD",ref:r.ref,title:r.ref,why:r.reason,origin:r.origin??"content-change"};b.set(i.ref,{card:i,source:"row",row:r})}for(let r of t.archive){if(r.kind!=="ARCHIVE")continue;let i={kind:"ARCHIVE",ref:r.ref,title:r.ref,why:r.why,provenance:r.why,...r.impact?{impact:r.impact}:{}};b.set(i.ref,{card:i,source:"archive",row:r})}for(let r of t.reviewFeeder?.()??[]){if(b.has(r.ref))continue;let i={kind:r.kind==="MODIFY_HELD"?"MODIFY":r.kind,ref:r.ref,title:r.title,why:r.why,...r.impact?{impact:r.impact}:{},...r.pair?{pair:r.pair}:{},...r.held?{held:!0}:{},...r.kind==="MODIFY_HELD"?{heldPayload:!0}:{}};b.set(i.ref,{card:i,source:"review",reviewCard:r})}let y=r=>(l.failed++,{outcome:"failed",detail:r});return{cards:()=>[...b.values()].map(r=>r.card),async submit(r,i){let d=b.get(r);if(!d)return y(`no card ${r}`);if(d.source==="review"){if(d.reviewCard.kind==="PAIR"&&i.v==="approve")return y(`${r} is a PAIR card \u2014 approve is not in its grammar (merge / keep both / defer); words ride a defer note`);let{submitReview:s}=await import("./verdicts-CRNN765C.js"),w=i.v==="approve"?{v:"approve"}:i.v==="archive"?{v:"archive",because:i.because??""}:i.v==="skip"&&d.reviewCard.kind==="MODIFY_HELD"?{v:"keep_current"}:i.v==="defer"||i.v==="skip"?{v:"defer"}:i.v==="merge"?{v:"merge"}:{v:"keep_both"},v=await s({contextDir:t.contextDir,signals:o=>t.signals({ref:o.ref,verdict:o.verdict,...o.reason?{reason:o.reason}:{}})},d.reviewCard,w,g);return v.outcome==="failed"?(l.failed++,v):v.outcome==="deferred"?(l.deferred++,i.v==="defer"&&i.note?(t.signals({ref:r,verdict:"deferred-with-note",reason:i.note}),{...v,detail:`steering noted: "${i.note}" \u2014 decide ${d.reviewCard.kind==="PAIR"?"merge / keep both":"the verdict"} when it re-offers`}):v):v.outcome==="retired"?(l.retired++,v):v.outcome==="committed"?(l.committed++,v):(l.applied++,v)}if(i.v==="merge"||i.v==="keep_both")return y(`${r} is a ${d.card.kind} card \u2014 ${i.v} applies to review cards only`);if(i.v==="skip")return l.skipped++,t.signals({ref:r,verdict:"gap-dismissed"}),{outcome:"skipped"};if(i.v==="defer")return l.deferred++,i.note?(t.signals({ref:r,verdict:"deferred-with-note",reason:i.note}),{outcome:"deferred",detail:`steering noted: "${i.note}"`}):{outcome:"deferred"};if(i.v==="archive"){if(d.source!=="archive")return y(`${r} is not an ARCHIVE card`);let s=V(t.contextDir),w=s.resolve(d.row.ref);if(w&&s.superseded.has(s.tipOf(w.cid)))return l.skipped++,{outcome:"skipped",detail:"already retired \u2014 nothing to do"};let v=be(t.contextDir,V(t.contextDir),{ref:d.row.ref,reason:`reconcile retire: ${d.row.why}`,by:g});return v.errors?y(v.errors.map(o=>`${o.code}: ${o.detail}`).join("; ")):(l.retired++,t.signals({ref:r,verdict:"gap-resolved-archive",reason:d.row.why}),{outcome:"retired"})}if(d.source==="archive")return y(`${r} takes archive/skip/defer, not approve`);if(d.source==="held"){let s=he(t.contextDir,t.held,d.heldRef,g,i.edits);if(!s.ok)return y(s.message);if(s.kind==="ADD"){let w=await I(s.ref,()=>t.runDesign(s.ref,{yes:!0,mode:k,...i.steering?{because:i.steering}:{}}));return w!==0?(l.failed++,{outcome:"failed",landed:!0,detail:`committed ${s.ref}, but its design run exited ${w} \u2014 finish with kane-cli design tests --use-case ${s.ref}`}):(l.applied++,t.signals({ref:r,verdict:"gap-resolved-create",...i.steering?{reason:i.steering}:{}}),{outcome:"applied",detail:s.ref})}if(i.steering){let w=V(t.contextDir),v=ne(w,s.ref);if(!v.ok)return l.committed++,{outcome:"committed",detail:`committed ${s.ref}, but steering could not resolve it (${v.message}) \u2014 steer via kane-cli maintain evolve ${s.ref}`};let o=await T(v.target.display,s.ref,()=>ie(t.contextDir,v.target,{yes:!0,mode:k,because:i.steering},C,t.runDesign,"batch"));if(o.outcome==="no-design"){let c=await I(v.target.seamRef,()=>t.runDesign(v.target.seamRef,{yes:!0,mode:k,because:i.steering}));return c!==0?(l.failed++,{outcome:"failed",landed:!0,detail:`committed ${s.ref}, but its steered design run exited ${c} \u2014 finish with kane-cli design tests --use-case ${v.target.seamRef}`}):(l.applied++,t.signals({ref:r,verdict:"gap-resolved-create",reason:i.steering}),{outcome:"applied",detail:s.ref})}return o.outcome==="failed"||o.outcome==="paused"?(l.failed++,{outcome:"failed",landed:!0,detail:`committed ${s.ref}, but the steering evolve ${o.outcome} (exit ${o.code}) \u2014 finish with kane-cli maintain evolve ${s.ref}`}):o.outcome==="declined"?(l.committed++,{outcome:"committed",detail:`committed ${s.ref} \u2014 the steering evolve was declined; re-run kane-cli maintain evolve ${s.ref}`}):(l.applied++,t.signals({ref:r,verdict:"gap-resolved-evolve",reason:i.steering}),{outcome:"applied",detail:s.ref})}return l.committed++,t.signals({ref:r,verdict:"gap-resolved-evolve"}),{outcome:"committed",detail:s.ref}}let a=V(t.contextDir),u=ne(a,d.row.ref);if(!u.ok)return y(u.message);if(d.card.kind==="ADD"){let s=await I(u.target.seamRef,()=>t.runDesign(u.target.seamRef,{yes:!0,mode:k}));return s!==0?y(`design run exited ${s}`):(l.applied++,t.signals({ref:r,verdict:"gap-resolved-create"}),{outcome:"applied"})}let A=await T(u.target.display,d.row.ref,()=>ie(t.contextDir,u.target,{yes:!0,mode:k,...i.steering?{because:i.steering}:{}},C,t.runDesign,"batch"));return A.outcome==="evolved"?(l.applied++,t.signals({ref:r,verdict:"gap-resolved-evolve",...i.steering?{reason:i.steering}:{}}),{outcome:"applied"}):A.outcome==="failed"||A.outcome==="paused"?y(`evolve ${A.outcome} (exit ${A.code})`):(l.skipped++,{outcome:"skipped",detail:A.outcome})},summary:()=>({...l})}}var j=U(Y(),1);function q({mark:t,markColor:g,color:k,indent:D=2,reserve:I=0,children:T}){let{stdout:C}=ae(),l=(C?.columns??80)-I,b=D+t.length+1;return(0,j.jsxs)(F,{children:[(0,j.jsx)(F,{width:b,flexShrink:0,children:(0,j.jsx)(x,{color:g,children:`${" ".repeat(D)}${t}`})}),(0,j.jsx)(F,{width:Math.max(20,l-b),children:(0,j.jsx)(x,{color:k,children:T})})]})}var p=U(Y(),1);function ye(t){return t.landed?"committed":t.outcome}var Ee={applied:{mark:"\u2714",color:"green"},committed:{mark:"\u2714",color:"green"},retired:{mark:"\u2714",color:"green"},skipped:{mark:"\xB7",color:"dim"},deferred:{mark:"\u2013",color:"dim"},failed:{mark:"\u2717",color:"red"}};function Pe(t){return t.v==="archive"?"Retiring\u2026":t.v==="approve"&&t.steering?"Approving with your changes \u2014 committing, then re-designing\u2026":"Applying \u2014 committing\u2026"}function Oe({controller:t,cards:g,note:k,markOutcome:D,routeChat:I,listEvolveTargets:T,barSubject:C,meta:l,resumeCmd:b,activeChild:y,onFinish:r,onCtrlC:i,pauseRef:d}){let[a,u]=(0,S.useState)(g.length>0?{at:"card",idx:0,sel:0,editor:null}:{at:"done-panel",sel:0}),A=(0,S.useRef)(0),s=(0,S.useRef)(a);s.current=a;let w=(0,S.useRef)([]),[,v]=(0,S.useState)(0),o=a.at==="busy"||a.at==="evolving";(0,S.useEffect)(()=>{if(!o)return;let e=setInterval(()=>v(n=>n+1),120);return()=>clearInterval(e)},[o]);let c=()=>{let e=t.summary();return`${e.applied+e.committed} applied \xB7 ${e.retired} retired \xB7 ${e.skipped} skipped \xB7 ${e.deferred} deferred`+(e.failed>0?` \xB7 ${e.failed} failed`:"")},O=()=>({state:"complete",facts:[c()]}),R=()=>({state:"walk-paused",reason:"ctrl+c",facts:[c(),"every verdict so far is committed \u2014 re-run the same reconcile command to continue"],...b?{resume:b}:{}}),$=()=>r(A.current,O()),W=(0,S.useRef)(!1),P=()=>{r(3,R())},E=()=>{if(W.current)return;W.current=!0;let e=s.current;if(e.at==="busy"||e.at==="evolving"){k((0,p.jsx)(x,{color:h.dim,children:"finishing the current item, then pausing\u2026"}));return}if(e.at==="done-panel"||e.at==="picker"||e.at==="why"||e.at==="view"){$();return}P()};d&&(d.current=E);let _=a.at==="card"||a.at==="busy"?g[a.idx]:null,M=()=>[{key:"finish",label:"finish"},...T?[{key:"evolve",label:"evolve another use-case\u2026"}]:[],...w.current.length>0?[{key:"view",label:"view what changed"}]:[]],H=()=>{let e=T?.()??[];if(e.length===0){k((0,p.jsx)(x,{color:h.dim,children:"nothing is stale \u2014 no evolve targets right now"})),u({at:"done-panel",sel:0});return}u({at:"picker",items:e,sel:0})},xe=e=>{let n=e+1;n<g.length?u({at:"card",idx:n,sel:0,editor:null}):u({at:"done-panel",sel:0})},Q=(0,S.useRef)(!1),L=(e,n)=>{if(Q.current)return;Q.current=!0;let m=g[e];u({at:"busy",idx:e,label:Pe(n),startedAt:Date.now()}),t.submit(m.ref,n).catch(f=>({outcome:"failed",detail:f instanceof Error?f.message:String(f)})).then(f=>{let B=Ee[f.outcome]??{mark:"\xB7",color:"dim"},Te=f.outcome!=="failed"&&f.outcome!=="skipped"&&f.outcome!=="deferred"&&m.impact&&"stale_refs"in m.impact&&m.impact.stale_refs.length>0?` \xB7 ${m.impact.stale_refs.length} item(s) now stale`:"",oe=`${f.outcome} [${m.kind}] ${N(m.title)}${f.detail?` \u2014 ${N(f.detail)}`:""}${Te}`;if(w.current.push({mark:B.mark,color:B.color,line:oe}),k((0,p.jsx)(q,{mark:B.mark,markColor:B.color==="green"?h.green:B.color==="red"?h.red:h.dim,color:B.color==="dim"?h.dim:void 0,children:oe})),f.outcome==="failed"&&(A.current=A.current===0?1:A.current),D(m.ref,ye(f)),Q.current=!1,W.current){P();return}xe(e)})},Ce=(e,n)=>{u({at:"evolving",title:e.title,startedAt:Date.now()}),I(`${e.key} ${n}`).catch(m=>`\u2717 evolve failed: ${m instanceof Error?m.message:String(m)}`).then(m=>{let f=m.startsWith("\u2713");if(w.current.push({mark:f?"\u2714":"\u2717",color:f?"green":"red",line:m.replace(/^[✓✗]\s*/,"")}),k((0,p.jsx)(q,{mark:f?"\u2714":"\u2717",markColor:f?h.green:h.red,children:m.replace(/^[✓✗]\s*/,"")})),W.current){$();return}u({at:"done-panel",sel:0})})},Re=(0,S.useMemo)(()=>({isFocused:()=>{let e=s.current;return e.at==="card"&&e.editor===null||e.at==="done-panel"||e.at==="picker"||e.at==="view"},onMove:e=>{u(n=>{if(n.at==="card"){let m=g[n.idx],f=G(m)??K(m).length-1;return{...n,sel:Math.max(0,Math.min(f,n.sel+e))}}return n.at==="done-panel"?{...n,sel:Math.max(0,Math.min(M().length-1,n.sel+e))}:n.at==="picker"?{...n,sel:Math.max(0,Math.min(n.items.length-1,n.sel+e))}:n})},onSelect:()=>{let e=s.current;if(e.at==="card"){let n=g[e.idx],m=G(n);if(m!==null&&e.sel===m){u({...e,editor:"",editorIntent:"steer"});return}let f=K(n)[e.sel];if(f?.v==="archive"&&n.kind==="REVIEW"){u({...e,editor:"",editorIntent:"because"});return}f&&L(e.idx,{v:f.v});return}if(e.at==="done-panel"){let n=M()[e.sel];n?.key==="finish"?$():n?.key==="evolve"?H():n?.key==="view"&&u({at:"view"});return}if(e.at==="picker"){let n=e.items[e.sel];n&&u({at:"why",item:n,text:""});return}},onDigit:e=>{let n=s.current;if(n.at==="card"){let m=g[n.idx],f=K(m)[e-1];if(f?.v==="archive"&&m.kind==="REVIEW"){u({...n,editor:"",editorIntent:"because"});return}f&&L(n.idx,{v:f.v});return}n.at==="done-panel"&&e-1<M().length&&u({...n,sel:e-1}),n.at==="picker"&&e-1<n.items.length&&u({...n,sel:e-1})},onType:e=>{u(n=>n.at!=="card"||G(g[n.idx])===null?n:{...n,editor:(n.editor??"")+e,editorIntent:n.editorIntent??"steer"})},isMulti:()=>!1,onSpace:()=>{},onBack:()=>{let e=s.current;(e.at==="picker"||e.at==="view")&&u({at:"done-panel",sel:0})}}),[g]);(0,S.useEffect)(()=>{a.at==="done"&&$()},[a.at]);let $e=e=>Math.floor((Date.now()-e)/1e3),X=y?.current??null,De=a.at==="card"?{kind:"card",n:a.idx+1,m:g.length}:a.at==="busy"?X?{kind:"child-working",step:re(a.label)}:{kind:"working",step:re(a.label),elapsedS:$e(a.startedAt)}:a.at==="evolving"?{kind:"child-working",step:`evolving ${a.title}`}:{kind:"idle"},Se=a.at==="card"||a.at==="busy"?g.length-a.idx:0,Me=a.at==="done-panel"||a.at==="picker"||a.at==="why"||a.at==="view",Ie=[...a.at==="card"?a.editor!==null?["\u23CE submit","esc back"]:ge(g[a.idx]).keys:a.at==="done-panel"?pe(M(),{escBack:!1}).keys:a.at==="picker"?["\u2191\u2193 select","\u23CE confirm","esc back"]:a.at==="why"?["\u23CE submit","esc back"]:a.at==="view"?["esc back"]:[],"ctrl+c exit"],z=l??{verb:"reconcile",sid:"",env:""},Ae=`view \xB7 this run's changes \xB7 ${w.current.length}`;return(0,p.jsxs)(F,{flexDirection:"column",children:[(0,p.jsx)(ue,{onToggleThinking:()=>{},onCtrlC:()=>{i(),E()},panel:Re}),a.at==="card"&&_?(0,p.jsx)(me,{card:_,position:{n:a.idx+1,of:g.length},sel:a.sel,focused:a.editor===null,editorIntent:a.editorIntent??"steer",freeText:a.editor!==null?{value:a.editor,onChange:e=>u(n=>n.at==="card"?{...n,editor:e}:n),onSubmit:e=>{let n=s.current;if(n.at!=="card")return;let m=e.trim();if(!m){u({...n,editor:null,editorIntent:void 0});return}let f=g[n.idx];n.editorIntent==="because"?L(n.idx,{v:"archive",because:m}):f.kind==="PAIR"?L(n.idx,{v:"defer",note:m}):L(n.idx,{v:"approve",steering:m})},onCancel:()=>u(e=>e.at==="card"?{...e,editor:null,editorIntent:void 0}:e)}:null}):null,a.at==="done-panel"?(0,p.jsx)(Z,{headline:(()=>{let e=t.summary();return`reconcile done \u2014 ${e.applied+e.committed} applied \xB7 ${e.retired} retired \xB7 ${e.skipped} skipped \xB7 ${e.deferred} deferred${e.failed>0?` \xB7 ${e.failed} failed`:""}`})(),rows:M(),sel:a.sel,focused:!0}):null,a.at==="picker"?(0,p.jsx)(Z,{ask:!0,headline:"evolve which use-case?",rows:a.items.map(e=>({key:e.key,label:e.title,detail:e.badge})),sel:a.sel,focused:!0}):null,a.at==="why"?(0,p.jsxs)(F,{flexDirection:"column",borderStyle:"round",borderColor:h.assuranceAccent,paddingX:1,children:[(0,p.jsxs)(F,{children:[(0,p.jsxs)(x,{children:[(0,p.jsx)(x,{color:h.assuranceAccent,children:"\u25B8"})," ",(0,p.jsx)(x,{color:h.dim,children:"\u270E "})]}),(0,p.jsx)(se,{value:a.text,onChange:e=>u(n=>n.at==="why"?{...n,text:e}:n),onSubmit:e=>{let n=s.current;n.at==="why"&&(e.trim()?Ce(n.item,e.trim()):u({at:"picker",items:[n.item],sel:0}))},onCancel:()=>{s.current.at==="why"&&H()},placeholder:`what should change about ${a.item.title}?`})]}),(0,p.jsx)(x,{color:h.muted,children:" \u23CE submit \xB7 esc back"})]}):null,a.at==="view"?(0,p.jsxs)(F,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,p.jsx)(x,{bold:!0,color:h.assuranceAccent,children:Ae}),(0,p.jsx)(x,{children:" "}),w.current.map((e,n)=>(0,p.jsx)(q,{mark:e.mark,markColor:e.color==="green"?h.green:e.color==="red"?h.red:h.dim,color:e.color==="dim"?h.dim:void 0,indent:0,reserve:0,children:e.line},`vc-${n}`))]}):null,(0,p.jsx)(de,{status:De,meta:{...z,...C??z.subject?{subject:C??z.subject}:{}},tallies:fe(t.summary(),Se),keys:Ie,child:a.at==="evolving"?{verb:"evolve"}:X?{verb:X.verb}:void 0})]})}async function ut(t){let g={current:null},k=o=>{g.current?.append(o)},D=null,I=async(o,c)=>{let[{runDesign:O},{resolveAgentAuthEnv:R},{runAgent:$},{preflightTurn:W}]=await Promise.all([import("./run-ZYARNPAS.js"),import("./spawner-GG6YQB4A.js"),import("./bridge-P2EBLXPY.js"),import("./turn-preflight-JGYT7LXP.js")]);D??=await R();let P=D;return O({useCase:o,force:!0,mode:c.mode??"override",...c.because?{because:c.because}:{},...c.changeDelta!==void 0?{changeDelta:c.changeDelta}:{},...c.priorDesign!==void 0?{priorDesign:c.priorDesign}:{}},{contextDir:t.dir,agent:$,preflightTurn:()=>W(P),ask:async()=>[],out:()=>{},progress:()=>{},isTTY:!1,auth:P})},T=t.runDesign??I,C={current:null},l="",b=o=>{if(o.kind==="start")C.current={verb:o.verb},l=o.subject,k((0,p.jsxs)(x,{color:h.assuranceAccent,children:[`\u25CF ${te(o.verb).ing} ${N(o.subject)}`,o.note?(0,p.jsx)(x,{color:h.dim,children:` ${o.note}`}):null]}));else if(o.kind==="end"){let c=C.current?.verb??"design";C.current=null,k(o.ok?(0,p.jsx)(x,{color:h.green,children:`\u25CF ${te(c).ed} ${N(l)} \u2014 ${o.durS}s`}):(0,p.jsx)(x,{color:h.red,children:`\u25CF ${c} failed \u2014 ${o.exitCode!=null?`exited ${o.exitCode}`:"error"}${o.fixCmd?` \xB7 ${o.fixCmd}`:""}`}))}},y=we({contextDir:t.dir,held:t.held,archive:t.archive,planRows:t.rows,runDesign:T,mode:"interactive",signals:t.signals,onChild:b,reviewFeeder:()=>{try{return ke({contextDir:t.dir},V(t.dir))}catch{return[]}}}),r=new Set(t.rows.filter(o=>o.applied!==void 0).map(o=>o.held_ref??o.ref)),i=y.cards().filter(o=>!r.has(o.ref)&&!(o.kind==="ARCHIVE"&&t.archiveState?.[o.ref]!==void 0)),d=o=>t.rows.findIndex(c=>(c.held_ref??c.ref)===o),a=(o,c)=>{try{if(i.find($=>$.ref===o)?.kind==="ARCHIVE"){c==="retired"?t.markA?.(o,"retired"):c==="skipped"&&t.markA?.(o,"skipped");return}let R=d(o);if(R<0)return;c==="applied"||c==="committed"?t.mark?.(R,"approved"):c==="skipped"&&t.mark?.(R,"skipped")}catch{}},u=async o=>{let[{openGraph:c},{resolveParentUc:O,evolveOneUc:R}]=await Promise.all([import("./readmodel-UZETCXV6.js"),import("./evolve-cmd-WQB7E2B5.js")]),[$,...W]=o.split(/\s+/),P=c(t.dir),E=O(P,$);if(!E.ok)return`couldn't resolve '${$}' \u2014 start with a use-case id (uc-\u2026): ${E.message}`;if(W.length===0)return`say what to change: \`${$} <your words>\` \u2014 the words become the redesign's change delta`;let _=W.join(" "),M={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},H=await R(t.dir,E.target,{yes:!0,mode:"override",because:_},M,T,"batch");return H.outcome==="evolved"?(t.signals({ref:E.target.display,verdict:"gap-resolved-evolve",reason:_}),`\u2713 redesigned ${E.target.display} \u2014 "${_}"`):`\u2717 evolve ${H.outcome} for ${E.target.display} (exit ${H.code})`},A=t.listEvolveTargets??(()=>{let o=V(t.dir);return ve(o).targets.map(c=>({key:c.display,title:c.display,badge:"stale"}))});if(t.script){let o=0;for(let c of i){let O=await t.script(c),R=await y.submit(c.ref,O);R.outcome==="failed"&&o===0&&(o=1),a(c.ref,ye(R))}return o}let[{render:s},{ScrollbackProvider:w},{ScrollbackTap:v}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./scrollback-JLPJR25X.js"),import("./ScrollbackTap-Q3IOKNMS.js")]);return new Promise(o=>{let c=!1,O=(_,M)=>{c||(c=!0,(async()=>{process.removeListener("SIGINT",P),await g.current?.flush();try{E.unmount()}catch{}M&&J(M),o(_)})())},R=0,$={current:null},W=()=>{if(R+=1,R>=2){if(c)return;c=!0,process.removeListener("SIGINT",P);try{E.unmount()}catch{}J({state:"interrupted",reason:"ctrl+c \xD72",facts:["forced quit \u2014 every committed verdict is safe in the store"]}),o(130)}},P=()=>{W(),$.current?.()};process.on("SIGINT",P);let E=s((0,p.jsxs)(w,{children:[(0,p.jsx)(v,{into:g}),(0,p.jsx)(Oe,{controller:y,cards:i,note:k,markOutcome:a,routeChat:u,listEvolveTargets:A,barSubject:t.barSubject,meta:t.meta,resumeCmd:t.resumeCmd,activeChild:C,onFinish:O,onCtrlC:W,pauseRef:$})]}),{exitOnCtrlC:!1})})}export{Oe as WalkSessionSurface,ye as outcomeToMark,ut as runWalkSession};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-
|
|
2
|
+
import{a}from"./chunk-OHD4CZXT.js";import"./chunk-4EFDEDTL.js";import"./chunk-E5Q5CDOX.js";import"./chunk-KBM3XHAM.js";import"./chunk-2YEHV2CX.js";import"./chunk-IDX3TOPY.js";import"./chunk-BKM2LWU2.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-N2N5T5JN.js";import"./chunk-UR6MHSHU.js";export{a as withTelemetry};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@testmuai/kane-cli",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.7",
|
|
4
4
|
"description": "KaneAI Terminal UI — browser automation testing agent",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -35,16 +35,16 @@
|
|
|
35
35
|
"ws": "^8.20.0"
|
|
36
36
|
},
|
|
37
37
|
"optionalDependencies": {
|
|
38
|
-
"@testmuai/kane-cli-assurance-darwin-arm64": "0.8.
|
|
39
|
-
"@testmuai/kane-cli-assurance-darwin-x64": "0.8.
|
|
40
|
-
"@testmuai/kane-cli-assurance-linux-arm64": "0.8.
|
|
41
|
-
"@testmuai/kane-cli-assurance-linux-x64": "0.8.
|
|
42
|
-
"@testmuai/kane-cli-assurance-win-x64": "0.8.
|
|
43
|
-
"@testmuai/kane-cli-darwin-arm64": "0.8.
|
|
44
|
-
"@testmuai/kane-cli-darwin-x64": "0.8.
|
|
45
|
-
"@testmuai/kane-cli-linux-x64": "0.8.
|
|
46
|
-
"@testmuai/kane-cli-linux-arm64": "0.8.
|
|
47
|
-
"@testmuai/kane-cli-win-x64": "0.8.
|
|
38
|
+
"@testmuai/kane-cli-assurance-darwin-arm64": "0.8.7",
|
|
39
|
+
"@testmuai/kane-cli-assurance-darwin-x64": "0.8.7",
|
|
40
|
+
"@testmuai/kane-cli-assurance-linux-arm64": "0.8.7",
|
|
41
|
+
"@testmuai/kane-cli-assurance-linux-x64": "0.8.7",
|
|
42
|
+
"@testmuai/kane-cli-assurance-win-x64": "0.8.7",
|
|
43
|
+
"@testmuai/kane-cli-darwin-arm64": "0.8.7",
|
|
44
|
+
"@testmuai/kane-cli-darwin-x64": "0.8.7",
|
|
45
|
+
"@testmuai/kane-cli-linux-x64": "0.8.7",
|
|
46
|
+
"@testmuai/kane-cli-linux-arm64": "0.8.7",
|
|
47
|
+
"@testmuai/kane-cli-win-x64": "0.8.7",
|
|
48
48
|
"@testmuai/kane-cli-node-darwin-arm64": "24.18.0",
|
|
49
49
|
"@testmuai/kane-cli-node-darwin-x64": "24.18.0",
|
|
50
50
|
"@testmuai/kane-cli-node-linux-x64": "24.18.0",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as b,b as l,c as n}from"./chunk-PQUMOFT5.js";import{x as o}from"./chunk-CCUGKBIH.js";import{a as p}from"./chunk-HCBYKLMW.js";import{a as u,j as v}from"./chunk-C44QQJR4.js";import{a as S}from"./chunk-6YGTRKDT.js";import{e as a}from"./chunk-UR6MHSHU.js";var C=a(S(),1);var e=a(p(),1);function O({model:x,authLabel:w,profile:B,env:h,defaultUrl:s,projectId:i,projectName:d,folderId:t,folderName:f,windowSize:D,chromeProfile:P,target:r,deviceLabel:m,appLabel:g}){let R=i?d?`${d} (${i})`:i:"(none)",V=t?f?`${f} (${t})`:t:"(none)",{exit:c}=v();return(0,C.useEffect)(()=>{let $=setTimeout(()=>c(),50);return()=>clearTimeout($)},[c]),(0,e.jsx)(u,{flexDirection:"column",children:(0,e.jsx)(b,{title:"Configuration",children:(0,e.jsxs)(u,{flexDirection:"column",paddingY:1,children:[(0,e.jsx)(n,{label:"Auth"}),(0,e.jsx)(l,{label:" method",value:w}),(0,e.jsx)(l,{label:" profile",value:B}),(0,e.jsx)(l,{label:" env",value:h}),(0,e.jsx)(n,{label:"Defaults"}),(0,e.jsx)(l,{label:" url",value:s??"(none)",valueColor:s?o.orange:o.dim}),(0,e.jsx)(l,{label:" model",value:x}),(0,e.jsx)(l,{label:" window",value:D}),(0,e.jsx)(l,{label:" project",value:R}),(0,e.jsx)(l,{label:" folder",value:V}),r!==void 0&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(l,{label:" target",value:r}),r!=="desktop"&&(0,e.jsxs)(e.Fragment,{children:[(0,e.jsx)(l,{label:" device",value:m??"(not set)",valueColor:m?void 0:o.dim}),(0,e.jsx)(l,{label:" app",value:g??"(not set)",valueColor:g?void 0:o.dim})]})]}),(0,e.jsx)(n,{label:"Paths"}),(0,e.jsx)(l,{label:" chrome",value:P,valueColor:o.dim})]})})})}export{O as ConfigView};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-K2QV7FGP.js";import"./chunk-3AJ3QSF5.js";import"./chunk-5DBK6QNS.js";import"./chunk-TJZMYU2W.js";import"./chunk-5GUD3CIH.js";import"./chunk-XWKUZJCP.js";import"./chunk-ZSXDZI56.js";import"./chunk-EHN5HTUD.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.js";import"./chunk-VZ7KXRXB.js";import"./chunk-P7YZ3PU3.js";import"./chunk-TH47OOBV.js";import"./chunk-VAYBKR76.js";import"./chunk-CUM23TLF.js";import"./chunk-DUAXZYAD.js";import"./chunk-DBIBROYW.js";import"./chunk-WXHQYYD5.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-KX2GOJ4C.js";import"./chunk-RFHMDQXZ.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-Z2T7E5HM.js";import"./chunk-MSGW4JDG.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-4JOD47QI.js";import"./chunk-WLOGO44E.js";import"./chunk-RZ4F3BHX.js";import"./chunk-CCUGKBIH.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as EvidenceViewOffer};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a,b}from"./chunk-E3BXNQYE.js";import"./chunk-YCCUBQY4.js";import"./chunk-LA2EMSHE.js";import"./chunk-BPMSNGXQ.js";import"./chunk-ZIRMSWKS.js";import"./chunk-WLOGO44E.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-CCUGKBIH.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{b as FolderPicker,a as formatFolderLine};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-HQWLSA5M.js";import"./chunk-PWYEOBXV.js";import"./chunk-TCK3QMKY.js";import"./chunk-CGYSFLM2.js";import"./chunk-VZ7KXRXB.js";import"./chunk-TDPWFYTJ.js";import"./chunk-6DTWVLSJ.js";import"./chunk-JRQKUQWL.js";import"./chunk-K7UYWAZH.js";import"./chunk-E3BXNQYE.js";import"./chunk-YCCUBQY4.js";import"./chunk-LA2EMSHE.js";import"./chunk-BPMSNGXQ.js";import"./chunk-VE3SUJMA.js";import"./chunk-TZXXJWHA.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-4D3DNCQY.js";import"./chunk-TAOHYWEO.js";import"./chunk-ZIRMSWKS.js";import"./chunk-PB3GADUD.js";import"./chunk-WLOGO44E.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-4UMQDH52.js";import"./chunk-CCUGKBIH.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as SingleShotApp};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{g as a}from"./chunk-JJWQUQJ2.js";import"./chunk-OWTEHU6B.js";import"./chunk-AMULIFC5.js";import"./chunk-P7YZ3PU3.js";import"./chunk-TDPWFYTJ.js";import"./chunk-6DTWVLSJ.js";import"./chunk-5NSYHRDN.js";import"./chunk-5Y2G4NC7.js";import"./chunk-BG66IAO6.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-Z2T7E5HM.js";import"./chunk-MSGW4JDG.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-4JOD47QI.js";import"./chunk-WLOGO44E.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-NHOHQBIF.js";import"./chunk-PQUMOFT5.js";import"./chunk-CCUGKBIH.js";import"./chunk-DFS4RMVP.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as TestMdRunView};
|
package/dist/bridge-LOBTHY3P.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-5S46D5AJ.js";import"./chunk-7JUUNZQP.js";import"./chunk-UX3KPYTI.js";import"./chunk-UD7KKHPW.js";import"./chunk-CCUGKBIH.js";import"./chunk-UR6MHSHU.js";export{a as runAgent};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as V,c as te}from"./chunk-JFAFKHDX.js";import{a as k,b as ee}from"./chunk-6KPPGMO2.js";import{a as ne}from"./chunk-427OQS2N.js";import{d as Z}from"./chunk-NVGBE2DR.js";import{A as X,f as Y,g as z,z as Q}from"./chunk-TH47OOBV.js";import"./chunk-VAYBKR76.js";import{a as j,b as F}from"./chunk-CUM23TLF.js";import{f as J,i as W}from"./chunk-DUAXZYAD.js";import"./chunk-DBIBROYW.js";import{e as L,f as A,g as P,h as x}from"./chunk-WXHQYYD5.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";var de=new Set(["approve","edit","reject"]);function ye(m){let{contextDir:f,graph:s,ops:oe,by:l}=m,N=m.mintable??ne(),T=J(f);if(s.latestHash!==T)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(s.latestHash)} but chain head is ${String(T)} \u2014 re-open and retry`}]};let C=[],h=[],M=new Set;for(let e of oe){if(s.appliedEvents.has(e.eventId)||M.has(e.eventId)){C.push(e.eventId);continue}M.add(e.eventId),h.push(e)}if(h.length===0)return{record:null,errors:null,applied:[],skipped:C,minted:[],staleDelta:[]};let o=[],$=[],I=[],v=[],b=[],O=[],_=[...m.judgements??[]],D=[],q=new Map,B=new Set,G=[],E=new Set,se=new Set(N),H=new Set;for(let e of h){if(!de.has(e.kind))continue;let n=e.target,t=s.resolve(n)?.cid??n;H.has(t)&&o.push({code:"MULTIPLE_TERMINAL_OPS",detail:`${n} has more than one terminal op in this turn \u2014 normalize latest-wins first`}),H.add(t)}let S=(e,n,t)=>{let r=s.resolve(n);if(!r)return o.push({code:"UNKNOWN_NODE",detail:`${e}: ${n} names nothing in the graph`}),null;let p=s.tipOf(r.cid);return p!==t||s.superseded.has(t)?(o.push({code:"EXPECTED_CID_MOVED",detail:`${e}: ${n} moved or was archived since it was displayed`,data:{tip:p}}),null):t};for(let e of h)if(e.kind==="approve"){let n=S("approve",e.target,e.expectedCid);n&&v.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l})}else if(e.kind==="reject"){let n=S("reject",e.target,e.expectedCid);if(!n)continue;if(v.push({id:n,kind:"review-item",resolution:"rejected",edit:null,reason:e.reason,by:l}),e.redirectTo!==void 0){let t=s.resolve(e.redirectTo);if(!t||t.superseded){o.push({code:"UNKNOWN_NODE",detail:`reject.redirectTo: ${e.redirectTo} is not a live node`});continue}b.push({kind:"node",old:n,new:t.cid,reason:e.reason,by:l})}}else if(e.kind==="edit"){let n=S("edit",e.target,e.expectedCid);if(!n)continue;let t=s.getNode(n);if(!t){o.push({code:"UNKNOWN_NODE",detail:`edit: ${e.target} node file unreadable`});continue}let r={...t.content};for(let[c,u]of Object.entries(e.edit))u!==void 0&&(r[c]=u);if(typeof r.title=="string"&&!r.title.trim()){o.push({code:"EMPTY_TITLE",detail:`edit: ${e.target} edited title is empty`});continue}let p=A(t.label,r);if(p.length>0){for(let c of p)o.push({code:c.code,detail:`edit ${e.target}: ${c.detail}`});continue}let d=j(t.label,r);if(d===n){v.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l});continue}$.push({cid:d,label:t.label,content:r}),b.push({kind:"node",old:n,new:d,reason:e.reason??"edited in chat",by:l}),v.push({id:d,kind:"review-item",resolution:"edited",edit:{...e.edit},reason:null,by:l})}else if(e.kind==="enhance"){if(!S("enhance",e.target,e.expectedCid))continue;for(let t of e.edges){let r=s.nodeLabel.get(t.src)??"(unknown)",p=s.nodeLabel.get(t.dst)??"(unknown)";for(let i of x(t.type,r,p,t.props))o.push({code:i.code,detail:`enhance ${e.target}: ${i.detail}`});let d=F(t.type,t.src,t.dst,t.props);if(s.edgesFrom(t.src).some(i=>i.ecid===d)||I.some(i=>i.ecid===d))continue;let c=Y(s,t.type,t.src,t.dst,G);c&&o.push(c);let u=z(s,t.type,t.src,t.dst);u&&o.push(u);let a=P(t.type)?.cardinality;if(a==="one-live-per-src"||a==="one-live-per-src-and-dst"){let i=`${t.type}|${t.src}`;E.has(i)&&o.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} from ${t.src}: two one-live edges in one turn`}),E.add(i)}if(a==="one-live-per-src-and-dst"){let i=`${t.type}|dst|${t.dst}`;E.has(i)&&o.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} onto ${t.dst}: two one-live edges in one turn (strict 1:1)`}),E.add(i)}I.push({ecid:d,type:t.type,src:t.src,dst:t.dst,props:t.props}),G.push({src:t.src,dst:t.dst,type:t.type})}}else if(e.kind==="add"){if(!se.has(e.label)){o.push({code:"GATED_LABEL",detail:`add: ${e.label} is not mintable in v1 (gate: ${N.join("|")})`,data:{gate:[...N]}});continue}let n=s.heads.get(e.convSourceId),t=s.convChains.get(e.convSourceId);if(typeof n!="string"||!t){o.push({code:"CONV_SOURCE_MISSING",detail:`add: ${e.convSourceId} is not a live conversation source`});continue}let r=s.getNode(n)?.content?.blob,p=typeof r=="string"?Z(f,r)?.toString("utf8")??"":"",d=ee(p,e.cite.turn);if(d===null){o.push({code:"BAD_ANCHOR",detail:`add: ${k(e.cite.turn)} does not resolve in ${e.convSourceId}`});continue}if(!d.includes(e.cite.quote)){o.push({code:"QUOTE_MISMATCH",detail:`add: quote is not verbatim within ${k(e.cite.turn)}`});continue}let c={...e.content,derived:!0},u=A(e.label,c);if(u.length>0){for(let g of u)o.push({code:g.code,detail:`add: ${g.detail}`});continue}let a=j(e.label,c),i={source_id:e.convSourceId,source_cid:n,anchor:k(e.cite.turn),quote:e.cite.quote};for(let g of x(L.DERIVES,"source",e.label,i))o.push({code:g.code,detail:`add: ${g.detail}`});$.push({cid:a,label:e.label,content:c}),I.push({ecid:F("DERIVES",n,a,i),type:L.DERIVES,src:n,dst:a,props:i}),e.rationale&&_.push({about:a,rationale:e.rationale,by:l});let y=Q(e.label,g=>B.has(g),s.names.keys());y!==null&&(B.add(y),O.push({cid:a,slug:y,by:l})),D.push({cid:a,...y!==null?{slug:y}:{}}),q.set(e.eventId,a)}if(o.length)return{record:null,errors:o};let U=new Date().toISOString();for(let e of h){if(e.kind==="add"){let n=q.get(e.eventId);n&&V(f,{ts:U,command:"extract-chat",id:n,verdict:"add",polarity:"preference",tag:e.label,by:l,event_id:e.eventId,target:n});continue}for(let n of te(e,{ts:U,command:"extract-chat",by:l}))V(f,n)}let K=h.map(e=>e.eventId).sort(),ie=W(f,{ts:new Date().toISOString(),proposal_id:null,nodes:$,edges:I,review:v,supersessions:b,...O.length>0?{names:O}:{},..._.length>0?{judgements:_}:{},event_ids:K,...m.sid?{sid:m.sid}:{},source_head_moves:{}},{expectPrev:T}),R=X(f),w=new Set;for(let e of b)if(e.kind==="node"){w.add(e.old);for(let n of R.edgesInto(e.old))w.add(n.src)}for(let e of D)w.add(e.cid);let re=[...w].map(e=>({cid:e,state:R.stale(R.tipOf(e))})).filter(e=>e.state!=="fresh");return{record:ie.record,errors:null,applied:K,skipped:C,minted:D,staleDelta:re}}export{ye as commitChatTurn};
|
package/dist/chunk-2K2BX23I.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{d as Y,f as q,h as H}from"./chunk-KX2GOJ4C.js";import{a as O,b as j,c as z}from"./chunk-35EUIBYJ.js";import{d as B,f as R}from"./chunk-BG66IAO6.js";import{b as N,c as _,j as M}from"./chunk-Z2T7E5HM.js";import{a as L}from"./chunk-TZXXJWHA.js";import{m as b}from"./chunk-56PAQAX5.js";import{a as K,b as C,c as G}from"./chunk-4D3DNCQY.js";import{h as J}from"./chunk-TAOHYWEO.js";import{a as F,b as $}from"./chunk-UOMRMCMI.js";import{b as E}from"./chunk-CCUGKBIH.js";import{createHash as be}from"crypto";import{readdir as Ce,stat as Te}from"fs/promises";import{basename as f,extname as Ie,join as Ae,relative as ke}from"path";import{createHash as de}from"crypto";import{createReadStream as le}from"fs";import{mkdir as ce,readFile as ue,rename as fe,writeFile as ge}from"fs/promises";import{dirname as me,join as he}from"path";var we=60,ve=5;function V(){return{entries:[]}}function X(){return he(E,"mobile","app-cache.json")}async function T(e){let r=de("sha256");for await(let t of le(e))r.update(t);return r.digest("hex")}function ye(){return{readFile:e=>ue(e,"utf8"),writeFile:async(e,r)=>{await ce(me(e),{recursive:!0});let t=`${e}.tmp`;await ge(t,r),await fe(t,e)},hashFile:T,now:()=>new Date}}function I(e){if(!e)return;let r=/\/(\d{4})\/(\d{2})\/(\d{2})\//.exec(e);if(!r)return;let[,t,o,s]=r,n=new Date(`${t}-${o}-${s}T00:00:00Z`);return Number.isNaN(n.getTime())?void 0:n.toISOString()}function Pe(e,r){if(!e.storedAt)return!0;let t=new Date(e.storedAt).getTime();return Number.isNaN(t)?!0:(r.getTime()-t)/864e5>=we-ve}var u=class{deps;constructor(r={}){this.deps={...ye(),...r}}async read(){try{let r=JSON.parse(await this.deps.readFile(X()));if(!r||typeof r!="object")return V();let t=r;return{entries:Array.isArray(t.entries)?t.entries:[]}}catch{return V()}}async write(r){await this.deps.writeFile(X(),JSON.stringify(r,null,2))}async hashOf(r){return this.deps.hashFile(r)}async lookup(r){return(await this.read()).entries.find(o=>o.sha256===r.sha256&&o.env===r.env&&o.orgId===r.orgId&&o.type===r.type)}async remember(r){let t=await this.read();t.entries=[...t.entries.filter(o=>!(o.sha256===r.sha256&&o.env===r.env&&o.orgId===r.orgId&&o.type===r.type)),r],await this.write(t)}async forget(r){let t=await this.read(),o=t.entries.length;t.entries=t.entries.filter(s=>!(s.sha256===r.sha256&&s.env===r.env&&s.orgId===r.orgId&&s.type===r.type)),t.entries.length!==o&&await this.write(t)}isNearExpiry(r){return Pe(r,this.deps.now())}};var Z={emulator:[".apk"],simulator:[".zip"]};function Q(e){return e.skipped===!0}function De(e,r){let t=Ie(e).toLowerCase();return t===".ipa"?`${f(e)} is a device build \u2014 .ipa is not accepted for ${r} runs.`:Z[r].includes(t)?null:`${f(e)} cannot be uploaded for a ${r} run \u2014 expected one of ${Z[r].join(", ")}.`}async function A(e,r){if(!(await Te(e)).isDirectory())return r.hashOf(e);let o=[],s=async i=>{for(let a of await Ce(i,{withFileTypes:!0})){let p=Ae(i,a.name);a.isDirectory()?await s(p):a.isFile()&&o.push(p)}};await s(e),o.sort();let n=be("sha256");for(let i of o)n.update(ke(e,i)),n.update("\0"),n.update(await T(i)),n.update("\0");return n.digest("hex")}async function W(e){let r=De(e.path,e.type);if(r)return{skipped:!0,reason:r};let t=e.cache??new u,o=e.client??new J(e.baseUrl,{...e.auth,orgId:e.orgId}),s;try{s=await A(e.path,t)}catch(a){return{skipped:!0,reason:`could not read ${f(e.path)}: ${a.message}`}}let n={sha256:s,env:e.env,orgId:e.orgId,type:e.type},i=await t.lookup(n);if(i){if(await o.liveness(i.appId)!=="gone")return{appId:i.appId,...i.appUrl?{appUrl:i.appUrl}:{},fromCache:!0};e.onProgress?.(`${i.appId} is no longer in the cloud \u2014 uploading again`),await t.forget(n)}try{e.onProgress?.(`uploading ${f(e.path)}\u2026`);let a=await o.upload(e.path,e.type);return await t.remember({sha256:s,env:e.env,orgId:e.orgId,type:e.type,appId:a.appId,...a.appUrl?{appUrl:a.appUrl}:{},...I(a.url)?{storedAt:I(a.url)}:{},sourcePath:e.path}),e.onProgress?.(a.cached?`${f(e.path)} already in the cloud (${a.appId})`:`${f(e.path)} uploaded (${a.appId})`),{appId:a.appId,...a.appUrl?{appUrl:a.appUrl}:{},fromCache:!1}}catch(a){return{skipped:!0,reason:a.message}}}function h(e){return`${e.platform}|${F(e)}`}var g=new Map,ee=new Set;function re(e){return ee.has(h(e))}function We(e,r,t){r.state==="stopped"&&(g.has(h(r))||oe(e,r,t))}async function te(e,r,t){let o=g.get(h(r));return o?(t?.(`waiting for ${r.displayName} to finish booting\u2026`),o):oe(e,r,t)}function oe(e,r,t){let o=h(r),s=e.prepare(r,t);g.set(o,s),r.state==="stopped"&&s.then(()=>ee.add(o),()=>{});let n=()=>{g.get(o)===s&&g.delete(o)};return s.then(n,n),s.catch(()=>{}),s}import{basename as xe}from"path";import{spawnSync as Ue}from"child_process";async function Se(e,r,t){if(!e.teardownPlan||!t.appPackage&&!t.shutdown)return;let o;try{o=await e.teardownPlan(r,t)}catch{return}o.length!==0&&b(`device:${r.id}`,()=>{Y({udid:r.id,displayName:r.displayName});for(let s of o)try{Ue(s.file,s.args,{timeout:3e4,stdio:"ignore"})}catch{}})}var ae={emulator:[".apk"],simulator:[".zip"]};async function Ee(e,r,t,o){if(e.kind==="package")return e;if(e.kind==="app_id"){let s=r.cloudUpload;if(!s)throw new Error(`${e.value} is an app id, which needs an account to download it. Log in, or pass a path to a local build instead.`);let n=await G({appId:e.value,baseUrl:s.baseUrl,auth:s.auth,...ae[t]?{accepts:ae[t]}:{},...o?{onProgress:o}:{}}),i=D(n.path);if(!i||i.kind==="app_id")throw new Error(`${n.name} is not a build this CLI can install (from ${e.value}).`);return i}try{let s=new u,n=await A(e.value,s),i=new K;await i.find(n)||o?.(`copying ${xe(e.value)} into the local app store\u2026`);let p=await i.put({key:n,sourcePath:e.value,source:"local"});return{...e,value:p.path}}catch{return e}}function Fe(e){b(`appium:${e}`,()=>{H({deviceClass:e,owner:process.pid})})}var k=class extends Error{constructor(r){super(r),this.name="MobileHostUnsupportedError"}},w=class extends Error{constructor(t,o){super(t);this.doctorText=o;this.name="MobilePreflightError"}};async function $e(e,r,t){let o=t.cloudUpload,s=await W({path:e,type:r,env:o.env,orgId:o.orgId,userId:o.userId,auth:o.auth,baseUrl:o.baseUrl,...t.onProgress?{onProgress:t.onProgress}:{}});if(Q(s)){t.onProgress?.(`app not uploaded \u2014 ${s.reason}`);return}return s.appId}var Ne="app must be a build (.apk for an emulator, .zip of the .app bundle for a simulator) or an app id from your cloud uploads \u2014 a package id names something already installed on one device, so it cannot be uploaded, exported as code, or run anywhere else.",se=/\.(apk|zip)$/i;function D(e){let r=e.trim();if(C(r))return{kind:"app_id",value:r};let t=se.exec(r)?.[1]?.toLowerCase();return t?{kind:t,value:r}:null}function _e(e){return!!e&&(se.test(e)||C(e.trim()))}function Me(e){return e.filter(r=>r.required&&r.status==="fail")}function Be(e,r){return!!r&&e.platform===r.platform&&e.kind===r.kind&&(e.id===r.id||e.virtualName===r.id)}async function mr(e){let r=L();if(!r.supported)throw new k(r.reason);let t=e.appiumUrl??e.defaults?.appium_url,o=!!(e.agent||!e.interactive),s=M();o&&e.platform?.toLowerCase()!=="ios"&&((await s.status("emulator")).installed||await s.ensure("emulator",{automatic:!0,onProgress:e.onProgress}));let n=await O(e.platform,{appiumUrl:t});if(z(n)){let d=n.sections.flatMap(P=>Me(P.checks)).map(P=>P.label).join(", ");throw new w(`Mobile toolchain not ready (${d}). Run \`kane-cli doctor --target ${e.platform?.toLowerCase()==="ios"?"simulator":e.platform?.toLowerCase()==="android"?"emulator":"<emulator|simulator>"}\` for details.`,j(n))}let i=await R({device:e.device,platform:e.platform,defaultTarget:e.defaults?.default_target,interactive:e.interactive}),a;if(i.ok)a=i.target;else if(i.reason==="needs-picker"&&e.pickTarget){let d=await e.pickTarget(i.candidates);if(!d)throw new Error("Target selection cancelled");a=d}else throw new Error(i.message);let p=B(a.platform);if(!p)throw new Error(`No provider for platform "${a.platform}"`);let l=N(a);if(!l)throw new Error(`No managed dependencies serve ${a.platform} ${a.kind} targets yet.`);try{await s.ensure(l,{automatic:o,onProgress:e.onProgress})}catch(d){throw d instanceof _?new w(d.message,d.message):d}let ie=a.state!=="ready"||re(a);a=await te(p,a,e.onProgress);let ne=await q(l,{...t?{appiumUrl:t}:{},device:{udid:a.id,displayName:a.displayName},onProgress:e.onProgress});Fe(l);let x=Be(a,e.defaults?.default_target)?e.defaults?.default_app:void 0,m=e.app??(_e(x)?x:void 0);if(e.app&&!D(e.app))throw new Error(`${e.app}: ${Ne}`);let c=m?D(m):null,U=c?await Ee(c,e,l,e.onProgress):null,v=U?await p.ensureApp(a,U,e.onProgress):void 0,y=c?.kind==="app_id"?c.value:e.cloudUpload&&c&&m?await $e(c.value,l,e):void 0;await Se(p,a,{shutdown:ie,...v?{appPackage:v}:{}});let pe=$(a,v,{noReset:e.noReset??e.defaults?.no_reset,appiumUrl:ne.url}),S=y??m;return{device:pe,target:a,provider:p,...y?{appId:y}:{},...S?{appRef:S}:{}}}export{We as a,te as b,k as c,w as d,Ne as e,D as f,_e as g,mr as h};
|
package/dist/chunk-3AJ3QSF5.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
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-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
|
-
`),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
|
-
`)}function Ot(t,e,r,n){try{let i=e.split(`
|
|
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 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};
|
package/dist/chunk-3Q6WAK6P.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as _e}from"./chunk-AFPHLUQ5.js";import{a as le,b as pe,d as me,e as he}from"./chunk-BB2W35TW.js";import{a as ge}from"./chunk-DNNZ353O.js";import{c as de,f as ae,m as fe,z as ue}from"./chunk-TH47OOBV.js";import{a as oe,b as Y}from"./chunk-CUM23TLF.js";import{f as re,i as ce}from"./chunk-DUAXZYAD.js";import{d as g,e as p,f as ne,g as se,h as ie}from"./chunk-WXHQYYD5.js";var x=i=>({record:null,errors:i,minted:{},logicalIds:{},superseded:[],warnings:[],finalizedTests:{}});function D(i){return i.toLowerCase().trim().replace(/\s+/g," ")}function $e(i,I){let t=i.resolve(I);if(!t||i.nodeLabel.get(t.cid)!==g.USECASE||t.superseded)return[];let m=new Set;for(let{cid:f}of i.byLabel(g.SCENARIO))if(!i.superseded.has(f)&&i.edgesFrom(f).some(k=>k.type===p.BELONGS_TO&&i.tipOf(k.dst)===t.cid)){m.add(f);for(let k of i.edgesInto(f))k.type!==p.AUTOMATES||i.superseded.has(k.src)||m.add(k.src)}return[...m]}function De(i){let{contextDir:I,graph:t,sections:m,by:f}=i,k=i.engine??"design@1",K=re(I);if(t.latestHash!==K)return x([{code:"STALE_BASIS",detail:`graph opened at ${String(t.latestHash)} but chain head is ${String(K)} \u2014 re-open and retry`}]);let L=t.resolve(i.ucRef);if(!L||t.nodeLabel.get(L.cid)!==g.USECASE||L.superseded)return x([{code:"UNKNOWN_UC",detail:`${i.ucRef} is not a live use-case`}]);let E=L.cid,_=[],J=/^design@(\d+)$/.exec(i.templateVersion??""),be=J!==null&&Number.parseInt(J[1],10)>=3,W=new Map,Ee=(e,s)=>{let n=W.get(e.source_cid);if(n===void 0){let o=ge(i.contextDir,t,e.source_cid);n=o?_e(o.toString("utf8")):null,W.set(e.source_cid,n)}if(n===null)return _.push({code:"CITE_UNVERIFIED",detail:`${s}: source ${e.source_id} (${e.source_cid.slice(0,19)}) has no citable text to verify against`}),!1;let c=de(t.mediaOf(e.source_cid),e,n);if(c.length>0){for(let o of c)_.push({code:"CITE_UNVERIFIED",detail:`${s}: ${o.code}: ${o.detail}`});return!1}return!0},T=[],F=[],C=[],j=[],q=[],S={},N={},G={},R=[],P=[],Q=new Set,X=[],B=new Set,A=new Set,M=[];{let e=i.forceScope??(i.force?$e(t,i.ucRef):[]),s=new Set;i.sections.scenarios?.length&&s.add(g.SCENARIO),i.sections.tests?.length&&s.add(g.TEST);for(let n of e)t.superseded.has(n)||(s.has(t.nodeLabel.get(n)??"")?A.add(n):M.push(n))}let w=new Set,V=e=>!t.superseded.has(e)&&(!A.has(e)||w.has(e)),v=(e,s,n)=>{if(S[e])return S[e];let c=t.resolve(e),o=c?V(c.cid)?c.cid:t.tipOf(c.cid):null;return!c||!o||!V(o)?(_.push({code:"UNKNOWN_REF",detail:`${s}: '${e}' is neither in this payload nor a live committed node`}),null):n&&t.nodeLabel.get(o)!==n?(_.push({code:"ILLEGAL_EDGE",detail:`${s}: '${e}' is a ${t.nodeLabel.get(o)}, expected ${n}`}),null):o},Se=(e,s,n,c)=>{if(t.nameOf.has(s)){N[c]=t.nameOf.get(s);return}let o=ue(e,h=>Q.has(h),t.names.keys());o!==null&&(Q.add(o),j.push({cid:s,slug:o,by:f}),N[c]=o)},U=(e,s,n,c)=>{for(let h of ne(e,n))_.push({code:h.code,detail:`${s}: ${h.detail}`});let o=oe(e,n);return t.hasNode(o)&&!t.superseded.has(o)?(A.has(o)&&w.add(o),S[s]=o,o):(T.push({cid:o,label:e,content:n}),S[s]=o,Se(e,o,c,s),o)},$=(e,s,n,c,o)=>{let h=Y(e,s,n,c);if(t.edgesFrom(s).some(r=>r.ecid===h&&!t.superseded.has(r.ecid))){e===p.AUTOMATES&&B.add(n);return}let O=t.nodeLabel.get(s)??T.find(r=>r.cid===s)?.label??"(unknown)",u=t.nodeLabel.get(n)??T.find(r=>r.cid===n)?.label??"(unknown)";for(let r of ie(e,O,u,c))_.push({code:r.code,detail:`${o}: ${r.detail}`});let l=ae(t,e,s,n,X);if(l){_.push({code:l.code,detail:`${o}: ${l.detail}`});return}if(e===p.AUTOMATES){if(B.has(n)){_.push({code:"CARDINALITY_VIOLATION",detail:`${o}: two automates onto ${n} in one record (strict 1:1)`});return}if(B.add(n),!A.has(n)||w.has(n)){let r=b=>A.has(b)&&!w.has(b);if(t.edgesFrom(s).some(b=>b.type===p.AUTOMATES&&b.dst!==n&&!t.superseded.has(b.dst)&&!r(b.dst))&&t.hasNode(s)){_.push({code:"CARDINALITY_VIOLATION",detail:`${o}: automates from ${s} already has a live edge \u2014 supersede it first`});return}if(t.edgesInto(n).some(b=>b.type===p.AUTOMATES&&b.src!==s&&!t.superseded.has(b.src)&&!r(b.src))){_.push({code:"CARDINALITY_VIOLATION",detail:`${o}: automates onto ${n} already has a live edge \u2014 strict 1:1, supersede it first`});return}}}F.push({ecid:Y(e,s,n,c),type:e,src:s,dst:n,props:c}),X.push({src:s,dst:n,type:e})},z=new Set;for(let e of m.gaps??[]){let s=e.temp_ref??e.ref??"gap",n=e.question;if(!n||typeof n!="object"||!n.header||!Array.isArray(n.options)||n.options.length===0||!Number.isInteger(n.recommended_index)){_.push({code:"GAP_QUESTION_INCOMPLETE",detail:`${s}: design gaps carry a full ranked question object (header/options/recommended_index)`});continue}e.kind==="budget-evicted"&&e.ref&&z.add(e.ref);let c={kind:e.kind,question:n,derived:!0,uc:E,...e.risk?{risk:e.risk}:{},...e.risk_rationale?{risk_rationale:e.risk_rationale}:{},...e.text?{text:e.text}:{},...e.ref?{ref:e.ref}:{}};U(g.GAP,s,c,String(n.header))}let Z=new Map;for(let{cid:e,content:s}of t.byLabel(g.SCENARIO))V(e)&&t.edgesFrom(e).some(n=>n.type===p.BELONGS_TO&&t.tipOf(n.dst)===E)&&Z.set(D(String(s.title??"")),e);for(let e of m.scenarios??[]){let s=Z.get(D(e.title));if(s){_.push({code:"DUPLICATE_SCENARIO",detail:`${e.temp_ref}: '${e.title}' duplicates live scenario ${t.nameOf.get(s)??s} \u2014 exercise/link it instead (reuse before minting)`});continue}let n={title:e.title,intent:e.intent,case_type:e.case_type,derived:!0,...e.technique_notes?{technique_notes:e.technique_notes}:{},...e.description?{description:e.description}:{},...e.parameters?{parameters:e.parameters}:{},...e.tags?{tags:e.tags}:{}};U(g.SCENARIO,e.temp_ref,n,e.title)}for(let e of m.scenarios??[]){let s=S[e.temp_ref];if(s){$(p.BELONGS_TO,s,E,{},e.temp_ref);for(let n of e.depends_on??[]){let c=v(n,`${e.temp_ref}.depends_on`,g.SCENARIO);c&&$(p.DEPENDS_ON,s,c,{},`${e.temp_ref}.depends_on`)}}}for(let e of m.acs??[]){let s={text:e.text,kind:e.kind,risk:e.risk,derived:!0,...e.expected_answer?{expected_answer:e.expected_answer}:{},...e.measurable!==void 0?{measurable:e.measurable}:{}},n=U(g.AC,e.temp_ref,s,e.text);if(!n)continue;let c=e.scope?.type==="scenario"&&e.scope.ref?v(e.scope.ref,`${e.temp_ref}.scope`,g.SCENARIO):E;c&&!t.edgesFrom(n).some(o=>o.type===p.SCOPED_TO&&!t.superseded.has(o.ecid))&&$(p.SCOPED_TO,n,c,{},`${e.temp_ref}.scope`);for(let o of e.cites??[]){if(be&&!Ee(o,`${e.temp_ref}.cite`))continue;let h={source_id:o.source_id,source_cid:o.source_cid,anchor:o.anchor,...o.quote?{quote:o.quote}:{}};$(p.DERIVES,o.source_cid,n,h,`${e.temp_ref}.cite`)}}for(let e of m.exercises??[]){let s=v(e.scenario,"exercises.scenario",g.SCENARIO),n=v(e.ac,"exercises.ac",g.AC);s&&n&&$(p.EXERCISES,s,n,{},`exercises ${e.scenario}\u2192${e.ac}`)}for(let e of m.scoped_to_repoints??[]){let s=v(e.ac,"scoped_to_repoints.ac",g.AC),n=v(e.to,"scoped_to_repoints.to");if(!s||!n)continue;let c=t.edgesFrom(s).find(o=>o.type===p.SCOPED_TO&&!t.superseded.has(o.ecid));c&&C.push({kind:"edge",ecid:c.ecid,reason:`re-scoped to ${e.to} by ${f.id}`,by:f}),$(p.SCOPED_TO,s,n,{},`scoped_to_repoints ${e.ac}`)}let ee=new Map;if(i.finalizeTestBody)for(let[e,s]of t.nameOf)ee.set(t.tipOf(e),s);let te=e=>t.nameOf.get(e)??ee.get(t.tipOf(e))??null,ye=e=>{let s=S[e];if(s)return N[e]??te(s);if(t.names.has(e))return t.resolve(e)?e:null;let n=t.resolve(e);return n?te(t.tipOf(n.cid)):null};for(let e of m.tests??[]){for(let u of e.reuses??[])z.has(u)&&_.push({code:"REUSES_EVICTED",detail:`${e.temp_ref}: reuses '${u}' which was budget-evicted \u2014 drop the edge; the dependent gap names the missing @import`});let s=e.test_md_blob,n=e.definitionId,c=e.objectives_blob;if(i.finalizeTestBody){let u;try{u=i.finalizeTestBody({temp_ref:e.temp_ref,test_md_blob:e.test_md_blob,verifies:e.verifies,reuses:e.reuses??[]},ye)}catch(l){return x([{code:"FINALIZE_BODY",detail:`${e.temp_ref}: ${l instanceof Error?l.message:String(l)}`}])}u&&(s=u.test_md_blob,n=u.definitionId,c=u.objectives_blob??c,G[e.temp_ref]=n)}let o={title:e.title,check:e.check,definitionId:n,derived:!0,...e.config?{config:e.config}:{},...s?{test_md_blob:s}:{},...c?{objectives_blob:c}:{},...e.surface_required!==void 0?{surface_required:e.surface_required}:{}},h=U(g.TEST,e.temp_ref,o,e.title);if(!h)continue;let O=v(e.automates,`${e.temp_ref}.automates`,g.SCENARIO);O&&$(p.AUTOMATES,h,O,{},`${e.temp_ref}.automates`);for(let u of e.verifies){let l=v(u,`${e.temp_ref}.verifies`,g.AC);l&&$(p.VERIFIES,h,l,{},`${e.temp_ref}.verifies`)}for(let u of e.reuses??[]){if(z.has(u))continue;let l=v(u,`${e.temp_ref}.reuses`,g.TEST);l&&$(p.REUSES,h,l,{},`${e.temp_ref}.reuses`)}for(let u of e.verifies){let l=S[u]??t.resolve(u)?.cid;l&&(t.trust.get(l)??"derived")==="derived"&&!T.some(r=>r.cid===l)?R.push(`${e.temp_ref}: verifies ${u} which is still DERIVED (unapproved) \u2014 committed anyway; approve it in chat or via review`):l&&S[u]===l&&(m.acs??[]).some(r=>r.temp_ref===u)&&R.push(`${e.temp_ref}: verifies ${u} minted in this same record (unapproved) \u2014 committed anyway; approve it in chat`)}if(e.verifies.length>1){let u=e.check?.verified_against;R.push(`${e.temp_ref}: verifies ${e.verifies.length} ACs but machine-asserts only 1 (check.verified_against=${u!=null?String(u):"?"}) \u2014 the rest ride prose only`)}}let H=[];{let e=(r,d)=>`${r??""}\0${D(String(d??""))}`,s=(r,d)=>i.reason?`${i.reason} \u2014 evolve by ${f.id}${d?` (${d})`:""}`:r,n=new Map;for(let r of T){if(r.label!==g.SCENARIO&&r.label!==g.TEST)continue;let d=e(r.label,r.content.title);n.set(d,[...n.get(d)??[],r.cid])}let c=new Map;for(let r of A){if(w.has(r))continue;let d=e(t.nodeLabel.get(r),t.getNode(r)?.content.title);c.set(d,[...c.get(d)??[],r])}for(let[r,d]of c){let a=n.get(r)??[],b=d.length===1&&a.length===1;for(let y of d)b?(C.push({kind:"node",old:y,new:a[0],reason:s(`--force redesign of ${i.ucRef} by ${f.id} (title-matched successor)`,"title-matched successor"),by:f}),H.push({old:y,next:a[0]})):C.push({kind:"node",old:y,new:null,reason:s(`--force redesign of ${i.ucRef} by ${f.id}`),by:f}),P.push(y)}let o=r=>t.edgesFrom(r).some(d=>d.type!==p.SCOPED_TO?!1:d.dst===E||t.tipOf(d.dst)===E?!0:t.nodeLabel.get(d.dst)===g.SCENARIO&&t.edgesFrom(d.dst).some(a=>a.type===p.BELONGS_TO&&t.tipOf(a.dst)===E)),h=new Map;for(let{cid:r,content:d}of t.byLabel(g.AC)){if(t.superseded.has(r)||!o(r))continue;let a=D(String(d.text??""));h.set(a,[...h.get(a)??[],r])}let O=new Map;for(let r of T){if(r.label!==g.AC)continue;let d=D(String(r.content.text??""));O.set(d,[...O.get(d)??[],r.cid])}for(let[r,d]of h){let a=O.get(r)??[];d.length!==1||a.length!==1||(C.push({kind:"node",old:d[0],new:a[0],reason:s(`AC re-emitted with changed content by ${f.id} (text-matched successor)`,"AC text-matched successor"),by:f}),H.push({old:d[0],next:a[0]}),P.push(d[0]))}let u=new Set(P),l=new Set;for(let r of C)r.kind==="edge"&&l.add(r.ecid);for(let{old:r,next:d}of H)for(let a of t.edgesInto(r))se(a.type)?.pin?.comparesTo!=="dst_tip"||t.superseded.has(a.src)||u.has(a.src)||l.has(a.ecid)||(C.push({kind:"edge",ecid:a.ecid,reason:`re-blessed onto ${d} (redirect successor of ${r}) by ${f.id}`,by:f}),l.add(a.ecid),F.some(y=>y.type===a.type&&y.src===a.src&&y.dst===d)||t.edgesFrom(a.src).some(y=>y.type===a.type&&y.dst===d))||a.type===p.AUTOMATES&&B.has(d)||$(a.type,a.src,d,a.props,`rebless ${a.type} from ${t.nameOf.get(a.src)??a.src}`)}if(_.length>0)return x(_);if(T.length===0&&F.length===0&&C.length===0&&q.length===0)return Object.keys(S).length>0?(R.push("everything in this phase is already current \u2014 nothing re-committed"),{record:null,errors:null,minted:S,logicalIds:N,superseded:[],warnings:R,finalizedTests:G,...i.force||i.forceScope?{forceScopeRemaining:M}:{}}):x([{code:"EMPTY_DESIGN",detail:"finalize_design produced nothing to commit"}]);if(i.generationTicket){let e=me(t,i.generationTicket);if(e!==null)return x([e])}return{record:ce(I,{ts:new Date().toISOString(),proposal_id:null,nodes:T,edges:F,review:[],supersessions:C,source_head_moves:{},...j.length>0?{names:j}:{},...(()=>{for(let e of m.judgements??[]){let s=e.target?S[e.target]??t.resolve(e.target)?.cid??E:E;q.push({about:s,rationale:`[${e.kind}] ${e.rationale}`,by:f})}return q.length>0?{judgements:q}:{}})(),design_of:{uc_cid:E,engine:k},...i.generationTicket?{design_generation:he(i.generationTicket,E,f)}:{},...i.eventIds&&i.eventIds.length>0?{event_ids:i.eventIds}:i.sid?{event_ids:fe(t,i.sid,"design",1)}:{},...i.sid?{sid:i.sid}:{},...i.phase?{design_phase:{uc_root:le(t,E),generation:i.generationTicket?.next_gen??pe(t,i.ucRef)?.gen??1,phase:i.phase,completeness:i.phaseCompleteness??"complete"}}:{}},{expectPrev:t.latestHash}).record,errors:null,minted:S,logicalIds:N,superseded:P,warnings:R,finalizedTests:G,...i.force||i.forceScope?{forceScopeRemaining:M}:{}}}function Le(i,I){let t=[];for(let m of i){let f=m.design_phase;!f||typeof f!="object"||f.uc_root===I&&(typeof f.phase!="string"||typeof f.generation!="number"||t.push({phase:f.phase,generation:f.generation,seq:m.seq,completeness:f.completeness==="partial"?"partial":"complete"}))}return t.sort((m,f)=>m.seq-f.seq)}export{$e as a,De as b,Le as c};
|
package/dist/chunk-6DTWVLSJ.js
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
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
|
-
`)}catch(i){let t=i instanceof Error?i.message:String(i);process.stderr.write(`[config] Failed to save config: ${t}
|
|
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};
|
package/dist/chunk-BG66IAO6.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as G}from"./chunk-MMBBQ4OZ.js";import{j as O}from"./chunk-Z2T7E5HM.js";import{d as E,e as z}from"./chunk-4JOD47QI.js";import{a as X}from"./chunk-RZ4F3BHX.js";import{spawn as _e}from"child_process";import{existsSync as Ie,readFileSync as $e}from"fs";import{homedir as Ne}from"os";import{dirname as Q,join as k}from"path";import{access as ve,mkdir as W,readFile as we}from"fs/promises";import{homedir as be}from"os";import{arch as ye,platform as Ae}from"process";import{join as M}from"path";var xe=35,Se="google_apis",ke="KaneCLI_Pixel_API35",Te="KaneAI_Pixel_API35";function bt(t){return t===Te?ke:t}var De=1;function Pe(t,e){return t==="darwin"&&e==="arm64"?"arm64-v8a":"x86_64"}function Me(){return{home:be(),os:Ae,arch:ye}}async function Y(t){try{return await ve(t),!0}catch{return!1}}var H=class{deps;constructor(e={}){this.deps={...Me(),...e}}paths(){let e=M(this.deps.home,".testmuai","kaneai","mobile"),r=M(e,"android-sdk");return{root:r,emulatorDir:M(r,"emulator"),systemImageDir:M(r,"system-images",`android-${xe}`,Se,Pe(this.deps.os,this.deps.arch)),avdHome:M(e,"avd"),manifest:M(r,"sdk-manifest.json")}}environment(){let e=this.paths();return{ANDROID_HOME:e.root,ANDROID_SDK_ROOT:e.root,ANDROID_AVD_HOME:e.avdHome}}async ensureSdkRootMarkers(){let e=this.paths().root;await W(M(e,"platforms"),{recursive:!0}),await W(M(e,"platform-tools"),{recursive:!0})}async status(){let e=this.paths(),r=null;try{r=JSON.parse(await we(e.manifest,"utf8"))}catch{}if(!r||r.schemaVersion!==De)return{emulator:!1,systemImage:!1};let o=this.deps.os==="win32"?"emulator.exe":"emulator";return{emulator:!!r.components.emulator&&await Y(M(e.emulatorDir,o)),systemImage:!!r.components.systemImage&&await Y(M(e.systemImageDir,"system.img"))}}},Z;function L(){return Z??=new H,Z}var V="android",Ee="http://127.0.0.1:4723/status",Oe=2e3,ee=12e4,Re=1e3,Ce=3e5;var Le=5,te="Run `kane-cli doctor --target emulator --install` to install the managed Appium tree.",Fe={device:"ready",unauthorized:"unauthorized",offline:"offline"};function Be(t){let e={};for(let r of t){let o=r.indexOf(":");o<=0||(e[r.slice(0,o)]=r.slice(o+1))}return e}function Ue(t){let e=[];for(let r of t.split(`
|
|
3
|
-
`)){let o=r.trim();if(!o||o.startsWith("*"))continue;let m=o.toLowerCase();if(m.startsWith("list of devices")||m.startsWith("adb server"))continue;let f=o.split(/\s+/),p=f[0],v=f[1];if(!p||!v||!p.startsWith("emulator-"))continue;let h=Be(f.slice(2)),b=h.model?h.model.replace(/_/g," "):void 0;e.push({platform:V,kind:"emulator",id:p,displayName:b??p,state:Fe[v]??"offline"})}return e}function ie(t){let e=[];for(let r of t.split(`
|
|
4
|
-
`)){let o=r.trim();o&&/^[A-Za-z0-9._-]+$/.test(o)&&(e.includes(o)||e.push(o))}return e}function qe(t){for(let e of t.split(`
|
|
5
|
-
`)){let r=e.trim();if(!(!r||r==="OK"))return r}}function He(t){let e=/^Version\s+(\S+)/m.exec(t);return e?.[1]?e[1].split("-")[0]:/Android Debug Bridge version\s+(\S+)/.exec(t)?.[1]}function Ve(t){let e=[];for(let r of t.split(`
|
|
6
|
-
`)){let o=r.trim();if(!o.startsWith("package:"))continue;let m=o.slice(8).trim();m&&!e.includes(m)&&e.push(m)}return e.sort()}function je(t){let e=Number(t.trim());return Number.isInteger(e)&&e>0?e:void 0}function Je(t){return[...new Set(t.split(",").map(e=>e.trim()).filter(Boolean))]}var Ke=[{match:/INSTALL_FAILED_VERIFICATION|verif(?:ier|ication)/i,hint:`Package verification blocked the install. Disable it for adb installs:
|
|
7
|
-
adb -s <device> shell settings put global verifier_verify_adb_installs 0`},{match:/INSTALL_FAILED_UPDATE_INCOMPATIBLE|INSTALL_FAILED_VERSION_DOWNGRADE|signatures do not match/i,hint:`A different build of this package is already installed. Uninstall it first:
|
|
8
|
-
adb -s <device> uninstall <package>`},{match:/INSUFFICIENT_STORAGE/i,hint:"The device is out of storage. Free space on the device and retry."}];function Xe(t){for(let{match:e,hint:r}of Ke)if(e.test(t))return r}function j(t,e,r=Le){let o=t.toLowerCase(),m=e.filter(v=>v.toLowerCase().includes(o)),f=Math.max(6,Math.floor(o.length/2)),p=e.filter(v=>!m.includes(v)&&ze(v.toLowerCase(),o)>=f);return[...m,...p].slice(0,r)}function ze(t,e){let r=Math.min(t.length,e.length),o=0;for(;o<r&&t[o]===e[o];)o++;return o}function ne(t){return t&&/^hw\.device\.name\s*=\s*(.+)\s*$/m.exec(t)?.[1]?.trim()||void 0}function Ge(){return X(Ee,{signal:AbortSignal.timeout(Oe)}).then(t=>t.ok,()=>!1)}function We(t,e,r){_e(t,e,{stdio:"ignore",detached:!0,...r?{env:{...process.env,...r}}:{}}).unref()}function Ye(){return{exec:E,spawnDetached:We,fileExists:Ie,env:process.env,home:Ne(),os:process.platform,probeAppiumServer:Ge,now:()=>Date.now(),sleep:z,mobileDeps:{status:t=>O().status(t),environment:t=>O().environment(t)},sdkSuite:{status:()=>L().status(),environment:()=>L().environment(),emulatorPath:()=>{let t=L().paths().emulatorDir;return k(t,process.platform==="win32"?"emulator.exe":"emulator")},ensureSdkRootMarkers:()=>L().ensureSdkRootMarkers()}}}function re(t={}){let e={...Ye(),...t},r={},o=new Set;function m(i){return e.os==="win32"?`${i}.exe`:i}function f(i){if(e.readAvdConfig)return e.readAvdConfig(i);let n=[e.env.ANDROID_AVD_HOME,k(e.home,".android","avd"),e.sdkSuite.environment().ANDROID_AVD_HOME];for(let s of n){if(!s)continue;let a=k(s,`${i}.avd`,"config.ini");try{if(e.fileExists(a))return $e(a,"utf8")}catch{}}}function p(){return e.os==="win32"?"appium.cmd":"appium"}function v(){let i=[];for(let n of["ANDROID_HOME","ANDROID_SDK_ROOT"]){let s=e.env[n];s&&s.trim()!==""&&i.push(s.trim())}return e.os==="darwin"?i.push(k(e.home,"Library","Android","sdk")):e.os==="win32"?i.push(k(e.home,"AppData","Local","Android","Sdk")):i.push(k(e.home,"Android","Sdk")),i}function h(i){let n=i==="adb"?"platform-tools":"emulator";return v().map(s=>k(s,n,m(i)))}async function b(i){let n=e.os==="win32"?"where":"which",s=await e.exec(n,[m(i)],{timeoutMs:5e3});if(s.code!==0)return null;let a=s.stdout.split(`
|
|
9
|
-
`)[0]?.trim();return a&&a!==""?a:null}async function S(i){if(i==="adb"){let s=G(e.env);if(s){let u=k(s.platformToolsDir,m("adb"));if(e.fileExists(u)){let c={path:u,source:"sdk"};return r[i]=c,c}return delete r[i],null}if((await e.mobileDeps.status("emulator")).installed){let u=await e.mobileDeps.environment("emulator");if(u.platformToolsDir){let c={path:k(u.platformToolsDir,m("adb")),source:"local"};return r[i]=c,c}}return delete r[i],null}if(i==="emulator"&&(await e.sdkSuite.status()).emulator){let a={path:e.sdkSuite.emulatorPath(),source:"local"};return r[i]=a,a}let n=await b(i);if(n){let s={path:n,source:"sdk"};return r[i]=s,s}for(let s of h(i))if(e.fileExists(s)){let a={path:s,source:"sdk"};return r[i]=a,a}return delete r[i],null}async function $(){let i=await S("adb");if(!i)throw new Error("Managed adb is not installed.\nRun `kane-cli doctor --target emulator --install` to install the pinned Android platform-tools.");return i.path}async function d(i){let n=await e.exec(i,["devices","-l"],{timeoutMs:2e4});return Ue(n.stdout)}async function l(i,n){let s=await e.exec(i,["-s",n,"shell","getprop","ro.boot.qemu.avd_name"],{timeoutMs:1e4});if(s.code===0){let u=s.stdout.split(`
|
|
10
|
-
`)[0]?.trim();if(u)return u}let a=await e.exec(i,["-s",n,"emu","avd","name"],{timeoutMs:1e4});if(a.code===0)return qe(a.stdout)}async function g(i){let n=await S("emulator");if(!n)return[];let s=await e.exec(n.path,["-list-avds"],{timeoutMs:2e4}),a=s.code===0?ie(s.stdout):[];if(o.clear(),(await e.sdkSuite.status()).emulator){let c=await e.exec(n.path,["-list-avds"],{timeoutMs:2e4,env:{...e.env,...e.sdkSuite.environment()}});if(c.code===0)for(let w of ie(c.stdout))o.add(w),a.includes(w)||a.push(w)}return a.filter(c=>!i.has(c)).map(c=>{let w=ne(f(c));return{platform:V,kind:"emulator",id:c,displayName:c,state:"stopped",virtualName:c,...w?{modelIdentifier:w}:{}}})}async function y(){let i=await S("adb");if(!i)return[];let n=await d(i.path),s=new Set;for(let u of n){if(u.kind!=="emulator"||u.state!=="ready")continue;let c=await l(i.path,u.id);if(!c)continue;u.virtualName=c,u.displayName=c;let w=ne(f(c));w&&(u.modelIdentifier=w),s.add(c)}let a=await g(s);return[...n,...a]}function T(i,n){return[`${i} did not finish booting within ${ee/1e3}s.`,n?`It attached as ${n} but never reported sys.boot_completed=1.`:"It never attached to adb.","The emulator process is still running \u2014 check its window for errors.","Common causes: no hardware acceleration (install the Android Emulator","hypervisor driver / enable KVM), or a corrupt AVD (recreate it in","Android Studio's Device Manager)."].join(`
|
|
11
|
-
`)}async function A(i,n,s){let a=await S("emulator");if(!a)throw new Error("The Android `emulator` binary was not found, so AVDs cannot be booted.\nInstall it via Android Studio's SDK Manager (Android Emulator) and set ANDROID_HOME.");let u=new Set((await d(i)).map(F=>F.id)),c=o.has(n);c&&await e.sdkSuite.ensureSdkRootMarkers();let w=c?{...e.env,...e.sdkSuite.environment()}:void 0;e.spawnDetached(a.path,["-avd",n],w),s?.(`booting ${n}\u2026`);let P=e.now()+ee,x;for(;e.now()<P;){if(await e.sleep(Re),!x){let I=(await d(i)).find(C=>C.kind==="emulator"&&!u.has(C.id));I&&(x=I.id,s?.(`${n} attached as ${x}, waiting for boot\u2026`));continue}if((await e.exec(i,["-s",x,"shell","getprop","sys.boot_completed"],{timeoutMs:1e4})).stdout.trim()==="1")return x}throw new Error(T(n,x))}async function _(i,n){let s=await $();if(i.state==="ready")return D(i,s);if(i.state==="unauthorized")throw new Error(`${i.displayName} (${i.id}) is UNAUTHORIZED. Accept the USB-debugging prompt on the device, then retry.`);if(i.state==="offline")throw new Error(`${i.displayName} (${i.id}) is offline. Reconnect it (USB) or re-run \`adb connect ${i.id}\` (wireless), then retry.`);let a=i.virtualName??i.id,u=await A(s,a,n);return D({...i,kind:"emulator",id:u,displayName:a,state:"ready",virtualName:a},s)}async function D(i,n){let[s,a,u,c]=await Promise.all([e.exec(n,["-s",i.id,"shell","getprop","ro.build.version.sdk"],{timeoutMs:1e4}),e.exec(n,["-s",i.id,"shell","getprop","ro.build.version.release"],{timeoutMs:1e4}),e.exec(n,["-s",i.id,"shell","getprop","ro.product.cpu.abilist"],{timeoutMs:1e4}),e.exec(n,["-s",i.id,"shell","getprop","ro.product.cpu.abi"],{timeoutMs:1e4})]),w=s.code===0?je(s.stdout):void 0,P=a.code===0?a.stdout.trim():"",x=Je(u.code===0&&u.stdout.trim()!==""?u.stdout:c.stdout);return{...i,...w!==void 0?{androidApiLevel:w}:{},...P!==""?{osVersion:P}:{},...x.length>0?{androidAbis:x}:{}}}async function N(i){let n=await $(),s=await e.exec(n,["-s",i.id,"shell","pm","list","packages","-3"],{timeoutMs:3e4});if(s.code!==0)throw new Error(`Could not list installed packages on ${i.id}: ${s.stderr.trim()||`adb exited ${s.code}`}`);return Ve(s.stdout)}async function U(i){let n;try{let{default:s}=await import("./adbkit-apkreader-ORZBGCJQ.js");n=(await(await s.open(i)).readManifest())?.package}catch(s){let a=s instanceof Error?s.message:String(s);throw new Error(`Could not read the package name from ${i} (${a}).
|
|
12
|
-
Pass the package name explicitly with --app <package>.`)}if(typeof n!="string"||n.trim()==="")throw new Error(`${i} has no package name in its manifest.
|
|
13
|
-
Pass the package name explicitly with --app <package>.`);return n.trim()}async function ce(i,n,s){let a=await $();s?.(`installing ${n} on ${i.id}\u2026`);let u=await e.exec(a,["-s",i.id,"install","-r",n],{timeoutMs:Ce}),c=`${u.stdout}
|
|
14
|
-
${u.stderr}`;if(u.code===0&&!/\bFailure\b/i.test(c))return;let w=Xe(c),P=[`Installing ${n} on ${i.id} failed (adb exited ${u.code}).`,c.trim()];throw w&&P.push("",w),new Error(P.filter(x=>x!=="").join(`
|
|
15
|
-
`))}async function me(i,n,s){if(n.kind==="package"){let a=await N(i);if(a.includes(n.value))return n.value;let u=j(n.value,a),c=[`${n.value} is not installed on ${i.displayName} (${i.id}).`];throw u.length>0?c.push("Close matches:",...u.map(w=>` ${w}`)):c.push("Pass a local .apk path to --app to install it instead."),new Error(c.join(`
|
|
16
|
-
`))}if(n.kind!=="apk"){let a=n.kind==="aab"?"Android app bundles are not directly installable; build an APK first.":n.kind==="apks"?"Split bundles are not supported yet.":`${n.kind} artifacts are not installable on Android.`;throw new Error(a)}return await ce(i,n.value,s),U(n.value)}async function pe(){let i=await e.mobileDeps.status("emulator");return i.installed?{status:i,env:await e.mobileDeps.environment("emulator")}:null}async function fe(i={}){let n=[],s=await pe(),a=await e.mobileDeps.status("emulator"),u=await S("adb");if(u){let I=await e.exec(u.path,["version"],{timeoutMs:1e4}),C=He(I.stdout);n.push({id:"android.adb",fixedByBundle:!0,label:"adb",required:!0,status:"pass",detail:C?`platform-tools ${C} \xB7 ${u.path}`:u.path})}else n.push({id:"android.adb",fixedByBundle:!0,label:"adb",required:!0,status:"fail",detail:a.corrupt??"managed mobile dependencies are not installed",fixText:"Run `kane-cli doctor --target emulator --install` to download the managed mobile deps bundle under ~/.testmuai/kaneai/mobile."});let c=!i.appiumUrl;s?.env.appiumHome?n.push({id:"android.appium",fixedByBundle:!0,label:"Appium",required:c,status:"pass",detail:k(Q(s.env.appiumHome),"appium","node_modules",".bin",p())}):n.push({id:"android.appium",fixedByBundle:!0,label:"Appium",required:c,status:c?"fail":"info",detail:i.appiumUrl?`managed Appium not required because --appium-url is set (${i.appiumUrl})`:a.corrupt??"managed Appium is not installed",...c?{fixText:te}:{}}),n.push({id:"android.uiautomator2",fixedByBundle:!0,label:"uiautomator2 driver",required:c,status:s?"pass":c?"fail":"info",detail:s?"bundled in the managed mobile deps":i.appiumUrl?"managed driver not required because --appium-url is set":"not installed in the managed deps tree",...s||!c?{}:{fixText:te}});let w=k(e.home,".testmuai","kaneai","mobile","trees");e.fileExists(w)&&n.push({id:"android.legacy-trees",label:"legacy toolchain trees",required:!1,status:"info",detail:`${w} predates the deps bundle \u2014 removed automatically by the next bundle install`});let P=await b("adb");P&&n.push({id:"android.system-adb",label:"system adb",required:!1,status:"info",detail:`${P} (ignored; managed adb always wins and may restart its server)`});let x=await b("appium");x&&n.push({id:"android.system-appium",label:"system Appium",required:!1,status:"info",detail:`${x} (ignored; managed Appium always wins)`});let F=await e.sdkSuite.status(),q=await S("emulator");if(F.emulator?n.push({id:"android.emulator",label:"emulator",required:!1,status:"pass",detail:`managed emulator \xB7 ${e.sdkSuite.emulatorPath()}`}):q?n.push({id:"android.emulator",label:"emulator",required:!1,status:"info",detail:`${q.path} (system install)`}):n.push({id:"android.emulator",label:"emulator",required:!1,status:"info",detail:"not installed, so stopped AVDs are not listed. Install it with the Android SDK (Android Studio \u2192 SDK Manager \u2192 Android Emulator)."}),e.os==="darwin"){let I=await e.exec("sysctl",["-n","kern.hv_support"],{timeoutMs:5e3});n.push({id:"android.virtualization",label:"virtualization",required:!1,status:"info",detail:I.code===0&&I.stdout.trim()==="1"?"Hypervisor.framework available":"Hypervisor.framework not reported \u2014 emulator boots may hang"})}else e.os==="linux"?n.push({id:"android.virtualization",label:"virtualization",required:!1,status:"info",detail:e.fileExists("/dev/kvm")?"/dev/kvm present":"/dev/kvm missing \u2014 enable KVM or emulator boots will hang"}):n.push({id:"android.virtualization",label:"virtualization",required:!1,status:"info",detail:"not checked on this host"});return n}async function ge(i){let n=await e.mobileDeps.environment("emulator"),s=[...n.dirs],a=r.emulator,u=a?.source==="sdk"?Q(a.path):void 0;return u&&!s.includes(u)&&s.push(u),{...n,dirs:s}}async function he(i,n){let s=await $(),a=[];return n.appPackage&&a.push({label:`closing ${n.appPackage}`,file:s,args:["-s",i.id,"shell","am","force-stop",n.appPackage]}),n.shutdown&&a.push({label:`shutting down ${i.displayName}`,file:s,args:["-s",i.id,"emu","kill"]}),a}return{platform:V,available:()=>!0,checks:fe,discover:y,prepare:_,listApps:N,ensureApp:me,teardownPlan:he,toolEnv:ge}}import{mkdtemp as se,readdir as Ze,rm as oe,writeFile as Qe}from"fs/promises";import{tmpdir as ae}from"os";import{join as R}from"path";var de="ios",et=12e4,tt=3e5,it="an .ipa cannot be installed on a simulator \u2014 use a .zip of the .app build";function nt(t){let e=/\.iOS-(\d+)-(\d+)$/.exec(t);return e?`${e[1]}.${e[2]}`:void 0}function rt(t){let e;try{e=JSON.parse(t)}catch{return[]}let r=[];for(let[o,m]of Object.entries(e.devices??{})){let f=nt(o);for(let p of m??[]){let v=typeof p.udid=="string"?p.udid:void 0,h=typeof p.name=="string"?p.name:void 0;if(!v||!h)continue;let b=p.state==="Booted"?"ready":p.state==="Shutdown"?"stopped":"offline",S=typeof p.deviceTypeIdentifier=="string"?p.deviceTypeIdentifier.replace(/^com\.apple\.CoreSimulator\.SimDeviceType\./,""):void 0;r.push({platform:de,kind:"simulator",id:v,displayName:f?`${h} (iOS ${f})`:h,state:b,virtualName:h,...f?{osVersion:f}:{},...S?{modelIdentifier:S}:{}})}}return r}function st(t){let e;try{e=JSON.parse(t)}catch{return[]}let r=[];for(let[o,m]of Object.entries(e)){if(m?.ApplicationType!=="User")continue;let f=m.CFBundleIdentifier??o;r.includes(f)||r.push(f)}return r.sort()}function ot(t){let e;try{e=JSON.parse(t)}catch{return[]}let r=[];for(let[o,m]of Object.entries(e)){let f=m?.CFBundleIdentifier??o;f&&!r.includes(f)&&r.push(f)}return r.sort()}var J=16;function at(t){return/^Xcode (\d+(?:\.\d+)*)/m.exec(t)?.[1]}async function dt(t){let e=await se(R(ae(),"kane-app-unzip-")),r=()=>oe(e,{recursive:!0,force:!0}),o=await E("unzip",["-q",t,"-d",e],{timeoutMs:10*6e4});if(o.code!==0)throw await r(),new Error(`Could not unpack ${t}: ${o.stderr.trim()||`unzip exited ${o.code}`}`);for(let m of[e,R(e,"Payload")]){let f;try{f=await Ze(m)}catch{continue}let p=f.find(v=>v.toLowerCase().endsWith(".app"));if(p)return{appPath:R(m,p),cleanup:r}}throw await r(),new Error(`${t} does not contain a .app bundle.`)}async function lt(t){let e=await se(R(ae(),"kane-plist-"));try{let r=R(e,"input.plist");await Qe(r,t);let o=await E("plutil",["-convert","json","-o","-",r],{timeoutMs:15e3});if(o.code!==0)throw new Error(`plutil could not convert simctl output: ${o.stderr.trim()}`);return o.stdout}finally{await oe(e,{recursive:!0,force:!0})}}function ut(){return{exec:E,os:process.platform,convertPlistToJson:lt,mobileDeps:{status:()=>O().status("simulator"),environment:()=>O().environment("simulator")}}}function le(t={}){let e={...ut(),...t};async function r(d,l=3e4){return e.exec("xcrun",["simctl",...d],{timeoutMs:l})}async function o(){let d=await r(["list","devices","available","--json"]);return d.code!==0?[]:rt(d.stdout)}async function m(){return o()}async function f(d,l){let g=await e.exec("open",["-a","Simulator","--args","-CurrentDeviceUDID",d],{timeoutMs:15e3});g.code!==0&&l?.(`could not open Simulator.app (${g.stderr.trim()||`exit ${g.code}`}); the device is booted and the run continues headless`)}async function p(d,l){if(d.state!=="ready"&&d.state!=="stopped")throw new Error(`${d.displayName} (${d.id}) is ${d.state}; open Simulator.app to inspect it, then retry.`);d.kind==="simulator"&&await f(d.id,l),d.state==="stopped"&&l?.(`booting ${d.displayName}\u2026`);let g=await r(["bootstatus",d.id,"-b"],et);if(g.code!==0)throw new Error(`Could not boot ${d.displayName}: ${g.stderr.trim()||g.stdout.trim()||`simctl bootstatus exited ${g.code}`}`);let y=(await o()).find(T=>T.id===d.id);if(y?.state==="ready")return y;throw new Error(`${d.displayName} finished booting but simctl still reports it as ${y?.state??"missing"}.`)}async function v(d){let l=await r(["listapps",d.id]);if(l.code!==0)throw new Error(`Could not list apps on ${d.displayName}: ${l.stderr.trim()||`simctl exited ${l.code}`}`);return st(await e.convertPlistToJson(l.stdout))}async function h(d){let l=R(d,"Info.plist"),g=await e.exec("plutil",["-convert","json","-o","-",l],{timeoutMs:15e3});if(g.code!==0)throw new Error(`${d} Info.plist could not be read: ${g.stderr.trim()||`plutil exited ${g.code}`}`);let y;try{y=JSON.parse(g.stdout)}catch{throw new Error(`${d} Info.plist did not contain valid JSON from plutil.`)}if(!y.CFBundleIdentifier)throw new Error(`${d} has no CFBundleIdentifier in its Info.plist.`);return y.CFBundleIdentifier}async function b(d,l,g){if(l.kind==="package"){let A=await r(["listapps",d.id]);if(A.code!==0)throw new Error(`Could not list apps on ${d.displayName}: ${A.stderr.trim()||`simctl exited ${A.code}`}`);let _=ot(await e.convertPlistToJson(A.stdout));if(_.includes(l.value))return l.value;let D=j(l.value,_),N=[`${l.value} is not installed on ${d.displayName} (${d.id}).`];throw D.length>0?N.push("Close matches:",...D.map(U=>` ${U}`)):N.push("Pass a .zip of the .app bundle to install it instead."),new Error(N.join(`
|
|
17
|
-
`))}if(l.kind==="ipa")throw new Error(`${it}.`);if(l.kind!=="app"&&l.kind!=="zip")throw new Error(`${l.kind} artifacts are Android-only and not installable on iOS.`);let y=l.value,T;if(l.kind==="zip"){g?.(`unpacking ${l.value}\u2026`);let A=await dt(l.value);y=A.appPath,T=A.cleanup}g?.(`installing ${y} on ${d.displayName}\u2026`);try{let A=await r(["install",d.id,y],tt);if(A.code!==0)throw new Error(`Installing ${l.value} on ${d.displayName} failed: ${A.stderr.trim()||A.stdout.trim()}`);return await h(y)}finally{await T?.()}}async function S(d={}){let l=[],g=await e.exec("xcode-select",["-p"],{timeoutMs:1e4});if(g.code===0&&g.stdout.trim()!==""){let _=await e.exec("xcodebuild",["-version"],{timeoutMs:3e4}),D=_.code===0?at(_.stdout):void 0;D?Number(D.split(".")[0])<J?l.push({id:"ios.xcode",label:"Xcode",required:!0,status:"fail",detail:`Xcode ${D} is older than the required Xcode ${J}`,fixText:`Update Xcode to ${J} or newer from the App Store.`}):l.push({id:"ios.xcode",label:"Xcode",required:!0,status:"pass",detail:`Xcode ${D} \xB7 ${g.stdout.trim()}`}):l.push({id:"ios.xcode",label:"Xcode",required:!0,status:"fail",detail:`${g.stdout.trim()} has no usable xcodebuild (Command Line Tools only?)`,fixText:"Install full Xcode from the App Store, then run `sudo xcode-select -s /Applications/Xcode.app/Contents/Developer`."})}else l.push({id:"ios.xcode",label:"Xcode",required:!0,status:"fail",detail:"xcode-select reports no developer directory",fixText:"Install Xcode from the App Store, then run `xcode-select --install`."});let y=await e.exec("xcrun",["simctl","help"],{timeoutMs:15e3});l.push(y.code===0?{id:"ios.xcrun",label:"xcrun",required:!0,status:"pass",detail:"simctl reachable"}:{id:"ios.xcrun",label:"xcrun",required:!0,status:"fail",detail:`xcrun cannot run simctl: ${y.stderr.trim()||y.stdout.trim()||`exit ${y.code}`}`,fixText:"Run `xcode-select --install`, then confirm with `xcrun simctl list devices`. If Xcode is installed, `sudo xcode-select -s /Applications/Xcode.app/Contents/Developer` repoints it."});let T=!d.appiumUrl,A=await e.mobileDeps.status();return l.push({id:"ios.xcuitest",fixedByBundle:!0,label:"xcuitest driver",required:T,status:A.installed?"pass":T?"fail":"info",detail:A.installed?"bundled in the managed mobile deps (with prebuilt WDA)":d.appiumUrl?"managed driver not required because --appium-url is set":A.corrupt??"the simulator deps bundle is not installed",...A.installed||!T?{}:{fixText:"Run `kane-cli doctor --target simulator --install` to download the simulator deps bundle."}}),l}async function $(d,l){let g=[];return l.appPackage&&g.push({label:`closing ${l.appPackage}`,file:"xcrun",args:["simctl","terminate",d.id,l.appPackage]}),l.shutdown&&g.push({label:`shutting down ${d.displayName}`,file:"xcrun",args:["simctl","shutdown",d.id]}),g}return{platform:de,available:()=>e.os==="darwin",checks:S,discover:m,prepare:p,listApps:v,ensureApp:b,teardownPlan:$,toolEnv:()=>e.mobileDeps.environment()}}var ue=[re(),le()];function B(){return ue.filter(t=>t.available())}function qt(){return B().map(t=>t.platform)}function Ht(){return ue.map(t=>t.platform)}function ct(t){let e=t.toLowerCase();return B().find(r=>r.platform.toLowerCase()===e)}async function mt(t){let e=t?B().filter(o=>o.platform.toLowerCase()===t.toLowerCase()):B(),r=[];for(let o of e)try{r.push(...await o.discover())}catch{}return r}function pt(t,e){let r=e.toLowerCase();return t.id.toLowerCase()===r||t.virtualName?.toLowerCase()===r}function ft(t){let e=t.virtualName&&t.virtualName!==t.id?`${t.displayName} (${t.virtualName})`:t.displayName;return`${t.id} \u2014 ${e} [${t.platform} \xB7 ${t.kind} \xB7 ${t.state}]`}function K(t){return t.length===0?"":`
|
|
18
|
-
${t.map(e=>` ${ft(e)}`).join(`
|
|
19
|
-
`)}`}async function Vt(t,e={}){let r=e.discover??mt,o=e.providerFor??ct,m=await r(t.platform),f=h=>{let b=o(h.platform);return b?{ok:!0,target:h,provider:b}:{ok:!1,reason:"not-found",candidates:m,message:`No provider is registered for platform '${h.platform}'.`}};if(t.device){let h=m.filter(b=>pt(b,t.device));return h.length===0?{ok:!1,reason:"not-found",candidates:m,message:`No target matches --device '${t.device}'.`+(m.length>0?` Available:${K(m)}`:" No targets were found \u2014 run `kane-cli doctor --target <emulator|simulator>`.")}:f(h.find(b=>b.state==="ready")??h[0])}let p=t.defaultTarget;if(p&&(!t.platform||t.platform.toLowerCase()===p.platform.toLowerCase())){let h=m.find(b=>b.platform===p.platform&&b.kind===p.kind&&(b.id===p.id||b.virtualName===p.id));return h?f(h):{ok:!1,reason:t.interactive?"needs-picker":"not-found",candidates:m,message:`The saved default target '${p.id}' (${p.platform} \xB7 ${p.kind}) is not connected. `+(t.interactive?"Pick a target to bind this run.":"Pass --device <id> explicitly \u2014 kane-cli never binds a different device on its own.")+(m.length>0?` Available:${K(m)}`:"")}}if(m.length===0)return{ok:!1,reason:"none-found",candidates:[],message:"No emulator or simulator found. Start an Android emulator or boot an iOS simulator, then run `kane-cli devices list --target <emulator|simulator>`."};let v=m.filter(h=>h.state==="ready");return v.length===1?f(v[0]):t.interactive?{ok:!1,reason:"needs-picker",candidates:m,message:v.length===0?"No target is ready \u2014 pick one to prepare it.":"More than one target is ready \u2014 pick one."}:{ok:!1,reason:"ambiguous",candidates:m,message:(v.length===0?"No target is ready.":`${v.length} targets are ready.`)+` Pass --device <id>:${K(m)}`}}export{bt as a,qt as b,Ht as c,ct as d,mt as e,Vt as f};
|