@maycombhq/atticus 2.0.0-beta.21 → 2.0.0-beta.23

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 (299) hide show
  1. package/dist/bin.js +12 -7
  2. package/dist/{chunk-BXBCMGIQ.js → chunk-24OXGB3P.js} +1 -1
  3. package/dist/{chunk-PRW3HXM3.js → chunk-27AJAKX7.js} +29 -5
  4. package/dist/{chunk-PQH56YF6.js → chunk-2QPJ4E4Z.js} +6 -4
  5. package/dist/{chunk-7CZHUZBL.js → chunk-2UMSHYCB.js} +38 -27
  6. package/dist/{chunk-2V2ZPQQU.js → chunk-2WUTCPPJ.js} +9 -7
  7. package/dist/{chunk-YF5DZCPN.js → chunk-2YSD6E6V.js} +38 -34
  8. package/dist/{chunk-QHJJMZLX.js → chunk-3424TLIJ.js} +204 -97
  9. package/dist/{chunk-62DLJSLV.js → chunk-3ASYYMOX.js} +10 -8
  10. package/dist/{chunk-XOL3GFW2.js → chunk-3EWKO457.js} +111 -43
  11. package/dist/{chunk-G5YJBNDZ.js → chunk-3EX5HCZD.js} +8 -6
  12. package/dist/{chunk-WFU77T3A.js → chunk-3MYBT62N.js} +5 -5
  13. package/dist/{chunk-6EXDI5GI.js → chunk-3UHV76UD.js} +72 -41
  14. package/dist/{chunk-LU4MQVAL.js → chunk-3ZA3AK2D.js} +11 -10
  15. package/dist/{chunk-P2VBXX7N.js → chunk-4ETO2FXE.js} +11 -9
  16. package/dist/{chunk-GK4PYVEC.js → chunk-4FLNCK6Q.js} +31 -14
  17. package/dist/{chunk-64AADMTW.js → chunk-4GAB5ZOZ.js} +943 -336
  18. package/dist/{chunk-FLVZFTLQ.js → chunk-4MYHETJ3.js} +20 -18
  19. package/dist/chunk-4R3TO4VL.js +94 -0
  20. package/dist/{chunk-7EFILTCI.js → chunk-5F7GFN2F.js} +28 -0
  21. package/dist/chunk-5MYE42AP.js +43 -0
  22. package/dist/chunk-5O7U67UA.js +57 -0
  23. package/dist/{chunk-MZGRDONP.js → chunk-5OXKCH4Z.js} +54 -37
  24. package/dist/{chunk-PUEWDYGP.js → chunk-5VTIWEWP.js} +3 -2
  25. package/dist/{chunk-3G6S7LAA.js → chunk-63NFFAGI.js} +14 -12
  26. package/dist/{chunk-LIJJCBQI.js → chunk-66AQ2JIU.js} +15 -16
  27. package/dist/chunk-6JVPBGQG.js +50 -0
  28. package/dist/{chunk-WAZEXEJH.js → chunk-6NCPLIIP.js} +167 -2
  29. package/dist/{chunk-D57MFJPP.js → chunk-6NN36LVK.js} +3 -3
  30. package/dist/{chunk-G6IQYM25.js → chunk-6R5VHR3N.js} +8 -6
  31. package/dist/{chunk-Z3QFH7YG.js → chunk-6RQOINER.js} +5 -4
  32. package/dist/{chunk-TQTRWENN.js → chunk-6RYB3EET.js} +14 -12
  33. package/dist/{chunk-FYBF5MB2.js → chunk-6SNTHK43.js} +13 -11
  34. package/dist/{chunk-FRHD22WM.js → chunk-6Y4FXOMI.js} +27 -23
  35. package/dist/{chunk-LWDNKE4X.js → chunk-6ZFF7XSL.js} +6 -6
  36. package/dist/{chunk-FQ6WH6PB.js → chunk-6ZSYLZ7O.js} +6 -4
  37. package/dist/{chunk-LQH4P45K.js → chunk-73CC73I4.js} +1 -1
  38. package/dist/{chunk-Q46QDDMF.js → chunk-73GFVW2L.js} +14 -9
  39. package/dist/{chunk-QKMRFNMA.js → chunk-73V2OONC.js} +17 -15
  40. package/dist/{chunk-FVMPFCDS.js → chunk-75OMRKY2.js} +4 -4
  41. package/dist/{chunk-XEQCQO66.js → chunk-7IFTSAHP.js} +10 -8
  42. package/dist/{chunk-4FOAYLI4.js → chunk-7K5OH45X.js} +139 -17
  43. package/dist/{chunk-3SSTNB4E.js → chunk-7NQAGYK4.js} +34 -14
  44. package/dist/{chunk-URIKUID7.js → chunk-7XWJ6ED2.js} +14 -12
  45. package/dist/{chunk-TYD6I4CZ.js → chunk-7XYLNQFO.js} +7 -7
  46. package/dist/{chunk-BPPU3PW7.js → chunk-7YQBDE5W.js} +10 -4
  47. package/dist/{chunk-CPK7QSBG.js → chunk-A4JXVO5O.js} +8 -6
  48. package/dist/{chunk-YJ3TBOTK.js → chunk-AFBCNZRZ.js} +29 -26
  49. package/dist/{chunk-TW3KOSQK.js → chunk-AGOLEMHK.js} +13 -13
  50. package/dist/chunk-AHFQHPFF.js +49 -0
  51. package/dist/{chunk-NTAVOWYD.js → chunk-APDN6UOR.js} +118 -18
  52. package/dist/chunk-AQRUQNFB.js +322 -0
  53. package/dist/{chunk-KYZMRSPS.js → chunk-AVMWESFZ.js} +6 -3
  54. package/dist/chunk-B4AEL3RF.js +1011 -0
  55. package/dist/{chunk-GS76RXQE.js → chunk-BAY4K55I.js} +15 -12
  56. package/dist/{chunk-4CLK2RJO.js → chunk-BFL4PO64.js} +9 -7
  57. package/dist/{chunk-GCS3FZOB.js → chunk-BFMTGNAQ.js} +15 -4
  58. package/dist/{chunk-YBOVNMHC.js → chunk-BP33TBLI.js} +29 -16
  59. package/dist/chunk-BQGDB6ZL.js +7342 -0
  60. package/dist/{chunk-BXZ4PKIT.js → chunk-BUUJ7N4O.js} +15 -11
  61. package/dist/{chunk-HGHRSF3E.js → chunk-BYBU2EIB.js} +38 -19
  62. package/dist/{chunk-TQ4TG57V.js → chunk-C6ORPLCN.js} +4 -4
  63. package/dist/{chunk-HWD4JPU7.js → chunk-CA3DKO4D.js} +27 -3
  64. package/dist/{chunk-YTTNTQOX.js → chunk-CFUDAW3R.js} +17 -15
  65. package/dist/{chunk-OPQZISG3.js → chunk-CJEBRJBS.js} +5 -4
  66. package/dist/{chunk-RALY3E5U.js → chunk-CKVBDVIW.js} +6 -4
  67. package/dist/{chunk-DUPZPDCJ.js → chunk-CMB7FXHJ.js} +42 -16
  68. package/dist/{chunk-YIGBJNH4.js → chunk-CQ7RF4QN.js} +5 -4
  69. package/dist/{chunk-YAH5IQAL.js → chunk-CS4BMJLL.js} +6 -5
  70. package/dist/{chunk-455SYIIE.js → chunk-CT6NINGR.js} +5 -3
  71. package/dist/chunk-CXTG6AWM.js +40 -0
  72. package/dist/{chunk-JYMIB5XY.js → chunk-CZ2ZS7AT.js} +170 -45
  73. package/dist/{chunk-K332XW7K.js → chunk-D6BVLTDV.js} +100 -33
  74. package/dist/chunk-DCRYOMTM.js +37 -0
  75. package/dist/{chunk-G6X4YL4D.js → chunk-DHKDH464.js} +5 -4
  76. package/dist/{chunk-JRVNXLZP.js → chunk-DSHRA72L.js} +14 -12
  77. package/dist/{chunk-LNWEWYCM.js → chunk-E3PDCQRH.js} +2813 -621
  78. package/dist/chunk-EHXDB3SA.js +25 -0
  79. package/dist/{chunk-EZIN5E5B.js → chunk-EMVZIOOD.js} +11 -9
  80. package/dist/{chunk-IFHDV6KQ.js → chunk-ENH6Z4TY.js} +21 -20
  81. package/dist/{chunk-YKTE2RU3.js → chunk-EVTI22PQ.js} +7 -2
  82. package/dist/{chunk-2D7PWSOK.js → chunk-EXJZBL5N.js} +22 -20
  83. package/dist/{chunk-77O633L5.js → chunk-FBCVC2GJ.js} +14 -12
  84. package/dist/{chunk-HS4BGB4G.js → chunk-FJVUHQPS.js} +37 -24
  85. package/dist/{chunk-4KNOJC6J.js → chunk-FL344WQD.js} +270 -221
  86. package/dist/{chunk-GNWAOVFQ.js → chunk-FMJYKLDY.js} +5 -5
  87. package/dist/chunk-FMR2D3AZ.js +41 -0
  88. package/dist/{chunk-PAINMSID.js → chunk-FPBUTZI5.js} +3102 -7859
  89. package/dist/{chunk-ZOSD4FXV.js → chunk-FQVSLBTV.js} +3 -3
  90. package/dist/chunk-FRAEQVYN.js +52 -0
  91. package/dist/{chunk-UDXWIPCB.js → chunk-FRCOKUU4.js} +9 -7
  92. package/dist/{chunk-UYLBRRFK.js → chunk-FSN6JFXB.js} +129 -27
  93. package/dist/{chunk-BC6KKZ67.js → chunk-FTLYXMHA.js} +9 -6
  94. package/dist/{chunk-FAJDKNSD.js → chunk-FVYZ4Y52.js} +16 -3
  95. package/dist/{chunk-TWQRPM76.js → chunk-G6EFXTUO.js} +23 -16
  96. package/dist/{chunk-ZFQMMU5Y.js → chunk-G7VBMOZH.js} +6 -2
  97. package/dist/{chunk-VYOCPTUB.js → chunk-GM4EFHUX.js} +17 -15
  98. package/dist/chunk-GOZLTLRY.js +232 -0
  99. package/dist/chunk-GPNMSX5H.js +36 -0
  100. package/dist/{chunk-OZJ3JLYI.js → chunk-GUGQSIQM.js} +10 -9
  101. package/dist/chunk-H4VO6WG3.js +10 -0
  102. package/dist/{chunk-QJCJOMW3.js → chunk-HJQVUOUL.js} +16 -18
  103. package/dist/chunk-HMWJWYE2.js +31 -0
  104. package/dist/{chunk-4TKVU2I2.js → chunk-HMZ2DRBC.js} +2 -2
  105. package/dist/{chunk-HK3VOHIE.js → chunk-HRS5O7VV.js} +609 -171
  106. package/dist/{chunk-7FUIVIBG.js → chunk-HUGQZQ2K.js} +13 -8
  107. package/dist/{chunk-QOOEYDNJ.js → chunk-ICBGVVRI.js} +10 -10
  108. package/dist/{chunk-XG4WJHLQ.js → chunk-IGOE6KPG.js} +49 -20
  109. package/dist/{chunk-4SLBCEPD.js → chunk-IKAW2KJU.js} +95 -64
  110. package/dist/{chunk-L4CESDPB.js → chunk-IMZFOMVX.js} +1 -1
  111. package/dist/{chunk-XQ3YZ4QW.js → chunk-ISG547IS.js} +24 -22
  112. package/dist/{chunk-BA2HUMDN.js → chunk-IYNCSYU4.js} +5 -2
  113. package/dist/{chunk-UEVZZZU2.js → chunk-J25YOUIZ.js} +5 -4
  114. package/dist/chunk-J2CDBSFP.js +69 -0
  115. package/dist/chunk-J2H7YG3K.js +34 -0
  116. package/dist/{chunk-O4IKAIZ2.js → chunk-J32IPTVQ.js} +28 -22
  117. package/dist/{chunk-3AQ2R5NL.js → chunk-J4CPHJUL.js} +11 -9
  118. package/dist/{chunk-VUVGX5L2.js → chunk-JFFKHIM6.js} +1 -1
  119. package/dist/chunk-JMEWJPF2.js +384 -0
  120. package/dist/{chunk-LO3BLMVG.js → chunk-JSP73CDW.js} +13 -5
  121. package/dist/chunk-JXAKYP45.js +63 -0
  122. package/dist/{chunk-PNQLCRSS.js → chunk-K4OXYSGS.js} +7 -5
  123. package/dist/{chunk-3J5I7ZOU.js → chunk-K4RNVDR4.js} +4 -4
  124. package/dist/{chunk-LEBR5NHW.js → chunk-K757G7AD.js} +18 -15
  125. package/dist/{chunk-AHW3RY3X.js → chunk-KDJ2YKAZ.js} +8 -7
  126. package/dist/{chunk-4WXRPQDE.js → chunk-KT6Q44CA.js} +178 -31
  127. package/dist/{chunk-EFCQSMXB.js → chunk-KTNOBTV5.js} +10 -4
  128. package/dist/chunk-KVVNAUIG.js +66 -0
  129. package/dist/{chunk-26Z7OGQW.js → chunk-L3RCQWVQ.js} +64 -31
  130. package/dist/{chunk-3WON4G3M.js → chunk-LHH5KG5A.js} +21 -6
  131. package/dist/{chunk-NCB6656Z.js → chunk-LM45GMMB.js} +11 -8
  132. package/dist/{chunk-2HH3UCZM.js → chunk-LO6Y7OTG.js} +5 -4
  133. package/dist/{chunk-36RY7ZXM.js → chunk-LPDTDFKA.js} +88 -26
  134. package/dist/{chunk-67BP7HXL.js → chunk-LSHSDC6S.js} +19 -17
  135. package/dist/{chunk-GDZB57IU.js → chunk-LZVHP7CT.js} +7 -5
  136. package/dist/{chunk-GC2VK3JT.js → chunk-M3EOFSPY.js} +28 -25
  137. package/dist/chunk-MBYYQHPM.js +31 -0
  138. package/dist/{chunk-HXXP2NTE.js → chunk-MEJ63LDG.js} +35 -12
  139. package/dist/{chunk-2UCRFXFZ.js → chunk-MH2ZK67S.js} +13 -11
  140. package/dist/{chunk-BEPCKDCP.js → chunk-MLGWSBF4.js} +5447 -4165
  141. package/dist/{chunk-NRQ65LTQ.js → chunk-MNIPPBCT.js} +6 -5
  142. package/dist/{chunk-3LZ6P5EP.js → chunk-MUWDB4R4.js} +1 -1
  143. package/dist/{chunk-KDAHXQIE.js → chunk-MWF4PXQR.js} +38 -34
  144. package/dist/{chunk-WNTIOBOG.js → chunk-N2YX6JMY.js} +20 -18
  145. package/dist/{chunk-FY3QIRTL.js → chunk-NAPHHWW2.js} +3 -3
  146. package/dist/{chunk-D2WSW4GU.js → chunk-NC755EKE.js} +8 -2
  147. package/dist/{chunk-BA3U7ALS.js → chunk-NCLZJCXA.js} +26 -22
  148. package/dist/chunk-NKJDO4UC.js +39 -0
  149. package/dist/chunk-NOYOFYAJ.js +59 -0
  150. package/dist/{chunk-LPV6T362.js → chunk-NROSSWMS.js} +8 -6
  151. package/dist/{chunk-ZKYRDV7A.js → chunk-OBUB3H72.js} +14 -12
  152. package/dist/{chunk-ZQLRCA2V.js → chunk-OCQWSFJD.js} +10 -8
  153. package/dist/{chunk-42EPP7OB.js → chunk-OK6JGLE7.js} +14 -12
  154. package/dist/{chunk-MD7KUEJ3.js → chunk-OPWGPQ2N.js} +9 -7
  155. package/dist/{chunk-SH27FYPF.js → chunk-OSYHGGL3.js} +20 -18
  156. package/dist/chunk-OXXZZ7HQ.js +50 -0
  157. package/dist/chunk-P22EPEBR.js +57 -0
  158. package/dist/chunk-P4YUT7W7.js +45 -0
  159. package/dist/chunk-PCCLVIDP.js +217 -0
  160. package/dist/chunk-PFULMC2D.js +48 -0
  161. package/dist/chunk-PGAMTKBI.js +16 -0
  162. package/dist/{chunk-Y6K3CJBU.js → chunk-PNSSE7JM.js} +152 -29
  163. package/dist/{chunk-3UTYPHN3.js → chunk-POEMZECG.js} +1 -1
  164. package/dist/{chunk-GSGIZ2OO.js → chunk-POSDBRKV.js} +27 -24
  165. package/dist/{chunk-YZDZOEV4.js → chunk-POSZFDSQ.js} +3 -3
  166. package/dist/{chunk-7AB6OWTV.js → chunk-PQQKZPBU.js} +31 -25
  167. package/dist/{chunk-K6JB6XTX.js → chunk-PRMUQUWN.js} +20 -15
  168. package/dist/{chunk-ICHDSWEY.js → chunk-PT4USJNN.js} +10 -8
  169. package/dist/{chunk-265LWMOA.js → chunk-PWXB5GBB.js} +18 -16
  170. package/dist/{chunk-DCWN3HFV.js → chunk-PXMV2LLY.js} +6 -5
  171. package/dist/{chunk-THN26IEF.js → chunk-PXW2RZGQ.js} +4 -1
  172. package/dist/{chunk-CG6CULP6.js → chunk-Q367UGYN.js} +7 -5
  173. package/dist/chunk-QA4O2GGC.js +265 -0
  174. package/dist/{chunk-7FHNFCHK.js → chunk-QAVRDONY.js} +225 -375
  175. package/dist/{chunk-VAMHOHUU.js → chunk-QBMLBCQH.js} +16 -13
  176. package/dist/{chunk-WEOMJHPV.js → chunk-QLQIFJP3.js} +18 -15
  177. package/dist/{chunk-UZACEG2C.js → chunk-QLWDIKO4.js} +84 -27
  178. package/dist/{chunk-ZZFHLRQW.js → chunk-QVVGJVVX.js} +18 -16
  179. package/dist/{chunk-WIWTJMMR.js → chunk-QX4MAMUG.js} +23 -21
  180. package/dist/{chunk-JYTIHTIK.js → chunk-QZWRPQTI.js} +6 -6
  181. package/dist/{chunk-5WERBKLE.js → chunk-RCG5IAAT.js} +55 -227
  182. package/dist/chunk-RGZFOKVO.js +106 -0
  183. package/dist/{chunk-C7CEK3KW.js → chunk-RLZFL76D.js} +7 -5
  184. package/dist/{chunk-PTQ3ZALZ.js → chunk-RPQITJNX.js} +14 -12
  185. package/dist/{chunk-JS6WMC3J.js → chunk-RQQYEDAC.js} +10 -8
  186. package/dist/chunk-RQSLHZ7T.js +36 -0
  187. package/dist/{chunk-API5TOUB.js → chunk-RRQUQAXP.js} +1 -1
  188. package/dist/chunk-RYQ4JCFT.js +65 -0
  189. package/dist/chunk-S35DIFJH.js +38 -0
  190. package/dist/{chunk-YWAKDNMH.js → chunk-S5GSQPIN.js} +70 -19
  191. package/dist/chunk-S5XFO4GY.js +42 -0
  192. package/dist/chunk-S6LW2RRC.js +25 -0
  193. package/dist/{chunk-TSM6T6GQ.js → chunk-S6W3D5GS.js} +25 -23
  194. package/dist/{chunk-5PV7S2ZP.js → chunk-S7GUZ45I.js} +4 -3
  195. package/dist/{chunk-MMZUN7ZO.js → chunk-SCT4CEF7.js} +22 -20
  196. package/dist/{chunk-AOCWFA7T.js → chunk-SK5RVP7X.js} +8 -8
  197. package/dist/chunk-SRTUETF5.js +50 -0
  198. package/dist/{chunk-E57AOFYN.js → chunk-SVGGMBJI.js} +15 -13
  199. package/dist/{chunk-OV57AHCG.js → chunk-SWNKO4C4.js} +35 -26
  200. package/dist/chunk-SYP56T2D.js +65 -0
  201. package/dist/{chunk-5CMPVC3N.js → chunk-T33TPFGI.js} +25 -23
  202. package/dist/{chunk-Q26LDIUV.js → chunk-T3FNG2H2.js} +18 -15
  203. package/dist/{chunk-UFE36WJH.js → chunk-T6MAWL5P.js} +6 -4
  204. package/dist/{chunk-LN77DXBM.js → chunk-T6MX7WXM.js} +14 -11
  205. package/dist/{chunk-WCEF7H6L.js → chunk-T7IIEDA3.js} +10 -7
  206. package/dist/{chunk-2HTEMYTB.js → chunk-TABH4RBZ.js} +163 -84
  207. package/dist/{chunk-YO2PKTXT.js → chunk-TDSCKP3V.js} +5 -3
  208. package/dist/{chunk-BVWWPBKD.js → chunk-TMFMXQEN.js} +23 -21
  209. package/dist/{chunk-4B6BT75O.js → chunk-TNCF26JK.js} +83 -26
  210. package/dist/{chunk-75ASLHBT.js → chunk-TUM52SOE.js} +21 -15
  211. package/dist/{chunk-ZLS6PU2O.js → chunk-TV56QLLV.js} +4 -3
  212. package/dist/{chunk-JKIGL3XQ.js → chunk-TVQSXWWV.js} +36 -33
  213. package/dist/{chunk-OKUB6RJA.js → chunk-TXNSQ24G.js} +14 -11
  214. package/dist/{chunk-4CYTJ5TZ.js → chunk-UALE35WK.js} +4 -3
  215. package/dist/{chunk-CNU5Q2D5.js → chunk-UJF7PIMP.js} +35 -27
  216. package/dist/chunk-UMCDODBX.js +53 -0
  217. package/dist/{chunk-M6D2U3YM.js → chunk-UTPIFH4I.js} +4 -3
  218. package/dist/{chunk-COYN3UAN.js → chunk-V7PEHQZU.js} +95 -26
  219. package/dist/{chunk-U3NBK4EU.js → chunk-VJFXQISZ.js} +8 -8
  220. package/dist/chunk-VJZI6KFP.js +47 -0
  221. package/dist/{chunk-ECLXZWAG.js → chunk-VK7WYA64.js} +14 -12
  222. package/dist/{chunk-DDJPM5YX.js → chunk-VKTXFFOZ.js} +5 -3
  223. package/dist/{chunk-LIRVU3HW.js → chunk-VNIN7Q6Q.js} +32 -20
  224. package/dist/{chunk-7QPCGTPS.js → chunk-VRO7KSGL.js} +24 -21
  225. package/dist/{chunk-AZDITBCT.js → chunk-W3AZE7LN.js} +3 -3
  226. package/dist/chunk-W4TNCEI4.js +44 -0
  227. package/dist/{chunk-S2RY3BOD.js → chunk-W5VYJWOG.js} +31 -21
  228. package/dist/{chunk-X2CUXTWU.js → chunk-WF3RCZNO.js} +6 -6
  229. package/dist/{chunk-4D62IZII.js → chunk-WOMQQWTO.js} +7 -5
  230. package/dist/{chunk-UF4UHCIG.js → chunk-WXVTYLVH.js} +6 -4
  231. package/dist/{chunk-EDZ45WIR.js → chunk-WYGTSZHR.js} +18 -14
  232. package/dist/{chunk-HSZMPH5T.js → chunk-WZYM5M4U.js} +592 -133
  233. package/dist/chunk-X5ZHDSLU.js +49 -0
  234. package/dist/chunk-X7XVMYIL.js +5 -0
  235. package/dist/chunk-X7ZKNSK4.js +41 -0
  236. package/dist/{chunk-QE527XRY.js → chunk-XAPXKFIS.js} +26 -23
  237. package/dist/{chunk-HE3HRDNZ.js → chunk-XF6TSZW2.js} +2 -2
  238. package/dist/{chunk-GX74YWR7.js → chunk-XFDDJQT7.js} +16 -14
  239. package/dist/{chunk-5QUOPNLN.js → chunk-XGO74QWR.js} +4 -4
  240. package/dist/chunk-XLZAAAPX.js +43 -0
  241. package/dist/{chunk-NYOABJNK.js → chunk-XMUWPA56.js} +26 -24
  242. package/dist/{chunk-M4H2UG4R.js → chunk-XNFM6WUK.js} +19 -16
  243. package/dist/{chunk-TGVVUKTG.js → chunk-XOMEQVLK.js} +2 -2
  244. package/dist/{chunk-A2G72UI4.js → chunk-Y2H7X3VI.js} +7 -7
  245. package/dist/{chunk-37WE3LS2.js → chunk-Y5IE6YKD.js} +5 -3
  246. package/dist/{chunk-IFFRGC3N.js → chunk-YD3KTW4H.js} +14 -12
  247. package/dist/{chunk-75ZOZFGH.js → chunk-YDCOZOER.js} +20 -18
  248. package/dist/{chunk-6DQYZU2W.js → chunk-YERAAEO4.js} +20 -20
  249. package/dist/{chunk-J5AAZ6OJ.js → chunk-YHMPDIRG.js} +5 -4
  250. package/dist/{chunk-CNPY4NTZ.js → chunk-Z2D4P3R3.js} +15 -13
  251. package/dist/{chunk-E2VXBSIR.js → chunk-Z3H27OMV.js} +6 -4
  252. package/dist/{chunk-AE4P57KK.js → chunk-Z3RAFU5B.js} +17 -15
  253. package/dist/{chunk-RA33EYS4.js → chunk-ZENHDXRZ.js} +23 -17
  254. package/dist/{chunk-TJH2EUAZ.js → chunk-ZFHFC74B.js} +20 -18
  255. package/dist/{chunk-4PYC2UGC.js → chunk-ZGULQAPZ.js} +7 -4
  256. package/dist/{chunk-4SKZDI62.js → chunk-ZIUFM5HT.js} +3 -1
  257. package/dist/{chunk-JAABT3DA.js → chunk-ZJGCGKA4.js} +4 -3
  258. package/dist/{chunk-GIFMBCTW.js → chunk-ZLQEQR3D.js} +10 -8
  259. package/dist/{chunk-I2A3Z5AK.js → chunk-ZNHQGG7J.js} +7 -7
  260. package/dist/{chunk-5TDRBOAV.js → chunk-ZNTTW4IT.js} +7 -5
  261. package/dist/{chunk-ZX7235KR.js → chunk-ZR6J4QFQ.js} +44 -383
  262. package/dist/{chunk-F6H2RJ3N.js → chunk-ZSNOILL5.js} +1 -1
  263. package/dist/files.json +585 -509
  264. package/dist/packages/sdk/npm/index.js +1491 -110
  265. package/dist/packages/ui/dist/assets/{elk-api-CowTnhEJ.js → elk-api-DxfAMOJq.js} +2 -2
  266. package/dist/packages/ui/dist/assets/index-Buit9TfP.js +62 -0
  267. package/dist/packages/ui/dist/assets/index-Jyc9dFeZ.css +1 -0
  268. package/dist/packages/ui/dist/index.html +3 -2
  269. package/package.json +3 -3
  270. package/dist/chunk-26WBY34Y.js +0 -37
  271. package/dist/chunk-3TD6S4TC.js +0 -49
  272. package/dist/chunk-5G7ILBUG.js +0 -66
  273. package/dist/chunk-6FNAKCET.js +0 -38
  274. package/dist/chunk-AM6FP6JW.js +0 -43
  275. package/dist/chunk-CFH3QH26.js +0 -29
  276. package/dist/chunk-CLD4RVTA.js +0 -45
  277. package/dist/chunk-D5KV5PSK.js +0 -45
  278. package/dist/chunk-D5MASS4I.js +0 -48
  279. package/dist/chunk-DN4A2Q2O.js +0 -57
  280. package/dist/chunk-FGAGWYZB.js +0 -47
  281. package/dist/chunk-GUYL7RMK.js +0 -60
  282. package/dist/chunk-J2O4LFVI.js +0 -80
  283. package/dist/chunk-JITJP64K.js +0 -34
  284. package/dist/chunk-JRXHON4E.js +0 -41
  285. package/dist/chunk-JU4QNJSR.js +0 -62
  286. package/dist/chunk-N3RUGTGV.js +0 -39
  287. package/dist/chunk-ODMBPDDV.js +0 -298
  288. package/dist/chunk-OMPENNWY.js +0 -39
  289. package/dist/chunk-PKJAV25S.js +0 -43
  290. package/dist/chunk-PRTBPXYA.js +0 -50
  291. package/dist/chunk-PRZ7KMWL.js +0 -42
  292. package/dist/chunk-QSIDVFB7.js +0 -45
  293. package/dist/chunk-SB5GRUFM.js +0 -54
  294. package/dist/chunk-T74WQQGS.js +0 -40
  295. package/dist/chunk-X7EMBM5X.js +0 -34
  296. package/dist/chunk-Z6VLC5X4.js +0 -36
  297. package/dist/chunk-ZPDDEVQX.js +0 -47
  298. package/dist/packages/ui/dist/assets/index-Dw20IRhQ.css +0 -1
  299. package/dist/packages/ui/dist/assets/index-z2wv0d5d.js +0 -47
