@maycombhq/atticus 2.0.0-beta.2 → 2.0.0-beta.22

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 (284) hide show
  1. package/dist/bin.js +8 -4
  2. package/dist/chunk-23XVSEV5.js +49 -0
  3. package/dist/{chunk-ZDPAS56H.js → chunk-24OXGB3P.js} +8 -2
  4. package/dist/{chunk-7EOBHUMC.js → chunk-24XLDU72.js} +4 -3
  5. package/dist/{chunk-CR3MTH32.js → chunk-2F4CYZKJ.js} +86 -11
  6. package/dist/{chunk-6IU67AEK.js → chunk-2GF7OLF3.js} +23 -15
  7. package/dist/chunk-2IIMFOPM.js +41 -0
  8. package/dist/chunk-2LGRMVCA.js +617 -0
  9. package/dist/{chunk-XPCM366L.js → chunk-2MMCFP5C.js} +10 -8
  10. package/dist/{chunk-JBTK5OP2.js → chunk-2Q56PQPS.js} +6 -4
  11. package/dist/{chunk-Z6LF7HQN.js → chunk-2Q5EDGEO.js} +7 -5
  12. package/dist/{chunk-3USYZGRF.js → chunk-2RLKFUUL.js} +38 -27
  13. package/dist/chunk-2SKB4O2E.js +59 -0
  14. package/dist/{chunk-SP2I63OO.js → chunk-34S2WGOB.js} +87 -4
  15. package/dist/{chunk-GQ4N4WKF.js → chunk-3NFFJL5D.js} +33 -27
  16. package/dist/{chunk-SJRGMG6A.js → chunk-3NWDLGG6.js} +28 -25
  17. package/dist/{chunk-4WBVUHXN.js → chunk-3RM4UK6W.js} +20 -18
  18. package/dist/chunk-42SIDKEU.js +583 -0
  19. package/dist/{chunk-GLUX4EEP.js → chunk-4EURQWQD.js} +20 -15
  20. package/dist/chunk-4U276ICE.js +39 -0
  21. package/dist/{chunk-ZMFPW66A.js → chunk-53T4O55J.js} +4 -3
  22. package/dist/{chunk-6J5OKA4Y.js → chunk-57TDNMI3.js} +17 -15
  23. package/dist/chunk-5BD2KYLE.js +57 -0
  24. package/dist/{chunk-7EFILTCI.js → chunk-5F7GFN2F.js} +28 -0
  25. package/dist/chunk-5NMKONLP.js +95 -0
  26. package/dist/{chunk-7ZUIMTOU.js → chunk-5SJZW52K.js} +26 -24
  27. package/dist/{chunk-4RS5KZQD.js → chunk-63YRMR6J.js} +6 -5
  28. package/dist/chunk-66PPNOON.js +62 -0
  29. package/dist/chunk-6H3Z5JHH.js +64 -0
  30. package/dist/{chunk-CEXSU4S6.js → chunk-6MUGR4LS.js} +775 -89
  31. package/dist/{chunk-QSXK2RGH.js → chunk-6OJQOPUN.js} +5 -3
  32. package/dist/{chunk-MVZVGYXH.js → chunk-6PPOWY5E.js} +84 -14
  33. package/dist/{chunk-7EKXJZ2Y.js → chunk-6ZGLAACW.js} +299 -38
  34. package/dist/chunk-6ZJ5A7AF.js +222 -0
  35. package/dist/{chunk-L24C55VN.js → chunk-745DAZ4L.js} +142 -30
  36. package/dist/{chunk-Q4D5X7QB.js → chunk-7ASNL4Q4.js} +46 -24
  37. package/dist/chunk-7BR7IPOH.js +35 -0
  38. package/dist/{chunk-7WD63HU2.js → chunk-7DOR27HL.js} +6 -6
  39. package/dist/chunk-7FTTA3HD.js +341 -0
  40. package/dist/{chunk-OLQJTJJU.js → chunk-7GJS6DNX.js} +12 -3
  41. package/dist/{chunk-7JUKDRSZ.js → chunk-7IGKHZ4Z.js} +347 -226
  42. package/dist/{chunk-G2B4ZQGH.js → chunk-7IOWA5D5.js} +11 -6
  43. package/dist/{chunk-EBEW3XXQ.js → chunk-7JITZFJC.js} +7 -5
  44. package/dist/chunk-7MJSQTL5.js +174 -0
  45. package/dist/{chunk-I4JRCD6M.js → chunk-7UOMVMFG.js} +25 -17
  46. package/dist/{chunk-YY6ZQQBP.js → chunk-AFWUDXEM.js} +19 -7
  47. package/dist/chunk-AFZ3QA6W.js +47 -0
  48. package/dist/chunk-AJQ72EBM.js +420 -0
  49. package/dist/chunk-AJYXNTNZ.js +317 -0
  50. package/dist/chunk-AVTBS4OW.js +49 -0
  51. package/dist/{chunk-FHH4I4ZV.js → chunk-BDKC6H5P.js} +12 -6
  52. package/dist/{chunk-IPKHE5D6.js → chunk-BEVTIBRH.js} +1526 -875
  53. package/dist/chunk-BHT7QK4G.js +162 -0
  54. package/dist/{chunk-6JUBZBMW.js → chunk-BIGDQDHD.js} +6 -4
  55. package/dist/{chunk-2BFCZ3RK.js → chunk-BO4KX37X.js} +20 -18
  56. package/dist/chunk-BPK5P77O.js +115 -0
  57. package/dist/chunk-BQ4SQQC6.js +59 -0
  58. package/dist/chunk-BQGDB6ZL.js +7342 -0
  59. package/dist/{chunk-2ANOROX3.js → chunk-BTGPE6CR.js} +11 -9
  60. package/dist/chunk-BTY3HZBO.js +93 -0
  61. package/dist/{chunk-DPZHZQKE.js → chunk-BXYMYEJ4.js} +44 -10
  62. package/dist/{chunk-2RMYG36Q.js → chunk-C3RY6KU6.js} +309 -346
  63. package/dist/chunk-C4R4JLHE.js +40 -0
  64. package/dist/chunk-CADWLE2T.js +18 -0
  65. package/dist/chunk-CBGGOQWU.js +82 -0
  66. package/dist/chunk-CMDXGQTS.js +47 -0
  67. package/dist/{chunk-MC3H7736.js → chunk-CQDGOPGH.js} +58 -18
  68. package/dist/{chunk-HFQCFSJR.js → chunk-CX4RZ2KS.js} +4 -3
  69. package/dist/{chunk-PAMPPUR6.js → chunk-CXJ6FUKN.js} +1852 -207
  70. package/dist/{chunk-ABWHYWNI.js → chunk-D73UEXYW.js} +3 -3
  71. package/dist/chunk-DCZWQLYT.js +1205 -0
  72. package/dist/chunk-DLOBCJL6.js +48 -0
  73. package/dist/{chunk-4BN53TG3.js → chunk-DOBQKHIF.js} +31 -23
  74. package/dist/chunk-E3ISYXO3.js +423 -0
  75. package/dist/{chunk-7SW2QWLU.js → chunk-E6ZIEVOI.js} +16 -13
  76. package/dist/chunk-EBL2R3YG.js +43 -0
  77. package/dist/{chunk-AIOQPLA5.js → chunk-EGQRREQH.js} +41 -15
  78. package/dist/chunk-EHA7RMZ3.js +58 -0
  79. package/dist/{chunk-M766ZJ6W.js → chunk-EIPTLPFC.js} +38 -27
  80. package/dist/chunk-EMRIQUND.js +517 -0
  81. package/dist/{chunk-DFBCSHVT.js → chunk-EPCJQQWD.js} +6 -4
  82. package/dist/{chunk-RZPYKDWS.js → chunk-F3P7N7SF.js} +1 -1
  83. package/dist/{chunk-R77KLRB3.js → chunk-FFLNS6VP.js} +21 -18
  84. package/dist/chunk-FFTRTL6R.js +26 -0
  85. package/dist/{chunk-IHMLFRVV.js → chunk-FPJPLKDW.js} +62 -16
  86. package/dist/{chunk-JCZIKA4C.js → chunk-FSMSFDLD.js} +5 -4
  87. package/dist/{chunk-AVJDSJ2F.js → chunk-FUJM6RTF.js} +8 -7
  88. package/dist/chunk-FZOJFH7Q.js +132 -0
  89. package/dist/{chunk-QRAOANID.js → chunk-G6X77UJZ.js} +23 -21
  90. package/dist/{chunk-3ALD2W2A.js → chunk-GCWRWSU7.js} +10 -4
  91. package/dist/chunk-GIW4ZVDB.js +39 -0
  92. package/dist/{chunk-B2WLAWNJ.js → chunk-GUX3PTYM.js} +3 -3
  93. package/dist/{chunk-DPUYDDQG.js → chunk-GZY6RUZ6.js} +25 -3
  94. package/dist/chunk-H4VO6WG3.js +10 -0
  95. package/dist/{chunk-MMOSZPWJ.js → chunk-H5HBGNXU.js} +5 -4
  96. package/dist/chunk-H7KM7LZE.js +229 -0
  97. package/dist/{chunk-AA6YULYB.js → chunk-HNM2YQT2.js} +7 -7
  98. package/dist/{chunk-3C7EYRFZ.js → chunk-HYU5VLGA.js} +1 -1
  99. package/dist/{chunk-XY3P7JW7.js → chunk-IDKCWSM5.js} +1032 -172
  100. package/dist/chunk-IFKEI4SA.js +237 -0
  101. package/dist/{chunk-F7HYOUFF.js → chunk-IGOE6KPG.js} +67 -22
  102. package/dist/{chunk-TDD55CJH.js → chunk-IH2XURVQ.js} +6 -5
  103. package/dist/chunk-INQHESFB.js +38 -0
  104. package/dist/chunk-IP74LCOQ.js +57 -0
  105. package/dist/chunk-IPHHDDC6.js +45 -0
  106. package/dist/{chunk-T6AIP7H5.js → chunk-ISUAAMGS.js} +110 -153
  107. package/dist/{chunk-A7UPUQFY.js → chunk-IUPG3UKI.js} +624 -319
  108. package/dist/{chunk-L6SGQIR3.js → chunk-IVBOQAGB.js} +7 -3
  109. package/dist/{chunk-27NKUS3X.js → chunk-J2JAKCIW.js} +2205 -796
  110. package/dist/{chunk-V2YTAIQO.js → chunk-J3IOLXWM.js} +24 -7
  111. package/dist/chunk-JA5FI3QV.js +142 -0
  112. package/dist/chunk-JAVI7JSP.js +49 -0
  113. package/dist/{chunk-HLJAXMM4.js → chunk-JB5LINEM.js} +6 -2
  114. package/dist/{chunk-2VHF7OXM.js → chunk-JENSEMXF.js} +1 -1
  115. package/dist/{chunk-6BVONWJ7.js → chunk-JJF6HALY.js} +4 -3
  116. package/dist/chunk-JLUCKAEL.js +38 -0
  117. package/dist/chunk-JRBFANFE.js +221 -0
  118. package/dist/{chunk-R6XF6UR3.js → chunk-KDNTAPLX.js} +4 -4
  119. package/dist/chunk-KFAVQZSX.js +33 -0
  120. package/dist/chunk-KJXD4PNL.js +50 -0
  121. package/dist/chunk-KN5BXMWN.js +44 -0
  122. package/dist/{chunk-PCVDV3UZ.js → chunk-KQGURXFU.js} +9 -7
  123. package/dist/{chunk-WY6PP6AA.js → chunk-KXITGYLF.js} +40 -6
  124. package/dist/{chunk-66YVAGGM.js → chunk-L27SV425.js} +22 -20
  125. package/dist/{chunk-NE2W3OO7.js → chunk-LDLL7LB3.js} +24 -22
  126. package/dist/chunk-LFGTYX5U.js +379 -0
  127. package/dist/{chunk-EYWIDJFU.js → chunk-LGBMTVNT.js} +7 -5
  128. package/dist/{chunk-Q5AMFEWD.js → chunk-LGFL54FP.js} +3 -2
  129. package/dist/{chunk-6TACQN3N.js → chunk-LJXMYKZJ.js} +7 -5
  130. package/dist/{chunk-BKVWTZ6A.js → chunk-LKOR5UET.js} +29 -26
  131. package/dist/chunk-LNBQOP7D.js +294 -0
  132. package/dist/{chunk-O3WI5KWW.js → chunk-LO6P2VYG.js} +2 -2
  133. package/dist/chunk-LQJPN536.js +122 -0
  134. package/dist/{chunk-YEDDOYSC.js → chunk-LYBNHMVZ.js} +29 -5
  135. package/dist/{chunk-A3GY6SOA.js → chunk-LZ7NUC62.js} +20 -18
  136. package/dist/chunk-M32BLWDH.js +37 -0
  137. package/dist/{chunk-VYDBJ73M.js → chunk-M3NANSDZ.js} +17 -15
  138. package/dist/chunk-MFHL5URL.js +31 -0
  139. package/dist/chunk-MFR5OPBD.js +109 -0
  140. package/dist/{chunk-DE76JROX.js → chunk-MG4ZL5RW.js} +32 -20
  141. package/dist/{chunk-N7IXEHK3.js → chunk-MO6P2JZH.js} +10 -8
  142. package/dist/{chunk-65NYPGRC.js → chunk-MUWDB4R4.js} +1 -1
  143. package/dist/chunk-MZCGSXVR.js +34 -0
  144. package/dist/{chunk-MGYZM27B.js → chunk-N3XIYPU3.js} +51 -23
  145. package/dist/chunk-NDCF4R6S.js +172 -0
  146. package/dist/{chunk-DHPACDG7.js → chunk-NR2UJWOC.js} +10 -8
  147. package/dist/chunk-NXJ5URP6.js +51 -0
  148. package/dist/{chunk-UNM6ZOKP.js → chunk-NY2XSR5K.js} +147 -18
  149. package/dist/{chunk-5GDRCDQB.js → chunk-O45HFTFS.js} +3 -2
  150. package/dist/{chunk-ONLS5QA5.js → chunk-O4GXGGBX.js} +14 -12
  151. package/dist/chunk-O5PXQR67.js +249 -0
  152. package/dist/{chunk-PRPPGYZG.js → chunk-O66DM6DJ.js} +6 -4
  153. package/dist/{chunk-KEM4SDDP.js → chunk-O7FDLW7L.js} +11 -8
  154. package/dist/{chunk-T2UYZSCQ.js → chunk-O7XLYEFA.js} +169 -29
  155. package/dist/{chunk-FITWGOJ2.js → chunk-OHNCWBKF.js} +4 -4
  156. package/dist/{chunk-652QWTLZ.js → chunk-OHVTTOPS.js} +3 -3
  157. package/dist/chunk-OMI6FPPN.js +43 -0
  158. package/dist/chunk-ONUPY3H6.js +53 -0
  159. package/dist/chunk-OTLDSZDV.js +69 -0
  160. package/dist/chunk-OUBGGKDU.js +22 -0
  161. package/dist/chunk-OWNCM4ZN.js +330 -0
  162. package/dist/{chunk-YISXLPHN.js → chunk-P2V7QW4D.js} +235 -35
  163. package/dist/{chunk-CNUKCS2T.js → chunk-P32RUW3B.js} +1632 -93
  164. package/dist/{chunk-BWZ77RQT.js → chunk-PAQ2AS5E.js} +1 -1
  165. package/dist/{chunk-ZMAINWBW.js → chunk-PBPBMP2B.js} +4 -3
  166. package/dist/{chunk-ZVM6AKKM.js → chunk-PJSJPMJI.js} +3 -3
  167. package/dist/{chunk-EFHQ3TWP.js → chunk-PKBHS4AA.js} +233 -56
  168. package/dist/{chunk-GT4I4ZWM.js → chunk-PMUAJGLI.js} +20 -16
  169. package/dist/chunk-PPD7HTDP.js +152 -0
  170. package/dist/chunk-PSOFBQWB.js +42 -0
  171. package/dist/{chunk-S2A7YC3Q.js → chunk-Q2TECDIT.js} +10694 -8896
  172. package/dist/chunk-Q4K5WB2W.js +42 -0
  173. package/dist/{chunk-UGLN7QHV.js → chunk-Q6DFNVRJ.js} +14 -12
  174. package/dist/chunk-QA4O2GGC.js +265 -0
  175. package/dist/chunk-QAXW2N3B.js +1216 -0
  176. package/dist/chunk-QBNWF5ZU.js +19 -0
  177. package/dist/chunk-QFWA2DPH.js +224 -0
  178. package/dist/{chunk-23W7VWKR.js → chunk-QKUJMING.js} +1363 -114
  179. package/dist/{chunk-NXFPS2LR.js → chunk-R44CYFPV.js} +16 -13
  180. package/dist/{chunk-CKSITVS4.js → chunk-R7NYHMUU.js} +2687 -786
  181. package/dist/chunk-REWWDVQB.js +162 -0
  182. package/dist/{chunk-JMSCMUCA.js → chunk-RGERPOIV.js} +145 -21
  183. package/dist/{chunk-6JCPI55B.js → chunk-RLDGWLQ7.js} +49 -7
  184. package/dist/chunk-RUGXBPWI.js +384 -0
  185. package/dist/{chunk-CPA6HPVR.js → chunk-RXPJMEOW.js} +18 -12
  186. package/dist/{chunk-3HI6Z55Y.js → chunk-S4PMJU6H.js} +339 -43
  187. package/dist/chunk-S5LSDXV4.js +40 -0
  188. package/dist/chunk-S7FCV7S5.js +51 -0
  189. package/dist/{chunk-5GGOLAKC.js → chunk-SDKLKB6I.js} +28 -26
  190. package/dist/chunk-SFSPGFCV.js +62 -0
  191. package/dist/{chunk-ZNCEKR4J.js → chunk-SFUP7TTO.js} +12 -8
  192. package/dist/{chunk-64EQYWCA.js → chunk-SLXZOMA6.js} +69 -19
  193. package/dist/chunk-SQV37XO2.js +273 -0
  194. package/dist/{chunk-K65BJIMT.js → chunk-SU74NDMQ.js} +19 -17
  195. package/dist/chunk-SYV5LHML.js +165 -0
  196. package/dist/chunk-T4YPZIQN.js +36 -0
  197. package/dist/chunk-T6DQR5TV.js +323 -0
  198. package/dist/{chunk-JIITQXFB.js → chunk-THDMSZ3R.js} +3075 -802
  199. package/dist/{chunk-JGZCG5VM.js → chunk-TNR75OXT.js} +7 -7
  200. package/dist/{chunk-D3PO4DOZ.js → chunk-TUULXQRW.js} +174 -15
  201. package/dist/chunk-TYQBFTBR.js +516 -0
  202. package/dist/chunk-U76OWS3Q.js +49 -0
  203. package/dist/{chunk-YYQN46FY.js → chunk-UCROWG2D.js} +27 -24
  204. package/dist/{chunk-6M5NK3K3.js → chunk-UF4AZOZB.js} +50 -10
  205. package/dist/chunk-UF4GLFBX.js +345 -0
  206. package/dist/{chunk-OT2O76OS.js → chunk-UGUP3ZM6.js} +240 -39
  207. package/dist/chunk-UNAGJYET.js +45 -0
  208. package/dist/{chunk-5WG5YP4T.js → chunk-UOR2DTHH.js} +16 -14
  209. package/dist/{chunk-S3QNRWYR.js → chunk-UPOY4YSQ.js} +14 -12
  210. package/dist/{chunk-EPTBZ3GP.js → chunk-UPS2DGFC.js} +1 -1
  211. package/dist/{chunk-4AK7IBVP.js → chunk-UUU4CLJG.js} +4 -2
  212. package/dist/{chunk-W3BQAZ3Q.js → chunk-UWMJKX5U.js} +14 -12
  213. package/dist/{chunk-QZSX3F7C.js → chunk-UWOJLHFT.js} +27 -23
  214. package/dist/chunk-VBTP56CE.js +535 -0
  215. package/dist/chunk-VCTWPLAO.js +211 -0
  216. package/dist/chunk-VNU26RCO.js +1215 -0
  217. package/dist/{chunk-CSZ4C5N6.js → chunk-VTZMAJ3W.js} +93 -10
  218. package/dist/{chunk-TXLH6WHQ.js → chunk-VW62D6QE.js} +14 -12
  219. package/dist/{chunk-CAQZUNOH.js → chunk-VY72R2XZ.js} +610 -3
  220. package/dist/{chunk-2DIQQJCB.js → chunk-VZALIKIF.js} +18 -15
  221. package/dist/{chunk-TYAID7B7.js → chunk-W62H2XSO.js} +25 -23
  222. package/dist/{chunk-HVUPKCGJ.js → chunk-W7VWI2YH.js} +9 -6
  223. package/dist/{chunk-TANFV3MZ.js → chunk-WERM6KPJ.js} +7 -4
  224. package/dist/{chunk-BOHJZTEQ.js → chunk-WF7B67YE.js} +208 -87
  225. package/dist/{chunk-7FBGJFEE.js → chunk-WG5U3F5V.js} +14 -12
  226. package/dist/{chunk-4NDAAFQT.js → chunk-WJF2CS6M.js} +8 -5
  227. package/dist/{chunk-XAKWMCXI.js → chunk-WKUJ3KPV.js} +4 -4
  228. package/dist/chunk-WMTRHUI5.js +103 -0
  229. package/dist/chunk-WNKPRSGI.js +36 -0
  230. package/dist/chunk-WXFLMQSR.js +223 -0
  231. package/dist/{chunk-RRTKKSLQ.js → chunk-X3WY6MN3.js} +8 -6
  232. package/dist/{chunk-ZCJDOK2S.js → chunk-X4CXA2IL.js} +47 -23
  233. package/dist/{chunk-UBBC2XSG.js → chunk-X5F3Q5LV.js} +560 -105
  234. package/dist/{chunk-C6EKFH7J.js → chunk-XD75VZIH.js} +9 -7
  235. package/dist/chunk-XERYFDB5.js +297 -0
  236. package/dist/chunk-XI2LCCYQ.js +420 -0
  237. package/dist/chunk-Y2EQNWKV.js +933 -0
  238. package/dist/{chunk-LR3R6Z2A.js → chunk-YHCMZC2J.js} +7 -7
  239. package/dist/chunk-YYY3AZFE.js +122 -0
  240. package/dist/{chunk-GDLULHTC.js → chunk-Z5IA3WDR.js} +19 -31
  241. package/dist/{chunk-T6XQL73F.js → chunk-ZFFYNRIO.js} +63 -23
  242. package/dist/{chunk-EDS2L2LD.js → chunk-ZFL7NY4F.js} +56 -27
  243. package/dist/{chunk-YMZ3TNYB.js → chunk-ZGULQAPZ.js} +7 -4
  244. package/dist/{chunk-4SKZDI62.js → chunk-ZIUFM5HT.js} +3 -1
  245. package/dist/{chunk-DKJA76CJ.js → chunk-ZJFRMSJT.js} +15 -13
  246. package/dist/chunk-ZJXLNDH4.js +239 -0
  247. package/dist/chunk-ZQ3ON2VQ.js +252 -0
  248. package/dist/{chunk-HITVBIJS.js → chunk-ZQ7SKESZ.js} +150 -415
  249. package/dist/{chunk-6QSERWXH.js → chunk-ZQXZ2SES.js} +24 -21
  250. package/dist/chunk-ZX57KSEQ.js +39 -0
  251. package/dist/{chunk-I3E7CX4H.js → chunk-ZZK56BLP.js} +5 -3
  252. package/dist/files.json +664 -368
  253. package/dist/packages/naysayer/constitution/constitution.yaml +19 -0
  254. package/dist/packages/sdk/npm/index.js +6194 -2542
  255. package/dist/packages/ui/dist/assets/{elk-api-tma0MCuh.js → elk-api-CIf-0gz5.js} +2 -2
  256. package/dist/packages/ui/dist/assets/index-CoK_Dl0D.js +47 -0
  257. package/dist/packages/ui/dist/assets/index-Dw20IRhQ.css +1 -0
  258. package/dist/packages/ui/dist/index.html +3 -2
  259. package/package.json +5 -5
  260. package/dist/chunk-2BF2EYJV.js +0 -174
  261. package/dist/chunk-42EVSKME.js +0 -37
  262. package/dist/chunk-4BKGMUIK.js +0 -53
  263. package/dist/chunk-5KLGBXG5.js +0 -48
  264. package/dist/chunk-6BNC6EQ4.js +0 -41
  265. package/dist/chunk-6D2CQ5II.js +0 -41
  266. package/dist/chunk-7AVHLZGD.js +0 -45
  267. package/dist/chunk-D46WUV3T.js +0 -33
  268. package/dist/chunk-E36QOJMD.js +0 -47
  269. package/dist/chunk-FQXYPF7E.js +0 -147
  270. package/dist/chunk-GBRFVT63.js +0 -45
  271. package/dist/chunk-ICY36XCH.js +0 -34
  272. package/dist/chunk-J4K3KVLD.js +0 -131
  273. package/dist/chunk-JZU3H6UQ.js +0 -54
  274. package/dist/chunk-NN2ZQEB4.js +0 -38
  275. package/dist/chunk-PCOCACY3.js +0 -385
  276. package/dist/chunk-RTEYOSJY.js +0 -29
  277. package/dist/chunk-RUVFXE2L.js +0 -666
  278. package/dist/chunk-RVH5SUW5.js +0 -69
  279. package/dist/chunk-VN3DP4LQ.js +0 -43
  280. package/dist/chunk-W5BVQF44.js +0 -36
  281. package/dist/chunk-WVPJSRRJ.js +0 -52
  282. package/dist/chunk-XPTOBS2D.js +0 -48
  283. package/dist/packages/ui/dist/assets/index-B54fm9FQ.js +0 -29
  284. package/dist/packages/ui/dist/assets/index-DD_hufQz.css +0 -1
