@testmuai/kane-cli 0.8.2 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/bin/kane-cli.cjs +1 -1
  2. package/bin/resolve-runtime.cjs +8 -0
  3. package/dist/{ChatSurface-B3ULYDYC.js → ChatSurface-FJSO3IKR.js} +1 -1
  4. package/dist/{ChromeProfilePicker-T77E7ZSC.js → ChromeProfilePicker-NTZ2RN3L.js} +1 -1
  5. package/dist/{CliFeedbackPrompt-FQ2XV5DZ.js → CliFeedbackPrompt-BCHUH24C.js} +1 -1
  6. package/dist/{CliUploadProgress-TZ55LONO.js → CliUploadProgress-QVAJJRUW.js} +1 -1
  7. package/dist/{ConfigView-WWQMH36G.js → ConfigView-LAKAQN7O.js} +1 -1
  8. package/dist/{EvidenceViewOffer-L5FVBQNK.js → EvidenceViewOffer-POKUWAPS.js} +1 -1
  9. package/dist/FolderPicker-GR6FZMUJ.js +2 -0
  10. package/dist/{HelpView-XXPCPJNF.js → HelpView-JFFVHQAW.js} +1 -1
  11. package/dist/{InfoBox-SHBRHQX5.js → InfoBox-46C7AHDE.js} +1 -1
  12. package/dist/{LinksBox-ENNF7TDJ.js → LinksBox-KFJXZDUJ.js} +1 -1
  13. package/dist/{ProfilesView-CNF2FXF3.js → ProfilesView-FV3KFVBX.js} +1 -1
  14. package/dist/{ProjectPicker-PVPLS642.js → ProjectPicker-MCH35VEF.js} +1 -1
  15. package/dist/{SaveSessionPrompt-4QP4GNGO.js → SaveSessionPrompt-RXHP3YW6.js} +1 -1
  16. package/dist/SingleShotApp-BK5QNXGG.js +2 -0
  17. package/dist/{SummaryBox-HYNINDNN.js → SummaryBox-33K2MMUW.js} +1 -1
  18. package/dist/TestMdRunView-AT26LOSG.js +2 -0
  19. package/dist/{WhoamiView-NN2HOK6H.js → WhoamiView-HUPBB5AQ.js} +1 -1
  20. package/dist/{app-download-5UJMXPF3.js → app-download-3O7NJNGG.js} +1 -1
  21. package/dist/{auth-QKBTOWQX.js → auth-OMWFVDL2.js} +1 -1
  22. package/dist/{bind-LVGP5KHO.js → bind-NXXKFJMA.js} +2 -2
  23. package/dist/{bootstrap-RUJBMB2P.js → bootstrap-MMRPAHWE.js} +1 -1
  24. package/dist/bridge-UH32UGR5.js +2 -0
  25. package/dist/{changelog-HBPBPR2O.js → changelog-VZ5HFHYM.js} +1 -1
  26. package/dist/{chunk-WV27D55O.js → chunk-2ERQYYSJ.js} +1 -1
  27. package/dist/{chunk-VPRNGWIY.js → chunk-2N4SZOWN.js} +1 -1
  28. package/dist/{chunk-LVCY5IYI.js → chunk-2ZDXNTZT.js} +1 -1
  29. package/dist/{chunk-YTDSQAYN.js → chunk-37ZWKLEN.js} +1 -1
  30. package/dist/{chunk-BSYX225I.js → chunk-3MFTTLOF.js} +1 -1
  31. package/dist/{chunk-IV76ZXCY.js → chunk-3S5DDQLP.js} +1 -1
  32. package/dist/{chunk-7S3JZ6FQ.js → chunk-4FQI643D.js} +1 -1
  33. package/dist/{chunk-GUVM6SZF.js → chunk-4G4RWARU.js} +1 -1
  34. package/dist/{chunk-NRUD56FY.js → chunk-5BVOF4UW.js} +1 -1
  35. package/dist/{chunk-R4UCBA5R.js → chunk-5CKQTZMG.js} +1 -1
  36. package/dist/{chunk-2KH2JUGL.js → chunk-5NQ3TI4S.js} +2 -2
  37. package/dist/{chunk-PXCMEI73.js → chunk-5OVEBP4D.js} +1 -1
  38. package/dist/{chunk-OAVPM6YJ.js → chunk-6G5YKTVN.js} +1 -1
  39. package/dist/{chunk-OJTCIZDK.js → chunk-7YZMUTJA.js} +1 -1
  40. package/dist/{chunk-YGMC3FGJ.js → chunk-A5FFLJVL.js} +3 -3
  41. package/dist/{chunk-3NHO5R4P.js → chunk-AF572MQG.js} +2 -2
  42. package/dist/{chunk-ZEDAPY7M.js → chunk-APETOVZK.js} +1 -1
  43. package/dist/{chunk-AJQT4IWZ.js → chunk-AVH3BEEU.js} +1 -1
  44. package/dist/{chunk-I7RQS65W.js → chunk-CDB3SYZG.js} +1 -1
  45. package/dist/{chunk-HRZOFTV7.js → chunk-CJP7RX3E.js} +1 -1
  46. package/dist/{chunk-LVN6VHFN.js → chunk-CVCVBQP6.js} +1 -1
  47. package/dist/{chunk-JUVQQP42.js → chunk-D5VYMHSO.js} +1 -1
  48. package/dist/{chunk-7F2ZV46B.js → chunk-D6FYCAIA.js} +1 -1
  49. package/dist/{chunk-2TYCUPCN.js → chunk-DJR3M7XO.js} +1 -1
  50. package/dist/{chunk-FNS2EAA5.js → chunk-DN42IM2Z.js} +2 -2
  51. package/dist/{chunk-YHYTCENI.js → chunk-DOG7S7R6.js} +1 -1
  52. package/dist/chunk-DSXSU5MH.js +10 -0
  53. package/dist/{chunk-MTIC65NK.js → chunk-DVYO4CR2.js} +1 -1
  54. package/dist/{chunk-ECZMYPLJ.js → chunk-DXI5TXNL.js} +1 -1
  55. package/dist/{chunk-O3AHFP3K.js → chunk-EBJD2V4Z.js} +1 -1
  56. package/dist/{chunk-JGOZUAMC.js → chunk-FPAJURPL.js} +1 -1
  57. package/dist/{chunk-4II6VDXG.js → chunk-GIQURCTO.js} +1 -1
  58. package/dist/{chunk-HFFPPCZO.js → chunk-GR35ZFM2.js} +2 -2
  59. package/dist/{chunk-5NIYYD7O.js → chunk-HJ6AXOCR.js} +1 -1
  60. package/dist/{chunk-AN2ZPHCE.js → chunk-IEOHAHZO.js} +1 -1
  61. package/dist/{chunk-JEDLXUO5.js → chunk-IFIXY3YG.js} +1 -1
  62. package/dist/{chunk-JHKM7W5X.js → chunk-IHAHCFFG.js} +1 -1
  63. package/dist/{chunk-HWH3UYD6.js → chunk-ITTZYA2G.js} +1 -1
  64. package/dist/{chunk-KKRNTSLL.js → chunk-IVYXXZEE.js} +1 -1
  65. package/dist/{chunk-ZI6UIJUN.js → chunk-IWWQTXGK.js} +1 -1
  66. package/dist/{chunk-WVCH66YH.js → chunk-JANVTG62.js} +1 -1
  67. package/dist/{chunk-JJN76EXE.js → chunk-KGSVOTLG.js} +1 -1
  68. package/dist/{chunk-5SNT2MK5.js → chunk-KOMKHFC4.js} +1 -1
  69. package/dist/{chunk-UODLRQQ4.js → chunk-KZVEFBH5.js} +1 -1
  70. package/dist/{chunk-2ZZDNPFN.js → chunk-LCU2P3CH.js} +1 -1
  71. package/dist/{chunk-BKVDAZEJ.js → chunk-LNQCZ5DS.js} +1 -1
  72. package/dist/{chunk-LDCLZR2U.js → chunk-LP3BSP74.js} +1 -1
  73. package/dist/{chunk-ATGRRKEV.js → chunk-LSZVSYAP.js} +2 -2
  74. package/dist/{chunk-6N726QLP.js → chunk-NNCMMV6P.js} +1 -1
  75. package/dist/{chunk-OOEPLMKA.js → chunk-NVGM5ISX.js} +1 -1
  76. package/dist/{chunk-NXFAEDHV.js → chunk-NWJOPZ7P.js} +2 -2
  77. package/dist/{chunk-WOEQDUJ6.js → chunk-QJTXNQV5.js} +1 -1
  78. package/dist/{chunk-U5GHOGLM.js → chunk-SA2LQSYP.js} +1 -1
  79. package/dist/{chunk-IUEEFGEW.js → chunk-SPQPOUUR.js} +2 -2
  80. package/dist/{chunk-2E3ZWGIK.js → chunk-SQDKYSWT.js} +5 -5
  81. package/dist/{chunk-IZ2FJYHG.js → chunk-TRVB7RSW.js} +1 -1
  82. package/dist/{chunk-4U4OSOA4.js → chunk-TUTDSX7T.js} +1 -1
  83. package/dist/{chunk-J7KT44IC.js → chunk-UBTNWAKK.js} +1 -1
  84. package/dist/{chunk-CAMO26QU.js → chunk-WCF2Z4SE.js} +1 -1
  85. package/dist/{chunk-RN4PKQFR.js → chunk-WMMJXI5O.js} +1 -1
  86. package/dist/chunk-X2FM67OM.js +4 -0
  87. package/dist/{chunk-4J6DQFPC.js → chunk-XMYCRE5K.js} +3 -3
  88. package/dist/chunk-XO45NGSN.js +2 -0
  89. package/dist/{chunk-NHBYZCSX.js → chunk-YJNGBZ42.js} +1 -1
  90. package/dist/{chunk-YCLG3T5E.js → chunk-ZH64GOBG.js} +1 -1
  91. package/dist/{chunk-YSSYT5F5.js → chunk-ZNNRCUHH.js} +1 -1
  92. package/dist/{chunk-3654GK6O.js → chunk-ZUYPPPC5.js} +2 -2
  93. package/dist/{config-RLDXM5ZH.js → config-OTUKOTHM.js} +1 -1
  94. package/dist/{credentials-CALNKQMN.js → credentials-A3RU25MJ.js} +1 -1
  95. package/dist/{deps-bundle-GVHIMZ5E.js → deps-bundle-RIBEQC2R.js} +1 -1
  96. package/dist/{deps-resolve-T6P4EACP.js → deps-resolve-7SWSUDRX.js} +1 -1
  97. package/dist/dispatch-RHSWJJLC.js +2 -0
  98. package/dist/doctor-XP7YDE3J.js +2 -0
  99. package/dist/{evidence-ZVQHPELX.js → evidence-K7R7OG2K.js} +1 -1
  100. package/dist/{evolve-cmd-JGCFTXWA.js → evolve-cmd-FFF3F3HO.js} +1 -1
  101. package/dist/{extract-bind-EXW32RUY.js → extract-bind-VIPNGK2H.js} +2 -2
  102. package/dist/{extract-cmd-7IOLJJCL.js → extract-cmd-5J47Q4XU.js} +1 -1
  103. package/dist/{generate-headless-U4GTG234.js → generate-headless-AJI2OVRG.js} +2 -2
  104. package/dist/index.js +13 -13
  105. package/dist/{ingest-EX72IEQT.js → ingest-4447MYLF.js} +1 -1
  106. package/dist/ingest-cmd-2LK7DWDW.js +2 -0
  107. package/dist/{interactive-bind-Y65XV4Y5.js → interactive-bind-PI3HY623.js} +3 -3
  108. package/dist/{list-commands-3EROWJWV.js → list-commands-7Y5XV5FK.js} +1 -1
  109. package/dist/login-flow-Z45G34DM.js +2 -0
  110. package/dist/{mobile-prompts-TP3ODM5M.js → mobile-prompts-O5ALU3QU.js} +1 -1
  111. package/dist/{persist-recorded-session-EHYT3PVN.js → persist-recorded-session-TKSU4HOA.js} +1 -1
  112. package/dist/{pipeline-5GOS2KV2.js → pipeline-HZUV7IMT.js} +1 -1
  113. package/dist/prepare-target-DBYKQ7HW.js +2 -0
  114. package/dist/reconcile-cmd-VHEW2DY5.js +2 -0
  115. package/dist/{reconcile-deps-6KTJHBMJ.js → reconcile-deps-UJ6KVUIS.js} +2 -2
  116. package/dist/{reconcile-engine-O7QEZVX6.js → reconcile-engine-NUQJSIFX.js} +1 -1
  117. package/dist/{recording-banner-BWWFOJCR.js → recording-banner-GO2PP53Y.js} +1 -1
  118. package/dist/{registry-KXEDLM6X.js → registry-KYPVINS2.js} +1 -1
  119. package/dist/{require-project-folder-CXDRRWEQ.js → require-project-folder-NUQMH224.js} +1 -1
  120. package/dist/{resolve-run-intent-PZXEQTHC.js → resolve-run-intent-H3HX5KUC.js} +1 -1
  121. package/dist/{resolver-FTU5KO7H.js → resolver-HHLYRR5W.js} +1 -1
  122. package/dist/{run-WKHPVWUN.js → run-67ONKMGR.js} +1 -1
  123. package/dist/{run-CMFBSYWF.js → run-OPLOL3PZ.js} +1 -1
  124. package/dist/{run-test-md-7HGOZJSU.js → run-test-md-3BA56ZYF.js} +2 -2
  125. package/dist/{skill-installer-QNUDLGPD.js → skill-installer-O7JYVZXD.js} +1 -1
  126. package/dist/{spawner-DQZRJIE6.js → spawner-OZ4OE44T.js} +1 -1
  127. package/dist/tcg-generate-EG2MXRJ7.js +2 -0
  128. package/dist/{testmd-actions-IFRW7NGG.js → testmd-actions-YJ7O43Z6.js} +1 -1
  129. package/dist/token-refresh-K7CANKFQ.js +2 -0
  130. package/dist/{validate-basic-3CNUDDH7.js → validate-basic-HWYK3CU6.js} +1 -1
  131. package/dist/{verdicts-NYCSBWUC.js → verdicts-KFPMRADV.js} +1 -1
  132. package/dist/{version-check-7TSAVA6V.js → version-check-3ECNG5V2.js} +1 -1
  133. package/dist/{walk-session-AINBHZKB.js → walk-session-MZCMXVZB.js} +1 -1
  134. package/dist/{with-telemetry-3DL7ZEZL.js → with-telemetry-Q6V6THIF.js} +1 -1
  135. package/package.json +12 -12
  136. package/dist/FolderPicker-6Z3CYSHF.js +0 -2
  137. package/dist/SingleShotApp-M3HNSUMZ.js +0 -2
  138. package/dist/TestMdRunView-ISOVQ7YP.js +0 -2
  139. package/dist/bridge-QDPBIIOW.js +0 -2
  140. package/dist/chunk-GNIFMQNK.js +0 -10
  141. package/dist/chunk-W4B5LOEX.js +0 -4
  142. package/dist/chunk-WQPQNL4S.js +0 -2
  143. package/dist/dispatch-ECUEAMXS.js +0 -2
  144. package/dist/doctor-SIBHJVGC.js +0 -2
  145. package/dist/ingest-cmd-YYNAKI2U.js +0 -2
  146. package/dist/login-flow-TRINUSBB.js +0 -2
  147. package/dist/prepare-target-BUEOZVJV.js +0 -2
  148. package/dist/reconcile-cmd-TY3MWZL3.js +0 -2
  149. package/dist/tcg-generate-XKSTMCOG.js +0 -2
  150. package/dist/token-refresh-FP6JFLXB.js +0 -2
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-IZ2FJYHG.js";import"./chunk-YCCUBQY4.js";import"./chunk-5SNT2MK5.js";import"./chunk-BPMSNGXQ.js";import"./chunk-U5GHOGLM.js";import"./chunk-LVN6VHFN.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-7F2ZV46B.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-OAVPM6YJ.js";import"./chunk-ZI6UIJUN.js";import"./chunk-JJN76EXE.js";import"./chunk-WV27D55O.js";import"./chunk-L5LI2JF4.js";import"./chunk-TDPWFYTJ.js";import"./chunk-HRZOFTV7.js";import"./chunk-YTDSQAYN.js";import"./chunk-OJTCIZDK.js";import"./chunk-IZ2FJYHG.js";import"./chunk-YCCUBQY4.js";import"./chunk-5SNT2MK5.js";import"./chunk-BPMSNGXQ.js";import"./chunk-VE3SUJMA.js";import"./chunk-TZXXJWHA.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-AJQT4IWZ.js";import"./chunk-TAOHYWEO.js";import"./chunk-U5GHOGLM.js";import"./chunk-J7KT44IC.js";import"./chunk-LVN6VHFN.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-PXCMEI73.js";import"./chunk-7F2ZV46B.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-2TYCUPCN.js";import"./chunk-KKRNTSLL.js";import"./chunk-NRUD56FY.js";import"./chunk-6IA6QMPH.js";import"./chunk-TDPWFYTJ.js";import"./chunk-HRZOFTV7.js";import"./chunk-UODLRQQ4.js";import"./chunk-5Y2G4NC7.js";import"./chunk-ECZMYPLJ.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-IUEEFGEW.js";import"./chunk-MSGW4JDG.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-4JOD47QI.js";import"./chunk-LVN6VHFN.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-YSSYT5F5.js";import"./chunk-2ZZDNPFN.js";import"./chunk-7F2ZV46B.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};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-MTIC65NK.js";import"./chunk-WQPQNL4S.js";import"./chunk-4U4OSOA4.js";import"./chunk-UD7KKHPW.js";import"./chunk-7F2ZV46B.js";import"./chunk-UR6MHSHU.js";export{a as runAgent};
@@ -1,10 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as U,b as te,c as ne,j as x}from"./chunk-W4B5LOEX.js";import{a as M,b as J}from"./chunk-2UIHS2FH.js";import{a as B}from"./chunk-N2P4MI32.js";import{b as j,d as ee}from"./chunk-NVGBE2DR.js";import{A as Q}from"./chunk-TH47OOBV.js";import{x as q}from"./chunk-7F2ZV46B.js";var w="https://integrations.lambdatest.com",g=class extends Error{constructor(e,r){super(r);this.code=e;this.name="LisError"}};function he(t){let n=t.TESTMUAI_ENV==="stage"?"stage":"prod";return`${q[n].shareApiBaseUrl}/lis/api/v1`}function ye(t){let n=t.env??process.env,e=t.auth?.TESTMUAI_BASIC_AUTH||n.TESTMUAI_BASIC_AUTH;if(e)return{authorization:`Basic ${e}`};let r=t.auth?.TESTMUAI_API_KEY||n.TESTMUAI_API_KEY;return r?{authorization:`Bearer ${r}`}:{}}function $(t){let n=t.split(`
3
- `,1)[0].replace(/[\u0000-\u001f\u007f-\u009f]/g,"");return n.length>200?`${n.slice(0,200)}\u2026`:n}function Ee(t,n,e="the issue"){return t===401||t===403?new g("LIS_AUTH","credentials rejected \u2014 run `kane-cli login` and retry"):t>=500?new g("LIS_UNAVAILABLE",`the integrations service returned an error (HTTP ${t}) \u2014 retry later`):new g("JIRA_ISSUE_UNAVAILABLE",`could not fetch ${e}: ${$(n)||`HTTP ${t}`}`)}function P(t){try{return JSON.parse(t.bytes.toString("utf8"))}catch{throw new g("LIS_UNAVAILABLE","the integrations service returned a malformed response \u2014 retry later")}}function Z(t){try{return JSON.parse(t.bytes.toString("utf8"))}catch{return{}}}function re(t){return Z(t).code}function C(t,n="the issue"){let e=Z(t);switch(e.code){case"TOKEN_EXPIRED":return new g("LIS_SETUP",`your Atlassian connection needs a resync \u2014 reconnect at ${w} and retry`);case"NOT_INSTALLED":return new g("LIS_SETUP",`no Atlassian connection for this account \u2014 create one at ${w} and retry`);case"SCOPE_MISSING":return new g("LIS_SETUP",`the connection has no Confluence access \u2014 reconnect with Confluence at ${w} and retry`);case"FORBIDDEN":return new g("LIS_FORBIDDEN",`you don't have access to ${n}`);case"NOT_FOUND":return new g("JIRA_ISSUE_UNAVAILABLE",`could not fetch ${n}: ${$(e.message??"")||"not found"}`);case"PAYLOAD_TOO_LARGE":return new g("ATTACHMENT_TOO_LARGE","the attachment exceeds the integrations service's size cap");case"INVALID_PAYLOAD":return new g("LIS_UNAVAILABLE",`the integrations service rejected the request (${$(e.message??"")||"invalid payload"}) \u2014 retry later`);case"NOT_SUPPORTED":return new g("LIS_UNAVAILABLE","the integrations service does not support this operation yet");case"UPSTREAM_ERROR":case"UPSTREAM_TIMEOUT":return new g("LIS_UNAVAILABLE","Atlassian is not responding through the integrations service \u2014 retry later");default:return Ee(t.status,e.message??"",n)}}var be=3e4,_e=5;async function N(t,n,e){let r=e.env??process.env,d=e.fetchImpl??fetch;for(let o=0;;o++){let h=new AbortController,E=setTimeout(()=>h.abort(),be);try{let s=await d(`${he(r)}${t}`,{...n,headers:{"content-type":"application/json",...ye(e),...n.headers??{}},signal:h.signal}),u=await Promise.race([s.arrayBuffer(),new Promise((c,l)=>{h.signal.addEventListener("abort",()=>l(new DOMException("aborted","AbortError")),{once:!0})})]),a={status:s.status,ok:s.ok,headers:s.headers,bytes:Buffer.from(u)};if(a.status===429){if(o>0)throw new g("LIS_RATE_LIMITED","the integrations service is busy \u2014 try again in a moment");let c=Z(a).data?.retry_after_sec,l=Math.min(Math.max(typeof c=="number"&&Number.isFinite(c)?c:1,0),_e);clearTimeout(E),await new Promise(y=>setTimeout(y,l*1e3));continue}return a}catch(s){throw s instanceof g?s:h.signal.aborted?new g("LIS_UNAVAILABLE","the integrations service did not respond within 30 seconds \u2014 retry later"):new g("LIS_UNAVAILABLE",`could not reach the integrations service (${$(s instanceof Error?s.message:String(s))}) \u2014 check your connection and retry`)}finally{clearTimeout(E)}}}function D(t){let n=t.headers.get("content-type")??"application/octet-stream";if(n.includes("json"))try{let e=JSON.parse(t.bytes.toString("utf8")),r=e.content??e.data?.content;if(typeof r=="string")return{bytes:Buffer.from(r,"base64"),mediaType:e.mime_type??e.data?.mime_type??"application/octet-stream"}}catch{}return{bytes:t.bytes,mediaType:n}}async function k(t={}){let n=await N("/jira/info",{method:"GET"},t);if(!n.ok)throw C(n);let e=P(n),r=(e.data?.SELECTED_PROJECTS??[]).map(d=>d?.key).filter(d=>typeof d=="string"&&d.length>0);return{installed:e.data?.INSTALLED==="YES",selectAll:e.data?.SELECT_ALL===!0,selectedProjects:r,capabilities:{document:e.data?.capabilities?.document===!0,comments:e.data?.capabilities?.comments===!0}}}async function F(t,n={}){let e=await N("/jira/issue?details=true",{method:"POST",body:JSON.stringify({plugin_code:"jira",issueKey:t})},n);if(!e.ok)throw C(e);let r=P(e);if(r.type==="error"||!r.data)throw new g("JIRA_ISSUE_UNAVAILABLE",`could not fetch the issue: ${$(r.message??"")||"issue not found or not accessible"}`);return r.data}var se=100,Ae=5e3,Ie=60;async function V(t,n={}){let e=[],r=new Set,d=null,o=0;for(let h=0;;h++){if(h>=Ie)throw new g("LIS_UNAVAILABLE","the integrations service kept returning comment pages without finishing \u2014 retry later");let E=await N("/jira/issue/comments",{method:"POST",body:JSON.stringify({resource_id:t,max_results:se,cursor:d,start_at:o,order_by:"created",fetch_all:!1})},n);if(!E.ok)throw C(E,"the issue's comments");let s=P(E);if(s.type==="error"||!s.data)throw new g("JIRA_ISSUE_UNAVAILABLE",`could not fetch the issue's comments: ${$(s.message??"")||"unavailable"}`);for(let R of s.data.comments??[]){let m=String(R.id);r.has(m)||(r.add(m),e.push(R))}let u=s.data.pagination;if(!u?.has_more)return e;if(e.length>=Ae)throw new g("JIRA_ISSUE_UNAVAILABLE","the issue has more comments than can be ingested \u2014 cannot build a complete identity");let a=u.next_cursor??null,c=u.next_start_at!=null,l=c?u.next_start_at:o+se;if(!(a!=null&&a!==d||a==null&&c&&l!==o))throw new g("LIS_UNAVAILABLE","the integrations service returned a non-advancing comments page \u2014 retry later");d=a,o=l}}async function G(t,n={}){let e=await N("/jira/attachment",{method:"POST",body:JSON.stringify({attachment_id:t})},n);if(!e.ok){if(re(e)===void 0){if(e.status===413)throw new g("ATTACHMENT_TOO_LARGE","the attachment exceeds the integrations service's size cap");if(e.status===404)throw new g("JIRA_NOT_CONNECTED",`Jira is not connected for this account \u2014 connect it at ${w} and retry`)}throw C(e,`attachment ${t}`)}return D(e)}var K="kane.source.jira/2";function oe(t){if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(Array.isArray(t)){let n=t.map(oe).filter(e=>e!==null);return n.length===0?null:n.join(", ")}if(t!==null&&typeof t=="object"){let n=t;for(let e of["name","value","displayName"])if(typeof n[e]=="string")return n[e];return null}return null}function ie(t,n,e){let r=[],d={},o=t.additional_fields??{};for(let a of Object.keys(o).sort()){let c=oe(o[a]);if(c===null){r.push(`field "${a}" has no stable text form \u2014 dropped from the envelope`);continue}d[a]=c}let h=[...t.attachments??[]].map(a=>({id:String(a.id),filename:a.filename??"",media_type:a.mime_type??"application/octet-stream",size:a.size??0})).sort((a,c)=>{let l=Number(a.id),y=Number(c.id);return Number.isFinite(l)&&Number.isFinite(y)?l-y:a.id<c.id?-1:a.id>c.id?1:0}),E=e.map(a=>({id:String(a.id),author:a.author?.display_name??"",body:a.body??"",created:a.created??""})).sort((a,c)=>{if(a.created!==c.created)return a.created<c.created?-1:1;let l=Number(a.id),y=Number(c.id);return Number.isFinite(l)&&Number.isFinite(y)&&l!==y?l-y:a.id<c.id?-1:a.id>c.id?1:0}),s=t.key;if(!/^[A-Za-z][A-Za-z0-9_]*-\d+$/.test(s))throw new Error(`cannot build a stable identity for issue key "${s}" \u2014 expected a PROJECT-NUMBER key`);let u={schema:K,site:n,project:s.slice(0,s.lastIndexOf("-")),issue:{id:t.id,key:s},content:{summary:t.summary??"",description:t.description??"",fields:d},attachments:h,comments:E};return{bytes:Buffer.from(JSON.stringify(u),"utf8"),envelope:u,warnings:r}}var ae=64,Le=16,we=6e6,Se=5e7,Re=12e6,ve={png:"image/png",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",bmp:"image/bmp",tiff:"image/tiff",emf:"image/emf",wmf:"image/wmf",unknown:"application/octet-stream"},$e=new Set(["png","jpeg","webp"]);function ce(t){return async n=>{let e;try{e=JSON.parse(n.toString("utf8"))}catch{throw new Error("JIRA_ENVELOPE_SCHEMA: source bytes are not a kane jira envelope")}if(e.schema!==K)throw new Error(`JIRA_ENVELOPE_SCHEMA: unknown envelope schema "${e.schema}" \u2014 this CLI understands ${K}`);let r=[],d=new Map,o=[],h=0,E=new Map,s=[];for(let c=0;c<e.attachments.length;c++){let l=e.attachments[c],y=`i${c+1}`,R=`attachment:${l.filename}`,m=I=>`[img#${y}] ${l.filename} (${l.media_type}, ${l.size} bytes${I?"":" \u2014 not delivered"})`,p=(I,L,T)=>{r.push({ref:y,loc:R,media_type:I,...T?.blob?{blob:T.blob}:{},...T?.appearance?{appearance:T.appearance}:{},delivery:L,...T?.duplicate_of?{duplicate_of:T.duplicate_of}:{}})};if(!l.media_type.startsWith("image/")){p(l.media_type,"unsupported-vision-media-type"),s.push(m(!1));continue}let S;try{S=await t.fetchAttachment(l.id)}catch{p(l.media_type,"external-image-not-fetched"),s.push(m(!1));continue}let f=S.bytes,i=M(f),b=ve[i.format],_=j(f);if(d.set(_,f),!$e.has(i.format)){let I=i.format==="gif"||i.format==="bmp"||i.format==="tiff"?"unsupported-vision-media-type":"unsupported-image-kind";p(b,I,{blob:_}),s.push(m(!1));continue}if(i.width===void 0||i.height===void 0||i.width*i.height>Se){p(b,"undecodable",{blob:_}),s.push(m(!1));continue}let A;if(i.format==="png"||i.format==="jpeg"){let I=J(f,i.format);if(I===null){p(b,"undecodable",{blob:_}),s.push(m(!1));continue}A=B(I.data,{width:I.width,height:I.height,channels:I.channels})}if(i.width<ae||i.height<ae){p(b,"below-dimension-floor",{blob:_,appearance:A}),s.push(m(!1));continue}let v=E.get(_);if(v!==void 0){p(b,"duplicate",{blob:_,appearance:A,duplicate_of:v}),s.push(m(!1));continue}if(f.byteLength>we){p(b,"image-too-large",{blob:_,appearance:A}),s.push(m(!1));continue}if(h+f.byteLength>Re){p(b,"vision-byte-budget-reached",{blob:_,appearance:A}),s.push(m(!1));continue}if(o.length>=Le){p(b,"image-cap-reached",{blob:_,appearance:A}),s.push(m(!1));continue}E.set(_,y),h+=f.byteLength,o.push(y),p(b,"selected",{blob:_,appearance:A}),s.push(m(!0))}let u=[];u.push(`${e.issue.key} \xB7 ${e.site}/${e.project}`,`Summary: ${e.content.summary}`),e.content.description!==""&&u.push("",...e.content.description.split(`
4
- `));let a=Object.keys(e.content.fields);return a.length>0&&u.push("","--- fields ---",...a.map(c=>`${c}: ${e.content.fields[c]}`)),s.length>0&&u.push("","--- attachments ---",...s),e.comments.length>0&&(u.push("","--- comments ---"),e.comments.forEach((c,l)=>{l>0&&u.push(""),u.push(`[${l+1}] ${c.author} \xB7 ${c.created}`,...c.body.split(`
5
- `))})),{projection:u.join(`
6
- `)+`
7
- `,inventory:r,blobs:d,delivered:o,converter:{name:"jira-convert",version:"2",policy:"v1"}}}}var Te=/^[A-Za-z][A-Za-z0-9_]*-\d+$/;function Y(t){if(!/^https?:\/\/.+/i.test(t))return null;let n;try{n=new URL(t)}catch{return null}let e=n.pathname.split("/").filter(Boolean),r=e.lastIndexOf("browse");if(r===-1||r+1>=e.length)return null;let d=e[r+1];return Te.test(d)?{site:n.hostname,issueKey:d.toUpperCase()}:null}function H(t,n){let e=Q(t),r=e.heads.get(n);if(r==null)return null;let d=e.getNode(r)?.content?.blob;if(typeof d!="string")return null;let o=ee(t,d);if(o===null)return null;try{let h=JSON.parse(o.toString("utf8"));return typeof h.site=="string"&&h.site.length>0?h.site:null}catch{return null}}async function Ce(t,n,e,r,d){let o=Y(t);if(o===null)return(e.err??e.out)(`error: ${t}: unsupported remote URL \u2014 expected a Jira issue URL (https://<site>/browse/KEY-123)`),{code:1};let h=d?.lis??{jiraInfo:k,jiraIssue:F,jiraAttachment:G,jiraComments:V};try{let s={auth:await(d?.authEnv??(await import("./auth-QKBTOWQX.js")).resolveLisAuthEnv)(),env:process.env},u=await h.jiraInfo(s);if(!u.installed)return(e.err??e.out)(`error: ${t}: no Atlassian connection for this account \u2014 create one at ${w} and retry`),{code:1};if(u.capabilities.comments===!1)return(e.err??e.out)(`error: ${t}: the connection cannot read issue comments yet \u2014 resync it at ${w} and retry`),{code:1};let a=o.issueKey.slice(0,o.issueKey.lastIndexOf("-"));if(!u.selectAll&&u.selectedProjects.length>0&&!u.selectedProjects.includes(a))return(e.err??e.out)(`error: ${t}: project ${a} is not in the integration's selected projects (${u.selectedProjects.join(", ")}) \u2014 add it at ${w}`),{code:1};let c=await h.jiraIssue(o.issueKey,s),l=await h.jiraComments(o.issueKey,s),y=o.site;if(c.host)try{y=new URL(c.host).hostname}catch{y=c.host.replace(/^https?:\/\//,"").replace(/[/:].*$/,"")}let{bytes:R,warnings:m}=ie(c,y,l),p=n??o.issueKey.toLowerCase();U(p);let S=H(r,p);if(S!==null&&S!==y)return(e.err??e.out)(`error: ${t}: source '${p}' was ingested from ${S}, but this read serves ${y} \u2014 retire it first (kane-cli context retire ${p}) or ingest under a different id with --as`),{code:1};let f=await x({contextDir:r,bytes:R,media:te,sourceId:p,label:t,confirmSameSource:e.isTTY?i=>e.confirm(`identical content already ingested as ${i} \u2014 treat as the same source?`):void 0,converters:{jira:ce({fetchAttachment:i=>h.jiraAttachment(i,s)})}});e.out(z(e.isTTY,f,o.issueKey));for(let i of m)e.out(`warning: ${i}`);for(let i of f.warnings??[])e.out(`warning: ${i}`);if(f.composite){let i=f.composite.delivered+f.composite.omitted;e.out(`${f.source_id}: jira, ${i} attachments, ${f.composite.delivered} images delivered (${f.composite.omitted} omitted)`)}return{code:0,result:{status:f.status,source_id:f.source_id,source_cid:f.cid}}}catch(E){return E instanceof g?((e.err??e.out)(`error: ${t}: ${E.message}`),{code:1}):((e.err??e.out)(`error: ${t}: ${Ne(E instanceof Error?E.message:String(E))}`),{code:1})}}function Ne(t){let n=t.match(/too large — ([\d.]+ [KM]B), the limit for .+ is ([\d.]+ [KM]B) \[FILE_TOO_LARGE\]/);return n?`the issue's content is too large to ingest (${n[1]}; the limit is ${n[2]}) \u2014 trim the description or attachments in Jira and retry`:t.startsWith("PROJECTION_TOO_LARGE:")?"the issue's text is too large to ingest \u2014 trim the description in Jira and retry":t}var ue={name:"jira",hint:"Jira issue URLs (https://<site>/browse/KEY-123)",match:t=>Y(t)!==null,ingest:Ce,sourceIdFor:t=>{let n=Y(t);return n?n.issueKey.toLowerCase():null}};async function le(t,n={}){let e=await N("/jira/document",{method:"POST",body:JSON.stringify({resource_id:t,format:"markdown"})},n);if(!e.ok)throw C(e,"the page");let r=P(e);if(r.type==="error"||!r.data)throw new g("JIRA_ISSUE_UNAVAILABLE",`could not fetch the page: ${$(r.message??"")||"page not found or not accessible"}`);return r.data}async function de(t,n={}){let e=await N("/jira/attachment",{method:"POST",body:JSON.stringify({source:"confluence",download:t})},n);if(!e.ok)throw C(e,"the page's attachment");return{bytes:D(e).bytes}}var W="kane.source.confluence/1";function me(t,n){if(typeof t.id!="string"||t.id==="")throw new Error("cannot build a stable identity for this page \u2014 the integrations service returned no page id");let e=[...t.labels??[]].filter(o=>typeof o=="string").sort(),r=[...t.attachments??[]].map(o=>({id:String(o.id),filename:o.filename??"",media_type:o.mime_type??"application/octet-stream",size:o.size??0})).sort((o,h)=>o.id<h.id?-1:o.id>h.id?1:0),d={schema:W,site:n,page:{id:t.id},space:{key:t.space?.key??""},title:t.title??"",labels:e,content:{body:t.body??""},attachments:r};return{bytes:Buffer.from(JSON.stringify(d),"utf8"),envelope:d,warnings:[]}}var pe=64,Oe=16,Pe=6e6,je=5e7,Ue=12e6,xe={png:"image/png",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",bmp:"image/bmp",tiff:"image/tiff",emf:"image/emf",wmf:"image/wmf",unknown:"application/octet-stream"},Be=new Set(["png","jpeg","webp"]);function fe(t){let n=new Map(Object.entries(t.downloads));return async e=>{let r;try{r=JSON.parse(e.toString("utf8"))}catch{throw new Error("CONFLUENCE_ENVELOPE_SCHEMA: source bytes are not a kane confluence envelope")}if(r.schema!==W)throw new Error(`CONFLUENCE_ENVELOPE_SCHEMA: unknown envelope schema "${r.schema}" \u2014 this CLI understands ${W}`);let d=[],o=new Map,h=[],E=0,s=new Map,u=[];for(let c=0;c<r.attachments.length;c++){let l=r.attachments[c],y=`i${c+1}`,R=`attachment:${l.filename}`,m=L=>`[img#${y}] ${l.filename} (${l.media_type}, ${l.size} bytes${L?"":" \u2014 not delivered"})`,p=(L,T,O)=>{d.push({ref:y,loc:R,media_type:L,...O?.blob?{blob:O.blob}:{},...O?.appearance?{appearance:O.appearance}:{},delivery:T,...O?.duplicate_of?{duplicate_of:O.duplicate_of}:{}})};if(!l.media_type.startsWith("image/")){p(l.media_type,"unsupported-vision-media-type"),u.push(m(!1));continue}let S=n.get(l.id);if(!S){p(l.media_type,"external-image-not-fetched"),u.push(m(!1));continue}let f;try{f=await t.fetchAttachment({id:l.id,download:S})}catch{p(l.media_type,"external-image-not-fetched"),u.push(m(!1));continue}let i=f.bytes,b=M(i),_=xe[b.format],A=j(i);if(o.set(A,i),!Be.has(b.format)){let L=b.format==="gif"||b.format==="bmp"||b.format==="tiff"?"unsupported-vision-media-type":"unsupported-image-kind";p(_,L,{blob:A}),u.push(m(!1));continue}if(b.width===void 0||b.height===void 0||b.width*b.height>je){p(_,"undecodable",{blob:A}),u.push(m(!1));continue}let v;if(b.format==="png"||b.format==="jpeg"){let L=J(i,b.format);if(L===null){p(_,"undecodable",{blob:A}),u.push(m(!1));continue}v=B(L.data,{width:L.width,height:L.height,channels:L.channels})}if(b.width<pe||b.height<pe){p(_,"below-dimension-floor",{blob:A,appearance:v}),u.push(m(!1));continue}let I=s.get(A);if(I!==void 0){p(_,"duplicate",{blob:A,appearance:v,duplicate_of:I}),u.push(m(!1));continue}if(i.byteLength>Pe){p(_,"image-too-large",{blob:A,appearance:v}),u.push(m(!1));continue}if(E+i.byteLength>Ue){p(_,"vision-byte-budget-reached",{blob:A,appearance:v}),u.push(m(!1));continue}if(h.length>=Oe){p(_,"image-cap-reached",{blob:A,appearance:v}),u.push(m(!1));continue}s.set(A,y),E+=i.byteLength,h.push(y),p(_,"selected",{blob:A,appearance:v}),u.push(m(!0))}let a=[];return a.push(`${r.title} \xB7 ${r.site} \xB7 ${r.space.key}`),r.labels.length>0&&a.push(`labels: ${r.labels.join(", ")}`),r.content.body!==""&&a.push("",...r.content.body.split(`
8
- `)),u.length>0&&a.push("","--- attachments ---",...u),{projection:a.join(`
9
- `)+`
10
- `,inventory:d,blobs:o,delivered:h,converter:{name:"confluence-convert",version:"1",policy:"v1"}}}}var Me=/^[A-Za-z0-9~][A-Za-z0-9._~-]*$/;function X(t){if(!/^https?:\/\/.+/i.test(t))return null;let n;try{n=new URL(t)}catch{return null}let e=n.pathname.split("/").filter(Boolean),r=e.indexOf("wiki");if(r===-1||e[r+1]!=="spaces"||e[r+3]!=="pages")return null;let d=e[r+2],o=e[r+4];return d===void 0||o===void 0||!Me.test(d)||!/^\d+$/.test(o)?null:{site:n.hostname,spaceKey:d,pageId:o}}async function Je(t,n,e,r,d){let o=X(t);if(o===null)return(e.err??e.out)(`error: ${t}: unsupported remote URL \u2014 expected a Confluence page URL (https://<site>/wiki/spaces/<KEY>/pages/<id>/\u2026)`),{code:1};let h=d?.lis??{jiraInfo:k,jiraIssue:F,jiraAttachment:G,jiraComments:V},E=d?.confluence??{confluenceDocument:le,confluenceAttachment:de};try{let u={auth:await(d?.authEnv??(await import("./auth-QKBTOWQX.js")).resolveLisAuthEnv)(),env:process.env},a=await h.jiraInfo(u);if(!a.installed)return(e.err??e.out)(`error: ${t}: no Atlassian connection for this account \u2014 create one at ${w} and retry`),{code:1};if(a.capabilities.document===!1)return(e.err??e.out)(`error: ${t}: the connection has no Confluence access \u2014 reconnect with Confluence at ${w} and retry`),{code:1};let c=await E.confluenceDocument(o.pageId,u),l=o.site;if(c.url)try{l=new URL(c.url).hostname}catch{}let{bytes:y,warnings:R}=me(c,l),m=n??`page-${o.pageId}`;U(m);let p=H(r,m);if(p!==null&&p!==l)return(e.err??e.out)(`error: ${t}: source '${m}' was ingested from ${p}, but this read serves ${l} \u2014 retire it first (kane-cli context retire ${m}) or ingest under a different id with --as`),{code:1};let S=Object.fromEntries((c.attachments??[]).filter(i=>typeof i.download=="string"&&i.download.length>0).map(i=>[String(i.id),i.download])),f=await x({contextDir:r,bytes:y,media:ne,sourceId:m,label:t,confirmSameSource:e.isTTY?i=>e.confirm(`identical content already ingested as ${i} \u2014 treat as the same source?`):void 0,converters:{confluence:fe({downloads:S,fetchAttachment:i=>E.confluenceAttachment(i.download,u)})}});e.out(z(e.isTTY,f,`${o.spaceKey}/${o.pageId}`));for(let i of R)e.out(`warning: ${i}`);for(let i of f.warnings??[])e.out(`warning: ${i}`);if(f.composite){let i=f.composite.delivered+f.composite.omitted;e.out(`${f.source_id}: confluence, ${i} attachments, ${f.composite.delivered} images delivered (${f.composite.omitted} omitted)`)}return{code:0,result:{status:f.status,source_id:f.source_id,source_cid:f.cid}}}catch(s){return s instanceof g?((e.err??e.out)(`error: ${t}: ${s.message}`),{code:1}):((e.err??e.out)(`error: ${t}: ${De(s instanceof Error?s.message:String(s))}`),{code:1})}}function De(t){let n=t.match(/too large — ([\d.]+ [KM]B), the limit for .+ is ([\d.]+ [KM]B) \[FILE_TOO_LARGE\]/);return n?`the page's content is too large to ingest (${n[1]}; the limit is ${n[2]}) \u2014 trim the page in Confluence and retry`:t.startsWith("PROJECTION_TOO_LARGE:")?"the page's text is too large to ingest \u2014 trim the page in Confluence and retry":t}var ge={name:"confluence",hint:"Confluence page URLs (https://<site>/wiki/spaces/<KEY>/pages/<id>/\u2026)",match:t=>X(t)!==null,ingest:Je,sourceIdFor:t=>{let n=X(t);return n?`page-${n.pageId}`:null}};function z(t,n,e){return t?n.status==="created"?`landed ${n.source_id} (${e}) \u2014 new source`:n.status==="versioned"?`landed ${n.source_id} (${e}) \u2014 new version; dependents go stale`:`${n.source_id} unchanged \u2014 already landed`:`${n.status} ${n.source_id} source ${n.cid} blob ${n.blob}`}var ke=[ue,ge];function xt(t){return/^https?:\/\/.+/i.test(t)}function Bt(t){return ke.find(n=>n.match(t))??null}export{z as a,ke as b,xt as c,Bt as d};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as U}from"./chunk-DNNZ353O.js";import{a as G}from"./chunk-Q2F5QB2W.js";import{b as B,c as b}from"./chunk-NVGBE2DR.js";import{A as T}from"./chunk-TH47OOBV.js";import{a as L,c as F}from"./chunk-CUM23TLF.js";import{b as P,i as j}from"./chunk-DUAXZYAD.js";import{a as R,d as $,f as D}from"./chunk-WXHQYYD5.js";import{existsSync as ie,mkdirSync as oe,readFileSync as re,writeFileSync as se}from"fs";import{basename as C,extname as H,join as ae}from"path";var K=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function q(e){return typeof e=="string"&&e!=="."&&e!==".."&&K.test(e)}function k(e){if(!q(e))throw new Error(`unsafe logical_id: ${JSON.stringify(e)} \u2014 must match ${String(K)} (no path separators)`)}import{extname as W}from"path";var Q={kind:"jira",media_type:"application/x-kane-jira-envelope",extensions:[],cite:"verbatim",maxBytes:2e6},ee={kind:"confluence",media_type:"application/x-kane-confluence-envelope",extensions:[],cite:"verbatim",maxBytes:2e6},z=[{kind:"text",media_type:"text/plain",extensions:[".txt"],cite:"verbatim",maxBytes:2e6},{kind:"markdown",media_type:"text/markdown",extensions:[".md",".markdown"],cite:"verbatim",maxBytes:2e6},{kind:"image",media_type:"image/png",extensions:[".png"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/jpeg",extensions:[".jpg",".jpeg"],cite:"anchor-only",maxBytes:5e6},{kind:"image",media_type:"image/webp",extensions:[".webp"],cite:"anchor-only",maxBytes:5e6},{kind:"text",media_type:"application/json",extensions:[".json"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/yaml",extensions:[".yaml",".yml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/toml",extensions:[".toml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"application/xml",extensions:[".xml"],cite:"verbatim",maxBytes:2e6},{kind:"text",media_type:"text/plain",extensions:[".log"],cite:"verbatim",maxBytes:2e6},{kind:"pdf",media_type:"application/pdf",extensions:[".pdf"],cite:"verbatim",maxBytes:25e6,sniff:e=>e.subarray(0,5).toString("latin1")==="%PDF-"},{kind:"docx",media_type:"application/vnd.openxmlformats-officedocument.wordprocessingml.document",extensions:[".docx"],cite:"verbatim",maxBytes:25e6,sniff:e=>e.length>=4&&e[0]===80&&e[1]===75&&e[2]===3&&e[3]===4,sniffFail:e=>e.length>=8&&e.subarray(0,8).equals(te)?"DOCX_ENCRYPTED_OR_LEGACY: password-protected Office file (or a legacy .doc renamed .docx) \u2014 remove the password / save as .docx and re-ingest":void 0},Q,ee],te=Buffer.from([208,207,17,224,161,177,26,225]),S={pdf:"pdf",docx:"docx",jira:"jira",confluence:"confluence"},pe=new Set(Object.keys(S));function J(e){let n=W(e).toLowerCase(),t=z.find(i=>i.extensions.includes(n));return t?{ok:!0,media:t}:{ok:!1,code:"UNSUPPORTED_MEDIA",allowlist:z.flatMap(i=>i.extensions)}}function v(e){return e>=1024*1024?`${(e/(1024*1024)).toFixed(1)} MB`:`${Math.max(1,Math.round(e/1024))} KB`}function de(e,n,t){return G({source_id:e,source_cid:"sha256:".padEnd(71,"0"),doc_kind:n,numbered_text:U(t)})}var Y=2e3;function ce(e){let t=C(e,H(e)).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^[^a-z0-9]+/,"");return k(t),t}function ke(e){let n=/^(.*?)[-_.]?v?\d+$/.exec(e);if(!n)return null;let t=(n[1]??"").replace(/[-_.]+$/,"");return t.length>0&&t!==e?t:null}function X(e){let n=ae(e,"meta.json");ie(n)||(oe(e,{recursive:!0}),se(n,JSON.stringify({schema:R,canonicalizer:"v1"},null,2)+`
3
- `))}async function Se(e){let{contextDir:n,filePath:t,asId:i,confirmSameSource:y,converters:h}=e;X(n);let o=re(t),s=J(t);if(!s.ok)throw new Error(`${C(t)} is a file type kane can't ingest (${H(t)||"no extension"}) \u2014 supported: ${s.allowlist.join(" ")} [UNSUPPORTED_MEDIA]`);if(o.byteLength>s.media.maxBytes)throw new Error(`${C(t)} is too large \u2014 ${v(o.byteLength)}, the limit for ${s.media.media_type} is ${v(s.media.maxBytes)} [FILE_TOO_LARGE]`);if(s.media.sniff&&!s.media.sniff(o)){let m=s.media.sniffFail?.(o);throw new Error(m??`MEDIA_SNIFF_MISMATCH: ${t} does not look like ${s.media.media_type}`)}let l;return i!==void 0?(k(i),l=i):l=ce(t),le({contextDir:n,bytes:o,media:s.media,sourceId:l,label:t,confirmSameSource:y,converters:h})}async function le(e){let{contextDir:n,bytes:t,media:i,confirmSameSource:y,converters:h}=e,o=e.sourceId,s=e.label??o;if(X(n),t.byteLength>i.maxBytes)throw new Error(`the content is too large \u2014 ${v(t.byteLength)}, the limit for ${i.media_type} is ${v(i.maxBytes)} [FILE_TOO_LARGE]`);let l=[],m=S[i.kind];if(i.cite==="verbatim"&&!m){try{new TextDecoder("utf-8",{fatal:!0}).decode(t)}catch{throw new Error(`ENCODING_UNSUPPORTED: ${s} is not valid UTF-8 \u2014 re-save it as UTF-8 and re-ingest`)}t.toString("utf8").split(`
4
- `).some(p=>p.length>Y)&&l.push(`long line detected (> ${Y} chars) \u2014 anchors lose granularity; consider pretty-printing before ingest`)}let f=B(t),_=new Map,c=null,M=!1;for(let p=0;;p++){let x=T(n),u=x.heads.get(o),Z=u!=null?x.getNode(u)?.content:void 0;if(u!=null&&Z?.blob===f)return{status:"unchanged",source_id:o,cid:u,blob:f};if(u==null){for(let[r,g]of x.heads.entries())if(!(r===o||g==null)&&x.getNode(g)?.content.blob===f){let a;if(_.has(r)?a=_.get(r):p===0&&y?(a=await y(r),_.set(r,a)):(a=!1,_.set(r,a),p>0&&l.push(`same bytes already ingested as '${r}' \u2014 minted under '${o}' anyway (the twin appeared mid-commit; not prompted)`)),a)return{status:"unchanged",source_id:r,cid:g,blob:f};break}}if(c===null){let r={},g,a=null,O=null;if(m){let A=h?.[m];if(!A)throw new Error(`${m.toUpperCase()}_CONVERTER_MISSING: ${m} ingestion requires the converter \u2014 the command layer wires it`);let d=await A(t);a=Buffer.from(d.projection,"utf8");let N=de(o,i.kind,a);if(N>4e5)throw new Error(`PROJECTION_TOO_LARGE: serialized source payload ${N} bytes > ${4e5} \u2014 split the document and re-ingest`);r={text_blob:B(a),...d.inventory.length>0?{images:d.inventory}:{},converter:d.converter},O=d.blobs,g={kind:i.kind,...d.pages!==void 0?{pages:d.pages}:{},delivered:d.delivered.length,omitted:d.inventory.length-d.delivered.length}}c={derived:r,composite:g,projBytes:a,derivedBlobs:O}}if(!M){if(b(n,t),c.projBytes!==null&&b(n,c.projBytes),c.derivedBlobs!==null)for(let[,r]of c.derivedBlobs)b(n,r);M=!0}let w=F(o,f),E=D("source",w);if(E.length>0)throw new Error(`source node fails ${E[0].code}: ${E[0].detail}`);let I=L("source",w);try{j(n,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:I,label:$.SOURCE,content:w}],edges:[],review:[],supersessions:[],media:{[o]:{format:i.kind,media_type:i.media_type,anchors_supported:m?["L-L","img#ref"]:i.cite==="verbatim"?["L-L"]:[],...c.derived}},...e.eventIds&&e.eventIds.length>0?{event_ids:e.eventIds}:{},source_head_moves:{[o]:I}},{expectPrev:x.latestHash})}catch(r){if(r instanceof P&&p<3)continue;throw r}return{status:u!=null?"versioned":"created",source_id:o,cid:I,blob:f,...l.length?{warnings:l}:{},...c.composite?{composite:c.composite}:{}}}}export{k as a,Q as b,ee as c,pe as d,J as e,de as f,ce as g,ke as h,Se as i,le as j};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as f}from"./chunk-4U4OSOA4.js";import{c as g}from"./chunk-UD7KKHPW.js";import{existsSync as u}from"fs";import{dirname as p,resolve as c}from"path";import{fileURLToPath as A}from"url";var d=p(A(import.meta.url));function E(){return[c(d,".."),c(d,"../../..")]}function _(t){return{"darwin-arm64":"kane-cli-darwin-arm64","darwin-x64":"kane-cli-darwin-x64","linux-x64":"kane-cli-linux-x64","linux-arm64":"kane-cli-linux-arm64","win32-x64":"kane-cli-win-x64"}[t]??null}function x(t){return{"darwin-arm64":"kane-cli-assurance-darwin-arm64","darwin-x64":"kane-cli-assurance-darwin-x64","linux-x64":"kane-cli-assurance-linux-x64","linux-arm64":"kane-cli-assurance-linux-arm64","win32-x64":"kane-cli-assurance-win-x64"}[t]??null}function I(){let t=_(`${process.platform}-${process.arch}`),e=x(`${process.platform}-${process.arch}`),a=process.platform==="win32"?"assurance-agent.exe":"assurance-agent";for(let s of E()){for(let n of e?["@testmuai","@lambdatestincprivate"]:[]){let r=c(s,"node_modules",n,e,"bin",a);if(u(r))return{cmd:r,args:[],tier:"platform"}}for(let n of t?["@testmuai","@lambdatestincprivate"]:[]){let r=c(s,"node_modules",n,t,"bin",a);if(u(r))return{cmd:r,args:[],tier:"platform"}}let i=c(s,"../assurance-agent/dist",a);if(u(i))return{cmd:i,args:[],tier:"sibling"};let o=c(s,"../assurance-agent/main.py");if(u(o)){let n=c(s,"../assurance-agent/.venv/bin/python");return{cmd:u(n)?n:"python3",args:[o],tier:"dev-python"}}}return null}function U(t,e={}){return{...process.env,...e,...f(),TESTMUAI_SOURCE:"kane-cli",TESTMUAI_SESSION_ID:t,ASSURANCE_LOG_LEVEL:process.env.ASSURANCE_LOG_LEVEL??"info"}}async function P(){if(process.env.TESTMUAI_API_KEY||process.env.TESTMUAI_BASIC_AUTH)return{};try{let{CredentialsManager:t}=await import("./credentials-CALNKQMN.js"),e=process.env.TESTMUAI_ENV==="stage"?"stage":"prod",a=new t,s=a.getActiveProfile()??"default",i={TESTMUAI_ENV:e},o=a.loadBasicAuth(s,e);if(o)return i.TESTMUAI_BASIC_AUTH=Buffer.from(`${o.username}:${o.access_key}`,"utf8").toString("base64"),i;let n=a.loadCredentials(s,e);if(n){try{let{refreshOAuthToken:l}=await import("./token-refresh-FP6JFLXB.js");await l({creds:a,profile:s,env:e,credentials:n})}catch{}let r=a.loadCredentials(s,e)??n;if(typeof r.access_token=="string"){let l=await h(e,r.access_token);return l?(i.TESTMUAI_BASIC_AUTH=l,i):(i.TESTMUAI_API_KEY=r.access_token,i)}}return{}}catch{return{}}}var T=8e3;function m(){return g("warn: session auth may expire during long runs \u2014 if that happens, run `kane-cli login` and retry","AUTH_EXCHANGE_FAILED"),null}async function h(t,e){try{let[{getEnvironment:a},{ControllerClient:s}]=await Promise.all([import("./config-RLDXM5ZH.js"),import("./controller-client-OB4WD2C4.js")]),i=new s(a(t).controllerBaseUrl,e),o;try{let n=await Promise.race([i.getTmsCredentials().catch(()=>null),new Promise(r=>{o=setTimeout(()=>r(null),T)})]);if(typeof n?.username!="string"||!n.username||typeof n.access_key!="string"||!n.access_key)return m();try{let[{refreshIdentitySnapshot:r},{telemetryEnvName:l}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-RUJBMB2P.js")]);await r(l(),n)}catch{}return Buffer.from(`${n.username}:${n.access_key}`,"utf8").toString("base64")}finally{clearTimeout(o)}}catch{return m()}}export{_ as a,x as b,I as c,U as d,P as e};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d}from"./chunk-GNIFMQNK.js";import"./chunk-W4B5LOEX.js";import"./chunk-DNNZ353O.js";import"./chunk-2UIHS2FH.js";import"./chunk-Q2F5QB2W.js";import"./chunk-N2P4MI32.js";import"./chunk-NVGBE2DR.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-7F2ZV46B.js";import"./chunk-UR6MHSHU.js";export{b as REMOTE_PROVIDERS,d as findProvider,a as landingReceipt,c as looksLikeUrl};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d}from"./chunk-HWH3UYD6.js";import"./chunk-ECZMYPLJ.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-IUEEFGEW.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-4JOD47QI.js";import"./chunk-RZ4F3BHX.js";import"./chunk-7F2ZV46B.js";import"./chunk-UR6MHSHU.js";export{d as doctorExitCode,c as doctorPreflightBlocked,b as renderDoctorText,a as runDoctor};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c}from"./chunk-FNS2EAA5.js";import"./chunk-GNIFMQNK.js";import"./chunk-W4B5LOEX.js";import"./chunk-DNNZ353O.js";import"./chunk-R7QAS6LZ.js";import"./chunk-KRKGZ2ZW.js";import"./chunk-2UIHS2FH.js";import"./chunk-Q2F5QB2W.js";import"./chunk-BKHXPBWN.js";import"./chunk-N2P4MI32.js";import"./chunk-5DT7PIGB.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.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-MSGW4JDG.js";import"./chunk-7F2ZV46B.js";import"./chunk-UR6MHSHU.js";export{c as ingestCommand,b as runIngestCommand,a as runIngestWithResults};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-LVCY5IYI.js";import"./chunk-RFHMDQXZ.js";import"./chunk-J7KT44IC.js";import"./chunk-LVN6VHFN.js";import"./chunk-RZ4F3BHX.js";import"./chunk-PXCMEI73.js";import"./chunk-7F2ZV46B.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as a,d as b,e as c,f as d,g as e,h as f}from"./chunk-GUVM6SZF.js";import"./chunk-NHBYZCSX.js";import"./chunk-HWH3UYD6.js";import"./chunk-ECZMYPLJ.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-IUEEFGEW.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-AJQT4IWZ.js";import"./chunk-TAOHYWEO.js";import"./chunk-BRIEBB2U.js";import"./chunk-4JOD47QI.js";import"./chunk-RZ4F3BHX.js";import"./chunk-7F2ZV46B.js";import"./chunk-UR6MHSHU.js";export{a as MobileHostUnsupportedError,b as MobilePreflightError,c as PACKAGE_ID_REJECTED,e as isInstallablePath,f as prepareTarget,d as toAppSpec};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d,e,f}from"./chunk-4J6DQFPC.js";import"./chunk-ATGRRKEV.js";import"./chunk-JGOZUAMC.js";import"./chunk-OS4VSIHT.js";import"./chunk-TRJUD3XJ.js";import"./chunk-AFPHLUQ5.js";import"./chunk-JZ26R6UL.js";import"./chunk-6J5T5FEY.js";import"./chunk-UJZZDPDY.js";import"./chunk-CLGC7VEO.js";import"./chunk-W5TTF7GB.js";import"./chunk-JFAFKHDX.js";import"./chunk-GNIFMQNK.js";import"./chunk-W4B5LOEX.js";import"./chunk-DNNZ353O.js";import"./chunk-2UIHS2FH.js";import"./chunk-Q2F5QB2W.js";import"./chunk-N2P4MI32.js";import"./chunk-5DT7PIGB.js";import"./chunk-XWKUZJCP.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.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-7F2ZV46B.js";import"./chunk-UR6MHSHU.js";export{c as childModeFor,d as emitWalkSignal,f as reconcileCommand,a as resolveReconcileMode,e as runReconcileCommand,b as validateReconcileInputs};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{f as a}from"./chunk-YGMC3FGJ.js";import"./chunk-YCLG3T5E.js";import"./chunk-3MSXQU2C.js";import"./chunk-AN2ZPHCE.js";import"./chunk-VPRNGWIY.js";import"./chunk-4II6VDXG.js";import"./chunk-NXFAEDHV.js";import"./chunk-R4UCBA5R.js";import"./chunk-YHYTCENI.js";import"./chunk-O3AHFP3K.js";import"./chunk-3654GK6O.js";import"./chunk-3NHO5R4P.js";import"./chunk-OOEPLMKA.js";import"./chunk-NXXJ56QA.js";import"./chunk-VK3NU742.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-S3DAAAE5.js";import"./chunk-RUCSRS4C.js";import"./chunk-2YQ6TW77.js";import"./chunk-5DT7PIGB.js";import"./chunk-JUVQQP42.js";import"./chunk-2KH2JUGL.js";import"./chunk-5DBK6QNS.js";import"./chunk-CJJXT5DO.js";import"./chunk-XWKUZJCP.js";import"./chunk-ZPDM6FO7.js";import"./chunk-EHN5HTUD.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.js";import"./chunk-ZI6UIJUN.js";import"./chunk-JJN76EXE.js";import"./chunk-WV27D55O.js";import"./chunk-L5LI2JF4.js";import"./chunk-2TYCUPCN.js";import"./chunk-KKRNTSLL.js";import"./chunk-NRUD56FY.js";import"./chunk-6IA6QMPH.js";import"./chunk-TDPWFYTJ.js";import"./chunk-HRZOFTV7.js";import"./chunk-BSYX225I.js";import"./chunk-UODLRQQ4.js";import"./chunk-5Y2G4NC7.js";import"./chunk-R5T4RLF5.js";import"./chunk-2YEHV2CX.js";import"./chunk-YTDSQAYN.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-GUVM6SZF.js";import"./chunk-NHBYZCSX.js";import"./chunk-OJTCIZDK.js";import"./chunk-IZ2FJYHG.js";import"./chunk-YCCUBQY4.js";import"./chunk-5SNT2MK5.js";import"./chunk-CAMO26QU.js";import"./chunk-BPMSNGXQ.js";import"./chunk-VE3SUJMA.js";import"./chunk-LVCY5IYI.js";import"./chunk-RFHMDQXZ.js";import"./chunk-HWH3UYD6.js";import"./chunk-ECZMYPLJ.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-IUEEFGEW.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-56PAQAX5.js";import"./chunk-5EOX4MEY.js";import"./chunk-AJQT4IWZ.js";import"./chunk-TAOHYWEO.js";import"./chunk-WOEQDUJ6.js";import"./chunk-BKVDAZEJ.js";import"./chunk-U5GHOGLM.js";import"./chunk-BRIEBB2U.js";import"./chunk-4JOD47QI.js";import"./chunk-JHKM7W5X.js";import"./chunk-J7KT44IC.js";import"./chunk-LVN6VHFN.js";import"./chunk-DPUV6OSP.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-E47GFYXA.js";import"./chunk-EYOCNMUM.js";import"./chunk-PXCMEI73.js";import"./chunk-YSSYT5F5.js";import"./chunk-2ZZDNPFN.js";import"./chunk-7F2ZV46B.js";import{a as o}from"./chunk-DFS4RMVP.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-JHKM7W5X.js";import"./chunk-J7KT44IC.js";import"./chunk-LVN6VHFN.js";import"./chunk-RZ4F3BHX.js";import"./chunk-7F2ZV46B.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};