@@ -3,6 +3,9 @@ import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
3
  var require = __atticusCreateRequire(import.meta.url);
4
4
  var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
5
  var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
+ import {
7
+ commandWords
8
+ } from "./chunk-QA4O2GGC.js";
6
9
  import {
7
10
  ANSWERED_BY,
8
11
  AgentDefinition,
@@ -16,6 +19,7 @@ import {
16
19
  copilotAcpOf,
17
20
  currentSignal,
18
21
  differentThings,
22
+ estimateTokens,
19
23
  identifierWords,
20
24
  judgmentKey,
21
25
  loadOrgPack,
@@ -23,21 +27,25 @@ import {
23
27
  namedBeyondAnswer,
24
28
  orgPackDirOf,
25
29
  quotedIn,
26
- require_dist,
27
30
  runsDirOf,
28
31
  runsRelOf,
29
32
  stateDirOf,
30
- stepModelsOf
31
- } from "./chunk-PAINMSID.js";
33
+ stepModelsOf,
34
+ tokenUnits
35
+ } from "./chunk-FPBUTZI5.js";
32
36
  import {
33
37
  writeFileAtomic
34
- } from "./chunk-ODMBPDDV.js";
38
+ } from "./chunk-B4AEL3RF.js";
39
+ import {
40
+ require_dist
41
+ } from "./chunk-BQGDB6ZL.js";
35
42
  import {
36
43
  __toESM
37
44
  } from "./chunk-TV45EUGM.js";
