@maycombhq/atticus 2.0.0-beta.11 → 2.0.0-beta.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/bin.js +3 -3
  2. package/dist/{chunk-4UZJOQYK.js → chunk-2A24BNRZ.js} +7 -7
  3. package/dist/{chunk-C2YGYTU6.js → chunk-2DJUQ6CO.js} +22 -22
  4. package/dist/{chunk-BQNEHB5U.js → chunk-2OWSG6BK.js} +11 -11
  5. package/dist/{chunk-23VFQHFQ.js → chunk-2QT6WVAK.js} +31 -21
  6. package/dist/chunk-2RMWW6G3.js +41 -0
  7. package/dist/{chunk-SILY6ZEZ.js → chunk-3256EDLL.js} +3 -3
  8. package/dist/{chunk-YLAM4HZH.js → chunk-34BCKMBS.js} +3 -3
  9. package/dist/{chunk-GVFUEGGM.js → chunk-34NWVIBC.js} +2 -2
  10. package/dist/{chunk-UABFFMWH.js → chunk-36CTZGPH.js} +7 -7
  11. package/dist/{chunk-77RSRG3A.js → chunk-3JLTN3Y7.js} +7 -7
  12. package/dist/{chunk-QWHTTA2X.js → chunk-3M7QBKKG.js} +8 -6
  13. package/dist/chunk-3PLE3ZQ5.js +34 -0
  14. package/dist/{chunk-LUPW4WLK.js → chunk-3W5R5J65.js} +8 -8
  15. package/dist/{chunk-EBWIOODZ.js → chunk-42L2WHP6.js} +4 -4
  16. package/dist/{chunk-KU4T2CXJ.js → chunk-4GNKICU5.js} +18 -18
  17. package/dist/{chunk-2K2ZEJVR.js → chunk-4HTILEXW.js} +2 -2
  18. package/dist/{chunk-HR4DVO6X.js → chunk-4JLB5ISS.js} +3 -3
  19. package/dist/{chunk-XOVLGBKI.js → chunk-5C24MOXU.js} +17 -17
  20. package/dist/{chunk-EHUYLNLC.js → chunk-5G5GD5HF.js} +14 -14
  21. package/dist/{chunk-HGQZTUAC.js → chunk-5I5JDJ3R.js} +4 -4
  22. package/dist/{chunk-KIWEBM6G.js → chunk-5IMZYLDW.js} +11 -11
  23. package/dist/{chunk-XJAJQGXJ.js → chunk-5ION6STH.js} +2 -2
  24. package/dist/{chunk-5ICB2BXH.js → chunk-5R2EWR47.js} +7 -7
  25. package/dist/{chunk-HOUUBE74.js → chunk-65XZSK6S.js} +4 -4
  26. package/dist/{chunk-LVBPY2M6.js → chunk-6AYUBYK6.js} +348 -15
  27. package/dist/{chunk-IY4PHPHT.js → chunk-6HSRGY4B.js} +7 -5
  28. package/dist/{chunk-Y5AYBGLB.js → chunk-6IKYFARG.js} +22 -13
  29. package/dist/{chunk-7KXYMC2P.js → chunk-6R2OM6Y3.js} +15 -15
  30. package/dist/{chunk-GWSWS264.js → chunk-6ROZRBWH.js} +4 -4
  31. package/dist/{chunk-TZXHUDI6.js → chunk-72DY5NCN.js} +2 -2
  32. package/dist/{chunk-XNRPCI23.js → chunk-77UOXZVM.js} +5 -5
  33. package/dist/{chunk-LS3WR2RF.js → chunk-7C7PTJM2.js} +256 -73
  34. package/dist/{chunk-VYNZED7B.js → chunk-7FPTI62T.js} +20 -20
  35. package/dist/{chunk-Z2EYRUOH.js → chunk-7H5HYERS.js} +19 -19
  36. package/dist/{chunk-4YWRU7JK.js → chunk-7MASAGFE.js} +15 -15
  37. package/dist/{chunk-7SZPENUP.js → chunk-7UKETVPW.js} +1 -1
  38. package/dist/{chunk-55TBYJF2.js → chunk-7UXSS23C.js} +18 -16
  39. package/dist/{chunk-XPWSNKF3.js → chunk-7VAMO66T.js} +398 -111
  40. package/dist/{chunk-LDIARP6F.js → chunk-7VNEDDCC.js} +2 -2
  41. package/dist/{chunk-TGEOLIAK.js → chunk-7XWCTVJS.js} +3 -3
  42. package/dist/{chunk-RJDP642F.js → chunk-ARLH2ZMD.js} +1 -1
  43. package/dist/{chunk-IRW64JFF.js → chunk-AUSC47BK.js} +4 -4
  44. package/dist/{chunk-JUZ75OG4.js → chunk-AY7Y3WPD.js} +15 -15
  45. package/dist/{chunk-4URR24DD.js → chunk-BFZSO2TP.js} +6 -6
  46. package/dist/{chunk-MYKQVS5W.js → chunk-BHHIHENP.js} +10 -6
  47. package/dist/{chunk-6V3DTQWK.js → chunk-BUD6JILH.js} +21 -21
  48. package/dist/{chunk-MKC7P5LD.js → chunk-CCXEXCRO.js} +14 -14
  49. package/dist/{chunk-52WCHTVZ.js → chunk-CGF4LKXR.js} +3 -3
  50. package/dist/{chunk-5ACUW753.js → chunk-CH6LUQLD.js} +1 -1
  51. package/dist/{chunk-7VFVQX5K.js → chunk-CIIRPLI6.js} +4 -4
  52. package/dist/{chunk-JEUXCIRD.js → chunk-CJ5FQHST.js} +5 -5
  53. package/dist/{chunk-U6YKL7SI.js → chunk-CKI4VG2I.js} +22 -22
  54. package/dist/{chunk-BKFGGJKA.js → chunk-CQD26SMZ.js} +3 -1
  55. package/dist/chunk-CU35HXQ7.js +48 -0
  56. package/dist/{chunk-KLKENMWQ.js → chunk-CUD4I2U6.js} +58 -43
  57. package/dist/{chunk-5TY4DTHQ.js → chunk-CUX4GRTB.js} +3 -3
  58. package/dist/{chunk-5NZSJ5ZG.js → chunk-CXY4YDXS.js} +2 -2
  59. package/dist/{chunk-XR5DD5DQ.js → chunk-CYDJK34J.js} +12 -7
  60. package/dist/{chunk-WKXOEIOY.js → chunk-DBVU45FY.js} +14 -14
  61. package/dist/{chunk-IILZ7J3L.js → chunk-DBZNQAMN.js} +171 -62
  62. package/dist/{chunk-D7MWYJZF.js → chunk-DDOLWHIM.js} +17 -17
  63. package/dist/{chunk-EW7MRMD5.js → chunk-DIAYQLEY.js} +16 -7
  64. package/dist/{chunk-OFWYZH6B.js → chunk-DKGWE5ZL.js} +21 -21
  65. package/dist/{chunk-27EDZN52.js → chunk-DLX2R3MI.js} +31 -31
  66. package/dist/{chunk-TCADP67G.js → chunk-DONCF2XC.js} +3 -3
  67. package/dist/{chunk-ORZSD2KD.js → chunk-DQKNOHUZ.js} +1 -1
  68. package/dist/{chunk-EAQFRD2B.js → chunk-DREIS5Z5.js} +6 -6
  69. package/dist/{chunk-CAN3EBE5.js → chunk-DW4BM73R.js} +1 -1
  70. package/dist/{chunk-C5JFMAXX.js → chunk-DX5H5YKM.js} +11 -11
  71. package/dist/{chunk-LZWVK4YY.js → chunk-EE3UNC44.js} +3 -3
  72. package/dist/{chunk-Z46OXTBE.js → chunk-EOCZDNWU.js} +5 -5
  73. package/dist/chunk-EOWO4YPF.js +43 -0
  74. package/dist/{chunk-NBGBMRIS.js → chunk-EREL3TQG.js} +1 -1
  75. package/dist/{chunk-NH5QH3WS.js → chunk-ESGIBN3S.js} +1 -1
  76. package/dist/chunk-EZ3FDHW3.js +41 -0
  77. package/dist/chunk-F5L23NGR.js +45 -0
  78. package/dist/{chunk-MQNBEO3N.js → chunk-FF5Q7ONT.js} +118 -104
  79. package/dist/{chunk-TC3KTG33.js → chunk-FLROTO6F.js} +3 -3
  80. package/dist/{chunk-YWOMGMZB.js → chunk-FNVY656P.js} +22 -22
  81. package/dist/{chunk-MCWWMMLN.js → chunk-FP6GJJY7.js} +22 -22
  82. package/dist/{chunk-SIUDWWKS.js → chunk-FSR7OUVJ.js} +23 -23
  83. package/dist/{chunk-GPLFYLGH.js → chunk-FT3RXIN4.js} +10 -10
  84. package/dist/{chunk-SH7AZZDA.js → chunk-FYWA2CPF.js} +17 -17
  85. package/dist/{chunk-5BJFMAQU.js → chunk-G2K2D6XS.js} +12 -12
  86. package/dist/{chunk-3LU6YCSQ.js → chunk-G5SKNMPC.js} +5 -5
  87. package/dist/{chunk-RB2VSED2.js → chunk-GIPQHVJF.js} +11 -11
  88. package/dist/{chunk-NELU7LSL.js → chunk-GJ4B2FYS.js} +10 -10
  89. package/dist/{chunk-KQRYW7OS.js → chunk-GRZGEMO5.js} +109 -108
  90. package/dist/{chunk-OR5VRULZ.js → chunk-GU7PEYRC.js} +10 -10
  91. package/dist/{chunk-MKIULIUQ.js → chunk-GUNBOZ75.js} +3 -3
  92. package/dist/{chunk-Q32Y5T2U.js → chunk-GX3Q5PRC.js} +11 -11
  93. package/dist/{chunk-ANCI3LFS.js → chunk-HIQWJ6JZ.js} +4 -4
  94. package/dist/{chunk-JBSD57N7.js → chunk-HK2CF6KQ.js} +23 -23
  95. package/dist/{chunk-ZKUDS7JG.js → chunk-HMQXIFOL.js} +4 -4
  96. package/dist/{chunk-WIMOJMAK.js → chunk-HY2VVVFZ.js} +168 -14
  97. package/dist/{chunk-BX52REMA.js → chunk-IDLO7UCZ.js} +5 -5
  98. package/dist/{chunk-CE4S5ZY3.js → chunk-IJ7TPOXQ.js} +11 -11
  99. package/dist/{chunk-6N2GUZMZ.js → chunk-ISXNWUG7.js} +1 -1
  100. package/dist/{chunk-DYWTQXP4.js → chunk-IZF2VJU5.js} +22 -22
  101. package/dist/{chunk-6RGIM2ZH.js → chunk-J22RSFKY.js} +79 -9
  102. package/dist/{chunk-WFYHOXTB.js → chunk-J3DTLYER.js} +15 -15
  103. package/dist/{chunk-LEHZTKB3.js → chunk-JC3BMRB5.js} +11 -11
  104. package/dist/{chunk-7RGCQ4VZ.js → chunk-JLIEAQP4.js} +4 -4
  105. package/dist/chunk-JOG6LBOP.js +38 -0
  106. package/dist/{chunk-L7I5PKGD.js → chunk-JQG4VO47.js} +1 -1
  107. package/dist/{chunk-RIEFYHXI.js → chunk-JS3DJH3Q.js} +4 -4
  108. package/dist/{chunk-DGKNOPSE.js → chunk-JWQMD54C.js} +7 -7
  109. package/dist/{chunk-XKJRPVJO.js → chunk-KJ6IH2D5.js} +5 -5
  110. package/dist/{chunk-T6ESD5KM.js → chunk-KPHPVOME.js} +4 -4
  111. package/dist/{chunk-YWZDAZMA.js → chunk-KY2ZHTBJ.js} +6 -6
  112. package/dist/{chunk-7HWXYP4H.js → chunk-LAOZB5YC.js} +11 -11
  113. package/dist/chunk-LRCWWMHH.js +54 -0
  114. package/dist/chunk-LVQMS54L.js +54 -0
  115. package/dist/{chunk-NG5R2WIY.js → chunk-M3BJTXLR.js} +9 -9
  116. package/dist/{chunk-7RUMD56V.js → chunk-M4D3VKAS.js} +1 -1
  117. package/dist/{chunk-UTR67XU2.js → chunk-MFRPLAOH.js} +2 -2
  118. package/dist/{chunk-HZYFLEWO.js → chunk-MI3GGF7V.js} +17 -17
  119. package/dist/{chunk-BA5DTXHQ.js → chunk-MIOY6EXD.js} +4 -4
  120. package/dist/{chunk-BUWSOQLU.js → chunk-ML3HOWPI.js} +4 -4
  121. package/dist/{chunk-SINJKQSI.js → chunk-MOY52LHS.js} +13 -13
  122. package/dist/{chunk-FMRMTI7W.js → chunk-MRLCNXXR.js} +1 -1
  123. package/dist/{chunk-5P5BGG5L.js → chunk-N2FA53DA.js} +6 -6
  124. package/dist/{chunk-ATNG5VOZ.js → chunk-N6YELFHL.js} +2 -2
  125. package/dist/{chunk-MYOW3RPC.js → chunk-N7HG4UP7.js} +6 -6
  126. package/dist/{chunk-7LCQ7JAM.js → chunk-NAKVQU6F.js} +1 -1
  127. package/dist/{chunk-3DDJLI7N.js → chunk-NTNJNRHW.js} +4 -4
  128. package/dist/{chunk-OHXTB6CO.js → chunk-NZY72PGJ.js} +13 -8
  129. package/dist/{chunk-4ONORLK5.js → chunk-O62VA6MH.js} +13 -13
  130. package/dist/{chunk-IVHN2VYG.js → chunk-OJAJXU65.js} +3 -1
  131. package/dist/{chunk-CZI2ACNT.js → chunk-OKUYBXXI.js} +16 -16
  132. package/dist/{chunk-EZSZFI54.js → chunk-OMH3I5BH.js} +2 -2
  133. package/dist/{chunk-5RUMHLIS.js → chunk-P3VBYYAS.js} +24 -3
  134. package/dist/{chunk-WUE6HKIU.js → chunk-P7SONIEO.js} +165 -46
  135. package/dist/{chunk-6E2GJANQ.js → chunk-PAOIMLTK.js} +19 -19
  136. package/dist/{chunk-B3QOYE74.js → chunk-PAQDPB6T.js} +4 -4
  137. package/dist/{chunk-DS3ZEJVN.js → chunk-PGFRXGHA.js} +2 -2
  138. package/dist/{chunk-5V5BJACL.js → chunk-PJRMMWU4.js} +2 -2
  139. package/dist/{chunk-S7ZWCMDO.js → chunk-PKCYRG6G.js} +57 -18
  140. package/dist/{chunk-26DBAGOP.js → chunk-PUGPT4Y6.js} +17 -17
  141. package/dist/{chunk-PQW7PYUR.js → chunk-PVMGHQWB.js} +7 -7
  142. package/dist/{chunk-MSL3CLHX.js → chunk-Q4AWUD6C.js} +16 -16
  143. package/dist/{chunk-JQX6BSE4.js → chunk-QC24Z5JU.js} +10 -10
  144. package/dist/{chunk-WCLAOKCH.js → chunk-QKSWQBWD.js} +8 -8
  145. package/dist/{chunk-GMJXC5AL.js → chunk-QL4VNY4U.js} +1 -1
  146. package/dist/chunk-QOF7U6BI.js +363 -0
  147. package/dist/{chunk-JRPQX2EK.js → chunk-QOPX5M7Y.js} +4 -4
  148. package/dist/{chunk-TEBBD4XH.js → chunk-QR65C3DV.js} +4 -4
  149. package/dist/{chunk-SG5KY4VB.js → chunk-QXGOEP44.js} +3 -3
  150. package/dist/{chunk-XZJE6WIT.js → chunk-RA64IK43.js} +1 -1
  151. package/dist/{chunk-3WU7LVTL.js → chunk-RMNYY5IE.js} +5 -5
  152. package/dist/chunk-S3QCJWCF.js +34 -0
  153. package/dist/{chunk-C75W7VXX.js → chunk-S4USA5WC.js} +20 -18
  154. package/dist/{chunk-FOQXYMOR.js → chunk-S5X7BVWP.js} +19 -19
  155. package/dist/{chunk-EV4TEFOD.js → chunk-SR2M7DWL.js} +13 -13
  156. package/dist/{chunk-R6UTCLH5.js → chunk-T4TMX54Q.js} +16 -16
  157. package/dist/{chunk-OXVVRJDQ.js → chunk-T72K4PLH.js} +11 -11
  158. package/dist/{chunk-SKMHS4CL.js → chunk-TA2ZNDYD.js} +1 -1
  159. package/dist/{chunk-CRQ73DIF.js → chunk-TBKJPKDN.js} +11 -11
  160. package/dist/{chunk-YVCOQ5TZ.js → chunk-TEHH47TG.js} +3 -3
  161. package/dist/{chunk-EATSD7YD.js → chunk-TEZSZ24W.js} +4 -4
  162. package/dist/{chunk-WUP77GG2.js → chunk-TIAPEYWI.js} +3 -3
  163. package/dist/{chunk-J27QGXO4.js → chunk-TIUBGJG3.js} +9 -9
  164. package/dist/{chunk-RWMSJP7H.js → chunk-TJHDFS33.js} +29 -26
  165. package/dist/chunk-TJP2KLZI.js +41 -0
  166. package/dist/{chunk-ZJQUIG3A.js → chunk-TV6ECMN3.js} +15 -14
  167. package/dist/{chunk-JMOLB347.js → chunk-U25OX22K.js} +64 -8
  168. package/dist/{chunk-UNFCFJMF.js → chunk-U2SGLXFR.js} +17 -17
  169. package/dist/{chunk-MV4637YA.js → chunk-U3JGJ3BO.js} +24 -24
  170. package/dist/{chunk-XF3DATVU.js → chunk-U43G5EUN.js} +17 -17
  171. package/dist/{chunk-SNHOLLGN.js → chunk-UQUDITWL.js} +84 -25
  172. package/dist/{chunk-EQOSXLK3.js → chunk-UYKKTEWB.js} +14 -14
  173. package/dist/{chunk-NX6QEEOA.js → chunk-VAL7HAIR.js} +3 -3
  174. package/dist/{chunk-JUQHYTXN.js → chunk-VC4JMXM5.js} +19 -17
  175. package/dist/{chunk-NIYB5K5B.js → chunk-VRH6ITQH.js} +9 -9
  176. package/dist/{chunk-U5PDQTLA.js → chunk-VTMIRRIZ.js} +2 -2
  177. package/dist/{chunk-H4VJO3M2.js → chunk-VUBVBFJW.js} +5 -5
  178. package/dist/{chunk-G7WZH54P.js → chunk-W3ZWS3B3.js} +20 -10
  179. package/dist/{chunk-GG6HIU74.js → chunk-WBOVB3XR.js} +24 -24
  180. package/dist/{chunk-IA2RKC6I.js → chunk-WFJMKUTR.js} +52 -11
  181. package/dist/{chunk-KXZR2BLL.js → chunk-WM4N2L4T.js} +1 -1
  182. package/dist/{chunk-7S3XFWOU.js → chunk-WRLEYM3T.js} +4 -4
  183. package/dist/{chunk-REWZE2XI.js → chunk-WSFPKNKT.js} +23 -23
  184. package/dist/{chunk-SUQZGPVG.js → chunk-XB64FJLU.js} +24 -24
  185. package/dist/{chunk-4AYZQ3SY.js → chunk-XBNKOARP.js} +4 -4
  186. package/dist/chunk-XDTD55UU.js +89 -0
  187. package/dist/{chunk-DQNKG4HY.js → chunk-XMYGEZQ7.js} +17 -17
  188. package/dist/{chunk-R3VFLYZZ.js → chunk-XP3KLC4S.js} +6 -6
  189. package/dist/{chunk-S2FDPN32.js → chunk-XRDYEEDE.js} +1 -1
  190. package/dist/{chunk-7HQOZALR.js → chunk-XSNIHYO6.js} +10 -10
  191. package/dist/chunk-XVQGT4SL.js +37 -0
  192. package/dist/{chunk-ZTNS3L5Z.js → chunk-XZLSKGJX.js} +5 -5
  193. package/dist/{chunk-NR5T46ZY.js → chunk-Y2FMWQQB.js} +16 -16
  194. package/dist/{chunk-7A7IG7OA.js → chunk-Y6LFFSRV.js} +10 -10
  195. package/dist/{chunk-V4XKYGLK.js → chunk-YISWYR3Q.js} +4 -4
  196. package/dist/{chunk-EI4KQYJ3.js → chunk-YSFIQGDK.js} +8 -8
  197. package/dist/{chunk-XPJR74MA.js → chunk-YVQWJDVN.js} +37 -25
  198. package/dist/{chunk-R3RVFCJ2.js → chunk-YY2WGL6S.js} +2 -2
  199. package/dist/{chunk-HQMCHHY5.js → chunk-Z2BA4NNR.js} +2 -2
  200. package/dist/{chunk-G3PBLW4K.js → chunk-ZDZCUZ4N.js} +34 -9
  201. package/dist/{chunk-UFBKJOWB.js → chunk-ZPPLFE4N.js} +14 -14
  202. package/dist/{chunk-WGU6NIUV.js → chunk-ZRP6ZXOF.js} +12 -12
  203. package/dist/{chunk-7J7UY46S.js → chunk-ZTIMXVV5.js} +2 -2
  204. package/dist/{chunk-IWZPGIGT.js → chunk-ZWGU46YO.js} +23 -23
  205. package/dist/files.json +441 -433
  206. package/dist/packages/sdk/npm/index.js +9 -0
  207. package/dist/packages/ui/dist/assets/{elk-api-DDup23Us.js → elk-api-D2NcYpUJ.js} +2 -2
  208. package/dist/packages/ui/dist/assets/index-CT7skl01.js +29 -0
  209. package/dist/packages/ui/dist/index.html +1 -1
  210. package/package.json +5 -5
  211. package/dist/chunk-4Y4FY34K.js +0 -34
  212. package/dist/chunk-ACWQDL6T.js +0 -37
  213. package/dist/chunk-ASKDCMW5.js +0 -275
  214. package/dist/chunk-B3UHYXHU.js +0 -41
  215. package/dist/chunk-DDAEAZEV.js +0 -54
  216. package/dist/chunk-E25G46RW.js +0 -54
  217. package/dist/chunk-KQK6SQPE.js +0 -48
  218. package/dist/chunk-NCR24CPV.js +0 -41
  219. package/dist/chunk-NDW4ROST.js +0 -38
  220. package/dist/chunk-OJN7WME4.js +0 -34
  221. package/dist/chunk-UFTQIK2J.js +0 -43
  222. package/dist/chunk-ZHWSL6SR.js +0 -45
  223. package/dist/packages/ui/dist/assets/index-mTOWhQZm.js +0 -29
