@iowarp/clio-coder 0.4.4 → 0.4.5
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/CHANGELOG.md +92 -2
- package/CONTRIBUTING.md +25 -15
- package/README.md +340 -27
- package/dist/{acp-WNAYYF4F.js → acp-H3CU2HBQ.js} +25 -24
- package/dist/{agents-3OKXHLOI.js → agents-IXQQZ7BD.js} +77 -77
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-VKNNMGPU.js → auth-R7KYF7N3.js} +38 -38
- package/dist/builtins-CRFDQUVP.js +22 -0
- package/dist/{chunk-TQAHXW6Y.js → chunk-22PQ4TX4.js} +4 -4
- package/dist/{chunk-NEDJ26B5.js → chunk-2GPGAE5W.js} +6 -51
- package/dist/{chunk-IKCO5N3L.js → chunk-2QPI3TR3.js} +3 -3
- package/dist/{chunk-HRQMFLJP.js → chunk-32KJPXAM.js} +6 -6
- package/dist/{chunk-65DEGPJ6.js → chunk-3A3CUMKA.js} +6 -4
- package/dist/{chunk-JCI2ROMZ.js → chunk-3T4DXWP6.js} +7 -7
- package/dist/{chunk-DR52UMZW.js → chunk-3UW3KU4A.js} +2 -2
- package/dist/{chunk-6Q3CYFD3.js → chunk-4SVIVOMC.js} +184 -33
- package/dist/{chunk-W54I7H25.js → chunk-5A6XR3RJ.js} +44 -19
- package/dist/{chunk-YPC6ZR5L.js → chunk-5CMARGPF.js} +119 -5
- package/dist/{chunk-KXDSS5WJ.js → chunk-5CY4Q6QI.js} +4 -4
- package/dist/{chunk-I2DWJ4GM.js → chunk-5DDOTTG4.js} +54 -42
- package/dist/{chunk-D4CJV46V.js → chunk-5GZICIYO.js} +3 -3
- package/dist/{chunk-4IUZQIJ3.js → chunk-5PHVPU4G.js} +2 -2
- package/dist/{chunk-3ODX73FK.js → chunk-5VTJP36Q.js} +4 -4
- package/dist/{chunk-54X7T7DK.js → chunk-5ZMXGW7P.js} +79 -7
- package/dist/chunk-5ZSZEYJK.js +119 -0
- package/dist/{chunk-IXIY2H4R.js → chunk-633EXGZA.js} +5 -5
- package/dist/{chunk-CUSRQKPU.js → chunk-6CDNRHWH.js} +299 -89
- package/dist/{chunk-EBY63B7G.js → chunk-6EXUUOSN.js} +2 -2
- package/dist/{chunk-SVNXH4L2.js → chunk-6ICZKDUC.js} +2 -2
- package/dist/{chunk-JEIYHLOR.js → chunk-6SYEGZI3.js} +12 -12
- package/dist/{chunk-DQOVN6KV.js → chunk-6YA46L5A.js} +4 -4
- package/dist/{chunk-NZMNUPZZ.js → chunk-77CZRFTE.js} +3 -3
- package/dist/{chunk-6PAZTBPA.js → chunk-7HBHHVCK.js} +15 -6
- package/dist/{chunk-25QBEXRS.js → chunk-7TKWWPD7.js} +5 -4
- package/dist/{chunk-2VTFPG5O.js → chunk-7WLRF2U5.js} +2 -2
- package/dist/chunk-7WUZEB2M.js +165 -0
- package/dist/{chunk-3UUXNFEX.js → chunk-7YJWEF2L.js} +61 -34
- package/dist/{chunk-3EBYEESD.js → chunk-A46ILRS2.js} +5 -5
- package/dist/{chunk-UOIZ7DA4.js → chunk-AP7HDJOP.js} +2 -2
- package/dist/{chunk-APJ265NV.js → chunk-B5GGDIHT.js} +146 -146
- package/dist/{chunk-PMZVFWSR.js → chunk-B5ZTR6KZ.js} +2 -2
- package/dist/{chunk-I5FWO7L5.js → chunk-B6UM3OZC.js} +2 -2
- package/dist/{chunk-2CU2H6KE.js → chunk-BBV5TKE6.js} +5 -5
- package/dist/{chunk-4O6MANBS.js → chunk-BS4GAMUB.js} +14 -10
- package/dist/{chunk-S66XZJOF.js → chunk-C27U2TYG.js} +2 -2
- package/dist/{chunk-QZWQA4DE.js → chunk-CBSKDFWL.js} +3 -3
- package/dist/{chunk-2LEAKD4C.js → chunk-CKK25WN3.js} +3 -3
- package/dist/{chunk-BYP5D4HI.js → chunk-CTTI7G3T.js} +2 -2
- package/dist/{chunk-XAKHZX5N.js → chunk-CVDAFGPW.js} +4 -4
- package/dist/{chunk-RKKLTLYB.js → chunk-CXQ37WJH.js} +3 -3
- package/dist/{chunk-GTUD2WMY.js → chunk-DBREN25X.js} +44 -9
- package/dist/{chunk-YNFKXPEC.js → chunk-DIMRLNIC.js} +35 -66
- package/dist/{chunk-NDDGJUXD.js → chunk-DNCE23JJ.js} +2 -2
- package/dist/{chunk-HVDIIIQW.js → chunk-DNHVRBH4.js} +3 -3
- package/dist/{chunk-XULDXHTN.js → chunk-DRD2A54W.js} +102 -50
- package/dist/{chunk-D7E7WCDF.js → chunk-DVNAPPXU.js} +2 -2
- package/dist/{chunk-YXLYO42X.js → chunk-DXVMLM3Z.js} +3 -2
- package/dist/{chunk-5MEZN6CB.js → chunk-DZK63TZJ.js} +6 -6
- package/dist/{chunk-IGLP3ODT.js → chunk-E3BQTQUP.js} +15 -15
- package/dist/{chunk-IWHMRKLL.js → chunk-E3LEPLQ2.js} +2 -2
- package/dist/{chunk-3R73A4XB.js → chunk-ECBHH7LU.js} +3 -3
- package/dist/chunk-ECOMVOHP.js +139 -0
- package/dist/chunk-EFSEIZE6.js +56 -0
- package/dist/{chunk-FEAXX7B6.js → chunk-EHCPSZJF.js} +4 -4
- package/dist/{chunk-4NSRCOYP.js → chunk-EHOSNVVM.js} +3 -2
- package/dist/{chunk-7UGL4MB5.js → chunk-EQEJJ53P.js} +10 -10
- package/dist/{chunk-GWZNEVM2.js → chunk-EWD5P3GK.js} +9 -9
- package/dist/{chunk-6UINWWS6.js → chunk-F34AR6O3.js} +14 -14
- package/dist/{chunk-GHS5EBTQ.js → chunk-FKIOX6DS.js} +29 -20
- package/dist/{chunk-HAXOFFRH.js → chunk-FQOOGXBH.js} +7 -7
- package/dist/{chunk-Y55JBDO5.js → chunk-FSTIBAGM.js} +38 -23
- package/dist/{chunk-ZTJUVLTU.js → chunk-FXFVDPWY.js} +2 -2
- package/dist/{chunk-XPLRXC72.js → chunk-GD55RTIW.js} +3 -3
- package/dist/{chunk-5B2AEOW5.js → chunk-GH5ZR6JP.js} +472 -472
- package/dist/{chunk-TOIVGRUX.js → chunk-GJ24ODAX.js} +5 -5
- package/dist/{chunk-QUFRYSWI.js → chunk-GNQRWTMY.js} +129 -48
- package/dist/{chunk-5ICU3EUH.js → chunk-GVYWZNRK.js} +5 -5
- package/dist/{chunk-GX5WYQO4.js → chunk-GXCCHKN6.js} +6 -6
- package/dist/{chunk-K6T2ZAMZ.js → chunk-HGSLRG33.js} +6 -6
- package/dist/{chunk-26QSH3EJ.js → chunk-HHVJNVUJ.js} +5 -5
- package/dist/{chunk-F4EKGO4N.js → chunk-HL26ADLH.js} +4 -2
- package/dist/{chunk-JT2RFCC5.js → chunk-HR3HPQ76.js} +5 -5
- package/dist/{chunk-ID64D7PE.js → chunk-HXHFDHB6.js} +24 -24
- package/dist/{chunk-ELWDPP3Y.js → chunk-I7VLWRK2.js} +8 -8
- package/dist/{chunk-6OSVSQL5.js → chunk-ICO4TQ2F.js} +7 -5
- package/dist/{chunk-SZAA6XDG.js → chunk-IFDRAD6F.js} +2 -2
- package/dist/{chunk-72YIHOZQ.js → chunk-ILJ7DWGE.js} +9 -9
- package/dist/{chunk-2JH2WHGE.js → chunk-J2FYEQ5L.js} +4 -4
- package/dist/{chunk-BMS5RKQY.js → chunk-JABWPKFY.js} +3 -3
- package/dist/{chunk-QDC3K2U3.js → chunk-K2BLQC5E.js} +3 -3
- package/dist/{chunk-AUPNRN7C.js → chunk-K2HL3GBL.js} +4 -4
- package/dist/{chunk-2ASED4PZ.js → chunk-K6RDB7IA.js} +26 -26
- package/dist/{chunk-FFUPXJC4.js → chunk-KDWLXVMN.js} +23 -24
- package/dist/{chunk-OZNBF4L3.js → chunk-KECNXMDE.js} +2 -2
- package/dist/{chunk-6QOTUPRG.js → chunk-KF6GFW6O.js} +66 -18
- package/dist/{chunk-BTK3SSSK.js → chunk-KMF54VH3.js} +2 -2
- package/dist/chunk-KPRLAMP4.js +32 -0
- package/dist/{chunk-ECH6PKUQ.js → chunk-KQ6IDQIB.js} +2 -2
- package/dist/{chunk-3UNOLWNZ.js → chunk-KTFSFCVN.js} +20 -9
- package/dist/{chunk-57XXR6DR.js → chunk-KYKNBD4Y.js} +24 -23
- package/dist/{chunk-IRXAATOX.js → chunk-L4N3DWNW.js} +3 -3
- package/dist/{chunk-LCGCVYZ4.js → chunk-LQTKDAUO.js} +2 -2
- package/dist/{chunk-U6TMQNSI.js → chunk-LTR5QCLS.js} +4 -4
- package/dist/chunk-LUL5Z66S.js +221 -0
- package/dist/{chunk-ELZVTCGV.js → chunk-LVFANMOH.js} +151 -327
- package/dist/{chunk-H7IXIC72.js → chunk-LY4N4TTL.js} +17 -3
- package/dist/{chunk-VKPAQYEB.js → chunk-LZBMXNLP.js} +5 -5
- package/dist/{chunk-UL3WSD3F.js → chunk-M4KFUXS7.js} +2 -2
- package/dist/{chunk-NXYCB2VD.js → chunk-M6TAYK66.js} +6 -6
- package/dist/{chunk-NEKRRTYW.js → chunk-MC3JSVR6.js} +2 -2
- package/dist/{chunk-CFGTUFWB.js → chunk-MCJKEGHO.js} +2 -2
- package/dist/{chunk-DXKJURES.js → chunk-MDU3C27C.js} +10 -7
- package/dist/{chunk-6XLNIQDB.js → chunk-MYI32N4R.js} +2 -2
- package/dist/{chunk-3GY4F45V.js → chunk-NC4KV7EL.js} +6 -6
- package/dist/{chunk-LLXSDWXS.js → chunk-NF3BK5WR.js} +5 -5
- package/dist/chunk-NTK3WTHM.js +141 -0
- package/dist/{chunk-GYV6VZOC.js → chunk-NTTS3O53.js} +2 -2
- package/dist/{chunk-RZDWV63N.js → chunk-NY6IWDVU.js} +6 -6
- package/dist/{chunk-XXYSBZIQ.js → chunk-O2RQ7LCK.js} +4 -4
- package/dist/{chunk-4BJ5BYCE.js → chunk-O3VV6IVK.js} +2 -2
- package/dist/{chunk-W6GROXXM.js → chunk-O5F25NIE.js} +2 -2
- package/dist/{chunk-NXIMQY5W.js → chunk-ODUTYZIU.js} +5 -5
- package/dist/{chunk-LTIKRKFL.js → chunk-ONRTXOZY.js} +4 -4
- package/dist/{chunk-KFV5L5SK.js → chunk-OQM5IVJY.js} +118 -232
- package/dist/{chunk-XRZT5WY5.js → chunk-P5SC4DLJ.js} +4 -4
- package/dist/{chunk-R6Q67RJH.js → chunk-PECBKCDK.js} +34 -6
- package/dist/{chunk-33YXPOE3.js → chunk-PPEZJWUG.js} +2 -2
- package/dist/{chunk-RXTN6AKH.js → chunk-PWWSIB2A.js} +5 -5
- package/dist/{chunk-2STGEDFV.js → chunk-QEQISF75.js} +2 -2
- package/dist/{chunk-3DPEIQKN.js → chunk-QH3ZTUOA.js} +2 -2
- package/dist/{chunk-YAKGTXEV.js → chunk-QRFXEO6Y.js} +2 -2
- package/dist/{chunk-35MSIRKH.js → chunk-QUIJZSDW.js} +2 -2
- package/dist/{chunk-HHV2GANA.js → chunk-R2P2U3ZS.js} +2 -2
- package/dist/{chunk-2DSOYNFC.js → chunk-R6MAYTMS.js} +7 -7
- package/dist/{chunk-JQLNNIKT.js → chunk-R6MICQYU.js} +6 -6
- package/dist/{chunk-NAI6ZFCY.js → chunk-RLTT5GVY.js} +122 -11
- package/dist/{chunk-DT3LWJOB.js → chunk-RXIOCVBZ.js} +24 -6
- package/dist/{chunk-N56KALIC.js → chunk-S32UQ5GL.js} +61 -34
- package/dist/{chunk-UEPWCCTY.js → chunk-SBZX6ARC.js} +12 -12
- package/dist/chunk-SD7SHNDW.js +15 -0
- package/dist/{chunk-NRO2BJRH.js → chunk-SDWNDICN.js} +10235 -4015
- package/dist/{chunk-UXCU4E3T.js → chunk-SE4ZKILO.js} +6 -6
- package/dist/chunk-SL2RDHKO.js +19 -0
- package/dist/{chunk-NUGM5KR6.js → chunk-SRCEQKQS.js} +2 -2
- package/dist/{chunk-OMQNJVKW.js → chunk-SRZOW5L2.js} +43 -13
- package/dist/{chunk-3M6DQK6S.js → chunk-T334FW2H.js} +7 -7
- package/dist/{chunk-V76WTFTW.js → chunk-T52TPHYC.js} +6 -6
- package/dist/{chunk-I7XBWTYH.js → chunk-T53XI6I7.js} +5 -5
- package/dist/{chunk-2ZSONWVL.js → chunk-T7FDXNRU.js} +13 -13
- package/dist/{chunk-JSD46VO2.js → chunk-TEG3RYVZ.js} +43 -36
- package/dist/{chunk-3I7MS7N2.js → chunk-TK2BMCBZ.js} +2 -2
- package/dist/{chunk-5OIVVPHF.js → chunk-TN5FW4XY.js} +13 -6
- package/dist/{chunk-75W7L2E2.js → chunk-TZ7MFRG4.js} +1041 -162
- package/dist/{chunk-36CT5VVL.js → chunk-U2JOLB7O.js} +126 -77
- package/dist/{chunk-LL4KHSZI.js → chunk-U2MSJ57E.js} +2 -2
- package/dist/{chunk-FTMGRKEF.js → chunk-U44YYLVV.js} +4 -4
- package/dist/{chunk-YECAMM3D.js → chunk-U7H5WRG5.js} +5 -5
- package/dist/{chunk-RQCKCSRL.js → chunk-U7VQ4NI4.js} +22 -22
- package/dist/{chunk-5TUB6SLS.js → chunk-UFYNOQK4.js} +7 -7
- package/dist/{chunk-R346GLFC.js → chunk-UHW5V7HC.js} +2 -2
- package/dist/{chunk-USR47QNF.js → chunk-UL36QJX6.js} +14 -14
- package/dist/{chunk-VIA6RFQZ.js → chunk-UQIVHSE4.js} +4 -4
- package/dist/{chunk-RAY4OVGZ.js → chunk-URBGEOH3.js} +5 -5
- package/dist/chunk-USZA7GWL.js +341 -0
- package/dist/{chunk-YD5GIKET.js → chunk-UTUNT5QL.js} +48 -579
- package/dist/{chunk-ZA4VCIGV.js → chunk-UUQ5G6EZ.js} +60 -41
- package/dist/{chunk-23L32XTI.js → chunk-UXAC2FX4.js} +68 -39
- package/dist/{chunk-VG7TBQIY.js → chunk-V552WL53.js} +68 -4
- package/dist/{chunk-BWH6N36D.js → chunk-VHKTOLEW.js} +272 -42
- package/dist/{chunk-EXLD33WO.js → chunk-VLPTKCKT.js} +24 -9
- package/dist/{chunk-336NSSKI.js → chunk-VNBICSS2.js} +2 -2
- package/dist/{chunk-VAVR4IJY.js → chunk-VQD7NH7Z.js} +3 -3
- package/dist/{chunk-LBMZMYH2.js → chunk-W2RJEH6Q.js} +3 -3
- package/dist/{chunk-7CR24IG7.js → chunk-WDV62RKY.js} +2 -2
- package/dist/{chunk-S6PYF2XF.js → chunk-WFKDPU7U.js} +4 -4
- package/dist/{chunk-BJVFZO5U.js → chunk-WJIMKGD6.js} +7 -7
- package/dist/{chunk-5636DCO5.js → chunk-WLMSOT73.js} +59 -12
- package/dist/{chunk-MXHC5QYU.js → chunk-WTQGRBHV.js} +5 -144
- package/dist/chunk-WXA2CFJO.js +23 -0
- package/dist/{chunk-QSNYB6ZV.js → chunk-XCUDZQLX.js} +3 -3
- package/dist/{chunk-4M6Z5QVF.js → chunk-XXBQKW32.js} +11 -11
- package/dist/{chunk-OEJSLEPW.js → chunk-YEJIG7LN.js} +332 -332
- package/dist/chunk-YGDMBK7O.js +567 -0
- package/dist/{chunk-4WR7VSYB.js → chunk-YYB3MC65.js} +23 -9
- package/dist/{chunk-2IR2NMPA.js → chunk-ZIDFQJRB.js} +2 -2
- package/dist/{chunk-Q4WO54TA.js → chunk-ZMZQEBKI.js} +14 -14
- package/dist/{chunk-6EJMN2Y3.js → chunk-ZTNFYMIO.js} +2 -2
- package/dist/{chunk-WEPFGWHJ.js → chunk-ZZFWWYLX.js} +2 -2
- package/dist/cli/index.js +44 -44
- package/dist/clio-5I2IBFYL.js +26 -0
- package/dist/{code-nav-IJR2DBPR.js → code-nav-YXIAEZVS.js} +48 -32
- package/dist/codewiki/build-worker.js +76 -29
- package/dist/{compile-cache-OQAVB7Y5.js → compile-cache-WJEPUZEJ.js} +4 -4
- package/dist/{components-2TGAI2RC.js → components-TNIKXCBH.js} +13 -13
- package/dist/{config-IUA6OYNS.js → config-Y2JDJ3JJ.js} +210 -124
- package/dist/configure-SML6UBZ5.js +55 -0
- package/dist/{context-4MPR7WKB.js → context-P5YSEO55.js} +125 -121
- package/dist/{context-2DKHWH2T.js → context-QQ53HSGJ.js} +91 -62
- package/dist/{context-BOYF5EJM.js → context-S2EEC3EJ.js} +62 -31
- package/dist/context-clear-TMEQCOTH.js +183 -0
- package/dist/{context-index-HNG3MOME.js → context-index-HP2JFUWA.js} +13 -11
- package/dist/{context-map-COB37XXN.js → context-map-INTXD54D.js} +71 -21
- package/dist/{context-working-set-3I3FYX6Y.js → context-working-set-CNLSQN5K.js} +31 -31
- package/dist/detail-5572VLBO.js +114 -0
- package/dist/{dispatch-runner-RJ5I2F2O.js → dispatch-runner-FRHD6P2O.js} +191 -116
- package/dist/{docs-SPOV3BAN.js → docs-BL7ROUFN.js} +4 -4
- package/dist/{doctor-DKICC2SN.js → doctor-N3LCM2LG.js} +58 -58
- package/dist/{eval-OQOQUDHK.js → eval-BUU3ZOUZ.js} +473 -168
- package/dist/{eval-inventory-Y6QRFOH5.js → eval-inventory-QOYZERXJ.js} +7 -7
- package/dist/evidence-DTGEN456.js +224 -0
- package/dist/{evidence-4DQ25GUQ.js → evidence-SQ5DNFEN.js} +110 -94
- package/dist/{evolve-GSS52E5J.js → evolve-IJNUFZDS.js} +107 -91
- package/dist/{extensions-G7MFLYHT.js → extensions-YVRHX6ZI.js} +16 -16
- package/dist/{fleet-Q37YHHAQ.js → fleet-ZNNVSYFO.js} +147 -147
- package/dist/{fleet-commands-G7E4N7SM.js → fleet-commands-5YE7NPJL.js} +27 -26
- package/dist/{fleet-decisions-O7M6QBA2.js → fleet-decisions-3SBSCTCW.js} +16 -15
- package/dist/{fleet-graph-TOUBW6OW.js → fleet-graph-6HHPWF5T.js} +39 -38
- package/dist/{fleet-inspect-SW33JJNI.js → fleet-inspect-JEYMGCGC.js} +107 -91
- package/dist/{fleet-new-RDVJLHHH.js → fleet-new-RCKGSRDV.js} +3 -3
- package/dist/{fleet-preflight-CV2655TW.js → fleet-preflight-QRSHIIDE.js} +10 -9
- package/dist/{fleet-validate-KESZX2YH.js → fleet-validate-4PM4GDDL.js} +46 -42
- package/dist/{fleet-verify-UQPMTVE3.js → fleet-verify-NJDTHTO3.js} +105 -89
- package/dist/fleet-view-UP2BWQQY.js +117 -0
- package/dist/{init-PXEXQSBF.js → init-S3GZQ5ZF.js} +123 -123
- package/dist/{install-NKNG7KD4.js → install-3RZDDP23.js} +5 -5
- package/dist/{interop-ZG5T62U3.js → interop-YOTGXFJM.js} +25 -25
- package/dist/inventory-K2OZ36YJ.js +117 -0
- package/dist/{library-B2W4N74O.js → library-GJI6W6OK.js} +45 -44
- package/dist/{memory-YCANYS5A.js → memory-OQOXQGYD.js} +107 -93
- package/dist/{models-GERTU3YI.js → models-3IK2Y5WE.js} +63 -62
- package/dist/{monitor-CPNIUULB.js → monitor-FTJLTKCQ.js} +136 -107
- package/dist/{orchestrator-J4BSH4WQ.js → orchestrator-N47O7SFD.js} +1159 -697
- package/dist/{panes-BOHAEGYC.js → panes-7BTYH3XQ.js} +8 -8
- package/dist/{panes-NXSLDQZ2.js → panes-WPOMEMRH.js} +22 -22
- package/dist/{paths-VSUWNC22.js → paths-J3KN7UAO.js} +12 -12
- package/dist/preload-65U34NG6.js +115 -0
- package/dist/{registry-LG64LTF4.js → registry-DESGAXWK.js} +3 -3
- package/dist/{reset-TNWTB5LU.js → reset-MUVQDLNL.js} +20 -20
- package/dist/{resources-4PXNMD5G.js → resources-LM76COAO.js} +41 -40
- package/dist/{run-D6XJ34CN.js → run-3VFZQ33N.js} +162 -156
- package/dist/{share-2NWMJJEE.js → share-4JUB4BL7.js} +43 -42
- package/dist/{skills-KR7WON5G.js → skills-S36AAJHU.js} +47 -46
- package/dist/{skills-eval-O2ZNOLDS.js → skills-eval-G6T57L7M.js} +127 -107
- package/dist/{skills-inventory-ZZOUBK7O.js → skills-inventory-WLM46PJH.js} +41 -40
- package/dist/slash-commands-GBARG3Y7.js +91 -0
- package/dist/{steer-XA25PSCS.js → steer-S7D7IKPU.js} +7 -7
- package/dist/{support-7EMVWYG2.js → support-5VAEC32W.js} +14 -14
- package/dist/{targets-OMH2XCSN.js → targets-N5REUETU.js} +145 -94
- package/dist/tasks-6BVY5YZF.js +36 -0
- package/dist/{terminal-lease-C2J3JYRE.js → terminal-lease-57UEOJKS.js} +12 -11
- package/dist/tools-6OCQ6SVB.js +28 -0
- package/dist/{trace-FXMXUZUF.js → trace-JHLXWUMN.js} +18 -17
- package/dist/{tree-sitter-HGKH6LG4.js → tree-sitter-AQUUOSYM.js} +6 -6
- package/dist/{tui-primitives-K5PASC3O.js → tui-primitives-RCY2HN7G.js} +3 -3
- package/dist/{uninstall-HALS6BLF.js → uninstall-FXYMFFRT.js} +17 -17
- package/dist/{upgrade-MS72RJEP.js → upgrade-4HD5HAIV.js} +40 -39
- package/dist/{usage-NHG6MCJM.js → usage-4GWM2WWP.js} +136 -105
- package/dist/{verifiers-7AUNVXDY.js → verifiers-GSKWKWVG.js} +28 -27
- package/dist/verify-3AS3ULCY.js +30 -0
- package/dist/{version-KGEG7EPO.js → version-RFPKO6T7.js} +4 -4
- package/dist/{web-fetch-V4FKSDAV.js → web-fetch-MQN4FH3X.js} +169 -18
- package/dist/wiki-generate-7BV7XWIY.js +614 -0
- package/dist/{with-panes-BDQEWBRT.js → with-panes-OFTNAR4Y.js} +34 -20
- package/dist/worker/entry.js +99 -88
- package/dist/{workspace-ZJ6BFM3Q.js → workspace-DZ7JADBG.js} +6 -6
- package/docs/README.md +7 -6
- package/docs/architecture/acp.md +10 -0
- package/docs/architecture/architecture.md +5 -5
- package/docs/architecture/context-engine.md +44 -59
- package/docs/architecture/context-working-set.md +7 -9
- package/docs/architecture/dispatch-architecture-rationale.md +1 -1
- package/docs/architecture/evidence-and-memory.md +10 -0
- package/docs/architecture/pi-boundary.md +37 -7
- package/docs/architecture/prompt-envelope-and-tools.md +7 -7
- package/docs/architecture/session-lifecycle.md +4 -4
- package/docs/architecture/worker-dispatch-mechanics.md +4 -0
- package/docs/guide/commands-and-modes.md +49 -36
- package/docs/guide/configuration-and-targets.md +7 -2
- package/docs/guide/configuration-reference.md +13 -3
- package/docs/guide/environment-variables.md +6 -2
- package/docs/guide/fleet-dispatch.md +12 -0
- package/docs/guide/installation-and-lifecycle.md +35 -9
- package/docs/guide/proactive-memory.md +1 -1
- package/docs/guide/skills-marketplace.md +11 -3
- package/docs/guide/tool-usage.md +9 -2
- package/docs/process/development-pipeline.md +10 -10
- package/docs/process/documentation-guide.md +2 -2
- package/docs/process/eval-runner.md +15 -0
- package/docs/process/evals-internal.md +1 -1
- package/docs/process/release-cut-checklist.md +6 -6
- package/evals/README.md +4 -0
- package/evals/behavioral-corpus-grader.mjs +147 -14
- package/evals/behavioral-model-negative-control.yaml +1 -0
- package/evals/behavioral-model.yaml +266 -1
- package/evals/fixtures/docs-retrieval.json +102 -0
- package/evals/fixtures/scalar-decision.json +17 -0
- package/evals/fixtures/scout-citation-pipeline.json +55 -0
- package/evals/fixtures/source-explanation.json +74 -0
- package/evals/fixtures/tool-arguments.json +18 -0
- package/evals/fixtures/tool-surface/read.txt +4 -0
- package/evals/fixtures/tool-surface/subdir/keep.txt +1 -0
- package/evals/no-edit-memory-grader.mjs +149 -0
- package/evals/scalar-decision-grader.py +41 -0
- package/evals/scalar-decision-machinery.ts +145 -0
- package/evals/source-explanation-grader.mjs +118 -0
- package/evals/tool-surface-grader.mjs +53 -0
- package/evals/tool-surface-model.yaml +274 -0
- package/package.json +14 -14
- package/skills/README.md +6 -6
- package/skills/registry.yaml +1 -1
- package/skills/skill-marketplace.json +1 -1
- package/src/cli/bootstrap-generate.ts +6 -0
- package/src/cli/config-inspect.ts +24 -7
- package/src/cli/config-trust.ts +62 -0
- package/src/cli/config.ts +8 -0
- package/src/cli/context-map.ts +75 -14
- package/src/cli/context.ts +46 -17
- package/src/cli/eval.ts +17 -3
- package/src/cli/modes/print.ts +32 -4
- package/src/cli/run.ts +16 -14
- package/src/cli/skills-eval.ts +10 -8
- package/src/cli/steer-channel.ts +31 -18
- package/src/cli/targets.ts +83 -31
- package/src/cli/tasks.ts +10 -1
- package/src/cli/upgrade.ts +9 -6
- package/src/cli/usage.ts +24 -0
- package/src/cli/wiki-generate.ts +239 -96
- package/src/core/bash-exec.ts +43 -15
- package/src/core/bus-events.ts +15 -0
- package/src/core/config.ts +33 -14
- package/src/core/defaults.ts +5 -4
- package/src/core/file-references.ts +11 -1
- package/src/core/incomplete-installation.ts +3 -1
- package/src/core/settings-layers.ts +21 -5
- package/src/core/termination.ts +26 -9
- package/src/core/untrusted-content.ts +16 -0
- package/src/core/workspace-trust.ts +179 -0
- package/src/domains/agents/builtins/coder.md +4 -2
- package/src/domains/agents/builtins/context-bootstrap.md +3 -1
- package/src/domains/agents/builtins/documenter.md +7 -4
- package/src/domains/agents/builtins/researcher.md +1 -0
- package/src/domains/agents/builtins/scout.md +7 -1
- package/src/domains/agents/result-contract.ts +199 -26
- package/src/domains/context/bootstrap-prompt.ts +11 -9
- package/src/domains/context/bootstrap.ts +74 -39
- package/src/domains/context/clio-md.ts +88 -26
- package/src/domains/context/codewiki/build-operation.ts +121 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +37 -3
- package/src/domains/context/codewiki/build-worker.ts +3 -35
- package/src/domains/context/codewiki/coordinator.ts +36 -6
- package/src/domains/context/codewiki/indexer.ts +59 -19
- package/src/domains/context/contract.ts +6 -2
- package/src/domains/context/extension.ts +72 -10
- package/src/domains/context/fingerprint.ts +39 -34
- package/src/domains/context/index.ts +7 -1
- package/src/domains/context/prompt-context.ts +55 -14
- package/src/domains/context/refresh.ts +9 -57
- package/src/domains/context/wiki/assemble.ts +14 -10
- package/src/domains/context/wiki/evidence.ts +209 -0
- package/src/domains/context/wiki/generate.ts +201 -67
- package/src/domains/context/wiki/meta.ts +10 -2
- package/src/domains/context/wiki/plan-store.ts +70 -14
- package/src/domains/context/wiki/plan.ts +71 -14
- package/src/domains/context/wiki/prompts.ts +42 -1
- package/src/domains/context/wiki/source-content.ts +106 -0
- package/src/domains/context/wiki/staleness.ts +33 -22
- package/src/domains/context/working-set/contract.ts +8 -2
- package/src/domains/context/working-set/engine.ts +17 -4
- package/src/domains/context/working-set/fold.ts +15 -2
- package/src/domains/context/working-set/marker.ts +2 -1
- package/src/domains/context/working-set/project.ts +18 -7
- package/src/domains/context/working-set/recall.ts +82 -56
- package/src/domains/dispatch/active-route-planner.ts +6 -3
- package/src/domains/dispatch/admission-queue.ts +19 -7
- package/src/domains/dispatch/admission.ts +3 -3
- package/src/domains/dispatch/budget-envelope.ts +47 -82
- package/src/domains/dispatch/capacity-lease.ts +57 -19
- package/src/domains/dispatch/contract.ts +10 -2
- package/src/domains/dispatch/event-pump.ts +28 -7
- package/src/domains/dispatch/execution-role.ts +49 -2
- package/src/domains/dispatch/execution-scheduler.ts +2 -0
- package/src/domains/dispatch/extension.ts +190 -105
- package/src/domains/dispatch/fleet-run.ts +20 -0
- package/src/domains/dispatch/gate-role-prompts.ts +4 -2
- package/src/domains/dispatch/parallel-writers.ts +34 -0
- package/src/domains/dispatch/reservation-store.ts +8 -34
- package/src/domains/dispatch/route-approval.ts +3 -3
- package/src/domains/dispatch/route-observer.ts +4 -2
- package/src/domains/dispatch/route-quality.ts +6 -1
- package/src/domains/dispatch/types.ts +4 -3
- package/src/domains/dispatch/worker-spawn.ts +58 -21
- package/src/domains/dispatch/workspace-checkpoint.ts +57 -0
- package/src/domains/eval/compare/behavioral.ts +81 -14
- package/src/domains/eval/compare/compare.ts +15 -5
- package/src/domains/eval/compare/envelope.ts +12 -5
- package/src/domains/eval/metrics/context.ts +24 -1
- package/src/domains/eval/metrics/tracked.ts +4 -28
- package/src/domains/eval/reports/comparison.ts +9 -9
- package/src/domains/eval/runners/clio-run.ts +5 -1
- package/src/domains/eval/schema/suite.ts +2 -0
- package/src/domains/eval/schema/validate.ts +1 -0
- package/src/domains/eval/suites/run.ts +189 -13
- package/src/domains/eval/verifiers/integrity.ts +39 -0
- package/src/domains/eval/verifiers/patch.ts +58 -2
- package/src/domains/eval/workspaces/temp-copy.ts +3 -0
- package/src/domains/evidence/build.ts +4 -2
- package/src/domains/interop/registry.ts +2 -2
- package/src/domains/middleware/hooks-io.ts +45 -26
- package/src/domains/middleware/hooks.ts +6 -0
- package/src/domains/middleware/injection-screen.ts +23 -0
- package/src/domains/middleware/rules.ts +5 -1
- package/src/domains/middleware/stalled-turn.ts +18 -3
- package/src/domains/middleware/task-board-reminder.ts +4 -2
- package/src/domains/middleware/task-nudge.ts +4 -1
- package/src/domains/mux/contract.ts +34 -1
- package/src/domains/mux/dock-controller.ts +8 -1
- package/src/domains/mux/index.ts +1 -0
- package/src/domains/mux/socket-client.ts +13 -3
- package/src/domains/observability/contract.ts +2 -2
- package/src/domains/observability/projection.ts +30 -9
- package/src/domains/prompts/compiler.ts +10 -2
- package/src/domains/prompts/contract.ts +7 -4
- package/src/domains/prompts/extension.ts +28 -64
- package/src/domains/prompts/fragments/identity/clio.md +23 -0
- package/src/domains/prompts/fragments/operating/contract.md +10 -0
- package/src/domains/prompts/fragments/operating/delegation.md +5 -0
- package/src/domains/prompts/fragments/wiki/page.md +28 -15
- package/src/domains/prompts/fragments/wiki/plan.md +4 -4
- package/src/domains/prompts/preload-prefix.ts +31 -0
- package/src/domains/prompts/preload.ts +135 -61
- package/src/domains/providers/auth/backend-file.ts +15 -11
- package/src/domains/providers/auth/storage.ts +3 -5
- package/src/domains/providers/catalog.ts +18 -3
- package/src/domains/providers/runtime-resolution.ts +11 -9
- package/src/domains/providers/runtimes/cloud/openrouter.ts +2 -0
- package/src/domains/resources/skills/promotion.ts +8 -1
- package/src/domains/safety/action-classifier.ts +9 -0
- package/src/domains/safety/autonomy.ts +10 -1
- package/src/domains/safety/contract.ts +5 -1
- package/src/domains/safety/default-path-policy.ts +11 -0
- package/src/domains/safety/extension.ts +11 -2
- package/src/domains/safety/policy-engine.ts +189 -32
- package/src/domains/safety/project-policy.ts +7 -2
- package/src/domains/safety/workspace-trust.ts +43 -0
- package/src/domains/session/compaction/compact.ts +384 -21
- package/src/domains/session/compaction/cut-point.ts +42 -5
- package/src/domains/session/compaction/tokens.ts +9 -1
- package/src/domains/session/decision-board.ts +43 -33
- package/src/domains/session/entries.ts +169 -4
- package/src/domains/session/prompt-manifest.ts +47 -8
- package/src/domains/session/task-board.ts +21 -3
- package/src/domains/user-tasks/handoff.ts +16 -0
- package/src/engine/acp/adapter.ts +44 -12
- package/src/engine/acp/server.ts +1 -0
- package/src/engine/acp/transport.ts +2 -1
- package/src/engine/acp/types.ts +6 -1
- package/src/engine/antigravity/subprocess-runtime.ts +20 -4
- package/src/engine/api-registry.ts +19 -2
- package/src/engine/apis/openai-completions.ts +13 -6
- package/src/engine/apis/output-budget.ts +26 -10
- package/src/engine/claude/sdk-runtime.ts +4 -3
- package/src/engine/env-api-keys.ts +2 -1
- package/src/engine/external-subprocess.ts +14 -3
- package/src/engine/loop-guard.ts +19 -2
- package/src/engine/provider-diagnostics.ts +129 -0
- package/src/engine/provider-payload.ts +3 -1
- package/src/engine/worker-runtime.ts +13 -2
- package/src/engine/worker-tools.ts +5 -1
- package/src/entry/extension-reload.ts +1 -0
- package/src/entry/orchestrator.ts +53 -15
- package/src/interactive/chat-loop-messages.ts +12 -4
- package/src/interactive/chat-loop.ts +115 -45
- package/src/interactive/chat-renderer.ts +60 -0
- package/src/interactive/context-recall-command.ts +2 -1
- package/src/interactive/dispatch-board.ts +17 -2
- package/src/interactive/editor-submit.ts +13 -0
- package/src/interactive/interactive-application.ts +8 -2
- package/src/interactive/interactive-event-projection.ts +7 -1
- package/src/interactive/interactive-presentation.ts +15 -7
- package/src/interactive/interactive-slash-runtime.ts +2 -0
- package/src/interactive/layout.ts +2 -1
- package/src/interactive/model-session-replay.ts +2 -2
- package/src/interactive/overlay-frame.ts +1 -0
- package/src/interactive/overlay-general-openers.ts +3 -1
- package/src/interactive/overlay-session-lifecycle.ts +6 -0
- package/src/interactive/overlays/ask-user.ts +1 -0
- package/src/interactive/overlays/message-picker.ts +1 -1
- package/src/interactive/renderers/tool-execution.ts +17 -1
- package/src/interactive/renderers/worker-entry.ts +25 -10
- package/src/interactive/slash-commands.ts +9 -7
- package/src/interactive/turn-context.ts +221 -53
- package/src/interactive/turn-middleware.ts +3 -1
- package/src/interactive/turn-persistence.ts +3 -0
- package/src/interactive/turn-runtime.ts +11 -2
- package/src/interactive/turn-state.ts +10 -9
- package/src/interactive/watch-pane.ts +18 -4
- package/src/interactive/worker-stream.ts +7 -7
- package/src/tools/agent-tools.ts +6 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/builtin-tool-catalog.ts +9 -2
- package/src/tools/codewiki/code-nav.ts +4 -10
- package/src/tools/compete-judge-task.ts +71 -0
- package/src/tools/compete-worktrees.ts +34 -0
- package/src/tools/context/index.ts +32 -7
- package/src/tools/context/surface.ts +15 -4
- package/src/tools/decide.ts +1 -1
- package/src/tools/dispatch-admission.ts +12 -1
- package/src/tools/dispatch-arguments.ts +38 -1
- package/src/tools/dispatch-plan.ts +7 -7
- package/src/tools/dispatch-runner.ts +48 -32
- package/src/tools/dispatch-schema.ts +30 -23
- package/src/tools/dispatch-scout-admission.ts +10 -44
- package/src/tools/dispatch-scout.ts +2 -3
- package/src/tools/find.ts +13 -4
- package/src/tools/grep.ts +13 -1
- package/src/tools/ls.ts +7 -1
- package/src/tools/monitor.ts +26 -11
- package/src/tools/network-policy.ts +11 -24
- package/src/tools/observation.ts +39 -2
- package/src/tools/read.ts +112 -15
- package/src/tools/registry.ts +54 -17
- package/src/tools/result-shaping.ts +110 -2
- package/src/tools/tasks.ts +33 -7
- package/src/tools/verify/frontend.ts +67 -30
- package/src/tools/verify/numeric.ts +6 -1
- package/src/tools/web-fetch-network.ts +179 -0
- package/src/tools/web-fetch-surface.ts +2 -1
- package/src/tools/web-fetch.ts +15 -13
- package/src/tools/worker-evidence.ts +27 -0
- package/src/worker/spec-contract.ts +12 -8
- package/dist/builtins-WGALA46I.js +0 -22
- package/dist/chunk-2WZ546HR.js +0 -792
- package/dist/chunk-5PSMVOLM.js +0 -56
- package/dist/chunk-EL24TAU4.js +0 -1560
- package/dist/chunk-IZXGRF7P.js +0 -4048
- package/dist/chunk-JVCV3ICN.js +0 -47
- package/dist/chunk-MNJGS2IN.js +0 -33
- package/dist/chunk-O5CVSAG5.js +0 -122
- package/dist/chunk-ODGTEFFI.js +0 -50
- package/dist/chunk-OQE5J4C6.js +0 -73
- package/dist/chunk-UUVG37B4.js +0 -244
- package/dist/chunk-V6HJFQZE.js +0 -228
- package/dist/clio-QLICPCF5.js +0 -25
- package/dist/configure-VEPX4NMX.js +0 -55
- package/dist/context-clear-S4ZJCQUX.js +0 -182
- package/dist/detail-A7JAVSIG.js +0 -98
- package/dist/evidence-4F5USFKH.js +0 -208
- package/dist/fleet-view-MN2VG4MR.js +0 -101
- package/dist/inventory-C26CFDRR.js +0 -101
- package/dist/preload-P6DGH2PZ.js +0 -13
- package/dist/slash-commands-ZXPJD64J.js +0 -92
- package/dist/tasks-IPAGMEIX.js +0 -36
- package/dist/tools-EFFEAIDP.js +0 -28
- package/dist/verify-FWYGPKMR.js +0 -29
- package/dist/wiki-generate-743CIGJW.js +0 -476
|
@@ -31,7 +31,7 @@ At submit time, Clio captures a context snapshot and persists a slim JSONL recor
|
|
|
31
31
|
|
|
32
32
|
Every snapshot records the divergence between the two accountings. `estimatedTokens` is the chars/4 prompt-side total the snapshot was captured with and is never rewritten by a reconcile; `reconciledTokens` is the provider's own prompt count for the call, with cached prompt tokens folded back in; `divergenceRatio` is the second over the first. A ratio above 1 means the estimator is under-counting what the backend charges for the same messages.
|
|
33
33
|
|
|
34
|
-
The reconciled figure is not only a display value
|
|
34
|
+
The reconciled figure is not only a display value; it governs compaction verdicts at the pre-submit trigger, the post-tool continuation guard, and the preflight overflow check. When no live anchor is trusted—such as before the first provider response, after a session reset, or when target, runtime, model, endpoint, or message history diverges—accounting falls back to the conservative legacy estimator. While a live anchor is trusted, the floor is structural (the breakdown sum of prompt, messages, pending input, and tool schemas), pricing material the attested call never saw without letting provider counts fall below structural reality. Live provider accounting counts measured prompt schemas once within the anchored history, avoiding false pressure from duplicate schema charges. It prices independent positive prompt and tool growth without netting shrinkage against growth, and preserves the post-reconcile message tail through working-set eviction replay. A working-set projection subtracts the tokens the eviction planner priced out and re-anchors on the projected message list rather than discarding the attestation, so post-eviction accounting remains provider-anchored. A summary compaction rewrites the conversation the attestation described, so it drops the anchor and the next provider call re-establishes it.
|
|
35
35
|
|
|
36
36
|
Session metadata enforces session format version 4 (`CURRENT_SESSION_FORMAT_VERSION = 4`). Version 4 is additive: it adds the `contextEviction` and `contextRecall` records and changes no existing entry. A version 3 session therefore migrates to 4 in place when Clio opens it, and no entry is rewritten. Only a session written by a newer build is refused, with an error naming the version it read and pointing at upgrading. The bump is one-way for the operator: a 0.3.3 binary cannot open a session this release wrote.
|
|
37
37
|
|
|
@@ -41,7 +41,7 @@ The `/context` overlay and footer meter read the same ledger categories in displ
|
|
|
41
41
|
|
|
42
42
|
Auto-compaction is controlled by `context.compaction.threshold`. Pressure is `budgeted_tokens / context_window`, where the budgeted figure is the reconciled total when the provider has attested one and the chars/4 estimate otherwise. The default threshold is `0.8`.
|
|
43
43
|
|
|
44
|
-
Crossing that threshold
|
|
44
|
+
Crossing that threshold first applies reversible working-set eviction without a model call. If pressure remains high, an LLM summary replaces older material in model replay. Recall remains available on demand; it is not an automatic compaction stage. Both mechanisms preserve the raw ledger by default.
|
|
45
45
|
|
|
46
46
|
### 1. Working-set eviction
|
|
47
47
|
|
|
@@ -53,7 +53,7 @@ If the projection drops pressure below the threshold, Clio sends the request and
|
|
|
53
53
|
|
|
54
54
|
### 2. Recall
|
|
55
55
|
|
|
56
|
-
An evicted body comes back on demand
|
|
56
|
+
An evicted or summarized tool-result body comes back on demand. `context(scope="recall", ref="<turnId>")` returns its persisted body through the observation envelope and appends a `contextRecall` entry. Omit `ref` to discover historical results with `query`, `limit`, and `offset`; discovery does not append a recall record. Operators use `/context recall <ref>`, which prints the body to the transcript without putting it into model context. Content removed by older destructive compaction or masking cannot be recovered.
|
|
57
57
|
|
|
58
58
|
A recall does not un-evict. The marker stays byte-identical where it was, so the provider prefix cache is untouched, and repeated recalls of the same ref are the churn signal the `/context` overlay reports.
|
|
59
59
|
|
|
@@ -63,7 +63,9 @@ Offline replay does not infer those explicit decisions from a later read of the
|
|
|
63
63
|
|
|
64
64
|
If pressure remains above the threshold after eviction, Clio runs the summary compaction path: it calls the summarization model, appends a `compactionSummary` entry, refreshes projected replay messages from the session, and continues. This is the only mechanism that spends tokens and the only one whose output is a lossy paraphrase, which is why it runs last.
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
Compaction projects the active-path working set before counting tokens, choosing a cut, or serializing the summary request. Evicted bodies and thinking therefore stay excluded from the summarizer as well as ordinary replay; the raw ledger remains available for exact recall. The first pass searches from the start of the active path. Later passes search strictly after the previous `compactionSummary`, using the prior checkpoint and retained suffix as canonical context for one cumulative replacement. Compaction retains selected verified skill text, exact operator instructions verbatim, canonical active replay, complete tool batches (keeping the full tool call and result batch intact rather than cutting mid-batch), and prior retained suffixes across iterative checkpoint boundaries. This ensures essential task constraints and verified context persist across repeated checkpoints without over-promising that every oversized model task will fit. Each summary request budgets the complete prompt and its bounded output against the resolved model window.
|
|
67
|
+
|
|
68
|
+
A summary that reaches its model output limit is incomplete and cannot replace the current checkpoint. Its reported usage remains recorded as a failed compaction call. Manual compaction preserves the latest operator request verbatim when a split removes it, even after the active turn has settled. Esc and Ctrl+C cancel manual and pre-submit compaction through the same signal as the production summary call; canceling pre-submit compaction also stops the pending chat submission. Post-tool continuation forwards the engine abort signal, and ACP session cancellation reaches compaction before the chat stream starts. Session reset and disposal abort outstanding summaries. Compaction checks cancellation before invocation, before accepting a response, and before publication, so a late response cannot become a checkpoint. These checks do not establish semantic summary quality, which requires separate model evidence.
|
|
67
69
|
|
|
68
70
|
Manual `/context compact`, `CLIO_CODER_FORCE_COMPACT=1`, and overflow recovery force the summary path directly and skip every pre-stage. The overflow guard runs before the user turn is committed, so a blocked oversized request does not leave an unanswered user entry in the ledger.
|
|
69
71
|
|
|
@@ -187,17 +189,17 @@ Settings validation is strict: an older file still carrying the removed `compact
|
|
|
187
189
|
|
|
188
190
|
Project guidance is resolved from the filesystem root to the working directory. An ordinary `CLIO-CODER.md` adds a layer for its directory and descendants. `CLIO-CODER.override.md` starts a replacement boundary: it wins over `CLIO-CODER.md` in the same directory, discards all handbook layers inherited from ancestors, and remains effective below that directory. Ordinary handbooks in deeper directories may add new layers after the override. A sibling outside the override's subtree keeps its own inherited chain.
|
|
189
191
|
|
|
190
|
-
For example, a session in `repo/src/parser/` loads `repo/src/CLIO-CODER.override.md` followed by `repo/src/parser/CLIO-CODER.md`; it does not load `repo/CLIO-CODER.md`. A session in `repo/docs/` still loads `repo/CLIO-CODER.md`.
|
|
192
|
+
For example, a session in `repo/src/parser/` loads `repo/src/CLIO-CODER.override.md` followed by `repo/src/parser/CLIO-CODER.md`; it does not load `repo/CLIO-CODER.md`. A session in `repo/docs/` still loads `repo/CLIO-CODER.md`. Selected readable, non-whitespace-only handbooks are ordinary authored Markdown: arbitrary headings and a missing project identity are accepted, and source bytes are preserved. A strict structured projection is optional and may be absent; it never fabricates a project name or rules. Surviving source layers render ancestor-to-descendant with explicit paths, subject to the preload budget below.
|
|
191
193
|
|
|
192
|
-
An
|
|
194
|
+
An empty or unreadable override fails closed. Clio reports that file but does not reactivate the inherited or same-directory handbook it replaced. Ordinary Markdown does not have to satisfy the generated-handbook schema. `clio-coder config inspect` lists every effective handbook and its layer number.
|
|
193
195
|
|
|
194
196
|
Handbook resolution is read-only. `/context init` and its CLI form are the only commands that author or update the exact `CLIO-CODER.md` in the current directory; `/context refresh` touches neither standard nor override handbooks. Neither command rewrites an inherited file or an override. A same-directory override therefore continues to shadow a standard handbook created or updated by init until the operator removes the override. Normal reset preserves both handbook names; `context reset --all` may remove the local standard `CLIO-CODER.md` after its second confirmation but always preserves `CLIO-CODER.override.md` as operator-authored context.
|
|
195
197
|
|
|
196
198
|
## Project-context preload class
|
|
197
199
|
|
|
198
|
-
The compiled session prompt
|
|
200
|
+
The compiled session prompt uses one bounded selector in `src/domains/prompts/preload.ts`. Small rendered inputs remain exact; oversized authored handbooks retain safe exact prefixes within 8,000 UTF-16 units and 220 rendered lines, including metadata. Allocation favors nearest layers and renders included layers ancestor-first. It no longer replaces oversized guidance with a lossy synopsis. Model-facing omission notices identify source paths and included/omitted physical line ranges with retrieval instructions. Captured-source hashes are retained separately in preload classification and accounting/manifest metadata; they are not printed as per-source hashes in those notices. The conservative prefix scanner preserves line endings, whitespace, Unicode, and complete command lines; an oversized first block may leave no authored excerpt. This is incomplete guidance, not a complete policy. Reporting surfaces share the selection:
|
|
199
201
|
|
|
200
|
-
- `/context init` and `clio-coder context init`
|
|
202
|
+
- `/context init` and `clio-coder context init` report full or partial preload, included UTF-16 units and rendered lines, and source omission accounting; they warn when a full preload is within 10% of either limit.
|
|
201
203
|
- `clio-coder config inspect` shows the shared preload class and layer position on every effective handbook entry.
|
|
202
204
|
- The `/context` overlay shows a `project preload:` line under the category legend once a session prompt has compiled, followed by the effective handbook path(s): one `handbook:` line for a single file, or a `handbooks (ancestor → nearest):` list when layered handbooks apply. Paths render workspace-relative; a handbook above the workspace keeps a `~`-shortened or absolute path.
|
|
203
205
|
|
|
@@ -209,13 +211,13 @@ flag `--wiki` is the only refresh path that may update the Markdown wiki, and
|
|
|
209
211
|
it only runs when an existing wiki metadata file is present. Regenerating or
|
|
210
212
|
updating the exact local standard handbook stays with `/context init`.
|
|
211
213
|
|
|
212
|
-
`clio-coder context init` is model-driven by default
|
|
214
|
+
`clio-coder context init` is model-driven by default; `--heuristic` selects deterministic offline generation. Plain init preserves an existing authored handbook. When a generator produces a candidate, it writes a review proposal under `.clio-coder/proposals/` with adjacent JSON recording generation telemetry, source hash, and proposal hash. `--propose` never publishes, even when no handbook exists. `--apply` and `--rewrite` explicitly publish generated updates or replacements. Publication provenance changes only when the handbook is published. Generated drafts still pass strict proposal and serialization validation; accepting ordinary authored Markdown does not relax those checks.
|
|
213
215
|
|
|
214
216
|
When bootstrapping across local runtimes such as `llamacpp` where strict grammar/schema enforcement might be rejected by the endpoint, generator logic retries automatically using a bounded prompt-parser fallback. If `--rewrite` was requested but the model generation fails to produce a valid handbook rewrite, `clio-coder context init` prints a notice and exits with code 1 rather than leaving an inconsistent state.
|
|
215
217
|
|
|
216
218
|
## Generated handbook structure and verification expectations
|
|
217
219
|
|
|
218
|
-
During handbook generation (`context init` and `clio-coder context init`), Clio derives structural sections
|
|
220
|
+
During handbook generation (`context init` and `clio-coder context init`), Clio derives structural sections from workspace manifests and toolchains. Starter project-wide rules come only from scanned project-wide instruction locations and explicitly opted-in global Codex guidance; directory-scoped skills, examples, and nested instructions remain evidence with their original scope. Declared verification commands are suggestions, not evidence that they were executed:
|
|
219
221
|
|
|
220
222
|
- **Context retrieval**: Derived from the codewiki index, naming primary entry points and directing agents to use `code_nav` for navigation. To prevent staleness across repository mutations, exact volatile file counts are omitted.
|
|
221
223
|
- **Verification expectations**: Synthesized from declared toolchain configuration and manifest files:
|
|
@@ -257,26 +259,19 @@ Source coverage spans TypeScript, JavaScript, Python, Rust, Go, C, C++, CUDA
|
|
|
257
259
|
as `package.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, `pom.xml`,
|
|
258
260
|
`CMakeLists.txt`, `Gemfile`, and `*.csproj`.
|
|
259
261
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
and merges regex import extraction
|
|
263
|
-
tree-sitter parse fails for one file, that file falls back to the available
|
|
264
|
-
regex extractor instead of aborting the whole build. C# is covered by the
|
|
265
|
-
tree-sitter C# grammar.
|
|
262
|
+
Codewiki reconciliation runs in a worker under the coordinator’s artifact lease. When the selected input is the exact committed index read under that lease, the coordinator sends an artifact reference and recorded line total instead of cloning the parsed index between threads. An unchanged reconciliation returns only its fingerprint; stale and incremental paths load the artifact in the worker. Reset shares the writer queue and lease, so admitted writes finish before reset removes their output and later incremental notifications cannot recreate an absent index.
|
|
263
|
+
|
|
264
|
+
Extraction is async and tree-sitter-first. Clio loads WASM grammars for the ten source languages above, extracts symbols/imports/exports, and merges available regex import extraction. A failed parse falls back to the available regex extractor for that file. Python edges distinguish relative import levels and absolute package imports, using package initializer evidence; they describe a static source graph and do not execute import hooks or infer arbitrary PYTHONPATH settings. Fingerprint migration also reconciles old edges when source bytes are unchanged.
|
|
266
265
|
|
|
267
266
|
Ambiguous `.h` files are classified deterministically by `classifyCHeaderLanguage` (`src/core/c-header-language.ts`). The scanner removes comments before checking C++-only standard-library includes, and removes comments and literals before checking C++ syntax markers such as templates, namespaces, class/member declarations, scope resolution, C++ casts, and C++ qualifiers. If any C++ marker is present, the header is indexed as `c++`; otherwise, it defaults to `c`. This guarantees that both full indexing and incremental file syncs assign identical language tags to `.h` files. Declaration-only C/C++ APIs are indexed so header-heavy MPI, CUDA, and scientific libraries remain navigable even when implementations live elsewhere.
|
|
268
267
|
|
|
269
|
-
|
|
270
|
-
name. Successful file-mutating tools report changed paths through the
|
|
271
|
-
middleware observer. The context domain coalesces those paths, checks per-file
|
|
272
|
-
content hashes and reparses only changed files (`perf(context)` optimization),
|
|
273
|
-
reads only the changed indexable files for path-based updates, replaces their file and symbol records, removes
|
|
274
|
-
deleted records, and rebuilds edges from the merged import set. Non-indexable
|
|
275
|
-
paths are no-ops.
|
|
268
|
+
Successful file-mutating tools report changed paths through a coalesced, serialized observer queue. Path updates can reuse unchanged parse records and reparse changed files, but publishing a new global fingerprint requires full source-content reconciliation so an unnotified edit cannot be certified as current. The coordinator brackets reconciliation with source-byte fingerprints and retries an unstable scan up to three times; unreadable or persistently changing inputs prevent certification. An unchanged notification retains the previous global baseline instead of certifying unrelated files. Deleted records are removed and import edges are rebuilt from the reconciled records. This reduces reparsing work, not the source reads needed to establish global freshness.
|
|
276
269
|
|
|
277
270
|
### Architecture seed
|
|
278
271
|
|
|
279
|
-
`clio-coder context map` derives an archify architecture specification from the structural index with no model call and writes it to `.clio-coder/artifacts/maps/<repo>.architecture.json` (or `--out <path>`).
|
|
272
|
+
`clio-coder context map` derives an archify architecture specification from the structural index with no model call and writes it to `.clio-coder/artifacts/maps/<repo>.architecture.json` (or `--out <path>`). Map generation reconciles the existing structural index before mapping; missing index refuses, naming `clio-coder context index`. Pinned source citations require that the workspace is clean at repository root, indexed file bytes match current files and Git blobs, the origin remote is a GitHub URL, and `HEAD` is a full revision. When those conditions hold, components carry `sources` naming indexed files and declared symbol lines. Unknown or dirty source states cleanly produce usable uncited architecture seeds; `--json` reports the path, component and connection counts, repository metadata, reconciled index status, and source state (`clean`, `dirty`, or `unknown`). Component IDs remain unique across internal and external names, connection IDs are unique, and matching directory/package names retain separate import destinations and counts. Placement is layered by import direction with explicit routes for archify's standard profile; composition warnings may still require operator edits.
|
|
273
|
+
|
|
274
|
+
Clio never renders the seed directly: the architecture mapping pipeline separates deterministic seed generation (`context map`), model-authored refinement (`archify` skill), validation and delivery (`archify validate` / `deliver`), and review. Standard validation checks schema conformance and layout composition, while verification commands check path and symbol citations against the workspace. Mechanical validation passes do not establish semantic claims or visual layout quality: source review assesses semantic claims, while visual review in a browser assesses layout presentation. Custom model-authored maps can remain layout-invalid until refined. When the seed carries pinned repository evidence, pass `--repo-root .` to re-verify every cited path against the working tree; omit that option for an unpinned seed.
|
|
280
275
|
|
|
281
276
|
### Markdown Wiki & `code_nav` Resolution
|
|
282
277
|
|
|
@@ -293,14 +288,12 @@ page's plan entry, its anchor sources, and the sibling paths it may link to. The
|
|
|
293
288
|
repository-wide payload, including the codewiki digest, appears only in the
|
|
294
289
|
planning prompt. Because a static prompt is re-sent on every round of a run, this
|
|
295
290
|
is what keeps prefill cost from growing quadratically with the size of the wiki.
|
|
291
|
+
Ordinary planner, page, and whole-run time and tool estimates are advisory across
|
|
292
|
+
generation, not automatic aborts. An explicit caller deadline (`timeout_ms`) or
|
|
293
|
+
operator cancellation remains authoritative. Failed writers remain pending; admission
|
|
294
|
+
rejection does not consume a writer attempt.
|
|
296
295
|
|
|
297
|
-
`_plan.json` is the skeleton and the
|
|
298
|
-
from the codewiki index, so a usable plan exists before any model runs; the
|
|
299
|
-
planning dispatch may merge, split, rename, drop, or re-anchor entries by
|
|
300
|
-
rewriting it, and a malformed rewrite falls back to the candidate. The harness
|
|
301
|
-
owns each entry's status and rewrites the file after every page, so a run that
|
|
302
|
-
ends early records exactly which pages are still owed. Staging survives such a
|
|
303
|
-
run and the next one resumes from it.
|
|
296
|
+
`_plan.json` is the skeleton and checkpoint. A deterministic codewiki plan exists before model dispatch; the planner may merge, split, rename, drop, or re-anchor entries, with malformed rewrites falling back to the candidate. The harness owns completion and attempts. Changes to authored title, intent, or source set reset progress; dropped planned pages are checkpointed as retirements and removed during assembly. A resumed checkpoint checks source evidence and conservatively requeues pages when it is missing or changed. Resolved and requested coverage depth (`auto`, `simple`, `medium`, `detailed`) are harness-owned. Explicit upgrades and downgrades requeue coverage with existing prose retained, while dispatch receipts remain untouched. Default interrupted and partial retries retain saved depth; completed auto updates may increase coverage as the codebase grows. Every depth requires the same evidence accuracy.
|
|
304
297
|
|
|
305
298
|
Every page opens with repaired front matter. Its metadata model has `title`,
|
|
306
299
|
`summary`, `sources`, `symbols`, `tests`, `invariants`, and `validate`, but the
|
|
@@ -310,20 +303,23 @@ directory `index.md`, and the task-routing table are generated from the repaired
|
|
|
310
303
|
values after each run, so navigation cannot drift or miss a page and no writer
|
|
311
304
|
has to remember to update it.
|
|
312
305
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
306
|
+
Both original writer output and completed saved pages pass nonmutating mechanical
|
|
307
|
+
validation before completion or reuse. Supported missing or escaping paths, invalid
|
|
308
|
+
line ranges, malformed source/test metadata, and empty bodies keep pages pending.
|
|
309
|
+
Canonical metadata and body citations participate in source-byte dependencies,
|
|
310
|
+
including JS source aliases. Failed refreshes retain dependencies; successful repairs
|
|
311
|
+
replace them so obsolete references can retire. Assembly mechanically repairs missing
|
|
312
|
+
headings, malformed front matter, dangling citations, and links, reporting repairs or
|
|
313
|
+
omission markers. Assembly repair alone does not establish completion: a page is complete
|
|
314
|
+
only after a successful writer dispatch and retention by assembly. Mechanical evidence
|
|
315
|
+
checks do not prove semantic claims or that the model read the source. Empty pages,
|
|
316
|
+
failed writers, and unplanned writer-added pages remain pending. Existing readable
|
|
317
|
+
prose can remain available after a failed update while its page stays pending and stale.
|
|
318
|
+
Writer-discovered source and test dependencies survive routing repair for later update scoping.
|
|
320
319
|
|
|
321
|
-
`meta.json` records
|
|
322
|
-
model label, a content hash over the page tree, the page list, and the plan.
|
|
323
|
-
`generation.pagesPlanned` and `generation.pagesWritten` say whether a run
|
|
324
|
-
finished; when they differ, `clio-coder context wiki --update` completes the rest.
|
|
320
|
+
`meta.json` records content publication time and model provenance, source evidence, the page-tree content hash, page list, and plan. `generation.pagesPlanned` and `generation.pagesWritten` describe completeness. A `generated` outcome means content was published; `noop` means Markdown bytes were unchanged. Either can still have pending pages. Unchanged-content attempts persist plan progress and attempts without changing content-publication time or model provenance; successful unchanged-content writers can validate existing prose. The CLI reports `incomplete` when any pages remain pending, with separate published, complete, and pending counts and explicit recovery instructions.
|
|
325
321
|
|
|
326
|
-
`clio-coder context wiki` creates a wiki
|
|
322
|
+
`clio-coder context wiki` creates or updates a wiki and first refreshes a stale structural index. `--update` requests update mode explicitly; it refreshes stale pages based on changed source dependencies, but is not a promise to overcome exhausted attempts. `clio-coder context wiki --retry-pending` retries each pending page once, including exhausted pages, without erasing cumulative attempts or replanning at the same depth. If no saved plan exists, `--retry-pending` produces an actionable failure without spending model calls. `--status` reads status and retained failure diagnostics without a model call. Metadata is prepared beside staged pages before publication. After process interruption, the next generation validates live and previous content/metadata pairs and restores a valid previous pair when live is absent or incomplete, preserving a damaged live tree separately. The wiki lock serializes generation, but other editors are not locked out and readers can observe the rename gap: this is process-crash recovery, not atomic directory exchange or power-loss durability. `clio-coder context refresh --wiki` rebuilds codewiki and updates only an existing wiki.
|
|
327
323
|
|
|
328
324
|
### Lifecycle Matrix
|
|
329
325
|
|
|
@@ -335,19 +331,12 @@ finished; when they differ, `clio-coder context wiki --update` completes the res
|
|
|
335
331
|
| `/context init` or `clio-coder context init` | Performs a full codewiki rebuild before generating, preserving, proposing, or previewing `CLIO-CODER.md`; writes state with the fingerprint and codewiki version when it writes state. | No wiki generation. |
|
|
336
332
|
| `/context refresh` or `clio-coder context refresh` | Performs a full codewiki rebuild and writes state. Does not touch `CLIO-CODER.md`. | If an existing wiki is stale and `--wiki` was not passed on the CLI, prints a hint to run `clio-coder context refresh --wiki` or `clio-coder context wiki --update`. |
|
|
337
333
|
| `clio-coder context refresh --wiki` | Performs the same full codewiki rebuild and state write. | Updates an existing wiki through the model-backed page dispatches. No wiki metadata means no wiki model call. |
|
|
338
|
-
| `clio-coder context wiki` | Automatically refreshes the codewiki index if stale before composing the wiki prompt. | Plans,
|
|
334
|
+
| `clio-coder context wiki` | Automatically refreshes the codewiki index if stale before composing the wiki prompt. | Plans, dispatches each owed page, validates completion outcomes, and publishes assembled content or records unchanged-content progress; failed pages remain pending. |
|
|
339
335
|
| `clio-coder context wiki --status` | No index rebuild. | Reads metadata and reports page count, update time, recorded git head, git-head drift, and how many planned pages remain unwritten. |
|
|
340
336
|
|
|
341
337
|
### Staleness
|
|
342
338
|
|
|
343
|
-
Codewiki staleness is
|
|
344
|
-
`isStale(prev, curr)` compares only `fingerprint.treeHash`. The fingerprint
|
|
345
|
-
hash is mtime-aware: it walks the repository, excludes generated/local-state
|
|
346
|
-
directories and lock/archive files, and hashes each included relative path,
|
|
347
|
-
file size, and floored `mtimeMs`. The fingerprint also records `gitHead` and
|
|
348
|
-
`loc`; `loc` comes from the codewiki artifact when available, otherwise from a
|
|
349
|
-
line count over source extensions. Those fields are reporting data, not the
|
|
350
|
-
stale predicate.
|
|
339
|
+
Codewiki staleness uses `isStale(prev, curr)`, comparing `fingerprint.treeHash`. The v3 fingerprint hashes each included relative path and its source-byte digest, so whitespace-only edits and same-size edits with restored timestamps invalidate it. It covers the shared visible indexable file set and excludes ignored/generated/local-state paths. Read errors fail certification. Cached status checks may reuse a fingerprint for five seconds; individual reads remain synchronous even in the cooperatively yielding path. `gitHead` and `loc` remain reporting fields. Older fingerprint domains invalidate once and trigger reconciliation; this is not an atomic filesystem snapshot.
|
|
351
340
|
|
|
352
341
|
`.clio-coder/state.json` stores the fingerprint and optional `codewikiVersion`.
|
|
353
342
|
Legacy v2/v3/v4 codewiki files can still be read as degraded v5 artifacts, but
|
|
@@ -355,16 +344,12 @@ their missing or deliberately invalidated per-file hashes make `codewikiNeedsBac
|
|
|
355
344
|
next session freshness check, `code_nav` demand load, wiki generation, or
|
|
356
345
|
explicit refresh rebuilds them into full v5.
|
|
357
346
|
|
|
358
|
-
Wiki staleness
|
|
359
|
-
head and the indexed source-tree hash used when the wiki content last changed.
|
|
360
|
-
Clio reports drift at the same git head when tracked or untracked source files
|
|
361
|
-
change, and combines committed and working-tree evidence in its changed-file
|
|
362
|
-
count. Older metadata without a source-tree hash retains the git-head-only
|
|
363
|
-
check. Git-less or unreadable git states degrade to `fresh` with a warning when
|
|
364
|
-
Clio cannot prove drift.
|
|
347
|
+
Wiki staleness uses separate bounded source-byte evidence, including README and configuration files beyond the structural index. Before/after capture and claimed-directory comparisons detect changed, added, or deleted inputs; changes during generation return previously written pages to pending. Capture is limited to 20,000 files and 128 MiB of source bytes. Missing, legacy, unreadable, or over-limit evidence cannot certify freshness, and unavailable Git evidence is conservative rather than treated as a clean diff. These observations do not form an atomic filesystem snapshot or a complete semantic input manifest.
|
|
365
348
|
|
|
366
349
|
### Surfacing and Navigation
|
|
367
350
|
|
|
351
|
+
Project-type markers use the type recorded in `state.json`, falling back to detection only when no state exists. The codewiki marker checks artifact presence and recorded source freshness without parsing the index on the prompt path. It does not validate artifact contents: `code_nav` and session freshness checks read the index and rebuild an unreadable artifact from source before using it.
|
|
352
|
+
|
|
368
353
|
The compiled prompt surfaces only markers, never the codewiki JSON or wiki page
|
|
369
354
|
contents. Fresh codewiki renders as `<codewiki>available; use code_nav</codewiki>`.
|
|
370
355
|
A stale codewiki marker adds `(stale; run /context refresh)`. A valid wiki marker
|
|
@@ -18,7 +18,7 @@ Source of truth is `src/domains/context/working-set/` (`contract.ts`, `fold.ts`,
|
|
|
18
18
|
| Ledger | The durable append-only session record (`current.jsonl`). The working-set layer appends to it and never rewrites it. |
|
|
19
19
|
| Evicted | A unit whose body the projection replaces with a marker. The ledger entry that holds the original body is untouched. |
|
|
20
20
|
| Offloaded | A result the observation envelope already wrote to a file because it exceeded the per-call cap. Its marker carries the pointer instead of a preview, and recall returns the pointer rather than inlining the file. |
|
|
21
|
-
| Recall | Readmitting an evicted body by ref, through `context(scope="recall", ref=...)` for the model or `/context recall <ref>` for the operator. |
|
|
21
|
+
| Recall | Readmitting an evicted or summarized tool-result body by ref, through `context(scope="recall", ref=...)` for the model or `/context recall <ref>` for the operator. |
|
|
22
22
|
| Marker | The byte-stable one-line stub the projection renders in place of an evicted body. It names the ref, the reason, the size, and the exact call that brings the body back. |
|
|
23
23
|
| Projection | A pure, in-memory transform from ledger entries to the entries the replay builder hands the model. `projectWorkingSet(entries, view)` is that function. |
|
|
24
24
|
|
|
@@ -118,19 +118,17 @@ The facts the rungs read come from `path-index.ts`, one deterministic pass over
|
|
|
118
118
|
|
|
119
119
|
## Recall
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
Exact recall is explicit and by ref for persisted tool results hidden by eviction or summary compaction. There is no automatic readmission. `context(scope="recall", query="...", limit=8, offset=0)` with `ref` omitted discovers eligible results in active-path ledger order. Query matches ref, tool, and path metadata; limit defaults to 8 and caps at 12. Rows include timestamps and evicted/summarized state. `nextOffset` continues the same query against the same active path and ledger state. Discovery does not append `contextRecall`.
|
|
122
122
|
|
|
123
|
-
`resolveRecall(entries, view, ref, activeLeafTurnId)` resolves
|
|
123
|
+
`resolveRecall(entries, view, ref, activeLeafTurnId)` resolves against the active path and compaction cut, returning the persisted tool-result body with the same field precedence as projection. It rejects malformed refs, unknown or other-branch refs, currently visible results, assistant thinking, and legacy destructively compacted bodies. It cannot recover bytes already removed from older logs.
|
|
124
124
|
|
|
125
|
-
|
|
126
|
-
- `not_on_active_path` when the session has no such turn on this branch, which includes a ref from a branch `/tree` abandoned.
|
|
127
|
-
- `not_evicted` when the unit is still in context. An assistant turn reports separately that thinking is not recallable.
|
|
125
|
+
Errors distinguish `invalid_ref`, `not_on_active_path`, and `not_evicted`; the last also covers unsupported or still-visible entries with a specific diagnostic.
|
|
128
126
|
|
|
129
127
|
The `not_on_active_path` and `not_evicted` messages end with the refs that can be recalled on the active path (tool results only, up to eight, then a count). `invalid_ref` reports only the malformed value. Clio deliberately lists valid refs instead of guessing a nearest ref, because similar time-ordered identifiers can name unrelated results.
|
|
130
128
|
|
|
131
|
-
An LLM summary
|
|
129
|
+
An LLM summary preserves discovery across its cut. The checkpoint carries a bounded `<recallable-refs>` preview for tool results hidden by compaction, including results that were never explicitly evicted, and points to omitted-ref discovery for the complete paginated inventory. Results after the cut retain their ordinary markers. Exact recall returns historical persisted content; reading the path again returns its current filesystem contents.
|
|
132
130
|
|
|
133
|
-
**A recall does not un-evict.**
|
|
131
|
+
**A recall does not un-evict.** For explicitly evicted results, the key stays in `view.evicted` and the marker stays byte-identical. Summarized results remain behind the compaction cut. In both cases the recalled body arrives at the tail inside the recall result. Readmitting it in place would duplicate the bytes and invalidate the provider prefix cache for everything after that point, which costs more than the recall saved.
|
|
134
132
|
|
|
135
133
|
That also makes recall the churn signal. `churn = recalls / itemsEvicted` over the active path. A high churn number means the policy keeps evicting content the session still needs, which is a reason to change the policy rather than to raise the threshold.
|
|
136
134
|
|
|
@@ -175,7 +173,7 @@ The retired `compaction.excludeLastTurns` key is not accepted by settings v2. Th
|
|
|
175
173
|
|
|
176
174
|
- **`/context` overlay.** A working-set section under the category legend: the configured policy with its state (`policy structural-v1 · no events yet` until the first event, `disabled` when `context.workingSet.enabled` is off, and `(last event by <policy>)` when the setting changed after an event), evicted item count, evicted tokens, event count, recall count, and churn. Evicted tokens render as one line after the legend rather than as a meter category, because they are outside the window rather than a slice of it.
|
|
177
175
|
- **Transcript.** An evicted tool row keeps its full body and gains a dim `evicted · <reason>` tag. The transcript shows the ledger, never the projection, so `/resume`, `/tree`, `/fork`, and the HTML export are unaffected by eviction.
|
|
178
|
-
- **`/context recall <ref>`.** Prints the ref,
|
|
176
|
+
- **`/context recall <ref>`.** Prints the ref, its evicted or summarized state, the token count, and any offload pointer, followed by the persisted body. Transcript only.
|
|
179
177
|
- **Prompt cache line.** Every applied event stamps `working_set_evict` on the next assistant entry's `promptCache.expectedColdReasons`. When the last settled run came back cold for that reason, the overlay adds `last cold turn: working-set eviction (expected)` and drops the shell-reused-but-backend-cold warning, because the cold turn is explained rather than surprising.
|
|
180
178
|
- **Notice.** One line per applied event: `[context engine] working set: N items evicted by <policy>; ~X -> ~Y tokens, recall by ref with context(scope="recall")`. The numbers are the plan's, priced over the visible ledger slice, and they are the same numbers the `contextEviction` entry, the `[Compaction] Reclaimed context` toast, and the overlay's `last compaction` line carry. The footer meter is a separate live estimate over the agent message list and can differ from them by the tool schemas and replay text it includes.
|
|
181
179
|
|
|
@@ -126,4 +126,4 @@ affected import site for no behavioral gain. A boundary rule should protect an
|
|
|
126
126
|
invariant. "Always import through the barrel" protects a preference.
|
|
127
127
|
|
|
128
128
|
What is *not* permitted is anything the six direction rules forbid, and those
|
|
129
|
-
stay enforced by the boundary checker that `
|
|
129
|
+
stay enforced by the boundary checker that `pnpm run lint` runs.
|
|
@@ -453,3 +453,13 @@ Only the field matching the record scope is present.
|
|
|
453
453
|
7. Prune stale records periodically.
|
|
454
454
|
|
|
455
455
|
Memory is meant to reduce repeated mistakes, not to become an unreviewed second instruction system.
|
|
456
|
+
|
|
457
|
+
## Convention retention and decision adherence
|
|
458
|
+
|
|
459
|
+
Remembering a convention starts with inspecting and citing its sources. Capture is selective. An existing source-grounded knowledge or procedural bank entry can be proposed by the operator through `/memory` with `p`, or promoted from an actual version-2 handoff export. Promotion persists an unapproved proposal; separate operator approval admits it to scoped, bounded selection. If no matching entry was captured, report that limit. A general request to remember does not approve an unseen record.
|
|
460
|
+
|
|
461
|
+
Approval, persistence, and fresh-session consumption are separate observations. Claim consumption only when the matching approved record is delivered; approval does not guarantee selection. Transcript recovery and unrelated memory are not evidence of durable convention delivery. Background memory reasoning is currently disabled; this workflow does not add a low reasoning setting.
|
|
462
|
+
|
|
463
|
+
An explicit no-edit task includes the handbook and every repository file. Do not substitute a handbook edit, note, handoff export, shell write, or delegated edit for reviewed memory. Explain retention steps that require writes outside the authorized scope.
|
|
464
|
+
|
|
465
|
+
Decision references and commit trailers establish attribution, not behavioral adherence. Before committing, agents are instructed to check the implementation against active decision semantics, including actual scalar types when a policy requires Python integers. A changed agent-owned policy requires an explicit same-key revision before commit; operator decisions remain operator-owned. This guidance does not guarantee model compliance.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
> **Visual blueprint:** The source checkout includes the complete
|
|
4
4
|
> [Pi SDK Boundary visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/pi_boundary_blueprint.html).
|
|
5
5
|
|
|
6
|
-
Clio Coder
|
|
6
|
+
Clio Coder pins Pi 0.85.1 as its provider, agent-loop, and terminal SDK. This
|
|
7
7
|
page records where Pi owns a reusable primitive and where Clio deliberately
|
|
8
8
|
keeps product behavior. Review this table on every Pi upgrade. An action marked
|
|
9
9
|
`Keep` is an explicit boundary decision, not an invitation to replace the
|
|
@@ -31,9 +31,9 @@ Clio-owned surface during a dependency bump.
|
|
|
31
31
|
| pi-ai `CredentialStore` and `Models.getAuth` | `src/domains/providers/auth/storage.ts` | Keep Clio ownership. | Clio's locked YAML store, damage control, target-first registry, and runtime overrides are product boundaries. |
|
|
32
32
|
| pi-ai `createModels`, `createProvider`, and `ModelsStore` | `src/domains/providers/**` | Keep Clio ownership. | Targets, nodes, probing, residency, ALCF, and fleet placement are Clio concepts rather than provider-keyed SDK state. |
|
|
33
33
|
| pi-ai `Provider.auth.oauth` | `src/engine/oauth.ts` | Route built-in OAuth through Pi and keep ALCF. | Pi owns provider OAuth implementations. Clio adds the ALCF science-provider flow. |
|
|
34
|
-
| pi-agent-core
|
|
35
|
-
| pi-agent-core `estimateTokens` and `estimateContextTokens` | `src/domains/session/compaction/tokens.ts` and `src/domains/session/context-accounting.ts` | Keep Clio
|
|
36
|
-
| pi-agent-core `
|
|
34
|
+
| pi-agent-core `findCutPoint` and `findTurnStartIndex` | `src/domains/session/compaction/cut-point.ts` | Keep the current implementation pending a tested adapter. | These helpers are public root exports in 0.85.1. They accept Pi v4 `Entry[]`; Clio uses its own `SessionEntry` union, ledger indexes, tool-batch boundaries, and small-session fallback. Reuse requires preserving those contracts through an entry/index projection, not a direct import substitution. |
|
|
35
|
+
| pi-agent-core `estimateTokens` and `estimateContextTokens` | `src/domains/session/compaction/tokens.ts` and `src/domains/session/context-accounting.ts` | Keep Clio's outer accounting. | Pi also anchors estimates to provider usage. Clio additionally accounts for framing, system prompts, tool schemas, pending input, usage invalidation, and the greater of projected and anchored totals. Both use heuristics for unmeasured content; neither character estimate guarantees an upper bound for every tokenizer. |
|
|
36
|
+
| pi-agent-core `generateSummary`, `generateSummaryWithUsage`, and `serializeConversation` | `src/domains/session/compaction/compact.ts` and `src/domains/session/compaction/branch-summary.ts` | Keep the current summary boundary pending a tested adapter. | The public summary generators accept `AgentMessage[]`, `Models`, and Pi harness context; `serializeConversation` accepts provider messages. Clio additionally owns bounded cumulative checkpoints, turn-prefix summaries, cancellation, usage settlement, and publication checks. The internal `SUMMARIZATION_SYSTEM_PROMPT` constant is not a public root export. |
|
|
37
37
|
| pi-agent-core `JsonlSessionRepo`, v4 `Session`, and `AgentHarness` | `src/engine/session.ts` and `src/domains/session/**` | Keep Clio ownership. | The on-disk ledger, active tree, fork behavior, receipts, and evidence are Clio's durable spine. |
|
|
38
38
|
| pi-agent-core `loadSkills`, `loadPromptTemplates`, `parseCommandArgs`, `substituteArgs`, and `formatSkillsForSystemPrompt` | `src/domains/resources/skills/loader.ts` and `src/domains/resources/prompts/loader.ts` | Keep Clio loaders and reuse leaf primitives when compatible. | Clio owns marketplace pinning, trust, evals, activation records, and prompt-source policy. Argument substitution can use Pi without replacing the loader. |
|
|
39
39
|
| pi-agent-core harness tools, `executeShellWithCapture`, and `sanitizeBinaryOutput` | `src/tools/**` | Keep Clio ownership. | Tool admission, observation budgets, safety rails, and result shaping apply across interactive, headless, ACP, and worker runs. |
|
|
@@ -49,19 +49,47 @@ Clio-owned surface during a dependency bump.
|
|
|
49
49
|
| pi-agent-core `streamProxy()` namespace metadata (0.84.2) and `ToolCall.namespace` | None | Decline. | Clio does not proxy assistant streams and does not use OpenAI Responses namespaced or deferred tools. |
|
|
50
50
|
| pi-ai `SimpleStreamOptions.toolChoice` (0.84.3, `auto` / `none`) | `src/engine/provider-payload.ts` and the `onPayload` hook in `src/interactive/turn-runtime.ts` and `src/engine/worker-runtime.ts` | Keep the Clio payload patch. | Clio needs both `none` and a named required tool across every dialect it serves, including generic OpenAI-compatible servers that reject object `tool_choice`. Splitting `none` onto the neutral option would leave two mechanisms for one concern. |
|
|
51
51
|
| pi-ai strict tool-schema conversion and null normalization (0.84.2) | `src/engine/ai.ts` `validateEngineToolArguments` | Inherit. | No Clio tool sets `constrainedSampling`, so strict conversion is inert. `null` for an optional non-nullable argument is now dropped instead of rejected; locked by the engine lifecycle contract. |
|
|
52
|
-
| pi-ai OpenAI-compatible reasoning replay and signature serialization fixes (0.84.3, 0.84.4) | `src/engine/apis/openai-completions.ts` | Inherit. | The wrapper delegates `stream` and `streamSimple` to Pi's adapter,
|
|
52
|
+
| pi-ai OpenAI-compatible reasoning replay and signature serialization fixes (0.84.3, 0.84.4) | `src/engine/apis/openai-completions.ts` | Inherit. | The wrapper delegates `stream` and `streamSimple` to Pi's adapter. Clio persists raw assistant content blocks, including `thinkingSignature`, and restores them through rich replay; Pi decides whether signatures remain usable for the selected model and transport. |
|
|
53
53
|
| pi-ai Anthropic server-side refusal fallback with returned-model pricing (0.84.3) | `src/interactive/turn-context.ts` `reconcileUsage` and `src/domains/observability/trace-store.ts` | Inherit. | Usage and cost arrive already priced for the returned model; Clio records `message.model` as reported. `fallbacks` is only sent for catalog models that declare `allowedFallbackModels`. |
|
|
54
54
|
| pi-tui capability overrides (`PI_HYPERLINKS`, `PI_IMAGE_PROTOCOL`, `PI_TRUE_COLOR`, `setCapabilityOverrides`) and `PI_TUI_ESC_TIMEOUT` (0.84.2, 0.84.4) | `src/interactive/theme/tokens.ts` truecolor detection | Decline. | These govern pi-tui's own image, hyperlink, and escape-sequence handling. Clio's theme detects truecolor from `COLORTERM` and `TERM` independently and does not consume pi-tui capability detection. |
|
|
55
55
|
| pi-tui `TuiAltScreenOptions.copyOnSelect` / `copySelection` and transcript search (`tui.altScreen.search*`, 0.84.2, 0.84.4) | `src/interactive/interactive-shell.ts` alt-screen construction and `src/domains/config/keybindings.ts` | Inherit defaults. | Selection copy stays on by default. Search is pi-tui's viewport listener and runs before Clio's router; `ctrl+g` advances a match only while the search overlay is focused, so the Clio leader chord is unavailable during a search and nowhere else. Locked by the engine lifecycle contract. |
|
|
56
56
|
| pi-tui alternate-screen direct-row painting (0.84.2) | `src/engine/instrumented-tui.ts` | Inherit. | `compositeOverlays`, `extractCursorPosition`, and `applyLineResets` still run inside one `doRender`, so Clio's frame and phase measurements are unchanged. Locked by the engine lifecycle contract. |
|
|
57
57
|
|
|
58
|
+
## 0.85.1 integration
|
|
59
|
+
|
|
60
|
+
The three SDK packages stay on the same exact version. The older Anthropic
|
|
61
|
+
client override is removed so Pi can use its declared `@anthropic-ai/sdk`
|
|
62
|
+
0.123.0 dependency. The repository's esbuild override remains in the pnpm
|
|
63
|
+
workspace configuration.
|
|
64
|
+
|
|
65
|
+
| Pi change | Clio adaptation or behavior |
|
|
66
|
+
| --- | --- |
|
|
67
|
+
| OpenRouter's catalog can select Anthropic Messages | With no explicit target URL, synthesis keeps Pi's catalog API, URL, compatibility flags, and effort map together. Explicit URLs retain the runtime's OpenAI-completions contract; if the catalog uses another API, synthesis omits its transport-specific compatibility and effort metadata. Unknown models use the OpenAI fallback. The engine already dispatches by the synthesized model's API. |
|
|
68
|
+
| `AssistantMessage.providerThinkingLevel` and Anthropic `supportsMidConvoEffort` | Persist and restore historical provider effort alongside raw content in `assistantSessionPayload` and rich replay. A regression constructs a native Anthropic request after JSON persistence and confirms that earlier high/medium turns retain their effort before the active high-effort marker. Pi owns request assembly and signed-thinking recovery. |
|
|
69
|
+
| `ScrollView` track/thumb style callbacks and `OverlayHandle.getBounds()` | Use the public track and thumb styling callbacks. Overlay wrappers delegate bounds to the currently mounted frame. Regressions exercise rendered bounds, resize, visibility, replacement, ordinary/Alt wheel scrolling, and following the transcript end. |
|
|
70
|
+
| Component mouse handling, optional editor/input hooks, and alt-screen controls | Inherit compatible Pi component behavior. Custom Clio components still need their own mouse wiring where they do not compose a mouse-aware Pi component. `clearOnShrink` remains false by default; removal of its environment lookup does not invert that default. |
|
|
71
|
+
| `AgentTool.replay` | Leave the optional policy unset. Clio uses `Agent`; the new durable harness owns recovery replay and defaults omitted policies to `never`. |
|
|
72
|
+
| OpenAI-compatible `vllmPriority` | Available through Pi's optional compatibility setting. This upgrade does not add a Clio scheduler-priority setting. |
|
|
73
|
+
|
|
74
|
+
The environment-key parity helper also gains the existing Pi convention
|
|
75
|
+
`qwen-token-plan-individual` → `QWEN_TOKEN_PLAN_API_KEY`. This corrects a
|
|
76
|
+
Clio parity gap; it does not add a built-in Qwen runtime.
|
|
77
|
+
|
|
78
|
+
Pi's assistant frame encoder/reducer is a public optional API, not a persistence
|
|
79
|
+
feature Clio gains simply by updating its streaming adapter. Clio already strips
|
|
80
|
+
cumulative snapshots from worker deltas in `src/worker/event-projection.ts`;
|
|
81
|
+
adopting frames needs a measured benefit and must preserve terminal messages
|
|
82
|
+
separately. Pi's internal compaction file-list helpers are not exported through
|
|
83
|
+
the package's public root or an allowed subpath, so they are not currently a
|
|
84
|
+
supported way to remove Clio's small file-list formatter.
|
|
85
|
+
|
|
58
86
|
## Thin-wrapper watch list
|
|
59
87
|
|
|
60
88
|
Review these files first when Pi changes. They intentionally contain little
|
|
61
89
|
behavior and should not grow another implementation of an SDK primitive.
|
|
62
90
|
|
|
63
|
-
- `src/engine/api-registry.ts` owns Clio's ordered dispatcher using Pi's public lazy API factories and
|
|
64
|
-
- `src/engine/env-api-keys.ts` pins Pi 0.
|
|
91
|
+
- `src/engine/api-registry.ts` owns Clio's ordered dispatcher using Pi's public lazy API factories and the provider catalogs selected in `src/engine/models.ts` for Clio's built-in runtimes. Its dynamic `/compat` bridge exists only for configured out-of-tree runtime plugins that require Pi's process-global registry identity.
|
|
92
|
+
- `src/engine/env-api-keys.ts` pins Pi 0.85's synchronous environment-key and ambient-credential discovery behind a parity contract; revisit it on every Pi upgrade until Pi exports that helper directly.
|
|
65
93
|
- `src/engine/apis/openai-completions.ts` maps compatibility flags, sampling parameters, and thinking budgets. Its Clio deltas are the local-runtime guards and sentinel, Harmony, and Gemma filters.
|
|
66
94
|
- `src/engine/provider-payload.ts` retains only the OpenAI Responses reasoning-summary patch.
|
|
67
95
|
- `src/engine/types.ts` and `src/engine/ai.ts` expose erased Pi types and `StringEnum` behind the engine boundary.
|
|
@@ -75,7 +103,9 @@ Run these contracts first on a Pi bump, before the full gate:
|
|
|
75
103
|
|
|
76
104
|
- `tests/contracts/engine-lifecycle.test.ts` (agent-loop ordering, reset, tool-argument normalization, keybinding table, alt-screen render seams)
|
|
77
105
|
- `tests/contracts/provider-transport.test.ts`
|
|
106
|
+
- `tests/contracts/openrouter-transport.test.ts`
|
|
78
107
|
- `tests/contracts/provider-context-boundary.test.ts`
|
|
108
|
+
- `tests/contracts/rendering-invariants.test.ts`
|
|
79
109
|
- `tests/contracts/gemma-channel-filter.test.ts`
|
|
80
110
|
- `tests/contracts/tool-boundaries.test.ts`
|
|
81
111
|
- `tests/contracts/session-durability.test.ts`
|
|
@@ -16,7 +16,7 @@ window source, prompt-input epoch, resolved session inputs, and the exact
|
|
|
16
16
|
attached tool-schema bytes. `mainPromptCacheIdentity` in
|
|
17
17
|
`src/interactive/prompt-cache-identity.ts` owns that list.
|
|
18
18
|
|
|
19
|
-
The compiled prompt is reused byte-for-byte on ordinary submits.
|
|
19
|
+
The compiled prompt is reused byte-for-byte on ordinary submits. Handbook source bytes and prompt inputs are captured per session, so ordinary recompilation does not silently reload edited files. Init, refresh, and reset invalidate the session snapshot and prompt cache, including partial-write failure paths; config hot-reload also invalidates inputs. Path-scoped rules can recompile when a matching file enters working context. When recompilation changes the text, the ledger records `promptRecompiled` with previous hash, new hash, and token estimate. The bounded handbook preload retains exact safe prefixes; captured-source hashes belong to its accounting/manifest metadata. Model-facing omission notices identify source paths and line ranges, and later filesystem retrieval reads current bytes.
|
|
20
20
|
|
|
21
21
|
## Section order: stable prefix first
|
|
22
22
|
|
|
@@ -55,7 +55,7 @@ In addition to project root `CLIO-CODER.md` handbooks, Clio supports directory-s
|
|
|
55
55
|
- Sibling directories outside the subtree continue to inherit from the root handbook or their own local overrides.
|
|
56
56
|
- Deeper subtrees within the directory may add further localized guidance.
|
|
57
57
|
- Prompt blocks preserve explicit source paths for attribution and debugging.
|
|
58
|
-
-
|
|
58
|
+
- Empty or unreadable selected overrides fail closed. Ordinary authored Markdown is accepted without a structured project identity, and context resets never delete override files.
|
|
59
59
|
|
|
60
60
|
`wiki.page` and `wiki.plan` (`src/domains/prompts/fragments/wiki/*.md`) load through this same loader, with the same id/version/content-hash contract as every other fragment, but they are consumed differently: `context/wiki/prompts.ts` reads them by id, substitutes per-dispatch `{{token}}` placeholders (a page's path, title, and relative path; the plan file's path), and sends the result as a wiki-generation dispatch's `task`, never as a compiled system prompt. `{{token}}` substitution has no home in the fragment loader itself, the same division `identity.self-awareness`'s `{TOKEN}` placeholders use in `compiler.ts`: the loader hands back a raw body, and the one caller that needs live values fills them in. Both files' bodies open and close on a standalone `---` line that predates their frontmatter and was kept unchanged as body text so the substituted prompt stays byte-identical to what the old hand-rolled `readFileSync` produced.
|
|
61
61
|
|
|
@@ -73,11 +73,11 @@ Providers that cannot call tools receive no schemas, and the prompt tells the mo
|
|
|
73
73
|
|
|
74
74
|
## Canonical worker harness
|
|
75
75
|
|
|
76
|
-
Native and mediated dispatch workers use a separate prompts-domain compiler over the
|
|
76
|
+
Native and mediated dispatch workers use a separate prompts-domain compiler over the shared fragment table. The stable system prompt contains identity-lite, the constitutional operating and assigned-task contracts, the final toolkit contract, effective safety and permission routing, one final persona, and any scoped project rules and operator profile. A request persona replaces the recipe body; eligible bound-skill instructions remain inside the final persona without widening tools. Authored handbook context travels separately in a bounded dynamic message, not in this stable system prompt.
|
|
77
77
|
|
|
78
|
-
The operator-editable layer
|
|
78
|
+
The operator-editable system layer uses `additionalFragments`. The operator profile renders unconditionally within its cap, while project rules are selected from `writeRoots` and path-like tokens in the task and briefing through real glob matches. The separate handbook message follows the effective project-context tier: native defaults depend on capability class and recipe, with Coder and verification workers bounded and Scout none; ACP defaults to none and requires `projectContext: "bounded"` in its configuration. A bounded run uses captured `ProjectPromptContext` authored Markdown through the shared exact-prefix selector, within 1,500 UTF-16 units including source wrappers and omission notices, and the inherited 220-rendered-line limit. The raw authored branch does not inject a second structured projection of conventions, invariants, or verification. Legacy structured-only callers still receive project name, conventions, and invariants; their derived verification supplement is limited to verification-class workers.
|
|
79
79
|
|
|
80
|
-
The compiler runs after target capability and tool-profile admission.
|
|
80
|
+
The worker compiler runs after target capability and tool-profile admission. Canonical names match `WorkerSpec.allowedTools` and attached schemas: routine non-Scout work removes `code_nav`, narrow profiles remove excluded schemas and guidance, and tool-incapable native targets receive a no-tools contract. Claude SDK aliases are filtered from the same set. For omitted handbook text, native workers without admitted read capability are told retrieval is unavailable; unknown native capability makes the read instruction conditional. ACP and subprocess runtimes have unknown external tool inventories, so their notices refer conditionally to their own file-reading tools without promising a native Clio read schema. ACP bounded-role admission continues to validate its raw persona rather than claiming a complete native toolkit. Retrieval reads current filesystem content, which may differ from the captured source identified by accounting/manifest hashes.
|
|
81
81
|
|
|
82
82
|
Project context, memory, bounded dispatch briefing, pipeline input, the assigned task, and the per-run safety-posture reminder remain dynamic user messages. A briefing is a separately delimited message labeled as untrusted task context/data; it is never concatenated into the task or stable system prompt. Dynamic ordering is project, safety, memory, briefing, then pipeline input, with pipeline input last. These messages do not affect the stable composition hash. Persona, effective autonomy, target tool capability, or final toolkit changes do affect it.
|
|
83
83
|
|
|
@@ -151,7 +151,7 @@ Several tools absorb what used to be separate tools:
|
|
|
151
151
|
|
|
152
152
|
- `find(pattern, path?, order?, limit?, include_ignored?)` locates paths by glob pattern (`*`, `**`, `?`, `[abc]`), default limit 500. `order="path"` (default) returns fd's native order; `order="mtime"` returns newest first from a bounded candidate set instead of statting the whole tree, and reports `details.candidates` when the candidate cap made the ordering approximate.
|
|
153
153
|
- `grep(pattern, path?, mode?, glob?, ignore_case?, literal?, context?, limit?, include_ignored?)` searches file contents with ripgrep, degrading to a bounded pure-Node search when rg is absent. `mode=content` (default) returns line-referenced matches, `mode=files` returns matching paths, `mode=count` returns per-file counts. Context lines are consumed from rg's `--json` stream.
|
|
154
|
-
- `context(scope="workspace"|"docs"|"skills")`
|
|
154
|
+
- `context(scope="workspace"|"docs"|"skills"|"recall")` observes the session workspace snapshot, bundled documentation (omit `query` to list the corpus), skills (`name` optional, `include_tree` for resources), or persisted historical tool results. In recall scope, provide `ref` for exact retrieval or omit it for discovery with `query`, `limit`, and `offset`.
|
|
155
155
|
- `verify(check?, path?, args?, browser?, cwd?, timeout_ms?)` runs declared verification. `verify()` lists package.json verification scripts and strict version-1 `.clio-coder/verifiers.yaml` entries through the same `{id, description, command, cwd, timeoutMs, tags, source}` projection. `verify(check="<id>")` runs a package script or the catalog's exact argv/cwd/timeout through safe-exec with no shell. Model `args`, cwd, timeout, output-cap, and environment fields cannot mutate a project entry. `verify(check="frontend", path=...)` validates an HTML/CSS/JS artifact without granting shell access.
|
|
156
156
|
- `artifact(kind="plan"|"review"|"report", content, ...)` writes named artifacts behind one surface: Markdown documents (default `.clio-coder/artifacts/PLAN.md`/`REVIEW.md`/`REPORT.md`; `path` may override inside the workspace) that terminate the turn, because writing the artifact is the answer. Skills are not artifacts; a `SKILL.md` is written with the ordinary write tool and validated by the skills loader.
|
|
157
157
|
- `dispatch(task?, tasks?, mode?, ...)` supports a first-class singular assignment (`task`) and a batch (`tasks`), never both. `task` is worker instructions; `briefing` is optional bounded parent context/data and cannot replace it. Briefing stays a separate dynamic message and receipt provenance, never part of the receipt task. A shared top-level briefing applies to strings and objects without an override; an object-level briefing wins. Blank values are omitted, the cap is 12,000 UTF-8 bytes, and approval pins the exact canonical value. Ordinary handles enter one registered event consumer immediately. Synchronous calls auto-wait for stream-and-receipt completion; `detach:true` returns ids after durable batch registration while the same consumer continues. Review and compete retain gate-sensitive direct drains. Task objects may include `persona`, `tool_profile`, and a typed `budget: {toolCalls, readReserve, retryRevision?}`. The budget must fit the recipe's authored range and the operator lifetime cap. `retryRevision` is the only authority for a later retry, result-contract revision, or review revision to grow its phase. Pipeline output is threaded as bounded data. A successful native or ACP run requires a nonempty receipt-sealed final output; exit zero without one fails as `worker_final_output_missing`, with unfinished text retained only as partial diagnostics. `dispatch(list=true)` renders the catalog.
|
|
@@ -205,7 +205,7 @@ Clio uses two context-protection mechanisms.
|
|
|
205
205
|
|
|
206
206
|
Manual `/context compact`, `CLIO_CODER_FORCE_COMPACT=1`, and overflow recovery force the LLM summary path directly.
|
|
207
207
|
|
|
208
|
-
Compaction
|
|
208
|
+
Compaction changes projected model replay while retaining the raw ledger, so the next turn on a local single-slot backend is expected to lose prefix-cache alignment. Clio records `expectedColdReasons` and shows one dim notice for that turn.
|
|
209
209
|
|
|
210
210
|
## Inspecting a session
|
|
211
211
|
|
|
@@ -168,7 +168,7 @@ reported to `/cost` under a handoffs row and excluded from the turn count.
|
|
|
168
168
|
|
|
169
169
|
### Streaming Turn Settlement During Session Transitions
|
|
170
170
|
|
|
171
|
-
When an operator issues `/new`, `/resume`, `/tree`, or `/fork`
|
|
171
|
+
When an operator issues `/new`, `/resume`, `/tree`, or `/fork` during streaming, `settleChatBeforeSessionSwitch` cancels and awaits the in-flight turn so partial assistant records and completed tools settle before replacing the writer. Shutdown separately stops shell admission and drains the active operator command. Hooks default to 500 ms each; the operator-shell hook allows six seconds for its existing five-second cancellation escalation, and worker group escalation uses 500 ms. Owned same-process-group descendants are covered by Linux validation, including descendants that close inherited pipes. Arbitrary daemonized or regrouped processes are outside this scope; macOS, Windows, and real SSH behavior remain unverified.
|
|
172
172
|
|
|
173
173
|
---
|
|
174
174
|
|
|
@@ -185,7 +185,7 @@ When resuming a session via `/resume` or a headless `clio-coder run --session <i
|
|
|
185
185
|
|
|
186
186
|
### Model-Facing Custom Entry Replay
|
|
187
187
|
|
|
188
|
-
When resumed or forked session history is replayed to the model,
|
|
188
|
+
When resumed or forked session history is replayed to the model, compaction summaries, branch summaries, and operator bash executions use standardized user-role text through `src/engine/messages.ts`. Working-set projection runs before compaction counting and summary serialization, while raw ledger entries remain intact. Tool results hidden by summaries are discoverable with `context(scope="recall")` and recoverable by exact ref through the normal observation envelope; older destructive logs cannot recover removed bytes.
|
|
189
189
|
|
|
190
190
|
---
|
|
191
191
|
|
|
@@ -199,12 +199,12 @@ An explicit path ending in `.md` keeps the plain Markdown form: a heading, UTC e
|
|
|
199
199
|
|
|
200
200
|
## 7. Directory Handbooks and Project Overrides
|
|
201
201
|
|
|
202
|
-
During session context loading, `loadProjectContextFiles` (`src/domains/context/clio-md.ts`)
|
|
202
|
+
During session context loading, `loadProjectContextFiles` (`src/domains/context/clio-md.ts`) captures readable authored Markdown from root `CLIO-CODER.md` handbooks and directory-scoped `CLIO-CODER.override.md` files. Optional structured projections do not determine source acceptance. Init, refresh, and reset invalidate captured session inputs; refresh preserves handbook bytes. Preload is bounded to 8,000 UTF-16 units and 220 rendered lines, with exact safe prefixes and capability-aware omission notices naming source paths and line ranges. Captured-source hashes are retained separately in accounting/manifest metadata. Tools-disabled targets cannot retrieve omitted suffixes through session tools; ordinary reads retrieve current content and retain their independent byte and 20 MB file limits:
|
|
203
203
|
- An override handbook replaces inherited project instructions for its directory and all subdirectories, establishing an explicit subtree boundary.
|
|
204
204
|
- Sibling directories remain unaffected.
|
|
205
205
|
- Subdirectories within the subtree may supply narrower instructions with additional override files.
|
|
206
206
|
- Prompt blocks preserve explicit source paths for provenance.
|
|
207
|
-
-
|
|
207
|
+
- Empty or unreadable selected overrides fail closed; ordinary authored Markdown does not require a structured project heading. Context resets never delete override files.
|
|
208
208
|
|
|
209
209
|
---
|
|
210
210
|
|
|
@@ -247,3 +247,7 @@ The child process exits with specific status codes to signal run outcomes to the
|
|
|
247
247
|
* **`2`**: Worker runtime initialization failed (e.g., target runtime not registered, or `WorkerSpec` invalid/mismatched).
|
|
248
248
|
* **`3` (`WORKER_EXIT_PERMISSION_REQUIRED`)**: The run aborted because a tool required permission and `onPermission` was set to `fail` (or timed out to a `fail` fallback).
|
|
249
249
|
* **Other (e.g., `1` or uncaught exceptions)**: Represents an unhandled crash or internal error within the runner.
|
|
250
|
+
|
|
251
|
+
## Antigravity conversation identity
|
|
252
|
+
|
|
253
|
+
Antigravity resumes a conversation only when a caller explicitly supplies its conversation ID through the worker runtime. The dispatch tool exposes no resume argument. A nonempty ID must be at most 4096 UTF-8 bytes and contain no Unicode control characters; it is passed as a literal `--conversation` argument. Clio requires the first init conversation ID to match the requested ID and fails the run if agy starts a different conversation. An absent or empty ID starts fresh. Antigravity runs are never retried automatically.
|