@iowarp/clio-coder 0.4.6 → 0.4.8
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 +283 -0
- package/CHANGELOG.md +79 -0
- package/CONTRIBUTING.md +178 -96
- package/NOTICE +8 -0
- package/README.md +100 -47
- package/dist/acp-JWPQZM2D.js +130 -0
- package/dist/agents-4GCDIRVX.js +149 -0
- package/dist/assets/codewiki.json +1 -1
- package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
- package/dist/assets/tui-notices/marked-LICENSE +44 -0
- package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
- package/dist/assets/web-notices/@hono__node-server-LICENSE +21 -0
- package/dist/assets/web-notices/hono-LICENSE +21 -0
- package/dist/auth-SYAKTDQE.js +551 -0
- package/dist/background-OW67WMYR.js +37 -0
- package/dist/builtins-TKS63VNV.js +22 -0
- package/dist/chunk-2JSCCEKO.js +85 -0
- package/dist/chunk-2SXGG2IV.js +391 -0
- package/dist/chunk-2U2U5POA.js +59 -0
- package/dist/chunk-2ZWLMA3T.js +658 -0
- package/dist/chunk-36XSBPXL.js +579 -0
- package/dist/chunk-3IQOZRQ6.js +396 -0
- package/dist/chunk-3XE4NRLF.js +324 -0
- package/dist/chunk-44U2OUSM.js +243 -0
- package/dist/chunk-4P6M2TTE.js +119 -0
- package/dist/chunk-526ABLHD.js +1219 -0
- package/dist/chunk-5C2OQHLR.js +674 -0
- package/dist/chunk-5D2FNBMG.js +185 -0
- package/dist/chunk-5EQO5NWP.js +243 -0
- package/dist/chunk-5HULHKT2.js +32 -0
- package/dist/chunk-5UG6EZI3.js +66 -0
- package/dist/chunk-5W4FRA5Q.js +22283 -0
- package/dist/chunk-6R5MBXBJ.js +386 -0
- package/dist/chunk-6TKOFFGE.js +1058 -0
- package/dist/chunk-6UJ7RDI7.js +1143 -0
- package/dist/chunk-6X7VOCDY.js +44 -0
- package/dist/chunk-7QQRPB2E.js +915 -0
- package/dist/chunk-ARRUMZ7X.js +1377 -0
- package/dist/chunk-ATB3Q7YO.js +663 -0
- package/dist/chunk-AUHVBIDW.js +19 -0
- package/dist/chunk-BE4I3UJ2.js +668 -0
- package/dist/chunk-BFPHMSK7.js +169 -0
- package/dist/chunk-BHJMMCXS.js +466 -0
- package/dist/chunk-BIY22UUK.js +1322 -0
- package/dist/chunk-D55WO5J7.js +110 -0
- package/dist/chunk-DVJL77SO.js +162 -0
- package/dist/chunk-E2NSPYLC.js +814 -0
- package/dist/chunk-EFXMQYI6.js +4484 -0
- package/dist/chunk-EPYATQMG.js +2718 -0
- package/dist/chunk-EXKUF426.js +1801 -0
- package/dist/chunk-F7Y6QTPL.js +689 -0
- package/dist/chunk-FB3KTE2J.js +1710 -0
- package/dist/chunk-FNVPQQYT.js +117 -0
- package/dist/chunk-GEVQNST4.js +101 -0
- package/dist/chunk-GEYX2NZ5.js +697 -0
- package/dist/chunk-GJBJHJNY.js +2120 -0
- package/dist/chunk-GM4TY6VN.js +1233 -0
- package/dist/chunk-GVU4CXPJ.js +5191 -0
- package/dist/chunk-H5DPSUBB.js +637 -0
- package/dist/chunk-H77XBUBM.js +688 -0
- package/dist/chunk-HMGAKB7E.js +380 -0
- package/dist/chunk-HP7KJ5O2.js +797 -0
- package/dist/chunk-HVCAY2FH.js +67 -0
- package/dist/chunk-ICYIUNO4.js +35 -0
- package/dist/chunk-IILXVWJY.js +223 -0
- package/dist/chunk-JCVIL6TY.js +595 -0
- package/dist/chunk-JIMWEYWO.js +63 -0
- package/dist/chunk-JLBVCROW.js +562 -0
- package/dist/chunk-JOBN2YQQ.js +176 -0
- package/dist/chunk-JOL2QRLE.js +152 -0
- package/dist/chunk-JRA6OBHY.js +974 -0
- package/dist/chunk-JV25I7ID.js +1865 -0
- package/dist/chunk-JYKUMHCQ.js +705 -0
- package/dist/chunk-K3W6BF5C.js +283 -0
- package/dist/chunk-K45LHSCI.js +194 -0
- package/dist/chunk-K53E2PTW.js +1289 -0
- package/dist/chunk-K5UJD6MM.js +39 -0
- package/dist/chunk-KGP3UQGJ.js +200 -0
- package/dist/chunk-KKRXONXG.js +43 -0
- package/dist/chunk-KWJXCL2X.js +103 -0
- package/dist/chunk-L75H5B3B.js +446 -0
- package/dist/chunk-LLCGGVSW.js +108 -0
- package/dist/chunk-LZCCBLRC.js +57 -0
- package/dist/chunk-LZDLYSUN.js +197 -0
- package/dist/chunk-MATCRH3M.js +667 -0
- package/dist/chunk-MEHBW2SP.js +132 -0
- package/dist/chunk-MUXNDNMZ.js +659 -0
- package/dist/chunk-MWMW53WW.js +7346 -0
- package/dist/chunk-MZDPF35R.js +45 -0
- package/dist/chunk-MZKYVIWW.js +188 -0
- package/dist/chunk-O2QJDRWP.js +362 -0
- package/dist/chunk-O3HSB2YL.js +693 -0
- package/dist/chunk-OEMFEL26.js +891 -0
- package/dist/chunk-OH3YYA3B.js +15 -0
- package/dist/chunk-OPC4DQD6.js +634 -0
- package/dist/chunk-ORRNGQDV.js +207 -0
- package/dist/chunk-P4JS3MH5.js +165 -0
- package/dist/chunk-P7GTE4FX.js +308 -0
- package/dist/chunk-PAQVETLA.js +962 -0
- package/dist/chunk-PFZJMXIY.js +146 -0
- package/dist/chunk-PGEFOTJB.js +1974 -0
- package/dist/chunk-PJ5H5B7A.js +3151 -0
- package/dist/chunk-PMUUAABD.js +604 -0
- package/dist/chunk-Q32C6AWI.js +236 -0
- package/dist/chunk-QGIC5SX5.js +139 -0
- package/dist/chunk-QLAGXTTV.js +482 -0
- package/dist/chunk-QLKCCC2J.js +573 -0
- package/dist/chunk-QWUSS2QP.js +3630 -0
- package/dist/chunk-QYSAZMSH.js +47 -0
- package/dist/chunk-R5NRX5N4.js +123 -0
- package/dist/chunk-RAUOKUZV.js +1572 -0
- package/dist/chunk-RBES4TCZ.js +302 -0
- package/dist/chunk-RFCKPS2V.js +26 -0
- package/dist/chunk-RFULVPBX.js +318 -0
- package/dist/chunk-RKFNU5UA.js +404 -0
- package/dist/chunk-RM3XJX7P.js +1148 -0
- package/dist/chunk-RNLAPBJL.js +386 -0
- package/dist/chunk-RPMNIFRY.js +65 -0
- package/dist/chunk-RRZFRIJP.js +42 -0
- package/dist/chunk-RXI7K4J5.js +4493 -0
- package/dist/chunk-SER7RRAE.js +4271 -0
- package/dist/chunk-STC6CWUZ.js +402 -0
- package/dist/chunk-TEHVMHOK.js +97 -0
- package/dist/chunk-TOPICHGR.js +33 -0
- package/dist/chunk-U3TPUXOQ.js +2653 -0
- package/dist/chunk-UB33F3YW.js +709 -0
- package/dist/chunk-UDAK6GR2.js +175 -0
- package/dist/chunk-USBBEKHW.js +177 -0
- package/dist/chunk-V4ZKOKRB.js +13433 -0
- package/dist/chunk-W5RM7YAH.js +78 -0
- package/dist/chunk-W7KNI3F5.js +215 -0
- package/dist/chunk-WFTSK7N3.js +637 -0
- package/dist/chunk-WJWNZXRM.js +395 -0
- package/dist/chunk-WLHX3MM5.js +63 -0
- package/dist/chunk-WS4FOGLY.js +686 -0
- package/dist/chunk-WTZVSMQZ.js +52 -0
- package/dist/chunk-WWRV5RJI.js +165 -0
- package/dist/chunk-X6FLVUM5.js +141 -0
- package/dist/chunk-XC5POIL4.js +68 -0
- package/dist/chunk-XTLJDC2X.js +1013 -0
- package/dist/chunk-XW2UZICE.js +372 -0
- package/dist/chunk-Y3JU5RPK.js +8 -0
- package/dist/chunk-YGIV24MF.js +1018 -0
- package/dist/chunk-YJCCMYYT.js +125 -0
- package/dist/chunk-YKIIWURD.js +36 -0
- package/dist/chunk-YQ3GFEUY.js +341 -0
- package/dist/chunk-YXANQGCX.js +179 -0
- package/dist/chunk-YXFKLMX2.js +222 -0
- package/dist/chunk-ZST3FRCV.js +132 -0
- package/dist/cli/index.js +40 -40
- package/dist/clio-BPBAPZGA.js +26 -0
- package/dist/code-nav-KBQ3RIFK.js +686 -0
- package/dist/components-6DKAXWFN.js +674 -0
- package/dist/config-FWL5JK2H.js +270 -0
- package/dist/config-graph-ACDB26L2.js +156 -0
- package/dist/configure-ZIZ4YV62.js +85 -0
- package/dist/context-EZZPT2ZV.js +1074 -0
- package/dist/context-VIL5MFRH.js +282 -0
- package/dist/context-Z3GOBHDK.js +344 -0
- package/dist/context-clear-ZPB3L7MN.js +188 -0
- package/dist/context-index-W6A4V7OC.js +120 -0
- package/dist/context-map-DKL3QT6D.js +555 -0
- package/dist/context-working-set-2GLBVF7L.js +1559 -0
- package/dist/detail-VSBWYSGZ.js +119 -0
- package/dist/dispatch-runner-EEEHGKX4.js +2442 -0
- package/dist/docs-VMMWFVHL.js +101 -0
- package/dist/doctor-V5L4IQGP.js +812 -0
- package/dist/eval-VJYJ2BV3.js +5050 -0
- package/dist/eval-inventory-CX24K2JT.js +260 -0
- package/dist/evals-J2H5V6DD.js +104 -0
- package/dist/evidence-POWAEBEW.js +229 -0
- package/dist/evidence-XCCCLS36.js +242 -0
- package/dist/evidence-Y35YSXH6.js +388 -0
- package/dist/evolve-GPG72VB6.js +613 -0
- package/dist/extensions-YIZ7W3DA.js +308 -0
- package/dist/fleet-2MDCQ2VK.js +264 -0
- package/dist/fleet-W2AF3TOJ.js +919 -0
- package/dist/fleet-commands-WS56G26H.js +75 -0
- package/dist/fleet-decisions-MYGZ3JW7.js +52 -0
- package/dist/fleet-graph-ELTBXBAV.js +136 -0
- package/dist/fleet-inspect-45IK73L4.js +308 -0
- package/dist/fleet-preflight-T5NCZKHE.js +22 -0
- package/dist/fleet-validate-VG4JBLA4.js +91 -0
- package/dist/fleet-verify-VTSABAYO.js +206 -0
- package/dist/fleet-view-XC7WMKSS.js +123 -0
- package/dist/init-VTJNNTIP.js +329 -0
- package/dist/install-6PIF6F6W.js +19 -0
- package/dist/interop-IU6BNA7C.js +246 -0
- package/dist/inventory-QPQUTUUZ.js +123 -0
- package/dist/library-HUTAS57T.js +492 -0
- package/dist/library-LF7DLU6S.js +306 -0
- package/dist/library-Q3NWL5CM.js +75 -0
- package/dist/library-import-PPW4YUC5.js +183 -0
- package/dist/library-inventory-DIRVFRZU.js +56 -0
- package/dist/library-validation-XHUZ3INE.js +42 -0
- package/dist/memory-Z2LSKNV6.js +516 -0
- package/dist/models-3FTREYPY.js +302 -0
- package/dist/monitor-HF2MQRB3.js +781 -0
- package/dist/orchestrator-UYPA6W4S.js +41502 -0
- package/dist/panes-736XB73K.js +74 -0
- package/dist/panes-C4P3PIWT.js +103 -0
- package/dist/paths-JQ4QYIYB.js +67 -0
- package/dist/preload-XSLRYH3Y.js +120 -0
- package/dist/reset-V7QSPZYE.js +345 -0
- package/dist/resources-OJGDFHYT.js +181 -0
- package/dist/run-T354SMDW.js +892 -0
- package/dist/settings-MWZXO6RV.js +72 -0
- package/dist/share-Y5ZKJPND.js +293 -0
- package/dist/skills-4GLZC4LN.js +100 -0
- package/dist/skills-eval-L5T7GODM.js +1074 -0
- package/dist/skills-inventory-LASKXEZI.js +138 -0
- package/dist/slash-commands-OIMRU36D.js +95 -0
- package/dist/steer-KMAM2Y2C.js +77 -0
- package/dist/support-AWC3XKPX.js +38 -0
- package/dist/system-CD75NYBU.js +116 -0
- package/dist/targets-VSZX2J2S.js +1116 -0
- package/dist/tasks-AN567LYH.js +36 -0
- package/dist/terminal-lease-6KTWNHVY.js +418 -0
- package/dist/tools-AGRK3V5J.js +28 -0
- package/dist/trace-P4MQZD33.js +524 -0
- package/dist/tui-primitives-A6MUW32V.js +18 -0
- package/dist/uninstall-BRUTEPIC.js +432 -0
- package/dist/upgrade-SBCGHQGJ.js +307 -0
- package/dist/usage-BIDVTO6V.js +1061 -0
- package/dist/verifiers-LTGCAMXS.js +630 -0
- package/dist/verify-OZU4LLNP.js +30 -0
- package/dist/web/client/THIRD_PARTY_LICENSES.md +1809 -0
- package/dist/web/client/assets/abnfDiagram-VCTEODGH-C5wfoHm3.js +1 -0
- package/dist/web/client/assets/arc-oH91sfLl.js +1 -0
- package/dist/web/client/assets/architecture-7GRP2DOG-EGozsYEO.js +1 -0
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-z9FokbJl.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-wi0_CYHL.js +129 -0
- package/dist/web/client/assets/c4Diagram-7LVT6UL2-DV7NYc2W.js +38 -0
- package/dist/web/client/assets/channel-CiUWbHN9.js +1 -0
- package/dist/web/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/web/client/assets/chunk-4HAMMTFA-Bhsegh3F.js +62 -0
- package/dist/web/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dist/web/client/assets/chunk-75Z2AOVW-RQCckcQG.js +2 -0
- package/dist/web/client/assets/chunk-DU6HZSFF-C5USiOAy.js +125 -0
- package/dist/web/client/assets/chunk-F27PBJKO-BcNqv2x1.js +1 -0
- package/dist/web/client/assets/chunk-FOHPRMQF-CoA4358r.js +161 -0
- package/dist/web/client/assets/chunk-GMAD6QVW-Bq8JWiZT.js +72 -0
- package/dist/web/client/assets/chunk-GVQU2GXP-DbchrAeJ.js +1 -0
- package/dist/web/client/assets/chunk-IMKFNOWR-DrpvjocK.js +231 -0
- package/dist/web/client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/web/client/assets/chunk-L3NEJ4N5-DHLmTnCe.js +1 -0
- package/dist/web/client/assets/chunk-OSK3NFVY-CsRbtN9n.js +10 -0
- package/dist/web/client/assets/chunk-P2QGCYS3-aqPbxoMh.js +1 -0
- package/dist/web/client/assets/chunk-POPQ4Y6H-Dl5vw0h0.js +1 -0
- package/dist/web/client/assets/chunk-PWAF6VOD-D7OBRSdO.js +1 -0
- package/dist/web/client/assets/chunk-SHT3W25Y-CdKCIwuB.js +168 -0
- package/dist/web/client/assets/chunk-SVP7TREG-B94Nu_1-.js +88 -0
- package/dist/web/client/assets/chunk-TICWLB2K-jjRQI_hk.js +206 -0
- package/dist/web/client/assets/chunk-XXDRQBXY-azkbKE37.js +1 -0
- package/dist/web/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/web/client/assets/classDiagram-ZZMXUADV-CMODalmo.js +1 -0
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-CMODalmo.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-RbQL23qS.js +1 -0
- package/dist/web/client/assets/cynefin-OW5HDTMX--i9RDU5f.js +1 -0
- package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-cRcvyBdp.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-C9mZmAPe.js +4 -0
- package/dist/web/client/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dist/web/client/assets/diagram-S7CK7UJ4-Oj_zlLDY.js +30 -0
- package/dist/web/client/assets/diagram-UQ7AKVKN-BWKbbfcR.js +41 -0
- package/dist/web/client/assets/diagram-VSXAHHWV-C3N3f7DO.js +3 -0
- package/dist/web/client/assets/diagram-VX7I27RA-CtDKDAWe.js +24 -0
- package/dist/web/client/assets/diagram-Z3DM3KII-B8bkBRCz.js +24 -0
- package/dist/web/client/assets/dist-D0_q-A2b.js +1 -0
- package/dist/web/client/assets/ebnfDiagram-PWID7BFC-CskW-Whx.js +1 -0
- package/dist/web/client/assets/erDiagram-RLTQ6QDP-C-83cgCW.js +99 -0
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-DjVq8wKU.js +1 -0
- package/dist/web/client/assets/flowDiagram-HODETNUW-BUiCBGXt.js +1 -0
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-B2lb8lvF.js +292 -0
- package/dist/web/client/assets/gitGraph-4MIJSDKK-B40cQtBE.js +1 -0
- package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CH-7P7Di.js +106 -0
- package/dist/web/client/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/web/client/assets/index-Dsi52apB.css +1 -0
- package/dist/web/client/assets/index-FSIC94pi.js +83 -0
- package/dist/web/client/assets/info-A6RAGUB7-eCCE9D_Q.js +1 -0
- package/dist/web/client/assets/infoDiagram-27XIBGKW-DRnvqMjM.js +2 -0
- package/dist/web/client/assets/init-C-OQMol4.js +1 -0
- package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-DBA_55wp.js +70 -0
- package/dist/web/client/assets/journeyDiagram-3NMN7TZE-C-ewpNl7.js +139 -0
- package/dist/web/client/assets/kanban-definition-UXKFOSKX-B1taGsu0.js +89 -0
- package/dist/web/client/assets/katex-ZlcWpGUi.js +257 -0
- package/dist/web/client/assets/line-lZ0kyxDI.js +1 -0
- package/dist/web/client/assets/linear-DIc8FgZj.js +1 -0
- package/dist/web/client/assets/mermaid-parser.core-SXolxpXw.js +7 -0
- package/dist/web/client/assets/mermaid.core-DXgQtkNg.js +44 -0
- package/dist/web/client/assets/mindmap-definition-YA3MSWOX-DXJas9K7.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-OqVl_07o.js +1 -0
- package/dist/web/client/assets/path-fybaL0A-.js +1 -0
- package/dist/web/client/assets/pegDiagram-XKGWAZYB-CPE_zdfN.js +1 -0
- package/dist/web/client/assets/pie-WAS4IAKB-DAxnMBLe.js +1 -0
- package/dist/web/client/assets/pieDiagram-E7YTZNPT-Uwjpufxv.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-BngLtbUd.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-Bjs4yjgs.js +7 -0
- package/dist/web/client/assets/radar-RG4KPBEZ-CuCKjHM3.js +1 -0
- package/dist/web/client/assets/railroad-74A4TZTK-CnQK-Cc1.js +1 -0
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-BcW01NZG.js +1 -0
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-B7YCEDDd.js +1 -0
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-DjNZbSTZ.js +1 -0
- package/dist/web/client/assets/railroadDiagram-O6MQD6OU-BDDIPNLL.js +1 -0
- package/dist/web/client/assets/requirementDiagram-BXWQKSXE-B5Ydyxc1.js +84 -0
- package/dist/web/client/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-Bw2Qym75.js +40 -0
- package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-BZf36nO0.js +162 -0
- package/dist/web/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- package/dist/web/client/assets/src-yeptRXpt.js +1 -0
- package/dist/web/client/assets/stateDiagram-D77RDMKH-DnH6JRkp.js +1 -0
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-C7QtHeK4.js +1 -0
- package/dist/web/client/assets/swimlanes-42K2YHIH-D9PZmtZg.js +1 -0
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-CBZlPFky.js +8 -0
- package/dist/web/client/assets/timeline-definition-24CTP7MA-CrkZZBo7.js +120 -0
- package/dist/web/client/assets/treeView-Q6P3EWNA-C9zDShoC.js +1 -0
- package/dist/web/client/assets/treemap-WGGIJYW6-B-plj9yK.js +1 -0
- package/dist/web/client/assets/vennDiagram-4TSXK5OY-VeOdaphN.js +34 -0
- package/dist/web/client/assets/wardley-WFR3VGLG-Wl1P_m6L.js +1 -0
- package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-B85-R9t2.js +78 -0
- package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BrD8OW8m.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 +4 -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-EU6ATJWA.js +13 -0
- package/dist/web-fetch-U22Q7HV4.js +788 -0
- package/dist/wiki-generate-LZRLFG6I.js +623 -0
- package/dist/with-panes-X5CZOGML.js +628 -0
- package/dist/worker/entry.js +300 -93
- package/docs/README.md +58 -14
- package/docs/architecture/acp.md +5 -9
- package/docs/architecture/alcf-provider.md +0 -3
- package/docs/architecture/architecture.md +8 -10
- package/docs/architecture/artifact-placement.md +0 -3
- package/docs/architecture/artifact-versions.md +3 -6
- package/docs/architecture/capacity-and-scheduling.md +0 -3
- package/docs/architecture/context-engine.md +35 -4
- 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 +30 -0
- package/docs/architecture/middleware-and-components.md +1 -4
- package/docs/architecture/model-catalog.md +21 -4
- package/docs/architecture/observability.md +0 -3
- package/docs/architecture/pi-boundary.md +23 -8
- package/docs/architecture/prompt-envelope-and-tools.md +6 -9
- package/docs/architecture/provider-adapter-cookbook.md +1 -4
- package/docs/architecture/safety-model.md +21 -5
- package/docs/architecture/session-lifecycle.md +12 -4
- package/docs/architecture/time-conventions.md +0 -3
- package/docs/architecture/trace-store.md +28 -20
- package/docs/architecture/tui-design.md +108 -12
- package/docs/architecture/worker-context.md +104 -0
- package/docs/architecture/worker-dispatch-mechanics.md +1 -4
- package/docs/guide/authoring-plugins.md +158 -0
- package/docs/guide/built-in-agents.md +5 -8
- package/docs/guide/commands-and-modes.md +162 -61
- package/docs/guide/configuration-and-targets.md +198 -5
- package/docs/guide/configuration-reference.md +36 -38
- package/docs/guide/environment-variables.md +2 -5
- package/docs/guide/exit-codes-and-output.md +1 -4
- package/docs/guide/extensions-and-sharing.md +92 -55
- package/docs/guide/fleet-dispatch.md +31 -7
- package/docs/guide/glossary.md +1 -4
- package/docs/guide/harness-extensions.md +289 -0
- package/docs/guide/installation-and-lifecycle.md +10 -13
- package/docs/guide/interop.md +241 -0
- package/docs/guide/panes-and-files.md +3 -6
- package/docs/guide/plugins.md +77 -0
- package/docs/guide/proactive-memory.md +0 -3
- package/docs/guide/resource-library.md +109 -45
- package/docs/guide/skills-marketplace.md +34 -73
- package/docs/guide/tool-usage.md +19 -10
- 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 +14 -17
- package/docs/process/documentation-coverage.md +31 -4
- package/docs/process/documentation-guide.md +28 -27
- package/docs/process/eval-runner.md +8 -6
- package/docs/process/evals-internal.md +0 -3
- package/docs/process/evolution.md +0 -3
- package/docs/process/fleet-demo-runbook.md +0 -3
- package/docs/process/git-commit-provenance.md +0 -3
- package/docs/process/performance-methodology.md +2 -5
- package/docs/process/release-cut-checklist.md +114 -217
- package/docs/process/scientific-validation.md +23 -3
- package/evals/scalar-decision-machinery.ts +1 -1
- package/examples/extensions/README.md +67 -0
- package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
- package/examples/extensions/lab-status/extension.mjs +68 -0
- package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
- package/examples/extensions/measurements/clio-coder-extension.json +28 -0
- package/examples/extensions/measurements/summarize.cjs +23 -0
- package/library/README.md +109 -0
- package/library/_authoring/templates/agent/README.md +28 -0
- package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
- package/library/_authoring/templates/agent/plugin.json +23 -0
- package/library/_authoring/templates/fleet/README.md +29 -0
- package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
- package/library/_authoring/templates/fleet/plugin.json +23 -0
- package/library/_authoring/templates/plugin/README.md +37 -0
- package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
- package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
- package/library/_authoring/templates/plugin/plugin.json +42 -0
- package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
- package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
- package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
- package/library/_authoring/templates/prompt/README.md +28 -0
- package/library/_authoring/templates/prompt/plugin.json +23 -0
- package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
- package/library/_authoring/templates/skill/README.md +24 -0
- package/library/_authoring/templates/skill/SKILL.md +39 -0
- package/library/_authoring/templates/skill/evals.md +30 -0
- package/library/_authoring/templates/skill/plugin.json +23 -0
- package/library/agents/README.md +7 -0
- package/library/fleets/README.md +7 -0
- package/library/plugins/materio/README.md +137 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
- package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
- package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
- package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
- package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
- package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
- package/library/plugins/materio/assets/actions/add-task.md +86 -0
- package/library/plugins/materio/assets/actions/archive-task.md +84 -0
- package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
- package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
- package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
- package/library/plugins/materio/assets/actions/execute-task.md +290 -0
- package/library/plugins/materio/assets/actions/help.md +140 -0
- package/library/plugins/materio/assets/actions/identify-research.md +204 -0
- package/library/plugins/materio/assets/actions/literature-review.md +199 -0
- package/library/plugins/materio/assets/actions/pause-research.md +34 -0
- package/library/plugins/materio/assets/actions/progress.md +125 -0
- package/library/plugins/materio/assets/actions/remove-task.md +82 -0
- package/library/plugins/materio/assets/actions/resume-research.md +84 -0
- package/library/plugins/materio/assets/actions/settings.md +38 -0
- package/library/plugins/materio/assets/actions/status.md +112 -0
- package/library/plugins/materio/assets/actions/upload-data.md +123 -0
- package/library/plugins/materio/assets/actions/wtfp.md +179 -0
- package/library/plugins/materio/assets/references/research-domains.md +134 -0
- package/library/plugins/materio/assets/references/research-policy.md +77 -0
- package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
- package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
- package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
- package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
- package/library/plugins/materio/assets/scripts/research_state.py +400 -0
- package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
- package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
- package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
- package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
- package/library/plugins/materio/assets/templates/config.json +5 -0
- package/library/plugins/materio/evals/scripts.yaml +29 -0
- package/library/plugins/materio/plugin.json +530 -0
- package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
- package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
- package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
- package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
- package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
- package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
- package/library/plugins/materio/tests/test_check_physics.py +139 -0
- package/library/plugins/materio/tests/test_check_scripts.py +140 -0
- package/library/plugins/materio/tests/test_research_state.py +291 -0
- package/library/plugins/materio/tests/test_verify_citations.py +337 -0
- package/library/prompts/README.md +7 -0
- package/library/registry.yaml +921 -0
- package/library/skills/README.md +120 -0
- package/library/skills/coding/ast-grep/SKILL.md +213 -0
- package/library/skills/coding/ast-grep/evals.md +82 -0
- package/library/skills/coding/ast-grep/plugin.json +23 -0
- package/library/skills/coding/coding-standards/SKILL.md +164 -0
- package/library/skills/coding/coding-standards/evals.md +57 -0
- package/library/skills/coding/coding-standards/plugin.json +23 -0
- package/library/skills/coding/prototype/SKILL.md +151 -0
- package/library/skills/coding/prototype/evals.md +61 -0
- package/library/skills/coding/prototype/plugin.json +23 -0
- package/library/skills/coding/tdd/SKILL.md +134 -0
- package/library/skills/coding/tdd/evals.md +61 -0
- package/library/skills/coding/tdd/plugin.json +23 -0
- package/library/skills/context/context-handoff/SKILL.md +176 -0
- package/library/skills/context/context-handoff/evals.md +101 -0
- package/library/skills/context/context-handoff/plugin.json +23 -0
- package/library/skills/context/context-prime/SKILL.md +131 -0
- package/library/skills/context/context-prime/evals.md +99 -0
- package/library/skills/context/context-prime/plugin.json +23 -0
- package/library/skills/git/branch-closeout/SKILL.md +132 -0
- package/library/skills/git/branch-closeout/plugin.json +23 -0
- package/library/skills/git/file-ticket/SKILL.md +126 -0
- package/library/skills/git/file-ticket/plugin.json +23 -0
- package/library/skills/git/fix-issue/SKILL.md +136 -0
- package/library/skills/git/fix-issue/plugin.json +23 -0
- package/library/skills/git/resolve-merge-conflicts/SKILL.md +151 -0
- package/library/skills/git/resolve-merge-conflicts/evals.md +85 -0
- package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
- package/library/skills/git/ship/SKILL.md +134 -0
- package/library/skills/git/ship/plugin.json +23 -0
- package/library/skills/git/worktree-create/SKILL.md +127 -0
- package/library/skills/git/worktree-create/plugin.json +23 -0
- package/library/skills/git/worktree-merge/SKILL.md +147 -0
- package/library/skills/git/worktree-merge/plugin.json +23 -0
- package/library/skills/meta/clio-coder-dev/SKILL.md +101 -0
- package/library/skills/meta/clio-coder-dev/evals.md +46 -0
- package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
- package/library/skills/meta/clio-coder-test/SKILL.md +156 -0
- package/library/skills/meta/clio-coder-test/evals.md +62 -0
- package/library/skills/meta/clio-coder-test/plugin.json +23 -0
- package/library/skills/meta/clio-coder-test/references/test-map.md +97 -0
- package/library/skills/meta/credentials/SKILL.md +132 -0
- package/library/skills/meta/credentials/evals.md +104 -0
- package/library/skills/meta/credentials/plugin.json +23 -0
- package/library/skills/meta/find-skills/SKILL.md +85 -0
- package/library/skills/meta/find-skills/evals.md +65 -0
- package/library/skills/meta/find-skills/plugin.json +23 -0
- package/library/skills/meta/herdr/SKILL.md +133 -0
- package/library/skills/meta/herdr/evals.md +38 -0
- package/library/skills/meta/herdr/plugin.json +23 -0
- package/library/skills/meta/skill-craft/SKILL.md +139 -0
- package/library/skills/meta/skill-craft/evals.md +49 -0
- package/library/skills/meta/skill-craft/plugin.json +23 -0
- package/library/skills/planning/archify/SKILL.md +196 -0
- package/library/skills/planning/archify/plugin.json +23 -0
- package/library/skills/planning/architecture/SKILL.md +184 -0
- package/library/skills/planning/architecture/evals.md +101 -0
- package/library/skills/planning/architecture/plugin.json +23 -0
- package/library/skills/planning/backlog/SKILL.md +212 -0
- package/library/skills/planning/backlog/evals.md +185 -0
- package/library/skills/planning/backlog/plugin.json +23 -0
- package/library/skills/planning/prd/SKILL.md +129 -0
- package/library/skills/planning/prd/evals.md +103 -0
- package/library/skills/planning/prd/plugin.json +23 -0
- package/library/skills/planning/product-intent/SKILL.md +173 -0
- package/library/skills/planning/product-intent/evals.md +106 -0
- package/library/skills/planning/product-intent/plugin.json +23 -0
- package/library/skills/planning/tech-spec/SKILL.md +172 -0
- package/library/skills/planning/tech-spec/evals.md +120 -0
- package/library/skills/planning/tech-spec/plugin.json +23 -0
- package/library/skills/registry.yaml +144 -0
- package/library/skills/remote.yaml +13 -0
- package/library/skills/research/arxiv-literature/SKILL.md +168 -0
- package/library/skills/research/arxiv-literature/evals.md +108 -0
- package/library/skills/research/arxiv-literature/plugin.json +23 -0
- package/library/skills/research/experiment-protocol/SKILL.md +148 -0
- package/library/skills/research/experiment-protocol/evals.md +114 -0
- package/library/skills/research/experiment-protocol/plugin.json +23 -0
- package/library/skills/research/scientific-debugging/SKILL.md +149 -0
- package/library/skills/research/scientific-debugging/evals.md +156 -0
- package/library/skills/research/scientific-debugging/plugin.json +23 -0
- package/library/skills/research/scientific-modernization/SKILL.md +170 -0
- package/library/skills/research/scientific-modernization/evals.md +111 -0
- package/library/skills/research/scientific-modernization/plugin.json +23 -0
- package/library/skills/skill-marketplace.json +507 -0
- package/library/skills/workflow/cut-it/SKILL.md +153 -0
- package/library/skills/workflow/cut-it/evals.md +143 -0
- package/library/skills/workflow/cut-it/plugin.json +23 -0
- package/library/skills/workflow/design-council/SKILL.md +233 -0
- package/library/skills/workflow/design-council/evals.md +258 -0
- package/library/skills/workflow/design-council/plugin.json +23 -0
- package/library/skills/workflow/grill-me/SKILL.md +267 -0
- package/library/skills/workflow/grill-me/evals.md +231 -0
- package/library/skills/workflow/grill-me/plugin.json +23 -0
- package/library/skills/workflow/workflow-distiller/SKILL.md +204 -0
- package/library/skills/workflow/workflow-distiller/evals.md +233 -0
- package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
- package/package.json +23 -14
- package/src/cli/agents.ts +1 -1
- package/src/cli/config-inspect.ts +1 -1
- package/src/cli/configure.ts +2 -2
- package/src/cli/docs.ts +65 -328
- package/src/cli/eval.ts +40 -6
- package/src/cli/extensions.ts +74 -8
- package/src/cli/fleet-preflight.ts +2 -0
- package/src/cli/fleet.ts +2 -0
- package/src/cli/index.ts +4 -4
- package/src/cli/interop-inspect.ts +61 -33
- package/src/cli/interop.ts +79 -9
- package/src/cli/library-import.ts +139 -0
- package/src/cli/library.ts +418 -120
- package/src/cli/run.ts +26 -9
- package/src/cli/skills-eval.ts +43 -6
- package/src/cli/skills-inventory.ts +6 -2
- package/src/cli/skills.ts +44 -491
- package/src/cli/trace.ts +4 -65
- package/src/cli/uninstall.ts +26 -0
- package/src/cli/usage.ts +3 -0
- package/src/cli/web.ts +79 -0
- package/src/core/bus-events.ts +8 -4
- package/src/core/config.ts +71 -0
- package/src/core/defaults.ts +1 -1
- package/src/core/domain-loader.ts +37 -28
- package/src/core/recent-models.ts +2 -2
- package/src/core/session-routing.ts +3 -3
- package/src/core/state-file-lock.ts +1 -1
- package/src/core/termination.ts +13 -9
- package/src/core/tool-names.ts +5 -0
- package/src/domains/agents/contract.ts +1 -1
- package/src/domains/agents/extension.ts +53 -9
- package/src/domains/agents/fleet-commands.ts +92 -1
- package/src/domains/agents/fleet-contract.ts +87 -19
- package/src/domains/agents/recipe.ts +5 -4
- package/src/domains/agents/registry.ts +80 -24
- package/src/domains/config/extension.ts +5 -4
- package/src/domains/config/keybindings.ts +155 -95
- package/src/domains/context/worker/contract.ts +91 -0
- package/src/domains/context/worker/pressure.ts +120 -0
- package/src/domains/context/worker/recall.ts +62 -0
- package/src/domains/context/worker/select.ts +164 -0
- package/src/domains/context/worker/snapshot.ts +35 -0
- package/src/domains/context/worker/store.ts +16 -0
- package/src/domains/context/working-set/replay/synthetic.ts +2 -1
- package/src/domains/dispatch/active-route-planner.ts +2 -0
- package/src/domains/dispatch/backoff.ts +1 -0
- package/src/domains/dispatch/code-step.ts +12 -2
- package/src/domains/dispatch/contract.ts +3 -0
- package/src/domains/dispatch/execution-plan.ts +2 -0
- package/src/domains/dispatch/extension.ts +184 -39
- package/src/domains/dispatch/fleet-plan.ts +10 -0
- package/src/domains/dispatch/fleet-run.ts +1 -0
- package/src/domains/dispatch/index.ts +1 -0
- package/src/domains/dispatch/orphan-recovery.ts +2 -0
- package/src/domains/dispatch/receipt-integrity.ts +7 -0
- package/src/domains/dispatch/state.ts +2 -2
- package/src/domains/dispatch/types.ts +7 -0
- package/src/domains/dispatch/validation.ts +12 -0
- package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
- package/src/domains/eval/metrics/tracked.ts +22 -2
- package/src/domains/evidence/failure-attribution.ts +1 -0
- package/src/domains/evidence/trust-status.ts +22 -3
- package/src/domains/extensions/command-schema.ts +145 -0
- package/src/domains/extensions/command-tools.ts +15 -0
- package/src/domains/extensions/compatibility.ts +7 -0
- package/src/domains/extensions/contract.ts +0 -4
- package/src/domains/extensions/discovery.ts +69 -205
- package/src/domains/extensions/extension.ts +0 -4
- package/src/domains/extensions/index.ts +1 -5
- package/src/domains/extensions/manager.ts +1 -6
- package/src/domains/extensions/operator-commands.ts +29 -0
- package/src/domains/extensions/operator-runtime.ts +485 -0
- package/src/domains/extensions/public-api.ts +53 -0
- package/src/domains/extensions/runtime-child.mjs +114 -0
- package/src/domains/extensions/runtime-process.ts +306 -0
- package/src/domains/extensions/runtime-schema.ts +146 -0
- package/src/domains/extensions/snapshot-access.ts +21 -0
- package/src/domains/extensions/snapshot.ts +4 -32
- package/src/domains/extensions/state.ts +5 -83
- package/src/domains/extensions/types.ts +33 -34
- package/src/domains/interop/adopt.ts +546 -0
- package/src/domains/interop/detect.ts +50 -12
- package/src/domains/interop/foreign.ts +554 -0
- package/src/domains/interop/import.ts +277 -0
- package/src/domains/interop/index.ts +24 -0
- package/src/domains/interop/install.ts +6 -0
- package/src/domains/interop/inventory.ts +351 -0
- package/src/domains/interop/projection.ts +360 -0
- package/src/domains/interop/registry.ts +106 -3
- package/src/domains/interop/types.ts +51 -0
- package/src/domains/lifecycle/migrations/index.ts +0 -2
- package/src/domains/lifecycle/naming-resources.ts +1 -1
- package/src/domains/middleware/hooks.ts +2 -2
- package/src/domains/middleware/marketplace-offer.ts +1 -1
- package/src/domains/mux/contract.ts +1 -1
- package/src/domains/observability/background-memory-usage.ts +3 -0
- package/src/domains/observability/compaction-usage.ts +2 -0
- package/src/domains/observability/cost.ts +5 -0
- package/src/domains/observability/extension.ts +1 -0
- package/src/domains/observability/out-of-turn-usage.ts +2 -0
- package/src/domains/observability/trace-store.ts +65 -5
- package/src/domains/plugins/catalog.ts +204 -0
- package/src/domains/plugins/contract.ts +24 -0
- package/src/domains/plugins/discovery.ts +316 -0
- package/src/domains/plugins/extension.ts +40 -0
- package/src/domains/plugins/index.ts +77 -0
- package/src/domains/plugins/integrity.ts +6 -0
- package/src/domains/plugins/manifest.ts +3 -0
- package/src/domains/plugins/resources.ts +102 -0
- package/src/domains/plugins/state.ts +753 -0
- package/src/domains/plugins/types.ts +217 -0
- package/src/domains/prompts/extension.ts +4 -10
- package/src/domains/prompts/fragments/operating/skills.md +10 -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 +1 -0
- package/src/domains/providers/plugins.ts +3 -13
- package/src/domains/providers/runtimes/common/local-synth.ts +4 -0
- package/src/domains/providers/types/target-descriptor.ts +17 -0
- package/src/domains/resources/common-loader.ts +9 -6
- package/src/domains/resources/index.ts +67 -0
- package/src/domains/resources/library-actions.ts +836 -0
- package/src/domains/resources/library-evals.ts +38 -0
- package/src/domains/resources/library-inventory.ts +1048 -0
- package/src/domains/resources/library-types.ts +50 -0
- package/src/domains/resources/library-validation.ts +634 -0
- package/src/domains/resources/library.ts +437 -156
- package/src/domains/resources/package-references.ts +66 -0
- package/src/domains/resources/prompts/loader.ts +75 -41
- package/src/domains/resources/skills/install.ts +2 -2
- package/src/domains/resources/skills/loader.ts +77 -22
- package/src/domains/resources/skills/marketplace.ts +48 -57
- package/src/domains/resources/skills/promotion.ts +2 -2
- package/src/domains/resources/skills/provenance-pin.ts +17 -4
- package/src/domains/safety/action-classifier.ts +2 -2
- package/src/domains/safety/default-path-policy.ts +3 -1
- package/src/domains/safety/policy-engine.ts +1 -1
- package/src/domains/safety/protected-artifacts.ts +21 -5
- package/src/domains/safety/skill-authority.ts +5 -2
- package/src/domains/session/compaction/compact.ts +4 -1
- package/src/domains/session/entries.ts +1 -0
- package/src/domains/session/usage.ts +6 -7
- package/src/domains/share/archive.ts +1 -1
- package/src/engine/acp/server.ts +11 -0
- package/src/engine/ai.ts +2 -0
- package/src/engine/apis/openai-completions.ts +61 -6
- package/src/engine/notices/pi-tui-LICENSE +21 -0
- package/src/engine/prewarm.ts +232 -0
- package/src/engine/provider-diagnostics.ts +6 -1
- package/src/engine/tui.ts +3 -0
- package/src/engine/worker-runtime.ts +58 -14
- package/src/engine/worker-tools.ts +5 -0
- package/src/entry/orchestrator.ts +46 -21
- package/src/entry/plugin-reload.ts +18 -0
- package/src/interactive/application-controller.ts +67 -21
- package/src/interactive/chat-loop-messages.ts +3 -0
- package/src/interactive/chat-loop.ts +32 -11
- package/src/interactive/chat-panel.ts +5 -1
- package/src/interactive/clio-editor.ts +53 -21
- package/src/interactive/command-output.ts +56 -1
- package/src/interactive/editor-submit.ts +65 -28
- package/src/interactive/fleet-run-preview.ts +2 -0
- package/src/interactive/follow-up-queue-panel.ts +3 -3
- package/src/interactive/footer/dashboard.ts +4 -1
- package/src/interactive/footer/notifications.ts +2 -2
- package/src/interactive/footer/widgets.ts +2 -2
- package/src/interactive/interactive-application.ts +209 -21
- package/src/interactive/interactive-input-runtime.ts +254 -7
- package/src/interactive/interactive-presentation.ts +41 -12
- package/src/interactive/interactive-slash-runtime.ts +37 -8
- package/src/interactive/keybinding-manager.ts +156 -79
- package/src/interactive/keyboard-owner.ts +37 -0
- package/src/interactive/leader-key.ts +49 -102
- package/src/interactive/leader-menu.ts +45 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
- package/src/interactive/overlay-frame.ts +15 -0
- package/src/interactive/overlay-key-routing.ts +46 -47
- package/src/interactive/overlay-lifecycle.ts +30 -15
- package/src/interactive/overlay-resource-openers.ts +56 -46
- package/src/interactive/overlays/ask-user.ts +630 -556
- package/src/interactive/overlays/extension-panel.ts +70 -0
- package/src/interactive/overlays/extensions.ts +28 -5
- package/src/interactive/overlays/fleet-run-approval.ts +7 -3
- package/src/interactive/overlays/help-reference.ts +89 -40
- package/src/interactive/overlays/interop.ts +122 -3
- package/src/interactive/overlays/keybinding-detail.ts +2 -2
- package/src/interactive/overlays/library-lifecycle.ts +90 -0
- package/src/interactive/overlays/library-model.ts +574 -0
- package/src/interactive/overlays/library-review.ts +557 -0
- package/src/interactive/overlays/library-tabs.ts +3 -15
- package/src/interactive/overlays/library.ts +602 -0
- package/src/interactive/overlays/list-overlay.ts +218 -39
- package/src/interactive/overlays/model-selector.ts +28 -25
- package/src/interactive/overlays/session-selector.ts +9 -3
- package/src/interactive/overlays/settings.ts +25 -18
- package/src/interactive/overlays/tree-selector.ts +16 -11
- package/src/interactive/permission-hint.ts +13 -0
- package/src/interactive/permission-overlay.ts +77 -28
- package/src/interactive/prewarm.ts +11 -197
- package/src/interactive/prompt-source-label.ts +21 -0
- package/src/interactive/renderers/reference-card.ts +35 -0
- package/src/interactive/renderers/worker-entry.ts +35 -3
- package/src/interactive/session-usage-reseed.ts +2 -0
- package/src/interactive/side-question.ts +2 -0
- package/src/interactive/slash-autocomplete.ts +99 -1
- package/src/interactive/slash-commands.ts +390 -67
- package/src/interactive/slash-spec.ts +0 -1
- package/src/interactive/terminal-lease.ts +44 -12
- package/src/interactive/turn-context.ts +1 -0
- package/src/interactive/turn-persistence.ts +3 -0
- package/src/interactive/turn-prewarm.ts +126 -19
- package/src/interactive/turn-queues.ts +8 -7
- package/src/interactive/turn-runtime.ts +15 -1
- package/src/interactive/view/view-overlay.ts +19 -14
- package/src/interactive/welcome-dashboard.ts +525 -408
- package/src/tools/bootstrap.ts +8 -0
- package/src/tools/builtin-tool-catalog.ts +15 -6
- package/src/tools/context/index.ts +58 -5
- package/src/tools/context/library.ts +465 -0
- package/src/tools/context/surface.ts +20 -6
- package/src/tools/core-bootstrap.ts +3 -0
- package/src/tools/dispatch-admission.ts +24 -1
- package/src/tools/dispatch-arguments.ts +8 -0
- package/src/tools/dispatch-plan.ts +32 -0
- package/src/tools/dispatch-schema.ts +31 -1
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/harness-extensions.ts +169 -0
- package/src/tools/observation.ts +4 -0
- package/src/tools/policy.ts +7 -1
- package/src/tools/registry.ts +31 -3
- package/src/tools/worker-evidence.ts +5 -0
- package/src/worker/context-seed.ts +192 -0
- package/src/worker/entry.ts +1 -0
- package/src/worker/spec-contract.ts +35 -1
- package/dist/acp-UVEVWSDL.js +0 -130
- package/dist/agents-VWY37DTK.js +0 -148
- package/dist/auth-PCV2XQDV.js +0 -551
- package/dist/builtins-PD652MTK.js +0 -22
- package/dist/chunk-22PQ4TX4.js +0 -360
- package/dist/chunk-24T2YZ7A.js +0 -22648
- package/dist/chunk-2AKYFREM.js +0 -1008
- package/dist/chunk-2QPI3TR3.js +0 -162
- package/dist/chunk-3BJGMT2D.js +0 -324
- package/dist/chunk-3HQVBIKD.js +0 -308
- package/dist/chunk-3JLFK5MW.js +0 -193
- package/dist/chunk-3O2ZAUGQ.js +0 -283
- package/dist/chunk-3QKXHCGS.js +0 -59
- package/dist/chunk-3T4DXWP6.js +0 -668
- package/dist/chunk-3UW3KU4A.js +0 -21
- package/dist/chunk-3WBALRQH.js +0 -5076
- package/dist/chunk-4DU2TVI4.js +0 -108
- package/dist/chunk-4U4TKZFR.js +0 -5052
- package/dist/chunk-4VMV6OS6.js +0 -101
- package/dist/chunk-536HXRFE.js +0 -1257
- package/dist/chunk-5CMARGPF.js +0 -477
- package/dist/chunk-5CY4Q6QI.js +0 -141
- package/dist/chunk-5QRX7SLS.js +0 -1018
- package/dist/chunk-5VTJP36Q.js +0 -36
- package/dist/chunk-5ZSZEYJK.js +0 -119
- package/dist/chunk-6HAO6X5B.js +0 -197
- package/dist/chunk-6OII3LOK.js +0 -404
- package/dist/chunk-6RYDAVQT.js +0 -4338
- package/dist/chunk-6VRRJT7L.js +0 -146
- package/dist/chunk-6YA46L5A.js +0 -386
- package/dist/chunk-77CZRFTE.js +0 -634
- package/dist/chunk-7JSSKXG2.js +0 -1215
- package/dist/chunk-7WUZEB2M.js +0 -165
- package/dist/chunk-7YJWEF2L.js +0 -974
- package/dist/chunk-ACCKVSHU.js +0 -44
- package/dist/chunk-B3MOMLJ4.js +0 -433
- package/dist/chunk-BBV5TKE6.js +0 -35
- package/dist/chunk-BLTEAUCB.js +0 -668
- package/dist/chunk-BS4GAMUB.js +0 -233
- package/dist/chunk-BT7HGDOX.js +0 -3151
- package/dist/chunk-CBSKDFWL.js +0 -101
- package/dist/chunk-CXQ37WJH.js +0 -45
- package/dist/chunk-DXLUVUD4.js +0 -1490
- package/dist/chunk-DZK63TZJ.js +0 -1334
- package/dist/chunk-E7RF4KBO.js +0 -266
- package/dist/chunk-ECOMVOHP.js +0 -139
- package/dist/chunk-EHOSNVVM.js +0 -59
- package/dist/chunk-F5Z7EWMN.js +0 -4484
- package/dist/chunk-FQOOGXBH.js +0 -579
- package/dist/chunk-GLYBJ4RQ.js +0 -396
- package/dist/chunk-HHVJNVUJ.js +0 -179
- package/dist/chunk-HL26ADLH.js +0 -77
- package/dist/chunk-HPTJF6DG.js +0 -2465
- package/dist/chunk-HXHFDHB6.js +0 -962
- package/dist/chunk-HZ2T2YED.js +0 -1687
- package/dist/chunk-HZFBVU5X.js +0 -666
- package/dist/chunk-I2K2NCZQ.js +0 -659
- package/dist/chunk-IGLVVNEG.js +0 -402
- package/dist/chunk-IKRWLEDA.js +0 -1567
- package/dist/chunk-J2FYEQ5L.js +0 -33
- package/dist/chunk-JMPL7NUB.js +0 -108
- package/dist/chunk-K2HL3GBL.js +0 -998
- package/dist/chunk-KAFMW7WM.js +0 -386
- package/dist/chunk-KTFSFCVN.js +0 -46
- package/dist/chunk-LIN2K3EL.js +0 -66
- package/dist/chunk-LUL5Z66S.js +0 -221
- package/dist/chunk-LVFANMOH.js +0 -466
- package/dist/chunk-LY4N4TTL.js +0 -117
- package/dist/chunk-LZBMXNLP.js +0 -1196
- package/dist/chunk-M6TAYK66.js +0 -807
- package/dist/chunk-N2OKBREN.js +0 -243
- package/dist/chunk-NC4KV7EL.js +0 -39
- package/dist/chunk-NF3BK5WR.js +0 -42
- package/dist/chunk-NNWJYUNO.js +0 -573
- package/dist/chunk-NTK3WTHM.js +0 -141
- package/dist/chunk-ODUTYZIU.js +0 -688
- package/dist/chunk-OQM5IVJY.js +0 -1377
- package/dist/chunk-P5JMBPDJ.js +0 -7192
- package/dist/chunk-P5SC4DLJ.js +0 -47
- package/dist/chunk-P6M7RKMI.js +0 -97
- package/dist/chunk-PWWSIB2A.js +0 -52
- package/dist/chunk-PZN2LQY6.js +0 -674
- package/dist/chunk-Q7NNUHQV.js +0 -705
- package/dist/chunk-QCOV5DFY.js +0 -911
- package/dist/chunk-QNWRHOMF.js +0 -692
- package/dist/chunk-QRFXEO6Y.js +0 -17
- package/dist/chunk-QXFBABFJ.js +0 -380
- package/dist/chunk-RGZNQ5CT.js +0 -657
- package/dist/chunk-SRZOW5L2.js +0 -1865
- package/dist/chunk-SXQKNKRA.js +0 -223
- package/dist/chunk-T334FW2H.js +0 -362
- package/dist/chunk-T52TPHYC.js +0 -318
- package/dist/chunk-TJFDL26W.js +0 -658
- package/dist/chunk-TN5FW4XY.js +0 -172
- package/dist/chunk-U7H5WRG5.js +0 -123
- package/dist/chunk-UFYNOQK4.js +0 -302
- package/dist/chunk-URBGEOH3.js +0 -32
- package/dist/chunk-USZA7GWL.js +0 -341
- package/dist/chunk-UUQ5G6EZ.js +0 -697
- package/dist/chunk-VAHLPXPY.js +0 -399
- package/dist/chunk-VANN3GDP.js +0 -2488
- package/dist/chunk-VHMX7SXF.js +0 -1289
- package/dist/chunk-WJIMKGD6.js +0 -132
- package/dist/chunk-WKUYQBCG.js +0 -795
- package/dist/chunk-WNGF5AJX.js +0 -1911
- package/dist/chunk-WV6TDAPN.js +0 -3627
- package/dist/chunk-X3BI7HTV.js +0 -562
- package/dist/chunk-XWMSPJYN.js +0 -149
- package/dist/chunk-YPRSNUTC.js +0 -395
- package/dist/chunk-ZS43Y2FT.js +0 -438
- package/dist/clio-QQCMTUZE.js +0 -26
- package/dist/code-nav-GUPM6766.js +0 -686
- package/dist/components-TNIKXCBH.js +0 -674
- package/dist/config-IIM7YOD3.js +0 -621
- package/dist/configure-4ZM5HWJX.js +0 -73
- package/dist/context-44BZLJ3J.js +0 -344
- package/dist/context-AIDVQKMW.js +0 -278
- package/dist/context-OL5P3HEP.js +0 -1031
- package/dist/context-clear-OQV76MYP.js +0 -184
- package/dist/context-index-HP2JFUWA.js +0 -120
- package/dist/context-map-INTXD54D.js +0 -555
- package/dist/context-working-set-ZUW3EGLS.js +0 -1556
- package/dist/detail-UXPWRANG.js +0 -115
- package/dist/dispatch-runner-P3ZW6G77.js +0 -2438
- package/dist/docs-BL7ROUFN.js +0 -292
- package/dist/doctor-JJVGPZWT.js +0 -797
- package/dist/eval-V2RTN3UH.js +0 -4972
- package/dist/eval-inventory-QOYZERXJ.js +0 -315
- package/dist/evidence-35PYWGSO.js +0 -225
- package/dist/evidence-CIGGKI6J.js +0 -383
- package/dist/evolve-33SM3NJP.js +0 -609
- package/dist/extensions-YVRHX6ZI.js +0 -229
- package/dist/fleet-LFO7SIPC.js +0 -908
- package/dist/fleet-commands-RLK72GU3.js +0 -75
- package/dist/fleet-decisions-3SBSCTCW.js +0 -159
- package/dist/fleet-graph-JZIBCGMW.js +0 -134
- package/dist/fleet-inspect-2L5YGGZJ.js +0 -469
- package/dist/fleet-preflight-QRSHIIDE.js +0 -22
- package/dist/fleet-validate-LIAVKDUU.js +0 -92
- package/dist/fleet-verify-JIK3OQZR.js +0 -202
- package/dist/fleet-view-IWHYGQKK.js +0 -118
- package/dist/init-NJEDOTQW.js +0 -321
- package/dist/interop-RVCAYECG.js +0 -115
- package/dist/inventory-74UL7UHU.js +0 -118
- package/dist/library-CTKZA7K3.js +0 -226
- package/dist/memory-I76I5VUH.js +0 -512
- package/dist/models-D4YDIQZQ.js +0 -289
- package/dist/monitor-NKVD55HX.js +0 -775
- package/dist/orchestrator-I6OATVPK.js +0 -39518
- package/dist/panes-7BTYH3XQ.js +0 -103
- package/dist/panes-WPOMEMRH.js +0 -74
- package/dist/paths-J3KN7UAO.js +0 -67
- package/dist/preload-EJAWJEIO.js +0 -116
- package/dist/reset-4XMQKDNZ.js +0 -345
- package/dist/resources-TVYVXK3Q.js +0 -125
- package/dist/run-OWQNNSJU.js +0 -872
- package/dist/share-NPZZMUXG.js +0 -290
- package/dist/skills-OXFEAWMT.js +0 -510
- package/dist/skills-eval-J5TCKSJA.js +0 -1034
- package/dist/skills-inventory-7II4DM57.js +0 -133
- package/dist/slash-commands-MDSDSWYF.js +0 -92
- package/dist/steer-S7D7IKPU.js +0 -77
- package/dist/support-5VAEC32W.js +0 -38
- package/dist/targets-KILZEOCE.js +0 -1109
- package/dist/tasks-R6P6OV22.js +0 -36
- package/dist/terminal-lease-LZCG2KN3.js +0 -405
- package/dist/tools-6OCQ6SVB.js +0 -28
- package/dist/trace-JHLXWUMN.js +0 -572
- package/dist/tui-primitives-RCY2HN7G.js +0 -17
- package/dist/uninstall-FXYMFFRT.js +0 -407
- package/dist/upgrade-D2OZH6IQ.js +0 -307
- package/dist/usage-PIASNUS4.js +0 -1052
- package/dist/verifiers-LTHUY2PX.js +0 -630
- package/dist/verify-HYF7KBVE.js +0 -30
- package/dist/web-fetch-MQN4FH3X.js +0 -788
- package/dist/wiki-generate-RK7JQ5NP.js +0 -615
- package/dist/with-panes-OFTNAR4Y.js +0 -628
- package/skills/README.md +0 -418
- package/skills/coding/ast-grep/SKILL.md +0 -213
- package/skills/coding/ast-grep/evals.md +0 -82
- package/skills/coding/coding-standards/SKILL.md +0 -164
- package/skills/coding/coding-standards/evals.md +0 -57
- package/skills/coding/prototype/SKILL.md +0 -151
- package/skills/coding/prototype/evals.md +0 -61
- package/skills/coding/tdd/SKILL.md +0 -134
- package/skills/coding/tdd/evals.md +0 -61
- package/skills/context/context-handoff/SKILL.md +0 -176
- package/skills/context/context-handoff/evals.md +0 -101
- package/skills/context/context-prime/SKILL.md +0 -131
- package/skills/context/context-prime/evals.md +0 -99
- package/skills/git/branch-closeout/SKILL.md +0 -132
- package/skills/git/file-ticket/SKILL.md +0 -126
- package/skills/git/fix-issue/SKILL.md +0 -136
- package/skills/git/resolve-merge-conflicts/SKILL.md +0 -151
- package/skills/git/resolve-merge-conflicts/evals.md +0 -85
- package/skills/git/ship/SKILL.md +0 -134
- package/skills/git/worktree-create/SKILL.md +0 -127
- package/skills/git/worktree-merge/SKILL.md +0 -147
- package/skills/meta/clio-coder-dev/SKILL.md +0 -101
- package/skills/meta/clio-coder-dev/evals.md +0 -46
- package/skills/meta/clio-coder-test/SKILL.md +0 -146
- package/skills/meta/clio-coder-test/evals.md +0 -48
- package/skills/meta/clio-coder-test/references/test-map.md +0 -96
- package/skills/meta/credentials/SKILL.md +0 -132
- package/skills/meta/credentials/evals.md +0 -104
- package/skills/meta/find-skills/SKILL.md +0 -78
- package/skills/meta/find-skills/evals.md +0 -47
- package/skills/meta/herdr/SKILL.md +0 -133
- package/skills/meta/herdr/evals.md +0 -38
- package/skills/meta/skill-craft/SKILL.md +0 -125
- package/skills/meta/skill-craft/evals.md +0 -41
- package/skills/planning/archify/SKILL.md +0 -196
- package/skills/planning/architecture/SKILL.md +0 -184
- package/skills/planning/architecture/evals.md +0 -101
- package/skills/planning/backlog/SKILL.md +0 -212
- package/skills/planning/backlog/evals.md +0 -185
- package/skills/planning/prd/SKILL.md +0 -129
- package/skills/planning/prd/evals.md +0 -103
- package/skills/planning/product-intent/SKILL.md +0 -173
- package/skills/planning/product-intent/evals.md +0 -106
- package/skills/planning/tech-spec/SKILL.md +0 -172
- package/skills/planning/tech-spec/evals.md +0 -120
- package/skills/registry.yaml +0 -144
- package/skills/remote.yaml +0 -13
- package/skills/research/arxiv-literature/SKILL.md +0 -168
- package/skills/research/arxiv-literature/evals.md +0 -108
- package/skills/research/experiment-protocol/SKILL.md +0 -148
- package/skills/research/experiment-protocol/evals.md +0 -114
- package/skills/research/scientific-debugging/SKILL.md +0 -149
- package/skills/research/scientific-debugging/evals.md +0 -156
- package/skills/research/scientific-modernization/SKILL.md +0 -170
- package/skills/research/scientific-modernization/evals.md +0 -111
- package/skills/skill-marketplace.json +0 -507
- package/skills/workflow/cut-it/SKILL.md +0 -153
- package/skills/workflow/cut-it/evals.md +0 -143
- package/skills/workflow/design-council/SKILL.md +0 -233
- package/skills/workflow/design-council/evals.md +0 -258
- package/skills/workflow/grill-me/SKILL.md +0 -267
- package/skills/workflow/grill-me/evals.md +0 -231
- package/skills/workflow/workflow-distiller/SKILL.md +0 -201
- package/skills/workflow/workflow-distiller/evals.md +0 -225
- package/src/domains/extensions/resource-path.ts +0 -27
- package/src/domains/extensions/resources.ts +0 -37
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
- package/src/interactive/overlays/agents.ts +0 -70
- package/src/interactive/overlays/library-install-confirm.ts +0 -152
- package/src/interactive/overlays/prompts.ts +0 -89
- package/src/interactive/overlays/skills-hub.ts +0 -615
- /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
- /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
- /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
- /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
- /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
- /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
- /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
- /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
- /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
- /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
- /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
- /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
- /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
- /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
- /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
- /package/{skills → library/skills}/git/ship/evals.md +0 -0
- /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
- /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
- /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
- /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
- /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
- /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
- /package/{skills → library/skills}/planning/archify/evals.md +0 -0
|
@@ -0,0 +1,616 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
verify_citations; resolve the citations in Materio research output against a
|
|
4
|
+
bibliographic registry (Crossref) to surface unresolved identities and
|
|
5
|
+
metadata conflicts for researcher review.
|
|
6
|
+
|
|
7
|
+
It reads LITERATURE.md and/or .bib files, extracts citation candidates
|
|
8
|
+
(BibTeX entries, quoted paper titles from the "Key Papers" table the
|
|
9
|
+
literature agent writes, and quoted titles on other table rows that carry a
|
|
10
|
+
4-digit year), then queries Crossref by DOI or by title and classifies each
|
|
11
|
+
candidate:
|
|
12
|
+
|
|
13
|
+
VERIFIED matched a real published work (title similar, year consistent)
|
|
14
|
+
MISMATCH a work was found but the metadata disagrees (wrong year, or
|
|
15
|
+
only a weak title match); requires source inspection
|
|
16
|
+
NOT_FOUND no plausible match in Crossref; inspect the source manually
|
|
17
|
+
UNVERIFIABLE no extractable title (e.g. a placeholder like "[ML disc. 2024]")
|
|
18
|
+
|
|
19
|
+
Design notes:
|
|
20
|
+
* No DOIs are assumed; the literature agent usually emits none, so title+
|
|
21
|
+
year resolution is the primary path.
|
|
22
|
+
* Network is OPTIONAL. `--offline` (or a failed request) falls back to
|
|
23
|
+
structural checks + placeholder detection so the tool still runs in CI or
|
|
24
|
+
air-gapped sessions; unresolved entries become UNVERIFIABLE (offline).
|
|
25
|
+
* Crossref is free and needs no key; we identify via a descriptive
|
|
26
|
+
User-Agent. HTTP 429 / 5xx responses are retried once after a short
|
|
27
|
+
backoff before an entry is reported UNVERIFIABLE.
|
|
28
|
+
|
|
29
|
+
Exit status: 1 for NOT_FOUND/MISMATCH findings; 2 for incomplete input coverage.
|
|
30
|
+
Zero deps (Python stdlib only).
|
|
31
|
+
|
|
32
|
+
Usage (invoked from a project root, where .claude/ and .research/ live):
|
|
33
|
+
python3 assets/scripts/verify_citations.py .research/LITERATURE.md
|
|
34
|
+
python3 assets/scripts/verify_citations.py --offline path.bib
|
|
35
|
+
python3 assets/scripts/verify_citations.py --json task-01.bib
|
|
36
|
+
"""
|
|
37
|
+
import argparse
|
|
38
|
+
import difflib
|
|
39
|
+
import json
|
|
40
|
+
import re
|
|
41
|
+
import sys
|
|
42
|
+
import time
|
|
43
|
+
import urllib.error
|
|
44
|
+
import urllib.parse
|
|
45
|
+
import urllib.request
|
|
46
|
+
|
|
47
|
+
CROSSREF = "https://api.crossref.org/works"
|
|
48
|
+
UA = "materio-verify-citations/0.1 (Materio research assistant; citation verifier)"
|
|
49
|
+
TITLE_MATCH = 0.75 # >= this title similarity => same paper
|
|
50
|
+
TITLE_WEAK = 0.50 # [WEAK, MATCH) => MISMATCH (found but doubtful)
|
|
51
|
+
REQ_TIMEOUT = 15
|
|
52
|
+
REQ_PAUSE = 0.2 # polite spacing between Crossref calls
|
|
53
|
+
RETRY_BACKOFF = 2.0 # seconds before the single retry on HTTP 429 / 5xx
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# ---- extraction -----------------------------------------------------------
|
|
57
|
+
|
|
58
|
+
class Cite:
|
|
59
|
+
__slots__ = ("title", "year", "authors", "doi", "source", "raw")
|
|
60
|
+
|
|
61
|
+
def __init__(self, title=None, year=None, authors=None, doi=None,
|
|
62
|
+
source="", raw=""):
|
|
63
|
+
self.title = title
|
|
64
|
+
self.year = year
|
|
65
|
+
self.authors = authors
|
|
66
|
+
self.doi = doi
|
|
67
|
+
self.source = source # where in the file it came from
|
|
68
|
+
self.raw = raw # original text snippet
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _norm(s):
|
|
72
|
+
"""Lowercase, strip non-alphanumerics to single spaces; for comparison."""
|
|
73
|
+
return re.sub(r"[^a-z0-9]+", " ", (s or "").lower()).strip()
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def similarity(a, b):
|
|
77
|
+
return difflib.SequenceMatcher(None, _norm(a), _norm(b)).ratio()
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
# Parse BibTeX groups without importing or executing anything. Nested title
|
|
81
|
+
# braces and one-line entries are common in real researcher bibliographies.
|
|
82
|
+
def _group(text, start):
|
|
83
|
+
opening = text[start]
|
|
84
|
+
closing = '}' if opening == '{' else ')' if opening == '(' else '"'
|
|
85
|
+
depth, index, quoted = 1, start + 1, False
|
|
86
|
+
while index < len(text):
|
|
87
|
+
char = text[index]
|
|
88
|
+
if char == "\\":
|
|
89
|
+
index += 2
|
|
90
|
+
continue
|
|
91
|
+
if opening == '"':
|
|
92
|
+
if char == '"':
|
|
93
|
+
return text[start + 1:index], index + 1
|
|
94
|
+
else:
|
|
95
|
+
if char == '"':
|
|
96
|
+
quoted = not quoted
|
|
97
|
+
if not quoted:
|
|
98
|
+
if char == opening:
|
|
99
|
+
depth += 1
|
|
100
|
+
elif char == closing:
|
|
101
|
+
depth -= 1
|
|
102
|
+
if depth == 0:
|
|
103
|
+
return text[start + 1:index], index + 1
|
|
104
|
+
index += 1
|
|
105
|
+
raise ValueError("unterminated BibTeX value")
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _bibtex_entries(text):
|
|
109
|
+
index = 0
|
|
110
|
+
while index < len(text):
|
|
111
|
+
match = re.search(r"@(\w+)\s*([{(])", text[index:])
|
|
112
|
+
if not match:
|
|
113
|
+
return
|
|
114
|
+
start = index + match.start()
|
|
115
|
+
group_start = index + match.end() - 1
|
|
116
|
+
try:
|
|
117
|
+
body, end = _group(text, group_start)
|
|
118
|
+
except ValueError:
|
|
119
|
+
return
|
|
120
|
+
index = end
|
|
121
|
+
if match.group(1).lower() not in {"comment", "preamble", "string"}:
|
|
122
|
+
yield body, text[start:end]
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def _bibtex_fields(body):
|
|
126
|
+
index = body.find(',') + 1
|
|
127
|
+
fields = {}
|
|
128
|
+
while index > 0 and index < len(body):
|
|
129
|
+
match = re.match(r"\s*,?\s*([\w-]+)\s*=\s*", body[index:])
|
|
130
|
+
if not match:
|
|
131
|
+
break
|
|
132
|
+
name = match.group(1).lower()
|
|
133
|
+
index += match.end()
|
|
134
|
+
if index >= len(body):
|
|
135
|
+
break
|
|
136
|
+
if body[index] in '{"':
|
|
137
|
+
try:
|
|
138
|
+
value, index = _group(body, index)
|
|
139
|
+
except ValueError:
|
|
140
|
+
break
|
|
141
|
+
else:
|
|
142
|
+
end = body.find(',', index)
|
|
143
|
+
if end == -1:
|
|
144
|
+
end = len(body)
|
|
145
|
+
value, index = body[index:end].strip(), end
|
|
146
|
+
fields[name] = re.sub(r"[{}]", "", value).strip()
|
|
147
|
+
return fields
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
def extract_bibtex(text, source):
|
|
151
|
+
"""Extract balanced BibTeX entries, preserving complete title contents."""
|
|
152
|
+
cites = []
|
|
153
|
+
for body, raw in _bibtex_entries(text):
|
|
154
|
+
fields = _bibtex_fields(body)
|
|
155
|
+
title = fields.get("title")
|
|
156
|
+
if title:
|
|
157
|
+
cites.append(Cite(title=title, year=fields.get("year"),
|
|
158
|
+
authors=fields.get("author"), doi=fields.get("doi"),
|
|
159
|
+
source=source, raw=raw[:160]))
|
|
160
|
+
return cites
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# A quoted title: straight or curly quotes wrapping 20+ non-quote characters
|
|
164
|
+
# (the length floor rules out short quoted phrases and acronyms).
|
|
165
|
+
_QUOTED = re.compile(r"[\"“]([^\"”“]{20,})[\"”]")
|
|
166
|
+
|
|
167
|
+
# A 4-digit publication year.
|
|
168
|
+
_YEAR = re.compile(r"\b(?:19|20)\d{2}\b")
|
|
169
|
+
|
|
170
|
+
# An inline citation key like [Gong 2014] or [du Plessis 2019].
|
|
171
|
+
_INLINE = re.compile(r"\[([A-Za-z][\w.\- ]*?\s(?:19|20)\d{2}[a-z]?)\]")
|
|
172
|
+
|
|
173
|
+
# Placeholder-looking inline keys: contain a hyphenated/lowercase filler token
|
|
174
|
+
# rather than a proper surname (e.g. "ML domain-discovery 2024").
|
|
175
|
+
_PLACEHOLDER_HINT = re.compile(r"[a-z]+-[a-z]+|\b(?:ml|opt|disc|tbd|xxx)\b",
|
|
176
|
+
re.IGNORECASE)
|
|
177
|
+
|
|
178
|
+
# Markdown table separator row: |---|:---:|
|
|
179
|
+
_TABLE_SEP = re.compile(r"^\s*\|?\s*:?-{3,}")
|
|
180
|
+
|
|
181
|
+
# An author list as the literature agent writes it at the head of a Key
|
|
182
|
+
# Papers row: "King W.E. et al.", "W.E. King and R. Smith",
|
|
183
|
+
# "Tang M., Pistorius P.C.", "Scipioni Bertoli U. et al.".
|
|
184
|
+
_INITIALS = r"(?:[A-Z]\.\s?){1,3}"
|
|
185
|
+
_SURNAME = r"[A-Z][A-Za-z'’\-]+(?:\s+[A-Z][A-Za-z'’\-]+)?"
|
|
186
|
+
_AUTHOR = rf"(?:{_INITIALS}\s*)?{_SURNAME}(?:\s+{_INITIALS})?"
|
|
187
|
+
_AUTHOR_LIST = re.compile(
|
|
188
|
+
rf"^{_AUTHOR}(?:\s*(?:,|;|&|\band\b)\s*{_AUTHOR})*"
|
|
189
|
+
rf"(?:,?\s*et\s+al\.?)?\.?$")
|
|
190
|
+
# ...and at least one multi-author marker or initial, so a bare capitalized
|
|
191
|
+
# phrase ("Additive Manufacturing") is not mistaken for a surname pair.
|
|
192
|
+
_AUTHOR_MARK = re.compile(r"\bet\s+al\b|\band\b|&|,|;|\b[A-Z]\.")
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def _cells(line):
|
|
196
|
+
return [c.strip() for c in line.strip().strip("|").split("|")]
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def _table_kind(header, heading):
|
|
200
|
+
"""
|
|
201
|
+
Classify a markdown table by its header row (falling back to the section
|
|
202
|
+
heading above it). The literature agent writes two tables:
|
|
203
|
+
|
|
204
|
+
## Key Papers | Paper | Year | Why Important |
|
|
205
|
+
## Methodological Landscape | Approach | Strengths | Limitations | Key Papers |
|
|
206
|
+
|
|
207
|
+
Only the first is bibliographic. The Landscape table's "Key Papers"
|
|
208
|
+
column repeats titles in shorthand, usually ellipsis-truncated, which
|
|
209
|
+
produced false NOT_FOUND/MISMATCH flags, so it is skipped outright.
|
|
210
|
+
"""
|
|
211
|
+
cells = [c.lower() for c in _cells(header)]
|
|
212
|
+
first = cells[0] if cells else ""
|
|
213
|
+
if "approach" in first:
|
|
214
|
+
return "landscape"
|
|
215
|
+
if "paper" in first:
|
|
216
|
+
return "papers"
|
|
217
|
+
h = (heading or "").lower()
|
|
218
|
+
if "landscape" in h:
|
|
219
|
+
return "landscape"
|
|
220
|
+
if "key papers" in h:
|
|
221
|
+
return "papers"
|
|
222
|
+
return "other"
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def _looks_like_authors(seg):
|
|
226
|
+
"""True if a Key Papers first-cell prefix reads as an author list."""
|
|
227
|
+
if not seg or len(seg) > 80 or re.search(r"\d", seg):
|
|
228
|
+
return False
|
|
229
|
+
return bool(_AUTHOR_LIST.match(seg)) and bool(_AUTHOR_MARK.search(seg))
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def _row_authors(first_cell):
|
|
233
|
+
"""
|
|
234
|
+
Author string from the text that precedes the quoted title in a Key
|
|
235
|
+
Papers row, or None when that text is not an author list. Anything
|
|
236
|
+
else (a journal in *italics*, a volume number, prose) yields None so the
|
|
237
|
+
Crossref query is by title alone rather than polluted with junk.
|
|
238
|
+
"""
|
|
239
|
+
seg = re.split(r"[\"“]", first_cell, 1)[0]
|
|
240
|
+
seg = re.split(r"[*_(\[]|\s[—–-]\s", seg, 1)[0]
|
|
241
|
+
seg = seg.strip().strip(",;:—–- ").strip()
|
|
242
|
+
return seg if _looks_like_authors(seg) else None
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def _titles_in(line):
|
|
246
|
+
"""Yield (title, truncated) for each quoted title on a line."""
|
|
247
|
+
for qm in _QUOTED.finditer(line):
|
|
248
|
+
raw = qm.group(1).strip()
|
|
249
|
+
truncated = raw.endswith("...") or raw.endswith("…")
|
|
250
|
+
title = raw.rstrip(".…").rstrip(",;:").strip()
|
|
251
|
+
yield title, truncated
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
def _row_year(line):
|
|
255
|
+
"""First 4-digit year on a row, looking outside the quoted titles first."""
|
|
256
|
+
outside = _QUOTED.sub(" ", line)
|
|
257
|
+
ym = _YEAR.search(outside) or _YEAR.search(line)
|
|
258
|
+
return ym.group(0) if ym else None
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
def dedup_truncated(cites):
|
|
262
|
+
"""Deduplicate exact identities only; a complete prefix can be another paper.
|
|
263
|
+
|
|
264
|
+
Preserve conflicting DOI metadata as separate findings. Explicit ellipsis
|
|
265
|
+
fragments are omitted by the Markdown extractor, not guessed by title length.
|
|
266
|
+
"""
|
|
267
|
+
seen, out = set(), []
|
|
268
|
+
for cite in cites:
|
|
269
|
+
key = (_norm(cite.title), cite.year, (cite.doi or "").lower())
|
|
270
|
+
if key not in seen:
|
|
271
|
+
seen.add(key)
|
|
272
|
+
out.append(cite)
|
|
273
|
+
return out
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
def extract_markdown(text, source):
|
|
277
|
+
"""
|
|
278
|
+
Extract citation candidates from a LITERATURE.md-style document. Only
|
|
279
|
+
three places are treated as bibliographic:
|
|
280
|
+
* BibTeX entries embedded in the document
|
|
281
|
+
* rows of the Key Papers table (title from the quoted string; authors
|
|
282
|
+
only when the row's first cell starts with an author list)
|
|
283
|
+
* rows of any other table that carry a 4-digit year
|
|
284
|
+
Prose lines are never scanned (quoted emphasis phrases are not titles),
|
|
285
|
+
and the Methodological Landscape table is skipped. Titles that end in an
|
|
286
|
+
ellipsis are omitted as incomplete fragments. Complete prefix titles remain
|
|
287
|
+
distinct; exact identity duplicates are removed. Also returns inline [Author Year] keys that look
|
|
288
|
+
like placeholders.
|
|
289
|
+
"""
|
|
290
|
+
cites = list(extract_bibtex(text, source))
|
|
291
|
+
without_bibtex = text
|
|
292
|
+
for _, raw in _bibtex_entries(text):
|
|
293
|
+
without_bibtex = without_bibtex.replace(raw, "")
|
|
294
|
+
lines = without_bibtex.splitlines()
|
|
295
|
+
seen_titles = {(_norm(c.title), c.year) for c in cites}
|
|
296
|
+
heading, in_table, kind = None, False, "other"
|
|
297
|
+
for i, line in enumerate(lines):
|
|
298
|
+
if "|" not in line:
|
|
299
|
+
in_table = False
|
|
300
|
+
if line.lstrip().startswith("#"):
|
|
301
|
+
heading = line.lstrip("# ").strip()
|
|
302
|
+
continue
|
|
303
|
+
if not in_table:
|
|
304
|
+
in_table = True
|
|
305
|
+
# A header row is one followed by a |---| separator; a table
|
|
306
|
+
# without one is classified by its section heading alone.
|
|
307
|
+
nxt = lines[i + 1] if i + 1 < len(lines) else ""
|
|
308
|
+
if _TABLE_SEP.match(nxt):
|
|
309
|
+
kind = _table_kind(line, heading)
|
|
310
|
+
continue
|
|
311
|
+
kind = _table_kind("", heading)
|
|
312
|
+
if _TABLE_SEP.match(line) or kind == "landscape":
|
|
313
|
+
continue
|
|
314
|
+
year = _row_year(line)
|
|
315
|
+
if kind != "papers" and not year:
|
|
316
|
+
continue
|
|
317
|
+
authors = _row_authors(_cells(line)[0]) if kind == "papers" else None
|
|
318
|
+
for title, truncated in _titles_in(line):
|
|
319
|
+
key = _norm(title)
|
|
320
|
+
if truncated or (key, year) in seen_titles or len(key) < 12:
|
|
321
|
+
continue
|
|
322
|
+
seen_titles.add((key, year))
|
|
323
|
+
cites.append(Cite(title=title, year=year, authors=authors,
|
|
324
|
+
source=source, raw=line.strip()[:160]))
|
|
325
|
+
return dedup_truncated(cites), _extract_inline(text, source)
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
def _surnames(authors):
|
|
329
|
+
"""
|
|
330
|
+
Plausible primary-author surname tokens from a free-form author string.
|
|
331
|
+
Author order is ambiguous here; tables use both "King W.E." (surname
|
|
332
|
+
first) and "W.E. King" (surname last); so we return every token that
|
|
333
|
+
looks like a surname (capitalized, mostly letters) and drop initials
|
|
334
|
+
like "W.E.". The caller matches this set against the work's authors.
|
|
335
|
+
"""
|
|
336
|
+
if not authors:
|
|
337
|
+
return set()
|
|
338
|
+
first = re.split(r"\band\b|;|&", authors)[0]
|
|
339
|
+
first = re.sub(r"\bet al\.?\b", "", first, flags=re.IGNORECASE)
|
|
340
|
+
out = set()
|
|
341
|
+
for tok in re.split(r"[\s,]+", first):
|
|
342
|
+
letters = re.sub(r"[^A-Za-z]", "", tok)
|
|
343
|
+
if len(letters) < 2:
|
|
344
|
+
continue
|
|
345
|
+
# An initials cluster like "W.E." -> "WE" is all-caps and short; skip.
|
|
346
|
+
if tok.replace(".", "").isupper() and len(letters) <= 3:
|
|
347
|
+
continue
|
|
348
|
+
if tok[:1].isupper():
|
|
349
|
+
out.add(_norm(letters))
|
|
350
|
+
return out
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
def _item_surnames(item):
|
|
354
|
+
"""Normalized family names AND their word tokens (handles compound
|
|
355
|
+
surnames like 'Scipioni Bertoli' whichever way the source split them)."""
|
|
356
|
+
out = set()
|
|
357
|
+
for a in (item.get("author") or []):
|
|
358
|
+
fam = a.get("family")
|
|
359
|
+
if not fam:
|
|
360
|
+
continue
|
|
361
|
+
nf = _norm(fam)
|
|
362
|
+
out.add(nf)
|
|
363
|
+
out.update(nf.split())
|
|
364
|
+
return out
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
def _extract_inline(text, source):
|
|
368
|
+
"""Return inline [Author Year]-style keys that look like placeholders
|
|
369
|
+
(a non-name filler token rather than a real surname, e.g.
|
|
370
|
+
"[ML domain-discovery 2024]"); these are unverifiable by construction."""
|
|
371
|
+
placeholders = []
|
|
372
|
+
seen = set()
|
|
373
|
+
for m in _INLINE.finditer(text):
|
|
374
|
+
key = m.group(1).strip()
|
|
375
|
+
if key in seen:
|
|
376
|
+
continue
|
|
377
|
+
seen.add(key)
|
|
378
|
+
if _PLACEHOLDER_HINT.search(key):
|
|
379
|
+
placeholders.append(Cite(title=None, source=source,
|
|
380
|
+
raw="[" + key + "]"))
|
|
381
|
+
return placeholders
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
# ---- verification ---------------------------------------------------------
|
|
385
|
+
|
|
386
|
+
def _retryable(code):
|
|
387
|
+
return code == 429 or 500 <= code < 600
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
def _get(url):
|
|
391
|
+
"""GET JSON. One retry after RETRY_BACKOFF on HTTP 429 / 5xx (Crossref
|
|
392
|
+
rate limiting or a transient server fault); any other error propagates."""
|
|
393
|
+
req = urllib.request.Request(url, headers={"User-Agent": UA})
|
|
394
|
+
for attempt in (0, 1):
|
|
395
|
+
try:
|
|
396
|
+
with urllib.request.urlopen(req, timeout=REQ_TIMEOUT) as r:
|
|
397
|
+
return json.load(r)
|
|
398
|
+
except urllib.error.HTTPError as e:
|
|
399
|
+
if attempt == 0 and _retryable(e.code):
|
|
400
|
+
time.sleep(RETRY_BACKOFF)
|
|
401
|
+
continue
|
|
402
|
+
raise
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
DOI_ABSENT = object() # sentinel: DOI definitively not in Crossref (HTTP 404)
|
|
406
|
+
|
|
407
|
+
|
|
408
|
+
def crossref_by_doi(doi):
|
|
409
|
+
"""Return the work dict, DOI_ABSENT if Crossref lacks the DOI (other agencies may own it),
|
|
410
|
+
or None on a real network error."""
|
|
411
|
+
try:
|
|
412
|
+
data = _get(CROSSREF + "/" + urllib.parse.quote(doi))
|
|
413
|
+
return data.get("message")
|
|
414
|
+
except urllib.error.HTTPError as e:
|
|
415
|
+
return DOI_ABSENT if e.code == 404 else None
|
|
416
|
+
except Exception:
|
|
417
|
+
return None
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
def crossref_by_title(title, authors=None, year=None):
|
|
421
|
+
q = title
|
|
422
|
+
if authors:
|
|
423
|
+
q = authors + " " + q
|
|
424
|
+
params = {"rows": "5", "query.bibliographic": q}
|
|
425
|
+
url = CROSSREF + "?" + urllib.parse.urlencode(params)
|
|
426
|
+
try:
|
|
427
|
+
data = _get(url)
|
|
428
|
+
return data.get("message", {}).get("items", [])
|
|
429
|
+
except Exception:
|
|
430
|
+
return None # None = network failure (vs [] = no results)
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
def _item_year(item):
|
|
434
|
+
for k in ("published-print", "published-online", "issued"):
|
|
435
|
+
dp = item.get(k, {}).get("date-parts") if item else None
|
|
436
|
+
if dp and dp[0] and dp[0][0]:
|
|
437
|
+
return str(dp[0][0])
|
|
438
|
+
return None
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
def verify_one(c, offline):
|
|
442
|
+
"""Return (status, detail_dict)."""
|
|
443
|
+
if not c.title:
|
|
444
|
+
return "UNVERIFIABLE", {"reason": "no extractable title (placeholder)"}
|
|
445
|
+
if offline:
|
|
446
|
+
return "UNVERIFIABLE", {"reason": "offline mode; not resolved"}
|
|
447
|
+
|
|
448
|
+
# DOI path
|
|
449
|
+
if c.doi:
|
|
450
|
+
item = crossref_by_doi(c.doi)
|
|
451
|
+
if item is DOI_ABSENT:
|
|
452
|
+
return "UNVERIFIABLE", {"doi": c.doi,
|
|
453
|
+
"reason": "DOI absent from Crossref; another registration agency may own it"}
|
|
454
|
+
if item is None:
|
|
455
|
+
return "UNVERIFIABLE", {"reason": "network error resolving DOI"}
|
|
456
|
+
rt = (item.get("title") or [""])[0]
|
|
457
|
+
sim = similarity(c.title, rt)
|
|
458
|
+
ry = _item_year(item)
|
|
459
|
+
year_ok = not (c.year and ry) or (c.year.isdigit() and ry.isdigit() and abs(int(c.year) - int(ry)) <= 1)
|
|
460
|
+
if sim >= TITLE_MATCH and year_ok:
|
|
461
|
+
return "VERIFIED", {"doi": c.doi, "matched_title": rt,
|
|
462
|
+
"similarity": round(sim, 2)}
|
|
463
|
+
return "MISMATCH", {"doi": c.doi, "matched_title": rt,
|
|
464
|
+
"similarity": round(sim, 2),
|
|
465
|
+
"reason": "DOI metadata needs review: weak title match or inconsistent year"}
|
|
466
|
+
|
|
467
|
+
# Title path
|
|
468
|
+
items = crossref_by_title(c.title, c.authors, c.year)
|
|
469
|
+
if items is None:
|
|
470
|
+
return "UNVERIFIABLE", {"reason": "network error querying Crossref"}
|
|
471
|
+
best, best_sim = None, 0.0
|
|
472
|
+
for it in items:
|
|
473
|
+
rt = (it.get("title") or [""])[0]
|
|
474
|
+
s = similarity(c.title, rt)
|
|
475
|
+
if s > best_sim:
|
|
476
|
+
best, best_sim = it, s
|
|
477
|
+
if best is None:
|
|
478
|
+
return "NOT_FOUND", {"reason": "no Crossref results"}
|
|
479
|
+
rt = (best.get("title") or [""])[0]
|
|
480
|
+
ry = _item_year(best)
|
|
481
|
+
detail = {"matched_title": rt, "similarity": round(best_sim, 2),
|
|
482
|
+
"doi": best.get("DOI"), "matched_year": ry}
|
|
483
|
+
|
|
484
|
+
year_ok = not (c.year and ry) or (c.year.isdigit() and ry.isdigit() and abs(int(c.year) - int(ry)) <= 1)
|
|
485
|
+
# Author+year corroboration rescues abbreviated titles (e.g. a source
|
|
486
|
+
# that shortened "...laser powder-bed fusion" to "...LPBF"): the primary
|
|
487
|
+
# author's surname appearing in the matched work, with a consistent year,
|
|
488
|
+
# is strong independent evidence it is the same paper.
|
|
489
|
+
author_ok = bool(_surnames(c.authors) & _item_surnames(best))
|
|
490
|
+
|
|
491
|
+
if best_sim >= TITLE_MATCH:
|
|
492
|
+
if not year_ok:
|
|
493
|
+
detail["reason"] = f"year {c.year} vs Crossref {ry}"
|
|
494
|
+
return "MISMATCH", detail
|
|
495
|
+
return "VERIFIED", detail
|
|
496
|
+
if best_sim >= TITLE_WEAK:
|
|
497
|
+
if author_ok and year_ok:
|
|
498
|
+
detail["reason"] = "abbreviated title; confirmed by author + year"
|
|
499
|
+
return "VERIFIED", detail
|
|
500
|
+
detail["reason"] = "only a weak title match; verify manually"
|
|
501
|
+
return "MISMATCH", detail
|
|
502
|
+
detail["reason"] = "closest Crossref result is unrelated"
|
|
503
|
+
return "NOT_FOUND", detail
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
# ---- driver ---------------------------------------------------------------
|
|
507
|
+
|
|
508
|
+
def collect(paths):
|
|
509
|
+
cites, placeholders = [], []
|
|
510
|
+
for p in paths:
|
|
511
|
+
try:
|
|
512
|
+
with open(p, encoding="utf-8") as f:
|
|
513
|
+
text = f.read()
|
|
514
|
+
except OSError as e:
|
|
515
|
+
print(f"WARN: cannot read {p}: {e}", file=sys.stderr)
|
|
516
|
+
continue
|
|
517
|
+
if p.endswith(".bib"):
|
|
518
|
+
cites += extract_bibtex(text, p)
|
|
519
|
+
else:
|
|
520
|
+
md_cites, md_ph = extract_markdown(text, p)
|
|
521
|
+
cites += md_cites
|
|
522
|
+
placeholders += md_ph
|
|
523
|
+
return dedup_truncated(cites), placeholders
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
def main():
|
|
527
|
+
ap = argparse.ArgumentParser(description="Verify citations against Crossref.")
|
|
528
|
+
ap.add_argument("paths", nargs="+", help="LITERATURE.md and/or .bib files")
|
|
529
|
+
ap.add_argument("--offline", action="store_true",
|
|
530
|
+
help="skip network; structural + placeholder checks only")
|
|
531
|
+
ap.add_argument("--json", action="store_true", help="machine-readable output")
|
|
532
|
+
args = ap.parse_args()
|
|
533
|
+
|
|
534
|
+
unreadable = []
|
|
535
|
+
for path in args.paths:
|
|
536
|
+
try:
|
|
537
|
+
with open(path, encoding="utf-8") as source:
|
|
538
|
+
source.read()
|
|
539
|
+
except (OSError, UnicodeError) as error:
|
|
540
|
+
unreadable.append({"file": path, "reason": str(error)})
|
|
541
|
+
readable = [path for path in args.paths if path not in {item["file"] for item in unreadable}]
|
|
542
|
+
cites, placeholders = collect(readable)
|
|
543
|
+
|
|
544
|
+
results = []
|
|
545
|
+
for c in cites:
|
|
546
|
+
status, detail = verify_one(c, args.offline)
|
|
547
|
+
results.append((c, status, detail))
|
|
548
|
+
if not args.offline and not c.doi:
|
|
549
|
+
time.sleep(REQ_PAUSE)
|
|
550
|
+
for ph in placeholders:
|
|
551
|
+
results.append((ph, "UNVERIFIABLE",
|
|
552
|
+
{"reason": "self-flagged placeholder citation key"}))
|
|
553
|
+
|
|
554
|
+
counts = {}
|
|
555
|
+
for _, status, _ in results:
|
|
556
|
+
counts[status] = counts.get(status, 0) + 1
|
|
557
|
+
|
|
558
|
+
if args.json:
|
|
559
|
+
out = {
|
|
560
|
+
"coverage": {"files_requested": len(args.paths), "files_read": len(readable), "unreadable": unreadable, "candidates": len(cites)},
|
|
561
|
+
"summary": counts,
|
|
562
|
+
"results": [
|
|
563
|
+
{"title": c.title, "year": c.year, "doi": c.doi,
|
|
564
|
+
"source": c.source, "raw": c.raw,
|
|
565
|
+
"status": status, "detail": detail}
|
|
566
|
+
for c, status, detail in results
|
|
567
|
+
],
|
|
568
|
+
}
|
|
569
|
+
print(json.dumps(out, indent=2))
|
|
570
|
+
else:
|
|
571
|
+
_print_report(results, counts, args.offline)
|
|
572
|
+
|
|
573
|
+
bad = counts.get("NOT_FOUND", 0) + counts.get("MISMATCH", 0)
|
|
574
|
+
if unreadable or not results:
|
|
575
|
+
if not args.json:
|
|
576
|
+
print("Citation coverage incomplete: unreadable inputs or no extractable citations", file=sys.stderr)
|
|
577
|
+
return 2
|
|
578
|
+
return 1 if bad else 0
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
_ICON = {"VERIFIED": "OK ", "MISMATCH": "WARN", "NOT_FOUND": "FAIL",
|
|
582
|
+
"UNVERIFIABLE": "?? "}
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
def _print_report(results, counts, offline):
|
|
586
|
+
order = ["NOT_FOUND", "MISMATCH", "UNVERIFIABLE", "VERIFIED"]
|
|
587
|
+
for status in order:
|
|
588
|
+
group = [(c, d) for c, s, d in results if s == status]
|
|
589
|
+
if not group:
|
|
590
|
+
continue
|
|
591
|
+
print(f"\n{status} ({len(group)}):")
|
|
592
|
+
for c, d in group:
|
|
593
|
+
label = c.title or c.raw or "?"
|
|
594
|
+
line = f" [{_ICON[status]}] {label[:88]}"
|
|
595
|
+
print(line)
|
|
596
|
+
bits = []
|
|
597
|
+
if d.get("reason"):
|
|
598
|
+
bits.append(d["reason"])
|
|
599
|
+
if d.get("matched_title"):
|
|
600
|
+
tag = "closest:" if status == "NOT_FOUND" else "~"
|
|
601
|
+
bits.append(f"{tag} {d['matched_title'][:70]}")
|
|
602
|
+
if d.get("doi") and status != "UNVERIFIABLE":
|
|
603
|
+
bits.append(f"doi:{d['doi']}")
|
|
604
|
+
if bits:
|
|
605
|
+
print(" " + " | ".join(bits))
|
|
606
|
+
mode = " (offline)" if offline else ""
|
|
607
|
+
counts_str = ", ".join(f"{k}={v}" for k, v in sorted(counts.items())) \
|
|
608
|
+
or "no citations found"
|
|
609
|
+
print(f"\nverify-citations{mode}: {counts_str}")
|
|
610
|
+
bad = counts.get("NOT_FOUND", 0) + counts.get("MISMATCH", 0)
|
|
611
|
+
if bad:
|
|
612
|
+
print(f" -> {bad} citation(s) need attention.")
|
|
613
|
+
|
|
614
|
+
|
|
615
|
+
if __name__ == "__main__":
|
|
616
|
+
sys.exit(main())
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Research Identity
|
|
2
|
+
|
|
3
|
+
## Research Area
|
|
4
|
+
- **Domain**: [Structural Materials | Functional Materials | Energy Materials | Biomaterials | Nanomaterials | Polymers | Computational MatSci | Characterization]
|
|
5
|
+
- **Sub-field**: [e.g., High-entropy alloys, Solid-state batteries, Bone scaffolds, 2D materials]
|
|
6
|
+
- **Specific Interest**: [precise topic; phenomena, material system, or application]
|
|
7
|
+
|
|
8
|
+
## Research Prompt
|
|
9
|
+
[The refined research question; one sentence. What does this research answer?]
|
|
10
|
+
|
|
11
|
+
## Scope
|
|
12
|
+
### In Scope
|
|
13
|
+
- [specific materials, phenomena, length scales, conditions]
|
|
14
|
+
- [specific characterization methods or computational approaches]
|
|
15
|
+
|
|
16
|
+
### Out of Scope
|
|
17
|
+
- [explicit exclusions; what this research will NOT address]
|
|
18
|
+
|
|
19
|
+
## Researcher Profile
|
|
20
|
+
- **Career Stage**: [undergrad | grad student | postdoc | PI | industry researcher]
|
|
21
|
+
- **Available Resources**: [experimental equipment | computational cluster | literature only | combination]
|
|
22
|
+
- **Timeline**: [months/years]
|
|
23
|
+
- **Institutional Context**: [university lab | national lab | industry R&D | independent]
|
|
24
|
+
|
|
25
|
+
## Initial Keywords
|
|
26
|
+
- **Primary**: []
|
|
27
|
+
- **Secondary**: []
|
|
28
|
+
- **Exclude from search**: []
|
|
29
|
+
|
|
30
|
+
## Suggested Research Prompts (generated during interview)
|
|
31
|
+
1. [prompt option A; fundamental understanding focus]
|
|
32
|
+
2. [prompt option B; application focus]
|
|
33
|
+
3. [prompt option C; methodological focus]
|
|
34
|
+
|
|
35
|
+
## Selected Prompt
|
|
36
|
+
[User-confirmed research prompt after interview]
|
|
37
|
+
|
|
38
|
+
## Key Decisions
|
|
39
|
+
[Decisions locked in during identify-research; scope choices, methodological constraints, etc.]
|