@@ -7,18 +7,18 @@ import {
7
7
  featuresForScan,
8
8
  namingHint,
9
9
  syncSources
10
- } from "./chunk-TEBBD4XH.js";
10
+ } from "./chunk-QR65C3DV.js";
11
11
  import {
12
12
  dirSource,
13
13
  sameCommit,
14
14
  verifyFacts
15
- } from "./chunk-XPWSNKF3.js";
15
+ } from "./chunk-7VAMO66T.js";
16
16
  import {
17
17
  scanInputs
18
- } from "./chunk-WIMOJMAK.js";
18
+ } from "./chunk-HY2VVVFZ.js";
19
19
  import {
20
20
  listIngestors
21
- } from "./chunk-5V5BJACL.js";
21
+ } from "./chunk-PJRMMWU4.js";
22
22
  import {
23
23
  BUILT_IN_EXTRACTORS,
24
24
  MODEL_READERS,
@@ -33,12 +33,12 @@ import {
33
33
  runDialectTests,
34
34
  runFrameworkTests,
35
35
  unmodelledFrameworks
36
- } from "./chunk-GVFUEGGM.js";
36
+ } from "./chunk-34NWVIBC.js";
37
37
  import {
38
38
  baseClonePath,
39
39
  changesSince,
40
40
  checkoutState
41
- } from "./chunk-XZJE6WIT.js";
41
+ } from "./chunk-RA64IK43.js";
42
42
  import {
43
43
  DEFAULT_IGNORES,
44
44
  configHash,
@@ -50,11 +50,11 @@ import {
50
50
  sandboxedExtractor,
51
51
  scanRepo,
52
52
  withParseCache
53
- } from "./chunk-FMRMTI7W.js";
53
+ } from "./chunk-MRLCNXXR.js";
54
54
  import {
55
55
  buildContextPack,
56
56
  toRunSummary
57
- } from "./chunk-BKFGGJKA.js";
57
+ } from "./chunk-CQD26SMZ.js";
58
58
  import {
59
59
  AgentDefinition,
60
60
  DECLARED_CALLER,
@@ -135,7 +135,7 @@ import {
135
135
  toCanonicalYaml,
136
136
  topicQuestionText,
137
137
  urlHostPort
138
- } from "./chunk-JMOLB347.js";
138
+ } from "./chunk-U25OX22K.js";
139
139
  import {
140
140
  SCHEMA_VERSION,
141
141
  writeFileAtomic
@@ -1494,6 +1494,7 @@ import { createHash as createHash2 } from "node:crypto";
1494
1494
  // packages/scanner/dist/target-suggest.js
1495
1495
  var TARGETS_MAX_SUGGESTED = 5;
1496
1496
  var TARGETS_ANOTHER = TARGETS_ANOTHER_LABEL;
1497
+ var TARGETS_NO_EVIDENCE = "no evidence; listed so you can pick it";
1497
1498
  var STOP = new Set("url uri base host client clients service services svc api apis http https rest endpoint endpoints impl java kt ts js py cs go src main test get post put delete patch the and for com www internal example config configs properties yaml yml env app apps application new call calls feign template web request requests response gateway proxy remote adapter port".split(" "));
1498
1499
  function nameWords(s) {
1499
1500
  if (!s)
@@ -1531,20 +1532,14 @@ function hostOf(f, facts) {
1531
1532
  return fromUrl(f.host) ?? f.host.split(/[/:]/)[0];
1532
1533
  if (f.base) {
1533
1534
  const cfg = facts.find((x) => x.kind === "config" && x.key === f.base && !!x.value);
1534
- return cfg?.value ? fromUrl(cfg.value) : void 0;
1535
+ if (!cfg?.value)
1536
+ return void 0;
1537
+ return fromUrl(cfg.value) ?? (/^[a-z0-9-]+(\.[a-z0-9-]+)+(:\d+)?$/i.test(cfg.value) ? cfg.value.split(":")[0] : void 0);
1535
1538
  }
1536
1539
  return void 0;
1537
1540
  }
1538
1541
  var answerLabel = (q) => q.answer?.option !== void 0 ? q.options[q.answer.option - 1]?.label : q.answer?.text;
1539
1542
  var NOT_A_TARGET = /* @__PURE__ */ new Set(["None of these", TARGETS_SPLIT_LABEL, TARGETS_ANOTHER_LABEL]);
1540
- var SERVES = {
1541
- rest: ["rest"],
1542
- soap: ["soap"],
1543
- graphql: ["graphql"],
1544
- grpc: ["grpc"],
1545
- webhook: ["webhook"],
1546
- sftp: ["file-drop"]
1547
- };
1548
1543
  function candidates(callerRepo, ctx) {
1549
1544
  const manifest = estateRepos(ctx.op).filter((r) => r.id !== callerRepo || !!ctx.only);
1550
1545
  const systems = ctx.op.profiles.flatMap((p) => p.profile?.systems ?? []);
@@ -1612,7 +1607,6 @@ function candidates(callerRepo, ctx) {
1612
1607
  names,
1613
1608
  bases,
1614
1609
  entries,
1615
- types: new Set(mine.map((e) => e.endpointType)),
1616
1610
  ...m.description?.text ? { description: m.description.text } : {},
1617
1611
  hosts: m.hosts.map((h) => h.toLowerCase())
1618
1612
  });
@@ -1632,7 +1626,6 @@ function candidates(callerRepo, ctx) {
1632
1626
  names: /* @__PURE__ */ new Map(),
1633
1627
  bases: [],
1634
1628
  entries: [],
1635
- types: /* @__PURE__ */ new Set(),
1636
1629
  hosts: []
1637
1630
  });
1638
1631
  const own = new Set(estateRepos(ctx.op).flatMap((r) => r.system ? [r.system] : []));
@@ -1659,7 +1652,6 @@ function candidates(callerRepo, ctx) {
1659
1652
  names,
1660
1653
  bases: [],
1661
1654
  entries: [],
1662
- types: /* @__PURE__ */ new Set(),
1663
1655
  hosts: s.aliases.map((a) => a.toLowerCase())
1664
1656
  });
