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