38
45
 
39
46
  // packages/ai/dist/person-only.js
40
47
  var flag = (a, ...names) => a.some((x) => names.some((n) => x === n || x.startsWith(`${n}=`)));
48
+ var switchOn = (a, name) => a.some((x) => x === name || x.startsWith(`${name}=`) && /^(true)?$/i.test(x.slice(name.length + 1)));
41
49
  var RULES = [
42
50
  {
43
51
  test: (w, a) => w[0] === "change" && w[1] === "release-prs" && flag(a, "--approve"),
@@ -89,7 +97,7 @@ var RULES = [
89
97
  },
90
98
  { test: (_w, a) => flag(a, "--as"), why: "--as names a person; a session acts as no one" },
91
99
  {
92
- test: (w, a) => w[0] === "rules" && (w[1] === "activate" || w[1] === "off" || w[1] === "add" && !flag(a, "--draft")),
100
+ test: (w, a) => w[0] === "rules" && (w[1] === "activate" || w[1] === "off" || w[1] === "add" && !switchOn(a, "--draft")),
93
101
  why: "a person sets a reading rule active or off (a session drafts)"
94
102
  },
95
103
  {
@@ -124,13 +132,12 @@ var RULES = [
124
132
  why: "a person says who looks after the org pack"
125
133
  }
126
134
  ];
135
+ function withoutLegacy(argv) {
136
+ return argv[0] === "legacy" && argv[1] !== void 0 && !argv[1].startsWith("-") ? argv.slice(1) : argv;
137
+ }
127
138
  function personOnlyWhy(argv) {
128
- const words2 = [];
129
- for (const x of argv) {
130
- if (x.startsWith("-"))
131
- break;
132
- words2.push(x);
133
- }
139
+ argv = withoutLegacy(argv);
140
+ const words2 = commandWords(argv);
134
141
  return RULES.find((r) => r.test(words2, argv))?.why;
135
142
  }
136
143
  var isPersonsFactsFile = (name) => /\.audit\.yaml$|\.corrections\.jsonl$/i.test(windowsName(name));
@@ -956,9 +963,16 @@ var PromptTooLong = class extends Error {
956
963
 
957
964
  // packages/ai/dist/context.js
958
965
  var sha2562 = (s) => createHash2("sha256").update(s, "utf8").digest("hex");
959
- function estimateTokens(text) {
960
- return Math.ceil(text.length / 4);
961
- }
966
+ var RequiredSourceLeftOut = class extends Error {
967
+ step;
968
+ left;
969
+ constructor(step, left) {
970
+ super(`atticus ${step} can't go without ${left.map((l) => `${l.origin}: ${l.reason}`).join("; ")}.`);
971
+ this.step = step;
972
+ this.left = left;
973
+ this.name = "RequiredSourceLeftOut";
974
+ }
975
+ };
962
976
  function wrapData(source, text) {
963
977
  const safe = escapeDelimiters(text).text;
964
978
  return `<atticus-data id="${attr(source.id)}" kind="${attr(source.kind)}" origin="${attr(source.origin)}">
@@ -971,10 +985,10 @@ function buildContextPack(given) {
971
985
  const maxTokens = given.maxTokens ?? currentPromptLimit();
972
986
  const o = { ...given, budget: fitBudget(given.budget, maxTokens) };
973
987
  if (maxTokens !== void 0) {
974
- const required = new Set(o.required ?? []);
975
- const needed = o.sources.filter((s) => s.trusted || required.has(s.id)).reduce((n, s) => n + estimateTokens(s.trusted ? s.text : wrapData(s, s.text)), estimateTokens(DATA_RULE));
988
+ const required2 = new Set(o.required ?? []);
989
+ const needed = o.sources.filter((s) => s.trusted || required2.has(s.id)).reduce((n, s) => n + estimateTokens(s.trusted ? s.text : wrapData(s, s.text)), estimateTokens(DATA_RULE));
976
990
  if (needed > o.budget)
977
- throw new PromptTooLong(o.step ?? o.agent, needed, o.budget, maxTokens, o.sources.filter((s) => !s.trusted && required.has(s.id)).map((s) => s.id), o.smaller);
991
+ throw new PromptTooLong(o.step ?? o.agent, needed, o.budget, maxTokens, o.sources.filter((s) => !s.trusted && required2.has(s.id)).map((s) => s.id), o.smaller);
978
992
  }
979
993
  const maxLevel = o.levels.indexOf(o.maxClassification);
980
994
  if (maxLevel === -1)
@@ -1030,6 +1044,14 @@ function buildContextPack(given) {
1030
1044
  }
1031
1045
  if (total > o.budget)
1032
1046
  throw new Error(`instructions alone (${total} tokens) exceed the ${o.budget}-token budget`);
1047
+ const required = new Set(o.required ?? []);
1048
+ const left = dropped.filter((d) => required.has(d.id));
1049
+ if (left.length)
1050
+ throw new RequiredSourceLeftOut(o.step ?? o.agent, left.map((d) => ({
1051
+ id: d.id,
1052
+ origin: o.sources.find((s) => s.id === d.id)?.origin ?? d.id,
1053
+ reason: d.reason
1054
+ })));
1033
1055
  const prompt = parts.join("\n\n") + "\n";
1034
1056
  return {
1035
1057
  prompt,
@@ -1048,6 +1070,11 @@ function buildContextPack(given) {
1048
1070
  };
1049
1071
  }
1050
1072
 
1073
+ // packages/ai/dist/runtime.js
1074
+ import { randomBytes } from "node:crypto";
1075
+ import { mkdir } from "node:fs/promises";
1076
+ import { join } from "node:path";
1077
+
1051
1078
  // packages/ai/dist/step-class.js
1052
1079
  var STEP_CLASS_BY_AGENT = {
1053
1080
  // read: the repo read into facts (atticus map, and its fix round for the facts rejected).
@@ -1212,9 +1239,22 @@ function checkAllowed(kind, agent) {
1212
1239
  }
1213
1240
  function makeRunId(now, seq) {
1214
1241
  const stamp = now.toISOString().replace(/[-:TZ.]/g, "").slice(0, 14);
1215
- const tail2 = seq !== void 0 ? String(seq).padStart(4, "0") : Math.random().toString(36).slice(2, 8);
1242
+ const tail2 = seq !== void 0 ? String(seq).padStart(4, "0") : randomBytes(3).toString("hex");
1216
1243
  return `run-${stamp}-${tail2}`;
1217
1244
  }
1245
+ async function claimRunDir(dir, next) {
1246
+ await mkdir(dir, { recursive: true });
1247
+ for (let i = 0; ; i++) {
1248
+ const runId = next();
1249
+ try {
1250
+ await mkdir(join(dir, runId));
1251
+ return runId;
1252
+ } catch (e) {
1253
+ if (e.code !== "EEXIST" || i >= 9999)
1254
+ throw e;
1255
+ }
1256
+ }
1257
+ }
1218
1258
  function toRunSummary(run) {
1219
1259
  return {
1220
1260
  schemaVersion: RUN_SCHEMA_VERSION,
@@ -1260,6 +1300,17 @@ var OneShotRuntime = class {
1260
1300
  /** Keep a finished run where Model runs reads it (the model runtime, given a root). */
1261
1301
  async keep(_run) {
1262
1302
  }
1303
+ /**
1304
+ * The next run id: counted from 1 on a test's clock (deterministic), with a random tail on the
1305
+ * real one, so two commands' runtimes in one second don't share an id (round 46).
1306
+ */
1307
+ nextRunId(now) {
1308
+ return makeRunId(now, this.opts.now ? ++this.seq : void 0);
1309
+ }
1310
+ /** A new run's id; a runtime that keeps its runs in folders claims the folder (`claimRunDir`). */
1311
+ async newRunId(_request, now) {
1312
+ return this.nextRunId(now);
1313
+ }
1263
1314
  async prepare(request) {
1264
1315
  checkAllowed(this.allowedAs(request.agent), request.agent);
1265
1316
  if (request.pack.manifest.totalTokens > request.agent.tokenBudget) {
@@ -1267,7 +1318,7 @@ var OneShotRuntime = class {
1267
1318
  }
1268
1319
  const now = this.now();
1269
1320
  const run = {
1270
- runId: makeRunId(now, ++this.seq),
1321
+ runId: await this.newRunId(request, now),
1271
1322
  request,
1272
1323
  runtime: this.kind,
1273
1324
  state: "prepared",
@@ -1322,12 +1373,12 @@ var OneShotRuntime = class {
1322
1373
  };
1323
1374
 
1324
1375
  // packages/ai/dist/runtimes.js
1325
- import { mkdir as mkdir2, readdir as readdir2, readFile as readFile2, writeFile as writeFile2 } from "node:fs/promises";
1326
- import { join as join2 } from "node:path";
1376
+ import { mkdir as mkdir3, readdir as readdir2, readFile as readFile2, writeFile as writeFile2 } from "node:fs/promises";
1377
+ import { join as join3 } from "node:path";
1327
1378
 
1328
1379
  // packages/ai/dist/tools.js
1329
- import { mkdir, readdir, readFile, writeFile } from "node:fs/promises";
1330
- import { join } from "node:path";
1380
+ import { mkdir as mkdir2, readdir, readFile, writeFile } from "node:fs/promises";
1381
+ import { join as join2 } from "node:path";
1331
1382
  var ToolError = class extends Error {
1332
1383
  constructor(message) {
1333
1384
  super(message);
@@ -1409,8 +1460,18 @@ function guardToolText(name, raw, room) {
1409
1460
  if (estimateTokens(wrap(text)) > room) {
1410
1461
  const note = `
1411
1462
  \u2026 cut at ${room} tokens; ask for less (a smaller limit, fewer hops, one id).`;
1412
- const chars = Math.max(0, room * 4 - wrap("").length - note.length);
1413
- text = text.slice(0, chars) + note;
1463
+ const units = Math.max(0, room * 4 - tokenUnits(wrap("")) - tokenUnits(note));
1464
+ let end = 0;
1465
+ for (let used = 0; end < text.length; end++) {
1466
+ const c = text.charCodeAt(end);
1467
+ used += c < 128 ? 1 : c >= 56320 && c <= 57343 ? 0 : 4;
1468
+ if (used > units)
1469
+ break;
1470
+ }
1471
+ const last = text.charCodeAt(end - 1);
1472
+ if (end > 0 && last >= 55296 && last <= 56319)
1473
+ end--;
1474
+ text = text.slice(0, end) + note;
1414
1475
  }
1415
1476
  return wrap(text);
1416
1477
  }
@@ -1457,7 +1518,7 @@ async function recordToolCalls(root, runId, update) {
1457
1518
  if (!found)
1458
1519
  return void 0;
1459
1520
  const tools = update(found.run.tools);
1460
- await mkdir(join(found.file, ".."), { recursive: true });
1521
+ await mkdir2(join2(found.file, ".."), { recursive: true });
1461
1522
  await writeFile(found.file, JSON.stringify({ ...found.run, tools }, null, 2) + "\n", "utf8");
1462
1523
  return tools;
1463
1524
  }
@@ -1472,7 +1533,7 @@ async function runFile(root, runId) {
1472
1533
  for (const change of await readdir(runs).catch(() => [])) {
1473
1534
  if (change.includes(".."))
1474
1535
  continue;
1475
- const file = join(runs, change, runId, "run.json");
1536
+ const file = join2(runs, change, runId, "run.json");
1476
1537
  const text = await readFile(file, "utf8").catch(() => void 0);
1477
1538
  if (text)
1478
1539
  return { file, run: JSON.parse(text) };
@@ -1516,8 +1577,8 @@ var ReplayRuntime = class _ReplayRuntime extends OneShotRuntime {
1516
1577
  } catch {
1517
1578
  }
1518
1579
  for (const a of agents.sort()) {
1519
- for (const f of (await readdir2(join2(dir, a)).catch(() => [])).filter((x) => x.endsWith(".json")).sort()) {
1520
- out.push(Recording.parse(JSON.parse(await readFile2(join2(dir, a, f), "utf8"))));
1580
+ for (const f of (await readdir2(join3(dir, a)).catch(() => [])).filter((x) => x.endsWith(".json")).sort()) {
1581
+ out.push(Recording.parse(JSON.parse(await readFile2(join3(dir, a, f), "utf8"))));
1521
1582
  }
1522
1583
  }
1523
1584
  return new _ReplayRuntime(out, opts);
@@ -1545,8 +1606,8 @@ async function recordRun(live, request, dir, model, now = /* @__PURE__ */ new Da
1545
1606
  model,
1546
1607
  recordedAt: now.toISOString()
1547
1608
  };
1548
- await mkdir2(join2(dir, rec.agent), { recursive: true });
1549
- await writeFile2(join2(dir, rec.agent, `${rec.promptSha256}.json`), JSON.stringify(rec, null, 2) + "\n", "utf8");
1609
+ await mkdir3(join3(dir, rec.agent), { recursive: true });
1610
+ await writeFile2(join3(dir, rec.agent, `${rec.promptSha256}.json`), JSON.stringify(rec, null, 2) + "\n", "utf8");
1550
1611
  return rec;
1551
1612
  }
1552
1613
  var MockModelProvider = class {
@@ -1645,17 +1706,26 @@ ${DATA_RULE}`;
1645
1706
  async keep(run) {
1646
1707
  if (!this.mo.root)
1647
1708
  return;
1648
- const dir = join2(runsDirOf(this.mo.root), run.request.change, run.runId);
1649
- await mkdir2(dir, { recursive: true });
1650
- await writeFile2(join2(dir, "prompt.md"), run.request.pack.prompt, "utf8");
1651
- await writeFile2(join2(dir, "context-manifest.json"), JSON.stringify(run.request.pack.manifest, null, 2) + "\n", "utf8");
1652
- await writeFile2(join2(dir, "run.json"), JSON.stringify(run, null, 2) + "\n", "utf8");
1709
+ const dir = join3(runsDirOf(this.mo.root), run.request.change, run.runId);
1710
+ await mkdir3(dir, { recursive: true });
1711
+ await writeFile2(join3(dir, "prompt.md"), run.request.pack.prompt, "utf8");
1712
+ await writeFile2(join3(dir, "context-manifest.json"), JSON.stringify(run.request.pack.manifest, null, 2) + "\n", "utf8");
1713
+ await writeFile2(join3(dir, "run.json"), JSON.stringify(run, null, 2) + "\n", "utf8");
1714
+ }
1715
+ /**
1716
+ * Round 46: given a root, the run's folder is claimed with its id, so another command's run in
1717
+ * the same second (its runtime counts from 1 too) never gets this id and overwrites it.
1718
+ */
1719
+ async newRunId(request, now) {
1720
+ if (!this.mo.root)
1721
+ return super.newRunId(request, now);
1722
+ return claimRunDir(join3(runsDirOf(this.mo.root), request.change), () => this.nextRunId(now));
1653
1723
  }
1654
1724
  };
1655
1725
 
1656
1726
  // packages/ai/dist/handoff.js
1657
- import { mkdir as mkdir3, readdir as readdir3, readFile as readFile3, rm, stat, writeFile as writeFile3 } from "node:fs/promises";
1658
- import { join as join3 } from "node:path";
1727
+ import { mkdir as mkdir4, readdir as readdir3, readFile as readFile3, rm, stat, writeFile as writeFile3 } from "node:fs/promises";
1728
+ import { join as join4 } from "node:path";
1659
1729
  var BATCH_OUTPUT = "answers.md";
1660
1730
  var DEFAULT_BATCH_MAX_TOKENS = 6e4;
1661
1731
  var SECTION = /^===[ \t]*([a-z][a-z0-9-]*)[ \t]*$/;
@@ -1694,12 +1764,12 @@ var HandoffRuntime = class _HandoffRuntime {
1694
1764
  this.o = o;
1695
1765
  }
1696
1766
  now = () => this.o.now?.() ?? /* @__PURE__ */ new Date();
1697
- runDir = (change, runId) => join3(runsDirOf(this.o.root), change, runId);
1698
- outputFile = (r) => r.request.outputIn === "run" ? join3(this.runDir(r.request.change, r.runId), r.request.outputPath) : join3(changesDirOf(this.o.root), r.request.change, r.request.outputPath);
1767
+ runDir = (change, runId) => join4(runsDirOf(this.o.root), change, runId);
1768
+ outputFile = (r) => r.request.outputIn === "run" ? join4(this.runDir(r.request.change, r.runId), r.request.outputPath) : join4(changesDirOf(this.o.root), r.request.change, r.request.outputPath);
1699
1769
  // Atomic: a step reading run.json while `handoff done` writes it never sees half a file.
1700
1770
  async save(run) {
1701
1771
  const dir = this.runDir(run.request.change, run.runId);
1702
- await writeFileAtomic(join3(dir, "run.json"), JSON.stringify(run, null, 2) + "\n");
1772
+ await writeFileAtomic(join4(dir, "run.json"), JSON.stringify(run, null, 2) + "\n");
1703
1773
  return run;
1704
1774
  }
1705
1775
  /** Where a run's prompt is, relative to the root (`atticus <step> --handoff` prints it). */
@@ -1740,14 +1810,33 @@ var HandoffRuntime = class _HandoffRuntime {
1740
1810
  ]),
1741
1811
  "---",
1742
1812
  "",
1743
- `When the file is complete, run: atticus handoff done ${run.runId}`,
1813
+ _HandoffRuntime.finishLine(where),
1744
1814
  ""
1745
1815
  ].join("\n");
1746
1816
  }
