@maycombhq/atticus 2.0.0-beta.22 → 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-LYBNHMVZ.js → chunk-27AJAKX7.js} +3 -3
- package/dist/{chunk-KXITGYLF.js → chunk-2QPJ4E4Z.js} +2 -2
- package/dist/{chunk-EIPTLPFC.js → chunk-2UMSHYCB.js} +24 -24
- package/dist/{chunk-6PPOWY5E.js → chunk-2WUTCPPJ.js} +6 -6
- package/dist/{chunk-VNU26RCO.js → chunk-2YSD6E6V.js} +33 -32
- package/dist/{chunk-P32RUW3B.js → chunk-3424TLIJ.js} +39 -7
- package/dist/{chunk-2MMCFP5C.js → chunk-3ASYYMOX.js} +8 -8
- package/dist/{chunk-PKBHS4AA.js → chunk-3EWKO457.js} +48 -17
- package/dist/{chunk-J3IOLXWM.js → chunk-3EX5HCZD.js} +5 -5
- package/dist/{chunk-BDKC6H5P.js → chunk-3MYBT62N.js} +5 -5
- package/dist/{chunk-ZFL7NY4F.js → chunk-3UHV76UD.js} +69 -41
- package/dist/{chunk-Q4K5WB2W.js → chunk-3ZA3AK2D.js} +10 -10
- package/dist/{chunk-O7FDLW7L.js → chunk-4ETO2FXE.js} +5 -5
- package/dist/{chunk-AFWUDXEM.js → chunk-4FLNCK6Q.js} +26 -11
- package/dist/{chunk-745DAZ4L.js → chunk-4GAB5ZOZ.js} +901 -332
- package/dist/{chunk-3RM4UK6W.js → chunk-4MYHETJ3.js} +18 -18
- package/dist/chunk-4R3TO4VL.js +94 -0
- package/dist/chunk-5MYE42AP.js +43 -0
- package/dist/chunk-5O7U67UA.js +57 -0
- package/dist/{chunk-Y2EQNWKV.js → chunk-5OXKCH4Z.js} +31 -31
- package/dist/{chunk-O45HFTFS.js → chunk-5VTIWEWP.js} +2 -2
- package/dist/{chunk-UNAGJYET.js → chunk-63NFFAGI.js} +12 -12
- package/dist/{chunk-6ZJ5A7AF.js → chunk-66AQ2JIU.js} +9 -9
- package/dist/chunk-6JVPBGQG.js +50 -0
- package/dist/{chunk-VY72R2XZ.js → chunk-6NCPLIIP.js} +124 -2
- package/dist/{chunk-D73UEXYW.js → chunk-6NN36LVK.js} +3 -3
- package/dist/{chunk-7FTTA3HD.js → chunk-6R5VHR3N.js} +5 -5
- package/dist/{chunk-CADWLE2T.js → chunk-6RQOINER.js} +4 -4
- package/dist/{chunk-WG5U3F5V.js → chunk-6RYB3EET.js} +12 -12
- package/dist/{chunk-RXPJMEOW.js → chunk-6SNTHK43.js} +10 -10
- package/dist/{chunk-ZFFYNRIO.js → chunk-6Y4FXOMI.js} +24 -22
- package/dist/{chunk-SQV37XO2.js → chunk-6ZFF7XSL.js} +6 -6
- package/dist/{chunk-JA5FI3QV.js → chunk-6ZSYLZ7O.js} +3 -3
- package/dist/{chunk-JENSEMXF.js → chunk-73CC73I4.js} +1 -1
- package/dist/{chunk-2F4CYZKJ.js → chunk-73GFVW2L.js} +5 -5
- package/dist/{chunk-M3NANSDZ.js → chunk-73V2OONC.js} +15 -15
- package/dist/{chunk-WKUJ3KPV.js → chunk-75OMRKY2.js} +4 -4
- package/dist/{chunk-7BR7IPOH.js → chunk-7IFTSAHP.js} +8 -8
- package/dist/{chunk-OWNCM4ZN.js → chunk-7K5OH45X.js} +136 -16
- package/dist/{chunk-VCTWPLAO.js → chunk-7NQAGYK4.js} +8 -8
- package/dist/{chunk-O4GXGGBX.js → chunk-7XWJ6ED2.js} +12 -12
- package/dist/{chunk-MFR5OPBD.js → chunk-7XYLNQFO.js} +5 -5
- package/dist/{chunk-GCWRWSU7.js → chunk-7YQBDE5W.js} +4 -4
- package/dist/{chunk-QKUJMING.js → chunk-A4JXVO5O.js} +5 -5
- package/dist/{chunk-LKOR5UET.js → chunk-AFBCNZRZ.js} +24 -24
- package/dist/{chunk-BXYMYEJ4.js → chunk-AGOLEMHK.js} +13 -14
- package/dist/{chunk-AVTBS4OW.js → chunk-AHFQHPFF.js} +22 -22
- package/dist/{chunk-NY2XSR5K.js → chunk-APDN6UOR.js} +116 -18
- package/dist/chunk-AQRUQNFB.js +322 -0
- package/dist/{chunk-5NMKONLP.js → chunk-AVMWESFZ.js} +3 -2
- package/dist/chunk-B4AEL3RF.js +1011 -0
- package/dist/{chunk-H7KM7LZE.js → chunk-BAY4K55I.js} +11 -11
- package/dist/{chunk-XD75VZIH.js → chunk-BFL4PO64.js} +7 -7
- package/dist/{chunk-34S2WGOB.js → chunk-BFMTGNAQ.js} +5 -3
- package/dist/{chunk-SLXZOMA6.js → chunk-BP33TBLI.js} +4 -4
- package/dist/{chunk-IFKEI4SA.js → chunk-BUUJ7N4O.js} +11 -11
- package/dist/{chunk-EGQRREQH.js → chunk-BYBU2EIB.js} +26 -15
- package/dist/{chunk-SFUP7TTO.js → chunk-C6ORPLCN.js} +4 -4
- package/dist/{chunk-IVBOQAGB.js → chunk-CA3DKO4D.js} +24 -2
- package/dist/{chunk-57TDNMI3.js → chunk-CFUDAW3R.js} +15 -15
- package/dist/{chunk-FFTRTL6R.js → chunk-CJEBRJBS.js} +4 -4
- package/dist/{chunk-EPCJQQWD.js → chunk-CKVBDVIW.js} +4 -4
- package/dist/{chunk-FPJPLKDW.js → chunk-CMB7FXHJ.js} +38 -16
- package/dist/{chunk-INQHESFB.js → chunk-CQ7RF4QN.js} +4 -4
- package/dist/{chunk-63YRMR6J.js → chunk-CS4BMJLL.js} +5 -5
- package/dist/{chunk-BPK5P77O.js → chunk-CT6NINGR.js} +3 -3
- package/dist/chunk-CXTG6AWM.js +40 -0
- package/dist/{chunk-CXJ6FUKN.js → chunk-CZ2ZS7AT.js} +9 -4
- package/dist/{chunk-S4PMJU6H.js → chunk-D6BVLTDV.js} +85 -29
- package/dist/{chunk-M32BLWDH.js → chunk-DCRYOMTM.js} +12 -12
- package/dist/{chunk-REWWDVQB.js → chunk-DHKDH464.js} +4 -4
- package/dist/{chunk-2LGRMVCA.js → chunk-DSHRA72L.js} +10 -10
- package/dist/{chunk-THDMSZ3R.js → chunk-E3PDCQRH.js} +2765 -665
- package/dist/chunk-EHXDB3SA.js +25 -0
- package/dist/{chunk-BTGPE6CR.js → chunk-EMVZIOOD.js} +7 -7
- package/dist/{chunk-DOBQKHIF.js → chunk-ENH6Z4TY.js} +28 -27
- package/dist/{chunk-LGFL54FP.js → chunk-EVTI22PQ.js} +6 -2
- package/dist/{chunk-7MJSQTL5.js → chunk-EXJZBL5N.js} +20 -20
- package/dist/{chunk-N3XIYPU3.js → chunk-FBCVC2GJ.js} +12 -12
- package/dist/{chunk-UWOJLHFT.js → chunk-FJVUHQPS.js} +34 -23
- package/dist/{chunk-7IGKHZ4Z.js → chunk-FL344WQD.js} +218 -211
- package/dist/{chunk-IH2XURVQ.js → chunk-FMJYKLDY.js} +5 -5
- package/dist/chunk-FMR2D3AZ.js +41 -0
- package/dist/{chunk-Q2TECDIT.js → chunk-FPBUTZI5.js} +2201 -326
- package/dist/{chunk-PJSJPMJI.js → chunk-FQVSLBTV.js} +3 -3
- package/dist/{chunk-NXJ5URP6.js → chunk-FRAEQVYN.js} +23 -22
- package/dist/{chunk-RLDGWLQ7.js → chunk-FRCOKUU4.js} +7 -7
- package/dist/{chunk-DCZWQLYT.js → chunk-FSN6JFXB.js} +18 -15
- package/dist/{chunk-W7VWI2YH.js → chunk-FTLYXMHA.js} +5 -5
- package/dist/{chunk-7GJS6DNX.js → chunk-FVYZ4Y52.js} +11 -3
- package/dist/{chunk-CQDGOPGH.js → chunk-G6EFXTUO.js} +2 -2
- package/dist/{chunk-JB5LINEM.js → chunk-G7VBMOZH.js} +3 -3
- package/dist/{chunk-7ASNL4Q4.js → chunk-GM4EFHUX.js} +15 -15
- package/dist/chunk-GOZLTLRY.js +232 -0
- package/dist/chunk-GPNMSX5H.js +36 -0
- package/dist/{chunk-BQ4SQQC6.js → chunk-GUGQSIQM.js} +9 -9
- package/dist/{chunk-E3ISYXO3.js → chunk-HJQVUOUL.js} +12 -12
- package/dist/{chunk-MFHL5URL.js → chunk-HMWJWYE2.js} +16 -16
- package/dist/{chunk-YYY3AZFE.js → chunk-HMZ2DRBC.js} +2 -2
- package/dist/{chunk-C3RY6KU6.js → chunk-HRS5O7VV.js} +500 -163
- package/dist/{chunk-AJQ72EBM.js → chunk-HUGQZQ2K.js} +6 -6
- package/dist/{chunk-AJYXNTNZ.js → chunk-ICBGVVRI.js} +10 -10
- package/dist/{chunk-J2JAKCIW.js → chunk-IKAW2KJU.js} +17 -17
- package/dist/{chunk-OUBGGKDU.js → chunk-IMZFOMVX.js} +1 -1
- package/dist/{chunk-LDLL7LB3.js → chunk-ISG547IS.js} +22 -22
- package/dist/{chunk-GZY6RUZ6.js → chunk-IYNCSYU4.js} +5 -2
- package/dist/{chunk-H5HBGNXU.js → chunk-J25YOUIZ.js} +4 -4
- package/dist/chunk-J2CDBSFP.js +69 -0
- package/dist/chunk-J2H7YG3K.js +34 -0
- package/dist/{chunk-SFSPGFCV.js → chunk-J32IPTVQ.js} +20 -20
- package/dist/{chunk-BEVTIBRH.js → chunk-J4CPHJUL.js} +5 -5
- package/dist/{chunk-F3P7N7SF.js → chunk-JFFKHIM6.js} +1 -1
- package/dist/{chunk-RUGXBPWI.js → chunk-JMEWJPF2.js} +8 -8
- package/dist/{chunk-WERM6KPJ.js → chunk-JSP73CDW.js} +9 -4
- package/dist/{chunk-66PPNOON.js → chunk-JXAKYP45.js} +26 -25
- package/dist/{chunk-7JITZFJC.js → chunk-K4OXYSGS.js} +4 -4
- package/dist/{chunk-EHA7RMZ3.js → chunk-K4RNVDR4.js} +4 -4
- package/dist/{chunk-R44CYFPV.js → chunk-K757G7AD.js} +12 -12
- package/dist/{chunk-FUJM6RTF.js → chunk-KDJ2YKAZ.js} +7 -7
- package/dist/{chunk-QAXW2N3B.js → chunk-KT6Q44CA.js} +28 -30
- package/dist/{chunk-EBL2R3YG.js → chunk-KTNOBTV5.js} +4 -4
- package/dist/chunk-KVVNAUIG.js +66 -0
- package/dist/{chunk-X5F3Q5LV.js → chunk-L3RCQWVQ.js} +21 -18
- package/dist/{chunk-7IOWA5D5.js → chunk-LHH5KG5A.js} +13 -3
- package/dist/{chunk-TNR75OXT.js → chunk-LM45GMMB.js} +11 -8
- package/dist/{chunk-FSMSFDLD.js → chunk-LO6Y7OTG.js} +4 -4
- package/dist/{chunk-WF7B67YE.js → chunk-LPDTDFKA.js} +10 -10
- package/dist/{chunk-SU74NDMQ.js → chunk-LSHSDC6S.js} +17 -17
- package/dist/{chunk-LJXMYKZJ.js → chunk-LZVHP7CT.js} +5 -5
- package/dist/{chunk-3NWDLGG6.js → chunk-M3EOFSPY.js} +26 -26
- package/dist/chunk-MBYYQHPM.js +31 -0
- package/dist/{chunk-KQGURXFU.js → chunk-MEJ63LDG.js} +32 -11
- package/dist/{chunk-FZOJFH7Q.js → chunk-MH2ZK67S.js} +11 -11
- package/dist/{chunk-R7NYHMUU.js → chunk-MLGWSBF4.js} +5108 -3895
- package/dist/{chunk-WJF2CS6M.js → chunk-MNIPPBCT.js} +5 -5
- package/dist/{chunk-XERYFDB5.js → chunk-MWF4PXQR.js} +32 -31
- package/dist/{chunk-BO4KX37X.js → chunk-N2YX6JMY.js} +18 -18
- package/dist/{chunk-GUX3PTYM.js → chunk-NAPHHWW2.js} +3 -3
- package/dist/{chunk-UUU4CLJG.js → chunk-NC755EKE.js} +5 -1
- package/dist/{chunk-WMTRHUI5.js → chunk-NCLZJCXA.js} +21 -21
- package/dist/chunk-NKJDO4UC.js +39 -0
- package/dist/chunk-NOYOFYAJ.js +59 -0
- package/dist/{chunk-ZQ3ON2VQ.js → chunk-NROSSWMS.js} +5 -5
- package/dist/{chunk-UWMJKX5U.js → chunk-OBUB3H72.js} +12 -12
- package/dist/{chunk-VW62D6QE.js → chunk-OCQWSFJD.js} +7 -7
- package/dist/{chunk-UPOY4YSQ.js → chunk-OK6JGLE7.js} +12 -12
- package/dist/{chunk-TYQBFTBR.js → chunk-OPWGPQ2N.js} +5 -5
- package/dist/{chunk-PPD7HTDP.js → chunk-OSYHGGL3.js} +18 -18
- package/dist/chunk-OXXZZ7HQ.js +50 -0
- package/dist/{chunk-5BD2KYLE.js → chunk-P22EPEBR.js} +16 -16
- package/dist/chunk-P4YUT7W7.js +45 -0
- package/dist/chunk-PCCLVIDP.js +217 -0
- package/dist/{chunk-CMDXGQTS.js → chunk-PFULMC2D.js} +21 -20
- package/dist/chunk-PGAMTKBI.js +16 -0
- package/dist/{chunk-6MUGR4LS.js → chunk-PNSSE7JM.js} +93 -18
- package/dist/{chunk-HYU5VLGA.js → chunk-POEMZECG.js} +1 -1
- package/dist/{chunk-UCROWG2D.js → chunk-POSDBRKV.js} +23 -23
- package/dist/{chunk-KDNTAPLX.js → chunk-POSZFDSQ.js} +3 -3
- package/dist/{chunk-3NFFJL5D.js → chunk-PQQKZPBU.js} +1 -1
- package/dist/{chunk-4EURQWQD.js → chunk-PRMUQUWN.js} +10 -10
- package/dist/{chunk-MO6P2JZH.js → chunk-PT4USJNN.js} +7 -7
- package/dist/{chunk-BTY3HZBO.js → chunk-PWXB5GBB.js} +16 -16
- package/dist/{chunk-S7FCV7S5.js → chunk-PXW2RZGQ.js} +1 -1
- package/dist/{chunk-NDCF4R6S.js → chunk-Q367UGYN.js} +3 -3
- package/dist/{chunk-IUPG3UKI.js → chunk-QAVRDONY.js} +187 -123
- package/dist/{chunk-E6ZIEVOI.js → chunk-QBMLBCQH.js} +12 -12
- package/dist/{chunk-VZALIKIF.js → chunk-QLQIFJP3.js} +12 -12
- package/dist/{chunk-EMRIQUND.js → chunk-QLWDIKO4.js} +82 -27
- package/dist/{chunk-PMUAJGLI.js → chunk-QVVGJVVX.js} +16 -16
- package/dist/{chunk-LNBQOP7D.js → chunk-QX4MAMUG.js} +21 -21
- package/dist/{chunk-X3WY6MN3.js → chunk-QZWRPQTI.js} +6 -6
- package/dist/{chunk-ISUAAMGS.js → chunk-RCG5IAAT.js} +18 -11
- package/dist/chunk-RGZFOKVO.js +106 -0
- package/dist/{chunk-O5PXQR67.js → chunk-RLZFL76D.js} +4 -4
- package/dist/{chunk-UF4AZOZB.js → chunk-RPQITJNX.js} +5 -5
- package/dist/{chunk-NR2UJWOC.js → chunk-RQQYEDAC.js} +8 -8
- package/dist/chunk-RQSLHZ7T.js +36 -0
- package/dist/{chunk-UPS2DGFC.js → chunk-RRQUQAXP.js} +1 -1
- package/dist/chunk-RYQ4JCFT.js +65 -0
- package/dist/{chunk-JLUCKAEL.js → chunk-S35DIFJH.js} +17 -17
- package/dist/{chunk-UGUP3ZM6.js → chunk-S5GSQPIN.js} +9 -9
- package/dist/chunk-S5XFO4GY.js +42 -0
- package/dist/chunk-S6LW2RRC.js +25 -0
- package/dist/{chunk-W62H2XSO.js → chunk-S6W3D5GS.js} +23 -23
- package/dist/{chunk-CX4RZ2KS.js → chunk-S7GUZ45I.js} +3 -3
- package/dist/{chunk-L27SV425.js → chunk-SCT4CEF7.js} +20 -20
- package/dist/{chunk-VTZMAJ3W.js → chunk-SK5RVP7X.js} +8 -8
- package/dist/{chunk-JAVI7JSP.js → chunk-SRTUETF5.js} +23 -22
- package/dist/{chunk-MZCGSXVR.js → chunk-SVGGMBJI.js} +13 -13
- package/dist/{chunk-SDKLKB6I.js → chunk-SWNKO4C4.js} +32 -25
- package/dist/chunk-SYP56T2D.js +65 -0
- package/dist/{chunk-5SJZW52K.js → chunk-T33TPFGI.js} +22 -22
- package/dist/{chunk-ZJXLNDH4.js → chunk-T3FNG2H2.js} +12 -12
- package/dist/{chunk-BIGDQDHD.js → chunk-T6MAWL5P.js} +4 -4
- package/dist/{chunk-RGERPOIV.js → chunk-T6MX7WXM.js} +14 -11
- package/dist/{chunk-QFWA2DPH.js → chunk-T7IIEDA3.js} +5 -5
- package/dist/{chunk-Z5IA3WDR.js → chunk-TABH4RBZ.js} +156 -79
- package/dist/{chunk-6ZGLAACW.js → chunk-TDSCKP3V.js} +2 -2
- package/dist/{chunk-G6X77UJZ.js → chunk-TMFMXQEN.js} +21 -21
- package/dist/{chunk-P2V7QW4D.js → chunk-TNCF26JK.js} +11 -11
- package/dist/{chunk-2GF7OLF3.js → chunk-TUM52SOE.js} +19 -15
- package/dist/{chunk-PBPBMP2B.js → chunk-TV56QLLV.js} +3 -3
- package/dist/{chunk-SYV5LHML.js → chunk-TVQSXWWV.js} +33 -33
- package/dist/{chunk-VBTP56CE.js → chunk-TXNSQ24G.js} +9 -8
- package/dist/{chunk-ZX57KSEQ.js → chunk-UALE35WK.js} +3 -3
- package/dist/{chunk-42SIDKEU.js → chunk-UJF7PIMP.js} +26 -26
- package/dist/{chunk-ONUPY3H6.js → chunk-UMCDODBX.js} +24 -24
- package/dist/{chunk-JJF6HALY.js → chunk-UTPIFH4I.js} +3 -3
- package/dist/{chunk-O7XLYEFA.js → chunk-V7PEHQZU.js} +54 -22
- package/dist/{chunk-XI2LCCYQ.js → chunk-VJFXQISZ.js} +8 -8
- package/dist/{chunk-AFZ3QA6W.js → chunk-VJZI6KFP.js} +22 -22
- package/dist/{chunk-Q6DFNVRJ.js → chunk-VK7WYA64.js} +12 -12
- package/dist/{chunk-6OJQOPUN.js → chunk-VKTXFFOZ.js} +2 -2
- package/dist/{chunk-MG4ZL5RW.js → chunk-VNIN7Q6Q.js} +16 -16
- package/dist/{chunk-ZQXZ2SES.js → chunk-VRO7KSGL.js} +21 -21
- package/dist/{chunk-OHVTTOPS.js → chunk-W3AZE7LN.js} +3 -3
- package/dist/chunk-W4TNCEI4.js +44 -0
- package/dist/{chunk-X4CXA2IL.js → chunk-W5VYJWOG.js} +22 -22
- package/dist/{chunk-7DOR27HL.js → chunk-WF3RCZNO.js} +6 -6
- package/dist/{chunk-LGBMTVNT.js → chunk-WOMQQWTO.js} +5 -5
- package/dist/{chunk-2Q56PQPS.js → chunk-WXVTYLVH.js} +2 -2
- package/dist/{chunk-UOR2DTHH.js → chunk-WYGTSZHR.js} +16 -14
- package/dist/{chunk-IDKCWSM5.js → chunk-WZYM5M4U.js} +388 -104
- package/dist/{chunk-U76OWS3Q.js → chunk-X5ZHDSLU.js} +23 -23
- package/dist/chunk-X7XVMYIL.js +5 -0
- package/dist/{chunk-2IIMFOPM.js → chunk-X7ZKNSK4.js} +18 -18
- package/dist/{chunk-UF4GLFBX.js → chunk-XAPXKFIS.js} +22 -22
- package/dist/{chunk-LQJPN536.js → chunk-XF6TSZW2.js} +2 -2
- package/dist/{chunk-T6DQR5TV.js → chunk-XFDDJQT7.js} +12 -12
- package/dist/{chunk-OHNCWBKF.js → chunk-XGO74QWR.js} +4 -4
- package/dist/chunk-XLZAAAPX.js +43 -0
- package/dist/{chunk-2RLKFUUL.js → chunk-XMUWPA56.js} +23 -23
- package/dist/{chunk-JRBFANFE.js → chunk-XNFM6WUK.js} +15 -15
- package/dist/{chunk-LO6P2VYG.js → chunk-XOMEQVLK.js} +2 -2
- package/dist/{chunk-YHCMZC2J.js → chunk-Y2H7X3VI.js} +7 -7
- package/dist/{chunk-ZZK56BLP.js → chunk-Y5IE6YKD.js} +4 -4
- package/dist/{chunk-KFAVQZSX.js → chunk-YD3KTW4H.js} +12 -12
- package/dist/{chunk-LZ7NUC62.js → chunk-YDCOZOER.js} +18 -18
- package/dist/{chunk-LFGTYX5U.js → chunk-YERAAEO4.js} +17 -17
- package/dist/{chunk-BHT7QK4G.js → chunk-YHMPDIRG.js} +4 -4
- package/dist/{chunk-ZJFRMSJT.js → chunk-Z2D4P3R3.js} +12 -12
- package/dist/{chunk-O66DM6DJ.js → chunk-Z3H27OMV.js} +4 -4
- package/dist/{chunk-7UOMVMFG.js → chunk-Z3RAFU5B.js} +15 -15
- package/dist/{chunk-FFLNS6VP.js → chunk-ZENHDXRZ.js} +21 -17
- package/dist/{chunk-23XVSEV5.js → chunk-ZFHFC74B.js} +18 -18
- package/dist/{chunk-53T4O55J.js → chunk-ZJGCGKA4.js} +3 -3
- package/dist/{chunk-WXFLMQSR.js → chunk-ZLQEQR3D.js} +5 -5
- package/dist/{chunk-HNM2YQT2.js → chunk-ZNHQGG7J.js} +7 -7
- package/dist/{chunk-2Q5EDGEO.js → chunk-ZNTTW4IT.js} +5 -5
- package/dist/{chunk-ZQ7SKESZ.js → chunk-ZR6J4QFQ.js} +7 -7
- package/dist/{chunk-PAQ2AS5E.js → chunk-ZSNOILL5.js} +1 -1
- package/dist/files.json +563 -511
- package/dist/packages/sdk/npm/index.js +1043 -43
- package/dist/packages/ui/dist/assets/{elk-api-CIf-0gz5.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 +2 -2
- package/package.json +4 -4
- package/dist/chunk-2SKB4O2E.js +0 -59
- package/dist/chunk-4U276ICE.js +0 -39
- package/dist/chunk-6H3Z5JHH.js +0 -64
- package/dist/chunk-C4R4JLHE.js +0 -40
- package/dist/chunk-CBGGOQWU.js +0 -82
- package/dist/chunk-DLOBCJL6.js +0 -48
- package/dist/chunk-GIW4ZVDB.js +0 -39
- package/dist/chunk-IP74LCOQ.js +0 -57
- package/dist/chunk-IPHHDDC6.js +0 -45
- package/dist/chunk-KJXD4PNL.js +0 -50
- package/dist/chunk-KN5BXMWN.js +0 -44
- package/dist/chunk-OMI6FPPN.js +0 -43
- package/dist/chunk-OTLDSZDV.js +0 -69
- package/dist/chunk-PSOFBQWB.js +0 -42
- package/dist/chunk-T4YPZIQN.js +0 -36
- package/dist/chunk-TUULXQRW.js +0 -420
- package/dist/chunk-WNKPRSGI.js +0 -36
- package/dist/packages/ui/dist/assets/index-CoK_Dl0D.js +0 -47
- package/dist/packages/ui/dist/assets/index-Dw20IRhQ.css +0 -1
- package/dist/{chunk-24XLDU72.js → chunk-PXMV2LLY.js} +3 -3
|
@@ -1273,16 +1273,24 @@ var MetarepoStamp = z4.strictObject({
|
|
|
1273
1273
|
});
|
|
1274
1274
|
|
|
1275
1275
|
// packages/core/dist/schema/question.js
|
|
1276
|
-
var QUESTION_SCHEMA_VERSION =
|
|
1276
|
+
var QUESTION_SCHEMA_VERSION = 6;
|
|
1277
1277
|
var QuestionSchemaVersion = z5.union([
|
|
1278
1278
|
z5.literal(1),
|
|
1279
1279
|
z5.literal(2),
|
|
1280
1280
|
z5.literal(3),
|
|
1281
1281
|
z5.literal(4),
|
|
1282
|
+
z5.literal(5),
|
|
1282
1283
|
z5.literal(QUESTION_SCHEMA_VERSION)
|
|
1283
1284
|
]).overwrite(() => QUESTION_SCHEMA_VERSION);
|
|
1284
1285
|
var QUESTION_ROLES = ["product", "architecture", "analysis", "delivery"];
|
|
1285
1286
|
var QuestionRole = z5.enum(QUESTION_ROLES);
|
|
1287
|
+
var QUESTION_ASKS = ["business", "design", "delivery"];
|
|
1288
|
+
var QuestionAsks = z5.enum(QUESTION_ASKS);
|
|
1289
|
+
var QuestionRouted = z5.strictObject({
|
|
1290
|
+
from: QuestionRole.optional(),
|
|
1291
|
+
by: z5.string().trim().min(1),
|
|
1292
|
+
at: IsoDateTime
|
|
1293
|
+
});
|
|
1286
1294
|
var AI_RUNTIMES = ["copilot-acp", "hand-off"];
|
|
1287
1295
|
var DECIDE_BARS = ["confident", "agrees-with-shapes", "person-rule"];
|
|
1288
1296
|
var DecideBar = z5.enum(DECIDE_BARS);
|
|
@@ -1413,6 +1421,10 @@ var Question = z5.strictObject({
|
|
|
1413
1421
|
* that raised it unless the question said otherwise. Left out where no stage owns it.
|
|
1414
1422
|
*/
|
|
1415
1423
|
role: QuestionRole.optional(),
|
|
1424
|
+
/** Version 6 (ADR 0191): what the question asks, as the AI tagged it when it raised it. */
|
|
1425
|
+
asks: QuestionAsks.optional(),
|
|
1426
|
+
/** Version 6 (ADR 0191): a person re-routed it; `role` is the role they gave it. */
|
|
1427
|
+
routed: QuestionRouted.optional(),
|
|
1416
1428
|
/**
|
|
1417
1429
|
* Version 5 (ninth UX walk): a critic knowledge gap a person routed with Ask: who it is
|
|
1418
1430
|
* asked of (a team or a person, the finding's owner unless they named another).
|
|
@@ -1491,6 +1503,12 @@ var QuestionDraft = z5.strictObject({
|
|
|
1491
1503
|
* design stage asking the product owner what the brief meant). Left out, the stage's role.
|
|
1492
1504
|
*/
|
|
1493
1505
|
role: QuestionRole.optional(),
|
|
1506
|
+
/**
|
|
1507
|
+
* ADR 0191: what the question asks (business, design or delivery). It decides the role that
|
|
1508
|
+
* owns it when `role` is left out, so a business question a design stage raises goes to the
|
|
1509
|
+
* product owner, not the architect.
|
|
1510
|
+
*/
|
|
1511
|
+
asks: QuestionAsks.optional(),
|
|
1494
1512
|
/**
|
|
1495
1513
|
* The step's own reading (ADR 0117): this question is one already on file (same), or asks
|
|
1496
1514
|
* part of one (narrower), with the words of the earlier question that say so. Atticus checks
|
|
@@ -2590,7 +2608,7 @@ var Approver = z11.strictObject({
|
|
|
2590
2608
|
groups: z11.array(z11.string().min(1)).default([]),
|
|
2591
2609
|
people: z11.array(z11.string().min(1)).default([])
|
|
2592
2610
|
}).refine((a) => a.roles.length + a.groups.length + a.people.length > 0, "name at least one role, group or person");
|
|
2593
|
-
var ROLES_SCHEMA_VERSION =
|
|
2611
|
+
var ROLES_SCHEMA_VERSION = 3;
|
|
2594
2612
|
var TeamPerson = z11.string().min(1).max(100).regex(/^@?[A-Za-z0-9][A-Za-z0-9._-]*$/, "a person's Git handle, such as pat or pat.doe");
|
|
2595
2613
|
var Team = z11.strictObject({
|
|
2596
2614
|
/** The id a repo manifest's `owner` names, e.g. team-ledger. */
|
|
@@ -2598,12 +2616,16 @@ var Team = z11.strictObject({
|
|
|
2598
2616
|
/** What people call it, e.g. Ledger team. */
|
|
2599
2617
|
name: z11.string().min(1).optional(),
|
|
2600
2618
|
/** The Git handles of the people on it. */
|
|
2601
|
-
people: z11.array(TeamPerson).default([])
|
|
2619
|
+
people: z11.array(TeamPerson).default([]),
|
|
2620
|
+
/** Version 3 (ADR 0191): who on the team takes each role on its repos' changes. */
|
|
2621
|
+
roles: z11.record(RecordId, z11.array(TeamPerson).min(1)).optional()
|
|
2602
2622
|
});
|
|
2603
2623
|
var Roles = z11.strictObject({
|
|
2604
|
-
schemaVersion: z11.union([V2, z11.literal(ROLES_SCHEMA_VERSION)]),
|
|
2624
|
+
schemaVersion: z11.union([V2, z11.literal(2), z11.literal(ROLES_SCHEMA_VERSION)]),
|
|
2605
2625
|
/** Version 2 (ADR 0140): the teams repos are owned by, and who is on each. */
|
|
2606
2626
|
teams: z11.array(Team).default([]),
|
|
2627
|
+
/** Version 3 (ADR 0191): the organisation's person for each role, when no team names one. */
|
|
2628
|
+
defaults: z11.record(RecordId, z11.array(TeamPerson).min(1)).optional(),
|
|
2607
2629
|
/** Extra roles; each is based on a built-in role's view. */
|
|
2608
2630
|
custom: z11.array(z11.strictObject({ id: RecordId, name: z11.string().min(1), basedOn: z11.enum(BUILT_IN_ROLES) })).default([]),
|
|
2609
2631
|
/** Optional roles this organisation uses. Core roles are always on. */
|
|
@@ -2620,12 +2642,31 @@ var Roles = z11.strictObject({
|
|
|
2620
2642
|
const known = /* @__PURE__ */ new Set([...BUILT_IN_ROLES, ...r.custom.map((c) => c.id)]);
|
|
2621
2643
|
unique(r.custom, (c) => c.id, ctx, "custom");
|
|
2622
2644
|
unique(r.teams, (t) => t.id, ctx, "teams");
|
|
2623
|
-
if (r.teams.length && r.schemaVersion <
|
|
2645
|
+
if (r.teams.length && r.schemaVersion < 2)
|
|
2624
2646
|
ctx.addIssue({
|
|
2625
2647
|
code: "custom",
|
|
2626
2648
|
path: ["teams"],
|
|
2627
2649
|
message: "teams needs schemaVersion 2: run atticus upgrade"
|
|
2628
2650
|
});
|
|
2651
|
+
const named = [
|
|
2652
|
+
...r.defaults ? [{ path: ["defaults"], roles: r.defaults }] : [],
|
|
2653
|
+
...r.teams.flatMap((t, i) => t.roles ? [{ path: ["teams", i, "roles"], roles: t.roles }] : [])
|
|
2654
|
+
];
|
|
2655
|
+
for (const n of named) {
|
|
2656
|
+
if (r.schemaVersion < ROLES_SCHEMA_VERSION)
|
|
2657
|
+
ctx.addIssue({
|
|
2658
|
+
code: "custom",
|
|
2659
|
+
path: n.path,
|
|
2660
|
+
message: "who takes each role needs schemaVersion 3: run atticus upgrade"
|
|
2661
|
+
});
|
|
2662
|
+
for (const role of Object.keys(n.roles))
|
|
2663
|
+
if (!known.has(role))
|
|
2664
|
+
ctx.addIssue({
|
|
2665
|
+
code: "custom",
|
|
2666
|
+
path: [...n.path, role],
|
|
2667
|
+
message: `unknown role ${role}`
|
|
2668
|
+
});
|
|
2669
|
+
}
|
|
2629
2670
|
r.custom.forEach((c, i) => {
|
|
2630
2671
|
if (BUILT_IN_ROLES.includes(c.id)) {
|
|
2631
2672
|
ctx.addIssue({
|
|
@@ -3072,8 +3113,9 @@ var RuntimeFields = z11.strictObject({
|
|
|
3072
3113
|
*/
|
|
3073
3114
|
modes: z11.strictObject({
|
|
3074
3115
|
allowed: z11.array(ConfiguredMode).min(1),
|
|
3075
|
-
|
|
3076
|
-
|
|
3116
|
+
/** Left out: the first mode `allowed` lists (review round 50). */
|
|
3117
|
+
default: ConfiguredMode.optional()
|
|
3118
|
+
}).refine((m) => m.default === void 0 || m.allowed.includes(m.default), "the default mode must be allowed").transform((m) => ({ allowed: m.allowed, default: m.default ?? m.allowed[0] })).default({ allowed: ["hand-off"], default: "hand-off" }),
|
|
3077
3119
|
models: z11.strictObject({
|
|
3078
3120
|
allowed: z11.array(z11.string().min(1)).default([]),
|
|
3079
3121
|
/** A recommended model per task type, shown in the assistant's picker hints. */
|
|
@@ -5407,7 +5449,7 @@ var DEFAULT_ROLES = Roles.parse({
|
|
|
5407
5449
|
]
|
|
5408
5450
|
});
|
|
5409
5451
|
var DEFAULT_RUNTIME = Runtime.parse({
|
|
5410
|
-
schemaVersion:
|
|
5452
|
+
schemaVersion: RUNTIME_SCHEMA_VERSION,
|
|
5411
5453
|
assistants: { allowed: ["copilot", "claude-code"], default: "copilot" }
|
|
5412
5454
|
});
|
|
5413
5455
|
var DEFAULT_SOURCES = Sources.parse({ schemaVersion: 1 });
|
|
@@ -5442,6 +5484,7 @@ import { parse as parse5 } from "yaml";
|
|
|
5442
5484
|
|
|
5443
5485
|
// packages/core/dist/api.js
|
|
5444
5486
|
import { z as z30 } from "zod";
|
|
5487
|
+
var NextStep = z30.object({ step: z30.literal("sync"), repos: z30.array(z30.string()) });
|
|
5445
5488
|
var Problem = z30.object({
|
|
5446
5489
|
type: z30.string(),
|
|
5447
5490
|
title: z30.string(),
|
|
@@ -5450,7 +5493,9 @@ var Problem = z30.object({
|
|
|
5450
5493
|
/** Field-level problems for 400s. */
|
|
5451
5494
|
errors: z30.array(z30.object({ path: z30.string(), message: z30.string() })).optional(),
|
|
5452
5495
|
/** For 403s on gated actions: who can act, e.g. "Needs an architect: R. Patel". */
|
|
5453
|
-
needs: z30.object({ role: z30.string(), names: z30.array(z30.string()) }).optional()
|
|
5496
|
+
needs: z30.object({ role: z30.string(), names: z30.array(z30.string()) }).optional(),
|
|
5497
|
+
/** 3.9.0: what the app offers next, e.g. Sync the repos with no base clone here. */
|
|
5498
|
+
next: NextStep.optional()
|
|
5454
5499
|
});
|
|
5455
5500
|
var Kind3 = z30.enum(RECORD_KINDS);
|
|
5456
5501
|
var CatalogRecord2 = z30.union(RECORD_KINDS.map((k) => RECORD_SCHEMAS[k]));
|
|
@@ -5677,9 +5722,11 @@ var Coverage = z30.object({
|
|
|
5677
5722
|
var JobState = z30.enum(["queued", "running", "done", "failed", "cancelled"]);
|
|
5678
5723
|
var Job = z30.object({
|
|
5679
5724
|
id: z30.string(),
|
|
5680
|
-
kind: z30.enum(["scan", "sync", "reconcile", "index", "intake", "step", "local"]),
|
|
5725
|
+
kind: z30.enum(["scan", "sync", "reconcile", "index", "intake", "step", "local", "work"]),
|
|
5681
5726
|
state: JobState,
|
|
5682
5727
|
progress: z30.object({ done: z30.number().int(), total: z30.number().int(), message: z30.string() }),
|
|
5728
|
+
/** 3.1.0 (ADR 0187): what the job is, in words, for the Console. */
|
|
5729
|
+
title: z30.string().optional(),
|
|
5683
5730
|
startedAt: z30.string(),
|
|
5684
5731
|
finishedAt: z30.string().optional(),
|
|
5685
5732
|
errors: z30.array(z30.string()),
|
|
@@ -5724,7 +5771,12 @@ var ChangeSummary = z30.object({
|
|
|
5724
5771
|
}),
|
|
5725
5772
|
updatedAt: z30.string(),
|
|
5726
5773
|
/** ADR 0113: it takes the fast path, one step from brief to tasks (its type is small, or its brief says so). */
|
|
5727
|
-
fastPath: z30.boolean().optional()
|
|
5774
|
+
fastPath: z30.boolean().optional(),
|
|
5775
|
+
/**
|
|
5776
|
+
* 3.9.0 (beta.23 review): the viewer's roles on the change, from its owners (any case, the
|
|
5777
|
+
* words people write for a role, roles.yaml's custom roles); empty when it names them nowhere.
|
|
5778
|
+
*/
|
|
5779
|
+
yourRoles: z30.array(QuestionRole).optional()
|
|
5728
5780
|
});
|
|
5729
5781
|
var ChangeDetail = ChangeSummary.extend({
|
|
5730
5782
|
/** 2.66.0 (review round 35): what a hand-off said, such as a branch it couldn't push. */
|
|
@@ -5737,7 +5789,13 @@ var ChangeDetail = ChangeSummary.extend({
|
|
|
5737
5789
|
handoff: z30.object({
|
|
5738
5790
|
phase: Phase,
|
|
5739
5791
|
pr: z30.string().optional(),
|
|
5740
|
-
state: z30.enum(["none", "open", "merged", "closed"])
|
|
5792
|
+
state: z30.enum(["none", "open", "merged", "closed"]),
|
|
5793
|
+
/**
|
|
5794
|
+
* 3.3.0 (app-only audit): the open hand-off's branch is here but not on the remote as it is
|
|
5795
|
+
* here (its push failed); POST .../handoff/push is Push again. Absent once it is there.
|
|
5796
|
+
*/
|
|
5797
|
+
unpushed: z30.boolean().optional(),
|
|
5798
|
+
branch: z30.string().optional()
|
|
5741
5799
|
}).optional()
|
|
5742
5800
|
});
|
|
5743
5801
|
var ArtifactContent = z30.object({
|
|
@@ -5793,7 +5851,16 @@ var Task = z30.object({
|
|
|
5793
5851
|
* dependencies, and the earlier tasks of its own repo in tasks.md order); `sameRepo` names the
|
|
5794
5852
|
* ones of its own repo. Absent when it waits for none, or once it is done.
|
|
5795
5853
|
*/
|
|
5796
|
-
waits: z30.object({ tasks: z30.array(z30.string()), sameRepo: z30.array(z30.string()) }).optional()
|
|
5854
|
+
waits: z30.object({ tasks: z30.array(z30.string()), sameRepo: z30.array(z30.string()) }).optional(),
|
|
5855
|
+
/**
|
|
5856
|
+
* 3.3.0 (app-only audit): the task branch has commits the change branch here hasn't, so its
|
|
5857
|
+
* code isn't in the change yet (its PR raised and merged takes it in). Absent when it has none.
|
|
5858
|
+
*/
|
|
5859
|
+
unmerged: z30.object({ commits: z30.number().int().positive(), branch: z30.string() }).optional(),
|
|
5860
|
+
/** 3.3.0: a person decided the task's work isn't needed in the change, and why. */
|
|
5861
|
+
decision: z30.object({ by: z30.string(), at: z30.string(), reason: z30.string() }).optional(),
|
|
5862
|
+
/** 3.3.0: whether the task's repo has a build command now (repos.manifest.yaml). */
|
|
5863
|
+
repoBuilds: z30.boolean().optional()
|
|
5797
5864
|
});
|
|
5798
5865
|
var RunView = RunSummary.extend({
|
|
5799
5866
|
/**
|
|
@@ -5834,10 +5901,17 @@ var RunListItem = RunView.extend({
|
|
|
5834
5901
|
toolCalls: z30.number().int().min(0).optional()
|
|
5835
5902
|
});
|
|
5836
5903
|
var StartStepRequest = z30.object({ args: z30.array(z30.string().min(1)).min(2) });
|
|
5904
|
+
var RunDoneRequest = z30.strictObject({ job: z30.boolean().optional() });
|
|
5837
5905
|
var RunDoneView = RunView.extend({
|
|
5838
5906
|
lines: z30.array(z30.string()).optional(),
|
|
5839
|
-
next: z30.string().optional()
|
|
5840
|
-
|
|
5907
|
+
next: z30.string().optional(),
|
|
5908
|
+
/** 3.5.0 (ADR 0188): the repo a read's last batch put on the map (verify --write). */
|
|
5909
|
+
applied: z30.string().optional()
|
|
5910
|
+
});
|
|
5911
|
+
var TaskContextView = z30.object({ markdown: z30.string() });
|
|
5912
|
+
var HistoryRecordingRequest = z30.object({ on: z30.boolean() });
|
|
5913
|
+
var HistoryRecordingView = z30.object({ on: z30.boolean() });
|
|
5914
|
+
var PruneRequest = z30.object({ change: z30.string().optional() });
|
|
5841
5915
|
var PreparedStepView = z30.object({
|
|
5842
5916
|
/** Left out when the step had nothing left to hand off: its lines say what it did. */
|
|
5843
5917
|
runId: z30.string().optional(),
|
|
@@ -6198,7 +6272,20 @@ var ChangeKnowledgeItem = z30.object({
|
|
|
6198
6272
|
tasks: z30.array(z30.string()).optional(),
|
|
6199
6273
|
/** 2.30.0 (ADR 0132): the source of the page it is read from, and how much its word counts. */
|
|
6200
6274
|
source: z30.string().optional(),
|
|
6201
|
-
authority: z30.enum(SOURCE_AUTHORITIES).optional()
|
|
6275
|
+
authority: z30.enum(SOURCE_AUTHORITIES).optional(),
|
|
6276
|
+
/**
|
|
6277
|
+
* 3.6.0 (ADR 0191): what it says, to open it in place: a section's own text with its page and
|
|
6278
|
+
* heading, or an item's quote with its page. Left out when the page can't be read.
|
|
6279
|
+
*/
|
|
6280
|
+
passage: z30.object({
|
|
6281
|
+
source: z30.string(),
|
|
6282
|
+
page: z30.string(),
|
|
6283
|
+
path: z30.string(),
|
|
6284
|
+
heading: z30.string(),
|
|
6285
|
+
line: z30.number().int(),
|
|
6286
|
+
text: z30.string(),
|
|
6287
|
+
quote: z30.string().optional()
|
|
6288
|
+
}).optional()
|
|
6202
6289
|
});
|
|
6203
6290
|
var KnowledgeConflictView = z30.object({
|
|
6204
6291
|
/** The items it is about and its pages, each sorted: the same key is never asked twice. */
|
|
@@ -6698,6 +6785,117 @@ var StageCommentResult = z30.object({
|
|
|
6698
6785
|
commit: z30.string(),
|
|
6699
6786
|
next: z30.object({ command: z30.string(), slash: z30.string() })
|
|
6700
6787
|
});
|
|
6788
|
+
var THREAD_STAGES = ["proposal", "feature", "architecture", "stories", "small"];
|
|
6789
|
+
var ThreadStage = z30.enum(THREAD_STAGES);
|
|
6790
|
+
var ThreadRunDetails = z30.object({
|
|
6791
|
+
agent: z30.string(),
|
|
6792
|
+
runtime: z30.string(),
|
|
6793
|
+
promptPath: z30.string(),
|
|
6794
|
+
output: z30.string().optional(),
|
|
6795
|
+
promptTokens: z30.number().int().min(0).optional(),
|
|
6796
|
+
model: z30.string().optional(),
|
|
6797
|
+
attempt: z30.number().int().min(1)
|
|
6798
|
+
});
|
|
6799
|
+
var ThreadItem = z30.discriminatedUnion("kind", [
|
|
6800
|
+
/** A prompt handed to the assistant (the stage's drafter, or the critic's lenses). */
|
|
6801
|
+
z30.object({
|
|
6802
|
+
kind: z30.literal("prompt"),
|
|
6803
|
+
at: z30.string(),
|
|
6804
|
+
runId: z30.string(),
|
|
6805
|
+
who: z30.enum(["drafter", "critic"]),
|
|
6806
|
+
prompt: z30.string(),
|
|
6807
|
+
state: RunState,
|
|
6808
|
+
details: ThreadRunDetails
|
|
6809
|
+
}),
|
|
6810
|
+
/** What came back, and what its checks said. */
|
|
6811
|
+
z30.object({
|
|
6812
|
+
kind: z30.literal("answer"),
|
|
6813
|
+
at: z30.string(),
|
|
6814
|
+
runId: z30.string(),
|
|
6815
|
+
who: z30.enum(["drafter", "critic"]),
|
|
6816
|
+
/** passed: the checks read it; failed: they found problems (listed); checking: not yet. */
|
|
6817
|
+
checked: z30.enum(["passed", "failed", "checking"]),
|
|
6818
|
+
/** Who checked it: the app when the file arrived (ADR 0189), or a person's Done. */
|
|
6819
|
+
by: z30.enum(["app", "person"]).optional(),
|
|
6820
|
+
summary: z30.array(z30.string()),
|
|
6821
|
+
problems: z30.array(z30.string())
|
|
6822
|
+
}),
|
|
6823
|
+
/** The files the stage wrote from an answer. */
|
|
6824
|
+
z30.object({ kind: z30.literal("changed"), at: z30.string(), files: z30.array(z30.string()) }),
|
|
6825
|
+
z30.object({
|
|
6826
|
+
kind: z30.literal("finding"),
|
|
6827
|
+
at: z30.string(),
|
|
6828
|
+
view: StageFindingView,
|
|
6829
|
+
/**
|
|
6830
|
+
* Whether the stage's assistant writes the file the finding cites: Fix then goes to it in the
|
|
6831
|
+
* next round; otherwise Fix opens the file at its line in the app's editor (`edit`).
|
|
6832
|
+
*/
|
|
6833
|
+
assistantWrites: z30.boolean(),
|
|
6834
|
+
edit: z30.object({
|
|
6835
|
+
artifact: z30.string(),
|
|
6836
|
+
file: z30.string().optional(),
|
|
6837
|
+
line: z30.number().int().optional()
|
|
6838
|
+
}).optional()
|
|
6839
|
+
}),
|
|
6840
|
+
z30.object({ kind: z30.literal("question"), at: z30.string(), question: Question }),
|
|
6841
|
+
z30.object({
|
|
6842
|
+
kind: z30.literal("reply"),
|
|
6843
|
+
at: z30.string(),
|
|
6844
|
+
text: z30.string(),
|
|
6845
|
+
by: z30.string(),
|
|
6846
|
+
/** A round of the stage has read it. */
|
|
6847
|
+
read: z30.boolean(),
|
|
6848
|
+
/** The finding it is about, for a comment on one. */
|
|
6849
|
+
about: z30.string().optional()
|
|
6850
|
+
}),
|
|
6851
|
+
z30.object({
|
|
6852
|
+
kind: z30.literal("correction"),
|
|
6853
|
+
at: z30.string(),
|
|
6854
|
+
text: z30.string(),
|
|
6855
|
+
label: z30.string(),
|
|
6856
|
+
by: z30.string(),
|
|
6857
|
+
state: z30.string()
|
|
6858
|
+
}),
|
|
6859
|
+
/** A question the assistant raised that couldn't be kept: its evidence was no line. */
|
|
6860
|
+
z30.object({
|
|
6861
|
+
kind: z30.literal("dropped"),
|
|
6862
|
+
at: z30.string(),
|
|
6863
|
+
key: z30.string(),
|
|
6864
|
+
question: z30.string(),
|
|
6865
|
+
evidence: z30.array(z30.string()),
|
|
6866
|
+
nearest: z30.string().optional()
|
|
6867
|
+
}),
|
|
6868
|
+
z30.object({ kind: z30.literal("note"), at: z30.string(), text: z30.string() })
|
|
6869
|
+
]);
|
|
6870
|
+
var StageThreadView = z30.object({
|
|
6871
|
+
change: z30.string(),
|
|
6872
|
+
stage: ThreadStage,
|
|
6873
|
+
/** Where the stage is, in one word, and the one sentence the thread opens with. */
|
|
6874
|
+
state: z30.enum(["not-started", "waiting", "questions", "drafting", "stopped", "done"]),
|
|
6875
|
+
headline: z30.string(),
|
|
6876
|
+
items: z30.array(ThreadItem),
|
|
6877
|
+
/** The run waiting for the assistant's answer, if one does. */
|
|
6878
|
+
waiting: z30.object({ runId: z30.string(), prompt: z30.string() }).optional(),
|
|
6879
|
+
/** The step's words, for POST /api/runs/handoff (the next round's prompt). */
|
|
6880
|
+
step: z30.array(z30.string()),
|
|
6881
|
+
/** Whether a reply is taken now, and if not, why. */
|
|
6882
|
+
reply: z30.object({ open: z30.boolean(), why: z30.string().optional() }),
|
|
6883
|
+
problems: z30.array(z30.object({ file: z30.string(), message: z30.string() }))
|
|
6884
|
+
});
|
|
6885
|
+
var StageThreadPost = z30.discriminatedUnion("kind", [
|
|
6886
|
+
z30.strictObject({ kind: z30.literal("reply"), text: z30.string().trim().min(1).max(4e3) }),
|
|
6887
|
+
z30.strictObject({
|
|
6888
|
+
kind: z30.literal("finding"),
|
|
6889
|
+
finding: z30.string().min(1),
|
|
6890
|
+
gate: z30.string().optional(),
|
|
6891
|
+
text: z30.string().trim().min(1).max(4e3)
|
|
6892
|
+
}),
|
|
6893
|
+
z30.strictObject({ kind: z30.literal("keep"), key: z30.string().regex(/^[0-9a-f]{12}$/) })
|
|
6894
|
+
]);
|
|
6895
|
+
var StageThreadPostResult = z30.object({
|
|
6896
|
+
files: z30.array(z30.string()),
|
|
6897
|
+
thread: StageThreadView
|
|
6898
|
+
});
|
|
6701
6899
|
var DRAFT_PAGES = ["feature", "architecture", "stories", "tasks"];
|
|
6702
6900
|
var DraftPage = z30.enum(DRAFT_PAGES);
|
|
6703
6901
|
var DraftProvenance = z30.object({
|
|
@@ -7135,14 +7333,25 @@ var Health = z30.object({
|
|
|
7135
7333
|
openspec: z30.string().optional(),
|
|
7136
7334
|
user: z30.string(),
|
|
7137
7335
|
/** 2.22.0: started with `atticus ui --full`, so the app offers every page, not only the six. */
|
|
7138
|
-
full: z30.boolean().optional()
|
|
7336
|
+
full: z30.boolean().optional(),
|
|
7337
|
+
/**
|
|
7338
|
+
* 3.5.0 (ADR 0190): whether the folder the app runs in is a metarepo (org-pack/, or
|
|
7339
|
+
* .atticus/org-pack/). When it isn't, the app offers Create the metarepo here.
|
|
7340
|
+
*/
|
|
7341
|
+
metarepo: z30.boolean().optional()
|
|
7139
7342
|
});
|
|
7140
7343
|
var ScanRequest = z30.strictObject({
|
|
7141
7344
|
repos: z30.array(RecordId).optional(),
|
|
7142
7345
|
/** Ignore the cache and rescan everything. */
|
|
7143
7346
|
full: z30.boolean().default(false),
|
|
7144
7347
|
/** Another branch, scanned beside the baseline into catalog/branches/<branch>/ (ADR 0123). */
|
|
7145
|
-
ref: GitRef.optional()
|
|
7348
|
+
ref: GitRef.optional(),
|
|
7349
|
+
/**
|
|
7350
|
+
* 3.3.0 (app-only audit): the app's scan is a cross-check with the built-in readers, and asks
|
|
7351
|
+
* which repo answers on an unknown host only for the repos the assistant has read (facts on
|
|
7352
|
+
* file); `askAll` asks for every repo, as the command line's `atticus scan` does.
|
|
7353
|
+
*/
|
|
7354
|
+
askAll: z30.boolean().optional()
|
|
7146
7355
|
});
|
|
7147
7356
|
var RepoBranchesView = z30.object({
|
|
7148
7357
|
id: RecordId,
|
|
@@ -7230,6 +7439,8 @@ var ChangeCockpit = z30.object({
|
|
|
7230
7439
|
*/
|
|
7231
7440
|
openQuestionsByRole: z30.partialRecord(QuestionRole, z30.number().int()).optional(),
|
|
7232
7441
|
yourRoles: z30.array(QuestionRole).optional(),
|
|
7442
|
+
/** 3.6.0 (ADR 0191): who the change waits on now, by role and name. */
|
|
7443
|
+
waitsOn: z30.lazy(() => WaitsOn).optional(),
|
|
7233
7444
|
repos: z30.array(z30.object({ id: z30.string(), branch: z30.string(), base: z30.string(), pr: z30.string().optional() }))
|
|
7234
7445
|
});
|
|
7235
7446
|
var NewChangeRequest = z30.strictObject({
|
|
@@ -7289,13 +7500,19 @@ var CONFIRMED_WRITES = [
|
|
|
7289
7500
|
"propose",
|
|
7290
7501
|
"step-run",
|
|
7291
7502
|
"ai-model",
|
|
7292
|
-
"ai-test"
|
|
7503
|
+
"ai-test",
|
|
7504
|
+
// 3.6.0 (ADR 0191): the plan's work items in a live work tracker, and an owner question sent.
|
|
7505
|
+
"work-items",
|
|
7506
|
+
"owner-ask"
|
|
7293
7507
|
];
|
|
7294
7508
|
var ConfirmedWrite = z30.enum(CONFIRMED_WRITES);
|
|
7295
7509
|
var Confirmation = z30.string().regex(/^[A-Za-z0-9_-]{16,128}$/, "a confirmation");
|
|
7296
7510
|
var ConfirmationRequest = z30.strictObject({
|
|
7297
7511
|
write: ConfirmedWrite,
|
|
7298
|
-
/**
|
|
7512
|
+
/**
|
|
7513
|
+
* What the write is for: the change, `<change>/<task>`, the step, the scope, the digest's
|
|
7514
|
+
* channel (3.1.0; `me` before) or `model`.
|
|
7515
|
+
*/
|
|
7299
7516
|
target: z30.string().min(1).max(400),
|
|
7300
7517
|
/** The page's own key, from its <meta name="atticus-page-key">; never printed. */
|
|
7301
7518
|
pageKey: z30.string().max(200).optional()
|
|
@@ -7559,7 +7776,21 @@ var SyncRequest = z30.strictObject({
|
|
|
7559
7776
|
confirmation: Confirmation.optional()
|
|
7560
7777
|
});
|
|
7561
7778
|
var ReleasePrsRequest = z30.strictObject({ confirmation: Confirmation.optional() });
|
|
7562
|
-
var TaskDoneRequest = z30.strictObject({
|
|
7779
|
+
var TaskDoneRequest = z30.strictObject({
|
|
7780
|
+
done: z30.boolean(),
|
|
7781
|
+
/**
|
|
7782
|
+
* 3.3.0 (app-only audit): why the task's work isn't needed, when its branch has commits the
|
|
7783
|
+
* change branch hasn't (else marking it done is 409); recorded with the person's name.
|
|
7784
|
+
*/
|
|
7785
|
+
reason: z30.string().max(2e3).optional()
|
|
7786
|
+
});
|
|
7787
|
+
var UpstreamRequest = z30.strictObject({
|
|
7788
|
+
upstream: z30.string().regex(/^[A-Za-z0-9][\w.-]*\/[\w./-]+$/, "a remote branch, such as origin/main")
|
|
7789
|
+
});
|
|
7790
|
+
var TaskBuildRequest = z30.strictObject({
|
|
7791
|
+
raise: z30.boolean().optional(),
|
|
7792
|
+
confirmation: Confirmation.optional()
|
|
7793
|
+
});
|
|
7563
7794
|
var CHANGE_OWNER_ROLES = [
|
|
7564
7795
|
"product-owner",
|
|
7565
7796
|
"architect",
|
|
@@ -7745,6 +7976,8 @@ var QuestionList = z30.object({
|
|
|
7745
7976
|
* the stage's that asked. Left out for a question no change's phase raised.
|
|
7746
7977
|
*/
|
|
7747
7978
|
role: QuestionRole.optional(),
|
|
7979
|
+
/** 3.6.0 (ADR 0191): what it asks (business, design, delivery), its own or its role's. */
|
|
7980
|
+
asks: QuestionAsks.optional(),
|
|
7748
7981
|
/**
|
|
7749
7982
|
* 2.36.0 (ADR 0144, Q5): the answer the assistant proposed, for an open question, when
|
|
7750
7983
|
* every line it cites says what it quotes. A person accepts it or answers otherwise.
|
|
@@ -8403,6 +8636,159 @@ var UpgradeView = z30.object({
|
|
|
8403
8636
|
stamp: z30.string().optional(),
|
|
8404
8637
|
pending: z30.array(z30.object({ id: z30.string(), summary: z30.string(), files: z30.array(z30.string()) }))
|
|
8405
8638
|
});
|
|
8639
|
+
var FileEditView = z30.object({
|
|
8640
|
+
path: z30.string(),
|
|
8641
|
+
changes: z30.array(z30.object({ was: z30.string().optional(), now: z30.string().optional() })),
|
|
8642
|
+
written: z30.boolean(),
|
|
8643
|
+
note: z30.string(),
|
|
8644
|
+
/** The raw editor's runtime.yaml edit moves where the model's key goes: the write needs `ai-model`. */
|
|
8645
|
+
confirm: z30.literal("ai-model").optional()
|
|
8646
|
+
});
|
|
8647
|
+
var SetupMetarepoView = z30.object({
|
|
8648
|
+
metarepo: z30.boolean(),
|
|
8649
|
+
root: z30.string(),
|
|
8650
|
+
folder: z30.string(),
|
|
8651
|
+
suggested: z30.object({ name: z30.string(), platform: z30.string() }),
|
|
8652
|
+
/** The folder's origin, when it is a clone (without credentials). */
|
|
8653
|
+
origin: z30.string().optional(),
|
|
8654
|
+
/** The metarepo's id on the Git host, read from origin. */
|
|
8655
|
+
metarepoId: z30.string().optional()
|
|
8656
|
+
});
|
|
8657
|
+
var CreateMetarepoRequest = z30.strictObject({
|
|
8658
|
+
name: RecordId,
|
|
8659
|
+
platform: RecordId,
|
|
8660
|
+
owner: z30.string().trim().min(1).max(100).optional(),
|
|
8661
|
+
/** The metarepo's repo on the Git host, written under runtime.yaml's manual Git host. */
|
|
8662
|
+
metarepo: z30.string().trim().min(1).max(300).optional()
|
|
8663
|
+
});
|
|
8664
|
+
var OpenFolderRequest = z30.strictObject({ path: z30.string().min(1).max(4096) });
|
|
8665
|
+
var OpenFolderView = z30.object({
|
|
8666
|
+
url: z30.string(),
|
|
8667
|
+
root: z30.string(),
|
|
8668
|
+
metarepo: z30.boolean()
|
|
8669
|
+
});
|
|
8670
|
+
var ReposPlanRequest = z30.strictObject({
|
|
8671
|
+
urls: z30.string().max(2e5).optional(),
|
|
8672
|
+
dir: z30.string().min(1).max(4096).optional(),
|
|
8673
|
+
platform: RecordId.optional()
|
|
8674
|
+
}).refine((b) => !!b.urls?.trim() !== !!b.dir, "send urls or dir, one of them");
|
|
8675
|
+
var PlannedRepoView = z30.object({
|
|
8676
|
+
id: z30.string(),
|
|
8677
|
+
url: z30.string(),
|
|
8678
|
+
/** What the person gave, when the URL was normalised from it. */
|
|
8679
|
+
given: z30.string().optional(),
|
|
8680
|
+
type: z30.string(),
|
|
8681
|
+
defaultBranch: z30.string().optional(),
|
|
8682
|
+
/** The id it would have had, and why it got another (`-2`). */
|
|
8683
|
+
renamed: z30.object({ from: z30.string(), why: z30.string() }).optional(),
|
|
8684
|
+
detected: z30.object({ signals: z30.array(z30.string()), confidence: z30.string() }).optional()
|
|
8685
|
+
});
|
|
8686
|
+
var ReposPlanView = z30.object({
|
|
8687
|
+
platform: z30.string().optional(),
|
|
8688
|
+
platforms: z30.array(z30.string()),
|
|
8689
|
+
repos: z30.array(PlannedRepoView),
|
|
8690
|
+
/** Given, but a manifest lists that clone URL already: left out. */
|
|
8691
|
+
listed: z30.array(z30.object({ url: z30.string(), id: z30.string() })),
|
|
8692
|
+
refused: z30.array(z30.object({ given: z30.string(), why: z30.string() })),
|
|
8693
|
+
/** Folders repos discover looked at that aren't repos. */
|
|
8694
|
+
skipped: z30.array(z30.object({ path: z30.string(), reason: z30.string() }))
|
|
8695
|
+
});
|
|
8696
|
+
var AddReposRequest = z30.strictObject({
|
|
8697
|
+
platform: RecordId.optional(),
|
|
8698
|
+
repos: z30.array(z30.strictObject({
|
|
8699
|
+
id: RecordId,
|
|
8700
|
+
url: z30.string().min(1).max(2e3),
|
|
8701
|
+
type: z30.string().max(100).optional(),
|
|
8702
|
+
owner: z30.string().max(100).optional(),
|
|
8703
|
+
defaultBranch: z30.string().max(250).optional(),
|
|
8704
|
+
/** What it is, in the person's words (ADR 0128); optional. */
|
|
8705
|
+
description: z30.string().max(300).optional()
|
|
8706
|
+
})).min(1).max(500),
|
|
8707
|
+
preview: z30.boolean().optional()
|
|
8708
|
+
});
|
|
8709
|
+
var RepoTypeDetectView = z30.object({
|
|
8710
|
+
repo: z30.string(),
|
|
8711
|
+
/** The org pack's repo types (atticus repo-type detect), or the files as repo add reads them. */
|
|
8712
|
+
from: z30.enum(["repo-types", "files"]),
|
|
8713
|
+
verdict: z30.string(),
|
|
8714
|
+
/** The type to write, when the match settles one. */
|
|
8715
|
+
type: z30.string().optional(),
|
|
8716
|
+
signals: z30.array(z30.string()).optional(),
|
|
8717
|
+
confidence: z30.string().optional(),
|
|
8718
|
+
matches: z30.array(z30.object({ type: z30.string(), name: z30.string(), score: z30.number() }))
|
|
8719
|
+
});
|
|
8720
|
+
var RepoTypeRequest = z30.strictObject({
|
|
8721
|
+
type: z30.string().trim().min(1).max(100),
|
|
8722
|
+
preview: z30.boolean().optional()
|
|
8723
|
+
});
|
|
8724
|
+
var AdapterSettingValue = z30.union([z30.string(), z30.number(), z30.boolean(), z30.array(z30.string())]);
|
|
8725
|
+
var AdaptersView = z30.object({
|
|
8726
|
+
/** runtime.yaml, metarepo-relative. */
|
|
8727
|
+
path: z30.string(),
|
|
8728
|
+
/** 3.9.0: runtime.yaml's sha256 as read, sent back as a write's `baseSha256`. */
|
|
8729
|
+
sha256: z30.string(),
|
|
8730
|
+
kinds: z30.array(z30.object({
|
|
8731
|
+
kind: z30.string(),
|
|
8732
|
+
types: z30.array(z30.string()),
|
|
8733
|
+
/** The settings Atticus reads for this kind; a plugin may read more. */
|
|
8734
|
+
fields: z30.array(z30.object({ name: z30.string(), list: z30.boolean() })),
|
|
8735
|
+
current: z30.object({ type: z30.string(), settings: z30.record(z30.string(), AdapterSettingValue) }).nullable()
|
|
8736
|
+
})),
|
|
8737
|
+
problems: z30.array(z30.string())
|
|
8738
|
+
});
|
|
8739
|
+
var AdapterRequest = z30.strictObject({
|
|
8740
|
+
/** The adapter, or null to take it out of runtime.yaml. */
|
|
8741
|
+
value: z30.strictObject({
|
|
8742
|
+
type: z30.string().min(1).max(100),
|
|
8743
|
+
settings: z30.record(z30.string().max(100), AdapterSettingValue).optional()
|
|
8744
|
+
}).nullable(),
|
|
8745
|
+
/**
|
|
8746
|
+
* 3.9.0: runtime.yaml's sha256 as the form read it (AdaptersView's), so a write onto a file
|
|
8747
|
+
* changed since is refused (409), never overwriting the newer edit.
|
|
8748
|
+
*/
|
|
8749
|
+
baseSha256: z30.string().regex(/^[0-9a-f]{64}$/).optional(),
|
|
8750
|
+
preview: z30.boolean().optional()
|
|
8751
|
+
});
|
|
8752
|
+
var OrgPackFileView = z30.object({
|
|
8753
|
+
path: z30.string(),
|
|
8754
|
+
/** Relative to the org pack folder. */
|
|
8755
|
+
rel: z30.string(),
|
|
8756
|
+
content: z30.string(),
|
|
8757
|
+
sha256: z30.string(),
|
|
8758
|
+
exists: z30.boolean(),
|
|
8759
|
+
/** Checked with its schema before it is written (a YAML file Atticus reads). */
|
|
8760
|
+
checked: z30.boolean()
|
|
8761
|
+
});
|
|
8762
|
+
var OrgPackFileRequest = z30.strictObject({
|
|
8763
|
+
path: z30.string().min(1).max(500),
|
|
8764
|
+
content: z30.string().max(2e6),
|
|
8765
|
+
/** The file's sha256 as opened (GET's), so an edit made meanwhile is refused. */
|
|
8766
|
+
baseSha256: z30.string().regex(/^[0-9a-f]{64}$/),
|
|
8767
|
+
preview: z30.boolean().optional(),
|
|
8768
|
+
confirmation: Confirmation.optional()
|
|
8769
|
+
});
|
|
8770
|
+
var PatternRequest = z30.strictObject({
|
|
8771
|
+
code: z30.string().min(1).max(60),
|
|
8772
|
+
name: z30.string().min(1).max(200),
|
|
8773
|
+
definition: z30.string().min(1).max(2e3),
|
|
8774
|
+
interaction: z30.string(),
|
|
8775
|
+
route: z30.string(),
|
|
8776
|
+
targetType: z30.string(),
|
|
8777
|
+
controls: z30.array(z30.string().max(200)).max(50).optional(),
|
|
8778
|
+
source: z30.string().min(1).max(500),
|
|
8779
|
+
version: z30.string().max(40).optional(),
|
|
8780
|
+
status: z30.string().optional(),
|
|
8781
|
+
preview: z30.boolean().optional()
|
|
8782
|
+
});
|
|
8783
|
+
var SourceRequest = z30.strictObject({
|
|
8784
|
+
type: z30.string().min(1).max(40),
|
|
8785
|
+
location: z30.string().min(1).max(2e3),
|
|
8786
|
+
id: RecordId.optional(),
|
|
8787
|
+
/** A git wiki's folder of pages, and its branch or tag. */
|
|
8788
|
+
path: z30.string().max(500).optional(),
|
|
8789
|
+
ref: z30.string().max(250).optional(),
|
|
8790
|
+
preview: z30.boolean().optional()
|
|
8791
|
+
});
|
|
8406
8792
|
var ConnectLinksRequest = z30.object({
|
|
8407
8793
|
from: z30.string().min(1),
|
|
8408
8794
|
to: LinkBox,
|
|
@@ -8471,7 +8857,7 @@ var FileChangeResult = z30.object({
|
|
|
8471
8857
|
commit: z30.string()
|
|
8472
8858
|
});
|
|
8473
8859
|
var SketchStrokeRequest = z30.object({
|
|
8474
|
-
stroke: z30.object({ kind: z30.enum(["call", "topic", "table", "remove", "retarget", "undo"]) }).passthrough(),
|
|
8860
|
+
stroke: z30.object({ kind: z30.enum(["call", "topic", "table", "remove", "retarget", "undo", "retire"]) }).passthrough(),
|
|
8475
8861
|
/** Say what it would write; write nothing. */
|
|
8476
8862
|
preview: z30.boolean().optional(),
|
|
8477
8863
|
/** The preview's fingerprint of the target flows: the write is refused (409) when they changed since. */
|
|
@@ -8653,8 +9039,102 @@ var CopilotRunCurrent = z30.object({
|
|
|
8653
9039
|
why: z30.string().optional(),
|
|
8654
9040
|
model: z30.string().optional()
|
|
8655
9041
|
});
|
|
9042
|
+
var ActivityKind = z30.enum([
|
|
9043
|
+
// The app's own jobs (ADR 0015), by their kind.
|
|
9044
|
+
"scan",
|
|
9045
|
+
"sync",
|
|
9046
|
+
"reconcile",
|
|
9047
|
+
"index",
|
|
9048
|
+
"intake",
|
|
9049
|
+
"step",
|
|
9050
|
+
"local",
|
|
9051
|
+
/** A request the page waits on, run as a job (the critic, a wiki's sync, a step run, Done). */
|
|
9052
|
+
"work",
|
|
9053
|
+
/** An unattended Copilot run the app started (ADR 0173): its lines are its tabs. */
|
|
9054
|
+
"copilot",
|
|
9055
|
+
/** A command run in a terminal, by an editor or by a Copilot session. */
|
|
9056
|
+
"command",
|
|
9057
|
+
/** A hand-off run waiting for the person's assistant, and its Done. */
|
|
9058
|
+
"handoff"
|
|
9059
|
+
]);
|
|
9060
|
+
var ActivityState = z30.enum([
|
|
9061
|
+
"running",
|
|
9062
|
+
"waiting",
|
|
9063
|
+
"done",
|
|
9064
|
+
"failed",
|
|
9065
|
+
"cancelled",
|
|
9066
|
+
/** Its process is gone and it never said how it ended (a terminal closed, a crash). */
|
|
9067
|
+
"ended"
|
|
9068
|
+
]);
|
|
9069
|
+
var ActivityWhere = z30.enum([
|
|
9070
|
+
"app",
|
|
9071
|
+
"terminal",
|
|
9072
|
+
"vscode",
|
|
9073
|
+
"intellij",
|
|
9074
|
+
"copilot",
|
|
9075
|
+
/** A hand-off run: the person's own assistant does the work. */
|
|
9076
|
+
"assistant"
|
|
9077
|
+
]);
|
|
9078
|
+
var ActivityEntry = z30.object({
|
|
9079
|
+
/** A job's id (job-N), a Copilot run's (copilot-run-...), term-<runId> for a command, a hand-off run's (run-...). */
|
|
9080
|
+
id: z30.string().min(1),
|
|
9081
|
+
kind: ActivityKind,
|
|
9082
|
+
/** What it is, in its own words: the command (`atticus map forge-ledger`), or the app's job. Left out for a job that gave none: the page names it by its kind. */
|
|
9083
|
+
title: z30.string().optional(),
|
|
9084
|
+
where: ActivityWhere,
|
|
9085
|
+
state: ActivityState,
|
|
9086
|
+
startedAt: z30.string(),
|
|
9087
|
+
finishedAt: z30.string().optional(),
|
|
9088
|
+
/** How far it is, when it says (a job's progress). */
|
|
9089
|
+
progress: z30.object({ done: z30.number().int(), total: z30.number().int(), message: z30.string() }).optional(),
|
|
9090
|
+
exitCode: z30.number().int().optional(),
|
|
9091
|
+
/** How many lines it has printed: the page asks for the ones it hasn't. */
|
|
9092
|
+
lines: z30.number().int().min(0),
|
|
9093
|
+
/** The first line still kept (older ones are dropped past the cap). */
|
|
9094
|
+
from: z30.number().int().min(0),
|
|
9095
|
+
/**
|
|
9096
|
+
* 3.9.0 (review of beta.23): which version of its lines these are, for an entry whose lines
|
|
9097
|
+
* are rewritten rather than only added to (a hand-off run's say what to do, then what Done
|
|
9098
|
+
* did). When it changes, the page reads its lines again from the start instead of adding.
|
|
9099
|
+
*/
|
|
9100
|
+
rev: z30.string().optional(),
|
|
9101
|
+
/** The route that stops it (POST), when the app can; a command stops in its terminal. */
|
|
9102
|
+
stop: z30.string().optional(),
|
|
9103
|
+
jobId: z30.string().optional(),
|
|
9104
|
+
copilotRunId: z30.string().optional(),
|
|
9105
|
+
/** A command's run id (its files in .atticus/logs/). */
|
|
9106
|
+
runId: z30.string().optional(),
|
|
9107
|
+
/** A hand-off run: its change, where its prompt is and where the answer goes. */
|
|
9108
|
+
handoff: z30.object({
|
|
9109
|
+
runId: z30.string(),
|
|
9110
|
+
change: z30.string(),
|
|
9111
|
+
agent: z30.string().optional(),
|
|
9112
|
+
promptPath: z30.string(),
|
|
9113
|
+
output: z30.string().optional()
|
|
9114
|
+
}).optional()
|
|
9115
|
+
});
|
|
9116
|
+
var ActivityList = z30.object({
|
|
9117
|
+
/** Newest first. */
|
|
9118
|
+
entries: z30.array(ActivityEntry),
|
|
9119
|
+
/** How many are running now. */
|
|
9120
|
+
running: z30.number().int().min(0)
|
|
9121
|
+
});
|
|
9122
|
+
var ActivityLines = z30.object({
|
|
9123
|
+
id: z30.string(),
|
|
9124
|
+
/** The number of the first of these lines. */
|
|
9125
|
+
from: z30.number().int().min(0),
|
|
9126
|
+
lines: z30.array(z30.string()),
|
|
9127
|
+
/** How many lines it has printed in all. */
|
|
9128
|
+
total: z30.number().int().min(0),
|
|
9129
|
+
state: ActivityState
|
|
9130
|
+
});
|
|
8656
9131
|
var LiveEvent = z30.discriminatedUnion("type", [
|
|
8657
|
-
z30.object({
|
|
9132
|
+
z30.object({
|
|
9133
|
+
type: z30.literal("file.changed"),
|
|
9134
|
+
path: z30.string(),
|
|
9135
|
+
/** 3.9.0: whether it can change the catalog, by the folders the org pack's layout names. */
|
|
9136
|
+
catalog: z30.boolean().optional()
|
|
9137
|
+
}),
|
|
8658
9138
|
z30.object({
|
|
8659
9139
|
type: z30.literal("job.progress"),
|
|
8660
9140
|
jobId: z30.string(),
|
|
@@ -8675,8 +9155,147 @@ var LiveEvent = z30.discriminatedUnion("type", [
|
|
|
8675
9155
|
/** The number of the first of these lines in the tab. */
|
|
8676
9156
|
at: z30.number().int().min(0),
|
|
8677
9157
|
lines: z30.array(z30.string())
|
|
9158
|
+
}),
|
|
9159
|
+
// ADR 0187: an activity appeared or changed, and new lines one printed.
|
|
9160
|
+
z30.object({ type: z30.literal("activity.changed"), entry: ActivityEntry }),
|
|
9161
|
+
z30.object({
|
|
9162
|
+
type: z30.literal("activity.lines"),
|
|
9163
|
+
id: z30.string(),
|
|
9164
|
+
/** The number of the first of these lines. */
|
|
9165
|
+
at: z30.number().int().min(0),
|
|
9166
|
+
lines: z30.array(z30.string())
|
|
8678
9167
|
})
|
|
8679
9168
|
]);
|
|
9169
|
+
var RouteQuestionRequest = z30.strictObject({ role: QuestionRole });
|
|
9170
|
+
var OwnerSuggestion = z30.object({
|
|
9171
|
+
role: z30.string(),
|
|
9172
|
+
people: z30.array(z30.string()),
|
|
9173
|
+
from: z30.union([
|
|
9174
|
+
z30.object({ team: z30.string(), name: z30.string().optional(), repos: z30.array(z30.string()) }),
|
|
9175
|
+
z30.object({ default: z30.literal(true) })
|
|
9176
|
+
])
|
|
9177
|
+
});
|
|
9178
|
+
var OwnerSuggestionList = z30.object({
|
|
9179
|
+
change: z30.string(),
|
|
9180
|
+
suggestions: z30.array(OwnerSuggestion),
|
|
9181
|
+
/** Why there are none, in words, when there are none. */
|
|
9182
|
+
note: z30.string().optional()
|
|
9183
|
+
});
|
|
9184
|
+
var WaitsOn = z30.object({
|
|
9185
|
+
/** The change.yaml owner key: product-owner, architect, business-analyst or team-lead. */
|
|
9186
|
+
role: z30.string(),
|
|
9187
|
+
people: z30.array(z30.string()),
|
|
9188
|
+
/** `handoff`: its hand-off PR waits on their review; `phase`: the phase's work is theirs. */
|
|
9189
|
+
because: z30.enum(["handoff", "phase"]),
|
|
9190
|
+
phase: z30.string()
|
|
9191
|
+
});
|
|
9192
|
+
var FindingView = z30.strictObject({ ...Finding.shape, asks: QuestionAsks });
|
|
9193
|
+
var WorkItemPlan = z30.object({
|
|
9194
|
+
change: z30.string(),
|
|
9195
|
+
/** none: runtime.yaml names no work tracker; manual: steps for a person; live: the tracker. */
|
|
9196
|
+
tracker: z30.enum(["none", "manual", "live"]),
|
|
9197
|
+
items: z30.array(z30.object({
|
|
9198
|
+
key: z30.string(),
|
|
9199
|
+
type: z30.string(),
|
|
9200
|
+
title: z30.string(),
|
|
9201
|
+
action: z30.enum(["create", "update", "unchanged", "orphaned"]),
|
|
9202
|
+
/** The tracker's id once known; `manual:<step>` until a person records it. */
|
|
9203
|
+
id: z30.string().optional(),
|
|
9204
|
+
/** The step to record it on, for a manual id. */
|
|
9205
|
+
step: z30.string().optional(),
|
|
9206
|
+
/** The story it is under, for a task; the story's own key for a story. */
|
|
9207
|
+
story: z30.string().optional()
|
|
9208
|
+
})),
|
|
9209
|
+
/** The command that does the same in a terminal. */
|
|
9210
|
+
command: z30.string()
|
|
9211
|
+
});
|
|
9212
|
+
var WorkItemSyncRequest = z30.strictObject({
|
|
9213
|
+
confirmation: Confirmation.optional(),
|
|
9214
|
+
/** 3.9.0: run the sync as a job (202 and its id; the job's result `answer` is the result). */
|
|
9215
|
+
job: z30.boolean().optional()
|
|
9216
|
+
});
|
|
9217
|
+
var WorkItemSyncResult = z30.object({
|
|
9218
|
+
plan: WorkItemPlan,
|
|
9219
|
+
lines: z30.array(z30.string()),
|
|
9220
|
+
done: z30.array(z30.object({ key: z30.string(), action: z30.string(), id: z30.string() })),
|
|
9221
|
+
failed: z30.array(z30.object({ key: z30.string(), reason: z30.string() }))
|
|
9222
|
+
});
|
|
9223
|
+
var SendOwnerAskRequest = z30.strictObject({ confirmation: Confirmation.optional() });
|
|
9224
|
+
var SentOwnerAsk = z30.object({
|
|
9225
|
+
/** sent: through the adapter; step: a manual step for a person; not-sent: why in `why`. */
|
|
9226
|
+
state: z30.enum(["sent", "step", "not-sent"]),
|
|
9227
|
+
to: z30.string(),
|
|
9228
|
+
id: z30.string().optional(),
|
|
9229
|
+
why: z30.string().optional()
|
|
9230
|
+
});
|
|
9231
|
+
var KnowledgePassageView = z30.object({
|
|
9232
|
+
source: z30.string(),
|
|
9233
|
+
page: z30.string(),
|
|
9234
|
+
/** The page's root-relative path (the snapshot copy, or the inputs/ file). */
|
|
9235
|
+
path: z30.string(),
|
|
9236
|
+
heading: z30.string(),
|
|
9237
|
+
line: z30.number().int(),
|
|
9238
|
+
text: z30.string()
|
|
9239
|
+
});
|
|
9240
|
+
var KnowledgeAnswerView = z30.object({
|
|
9241
|
+
items: z30.array(z30.object({
|
|
9242
|
+
id: z30.string(),
|
|
9243
|
+
kind: z30.string(),
|
|
9244
|
+
title: z30.string(),
|
|
9245
|
+
quote: z30.object({
|
|
9246
|
+
source: z30.string(),
|
|
9247
|
+
page: z30.string(),
|
|
9248
|
+
section: z30.string().optional(),
|
|
9249
|
+
text: z30.string()
|
|
9250
|
+
}).optional()
|
|
9251
|
+
})),
|
|
9252
|
+
passages: z30.array(KnowledgePassageView),
|
|
9253
|
+
/** The AI step that answers from the items in words, citing them (atticus knowledge ask). */
|
|
9254
|
+
command: z30.string()
|
|
9255
|
+
});
|
|
9256
|
+
var StoryShapeOp = z30.enum(["rename", "split", "merge", "add"]);
|
|
9257
|
+
var StoryShapeRequest = z30.strictObject({
|
|
9258
|
+
op: StoryShapeOp,
|
|
9259
|
+
/** rename, split: the story; merge: the stories, the first keeps its number. */
|
|
9260
|
+
story: z30.string().optional(),
|
|
9261
|
+
stories: z30.array(z30.string()).min(2).optional(),
|
|
9262
|
+
/** rename, merge, add: its name; split: the first part's. */
|
|
9263
|
+
name: z30.string().trim().min(1).max(200),
|
|
9264
|
+
/** What the story is for, in the person's words (add, a split's parts). */
|
|
9265
|
+
words: z30.string().trim().max(2e3).optional(),
|
|
9266
|
+
/** split: the other parts, each a story of its own. */
|
|
9267
|
+
parts: z30.array(z30.strictObject({
|
|
9268
|
+
name: z30.string().trim().min(1).max(200),
|
|
9269
|
+
words: z30.string().trim().max(2e3).optional()
|
|
9270
|
+
})).optional()
|
|
9271
|
+
});
|
|
9272
|
+
var StoryShapeEntryView = z30.object({
|
|
9273
|
+
id: z30.string(),
|
|
9274
|
+
op: StoryShapeOp,
|
|
9275
|
+
story: z30.string().optional(),
|
|
9276
|
+
stories: z30.array(z30.string()).optional(),
|
|
9277
|
+
name: z30.string(),
|
|
9278
|
+
words: z30.string().optional(),
|
|
9279
|
+
parts: z30.array(z30.object({ id: z30.string(), name: z30.string(), words: z30.string().optional() })).optional(),
|
|
9280
|
+
/** The story an added one is. */
|
|
9281
|
+
added: z30.string().optional(),
|
|
9282
|
+
by: z30.string(),
|
|
9283
|
+
at: z30.string(),
|
|
9284
|
+
/** waiting: no draft has read it yet; applied: the stories now have it, with the run. */
|
|
9285
|
+
state: z30.enum(["waiting", "applied"]),
|
|
9286
|
+
run: z30.string().optional()
|
|
9287
|
+
});
|
|
9288
|
+
var StoryShapeView = z30.object({
|
|
9289
|
+
change: z30.string(),
|
|
9290
|
+
file: z30.string(),
|
|
9291
|
+
entries: z30.array(StoryShapeEntryView),
|
|
9292
|
+
/** Each task's story as the last draft mapped it, by task id. */
|
|
9293
|
+
assigned: z30.record(z30.string(), z30.string()),
|
|
9294
|
+
/** What the coverage check found: a story with no task, a task with no story. */
|
|
9295
|
+
uncovered: z30.array(z30.string()),
|
|
9296
|
+
/** The step that maps the tasks to the stories again. */
|
|
9297
|
+
command: z30.string()
|
|
9298
|
+
});
|
|
8680
9299
|
var str3 = { type: "string" };
|
|
8681
9300
|
var ref = (name) => ({ $ref: `#/components/schemas/${name}` });
|
|
8682
9301
|
var arrayOf = (name) => ({ type: "array", items: ref(name) });
|
|
@@ -8720,7 +9339,7 @@ var OPS = {
|
|
|
8720
9339
|
"/api/me": {
|
|
8721
9340
|
get: {
|
|
8722
9341
|
id: "getMe",
|
|
8723
|
-
summary: "Who is using the app: the metarepo's Git user (handle, name, email, and a warning when the OS user stood in), what AI may do and the digest settings (ADR 0073)",
|
|
9342
|
+
summary: "Who is using the app: the metarepo's Git user (handle, name, email, and a warning when the OS user stood in), what AI may do and the digest settings (ADR 0073); 3.1.0: notify.to, where Send it to me posts",
|
|
8724
9343
|
tag: "system",
|
|
8725
9344
|
ok: {
|
|
8726
9345
|
status: 200,
|
|
@@ -8752,7 +9371,7 @@ var OPS = {
|
|
|
8752
9371
|
"/api/me/digest": {
|
|
8753
9372
|
post: {
|
|
8754
9373
|
id: "sendDigest",
|
|
8755
|
-
summary: "What waits on the person; with send, posted through the notify adapter as their approval. 3.0.0 (ADR 0186): send needs the person's confirmation (
|
|
9374
|
+
summary: "What waits on the person; with send, posted through the notify adapter as their approval. 3.0.0 (ADR 0186): send needs the person's confirmation, else 403. 3.1.0 (review round 50): its target is the channel it posts to (GET /api/me's notify.to, read again at the send), not `me`",
|
|
8756
9375
|
tag: "system",
|
|
8757
9376
|
body: SendDigestRequest,
|
|
8758
9377
|
ok: {
|
|
@@ -8900,8 +9519,11 @@ var OPS = {
|
|
|
8900
9519
|
"/api/setup": {
|
|
8901
9520
|
get: {
|
|
8902
9521
|
id: "getSetup",
|
|
8903
|
-
summary: "The setup checklist until the catalog is accepted, with a plain fix for each step",
|
|
9522
|
+
summary: "The setup checklist until the catalog is accepted, with a plain fix for each step; the machine step says `checking` while the machine's checks run",
|
|
8904
9523
|
tag: "system",
|
|
9524
|
+
params: [
|
|
9525
|
+
q("machine", { type: "string", enum: ["wait"] }, "Wait for the machine's checks instead of answering with the machine step checking")
|
|
9526
|
+
],
|
|
8905
9527
|
ok: {
|
|
8906
9528
|
status: 200,
|
|
8907
9529
|
schema: { type: "object", required: ["steps", "baselined"] },
|
|
@@ -9094,7 +9716,7 @@ var OPS = {
|
|
|
9094
9716
|
"/api/ask": {
|
|
9095
9717
|
get: {
|
|
9096
9718
|
id: "ask",
|
|
9097
|
-
summary: "Answer a plain-language question from the catalog; the query used is always returned",
|
|
9719
|
+
summary: "Answer a plain-language question from the catalog; the query used is always returned. 3.6.0 (ADR 0191): `knowledge` (KnowledgeAnswerView) says what the organisation's knowledge items, wiki snapshots and inputs/ files say to it, each cited",
|
|
9098
9720
|
tag: "catalog",
|
|
9099
9721
|
params: [q("q", str3, "The question, e.g. who calls ledger-api?")],
|
|
9100
9722
|
ok: {
|
|
@@ -9659,6 +10281,17 @@ var OPS = {
|
|
|
9659
10281
|
ok: { status: 200, schema: "OwnerQuestionList", description: "OK" }
|
|
9660
10282
|
}
|
|
9661
10283
|
},
|
|
10284
|
+
"/api/owner-questions/{id}/send": {
|
|
10285
|
+
post: {
|
|
10286
|
+
id: "sendOwnerQuestion",
|
|
10287
|
+
summary: "3.6.0 (ADR 0191): send the owner question through the notify adapter to its owner, on the person's `owner-ask` confirmation; with manual notifications it is a step for a person, and with none it says to copy the text",
|
|
10288
|
+
tag: "questions",
|
|
10289
|
+
params: [p("id")],
|
|
10290
|
+
body: SendOwnerAskRequest,
|
|
10291
|
+
ok: { status: 200, schema: "SentOwnerAsk", description: "Sent, or why not" },
|
|
10292
|
+
errors: [400, 403, 404]
|
|
10293
|
+
}
|
|
10294
|
+
},
|
|
9662
10295
|
"/api/owner-questions/{id}/answer": {
|
|
9663
10296
|
post: {
|
|
9664
10297
|
id: "answerOwnerQuestion",
|
|
@@ -9702,6 +10335,65 @@ var OPS = {
|
|
|
9702
10335
|
errors: [404]
|
|
9703
10336
|
}
|
|
9704
10337
|
},
|
|
10338
|
+
"/api/changes/{changeId}/owners/suggested": {
|
|
10339
|
+
get: {
|
|
10340
|
+
id: "suggestChangeOwners",
|
|
10341
|
+
summary: "3.6.0 (ADR 0191): who roles.yaml suggests for each role the change doesn't name yet: the team owning its repos, else the organisation's default; a person accepts one with PUT .../owners",
|
|
10342
|
+
tag: "changes",
|
|
10343
|
+
params: [p("changeId")],
|
|
10344
|
+
ok: { status: 200, schema: "OwnerSuggestionList", description: "OK" },
|
|
10345
|
+
errors: [400, 404]
|
|
10346
|
+
}
|
|
10347
|
+
},
|
|
10348
|
+
"/api/changes/{changeId}/work-items": {
|
|
10349
|
+
get: {
|
|
10350
|
+
id: "planWorkItems",
|
|
10351
|
+
summary: "3.6.0 (ADR 0191): the feature, stories and tasks the plan puts in the work tracker, and what sync.yaml remembers of each (atticus ado sync --dry-run)",
|
|
10352
|
+
tag: "changes",
|
|
10353
|
+
params: [p("changeId")],
|
|
10354
|
+
ok: { status: 200, schema: "WorkItemPlan", description: "OK" },
|
|
10355
|
+
errors: [400, 404, 422]
|
|
10356
|
+
},
|
|
10357
|
+
post: {
|
|
10358
|
+
id: "syncWorkItems",
|
|
10359
|
+
summary: "3.6.0 (ADR 0191): put them in the work tracker as the signed-in person: with a manual tracker a step each (the fields to copy, the id to record); with a live one, on the person's `work-items` confirmation. sync.yaml keeps each id, so a later sync updates rather than duplicates. 3.9.0: with `job: true`, 202 JobAccepted at once; the job's result `answer` is the result, or `problem` when refused",
|
|
10360
|
+
tag: "changes",
|
|
10361
|
+
params: [p("changeId")],
|
|
10362
|
+
body: WorkItemSyncRequest,
|
|
10363
|
+
ok: { status: 200, schema: "WorkItemSyncResult", description: "Synced" },
|
|
10364
|
+
alsoOk: { status: 202, schema: "JobAccepted", description: "Started as a job (`job: true`)" },
|
|
10365
|
+
errors: [400, 403, 404, 422]
|
|
10366
|
+
}
|
|
10367
|
+
},
|
|
10368
|
+
"/api/changes/{changeId}/stories/shape": {
|
|
10369
|
+
get: {
|
|
10370
|
+
id: "getStoryShape",
|
|
10371
|
+
summary: "3.6.0 (ADR 0191): the business analyst's renames, splits, merges and added stories, each task's story as the last draft mapped it, and what is uncovered",
|
|
10372
|
+
tag: "changes",
|
|
10373
|
+
params: [p("changeId")],
|
|
10374
|
+
ok: { status: 200, schema: "StoryShapeView", description: "OK" },
|
|
10375
|
+
errors: [400, 404]
|
|
10376
|
+
},
|
|
10377
|
+
post: {
|
|
10378
|
+
id: "shapeStories",
|
|
10379
|
+
summary: "3.6.0 (ADR 0191): rename, split, merge or add a story in plain words, as the signed-in person; a rename and a merge keep the number, a split's new part and an added story take the next free one. The next draft of the stories maps the tasks to them",
|
|
10380
|
+
tag: "changes",
|
|
10381
|
+
params: [p("changeId")],
|
|
10382
|
+
body: StoryShapeRequest,
|
|
10383
|
+
ok: { status: 201, schema: "StoryShapeView", description: "Recorded" },
|
|
10384
|
+
errors: [400, 404, 422]
|
|
10385
|
+
}
|
|
10386
|
+
},
|
|
10387
|
+
"/api/changes/{changeId}/stories/shape/{entryId}/remove": {
|
|
10388
|
+
post: {
|
|
10389
|
+
id: "removeStoryShape",
|
|
10390
|
+
summary: "3.6.0 (ADR 0191): take back a shaping no draft has read yet; one a draft applied stays, and a later one changes it",
|
|
10391
|
+
tag: "changes",
|
|
10392
|
+
params: [p("changeId"), p("entryId")],
|
|
10393
|
+
ok: { status: 200, schema: "StoryShapeView", description: "Removed" },
|
|
10394
|
+
errors: [400, 404, 422]
|
|
10395
|
+
}
|
|
10396
|
+
},
|
|
9705
10397
|
"/api/changes/{changeId}/owners": {
|
|
9706
10398
|
put: {
|
|
9707
10399
|
id: "setChangeOwners",
|
|
@@ -9814,7 +10506,7 @@ var OPS = {
|
|
|
9814
10506
|
"/api/changes/{changeId}/tasks/run-ready": {
|
|
9815
10507
|
post: {
|
|
9816
10508
|
id: "runReadyTasks",
|
|
9817
|
-
summary: "2.79.0 (ADR 0181 part 4): Run all ready tasks, one task run each in order as one job, stopping on the first that needs a person; the click is the approval for draft, never the pr level",
|
|
10509
|
+
summary: "2.79.0 (ADR 0181 part 4): Run all ready tasks, one task run each in order as one job, stopping on the first that needs a person; the click is the approval for draft, never the pr level. 3.1.0: in model mode 403 unless runtime.yaml sends the key where the person last confirmed",
|
|
9818
10510
|
tag: "changes",
|
|
9819
10511
|
params: [p("changeId")],
|
|
9820
10512
|
body: RunReadyRequest,
|
|
@@ -9830,18 +10522,50 @@ var OPS = {
|
|
|
9830
10522
|
params: [p("changeId"), p("taskId")],
|
|
9831
10523
|
body: TaskDoneRequest,
|
|
9832
10524
|
ok: { status: 200, schema: "Task", description: "The task as tasks.md now says it" },
|
|
9833
|
-
errors: [400, 403, 404]
|
|
10525
|
+
errors: [400, 403, 404, 409]
|
|
10526
|
+
}
|
|
10527
|
+
},
|
|
10528
|
+
"/api/propose/upstream": {
|
|
10529
|
+
post: {
|
|
10530
|
+
id: "setUpstream",
|
|
10531
|
+
summary: "3.3.0 (app-only audit): set the upstream of the branch checked out to the same branch on a remote, a local setting (nothing is sent), as a local job; refused (the job's result says why) for any other branch",
|
|
10532
|
+
tag: "workspace",
|
|
10533
|
+
body: UpstreamRequest,
|
|
10534
|
+
ok: { status: 202, schema: "JobAccepted", description: "Job started" },
|
|
10535
|
+
errors: [400, 409]
|
|
10536
|
+
}
|
|
10537
|
+
},
|
|
10538
|
+
"/api/changes/{changeId}/handoff/push": {
|
|
10539
|
+
post: {
|
|
10540
|
+
id: "pushHandoff",
|
|
10541
|
+
summary: "3.3.0 (app-only audit): Push again: push the open hand-off's branch, kept here when its push failed, by name and never forced; needs the person's confirmation (`handoff`, the change), else 403; 422 with git's words when the push fails",
|
|
10542
|
+
tag: "changes",
|
|
10543
|
+
params: [p("changeId")],
|
|
10544
|
+
body: ConfirmedRequest,
|
|
10545
|
+
ok: { status: 200, schema: "ChangeDetail", description: "The change, its branch pushed" },
|
|
10546
|
+
errors: [403, 404, 422]
|
|
10547
|
+
}
|
|
10548
|
+
},
|
|
10549
|
+
"/api/changes/{changeId}/tasks/{taskId}/build": {
|
|
10550
|
+
post: {
|
|
10551
|
+
id: "buildTask",
|
|
10552
|
+
summary: "3.3.0 (app-only audit): Build and raise PR on a task drafted but not built (UNVERIFIED) or taken over by a person: build it with its repo's build command as it is now, and with `raise` push its branch and open its PR (needs the person's confirmation, `task-pr`, `<change>/<task>`, else 403)",
|
|
10553
|
+
tag: "changes",
|
|
10554
|
+
params: [p("changeId"), p("taskId")],
|
|
10555
|
+
body: TaskBuildRequest,
|
|
10556
|
+
ok: { status: 200, schema: "Task", description: "The task, built (201 with its PR raised)" },
|
|
10557
|
+
errors: [400, 403, 404, 409, 422]
|
|
9834
10558
|
}
|
|
9835
10559
|
},
|
|
9836
10560
|
"/api/changes/{changeId}/workspace": {
|
|
9837
10561
|
post: {
|
|
9838
10562
|
id: "openWorkspace",
|
|
9839
|
-
summary: "Create the change's worktrees and editor workspaces",
|
|
10563
|
+
summary: "Create the change's worktrees and editor workspaces; 3.1.0: 409 while a sync of one of its repos' base clones runs elsewhere",
|
|
9840
10564
|
tag: "changes",
|
|
9841
10565
|
params: [p("changeId")],
|
|
9842
10566
|
body: OpenWorkspaceRequest,
|
|
9843
10567
|
ok: { status: 200, schema: "ChangeRepos", description: "OK" },
|
|
9844
|
-
errors: [400, 404]
|
|
10568
|
+
errors: [400, 404, 409]
|
|
9845
10569
|
}
|
|
9846
10570
|
},
|
|
9847
10571
|
"/api/changes/{changeId}/handoff": {
|
|
@@ -9866,12 +10590,12 @@ var OPS = {
|
|
|
9866
10590
|
},
|
|
9867
10591
|
post: {
|
|
9868
10592
|
id: "startRun",
|
|
9869
|
-
summary: "Prepare an AI run (hand-off by default)",
|
|
10593
|
+
summary: "Prepare an AI run (hand-off by default); 3.1.0: in model mode 403 unless runtime.yaml sends the key where the person last confirmed (ADR 0186 addendum), and 409 while a sync of the task's repo runs elsewhere",
|
|
9870
10594
|
tag: "ai",
|
|
9871
10595
|
params: [p("changeId")],
|
|
9872
10596
|
body: StartRunRequest,
|
|
9873
10597
|
ok: { status: 201, schema: "RunView", description: "Prepared" },
|
|
9874
|
-
errors: [400, 403, 404, 422]
|
|
10598
|
+
errors: [400, 403, 404, 409, 422]
|
|
9875
10599
|
}
|
|
9876
10600
|
},
|
|
9877
10601
|
"/api/changes/{changeId}/critic": {
|
|
@@ -9909,7 +10633,7 @@ var OPS = {
|
|
|
9909
10633
|
},
|
|
9910
10634
|
post: {
|
|
9911
10635
|
id: "startStep",
|
|
9912
|
-
summary: "Start an AI step on the server with runtime.yaml's model, as a job (ADR 0106); 409 when no model is configured, or (2.68.0) while another AI step runs",
|
|
10636
|
+
summary: "Start an AI step on the server with runtime.yaml's model, as a job (ADR 0106); 409 when no model is configured, or (2.68.0) while another AI step runs; 3.1.0: 403 unless runtime.yaml sends the key where the person last confirmed (ADR 0186 addendum)",
|
|
9913
10637
|
tag: "ai",
|
|
9914
10638
|
body: StartStepRequest,
|
|
9915
10639
|
ok: {
|
|
@@ -9917,7 +10641,7 @@ var OPS = {
|
|
|
9917
10641
|
schema: { type: "object", required: ["jobId", "model"] },
|
|
9918
10642
|
description: "Started"
|
|
9919
10643
|
},
|
|
9920
|
-
errors: [400, 409]
|
|
10644
|
+
errors: [400, 403, 409]
|
|
9921
10645
|
}
|
|
9922
10646
|
},
|
|
9923
10647
|
"/api/runs/handoff": {
|
|
@@ -9997,6 +10721,67 @@ var OPS = {
|
|
|
9997
10721
|
errors: [409]
|
|
9998
10722
|
}
|
|
9999
10723
|
},
|
|
10724
|
+
"/api/facts/apply-all": {
|
|
10725
|
+
post: {
|
|
10726
|
+
id: "applyAllFacts",
|
|
10727
|
+
summary: "3.5.0 (ADR 0188): run atticus verify --all --write as a local job, as Apply after a declaration or an owner set on the canvas",
|
|
10728
|
+
tag: "workspace",
|
|
10729
|
+
ok: {
|
|
10730
|
+
status: 202,
|
|
10731
|
+
schema: "JobAccepted",
|
|
10732
|
+
description: "Started: its job's result is the code and the lines verify printed"
|
|
10733
|
+
},
|
|
10734
|
+
errors: [409]
|
|
10735
|
+
}
|
|
10736
|
+
},
|
|
10737
|
+
"/api/estate/join": {
|
|
10738
|
+
post: {
|
|
10739
|
+
id: "joinEstate",
|
|
10740
|
+
summary: "3.5.0 (ADR 0188): run atticus estate join as a local job: each flow's calls to other repos followed into the flows they reach",
|
|
10741
|
+
tag: "workspace",
|
|
10742
|
+
ok: { status: 202, schema: "JobAccepted", description: "Job started" },
|
|
10743
|
+
errors: [409]
|
|
10744
|
+
}
|
|
10745
|
+
},
|
|
10746
|
+
"/api/knowledge/sources/sync": {
|
|
10747
|
+
post: {
|
|
10748
|
+
id: "syncAllKnowledgeSources",
|
|
10749
|
+
summary: "3.5.0 (ADR 0188): run atticus sources sync as a local job: every wiki in sources.yaml read into a dated snapshot",
|
|
10750
|
+
tag: "knowledge",
|
|
10751
|
+
ok: { status: 202, schema: "JobAccepted", description: "Job started" },
|
|
10752
|
+
errors: [409]
|
|
10753
|
+
}
|
|
10754
|
+
},
|
|
10755
|
+
"/api/workspace/prune": {
|
|
10756
|
+
post: {
|
|
10757
|
+
id: "pruneWorktrees",
|
|
10758
|
+
summary: "3.5.0 (ADR 0188): run atticus workspace prune as a local job, for one change or every change with worktrees; a worktree with uncommitted work is kept",
|
|
10759
|
+
tag: "workspace",
|
|
10760
|
+
body: PruneRequest,
|
|
10761
|
+
ok: { status: 202, schema: "JobAccepted", description: "Job started" },
|
|
10762
|
+
errors: [400, 409]
|
|
10763
|
+
}
|
|
10764
|
+
},
|
|
10765
|
+
"/api/changes/{changeId}/tasks/{taskId}/context": {
|
|
10766
|
+
get: {
|
|
10767
|
+
id: "getTaskContext",
|
|
10768
|
+
summary: "3.5.0 (ADR 0188): a task's context as atticus task context --markdown prints it, for the person to copy into their assistant",
|
|
10769
|
+
tag: "changes",
|
|
10770
|
+
params: [p("changeId"), p("taskId")],
|
|
10771
|
+
ok: { status: 200, schema: "TaskContextView", description: "OK" },
|
|
10772
|
+
errors: [400]
|
|
10773
|
+
}
|
|
10774
|
+
},
|
|
10775
|
+
"/api/history/recording": {
|
|
10776
|
+
put: {
|
|
10777
|
+
id: "setPromptHistoryRecording",
|
|
10778
|
+
summary: "3.5.0 (ADR 0188): atticus history on|off, this machine's recording (.atticus/me.yaml); the org pack's history.record: false still holds",
|
|
10779
|
+
tag: "ai",
|
|
10780
|
+
body: HistoryRecordingRequest,
|
|
10781
|
+
ok: { status: 200, schema: "HistoryRecordingView", description: "OK" },
|
|
10782
|
+
errors: [400]
|
|
10783
|
+
}
|
|
10784
|
+
},
|
|
10000
10785
|
"/api/upgrade": {
|
|
10001
10786
|
get: {
|
|
10002
10787
|
id: "getUpgrade",
|
|
@@ -10012,6 +10797,131 @@ var OPS = {
|
|
|
10012
10797
|
errors: [409]
|
|
10013
10798
|
}
|
|
10014
10799
|
},
|
|
10800
|
+
// ADR 0190: settings and setup in the app, "Edit, then Propose".
|
|
10801
|
+
"/api/setup/metarepo": {
|
|
10802
|
+
get: {
|
|
10803
|
+
id: "getSetupMetarepo",
|
|
10804
|
+
summary: "3.5.0 (ADR 0190): whether the folder the app runs in is a metarepo, and what Create the metarepo here would use (a name and platform from the folder's name, the metarepo's id on the Git host from its origin)",
|
|
10805
|
+
tag: "run",
|
|
10806
|
+
ok: { status: 200, schema: "SetupMetarepoView", description: "OK" }
|
|
10807
|
+
},
|
|
10808
|
+
post: {
|
|
10809
|
+
id: "createMetarepo",
|
|
10810
|
+
summary: "Create the metarepo in this folder with atticus init's own code (name, platform, owner; the Git host manual, with the metarepo's id when given or read from origin), brought up to date as init does. Local files only: nothing is pushed. 409 when it is a metarepo already",
|
|
10811
|
+
tag: "run",
|
|
10812
|
+
body: CreateMetarepoRequest,
|
|
10813
|
+
ok: { status: 201, schema: "LinesView", description: "Created" },
|
|
10814
|
+
errors: [400, 409, 422]
|
|
10815
|
+
}
|
|
10816
|
+
},
|
|
10817
|
+
"/api/setup/open": {
|
|
10818
|
+
post: {
|
|
10819
|
+
id: "openFolder",
|
|
10820
|
+
summary: "Open another folder: start the app for that folder (a full path on this machine) on a free port, for the same person, and give its address; a folder that isn't a metarepo offers Create there",
|
|
10821
|
+
tag: "run",
|
|
10822
|
+
body: OpenFolderRequest,
|
|
10823
|
+
ok: { status: 200, schema: "OpenFolderView", description: "OK" },
|
|
10824
|
+
errors: [400, 404]
|
|
10825
|
+
}
|
|
10826
|
+
},
|
|
10827
|
+
"/api/setup/repos/plan": {
|
|
10828
|
+
post: {
|
|
10829
|
+
id: "planRepos",
|
|
10830
|
+
summary: "The repos pasted clone URLs (one a line, up to 500) or a folder of clones (repos discover's own code, a dry run) would add: each normalised URL and the id repo add gives it, a clone URL a manifest lists already left out, a taken id given -2, and a folder's type from its files. A folder with several platforms and none given reads nothing and answers the platforms to choose from (`platforms`, no `platform`). Writes nothing",
|
|
10831
|
+
tag: "run",
|
|
10832
|
+
body: ReposPlanRequest,
|
|
10833
|
+
ok: { status: 200, schema: "ReposPlanView", description: "OK" },
|
|
10834
|
+
errors: [400, 404, 409, 422]
|
|
10835
|
+
}
|
|
10836
|
+
},
|
|
10837
|
+
"/api/setup/repos": {
|
|
10838
|
+
post: {
|
|
10839
|
+
id: "addRepos",
|
|
10840
|
+
summary: "Add the repos the person ticked to the platform's repos.manifest.yaml (core's addManifestRepos: comments, order and line endings kept, the manifest checked first); a description is the person's own (verified). With preview: the lines it would change, nothing written. Propose for review then opens the PR",
|
|
10841
|
+
tag: "run",
|
|
10842
|
+
body: AddReposRequest,
|
|
10843
|
+
ok: { status: 200, schema: "FileEditView", description: "OK" },
|
|
10844
|
+
errors: [400, 404, 409, 422]
|
|
10845
|
+
}
|
|
10846
|
+
},
|
|
10847
|
+
"/api/repos/{repoId}/type/detect": {
|
|
10848
|
+
post: {
|
|
10849
|
+
id: "detectRepoType",
|
|
10850
|
+
summary: "Detect a cloned repo's type: the org pack's repo types (atticus repo-type detect) when it has any, else the type repo add reads from the files. Writes nothing; 409 when the repo isn't cloned here",
|
|
10851
|
+
tag: "run",
|
|
10852
|
+
params: [p("repoId")],
|
|
10853
|
+
ok: { status: 200, schema: "RepoTypeDetectView", description: "OK" },
|
|
10854
|
+
errors: [404, 409, 422]
|
|
10855
|
+
}
|
|
10856
|
+
},
|
|
10857
|
+
"/api/repos/{repoId}/type": {
|
|
10858
|
+
put: {
|
|
10859
|
+
id: "setRepoType",
|
|
10860
|
+
summary: "Set a repo's type in the manifest that lists it (comments and order kept); with preview, the line it would change",
|
|
10861
|
+
tag: "run",
|
|
10862
|
+
params: [p("repoId")],
|
|
10863
|
+
body: RepoTypeRequest,
|
|
10864
|
+
ok: { status: 200, schema: "FileEditView", description: "OK" },
|
|
10865
|
+
errors: [400, 404, 422]
|
|
10866
|
+
}
|
|
10867
|
+
},
|
|
10868
|
+
"/api/setup/adapters": {
|
|
10869
|
+
get: {
|
|
10870
|
+
id: "getAdapters",
|
|
10871
|
+
summary: "The outside systems runtime.yaml names (Git host, work tracker, service desk, notifications, wiki, design tool): the types its schema takes for each, the settings Atticus reads, what is set now, and runtime.yaml's sha256 to send back with a write. No secret is ever in them",
|
|
10872
|
+
tag: "run",
|
|
10873
|
+
ok: { status: 200, schema: "AdaptersView", description: "OK" }
|
|
10874
|
+
}
|
|
10875
|
+
},
|
|
10876
|
+
"/api/setup/adapters/{kind}": {
|
|
10877
|
+
put: {
|
|
10878
|
+
id: "setAdapter",
|
|
10879
|
+
summary: "Set (or with null, take out) one outside system in runtime.yaml, checked with the Runtime schema first (a type it doesn't take, a setting named like a secret or a value that looks like a token is refused, 422); edited in place, so comments, value types and line endings are kept. With `baseSha256` (GET's `sha256`), a runtime.yaml changed since is 409. With preview, the lines it would change. A token is kept in the credential store from the terminal (atticus secret set), never through this API",
|
|
10880
|
+
tag: "run",
|
|
10881
|
+
params: [p("kind")],
|
|
10882
|
+
body: AdapterRequest,
|
|
10883
|
+
ok: { status: 200, schema: "FileEditView", description: "OK" },
|
|
10884
|
+
errors: [400, 404, 409, 422]
|
|
10885
|
+
}
|
|
10886
|
+
},
|
|
10887
|
+
"/api/setup/file": {
|
|
10888
|
+
get: {
|
|
10889
|
+
id: "getOrgPackFile",
|
|
10890
|
+
summary: "One org-pack file for the raw editor (a path inside org-pack/ ending .yaml, .md, .txt or .json): its text, its sha256 and whether it is checked with a schema",
|
|
10891
|
+
tag: "run",
|
|
10892
|
+
params: [q("path")],
|
|
10893
|
+
ok: { status: 200, schema: "OrgPackFileView", description: "OK" },
|
|
10894
|
+
errors: [404, 422]
|
|
10895
|
+
},
|
|
10896
|
+
put: {
|
|
10897
|
+
id: "putOrgPackFile",
|
|
10898
|
+
summary: "The raw editor's write, the fallback for a setting with no form: the file's whole text, checked with its schema (YAML that doesn't parse, or doesn't read, is 422), onto the file as opened (another edit meanwhile is 409). With preview, the lines it would change. A runtime.yaml edit that moves where the model's key goes needs the person's confirmation (`ai-model`, `model`), else 403; a value that looks like a key is refused",
|
|
10899
|
+
tag: "run",
|
|
10900
|
+
body: OrgPackFileRequest,
|
|
10901
|
+
ok: { status: 200, schema: "FileEditView", description: "OK" },
|
|
10902
|
+
errors: [400, 403, 409, 422]
|
|
10903
|
+
}
|
|
10904
|
+
},
|
|
10905
|
+
"/api/setup/patterns": {
|
|
10906
|
+
post: {
|
|
10907
|
+
id: "addPattern",
|
|
10908
|
+
summary: "A new integration pattern from the app's form, as its own org-pack/patterns/<code>.yaml, checked with the pattern schema; a code that is there already is 409 (edit it in the raw editor). With preview, the lines it would write",
|
|
10909
|
+
tag: "run",
|
|
10910
|
+
body: PatternRequest,
|
|
10911
|
+
ok: { status: 200, schema: "FileEditView", description: "OK" },
|
|
10912
|
+
errors: [400, 409, 422]
|
|
10913
|
+
}
|
|
10914
|
+
},
|
|
10915
|
+
"/api/setup/sources": {
|
|
10916
|
+
post: {
|
|
10917
|
+
id: "addSource",
|
|
10918
|
+
summary: "A wiki added to sources.yaml with atticus sources add's own code (its checks, its id, the path written relative to the org pack); comments and line endings kept. A location with a user name or password in it is refused (422: Git's credential helper or an environment variable gives them), and so is a sources.yaml changed meanwhile (409). With preview, the entry it would add",
|
|
10919
|
+
tag: "run",
|
|
10920
|
+
body: SourceRequest,
|
|
10921
|
+
ok: { status: 200, schema: "FileEditView", description: "OK" },
|
|
10922
|
+
errors: [400, 409, 422]
|
|
10923
|
+
}
|
|
10924
|
+
},
|
|
10015
10925
|
"/api/decisions": {
|
|
10016
10926
|
get: {
|
|
10017
10927
|
id: "getDecisions",
|
|
@@ -10197,6 +11107,24 @@ var OPS = {
|
|
|
10197
11107
|
errors: [404]
|
|
10198
11108
|
}
|
|
10199
11109
|
},
|
|
11110
|
+
"/api/activity": {
|
|
11111
|
+
get: {
|
|
11112
|
+
id: "listActivity",
|
|
11113
|
+
summary: "Everything Atticus is doing or did lately on this metarepo, newest first: the app's jobs, a Copilot run, the commands run in a terminal, an editor or a Copilot session, and the hand-off runs that wait for an assistant (ADR 0187)",
|
|
11114
|
+
tag: "ai",
|
|
11115
|
+
ok: { status: 200, schema: "ActivityList", description: "OK" }
|
|
11116
|
+
}
|
|
11117
|
+
},
|
|
11118
|
+
"/api/activity/{id}/lines": {
|
|
11119
|
+
get: {
|
|
11120
|
+
id: "getActivityLines",
|
|
11121
|
+
summary: "One activity's printed lines from a line on (from), or its last ones; a Copilot run's are its tabs (ADR 0187)",
|
|
11122
|
+
tag: "ai",
|
|
11123
|
+
params: [p("id"), q("from", str3, "The number of the first line wanted")],
|
|
11124
|
+
ok: { status: 200, schema: "ActivityLines", description: "OK" },
|
|
11125
|
+
errors: [400, 404]
|
|
11126
|
+
}
|
|
11127
|
+
},
|
|
10200
11128
|
"/api/copilot-runs/{runId}/stop": {
|
|
10201
11129
|
post: {
|
|
10202
11130
|
id: "stopCopilotRun",
|
|
@@ -10245,10 +11173,13 @@ var OPS = {
|
|
|
10245
11173
|
"/api/runs/{runId}/done": {
|
|
10246
11174
|
post: {
|
|
10247
11175
|
id: "markRunDone",
|
|
10248
|
-
summary: "Mark done: validate the hand-off output now. 2.67.0 (fourth UX walk): a step the app prepared then resumes, writing what the answer said; `lines` says what happened and `next` names the step's next run when it offers another prompt",
|
|
11176
|
+
summary: "Mark done: validate the hand-off output now. 2.67.0 (fourth UX walk): a step the app prepared then resumes, writing what the answer said; `lines` says what happened and `next` names the step's next run when it offers another prompt. 3.5.0 (ADR 0188): a read of a repo's last batch is put on the map (verify --write), named in `applied`. 3.9.0: with `job: true`, 202 JobAccepted at once; the job's result `answer` is this view, or `problem` when refused",
|
|
10249
11177
|
tag: "ai",
|
|
10250
11178
|
params: [p("runId")],
|
|
11179
|
+
body: RunDoneRequest,
|
|
11180
|
+
bodyOptional: true,
|
|
10251
11181
|
ok: { status: 200, schema: "RunDoneView", description: "OK" },
|
|
11182
|
+
alsoOk: { status: 202, schema: "JobAccepted", description: "Started as a job (`job: true`)" },
|
|
10252
11183
|
errors: [404, 409, 422]
|
|
10253
11184
|
}
|
|
10254
11185
|
},
|
|
@@ -10282,9 +11213,10 @@ var OPS = {
|
|
|
10282
11213
|
q("gate"),
|
|
10283
11214
|
q("state"),
|
|
10284
11215
|
q("lens", { type: "string", enum: Lens.options }),
|
|
10285
|
-
q("severity", { type: "string", enum: Severity.options })
|
|
11216
|
+
q("severity", { type: "string", enum: Severity.options }),
|
|
11217
|
+
q("asks", { type: "string", enum: ["business", "design", "delivery"] }, "3.6.0 (ADR 0191): only findings that ask at this level")
|
|
10286
11218
|
],
|
|
10287
|
-
ok: { status: 200, schema: arrayOf("
|
|
11219
|
+
ok: { status: 200, schema: arrayOf("FindingView"), description: "OK" }
|
|
10288
11220
|
}
|
|
10289
11221
|
},
|
|
10290
11222
|
"/api/findings/{changeId}/{findingId}": {
|
|
@@ -10546,7 +11478,7 @@ var OPS = {
|
|
|
10546
11478
|
"/api/settings/ai/test": {
|
|
10547
11479
|
post: {
|
|
10548
11480
|
id: "testAiProvider",
|
|
10549
|
-
summary: "Ask the configured model provider one short question with nothing of the estate in it, and say whether it answered. 3.0.0 (ADR 0186): when runtime.yaml's model settings differ from the committed ones (HEAD), it needs the person's confirmation (`ai-test`, `model`), else 403",
|
|
11481
|
+
summary: "Ask the configured model provider one short question with nothing of the estate in it, and say whether it answered. 3.0.0 (ADR 0186): when runtime.yaml's model settings differ from the committed ones (HEAD), it needs the person's confirmation (`ai-test`, `model`), else 403. 3.1.0: also whenever they send the key to an address the person hasn't confirmed, committed or not; a confirmed Test makes it the confirmed address",
|
|
10550
11482
|
tag: "run",
|
|
10551
11483
|
body: ConfirmedRequest,
|
|
10552
11484
|
ok: { status: 200, schema: { type: "object" }, description: "OK" },
|
|
@@ -10682,6 +11614,17 @@ var OPS = {
|
|
|
10682
11614
|
errors: [404, 422]
|
|
10683
11615
|
}
|
|
10684
11616
|
},
|
|
11617
|
+
"/api/questions/{id}/route": {
|
|
11618
|
+
post: {
|
|
11619
|
+
id: "routeQuestion",
|
|
11620
|
+
summary: "3.6.0 (ADR 0191): move a question to another role (product, architecture, analysis, delivery), as the signed-in person; the question keeps its answer, and `routed` says from which role, by whom and when",
|
|
11621
|
+
tag: "questions",
|
|
11622
|
+
params: [p("id")],
|
|
11623
|
+
body: RouteQuestionRequest,
|
|
11624
|
+
ok: { status: 200, schema: { type: "object" }, description: "The question, routed" },
|
|
11625
|
+
errors: [400, 404, 422]
|
|
11626
|
+
}
|
|
11627
|
+
},
|
|
10685
11628
|
"/api/questions/{id}/answer": {
|
|
10686
11629
|
post: {
|
|
10687
11630
|
id: "answerQuestion",
|
|
@@ -10776,6 +11719,16 @@ var OPS = {
|
|
|
10776
11719
|
errors: [400, 404, 422]
|
|
10777
11720
|
}
|
|
10778
11721
|
},
|
|
11722
|
+
"/api/knowledge/passage": {
|
|
11723
|
+
get: {
|
|
11724
|
+
id: "knowledgePassage",
|
|
11725
|
+
summary: "3.6.0 (ADR 0191): one section of a wiki snapshot page or an inputs/ file, by its id (<source>/<page>#<heading>), to open it in place",
|
|
11726
|
+
tag: "knowledge",
|
|
11727
|
+
params: [q("id", str3, "The section's id, as a change's knowledge lists it")],
|
|
11728
|
+
ok: { status: 200, schema: "KnowledgePassageView", description: "OK" },
|
|
11729
|
+
errors: [400, 404]
|
|
11730
|
+
}
|
|
11731
|
+
},
|
|
10779
11732
|
"/api/knowledge/search": {
|
|
10780
11733
|
get: {
|
|
10781
11734
|
id: "searchWikis",
|
|
@@ -10915,6 +11868,25 @@ var OPS = {
|
|
|
10915
11868
|
errors: [400, 404, 409, 422]
|
|
10916
11869
|
}
|
|
10917
11870
|
},
|
|
11871
|
+
"/api/changes/{changeId}/stages/{stage}/thread": {
|
|
11872
|
+
get: {
|
|
11873
|
+
id: "getStageThread",
|
|
11874
|
+
summary: "3.5.0 (ADR 0189): a stage of the change as one conversation: the prompts, the assistant's answers and their checks, the critic's findings, the questions, the replies and corrections, and the questions that couldn't be kept, in order",
|
|
11875
|
+
tag: "changes",
|
|
11876
|
+
params: [p("changeId"), p("stage", { schema: { type: "string", enum: [...THREAD_STAGES] } })],
|
|
11877
|
+
ok: { status: 200, schema: "StageThreadView", description: "OK" },
|
|
11878
|
+
errors: [400, 404]
|
|
11879
|
+
},
|
|
11880
|
+
post: {
|
|
11881
|
+
id: "postToStageThread",
|
|
11882
|
+
summary: "3.5.0 (ADR 0189): a person's reply to the stage's assistant (read by its next round as their answer), a comment on a finding, or keeping a dropped question anyway",
|
|
11883
|
+
tag: "changes",
|
|
11884
|
+
params: [p("changeId"), p("stage", { schema: { type: "string", enum: [...THREAD_STAGES] } })],
|
|
11885
|
+
body: StageThreadPost,
|
|
11886
|
+
ok: { status: 200, schema: "StageThreadPostResult", description: "Written" },
|
|
11887
|
+
errors: [400, 404, 409, 422]
|
|
11888
|
+
}
|
|
11889
|
+
},
|
|
10918
11890
|
"/api/changes/{changeId}/knowledge": {
|
|
10919
11891
|
get: {
|
|
10920
11892
|
id: "getChangeKnowledge",
|
|
@@ -11270,6 +12242,15 @@ async function walkRepo(root, visit, o = {}) {
|
|
|
11270
12242
|
// packages/core/dist/log.js
|
|
11271
12243
|
var LOG_MAX_BYTES = 5 * 1024 * 1024;
|
|
11272
12244
|
|
|
12245
|
+
// packages/core/dist/run-log.js
|
|
12246
|
+
var RUN_LOG_MAX_BYTES = 2 * 1024 * 1024;
|
|
12247
|
+
var RUN_SILENT_MS = 5 * 60 * 1e3;
|
|
12248
|
+
var DAY = 24 * 60 * 60 * 1e3;
|
|
12249
|
+
|
|
12250
|
+
// packages/core/dist/printer.js
|
|
12251
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
12252
|
+
var printer = new AsyncLocalStorage();
|
|
12253
|
+
|
|
11273
12254
|
// packages/core/dist/zip-read.js
|
|
11274
12255
|
var ZIP_LIMITS = {
|
|
11275
12256
|
maxEntries: 1e4,
|
|
@@ -11355,19 +12336,38 @@ var QuestionProposal = z32.strictObject({
|
|
|
11355
12336
|
at: IsoDateTime
|
|
11356
12337
|
});
|
|
11357
12338
|
|
|
12339
|
+
// packages/core/dist/setup-edit.js
|
|
12340
|
+
import { isMap as isMap10, isNode, isScalar, isSeq as isSeq5, parseDocument as parseDocument10, stringify as stringify5 } from "yaml";
|
|
12341
|
+
var ADAPTER_KINDS = [
|
|
12342
|
+
"gitHost",
|
|
12343
|
+
"workTracker",
|
|
12344
|
+
"serviceDesk",
|
|
12345
|
+
"notify",
|
|
12346
|
+
"wiki",
|
|
12347
|
+
"design"
|
|
12348
|
+
];
|
|
12349
|
+
function schemaTypes(kind) {
|
|
12350
|
+
const adapters = Runtime.shape.adapters.unwrap();
|
|
12351
|
+
return adapters.shape[kind]?.unwrap().options.find((o) => o.shape)?.shape?.type.options ?? [];
|
|
12352
|
+
}
|
|
12353
|
+
var ADAPTER_TYPES = Object.fromEntries(ADAPTER_KINDS.map((k) => [
|
|
12354
|
+
k,
|
|
12355
|
+
["manual", ...schemaTypes(k).filter((t) => t !== "manual" && t !== "mock")]
|
|
12356
|
+
]));
|
|
12357
|
+
|
|
11358
12358
|
// packages/core/dist/specs.js
|
|
11359
12359
|
import { parse as parse13 } from "yaml";
|
|
11360
12360
|
var SPEC_CACHE_VERSION = `spec@${FLOW_SCHEMA_VERSION}.${SPEC_HEADER_SCHEMA_VERSION}`;
|
|
11361
12361
|
|
|
11362
12362
|
// packages/core/dist/cancel.js
|
|
11363
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
11364
|
-
var store = new
|
|
12363
|
+
import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
|
|
12364
|
+
var store = new AsyncLocalStorage2();
|
|
11365
12365
|
|
|
11366
12366
|
// packages/core/dist/decision-batches.js
|
|
11367
|
-
import { parse as parse14, stringify as
|
|
12367
|
+
import { parse as parse14, stringify as stringify6 } from "yaml";
|
|
11368
12368
|
|
|
11369
12369
|
// packages/core/dist/declared-links.js
|
|
11370
|
-
import { isMap as
|
|
12370
|
+
import { isMap as isMap11, isScalar as isScalar2, isSeq as isSeq6, parseDocument as parseDocument11 } from "yaml";
|
|
11371
12371
|
|
|
11372
12372
|
// packages/core/dist/schema/reading-rules.js
|
|
11373
12373
|
import { z as z33 } from "zod";
|