@iowarp/clio-coder 0.4.8 → 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/CHANGELOG.md +82 -0
- package/README.md +7 -6
- package/dist/{acp-JWPQZM2D.js → acp-ZWZCPS2A.js} +13 -13
- package/dist/{agents-4GCDIRVX.js → agents-LYSOWZUE.js} +53 -52
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-SYAKTDQE.js → auth-WBQGKWQ5.js} +27 -27
- package/dist/{background-OW67WMYR.js → background-BUMOBAQN.js} +4 -4
- package/dist/{builtins-TKS63VNV.js → builtins-ODRJOEDI.js} +7 -7
- package/dist/{chunk-JLBVCROW.js → chunk-2DRRZ57Q.js} +33 -24
- package/dist/chunk-2JBZYUPY.js +105 -0
- package/dist/chunk-2KUBKL63.js +336 -0
- package/dist/{chunk-K45LHSCI.js → chunk-2VBWFXYE.js} +7 -3
- package/dist/{chunk-XTLJDC2X.js → chunk-2X2R3UTH.js} +23 -18
- package/dist/{chunk-5HULHKT2.js → chunk-37LW32LZ.js} +5 -5
- package/dist/{chunk-W7KNI3F5.js → chunk-3AND2EFU.js} +5 -5
- package/dist/{chunk-36XSBPXL.js → chunk-3RDHGNU7.js} +95 -27
- package/dist/{chunk-BIY22UUK.js → chunk-3SUDBGEI.js} +11 -10
- package/dist/{chunk-3IQOZRQ6.js → chunk-3TQN67I2.js} +7 -7
- package/dist/{chunk-KWJXCL2X.js → chunk-3U4BL2EV.js} +3 -3
- package/dist/{chunk-RBES4TCZ.js → chunk-3UQADNG2.js} +3 -3
- package/dist/{chunk-V4ZKOKRB.js → chunk-434LRQ6Z.js} +61 -53
- package/dist/{chunk-MWMW53WW.js → chunk-4ATBOFRP.js} +649 -193
- package/dist/{chunk-QGIC5SX5.js → chunk-4DNL43EZ.js} +3 -3
- package/dist/{chunk-GVU4CXPJ.js → chunk-4HFJKRGZ.js} +113 -54
- package/dist/{chunk-5A6XR3RJ.js → chunk-555E2WVV.js} +16 -2
- package/dist/{chunk-LZDLYSUN.js → chunk-5RTEFNBP.js} +3 -3
- package/dist/{chunk-HMGAKB7E.js → chunk-64XJW7NT.js} +15 -15
- package/dist/{chunk-EXKUF426.js → chunk-7FBCRWVT.js} +280 -280
- package/dist/{chunk-K3W6BF5C.js → chunk-7JSOSVLP.js} +2 -2
- package/dist/{chunk-WFTSK7N3.js → chunk-7N3OLLSL.js} +4 -4
- package/dist/{chunk-JRA6OBHY.js → chunk-A6DULIMH.js} +17 -5
- package/dist/{chunk-R5NRX5N4.js → chunk-AB3QXXBC.js} +2 -2
- package/dist/chunk-ACCECAH4.js +49 -0
- package/dist/{chunk-GJBJHJNY.js → chunk-AM6CEP2K.js} +5 -5
- package/dist/{chunk-MUXNDNMZ.js → chunk-AY4XE6GN.js} +19 -13
- package/dist/{chunk-MATCRH3M.js → chunk-BBA2TAWV.js} +9 -9
- package/dist/{chunk-PMUUAABD.js → chunk-BMNVVKEW.js} +9 -9
- package/dist/{chunk-TOPICHGR.js → chunk-CTGZCEI6.js} +2 -2
- package/dist/{chunk-L75H5B3B.js → chunk-DIAJYJYG.js} +2 -2
- package/dist/{chunk-JIMWEYWO.js → chunk-EHZRAB4U.js} +2 -2
- package/dist/{chunk-YXANQGCX.js → chunk-EM2DIQAJ.js} +6 -6
- package/dist/{chunk-JCVIL6TY.js → chunk-ETF4ROKH.js} +4 -4
- package/dist/{chunk-5W4FRA5Q.js → chunk-F2YM3JY4.js} +483 -253
- package/dist/{chunk-YGIV24MF.js → chunk-FEBQWHJT.js} +21 -16
- package/dist/{chunk-PGEFOTJB.js → chunk-FPS4R2RN.js} +5 -4
- package/dist/{chunk-XC5POIL4.js → chunk-G5R53COU.js} +1 -1
- package/dist/chunk-GHXGMFQ5.js +40 -0
- package/dist/{chunk-QLKCCC2J.js → chunk-GJDRMBDI.js} +14 -14
- package/dist/{chunk-2ZWLMA3T.js → chunk-GREYLTZ5.js} +7 -7
- package/dist/{chunk-YXFKLMX2.js → chunk-H2WSCZZT.js} +22 -6
- package/dist/{chunk-FNVPQQYT.js → chunk-H6IUCY6Q.js} +2 -2
- package/dist/{chunk-5C2OQHLR.js → chunk-H72DCH3E.js} +92 -203
- package/dist/{chunk-JYKUMHCQ.js → chunk-H7TXJR23.js} +21 -21
- package/dist/chunk-HBJQQTKM.js +40 -0
- package/dist/chunk-HCVKSGNZ.js +990 -0
- package/dist/{chunk-ARRUMZ7X.js → chunk-I47EJPYL.js} +3 -3
- package/dist/{chunk-YKIIWURD.js → chunk-IALGWTLO.js} +3 -3
- package/dist/{chunk-FB3KTE2J.js → chunk-IALZJE37.js} +4 -4
- package/dist/{chunk-RAUOKUZV.js → chunk-IC7JXLOM.js} +15 -10
- package/dist/{chunk-LLCGGVSW.js → chunk-IOSVTTCD.js} +7 -7
- package/dist/{chunk-DBREN25X.js → chunk-IPTPMLA6.js} +8 -3
- package/dist/{chunk-V552WL53.js → chunk-IZZI3SKQ.js} +3 -67
- package/dist/{chunk-UDAK6GR2.js → chunk-JIYWMQZ5.js} +2 -2
- package/dist/{chunk-O3HSB2YL.js → chunk-JKU34ACI.js} +2 -2
- package/dist/{chunk-6X7VOCDY.js → chunk-JTR3VSV3.js} +3 -3
- package/dist/{chunk-O2QJDRWP.js → chunk-JU6MAMRJ.js} +4 -4
- package/dist/chunk-JURMQWVJ.js +15 -0
- package/dist/{chunk-STC6CWUZ.js → chunk-K3XN4LZ4.js} +5 -5
- package/dist/{chunk-ATB3Q7YO.js → chunk-KIVFXGBM.js} +27 -2
- package/dist/{chunk-WJWNZXRM.js → chunk-KOAHT3N2.js} +2 -2
- package/dist/chunk-KP5BPXR3.js +73 -0
- package/dist/{chunk-K53E2PTW.js → chunk-KRJQG47M.js} +3 -3
- package/dist/{chunk-IILXVWJY.js → chunk-KW6OJ7IY.js} +19 -21
- package/dist/{chunk-A46ILRS2.js → chunk-L3NBWLSN.js} +4 -4
- package/dist/{chunk-2U2U5POA.js → chunk-L4RUTLRL.js} +5 -5
- package/dist/{chunk-QYSAZMSH.js → chunk-LGTVWPRN.js} +2 -2
- package/dist/{chunk-KGP3UQGJ.js → chunk-LSQW6KZO.js} +5 -5
- package/dist/{chunk-P4JS3MH5.js → chunk-LWJYOHT3.js} +8 -8
- package/dist/{chunk-U3TPUXOQ.js → chunk-M6YLF66Z.js} +74 -40
- package/dist/{chunk-5D2FNBMG.js → chunk-MJ4QEJVT.js} +2 -2
- package/dist/{chunk-RM3XJX7P.js → chunk-MO65K5CH.js} +5 -5
- package/dist/{chunk-H5DPSUBB.js → chunk-MTOZEQHL.js} +3 -3
- package/dist/{chunk-6R5MBXBJ.js → chunk-NBPA5QM6.js} +2 -2
- package/dist/{chunk-H77XBUBM.js → chunk-NMBEW4PP.js} +3 -3
- package/dist/{chunk-QWUSS2QP.js → chunk-NPLLK3HO.js} +67 -87
- package/dist/{chunk-K5UJD6MM.js → chunk-NSYGPIVW.js} +5 -5
- package/dist/{context-EZZPT2ZV.js → chunk-NXTV5OI5.js} +30 -84
- package/dist/{chunk-F7Y6QTPL.js → chunk-NYDG4QP4.js} +4 -4
- package/dist/{chunk-PFZJMXIY.js → chunk-OA2GDACN.js} +2 -2
- package/dist/{chunk-Q32C6AWI.js → chunk-PJI57EC6.js} +4 -4
- package/dist/{chunk-EFXMQYI6.js → chunk-PJJBUGMR.js} +52 -52
- package/dist/{chunk-ICYIUNO4.js → chunk-PNJE7JPS.js} +18 -3
- package/dist/chunk-PP23PZEV.js +1347 -0
- package/dist/chunk-PPIFDSBK.js +409 -0
- package/dist/{chunk-RFULVPBX.js → chunk-PTFISXQO.js} +6 -5
- package/dist/{chunk-JV25I7ID.js → chunk-QB33Z5S7.js} +5 -5
- package/dist/{chunk-D55WO5J7.js → chunk-QGNII5VC.js} +8 -8
- package/dist/{chunk-RKFNU5UA.js → chunk-QI72X67S.js} +104 -27
- package/dist/chunk-QKHZZFKH.js +98 -0
- package/dist/{chunk-5UG6EZI3.js → chunk-RDKX2PME.js} +4 -4
- package/dist/{chunk-B5ZTR6KZ.js → chunk-RL7LJYN4.js} +1 -1
- package/dist/{chunk-BE4I3UJ2.js → chunk-RQROVOV3.js} +15 -13
- package/dist/{chunk-TEHVMHOK.js → chunk-S34A7BSP.js} +3 -3
- package/dist/{chunk-4P6M2TTE.js → chunk-SJETVJHX.js} +2 -2
- package/dist/{chunk-OPC4DQD6.js → chunk-SJMNU4ZS.js} +2 -2
- package/dist/{chunk-2JSCCEKO.js → chunk-SLLG2G44.js} +2 -2
- package/dist/{chunk-EPYATQMG.js → chunk-SQAZN2V3.js} +42 -16
- package/dist/{chunk-E2NSPYLC.js → chunk-SQBT46OF.js} +5 -5
- package/dist/{chunk-WTZVSMQZ.js → chunk-TCUOGIL2.js} +5 -5
- package/dist/{chunk-RRZFRIJP.js → chunk-TIWPKCVO.js} +5 -5
- package/dist/{chunk-QLAGXTTV.js → chunk-UIU7MGZ3.js} +5 -1
- package/dist/{chunk-WLHX3MM5.js → chunk-V4XJWDHR.js} +21 -11
- package/dist/{chunk-PJ5H5B7A.js → chunk-VPWGADBG.js} +18 -18
- package/dist/{chunk-GEYX2NZ5.js → chunk-VWFCAK34.js} +6 -6
- package/dist/{chunk-44U2OUSM.js → chunk-W72LLZAV.js} +2 -2
- package/dist/{chunk-ORRNGQDV.js → chunk-WGRDABW7.js} +4 -4
- package/dist/{chunk-RNLAPBJL.js → chunk-XFLSL7BT.js} +2 -2
- package/dist/{chunk-2SXGG2IV.js → chunk-XJZEDCNT.js} +6 -6
- package/dist/{chunk-UB33F3YW.js → chunk-XLLEL3K7.js} +5 -5
- package/dist/{chunk-2GPGAE5W.js → chunk-XNIZBOFV.js} +15 -1
- package/dist/{chunk-WS4FOGLY.js → chunk-XNZWWDC3.js} +2 -2
- package/dist/{chunk-P7GTE4FX.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-OEMFEL26.js → chunk-Y3M2T5RO.js} +3 -3
- package/dist/{chunk-HP7KJ5O2.js → chunk-YPQOPFP7.js} +6 -6
- package/dist/{chunk-MEHBW2SP.js → chunk-YQYINEJI.js} +6 -6
- package/dist/{chunk-RXI7K4J5.js → chunk-ZF6CV4WZ.js} +1338 -217
- package/dist/{chunk-3XE4NRLF.js → chunk-ZKJU55MX.js} +4 -2
- package/dist/{chunk-526ABLHD.js → chunk-ZKQ63XZ5.js} +12 -35
- package/dist/{chunk-PAQVETLA.js → chunk-ZKVMDNAN.js} +5 -5
- package/dist/cli/index.js +47 -37
- package/dist/{clio-BPBAPZGA.js → clio-JUDCLNHC.js} +7 -7
- package/dist/clio-context-tools-FT672MNZ.js +136 -0
- package/dist/{code-nav-KBQ3RIFK.js → code-nav-7OVCTP2Z.js} +28 -26
- package/dist/{components-6DKAXWFN.js → components-OZXZMDWU.js} +5 -5
- package/dist/{config-FWL5JK2H.js → config-P3ZQVF63.js} +80 -75
- package/dist/{config-graph-ACDB26L2.js → config-graph-GKAOBAS5.js} +74 -70
- package/dist/{configure-ZIZ4YV62.js → configure-25LRYZJG.js} +45 -44
- package/dist/context-72VQV7JX.js +73 -0
- package/dist/{context-VIL5MFRH.js → context-COWRWXP3.js} +74 -70
- package/dist/{context-Z3GOBHDK.js → context-WB3D474G.js} +12 -12
- package/dist/{context-clear-ZPB3L7MN.js → context-clear-Y4LYMWC6.js} +70 -66
- package/dist/{context-working-set-2GLBVF7L.js → context-working-set-TMZYVC7A.js} +15 -14
- package/dist/data-tool-KMBWKKWR.js +2987 -0
- package/dist/{detail-VSBWYSGZ.js → detail-4GLROGY5.js} +71 -67
- package/dist/{dispatch-runner-EEEHGKX4.js → dispatch-runner-TR3LBP5P.js} +92 -88
- package/dist/{docs-VMMWFVHL.js → docs-ZK777W2G.js} +3 -3
- package/dist/{doctor-V5L4IQGP.js → doctor-WC4OV2OB.js} +61 -59
- package/dist/{eval-VJYJ2BV3.js → eval-FUNWJNUJ.js} +45 -45
- package/dist/{evals-J2H5V6DD.js → evals-L73EBHSU.js} +4 -4
- package/dist/{evidence-Y35YSXH6.js → evidence-AVJ2RTHX.js} +80 -76
- package/dist/{evidence-POWAEBEW.js → evidence-P4NZOAK7.js} +70 -66
- package/dist/{evidence-XCCCLS36.js → evidence-Y55WKYHH.js} +79 -75
- package/dist/{evolve-GPG72VB6.js → evolve-MAWKRYWF.js} +75 -71
- package/dist/{extensions-YIZ7W3DA.js → extensions-PYQH3H47.js} +8 -8
- package/dist/{fleet-2MDCQ2VK.js → fleet-M4H2QBWT.js} +84 -80
- package/dist/{fleet-W2AF3TOJ.js → fleet-ULBXXRDR.js} +123 -119
- package/dist/{fleet-commands-WS56G26H.js → fleet-commands-7NNC4JZU.js} +17 -16
- package/dist/{fleet-decisions-MYGZ3JW7.js → fleet-decisions-EHEY7KPU.js} +9 -9
- package/dist/{fleet-graph-ELTBXBAV.js → fleet-graph-LQ2AHZT3.js} +15 -15
- package/dist/{fleet-inspect-45IK73L4.js → fleet-inspect-5IGBIIYZ.js} +76 -72
- package/dist/{fleet-preflight-T5NCZKHE.js → fleet-preflight-UTTNOKMG.js} +7 -2
- package/dist/{fleet-validate-VG4JBLA4.js → fleet-validate-YGILJKA6.js} +20 -20
- package/dist/{fleet-verify-VTSABAYO.js → fleet-verify-AUWTCDKR.js} +70 -66
- package/dist/{fleet-view-XC7WMKSS.js → fleet-view-TGUFCY5A.js} +73 -69
- package/dist/{init-VTJNNTIP.js → init-GFN2Z7NF.js} +94 -90
- package/dist/{interop-IU6BNA7C.js → interop-EF5JUWWK.js} +21 -21
- package/dist/{inventory-QPQUTUUZ.js → inventory-I6VJDDYF.js} +73 -69
- package/dist/{library-Q3NWL5CM.js → library-3J5IO2OJ.js} +13 -13
- package/dist/{library-LF7DLU6S.js → library-IJTOFTDS.js} +16 -15
- package/dist/{library-HUTAS57T.js → library-Z3KZSHPE.js} +27 -27
- package/dist/{library-import-PPW4YUC5.js → library-import-IMKFLDHX.js} +21 -21
- package/dist/{library-inventory-DIRVFRZU.js → library-inventory-CQP5D6GU.js} +13 -13
- package/dist/{library-validation-XHUZ3INE.js → library-validation-33UTX7AI.js} +11 -11
- package/dist/mcp-5FWZKUS6.js +26 -0
- package/dist/{memory-Z2LSKNV6.js → memory-36CWN67Y.js} +75 -71
- package/dist/{models-3FTREYPY.js → models-KQ6PQJJQ.js} +49 -49
- package/dist/{monitor-HF2MQRB3.js → monitor-XX6ZD6KC.js} +83 -79
- package/dist/{orchestrator-UYPA6W4S.js → orchestrator-SK6HDAOP.js} +1337 -772
- package/dist/{panes-736XB73K.js → panes-L27QRXUH.js} +12 -12
- package/dist/{panes-C4P3PIWT.js → panes-LXZIWNOZ.js} +4 -4
- package/dist/{paths-JQ4QYIYB.js → paths-7DJDU4P4.js} +5 -5
- package/dist/{preload-XSLRYH3Y.js → preload-K2TDYI4Y.js} +70 -66
- package/dist/{reset-V7QSPZYE.js → reset-73VU3XNT.js} +10 -10
- package/dist/{resources-OJGDFHYT.js → resources-3BYJYVYL.js} +16 -16
- package/dist/{run-T354SMDW.js → run-AR7PY6GW.js} +132 -128
- package/dist/run-script-H2KUDIII.js +41 -0
- package/dist/{settings-MWZXO6RV.js → settings-3VMBMWID.js} +4 -4
- package/dist/{share-Y5ZKJPND.js → share-HVWH4FPF.js} +21 -21
- package/dist/{skills-4GLZC4LN.js → skills-5TYEY75Q.js} +22 -22
- package/dist/{skills-eval-L5T7GODM.js → skills-eval-CK3MD63Z.js} +96 -87
- package/dist/{skills-inventory-LASKXEZI.js → skills-inventory-KSFYG3I6.js} +16 -16
- package/dist/{slash-commands-OIMRU36D.js → slash-commands-DMVHML7P.js} +47 -44
- package/dist/{steer-KMAM2Y2C.js → steer-XCD6V3EW.js} +4 -4
- package/dist/{support-AWC3XKPX.js → support-JAZL6VBR.js} +7 -7
- package/dist/{system-CD75NYBU.js → system-3TDQRMZZ.js} +26 -26
- package/dist/{targets-VSZX2J2S.js → targets-EZKHAYRN.js} +66 -65
- package/dist/{tasks-AN567LYH.js → tasks-SNEFHWYW.js} +12 -12
- package/dist/{terminal-lease-6KTWNHVY.js → terminal-lease-BNLFA4OF.js} +8 -7
- package/dist/{tools-AGRK3V5J.js → tools-7IM6BDCE.js} +12 -12
- package/dist/{trace-P4MQZD33.js → trace-C3MBGD4S.js} +8 -8
- package/dist/{tui-primitives-A6MUW32V.js → tui-primitives-36BY2774.js} +2 -2
- package/dist/{uninstall-BRUTEPIC.js → uninstall-WWLOSZ42.js} +10 -10
- package/dist/{upgrade-SBCGHQGJ.js → upgrade-ETK2JNSJ.js} +37 -47
- package/dist/{usage-BIDVTO6V.js → usage-S2HOB7BZ.js} +93 -89
- package/dist/{verifiers-LTGCAMXS.js → verifiers-QDTEVH7R.js} +24 -22
- package/dist/{verify-OZU4LLNP.js → verify-SUKUK6XM.js} +15 -14
- package/dist/web/client/assets/{abnfDiagram-VCTEODGH-C5wfoHm3.js → abnfDiagram-VCTEODGH-BznNOe_I.js} +1 -1
- package/dist/web/client/assets/{arc-oH91sfLl.js → arc-Pry-7G1_.js} +1 -1
- 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/{blockDiagram-I7D4REHJ-wi0_CYHL.js → blockDiagram-I7D4REHJ-prINbpbM.js} +1 -1
- package/dist/web/client/assets/{c4Diagram-7LVT6UL2-DV7NYc2W.js → c4Diagram-7LVT6UL2-DkVRKtyU.js} +1 -1
- package/dist/web/client/assets/channel-c4EeUUqA.js +1 -0
- package/dist/web/client/assets/{chunk-4HAMMTFA-Bhsegh3F.js → chunk-4HAMMTFA-CV0Z1ApC.js} +1 -1
- package/dist/web/client/assets/{chunk-75Z2AOVW-RQCckcQG.js → chunk-75Z2AOVW-D34Nohxq.js} +1 -1
- package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +125 -0
- package/dist/web/client/assets/{chunk-F27PBJKO-BcNqv2x1.js → chunk-F27PBJKO-CmRojxkG.js} +1 -1
- package/dist/web/client/assets/{chunk-GMAD6QVW-Bq8JWiZT.js → chunk-GMAD6QVW-ClYZmc73.js} +1 -1
- package/dist/web/client/assets/{chunk-GVQU2GXP-DbchrAeJ.js → chunk-GVQU2GXP-B2BiHFt-.js} +1 -1
- package/dist/web/client/assets/{chunk-IMKFNOWR-DrpvjocK.js → chunk-IMKFNOWR-BGApZ8nP.js} +1 -1
- package/dist/web/client/assets/{chunk-L3NEJ4N5-DHLmTnCe.js → chunk-L3NEJ4N5-DIzCgpkY.js} +1 -1
- package/dist/web/client/assets/{chunk-OSK3NFVY-CsRbtN9n.js → chunk-OSK3NFVY-BPT-yePv.js} +1 -1
- package/dist/web/client/assets/{chunk-P2QGCYS3-aqPbxoMh.js → chunk-P2QGCYS3-BC1WTc2t.js} +1 -1
- package/dist/web/client/assets/{chunk-POPQ4Y6H-Dl5vw0h0.js → chunk-POPQ4Y6H-BSjzBmZU.js} +1 -1
- package/dist/web/client/assets/{chunk-PWAF6VOD-D7OBRSdO.js → chunk-PWAF6VOD-BIjLs86Z.js} +1 -1
- package/dist/web/client/assets/{chunk-SHT3W25Y-CdKCIwuB.js → chunk-SHT3W25Y-CduDz2cm.js} +1 -1
- package/dist/web/client/assets/{chunk-SVP7TREG-B94Nu_1-.js → chunk-SVP7TREG-XUn4pPAP.js} +1 -1
- package/dist/web/client/assets/{chunk-TICWLB2K-jjRQI_hk.js → chunk-TICWLB2K-DcBy2DKy.js} +1 -1
- package/dist/web/client/assets/{chunk-XXDRQBXY-azkbKE37.js → chunk-XXDRQBXY-DqAYeljN.js} +1 -1
- 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/cose-bilkent-JH36ORCC-CVh1icwb.js +1 -0
- package/dist/web/client/assets/{cynefin-OW5HDTMX--i9RDU5f.js → cynefin-OW5HDTMX-BecPbyM6.js} +1 -1
- package/dist/web/client/assets/{cynefinDiagram-5FMLGOSQ-cRcvyBdp.js → cynefinDiagram-5FMLGOSQ-BzMzFwyT.js} +1 -1
- package/dist/web/client/assets/{dagre-GXQ25YYZ-C9mZmAPe.js → dagre-GXQ25YYZ-CAWJmRMG.js} +1 -1
- package/dist/web/client/assets/{diagram-S7CK7UJ4-Oj_zlLDY.js → diagram-S7CK7UJ4--lp0ALmn.js} +1 -1
- package/dist/web/client/assets/{diagram-UQ7AKVKN-BWKbbfcR.js → diagram-UQ7AKVKN-gKUnsjcj.js} +1 -1
- package/dist/web/client/assets/{diagram-VSXAHHWV-C3N3f7DO.js → diagram-VSXAHHWV-BoN5D1Gh.js} +1 -1
- package/dist/web/client/assets/{diagram-VX7I27RA-CtDKDAWe.js → diagram-VX7I27RA-BMtuswQ6.js} +1 -1
- package/dist/web/client/assets/{diagram-Z3DM3KII-B8bkBRCz.js → diagram-Z3DM3KII-DtU8LXrA.js} +1 -1
- package/dist/web/client/assets/dist-v5Q1xZ2K.js +1 -0
- package/dist/web/client/assets/{ebnfDiagram-PWID7BFC-CskW-Whx.js → ebnfDiagram-PWID7BFC-DDcnv9BH.js} +1 -1
- package/dist/web/client/assets/{erDiagram-RLTQ6QDP-C-83cgCW.js → erDiagram-RLTQ6QDP-DvRb4iDL.js} +1 -1
- 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-B40cQtBE.js → gitGraph-4MIJSDKK-DjD_AAMj.js} +1 -1
- package/dist/web/client/assets/{gitGraphDiagram-WWUBYQGX-CH-7P7Di.js → gitGraphDiagram-WWUBYQGX-CDyN9n2u.js} +1 -1
- package/dist/web/client/assets/index-CVcy0FAn.js +75 -0
- package/dist/web/client/assets/{info-A6RAGUB7-eCCE9D_Q.js → info-A6RAGUB7-C_XK8Hq0.js} +1 -1
- package/dist/web/client/assets/{infoDiagram-27XIBGKW-DRnvqMjM.js → infoDiagram-27XIBGKW-DIe4tJ1i.js} +1 -1
- package/dist/web/client/assets/{ishikawaDiagram-5VMMS53U-DBA_55wp.js → ishikawaDiagram-5VMMS53U-CVl5unKI.js} +1 -1
- package/dist/web/client/assets/{journeyDiagram-3NMN7TZE-C-ewpNl7.js → journeyDiagram-3NMN7TZE-CPEB1Vt8.js} +1 -1
- package/dist/web/client/assets/{kanban-definition-UXKFOSKX-B1taGsu0.js → kanban-definition-UXKFOSKX-j-9WXjYQ.js} +1 -1
- package/dist/web/client/assets/{line-lZ0kyxDI.js → line-BIDAcEtX.js} +1 -1
- package/dist/web/client/assets/{linear-DIc8FgZj.js → linear-SzVmGSw4.js} +1 -1
- package/dist/web/client/assets/{mermaid-parser.core-SXolxpXw.js → mermaid-parser.core-Ux4vssh0.js} +3 -3
- package/dist/web/client/assets/{mermaid.core-DXgQtkNg.js → mermaid.core-CDuwVKeh.js} +4 -4
- package/dist/web/client/assets/{mindmap-definition-YA3MSWOX-DXJas9K7.js → mindmap-definition-YA3MSWOX-5MlQEeQ6.js} +1 -1
- package/dist/web/client/assets/{packet-AYTQ26CC-OqVl_07o.js → packet-AYTQ26CC-DRO66c9Q.js} +1 -1
- package/dist/web/client/assets/{pegDiagram-XKGWAZYB-CPE_zdfN.js → pegDiagram-XKGWAZYB-BakZnSjM.js} +1 -1
- package/dist/web/client/assets/{pie-WAS4IAKB-DAxnMBLe.js → pie-WAS4IAKB-BEzcmhz8.js} +1 -1
- package/dist/web/client/assets/{pieDiagram-E7YTZNPT-Uwjpufxv.js → pieDiagram-E7YTZNPT-DpmqgoPt.js} +1 -1
- package/dist/web/client/assets/prism-core-BtsZdCS6.js +1 -0
- package/dist/web/client/assets/{quadrantDiagram-AXDQQJYC-Bjs4yjgs.js → quadrantDiagram-AXDQQJYC-DuMPwwV2.js} +1 -1
- package/dist/web/client/assets/{radar-RG4KPBEZ-CuCKjHM3.js → radar-RG4KPBEZ-Djm3oXl5.js} +1 -1
- package/dist/web/client/assets/{railroad-74A4TZTK-CnQK-Cc1.js → railroad-74A4TZTK-Cpvkwsao.js} +1 -1
- 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-BDDIPNLL.js → railroadDiagram-O6MQD6OU-CgMS4B6R.js} +1 -1
- package/dist/web/client/assets/{requirementDiagram-BXWQKSXE-B5Ydyxc1.js → requirementDiagram-BXWQKSXE-CX5eoNdN.js} +1 -1
- package/dist/web/client/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/dist/web/client/assets/{sankeyDiagram-P5KCCOFB-Bw2Qym75.js → sankeyDiagram-P5KCCOFB-CODBX2N3.js} +1 -1
- package/dist/web/client/assets/{sequenceDiagram-WJ2MYXX4-BZf36nO0.js → sequenceDiagram-WJ2MYXX4-eUhhF8OR.js} +1 -1
- package/dist/web/client/assets/src-B6xuSHsQ.js +1 -0
- package/dist/web/client/assets/{stateDiagram-D77RDMKH-DnH6JRkp.js → stateDiagram-D77RDMKH-vR6l0NC2.js} +1 -1
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +1 -0
- package/dist/web/client/assets/{swimlanes-42K2YHIH-D9PZmtZg.js → swimlanes-42K2YHIH-v9Tw_zX7.js} +1 -1
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +8 -0
- package/dist/web/client/assets/{timeline-definition-24CTP7MA-CrkZZBo7.js → timeline-definition-24CTP7MA-DxianbhU.js} +1 -1
- package/dist/web/client/assets/{treeView-Q6P3EWNA-C9zDShoC.js → treeView-Q6P3EWNA-DLxnZb9R.js} +1 -1
- package/dist/web/client/assets/{treemap-WGGIJYW6-B-plj9yK.js → treemap-WGGIJYW6-I7UnZ6xJ.js} +1 -1
- package/dist/web/client/assets/{vennDiagram-4TSXK5OY-VeOdaphN.js → vennDiagram-4TSXK5OY-Ar7M8Mrj.js} +1 -1
- package/dist/web/client/assets/{wardley-WFR3VGLG-Wl1P_m6L.js → wardley-WFR3VGLG-B8ZSHeDu.js} +1 -1
- package/dist/web/client/assets/{wardleyDiagram-VM6X3IG4-B85-R9t2.js → wardleyDiagram-VM6X3IG4-Qks2FmIn.js} +1 -1
- package/dist/web/client/assets/{xychartDiagram-S5SC5T6Z-BrD8OW8m.js → xychartDiagram-S5SC5T6Z-BBBjRtiE.js} +1 -1
- package/dist/web/client/index.html +3 -1
- package/dist/web/reads-worker.js +17 -17
- package/dist/web/server.js +25 -25
- package/dist/{web-EU6ATJWA.js → web-EMGUGGEI.js} +3 -3
- package/dist/{web-fetch-U22Q7HV4.js → web-fetch-6BRRVQON.js} +22 -5
- package/dist/{wiki-generate-LZRLFG6I.js → wiki-generate-XHSJTDOP.js} +104 -100
- package/dist/{with-panes-X5CZOGML.js → with-panes-Z6BTEHMZ.js} +11 -11
- package/dist/worker/entry.js +101 -87
- package/docs/README.md +1 -1
- package/docs/architecture/artifact-placement.md +12 -1
- package/docs/architecture/library.md +1 -1
- package/docs/architecture/prompt-envelope-and-tools.md +37 -27
- package/docs/architecture/safety-model.md +19 -6
- package/docs/architecture/session-lifecycle.md +10 -4
- package/docs/architecture/tui-design.md +37 -14
- package/docs/guide/commands-and-modes.md +39 -19
- package/docs/guide/configuration-and-targets.md +7 -5
- package/docs/guide/configuration-reference.md +116 -13
- package/docs/guide/environment-variables.md +2 -5
- package/docs/guide/fleet-dispatch.md +3 -2
- package/docs/guide/glossary.md +1 -1
- package/docs/guide/installation-and-lifecycle.md +2 -2
- package/docs/guide/resource-library.md +1 -1
- package/docs/guide/tool-usage.md +166 -64
- package/docs/guide/troubleshooting.md +1 -1
- package/docs/process/documentation-guide.md +1 -0
- package/docs/process/fleet-demo-runbook.md +6 -6
- package/docs/process/scientific-validation.md +22 -2
- package/docs/process/tool-audit-v0.4.9.md +357 -0
- package/package.json +1 -1
- package/src/cli/argv.ts +31 -0
- package/src/cli/clio.ts +17 -13
- package/src/cli/config.ts +4 -0
- package/src/cli/doctor-panes.ts +1 -1
- package/src/cli/doctor.ts +3 -1
- package/src/cli/index.ts +14 -1
- package/src/cli/mcp.ts +106 -0
- package/src/cli/skills-eval.ts +8 -2
- package/src/cli/upgrade.ts +34 -38
- package/src/cli/verifiers.ts +1 -1
- package/src/core/bash-exec.ts +27 -4
- package/src/core/config.ts +2 -1
- package/src/core/defaults.ts +10 -1
- 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 +3 -3
- package/src/core/tool-names.ts +33 -12
- 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 +131 -14
- 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/receipt-findings.ts +3 -4
- package/src/domains/dispatch/reservation-store.ts +7 -9
- package/src/domains/dispatch/route-facts.ts +1 -1
- package/src/domains/dispatch/state.ts +3 -3
- package/src/domains/dispatch/types.ts +1 -1
- package/src/domains/evidence/build.ts +35 -7
- 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/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/contract.ts +7 -3
- package/src/domains/observability/evidence-index.ts +2 -2
- package/src/domains/observability/projection.ts +10 -0
- package/src/domains/prompts/compiler.ts +41 -23
- 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/index.ts +5 -1
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +42 -10
- package/src/domains/providers/probe/http.ts +44 -59
- package/src/domains/providers/probe/reasoning.ts +2 -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/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 +25 -2
- 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/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/engine/apis/openai-completions.ts +8 -0
- package/src/engine/loop-guard.ts +7 -0
- 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 +18 -2
- package/src/interactive/chat-loop-policy.ts +1 -0
- package/src/interactive/chat-loop.ts +8 -4
- 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/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/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-persistence.ts +6 -1
- package/src/interactive/turn-recovery.ts +2 -1
- package/src/interactive/turn-runtime.ts +22 -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 +72 -7
- 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 +94 -6
- 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/dist/chunk-B6UM3OZC.js +0 -15
- package/dist/chunk-GJ24ODAX.js +0 -196
- package/dist/chunk-LZCCBLRC.js +0 -57
- package/dist/web/client/assets/architecture-7GRP2DOG-EGozsYEO.js +0 -1
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-z9FokbJl.js +0 -36
- package/dist/web/client/assets/channel-CiUWbHN9.js +0 -1
- package/dist/web/client/assets/chunk-DU6HZSFF-C5USiOAy.js +0 -125
- package/dist/web/client/assets/classDiagram-ZZMXUADV-CMODalmo.js +0 -1
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-CMODalmo.js +0 -1
- package/dist/web/client/assets/cose-bilkent-JH36ORCC-RbQL23qS.js +0 -1
- package/dist/web/client/assets/dist-D0_q-A2b.js +0 -1
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-DjVq8wKU.js +0 -1
- package/dist/web/client/assets/flowDiagram-HODETNUW-BUiCBGXt.js +0 -1
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-B2lb8lvF.js +0 -292
- package/dist/web/client/assets/index-FSIC94pi.js +0 -83
- package/dist/web/client/assets/prism-core-BngLtbUd.js +0 -1
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-BcW01NZG.js +0 -1
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-B7YCEDDd.js +0 -1
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-DjNZbSTZ.js +0 -1
- package/dist/web/client/assets/src-yeptRXpt.js +0 -1
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-C7QtHeK4.js +0 -1
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-CBZlPFky.js +0 -8
|
@@ -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
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { mcpCommandOutput } from "../cli/mcp.js";
|
|
1
2
|
import { acceptanceFromTaskFlags } from "../cli/tasks.js";
|
|
2
3
|
import { BusChannels } from "../core/bus-events.js";
|
|
3
4
|
import { THINKING_LEVELS } from "../core/defaults.js";
|
|
@@ -135,6 +136,7 @@ export interface LibraryBrowseRequest {
|
|
|
135
136
|
}
|
|
136
137
|
|
|
137
138
|
type SlashCommandVariant =
|
|
139
|
+
| { kind: "mcp"; argv: string[] }
|
|
138
140
|
| { kind: "quit" }
|
|
139
141
|
| { kind: "help"; query?: string }
|
|
140
142
|
| { kind: "init"; options: InitCommandOptions }
|
|
@@ -872,7 +874,7 @@ export interface BuiltinSlashCommand {
|
|
|
872
874
|
match?(trimmed: string): SlashCommand | null;
|
|
873
875
|
fromArgs?(parsed: ParsedArgs, trimmed: string): SlashCommand;
|
|
874
876
|
/** Execute `command` against `ctx`. Called only for kinds declared in `kinds`. */
|
|
875
|
-
handle(command: SlashCommand, ctx: SlashCommandContext):
|
|
877
|
+
handle(command: SlashCommand, ctx: SlashCommandContext): undefined | "rejected";
|
|
876
878
|
}
|
|
877
879
|
|
|
878
880
|
const RUN_THINKING_LEVELS: ReadonlyArray<JobThinkingLevel> = THINKING_LEVELS;
|
|
@@ -1227,6 +1229,29 @@ export const BUILTIN_SLASH_COMMANDS: ReadonlyArray<BuiltinSlashCommand> = [
|
|
|
1227
1229
|
ctx.openSkillsHub?.({ tab: "prompt" });
|
|
1228
1230
|
},
|
|
1229
1231
|
},
|
|
1232
|
+
{
|
|
1233
|
+
name: "mcp",
|
|
1234
|
+
description: "List MCP servers or manage explicit trust with trust <id> [class] and untrust <id>",
|
|
1235
|
+
group: "Inspect",
|
|
1236
|
+
kinds: ["mcp"],
|
|
1237
|
+
args: {
|
|
1238
|
+
positionals: [
|
|
1239
|
+
{ name: "action", required: false, values: ["list", "trust", "untrust"] },
|
|
1240
|
+
{ name: "id", required: false },
|
|
1241
|
+
{ name: "class", required: false },
|
|
1242
|
+
],
|
|
1243
|
+
},
|
|
1244
|
+
fromArgs(parsed) {
|
|
1245
|
+
if (parsed.error) return { kind: "usage-error", command: "mcp", reason: parsed.error };
|
|
1246
|
+
const [action = "list", id, actionClass] = parsed.positionals;
|
|
1247
|
+
return { kind: "mcp", argv: [action, ...(id ? [id] : []), ...(actionClass ? ["--action-class", actionClass] : [])] };
|
|
1248
|
+
},
|
|
1249
|
+
handle(command, ctx) {
|
|
1250
|
+
if (command.kind !== "mcp") return;
|
|
1251
|
+
const result = mcpCommandOutput(command.argv);
|
|
1252
|
+
ctx.notice(result.code ? "error" : "info", result.text);
|
|
1253
|
+
},
|
|
1254
|
+
},
|
|
1230
1255
|
{
|
|
1231
1256
|
name: "extensions",
|
|
1232
1257
|
description: "Inspect harness extensions or reload their commands, hooks and operator UI",
|
|
@@ -27,8 +27,8 @@ export interface CommandPositionalSpec {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
|
-
* Stable
|
|
31
|
-
*
|
|
30
|
+
* Stable names for dynamic completion sources. The presentation layer supplies
|
|
31
|
+
* read-only catalogs for available slots; unsupplied slots return no values.
|
|
32
32
|
*/
|
|
33
33
|
export const COMPLETION_SLOT_NAMES = [
|
|
34
34
|
"agents",
|