1665
1657
  }
@@ -1675,21 +1667,20 @@ function targetSuggestions(f, ctx) {
1675
1667
  const host = hostOf(f, ctx.facts)?.toLowerCase();
1676
1668
  const client = clientOf(f);
1677
1669
  const said = [
1678
- { from: f.base ? `its config key ${f.base}` : "", words: nameWords(f.base), weight: 4 },
1679
- { from: client ? `its client ${client}` : "", words: nameWords(client), weight: 4 },
1670
+ { from: f.base ? `the config key ${f.base}` : "", words: nameWords(f.base), weight: 4 },
1671
+ { from: client ? `the client ${client}` : "", words: nameWords(client), weight: 4 },
1680
1672
  {
1681
- from: host ? `its host ${host}` : "",
1673
+ from: host ? `the host label ${host.split(".")[0]} (${host})` : "",
1682
1674
  words: host ? nameWords(host.split(".")[0]) : [],
1683
1675
  weight: 4
1684
1676
  },
1685
1677
  {
1686
- from: `its path ${f.path}`,
1678
+ from: `the path ${f.path}`,
1687
1679
  words: nameWords(segs(f.path).filter((x) => x !== "{}").join(" ")),
1688
1680
  weight: 2
1689
1681
  }
1690
1682
  ].filter((x) => x.from && x.words.length);
1691
1683
  const method = f.method?.toUpperCase();
1692
- const types = new Set(SERVES[f.callType] ?? []);
1693
1684
  const earlier = (ctx.questions ?? []).filter((q) => q.askedBy?.step === TARGETS_STEP_ID && q.state === "answered" && q.repo === f.repo && !q.evidence.includes(`${f.cite.file}:${f.cite.line}`));
1694
1685
  const only = ctx.only ? new Set(ctx.only) : void 0;
1695
1686
  const out = [];
@@ -1703,18 +1694,21 @@ function targetSuggestions(f, ctx) {
1703
1694
  };
1704
1695
  if (only?.has(c.s.label))
1705
1696
  add(6, "the join found an entry of it that serves the call");
1706
- const hit = c.entries.find((e) => (!method || !e.method || e.method === method) && serves(e.path, f.path, c.bases.map((b) => b.path)));
1707
- if (hit && !only)
1708
- add(6, `it serves ${[hit.method, hit.path].filter(Boolean).join(" ")} (${hit.at})`);
1697
+ const hit = c.entries.find((e) => (!method || !e.method || e.method === method || e.method === "ANY") && serves(e.path, f.path, c.bases.map((b) => b.path)));
1698
+ if (hit && !only) {
1699
+ const what2 = [hit.method, hit.path].filter(Boolean).join(" ");
1700
+ add(6, `serves ${what2} (${hit.at})`);
1701
+ s.serves = [what2];
1702
+ }
1709
1703
  const base2 = c.bases.find((b) => under(f.path, b.path));
1710
1704
  if (base2)
1711
- add(5, `${f.path} is under ${base2.path}, ${base2.from}`);
1705
+ add(5, `its basePath ${base2.path} matches: ${base2.from}`);
1712
1706
  if (host && c.hosts.includes(host))
1713
- add(8, `it answers on ${host}`);
1707
+ add(8, `it lists ${host} under hosts`);
1714
1708
  for (const x of said) {
1715
1709
  const w = x.words.find((y) => c.names.has(y) && telling(y));
1716
1710
  if (w)
1717
- add(x.weight, `${x.from} names ${c.names.get(w)}`);
1711
+ add(x.weight, `named like ${x.from}`);
1718
1712
  }
1719
1713
  if (c.description) {
1720
1714
  const d = new Set(nameWords(c.description));
@@ -1730,9 +1724,9 @@ function targetSuggestions(f, ctx) {
1730
1724
  return t === slugify(c.s.label) || !!c.s.repo && t === slugify(c.s.repo);
1731
1725
  }).length;
1732
1726
  if (named2)
1733
- add(3, `${f.repo}'s answers name it for ${named2} other ${named2 === 1 ? "call" : "calls"}`);
1734
- if (c.s.kind === "repo" && c.s.read && [...c.types].some((t) => types.has(t)) && !s.score)
1735
- s.why.push(`it serves ${[...types].join(" and ")} calls`);
1727
+ add(3, `picked for ${named2} other ${named2 === 1 ? "call" : "calls"} of ${f.repo}`);
1728
+ if (!s.score)
1729
+ s.why.push(TARGETS_NO_EVIDENCE);
1736
1730
  s.why = [...new Set(s.why)];
1737
1731
  out.push(s);
1738
1732
  }
