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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/bin.js +3 -3
  2. package/dist/{chunk-TJP2KLZI.js → chunk-22VA7YYG.js} +11 -11
  3. package/dist/{chunk-5ION6STH.js → chunk-27HOC77H.js} +2 -2
  4. package/dist/chunk-2HFVFEBT.js +37 -0
  5. package/dist/{chunk-PVMGHQWB.js → chunk-2JQ2SCX7.js} +7 -7
  6. package/dist/{chunk-ZTIMXVV5.js → chunk-2M76O6AN.js} +2 -2
  7. package/dist/{chunk-PKCYRG6G.js → chunk-2V7A3J7B.js} +15 -12
  8. package/dist/{chunk-DX5H5YKM.js → chunk-2W6ZLQX6.js} +11 -11
  9. package/dist/{chunk-TIAPEYWI.js → chunk-2Z4U33UI.js} +3 -3
  10. package/dist/{chunk-ZDZCUZ4N.js → chunk-3JOHZDKD.js} +5 -5
  11. package/dist/{chunk-42L2WHP6.js → chunk-3ODHCYOG.js} +4 -4
  12. package/dist/{chunk-JLIEAQP4.js → chunk-3RI2HYPB.js} +4 -4
  13. package/dist/{chunk-CJ5FQHST.js → chunk-3VYKAAQ4.js} +5 -5
  14. package/dist/{chunk-U2SGLXFR.js → chunk-3ZYGPIOB.js} +17 -17
  15. package/dist/{chunk-7UKETVPW.js → chunk-46VGJBRS.js} +1 -1
  16. package/dist/{chunk-5I5JDJ3R.js → chunk-4CBEOTJG.js} +4 -4
  17. package/dist/{chunk-34NWVIBC.js → chunk-4HAYYEFB.js} +2 -2
  18. package/dist/{chunk-UYKKTEWB.js → chunk-4IAZSN4N.js} +14 -14
  19. package/dist/{chunk-5R2EWR47.js → chunk-4NMF7XDM.js} +7 -7
  20. package/dist/{chunk-CCXEXCRO.js → chunk-4WUHO5SI.js} +14 -14
  21. package/dist/{chunk-CYDJK34J.js → chunk-55H65YKF.js} +4 -4
  22. package/dist/{chunk-UQUDITWL.js → chunk-5EOJSQM3.js} +20 -20
  23. package/dist/{chunk-BHHIHENP.js → chunk-5GQHLNZB.js} +4 -4
  24. package/dist/{chunk-QL4VNY4U.js → chunk-5LDFVOKT.js} +1 -1
  25. package/dist/{chunk-EREL3TQG.js → chunk-5MT5MY3V.js} +1 -1
  26. package/dist/{chunk-W3ZWS3B3.js → chunk-5SDBKA5U.js} +10 -10
  27. package/dist/chunk-5UQ5W2PF.js +54 -0
  28. package/dist/{chunk-6IKYFARG.js → chunk-5WBRQSLJ.js} +19 -10
  29. package/dist/{chunk-Y2FMWQQB.js → chunk-62CGLT7D.js} +16 -16
  30. package/dist/chunk-6EHE7PX4.js +54 -0
  31. package/dist/{chunk-IJ7TPOXQ.js → chunk-6L3OB44C.js} +11 -11
  32. package/dist/{chunk-6AYUBYK6.js → chunk-6TY7S6Y6.js} +38 -12
  33. package/dist/{chunk-6ROZRBWH.js → chunk-6VLNXNEM.js} +4 -4
  34. package/dist/{chunk-VRH6ITQH.js → chunk-6Z2SM6TU.js} +9 -9
  35. package/dist/{chunk-JQG4VO47.js → chunk-7HX7LQ66.js} +1 -1
  36. package/dist/{chunk-WM4N2L4T.js → chunk-7YXDLJCV.js} +1 -1
  37. package/dist/{chunk-3W5R5J65.js → chunk-A5YAXW5G.js} +31 -8
  38. package/dist/{chunk-3M7QBKKG.js → chunk-A64EHZTF.js} +6 -6
  39. package/dist/{chunk-VC4JMXM5.js → chunk-A7URZ77Y.js} +19 -19
  40. package/dist/{chunk-Y6LFFSRV.js → chunk-B2EIZVAW.js} +10 -10
  41. package/dist/{chunk-GRZGEMO5.js → chunk-BAGRINRH.js} +102 -102
  42. package/dist/{chunk-U25OX22K.js → chunk-BH5DMXG5.js} +137 -16
  43. package/dist/{chunk-P7SONIEO.js → chunk-CFIDOXSH.js} +269 -64
  44. package/dist/{chunk-J3DTLYER.js → chunk-CFYAQTDM.js} +15 -15
  45. package/dist/{chunk-TIUBGJG3.js → chunk-CK5Z3RIN.js} +9 -9
  46. package/dist/{chunk-YISWYR3Q.js → chunk-DAZHJOLA.js} +4 -4
  47. package/dist/{chunk-DQKNOHUZ.js → chunk-DFDEUYHX.js} +1 -1
  48. package/dist/{chunk-Z2BA4NNR.js → chunk-DHWMEG7N.js} +2 -2
  49. package/dist/{chunk-PGFRXGHA.js → chunk-DJEDFJTZ.js} +2 -2
  50. package/dist/{chunk-XBNKOARP.js → chunk-DJTZVXI5.js} +4 -4
  51. package/dist/{chunk-U43G5EUN.js → chunk-DN4FULFM.js} +17 -17
  52. package/dist/{chunk-Q4AWUD6C.js → chunk-DO6B66AS.js} +16 -16
  53. package/dist/{chunk-O62VA6MH.js → chunk-EBVKNIKO.js} +13 -13
  54. package/dist/chunk-ECGTN32T.js +43 -0
  55. package/dist/{chunk-ESGIBN3S.js → chunk-EFI6BBPE.js} +1 -1
  56. package/dist/{chunk-7C7PTJM2.js → chunk-EJJONXPS.js} +27 -18
  57. package/dist/{chunk-TV6ECMN3.js → chunk-ETOIM5LK.js} +15 -15
  58. package/dist/{chunk-IDLO7UCZ.js → chunk-EUSWNGGG.js} +5 -5
  59. package/dist/chunk-F4WLUEZY.js +43 -0
  60. package/dist/chunk-F7EHN4CC.js +151 -0
  61. package/dist/{chunk-ZRP6ZXOF.js → chunk-FGGCLKPG.js} +12 -12
  62. package/dist/{chunk-PAQDPB6T.js → chunk-FMGMRFEH.js} +4 -4
  63. package/dist/chunk-FODNRZC7.js +38 -0
  64. package/dist/{chunk-PUGPT4Y6.js → chunk-FZTXX5Z2.js} +17 -17
  65. package/dist/{chunk-CGF4LKXR.js → chunk-GAK5KDYV.js} +3 -3
  66. package/dist/{chunk-DONCF2XC.js → chunk-GELBERZB.js} +3 -3
  67. package/dist/{chunk-MOY52LHS.js → chunk-GFQ4ZUY3.js} +13 -13
  68. package/dist/{chunk-6R2OM6Y3.js → chunk-GMXE44X7.js} +15 -15
  69. package/dist/{chunk-65XZSK6S.js → chunk-GNEFMED4.js} +4 -4
  70. package/dist/{chunk-OJAJXU65.js → chunk-GT6BMFHZ.js} +13 -1
  71. package/dist/{chunk-GX3Q5PRC.js → chunk-GWB4XIMM.js} +11 -11
  72. package/dist/{chunk-ARLH2ZMD.js → chunk-HGNJNPMB.js} +1 -1
  73. package/dist/{chunk-XP3KLC4S.js → chunk-HGNMMBFJ.js} +6 -6
  74. package/dist/{chunk-CUX4GRTB.js → chunk-HK2BXCMW.js} +3 -3
  75. package/dist/{chunk-3256EDLL.js → chunk-HOQB4B3F.js} +3 -3
  76. package/dist/{chunk-S5X7BVWP.js → chunk-HRVG2MOI.js} +19 -19
  77. package/dist/{chunk-FLROTO6F.js → chunk-HS7OZ3ZE.js} +3 -3
  78. package/dist/{chunk-AY7Y3WPD.js → chunk-I6PYLKHK.js} +15 -15
  79. package/dist/{chunk-WBOVB3XR.js → chunk-IDJJ5MDV.js} +24 -24
  80. package/dist/{chunk-N6YELFHL.js → chunk-IF6UROTX.js} +2 -2
  81. package/dist/{chunk-6HSRGY4B.js → chunk-IJQ5BF5K.js} +3 -3
  82. package/dist/{chunk-GU7PEYRC.js → chunk-IQLHTDHS.js} +10 -10
  83. package/dist/{chunk-BUD6JILH.js → chunk-IUDD5WS3.js} +21 -21
  84. package/dist/{chunk-QR65C3DV.js → chunk-J422SCUS.js} +4 -4
  85. package/dist/chunk-J5QWT2LV.js +41 -0
  86. package/dist/{chunk-7FPTI62T.js → chunk-J6CM5ZST.js} +20 -20
  87. package/dist/{chunk-NTNJNRHW.js → chunk-J7G2BGW4.js} +4 -4
  88. package/dist/{chunk-JS3DJH3Q.js → chunk-JCGIAHCX.js} +4 -4
  89. package/dist/{chunk-DKGWE5ZL.js → chunk-JI3QP66O.js} +21 -21
  90. package/dist/{chunk-OKUYBXXI.js → chunk-JQKFZIQN.js} +16 -16
  91. package/dist/{chunk-OMH3I5BH.js → chunk-JSTI6YPH.js} +2 -2
  92. package/dist/{chunk-DLX2R3MI.js → chunk-JW3YAB24.js} +31 -31
  93. package/dist/{chunk-MFRPLAOH.js → chunk-K3VT62TE.js} +2 -2
  94. package/dist/{chunk-CQD26SMZ.js → chunk-K4J4Z37A.js} +1090 -40
  95. package/dist/{chunk-MIOY6EXD.js → chunk-KEOTTRK2.js} +4 -4
  96. package/dist/{chunk-M3BJTXLR.js → chunk-KEZXPK4U.js} +9 -9
  97. package/dist/{chunk-3JLTN3Y7.js → chunk-KK4I5NNI.js} +7 -7
  98. package/dist/{chunk-G2K2D6XS.js → chunk-KLXAX2YW.js} +12 -12
  99. package/dist/{chunk-AUSC47BK.js → chunk-KMDIJ6O4.js} +4 -4
  100. package/dist/{chunk-7XWCTVJS.js → chunk-KUFJDY4S.js} +3 -3
  101. package/dist/{chunk-TBKJPKDN.js → chunk-KV24YCMX.js} +11 -11
  102. package/dist/{chunk-CXY4YDXS.js → chunk-KYR4XMXR.js} +2 -2
  103. package/dist/{chunk-XDTD55UU.js → chunk-L2EHYZCH.js} +33 -9
  104. package/dist/{chunk-FSR7OUVJ.js → chunk-L32HJTTW.js} +23 -23
  105. package/dist/{chunk-QOPX5M7Y.js → chunk-LPVS4DPT.js} +4 -4
  106. package/dist/{chunk-RA64IK43.js → chunk-LRO3Y2XQ.js} +1 -1
  107. package/dist/{chunk-VUBVBFJW.js → chunk-LYWEB453.js} +5 -5
  108. package/dist/chunk-LZDK3V3W.js +34 -0
  109. package/dist/{chunk-FF5Q7ONT.js → chunk-M54PJXYX.js} +214 -148
  110. package/dist/{chunk-XB64FJLU.js → chunk-M6W3P3ZI.js} +24 -24
  111. package/dist/{chunk-QKSWQBWD.js → chunk-MBAKCS2U.js} +25 -8
  112. package/dist/{chunk-FT3RXIN4.js → chunk-MBQY6L3Z.js} +10 -10
  113. package/dist/{chunk-72DY5NCN.js → chunk-MCRCJLAE.js} +2 -2
  114. package/dist/{chunk-NZY72PGJ.js → chunk-MSAXKU4C.js} +9 -7
  115. package/dist/{chunk-ZPPLFE4N.js → chunk-MSF6XELY.js} +14 -14
  116. package/dist/{chunk-ZWGU46YO.js → chunk-MYZPN2BV.js} +23 -23
  117. package/dist/{chunk-7VAMO66T.js → chunk-N35OSYIU.js} +9 -6
  118. package/dist/{chunk-U3JGJ3BO.js → chunk-N3Z2D3OC.js} +24 -24
  119. package/dist/{chunk-LAOZB5YC.js → chunk-NEDAQDC7.js} +11 -11
  120. package/dist/{chunk-YY2WGL6S.js → chunk-NEEOJJWT.js} +2 -2
  121. package/dist/{chunk-VAL7HAIR.js → chunk-NEYVK52V.js} +3 -3
  122. package/dist/chunk-NKIGYJY6.js +41 -0
  123. package/dist/{chunk-36CTZGPH.js → chunk-NPL4XMOC.js} +7 -7
  124. package/dist/{chunk-G5SKNMPC.js → chunk-NRJC7XTD.js} +5 -5
  125. package/dist/{chunk-FYWA2CPF.js → chunk-NVDAZOVS.js} +17 -17
  126. package/dist/{chunk-TEZSZ24W.js → chunk-O2QUSGER.js} +4 -4
  127. package/dist/{chunk-KPHPVOME.js → chunk-OE3ECGHN.js} +4 -4
  128. package/dist/{chunk-QOF7U6BI.js → chunk-OKXRQPQF.js} +6 -6
  129. package/dist/{chunk-YSFIQGDK.js → chunk-OPMTVYWM.js} +8 -8
  130. package/dist/{chunk-4GNKICU5.js → chunk-OR4FYMZM.js} +18 -18
  131. package/dist/{chunk-KY2ZHTBJ.js → chunk-OXEOXPG5.js} +6 -6
  132. package/dist/{chunk-34BCKMBS.js → chunk-P2AKNGWM.js} +3 -3
  133. package/dist/{chunk-VTMIRRIZ.js → chunk-PAYFWXVA.js} +2 -2
  134. package/dist/{chunk-DREIS5Z5.js → chunk-PCYGJOR2.js} +6 -6
  135. package/dist/{chunk-7MASAGFE.js → chunk-PFUX5AVG.js} +15 -15
  136. package/dist/{chunk-FNVY656P.js → chunk-PJ7CW2B5.js} +22 -22
  137. package/dist/{chunk-BFZSO2TP.js → chunk-PLZ6S6QS.js} +6 -6
  138. package/dist/{chunk-T72K4PLH.js → chunk-PWDRDFYW.js} +11 -11
  139. package/dist/{chunk-2DJUQ6CO.js → chunk-QBA67JWK.js} +22 -22
  140. package/dist/{chunk-NAKVQU6F.js → chunk-QF6RSKKI.js} +1 -1
  141. package/dist/{chunk-ML3HOWPI.js → chunk-QOZICYAF.js} +4 -4
  142. package/dist/{chunk-CIIRPLI6.js → chunk-QPAOZXXQ.js} +4 -4
  143. package/dist/{chunk-7VNEDDCC.js → chunk-QQIZGLRA.js} +2 -2
  144. package/dist/{chunk-JWQMD54C.js → chunk-QTJCLGFC.js} +7 -7
  145. package/dist/{chunk-5IMZYLDW.js → chunk-QVPYGH7N.js} +11 -11
  146. package/dist/{chunk-M4D3VKAS.js → chunk-RAFD4MYO.js} +1 -1
  147. package/dist/{chunk-XSNIHYO6.js → chunk-RDPHVCTU.js} +10 -10
  148. package/dist/{chunk-J22RSFKY.js → chunk-S32NYQZZ.js} +369 -360
  149. package/dist/{chunk-PJRMMWU4.js → chunk-S56NJ5LE.js} +2 -2
  150. package/dist/{chunk-ISXNWUG7.js → chunk-SDAULIGH.js} +1 -1
  151. package/dist/{chunk-5C24MOXU.js → chunk-SQKDHGAD.js} +17 -17
  152. package/dist/{chunk-N2FA53DA.js → chunk-SYPSS5UX.js} +6 -6
  153. package/dist/{chunk-CUD4I2U6.js → chunk-T7LGRFVD.js} +28 -28
  154. package/dist/{chunk-CH6LUQLD.js → chunk-TCIFQSMO.js} +1 -1
  155. package/dist/{chunk-DBZNQAMN.js → chunk-THOVQFPT.js} +9 -9
  156. package/dist/{chunk-2OWSG6BK.js → chunk-TM5JJL6I.js} +11 -11
  157. package/dist/{chunk-EOCZDNWU.js → chunk-TW2XD4CT.js} +5 -5
  158. package/dist/{chunk-4JLB5ISS.js → chunk-U4N4DZS5.js} +3 -3
  159. package/dist/{chunk-YVQWJDVN.js → chunk-U4SGGO54.js} +24 -24
  160. package/dist/{chunk-HK2CF6KQ.js → chunk-U4WFATJZ.js} +23 -23
  161. package/dist/{chunk-4HTILEXW.js → chunk-U57NQAE5.js} +46 -2
  162. package/dist/{chunk-EE3UNC44.js → chunk-U7X3CZIL.js} +3 -3
  163. package/dist/chunk-UCLAXME7.js +34 -0
  164. package/dist/{chunk-XMYGEZQ7.js → chunk-UCS7HXFX.js} +17 -17
  165. package/dist/{chunk-7UXSS23C.js → chunk-UDENIR6E.js} +18 -18
  166. package/dist/{chunk-XZLSKGJX.js → chunk-UDI4QI6D.js} +5 -5
  167. package/dist/{chunk-77UOXZVM.js → chunk-ULRDKBHJ.js} +5 -5
  168. package/dist/{chunk-DW4BM73R.js → chunk-UQRUMRB2.js} +1 -1
  169. package/dist/{chunk-DDOLWHIM.js → chunk-USPTS2HZ.js} +17 -17
  170. package/dist/{chunk-2A24BNRZ.js → chunk-V4B44XRC.js} +7 -7
  171. package/dist/{chunk-IZF2VJU5.js → chunk-VBPHSKJI.js} +22 -22
  172. package/dist/{chunk-GJ4B2FYS.js → chunk-VCEUC3GC.js} +10 -10
  173. package/dist/{chunk-N7HG4UP7.js → chunk-VCN6THJZ.js} +6 -6
  174. package/dist/{chunk-QC24Z5JU.js → chunk-VFQARMOE.js} +10 -10
  175. package/dist/{chunk-RMNYY5IE.js → chunk-VG3NSHIA.js} +5 -5
  176. package/dist/{chunk-TEHH47TG.js → chunk-VKVGHROQ.js} +3 -3
  177. package/dist/{chunk-CKI4VG2I.js → chunk-VUUU7BOK.js} +22 -22
  178. package/dist/{chunk-PAOIMLTK.js → chunk-VXKPHJVK.js} +19 -19
  179. package/dist/{chunk-P3VBYYAS.js → chunk-W5PMBPKI.js} +3 -3
  180. package/dist/{chunk-TA2ZNDYD.js → chunk-W7CZCZPE.js} +1 -1
  181. package/dist/chunk-WAYZHK2C.js +48 -0
  182. package/dist/{chunk-WRLEYM3T.js → chunk-WC4Z3UHZ.js} +4 -4
  183. package/dist/{chunk-SR2M7DWL.js → chunk-WJ7BAWOR.js} +13 -13
  184. package/dist/{chunk-MRLCNXXR.js → chunk-WJK5WJLA.js} +1 -1
  185. package/dist/{chunk-7H5HYERS.js → chunk-WNEAZYEK.js} +19 -19
  186. package/dist/{chunk-DBVU45FY.js → chunk-WPBI7LBA.js} +14 -14
  187. package/dist/{chunk-HY2VVVFZ.js → chunk-WPHKKINR.js} +4 -4
  188. package/dist/{chunk-TJHDFS33.js → chunk-XDMYQ5RR.js} +27 -27
  189. package/dist/{chunk-HIQWJ6JZ.js → chunk-XFQKKNEF.js} +4 -4
  190. package/dist/{chunk-JC3BMRB5.js → chunk-XYEMI627.js} +11 -11
  191. package/dist/{chunk-S4USA5WC.js → chunk-YBWUVSAH.js} +20 -20
  192. package/dist/{chunk-FP6GJJY7.js → chunk-YCYAA4MB.js} +22 -22
  193. package/dist/{chunk-WFJMKUTR.js → chunk-YECVNCO4.js} +9 -9
  194. package/dist/{chunk-5G5GD5HF.js → chunk-YGEHNSJ4.js} +14 -14
  195. package/dist/{chunk-KJ6IH2D5.js → chunk-YJI3S2YA.js} +5 -5
  196. package/dist/{chunk-HMQXIFOL.js → chunk-YLTOP7OS.js} +4 -4
  197. package/dist/{chunk-QXGOEP44.js → chunk-YVHUKQ5U.js} +3 -3
  198. package/dist/{chunk-GIPQHVJF.js → chunk-YZGYUMWJ.js} +11 -11
  199. package/dist/{chunk-2QT6WVAK.js → chunk-Z43VYNEY.js} +15 -15
  200. package/dist/{chunk-XRDYEEDE.js → chunk-ZGJVAHQC.js} +1 -1
  201. package/dist/{chunk-GUNBOZ75.js → chunk-ZHMVB3YW.js} +3 -3
  202. package/dist/{chunk-T4TMX54Q.js → chunk-ZMHOCHTY.js} +16 -16
  203. package/dist/{chunk-DIAYQLEY.js → chunk-ZQHFZ6WO.js} +6 -6
  204. package/dist/{chunk-MI3GGF7V.js → chunk-ZS2WLK7A.js} +17 -17
  205. package/dist/{chunk-WSFPKNKT.js → chunk-ZWIYJCW5.js} +23 -23
  206. package/dist/chunk-ZWY72UOG.js +45 -0
  207. package/dist/files.json +449 -441
  208. package/dist/packages/sdk/npm/index.js +57 -9
  209. package/dist/packages/ui/dist/assets/{elk-api-D2NcYpUJ.js → elk-api-GNftut9z.js} +2 -2
  210. package/dist/packages/ui/dist/assets/{index-CT7skl01.js → index-C2evnHpj.js} +3 -3
  211. package/dist/packages/ui/dist/index.html +1 -1
  212. package/package.json +6 -6
  213. package/dist/chunk-2RMWW6G3.js +0 -41
  214. package/dist/chunk-3PLE3ZQ5.js +0 -34
  215. package/dist/chunk-CU35HXQ7.js +0 -48
  216. package/dist/chunk-EOWO4YPF.js +0 -43
  217. package/dist/chunk-EZ3FDHW3.js +0 -41
  218. package/dist/chunk-F5L23NGR.js +0 -45
  219. package/dist/chunk-JOG6LBOP.js +0 -38
  220. package/dist/chunk-LRCWWMHH.js +0 -54
  221. package/dist/chunk-LVQMS54L.js +0 -54
  222. package/dist/chunk-S3QCJWCF.js +0 -34
  223. package/dist/chunk-XVQGT4SL.js +0 -37
