@maycombhq/atticus 2.0.0-beta.26 → 2.0.0-beta.27

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 (325) hide show
  1. package/dist/bin.js +3 -3
  2. package/dist/chunk-22A2K555.js +653 -0
  3. package/dist/{chunk-UTZMF5CV.js → chunk-23TTURB2.js} +1 -1
  4. package/dist/{chunk-XIGVTH24.js → chunk-2666BPJE.js} +19 -19
  5. package/dist/{chunk-KFZ5IXEZ.js → chunk-2ALBHI4Q.js} +28 -27
  6. package/dist/chunk-2ANBMA74.js +107 -0
  7. package/dist/{chunk-UIYPX2BA.js → chunk-2HCW6HXK.js} +27 -26
  8. package/dist/{chunk-DJBXXYYA.js → chunk-2ISR6MWD.js} +15 -15
  9. package/dist/{chunk-ZDA72732.js → chunk-2MRYL45Z.js} +50 -9
  10. package/dist/{chunk-DB3NWAU3.js → chunk-3GNUHLAN.js} +4 -4
  11. package/dist/chunk-3GURU22K.js +44 -0
  12. package/dist/{chunk-UFIQ5FWY.js → chunk-3M3MDBOG.js} +1 -1
  13. package/dist/{chunk-DHQXCP2X.js → chunk-3PBIZBWN.js} +1 -1
  14. package/dist/{chunk-7IWMRZRI.js → chunk-3PWXVBCB.js} +83 -40
  15. package/dist/chunk-3W2QX6TT.js +58 -0
  16. package/dist/{chunk-H7CSCA73.js → chunk-3Z7ATALI.js} +5 -5
  17. package/dist/{chunk-ZGULQAPZ.js → chunk-44SWXDD7.js} +8 -5
  18. package/dist/{chunk-IEIHVMM6.js → chunk-46N5O5H7.js} +5 -5
  19. package/dist/{chunk-4DHYXODN.js → chunk-4D4DNTFE.js} +4 -4
  20. package/dist/{chunk-B3JHERXM.js → chunk-4EAT7HOX.js} +7 -5
  21. package/dist/{chunk-OH2OHNB5.js → chunk-4FLIW5PJ.js} +4 -4
  22. package/dist/{chunk-PGDVJWCI.js → chunk-4LWA5VMJ.js} +52 -37
  23. package/dist/{chunk-YWQZ7CCW.js → chunk-4ODVHNA6.js} +18 -17
  24. package/dist/{chunk-IH6BYFMH.js → chunk-4POSAXNC.js} +6 -6
  25. package/dist/{chunk-D5H3RZNE.js → chunk-4PQ4KDOA.js} +16 -15
  26. package/dist/{chunk-RQM5Y3HJ.js → chunk-4UVTNHA6.js} +1 -1
  27. package/dist/{chunk-KVVNAUIG.js → chunk-4XK3HLOH.js} +1 -0
  28. package/dist/{chunk-ZQGFZJH5.js → chunk-523NRKHF.js} +4 -4
  29. package/dist/{chunk-GJSLO2E2.js → chunk-5GCCG3GJ.js} +11 -5
  30. package/dist/{chunk-VGGSHDQU.js → chunk-5XW6RUDV.js} +8 -8
  31. package/dist/{chunk-K35VNKJH.js → chunk-5YEUAZZE.js} +8 -8
  32. package/dist/{chunk-YEHSJY6B.js → chunk-62LD7CSY.js} +13 -13
  33. package/dist/{chunk-DB6TDJ4T.js → chunk-67Y2J55V.js} +22 -21
  34. package/dist/{chunk-KL7UHAOR.js → chunk-6DSZ4CL7.js} +36 -21
  35. package/dist/{chunk-WM4EMP7T.js → chunk-6G67LSBG.js} +283 -61
  36. package/dist/{chunk-TLBPTUFU.js → chunk-6OEB4FTC.js} +20 -19
  37. package/dist/{chunk-GXJ2PSDW.js → chunk-6OTGCKYH.js} +9 -9
  38. package/dist/{chunk-EQMNMG6X.js → chunk-6XLCMDIP.js} +13 -13
  39. package/dist/chunk-76DZJTU7.js +190 -0
  40. package/dist/chunk-7764GVJK.js +37 -0
  41. package/dist/{chunk-KS2IQYTZ.js → chunk-7BOGXFZ3.js} +11 -11
  42. package/dist/{chunk-ZA2PWNR3.js → chunk-7CVHKNAF.js} +16 -15
  43. package/dist/{chunk-LBBI5P5G.js → chunk-7FEIS3KV.js} +25 -24
  44. package/dist/{chunk-OXCHO2QS.js → chunk-7GXM45T5.js} +26 -23
  45. package/dist/{chunk-YLXPJWNO.js → chunk-7YMAMNMT.js} +17 -16
  46. package/dist/chunk-7YWS47SE.js +56 -0
  47. package/dist/{chunk-LZFKJ2BR.js → chunk-A3LVMCA5.js} +1 -1
  48. package/dist/{chunk-PXDAGXQN.js → chunk-A7ZJKLFC.js} +11 -11
  49. package/dist/chunk-AANQC5QP.js +47 -0
  50. package/dist/{chunk-HV6PXXK7.js → chunk-AIQLTDC3.js} +3 -3
  51. package/dist/{chunk-PFWP624T.js → chunk-AKZTCZ6F.js} +4 -4
  52. package/dist/{chunk-KAWWXCPI.js → chunk-ALCSTVWQ.js} +3 -3
  53. package/dist/{chunk-7ZBYRMWK.js → chunk-ALUHO7SE.js} +26 -25
  54. package/dist/{chunk-3KP7OOJ4.js → chunk-AMZ4XMES.js} +8 -8
  55. package/dist/{chunk-V5ZKGBYL.js → chunk-AOQG37K4.js} +8 -6
  56. package/dist/{chunk-CNT6T2JM.js → chunk-ARXZTHEI.js} +16 -15
  57. package/dist/{chunk-KFJMQUSK.js → chunk-AS4CTARY.js} +16 -15
  58. package/dist/{chunk-MM7JSMLW.js → chunk-AVUPW23W.js} +18 -17
  59. package/dist/{chunk-NQDVD2YR.js → chunk-B56FCIEJ.js} +12 -12
  60. package/dist/{chunk-CPE7HLIK.js → chunk-BABATPOZ.js} +18 -17
  61. package/dist/{chunk-63572EFC.js → chunk-BIOKDLLX.js} +21 -19
  62. package/dist/{chunk-D4TW3PUO.js → chunk-BUBKKEUV.js} +5 -5
  63. package/dist/{chunk-FOOU5OJE.js → chunk-CDC6VECU.js} +3 -3
  64. package/dist/chunk-CHEFUNZ4.js +425 -0
  65. package/dist/{chunk-IL7PVMUO.js → chunk-CIFR3DPV.js} +6 -6
  66. package/dist/{chunk-DS5M2J2H.js → chunk-CLBVKD4P.js} +16 -15
  67. package/dist/{chunk-2FTHLB2H.js → chunk-CLM5Z3R5.js} +5 -5
  68. package/dist/{chunk-CFK6CFXM.js → chunk-CLYV5MB6.js} +9 -9
  69. package/dist/{chunk-KZ4I5M2X.js → chunk-CRYIBCGP.js} +37 -19
  70. package/dist/{chunk-PLSCWC2V.js → chunk-D3L5SO27.js} +5 -5
  71. package/dist/chunk-DAZM2INZ.js +34 -0
  72. package/dist/{chunk-I72PEROE.js → chunk-DF4BXBB2.js} +6 -6
  73. package/dist/{chunk-PZFZPHCT.js → chunk-E7Q52EOO.js} +11 -11
  74. package/dist/{chunk-R2FUFBHW.js → chunk-EFDUC35B.js} +3 -3
  75. package/dist/{chunk-43OWNS5N.js → chunk-EHXEJFHD.js} +5 -5
  76. package/dist/{chunk-HQMLY2R6.js → chunk-ELJ5Q4J2.js} +2 -2
  77. package/dist/{chunk-F4EGHECF.js → chunk-EM6DKBTJ.js} +3 -3
  78. package/dist/{chunk-UZBLVNW6.js → chunk-EMC46SU4.js} +38 -17
  79. package/dist/{chunk-F6GRBF5L.js → chunk-EQEDIWFQ.js} +25 -24
  80. package/dist/chunk-EW574EZI.js +57 -0
  81. package/dist/{chunk-HSJKYDHI.js → chunk-EYINWNXL.js} +5 -5
  82. package/dist/{chunk-KUEG2Y7M.js → chunk-EYVYHYCA.js} +8 -8
  83. package/dist/{chunk-ELR7DEQM.js → chunk-F66542M6.js} +34 -9
  84. package/dist/{chunk-RCLBIJRN.js → chunk-F74OMLNU.js} +6 -6
  85. package/dist/{chunk-PBDIVTFL.js → chunk-FADIWOA5.js} +3 -3
  86. package/dist/{chunk-LHN5UCXD.js → chunk-FC3ZVD3O.js} +3 -3
  87. package/dist/{chunk-DXLWZ3BJ.js → chunk-FG65LXED.js} +8 -8
  88. package/dist/{chunk-V5FT3MZG.js → chunk-FKAUBC4Y.js} +8 -8
  89. package/dist/{chunk-RBO4A7TC.js → chunk-FM3EEDS2.js} +15 -15
  90. package/dist/{chunk-TYN5SG5H.js → chunk-FS4E7F6O.js} +403 -148
  91. package/dist/{chunk-HVWPN2RY.js → chunk-FSYJPYLE.js} +16 -15
  92. package/dist/{chunk-IBIIKUC7.js → chunk-G33UIUG3.js} +46 -20
  93. package/dist/{chunk-4NWE2KY3.js → chunk-G3F4BYML.js} +15 -14
  94. package/dist/{chunk-2GT47PWU.js → chunk-GBJRFFDW.js} +5 -5
  95. package/dist/{chunk-NMURRF5F.js → chunk-GF6GBHFN.js} +13 -11
  96. package/dist/{chunk-C3TBDX7Y.js → chunk-GLHOUT5E.js} +26 -25
  97. package/dist/{chunk-ZWMHL346.js → chunk-GM6GXO2A.js} +20 -19
  98. package/dist/{chunk-MKUBDKE2.js → chunk-GSJ2RXE7.js} +29 -28
  99. package/dist/{chunk-YJBD5NDV.js → chunk-GT72FDER.js} +6 -6
  100. package/dist/{chunk-BEEHCL5O.js → chunk-GW6ZH77P.js} +37 -36
  101. package/dist/{chunk-BABRMZET.js → chunk-GZILYRGC.js} +3 -3
  102. package/dist/{chunk-5JGRF53S.js → chunk-GZSOZYEP.js} +3 -3
  103. package/dist/{chunk-IP6ARMZU.js → chunk-H25QNDKK.js} +58 -36
  104. package/dist/{chunk-BIAQ6NQS.js → chunk-H3RKW4RF.js} +7 -7
  105. package/dist/chunk-H7M7ZH6H.js +52 -0
  106. package/dist/chunk-H7NRWSMP.js +55 -0
  107. package/dist/{chunk-2JT4QV3Q.js → chunk-HDWVR5KD.js} +4 -4
  108. package/dist/{chunk-UAYU6K24.js → chunk-HG24EF5S.js} +16 -15
  109. package/dist/chunk-HPNYSY5M.js +1068 -0
  110. package/dist/{chunk-JJEXMHNZ.js → chunk-HUMM4S5I.js} +6 -6
  111. package/dist/{chunk-DARX3ATP.js → chunk-HVPS2YCW.js} +11 -11
  112. package/dist/{chunk-IGOE6KPG.js → chunk-I34CXV2C.js} +185 -11
  113. package/dist/{chunk-6U65YB54.js → chunk-I57IH5X6.js} +360 -271
  114. package/dist/{chunk-WYO4L4NU.js → chunk-I5X4WU7U.js} +6 -6
  115. package/dist/chunk-IAVVJ34R.js +55 -0
  116. package/dist/chunk-IBJE2E2S.js +51 -0
  117. package/dist/{chunk-HNNMT5L2.js → chunk-IF3X6FMO.js} +1 -1
  118. package/dist/{chunk-CUTMM4NY.js → chunk-IJHJIL6T.js} +154 -25
  119. package/dist/chunk-IM435QAM.js +72 -0
  120. package/dist/{chunk-MQ6HP2TU.js → chunk-IMBJ7WAO.js} +6 -6
  121. package/dist/{chunk-5A4RHEEL.js → chunk-INCFIDCB.js} +2 -2
  122. package/dist/{chunk-RTCZKKG7.js → chunk-IPMPLTEG.js} +3 -3
  123. package/dist/{chunk-QAFQLILX.js → chunk-IPSZDVLI.js} +12 -12
  124. package/dist/{chunk-JLTJAOO4.js → chunk-IX2EOYOU.js} +50 -13
  125. package/dist/{chunk-DOU52XFZ.js → chunk-IXNMGPF7.js} +61 -28
  126. package/dist/{chunk-XT3ZW7C7.js → chunk-J6GO3K7G.js} +19 -18
  127. package/dist/chunk-JBLM6IUA.js +42 -0
  128. package/dist/{chunk-CSHJZFOE.js → chunk-JL2VOYSL.js} +91 -93
  129. package/dist/{chunk-ACY3U2RD.js → chunk-JRXFZB6J.js} +8 -8
  130. package/dist/{chunk-P6EJNPFF.js → chunk-JTOLBS7R.js} +951 -409
  131. package/dist/{chunk-FYCN2Y5P.js → chunk-K73BHPTQ.js} +19 -18
  132. package/dist/{chunk-EVKDWJ5Y.js → chunk-KF7KVUNJ.js} +5 -5
  133. package/dist/{chunk-SRB54QGX.js → chunk-KKUCBKJE.js} +20 -19
  134. package/dist/{chunk-LTOBNBJ6.js → chunk-KLFFHBWG.js} +27 -26
  135. package/dist/{chunk-DXBXZNKV.js → chunk-KMYB2XO7.js} +21 -13
  136. package/dist/chunk-KNYQUWFN.js +52 -0
  137. package/dist/{chunk-6EMJ4XFC.js → chunk-KOAJPMU2.js} +31 -20
  138. package/dist/chunk-KRTSE73S.js +55 -0
  139. package/dist/{chunk-GAJBMPWC.js → chunk-L3AM5YRP.js} +28 -9
  140. package/dist/{chunk-YYV276DM.js → chunk-LCIIFAID.js} +22 -21
  141. package/dist/{chunk-SZDOBIWE.js → chunk-LCQIRCOT.js} +55 -10
  142. package/dist/{chunk-OI32KTDM.js → chunk-LFHBAWIM.js} +13 -13
  143. package/dist/chunk-LIHEMWIT.js +39 -0
  144. package/dist/{chunk-CG6MG7SE.js → chunk-LJLYWILK.js} +14 -14
  145. package/dist/{chunk-6SIGGA37.js → chunk-LNJKDS5C.js} +26 -25
  146. package/dist/{chunk-3GEAUW62.js → chunk-LTHY7E2P.js} +16 -15
  147. package/dist/{chunk-RO6BE7ZS.js → chunk-LTVOQJKT.js} +7 -7
  148. package/dist/{chunk-BD7HBZLP.js → chunk-LZO3JABE.js} +6 -6
  149. package/dist/{chunk-PXMV2LLY.js → chunk-M65AZ4ZE.js} +3 -5
  150. package/dist/chunk-MPNTEWNY.js +492 -0
  151. package/dist/chunk-MQGQ3AWK.js +58 -0
  152. package/dist/{chunk-ZNYSBQIA.js → chunk-MUXYUIBV.js} +6 -6
  153. package/dist/{chunk-CNEOKSTO.js → chunk-MWRRJDXQ.js} +34 -31
  154. package/dist/{chunk-VJO7M34N.js → chunk-MZDHFWTN.js} +2 -2
  155. package/dist/chunk-N2XCT5OX.js +68 -0
  156. package/dist/{chunk-2IO6XH37.js → chunk-N3JGYAMD.js} +15 -15
  157. package/dist/{chunk-K3QKOVZN.js → chunk-N5DLB74D.js} +367 -71
  158. package/dist/{chunk-H5BIVULF.js → chunk-NC3Q7RIB.js} +10 -10
  159. package/dist/{chunk-HVOE7ZW2.js → chunk-NCNLX4DL.js} +19 -18
  160. package/dist/{chunk-3D74UADA.js → chunk-NGSGJLKW.js} +2 -2
  161. package/dist/{chunk-B7KGNEFI.js → chunk-NN7K2LLN.js} +25 -24
  162. package/dist/{chunk-76AHTJVY.js → chunk-NNURP7VO.js} +15 -15
  163. package/dist/chunk-NSQB24WR.js +56 -0
  164. package/dist/{chunk-GFFTVQ7R.js → chunk-NV5S63YK.js} +7 -7
  165. package/dist/{chunk-CTJHEG6A.js → chunk-NWMFVPEP.js} +2 -0
  166. package/dist/{chunk-7JZONWAA.js → chunk-NYT6QGZA.js} +22 -18
  167. package/dist/chunk-OB2DAIJX.js +62 -0
  168. package/dist/{chunk-IZIGZ7KY.js → chunk-OC3OXDTG.js} +13 -8
  169. package/dist/{chunk-2XIIUXGX.js → chunk-OD6RNYMQ.js} +16 -16
  170. package/dist/{chunk-723OQZ3N.js → chunk-OFYBRMRG.js} +6 -6
  171. package/dist/chunk-OGTELPDN.js +43 -0
  172. package/dist/{chunk-E5NHFHGC.js → chunk-OQ7SBQ2Z.js} +7 -7
  173. package/dist/{chunk-6TZ4YRGJ.js → chunk-OUDGBJC2.js} +16 -9
  174. package/dist/{chunk-W4SMKUAK.js → chunk-OUGTAOGA.js} +2 -2
  175. package/dist/chunk-OWP5FCYM.js +60 -0
  176. package/dist/{chunk-ET7SPOBA.js → chunk-P36PTWBM.js} +8 -8
  177. package/dist/{chunk-64LSDT3D.js → chunk-P6Y2J2QY.js} +12 -12
  178. package/dist/{chunk-ANFBBJEV.js → chunk-PDJL2HO5.js} +24 -22
  179. package/dist/{chunk-UXVKFOMC.js → chunk-PPKH6ULR.js} +152 -20
  180. package/dist/{chunk-WLA2JZ2K.js → chunk-Q4PFF2ZE.js} +8 -8
  181. package/dist/chunk-Q7EUPQEG.js +5 -0
  182. package/dist/{chunk-2HDNOUJU.js → chunk-QC6GSNIK.js} +7055 -3456
  183. package/dist/chunk-QCRQNYGI.js +211 -0
  184. package/dist/chunk-QDF533AW.js +90 -0
  185. package/dist/chunk-QDGNDNBG.js +50 -0
  186. package/dist/{chunk-HWPX3T55.js → chunk-QGMD3PYL.js} +31 -24
  187. package/dist/{chunk-VCXFMXMX.js → chunk-QLT3WYTD.js} +6 -6
  188. package/dist/{chunk-ZFLBWL2G.js → chunk-QNDMAKQS.js} +11 -3
  189. package/dist/{chunk-UWBPC5XH.js → chunk-QNXMVJMA.js} +8 -8
  190. package/dist/{chunk-XDLMQL5A.js → chunk-QPAANKUR.js} +7 -7
  191. package/dist/{chunk-BGOAJFPB.js → chunk-QS4VX3HZ.js} +1 -1
  192. package/dist/{chunk-YIOYKA4V.js → chunk-QSM4K6LI.js} +7 -7
  193. package/dist/{chunk-TPKJD42W.js → chunk-QUFZDWPC.js} +8 -8
  194. package/dist/{chunk-QXCGRQGO.js → chunk-QXXEOH3A.js} +18 -6
  195. package/dist/{chunk-QA4O2GGC.js → chunk-R4TUWD4C.js} +17 -1
  196. package/dist/{chunk-UJ5ZJS4B.js → chunk-ROI64BAI.js} +22 -21
  197. package/dist/{chunk-LCRQPWTC.js → chunk-RPVL3RTX.js} +19 -18
  198. package/dist/{chunk-QQAWI5LD.js → chunk-RUNHVUCW.js} +16 -15
  199. package/dist/{chunk-7AEB74KW.js → chunk-RWYPLODE.js} +9 -9
  200. package/dist/{chunk-VTR4AC2U.js → chunk-RZYRUXSU.js} +4 -4
  201. package/dist/{chunk-CWLXVRFH.js → chunk-S6TLXRBR.js} +7 -7
  202. package/dist/{chunk-Z33UNTHI.js → chunk-SCOP3J6X.js} +7 -7
  203. package/dist/{chunk-XEWFVHOT.js → chunk-SCP24MJX.js} +24 -23
  204. package/dist/{chunk-MCORC2LG.js → chunk-SF3HXNXR.js} +6 -6
  205. package/dist/{chunk-BSZII65X.js → chunk-SFCFL7Y5.js} +1 -1
  206. package/dist/{chunk-LY7DOYX2.js → chunk-SHFY73RI.js} +53 -112
  207. package/dist/{chunk-IERXBWQU.js → chunk-SHIARIEZ.js} +20 -19
  208. package/dist/chunk-SMFFUFMN.js +1876 -0
  209. package/dist/{chunk-WH3ZFLXT.js → chunk-SVOGRJO6.js} +197 -124
  210. package/dist/chunk-SVZAAOHJ.js +46 -0
  211. package/dist/{chunk-NCZS2BN2.js → chunk-SZOU32VF.js} +21 -20
  212. package/dist/{chunk-MTIRNHRJ.js → chunk-T2MN24LZ.js} +1 -1
  213. package/dist/{chunk-KZH5YV6J.js → chunk-TD5WWJLN.js} +6 -6
  214. package/dist/{chunk-UBEFT3MQ.js → chunk-TFN2N227.js} +6 -6
  215. package/dist/{chunk-BIKMME4S.js → chunk-TFXNOQEU.js} +28 -27
  216. package/dist/{chunk-6P67IUET.js → chunk-TMETWJFO.js} +11 -11
  217. package/dist/chunk-TNSAIISO.js +50 -0
  218. package/dist/{chunk-SDHGFMES.js → chunk-TRJO2I4S.js} +3 -3
  219. package/dist/{chunk-NVVEVP5O.js → chunk-TRSNIJNM.js} +7 -7
  220. package/dist/{chunk-VIQHZA53.js → chunk-U3Z2QZE3.js} +6 -6
  221. package/dist/{chunk-TQG2DDWH.js → chunk-U7L3ORPK.js} +22 -21
  222. package/dist/{chunk-3KIMLBGZ.js → chunk-UDM6HGF4.js} +6 -6
  223. package/dist/{chunk-NMCPIYTF.js → chunk-UDM7LXNJ.js} +7 -7
  224. package/dist/chunk-UDTO3U6E.js +35 -0
  225. package/dist/{chunk-ZFEOIYK5.js → chunk-UEUPEUZX.js} +3 -3
  226. package/dist/chunk-UWBODTY7.js +514 -0
  227. package/dist/{chunk-BIWNRS5I.js → chunk-UYYYQTPD.js} +78 -47
  228. package/dist/{chunk-IDRCBMJF.js → chunk-V34N6JAN.js} +32 -31
  229. package/dist/{chunk-EY3OVHNC.js → chunk-V3Y5P7OS.js} +24 -23
  230. package/dist/chunk-V6MLVGTP.js +89 -0
  231. package/dist/{chunk-EECFUQP3.js → chunk-VC2XHC7P.js} +184 -46
  232. package/dist/{chunk-H26T2LQL.js → chunk-VCYE4MUD.js} +29 -28
  233. package/dist/{chunk-EUTZTJIO.js → chunk-VN2VJ6BV.js} +19 -15
  234. package/dist/{chunk-P6DM2EFI.js → chunk-VVLWEM2Y.js} +6 -6
  235. package/dist/{chunk-YXKCE5BA.js → chunk-VWCNMDMZ.js} +5 -5
  236. package/dist/{chunk-BV2BZIUF.js → chunk-W2A4NHQD.js} +25 -24
  237. package/dist/{chunk-VPQUFIE7.js → chunk-W6OY2PMB.js} +10 -10
  238. package/dist/{chunk-FIZ5LYL2.js → chunk-WC6DHBVG.js} +16 -15
  239. package/dist/{chunk-GHST3KAB.js → chunk-WCA3WIGG.js} +5 -5
  240. package/dist/{chunk-6ZDAEUKB.js → chunk-WJWSB65O.js} +1602 -452
  241. package/dist/{chunk-IFQJ3YQE.js → chunk-WNPGLGCJ.js} +5 -5
  242. package/dist/chunk-WTOVWEY3.js +67 -0
  243. package/dist/{chunk-XIJBQM45.js → chunk-X5B7KYPD.js} +507 -20
  244. package/dist/{chunk-ZLBUFK7L.js → chunk-X73WLHSN.js} +7 -7
  245. package/dist/{chunk-GNFZ227W.js → chunk-XIIT4PVT.js} +3 -3
  246. package/dist/{chunk-U3JXMY56.js → chunk-XLTT5QCX.js} +28 -25
  247. package/dist/{chunk-5UIGGXA5.js → chunk-XMIS25ZJ.js} +21 -20
  248. package/dist/{chunk-IYEET4VM.js → chunk-XPDQ4T6G.js} +27 -26
  249. package/dist/{chunk-WT6EXYEY.js → chunk-XRWUYOX3.js} +138 -22
  250. package/dist/{chunk-I2EWY3MG.js → chunk-XZY4GTCX.js} +14 -9
  251. package/dist/{chunk-2SCZZQNQ.js → chunk-Y2TVTI4P.js} +121 -15
  252. package/dist/{chunk-Q3RKXK5Z.js → chunk-Y2U4CSCA.js} +28 -27
  253. package/dist/chunk-Y2U63JKE.js +41 -0
  254. package/dist/{chunk-V3M4VFUB.js → chunk-Y6S7VCYN.js} +6 -6
  255. package/dist/{chunk-SAPX3PVK.js → chunk-YAPMGK7E.js} +11 -11
  256. package/dist/{chunk-MY3LDBMR.js → chunk-YAPVAYZN.js} +3 -3
  257. package/dist/{chunk-ZYLGEWTC.js → chunk-YCBDNWX3.js} +78 -57
  258. package/dist/{chunk-RK5P2DWD.js → chunk-YIGSUTW2.js} +1329 -92
  259. package/dist/{chunk-XI3GPYP4.js → chunk-YJTBE6AJ.js} +5 -5
  260. package/dist/chunk-YQ3IXQIH.js +185 -0
  261. package/dist/{chunk-MZXDSAKW.js → chunk-YRHKEXTP.js} +11 -11
  262. package/dist/{chunk-DPH4BS3F.js → chunk-YSSFS3YC.js} +17 -17
  263. package/dist/{chunk-ISCX25D7.js → chunk-YXG2VQJJ.js} +200 -56
  264. package/dist/{chunk-VUSYN4R4.js → chunk-Z4GLFTEH.js} +8 -8
  265. package/dist/{chunk-NP3PG6OI.js → chunk-Z65FWO6A.js} +157 -89
  266. package/dist/{chunk-KJD4DLRZ.js → chunk-ZDG637ZT.js} +22 -21
  267. package/dist/{chunk-DASVVML7.js → chunk-ZIAMPN7N.js} +6 -6
  268. package/dist/chunk-ZIIBQHCX.js +53 -0
  269. package/dist/{chunk-IJN5PSDU.js → chunk-ZJJMYPGZ.js} +57 -27
  270. package/dist/{chunk-NECDBPFP.js → chunk-ZOAX7W5S.js} +11 -11
  271. package/dist/chunk-ZSSR5GGB.js +48 -0
  272. package/dist/files.json +657 -553
  273. package/dist/fixtures/forge/expected/crosscheck.json +726 -0
  274. package/dist/fixtures/forge/slots/README.md +13 -0
  275. package/dist/fixtures/forge/slots/build.json +2686 -0
  276. package/dist/fixtures/forge/slots/crosscheck/forge-ledger.crosscheck.yaml +8 -0
  277. package/dist/fixtures/forge/slots/facts/forge-ledger.jsonl +17 -0
  278. package/dist/fixtures/forge/slots/facts/forge-ledger.meta.json +9 -0
  279. package/dist/fixtures/forge/slots/legacy/joins.json +113 -0
  280. package/dist/fixtures/forge/slots/readers/forge-events.json +306 -0
  281. package/dist/fixtures/forge/slots/readers/forge-gateway.json +238 -0
  282. package/dist/fixtures/forge/slots/readers/forge-infra.json +264 -0
  283. package/dist/fixtures/forge/slots/readers/forge-ledger.json +756 -0
  284. package/dist/fixtures/forge/slots/readers/forge-portal-bff.json +349 -0
  285. package/dist/fixtures/forge/slots/readers/forge-portal-ui.json +214 -0
  286. package/dist/fixtures/forge/slots/readers/forge-reports-job.json +258 -0
  287. package/dist/packages/sdk/npm/index.js +3788 -2939
  288. package/dist/packages/ui/dist/assets/{elk-api-BdXSPeBO.js → elk-api-CPE6PVL8.js} +2 -2
  289. package/dist/packages/ui/dist/assets/index-BYcVqj0l.js +65 -0
  290. package/dist/packages/ui/dist/assets/index-DF52Ejvz.css +1 -0
  291. package/dist/packages/ui/dist/index.html +2 -2
  292. package/package.json +4 -4
  293. package/dist/chunk-24OXGB3P.js +0 -82
  294. package/dist/chunk-3FFIDQQB.js +0 -42
  295. package/dist/chunk-4N5W7LYW.js +0 -41
  296. package/dist/chunk-7NVLGPER.js +0 -45
  297. package/dist/chunk-A6LGX56J.js +0 -52
  298. package/dist/chunk-AHACUPGL.js +0 -46
  299. package/dist/chunk-DG7KYZAL.js +0 -40
  300. package/dist/chunk-DWD6BKHG.js +0 -52
  301. package/dist/chunk-EEVSFGIU.js +0 -50
  302. package/dist/chunk-EN3N6LNU.js +0 -52
  303. package/dist/chunk-FWQDH5NK.js +0 -55
  304. package/dist/chunk-GHCFWIUW.js +0 -38
  305. package/dist/chunk-GSIJWDXH.js +0 -43
  306. package/dist/chunk-HCC5547C.js +0 -232
  307. package/dist/chunk-HLDUWEO7.js +0 -36
  308. package/dist/chunk-K2NQTROJ.js +0 -170
  309. package/dist/chunk-LH4WAJLC.js +0 -45
  310. package/dist/chunk-M5IQUWJR.js +0 -59
  311. package/dist/chunk-MEMEO7YO.js +0 -988
  312. package/dist/chunk-MGNO4Q6V.js +0 -51
  313. package/dist/chunk-MZ6GOFRF.js +0 -55
  314. package/dist/chunk-N2AW2DHF.js +0 -51
  315. package/dist/chunk-N35Y5HZO.js +0 -47
  316. package/dist/chunk-NHFMLMLN.js +0 -257
  317. package/dist/chunk-PR6Z5L7W.js +0 -67
  318. package/dist/chunk-STBJ6SVJ.js +0 -50
  319. package/dist/chunk-U3RGBYXE.js +0 -62
  320. package/dist/chunk-URZKIL37.js +0 -42
  321. package/dist/chunk-W7HNZDHB.js +0 -71
  322. package/dist/chunk-YYZWSVIS.js +0 -33
  323. package/dist/chunk-ZAMSF2DF.js +0 -54
  324. package/dist/packages/ui/dist/assets/index-DRSUhpFi.css +0 -1
  325. package/dist/packages/ui/dist/assets/index-RZe5iotJ.js +0 -63