@@ -1867,7 +1861,7 @@ function targetQuestionFor(f) {
1867
1861
  evidence: [`${f.cite.file}:${f.cite.line}`]
1868
1862
  };
1869
1863
  }
1870
- var SERVES2 = {
1864
+ var SERVES = {
1871
1865
  rest: ["rest"],
1872
1866
  soap: ["soap"],
1873
1867
  graphql: ["graphql"],
@@ -1886,7 +1880,7 @@ function targetAsks(facts, records, asks) {
1886
1880
  if (f.kind !== "call" || !needsTarget(f, facts) && !ask)
1887
1881
  continue;
1888
1882
  const own = slugify(f.component ?? f.repo).replace(/\./g, "-");
1889
- const types = new Set(SERVES2[f.callType] ?? []);
1883
+ const types = new Set(SERVES[f.callType] ?? []);
1890
1884
  const servers = ask ? [...new Set(ask.candidates.map((c) => c.component))].sort() : [
1891
1885
  ...new Set(records.filter((r) => r.kind === "Endpoint" && types.has(r.endpointType) && r.component !== own).filter((r) => repoOf.get(r.component) !== f.repo).map((r) => r.component))
1892
1886
  ].sort();
@@ -1896,20 +1890,31 @@ function targetAsks(facts, records, asks) {
1896
1890
  }
1897
1891
  var outsideAs = (s) => s.boundary === "vendor" ? "an outside system" : "another team's system";
1898
1892
  var callWhat = (f) => [f.method?.toUpperCase(), f.path].filter(Boolean).join(" ");
1899
- function suggestionOption(s, callerRepo, what2, n) {
1900
- const calls = n ? `all ${n} calls: ${what2}` : what2;
1901
- const why = s.why.length ? `. Suggested: ${s.why.slice(0, 3).join("; ")}` : "";
1893
+ function suggestionWhy(s, prefix) {
1894
+ const served = s.serves ?? [];
1895
+ let why = s.why;
1896
+ if (prefix !== void 0 && served.length > 1) {
1897
+ const under2 = prefix === "/" ? "" : ` under ${prefix}`;
1898
+ why = [
1899
+ `serves ${served[0]} and ${served.length - 1} more${under2}`,
1900
+ ...why.filter((w) => !w.startsWith("serves "))
1901
+ ];
1902
+ }
1903
+ return (why.length ? why : [TARGETS_NO_EVIDENCE]).slice(0, 3).join("; ");
1904
+ }
1905
+ function suggestionOption(s, callerRepo, n, prefix) {
1906
+ const why = suggestionWhy(s, prefix);
1902
1907
  if (s.kind === "outside")
1903
1908
  return {
1904
1909
  label: s.label,
1905
- means: `${s.name}, ${outsideAs({ boundary: s.boundary ?? "vendor" })}, answers ${calls}${why}`,
1910
+ means: `${s.name}, ${outsideAs({ boundary: s.boundary ?? "vendor" })}: ${why}`,
1906
1911
  changes: n ? `The ${n} calls go to ${s.name} when the facts are next written` : `The call goes to ${s.name} when the facts are next written`
1907
1912
  };
1908
- const who = s.label === s.repo ? `${s.repo}${s.read ? "" : ", not read yet,"}` : `${s.label}, built in ${s.repo}${s.read ? "" : ", not read yet"},`;
1913
+ const who = s.label === s.repo ? `${s.repo}${s.read ? "" : " (not read yet)"}` : `${s.label}, built in ${s.repo}${s.read ? "" : " (not read yet)"}`;
1909
1914
  const them = n ? `The ${n} calls` : "The call";
1910
1915
  return {
1911
1916
  label: s.label,
1912
- means: `${who} answers ${calls}${why}`,
1917
+ means: `${who}: ${why}`,
1913
1918
  changes: s.read ? `${them} ${n ? "join" : "joins"} ${s.label} when the facts are next written (atticus verify ${callerRepo} --write)` : `${them} ${n ? "go" : "goes"} to ${s.repo} when the facts are next written (atticus verify ${callerRepo} --write), and ${n ? "join" : "joins"} its route once ${s.repo} is read and verified (/atticus-map ${s.repo}); if no route of it serves ${n ? "them" : "it"}, the question opens again`
1914
1919
  };
1915
1920
  }
@@ -1937,29 +1942,33 @@ function offered(members, facts, records, op, asks, ctx) {
1937
1942
  })) {
1938
1943
  const x = merged.get(s.label);
1939
1944
  if (!x)
1940
- merged.set(s.label, { ...s, why: [...s.why] });
1945
+ merged.set(s.label, { ...s, why: [...s.why], serves: [...s.serves ?? []] });
1941
1946
  else {
1942
1947
  x.score += s.score;
1943
1948
  for (const w of s.why)
1944
1949
  if (!x.why.includes(w))
1945
1950
  x.why.push(w);
1951
+ for (const w of s.serves ?? [])
1952
+ if (!x.serves.includes(w))
1953
+ x.serves.push(w);
1954
+ if (x.why.length > 1)
1955
+ x.why = x.why.filter((w) => w !== TARGETS_NO_EVIDENCE);
1946
1956
  }
1947
1957
  }
1948
1958
  }
1949
1959
  const ranked = [...merged.values()].sort((a, b) => b.score - a.score || Number(b.read) - Number(a.read) || (a.kind === b.kind ? 0 : a.kind === "repo" ? -1 : 1) || a.label.localeCompare(b.label));
1950
1960
  const serving = new Set(members.flatMap((m) => m.servers));
1951
- const types = new Set(members.flatMap((m) => SERVES2[m.f.callType] ?? []));
1961
+ const types = new Set(members.flatMap((m) => SERVES[m.f.callType] ?? []));
1952
1962
  return offeredSuggestions(ranked, { types, serving });
1953
1963
  }