@@ -3,72 +3,80 @@ 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
+ copilotAcpAllowed,
8
+ copilotAcpByDefault,
9
+ readWrites
10
+ } from "./chunk-F7EHN4CC.js";
6
11
  import {
7
12
  mapCommand,
8
13
  mapStateOf
9
- } from "./chunk-7C7PTJM2.js";
14
+ } from "./chunk-EJJONXPS.js";
10
15
  import {
11
16
  factsRepos,
12
17
  verifyCommand
13
- } from "./chunk-6IKYFARG.js";
18
+ } from "./chunk-5WBRQSLJ.js";
14
19
  import {
15
20
  plannedTopUp,
16
21
  recordRulesNow,
17
22
  ruleSetsOfFiles
18
- } from "./chunk-QOF7U6BI.js";
19
- import "./chunk-XDTD55UU.js";
20
- import "./chunk-CGF4LKXR.js";
23
+ } from "./chunk-OKXRQPQF.js";
24
+ import "./chunk-L2EHYZCH.js";
25
+ import "./chunk-GAK5KDYV.js";
21
26
  import {
22
27
  estateFreshness
23
- } from "./chunk-ZDZCUZ4N.js";
28
+ } from "./chunk-3JOHZDKD.js";
24
29
  import {
25
30
  onboardingQueue
26
- } from "./chunk-N6YELFHL.js";
27
- import "./chunk-PAQDPB6T.js";
28
- import "./chunk-DIAYQLEY.js";
29
- import "./chunk-WFJMKUTR.js";
31
+ } from "./chunk-IF6UROTX.js";
32
+ import "./chunk-FMGMRFEH.js";
33
+ import "./chunk-ZQHFZ6WO.js";
34
+ import "./chunk-YECVNCO4.js";
30
35
  import {
31
36
  checkoutOf,
32
37
  conventionsAt,
33
38
  excludesOf,
34
39
  headOf,
35
40
  loadReadPlan,
41
+ partUnaccounted,
36
42
  readPlanProgress
37
- } from "./chunk-6AYUBYK6.js";
38
- import "./chunk-7VNEDDCC.js";
39
- import "./chunk-BHHIHENP.js";
40
- import "./chunk-42L2WHP6.js";
41
- import "./chunk-MIOY6EXD.js";
43
+ } from "./chunk-6TY7S6Y6.js";
44
+ import "./chunk-QQIZGLRA.js";
45
+ import "./chunk-5GQHLNZB.js";
46
+ import "./chunk-3ODHCYOG.js";
47
+ import "./chunk-KEOTTRK2.js";
42
48
  import {
43
49
  isMetarepo,
44
50
  notMetarepo
45
51
  } from "./chunk-3G4YI4ZU.js";
