@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
|
@@ -54,27 +54,6 @@ function flattenNativeEmbedding(entry: NativeEmbeddingItem): number[] {
|
|
|
54
54
|
return value as number[];
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
async function postJson<T>(
|
|
58
|
-
url: string,
|
|
59
|
-
body: unknown,
|
|
60
|
-
signal: AbortSignal | undefined,
|
|
61
|
-
): Promise<{ status: number; data: T | null }> {
|
|
62
|
-
const init: RequestInit = {
|
|
63
|
-
method: "POST",
|
|
64
|
-
headers: { "content-type": "application/json" },
|
|
65
|
-
body: JSON.stringify(body),
|
|
66
|
-
};
|
|
67
|
-
if (signal) init.signal = signal;
|
|
68
|
-
const response = await fetch(url, init);
|
|
69
|
-
if (!response.ok) return { status: response.status, data: null };
|
|
70
|
-
try {
|
|
71
|
-
const data = (await response.json()) as T;
|
|
72
|
-
return { status: response.status, data };
|
|
73
|
-
} catch {
|
|
74
|
-
return { status: response.status, data: null };
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
57
|
const llamacppEmbedRuntime: RuntimeDescriptor = {
|
|
79
58
|
id: "llamacpp-embed",
|
|
80
59
|
displayName: "llama.cpp (embeddings)",
|
|
@@ -90,16 +69,16 @@ const llamacppEmbedRuntime: RuntimeDescriptor = {
|
|
|
90
69
|
const healthOpts = { url: `${base}/health`, timeoutMs: ctx.httpTimeoutMs } as const;
|
|
91
70
|
const health = await (ctx.signal ? probeHttp({ ...healthOpts, signal: ctx.signal }) : probeHttp(healthOpts));
|
|
92
71
|
if (!health.ok) return health;
|
|
93
|
-
const probeResponse = await
|
|
72
|
+
const probeResponse = await probeHttp({
|
|
73
|
+
url: `${base}/embedding`,
|
|
94
74
|
method: "POST",
|
|
75
|
+
timeoutMs: ctx.httpTimeoutMs,
|
|
95
76
|
headers: { "content-type": "application/json" },
|
|
96
77
|
body: JSON.stringify({ content: "probe" }),
|
|
97
78
|
...(ctx.signal ? { signal: ctx.signal } : {}),
|
|
98
|
-
}).catch((err) => {
|
|
99
|
-
return new Response(null, { status: 599, statusText: String(err) });
|
|
100
79
|
});
|
|
101
80
|
if (!probeResponse.ok) {
|
|
102
|
-
return { ok: false, error: `/embedding not available:
|
|
81
|
+
return { ok: false, error: `/embedding not available: ${probeResponse.error}` };
|
|
103
82
|
}
|
|
104
83
|
const props = await probeLlamaCppProps(base, ctx, target.defaultModel);
|
|
105
84
|
const result: ProbeResult = { ok: true };
|
|
@@ -129,12 +108,15 @@ const llamacppEmbedRuntime: RuntimeDescriptor = {
|
|
|
129
108
|
if (!base) throw new Error("target has no url");
|
|
130
109
|
const modelId = target.defaultModel ?? "default";
|
|
131
110
|
const inputs = Array.isArray(input) ? input : [input];
|
|
132
|
-
const oai = await
|
|
133
|
-
`${base}/v1/embeddings`,
|
|
134
|
-
|
|
135
|
-
ctx.
|
|
136
|
-
|
|
137
|
-
|
|
111
|
+
const oai = await probeJson<OaiEmbeddingResponse>({
|
|
112
|
+
url: `${base}/v1/embeddings`,
|
|
113
|
+
method: "POST",
|
|
114
|
+
timeoutMs: ctx.httpTimeoutMs,
|
|
115
|
+
headers: { "content-type": "application/json" },
|
|
116
|
+
body: JSON.stringify({ input: inputs, model: modelId, encoding_format: "float" }),
|
|
117
|
+
...(ctx.signal ? { signal: ctx.signal } : {}),
|
|
118
|
+
});
|
|
119
|
+
if (oai.ok && oai.data && Array.isArray(oai.data.data)) {
|
|
138
120
|
const rows = oai.data.data;
|
|
139
121
|
const sorted = [...rows].sort((a, b) => (a.index ?? 0) - (b.index ?? 0));
|
|
140
122
|
const vectors = sorted.map((row) => row.embedding ?? []);
|
|
@@ -148,6 +130,13 @@ const llamacppEmbedRuntime: RuntimeDescriptor = {
|
|
|
148
130
|
if (tokens !== undefined) result.tokensUsed = tokens;
|
|
149
131
|
return result;
|
|
150
132
|
}
|
|
133
|
+
// Only endpoint-unavailable responses permit trying the native route.
|
|
134
|
+
// Cancellation, transport failures and malformed successes must not
|
|
135
|
+
// submit a second inference request.
|
|
136
|
+
if (oai.status === undefined || ![404, 405, 501].includes(oai.status)) {
|
|
137
|
+
throw new Error(`llama.cpp embedding failed: ${oai.error ?? "invalid OAI embedding response"}`);
|
|
138
|
+
}
|
|
139
|
+
if (ctx.signal?.aborted) throw new Error("llama.cpp embedding failed: aborted by caller");
|
|
151
140
|
const probeOpts = { url: `${base}/embedding`, timeoutMs: ctx.httpTimeoutMs } as const;
|
|
152
141
|
const native = await (ctx.signal
|
|
153
142
|
? probeJson<NativeEmbeddingItem[]>({
|
|
@@ -51,14 +51,19 @@ const llamacppRerankRuntime: RuntimeDescriptor = {
|
|
|
51
51
|
const health = await (ctx.signal ? probeHttp({ ...healthOpts, signal: ctx.signal }) : probeHttp(healthOpts));
|
|
52
52
|
if (!health.ok) return health;
|
|
53
53
|
const modelId = target.defaultModel ?? "default";
|
|
54
|
-
const probeResponse = await
|
|
54
|
+
const probeResponse = await probeHttp({
|
|
55
|
+
url: `${base}/reranking`,
|
|
55
56
|
method: "POST",
|
|
57
|
+
timeoutMs: ctx.httpTimeoutMs,
|
|
56
58
|
headers: { "content-type": "application/json" },
|
|
57
59
|
body: JSON.stringify({ query: "probe", documents: ["a"], model: modelId }),
|
|
58
60
|
...(ctx.signal ? { signal: ctx.signal } : {}),
|
|
59
|
-
})
|
|
60
|
-
if (!(probeResponse.status === 200 || probeResponse.status === 202)) {
|
|
61
|
-
return {
|
|
61
|
+
});
|
|
62
|
+
if (!probeResponse.ok || !(probeResponse.status === 200 || probeResponse.status === 202)) {
|
|
63
|
+
return {
|
|
64
|
+
ok: false,
|
|
65
|
+
error: `/reranking not available: ${probeResponse.error ?? `HTTP ${probeResponse.status}`}`,
|
|
66
|
+
};
|
|
62
67
|
}
|
|
63
68
|
const props = await probeLlamaCppProps(base, ctx, target.defaultModel);
|
|
64
69
|
const result: ProbeResult = { ok: true };
|
|
@@ -14,6 +14,22 @@ export interface TargetPricing {
|
|
|
14
14
|
cacheWrite?: number;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
+
/** Request policy interpreted by the selected Pi API; it does not authorize cache administration or paid warming. */
|
|
18
|
+
export interface TargetCacheSettings {
|
|
19
|
+
retention?: "none" | "short" | "long";
|
|
20
|
+
/** Explicit read-only deployment binding; never grants administrative authority. */
|
|
21
|
+
deployment?: {
|
|
22
|
+
backend: "llamacpp" | "vllm";
|
|
23
|
+
controlUrl: string;
|
|
24
|
+
model: string;
|
|
25
|
+
build: string;
|
|
26
|
+
/** Required for a gateway binding; compared with its current route inventory. */
|
|
27
|
+
gatewayDeploymentId?: string;
|
|
28
|
+
};
|
|
29
|
+
/** Local warm bounds. Paid routes remain ineligible. */
|
|
30
|
+
warm?: { maxInputTokens?: number; maxDurationMs?: number; cooldownMs?: number };
|
|
31
|
+
}
|
|
32
|
+
|
|
17
33
|
// Canonical persisted lifecycle name. Readers temporarily normalize the
|
|
18
34
|
// released `clio-managed` spelling at the settings boundary.
|
|
19
35
|
export type TargetLifecycle = "user-managed" | "clio-coder-managed";
|
|
@@ -74,6 +90,7 @@ export interface TargetDescriptor {
|
|
|
74
90
|
lifecycle?: TargetLifecycle;
|
|
75
91
|
gateway?: boolean;
|
|
76
92
|
pricing?: TargetPricing;
|
|
93
|
+
cache?: TargetCacheSettings;
|
|
77
94
|
lmstudio?: LmStudioTargetSettings;
|
|
78
95
|
litellm?: LiteLLMTargetSettings;
|
|
79
96
|
/** Explicit request-slot limit for this inference endpoint. It overrides live discovery. */
|
|
@@ -6,7 +6,7 @@ import { extractCommandCdTargets, extractCommandWriteTargets } from "./protected
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Deterministic action classifier for tool calls. Pure function, no I/O, no
|
|
9
|
-
* state.
|
|
9
|
+
* state. Dispatch admission and tool audit consume it. This module only
|
|
10
10
|
* owns the mapping from (tool, args) to an ActionClass.
|
|
11
11
|
*/
|
|
12
12
|
|
|
@@ -89,10 +89,22 @@ function baseClassify(tool: string): ActionClass | null {
|
|
|
89
89
|
case ToolNames.Grep:
|
|
90
90
|
case ToolNames.Find:
|
|
91
91
|
case ToolNames.Ls:
|
|
92
|
+
// web_read is the GET-only half of the web split: no method, headers,
|
|
93
|
+
// or body can make it outward, so it is read class unconditionally.
|
|
94
|
+
case ToolNames.WebRead:
|
|
92
95
|
case ToolNames.WebFetch:
|
|
93
96
|
case ToolNames.Git:
|
|
94
97
|
case ToolNames.CodeNav:
|
|
95
98
|
case ToolNames.Context:
|
|
99
|
+
// clio_docs and clio_library read Clio's bundled documentation and the
|
|
100
|
+
// recipe catalog; data streams structured files. None writes.
|
|
101
|
+
case ToolNames.ClioDocs:
|
|
102
|
+
case ToolNames.ClioLibrary:
|
|
103
|
+
case ToolNames.Data:
|
|
104
|
+
// gateway lists and describes capabilities on its own; a call carries
|
|
105
|
+
// the capability's own class through a nested admission, so the outer
|
|
106
|
+
// call stays read class.
|
|
107
|
+
case ToolNames.Gateway:
|
|
96
108
|
case ToolNames.Monitor:
|
|
97
109
|
case ToolNames.AskUser:
|
|
98
110
|
case ToolNames.CredentialPresent:
|
|
@@ -124,6 +136,10 @@ function baseClassify(tool: string): ActionClass | null {
|
|
|
124
136
|
return "write";
|
|
125
137
|
case ToolNames.Bash:
|
|
126
138
|
case ToolNames.Verify:
|
|
139
|
+
// run_script runs an interpreter over a workspace script; its
|
|
140
|
+
// safetyCall projects the exact argv to a bash command so the policy
|
|
141
|
+
// engine applies the shell rules to it.
|
|
142
|
+
case ToolNames.RunScript:
|
|
127
143
|
return "execute";
|
|
128
144
|
case ToolNames.Dispatch:
|
|
129
145
|
case ToolNames.Steer:
|
|
@@ -130,12 +130,20 @@ const CALL_ACTION_VOCABULARY: Readonly<Record<string, { verb: string; field: str
|
|
|
130
130
|
bash: { verb: "running", field: "command" },
|
|
131
131
|
grep: { verb: "searching", field: "pattern" },
|
|
132
132
|
find: { verb: "finding", field: "pattern" },
|
|
133
|
+
web_read: { verb: "reading", field: "url" },
|
|
133
134
|
web_fetch: { verb: "fetching", field: "url" },
|
|
134
135
|
git: { verb: "git", field: "op" },
|
|
135
136
|
verify: { verb: "verifying", field: "check" },
|
|
137
|
+
run_script: { verb: "running", field: "script" },
|
|
136
138
|
code_nav: { verb: "navigating", field: "query" },
|
|
137
139
|
context: { verb: "context", field: "scope" },
|
|
140
|
+
clio_docs: { verb: "searching", field: "query" },
|
|
141
|
+
clio_library: { verb: "searching", field: "query" },
|
|
142
|
+
data: { verb: "inspecting", field: "path" },
|
|
138
143
|
artifact: { verb: "writing", field: "kind" },
|
|
144
|
+
// The gateway's descriptor names the capability it reaches, so worker
|
|
145
|
+
// telemetry and receipts read "gateway git" rather than an opaque call.
|
|
146
|
+
gateway: { verb: "gateway", field: "capability" },
|
|
139
147
|
monitor: { verb: "monitoring", field: "run_id" },
|
|
140
148
|
steer: { verb: "steering", field: "run_id" },
|
|
141
149
|
tasks: { verb: "tasks", field: "action" },
|
|
@@ -193,9 +201,15 @@ const CALL_TARGET_FIELDS: Readonly<Record<string, ReadonlyArray<string>>> = {
|
|
|
193
201
|
steer: ["run_id", "action"],
|
|
194
202
|
tasks: ["action", "id"],
|
|
195
203
|
ledger: ["action", "kind", "path", "line", "target", "passed", "since"],
|
|
204
|
+
web_read: ["url", "timeout_ms", "max_bytes", "format"],
|
|
196
205
|
web_fetch: ["url", "method", "timeout_ms", "max_bytes", "format"],
|
|
206
|
+
run_script: ["interpreter", "script", "args", "interpreter_args", "cwd", "timeout_ms", "inputs", "outputs"],
|
|
207
|
+
clio_docs: ["query", "limit"],
|
|
208
|
+
clio_library: ["query", "kind", "ref", "limit", "offset"],
|
|
209
|
+
data: ["op", "path", "format", "offset", "limit", "columns", "pointer", "sample_rows", "max_rows"],
|
|
197
210
|
ask_user: ["action", "mode", "max_rounds", "exposure"],
|
|
198
211
|
artifact: ["kind", "path", "title"],
|
|
212
|
+
gateway: ["op", "capability", "query"],
|
|
199
213
|
// ACP tool kinds use only fields whose meaning the protocol defines.
|
|
200
214
|
execute: ["command", "cwd"],
|
|
201
215
|
search: ["query", "path"],
|
|
@@ -45,7 +45,7 @@ export interface SafetyContract {
|
|
|
45
45
|
readonly confirmed: ScopeSpec;
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
/** Subset check used by dispatch admission
|
|
48
|
+
/** Subset check used by dispatch admission. */
|
|
49
49
|
isSubset(worker: ScopeSpec, orchestrator: ScopeSpec): boolean;
|
|
50
50
|
|
|
51
51
|
/** Immutable safety policy metadata for receipts, audit, and replay. */
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
2
|
import { ToolNames } from "../../core/tool-names.js";
|
|
3
3
|
import { isProjectVerifierCheckId, isVerificationScriptName } from "../../core/verification-scripts.js";
|
|
4
|
+
import { effectiveToolCall } from "../../tools/surface.js";
|
|
4
5
|
import { type DeclaredCheckSourceRef, PROJECT_VERIFIER_CATALOG_RELATIVE_PATH } from "../../tools/verify/catalog.js";
|
|
5
6
|
import type { UserTaskAcceptance } from "../user-tasks/acceptance.js";
|
|
6
7
|
import {
|
|
@@ -295,9 +296,14 @@ function mutatingToolCall(entry: unknown): MutationCandidate | null {
|
|
|
295
296
|
if (record?.kind !== "message" || record.role !== "tool_call") return null;
|
|
296
297
|
const payload = asRecord(record.payload);
|
|
297
298
|
if (payload === null) return null;
|
|
298
|
-
const
|
|
299
|
-
if (
|
|
300
|
-
|
|
299
|
+
const recordedTool = stringFromFirst(payload, ["name", "toolName", "tool"]);
|
|
300
|
+
if (recordedTool === null) return null;
|
|
301
|
+
// An artifact written through the gateway mutates the same path a direct
|
|
302
|
+
// artifact call would, so the call unwraps to the capability first.
|
|
303
|
+
const { toolName, args } = effectiveToolCall(
|
|
304
|
+
recordedTool,
|
|
305
|
+
asRecord(payload.args ?? payload.arguments ?? payload.input) ?? undefined,
|
|
306
|
+
);
|
|
301
307
|
const paths = mutationPathsForTool(toolName, args);
|
|
302
308
|
if (paths.length === 0) return null;
|
|
303
309
|
const toolCallId = stringFromFirst(payload, ["toolCallId", "tool_call_id", "id"]) ?? turnIdOf(entry);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Simple sliding-window loop detector. Pure logic; the caller owns state
|
|
3
|
-
* storage.
|
|
3
|
+
* storage. Callers provide an identity key composed of tool name + canonical
|
|
4
4
|
* arg hash and a `Date.now()` reading so runaway workers can be caught before
|
|
5
5
|
* their audit trail floods disk. `hashToolCall` builds that identity key and
|
|
6
6
|
* lives here, beside the detector, so every observer (the registry's hook
|
|
@@ -162,6 +162,7 @@ const EXECUTION_TOOLS = new Set<string>([ToolNames.Bash, ToolNames.Verify]);
|
|
|
162
162
|
export const WRITE_ROOT_REFUSED_TOOLS: ReadonlySet<string> = new Set<string>([
|
|
163
163
|
ToolNames.Bash,
|
|
164
164
|
ToolNames.Verify,
|
|
165
|
+
ToolNames.RunScript,
|
|
165
166
|
ToolNames.Dispatch,
|
|
166
167
|
]);
|
|
167
168
|
|
|
@@ -634,6 +635,12 @@ function pathPolicyTargets(call: ClassifierCall): Array<{ operation: PathPolicyO
|
|
|
634
635
|
const target = pathArg(args) ?? ".";
|
|
635
636
|
return [{ operation: "read", path: target }];
|
|
636
637
|
}
|
|
638
|
+
case ToolNames.Data: {
|
|
639
|
+
// data streams one named file; a zero-access path is refused here,
|
|
640
|
+
// before the reader opens it, exactly as a read of the same path.
|
|
641
|
+
const target = pathArg(args);
|
|
642
|
+
return target === null ? [] : [{ operation: "read", path: target }];
|
|
643
|
+
}
|
|
637
644
|
case ToolNames.Write:
|
|
638
645
|
case ToolNames.Edit: {
|
|
639
646
|
const target = pathArg(args);
|
|
@@ -62,10 +62,9 @@ export type ValidationCommandDetection = { kind: "validation"; matched: string }
|
|
|
62
62
|
* `npx vitest`, `tsc --noEmit`). Its consumer, dispatch validation grounding,
|
|
63
63
|
* spends a match on nothing. An unmatched claim there is reported and never
|
|
64
64
|
* downgrades a quality label, so the cost of a miss is noise in the receipt
|
|
65
|
-
* rather than a gate opening.
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* cannot name.
|
|
65
|
+
* rather than a gate opening. Commands such as `git diff` and
|
|
66
|
+
* `node -e "import(...)"` can ground inspection claims even when they do not
|
|
67
|
+
* satisfy the strict validation vocabulary.
|
|
69
68
|
*/
|
|
70
69
|
export type ValidationCommandScope = "finish-contract" | "grounding";
|
|
71
70
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Human-readable rejection messages for blocked tool calls. The registry
|
|
3
|
-
*
|
|
3
|
+
* renders `short` in the UI footer, attaches `detail` to the audit
|
|
4
4
|
* record, and surfaces `hints` to the worker so the next turn can recover
|
|
5
5
|
* without another round-trip.
|
|
6
6
|
*/
|
|
@@ -3,9 +3,8 @@ import { asDirectoryPathBoundary, pathBoundaryEntryCovers, resolvePathBoundary }
|
|
|
3
3
|
import type { ActionClass } from "./action-classifier.js";
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
* Scope rules for worker-vs-orchestrator privilege checks.
|
|
7
|
-
*
|
|
8
|
-
* admission so a worker scope never escalates past the orchestrator.
|
|
6
|
+
* Scope rules for worker-vs-orchestrator privilege checks. Dispatch admission
|
|
7
|
+
* consumes isSubset so a worker scope never escalates past the orchestrator.
|
|
9
8
|
*/
|
|
10
9
|
|
|
11
10
|
export interface ScopeSpec {
|
|
@@ -3,6 +3,7 @@ import path from "node:path";
|
|
|
3
3
|
import { parseDocument } from "yaml";
|
|
4
4
|
import { resolveSafeCwd } from "../../core/safe-exec.js";
|
|
5
5
|
import { byteLength } from "../../tools/truncate-utf8.js";
|
|
6
|
+
import { MAX_ULP_TOLERANCE } from "../../tools/verify/numeric.js";
|
|
6
7
|
import { compareCodepoints } from "../evidence/ordering.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
@@ -215,8 +216,8 @@ function validateTolerances(value: unknown, location: string): ValidationNumeric
|
|
|
215
216
|
}
|
|
216
217
|
if (Object.hasOwn(value, "ulp")) {
|
|
217
218
|
const ulp = value.ulp;
|
|
218
|
-
if (typeof ulp !== "number" || !Number.isInteger(ulp) || ulp < 0) {
|
|
219
|
-
return new Error(`${location}.ulp must be a non-negative integer`);
|
|
219
|
+
if (typeof ulp !== "number" || !Number.isInteger(ulp) || ulp < 0 || ulp > MAX_ULP_TOLERANCE) {
|
|
220
|
+
return new Error(`${location}.ulp must be a non-negative integer no greater than ${MAX_ULP_TOLERANCE}`);
|
|
220
221
|
}
|
|
221
222
|
tolerances.ulp = ulp;
|
|
222
223
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Session budget state. checkCeiling reports whether
|
|
3
|
-
* or
|
|
4
|
-
*
|
|
2
|
+
* Session budget state. checkCeiling reports whether current spend is under,
|
|
3
|
+
* at, or over the ceiling. Scheduling preflight exposes that spend and ceiling
|
|
4
|
+
* to dispatch reservations for accounting; the allocator does not enforce this
|
|
5
|
+
* session ceiling. Dispatch separately enforces an explicit per-request intent
|
|
6
|
+
* cost ceiling against the route estimate.
|
|
5
7
|
*/
|
|
6
8
|
|
|
7
9
|
export type BudgetVerdict = "under" | "at" | "over";
|
|
@@ -15,7 +15,8 @@ export interface SchedulingContract {
|
|
|
15
15
|
* Evaluate the running session cost against the ceiling. Scheduling owns the
|
|
16
16
|
* observability lookup so callers (notably dispatch) don't need to import it.
|
|
17
17
|
* Verdict is "under" when spend is below the ceiling, "at" when equal, "over"
|
|
18
|
-
* when above. Dispatch
|
|
18
|
+
* when above. Dispatch records this session budget without denying reservations
|
|
19
|
+
* from the verdict; explicit request cost ceilings have a separate route check.
|
|
19
20
|
*/
|
|
20
21
|
preflight(): BudgetPreflight;
|
|
21
22
|
/** Configured global worker capacity; durable leases own active usage. */
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scheduling domain wire-up. Seeds budget + concurrency state from settings and
|
|
3
3
|
* listens to dispatch.enqueued so it can fire budget.alert events when session
|
|
4
|
-
* spend meets or crosses the ceiling. Dispatch
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* spend meets or crosses the ceiling. Dispatch preflight reads this state for
|
|
5
|
+
* accounting. Session-cost alerts are advisory; explicit per-request intent
|
|
6
|
+
* cost ceilings are enforced separately by dispatch route admission.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import { type BudgetAlertPayload, BusChannels } from "../../core/bus-events.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compaction orchestration
|
|
2
|
+
* Compaction orchestration.
|
|
3
3
|
*
|
|
4
4
|
* Given a list of session entries, finds the cut point, summarizes the
|
|
5
5
|
* history portion via the supplied model, and returns the trimmed entry
|
|
@@ -252,6 +252,29 @@ function findTurnStartForProtection(
|
|
|
252
252
|
return -1;
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
+
/**
|
|
256
|
+
* The ledger chains entries linearly, so a result's parent is its own call only
|
|
257
|
+
* when that call was alone in its batch. In a parallel batch the parent chain
|
|
258
|
+
* runs back through sibling calls, results and activation receipts. The load is
|
|
259
|
+
* still verifiable when that chain reaches the call without crossing another
|
|
260
|
+
* assistant or user message, which would make it a different exchange.
|
|
261
|
+
*/
|
|
262
|
+
function resultFollowsCallInBatch(
|
|
263
|
+
turn: ReadonlyArray<SessionEntry>,
|
|
264
|
+
resultEntry: SessionEntry,
|
|
265
|
+
call: SessionEntry,
|
|
266
|
+
): boolean {
|
|
267
|
+
let parent = resultEntry.parentTurnId;
|
|
268
|
+
for (let hops = 0; hops < turn.length && parent; hops++) {
|
|
269
|
+
if (parent === call.turnId) return true;
|
|
270
|
+
const link = turn.find((candidate) => candidate.turnId === parent);
|
|
271
|
+
if (!link) return false;
|
|
272
|
+
if (link.kind === "message" && link.role !== "tool_call" && link.role !== "tool_result") return false;
|
|
273
|
+
parent = link.parentTurnId;
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
}
|
|
277
|
+
|
|
255
278
|
/** Recover only complete, uniquely paired historical main-agent loads. Never consult current disk. */
|
|
256
279
|
export function captureSkillContext(
|
|
257
280
|
entries: ReadonlyArray<SessionEntry>,
|
|
@@ -337,7 +360,7 @@ export function captureSkillContext(
|
|
|
337
360
|
results.length !== 1 ||
|
|
338
361
|
resultEntry?.kind !== "message" ||
|
|
339
362
|
!turn.includes(resultEntry) ||
|
|
340
|
-
resultEntry
|
|
363
|
+
!resultFollowsCallInBatch(turn, resultEntry, call) ||
|
|
341
364
|
entry.parentTurnId !== request.turnId
|
|
342
365
|
)
|
|
343
366
|
return undefined;
|
|
@@ -593,6 +616,9 @@ function addCompactionUsage(total: CompactionUsage | undefined, raw: unknown): C
|
|
|
593
616
|
output: base.output + output,
|
|
594
617
|
cacheRead: base.cacheRead + cacheRead,
|
|
595
618
|
cacheWrite: base.cacheWrite + cacheWrite,
|
|
619
|
+
...(base.cacheWrite1h === undefined && usage.cacheWrite1h === undefined
|
|
620
|
+
? {}
|
|
621
|
+
: { cacheWrite1h: (base.cacheWrite1h ?? 0) + numberOrZero(usage.cacheWrite1h) }),
|
|
596
622
|
reasoning: base.reasoning + numberOrZero(usage.reasoning),
|
|
597
623
|
totalTokens: base.totalTokens + totalTokens,
|
|
598
624
|
cost: { total: base.cost.total + numberOrZero(usage.cost?.total) },
|
|
@@ -605,7 +631,7 @@ function retainReportedUsage(previous: Record<string, unknown>, raw: unknown): R
|
|
|
605
631
|
if (!raw || typeof raw !== "object" || Array.isArray(raw)) return previous;
|
|
606
632
|
const usage = raw as Record<string, unknown>;
|
|
607
633
|
const known = { ...previous };
|
|
608
|
-
for (const field of ["input", "output", "cacheRead", "cacheWrite", "totalTokens"]) {
|
|
634
|
+
for (const field of ["input", "output", "cacheRead", "cacheWrite", "cacheWrite1h", "totalTokens"]) {
|
|
609
635
|
const value = numberOrZero(usage[field]);
|
|
610
636
|
if (value > 0) known[field] = value;
|
|
611
637
|
}
|
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Token estimation for session entries
|
|
2
|
+
* Token estimation for session entries.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Uses shared context-accounting estimates for messages and character-based
|
|
5
|
+
* estimates for other context-bearing entries. Provider usage anchors measured
|
|
6
|
+
* prefixes when available. These estimates are approximate, not token ceilings.
|
|
7
|
+
* Pure functions, no I/O.
|
|
7
8
|
*
|
|
8
|
-
* Rationale for the heuristic (plan §3):
|
|
9
|
-
* - Conservative by design: over-estimating trips compaction earlier,
|
|
10
|
-
* never later. Missing a trigger and hitting provider overflow is
|
|
11
|
-
* expensive; running a compaction on 80k when actual was 95k is cheap.
|
|
12
|
-
* - pi-coding-agent ships it at scale, so we adopt the
|
|
13
|
-
* known ceiling rather than introduce a new numeric contract.
|
|
14
9
|
* - Exact per-provider counts (Anthropic /count_tokens, tiktoken) are
|
|
15
10
|
* parked. The `TokenEstimator` interface below keeps them a drop-in
|
|
16
11
|
* swap for a later phase.
|
|
@@ -92,7 +92,7 @@ export interface SessionContract {
|
|
|
92
92
|
append(turn: TurnInput): ClioTurnRecord;
|
|
93
93
|
/**
|
|
94
94
|
* Append a rich SessionEntry to the current session. Complements
|
|
95
|
-
* `append(turn)` for
|
|
95
|
+
* `append(turn)` for structured entry kinds (compactionSummary,
|
|
96
96
|
* branchSummary, modelChange, etc.). Old callers keep using `append`.
|
|
97
97
|
*/
|
|
98
98
|
appendEntry(entry: SessionEntryInput): SessionEntry;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Session cwd fallback resolver
|
|
2
|
+
* Session cwd fallback resolver.
|
|
3
3
|
*
|
|
4
4
|
* Pure guard used by the interactive layer when a session is resumed.
|
|
5
5
|
* `meta.cwd` is captured at session creation time; by the time the user
|
|
@@ -37,7 +37,7 @@ export const defaultFsProbe: FsProbe = {
|
|
|
37
37
|
/**
|
|
38
38
|
* Discriminated result the overlay layer branches on.
|
|
39
39
|
* - `no-cwd`: the meta record has no cwd field or it is blank after
|
|
40
|
-
* trimming.
|
|
40
|
+
* trimming. Incomplete legacy metadata can produce this result.
|
|
41
41
|
* - `missing`: cwd string is set but the directory does not exist on
|
|
42
42
|
* disk (fsProbe.exists returned false).
|
|
43
43
|
* - `not-a-directory`: the path exists but resolves to a file or a
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
24
|
import { isAbsolute, normalize, relative, resolve } from "node:path";
|
|
25
|
+
import { effectiveToolCall } from "../../tools/surface.js";
|
|
25
26
|
import { decisionRationale } from "./decision-board.js";
|
|
26
27
|
import type { DecisionLedgerEntry, SessionEntry } from "./entries.js";
|
|
27
28
|
import { filterEntriesToActivePath } from "./tree/active-path.js";
|
|
@@ -369,7 +370,10 @@ function stringField(record: Record<string, unknown> | null, ...keys: string[]):
|
|
|
369
370
|
return null;
|
|
370
371
|
}
|
|
371
372
|
|
|
372
|
-
function pathFromCall(
|
|
373
|
+
function pathFromCall(recordedTool: string, recordedArgs: unknown, cwd: string | null, into: Set<string>): void {
|
|
374
|
+
// A gateway call is the capability it reached: an artifact written through
|
|
375
|
+
// the gateway touched the same path a direct artifact call would have.
|
|
376
|
+
const { toolName, args } = effectiveToolCall(recordedTool, recordedArgs);
|
|
373
377
|
if (!READ_LEDGER_TOOLS.has(toolName)) return;
|
|
374
378
|
const record = isRecord(args) ? args : null;
|
|
375
379
|
const named = stringField(record, "path", "file_path", "filePath");
|
|
@@ -95,6 +95,12 @@ function extractMessageText(payload: unknown): string | null {
|
|
|
95
95
|
* operator-authored remains, so the caller moves on to the next turn.
|
|
96
96
|
*/
|
|
97
97
|
function operatorTextOfUserPayload(payload: unknown): string | null {
|
|
98
|
+
// An expansion (prompt template, command) replaced the typed input. The
|
|
99
|
+
// typed input is the title; the expansion starts with generated scaffolding.
|
|
100
|
+
if (payload && typeof payload === "object" && typeof (payload as { displayText?: unknown }).displayText === "string") {
|
|
101
|
+
const typed = collapseWhitespace((payload as { displayText: string }).displayText);
|
|
102
|
+
if (typed.length > 0) return typed;
|
|
103
|
+
}
|
|
98
104
|
if (
|
|
99
105
|
payload &&
|
|
100
106
|
typeof payload === "object" &&
|
|
@@ -6,10 +6,12 @@ import {
|
|
|
6
6
|
type ClioTurnRecord,
|
|
7
7
|
createSession as engineCreateSession,
|
|
8
8
|
resumeSession as engineResumeSession,
|
|
9
|
+
openSession,
|
|
9
10
|
readSessionMeta,
|
|
10
11
|
type SessionTreeNode,
|
|
11
12
|
sessionPaths,
|
|
12
13
|
} from "../../engine/session.js";
|
|
14
|
+
import { collectSessionEntries } from "./compaction/session-entries.js";
|
|
13
15
|
import type { SessionEntryInput, SessionMeta, TurnInput } from "./contract.js";
|
|
14
16
|
import { isSessionEntry, type SessionEntry } from "./entries.js";
|
|
15
17
|
import { runMigrations } from "./migrations/index.js";
|
|
@@ -71,14 +73,19 @@ export function resumeSessionState(sessionId: string): {
|
|
|
71
73
|
const persistedMeta = readSessionMeta(sessionId) as SessionMeta;
|
|
72
74
|
const paths = sessionPaths(persistedMeta);
|
|
73
75
|
const migration = runMigrations(persistedMeta, paths.meta);
|
|
74
|
-
const
|
|
76
|
+
const candidate = openSession(sessionId);
|
|
77
|
+
// Use the replay schema before engineResumeSession clears endedAt or
|
|
78
|
+
// the domain caller parks its current writer. The engine reader retains
|
|
79
|
+
// its established tolerance for interrupted JSONL fragments.
|
|
80
|
+
collectSessionEntries(candidate.turns(), paths.current);
|
|
81
|
+
// The ledger needed no transformation; only the stamp moves, so the next
|
|
82
|
+
// reader does not re-run the same no-op. It lands in the same metadata
|
|
83
|
+
// publication that reopens the session.
|
|
84
|
+
const { meta, writer, tree } = engineResumeSession(
|
|
85
|
+
sessionId,
|
|
86
|
+
migration.migrated ? { sessionFormatVersion: migration.to } : {},
|
|
87
|
+
);
|
|
75
88
|
const state: SessionManagerState = { meta: meta as SessionMeta, writer };
|
|
76
|
-
if (migration.migrated) {
|
|
77
|
-
// The ledger needed no transformation; only the stamp moves, so the next
|
|
78
|
-
// reader does not re-run the same no-op.
|
|
79
|
-
state.meta.sessionFormatVersion = migration.to;
|
|
80
|
-
persistSessionMeta(state);
|
|
81
|
-
}
|
|
82
89
|
return { state, nodes: tree };
|
|
83
90
|
}
|
|
84
91
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Retry settings and countdown helper
|
|
2
|
+
* Retry settings and countdown helper.
|
|
3
3
|
*
|
|
4
4
|
* pi-agent-core surfaces provider failures as a terminal assistant message
|
|
5
5
|
* with `stopReason: "error"` + `errorMessage: <provider text>`. It does not
|
|
@@ -42,6 +42,7 @@ export const DEFAULT_RETRY_SETTINGS: RetrySettings = {
|
|
|
42
42
|
baseDelayMs: 2000,
|
|
43
43
|
maxDelayMs: 60000,
|
|
44
44
|
streamStallMs: 180000,
|
|
45
|
+
firstTokenStallMs: 600000,
|
|
45
46
|
};
|
|
46
47
|
|
|
47
48
|
/**
|