@iowarp/clio-coder 0.4.7 → 0.4.9
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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +111 -0
- package/CONTRIBUTING.md +83 -74
- package/README.md +69 -47
- package/dist/{acp-W3Y3TRHD.js → acp-ZWZCPS2A.js} +15 -15
- package/dist/{agents-J4ICNLQ3.js → agents-LYSOWZUE.js} +61 -59
- package/dist/assets/codewiki.json +1 -1
- package/dist/assets/web-notices/@hono__node-server-LICENSE +21 -0
- package/dist/assets/web-notices/hono-LICENSE +21 -0
- package/dist/{auth-X2UJUMOC.js → auth-WBQGKWQ5.js} +27 -27
- package/dist/background-BUMOBAQN.js +37 -0
- package/dist/{builtins-XLXWWSRF.js → builtins-ODRJOEDI.js} +7 -7
- package/dist/{chunk-C3G5PNUO.js → chunk-2DRRZ57Q.js} +36 -27
- package/dist/chunk-2JBZYUPY.js +105 -0
- package/dist/chunk-2KUBKL63.js +336 -0
- package/dist/chunk-2VBWFXYE.js +198 -0
- package/dist/{chunk-XZ6UFQ52.js → chunk-2X2R3UTH.js} +25 -15
- package/dist/{chunk-M6Z2V6YU.js → chunk-37LW32LZ.js} +5 -5
- package/dist/{chunk-6LRLOJHQ.js → chunk-3AND2EFU.js} +11 -62
- package/dist/{chunk-FQOOGXBH.js → chunk-3RDHGNU7.js} +101 -33
- package/dist/{chunk-D2T66PDV.js → chunk-3SUDBGEI.js} +41 -208
- package/dist/{chunk-5AJPUR72.js → chunk-3TQN67I2.js} +9 -9
- package/dist/{chunk-LBFQMYS3.js → chunk-3U4BL2EV.js} +5 -3
- package/dist/{chunk-UFYNOQK4.js → chunk-3UQADNG2.js} +7 -7
- package/dist/{chunk-V4ZKOKRB.js → chunk-434LRQ6Z.js} +61 -53
- package/dist/{chunk-NO7J45X6.js → chunk-4ATBOFRP.js} +713 -218
- package/dist/{chunk-ECOMVOHP.js → chunk-4DNL43EZ.js} +3 -3
- package/dist/{chunk-WT5TRMO4.js → chunk-4HFJKRGZ.js} +255 -82
- package/dist/{chunk-5A6XR3RJ.js → chunk-555E2WVV.js} +16 -2
- package/dist/{chunk-WURGVOZJ.js → chunk-5RTEFNBP.js} +18 -14
- package/dist/{config-YXARKGTX.js → chunk-64XJW7NT.js} +24 -268
- package/dist/{chunk-24S3DN22.js → chunk-6TKOFFGE.js} +4 -4
- package/dist/{chunk-YKRJTYNP.js → chunk-6UJ7RDI7.js} +4 -4
- package/dist/{chunk-MZNWZUJM.js → chunk-7FBCRWVT.js} +288 -288
- package/dist/{chunk-UA6W4XFJ.js → chunk-7JSOSVLP.js} +2 -2
- package/dist/chunk-7N3OLLSL.js +637 -0
- package/dist/{chunk-KKEYGFX4.js → chunk-7QQRPB2E.js} +11 -11
- package/dist/{chunk-N37QC5FV.js → chunk-A6DULIMH.js} +21 -9
- package/dist/{fleet-decisions-S3PTZV2D.js → chunk-AB3QXXBC.js} +5 -41
- package/dist/chunk-ACCECAH4.js +49 -0
- package/dist/{chunk-CP3HIR5H.js → chunk-AM6CEP2K.js} +20 -19
- package/dist/chunk-AUHVBIDW.js +19 -0
- package/dist/{chunk-BQQ5MXUC.js → chunk-AY4XE6GN.js} +19 -13
- package/dist/{chunk-ISNCCX42.js → chunk-BBA2TAWV.js} +10 -9
- package/dist/chunk-BFPHMSK7.js +169 -0
- package/dist/{chunk-LVFANMOH.js → chunk-BHJMMCXS.js} +4 -4
- package/dist/{chunk-DO7M3LSX.js → chunk-BMNVVKEW.js} +40 -93
- package/dist/{chunk-VTYHHQ57.js → chunk-CTGZCEI6.js} +2 -2
- package/dist/{chunk-RTLNFZMD.js → chunk-DIAJYJYG.js} +3 -3
- package/dist/chunk-EHZRAB4U.js +63 -0
- package/dist/{chunk-KS7ETA3P.js → chunk-EM2DIQAJ.js} +3 -3
- package/dist/{chunk-MNQN3X6Y.js → chunk-ETF4ROKH.js} +5 -5
- package/dist/{chunk-WN552PKN.js → chunk-F2YM3JY4.js} +744 -1134
- package/dist/{chunk-7EEGBKV4.js → chunk-FEBQWHJT.js} +24 -19
- package/dist/{chunk-4QKAITQT.js → chunk-FPS4R2RN.js} +74 -10
- package/dist/chunk-G5R53COU.js +68 -0
- package/dist/chunk-GHXGMFQ5.js +40 -0
- package/dist/{chunk-GFQ7P2UF.js → chunk-GJDRMBDI.js} +10 -10
- package/dist/{chunk-LZBMXNLP.js → chunk-GM4TY6VN.js} +43 -6
- package/dist/{chunk-NCCQ6DVS.js → chunk-GREYLTZ5.js} +8 -8
- package/dist/{chunk-HOX4YZ2K.js → chunk-H2WSCZZT.js} +19 -3
- package/dist/{chunk-3LXJOICS.js → chunk-H6IUCY6Q.js} +2 -2
- package/dist/{chunk-BO4XV5VX.js → chunk-H72DCH3E.js} +95 -206
- package/dist/{chunk-SEDI5K5B.js → chunk-H7TXJR23.js} +20 -20
- package/dist/chunk-HBJQQTKM.js +40 -0
- package/dist/chunk-HCVKSGNZ.js +990 -0
- package/dist/chunk-HVCAY2FH.js +67 -0
- package/dist/{chunk-34XHRVKG.js → chunk-I47EJPYL.js} +3 -3
- package/dist/{chunk-4N2RZ4TO.js → chunk-IALGWTLO.js} +3 -3
- package/dist/{chunk-IQCNVLO6.js → chunk-IALZJE37.js} +10 -7
- package/dist/{chunk-DLIYANB7.js → chunk-IC7JXLOM.js} +16 -11
- package/dist/{chunk-G4LGUTOE.js → chunk-IOSVTTCD.js} +5 -5
- package/dist/{chunk-DBREN25X.js → chunk-IPTPMLA6.js} +8 -3
- package/dist/{chunk-V552WL53.js → chunk-IZZI3SKQ.js} +3 -67
- package/dist/{chunk-TN5FW4XY.js → chunk-JIYWMQZ5.js} +12 -9
- package/dist/{chunk-T7QQBNLH.js → chunk-JKU34ACI.js} +10 -8
- package/dist/chunk-JOBN2YQQ.js +176 -0
- package/dist/chunk-JOL2QRLE.js +152 -0
- package/dist/{chunk-GXIWHXDB.js → chunk-JTR3VSV3.js} +3 -3
- package/dist/{chunk-T334FW2H.js → chunk-JU6MAMRJ.js} +7 -7
- package/dist/chunk-JURMQWVJ.js +15 -0
- package/dist/{chunk-CULVKYTK.js → chunk-K3XN4LZ4.js} +5 -5
- package/dist/{chunk-3T4DXWP6.js → chunk-KIVFXGBM.js} +27 -7
- package/dist/chunk-KKRXONXG.js +43 -0
- package/dist/{chunk-YPRSNUTC.js → chunk-KOAHT3N2.js} +2 -2
- package/dist/chunk-KP5BPXR3.js +73 -0
- package/dist/{chunk-UA3W4FGC.js → chunk-KRJQG47M.js} +6 -6
- package/dist/{chunk-GI5RRMAH.js → chunk-KW6OJ7IY.js} +19 -21
- package/dist/{chunk-A46ILRS2.js → chunk-L3NBWLSN.js} +4 -4
- package/dist/{chunk-MZHXENL7.js → chunk-L4RUTLRL.js} +8 -8
- package/dist/{chunk-P5SC4DLJ.js → chunk-LGTVWPRN.js} +2 -2
- package/dist/{chunk-65BGHOUR.js → chunk-LSQW6KZO.js} +5 -5
- package/dist/{chunk-TZHN5ITX.js → chunk-LWJYOHT3.js} +8 -8
- package/dist/{chunk-U3TPUXOQ.js → chunk-M6YLF66Z.js} +74 -40
- package/dist/chunk-MJ4QEJVT.js +185 -0
- package/dist/{chunk-T4TY5GG3.js → chunk-MO65K5CH.js} +5 -5
- package/dist/{chunk-TZ6UVP2H.js → chunk-MTOZEQHL.js} +8 -8
- package/dist/chunk-MZDPF35R.js +45 -0
- package/dist/{chunk-P4DL2LM5.js → chunk-MZKYVIWW.js} +8 -119
- package/dist/{chunk-KAFMW7WM.js → chunk-NBPA5QM6.js} +2 -2
- package/dist/{chunk-EUEXGXXR.js → chunk-NMBEW4PP.js} +5 -5
- package/dist/{chunk-SELG4SUR.js → chunk-NPLLK3HO.js} +72 -89
- package/dist/{chunk-VCRVEDUC.js → chunk-NSYGPIVW.js} +5 -5
- package/dist/{context-7HJEWTTP.js → chunk-NXTV5OI5.js} +36 -90
- package/dist/{chunk-IMOD2YPV.js → chunk-NYDG4QP4.js} +9 -19
- package/dist/{chunk-6CA2BHOR.js → chunk-OA2GDACN.js} +5 -5
- package/dist/{chunk-A67NR5AT.js → chunk-PJI57EC6.js} +14 -11
- package/dist/{chunk-IJMW64DX.js → chunk-PJJBUGMR.js} +50 -50
- package/dist/{chunk-CPXGJI2A.js → chunk-PNJE7JPS.js} +20 -5
- package/dist/chunk-PP23PZEV.js +1347 -0
- package/dist/chunk-PPIFDSBK.js +409 -0
- package/dist/{chunk-T52TPHYC.js → chunk-PTFISXQO.js} +8 -7
- package/dist/{chunk-C6GEXX4L.js → chunk-QB33Z5S7.js} +5 -5
- package/dist/{chunk-VMATUZB6.js → chunk-QGNII5VC.js} +10 -10
- package/dist/{chunk-TLTGZTXI.js → chunk-QI72X67S.js} +104 -27
- package/dist/chunk-QKHZZFKH.js +98 -0
- package/dist/{chunk-PFLOULP3.js → chunk-RDKX2PME.js} +4 -4
- package/dist/{chunk-B5ZTR6KZ.js → chunk-RL7LJYN4.js} +1 -1
- package/dist/chunk-RPMNIFRY.js +65 -0
- package/dist/{chunk-L3Z5ANCV.js → chunk-RQROVOV3.js} +13 -11
- package/dist/{chunk-6YHPAAZR.js → chunk-S34A7BSP.js} +3 -3
- package/dist/{chunk-5ZSZEYJK.js → chunk-SJETVJHX.js} +2 -2
- package/dist/{chunk-77CZRFTE.js → chunk-SJMNU4ZS.js} +2 -2
- package/dist/chunk-SLLG2G44.js +85 -0
- package/dist/{chunk-GVZFCJHE.js → chunk-SQAZN2V3.js} +48 -22
- package/dist/{chunk-2O2LVQQK.js → chunk-SQBT46OF.js} +2 -2
- package/dist/{chunk-ZGIGW4ZG.js → chunk-TCUOGIL2.js} +5 -5
- package/dist/{chunk-DACXIVVF.js → chunk-TIWPKCVO.js} +5 -5
- package/dist/{chunk-5CMARGPF.js → chunk-UIU7MGZ3.js} +11 -2
- package/dist/chunk-USBBEKHW.js +177 -0
- package/dist/{chunk-WLHX3MM5.js → chunk-V4XJWDHR.js} +21 -11
- package/dist/{chunk-MBJO5VNZ.js → chunk-VPWGADBG.js} +33 -33
- package/dist/{chunk-UUQ5G6EZ.js → chunk-VWFCAK34.js} +6 -6
- package/dist/{chunk-6CB2IL4N.js → chunk-W5RM7YAH.js} +1 -1
- package/dist/{chunk-4MFBBY2Z.js → chunk-W72LLZAV.js} +3 -3
- package/dist/{chunk-4UHVS5T7.js → chunk-WGRDABW7.js} +8 -8
- package/dist/{chunk-XR3XJN2M.js → chunk-WWRV5RJI.js} +4 -4
- package/dist/{chunk-24TOGHPO.js → chunk-X6FLVUM5.js} +4 -4
- package/dist/{chunk-6YA46L5A.js → chunk-XFLSL7BT.js} +2 -2
- package/dist/{chunk-QKWL7SYE.js → chunk-XJZEDCNT.js} +50 -39
- package/dist/{chunk-UWD3JD5X.js → chunk-XLLEL3K7.js} +10 -10
- package/dist/{chunk-2GPGAE5W.js → chunk-XNIZBOFV.js} +15 -1
- package/dist/chunk-XNZWWDC3.js +686 -0
- package/dist/{chunk-WBVKKTUT.js → chunk-XRECG65F.js} +2 -2
- package/dist/chunk-XTQ7MEJG.js +457 -0
- package/dist/{chunk-GEVQNST4.js → chunk-XZWSP67B.js} +2 -2
- package/dist/{chunk-WB7POC6M.js → chunk-Y3M2T5RO.js} +6 -6
- package/dist/{chunk-RXFPB32E.js → chunk-YJCCMYYT.js} +2 -2
- package/dist/{chunk-EUZRMP4Y.js → chunk-YPQOPFP7.js} +20 -20
- package/dist/{chunk-USZA7GWL.js → chunk-YQ3GFEUY.js} +2 -2
- package/dist/{chunk-BAU36233.js → chunk-YQYINEJI.js} +9 -9
- package/dist/{chunk-CE64C5K5.js → chunk-ZF6CV4WZ.js} +1356 -235
- package/dist/{chunk-3XE4NRLF.js → chunk-ZKJU55MX.js} +4 -2
- package/dist/{chunk-IZYTT3CD.js → chunk-ZKQ63XZ5.js} +16 -39
- package/dist/{chunk-6TAATXXH.js → chunk-ZKVMDNAN.js} +7 -7
- package/dist/chunk-ZST3FRCV.js +132 -0
- package/dist/cli/index.js +50 -38
- package/dist/{clio-L2P7S2R2.js → clio-JUDCLNHC.js} +11 -11
- package/dist/clio-context-tools-FT672MNZ.js +136 -0
- package/dist/{code-nav-B5LNX4KU.js → code-nav-7OVCTP2Z.js} +39 -37
- package/dist/{components-63MMQKUT.js → components-OZXZMDWU.js} +11 -11
- package/dist/config-P3ZQVF63.js +275 -0
- package/dist/config-graph-GKAOBAS5.js +160 -0
- package/dist/{configure-LMVQJ46J.js → configure-25LRYZJG.js} +56 -55
- package/dist/context-72VQV7JX.js +73 -0
- package/dist/{context-YG2LZDYZ.js → context-COWRWXP3.js} +89 -83
- package/dist/{context-XSZKKFBW.js → context-WB3D474G.js} +16 -16
- package/dist/{context-clear-AC5NXHM2.js → context-clear-Y4LYMWC6.js} +88 -82
- package/dist/{context-index-KKTPRV5G.js → context-index-W6A4V7OC.js} +4 -4
- package/dist/{context-map-T7ROR5D5.js → context-map-DKL3QT6D.js} +3 -3
- package/dist/{context-working-set-F4Q4J3NS.js → context-working-set-TMZYVC7A.js} +27 -25
- package/dist/data-tool-KMBWKKWR.js +2987 -0
- package/dist/{detail-H73BEF2N.js → detail-4GLROGY5.js} +89 -83
- package/dist/{dispatch-runner-3RY5FSJC.js → dispatch-runner-TR3LBP5P.js} +113 -107
- package/dist/docs-ZK777W2G.js +101 -0
- package/dist/{doctor-EQYJOGUG.js → doctor-WC4OV2OB.js} +76 -73
- package/dist/{eval-4P7O6CCE.js → eval-FUNWJNUJ.js} +88 -73
- package/dist/{eval-inventory-QOYZERXJ.js → eval-inventory-CX24K2JT.js} +5 -60
- package/dist/evals-L73EBHSU.js +104 -0
- package/dist/{evidence-O76QF7TZ.js → evidence-AVJ2RTHX.js} +99 -93
- package/dist/{evidence-D6GUSYJW.js → evidence-P4NZOAK7.js} +88 -82
- package/dist/evidence-Y55WKYHH.js +246 -0
- package/dist/{evolve-H47BCETS.js → evolve-MAWKRYWF.js} +93 -87
- package/dist/{extensions-NNL3ZOCU.js → extensions-PYQH3H47.js} +14 -13
- package/dist/fleet-M4H2QBWT.js +268 -0
- package/dist/{fleet-KMNS6NOM.js → fleet-ULBXXRDR.js} +146 -138
- package/dist/{fleet-commands-DOWSYCBX.js → fleet-commands-7NNC4JZU.js} +18 -17
- package/dist/fleet-decisions-EHEY7KPU.js +52 -0
- package/dist/{fleet-graph-F2DE2TME.js → fleet-graph-LQ2AHZT3.js} +24 -24
- package/dist/{fleet-inspect-EN2Q6IVB.js → fleet-inspect-5IGBIIYZ.js} +98 -258
- package/dist/{fleet-preflight-FRLETDD3.js → fleet-preflight-UTTNOKMG.js} +9 -4
- package/dist/{fleet-validate-B2XDLS57.js → fleet-validate-YGILJKA6.js} +29 -29
- package/dist/{fleet-verify-4JKUWGJ7.js → fleet-verify-AUWTCDKR.js} +88 -82
- package/dist/{fleet-view-BHJFW26B.js → fleet-view-TGUFCY5A.js} +90 -84
- package/dist/{init-XAT5N5YM.js → init-GFN2Z7NF.js} +111 -104
- package/dist/install-6PIF6F6W.js +19 -0
- package/dist/{interop-FVECHFKG.js → interop-EF5JUWWK.js} +29 -29
- package/dist/{inventory-7KFQGLCV.js → inventory-I6VJDDYF.js} +90 -84
- package/dist/library-3J5IO2OJ.js +75 -0
- package/dist/{library-QAPAO23R.js → library-IJTOFTDS.js} +20 -19
- package/dist/{library-NY2XOT75.js → library-Z3KZSHPE.js} +35 -35
- package/dist/{library-import-5Y6MAS3R.js → library-import-IMKFLDHX.js} +29 -29
- package/dist/{library-inventory-JT6HWITQ.js → library-inventory-CQP5D6GU.js} +21 -21
- package/dist/{library-validation-EQUH25DC.js → library-validation-33UTX7AI.js} +19 -19
- package/dist/mcp-5FWZKUS6.js +26 -0
- package/dist/{memory-DYVTTCP6.js → memory-36CWN67Y.js} +93 -87
- package/dist/{models-MASFJ6Y2.js → models-KQ6PQJJQ.js} +57 -56
- package/dist/{monitor-YMP4NXJJ.js → monitor-XX6ZD6KC.js} +98 -91
- package/dist/{orchestrator-AFQRRTEI.js → orchestrator-SK6HDAOP.js} +1537 -832
- package/dist/{panes-NICTHQCV.js → panes-L27QRXUH.js} +14 -14
- package/dist/{panes-D3Y2KFG5.js → panes-LXZIWNOZ.js} +4 -4
- package/dist/{paths-PSFAUIGO.js → paths-7DJDU4P4.js} +6 -6
- package/dist/{preload-5Q7VXRFJ.js → preload-K2TDYI4Y.js} +88 -82
- package/dist/{reset-7NKZK7JN.js → reset-73VU3XNT.js} +13 -13
- package/dist/{resources-NILSIZAT.js → resources-3BYJYVYL.js} +24 -24
- package/dist/{run-BPZGEBZV.js → run-AR7PY6GW.js} +144 -136
- package/dist/run-script-H2KUDIII.js +41 -0
- package/dist/settings-3VMBMWID.js +72 -0
- package/dist/{share-EZ6ERBMH.js → share-HVWH4FPF.js} +30 -30
- package/dist/{skills-BTVVNYVM.js → skills-5TYEY75Q.js} +30 -30
- package/dist/{skills-eval-UY34MNK7.js → skills-eval-CK3MD63Z.js} +114 -103
- package/dist/{skills-inventory-JDHSIA7I.js → skills-inventory-KSFYG3I6.js} +24 -24
- package/dist/{slash-commands-K4FNQ2AT.js → slash-commands-DMVHML7P.js} +60 -57
- package/dist/{steer-2B3EQGFH.js → steer-XCD6V3EW.js} +4 -4
- package/dist/{support-L2SOL3IE.js → support-JAZL6VBR.js} +7 -7
- package/dist/system-3TDQRMZZ.js +116 -0
- package/dist/{targets-44VKGFLN.js → targets-EZKHAYRN.js} +74 -72
- package/dist/{tasks-3KODKFU7.js → tasks-SNEFHWYW.js} +18 -18
- package/dist/{terminal-lease-LXA7MMPO.js → terminal-lease-BNLFA4OF.js} +8 -7
- package/dist/{tools-3UB7TEVR.js → tools-7IM6BDCE.js} +12 -12
- package/dist/{trace-TAMIU4OJ.js → trace-C3MBGD4S.js} +16 -65
- package/dist/{tui-primitives-A6MUW32V.js → tui-primitives-36BY2774.js} +2 -2
- package/dist/{uninstall-QYVRPEM4.js → uninstall-WWLOSZ42.js} +35 -10
- package/dist/{upgrade-7PMKM2JH.js → upgrade-ETK2JNSJ.js} +42 -51
- package/dist/{usage-6EQV7EQK.js → usage-S2HOB7BZ.js} +112 -102
- package/dist/{verifiers-JLITWSHU.js → verifiers-QDTEVH7R.js} +26 -24
- package/dist/{verify-T7NAEVIG.js → verify-SUKUK6XM.js} +16 -15
- package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
- package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +1 -0
- package/dist/web/client/assets/arc-Pry-7G1_.js +1 -0
- package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +1 -0
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +36 -0
- package/dist/web/client/assets/array-BifhSqXX.js +1 -0
- package/dist/web/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
- package/dist/web/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
- package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +129 -0
- package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +38 -0
- package/dist/web/client/assets/channel-c4EeUUqA.js +1 -0
- package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +62 -0
- package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +2 -0
- package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +125 -0
- package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +1 -0
- package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
- package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +72 -0
- package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +1 -0
- package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +231 -0
- package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +1 -0
- package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +10 -0
- package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +1 -0
- package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +1 -0
- package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +1 -0
- package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +168 -0
- package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +88 -0
- package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +206 -0
- package/dist/web/client/assets/chunk-XXDRQBXY-DqAYeljN.js +1 -0
- package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +1 -0
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +1 -0
- package/dist/web/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
- package/dist/web/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
- package/dist/web/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +1 -0
- package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +1 -0
- package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +62 -0
- package/dist/web/client/assets/cytoscape.esm-c2aL46s-.js +321 -0
- package/dist/web/client/assets/dagre-C-rnJpZF.js +1 -0
- package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +4 -0
- package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +30 -0
- package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +41 -0
- package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +3 -0
- package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +24 -0
- package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +24 -0
- package/dist/web/client/assets/dist-v5Q1xZ2K.js +1 -0
- package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +1 -0
- package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +99 -0
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +1 -0
- package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +1 -0
- package/dist/web/client/assets/framework-YGoR34M4.js +9 -0
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +292 -0
- package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +1 -0
- package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +106 -0
- package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/web/client/assets/index-CVcy0FAn.js +75 -0
- package/dist/web/client/assets/index-Dsi52apB.css +1 -0
- package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +1 -0
- package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +2 -0
- package/dist/web/client/assets/init-C-OQMol4.js +1 -0
- package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +70 -0
- package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +139 -0
- package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +89 -0
- package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
- package/dist/web/client/assets/line-BIDAcEtX.js +1 -0
- package/dist/web/client/assets/linear-SzVmGSw4.js +1 -0
- package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +7 -0
- package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +44 -0
- package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +96 -0
- package/dist/web/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
- package/dist/web/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
- package/dist/web/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
- package/dist/web/client/assets/ordinal-BDEzSJ7C.js +1 -0
- package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +1 -0
- package/dist/web/client/assets/path-fybaL0A-.js +1 -0
- package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +1 -0
- package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +1 -0
- package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +39 -0
- package/dist/web/client/assets/prism-bash-D6zCJ74D.js +1 -0
- package/dist/web/client/assets/prism-c-04YixN25.js +1 -0
- package/dist/web/client/assets/prism-clike-DapgWyxx.js +1 -0
- package/dist/web/client/assets/prism-core-BtsZdCS6.js +1 -0
- package/dist/web/client/assets/prism-cpp-C-lJbC-6.js +1 -0
- package/dist/web/client/assets/prism-css-CPgOzxXp.js +1 -0
- package/dist/web/client/assets/prism-diff-BF8m0_mq.js +3 -0
- package/dist/web/client/assets/prism-docker-DkT6yOFj.js +1 -0
- package/dist/web/client/assets/prism-fortran-Be5x3y1V.js +1 -0
- package/dist/web/client/assets/prism-go-C_8qAH5n.js +1 -0
- package/dist/web/client/assets/prism-ini-BESK3y0r.js +1 -0
- package/dist/web/client/assets/prism-javascript-BnO-swvr.js +1 -0
- package/dist/web/client/assets/prism-json-Dp_-W-Hv.js +1 -0
- package/dist/web/client/assets/prism-jsx-D-D0NWtC.js +1 -0
- package/dist/web/client/assets/prism-julia-DIjOgiAV.js +1 -0
- package/dist/web/client/assets/prism-latex-DNMbqcH_.js +1 -0
- package/dist/web/client/assets/prism-makefile-CRKWLQ8l.js +1 -0
- package/dist/web/client/assets/prism-markdown-C0FPJ1Iz.js +1 -0
- package/dist/web/client/assets/prism-markup-Cp04rIa1.js +1 -0
- package/dist/web/client/assets/prism-matlab-D-nk08al.js +1 -0
- package/dist/web/client/assets/prism-python-CfiSVtM6.js +1 -0
- package/dist/web/client/assets/prism-r-QmNGR8LX.js +1 -0
- package/dist/web/client/assets/prism-rust-Bu9N8X3N.js +1 -0
- package/dist/web/client/assets/prism-shell-session-Be4UuYoM.js +1 -0
- package/dist/web/client/assets/prism-sql-CYhVDMEE.js +1 -0
- package/dist/web/client/assets/prism-toml-DKb54GAT.js +1 -0
- package/dist/web/client/assets/prism-tsx-p6J2Kc_4.js +1 -0
- package/dist/web/client/assets/prism-typescript-BMqONzxf.js +1 -0
- package/dist/web/client/assets/prism-yaml-C0JHu8gr.js +1 -0
- package/dist/web/client/assets/purify.es-ChwZkWde.js +3 -0
- package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +7 -0
- package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +1 -0
- package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +1 -0
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +1 -0
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +1 -0
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +1 -0
- package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +1 -0
- package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +84 -0
- package/dist/web/client/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +40 -0
- package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +162 -0
- package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- package/dist/web/client/assets/src-B6xuSHsQ.js +1 -0
- package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +1 -0
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +1 -0
- package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +1 -0
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +8 -0
- package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +120 -0
- package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +1 -0
- package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +1 -0
- package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +34 -0
- package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +1 -0
- package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +78 -0
- package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +7 -0
- package/dist/web/client/clio-coder-logo.webp +0 -0
- package/dist/web/client/icon-192.png +0 -0
- package/dist/web/client/icon-512.png +0 -0
- package/dist/web/client/index.html +6 -0
- package/dist/web/client/manifest.webmanifest +15 -0
- package/dist/web/client/offline.css +55 -0
- package/dist/web/client/offline.html +5 -0
- package/dist/web/client/offline.js +27 -0
- package/dist/web/client/sw.js +34 -0
- package/dist/web/ops-worker.js +37 -0
- package/dist/web/reads-worker.js +1726 -0
- package/dist/web/server.js +8499 -0
- package/dist/web-EMGUGGEI.js +13 -0
- package/dist/{web-fetch-W4TNW4Q7.js → web-fetch-6BRRVQON.js} +22 -5
- package/dist/{wiki-generate-T2TJQJUA.js → wiki-generate-XHSJTDOP.js} +120 -113
- package/dist/{with-panes-CHFC7HGI.js → with-panes-Z6BTEHMZ.js} +12 -12
- package/dist/worker/entry.js +113 -99
- package/docs/README.md +28 -27
- package/docs/architecture/acp.md +5 -9
- package/docs/architecture/alcf-provider.md +0 -3
- package/docs/architecture/architecture.md +0 -3
- package/docs/architecture/artifact-placement.md +12 -4
- package/docs/architecture/artifact-versions.md +0 -3
- package/docs/architecture/capacity-and-scheduling.md +0 -3
- package/docs/architecture/context-engine.md +0 -3
- package/docs/architecture/context-working-set.md +0 -3
- package/docs/architecture/dispatch-architecture-rationale.md +0 -3
- package/docs/architecture/dispatch-typed-intent.md +0 -3
- package/docs/architecture/evidence-and-memory.md +0 -3
- package/docs/architecture/library.md +1 -3
- package/docs/architecture/middleware-and-components.md +0 -3
- package/docs/architecture/model-catalog.md +1 -4
- package/docs/architecture/observability.md +0 -3
- package/docs/architecture/pi-boundary.md +6 -9
- package/docs/architecture/prompt-envelope-and-tools.md +37 -30
- package/docs/architecture/provider-adapter-cookbook.md +1 -4
- package/docs/architecture/safety-model.md +19 -9
- package/docs/architecture/session-lifecycle.md +10 -7
- package/docs/architecture/time-conventions.md +0 -3
- package/docs/architecture/trace-store.md +28 -20
- package/docs/architecture/tui-design.md +38 -18
- package/docs/architecture/worker-context.md +1 -3
- package/docs/architecture/worker-dispatch-mechanics.md +1 -4
- package/docs/guide/authoring-plugins.md +1 -3
- package/docs/guide/built-in-agents.md +0 -3
- package/docs/guide/commands-and-modes.md +41 -25
- package/docs/guide/configuration-and-targets.md +204 -9
- package/docs/guide/configuration-reference.md +125 -17
- package/docs/guide/environment-variables.md +2 -8
- package/docs/guide/exit-codes-and-output.md +0 -3
- package/docs/guide/extensions-and-sharing.md +0 -3
- package/docs/guide/fleet-dispatch.md +3 -5
- package/docs/guide/glossary.md +1 -4
- package/docs/guide/harness-extensions.md +0 -2
- package/docs/guide/installation-and-lifecycle.md +3 -6
- package/docs/guide/interop.md +0 -2
- package/docs/guide/panes-and-files.md +0 -3
- package/docs/guide/plugins.md +0 -3
- package/docs/guide/proactive-memory.md +0 -3
- package/docs/guide/resource-library.md +1 -3
- package/docs/guide/skills-marketplace.md +0 -2
- package/docs/guide/tool-usage.md +166 -67
- package/docs/guide/troubleshooting.md +1 -4
- package/docs/history/config-knobs-audit.md +0 -3
- package/docs/history/release-cut-checklist.md +0 -3
- package/docs/process/development-pipeline.md +0 -3
- package/docs/process/documentation-coverage.md +3 -3
- package/docs/process/documentation-guide.md +16 -22
- package/docs/process/eval-runner.md +0 -3
- package/docs/process/evals-internal.md +0 -3
- package/docs/process/evolution.md +0 -3
- package/docs/process/fleet-demo-runbook.md +6 -9
- package/docs/process/git-commit-provenance.md +0 -3
- package/docs/process/performance-methodology.md +1 -4
- package/docs/process/release-cut-checklist.md +114 -221
- package/docs/process/scientific-validation.md +23 -6
- package/docs/process/tool-audit-v0.4.9.md +357 -0
- package/library/registry.yaml +2 -2
- package/library/skills/meta/clio-coder-test/SKILL.md +25 -15
- package/library/skills/meta/clio-coder-test/evals.md +16 -2
- package/library/skills/meta/clio-coder-test/plugin.json +1 -1
- package/library/skills/meta/clio-coder-test/references/test-map.md +19 -18
- package/library/skills/registry.yaml +2 -2
- package/library/skills/skill-marketplace.json +1 -1
- package/package.json +13 -11
- package/src/cli/argv.ts +31 -0
- package/src/cli/clio.ts +17 -13
- package/src/cli/config.ts +4 -0
- package/src/cli/docs.ts +65 -328
- package/src/cli/doctor-panes.ts +1 -1
- package/src/cli/doctor.ts +3 -1
- package/src/cli/index.ts +17 -2
- package/src/cli/mcp.ts +106 -0
- package/src/cli/skills-eval.ts +8 -2
- package/src/cli/trace.ts +4 -65
- package/src/cli/uninstall.ts +26 -0
- package/src/cli/upgrade.ts +34 -38
- package/src/cli/usage.ts +3 -0
- package/src/cli/verifiers.ts +1 -1
- package/src/cli/web.ts +79 -0
- package/src/core/bash-exec.ts +27 -4
- package/src/core/bus-events.ts +3 -4
- package/src/core/config.ts +73 -1
- package/src/core/defaults.ts +10 -1
- package/src/core/domain-loader.ts +37 -28
- package/src/core/event-bus.ts +1 -1
- package/src/core/run-records.ts +438 -0
- package/src/core/safe-exec.ts +506 -56
- package/src/core/skill-activation.ts +5 -3
- package/src/core/termination.ts +16 -12
- package/src/core/tool-names.ts +33 -12
- package/src/domains/agents/contract.ts +1 -1
- package/src/domains/agents/extension.ts +18 -10
- package/src/domains/config/extension.ts +5 -4
- package/src/domains/context/clio-md.ts +1 -1
- package/src/domains/context/worker/pressure.ts +6 -2
- package/src/domains/context/working-set/path-index.ts +7 -2
- package/src/domains/dispatch/code-step.ts +7 -2
- package/src/domains/dispatch/contract.ts +7 -0
- package/src/domains/dispatch/execution-role.ts +3 -3
- package/src/domains/dispatch/execution-scheduler.ts +204 -79
- package/src/domains/dispatch/extension.ts +206 -26
- package/src/domains/dispatch/fleet-preflight.ts +18 -3
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/gate-decisions.ts +3 -3
- package/src/domains/dispatch/heartbeat.ts +1 -1
- package/src/domains/dispatch/host-verification.ts +16 -14
- package/src/domains/dispatch/index.ts +1 -0
- package/src/domains/dispatch/orphan-recovery.ts +1 -0
- package/src/domains/dispatch/receipt-findings.ts +3 -4
- package/src/domains/dispatch/receipt-integrity.ts +3 -0
- package/src/domains/dispatch/reservation-store.ts +7 -9
- package/src/domains/dispatch/route-facts.ts +1 -1
- package/src/domains/dispatch/state.ts +4 -5
- package/src/domains/dispatch/types.ts +3 -1
- package/src/domains/eval/metrics/tracked.ts +22 -2
- package/src/domains/evidence/build.ts +35 -7
- package/src/domains/extensions/operator-runtime.ts +3 -1
- package/src/domains/gateway/mcp/client.ts +923 -0
- package/src/domains/gateway/mcp/config.ts +456 -0
- package/src/domains/gateway/mcp/index.ts +88 -0
- package/src/domains/gateway/mcp/protocol.ts +273 -0
- package/src/domains/gateway/mcp/trust.ts +263 -0
- package/src/domains/lifecycle/doctor.ts +17 -3
- package/src/domains/middleware/hooks.ts +2 -2
- package/src/domains/mux/contract.ts +5 -9
- package/src/domains/mux/detect.ts +1 -1
- package/src/domains/mux/extension.ts +1 -1
- package/src/domains/mux/protocol.ts +5 -7
- package/src/domains/mux/socket-client.ts +3 -3
- package/src/domains/observability/accountability.ts +2 -2
- package/src/domains/observability/background-memory-usage.ts +3 -0
- package/src/domains/observability/compaction-usage.ts +2 -0
- package/src/domains/observability/contract.ts +7 -3
- package/src/domains/observability/cost.ts +5 -0
- package/src/domains/observability/evidence-index.ts +2 -2
- package/src/domains/observability/extension.ts +1 -0
- package/src/domains/observability/out-of-turn-usage.ts +2 -0
- package/src/domains/observability/projection.ts +10 -0
- package/src/domains/observability/trace-store.ts +65 -5
- package/src/domains/prompts/compiler.ts +41 -23
- package/src/domains/prompts/extension.ts +4 -17
- package/src/domains/prompts/fragments/identity/docs-routing.md +2 -2
- package/src/domains/prompts/fragments/operating/skills.md +12 -10
- package/src/domains/providers/cache-deployment.ts +147 -0
- package/src/domains/providers/catalog.ts +12 -7
- package/src/domains/providers/extension.ts +27 -5
- package/src/domains/providers/index.ts +6 -1
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +42 -10
- package/src/domains/providers/plugins.ts +3 -13
- package/src/domains/providers/probe/http.ts +44 -59
- package/src/domains/providers/probe/reasoning.ts +2 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +20 -31
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +9 -4
- package/src/domains/providers/types/target-descriptor.ts +17 -0
- package/src/domains/safety/action-classifier.ts +17 -1
- package/src/domains/safety/call-target.ts +14 -0
- package/src/domains/safety/contract.ts +1 -1
- package/src/domains/safety/finish-contract.ts +9 -3
- package/src/domains/safety/loop-detector.ts +1 -1
- package/src/domains/safety/policy-engine.ts +7 -0
- package/src/domains/safety/protected-artifacts.ts +3 -4
- package/src/domains/safety/rejection-feedback.ts +1 -1
- package/src/domains/safety/scope.ts +2 -3
- package/src/domains/safety/validation-contract.ts +3 -2
- package/src/domains/scheduling/budget.ts +5 -3
- package/src/domains/scheduling/contract.ts +2 -1
- package/src/domains/scheduling/extension.ts +3 -3
- package/src/domains/session/compaction/branch-summary.ts +1 -1
- package/src/domains/session/compaction/compact.ts +29 -3
- package/src/domains/session/compaction/cut-point.ts +1 -1
- package/src/domains/session/compaction/tokens.ts +5 -10
- package/src/domains/session/contract.ts +1 -1
- package/src/domains/session/cwd-fallback.ts +2 -2
- package/src/domains/session/entries.ts +1 -0
- package/src/domains/session/handoff.ts +5 -1
- package/src/domains/session/history.ts +6 -0
- package/src/domains/session/manager.ts +14 -7
- package/src/domains/session/retry.ts +2 -1
- package/src/domains/session/session-artifacts.ts +12 -7
- package/src/domains/session/task-board.ts +2 -3
- package/src/domains/session/usage.ts +6 -7
- package/src/engine/acp/server.ts +11 -0
- package/src/engine/ai.ts +2 -0
- package/src/engine/apis/openai-completions.ts +17 -4
- package/src/engine/loop-guard.ts +7 -0
- package/src/engine/prewarm.ts +232 -0
- package/src/engine/provider-diagnostics.ts +6 -1
- package/src/engine/provider-error-body.ts +65 -0
- package/src/engine/session.ts +118 -29
- package/src/engine/worker-runtime.ts +3 -0
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +38 -18
- package/src/interactive/chat-loop-messages.ts +3 -0
- package/src/interactive/chat-loop-policy.ts +1 -0
- package/src/interactive/chat-loop.ts +10 -12
- package/src/interactive/chat-panel.ts +23 -9
- package/src/interactive/chat-renderer.ts +33 -11
- package/src/interactive/clio-editor.ts +13 -5
- package/src/interactive/dispatch-board.ts +70 -30
- package/src/interactive/editor-submit.ts +30 -25
- package/src/interactive/footer/widgets.ts +12 -9
- package/src/interactive/interactive-presentation.ts +2 -3
- package/src/interactive/mux-bridge.ts +3 -7
- package/src/interactive/overlay-general-openers.ts +14 -7
- package/src/interactive/overlays/cwd-fallback.ts +1 -1
- package/src/interactive/overlays/library-model.ts +114 -35
- package/src/interactive/overlays/library.ts +52 -5
- package/src/interactive/overlays/list-overlay.ts +4 -1
- package/src/interactive/overlays/session-selector.ts +28 -23
- package/src/interactive/overlays/settings.ts +20 -1
- package/src/interactive/overlays/tree-selector.ts +47 -10
- package/src/interactive/panes-runtime.ts +1 -1
- package/src/interactive/prewarm.ts +11 -197
- package/src/interactive/renderers/compaction-summary.ts +1 -1
- package/src/interactive/renderers/provider-error.ts +118 -0
- package/src/interactive/renderers/retry-status.ts +59 -23
- package/src/interactive/renderers/tool-execution.ts +67 -7
- package/src/interactive/renderers/worker-answer.ts +198 -0
- package/src/interactive/renderers/worker-entry.ts +57 -163
- package/src/interactive/session-usage-reseed.ts +2 -0
- package/src/interactive/side-question.ts +2 -0
- package/src/interactive/slash-commands.ts +26 -1
- package/src/interactive/slash-spec.ts +2 -2
- package/src/interactive/theme/labels.ts +66 -30
- package/src/interactive/turn-context.ts +1 -0
- package/src/interactive/turn-persistence.ts +9 -1
- package/src/interactive/turn-prewarm.ts +126 -19
- package/src/interactive/turn-recovery.ts +2 -1
- package/src/interactive/turn-runtime.ts +36 -5
- package/src/interactive/view/artifacts.ts +3 -2
- package/src/interactive/view/view-overlay.ts +96 -20
- package/src/tools/agent-tools.ts +21 -7
- package/src/tools/artifact.ts +16 -8
- package/src/tools/bash.ts +90 -11
- package/src/tools/bootstrap.ts +42 -4
- package/src/tools/builtin-tool-catalog.ts +80 -11
- package/src/tools/context/index.ts +27 -31
- package/src/tools/context/library.ts +3 -1
- package/src/tools/context/surface.ts +12 -26
- package/src/tools/core-bootstrap.ts +72 -1
- package/src/tools/data/csv.ts +1189 -0
- package/src/tools/data/index.ts +308 -0
- package/src/tools/data/json.ts +1799 -0
- package/src/tools/data/jsonl.ts +561 -0
- package/src/tools/data/shared.ts +452 -0
- package/src/tools/edit-diff.ts +0 -7
- package/src/tools/edit.ts +115 -18
- package/src/tools/file-mutation-queue.ts +114 -4
- package/src/tools/find.ts +108 -29
- package/src/tools/gateway/caps.ts +11 -0
- package/src/tools/gateway/clio-context-surface.ts +41 -0
- package/src/tools/gateway/clio-context-tools.ts +77 -0
- package/src/tools/gateway/data-surface.ts +138 -0
- package/src/tools/gateway/data-tool.ts +201 -0
- package/src/tools/gateway/index.ts +342 -0
- package/src/tools/gateway/mcp-capabilities.ts +469 -0
- package/src/tools/grep.ts +88 -33
- package/src/tools/harness-extensions.ts +3 -0
- package/src/tools/ignore-policy.ts +7 -5
- package/src/tools/ls.ts +111 -20
- package/src/tools/policy.ts +35 -13
- package/src/tools/presentation.ts +6 -0
- package/src/tools/read.ts +634 -156
- package/src/tools/registry.ts +106 -8
- package/src/tools/run-script.ts +997 -0
- package/src/tools/spawn-hygiene.ts +157 -5
- package/src/tools/surface.ts +163 -0
- package/src/tools/verify/authoring.ts +8 -3
- package/src/tools/verify/catalog.ts +14 -1
- package/src/tools/verify/numeric.ts +367 -59
- package/src/tools/verify/perf.ts +171 -9
- package/src/tools/verify/scripts.ts +178 -26
- package/src/tools/web-fetch-surface.ts +22 -0
- package/src/tools/web-fetch.ts +26 -1
- package/src/tools/write.ts +45 -19
- package/src/worker/spec-contract.ts +27 -0
- package/dist/chunk-B6UM3OZC.js +0 -15
- package/dist/chunk-GJ24ODAX.js +0 -196
- package/dist/chunk-HRAKUPIH.js +0 -57
- package/dist/docs-BL7ROUFN.js +0 -292
package/src/engine/session.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Clio session JSONL writer + reader
|
|
2
|
+
* Clio session JSONL writer + reader.
|
|
3
3
|
*
|
|
4
4
|
* On-disk layout under `clioStateDir()`:
|
|
5
5
|
* sessions/<cwdHash>/<sessionId>/
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Atomicity:
|
|
11
11
|
* - Appends go to an O_APPEND fd held for the writer's lifetime; each line
|
|
12
|
-
*
|
|
12
|
+
* uses complete byte writes. fsync is debounced after appends and forced on
|
|
13
13
|
* checkpoint (`persistTree`) and `close`. A torn last line from a crash
|
|
14
14
|
* is tolerated by the reader (skipped with a warning).
|
|
15
15
|
* - `replaceEntries` rewrites current.jsonl via `writeJsonlFileAtomic`
|
|
@@ -28,6 +28,7 @@ import {
|
|
|
28
28
|
constants as fsConstants,
|
|
29
29
|
fstatSync,
|
|
30
30
|
fsyncSync,
|
|
31
|
+
ftruncateSync,
|
|
31
32
|
mkdirSync,
|
|
32
33
|
openSync,
|
|
33
34
|
readdirSync,
|
|
@@ -35,6 +36,7 @@ import {
|
|
|
35
36
|
readSync,
|
|
36
37
|
renameSync,
|
|
37
38
|
statSync,
|
|
39
|
+
unlinkSync,
|
|
38
40
|
writeSync,
|
|
39
41
|
} from "node:fs";
|
|
40
42
|
import { dirname, join, resolve } from "node:path";
|
|
@@ -197,6 +199,31 @@ function serializeJsonl(entries: ReadonlyArray<unknown>): string {
|
|
|
197
199
|
return `${lines.join("\n")}\n`;
|
|
198
200
|
}
|
|
199
201
|
|
|
202
|
+
/** Complete UTF-8 bytes even when write(2) makes only partial progress. */
|
|
203
|
+
function writeAll(fd: number, bytes: Buffer): void {
|
|
204
|
+
let offset = 0;
|
|
205
|
+
while (offset < bytes.length) {
|
|
206
|
+
const written = writeSync(fd, bytes, offset, bytes.length - offset);
|
|
207
|
+
if (written <= 0) throw new Error(`session JSONL write made no progress after ${offset} of ${bytes.length} bytes`);
|
|
208
|
+
offset += written;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** Roll back a failed append so a retry cannot fuse onto its partial record. */
|
|
213
|
+
function appendAll(fd: number, bytes: Buffer): void {
|
|
214
|
+
const size = fstatSync(fd).size;
|
|
215
|
+
try {
|
|
216
|
+
writeAll(fd, bytes);
|
|
217
|
+
} catch (error) {
|
|
218
|
+
try {
|
|
219
|
+
ftruncateSync(fd, size);
|
|
220
|
+
} catch (rollbackError) {
|
|
221
|
+
throw new AggregateError([error, rollbackError], "session JSONL append and rollback failed; reopen to recover");
|
|
222
|
+
}
|
|
223
|
+
throw error;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
200
227
|
/**
|
|
201
228
|
* Rewrite a JSONL file through `<target>.tmp` and rename over the target.
|
|
202
229
|
* A crash or interruption before the rename leaves the original target
|
|
@@ -213,10 +240,21 @@ function writeJsonlFileAtomic(
|
|
|
213
240
|
const tmp = `${targetPath}.tmp`;
|
|
214
241
|
const fd = openSync(tmp, "w");
|
|
215
242
|
try {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
243
|
+
try {
|
|
244
|
+
writeAll(fd, Buffer.from(body, "utf8"));
|
|
245
|
+
fsyncSync(fd);
|
|
246
|
+
} finally {
|
|
247
|
+
closeSync(fd);
|
|
248
|
+
}
|
|
249
|
+
} catch (error) {
|
|
250
|
+
// A missing target can recover from .tmp, so an incomplete write
|
|
251
|
+
// must not leave a candidate that recovery could promote.
|
|
252
|
+
try {
|
|
253
|
+
unlinkSync(tmp);
|
|
254
|
+
} catch (cleanupError) {
|
|
255
|
+
throw new AggregateError([error, cleanupError], "session JSONL write and temporary cleanup failed");
|
|
256
|
+
}
|
|
257
|
+
throw error;
|
|
220
258
|
}
|
|
221
259
|
options.beforeRename?.(tmp, targetPath);
|
|
222
260
|
renameSync(tmp, targetPath);
|
|
@@ -633,10 +671,7 @@ export function appendSessionFileEntry(targetPath: string, entry: unknown): void
|
|
|
633
671
|
const line = Buffer.from(`${endsWithNewline(appendPath) ? "" : "\n"}${serialized}\n`, "utf8");
|
|
634
672
|
const fd = openSync(appendPath, fsConstants.O_WRONLY | fsConstants.O_APPEND);
|
|
635
673
|
try {
|
|
636
|
-
|
|
637
|
-
if (written !== line.length) {
|
|
638
|
-
throw new Error(`short session JSONL append: wrote ${written} of ${line.length} bytes`);
|
|
639
|
-
}
|
|
674
|
+
appendAll(fd, line);
|
|
640
675
|
fsyncSync(fd);
|
|
641
676
|
} finally {
|
|
642
677
|
closeSync(fd);
|
|
@@ -655,6 +690,9 @@ function createWriter(
|
|
|
655
690
|
let closed = false;
|
|
656
691
|
let appendFd: number | null = null;
|
|
657
692
|
let fsyncTimer: NodeJS.Timeout | null = null;
|
|
693
|
+
// Descriptor cleanup must not discard accepted bytes or rollback changes
|
|
694
|
+
// still owed to the next debounce, checkpoint, flush, or close.
|
|
695
|
+
let pendingFsync = false;
|
|
658
696
|
|
|
659
697
|
// One-time normalization for resumes of pre-header files: rewrite once so
|
|
660
698
|
// fd-appended lines land after a header. Disk and memory match from here on.
|
|
@@ -668,7 +706,10 @@ function createWriter(
|
|
|
668
706
|
appendFd = openSync(paths.current, "a");
|
|
669
707
|
// Terminating the fragment keeps the reader's torn-tail behavior:
|
|
670
708
|
// it skips exactly one invalid line with a warning.
|
|
671
|
-
if (tornTail)
|
|
709
|
+
if (tornTail) {
|
|
710
|
+
pendingFsync = true;
|
|
711
|
+
appendAll(appendFd, Buffer.from("\n"));
|
|
712
|
+
}
|
|
672
713
|
return appendFd;
|
|
673
714
|
}
|
|
674
715
|
|
|
@@ -676,28 +717,52 @@ function createWriter(
|
|
|
676
717
|
if (fsyncTimer !== null) return;
|
|
677
718
|
fsyncTimer = setTimeout(() => {
|
|
678
719
|
fsyncTimer = null;
|
|
679
|
-
if (appendFd === null) return;
|
|
680
720
|
try {
|
|
681
|
-
|
|
721
|
+
flushPendingAppends();
|
|
682
722
|
} catch {
|
|
683
|
-
//
|
|
723
|
+
// Keep the obligation pending. Explicit flush/checkpoint/close
|
|
724
|
+
// retries and reports an error if storage is still unavailable.
|
|
684
725
|
}
|
|
685
726
|
}, APPEND_FSYNC_DEBOUNCE_MS);
|
|
686
727
|
fsyncTimer.unref?.();
|
|
687
728
|
}
|
|
688
729
|
|
|
730
|
+
function flushPendingAppends(): void {
|
|
731
|
+
if (appendFd !== null) {
|
|
732
|
+
fsyncSync(appendFd);
|
|
733
|
+
pendingFsync = false;
|
|
734
|
+
return;
|
|
735
|
+
}
|
|
736
|
+
if (!pendingFsync || stateRootRemoved()) return;
|
|
737
|
+
// Reopen without O_CREAT or tail normalization: flushing after a failed
|
|
738
|
+
// append must neither recreate removed state nor alter retained bytes.
|
|
739
|
+
const fd = openSync(paths.current, fsConstants.O_WRONLY | fsConstants.O_APPEND);
|
|
740
|
+
try {
|
|
741
|
+
fsyncSync(fd);
|
|
742
|
+
} catch (error) {
|
|
743
|
+
try {
|
|
744
|
+
closeSync(fd);
|
|
745
|
+
} catch (closeError) {
|
|
746
|
+
throw new AggregateError([error, closeError], "session JSONL flush and close failed");
|
|
747
|
+
}
|
|
748
|
+
throw error;
|
|
749
|
+
}
|
|
750
|
+
closeSync(fd);
|
|
751
|
+
pendingFsync = false;
|
|
752
|
+
}
|
|
753
|
+
|
|
689
754
|
function closeAppendFd(opts: { flush: boolean }): void {
|
|
755
|
+
if (opts.flush) flushPendingAppends();
|
|
690
756
|
if (fsyncTimer !== null) {
|
|
691
757
|
clearTimeout(fsyncTimer);
|
|
692
758
|
fsyncTimer = null;
|
|
693
759
|
}
|
|
694
760
|
if (appendFd === null) return;
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
}
|
|
761
|
+
const fd = appendFd;
|
|
762
|
+
// A failed close can already have released the OS descriptor. Never
|
|
763
|
+
// retain that ambiguous number for a later append or duplicate close.
|
|
764
|
+
appendFd = null;
|
|
765
|
+
closeSync(fd);
|
|
701
766
|
}
|
|
702
767
|
|
|
703
768
|
function appendLine(entry: unknown): void {
|
|
@@ -705,7 +770,21 @@ function createWriter(
|
|
|
705
770
|
if (serialized === undefined) {
|
|
706
771
|
throw new Error("session JSONL entry is not serializable");
|
|
707
772
|
}
|
|
708
|
-
|
|
773
|
+
try {
|
|
774
|
+
const fd = openAppendFd();
|
|
775
|
+
pendingFsync = true;
|
|
776
|
+
appendAll(fd, Buffer.from(`${serialized}\n`, "utf8"));
|
|
777
|
+
} catch (error) {
|
|
778
|
+
// Reopening rechecks the tail even if rollback itself failed.
|
|
779
|
+
try {
|
|
780
|
+
closeAppendFd({ flush: false });
|
|
781
|
+
} catch (closeError) {
|
|
782
|
+
throw new AggregateError([error, closeError], "session JSONL append and close failed");
|
|
783
|
+
} finally {
|
|
784
|
+
scheduleFsync();
|
|
785
|
+
}
|
|
786
|
+
throw error;
|
|
787
|
+
}
|
|
709
788
|
scheduleFsync();
|
|
710
789
|
}
|
|
711
790
|
|
|
@@ -747,7 +826,7 @@ function createWriter(
|
|
|
747
826
|
},
|
|
748
827
|
async persistTree(): Promise<void> {
|
|
749
828
|
// Checkpoint: make appended lines durable alongside the tree.
|
|
750
|
-
|
|
829
|
+
flushPendingAppends();
|
|
751
830
|
// `paths` was resolved at construction, but atomicWrite mkdirs the
|
|
752
831
|
// session directory again, so an uninstall that has already removed the
|
|
753
832
|
// state root would be undone here. Fsyncing the held fd first is safe
|
|
@@ -756,7 +835,7 @@ function createWriter(
|
|
|
756
835
|
atomicWrite(paths.tree, JSON.stringify(tree, null, 2));
|
|
757
836
|
},
|
|
758
837
|
flushAppends(): void {
|
|
759
|
-
|
|
838
|
+
flushPendingAppends();
|
|
760
839
|
},
|
|
761
840
|
async close(): Promise<void> {
|
|
762
841
|
if (closed) return;
|
|
@@ -827,7 +906,10 @@ export function openSession(id: string): ClioSessionReader {
|
|
|
827
906
|
};
|
|
828
907
|
}
|
|
829
908
|
|
|
830
|
-
export function resumeSession(
|
|
909
|
+
export function resumeSession(
|
|
910
|
+
id: string,
|
|
911
|
+
options: { sessionFormatVersion?: number } = {},
|
|
912
|
+
): {
|
|
831
913
|
meta: ClioSessionMeta;
|
|
832
914
|
writer: ClioSessionWriter;
|
|
833
915
|
tree: ReadonlyArray<SessionTreeNode>;
|
|
@@ -835,13 +917,20 @@ export function resumeSession(id: string): {
|
|
|
835
917
|
const dir = findSessionDir(id);
|
|
836
918
|
const metaPath = join(dir, "meta.json");
|
|
837
919
|
const meta = readMetaFile(metaPath);
|
|
838
|
-
// resume reopens an active session; clear endedAt if it was set by a prior close
|
|
839
|
-
if (meta.endedAt !== null) {
|
|
840
|
-
meta.endedAt = null;
|
|
841
|
-
atomicWrite(metaPath, JSON.stringify(meta, null, 2));
|
|
842
|
-
}
|
|
843
920
|
const existingFileEntries = readSessionFileEntries(join(dir, "current.jsonl"));
|
|
844
921
|
const existingTree = recoverTreeFromJsonl(readTreeFile(join(dir, "tree.json")), existingFileEntries);
|
|
845
922
|
const writer = createWriter(meta, existingTree, existingFileEntries);
|
|
923
|
+
// Prepare headerless ledgers before publishing that a closed session has
|
|
924
|
+
// reopened. A failed normalization must preserve its prior ended state.
|
|
925
|
+
// Reopening and a migration restamp are one atomic publication: a refused
|
|
926
|
+
// resume can never leave the session marked open under its old version.
|
|
927
|
+
const restamp = options.sessionFormatVersion;
|
|
928
|
+
const restamped = restamp !== undefined && meta.sessionFormatVersion !== restamp;
|
|
929
|
+
if (meta.endedAt !== null || restamped) {
|
|
930
|
+
const reopened = { ...meta, endedAt: null, ...(restamped ? { sessionFormatVersion: restamp } : {}) };
|
|
931
|
+
atomicWrite(metaPath, JSON.stringify(reopened, null, 2));
|
|
932
|
+
meta.endedAt = null;
|
|
933
|
+
if (restamped) meta.sessionFormatVersion = restamp;
|
|
934
|
+
}
|
|
846
935
|
return { meta, writer, tree: existingTree };
|
|
847
936
|
}
|
|
@@ -621,6 +621,9 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
621
621
|
correlationId: `worker-model-round-${workerModelRound}`,
|
|
622
622
|
toolResultMaxBytes: workerSettings.context.toolResultMaxBytes,
|
|
623
623
|
supportsImages: model.input.includes("image"),
|
|
624
|
+
// The admitted capability list, so the gateway calls only what the
|
|
625
|
+
// recipe declared: the same bound the attached schemas already honor.
|
|
626
|
+
allowedTools: input.allowedTools,
|
|
624
627
|
...(agentSkillPolicy ? { pendingSkillPolicy: agentSkillPolicy } : {}),
|
|
625
628
|
}),
|
|
626
629
|
});
|
|
@@ -28,6 +28,8 @@ export interface BootOptions {
|
|
|
28
28
|
startupSettings?: Readonly<ClioSettings>;
|
|
29
29
|
/** `--with-panes` / `--no-panes`. The flag beats `panes.enabled` in both directions. */
|
|
30
30
|
panes?: "with" | "without";
|
|
31
|
+
/** Global `--autonomy <level>`: a one-session override for the interactive app; settings.yaml is untouched. */
|
|
32
|
+
autonomy?: AutonomyLevel;
|
|
31
33
|
headless?: {
|
|
32
34
|
prompt: string;
|
|
33
35
|
images?: ReadonlyArray<ImageContent>;
|
|
@@ -36,7 +36,7 @@ import {
|
|
|
36
36
|
import { getSharedBus } from "../core/shared-bus.js";
|
|
37
37
|
import { isSkillActivation } from "../core/skill-activation.js";
|
|
38
38
|
import { StartupTimer } from "../core/startup-timer.js";
|
|
39
|
-
import { getTerminationCoordinator } from "../core/termination.js";
|
|
39
|
+
import { getTerminationCoordinator, resolveShutdownHookBudgetMs } from "../core/termination.js";
|
|
40
40
|
import { captureProjectSurface, projectSurfaceTrustNotice } from "../core/workspace-trust.js";
|
|
41
41
|
import { clioDataDir, clioStateDir } from "../core/xdg.js";
|
|
42
42
|
import { renderAgentCatalogSectionsFromSpecs } from "../domains/agents/catalog.js";
|
|
@@ -120,6 +120,7 @@ import {
|
|
|
120
120
|
isOrchestratorEligibleRuntime,
|
|
121
121
|
normalizeCostProvenance,
|
|
122
122
|
ProvidersDomainModule,
|
|
123
|
+
probeCapabilitiesForModel,
|
|
123
124
|
refineRuntimeTargetWithModelHints,
|
|
124
125
|
registerForegroundStream,
|
|
125
126
|
resolveEndpointCapacities,
|
|
@@ -603,6 +604,17 @@ function agentRoleToolWarnings(providers: ProvidersContract, settings: Readonly<
|
|
|
603
604
|
if (!status) continue;
|
|
604
605
|
const capabilities = resolveModelCapabilities(status, wireModelId, providers.knowledgeBase);
|
|
605
606
|
if (supportsAgentRoleTools(capabilities)) continue;
|
|
607
|
+
// A target that was never probed has reported nothing about this model:
|
|
608
|
+
// the flag is only the runtime's conservative floor. Dispatch admission
|
|
609
|
+
// probes the route itself before it refuses a worker.
|
|
610
|
+
const declared =
|
|
611
|
+
status.target.capabilities?.tools ?? providers.knowledgeBase?.lookup(wireModelId)?.entry.capabilities?.tools;
|
|
612
|
+
if (
|
|
613
|
+
declared === undefined &&
|
|
614
|
+
status.health.lastCheckAt === null &&
|
|
615
|
+
probeCapabilitiesForModel(status, wireModelId) === null
|
|
616
|
+
)
|
|
617
|
+
continue;
|
|
606
618
|
warnings.push(
|
|
607
619
|
`${role.label} model '${wireModelId}' on target '${targetId}' ${AGENT_ROLE_TOOLS_REQUIRED_REASON}. ` +
|
|
608
620
|
`Pick another model, or state the correction in a model-catalog.d entry if the provider's flag is wrong.`,
|
|
@@ -1184,7 +1196,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1184
1196
|
createDispatchDomainModule({
|
|
1185
1197
|
getSettings: () => effectiveSettingsForDispatch?.(),
|
|
1186
1198
|
getProtectedArtifactState: () => protectedArtifactStateForDispatch?.() ?? { artifacts: [] },
|
|
1187
|
-
autonomyOverride: options.headless?.autonomy !== undefined,
|
|
1199
|
+
autonomyOverride: (options.headless?.autonomy ?? options.autonomy) !== undefined,
|
|
1188
1200
|
// The domain owns the durable journal here, not the dispatch
|
|
1189
1201
|
// tool's event registry: `/run`, a watchdog run, and a model
|
|
1190
1202
|
// dispatch all have to leave the same transcript behind, and only
|
|
@@ -1203,8 +1215,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1203
1215
|
await dispatch.drain();
|
|
1204
1216
|
});
|
|
1205
1217
|
}
|
|
1206
|
-
|
|
1207
|
-
|
|
1218
|
+
// The loader caps each domain separately. The outer hook must allow the
|
|
1219
|
+
// whole sequence to finish, including cleanup after a timed-out domain.
|
|
1220
|
+
termination.onPersist(() => result.stop(), {
|
|
1221
|
+
timeoutMs: Math.min(2 ** 31 - 1, (result.loaded.length + 1) * resolveShutdownHookBudgetMs()),
|
|
1208
1222
|
});
|
|
1209
1223
|
|
|
1210
1224
|
bus.emit(BusChannels.SessionStart, { at: Date.now() });
|
|
@@ -1373,12 +1387,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1373
1387
|
// this boot projection below.
|
|
1374
1388
|
configureRunEventJournal(resolvedSettings.fleet.history.journal);
|
|
1375
1389
|
|
|
1376
|
-
//
|
|
1377
|
-
//
|
|
1378
|
-
//
|
|
1379
|
-
//
|
|
1380
|
-
// worker-runtime.ts; the orchestrator instances carry the bus and the
|
|
1381
|
-
// session persistence sink.
|
|
1390
|
+
// Register the loop and dispatch guards first. The protected-artifact guard
|
|
1391
|
+
// is constructed here but registered after user hooks below, so it can
|
|
1392
|
+
// absorb their protect_path effects. Workers register their own guards in
|
|
1393
|
+
// worker-runtime.ts; these instances carry the bus and session persistence.
|
|
1382
1394
|
middleware.registerHook(
|
|
1383
1395
|
createLoopGuardRegistration({
|
|
1384
1396
|
safety,
|
|
@@ -1427,7 +1439,6 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1427
1439
|
}
|
|
1428
1440
|
return protectedArtifactsGuard.state();
|
|
1429
1441
|
};
|
|
1430
|
-
middleware.registerHook(protectedArtifactsGuard);
|
|
1431
1442
|
middleware.registerHook(createDispatchDedupRegistration());
|
|
1432
1443
|
// Observers run after the guards; they emit no effects and their sinks are
|
|
1433
1444
|
// best-effort (session ledger, codewiki refresh).
|
|
@@ -1525,9 +1536,9 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1525
1536
|
}
|
|
1526
1537
|
// User-defined hooks: extensions and the project (.clio-coder/hooks.yaml,
|
|
1527
1538
|
// .clio-coder/hooks.local.yaml) declare a conservative, receipted hook set on the
|
|
1528
|
-
// same effect machinery.
|
|
1529
|
-
//
|
|
1530
|
-
//
|
|
1539
|
+
// same effect machinery. A hook may add effects (including request block_tool)
|
|
1540
|
+
// but cannot grant a permission safety would deny. The protected-artifact
|
|
1541
|
+
// guard follows them to consume protect_path before tool execution.
|
|
1531
1542
|
// The coordinator is the only writer of the "user-hooks" owner and the only
|
|
1532
1543
|
// caller of the extensions reload; it publishes the extension generation
|
|
1533
1544
|
// and the hook registrations with two adjacent assignments on one stack
|
|
@@ -1535,7 +1546,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1535
1546
|
// published here too (the extensions bundle publishes nothing at start),
|
|
1536
1547
|
// so no consumer ever sees extension resources paired with hooks from a
|
|
1537
1548
|
// different generation. The owner slot is anchored here, so user hooks
|
|
1538
|
-
// keep evaluating
|
|
1549
|
+
// keep evaluating before the protection consumer and assessors below.
|
|
1539
1550
|
const hookReceiptLog = createHookReceiptLog({ persistPath: join(clioStateDir(), "hook-receipts.json") });
|
|
1540
1551
|
let bootHookNotices = true;
|
|
1541
1552
|
const reloadPlugins = () =>
|
|
@@ -1556,6 +1567,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1556
1567
|
},
|
|
1557
1568
|
});
|
|
1558
1569
|
extensionReload.applyBoot();
|
|
1570
|
+
middleware.registerHook(protectedArtifactsGuard);
|
|
1559
1571
|
bootHookNotices = false;
|
|
1560
1572
|
termination.onDrain(() => hookReceiptLog.flush());
|
|
1561
1573
|
// Autonomy is hot-reloaded for interactive and headless admissions. ACP
|
|
@@ -1568,6 +1580,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1568
1580
|
const resolveBaselineAutonomy = (): AutonomyLevel =>
|
|
1569
1581
|
effectiveSettingsForDispatch?.().safety.autonomy ??
|
|
1570
1582
|
options.headless?.autonomy ??
|
|
1583
|
+
options.autonomy ??
|
|
1571
1584
|
(config?.get() ?? readSettings()).safety.autonomy ??
|
|
1572
1585
|
"auto-edit";
|
|
1573
1586
|
const resolveEffectiveAutonomy = (): AutonomyLevel => activeAcpSessionAutonomy ?? resolveBaselineAutonomy();
|
|
@@ -1726,6 +1739,7 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1726
1739
|
})
|
|
1727
1740
|
: null;
|
|
1728
1741
|
registerAllTools(toolRegistry, {
|
|
1742
|
+
termination,
|
|
1729
1743
|
captureWorkerContext: () => chat.captureWorkerContext?.() ?? null,
|
|
1730
1744
|
...(session
|
|
1731
1745
|
? {
|
|
@@ -1788,8 +1802,10 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1788
1802
|
// flag was keyed by the bare word, which wrote a top-level `autonomy` key
|
|
1789
1803
|
// nothing reads, so `run --autonomy full-auto` compiled and admitted at
|
|
1790
1804
|
// whatever settings.yaml said.
|
|
1805
|
+
// The interactive `clio-coder --autonomy <level>` seeds the same override.
|
|
1806
|
+
const startupAutonomy = options.headless?.autonomy ?? options.autonomy;
|
|
1791
1807
|
const sessionOverrides: SessionOverrides = new Map(
|
|
1792
|
-
|
|
1808
|
+
startupAutonomy === undefined ? [] : [["safety.autonomy", startupAutonomy]],
|
|
1793
1809
|
);
|
|
1794
1810
|
// The effective view is derived by deep-cloning the saved snapshot, and it
|
|
1795
1811
|
// is read on the tool-admission hot path (every call resolves autonomy
|
|
@@ -1836,8 +1852,12 @@ export async function bootOrchestrator(options: BootOptions = {}): Promise<BootR
|
|
|
1836
1852
|
// The config bundle publishes saved values on reload; session-scoped
|
|
1837
1853
|
// overrides must win, so re-derive every process-local projection from the
|
|
1838
1854
|
// effective session view after it.
|
|
1839
|
-
const unsubscribeSettingsProjectionSync =
|
|
1840
|
-
|
|
1855
|
+
const unsubscribeSettingsProjectionSync = [BusChannels.ConfigHotReload, BusChannels.ConfigNextTurn].map((channel) =>
|
|
1856
|
+
bus.on(channel, () => bumpSessionState()),
|
|
1857
|
+
);
|
|
1858
|
+
termination.onDrain(() => {
|
|
1859
|
+
for (const unsubscribe of unsubscribeSettingsProjectionSync) unsubscribe();
|
|
1860
|
+
});
|
|
1841
1861
|
const getTaskMemorySeedOffer = (): { source: string; count: number } | null => {
|
|
1842
1862
|
return taskMemoryHandoffSeedOffer(process.cwd(), getCurrentSettings().context.memory.enabled);
|
|
1843
1863
|
};
|
|
@@ -362,6 +362,7 @@ export interface RunUsageSummary {
|
|
|
362
362
|
output: number;
|
|
363
363
|
cacheRead: number;
|
|
364
364
|
cacheWrite: number;
|
|
365
|
+
cacheWrite1h?: number;
|
|
365
366
|
reasoning: number;
|
|
366
367
|
apiCalls: number;
|
|
367
368
|
hadReasoning: boolean;
|
|
@@ -407,6 +408,7 @@ export function sumRunUsage(messages: ReadonlyArray<AgentMessage>): RunUsageSumm
|
|
|
407
408
|
output?: unknown;
|
|
408
409
|
cacheRead?: unknown;
|
|
409
410
|
cacheWrite?: unknown;
|
|
411
|
+
cacheWrite1h?: unknown;
|
|
410
412
|
totalTokens?: unknown;
|
|
411
413
|
cost?: { total?: unknown };
|
|
412
414
|
};
|
|
@@ -432,6 +434,7 @@ export function sumRunUsage(messages: ReadonlyArray<AgentMessage>): RunUsageSumm
|
|
|
432
434
|
summary.output += output;
|
|
433
435
|
summary.cacheRead += cacheRead;
|
|
434
436
|
summary.cacheWrite += cacheWrite;
|
|
437
|
+
if (typeof usage.cacheWrite1h === "number") summary.cacheWrite1h = (summary.cacheWrite1h ?? 0) + usage.cacheWrite1h;
|
|
435
438
|
const reasoning = extractReasoningTokens(usage);
|
|
436
439
|
if (reasoning !== null) {
|
|
437
440
|
summary.reasoning += reasoning;
|
|
@@ -14,5 +14,6 @@ export function normalizeRetrySettings(raw: RawRetrySettings): RetrySettings {
|
|
|
14
14
|
baseDelayMs: normalizeNonNegativeInteger(raw?.baseDelayMs, DEFAULT_RETRY_SETTINGS.baseDelayMs),
|
|
15
15
|
maxDelayMs: normalizeNonNegativeInteger(raw?.maxDelayMs, DEFAULT_RETRY_SETTINGS.maxDelayMs),
|
|
16
16
|
streamStallMs: normalizeNonNegativeInteger(raw?.streamStallMs, DEFAULT_RETRY_SETTINGS.streamStallMs),
|
|
17
|
+
firstTokenStallMs: normalizeNonNegativeInteger(raw?.firstTokenStallMs, DEFAULT_RETRY_SETTINGS.firstTokenStallMs),
|
|
17
18
|
};
|
|
18
19
|
}
|
|
@@ -345,8 +345,8 @@ export interface ChatLoop {
|
|
|
345
345
|
* in-memory `state.messages` for a single bridge message carrying the
|
|
346
346
|
* summary, and emit the standard summary notice. Used by `/context compact`
|
|
347
347
|
* slash command so the next user turn ships only the bridge plus the new
|
|
348
|
-
* text to the provider
|
|
349
|
-
*
|
|
348
|
+
* text to the provider. When no session or compaction dependencies are
|
|
349
|
+
* wired, it skips compaction and emits a user-visible
|
|
350
350
|
* notice so the `/context compact` handler does not have to mirror the logic.
|
|
351
351
|
*/
|
|
352
352
|
compact(instructions?: string): Promise<void>;
|
|
@@ -686,10 +686,13 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
686
686
|
(policy?.requests.length ?? 0) > 0)
|
|
687
687
|
) {
|
|
688
688
|
const entries = filterEntriesToActivePath(deps.readSessionEntries?.() ?? [], state.lastTurnId ?? undefined);
|
|
689
|
+
// A loaded skill that declares no tool narrowing arms no surface, yet its
|
|
690
|
+
// instructions are in context. Record it from the loading policy: an
|
|
691
|
+
// unknown selection would block every later compaction of this session.
|
|
689
692
|
const selection = next
|
|
690
693
|
? mainSkillContextState(entries, next)
|
|
691
|
-
:
|
|
692
|
-
?
|
|
694
|
+
: policy !== undefined && policy.loadedSkillNames.size > 0
|
|
695
|
+
? mainSkillContextState(entries, policy)
|
|
693
696
|
: { version: 1 as const, activationRefs: [] };
|
|
694
697
|
const data = selection ?? { version: 1 as const, activationRefs: [], unknown: true as const };
|
|
695
698
|
if (JSON.stringify(data) !== JSON.stringify(latestSkillContextState(entries))) {
|
|
@@ -862,13 +865,6 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
862
865
|
deps.bus?.on(BusChannels.ConfigHotReload, () => {
|
|
863
866
|
context.invalidateSessionPromptCache();
|
|
864
867
|
}) ?? null;
|
|
865
|
-
// A committed extension generation with new content can change the skill
|
|
866
|
-
// and prompt inputs the session prompt compiles from; same invalidation.
|
|
867
|
-
const unsubscribeExtensionsReload =
|
|
868
|
-
deps.bus?.on(BusChannels.ExtensionsReloaded, (payload) => {
|
|
869
|
-
if (payload.changed) context.invalidateSessionPromptCache();
|
|
870
|
-
}) ?? null;
|
|
871
|
-
|
|
872
868
|
const unsubscribePluginsReload =
|
|
873
869
|
deps.bus?.on(BusChannels.PluginsReloaded, () => {
|
|
874
870
|
context.invalidateSessionPromptCache();
|
|
@@ -981,6 +977,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
981
977
|
output: usage.output,
|
|
982
978
|
cacheRead: usage.cacheRead,
|
|
983
979
|
cacheWrite: usage.cacheWrite,
|
|
980
|
+
...(usage.cacheWrite1h === undefined ? {} : { cacheWrite1h: usage.cacheWrite1h }),
|
|
984
981
|
reasoningTokens: usage.reasoning,
|
|
985
982
|
totalTokens: usage.totalTokens,
|
|
986
983
|
apiCalls: 1,
|
|
@@ -1004,6 +1001,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
1004
1001
|
output: usage.output,
|
|
1005
1002
|
cacheRead: usage.cacheRead,
|
|
1006
1003
|
cacheWrite: usage.cacheWrite,
|
|
1004
|
+
...(usage.cacheWrite1h === undefined ? {} : { cacheWrite1h: usage.cacheWrite1h }),
|
|
1007
1005
|
reasoning: usage.reasoning,
|
|
1008
1006
|
totalTokens: usage.totalTokens,
|
|
1009
1007
|
costUsd: usage.costUsd,
|
|
@@ -1294,6 +1292,7 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
1294
1292
|
images,
|
|
1295
1293
|
options.requestContinuation === true,
|
|
1296
1294
|
text,
|
|
1295
|
+
options.display?.text,
|
|
1297
1296
|
);
|
|
1298
1297
|
// An interrupt was submitted while a run was active, so no caller drew
|
|
1299
1298
|
// it in the transcript; render it here, after the cancel notice and the
|
|
@@ -1572,7 +1571,6 @@ export function createChatLoop(deps: CreateChatLoopDeps): ChatLoop {
|
|
|
1572
1571
|
|
|
1573
1572
|
dispose(): void {
|
|
1574
1573
|
unsubscribeConfigReload?.();
|
|
1575
|
-
unsubscribeExtensionsReload?.();
|
|
1576
1574
|
unsubscribePluginsReload?.();
|
|
1577
1575
|
unsubscribeSynthesisLock?.();
|
|
1578
1576
|
unsubscribePrewarmCompaction();
|
|
@@ -12,7 +12,8 @@ import { codeInk } from "./renderers/code-ink.js";
|
|
|
12
12
|
import { createMermaidMarkdownTransform } from "./renderers/mermaid.js";
|
|
13
13
|
import { styleTaggedNotice } from "./renderers/notice.js";
|
|
14
14
|
import { previewBudget, previewRows } from "./renderers/preview.js";
|
|
15
|
-
import {
|
|
15
|
+
import { presentProviderError, providerErrorEvidence } from "./renderers/provider-error.js";
|
|
16
|
+
import { renderRetryStatus } from "./renderers/retry-status.js";
|
|
16
17
|
import {
|
|
17
18
|
canGroupObservation,
|
|
18
19
|
renderToolAwaitingApproval,
|
|
@@ -223,7 +224,12 @@ type AssistantSegment = TextSegment | ToolSegment | ErrorSegment | ThinkingSegme
|
|
|
223
224
|
* A caller-rendered block receives the frame's transcript detail policy so a
|
|
224
225
|
* block such as the operator's `!` bash row follows the same preset as the panel. Blocks that ignore it are unaffected.
|
|
225
226
|
*/
|
|
226
|
-
type ReplayBlockRenderer = (
|
|
227
|
+
type ReplayBlockRenderer = (
|
|
228
|
+
width: number,
|
|
229
|
+
detail: TranscriptDetailPolicy,
|
|
230
|
+
unbounded?: boolean,
|
|
231
|
+
terminalRows?: number,
|
|
232
|
+
) => string[];
|
|
227
233
|
|
|
228
234
|
type TranscriptEntry =
|
|
229
235
|
| { role: "user"; text: string; status?: () => UserTurnStatus }
|
|
@@ -460,7 +466,7 @@ function scopeTerminalErrorAfterSuccessfulTool(
|
|
|
460
466
|
const reason = terminalError.slice("[error] ".length);
|
|
461
467
|
const timedOut = /\b(?:timed?\s*out|timeout)\b/i.test(reason);
|
|
462
468
|
const modelFailure = timedOut
|
|
463
|
-
?
|
|
469
|
+
? `main model response timed out after successful tool result: ${reason}`
|
|
464
470
|
: `main model response failed after successful tool result: ${reason}`;
|
|
465
471
|
const detachedDispatchSucceeded = successfulTools.some(
|
|
466
472
|
(segment) =>
|
|
@@ -604,9 +610,9 @@ function renderTextSegmentLines(seg: TextSegment, width: number): string[] {
|
|
|
604
610
|
* message text rather than plain markdown, so a failed turn is visibly a
|
|
605
611
|
* failure. Each source line wraps to width and carries the error color.
|
|
606
612
|
*/
|
|
607
|
-
function renderErrorSegmentLines(seg: ErrorSegment, width: number): string[] {
|
|
613
|
+
function renderErrorSegmentLines(seg: ErrorSegment, width: number, unbounded: boolean): string[] {
|
|
608
614
|
const out: string[] = [];
|
|
609
|
-
for (const line of seg.text.split("\n")) {
|
|
615
|
+
for (const line of (unbounded ? providerErrorEvidence(seg.text) : presentProviderError(seg.text)).split("\n")) {
|
|
610
616
|
for (const wrapped of wrapTextWithAnsi(line, width)) {
|
|
611
617
|
out.push(`${RED_CRIT}${wrapped}${RESET}`);
|
|
612
618
|
}
|
|
@@ -813,7 +819,7 @@ function renderEntryLines(
|
|
|
813
819
|
terminalRows: number,
|
|
814
820
|
): string[] {
|
|
815
821
|
if (entry.role === "replayBlock") {
|
|
816
|
-
return entry.renderBlock(width, detail);
|
|
822
|
+
return entry.renderBlock(width, detail, unboundedToolBodies, terminalRows);
|
|
817
823
|
}
|
|
818
824
|
if (entry.role === "user") {
|
|
819
825
|
const contentWidth = Math.max(1, width - PROSE_GUTTER_WIDTH);
|
|
@@ -827,7 +833,7 @@ function renderEntryLines(
|
|
|
827
833
|
return rendered;
|
|
828
834
|
}
|
|
829
835
|
if (entry.role === "retryStatus") {
|
|
830
|
-
return
|
|
836
|
+
return renderRetryStatus(entry.status, width, detail, unboundedToolBodies, terminalRows);
|
|
831
837
|
}
|
|
832
838
|
if (entry.role === "worker") {
|
|
833
839
|
return renderWorkerEntryLines(entry.state, width, { detail, terminalRows, unbounded: unboundedToolBodies });
|
|
@@ -888,8 +894,13 @@ function renderEntryLines(
|
|
|
888
894
|
labeled = true;
|
|
889
895
|
continue;
|
|
890
896
|
}
|
|
891
|
-
|
|
892
|
-
seg.kind === "text"
|
|
897
|
+
let rendered =
|
|
898
|
+
seg.kind === "text"
|
|
899
|
+
? renderTextSegmentLines(seg, proseWidth)
|
|
900
|
+
: renderErrorSegmentLines(seg, proseWidth, unboundedToolBodies);
|
|
901
|
+
if (seg.kind === "error" && !unboundedToolBodies) {
|
|
902
|
+
rendered = previewRows(rendered, previewBudget(detail.errorRows, terminalRows), proseWidth);
|
|
903
|
+
}
|
|
893
904
|
if (rendered.length === 0) continue;
|
|
894
905
|
const isSkillSuggestion = seg.kind === "text" && findSkillSuggestionLine(seg) !== null;
|
|
895
906
|
if (!labeled && !isSkillSuggestion) {
|
|
@@ -1331,6 +1342,7 @@ export function createChatPanel(options: ChatPanelOptions = {}): ChatPanel {
|
|
|
1331
1342
|
for (const entry of transcript) {
|
|
1332
1343
|
if (entry.role === "assistant") {
|
|
1333
1344
|
for (const seg of entry.segments) {
|
|
1345
|
+
if (seg.kind === "error") add("Provider or terminal error", () => providerErrorEvidence(seg.text).split("\n"));
|
|
1334
1346
|
if (seg.kind === "thinking" && seg.text) add("Thinking · supplied reasoning", () => seg.text.split("\n"));
|
|
1335
1347
|
if (seg.kind === "tool")
|
|
1336
1348
|
add(`${seg.name} · ${seg.id}`, () =>
|
|
@@ -1350,6 +1362,8 @@ export function createChatPanel(options: ChatPanelOptions = {}): ChatPanel {
|
|
|
1350
1362
|
),
|
|
1351
1363
|
);
|
|
1352
1364
|
}
|
|
1365
|
+
} else if (entry.role === "retryStatus" && entry.status.errorMessage) {
|
|
1366
|
+
add("Provider retry diagnostic", () => providerErrorEvidence(entry.status.errorMessage ?? "").split("\n"));
|
|
1353
1367
|
} else if (entry.role === "worker") {
|
|
1354
1368
|
add(`${entry.state.agentId} · worker ${entry.state.runId}`, () =>
|
|
1355
1369
|
renderWorkerEntryLines(entry.state, 120, { unbounded: true }),
|