@@ -1,666 +0,0 @@
1
- import { createRequire as __atticusCreateRequire } from "node:module";
2
- import { fileURLToPath as __atticusFileURLToPath } from "node:url";
3
- var require = __atticusCreateRequire(import.meta.url);
4
- var __atticusUrl = (p) => new URL("./" + p, import.meta.url).href;
5
- var __atticusPath = (p) => __atticusFileURLToPath(__atticusUrl(p));
6
- import {
7
- partOfWords,
8
- readPlanProgress,
9
- readPlanRelOf
10
- } from "./chunk-FQXYPF7E.js";
11
- import {
12
- onboardingView
13
- } from "./chunk-EBEW3XXQ.js";
14
- import {
15
- isMetarepo,
16
- notMetarepo
17
- } from "./chunk-3G4YI4ZU.js";
18
- import {
19
- readChangeTasks
20
- } from "./chunk-OT2O76OS.js";
21
- import {
22
- ASSISTANT_FORMATS,
23
- probedAssistant,
24
- readProbes,
25
- whatRunsWhere
26
- } from "./chunk-IPKHE5D6.js";
27
- import {
28
- metarepoOpenSpec,
29
- openspecProgress,
30
- readNeeds
31
- } from "./chunk-CKSITVS4.js";
32
- import {
33
- readChangeFiles
34
- } from "./chunk-3HI6Z55Y.js";
35
- import {
36
- changeStore,
37
- loadChangePolicy,
38
- stageCompletion
39
- } from "./chunk-XY3P7JW7.js";
40
- import {
41
- readKnowledge,
42
- snapshotDates,
43
- workingDays
44
- } from "./chunk-L24C55VN.js";
45
- import {
46
- stepClassOfNextStep
47
- } from "./chunk-CNUKCS2T.js";
48
- import {
49
- ScanVerifyProposal,
50
- changesDirOf,
51
- factsDirOf,
52
- fastPathOf,
53
- listQuestions,
54
- loadOrgPack,
55
- orgPackDirOf,
56
- proposalsDirOf,
57
- readRepoSpec,
58
- readSpecFindings,
59
- require_dist,
60
- stepModelsOf
61
- } from "./chunk-S2A7YC3Q.js";
62
- import {
63
- __toESM
64
- } from "./chunk-TV45EUGM.js";
65
-
66
- // packages/cli/dist/next-commands.js
67
- var import_yaml = __toESM(require_dist(), 1);
68
- import { existsSync } from "node:fs";
69
- import { readdir, readFile } from "node:fs/promises";
70
- import { join } from "node:path";
71
- var METAREPO = "metarepo";
72
- var DRAFTING = ["feature", "architecture", "stories"];
73
- var draftingAt = (s) => DRAFTING.indexOf(s);
74
- var canMoveOn = (state) => {
75
- const at = draftingAt(stageOf(state));
76
- return at >= 0 && at < DRAFTING.length - 1;
77
- };
78
- var STALE_DAYS = 14;
79
- var plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
80
- async function verifyState(root, repo) {
81
- const text = await readFile(join(proposalsDirOf(root), "scan", `${repo}.yaml`), "utf8").catch(() => void 0);
82
- if (text === void 0)
83
- return "none";
84
- const p = ScanVerifyProposal.safeParse((0, import_yaml.parse)(text));
85
- if (!p.success)
86
- return "none";
87
- const s = p.data.settings;
88
- const entries = s.exclude.length + s.prefixes.length + s.clients.length;
89
- if (entries > 0 && (!p.data.accepted || p.data.accepted.at < p.data.at))
90
- return "accept";
91
- return "done";
92
- }
93
- async function readNextState(root) {
94
- const view = await onboardingView(root);
95
- const problems = [...view.problems];
96
- const repos = [];
97
- for (const r of view.repos) {
98
- const spec = await readRepoSpec(root, r.id, { cacheRoot: root });
99
- problems.push(...spec.problems);
100
- const findings = await readSpecFindings(root, r.id);
101
- const plan = await readPlanProgress(root, r.id);
102
- repos.push({
103
- id: r.id,
104
- cloned: r.cloned,
105
- settings: r.scanSettings.present,
106
- scanned: r.lastScan !== null,
107
- verify: await verifyState(root, r.id),
108
- flows: spec.flows.length,
109
- checked: !!findings && findings.draftedAt === spec.header?.drafted?.at,
110
- findings: findings?.findings.filter((f) => !f.question).length ?? 0,
111
- described: !r.description ? "none" : r.description.trust === "suggested" ? "draft" : "said",
112
- ...spec.header?.template.startsWith("facts@") ? { facts: true } : {},
113
- ...existsSync(join(factsDirOf(root), `${r.id}.jsonl`)) ? { read: true } : {},
114
- ...plan ? {
115
- readPlan: {
116
- total: plan.total,
117
- done: plan.done,
118
- ...plan.next ? { next: { part: plan.next.part, paths: plan.next.paths } } : {},
119
- file: readPlanRelOf(root, r.id)
120
- }
121
- } : {}
122
- });
123
- }
124
- const open = await listQuestions(root, { state: "open" });
125
- problems.push(...open.problems);
126
- const changeIds = new Set(await changeStore(root).list().then((cs) => cs.map((c) => c.id), () => []));
127
- const changeQuestions = {};
128
- for (const q of open.questions)
129
- if (changeIds.has(q.repo))
130
- (changeQuestions[q.repo] ??= []).push(q.id);
131
- const knowledge = await readKnowledge(root, { cacheRoot: root });
132
- const sources = [];
133
- for (const w of view.sources.wikis) {
134
- const newest = (await snapshotDates(root, w.id))[0];
135
- sources.push({
136
- id: w.id,
137
- snapshot: !!newest,
138
- scanned: !!newest && !!knowledge.report?.snapshots.some((s) => s.source === w.id && s.date === newest),
139
- ...newest ? { age: Math.floor((Date.now() - Date.parse(`${newest}T00:00:00Z`)) / 864e5) } : {}
140
- });
141
- }
142
- const orgPack = await loadOrgPack(orgPackDirOf(root)).catch((e) => e);
143
- let orgpack;
144
- try {
145
- if (orgPack instanceof Error)
146
- throw orgPack;
147
- const op = orgPack;
148
- const names = new Set(op.profiles.flatMap((p) => (p.profile?.systems ?? []).flatMap((x) => [x.name, ...x.aliases])).map((n) => n.toLowerCase()));
149
- const missing = knowledge.items.filter((i) => (i.kind === "Product" && i.productKind === "product" || i.kind === "Party" && i.partyKind === "vendor" && !!i.quote) && ![i.name, ...i.aliases].some((n) => names.has(n.toLowerCase()))).length;
150
- let draft;
151
- for (const f of await readdir(join(proposalsDirOf(root), "orgpack")).catch(() => []))
152
- if (f.endsWith(".yaml")) {
153
- const d = (0, import_yaml.parse)(await readFile(join(proposalsDirOf(root), "orgpack", f), "utf8"));
154
- if (d?.platform && d.proposals?.length)
155
- draft = { platform: d.platform, proposals: d.proposals.length };
156
- }
157
- if (missing || draft)
158
- orgpack = { missing, ...draft ? { draft } : {} };
159
- } catch (e) {
160
- problems.push({ file: "org-pack", message: e.message.split("\n")[0] });
161
- }
162
- const changes = [];
163
- let unverifiedNeeds = 0;
164
- let active;
165
- const types = orgPack instanceof Error ? [] : orgPack.changeTypes.types;
166
- const { policy } = await loadChangePolicy(orgPackDirOf(root));
167
- const os = metarepoOpenSpec(root);
168
- try {
169
- for (const c of await changeStore(root).list()) {
170
- const files = await readChangeFiles(join(changesDirOf(root), c.id)).catch(() => void 0);
171
- const stagesDone = (await stageCompletion({ root, policy }, c)).filter((s) => s.state === "done").map((s) => s.stage);
172
- const needs = await readNeeds(root, c.id);
173
- const open2 = needs?.needs.filter((n) => n.status === "open") ?? [];
174
- unverifiedNeeds += open2.filter((n) => {
175
- const r = knowledge.reviews[n.item];
176
- return r?.state !== "verified" && r?.state !== "corrected";
177
- }).length;
178
- const longest = open2.map((n) => ({
179
- n,
180
- // The lead time as the knowledge scan read it (ADR 0117); a need with none sorts last.
181
- days: n.leadTimeDays ? workingDays(n.leadTimeDays) : 0
182
- })).sort((a, b) => b.days - a.days)[0];
183
- const progress = os && canMoveOn(c.state) ? await openspecProgress(os, c.id).catch(() => void 0) : void 0;
184
- const busy = await stageInProgress(root, c.id);
185
- if (busy && stageOf(c.state) !== "done" && (!active || busy > active.at))
186
- active = { id: c.id, at: busy };
187
- changes.push({
188
- id: c.id,
189
- state: c.state,
190
- tasks: files ? readChangeTasks(files).map((t) => ({ id: t.id, repo: t.repo, done: t.done })) : [],
191
- feature: existsSync(join(changesDirOf(root), c.id, "feature.yaml")),
192
- ...stagesDone.length ? { stagesDone } : {},
193
- ...progress?.next ? { openspecStage: progress.next } : {},
194
- ...await isFast(root, c, types) ? {
195
- fast: true,
196
- .../^state: done$/m.test(await readFile(join(changesDirOf(root), c.id, "stage", "small.yaml"), "utf8").catch(() => "")) ? { fastDone: true } : {}
197
- } : {},
198
- ...needs ? {
199
- needs: {
200
- open: open2.length,
201
- ...longest?.days ? { longest: `${longest.n.title}, ${longest.n.leadTime}` } : {}
202
- }
203
- } : {}
204
- });
205
- }
206
- } catch (e) {
207
- problems.push({ file: "openspec/changes", message: e.message.split("\n")[0] });
208
- }
209
- return {
210
- repos,
211
- catalogRecords: view.catalog.records,
212
- openQuestions: open.questions.map((q) => q.id),
213
- ...Object.keys(changeQuestions).length ? { changeQuestions } : {},
214
- ...active ? { active: active.id } : {},
215
- sources,
216
- changes,
217
- problems,
218
- ...orgpack ? { orgpack } : {},
219
- ...unverifiedNeeds ? { unverifiedNeeds } : {}
220
- };
221
- }
222
- var UNDER_WAY = /* @__PURE__ */ new Set(["drafting", "waiting", "questions", "stopped"]);
223
- async function stageInProgress(root, change) {
224
- const dir = join(changesDirOf(root), change, "stage");
225
- let newest;
226
- for (const f of (await readdir(dir).catch(() => [])).filter((x) => x.endsWith(".yaml"))) {
227
- const loop = await readFile(join(dir, f), "utf8").then((t) => {
228
- try {
229
- return (0, import_yaml.parse)(t);
230
- } catch {
231
- return null;
232
- }
233
- }, () => null);
234
- const at = typeof loop?.updatedAt === "string" ? loop.updatedAt : "";
235
- if (typeof loop?.state === "string" && UNDER_WAY.has(loop.state) && (!newest || at > newest))
236
- newest = at || "0";
237
- }
238
- return newest;
239
- }
240
- async function isFast(root, c, types) {
241
- const type = types.find((t) => t.id === c.type);
242
- if (!type || type.size !== "small" && !type.smallWhenBriefSays)
243
- return false;
244
- const brief = await readFile(join(changesDirOf(root), c.id, "brief.md"), "utf8").catch(() => "");
245
- return fastPathOf(type, brief).fast;
246
- }
247
- function stageOf(state) {
248
- switch (state) {
249
- case "draft":
250
- case "define":
251
- case "returned":
252
- return "feature";
253
- case "design":
254
- return "architecture";
255
- case "plan":
256
- return "stories";
257
- case "build":
258
- case "qa":
259
- return "tasks";
260
- case "released":
261
- case "archived":
262
- return "done";
263
- default:
264
- return "release";
265
- }
266
- }
267
- function changeSteps(c) {
268
- const stage = stageSteps(c);
269
- const id = c.id;
270
- const done = stageOf(c.state) === "done";
271
- const find = c.feature && !c.needs && !done ? [
272
- {
273
- step: "needs",
274
- command: `atticus change needs ${id}`,
275
- slash: `/atticus-needs ${id}`,
276
- where: METAREPO,
277
- why: `${id} is placed on the estate: your assistant says what it needs from the organisation (requests and processes to raise, standards to follow, teams to involve), and Atticus checks each against the change's own words (ADR 0101).`,
278
- change: id
279
- }
280
- ] : [];
281
- const raise = c.needs?.open && !done ? [
282
- {
283
- step: "raise-needs",
284
- command: `atticus needs --change ${id}`,
285
- where: METAREPO,
286
- why: `${plural(c.needs.open, "need")} of ${id} ${c.needs.open === 1 ? "is" : "are"} open${c.needs.longest ? ` (the longest: ${c.needs.longest})` : ""}. Raise each, then record it with atticus needs done ${id} <item>.`,
287
- change: id,
288
- person: true
289
- }
290
- ] : [];
291
- return [...find, ...stage, ...raise];
292
- }
293
- function stageSteps(c) {
294
- const id = c.id;
295
- const byState = stageOf(c.state);
296
- const at = draftingAt;
297
- const stage = c.openspecStage && at(byState) >= 0 && at(c.openspecStage) > at(byState) ? c.openspecStage : byState;
298
- if (c.fast && (stage === "feature" || stage === "architecture" || stage === "stories"))
299
- return c.fastDone ? [
300
- {
301
- step: "small-handoff",
302
- command: `atticus change handoff ${id} --approve`,
303
- where: METAREPO,
304
- why: `${id}'s one step is done and nothing blocks it: a person opens its pull request, and merging it approves the plan (ADR 0113).`,
305
- change: id,
306
- person: true
307
- }
308
- ] : [
309
- {
310
- step: "small",
311
- command: `atticus change small ${id}`,
312
- slash: `/atticus-small ${id}`,
313
- where: METAREPO,
314
- why: `${id} is a small change: your assistant places it, writes its target flows and words its stories in one step, and Atticus runs every stage's checks and the critic at its gate (ADR 0113). Then a person approves its one pull request.`,
315
- change: id
316
- }
317
- ];
318
- if ((stage === "feature" || stage === "architecture" || stage === "stories") && c.stagesDone?.includes(stage)) {
319
- const later = c.stagesDone.slice(c.stagesDone.indexOf(stage) + 1);
320
- const gate = c.state === "returned" ? "define" : c.state;
321
- return [
322
- {
323
- step: "handoff",
324
- command: `atticus change handoff ${id} --approve`,
325
- where: METAREPO,
326
- why: `${id}'s ${stage} stage is done${later.length ? ` (and ${later.join(" and ")} ran ahead)` : ""}, but the change is still in ${c.state}: a person raises its ${gate} hand-off PR, and merging it approves the ${gate} gate and moves it on (ADR 0073).`,
327
- change: id,
328
- person: true
329
- }
330
- ];
331
- }
332
- switch (stage) {
333
- case "feature":
334
- return [
335
- {
336
- step: "feature",
337
- command: `atticus change feature ${id}`,
338
- slash: `/atticus-feature ${id}`,
339
- where: METAREPO,
340
- why: `${id} is at the feature stage: your assistant places it on the estate's flows and features, and Atticus checks and criticises every draft until nothing blocks (ADR 0087).`,
341
- change: id
342
- }
343
- ];
344
- case "architecture":
345
- return [
346
- {
347
- step: "architecture",
348
- command: `atticus change architecture ${id}`,
349
- slash: `/atticus-architecture ${id}`,
350
- where: METAREPO,
351
- why: `${id} is at the architecture stage: your assistant writes its target flows, and Atticus checks and criticises every draft until nothing blocks (ADR 0087).`,
352
- change: id
353
- }
354
- ];
355
- case "stories":
356
- return [
357
- {
358
- step: "stories",
359
- command: `atticus plan stories ${id}`,
360
- slash: `/atticus-stories ${id}`,
361
- where: METAREPO,
362
- why: `${id} has an approved design: write its stories and tasks.`,
363
- change: id
364
- }
365
- ];
366
- case "tasks": {
367
- const t = c.tasks.find((x) => !x.done);
368
- if (!t)
369
- return [
370
- {
371
- step: "tasks",
372
- command: `atticus change status ${id}`,
373
- where: METAREPO,
374
- why: `Every task of ${id} is ticked; the status says what is left before release.`,
375
- change: id
376
- }
377
- ];
378
- return [
379
- {
380
- step: "task",
381
- command: `atticus task run ${id} ${t.id}`,
382
- slash: `/atticus-task ${id} ${t.id}`,
383
- where: METAREPO,
384
- why: `Task ${t.id} of ${id} in ${t.repo} is the first one not done. /atticus-task gives your assistant its context (atticus task context ${id} ${t.id}): the story, the criteria, the step with today's code and the files to change (ADR 0113).`,
385
- repo: t.repo,
386
- change: id
387
- }
388
- ];
389
- }
390
- case "release":
391
- return [
392
- {
393
- step: "release",
394
- command: `atticus change status ${id}`,
395
- slash: `/atticus-release ${id}`,
396
- where: METAREPO,
397
- why: `${id} is on its way to release: check what still blocks it.`,
398
- change: id
399
- }
400
- ];
401
- default:
402
- return [];
403
- }
404
- }
405
- function changeAnswer(id, ids) {
406
- if (!ids.length)
407
- return [];
408
- return [
409
- {
410
- step: "answer",
411
- command: "atticus questions list --state open",
412
- slash: "/atticus-answer",
413
- where: METAREPO,
414
- why: `${plural(ids.length, "question")} of ${id} ${ids.length === 1 ? "is" : "are"} waiting for a person: ${ids.join(", ")}. Its stage goes on once ${ids.length === 1 ? "it is" : "they are"} answered.`,
415
- person: true,
416
- change: id
417
- }
418
- ];
419
- }
420
- function nextSteps(s) {
421
- const out = [];
422
- const byChange = s.changeQuestions ?? {};
423
- const inHand = s.active ? s.changes.find((c) => c.id === s.active) : void 0;
424
- if (inHand && stageOf(inHand.state) !== "done")
425
- out.push(...changeAnswer(inHand.id, byChange[inHand.id] ?? []), ...changeSteps(inHand));
426
- const ofChanges = new Set(Object.values(byChange).flat());
427
- const repoQuestions = s.openQuestions.filter((id) => !ofChanges.has(id));
428
- if (s.repos.length === 0 && !inHand) {
429
- out.push({
430
- step: "discover",
431
- command: "atticus repos discover <folder>",
432
- why: "No repo is listed yet. Propose the manifest from a folder of clones or your Git host's organisation (--org)."
433
- });
434
- return out;
435
- }
436
- const notCloned = s.repos.filter((r) => !r.cloned);
437
- if (notCloned.length)
438
- out.push({
439
- step: "sync",
440
- command: "atticus workspace sync",
441
- why: `${plural(notCloned.length, "repo")} ${notCloned.length === 1 ? "isn't" : "aren't"} cloned yet: ${notCloned.map((r) => r.id).join(", ")}.`
442
- });
443
- const unread = s.repos.filter((r) => r.cloned && !r.facts && !r.scanned);
444
- for (const r of unread)
445
- out.push(r.read ? {
446
- step: "write",
447
- command: `atticus verify ${r.id} --write`,
448
- why: `${r.id} is read: atticus verify ${r.id} --write checks its facts against the code, then puts them in the catalog and renders its map.`,
449
- repo: r.id
450
- } : {
451
- step: "map",
452
- command: `atticus map ${r.id}`,
453
- slash: `/atticus-map ${r.id}`,
454
- where: METAREPO,
455
- // A-ledger: a repo read in parts says which part comes next, so nobody keeps the list.
456
- why: r.readPlan?.next ? `${r.id} is read in ${r.readPlan.total} parts (${r.readPlan.file}): ${partOfWords({ part: r.readPlan.next.part, total: r.readPlan.total })} is next, ${r.readPlan.done === 0 ? "none" : r.readPlan.done} ${r.readPlan.done === 1 ? "is" : "are"} read (${r.readPlan.next.paths.join(", ")}). Your assistant reads the part and writes its facts, each citing its line.` : `${r.id} isn't read yet: your assistant reads it and writes its facts, each citing its line, and atticus verify ${r.id} checks them.`,
457
- repo: r.id
458
- });
459
- const cloned = s.repos.filter((r) => r.cloned && !r.facts && r.scanned);
460
- for (const r of cloned.filter((x) => !x.settings))
461
- out.push({
462
- step: "survey",
463
- command: `atticus scan survey ${r.id}`,
464
- slash: `/atticus-survey ${r.id}`,
465
- where: METAREPO,
466
- why: `${r.id} has no scan settings yet: your assistant reads it and drafts them, and Atticus checks each entry against the code.`,
467
- repo: r.id
468
- });
469
- if (cloned.length && s.catalogRecords === 0)
470
- out.push({
471
- step: "scan",
472
- command: "atticus scan",
473
- why: "The catalog is empty: scan the repos into it."
474
- });
475
- const scanned = cloned;
476
- for (const r of scanned)
477
- if (r.verify === "none")
478
- out.push({
479
- step: "verify",
480
- command: `atticus scan verify ${r.id}`,
481
- slash: `/atticus-verify ${r.id}`,
482
- where: METAREPO,
483
- why: `The last scan of ${r.id} hasn't been verified: your assistant compares the code with what the scan recorded.`,
484
- repo: r.id
485
- });
486
- else if (r.verify === "accept")
487
- out.push({
488
- step: "accept",
489
- command: `atticus scan verify ${r.id} --accept`,
490
- why: `The verify of ${r.id} proposes scan settings entries. A person reads the proposal and accepts it.`,
491
- person: true,
492
- repo: r.id
493
- });
494
- const undescribed = s.repos.filter((r) => r.described === "none");
495
- if (undescribed.length)
496
- out.push({
497
- step: "describe",
498
- command: `atticus repo describe ${undescribed[0].id} --description "what it is"`,
499
- why: `${plural(undescribed.length, "repo")} ${undescribed.length === 1 ? "doesn't say" : "don't say"} what ${undescribed.length === 1 ? "it is" : "they are"}: ${undescribed.map((r) => r.id).join(", ")}. One line each is carried into every reading prompt, the join's questions and the views, so an opaque id can be read and placed.`,
500
- person: true,
501
- ...undescribed.length === 1 ? { repo: undescribed[0].id } : {}
502
- });
503
- const drafted = s.repos.filter((r) => r.described === "draft");
504
- if (drafted.length)
505
- out.push({
506
- step: "describe-accept",
507
- command: `atticus repo describe ${drafted[0].id} --accept`,
508
- why: `Your assistant drafted what ${drafted.length === 1 ? "this repo is" : "these repos are"} and nobody has confirmed ${drafted.length === 1 ? "it" : "them"}: ${drafted.map((r) => r.id).join(", ")}. Until a person does, each is shown as unconfirmed everywhere it is used.`,
509
- person: true,
510
- ...drafted.length === 1 ? { repo: drafted[0].id } : {}
511
- });
512
- if (repoQuestions.length)
513
- out.push({
514
- step: "answer",
515
- command: "atticus questions list --state open",
516
- slash: "/atticus-answer",
517
- where: METAREPO,
518
- why: `${plural(repoQuestions.length, "question")} ${repoQuestions.length === 1 ? "is" : "are"} waiting for a person: ${repoQuestions.join(", ")}. The steps that asked go on once they are answered.`,
519
- person: true
520
- });
521
- for (const r of scanned) {
522
- const slash = { slash: `/atticus-spec ${r.id}`, where: METAREPO, repo: r.id };
523
- if (r.flows === 0)
524
- out.push({
525
- step: "spec",
526
- command: `atticus spec draft ${r.id}`,
527
- ...slash,
528
- why: `${r.id} has no spec yet: your assistant writes its flows, one per trigger, each step cited.`
529
- });
530
- else if (!r.checked)
531
- out.push({
532
- step: "spec-check",
533
- command: `atticus spec check ${r.id}`,
534
- ...slash,
535
- why: `The spec of ${r.id} hasn't been checked since its last draft.`
536
- });
537
- else if (r.findings > 0)
538
- out.push({
539
- step: "spec",
540
- command: `atticus spec draft ${r.id}`,
541
- ...slash,
542
- why: `The last spec check of ${r.id} found ${plural(r.findings, "problem")}: draft the flagged flows again, then check.`
543
- });
544
- }
545
- for (const k of s.sources)
546
- if (!k.snapshot)
547
- out.push({
548
- step: "sync-source",
549
- command: `atticus sources sync --source ${k.id}`,
550
- slash: `/atticus-knowledge ${k.id}`,
551
- where: METAREPO,
552
- why: `The knowledge source ${k.id} has no snapshot yet: copy its pages, then read them into knowledge items.`,
553
- source: k.id
554
- });
555
- else if (!k.scanned)
556
- out.push({
557
- step: "knowledge",
558
- command: `atticus knowledge scan --source ${k.id}`,
559
- slash: `/atticus-knowledge ${k.id}`,
560
- where: METAREPO,
561
- why: `The newest snapshot of ${k.id} hasn't been read into knowledge items yet.`,
562
- source: k.id
563
- });
564
- else if ((k.age ?? 0) > STALE_DAYS)
565
- out.push({
566
- step: "sync-source",
567
- command: `atticus sources sync --source ${k.id}`,
568
- slash: `/atticus-knowledge ${k.id}`,
569
- where: METAREPO,
570
- why: `The newest snapshot of ${k.id} is ${k.age} days old: sync it again, and a rescan reads only the pages that changed (ADR 0101).`,
571
- source: k.id
572
- });
573
- if (s.orgpack?.draft)
574
- out.push({
575
- step: "accept-orgpack",
576
- command: `atticus orgpack accept ${s.orgpack.draft.platform}`,
577
- why: `A draft of the ${s.orgpack.draft.platform} profile has ${plural(s.orgpack.draft.proposals, "system")} from the wikis waiting: read it (proposals/orgpack/${s.orgpack.draft.platform}.md) and accept what is right, with --only or --verified-only.`,
578
- person: true
579
- });
580
- else if (s.orgpack?.missing)
581
- out.push({
582
- step: "orgpack-draft",
583
- command: "atticus orgpack draft",
584
- why: `The wikis name ${plural(s.orgpack.missing, "product or vendor", "products and vendors")} that no profile has yet: draft them into the org pack, with their aliases and owners.`
585
- });
586
- if (s.unverifiedNeeds)
587
- out.push({
588
- step: "verify-knowledge",
589
- command: "atticus knowledge list --unverified",
590
- why: `${plural(s.unverifiedNeeds, "open need")} of changes ${s.unverifiedNeeds === 1 ? "comes" : "come"} from knowledge items no person has verified: check each against its page (atticus knowledge verify, correct or reject).`,
591
- person: true
592
- });
593
- const inFlight = s.changes.filter((c) => stageOf(c.state) !== "done");
594
- for (const c of inFlight)
595
- if (c !== inHand)
596
- out.push(...changeAnswer(c.id, byChange[c.id] ?? []), ...changeSteps(c));
597
- if (!inFlight.length)
598
- out.push({
599
- step: "new-change",
600
- command: 'atticus change new "<title>" --type <type>',
601
- why: out.length ? "Then start a change: no change is in flight." : "Everything is onboarded, checked and answered, and no change is in flight. Start one."
602
- });
603
- return out;
604
- }
605
- async function nextCommand(root, o, io) {
606
- if (!isMetarepo(root)) {
607
- io.err(notMetarepo(root));
608
- return 2;
609
- }
610
- const state = await readNextState(root);
611
- const steps = nextSteps(state);
612
- const runtime = await loadOrgPack(orgPackDirOf(root)).then((op) => op.runtime).catch(() => void 0);
613
- const probes = (await readProbes(root)).results;
614
- const probed = runtime ? probedAssistant(runtime, probes) : [...probes].sort((a, b) => b.measured.localeCompare(a.measured))[0]?.assistant;
615
- const assistant = probed ?? runtime?.assistants.default ?? "copilot";
616
- if (o.json) {
617
- const runs = runtime ? whatRunsWhere(runtime, { probes }) : void 0;
618
- const modelMode = !!runtime && runtime.ai !== "off" && runtime.modes.allowed.includes("model") && !!runtime.adapters.model && runtime.adapters.model.type !== "mock";
619
- const classed = steps.map((x) => {
620
- const c = x.person ? void 0 : stepClassOfNextStep(x.step);
621
- return c ? { ...x, stepClass: c } : x;
622
- });
623
- const orgModels = stepModelsOf(runtime);
624
- io.out(JSON.stringify({
625
- next: classed[0],
626
- steps: classed,
627
- problems: state.problems,
628
- ...runs ? { runs } : {},
629
- modelMode,
630
- assistant,
631
- ...Object.keys(orgModels).length ? { orgModels } : {}
632
- }, null, 2));
633
- return 0;
634
- }
635
- for (const p of state.problems)
636
- io.err(`Couldn't read ${p.file}: ${p.message}`);
637
- const typeIn = ASSISTANT_FORMATS[assistant].typeIn;
638
- const slashLine = (x) => x.slash ? `In ${typeIn}${x.where && x.where !== METAREPO ? ` in ${x.where}` : ""}: ${x.slash}` : void 0;
639
- if (!o.all) {
640
- const n = steps[0];
641
- io.out(`Next: ${n.command}`);
642
- const sl = slashLine(n);
643
- if (sl)
644
- io.out(sl);
645
- io.out(`Why: ${n.why}`);
646
- if (steps.length > 1)
647
- io.out(`${plural(steps.length - 1, "more step")} after this one: atticus next --all`);
648
- return 0;
649
- }
650
- steps.forEach((x, i) => {
651
- io.out(`${i + 1}. ${x.command}`);
652
- const sl = slashLine(x);
653
- if (sl)
654
- io.out(` ${sl}`);
655
- io.out(` ${x.why}`);
656
- });
657
- return 0;
658
- }
659
-
660
- export {
661
- canMoveOn,
662
- readNextState,
663
- changeSteps,
664
- nextSteps,
665
- nextCommand
666
- };