@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
|
@@ -16,12 +16,13 @@ import { previewBudget, previewRows } from "./preview.js";
|
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { trustStateWord } from "../../domains/evidence/trust-projection.js";
|
|
19
|
-
import { sanitizeCallTargetText } from "../../domains/safety/call-target.js";
|
|
19
|
+
import { sanitizeCallTargetText, sanitizeMultilineDisplayText } from "../../domains/safety/call-target.js";
|
|
20
20
|
import { redactSecretString, redactToolArgs } from "../../domains/safety/redaction.js";
|
|
21
21
|
import { formatSize } from "../../engine/truncate.js";
|
|
22
22
|
import { visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
|
|
23
23
|
import { classifyResourceRead, toolPresentationPolicy } from "../../tools/presentation.js";
|
|
24
24
|
import { toolResultPresentationPolicy, toolResultPresentationText } from "../../tools/result-disposition.js";
|
|
25
|
+
import { effectiveToolCall } from "../../tools/surface.js";
|
|
25
26
|
import { mutationFactsLine } from "../mutation-preview.js";
|
|
26
27
|
import type { ApprovalRequestView } from "../permission-overlay.js";
|
|
27
28
|
import { clioTheme, formatCompactMs, GLYPH } from "../theme/index.js";
|
|
@@ -214,11 +215,16 @@ const PRIMARY_ARG_FIELD: Record<string, string> = {
|
|
|
214
215
|
bash: "command",
|
|
215
216
|
grep: "pattern",
|
|
216
217
|
find: "pattern",
|
|
218
|
+
web_read: "url",
|
|
217
219
|
web_fetch: "url",
|
|
218
220
|
git: "op",
|
|
219
221
|
verify: "check",
|
|
222
|
+
run_script: "script",
|
|
220
223
|
code_nav: "query",
|
|
221
224
|
context: "scope",
|
|
225
|
+
clio_docs: "query",
|
|
226
|
+
clio_library: "query",
|
|
227
|
+
data: "path",
|
|
222
228
|
artifact: "kind",
|
|
223
229
|
monitor: "run_id",
|
|
224
230
|
steer: "run_id",
|
|
@@ -252,10 +258,31 @@ function summarizeWebFetchArgs(args: unknown): string {
|
|
|
252
258
|
return truncate(jsonStringifySafe(Object.keys(compact).length > 0 ? compact : args), WEB_FETCH_ARG_PREVIEW_LIMIT);
|
|
253
259
|
}
|
|
254
260
|
|
|
261
|
+
/**
|
|
262
|
+
* A gateway call reads as the capability it reached: `find` and `describe`
|
|
263
|
+
* name what was asked, `call` renders the capability's own summary so a row
|
|
264
|
+
* says `git status` rather than an opaque gateway argument dump.
|
|
265
|
+
*/
|
|
266
|
+
function summarizeGatewayArgs(args: unknown): string {
|
|
267
|
+
if (!isPlainObject(args)) return truncate(jsonStringifySafe(redactToolArgs(args)), ARG_PREVIEW_LIMIT);
|
|
268
|
+
const op = typeof args.op === "string" ? args.op : "";
|
|
269
|
+
if (op === "find") {
|
|
270
|
+
const query = readStringField(args, "query");
|
|
271
|
+
return truncate(query === null || query.length === 0 ? "find" : `find ${query}`, ARG_PREVIEW_LIMIT);
|
|
272
|
+
}
|
|
273
|
+
const capability = readStringField(args, "capability") ?? "";
|
|
274
|
+
if (op === "describe") return truncate(`describe ${capability}`.trim(), ARG_PREVIEW_LIMIT);
|
|
275
|
+
const effective = effectiveToolCall("gateway", args);
|
|
276
|
+
if (!effective.viaGateway) return truncate(jsonStringifySafe(redactToolArgs(args)), ARG_PREVIEW_LIMIT);
|
|
277
|
+
const inner = summarizeArgs(effective.toolName, effective.args);
|
|
278
|
+
return truncate(inner.length > 0 ? `${effective.toolName} ${inner}` : effective.toolName, ARG_PREVIEW_LIMIT);
|
|
279
|
+
}
|
|
280
|
+
|
|
255
281
|
function summarizeArgs(toolName: string, args: unknown): string {
|
|
256
282
|
if (isEmptyArgs(args)) return "";
|
|
257
283
|
const safeArgs = redactToolArgs(args);
|
|
258
|
-
if (toolName === "web_fetch") return summarizeWebFetchArgs(safeArgs);
|
|
284
|
+
if (toolName === "web_fetch" || toolName === "web_read") return summarizeWebFetchArgs(safeArgs);
|
|
285
|
+
if (toolName === "gateway") return summarizeGatewayArgs(args);
|
|
259
286
|
const primary = capturedPrimaryArg(toolName, args);
|
|
260
287
|
if (primary !== null) return truncate(displayArg(toolName, primary), ARG_PREVIEW_LIMIT);
|
|
261
288
|
return truncate(jsonStringifySafe(safeArgs), ARG_PREVIEW_LIMIT);
|
|
@@ -589,7 +616,12 @@ function buildFieldSublineBody(
|
|
|
589
616
|
): string | null {
|
|
590
617
|
const value = readStringField(args, key);
|
|
591
618
|
if (value === null) return null;
|
|
592
|
-
|
|
619
|
+
// One array element is one terminal row to the diff renderer. A multi-line
|
|
620
|
+
// command or an escape sequence inside this row shifted every row below it.
|
|
621
|
+
const preview = truncate(
|
|
622
|
+
sanitizeCallTargetText(key === "command" ? stripShellWrapperForDisplay(value) : value),
|
|
623
|
+
ARG_PREVIEW_LIMIT,
|
|
624
|
+
);
|
|
593
625
|
if (options.wrapInBackticks) return `${lead}\`${preview}\``;
|
|
594
626
|
return `${lead}${preview}`;
|
|
595
627
|
}
|
|
@@ -635,9 +667,32 @@ const SUBLINE_BODY_BUILDERS: Readonly<Record<string, (args: unknown) => string |
|
|
|
635
667
|
bash: (args) => buildFieldSublineBody(args, "command", "running ", { wrapInBackticks: true }),
|
|
636
668
|
grep: (args) => buildFieldSublineBody(args, "pattern", "searching for ", { wrapInBackticks: true }),
|
|
637
669
|
find: (args) => buildFieldSublineBody(args, "pattern", "finding ", { wrapInBackticks: true }),
|
|
670
|
+
web_read: (args) => buildFieldSublineBody(args, "url", "reading "),
|
|
638
671
|
web_fetch: (args) => buildFieldSublineBody(args, "url", "fetching "),
|
|
639
672
|
git: (args) => buildFieldSublineBody(args, "op", "git "),
|
|
640
673
|
verify: (args) => buildFieldSublineBody(args, "check", "verifying "),
|
|
674
|
+
run_script: (args) => buildFieldSublineBody(args, "script", "running ", { wrapInBackticks: true }),
|
|
675
|
+
data: (args) => {
|
|
676
|
+
const op = readStringField(args, "op") ?? "inspecting";
|
|
677
|
+
const path = readStringField(args, "path");
|
|
678
|
+
return path === null ? op : `${op} ${path}`;
|
|
679
|
+
},
|
|
680
|
+
gateway: (args) => {
|
|
681
|
+
if (!isPlainObject(args)) return null;
|
|
682
|
+
const op = typeof args.op === "string" ? args.op : "";
|
|
683
|
+
if (op === "find") {
|
|
684
|
+
const query = readStringField(args, "query");
|
|
685
|
+
return query === null || query.length === 0 ? "finding capabilities" : `finding capabilities \`${query}\``;
|
|
686
|
+
}
|
|
687
|
+
if (op === "describe") {
|
|
688
|
+
const capability = readStringField(args, "capability");
|
|
689
|
+
return capability === null ? "describing a capability" : `describing ${capability}`;
|
|
690
|
+
}
|
|
691
|
+
const effective = effectiveToolCall("gateway", args);
|
|
692
|
+
if (!effective.viaGateway) return null;
|
|
693
|
+
const inner = SUBLINE_BODY_BUILDERS[effective.toolName]?.(effective.args);
|
|
694
|
+
return inner !== null && inner !== undefined ? `${inner} (via gateway)` : `calling ${effective.toolName}`;
|
|
695
|
+
},
|
|
641
696
|
code_nav: (args) => {
|
|
642
697
|
const mode = readStringField(args, "mode");
|
|
643
698
|
const query = readStringField(args, "query")?.trim() ?? "";
|
|
@@ -715,9 +770,9 @@ function buildSublineBody(
|
|
|
715
770
|
}
|
|
716
771
|
return SUBLINE_BODY_BUILDERS[toolName]?.(args) ?? buildGenericToolBody(toolName, args);
|
|
717
772
|
}
|
|
718
|
-
if (toolName === "web_fetch") {
|
|
773
|
+
if (toolName === "web_fetch" || toolName === "web_read") {
|
|
719
774
|
const meta = status === undefined ? null : webFetchMeta(result);
|
|
720
|
-
const body = SUBLINE_BODY_BUILDERS
|
|
775
|
+
const body = SUBLINE_BODY_BUILDERS[toolName]?.(args) ?? buildGenericToolBody(toolName, args);
|
|
721
776
|
return `${body}${meta ? dim(` · ${meta}`) : ""}`;
|
|
722
777
|
}
|
|
723
778
|
if (toolName === "bash") {
|
|
@@ -909,9 +964,14 @@ function isEmptyResult(result: unknown): boolean {
|
|
|
909
964
|
return false;
|
|
910
965
|
}
|
|
911
966
|
|
|
967
|
+
/**
|
|
968
|
+
* Tool output is untrusted terminal input. Cursor movement, backspaces and
|
|
969
|
+
* carriage returns inside a row break the diff renderer's one-row-per-line
|
|
970
|
+
* accounting, so everything but the line structure is neutralized here.
|
|
971
|
+
*/
|
|
912
972
|
function resultText(result: unknown, limit = FULL_RESULT_PREVIEW_LIMIT): string {
|
|
913
|
-
|
|
914
|
-
return truncate(
|
|
973
|
+
const text = typeof result === "string" ? result : jsonStringifySafe(result);
|
|
974
|
+
return truncate(sanitizeMultilineDisplayText(text).text, limit);
|
|
915
975
|
}
|
|
916
976
|
|
|
917
977
|
function truncateRowsMiddle(rows: ReadonlyArray<string>, rowLimit: number, isError: boolean): string[] {
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { sanitizeMultilineDisplayText } from "../../domains/safety/call-target.js";
|
|
2
|
+
import { redactSecretString } from "../../domains/safety/redaction.js";
|
|
3
|
+
import { GLYPH } from "../theme/index.js";
|
|
4
|
+
|
|
5
|
+
/** Sanitize complete source text before splitting, so OSC payloads cannot cross rows. */
|
|
6
|
+
export function safeWorkerAnswerText(text: string): string {
|
|
7
|
+
const normalized = text
|
|
8
|
+
.replaceAll(String.fromCharCode(0x9d), "\u001b]")
|
|
9
|
+
.replaceAll(String.fromCharCode(0x9b), "\u001b[")
|
|
10
|
+
.replaceAll(String.fromCharCode(0x9c), "\u001b\\");
|
|
11
|
+
return redactSecretString(sanitizeMultilineDisplayText(normalized).text).replace(/[\p{Cf}\u0080-\u009f]/gu, "");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const isStringArray = (value: unknown): value is string[] =>
|
|
15
|
+
Array.isArray(value) && value.every((entry) => typeof entry === "string");
|
|
16
|
+
|
|
17
|
+
function reportString(value: unknown): string | null {
|
|
18
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface PresentedContractAnswer {
|
|
22
|
+
lines: string[];
|
|
23
|
+
footer?: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function debuggerReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
27
|
+
const diagnosis = reportString(value.diagnosis);
|
|
28
|
+
const reproduction = value.reproduction;
|
|
29
|
+
if (
|
|
30
|
+
diagnosis === null ||
|
|
31
|
+
(reproduction !== "reproduced" && reproduction !== "not-reproduced" && reproduction !== "unknown") ||
|
|
32
|
+
!isStringArray(value.evidence)
|
|
33
|
+
) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
lines: [
|
|
38
|
+
diagnosis,
|
|
39
|
+
...(value.evidence.length === 0 ? ["Evidence: none"] : ["Evidence:", ...value.evidence.map((item) => `- ${item}`)]),
|
|
40
|
+
],
|
|
41
|
+
footer: `reproduction ${reproduction}`,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function verifierReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
46
|
+
if ((value.verdict !== "pass" && value.verdict !== "fail") || !Array.isArray(value.checks)) return null;
|
|
47
|
+
const lines: string[] = [];
|
|
48
|
+
for (const raw of value.checks) {
|
|
49
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
50
|
+
const check = raw as Record<string, unknown>;
|
|
51
|
+
const name = reportString(check.name);
|
|
52
|
+
const evidence = reportString(check.evidence);
|
|
53
|
+
if (name === null || evidence === null || typeof check.passed !== "boolean") return null;
|
|
54
|
+
lines.push(`${check.passed ? GLYPH.ok : GLYPH.error} ${name}: ${evidence}`);
|
|
55
|
+
}
|
|
56
|
+
return { lines: lines.length === 0 ? ["No checks reported."] : lines, footer: `verdict ${value.verdict}` };
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function researchReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
60
|
+
if ((value.source !== "local" && value.source !== "external") || !Array.isArray(value.findings)) return null;
|
|
61
|
+
const lines: string[] = [];
|
|
62
|
+
for (const raw of value.findings) {
|
|
63
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
64
|
+
const finding = raw as Record<string, unknown>;
|
|
65
|
+
const claim = reportString(finding.claim);
|
|
66
|
+
const evidence = reportString(finding.evidence);
|
|
67
|
+
if (claim === null || evidence === null) return null;
|
|
68
|
+
lines.push(`- ${claim}`, ` citation: ${evidence}`);
|
|
69
|
+
}
|
|
70
|
+
return { lines: lines.length === 0 ? ["No findings reported."] : lines, footer: `source ${value.source}` };
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function worldKnowledgeReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
74
|
+
if (
|
|
75
|
+
(value.discovery !== "performed" &&
|
|
76
|
+
value.discovery !== "caller-supplied-only" &&
|
|
77
|
+
value.discovery !== "unavailable") ||
|
|
78
|
+
!Array.isArray(value.facts) ||
|
|
79
|
+
!isStringArray(value.synthesis) ||
|
|
80
|
+
!isStringArray(value.uncertainties) ||
|
|
81
|
+
!isStringArray(value.followUpVerification)
|
|
82
|
+
) {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
const lines: string[] = [];
|
|
86
|
+
for (const raw of value.facts) {
|
|
87
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
88
|
+
const fact = raw as Record<string, unknown>;
|
|
89
|
+
const claim = reportString(fact.claim);
|
|
90
|
+
const evidence = reportString(fact.evidence);
|
|
91
|
+
if (claim === null || evidence === null || !isStringArray(fact.sources)) return null;
|
|
92
|
+
lines.push(`- ${claim}`, ` support: ${evidence}`);
|
|
93
|
+
if (fact.sources.length > 0) lines.push(` sources: ${fact.sources.join(", ")}`);
|
|
94
|
+
}
|
|
95
|
+
if (value.synthesis.length > 0) lines.push("Synthesis:", ...value.synthesis.map((item) => `- ${item}`));
|
|
96
|
+
if (value.uncertainties.length > 0) lines.push("Uncertainties:", ...value.uncertainties.map((item) => `- ${item}`));
|
|
97
|
+
if (value.followUpVerification.length > 0) {
|
|
98
|
+
lines.push("Verify next:", ...value.followUpVerification.map((item) => `- ${item}`));
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
lines: lines.length === 0 ? ["No findings reported."] : lines,
|
|
102
|
+
footer: `discovery ${value.discovery}; uncertainties ${value.uncertainties.length}; follow-up ${value.followUpVerification.length}`,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function scoutReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
107
|
+
if (!Array.isArray(value.findings) || typeof value.needsSplit !== "boolean") return null;
|
|
108
|
+
const lines: string[] = [];
|
|
109
|
+
for (const raw of value.findings) {
|
|
110
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
111
|
+
const finding = raw as Record<string, unknown>;
|
|
112
|
+
const claim = reportString(finding.claim);
|
|
113
|
+
if (claim === null) return null;
|
|
114
|
+
const path = reportString(finding.path);
|
|
115
|
+
const line = typeof finding.line === "number" && Number.isSafeInteger(finding.line) ? finding.line : null;
|
|
116
|
+
lines.push(path !== null && line !== null ? `- ${claim} — ${path}:${line}` : `- ${claim} (ungrounded lead)`);
|
|
117
|
+
}
|
|
118
|
+
if (value.needsSplit) {
|
|
119
|
+
if (!Array.isArray(value.proposedSubtasks)) return null;
|
|
120
|
+
lines.push("Split recommended:");
|
|
121
|
+
for (const raw of value.proposedSubtasks) {
|
|
122
|
+
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
123
|
+
const subtask = raw as Record<string, unknown>;
|
|
124
|
+
const task = reportString(subtask.task);
|
|
125
|
+
const id = reportString(subtask.id);
|
|
126
|
+
if (task === null || id === null) return null;
|
|
127
|
+
lines.push(`- ${id}: ${task}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
lines: lines.length === 0 ? ["No findings reported."] : lines,
|
|
132
|
+
footer: value.needsSplit ? "split needed" : "no split needed",
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function isObject(value: unknown): value is Record<string, unknown> {
|
|
137
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** Only a whole object, optionally enclosed by one whole code fence, is a preview payload. */
|
|
141
|
+
export function exactWorkerAnswerObject(text: string): Record<string, unknown> | null {
|
|
142
|
+
const trimmed = text.trim();
|
|
143
|
+
const fenced = /^```[A-Za-z0-9_-]*[^\S\r\n]*\r?\n([\s\S]*?)\r?\n```$/u.exec(trimmed);
|
|
144
|
+
const source = fenced?.[1] ?? trimmed;
|
|
145
|
+
try {
|
|
146
|
+
const value: unknown = JSON.parse(source);
|
|
147
|
+
return isObject(value) ? value : null;
|
|
148
|
+
} catch {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Receipt identity and conformance are facts supplied by the caller, never inferred here. */
|
|
154
|
+
export function presentWorkerContractAnswer(
|
|
155
|
+
text: string,
|
|
156
|
+
contract: { kind: string; conformance: string } | undefined,
|
|
157
|
+
complete: boolean,
|
|
158
|
+
settled: boolean,
|
|
159
|
+
): PresentedContractAnswer | null {
|
|
160
|
+
if (!settled || !complete || contract?.conformance !== "pass") return null;
|
|
161
|
+
const value = exactWorkerAnswerObject(text);
|
|
162
|
+
if (value === null) return null;
|
|
163
|
+
// Match complete JSON strings before numbers, so escaped property names
|
|
164
|
+
// and digits inside strings cannot bypass or confuse the token check.
|
|
165
|
+
// Conservatively keep raw Scout source if any number cannot round-trip.
|
|
166
|
+
if (contract.kind === "scout-report") {
|
|
167
|
+
for (const match of text.matchAll(/"(?:[^"\\]|\\[\s\S])*"|-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/gu)) {
|
|
168
|
+
const token = match[0];
|
|
169
|
+
if (token.startsWith('"')) continue;
|
|
170
|
+
if (!Number.isSafeInteger(Number(token)) || String(Number(token)) !== token) return null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
let answer: PresentedContractAnswer | null;
|
|
174
|
+
switch (contract.kind) {
|
|
175
|
+
case "debugger-report":
|
|
176
|
+
answer = debuggerReport(value);
|
|
177
|
+
break;
|
|
178
|
+
case "verifier-report":
|
|
179
|
+
answer = verifierReport(value);
|
|
180
|
+
break;
|
|
181
|
+
case "research-report":
|
|
182
|
+
answer = researchReport(value);
|
|
183
|
+
break;
|
|
184
|
+
case "world-knowledge-report":
|
|
185
|
+
answer = worldKnowledgeReport(value);
|
|
186
|
+
break;
|
|
187
|
+
case "scout-report":
|
|
188
|
+
answer = scoutReport(value);
|
|
189
|
+
break;
|
|
190
|
+
default:
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
if (answer === null) return null;
|
|
194
|
+
return {
|
|
195
|
+
lines: answer.lines.map(safeWorkerAnswerText),
|
|
196
|
+
...(answer.footer ? { footer: safeWorkerAnswerText(answer.footer) } : {}),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
@@ -2,19 +2,21 @@ import { redactSecretString } from "../../domains/safety/redaction.js";
|
|
|
2
2
|
import type { TranscriptDetailPolicy } from "../transcript-detail.js";
|
|
3
3
|
import { transcriptDetail } from "../transcript-detail.js";
|
|
4
4
|
import { previewBudget, previewRows } from "./preview.js";
|
|
5
|
+
import {
|
|
6
|
+
exactWorkerAnswerObject,
|
|
7
|
+
type PresentedContractAnswer,
|
|
8
|
+
presentWorkerContractAnswer,
|
|
9
|
+
safeWorkerAnswerText,
|
|
10
|
+
} from "./worker-answer.js";
|
|
11
|
+
|
|
5
12
|
/** Bounded worker summaries share the main transcript's output style. */
|
|
6
13
|
|
|
7
|
-
import { parseJsonObjectPayload } from "../../core/json-payload.js";
|
|
8
14
|
import { trustStateWord } from "../../domains/evidence/trust-projection.js";
|
|
15
|
+
import { retiredIntegrityVersionOf } from "../../domains/evidence/trust-status.js";
|
|
9
16
|
import { truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../../engine/tui.js";
|
|
10
17
|
import { formatFooterTokens } from "../footer-panel.js";
|
|
11
18
|
import { type ClioToken, clioTheme, fitUnits, formatCompactMs, GLYPH } from "../theme/index.js";
|
|
12
|
-
import {
|
|
13
|
-
type WorkerEntryState,
|
|
14
|
-
type WorkerPresentedResultContract,
|
|
15
|
-
type WorkerReceiptSummary,
|
|
16
|
-
workerAskedByModel,
|
|
17
|
-
} from "../worker-stream.js";
|
|
19
|
+
import { type WorkerEntryState, type WorkerReceiptSummary, workerAskedByModel } from "../worker-stream.js";
|
|
18
20
|
|
|
19
21
|
const theme = clioTheme();
|
|
20
22
|
const dim = (text: string): string => theme.fg("dim", text);
|
|
@@ -88,7 +90,11 @@ const CHECKPOINT_PREFIX = /^\s*(?:needs_input\b|task_blocked\b|##\s*CHECKPOINT R
|
|
|
88
90
|
const CHECKPOINT_PREVIEW_ROWS = 16;
|
|
89
91
|
|
|
90
92
|
export function workerNeedsInput(entry: Pick<WorkerEntryState, "text" | "receipt">): boolean {
|
|
91
|
-
return
|
|
93
|
+
return (
|
|
94
|
+
entry.receipt !== undefined &&
|
|
95
|
+
entry.receipt.stillRunning !== true &&
|
|
96
|
+
CHECKPOINT_PREFIX.test(entry.text.trim().replace(/^```[A-Za-z0-9_-]*[^\S\r\n]*\r?\n/u, ""))
|
|
97
|
+
);
|
|
92
98
|
}
|
|
93
99
|
|
|
94
100
|
function needsInputUnit(): string {
|
|
@@ -144,152 +150,21 @@ function railLines(text: string, token: ClioToken, width: number): string[] {
|
|
|
144
150
|
return wrapTextWithAnsi(text, contentWidth).map((row) => `${dim(RAIL)}${theme.fg(token, row)}`);
|
|
145
151
|
}
|
|
146
152
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
const
|
|
150
|
-
|
|
153
|
+
function presentedContractAnswer(entry: WorkerEntryState): PresentedContractAnswer | null {
|
|
154
|
+
if (entry.receipt?.trust?.artifactIntegrity.state !== "verified") return null;
|
|
155
|
+
const kind = entry.receipt?.contractKind;
|
|
156
|
+
const conformance = entry.receipt?.contract;
|
|
157
|
+
return presentWorkerContractAnswer(
|
|
158
|
+
entry.text,
|
|
159
|
+
kind && conformance ? { kind, conformance } : undefined,
|
|
160
|
+
entry.droppedLines === 0 && (entry.progress?.droppedBytes ?? 0) === 0,
|
|
161
|
+
!entry.pending && !isPending(entry),
|
|
162
|
+
);
|
|
151
163
|
}
|
|
152
164
|
|
|
153
165
|
const isStringArray = (value: unknown): value is string[] =>
|
|
154
166
|
Array.isArray(value) && value.every((entry) => typeof entry === "string");
|
|
155
167
|
|
|
156
|
-
function reportString(value: unknown): string | null {
|
|
157
|
-
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
interface PresentedContractAnswer {
|
|
161
|
-
lines: string[];
|
|
162
|
-
footer?: string;
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
function debuggerReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
166
|
-
const diagnosis = reportString(value.diagnosis);
|
|
167
|
-
const reproduction = value.reproduction;
|
|
168
|
-
if (
|
|
169
|
-
diagnosis === null ||
|
|
170
|
-
(reproduction !== "reproduced" && reproduction !== "not-reproduced" && reproduction !== "unknown") ||
|
|
171
|
-
!isStringArray(value.evidence)
|
|
172
|
-
) {
|
|
173
|
-
return null;
|
|
174
|
-
}
|
|
175
|
-
return {
|
|
176
|
-
lines: [
|
|
177
|
-
diagnosis,
|
|
178
|
-
...(value.evidence.length === 0 ? ["Evidence: none"] : ["Evidence:", ...value.evidence.map((item) => `- ${item}`)]),
|
|
179
|
-
],
|
|
180
|
-
footer: `reproduction ${reproduction}`,
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
function verifierReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
185
|
-
if ((value.verdict !== "pass" && value.verdict !== "fail") || !Array.isArray(value.checks)) return null;
|
|
186
|
-
const lines: string[] = [];
|
|
187
|
-
for (const raw of value.checks) {
|
|
188
|
-
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
189
|
-
const check = raw as Record<string, unknown>;
|
|
190
|
-
const name = reportString(check.name);
|
|
191
|
-
const evidence = reportString(check.evidence);
|
|
192
|
-
if (name === null || evidence === null || typeof check.passed !== "boolean") return null;
|
|
193
|
-
lines.push(`${check.passed ? GLYPH.ok : GLYPH.error} ${name}: ${evidence}`);
|
|
194
|
-
}
|
|
195
|
-
return { lines: lines.length === 0 ? ["No checks reported."] : lines, footer: `verdict ${value.verdict}` };
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
function researchReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
199
|
-
if ((value.source !== "local" && value.source !== "external") || !Array.isArray(value.findings)) return null;
|
|
200
|
-
const lines: string[] = [];
|
|
201
|
-
for (const raw of value.findings) {
|
|
202
|
-
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
203
|
-
const finding = raw as Record<string, unknown>;
|
|
204
|
-
const claim = reportString(finding.claim);
|
|
205
|
-
const evidence = reportString(finding.evidence);
|
|
206
|
-
if (claim === null || evidence === null) return null;
|
|
207
|
-
lines.push(`- ${claim}`, ` citation: ${evidence}`);
|
|
208
|
-
}
|
|
209
|
-
return { lines: lines.length === 0 ? ["No findings reported."] : lines, footer: `source ${value.source}` };
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
function worldKnowledgeReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
213
|
-
if (
|
|
214
|
-
(value.discovery !== "performed" &&
|
|
215
|
-
value.discovery !== "caller-supplied-only" &&
|
|
216
|
-
value.discovery !== "unavailable") ||
|
|
217
|
-
!Array.isArray(value.facts) ||
|
|
218
|
-
!isStringArray(value.synthesis) ||
|
|
219
|
-
!isStringArray(value.uncertainties) ||
|
|
220
|
-
!isStringArray(value.followUpVerification)
|
|
221
|
-
) {
|
|
222
|
-
return null;
|
|
223
|
-
}
|
|
224
|
-
const lines: string[] = [];
|
|
225
|
-
for (const raw of value.facts) {
|
|
226
|
-
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
227
|
-
const fact = raw as Record<string, unknown>;
|
|
228
|
-
const claim = reportString(fact.claim);
|
|
229
|
-
const evidence = reportString(fact.evidence);
|
|
230
|
-
if (claim === null || evidence === null || !isStringArray(fact.sources)) return null;
|
|
231
|
-
lines.push(`- ${claim}`, ` support: ${evidence}`);
|
|
232
|
-
if (fact.sources.length > 0) lines.push(` sources: ${fact.sources.join(", ")}`);
|
|
233
|
-
}
|
|
234
|
-
if (value.synthesis.length > 0) lines.push("Synthesis:", ...value.synthesis.map((item) => `- ${item}`));
|
|
235
|
-
if (value.uncertainties.length > 0) lines.push("Uncertainties:", ...value.uncertainties.map((item) => `- ${item}`));
|
|
236
|
-
if (value.followUpVerification.length > 0) {
|
|
237
|
-
lines.push("Verify next:", ...value.followUpVerification.map((item) => `- ${item}`));
|
|
238
|
-
}
|
|
239
|
-
return { lines: lines.length === 0 ? ["No findings reported."] : lines, footer: `discovery ${value.discovery}` };
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
function scoutReport(value: Record<string, unknown>): PresentedContractAnswer | null {
|
|
243
|
-
if (!Array.isArray(value.findings) || typeof value.needsSplit !== "boolean") return null;
|
|
244
|
-
const lines: string[] = [];
|
|
245
|
-
for (const raw of value.findings) {
|
|
246
|
-
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
247
|
-
const finding = raw as Record<string, unknown>;
|
|
248
|
-
const claim = reportString(finding.claim);
|
|
249
|
-
if (claim === null) return null;
|
|
250
|
-
const path = reportString(finding.path);
|
|
251
|
-
const line = typeof finding.line === "number" && Number.isSafeInteger(finding.line) ? finding.line : null;
|
|
252
|
-
lines.push(path !== null && line !== null ? `- ${claim} — ${path}:${line}` : `- ${claim} (ungrounded lead)`);
|
|
253
|
-
}
|
|
254
|
-
if (value.needsSplit) {
|
|
255
|
-
if (!Array.isArray(value.proposedSubtasks)) return null;
|
|
256
|
-
lines.push("Split recommended:");
|
|
257
|
-
for (const raw of value.proposedSubtasks) {
|
|
258
|
-
if (typeof raw !== "object" || raw === null || Array.isArray(raw)) return null;
|
|
259
|
-
const subtask = raw as Record<string, unknown>;
|
|
260
|
-
const task = reportString(subtask.task);
|
|
261
|
-
const id = reportString(subtask.id);
|
|
262
|
-
if (task === null || id === null) return null;
|
|
263
|
-
lines.push(`- ${id}: ${task}`);
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
return {
|
|
267
|
-
lines: lines.length === 0 ? ["No findings reported."] : lines,
|
|
268
|
-
footer: value.needsSplit ? "split needed" : "no split needed",
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
function presentedContractAnswer(entry: WorkerEntryState): PresentedContractAnswer | null {
|
|
273
|
-
if (entry.receipt?.contract !== "pass" || entry.receipt.contractKind === undefined || entry.droppedLines !== 0) {
|
|
274
|
-
return null;
|
|
275
|
-
}
|
|
276
|
-
const value = structuredAnswer(entry.text);
|
|
277
|
-
if (value === null) return null;
|
|
278
|
-
const kind: WorkerPresentedResultContract = entry.receipt.contractKind;
|
|
279
|
-
switch (kind) {
|
|
280
|
-
case "debugger-report":
|
|
281
|
-
return debuggerReport(value);
|
|
282
|
-
case "verifier-report":
|
|
283
|
-
return verifierReport(value);
|
|
284
|
-
case "research-report":
|
|
285
|
-
return researchReport(value);
|
|
286
|
-
case "world-knowledge-report":
|
|
287
|
-
return worldKnowledgeReport(value);
|
|
288
|
-
case "scout-report":
|
|
289
|
-
return scoutReport(value);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
|
|
293
168
|
/**
|
|
294
169
|
* A mutation report as prose: the paths it changed, each validation with its
|
|
295
170
|
* verdict and evidence, then the summary and commit line. Null when the object
|
|
@@ -317,16 +192,23 @@ function mutationReportLines(value: Record<string, unknown>): string[] | null {
|
|
|
317
192
|
|
|
318
193
|
/**
|
|
319
194
|
* The body's source lines. A structured answer (a result-contract JSON object)
|
|
320
|
-
*
|
|
321
|
-
*
|
|
195
|
+
* uses its receipt identity for a readable preview. Unknown objects retain
|
|
196
|
+
* their original numeric source tokens instead of being parsed and reserialized.
|
|
322
197
|
* Truncated text is not one object and passes through as the prose it is.
|
|
323
198
|
*/
|
|
324
199
|
function bodySourceLines(entry: WorkerEntryState): string[] {
|
|
325
|
-
|
|
326
|
-
|
|
200
|
+
if (
|
|
201
|
+
entry.pending ||
|
|
202
|
+
entry.receipt?.trust?.artifactIntegrity.state !== "verified" ||
|
|
203
|
+
entry.droppedLines !== 0 ||
|
|
204
|
+
(entry.progress?.droppedBytes ?? 0) !== 0
|
|
205
|
+
)
|
|
206
|
+
return safeWorkerAnswerText(entry.text).split("\n");
|
|
207
|
+
const structured = entry.droppedLines === 0 ? exactWorkerAnswerObject(entry.text) : null;
|
|
208
|
+
if (structured === null) return safeWorkerAnswerText(entry.text).split("\n");
|
|
327
209
|
const presented = presentedContractAnswer(entry);
|
|
328
210
|
if (presented !== null) return presented.lines;
|
|
329
|
-
return mutationReportLines(structured) ??
|
|
211
|
+
return mutationReportLines(structured)?.map(safeWorkerAnswerText) ?? safeWorkerAnswerText(entry.text).split("\n");
|
|
330
212
|
}
|
|
331
213
|
|
|
332
214
|
function bodyLines(entry: WorkerEntryState, width: number, unbounded: boolean): string[] {
|
|
@@ -334,7 +216,7 @@ function bodyLines(entry: WorkerEntryState, width: number, unbounded: boolean):
|
|
|
334
216
|
// its first token) gets no rail at all rather than one blank rail row.
|
|
335
217
|
if (entry.text.length === 0) return [];
|
|
336
218
|
const contentWidth = Math.max(1, width - RAIL_WIDTH);
|
|
337
|
-
const source = bodySourceLines(entry);
|
|
219
|
+
const source = unbounded ? safeWorkerAnswerText(entry.text).split("\n") : bodySourceLines(entry);
|
|
338
220
|
const capped = unbounded || source.length <= BODY_LINE_LIMIT ? source : source.slice(0, BODY_LINE_LIMIT);
|
|
339
221
|
const hiddenLines = entry.droppedLines + (source.length - capped.length);
|
|
340
222
|
const out: string[] = [];
|
|
@@ -417,6 +299,15 @@ export function renderWorkerEntryLines(
|
|
|
417
299
|
options: WorkerEntryRenderOptions,
|
|
418
300
|
): string[] {
|
|
419
301
|
const safeWidth = Math.max(1, Math.floor(width));
|
|
302
|
+
const integrity = entry.receipt?.trust;
|
|
303
|
+
const provenance =
|
|
304
|
+
isPending(entry) || integrity?.artifactIntegrity.state === "verified"
|
|
305
|
+
? []
|
|
306
|
+
: railLines(
|
|
307
|
+
`receipt: ${integrity ? (retiredIntegrityVersionOf(integrity.artifactIntegrity) !== null ? "seal retired" : trustStateWord("artifactIntegrity", integrity.artifactIntegrity.state)) : "integrity unavailable"}; raw output, not admitted as evidence`,
|
|
308
|
+
"warning",
|
|
309
|
+
safeWidth,
|
|
310
|
+
);
|
|
420
311
|
const quality = isPending(entry)
|
|
421
312
|
? []
|
|
422
313
|
: railLines(
|
|
@@ -434,6 +325,7 @@ export function renderWorkerEntryLines(
|
|
|
434
325
|
...(tools ? [tools] : []),
|
|
435
326
|
...failureLines(entry, safeWidth),
|
|
436
327
|
footerLine(entry, safeWidth),
|
|
328
|
+
...provenance,
|
|
437
329
|
...quality,
|
|
438
330
|
].map(redactSecretString);
|
|
439
331
|
}
|
|
@@ -446,14 +338,15 @@ export function renderWorkerEntryLines(
|
|
|
446
338
|
const summary = bodySourceLines(entry).flatMap((line) =>
|
|
447
339
|
railLines(redactSecretString(line), needsInput ? "warning" : "muted", safeWidth),
|
|
448
340
|
);
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
341
|
+
// Current work leads the bounded preview; completed calls remain explicitly historical.
|
|
342
|
+
const current = isPending(entry) ? entry.progress?.currentAction : null;
|
|
343
|
+
const actions = [
|
|
344
|
+
...(current ? [{ action: current, label: "now" }] : []),
|
|
345
|
+
...(entry.progress?.recentActions ?? []).map((action) => ({ action, label: "last" })),
|
|
346
|
+
];
|
|
347
|
+
const trail = actions.flatMap(({ action, label }) =>
|
|
455
348
|
railLines(
|
|
456
|
-
`${GLYPH.phaseTool} ${action.descriptor ? `${action.descriptor.verb} ${action.descriptor.object}` : action.tool}`,
|
|
349
|
+
`${GLYPH.phaseTool} ${label}: ${action.descriptor ? `${action.descriptor.verb} ${action.descriptor.object}` : action.tool}`,
|
|
457
350
|
"muted",
|
|
458
351
|
safeWidth,
|
|
459
352
|
),
|
|
@@ -466,7 +359,7 @@ export function renderWorkerEntryLines(
|
|
|
466
359
|
...(detail.workerRows > 0 || needsInput ? previewRows(summary, summaryRows, safeWidth, entry.pending) : []),
|
|
467
360
|
...previewRows(attemptLines(entry, safeWidth), budget(detail.errorRows), safeWidth, true),
|
|
468
361
|
...(tools ? [tools] : []),
|
|
469
|
-
...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth
|
|
362
|
+
...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth) : []),
|
|
470
363
|
...failure,
|
|
471
364
|
...(presented ? railLines(presented, "muted", safeWidth) : []),
|
|
472
365
|
...(entry.receipt?.abandonedDetail ? railLines(entry.receipt.abandonedDetail, "warning", safeWidth) : []),
|
|
@@ -478,6 +371,7 @@ export function renderWorkerEntryLines(
|
|
|
478
371
|
safeWidth,
|
|
479
372
|
)
|
|
480
373
|
: []),
|
|
374
|
+
...provenance,
|
|
481
375
|
...quality,
|
|
482
376
|
].map(redactSecretString);
|
|
483
377
|
}
|
|
@@ -35,6 +35,7 @@ export interface SessionUsageSink {
|
|
|
35
35
|
output: number;
|
|
36
36
|
cacheRead: number;
|
|
37
37
|
cacheWrite: number;
|
|
38
|
+
cacheWrite1h?: number;
|
|
38
39
|
reasoningTokens: number;
|
|
39
40
|
totalTokens: number;
|
|
40
41
|
apiCalls?: number;
|
|
@@ -86,6 +87,7 @@ export function reseedSessionUsageFromLedger(
|
|
|
86
87
|
output: call.output,
|
|
87
88
|
cacheRead: call.cacheRead,
|
|
88
89
|
cacheWrite: call.cacheWrite,
|
|
90
|
+
...(call.cacheWrite1h === undefined ? {} : { cacheWrite1h: call.cacheWrite1h }),
|
|
89
91
|
reasoningTokens: call.reasoningTokens,
|
|
90
92
|
totalTokens: call.totalTokens,
|
|
91
93
|
apiCalls: call.apiCalls ?? 1,
|
|
@@ -41,6 +41,7 @@ export interface SideQuestionUsage {
|
|
|
41
41
|
output: number;
|
|
42
42
|
cacheRead: number;
|
|
43
43
|
cacheWrite: number;
|
|
44
|
+
cacheWrite1h?: number;
|
|
44
45
|
reasoning: number;
|
|
45
46
|
totalTokens: number;
|
|
46
47
|
costUsd: number;
|
|
@@ -117,6 +118,7 @@ export function sideQuestionUsage(raw: unknown): SideQuestionUsage | null {
|
|
|
117
118
|
output,
|
|
118
119
|
cacheRead,
|
|
119
120
|
cacheWrite,
|
|
121
|
+
...(usage.cacheWrite1h === undefined ? {} : { cacheWrite1h: positive(usage.cacheWrite1h) }),
|
|
120
122
|
reasoning: positive(usage.reasoning),
|
|
121
123
|
totalTokens,
|
|
122
124
|
costUsd: positive(usage.cost?.total),
|