1817
+ /**
1818
+ * ADR 0189: the prompt's last line asks the assistant to write the file, and nothing else. The
1819
+ * app notices the file once it is complete and checks it, as Done did (Done stays for a person
1820
+ * who wants to check it at once); no line asks the person, or the assistant, to run a command.
1821
+ */
1822
+ static finishLine(where) {
1823
+ return `When ${where} is complete, stop there: Atticus notices the file and checks it. There is nothing to run.`;
1824
+ }
1747
1825
  /** The prompt the person's assistant gets. It ends with the completion command. */
1748
- static promptFor(run, changesRel = "openspec/changes", runsRel = ".runs") {
1826
+ static promptFor(run, changesRel = "openspec/changes", runsRel = ".runs", ending = true) {
1749
1827
  const { agent, pack, outputPath, change } = run.request;
1750
1828
  const where = _HandoffRuntime.outputRel(run, changesRel, runsRel);
1829
+ if (!ending)
1830
+ return [
1831
+ `# ${agent.id}: write ${outputPath} for change ${change}`,
1832
+ "",
1833
+ agent.description,
1834
+ "",
1835
+ `Write the result to ${where}. Change no other files.`,
1836
+ "",
1837
+ pack.prompt.trimEnd(),
1838
+ ""
1839
+ ].join("\n");
1751
1840
  return [
1752
1841
  `# ${agent.id}: write ${outputPath} for change ${change}`,
1753
1842
  "",
@@ -1757,16 +1846,19 @@ var HandoffRuntime = class _HandoffRuntime {
1757
1846
  "",
1758
1847
  pack.prompt.trimEnd(),
1759
1848
  "",
1760
- run.request.selfCheck ? `When the file is complete, run: atticus handoff done ${run.runId}. It checks the file as the stage does: fix each problem it lists in the file and run it again, until it says the file is clean. After ${run.request.selfCheck.limit} checks the file is handed in as it is.` : `When the file is complete, run: atticus handoff done ${run.runId}`,
1849
+ // ADR 0189: an assistant that can run commands may check its file first, as the stage
1850
+ // does; the check only reads the file, so the app's own check is still the one that counts.
1851
+ ...run.request.selfCheck ? [
1852
+ `Before you finish, you may check the file: ${run.request.selfCheck.command} ${where} checks it as the stage does. Fix each problem it lists and check again, until it says the file is clean (at most ${run.request.selfCheck.limit} times).`,
1853
+ ""
1854
+ ] : [],
1855
+ _HandoffRuntime.finishLine(where),
1761
1856
  ""
1762
1857
  ].join("\n");
1763
1858
  }
1764
- /** A run id no run folder of the change has yet. */
1859
+ /** A run id no run folder of the change has yet, its folder made (claimed) with it. */
1765
1860
  async freshId(change, now) {
1766
- let runId = makeRunId(now, ++this.seq);
1767
- while (await stat(this.runDir(change, runId)).catch(() => void 0))
1768
- runId = makeRunId(now, ++this.seq);
1769
- return runId;
1861
+ return claimRunDir(join4(runsDirOf(this.o.root), change), () => makeRunId(now, ++this.seq));
1770
1862
  }
1771
1863
  /**
1772
1864
  * Whether `parts` runs that wait together, `tokens` in all, are asked in one prompt (ADR 0185):
@@ -1836,9 +1928,9 @@ var HandoffRuntime = class _HandoffRuntime {
1836
1928
  };
1837
1929
  run.request.pack = { prompt, manifest };
1838
1930
  const dir = this.runDir(o.change, runId);
1839
- await mkdir3(dir, { recursive: true });
1840
- await writeFile3(join3(dir, "prompt.md"), prompt, "utf8");
1841
- await writeFile3(join3(dir, "context-manifest.json"), JSON.stringify(manifest, null, 2) + "\n", "utf8");
1931
+ await mkdir4(dir, { recursive: true });
1932
+ await writeFile3(join4(dir, "prompt.md"), prompt, "utf8");
1933
+ await writeFile3(join4(dir, "context-manifest.json"), JSON.stringify(manifest, null, 2) + "\n", "utf8");
1842
1934
  await this.save(run);
1843
1935
  for (const p of parts)
1844
1936
  await this.save({ ...p.run, batch: runId });
@@ -1863,9 +1955,9 @@ var HandoffRuntime = class _HandoffRuntime {
1863
1955
  stepClass: stepClassOf(request)
1864
1956
  };
1865
1957
  const dir = this.runDir(request.change, run.runId);
1866
- await mkdir3(dir, { recursive: true });
1867
- await writeFile3(join3(dir, "prompt.md"), _HandoffRuntime.promptFor(run, changesRelOf(this.o.root), runsRelOf(this.o.root)), "utf8");
1868
- await writeFile3(join3(dir, "context-manifest.json"), JSON.stringify(request.pack.manifest, null, 2) + "\n", "utf8");
1958
+ await mkdir4(dir, { recursive: true });
1959
+ await writeFile3(join4(dir, "prompt.md"), _HandoffRuntime.promptFor(run, changesRelOf(this.o.root), runsRelOf(this.o.root)), "utf8");
1960
+ await writeFile3(join4(dir, "context-manifest.json"), JSON.stringify(request.pack.manifest, null, 2) + "\n", "utf8");
1869
1961
  return this.save(run);
1870
1962
  }
1871
1963
  /** Hand the prompt to the assistant; Atticus now waits. */
@@ -1984,7 +2076,7 @@ var HandoffRuntime = class _HandoffRuntime {
1984
2076
  throw new RuntimeError(`not a run id: ${runId}`);
1985
2077
  const runs = runsDirOf(this.o.root);
1986
2078
  for (const change of await readdir3(runs).catch(() => [])) {
1987
- const f = join3(runs, change, runId, "run.json");
2079
+ const f = join4(runs, change, runId, "run.json");
1988
2080
  const text = await readFile3(f, "utf8").catch(() => void 0);
1989
2081
  if (text)
1990
2082
  return JSON.parse(text);
@@ -1998,12 +2090,12 @@ async function pruneRuns(root, days, now = /* @__PURE__ */ new Date(), only) {
1998
2090
  const cutoff = now.getTime() - days * 864e5;
1999
2091
  const changes = only ? [only] : await readdir3(runs).catch(() => []);
2000
2092
  for (const change of changes) {
2001
- for (const runId of await readdir3(join3(runs, change)).catch(() => [])) {
2002
- const f = join3(runs, change, runId, "run.json");
2093
+ for (const runId of await readdir3(join4(runs, change)).catch(() => [])) {
2094
+ const f = join4(runs, change, runId, "run.json");
2003
2095
  const text = await readFile3(f, "utf8").catch(() => void 0);
2004
2096
  const started = text ? Date.parse(JSON.parse(text).startedAt) : NaN;
2005
2097
  if (!Number.isNaN(started) && started < cutoff) {
2006
- await rm(join3(runs, change, runId), { recursive: true, force: true });
2098
+ await rm(join4(runs, change, runId), { recursive: true, force: true });
2007
2099
  removed.push(`${change}/${runId}`);
2008
2100
  }
2009
2101
  }
@@ -2014,15 +2106,15 @@ async function pruneRuns(root, days, now = /* @__PURE__ */ new Date(), only) {
2014
2106
  // packages/ai/dist/factory.js
2015
2107
  import { existsSync as existsSync2 } from "node:fs";
2016
2108
  import { spawn as spawn2 } from "node:child_process";
2017
- import { mkdir as mkdir5, mkdtemp, readFile as readFile5, rm as rm2, stat as stat3, writeFile as writeFile5 } from "node:fs/promises";
2109
+ import { mkdir as mkdir6, mkdtemp, readFile as readFile5, rm as rm2, stat as stat3, writeFile as writeFile5 } from "node:fs/promises";
2018
2110
  import { tmpdir } from "node:os";
2019
- import { dirname as dirname2, join as join5 } from "node:path";
2111
+ import { dirname as dirname2, join as join6 } from "node:path";
2020
2112
 
2021
2113
  // packages/ai/dist/copilot-acp.js
2022
2114
  import { spawn } from "node:child_process";
2023
2115
  import { existsSync, realpathSync } from "node:fs";
2024
- import { mkdir as mkdir4, readFile as readFile4, stat as stat2, writeFile as writeFile4 } from "node:fs/promises";
2025
- import { basename, dirname, isAbsolute, join as join4, relative, resolve, sep } from "node:path";
2116
+ import { mkdir as mkdir5, readFile as readFile4, stat as stat2, writeFile as writeFile4 } from "node:fs/promises";
2117
+ import { basename, dirname, isAbsolute, join as join5, relative, resolve, sep } from "node:path";
2026
2118
  import { createInterface } from "node:readline";
2027
2119
 
2028
2120
  // packages/ai/dist/acp.js
@@ -2301,10 +2393,12 @@ function atticusArgvOf(command, args = []) {
2301
2393
  const argv = all.slice(1);
2302
2394
  if (!argv.length)
2303
2395
  return { refused: "atticus needs a command (atticus next, atticus verify <repo>, ...)" };
2396
+ const named = [...withoutLegacy(argv)];
2304
2397
  for (const p of PERSONS)
2305
- if (p.test(argv))
2398
+ if (p.test(named))
2306
2399
  return { refused: `Refused: ${p.why}.` };
2307
- if (argv[0].startsWith("-") && !["--help", "--version", "-h"].includes(argv[0]))
2400
+ const hidden = argv[0] === "legacy" && argv[1]?.startsWith("-") && argv.slice(2).some((x) => !x.startsWith("-"));
2401
+ if (hidden || argv[0].startsWith("-") && !["--help", "--version", "-h"].includes(argv[0]))
2308
2402
  return {
2309
2403
  refused: `Put the command first: atticus <command> [arguments] (got ${short(argv.join(" "))})`
2310
2404
  };
@@ -2319,7 +2413,7 @@ function real(p) {
2319
2413
  const rest = [];
2320
2414
  for (; ; ) {
2321
2415
  try {
2322
- return join4(realpathSync.native(cur), ...rest.reverse());
2416
+ return join5(realpathSync.native(cur), ...rest.reverse());
2323
2417
  } catch {
2324
2418
  const up = dirname(cur);
2325
2419
  if (up === cur)
@@ -2383,7 +2477,7 @@ var factsOnly = (root, factsDir) => ({
2383
2477
  });
2384
2478
  function readRootsOf(root) {
2385
2479
  const out = [root];
2386
- const state = join4(stateDirOf(root), "workspace");
2480
+ const state = join5(stateDirOf(root), "workspace");
2387
2481
  if (!sameOrUnder(resolve(root), resolve(state)))
2388
2482
  out.push(state);
2389
2483
  return out;
@@ -2634,7 +2728,7 @@ async function runAcpSession(o) {
2634
2728
  const why = paths.writable(p.path);
2635
2729
  if (why)
2636
2730
  return refuse("fs/write_text_file", { path: p.path }, why);
2637
- await mkdir4(dirname(p.path), { recursive: true });
2731
+ await mkdir5(dirname(p.path), { recursive: true });
2638
2732
  await writeFile4(p.path, p.content, "utf8");
2639
2733
  record("fs/write_text_file", { path: p.path }, `${p.content.length} characters written`);
2640
2734
  return null;
@@ -2829,7 +2923,7 @@ async function runAcpSession(o) {
2829
2923
  t.kill.abort();
2830
2924
  await server.close().catch(() => void 0);
2831
2925
  if (o.transcript) {
2832
- await mkdir4(dirname(o.transcript), { recursive: true });
2926
+ await mkdir5(dirname(o.transcript), { recursive: true });
2833
2927
  await writeFile4(o.transcript, transcript.join("\n") + (transcript.length ? "\n" : ""), "utf8");
2834
2928
  }
2835
2929
  }
@@ -2968,20 +3062,24 @@ var CopilotAcpRuntime = class extends OneShotRuntime {
2968
3062
  modelFor() {
2969
3063
  return this.c.model;
2970
3064
  }
3065
+ /** Review round 48: the run's folder is claimed, as a model run's is (claimRunDir). */
3066
+ async newRunId(request, now) {
3067
+ return claimRunDir(join5(runsDirOf(this.c.root), request.change), () => this.nextRunId(now));
3068
+ }
2971
3069
  async produce(run, signal) {
2972
3070
  const { request } = run;
2973
3071
  const root = this.c.root;
2974
- const dir = join4(runsDirOf(root), request.change, run.runId);
2975
- await mkdir4(dir, { recursive: true });
3072
+ const dir = join5(runsDirOf(root), request.change, run.runId);
3073
+ await mkdir5(dir, { recursive: true });
2976
3074
  const outRel = HandoffRuntime.outputRel(run, changesRelOf(root), runsRelOf(root));
2977
3075
  const prompt = HandoffRuntime.promptFor(run, changesRelOf(root), runsRelOf(root)).replace(/\nWhen the file is complete.*\n$/s, "\n") + (request.selfCheck ? `
2978
3076
  Before you finish, check the file: run ${request.selfCheck.command} ${outRel}. Fix each problem it lists and run it again, until it says the file is clean (at most ${request.selfCheck.limit} times).
2979
3077
  ` : "") + `
2980
3078
  ${DATA_RULE}
2981
3079
  `;
2982
- await writeFile4(join4(dir, "prompt.md"), prompt, "utf8");
2983
- await writeFile4(join4(dir, "context-manifest.json"), JSON.stringify(request.pack.manifest, null, 2) + "\n", "utf8");
2984
- const outputFile = request.outputIn === "run" ? join4(dir, request.outputPath) : join4(changesDirOf(root), request.change, request.outputPath);
3080
+ await writeFile4(join5(dir, "prompt.md"), prompt, "utf8");
3081
+ await writeFile4(join5(dir, "context-manifest.json"), JSON.stringify(request.pack.manifest, null, 2) + "\n", "utf8");
3082
+ const outputFile = request.outputIn === "run" ? join5(dir, request.outputPath) : join5(changesDirOf(root), request.change, request.outputPath);
2985
3083
  const before = (await stat2(outputFile).catch(() => void 0))?.mtimeMs;
2986
3084
  const r = await runAcpSession({
2987
3085
  command: this.c.command,
@@ -2997,7 +3095,7 @@ ${DATA_RULE}
2997
3095
  ...this.c.env ? { env: this.c.env } : {},
2998
3096
  ...this.c.spawn ? { spawn: this.c.spawn } : {},
2999
3097
  ...this.c.clientVersion ? { clientVersion: this.c.clientVersion } : {},
3000
- transcript: join4(dir, "transcript.jsonl")
3098
+ transcript: join5(dir, "transcript.jsonl")
3001
3099
  });
3002
3100
  const after = (await stat2(outputFile).catch(() => void 0))?.mtimeMs;
3003
3101
  const written = after !== void 0 && after !== before ? await readFile4(outputFile, "utf8") : void 0;
@@ -3021,9 +3119,9 @@ ${DATA_RULE}
3021
3119
  }
3022
3120
  /** Kept as a hand-off run is: run.json beside the prompt, so Model runs shows it. */
3023
3121
  async keep(run) {
3024
- const dir = join4(runsDirOf(this.c.root), run.request.change, run.runId);
3025
- await mkdir4(dir, { recursive: true });
3026
- await writeFile4(join4(dir, "run.json"), JSON.stringify(run, null, 2) + "\n", "utf8");
3122
+ const dir = join5(runsDirOf(this.c.root), run.request.change, run.runId);
3123
+ await mkdir5(dir, { recursive: true });
3124
+ await writeFile4(join5(dir, "run.json"), JSON.stringify(run, null, 2) + "\n", "utf8");
3027
3125
  }
3028
3126
  };
3029
3127
  var noExec = async (argv) => ({
@@ -3032,10 +3130,10 @@ var noExec = async (argv) => ({
3032
3130
  `
3033
3131
  });
3034
3132
  async function keepAcpRun(o) {
3035
- const dir = join4(runsDirOf(o.root), o.change, o.runId);
3036
- await mkdir4(dir, { recursive: true });
3037
- if (!existsSync(join4(dir, "prompt.md")))
3038
- await writeFile4(join4(dir, "prompt.md"), o.prompt, "utf8");
3133
+ const dir = join5(runsDirOf(o.root), o.change, o.runId);
3134
+ await mkdir5(dir, { recursive: true });
3135
+ if (!existsSync(join5(dir, "prompt.md")))
3136
+ await writeFile4(join5(dir, "prompt.md"), o.prompt, "utf8");
3039
3137
  const r = o.result;
3040
3138
  const run = {
3041
3139
  runId: o.runId,
@@ -3058,7 +3156,7 @@ async function keepAcpRun(o) {
3058
3156
  ...r?.model ? { model: r.model } : {},
3059
3157
  ...r ? { assistant: r.assistant } : {}
3060
3158
  };
3061
- await writeFile4(join4(dir, "run.json"), JSON.stringify(run, null, 2) + "\n", "utf8");
3159
+ await writeFile4(join5(dir, "run.json"), JSON.stringify(run, null, 2) + "\n", "utf8");
3062
3160
  return dir;
3063
3161
  }
3064
3162
 
@@ -3161,7 +3259,7 @@ function collectChild(start, prompt, timeoutMs, cwd, platform = process.platform
3161
3259
  child.stdin.end(prompt, "utf8");
3162
3260
  });
3163
3261
  }
3164
- var cloneDirs = (root) => [join5(root, "workspace"), join5(stateDirOf(root), "workspace")];
3262
+ var cloneDirs = (root) => [join6(root, "workspace"), join6(stateDirOf(root), "workspace")];
3165
3263
  async function existingDirs(dirs) {
3166
3264
  const out = [];
3167
3265
  for (const d of [...new Set(dirs)])
@@ -3202,9 +3300,9 @@ var HeadlessClaudeCodeRuntime = class _HeadlessClaudeCodeRuntime extends OneShot
3202
3300
  }
3203
3301
  async produce(run, signal) {
3204
3302
  const { request } = run;
3205
- const dir = join5(runsDirOf(this.h.root), request.change, run.runId);
3303
+ const dir = join6(runsDirOf(this.h.root), request.change, run.runId);
3206
3304
  const reviewer = request.agent.outputArtifact === "findings" && request.outputIn === "run";
3207
- const work = reviewer ? await mkdtemp(join5(tmpdir(), "atticus-review-")) : void 0;
3305
+ const work = reviewer ? await mkdtemp(join6(tmpdir(), "atticus-review-")) : void 0;
3208
3306
  const clones = work ? await existingDirs(cloneDirs(this.h.root)) : [];
3209
3307
  const base = work ? {
3210
3308
  cwd: work,
@@ -3218,27 +3316,27 @@ var HeadlessClaudeCodeRuntime = class _HeadlessClaudeCodeRuntime extends OneShot
3218
3316
  `Bash(${request.selfCheck.command}:*)`
3219
3317
  ]
3220
3318
  } : base;
3221
- await mkdir5(dir, { recursive: true });
3222
- const promptFile = join5(dir, "prompt.md");
3319
+ await mkdir6(dir, { recursive: true });
3320
+ const promptFile = join6(dir, "prompt.md");
3223
3321
  const self = reviewer ? void 0 : request.selfCheck;
3224
- const handoff = HandoffRuntime.promptFor(run, changesRelOf(this.h.root), runsRelOf(this.h.root)).replace(/\nWhen the file is complete.*\n$/s, "\n") + // W3a: the drafter checks its own file with the stage's checks before it finishes.
3322
+ const handoff = HandoffRuntime.promptFor(run, changesRelOf(this.h.root), runsRelOf(this.h.root), false) + // W3a: the drafter checks its own file with the stage's checks before it finishes.
3225
3323
  (self ? `
3226
3324
  Before you finish, check the file: run ${self.command} ${HandoffRuntime.outputRel(run, changesRelOf(this.h.root), runsRelOf(this.h.root))}. Fix each problem it lists and run it again, until it says the file is clean (at most ${self.limit} times).
3227
3325
  ` : "");
3228
3326
  const prompt = reviewer ? handoff.replace(`Write the result to ${HandoffRuntime.outputRel(run, changesRelOf(this.h.root), runsRelOf(this.h.root))}.`, `Write the result to ${request.outputPath}.${clones.length ? ` The metarepo is at ${this.h.root}: a folder named relative to the metarepo (the repos' clones under workspace/) is there, to read, never to edit.` : ""}`) : handoff;
3229
3327
  await writeFile5(promptFile, prompt, "utf8");
3230
- await writeFile5(join5(dir, "context-manifest.json"), JSON.stringify(request.pack.manifest, null, 2) + "\n", "utf8");
3328
+ await writeFile5(join6(dir, "context-manifest.json"), JSON.stringify(request.pack.manifest, null, 2) + "\n", "utf8");
3231
3329
  if (!await stat3(inv.cwd).catch(() => void 0))
3232
3330
  throw new RuntimeError(`the worktree ${inv.cwd} doesn't exist`);
3233
- const outputFile = work ? join5(work, request.outputPath) : request.outputIn === "run" ? join5(dir, request.outputPath) : join5(changesDirOf(this.h.root), request.change, request.outputPath);
3331
+ const outputFile = work ? join6(work, request.outputPath) : request.outputIn === "run" ? join6(dir, request.outputPath) : join6(changesDirOf(this.h.root), request.change, request.outputPath);
3234
3332
  try {
3235
3333
  return await this.runIn(run, dir, inv, prompt, promptFile, outputFile, signal);
3236
3334
  } finally {
3237
3335
  if (work) {
3238
3336
  const kept = await readFile5(outputFile, "utf8").catch(() => void 0);
3239
3337
  if (kept !== void 0) {
3240
- await mkdir5(dirname2(join5(dir, request.outputPath)), { recursive: true });
3241
- await writeFile5(join5(dir, request.outputPath), kept, "utf8");
3338
+ await mkdir6(dirname2(join6(dir, request.outputPath)), { recursive: true });
3339
+ await writeFile5(join6(dir, request.outputPath), kept, "utf8");
3242
3340
  }
3243
3341
  await rm2(work, { recursive: true, force: true, maxRetries: 5 }).catch(() => void 0);
3244
3342
  }
@@ -3262,7 +3360,7 @@ Before you finish, check the file: run ${self.command} ${HandoffRuntime.outputRe
3262
3360
  timeoutMs: this.h.timeoutMs ?? 30 * 6e4,
3263
3361
  ...signal ? { signal } : {}
3264
3362
  });
3265
- await writeFile5(join5(dir, "claude-output.json"), res.stdout, "utf8");
3363
+ await writeFile5(join6(dir, "claude-output.json"), res.stdout, "utf8");
3266
3364
  let parsed;
3267
3365
  try {
3268
3366
  parsed = JSON.parse(res.stdout);
@@ -3318,6 +3416,10 @@ var toolSource;
3318
3416
  function registerToolSource(source) {
3319
3417
  toolSource = source;
3320
3418
  }
3419
+ var modelGuard;
3420
+ function registerModelGuard(g) {
3421
+ modelGuard = g;
3422
+ }
3321
3423
  var acpRunner;
3322
3424
  function registerCopilotAcp(o) {
3323
3425
  acpRunner = o;
@@ -3371,6 +3473,8 @@ async function createRuntime(orgPack, o) {
3371
3473
  const cfg = rt.adapters.model;
3372
3474
  if (!cfg)
3373
3475
  throw new RuntimeConfigError("Model mode needs a model adapter in runtime.yaml (adapters.model with its type and settings). Until one is configured, use hand-off mode.");
3476
+ if (modelGuard && cfg.type !== "mock")
3477
+ await modelGuard({ root: o.root, type: cfg.type, settings: { ...cfg.settings } });
3374
3478
  const make = o.providers?.[cfg.type] ?? await providerFactoryFor(orgPack, cfg.type) ?? (cfg.type === "mock" ? (s) => new MockModelProvider(typeof s.model === "string" ? s.model : "mock-model", o.modelAnswer ?? (() => ""), o.modelScript) : void 0);
3375
3479
  if (!make)
3376
3480
  throw new RuntimeConfigError(`No ${cfg.type} model provider is installed. Add its plugin, or use hand-off mode.`);
@@ -3437,7 +3541,7 @@ var sayOnce = (line) => process.stderr.write(`${line}
3437
3541
  `);
3438
3542
  async function runtimeForCli(root, o = {}) {
3439
3543
  const env = o.env ?? process.env;
3440
- const op = await loadOrgPack(join5(orgPackDirOf(root)));
3544
+ const op = await loadOrgPack(join6(orgPackDirOf(root)));
3441
3545
  const bad = op.problems.filter((p) => p.file === "runtime.yaml");
3442
3546
  if (bad.length)
3443
3547
  throw new RuntimeConfigError(`org-pack/runtime.yaml has problems: ${bad.map((p) => `${p.path ? `${p.path}: ` : ""}${p.message}`).join("; ")}`);
@@ -3457,7 +3561,7 @@ async function runtimeForCli(root, o = {}) {
3457
3561
  env,
3458
3562
  onNote: o.onNote ?? sayOnce
3459
3563
  });
3460
- const describe = runtime.kind === "hand-off" ? "AI steps are handed to your assistant: Atticus writes the prompt and waits for atticus handoff done." : mode === "model" ? `AI steps call the ${op.runtime.adapters.model?.type ?? "configured"} model directly.` : mode === "headless-claude-code" ? "AI steps run in headless Claude Code." : mode === "copilot-acp" ? "AI steps run in GitHub Copilot, unattended, one new session each (copilot-acp)." : "AI steps replay recorded answers.";
3564
+ const describe = runtime.kind === "hand-off" ? "AI steps are handed to your assistant: Atticus writes the prompt and checks the answer once your assistant has written it." : mode === "model" ? `AI steps call the ${op.runtime.adapters.model?.type ?? "configured"} model directly.` : mode === "headless-claude-code" ? "AI steps run in headless Claude Code." : mode === "copilot-acp" ? "AI steps run in GitHub Copilot, unattended, one new session each (copilot-acp)." : "AI steps replay recorded answers.";
3461
3565
  return { runtime, mode: runtime.kind === "hand-off" ? "hand-off" : mode, describe };
3462
3566
  }
3463
3567
 
@@ -4045,6 +4149,7 @@ function recordedJudge(byTexts, o = {}) {
4045
4149
  }
4046
4150
 
4047
4151
  export {
4152
+ withoutLegacy,
4048
4153
  personOnlyWhy,
4049
4154
  isPersonsFactsFile,
4050
4155
  windowsName,
@@ -4081,7 +4186,7 @@ export {
4081
4186
  BIGGER_MODEL,
4082
4187
  PromptTooLong,
4083
4188
  sha2562 as sha256,
4084
- estimateTokens,
4189
+ RequiredSourceLeftOut,
4085
4190
  wrapData,
4086
4191
  DATA_RULE,
4087
4192
  buildContextPack,
@@ -4097,6 +4202,7 @@ export {
4097
4202
  RuntimeError,
4098
4203
  checkAllowed,
4099
4204
  makeRunId,
4205
+ claimRunDir,
4100
4206
  toRunSummary,
4101
4207
  OneShotRuntime,
4102
4208
  ToolError,
@@ -4162,6 +4268,7 @@ export {
4162
4268
  registeredModelProviders,
4163
4269
  clearModelProviders,
4164
4270
  registerToolSource,
4271
+ registerModelGuard,
4165
4272
  registerCopilotAcp,
4166
4273
  createRuntime,
4167
4274
  runtimeForCli,