@@ -7,14 +7,14 @@ import {
7
7
  changesDirOf,
8
8
  orgPackDirOf,
9
9
  toCanonicalYaml
10
- } from "./chunk-6ZDAEUKB.js";
10
+ } from "./chunk-WJWSB65O.js";
11
11
  import {
12
12
  renameRetrying
13
- } from "./chunk-MEMEO7YO.js";
13
+ } from "./chunk-SMFFUFMN.js";
14
14
  import {
15
15
  ManualStep,
16
16
  external_exports
17
- } from "./chunk-LZFKJ2BR.js";
17
+ } from "./chunk-A3LVMCA5.js";
18
18
  import {
19
19
  require_dist
20
20
  } from "./chunk-BQGDB6ZL.js";
@@ -22,6 +22,150 @@ import {
22
22
  __toESM
23
23
  } from "./chunk-TV45EUGM.js";
24
24
 
25
+ // packages/adapters/dist/common.js
26
+ var Approval = external_exports.strictObject({
27
+ /** The person who approved: a handle from the Git host or directory. */
28
+ by: external_exports.string().min(1),
29
+ at: external_exports.iso.datetime({ offset: true }),
30
+ scope: external_exports.enum(["once", "standing"]).default("once"),
31
+ /** What was approved, e.g. a finding, hand-off PR or artifact path. */
32
+ ref: external_exports.string().min(1)
33
+ });
34
+ var AdapterError = class extends Error {
35
+ adapter;
36
+ code;
37
+ retryable;
38
+ constructor(adapter, code, message, retryable = code === "rate-limited" || code === "unavailable") {
39
+ super(`${adapter}: ${message}`);
40
+ this.adapter = adapter;
41
+ this.code = code;
42
+ this.retryable = retryable;
43
+ this.name = "AdapterError";
44
+ }
45
+ };
46
+ function requireApproval(adapter, approval, opts = {}) {
47
+ const r = Approval.safeParse(approval);
48
+ if (!r.success) {
49
+ throw new AdapterError(adapter, "not-approved", "this write needs a person's approval (by, at, ref)");
50
+ }
51
+ if (r.data.scope === "standing" && !opts.allowStanding) {
52
+ throw new AdapterError(adapter, "not-approved", "a standing approval can't cover this write; it needs approval each time");
53
+ }
54
+ return r.data;
55
+ }
56
+ var MockBase = class {
57
+ name;
58
+ journal = [];
59
+ failures = [];
60
+ constructor(name) {
61
+ this.name = name;
62
+ }
63
+ failNext(code, method) {
64
+ this.failures.push(method === void 0 ? { code } : { code, method });
65
+ }
66
+ /** Record a call and raise an injected failure if one is due. */
67
+ call(method, args, approval) {
68
+ const i = this.failures.findIndex((f) => f.method === void 0 || f.method === method);
69
+ if (i !== -1) {
70
+ const [f] = this.failures.splice(i, 1);
71
+ throw new AdapterError(this.name, f.code, `injected ${f.code} on ${method}`);
72
+ }
73
+ this.journal.push(approval ? { adapter: this.name, method, args, approval } : { adapter: this.name, method, args });
74
+ }
75
+ notFound(what) {
76
+ throw new AdapterError(this.name, "not-found", `${what} not found`);
77
+ }
78
+ };
79
+
80
+ // packages/adapters/dist/work-tracker.js
81
+ var MockWorkTracker = class _MockWorkTracker extends MockBase {
82
+ items = /* @__PURE__ */ new Map();
83
+ links = [];
84
+ next = 1e3;
85
+ constructor(seed = []) {
86
+ super("work-tracker");
87
+ for (const i of seed)
88
+ this.items.set(i.id, { ...i });
89
+ }
90
+ /** Load the shape the fixture's ticket export uses. */
91
+ static fromExport(rows) {
92
+ const type = (t) => {
93
+ const k = t.toLowerCase();
94
+ if (k.includes("story"))
95
+ return "story";
96
+ if (k.includes("epic"))
97
+ return "epic";
98
+ if (k.includes("feature"))
99
+ return "feature";
100
+ if (k.includes("bug"))
101
+ return "bug";
102
+ return "task";
103
+ };
104
+ return new _MockWorkTracker(rows.map((r) => ({
105
+ id: String(r.id),
106
+ type: type(r.type),
107
+ title: r.title,
108
+ description: r.description ?? "",
109
+ acceptanceCriteria: r.acceptanceCriteria ?? "",
110
+ state: r.state ?? "New",
111
+ tags: [],
112
+ url: `https://work.example.com/items/${r.id}`
113
+ })));
114
+ }
115
+ async getItem(id) {
116
+ this.call("getItem", [id]);
117
+ return { ...this.items.get(id) ?? this.notFound(`work item ${id}`) };
118
+ }
119
+ async query(q) {
120
+ this.call("query", [q]);
121
+ const text = q.text?.toLowerCase();
122
+ return [...this.items.values()].filter((i) => (!q.type || i.type === q.type) && (!q.parent || i.parent === q.parent) && (!q.state || i.state === q.state) && (!q.tag || i.tags.includes(q.tag)) && (!text || i.title.toLowerCase().includes(text) || i.description.toLowerCase().includes(text))).map((i) => ({ ...i }));
123
+ }
124
+ async createItem(input, approval) {
125
+ const a = requireApproval(this.name, approval);
126
+ this.call("createItem", [input], a);
127
+ if (input.parent && !this.items.has(input.parent))
128
+ this.notFound(`parent ${input.parent}`);
129
+ const id = String(this.next++);
130
+ const item = {
131
+ id,
132
+ type: input.type,
133
+ title: input.title,
134
+ description: input.description ?? "",
135
+ acceptanceCriteria: input.acceptanceCriteria ?? "",
136
+ state: "New",
137
+ ...input.parent ? { parent: input.parent } : {},
138
+ ...input.assignee ? { assignee: input.assignee } : {},
139
+ tags: input.tags ?? [],
140
+ url: `https://work.example.com/items/${id}`
141
+ };
142
+ this.items.set(id, item);
143
+ return { ...item };
144
+ }
145
+ async updateItem(id, patch, approval) {
146
+ const a = requireApproval(this.name, approval);
147
+ this.call("updateItem", [id, patch], a);
148
+ const item = this.items.get(id) ?? this.notFound(`work item ${id}`);
149
+ const updated = {
150
+ ...item,
151
+ ...Object.fromEntries(Object.entries(patch).filter(([, v]) => v !== void 0))
152
+ };
153
+ this.items.set(id, updated);
154
+ return { ...updated };
155
+ }
156
+ async link(from, to, kind, approval) {
157
+ const a = requireApproval(this.name, approval);
158
+ this.call("link", [from, to, kind], a);
159
+ if (!this.items.has(from))
160
+ this.notFound(`work item ${from}`);
161
+ if (!this.items.has(to))
162
+ this.notFound(`work item ${to}`);
163
+ this.links.push({ from, to, kind });
164
+ if (kind === "parent")
165
+ this.items.get(from).parent = to;
166
+ }
167
+ };
168
+
25
169
  // packages/adapters/dist/work-item-csv.js