1954
1964
  function targetQuestionDrafts(facts, records, op, asks, ctx = {}) {
1955
1965
  const { list } = targetAsks(facts, records, asks);
1956
1966
  return list.map((m) => {
1957
1967
  const { f, q } = m;
1958
- const what2 = callWhat(f);
1959
1968
  const draft = {
1960
1969
  question: q.question,
1961
1970
  options: [
1962
- ...offered([m], facts, records, op, asks, ctx).map((s) => suggestionOption(s, f.repo, what2)),
1971
+ ...offered([m], facts, records, op, asks, ctx).map((s) => suggestionOption(s, f.repo)),
1963
1972
  anotherOption(op),
1964
1973
  {
1965
1974
  label: TARGETS_NONE,
@@ -2006,9 +2015,28 @@ function groupVia(f) {
2006
2015
  return ` through ${f.base}`;
2007
2016
  return "";
2008
2017
  }
2009
- function targetGroupQuestion(repo, f) {
2018
+ function targetGroupQuestion(repo, f, facts) {
2019
+ const proxy = facts ? proxyOf(f, facts) : void 0;
2020
+ const through = f.base ?? f.host ?? f.to;
2021
+ if (proxy && through) {
2022
+ const p = targetPathPrefix(f.path);
2023
+ return `Which repo serves the routes under ${p === "/" ? "" : p}/** that ${proxy} forwards to ${through}?`;
2024
+ }
2010
2025
  return `Which repo or system answers the calls ${repo} makes under ${targetPathPrefix(f.path)}${groupVia(f)}?`;
2011
2026
  }
2027
+ function proxyOf(f, facts) {
2028
+ if (!f.from)
2029
+ return void 0;
2030
+ const from = facts.find((x) => x.id === f.from);
2031
+ if (!from || from.kind !== "entry")
2032
+ return void 0;
2033
+ const proxy = facts.find((x) => x.kind === "deploy" && x.repo === f.repo && x.platform === "apigee" && !!x.basePath);
2034
+ return proxy ? proxy.resourceName ?? f.repo : void 0;
2035
+ }
2036
+ function targetGroupWordings(repo, f, facts) {
2037
+ return [.../* @__PURE__ */ new Set([targetGroupQuestion(repo, f, facts), targetGroupQuestion(repo, f)])];
2038
+ }
2039
+ var repo0 = (members) => members[0].f.repo;
2012
2040
  var byLine = (a, b) => a.localeCompare(b, "en", { numeric: true });
2013
2041
  var answerLabel2 = (q) => q.answer?.option !== void 0 ? q.options[q.answer.option - 1]?.label : q.answer?.text;
2014
2042
  function splitTargetGroups(questions) {
@@ -2025,12 +2053,13 @@ function groupedTargetDrafts(facts, records, op, asks, o) {
2025
2053
  for (const a of list) {
2026
2054
  if (!o.ask.has(a.f.id))
2027
2055
  continue;
2028
- const k = targetGroupQuestion(a.f.repo, a.f);
2056
+ const k = targetGroupQuestion(a.f.repo, a.f, facts);
2029
2057
  groups.set(k, [...groups.get(k) ?? [], a]);
2030
2058
  }
2031
2059
  const out = [];
2032
2060
  for (const [question, members] of groups) {
2033
- if (members.length === 1 || o.split?.has(question)) {
2061
+ const split = targetGroupWordings(repo0(members), members[0].f, facts).some((w) => o.split?.has(w));
2062
+ if (members.length === 1 || split) {
2034
2063
  for (const m of members)
2035
2064
  out.push({ ...own.get(m.f.id), factIds: [m.f.id] });
2036
2065
  continue;
@@ -2043,7 +2072,7 @@ function groupedTargetDrafts(facts, records, op, asks, o) {
2043
2072
  const draft = {
2044
2073
  question,
2045
2074
  options: [
2046
- ...offered(members, facts, records, op, asks, ctx).map((s) => suggestionOption(s, repo, listed, n)),
2075
+ ...offered(members, facts, records, op, asks, ctx).map((s) => suggestionOption(s, repo, n, targetPathPrefix(members[0].f.path))),
2047
2076
  anotherOption(op),
2048
2077
  {
2049
2078
  label: TARGETS_SPLIT,
@@ -2069,6 +2098,40 @@ function groupedTargetDrafts(facts, records, op, asks, o) {
2069
2098
  }
2070
2099
  return out.sort((a, b) => a.factId.localeCompare(b.factId));
2071
2100
  }
2101
+ function targetRuleOffers(questions, factsOf) {
2102
+ const byKey = /* @__PURE__ */ new Map();
2103
+ for (const q of questions) {
2104
+ if (q.state !== "open" || q.askedBy?.step !== TARGETS_STEP)
2105
+ continue;
2106
+ const facts = factsOf(q.repo) ?? [];
2107
+ const at3 = new Set(q.evidence);
2108
+ const calls = facts.filter((f) => f.kind === "call" && f.repo === q.repo && at3.has(`${f.cite.file}:${f.cite.line}`));
2109
+ if (!calls.length)
2110
+ continue;
2111
+ const prefixes = new Set(calls.map((c) => targetPathPrefix(c.path)));
2112
+ const hosts = new Set(calls.map((c) => c.host?.replace(/^[a-z][a-z0-9+.-]*:\/\//i, "").split(/[/:]/)[0]));
2113
+ const [prefix] = prefixes;
2114
+ const [host] = hosts;
2115
+ const match = prefixes.size === 1 && prefix !== "/" ? `${prefix}/**` : hosts.size === 1 && host ? host : void 0;
2116
+ if (!match)
2117
+ continue;
2118
+ const key = `${q.repo}
2119
+ ${match}`;
2120
+ const x = byKey.get(key) ?? { match, ids: [], calls: 0 };
2121
+ x.ids.push(q.id);
2122
+ x.calls += calls.length;
2123
+ byKey.set(key, x);
2124
+ }
2125
+ const out = /* @__PURE__ */ new Map();
2126
+ for (const x of byKey.values()) {
2127
+ if (x.ids.length < 2)
2128
+ continue;
2129
+ const ids = [...x.ids].sort();
2130
+ for (const id of ids)
2131
+ out.set(id, { match: x.match, ids, calls: x.calls });
2132
+ }
2133
+ return out;
2134
+ }
2072
2135
  var segmentsOf = (p) => p.split(/[?#]/)[0].split("/").filter(Boolean).map((x) => /^[{:<]/.test(x) ? "{}" : x);
2073
2136
  function ruleCoversCall(match, f, facts) {
2074
2137
  if (isPathMatch(match)) {
@@ -2110,7 +2173,7 @@ function targetsFromAnswers(repo, facts, questions, o = {}) {
2110
2173
  continue;
2111
2174
  let asked = byId.get(questionId({ step: TARGETS_STEP, repo, ...q }));
2112
2175
  if (!asked || asked.state !== "answered" || !asked.answer) {
2113
- const g = groups.get(targetGroupQuestion(repo, f));
2176
+ const g = targetGroupWordings(repo, f, facts).map((w) => groups.get(w)).find((x) => !!x);
2114
2177
  asked = g && (needsTarget(f, facts) || g.evidence.includes(q.evidence[0])) ? g : void 0;
2115
2178
  }
2116
2179
  let label2 = asked && asked.state === "answered" && asked.answer ? answerLabel2(asked) : void 0;
@@ -2135,7 +2198,7 @@ function answeredQuestionOfCall(repo, facts, questions, factId) {
2135
2198
  const own = targetQuestionFor(f);
2136
2199
  const ownId = questionId({ step: TARGETS_STEP, repo, ...own });
2137
2200
  const answered = questions.filter((q2) => q2.askedBy?.step === TARGETS_STEP && q2.state === "answered" && q2.repo === repo);
2138
- const q = answered.find((x) => x.id === ownId) ?? answered.find((x) => x.question.trim() === targetGroupQuestion(repo, f) && x.evidence.includes(own.evidence[0]));
2201
+ const q = answered.find((x) => x.id === ownId) ?? answered.find((x) => targetGroupWordings(repo, f, facts).includes(x.question.trim()) && x.evidence.includes(own.evidence[0]));
2139
2202
  return q?.answer?.match ? void 0 : q;
2140
2203
  }
2141
2204
  function answerReconfirmed(q) {
@@ -2158,7 +2221,7 @@ function callsOfTargetQuestion(repo, facts, q) {
2158
2221
  const own = targetQuestionFor(f);
2159
2222
  if (questionId({ step: TARGETS_STEP, repo, ...own }) === q.id)
2160
2223
  return true;
2161
- return targetGroupQuestion(repo, f) === q.question.trim() && q.evidence.includes(own.evidence[0]);
2224
+ return targetGroupWordings(repo, f, facts).includes(q.question.trim()) && q.evidence.includes(own.evidence[0]);
2162
2225
  });
2163
2226
  }
2164
2227
  function staleTargetQuestions(input) {
@@ -4896,6 +4959,17 @@ function fieldLineage(f, field) {
4896
4959
  }
4897
4960
 
4898
4961
  // packages/scanner/dist/hosts-asked.js
4962
+ var segs3 = (p) => p.split(/[?#]/)[0].split("/").filter(Boolean).map((x) => /^[{:<$]/.test(x) ? "{}" : x);
4963
+ var underPath = (path, base2) => {
4964
+ const b = segs3(base2);
4965
+ const c = segs3(path);
4966
+ return b.length > 0 && b.length <= c.length && b.every((x, i) => x === c[i]);
4967
+ };
4968
+ var servesPath = (entry, path) => {
4969
+ const e = segs3(entry);
4970
+ const c = segs3(path);
4971
+ return e.length === c.length && e.every((x, i) => x === "{}" || c[i] === "{}" || x === c[i]);
4972
+ };
4899
4973
  var HTTP_TYPES = /* @__PURE__ */ new Set(["rest", "graphql", "soap", "websocket", "sse", "webhook"]);
4900
4974
  var CONFIG_FILES = [
4901
4975
  "**/application*.properties",
@@ -4958,8 +5032,12 @@ async function unknownHosts(o) {
4958
5032
  const entry = byHost.get(h.label) ?? {
4959
5033
  ...h.port !== void 0 ? { port: h.port } : {},
4960
5034
  explicit: h.label !== h.host,
4961
- calls: []
5035
+ calls: [],
5036
+ paths: /* @__PURE__ */ new Set()
4962
5037
  };
5038
+ const path = /^[a-z][a-z0-9+.-]*:\/\/[^/?#]*(\/[^?#]*)?/i.exec(url)?.[1];
5039
+ if (path)
5040
+ entry.paths.add(path);
4963
5041
  const at3 = `${e.path}:${e.line}`;
4964
5042
  if (!entry.calls.some((c) => c.repo === repo && c.at === at3))
4965
5043
  entry.calls.push({ repo, at: at3 });
@@ -5012,6 +5090,25 @@ async function unknownHosts(o) {
5012
5090
  }
5013
5091
  const suggest = hits.length === 1 ? hits[0] : void 0;
5014
5092
  const calls = entry.calls.sort((a, b) => a.repo.localeCompare(b.repo) || a.at.localeCompare(b.at, "en", { numeric: true }));
5093
+ const byPath = [];
5094
+ for (const g of o.records) {
5095
+ if (g.kind !== "GatewayRoute")
5096
+ continue;
5097
+ const repo = g.evidence.find((e) => e.repo)?.repo;
5098
+ if (!repo || byPath.some((b) => b.repo === repo))
5099
+ continue;
5100
+ const under2 = [...entry.paths].filter((p) => underPath(p, g.basepath));
5101
+ if (!under2.length)
5102
+ continue;
5103
+ const comps = new Set([...compRepo].filter(([, r]) => r === repo).map(([c]) => c));
5104
+ const hit = o.records.find((r) => r.kind === "Endpoint" && comps.has(r.component) && under2.some((p) => servesPath(r.pathOrTopic, p)));
5105
+ byPath.push({
5106
+ repo,
5107
+ serves: hit ? [hit.method?.toUpperCase(), hit.pathOrTopic].filter(Boolean).join(" ") : `the routes under ${g.basepath}`
5108
+ });
5109
+ }
5110
+ byPath.sort((a, b) => a.repo.localeCompare(b.repo));
5111
+ const first = suggest ? [suggest.repo] : byPath.map((b) => b.repo).filter((x) => servers.includes(x));
5015
5112
  const about = Object.fromEntries(servers.flatMap((s) => {
5016
5113
  const d = o.repos.find((r) => r.id === s)?.description;
5017
5114
  return d ? [[s, { text: d.text, trust: d.trust }]] : [];
@@ -5019,9 +5116,10 @@ async function unknownHosts(o) {
5019
5116
  asks.push({
5020
5117
  host,
5021
5118
  calls,
5022
- servers: suggest ? [suggest.repo, ...servers.filter((s) => s !== suggest.repo)] : servers,
5119
+ servers: [...first, ...servers.filter((s) => !first.includes(s))],
5023
5120
  ...suggest ? { suggest } : {},
5024
- ...Object.keys(about).length ? { about } : {}
5121
+ ...Object.keys(about).length ? { about } : {},
5122
+ ...byPath.length ? { byPath } : {}
5025
5123
  });
5026
5124
  }
5027
5125
  return asks;
@@ -5032,18 +5130,24 @@ function aboutOf(a, repo) {
5032
5130
  return "";
5033
5131
  return d.trust === "suggested" ? `. What it is, as your assistant drafted it (unconfirmed): ${d.text}` : `. What it is: ${d.text}`;
5034
5132
  }
5133
+ function gatewayHostFix(host, byPath) {
5134
+ const repos = byPath.map((b) => b.repo);
5135
+ return `${repos.length === 1 ? `${repos[0]}'s routes serve` : `The routes of ${repos.join(", ")} serve`} the paths the calls to ${host} make, and no repo lists ${host}: it looks like a shared gateway's host. Once, not per call: list ${host} under hosts: on each proxy repo in repos.manifest.yaml (${repos.join(", ")}, and any other proxy on it); the path then picks the proxy, and this question retires itself`;
5136
+ }
5035
5137
  function hostQuestionDrafts(asks) {
5036
5138
  return asks.map((a) => {
5037
5139
  const repo = a.calls[0].repo;
5140
+ const byPath = new Map((a.byPath ?? []).map((b) => [b.repo, b.serves]));
5038
5141
  return {
5039
5142
  repo,
5143
+ ...a.byPath?.length ? { byPath: a.byPath } : {},
5040
5144
  draft: {
5041
5145
  question: hostQuestionText(a.host),
5042
5146
  options: [
5043
5147
  ...a.servers.map((s) => ({
5044
5148
  label: s,
5045
- means: (a.suggest?.repo === s ? `${s} serves HTTP, and its ${a.suggest.at} sets the port ${a.host.split(":").pop()} (${a.suggest.line})` : `${s} serves HTTP`) + aboutOf(a, s),
5046
- changes: `${a.host} goes under hosts for ${s} in repos.manifest.yaml, and the calls to it join ${s} on the next scan`
5149
+ means: (a.suggest?.repo === s ? `${s} serves HTTP, and its ${a.suggest.at} sets the port ${a.host.split(":").pop()} (${a.suggest.line})` : byPath.has(s) ? `${s} serves ${byPath.get(s)}, a path the calls to ${a.host} make` : `${s} serves HTTP`) + aboutOf(a, s),
5150
+ changes: byPath.has(s) ? `${a.host} goes under hosts for ${s} in repos.manifest.yaml, and the calls to it join ${s} on the next scan; on a shared gateway host, list it on each proxy repo instead (${[...byPath.keys()].join(", ")}, and any other proxy on it), and the path picks the proxy` : `${a.host} goes under hosts for ${s} in repos.manifest.yaml, and the calls to it join ${s} on the next scan`
5047
5151
  })),
5048
5152
  // O1: a system outside the estate, declared in the profile with the host as its alias.
5049
5153
  ...[
@@ -5162,12 +5266,12 @@ function parseLinkReference(source) {
5162
5266
  return { ok: true, reference: { ...estate ? { estate } : {}, repos } };
5163
5267
  }
5164
5268
  var stripped = (o) => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== void 0));
5165
- function segs3(path) {
5269
+ function segs4(path) {
5166
5270
  return path.split(/[?#]/)[0].split("/").filter(Boolean).map((s) => /^(\{[^}]*\}|:\w+|\*)$/.test(s) ? "{}" : s.toLowerCase());
5167
5271
  }
5168
5272
  function pathMatch(a, b) {
5169
- const x = segs3(a);
5170
- const y = segs3(b);
5273
+ const x = segs4(a);
5274
+ const y = segs4(b);
5171
5275
  if (x.length === y.length && x.every((s, i) => s === y[i]))
5172
5276
  return 2;
5173
5277
  const [short, long] = x.length < y.length ? [x, y] : [y, x];
@@ -5464,6 +5568,7 @@ export {
5464
5568
  curatedDirOf,
5465
5569
  TARGETS_MAX_SUGGESTED,
5466
5570
  TARGETS_ANOTHER,
5571
+ TARGETS_NO_EVIDENCE,
5467
5572
  nameWords,
5468
5573
  targetSuggestions,
5469
5574
  offeredSuggestions,
@@ -5474,12 +5579,15 @@ export {
5474
5579
  TARGETS_NONE,
5475
5580
  remapIds,
5476
5581
  targetQuestionFor,
5582
+ suggestionWhy,
5477
5583
  targetQuestionDrafts,
5478
5584
  TARGETS_SPLIT,
5479
5585
  targetPathPrefix,
5480
5586
  targetGroupQuestion,
5587
+ targetGroupWordings,
5481
5588
  splitTargetGroups,
5482
5589
  groupedTargetDrafts,
5590
+ targetRuleOffers,
5483
5591
  ruleCoversCall,
5484
5592
  ruledTargets,
5485
5593
  targetsFromAnswers,
@@ -5540,6 +5648,7 @@ export {
5540
5648
  fieldLineage,
5541
5649
  lineSetsPort,
5542
5650
  unknownHosts,
5651
+ gatewayHostFix,
5543
5652
  hostQuestionDrafts,
5544
5653
  parseLinkReference,
5545
5654
  measureLinks,
@@ -12,23 +12,23 @@ import {
12
12
  ruleLineOf,
13
13
  rulesCovering,
14
14
  taughtIn
15
- } from "./chunk-LS3WR2RF.js";
16
- import "./chunk-52WCHTVZ.js";
17
- import "./chunk-B3QOYE74.js";
18
- import "./chunk-LVBPY2M6.js";
19
- import "./chunk-ASKDCMW5.js";
20
- import "./chunk-LDIARP6F.js";
21
- import "./chunk-6RGIM2ZH.js";
22
- import "./chunk-IILZ7J3L.js";
23
- import "./chunk-TEBBD4XH.js";
24
- import "./chunk-XPWSNKF3.js";
25
- import "./chunk-WIMOJMAK.js";
26
- import "./chunk-5V5BJACL.js";
27
- import "./chunk-GVFUEGGM.js";
28
- import "./chunk-XZJE6WIT.js";
29
- import "./chunk-FMRMTI7W.js";
30
- import "./chunk-BKFGGJKA.js";
31
- import "./chunk-JMOLB347.js";
15
+ } from "./chunk-7C7PTJM2.js";
16
+ import "./chunk-XDTD55UU.js";
17
+ import "./chunk-CGF4LKXR.js";
18
+ import "./chunk-PAQDPB6T.js";
19
+ import "./chunk-6AYUBYK6.js";
20
+ import "./chunk-7VNEDDCC.js";
21
+ import "./chunk-J22RSFKY.js";
22
+ import "./chunk-DBZNQAMN.js";
23
+ import "./chunk-QR65C3DV.js";
24
+ import "./chunk-7VAMO66T.js";
25
+ import "./chunk-HY2VVVFZ.js";
26
+ import "./chunk-PJRMMWU4.js";
27
+ import "./chunk-34NWVIBC.js";
28
+ import "./chunk-RA64IK43.js";
29
+ import "./chunk-MRLCNXXR.js";
30
+ import "./chunk-CQD26SMZ.js";
31
+ import "./chunk-U25OX22K.js";
32
32
  import "./chunk-MMB2OHUY.js";
33
33
  import "./chunk-TV45EUGM.js";
34
34
  export {
@@ -5,18 +5,18 @@ var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
5
  var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
  import {
7
7
  contractCheckOf
8
- } from "./chunk-IA2RKC6I.js";
8
+ } from "./chunk-WFJMKUTR.js";
9
9
  import {
10
10
  readCatalog
11
- } from "./chunk-IILZ7J3L.js";
11
+ } from "./chunk-DBZNQAMN.js";
12
12
  import {
13
13
  frameworkFacts,
14
14
  frameworkGaps
15
- } from "./chunk-XPWSNKF3.js";
15
+ } from "./chunk-7VAMO66T.js";
16
16
  import {
17
17
  baseClonePath,
18
18
  loadRepos
19
- } from "./chunk-XZJE6WIT.js";
19
+ } from "./chunk-RA64IK43.js";
20
20
  import {
21
21
  auditItemHolds,
22
22
  auditPrecision,
@@ -30,7 +30,7 @@ import {
30
30
  parseAuditFile,
31
31
  parseFacts,
32
32
  require_dist
33
- } from "./chunk-JMOLB347.js";
33
+ } from "./chunk-U25OX22K.js";
34
34
  import {
35
35
  __toESM
36
36
  } from "./chunk-TV45EUGM.js";
@@ -300,8 +300,17 @@ async function trustView(root) {
300
300
  }
301
301
  function uiTrustRoutes(r, ctx) {
302
302
  return r.add("GET", "/api/trust", async () => ({ status: 200, body: await trustView(ctx.root) })).add("GET", "/api/trust/fresh", async () => {
303
- const { estateFreshness } = await import("./chunk-C75W7VXX.js");
304
- const body = await estateFreshness(ctx.root);
303
+ const { estateFreshness } = await import("./chunk-S4USA5WC.js");
304
+ const v = await estateFreshness(ctx.root);
305
+ const body = {
306
+ ...v,
307
+ repos: v.repos.map(({ rulesLacking: _r, ...r2 }) => {
308
+ if (r2.state !== "rules-changed")
309
+ return { ...r2, state: r2.state };
310
+ const { command: _c, slash: _s, ...x } = r2;
311
+ return { ...x, state: "fresh" };
312
+ })
313
+ };
305
314
  return { status: 200, body };
306
315
  });
307
316
  }