46
52
  import {
53
+ ASSISTANT_FORMATS,
47
54
  assistantTier,
48
55
  readProbes,
49
56
  rulesLacking
50
- } from "./chunk-J22RSFKY.js";
57
+ } from "./chunk-S32NYQZZ.js";
51
58
  import "./chunk-VOGCSYOI.js";
52
59
  import {
53
60
  estateRepos,
54
61
  productionRepos
55
- } from "./chunk-DBZNQAMN.js";
56
- import "./chunk-QR65C3DV.js";
62
+ } from "./chunk-THOVQFPT.js";
63
+ import "./chunk-J422SCUS.js";
57
64
  import {
58
65
  dirSource,
59
66
  sameCommit,
60
67
  sessionTokensFor
61
- } from "./chunk-7VAMO66T.js";
62
- import "./chunk-HY2VVVFZ.js";
63
- import "./chunk-PJRMMWU4.js";
64
- import "./chunk-34NWVIBC.js";
65
- import "./chunk-M4D3VKAS.js";
66
- import "./chunk-ARLH2ZMD.js";
67
- import "./chunk-RA64IK43.js";
68
- import "./chunk-MRLCNXXR.js";
68
+ } from "./chunk-N35OSYIU.js";
69
+ import "./chunk-WPHKKINR.js";
70
+ import "./chunk-S56NJ5LE.js";
71
+ import "./chunk-4HAYYEFB.js";
72
+ import "./chunk-RAFD4MYO.js";
73
+ import "./chunk-HGNJNPMB.js";
74
+ import "./chunk-LRO3Y2XQ.js";
75
+ import "./chunk-WJK5WJLA.js";
69
76
  import {
77
+ AcpSignInError,
70
78
  currentPromptLimit
71
- } from "./chunk-CQD26SMZ.js";
79
+ } from "./chunk-K4J4Z37A.js";
72
80
  import {
73
81
  factsDirOf,
74
82
  factsRelOf,
@@ -78,7 +86,7 @@ import {
78
86
  orgPackDirOf,
79
87
  parseFacts,
80
88
  require_dist
81
- } from "./chunk-U25OX22K.js";
89
+ } from "./chunk-BH5DMXG5.js";
82
90
  import {
83
91
  ensureLocalIgnore,
84
92
  writeFileAtomic
@@ -95,7 +103,7 @@ import { join } from "node:path";
95
103
  var MAP_ALL_STATE_REL = ".atticus/map-all/state.json";
96
104
  var statePath = (root) => join(root, ".atticus", "map-all", "state.json");
97
105
  var REMIND_MS = 10 * 6e4;
98
- var IDLE_MINUTES = 15;
106
+ var IDLE_MINUTES = 30;
99
107
  var POLL_MS = 3e3;
100
108
  var RETRIES = 3;
101
109
  var plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
@@ -122,6 +130,13 @@ function modelModeAllowed(op) {
122
130
  const rt = op.runtime;
123
131
  return rt.ai !== "off" && rt.modes.allowed.includes("model") && !!rt.adapters.model && rt.adapters.model.type !== "mock";
124
132
  }
133
+ async function mapReader(root) {
134
+ const op = await loadOrgPack(orgPackDirOf(root));
135
+ const tier = assistantTier(op.runtime, { probes: (await readProbes(root)).results });
136
+ const name = tier.assistant ? ASSISTANT_FORMATS[tier.assistant].name : "no assistant";
137
+ const paste = tier.tier !== "off" && (tier.assistant === "copilot" || tier.tier !== 1);
138
+ return { name, loop: paste && isMetarepo(root) };
139
+ }
125
140
  async function limitFor(root, op, given) {
126
141
  const flag = given ?? currentPromptLimit();
127
142
  if (flag !== void 0)
@@ -164,7 +179,7 @@ async function commitOf(root, repo, f) {
164
179
  return void 0;
165
180
  return await headFromFiles(dir) ?? await headOf(dir);
166
181
  }
167
- async function partsOf(root, repo, commit, limit, git, models) {
182
+ async function partsOf(root, repo, commit, limit, git, models, force) {
168
183
  const io = captured();
169
184
  const code = await mapCommand(root, repo, { estimate: true, json: true, commit, maxTokens: limit, ...models ? { models } : {} }, io, git ? { git } : {});
170
185
  const r = code === 0 ? jsonOf(io.lines) : void 0;
@@ -188,7 +203,7 @@ async function partsOf(root, repo, commit, limit, git, models) {
188
203
  ...batches !== void 0 ? { batches } : {}
189
204
  };
190
205
  const states = r.parts.plan?.parts ?? [];
191
- const parts = planned.map((p, i) => ({ part: i + 1, total: planned.length, ...p })).filter((p) => states.find((s) => s.part === p.part)?.state !== "done");
206
+ const parts = planned.map((p, i) => ({ part: i + 1, total: planned.length, ...p })).filter((p) => force ? !force.done.has(p.part) : states.find((s) => s.part === p.part)?.state !== "done");
192
207
  return {
193
208
  parts,
194
209
  total: planned.length,
@@ -243,6 +258,17 @@ async function planEstate(root, op, o, c, state) {
243
258
  continue;
244
259
  }
245
260
  const state2 = f?.state ?? "not-read";
261
+ if (o.force) {
262
+ todo.push({
263
+ repo,
264
+ kind: "read",
265
+ commit,
266
+ why: state2 === "not-read" ? "--force: read whole" : "--force: read whole again, the facts on file kept as already kept",
267
+ ...state2 === "not-read" ? {} : { started: true },
268
+ force: true
269
+ });
270
+ continue;
271
+ }
246
272
  if (o.gaps) {
247
273
  if (state2 === "not-read")
248
274
  skipped.push({ repo, why: "not read yet: the gaps pass follows a read" });
@@ -324,7 +350,8 @@ async function planEstate(root, op, o, c, state) {
324
350
  kind: t.kind,
325
351
  commit: t.commit,
326
352
  why: t.why,
327
- ...production.has(t.repo) ? {} : { prototype: true }
353
+ ...production.has(t.repo) ? {} : { prototype: true },
354
+ ...t.force ? { force: true } : {}
328
355
  };
329
356
  if (t.kind === "carry") {
330
357
  items.push({ ...base, parts: [], total: 0, tokens: 0 });
@@ -357,7 +384,7 @@ async function planEstate(root, op, o, c, state) {
357
384
  });
358
385
  continue;
359
386
  }
360
- const p = await partsOf(root, t.repo, t.commit, c.limit, c.git, o.models);
387
+ const p = await partsOf(root, t.repo, t.commit, c.limit, c.git, o.models, t.force ? { done: forcedDone(t.repo, t.commit) } : void 0);
361
388
  if (typeof p === "string") {
362
389
  skipped.push({ repo: t.repo, why: p });
363
390
  continue;
@@ -376,6 +403,12 @@ async function planEstate(root, op, o, c, state) {
376
403
  items.push({ ...base, ...p });
377
404
  }
378
405
  return { limit: c.limit, limitFrom: c.limitFrom, mode: c.mode, items, skipped };
406
+ function forcedDone(repo, commit) {
407
+ const r = state?.repos[repo];
408
+ if (!r?.force || !sameCommit(r.commit, commit))
409
+ return /* @__PURE__ */ new Set();
410
+ return new Set(Object.entries(r.parts).filter(([, p]) => p.state === "done").map(([n]) => Number(n)));
411
+ }
379
412
  function isDone(repo, commit) {
380
413
  const r = state?.repos[repo];
381
414
  return !!r?.done && r.kind === "gaps" && sameCommit(r.commit, commit);
@@ -387,7 +420,7 @@ function planLines(plan) {
387
420
  const parts = reading.reduce((n, i) => n + i.parts.length, 0);
388
421
  const planned = reading.reduce((n, i) => n + Math.max(i.total, i.parts.length), 0);
389
422
  const tokens = reading.reduce((n, i) => n + i.tokens, 0);
390
- out.push(`The estate at ${tokensText(plan.limit)} tokens a prompt (${plan.limitFrom === "flag" ? "--max-tokens" : plan.limitFrom === "probe" ? "the limit atticus probe measured" : "runtime.yaml's maxInput"}), ${plan.mode === "model" ? "read by runtime.yaml's model, unattended" : "read by Copilot Chat in agent mode: you paste one line per part"}:`);
423
+ out.push(`The estate at ${tokensText(plan.limit)} tokens a prompt (${plan.limitFrom === "flag" ? "--max-tokens" : plan.limitFrom === "probe" ? "the limit atticus probe measured" : "runtime.yaml's maxInput"}), ${plan.mode === "model" ? "read by runtime.yaml's model, unattended" : plan.mode === "copilot-acp" ? "read by GitHub Copilot through its Agent Client Protocol, unattended: one new session per part" : "read by Copilot Chat in agent mode: you paste one line per part"}:`);
391
424
  plan.items.forEach((i, n) => {
392
425
  const head = ` ${n + 1}. ${i.repo}${i.prototype ? " (prototype: read, never joined)" : ""}`;
393
426
  if (i.kind === "carry" || i.kind === "rules" && !i.parts.length)
@@ -427,6 +460,17 @@ async function snapOf(root, repo) {
427
460
  };
428
461
  }
429
462
  var sameSnap = (a, b) => a.facts === b.facts && a.reviewed === b.reviewed && a.verify === b.verify;
463
+ async function writtenOf(root, repo) {
464
+ const dir = factsDirOf(root);
465
+ const facts = await readFile(join(dir, `${repo}.jsonl`), "utf8").catch(() => "");
466
+ const p = facts.trim() ? parseFacts(facts) : void 0;
467
+ const ids = (p?.ok ? p.facts : []).map((f) => {
468
+ const c = f.cite;
469
+ return `${f.id}|${c?.file ?? ""}:${c?.line ?? ""}`;
470
+ });
471
+ const reviewed = (await readFile(join(dir, `${repo}.reviewed.jsonl`), "utf8").catch(() => "")).split(/\r?\n/).map((l) => l.trim()).filter(Boolean);
472
+ return JSON.stringify([[...new Set(ids)].sort(), reviewed]);
473
+ }
430
474
  async function factsAt(root, repo, commit) {
431
475
  const text = await readFile(join(factsDirOf(root), `${repo}.jsonl`), "utf8").catch(() => "");
432
476
  if (!text.trim())
@@ -447,7 +491,13 @@ async function settled(root, repo, commit, s, since) {
447
491
  return false;
448
492
  }
449
493
  }
450
- async function covered(root, item, part, first, now) {
494
+ async function covered(root, item, part, first, now, unknown, wrote) {
495
+ const moved = now.facts !== first.facts || now.reviewed !== first.reviewed;
496
+ if (item.force) {
497
+ if (!(wrote ?? moved))
498
+ return false;
499
+ return item.total <= 1 || !!unknown && !leftOf(part, unknown).length;
500
+ }
451
501
  if (item.kind === "rules") {
452
502
  const plan = await loadReadPlan(root, item.repo);
453
503
  if (!plan?.topUp)
@@ -456,13 +506,26 @@ async function covered(root, item, part, first, now) {
456
506
  }
457
507
  if (item.total > 1) {
458
508
  const p = await readPlanProgress(root, item.repo);
459
- return p?.parts.find((x) => x.part === part.part)?.state === "done";
509
+ const s = p?.parts.find((x) => x.part === part.part);
510
+ if (s?.state === "done")
511
+ return true;
512
+ return !!s && !!unknown && !partUnaccounted(s, unknown).length;
460
513
  }
461
- const moved = now.facts !== first.facts || now.reviewed !== first.reviewed;
462
514
  if (item.kind === "read")
463
515
  return moved || now.reviewed !== void 0 || await factsAt(root, item.repo, item.commit) > 0;
464
516
  return moved;
465
517
  }
518
+ var leftOf = (part, unknown) => partUnaccounted({ paths: part.paths, left: [] }, unknown);
519
+ function unaccountedWords(left, shown = 5) {
520
+ return left.map((u) => {
521
+ if (!u.files.length)
522
+ return `${u.glob} (no fact cites a line of it yet)`;
523
+ const dir = u.glob.replace(/\/?\*\*?$/, "");
524
+ const rel = u.files.map((f) => u.glob.includes("*") && dir && f.startsWith(`${dir}/`) ? f.slice(dir.length + 1) : f);
525
+ const more = rel.length > shown ? `, and ${rel.length - shown} more` : "";
526
+ return `${u.glob} (${plural(u.files.length, "file")}: ${rel.slice(0, shown).join(", ")}${more})`;
527
+ }).join("; ");
528
+ }
466
529
  var CapReached = class extends Error {
467
530
  };
468
531
  function capped(inner, o, spent) {
@@ -508,17 +571,26 @@ async function mapAllCommand(root, o, io, deps = {}) {
508
571
  }
509
572
  const limit = lim.limit;
510
573
  const allowed = modelModeAllowed(op);
511
- const mode = o.mode ?? (allowed ? "model" : "copilot");
574
+ const mode = o.mode ?? (copilotAcpByDefault(op) ? "copilot-acp" : allowed ? "model" : "copilot");
575
+ if (mode === "copilot-acp" && !copilotAcpAllowed(op) && !deps.acp) {
576
+ io.err("runtime.yaml doesn't allow copilot-acp here (schemaVersion 3, copilot-acp in modes.allowed and copilot in assistants.allowed): map the estate through Copilot Chat (atticus map --all without --mode copilot-acp), or ask for it in a pull request (ADR 0171).");
577
+ return 2;
578
+ }
579
+ const stateMode = mode === "model" ? "model" : "copilot";
512
580
  if (mode === "model" && !allowed && !deps.runtime) {
513
581
  io.err("runtime.yaml doesn't allow model mode with a provider here: map the estate through Copilot (atticus map --all without --mode model).");
514
582
  return 2;
515
583
  }
584
+ if (o.force && (o.gaps || o.stale)) {
585
+ io.err("--force reads the repos whole again; it doesn't go with --stale or --gaps.");
586
+ return 2;
587
+ }
516
588
  if (mode === "model" && o.gaps) {
517
589
  io.err("The gaps pass is a session for an assistant that opens files: run atticus map --all --gaps --mode hand-off and paste each line into Copilot Chat.");
518
590
  return 2;
519
591
  }
520
592
  let state = await readMapAllState(root);
521
- if (state && (state.gaps !== !!o.gaps || state.mode !== mode))
593
+ if (state && (state.gaps !== !!o.gaps || state.mode !== stateMode))
522
594
  state = void 0;
523
595
  const plan = await planEstate(root, op, o, { limit: lim.limit, limitFrom: lim.from, mode, ...deps.git ? { git: deps.git } : {} }, state);
524
596
  if (typeof plan === "string") {
@@ -538,7 +610,7 @@ async function mapAllCommand(root, o, io, deps = {}) {
538
610
  const st = state ?? {
539
611
  schemaVersion: 1,
540
612
  updatedAt: "",
541
- mode,
613
+ mode: stateMode,
542
614
  gaps: !!o.gaps,
543
615
  repos: {}
544
616
  };
@@ -556,10 +628,17 @@ async function mapAllCommand(root, o, io, deps = {}) {
556
628
  const stopped = () => deps.signal?.aborted === true;
557
629
  const repoState = (item) => {
558
630
  const r = st.repos[item.repo];
559
- if (r && sameCommit(r.commit, item.commit) && r.kind === item.kind)
631
+ if (r && sameCommit(r.commit, item.commit) && r.kind === item.kind && !!r.force === !!item.force)
560
632
  return r;
561
- return st.repos[item.repo] = { commit: item.commit, kind: item.kind, parts: {} };
633
+ return st.repos[item.repo] = {
634
+ commit: item.commit,
635
+ kind: item.kind,
636
+ parts: {},
637
+ ...item.force ? { force: true } : {}
638
+ };
562
639
  };
640
+ const resumeAs = o.resumeAs ?? `atticus map --all${o.repos ? ` --repos ${o.repos.join(",")}` : ""}${o.stale ? " --stale" : ""}${o.gaps ? " --gaps" : ""}${o.force ? " --force" : ""}${o.models ? ` --models ${o.models}` : ""}${lim.from === "flag" ? ` --max-tokens ${limit}` : ""}${o.idleMinutes ? ` --idle ${o.idleMinutes}` : ""}`;
641
+ let idleStop = false;
563
642
  const partState = (item, part) => repoState(item).parts[String(part)] ??= { retries: 0 };
564
643
  const verifyStep = async (item) => {
565
644
  const c = captured();
@@ -580,6 +659,7 @@ async function mapAllCommand(root, o, io, deps = {}) {
580
659
  };
581
660
  let quit = false;
582
661
  let capHit = false;
662
+ let signIn = false;
583
663
  let runtime;
584
664
  const items = plan.items;
585
665
  for (const [n, item] of items.entries()) {
@@ -619,6 +699,18 @@ async function mapAllCommand(root, o, io, deps = {}) {
619
699
  }
620
700
  continue;
621
701
  }
702
+ if (mode === "copilot-acp") {
703
+ for (const part of item.parts) {
704
+ if (quit || stopped() || capHit)
705
+ break;
706
+ const end = await acpPart(item, part, where);
707
+ if (end === "quit")
708
+ quit = true;
709
+ if (end === "cap")
710
+ capHit = true;
711
+ }
712
+ continue;
713
+ }
622
714
  for (const part of item.parts) {
623
715
  if (quit || stopped())
624
716
  break;
@@ -631,8 +723,10 @@ async function mapAllCommand(root, o, io, deps = {}) {
631
723
  }
632
724
  const interrupted = quit || stopped() || capHit;
633
725
  if (interrupted) {
634
- io.out("");
635
- io.out(capHit ? `Stopped at the cap (${o.maxParts !== void 0 ? `--max-parts ${o.maxParts}` : ""}${o.maxParts !== void 0 && o.budgetTokens !== void 0 ? ", " : ""}${o.budgetTokens !== void 0 ? `--budget-tokens ${o.budgetTokens}` : ""}): ${plural(totals.spent.prompts, "prompt")} run. atticus map --all carries on from here.` : "Stopped. Where the estate stands is saved: atticus map --all carries on from here.");
726
+ if (!idleStop) {
727
+ io.out("");
728
+ io.out(capHit ? `Stopped at the cap (${o.maxParts !== void 0 ? `--max-parts ${o.maxParts}` : ""}${o.maxParts !== void 0 && o.budgetTokens !== void 0 ? ", " : ""}${o.budgetTokens !== void 0 ? `--budget-tokens ${o.budgetTokens}` : ""}): ${plural(totals.spent.prompts, mode === "copilot-acp" ? "session" : "prompt")} run. atticus map --all carries on from here.` : "Stopped. Where the estate stands is saved: atticus map --all carries on from here.");
729
+ }
636
730
  } else if (totals.parts || totals.repos.size) {
637
731
  io.out("");
638
732
  io.out("Joining the estate: atticus verify --all --write.");
@@ -655,13 +749,14 @@ async function mapAllCommand(root, o, io, deps = {}) {
655
749
  }
656
750
  await save();
657
751
  await summary(interrupted);
658
- return 0;
752
+ return signIn ? 1 : 0;
659
753
  async function copilotPart(item, part, where) {
660
754
  const ps = partState(item, part.part);
661
755
  const nth = item.parts.indexOf(part) + 1;
662
756
  const label = item.total > 1 ? `part ${part.part} of ${item.total}${item.parts.length < item.total && nth > 0 ? `, ${nth} of the ${item.parts.length} to read` : ""}` : "one session";
757
+ const named = item.total > 1 ? `part ${part.part} of ${item.total}` : "one session";
663
758
  const progress = item.total > 1 ? await readPlanProgress(root, item.repo) : void 0;
664
- const first0 = item.kind === "rules" ? await rulesLine(item) : item.kind === "gaps" ? await gapsLine(item) : ps.retries > 0 || progress?.next && progress.next.part !== part.part ? await restLine(item, part) ?? `/atticus-map ${item.repo}` : `/atticus-map ${item.repo}`;
759
+ const first0 = item.kind === "rules" ? await rulesLine(item) : item.kind === "gaps" ? await gapsLine(item) : item.force ? forceLine(item, part) : ps.retries > 0 || progress?.next && progress.next.part !== part.part ? await restLine(item, part) ?? `/atticus-map ${item.repo}` : `/atticus-map ${item.repo}`;
665
760
  if (first0 === void 0) {
666
761
  io.out(`${item.repo}: no gaps left; nothing to read.`);
667
762
  return finishPart(item, part, ps);
@@ -670,14 +765,14 @@ async function mapAllCommand(root, o, io, deps = {}) {
670
765
  return finishPart(item, part, ps);
671
766
  let line = first0;
672
767
  await block(item, part, label, where, line, ps.retries);
768
+ let base = item.force ? await writtenOf(root, item.repo) : "";
673
769
  let first = await snapOf(root, item.repo);
674
770
  let since = first;
675
771
  let prev = first;
676
772
  let lastChange = clock.now();
677
773
  let lastRemind = clock.now();
678
774
  const started = clock.now();
679
- let stuckSaid = false;
680
- const idleMs = (o.idleMinutes ?? IDLE_MINUTES) * 6e4;
775
+ const idleMinutes = o.idleMinutes ?? IDLE_MINUTES;
681
776
  for (; ; ) {
682
777
  if (stopped()) {
683
778
  ps.state = "incomplete";
@@ -701,30 +796,42 @@ async function mapAllCommand(root, o, io, deps = {}) {
701
796
  const again = await retry(item, part, label, where);
702
797
  if (again === "done")
703
798
  return finishPart(item, part, ps);
799
+ if (item.force)
800
+ base = await writtenOf(root, item.repo);
704
801
  first = await snapOf(root, item.repo);
705
802
  since = first;
706
803
  prev = first;
707
804
  lastChange = clock.now();
708
- stuckSaid = false;
709
805
  continue;
710
806
  }
711
807
  const now = await snapOf(root, item.repo);
712
808
  if (!sameSnap(now, prev)) {
713
809
  lastChange = clock.now();
714
- stuckSaid = false;
715
810
  prev = now;
716
811
  }
717
- if (await settled(root, item.repo, item.commit, now, since) && await covered(root, item, part, first, now)) {
812
+ if (await settled(root, item.repo, item.commit, now, since)) {
813
+ const wrote = item.force ? await writtenOf(root, item.repo) !== base : void 0;
718
814
  const v = await verifyStep(item);
719
- if (v && !v.rejected && await covered(root, item, part, first, await snapOf(root, item.repo)))
815
+ const after = await snapOf(root, item.repo);
816
+ if (v && !v.rejected && await covered(root, item, part, first, after, v.coverage.unknown, wrote))
720
817
  return finishPart(item, part, ps);
721
- io.out(`Not done yet: ${v?.rejected ? `${plural(v.rejected, "fact")} rejected for the reader to fix` : "the part isn't accounted for in the facts yet"}. Still waiting (s + Enter skips, r + Enter gives the prompt again for what's left).`);
722
- since = await snapOf(root, item.repo);
723
- prev = since;
818
+ if (v?.rejected)
819
+ io.out(`Not done yet: ${plural(v.rejected, "fact")} rejected for the reader to fix. Still waiting (s + Enter skips, r + Enter gives the prompt again for what's left).`);
820
+ else if (v && item.total > 1 && item.kind !== "rules") {
821
+ const left = await leftNow(item, part, v.coverage.unknown);
822
+ io.out(left.length ? `Still not covered in ${item.repo} ${named}: ${unaccountedWords(left)}. ${item.force ? `r + Enter gives the line again (${line}); ` : `r + Enter gives a NEW chat only what is left of the part: these files, and any line verify lists as skipped under it (/atticus-map ${item.repo} --part ${part.part} --gaps); `}s + Enter skips the part; q + Enter stops.` : `Not done yet: nothing was written for ${item.repo} ${named} since its line was given. r + Enter gives the line again; s + Enter skips the part; q + Enter stops.`);
823
+ } else
824
+ io.out("Not done yet: the part isn't accounted for in the facts yet. Still waiting (s + Enter skips, r + Enter gives the prompt again for what's left).");
825
+ since = after;
826
+ prev = after;
827
+ lastRemind = clock.now();
724
828
  }
725
- if (!stuckSaid && clock.now() - lastChange >= idleMs) {
726
- io.out(`Copilot seems to have stopped on ${item.repo} ${item.total > 1 ? `part ${part.part}` : "(its one session)"}. r + Enter: verify what it wrote and give the prompt again for what's left, in a NEW chat; s: skip; q: stop.`);
727
- stuckSaid = true;
829
+ if (clock.now() - lastChange >= idleMinutes * 6e4) {
830
+ io.out(`Stopped waiting on ${item.repo} ${label}: nothing was written for ${plural(idleMinutes, "minute")} (--idle ${idleMinutes}). Where the estate stands is saved: ${resumeAs} carries on from here (it verifies what was written and gives the line again for what's left).`);
831
+ ps.state = "incomplete";
832
+ idleStop = true;
833
+ await save();
834
+ return "quit";
728
835
  }
729
836
  if (clock.now() - lastRemind >= (deps.remindMs ?? REMIND_MS)) {
730
837
  io.out(`Still waiting on ${item.repo} ${label} (${Math.round((clock.now() - started) / 6e4)} minutes). The line to paste: ${line} (s + Enter skips, r + Enter retries what's left, q + Enter stops)`);
@@ -735,7 +842,13 @@ async function mapAllCommand(root, o, io, deps = {}) {
735
842
  async function retry(item2, part2, label2, where2) {
736
843
  ps.retries++;
737
844
  await save();
738
- const rest = item2.kind === "rules" ? await rulesLine(item2) : item2.kind === "gaps" ? await gapsLine(item2) : await restLine(item2, part2);
845
+ if (item2.force) {
846
+ const wrote = await writtenOf(root, item2.repo) !== base;
847
+ const v = existsSync(join(factsDirOf(root), `${item2.repo}.jsonl`)) ? await verifyStep(item2) : void 0;
848
+ if (v && !v.rejected && await covered(root, item2, part2, first, await snapOf(root, item2.repo), v.coverage.unknown, wrote))
849
+ return "done";
850
+ }
851
+ const rest = item2.kind === "rules" ? await rulesLine(item2) : item2.kind === "gaps" ? await gapsLine(item2) : item2.force ? forceLine(item2, part2) : await restLine(item2, part2);
739
852
  if (rest === "done" || rest === void 0 && item2.kind === "gaps")
740
853
  return "done";
741
854
  line = rest ?? `/atticus-map ${item2.repo}`;
@@ -747,10 +860,21 @@ async function mapAllCommand(root, o, io, deps = {}) {
747
860
  return "again";
748
861
  }
749
862
  }
863
+ async function leftNow(item, part, unknown) {
864
+ if (item.force)
865
+ return leftOf(part, unknown);
866
+ const s = (await readPlanProgress(root, item.repo))?.parts.find((x) => x.part === part.part);
867
+ return s ? partUnaccounted(s, unknown) : leftOf(part, unknown);
868
+ }
869
+ function forceLine(item, part) {
870
+ return `/atticus-map ${item.repo}${item.total > 1 ? ` --part ${part.part}` : ""}`;
871
+ }
750
872
  async function finishPart(item, part, ps) {
751
873
  ps.state = "done";
752
874
  if (item.kind === "gaps" || part.part === item.total)
753
875
  repoState(item).done = true;
876
+ if (item.force && Object.keys(repoState(item).parts).length >= item.total && Object.values(repoState(item).parts).every((p) => p.state === "done"))
877
+ await recordRulesNow(root, item.repo, item.commit);
754
878
  totals.parts++;
755
879
  totals.repos.add(item.repo);
756
880
  await save();
@@ -810,7 +934,9 @@ async function mapAllCommand(root, o, io, deps = {}) {
810
934
  io.out("");
811
935
  io.out(`===== ${item.repo}, ${item.kind === "gaps" ? "the gaps pass" : item.kind === "rules" ? `the rules top-up${item.total > 1 ? `, ${label}` : ""}` : label} (${where})${retries ? `, given again (${retries})` : ""} =====`);
812
936
  io.out(`In a NEW Copilot Chat (agent mode), run: ${line}`);
813
- if (item.kind === "rules")
937
+ if (item.force)
938
+ io.out(`${item.total > 1 ? `That chat reads part ${part.part} whole again: ${part.paths.join(", ")} (about ${tokensText(part.tokens)} tokens). ` : ""}The facts on file stay, as already kept: the chat names one by its id and doesn't write it again (one whose line changed it rewrites under the same id).`);
939
+ else if (item.kind === "rules")
814
940
  io.out(`That chat reads ${plural(part.files, "file")} again for the reading rules added since (${(item.sets ?? []).join(", ")}): ${part.paths.join(", ")} (about ${tokensText(part.tokens)} tokens).`);
815
941
  else if (item.total > 1 && !line.includes("--gaps"))
816
942
  io.out(`That chat reads part ${part.part}: ${part.paths.join(", ")} (about ${tokensText(part.tokens)} tokens); the estimate it runs names it.`);
@@ -820,6 +946,83 @@ async function mapAllCommand(root, o, io, deps = {}) {
820
946
  io.out(copied ? "The line is on your clipboard." : "Copy the line above (no clipboard tool here).");
821
947
  io.out("Waiting for the facts it writes. s + Enter skips this part, r + Enter verifies what is there and gives the line again for what's left, q + Enter (or Ctrl+C) stops; atticus map --all carries on.");
822
948
  }
949
+ function overCap() {
950
+ return o.maxParts !== void 0 && totals.spent.prompts >= o.maxParts || o.budgetTokens !== void 0 && totals.spent.tokens >= o.budgetTokens;
951
+ }
952
+ async function acpPart(item, part, where) {
953
+ const ps = partState(item, part.part);
954
+ const label = item.total > 1 ? `part ${part.part} of ${item.total}` : "one session";
955
+ const progress = item.total > 1 ? await readPlanProgress(root, item.repo) : void 0;
956
+ const first0 = item.kind === "rules" ? await rulesLine(item) : item.kind === "gaps" ? await gapsLine(item) : item.force ? forceLine(item, part) : ps.retries > 0 || progress?.next && progress.next.part !== part.part ? await restLine(item, part) ?? `/atticus-map ${item.repo}` : `/atticus-map ${item.repo}`;
957
+ if (first0 === void 0) {
958
+ io.out(`${item.repo}: no gaps left; nothing to read.`);
959
+ return finishPart(item, part, ps);
960
+ }
961
+ if (first0 === "done")
962
+ return finishPart(item, part, ps);
963
+ let line = first0;
964
+ const runner = deps.acp ?? await deps.makeAcp?.();
965
+ if (!runner) {
966
+ io.err("No Copilot session runner: copilot-acp needs runtime.yaml's copilotAcp.");
967
+ return "quit";
968
+ }
969
+ for (let attempt = 0; attempt < 2; attempt++) {
970
+ if (stopped())
971
+ break;
972
+ if (overCap())
973
+ return "cap";
974
+ io.out("");
975
+ io.out(`===== ${item.repo}, ${item.kind === "gaps" ? "the gaps pass" : item.kind === "rules" ? "the rules top-up" : label} (${where})${attempt ? ", given again in a new session" : ""} =====`);
976
+ io.out(`In a NEW Copilot session (copilot-acp): ${line}`);
977
+ const base = item.force ? await writtenOf(root, item.repo) : "";
978
+ const first = await snapOf(root, item.repo);
979
+ totals.spent.prompts++;
980
+ try {
981
+ const r = await runner({
982
+ line,
983
+ change: `map-${item.repo}`,
984
+ writeRoots: readWrites(root),
985
+ ...deps.signal ? { signal: deps.signal } : {},
986
+ onProgress: io.out
987
+ });
988
+ totals.spent.tokens += r.usage ? r.usage.inputTokens + r.usage.outputTokens : part.tokens;
989
+ io.out(`The session ended (${r.stopped ?? r.stopReason}).`);
990
+ } catch (e) {
991
+ if (e instanceof AcpSignInError) {
992
+ io.err(e.message);
993
+ signIn = true;
994
+ ps.state = "incomplete";
995
+ await save();
996
+ return "quit";
997
+ }
998
+ totals.spent.tokens += part.tokens;
999
+ io.out(`${item.repo} ${label}: the Copilot session failed: ${firstLine(e)}`);
1000
+ }
1001
+ if (stopped())
1002
+ break;
1003
+ const wrote = item.force ? await writtenOf(root, item.repo) !== base : void 0;
1004
+ const v = existsSync(join(factsDirOf(root), `${item.repo}.jsonl`)) ? await verifyStep(item) : void 0;
1005
+ const after = await snapOf(root, item.repo);
1006
+ if (v && !v.rejected && await covered(root, item, part, first, after, v.coverage.unknown, wrote))
1007
+ return finishPart(item, part, ps);
1008
+ if (attempt > 0)
1009
+ break;
1010
+ ps.retries++;
1011
+ await save();
1012
+ const rest = item.kind === "rules" ? await rulesLine(item) : item.kind === "gaps" ? await gapsLine(item) : item.force ? forceLine(item, part) : await restLine(item, part);
1013
+ if (rest === "done" || rest === void 0 && item.kind === "gaps")
1014
+ return finishPart(item, part, ps);
1015
+ line = rest ?? `/atticus-map ${item.repo}`;
1016
+ io.out(`${item.repo} ${label} isn't accounted for yet${v?.rejected ? ` (${plural(v.rejected, "fact")} rejected)` : ""}: one more try in a NEW session with only what is left (${line}).`);
1017
+ }
1018
+ ps.state = "incomplete";
1019
+ await save();
1020
+ if (stopped())
1021
+ return "quit";
1022
+ io.out(`${item.repo} ${label}: still not accounted for after a second session; moving on. atticus map --all carries on from here.`);
1023
+ totals.ends.push(endOf(item, part, "incomplete"));
1024
+ return "incomplete";
1025
+ }
823
1026
  async function modelRead(item, where, rt) {
824
1027
  io.out("");
825
1028
  io.out(item.kind === "rules" ? `===== ${item.repo} (${where}): topping up on the model for the reading rules added since it was read (${(item.sets ?? []).join(", ")}) =====` : `===== ${item.repo} (${where}): ${item.kind === "reread" ? "re-reading what changed" : "reading"} on the model, ${plural(item.batches ?? 0, "prompt")} =====`);
@@ -835,7 +1038,7 @@ async function mapAllCommand(root, o, io, deps = {}) {
835
1038
  maxTokens: limit,
836
1039
  ...o.models ? { models: o.models } : {},
837
1040
  ...item.kind === "rules" ? { rules: true } : {},
838
- ...resume ? { next: true } : before && !before.done ? { force: true } : {}
1041
+ ...resume && !(item.force && attempt === 1) ? { next: true } : item.force && attempt === 1 || before && !before.done ? { force: true } : {}
839
1042
  }, io, { runtime: rt, ...deps.git ? { git: deps.git } : {} });
840
1043
  } catch (e) {
841
1044
  if (e instanceof CapReached) {
@@ -873,7 +1076,7 @@ async function mapAllCommand(root, o, io, deps = {}) {
873
1076
  repo: item.repo,
874
1077
  ...item.total > 1 ? { part: part.part, total: item.total } : {},
875
1078
  end,
876
- command: `atticus map --all --repos ${item.repo}${o.gaps ? " --gaps" : ""} (or /atticus-map ${item.repo}${o.gaps ? " --gaps" : ""} in a new chat)`
1079
+ command: `atticus map --all --repos ${item.repo}${o.gaps ? " --gaps" : ""}${item.force ? " --force" : ""} (or /atticus-map ${item.repo}${o.gaps ? " --gaps" : item.force && item.total > 1 ? ` --part ${part.part}` : ""} in a new chat)`
877
1080
  };
878
1081
  }
879
1082
  async function summary(interrupted2) {
@@ -889,7 +1092,7 @@ async function mapAllCommand(root, o, io, deps = {}) {
889
1092
  const open = (await listQuestions(root, { state: "open" }).catch(() => ({ questions: [] }))).questions.length;
890
1093
  const rejected = [...totals.rejected.values()].reduce((n, x) => n + x, 0);
891
1094
  io.out("");
892
- io.out(`${interrupted2 ? "So far" : "Done"}: ${plural(totals.repos.size, "repo")} read, ${plural(totals.parts, "part")}${mode === "model" ? ` (${plural(totals.spent.prompts, "prompt")})` : ""}; ${plural(rejected, "fact")} rejected; links +${totals.added} -${totals.removed}; ${plural(open, "question")} open.`);
1095
+ io.out(`${interrupted2 ? "So far" : "Done"}: ${plural(totals.repos.size, "repo")} read, ${plural(totals.parts, "part")}${mode === "model" ? ` (${plural(totals.spent.prompts, "prompt")})` : mode === "copilot-acp" ? ` (${plural(totals.spent.prompts, "session")})` : ""}; ${plural(rejected, "fact")} rejected; links +${totals.added} -${totals.removed}; ${plural(open, "question")} open.`);
893
1096
  const left = totals.ends.filter((e) => e.end !== "done");
894
1097
  if (left.length) {
895
1098
  io.out("Not finished:");
@@ -903,7 +1106,9 @@ export {
903
1106
  MAP_ALL_STATE_REL,
904
1107
  limitFor,
905
1108
  mapAllCommand,
1109
+ mapReader,
906
1110
  modelModeAllowed,
907
1111
  planEstate,
908
- readMapAllState
1112
+ readMapAllState,
1113
+ unaccountedWords
909
1114
  };
@@ -6,21 +6,21 @@ var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
6
  import {
7
7
  buildDigest,
8
8
  digestCommand
9
- } from "./chunk-N7HG4UP7.js";
10
- import "./chunk-KPHPVOME.js";
11
- import "./chunk-G5SKNMPC.js";
12
- import "./chunk-JQG4VO47.js";
13
- import "./chunk-DW4BM73R.js";
14
- import "./chunk-DBZNQAMN.js";
15
- import "./chunk-QR65C3DV.js";
16
- import "./chunk-7VAMO66T.js";
17
- import "./chunk-HY2VVVFZ.js";
18
- import "./chunk-PJRMMWU4.js";
19
- import "./chunk-34NWVIBC.js";
20
- import "./chunk-RA64IK43.js";
21
- import "./chunk-MRLCNXXR.js";
22
- import "./chunk-CQD26SMZ.js";
23
- import "./chunk-U25OX22K.js";
9
+ } from "./chunk-VCN6THJZ.js";
10
+ import "./chunk-OE3ECGHN.js";
11
+ import "./chunk-NRJC7XTD.js";
12
+ import "./chunk-7HX7LQ66.js";
13
+ import "./chunk-UQRUMRB2.js";
14
+ import "./chunk-THOVQFPT.js";
15
+ import "./chunk-J422SCUS.js";
16
+ import "./chunk-N35OSYIU.js";
17
+ import "./chunk-WPHKKINR.js";
18
+ import "./chunk-S56NJ5LE.js";
19
+ import "./chunk-4HAYYEFB.js";
20
+ import "./chunk-LRO3Y2XQ.js";
21
+ import "./chunk-WJK5WJLA.js";
22
+ import "./chunk-K4J4Z37A.js";
23
+ import "./chunk-BH5DMXG5.js";
24
24
  import "./chunk-MMB2OHUY.js";
25
25
  import "./chunk-TV45EUGM.js";
26
26
  export {