26
170
  var ADO_COLUMNS = [
27
171
  "ID",
@@ -124,58 +268,62 @@ function workItemsCsv(stories, o = {}) {
124
268
  `).join("");
125
269
  }
126
270
 
127
- // packages/adapters/dist/common.js
128
- var Approval = external_exports.strictObject({
129
- /** The person who approved: a handle from the Git host or directory. */
130
- by: external_exports.string().min(1),
131
- at: external_exports.iso.datetime({ offset: true }),
132
- scope: external_exports.enum(["once", "standing"]).default("once"),
133
- /** What was approved, e.g. a finding, hand-off PR or artifact path. */
134
- ref: external_exports.string().min(1)
135
- });
136
- var AdapterError = class extends Error {
137
- adapter;
138
- code;
139
- retryable;
140
- constructor(adapter, code, message, retryable = code === "rate-limited" || code === "unavailable") {
141
- super(`${adapter}: ${message}`);
142
- this.adapter = adapter;
143
- this.code = code;
144
- this.retryable = retryable;
145
- this.name = "AdapterError";
146
- }
147
- };
148
- function requireApproval(adapter, approval, opts = {}) {
149
- const r = Approval.safeParse(approval);
150
- if (!r.success) {
151
- throw new AdapterError(adapter, "not-approved", "this write needs a person's approval (by, at, ref)");
271
+ // packages/adapters/dist/service-desk.js
272
+ var MockServiceDesk = class _MockServiceDesk extends MockBase {
273
+ requests = /* @__PURE__ */ new Map();
274
+ next = 1;
275
+ constructor(seed = []) {
276
+ super("service-desk");
277
+ for (const r of seed)
278
+ this.requests.set(r.id, { ...r });
279
+ this.next = seed.length + 1;
152
280
  }
153
- if (r.data.scope === "standing" && !opts.allowStanding) {
154
- throw new AdapterError(adapter, "not-approved", "a standing approval can't cover this write; it needs approval each time");
281
+ /** Load the shape the fixture's closed-requests export uses. */
282
+ static fromExport(rows) {
283
+ return new _MockServiceDesk(rows.map((r) => ({
284
+ id: r.number,
285
+ type: r.type,
286
+ state: r.closed ? "done" : "submitted",
287
+ fields: r.fields,
288
+ ...r.approvalGroup ? { approvalGroup: r.approvalGroup } : {},
289
+ ...r.opened ? { openedAt: r.opened } : {},
290
+ ...r.closed ? { closedAt: r.closed } : {},
291
+ url: `https://desk.example.com/requests/${r.number}`
292
+ })));
155
293
  }
156
- return r.data;
157
- }
158
- var MockBase = class {
159
- name;
160
- journal = [];
161
- failures = [];
162
- constructor(name) {
163
- this.name = name;
294
+ async getRequest(id) {
295
+ this.call("getRequest", [id]);
296
+ return { ...this.requests.get(id) ?? this.notFound(`request ${id}`) };
164
297
  }
165
- failNext(code, method) {
166
- this.failures.push(method === void 0 ? { code } : { code, method });
298
+ async listRequests(q) {
299
+ this.call("listRequests", [q]);
300
+ return [...this.requests.values()].filter((r) => (!q.changeId || r.changeId === q.changeId) && (!q.state || r.state === q.state) && (!q.type || r.type === q.type)).map((r) => ({ ...r }));
167
301
  }
168
- /** Record a call and raise an injected failure if one is due. */
169
- call(method, args, approval) {
170
- const i = this.failures.findIndex((f) => f.method === void 0 || f.method === method);
171
- if (i !== -1) {
172
- const [f] = this.failures.splice(i, 1);
173
- throw new AdapterError(this.name, f.code, `injected ${f.code} on ${method}`);
174
- }
175
- this.journal.push(approval ? { adapter: this.name, method, args, approval } : { adapter: this.name, method, args });
302
+ async submitRequest(draft, approval) {
303
+ const a = requireApproval(this.name, approval);
304
+ this.call("submitRequest", [draft], a);
305
+ const empty = Object.entries(draft.fields).filter(([, v]) => v === "").map(([k]) => k);
306
+ if (empty.length > 0)
307
+ throw new AdapterError(this.name, "invalid", `required fields are empty: ${empty.join(", ")}`);
308
+ const id = `SR-${String(this.next++).padStart(4, "0")}`;
309
+ const r = {
310
+ id,
311
+ type: draft.type,
312
+ state: "submitted",
313
+ fields: { ...draft.fields },
314
+ changeId: draft.changeId,
315
+ openedAt: a.at.slice(0, 10),
316
+ url: `https://desk.example.com/requests/${id}`
317
+ };
318
+ this.requests.set(id, r);
319
+ return { ...r };
176
320
  }
177
- notFound(what) {
178
- throw new AdapterError(this.name, "not-found", `${what} not found`);
321
+ /** Test helper: move a request along as the service desk would. */
322
+ setState(id, state, closedAt) {
323
+ const r = this.requests.get(id) ?? this.notFound(`request ${id}`);
324
+ r.state = state;
325
+ if (closedAt)
326
+ r.closedAt = closedAt;
179
327
  }
180
328
  };
181
329
 
@@ -297,13 +445,79 @@ var MockGitHost = class extends MockBase {
297
445
  requireReviewers(repo, number, reviewers) {
298
446
  (this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`)).requiredReviewers = reviewers;
299
447
  }
300
- markReady(repo, number) {
301
- const pr = this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`);
302
- if (pr.state === "draft")
303
- pr.state = "open";
448
+ markReady(repo, number) {
449
+ const pr = this.prs.get(this.key(repo, number)) ?? this.notFound(`PR ${repo}#${number}`);
450
+ if (pr.state === "draft")
451
+ pr.state = "open";
452
+ }
453
+ };
454
+
455
+ // packages/adapters/dist/read-only.js
456
+ var MockWiki = class extends MockBase {
457
+ pages = /* @__PURE__ */ new Map();
458
+ constructor(seed = []) {
459
+ super("wiki");
460
+ for (const p2 of seed)
461
+ this.pages.set(p2.id, { ...p2 });
462
+ }
463
+ head = ({ body: _b, ...rest }) => rest;
464
+ async listPages(space) {
465
+ this.call("listPages", [space]);
466
+ return [...this.pages.values()].filter((p2) => p2.space === space).map(this.head);
467
+ }
468
+ async getPage(id) {
469
+ this.call("getPage", [id]);
470
+ return { ...this.pages.get(id) ?? this.notFound(`page ${id}`) };
471
+ }
472
+ async search(text) {
473
+ this.call("search", [text]);
474
+ const t = text.toLowerCase();
475
+ return [...this.pages.values()].filter((p2) => p2.title.toLowerCase().includes(t) || p2.body.toLowerCase().includes(t)).map(this.head);
476
+ }
477
+ };
478
+ var MockDesignTool = class extends MockBase {
479
+ files = /* @__PURE__ */ new Map();
480
+ constructor(seed = []) {
481
+ super("design-tool");
482
+ for (const f of seed)
483
+ this.files.set(f.key, structuredClone(f));
484
+ }
485
+ async getFile(key) {
486
+ this.call("getFile", [key]);
487
+ return structuredClone(this.files.get(key) ?? this.notFound(`design file ${key}`));
488
+ }
489
+ async renderFrame(key, frameId) {
490
+ this.call("renderFrame", [key, frameId]);
491
+ const file = this.files.get(key) ?? this.notFound(`design file ${key}`);
492
+ if (!file.pages.some((p2) => p2.frames.some((f) => f.id === frameId)))
493
+ this.notFound(`frame ${frameId}`);
494
+ return new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
495
+ }
496
+ };
497
+ var MockNotifier = class extends MockBase {
498
+ channels;
499
+ sent = [];
500
+ constructor(channels = []) {
501
+ super("notify");
502
+ this.channels = channels;
503
+ }
504
+ async send(n, approval) {
505
+ const a = requireApproval(this.name, approval, { allowStanding: true });
506
+ this.call("send", [n], a);
507
+ if (this.channels.length > 0 && !this.channels.includes(n.channel)) {
508
+ throw new AdapterError(this.name, "invalid", `unknown channel ${n.channel}`);
509
+ }
510
+ const id = `msg-${this.sent.length + 1}`;
511
+ this.sent.push({ ...n, id });
512
+ return { id };
304
513
  }
305
514
  };
306
515
 
516
+ // packages/adapters/dist/manual/git-host.js
517
+ var import_yaml2 = __toESM(require_dist(), 1);
518
+ import { readdir as readdir2, readFile as readFile2 } from "node:fs/promises";
519
+ import { join as join2 } from "node:path";
520
+
307
521
  // packages/adapters/dist/manual/steps.js
308
522
  var import_yaml = __toESM(require_dist(), 1);
309
523
  import { createHash } from "node:crypto";
@@ -353,6 +567,35 @@ function uniqueId(slug, taken) {
353
567
  if (!taken.has(`${base}-${n}`))
354
568
  return `${base}-${n}`;
355
569
  }
570
+ function memoryStepStore(seed = []) {
571
+ const steps = new Map(seed.map((s) => [s.id, ManualStep.parse(s)]));
572
+ return {
573
+ async create(step) {
574
+ const found = [...steps.values()].find((s2) => s2.key === step.key);
575
+ if (found)
576
+ return structuredClone(found);
577
+ const s = build(step, uniqueId(step.slug, new Set(steps.keys())));
578
+ steps.set(s.id, s);
579
+ return structuredClone(s);
580
+ },
581
+ async get(id) {
582
+ const s = steps.get(id);
583
+ return s ? structuredClone(s) : void 0;
584
+ },
585
+ async byKey(key) {
586
+ const s = [...steps.values()].find((x) => x.key === key);
587
+ return s ? structuredClone(s) : void 0;
588
+ },
589
+ async list(filter) {
590
+ return [...steps.values()].filter((s) => matches(s, filter)).sort(byCreated).map((s) => structuredClone(s));
591
+ },
592
+ async save(step) {
593
+ const s = ManualStep.parse(step);
594
+ steps.set(s.id, s);
595
+ return structuredClone(s);
596
+ }
597
+ };
598
+ }
356
599
  async function writeAtomic(path, text) {
357
600
  await mkdir(dirname(path), { recursive: true });
358
601
  const tmp = `${path}.tmp`;
@@ -644,11 +887,6 @@ function exportStep(step, format) {
644
887
  };
645
888
  }
646
889
 
647
- // packages/adapters/dist/manual/git-host.js
648
- var import_yaml2 = __toESM(require_dist(), 1);
649
- import { readdir as readdir2, readFile as readFile2 } from "node:fs/promises";
650
- import { join as join2 } from "node:path";
651
-
652
890
  // packages/adapters/dist/manual/base.js
653
891
  var nowIso2 = () => (/* @__PURE__ */ new Date()).toISOString().replace(/\.\d{3}Z$/, "Z");
654
892
  var PROVISIONAL = "manual:";
@@ -1077,6 +1315,7 @@ var ManualGitHost = class extends ManualBase {
1077
1315
  // packages/adapters/dist/manual/read-only.js
1078
1316
  import { readdir as readdir3, readFile as readFile3, stat as stat2 } from "node:fs/promises";
1079
1317
  import { isAbsolute, join as join3, relative, sep } from "node:path";
1318
+ var OWNER_ASK = "owner-ask:";
1080
1319
  function folder(opts, value, fallback) {
1081
1320
  const v = value ?? fallback;
1082
1321
  return isAbsolute(v) ? v : join3(opts.root ?? ".", v);
@@ -1170,9 +1409,7 @@ var ManualNotifier = class extends ManualBase {
1170
1409
  const step = await this.step("send", {
1171
1410
  slug: `message-${n.channel}`,
1172
1411
  action: "send-notification",
1173
- key: `notify|${n.channel}|${shortHash(`${n.title}
1174
- ${n.body}
1175
- ${n.link ?? ""}`)}`,
1412
+ key: await this.keyOf(n, a.ref),
1176
1413
  title: `Send "${n.title}" to ${n.channel}`,
1177
1414
  where: `Messages: ${n.channel}`,
1178
1415
  inputs: { channel: n.channel },
@@ -1187,6 +1424,25 @@ ${n.link ?? ""}`)}`,
1187
1424
  }, a);
1188
1425
  return { id: provisionalId(step.id) };
1189
1426
  }
1427
+ /**
1428
+ * One step per message, by channel, title and body; for an owner question (the approval's ref
1429
+ * is `owner-ask:<id>`), one per question, whoever sends it and whatever its "reply to" says.
1430
+ * Beta.27 final fixes: a question's step is reused only while it is open; once done or skipped,
1431
+ * asking again is a new step, keyed after the closed one (`…@<closed step id>`).
1432
+ */
1433
+ async keyOf(n, ref) {
1434
+ if (!ref.startsWith(OWNER_ASK))
1435
+ return `notify|${n.channel}|${shortHash(`${n.title}
1436
+ ${n.body}
1437
+ ${n.link ?? ""}`)}`;
1438
+ let key = `notify|${ref}`;
1439
+ for (; ; ) {
1440
+ const found = await this.opts.store.byKey(key);
1441
+ if (!found || found.state === "open")
1442
+ return key;
1443
+ key = `${key}@${found.id}`;
1444
+ }
1445
+ }
1190
1446
  };
1191
1447
 
1192
1448
  // packages/adapters/dist/manual/service-desk.js
@@ -1581,215 +1837,16 @@ function withManualFallback(kind, live, manual, onFallback) {
1581
1837
  }
1582
1838
  });
1583
1839
  }
1584
-
1585
- // packages/adapters/dist/read-only.js
1586
- var MockWiki = class extends MockBase {
1587
- pages = /* @__PURE__ */ new Map();
1588
- constructor(seed = []) {
1589
- super("wiki");
1590
- for (const p2 of seed)
1591
- this.pages.set(p2.id, { ...p2 });
1592
- }
1593
- head = ({ body: _b, ...rest }) => rest;
1594
- async listPages(space) {
1595
- this.call("listPages", [space]);
1596
- return [...this.pages.values()].filter((p2) => p2.space === space).map(this.head);
1597
- }
1598
- async getPage(id) {
1599
- this.call("getPage", [id]);
1600
- return { ...this.pages.get(id) ?? this.notFound(`page ${id}`) };
1601
- }
1602
- async search(text) {
1603
- this.call("search", [text]);
1604
- const t = text.toLowerCase();
1605
- return [...this.pages.values()].filter((p2) => p2.title.toLowerCase().includes(t) || p2.body.toLowerCase().includes(t)).map(this.head);
1606
- }
1607
- };
1608
- var MockDesignTool = class extends MockBase {
1609
- files = /* @__PURE__ */ new Map();
1610
- constructor(seed = []) {
1611
- super("design-tool");
1612
- for (const f of seed)
1613
- this.files.set(f.key, structuredClone(f));
1614
- }
1615
- async getFile(key) {
1616
- this.call("getFile", [key]);
1617
- return structuredClone(this.files.get(key) ?? this.notFound(`design file ${key}`));
1618
- }
1619
- async renderFrame(key, frameId) {
1620
- this.call("renderFrame", [key, frameId]);
1621
- const file = this.files.get(key) ?? this.notFound(`design file ${key}`);
1622
- if (!file.pages.some((p2) => p2.frames.some((f) => f.id === frameId)))
1623
- this.notFound(`frame ${frameId}`);
1624
- return new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]);
1625
- }
1626
- };
1627
- var MockNotifier = class extends MockBase {
1628
- channels;
1629
- sent = [];
1630
- constructor(channels = []) {
1631
- super("notify");
1632
- this.channels = channels;
1633
- }
1634
- async send(n, approval) {
1635
- const a = requireApproval(this.name, approval, { allowStanding: true });
1636
- this.call("send", [n], a);
1637
- if (this.channels.length > 0 && !this.channels.includes(n.channel)) {
1638
- throw new AdapterError(this.name, "invalid", `unknown channel ${n.channel}`);
1639
- }
1640
- const id = `msg-${this.sent.length + 1}`;
1641
- this.sent.push({ ...n, id });
1642
- return { id };
1643
- }
1644
- };
1645
-
1646
- // packages/adapters/dist/service-desk.js
1647
- var MockServiceDesk = class _MockServiceDesk extends MockBase {
1648
- requests = /* @__PURE__ */ new Map();
1649
- next = 1;
1650
- constructor(seed = []) {
1651
- super("service-desk");
1652
- for (const r of seed)
1653
- this.requests.set(r.id, { ...r });
1654
- this.next = seed.length + 1;
1655
- }
1656
- /** Load the shape the fixture's closed-requests export uses. */
1657
- static fromExport(rows) {
1658
- return new _MockServiceDesk(rows.map((r) => ({
1659
- id: r.number,
1660
- type: r.type,
1661
- state: r.closed ? "done" : "submitted",
1662
- fields: r.fields,
1663
- ...r.approvalGroup ? { approvalGroup: r.approvalGroup } : {},
1664
- ...r.opened ? { openedAt: r.opened } : {},
1665
- ...r.closed ? { closedAt: r.closed } : {},
1666
- url: `https://desk.example.com/requests/${r.number}`
1667
- })));
1668
- }
1669
- async getRequest(id) {
1670
- this.call("getRequest", [id]);
1671
- return { ...this.requests.get(id) ?? this.notFound(`request ${id}`) };
1672
- }
1673
- async listRequests(q) {
1674
- this.call("listRequests", [q]);
1675
- return [...this.requests.values()].filter((r) => (!q.changeId || r.changeId === q.changeId) && (!q.state || r.state === q.state) && (!q.type || r.type === q.type)).map((r) => ({ ...r }));
1676
- }
1677
- async submitRequest(draft, approval) {
1678
- const a = requireApproval(this.name, approval);
1679
- this.call("submitRequest", [draft], a);
1680
- const empty = Object.entries(draft.fields).filter(([, v]) => v === "").map(([k]) => k);
1681
- if (empty.length > 0)
1682
- throw new AdapterError(this.name, "invalid", `required fields are empty: ${empty.join(", ")}`);
1683
- const id = `SR-${String(this.next++).padStart(4, "0")}`;
1684
- const r = {
1685
- id,
1686
- type: draft.type,
1687
- state: "submitted",
1688
- fields: { ...draft.fields },
1689
- changeId: draft.changeId,
1690
- openedAt: a.at.slice(0, 10),
1691
- url: `https://desk.example.com/requests/${id}`
1692
- };
1693
- this.requests.set(id, r);
1694
- return { ...r };
1695
- }
1696
- /** Test helper: move a request along as the service desk would. */
1697
- setState(id, state, closedAt) {
1698
- const r = this.requests.get(id) ?? this.notFound(`request ${id}`);
1699
- r.state = state;
1700
- if (closedAt)
1701
- r.closedAt = closedAt;
1702
- }
1703
- };
1704
-
1705
- // packages/adapters/dist/work-tracker.js
1706
- var MockWorkTracker = class _MockWorkTracker extends MockBase {
1707
- items = /* @__PURE__ */ new Map();
1708
- links = [];
1709
- next = 1e3;
1710
- constructor(seed = []) {
1711
- super("work-tracker");
1712
- for (const i of seed)
1713
- this.items.set(i.id, { ...i });
1714
- }
1715
- /** Load the shape the fixture's ticket export uses. */
1716
- static fromExport(rows) {
1717
- const type = (t) => {
1718
- const k = t.toLowerCase();
1719
- if (k.includes("story"))
1720
- return "story";
1721
- if (k.includes("epic"))
1722
- return "epic";
1723
- if (k.includes("feature"))
1724
- return "feature";
1725
- if (k.includes("bug"))
1726
- return "bug";
1727
- return "task";
1728
- };
1729
- return new _MockWorkTracker(rows.map((r) => ({
1730
- id: String(r.id),
1731
- type: type(r.type),
1732
- title: r.title,
1733
- description: r.description ?? "",
1734
- acceptanceCriteria: r.acceptanceCriteria ?? "",
1735
- state: r.state ?? "New",
1736
- tags: [],
1737
- url: `https://work.example.com/items/${r.id}`
1738
- })));
1739
- }
1740
- async getItem(id) {
1741
- this.call("getItem", [id]);
1742
- return { ...this.items.get(id) ?? this.notFound(`work item ${id}`) };
1743
- }
1744
- async query(q) {
1745
- this.call("query", [q]);
1746
- const text = q.text?.toLowerCase();
1747
- return [...this.items.values()].filter((i) => (!q.type || i.type === q.type) && (!q.parent || i.parent === q.parent) && (!q.state || i.state === q.state) && (!q.tag || i.tags.includes(q.tag)) && (!text || i.title.toLowerCase().includes(text) || i.description.toLowerCase().includes(text))).map((i) => ({ ...i }));
1748
- }
1749
- async createItem(input, approval) {
1750
- const a = requireApproval(this.name, approval);
1751
- this.call("createItem", [input], a);
1752
- if (input.parent && !this.items.has(input.parent))
1753
- this.notFound(`parent ${input.parent}`);
1754
- const id = String(this.next++);
1755
- const item = {
1756
- id,
1757
- type: input.type,
1758
- title: input.title,
1759
- description: input.description ?? "",
1760
- acceptanceCriteria: input.acceptanceCriteria ?? "",
1761
- state: "New",
1762
- ...input.parent ? { parent: input.parent } : {},
1763
- ...input.assignee ? { assignee: input.assignee } : {},
1764
- tags: input.tags ?? [],
1765
- url: `https://work.example.com/items/${id}`
1766
- };
1767
- this.items.set(id, item);
1768
- return { ...item };
1769
- }
1770
- async updateItem(id, patch, approval) {
1771
- const a = requireApproval(this.name, approval);
1772
- this.call("updateItem", [id, patch], a);
1773
- const item = this.items.get(id) ?? this.notFound(`work item ${id}`);
1774
- const updated = {
1775
- ...item,
1776
- ...Object.fromEntries(Object.entries(patch).filter(([, v]) => v !== void 0))
1777
- };
1778
- this.items.set(id, updated);
1779
- return { ...updated };
1780
- }
1781
- async link(from, to, kind, approval) {
1782
- const a = requireApproval(this.name, approval);
1783
- this.call("link", [from, to, kind], a);
1784
- if (!this.items.has(from))
1785
- this.notFound(`work item ${from}`);
1786
- if (!this.items.has(to))
1787
- this.notFound(`work item ${to}`);
1788
- this.links.push({ from, to, kind });
1789
- if (kind === "parent")
1790
- this.items.get(from).parent = to;
1791
- }
1792
- };
1840
+ function allManual(ctx, settings = {}) {
1841
+ return {
1842
+ workTracker: manualAdapter("workTracker", ctx, settings.workTracker),
1843
+ serviceDesk: manualAdapter("serviceDesk", ctx, settings.serviceDesk),
1844
+ gitHost: manualAdapter("gitHost", ctx, settings.gitHost),
1845
+ wiki: manualAdapter("wiki", ctx, settings.wiki),
1846
+ notify: manualAdapter("notify", ctx, settings.notify),
1847
+ design: manualAdapter("design", ctx, settings.design)
1848
+ };
1849
+ }
1793
1850
 
1794
1851
  // packages/adapters/dist/registry.js
1795
1852
  var MOCKS = {
@@ -1839,18 +1896,50 @@ function createAdapters(runtime, factories = {}, manual) {
1839
1896
  }
1840
1897
 
1841
1898
  export {
1899
+ Approval,
1842
1900
  AdapterError,
1843
1901
  requireApproval,
1902
+ MockBase,
1903
+ MockWorkTracker,
1904
+ ADO_COLUMNS,
1905
+ JIRA_COLUMNS,
1906
+ html,
1907
+ csvCell,
1908
+ workItemRows,
1844
1909
  workItemsCsv,
1910
+ MockServiceDesk,
1845
1911
  mergeBlockers,
1846
1912
  MockGitHost,
1913
+ MockWiki,
1914
+ MockDesignTool,
1915
+ MockNotifier,
1916
+ serializeStep,
1917
+ slugify,
1918
+ shortHash,
1919
+ memoryStepStore,
1920
+ StepFileError,
1847
1921
  fileStepStore,
1922
+ checkValue,
1848
1923
  checkResult,
1849
1924
  StepError,
1850
1925
  recordStep,
1926
+ stepApproval,
1851
1927
  exportStep,
1928
+ PROVISIONAL,
1929
+ provisionalId,
1852
1930
  stepOfProvisional,
1931
+ ManualBase,
1932
+ changeOfBranch,
1933
+ ManualGitHost,
1934
+ ManualWiki,
1935
+ ManualDesignTool,
1853
1936
  ManualNotifier,
1937
+ fieldKey,
1938
+ ManualServiceDesk,
1939
+ ManualWorkTracker,
1854
1940
  manualAdapter,
1941
+ FALLBACK_CODES,
1942
+ withManualFallback,
1943
+ allManual,
1855
1944
  createAdapters
1856
1945
  };