@iowarp/clio-coder 0.4.9 → 0.5.0
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 +11 -3
- package/CHANGELOG.md +153 -0
- package/CODE_OF_CONDUCT.md +10 -0
- package/CONTRIBUTING.md +208 -382
- package/NOTICE +8 -2
- package/README.md +199 -418
- package/ROADMAP.md +82 -0
- package/SECURITY.md +14 -11
- package/dist/acp-KS7ARGV6.js +132 -0
- package/dist/agents-YOGJ2YEJ.js +163 -0
- package/dist/assets/codewiki.json +1 -1
- package/dist/auth-CEDCO6O6.js +557 -0
- package/dist/background-YWTBPSQU.js +39 -0
- package/dist/builtins-GDYO4RTR.js +23 -0
- package/dist/chunk-27YTM2CV.js +175 -0
- package/dist/chunk-2AF6YC7Q.js +75 -0
- package/dist/chunk-2DTIWSAW.js +381 -0
- package/dist/chunk-2EMLKSCX.js +262 -0
- package/dist/chunk-2OJ3YZQP.js +665 -0
- package/dist/chunk-2VLYHHFT.js +35 -0
- package/dist/chunk-2WVPJF3Z.js +204 -0
- package/dist/chunk-33OASOS6.js +176 -0
- package/dist/chunk-3BD2LXYJ.js +19 -0
- package/dist/chunk-3JHUFKG7.js +30 -0
- package/dist/chunk-3JLTRPN7.js +711 -0
- package/dist/chunk-3LT34CAM.js +2796 -0
- package/dist/chunk-3O5JWP4L.js +1670 -0
- package/dist/chunk-3UW3KU4A.js +21 -0
- package/dist/chunk-4A6YRGV4.js +569 -0
- package/dist/chunk-4D2BRCZ3.js +67 -0
- package/dist/chunk-4SYHGVDE.js +668 -0
- package/dist/chunk-4VDHLCF5.js +66 -0
- package/dist/chunk-4WOOTKFD.js +637 -0
- package/dist/chunk-4WV4PI66.js +80 -0
- package/dist/chunk-53OXPRI6.js +195 -0
- package/dist/chunk-55RMDDFM.js +1347 -0
- package/dist/chunk-56XP4FJU.js +2025 -0
- package/dist/chunk-5B3RTYAK.js +123 -0
- package/dist/chunk-5CD243WE.js +45 -0
- package/dist/chunk-5JQR5B4D.js +709 -0
- package/dist/chunk-5KQEUIWM.js +597 -0
- package/dist/chunk-5LP5FNNR.js +915 -0
- package/dist/chunk-62UK7AGW.js +9344 -0
- package/dist/chunk-6CTHLZFB.js +563 -0
- package/dist/chunk-6EJYVCTN.js +23 -0
- package/dist/chunk-6OWUM2NC.js +12289 -0
- package/dist/chunk-6RJMYYIE.js +1023 -0
- package/dist/chunk-6W75D37F.js +643 -0
- package/dist/chunk-733ZBT5P.js +1721 -0
- package/dist/chunk-77DCC6JZ.js +3710 -0
- package/dist/chunk-7QXCO3AF.js +156 -0
- package/dist/chunk-7RET77VB.js +481 -0
- package/dist/chunk-A4MVRV4C.js +65 -0
- package/dist/chunk-ALJWT6O6.js +93 -0
- package/dist/chunk-AVSR2HKI.js +232 -0
- package/dist/chunk-B7GY6QER.js +42 -0
- package/dist/chunk-BFOSV5EZ.js +178 -0
- package/dist/chunk-BGOIM7NB.js +103 -0
- package/dist/chunk-BJH6WFIB.js +372 -0
- package/dist/chunk-BOBCCDJ6.js +1533 -0
- package/dist/chunk-BRCOSE7O.js +117 -0
- package/dist/chunk-BYFHHCFV.js +601 -0
- package/dist/chunk-C2CPOIH2.js +83 -0
- package/dist/chunk-C7AQTPCE.js +694 -0
- package/dist/chunk-CBAQPTDU.js +165 -0
- package/dist/chunk-CDQ2UC6W.js +125 -0
- package/dist/chunk-CN6SW5DC.js +177 -0
- package/dist/chunk-CRHPCPZP.js +132 -0
- package/dist/chunk-CTFPFW3H.js +44 -0
- package/dist/chunk-D3KWFOUT.js +103 -0
- package/dist/chunk-D65E25JG.js +185 -0
- package/dist/chunk-DCGHJQ2U.js +236 -0
- package/dist/chunk-DE2LU267.js +106 -0
- package/dist/chunk-DF6PI6GN.js +97 -0
- package/dist/chunk-DGC6X6XR.js +53 -0
- package/dist/chunk-DOUISWEE.js +526 -0
- package/dist/chunk-DR3TAEUA.js +188 -0
- package/dist/chunk-DVTBERFY.js +33 -0
- package/dist/chunk-DXSETN72.js +1051 -0
- package/dist/chunk-DZLR4UEH.js +128 -0
- package/dist/chunk-E6IPKW2E.js +77 -0
- package/dist/chunk-EG4ARXPC.js +139 -0
- package/dist/chunk-EKV4UBCM.js +652 -0
- package/dist/chunk-EOJPDNUP.js +1325 -0
- package/dist/chunk-EX57VVWW.js +4157 -0
- package/dist/chunk-EYTLV3W3.js +5937 -0
- package/dist/chunk-EZD2BXGP.js +475 -0
- package/dist/chunk-EZDCA34W.js +314 -0
- package/dist/chunk-FD2I4KBR.js +33 -0
- package/dist/chunk-FD3IAHQM.js +27 -0
- package/dist/chunk-FFYTC2KQ.js +416 -0
- package/dist/chunk-FGSQHUCK.js +110 -0
- package/dist/chunk-GCQFN7YI.js +32 -0
- package/dist/chunk-GGPF6LLE.js +38 -0
- package/dist/chunk-GGWI3OVM.js +215 -0
- package/dist/chunk-GLIQT7SU.js +172 -0
- package/dist/chunk-GN7QBEEI.js +95 -0
- package/dist/chunk-GRHOXDKB.js +1104 -0
- package/dist/chunk-HMN2C6YL.js +54 -0
- package/dist/chunk-HOEDA42N.js +310 -0
- package/dist/chunk-HOYZUKG7.js +192 -0
- package/dist/chunk-HQVN7G4F.js +1021 -0
- package/dist/chunk-HSQQFDB3.js +519 -0
- package/dist/chunk-I4ELN5BX.js +47 -0
- package/dist/chunk-I4Y4WKZR.js +386 -0
- package/dist/chunk-IFPDAD7R.js +797 -0
- package/dist/chunk-IN7DGBVS.js +582 -0
- package/dist/chunk-ISHUS7HC.js +396 -0
- package/dist/chunk-JPXLJSGR.js +191 -0
- package/dist/chunk-JQCLXSFI.js +69 -0
- package/dist/chunk-KBUTSJSR.js +61 -0
- package/dist/chunk-KW5HXKLJ.js +56 -0
- package/dist/chunk-L4APUGCT.js +139 -0
- package/dist/chunk-L7G7K4I2.js +505 -0
- package/dist/chunk-LAR7DX5E.js +1840 -0
- package/dist/chunk-LAVUQX3B.js +462 -0
- package/dist/chunk-LJRBX7QR.js +116 -0
- package/dist/chunk-LNOXCGN2.js +1864 -0
- package/dist/chunk-LTWH2ACR.js +23002 -0
- package/dist/chunk-LYJJ6546.js +661 -0
- package/dist/chunk-M2IPMWCN.js +457 -0
- package/dist/chunk-MGLRTOCK.js +101 -0
- package/dist/chunk-MZF5IKZT.js +160 -0
- package/dist/chunk-N24R6KWS.js +386 -0
- package/dist/chunk-NASYVWDB.js +604 -0
- package/dist/chunk-NBXFPI7U.js +195 -0
- package/dist/chunk-NDPF2N2L.js +400 -0
- package/dist/chunk-NFSK2VNU.js +446 -0
- package/dist/chunk-NG3QQSXY.js +43 -0
- package/dist/chunk-NOCSM22Y.js +63 -0
- package/dist/chunk-NVPXXW2H.js +1143 -0
- package/dist/chunk-O63U2I6I.js +30 -0
- package/dist/chunk-OJXOA6YU.js +98 -0
- package/dist/chunk-OPD7GL6F.js +1196 -0
- package/dist/chunk-OQ2EOAHA.js +14399 -0
- package/dist/chunk-OV62D6KO.js +688 -0
- package/dist/chunk-OZ76TLGU.js +740 -0
- package/dist/chunk-P4GNZPXO.js +1156 -0
- package/dist/chunk-PS6JAWJZ.js +78 -0
- package/dist/chunk-PXRCXGLK.js +1865 -0
- package/dist/chunk-QDUUOZ3S.js +108 -0
- package/dist/chunk-QG6I2T5E.js +1416 -0
- package/dist/chunk-QHSBROEW.js +308 -0
- package/dist/chunk-QNUQ7K7D.js +46 -0
- package/dist/chunk-QZTTRSJE.js +333 -0
- package/dist/chunk-R2UUNSNQ.js +1605 -0
- package/dist/chunk-R7FGRZNF.js +1794 -0
- package/dist/chunk-RNDCROSG.js +199 -0
- package/dist/chunk-S36CXHO2.js +302 -0
- package/dist/chunk-SJGS3GDI.js +575 -0
- package/dist/chunk-SQZHXUB3.js +510 -0
- package/dist/chunk-SUTLW6ND.js +686 -0
- package/dist/chunk-SYF7FVBL.js +179 -0
- package/dist/chunk-T2MDZES3.js +1577 -0
- package/dist/chunk-T33IYTZM.js +1146 -0
- package/dist/chunk-TDGYTWM6.js +49 -0
- package/dist/chunk-TGL5FZVD.js +132 -0
- package/dist/chunk-TGWZXJ7L.js +1205 -0
- package/dist/chunk-TKDRT2DF.js +114 -0
- package/dist/chunk-TV2EBCSQ.js +152 -0
- package/dist/chunk-U26XXPJS.js +367 -0
- package/dist/chunk-U5QU5ZOD.js +419 -0
- package/dist/chunk-U6YTUVOX.js +1011 -0
- package/dist/chunk-UCINIRHW.js +188 -0
- package/dist/chunk-UJD5MPP6.js +52 -0
- package/dist/chunk-URCXX7WJ.js +146 -0
- package/dist/chunk-UX2L5CUD.js +898 -0
- package/dist/chunk-UZVYEF57.js +114 -0
- package/dist/chunk-V35KZDUZ.js +218 -0
- package/dist/chunk-VESL6DQY.js +1058 -0
- package/dist/chunk-VKHLUZNO.js +986 -0
- package/dist/chunk-VOYUCAQF.js +584 -0
- package/dist/chunk-VYRQHORQ.js +414 -0
- package/dist/chunk-W53XSRQE.js +245 -0
- package/dist/chunk-X4CEFOSG.js +226 -0
- package/dist/chunk-XDHUDE5K.js +380 -0
- package/dist/chunk-XISLDHEL.js +1290 -0
- package/dist/chunk-XM34YQ2Y.js +169 -0
- package/dist/chunk-XMDBTYCH.js +661 -0
- package/dist/chunk-XS2QPZJE.js +449 -0
- package/dist/chunk-YBUECLAF.js +618 -0
- package/dist/chunk-YQ6XEFVK.js +332 -0
- package/dist/chunk-YYLCPDCC.js +990 -0
- package/dist/chunk-Z4GLJ6J4.js +1035 -0
- package/dist/chunk-ZARZ4POR.js +210 -0
- package/dist/chunk-ZJPORZTC.js +119 -0
- package/dist/chunk-ZNUZ3EXD.js +243 -0
- package/dist/chunk-ZPST2KQO.js +49 -0
- package/dist/chunk-ZR5YA6ZF.js +512 -0
- package/dist/chunk-ZU4JPCPR.js +319 -0
- package/dist/chunk-ZUKUCZYZ.js +39 -0
- package/dist/cli/index.js +56 -45
- package/dist/clio-K2PBVCEM.js +27 -0
- package/dist/clio-context-tools-GR4OHFSO.js +145 -0
- package/dist/code-nav-4X3OI6DK.js +715 -0
- package/dist/codewiki/build-worker.js +4 -4
- package/dist/compile-cache-YRB6QRO7.js +18 -0
- package/dist/components-RQOJ6NUR.js +675 -0
- package/dist/config-Q5J7UBAB.js +291 -0
- package/dist/config-XE7XYZLU.js +38 -0
- package/dist/config-graph-P3555574.js +175 -0
- package/dist/configure-KIJ32ZO6.js +104 -0
- package/dist/context-LFBQOSXT.js +344 -0
- package/dist/context-NNLBES2Y.js +82 -0
- package/dist/context-WBH3KSVR.js +302 -0
- package/dist/context-clear-YOHMQ6SQ.js +208 -0
- package/dist/context-index-X2N5UAIF.js +120 -0
- package/dist/context-map-HOSMGUG2.js +555 -0
- package/dist/context-working-set-MRAEVDNV.js +1564 -0
- package/dist/data-tool-JJPBGMQJ.js +2986 -0
- package/dist/detail-RHJOTGN4.js +139 -0
- package/dist/dispatch-runner-NC7PYNIO.js +2477 -0
- package/dist/docs-K4GBWRUX.js +342 -0
- package/dist/doctor-S5KZ2GTN.js +1138 -0
- package/dist/doctor-deep-2EJQSHIZ.js +130 -0
- package/dist/domain-loader-MB34FDPD.js +13 -0
- package/dist/eval-3D6M36N7.js +5220 -0
- package/dist/eval-inventory-SM3HNM47.js +260 -0
- package/dist/evals-FO6JEUCN.js +104 -0
- package/dist/evidence-6IYN52ET.js +262 -0
- package/dist/evidence-JVECPI3F.js +250 -0
- package/dist/evidence-XNVPPLVK.js +410 -0
- package/dist/evolve-TLPUDJDM.js +634 -0
- package/dist/extensions-ROZJ5X3J.js +311 -0
- package/dist/fleet-6RJWIOEO.js +284 -0
- package/dist/fleet-WKVBF5SZ.js +942 -0
- package/dist/fleet-commands-L6WFT7KZ.js +76 -0
- package/dist/fleet-decisions-BTQMWU5A.js +55 -0
- package/dist/fleet-graph-553DZ67Q.js +141 -0
- package/dist/fleet-inspect-236FZPRB.js +329 -0
- package/dist/fleet-new-CKUXP3CO.js +48 -0
- package/dist/fleet-preflight-NZQHABWO.js +95 -0
- package/dist/fleet-validate-7NLAE26R.js +96 -0
- package/dist/fleet-verify-E3RO6A5W.js +226 -0
- package/dist/fleet-view-KMZQY7YJ.js +144 -0
- package/dist/gui/client/assets/abnfDiagram-VCTEODGH-DPBWQwNn.js +1 -0
- package/dist/gui/client/assets/architecture-7GRP2DOG-D1w8FrFW.js +1 -0
- package/dist/gui/client/assets/architectureDiagram-5GKGNRK7-CVPgKd1-.js +36 -0
- package/dist/gui/client/assets/blockDiagram-I7D4REHJ-BLmnqkK5.js +129 -0
- package/dist/gui/client/assets/c4Diagram-7LVT6UL2-4AU9cfM7.js +38 -0
- package/dist/gui/client/assets/channel-DwFZ0m8S.js +1 -0
- package/dist/gui/client/assets/chunk-4HAMMTFA-EOWkKCav.js +62 -0
- package/dist/gui/client/assets/chunk-75Z2AOVW-CygeoIMl.js +2 -0
- package/dist/gui/client/assets/chunk-DU6HZSFF-s27fViLb.js +125 -0
- package/dist/gui/client/assets/chunk-F27PBJKO-BrHvwLsZ.js +1 -0
- package/dist/gui/client/assets/chunk-GMAD6QVW-DzPh-7jt.js +72 -0
- package/dist/gui/client/assets/chunk-GVQU2GXP-pIaQkIzm.js +1 -0
- package/dist/gui/client/assets/chunk-IMKFNOWR-BGJVE_Br.js +231 -0
- package/dist/gui/client/assets/chunk-L3NEJ4N5-B3YLuhww.js +1 -0
- package/dist/gui/client/assets/chunk-OSK3NFVY-BRj61HHU.js +10 -0
- package/dist/gui/client/assets/chunk-P2QGCYS3-Sno90KxP.js +1 -0
- package/dist/gui/client/assets/chunk-POPQ4Y6H-Cw8NTbxr.js +1 -0
- package/dist/gui/client/assets/chunk-PWAF6VOD-BIhHgz37.js +1 -0
- package/dist/gui/client/assets/chunk-SHT3W25Y-Cqv7npBj.js +168 -0
- package/dist/gui/client/assets/chunk-SVP7TREG-Hxzl6Dee.js +88 -0
- package/dist/gui/client/assets/chunk-TICWLB2K-CIFVyVP2.js +206 -0
- package/dist/gui/client/assets/classDiagram-ZZMXUADV-BJbAiI_w.js +1 -0
- package/dist/gui/client/assets/classDiagram-v2-VYDZK3BY-BJbAiI_w.js +1 -0
- package/dist/gui/client/assets/cynefin-OW5HDTMX-DecLWZ-y.js +1 -0
- package/dist/gui/client/assets/cynefinDiagram-5FMLGOSQ-CK-T2N-D.js +62 -0
- package/dist/gui/client/assets/dagre-GXQ25YYZ-C0dfg-OS.js +4 -0
- package/dist/gui/client/assets/diagram-S7CK7UJ4-EaJukVh-.js +30 -0
- package/dist/gui/client/assets/diagram-UQ7AKVKN-xcOucEtP.js +41 -0
- package/dist/gui/client/assets/diagram-VSXAHHWV-3AUJACMf.js +3 -0
- package/dist/gui/client/assets/diagram-VX7I27RA-TPknLqam.js +24 -0
- package/dist/gui/client/assets/diagram-Z3DM3KII-wa1q3YMF.js +24 -0
- package/dist/gui/client/assets/ebnfDiagram-PWID7BFC-JBCF2-s7.js +1 -0
- package/dist/gui/client/assets/erDiagram-RLTQ6QDP-CmXjXPc4.js +99 -0
- package/dist/gui/client/assets/eventmodeling-NTZA5JFV-D_1aJWYl.js +1 -0
- package/dist/gui/client/assets/flowDiagram-HODETNUW-BQtZlael.js +1 -0
- package/dist/gui/client/assets/framework-Bq-znqwW.js +9 -0
- package/dist/gui/client/assets/ganttDiagram-EL5Y4UJY-IPaL_kaa.js +292 -0
- package/dist/gui/client/assets/gitGraph-4MIJSDKK-Oy0Q3hoc.js +1 -0
- package/dist/gui/client/assets/gitGraphDiagram-WWUBYQGX-jtAuBmbc.js +106 -0
- package/dist/gui/client/assets/index-CuFuBEdL.css +1 -0
- package/dist/gui/client/assets/index-hMbEIsX0.js +87 -0
- package/dist/gui/client/assets/info-A6RAGUB7-UtEs1tv7.js +1 -0
- package/dist/gui/client/assets/infoDiagram-27XIBGKW-hlwR1pBW.js +2 -0
- package/dist/gui/client/assets/ishikawaDiagram-5VMMS53U-C6vMtfsd.js +70 -0
- package/dist/gui/client/assets/journeyDiagram-3NMN7TZE-EAwAl_PS.js +139 -0
- package/dist/gui/client/assets/kanban-definition-UXKFOSKX-CQOhRKHW.js +89 -0
- package/dist/gui/client/assets/line-DbcwGZTW.js +1 -0
- package/dist/gui/client/assets/mermaid-parser.core-C2QfVcHd.js +7 -0
- package/dist/gui/client/assets/mermaid.core-N9qUTre1.js +44 -0
- package/dist/gui/client/assets/mindmap-definition-YA3MSWOX-BR_FL9gK.js +96 -0
- package/dist/gui/client/assets/packet-AYTQ26CC-CbBJ2oAa.js +1 -0
- package/dist/gui/client/assets/pegDiagram-XKGWAZYB-BruU0IHM.js +1 -0
- package/dist/gui/client/assets/pie-WAS4IAKB-BWdSng4H.js +1 -0
- package/dist/gui/client/assets/pieDiagram-E7YTZNPT-CR3ljgdU.js +39 -0
- package/dist/gui/client/assets/quadrantDiagram-AXDQQJYC-C-boKslr.js +7 -0
- package/dist/gui/client/assets/radar-RG4KPBEZ-CGlOnAKG.js +1 -0
- package/dist/gui/client/assets/railroad-74A4TZTK-CDvuAlyC.js +1 -0
- package/dist/gui/client/assets/railroad-abnf-HS5TGJTU-CQUA9crC.js +1 -0
- package/dist/gui/client/assets/railroad-ebnf-LZEXJU2U-CD857gxq.js +1 -0
- package/dist/gui/client/assets/railroad-peg-WCYAUIDC-DUV4k35E.js +1 -0
- package/dist/gui/client/assets/railroadDiagram-O6MQD6OU-DMR4LXmA.js +1 -0
- package/dist/gui/client/assets/requirementDiagram-BXWQKSXE-DVltaF6c.js +84 -0
- package/dist/gui/client/assets/sankeyDiagram-P5KCCOFB-CHdNz472.js +40 -0
- package/dist/gui/client/assets/sequenceDiagram-WJ2MYXX4-DaMafIty.js +162 -0
- package/dist/gui/client/assets/stateDiagram-D77RDMKH-CEbBHqn3.js +1 -0
- package/dist/gui/client/assets/stateDiagram-v2-MP3YSRHH-B3JgDdFg.js +1 -0
- package/dist/gui/client/assets/swimlanes-42K2YHIH-BlPHndnJ.js +1 -0
- package/dist/gui/client/assets/swimlanesDiagram-VR7AAH4N-BPabHwsZ.js +8 -0
- package/dist/gui/client/assets/timeline-definition-24CTP7MA-E4Y1lPBI.js +120 -0
- package/dist/gui/client/assets/treeView-Q6P3EWNA-DrY0uhTN.js +1 -0
- package/dist/gui/client/assets/treemap-WGGIJYW6-CVotnLHf.js +1 -0
- package/dist/gui/client/assets/vennDiagram-4TSXK5OY-DJNrLIOF.js +34 -0
- package/dist/gui/client/assets/wardley-WFR3VGLG-ClOpAp5S.js +1 -0
- package/dist/gui/client/assets/wardleyDiagram-VM6X3IG4-qhMoKOXc.js +78 -0
- package/dist/gui/client/assets/xychartDiagram-S5SC5T6Z-CTuXoo9R.js +7 -0
- package/dist/gui/client/index.html +6 -0
- package/dist/gui/ops-worker.js +167 -0
- package/dist/gui/reads-worker.js +473 -0
- package/dist/gui/server.js +9780 -0
- package/dist/gui-QJS7XQMV.js +16 -0
- package/dist/init-DV5B6HQG.js +354 -0
- package/dist/install-6C45YXFP.js +19 -0
- package/dist/install-O7NSRU2W.js +13 -0
- package/dist/interactive-OXGYZYAS.js +22381 -0
- package/dist/interop-J7UOBOSF.js +254 -0
- package/dist/inventory-OEGIL6PY.js +144 -0
- package/dist/library-B3UPGY4V.js +83 -0
- package/dist/library-MXQA5DLT.js +309 -0
- package/dist/library-ROZAMUIL.js +496 -0
- package/dist/library-import-2LTWOVBD.js +190 -0
- package/dist/library-inventory-LJ3XHLWO.js +60 -0
- package/dist/library-validation-DARHHUNW.js +46 -0
- package/dist/mcp-2GSPYQ54.js +28 -0
- package/dist/memory-J3STUUIK.js +537 -0
- package/dist/models-Y3GMFJ2V.js +314 -0
- package/dist/monitor-LHNH577J.js +811 -0
- package/dist/orchestrator-DTAPXULA.js +12117 -0
- package/dist/panes-A743ONZ5.js +103 -0
- package/dist/panes-CTNO57ZY.js +76 -0
- package/dist/paths-3SBYJQDP.js +68 -0
- package/dist/preload-OJBMAIXF.js +140 -0
- package/dist/providers-CMETPZNS.js +232 -0
- package/dist/registry-37T4U6X2.js +15 -0
- package/dist/reset-O7EUCYWO.js +346 -0
- package/dist/resources-FY6XYFN2.js +189 -0
- package/dist/run-H64MEVTA.js +1067 -0
- package/dist/run-script-PQ5NRU3X.js +42 -0
- package/dist/settings-SNIQNXCW.js +73 -0
- package/dist/settings-controls-X6GMCPVG.js +202 -0
- package/dist/share-CAFMMQLM.js +299 -0
- package/dist/skills-ERKQUC7L.js +114 -0
- package/dist/skills-eval-CQ23MYQK.js +1099 -0
- package/dist/skills-inventory-TVUYJDVN.js +142 -0
- package/dist/slash-commands-ROG3KIFJ.js +107 -0
- package/dist/startup-background-KDWCQMWT.js +247 -0
- package/dist/steer-KKYXJSH4.js +77 -0
- package/dist/support-M3RCUUEL.js +40 -0
- package/dist/system-ZDW44ZGX.js +142 -0
- package/dist/target-runtimes-PWA22WVW.js +73 -0
- package/dist/targets-AJWA6E7Z.js +1207 -0
- package/dist/tasks-6L2JJRC5.js +39 -0
- package/dist/terminal-lease-YFUSDPAD.js +432 -0
- package/dist/tools-5XJUABRD.js +30 -0
- package/dist/trace-LA5MVR4Y.js +527 -0
- package/dist/tree-sitter-TQW3Y52T.js +4673 -0
- package/dist/tui-primitives-IUCVWLH5.js +19 -0
- package/dist/uninstall-SAWGGXAB.js +448 -0
- package/dist/upgrade-HSNSVTZG.js +300 -0
- package/dist/usage-XSILDHKF.js +1083 -0
- package/dist/verifiers-ECA5GIHL.js +633 -0
- package/dist/verify-R6QQCCEB.js +31 -0
- package/dist/version-PLZYB5KW.js +22 -0
- package/dist/web-fetch-PVZNMBOB.js +803 -0
- package/dist/wiki-generate-RP22WP5K.js +647 -0
- package/dist/with-panes-W3PAZPRF.js +629 -0
- package/dist/worker/entry.js +324 -284
- package/dist/workspace-check-3764ZKC2.js +83 -0
- package/docs/README.md +26 -10
- package/docs/architecture/acp.md +179 -12
- package/docs/architecture/artifact-placement.md +1 -1
- package/docs/architecture/capacity-and-scheduling.md +7 -8
- package/docs/architecture/context-engine.md +350 -95
- package/docs/architecture/model-catalog.md +18 -11
- package/docs/architecture/observability.md +1 -1
- package/docs/architecture/pi-boundary.md +59 -6
- package/docs/architecture/prompt-envelope-and-tools.md +147 -39
- package/docs/architecture/provider-adapter-cookbook.md +2 -2
- package/docs/architecture/safety-model.md +18 -4
- package/docs/architecture/trace-store.md +2 -2
- package/docs/architecture/tui-design.md +41 -81
- package/docs/architecture/worker-dispatch-mechanics.md +9 -1
- package/docs/gui/README.md +69 -0
- package/docs/gui/boundary-doctrine.md +104 -0
- package/docs/gui/chat-rendering-spec.md +1440 -0
- package/docs/gui/cli-surface-routing.md +148 -0
- package/docs/gui/delivery-order.md +53 -0
- package/docs/gui/event-bus-coverage.md +103 -0
- package/docs/gui/inspector-presentation.md +71 -0
- package/docs/gui/parity/01-cli-surface.md +74 -0
- package/docs/gui/parity/02-slash-and-surfaces.md +110 -0
- package/docs/gui/parity/03-domains-and-plan.md +69 -0
- package/docs/gui/performance-baseline.md +76 -0
- package/docs/gui/settings-write-surface.md +267 -0
- package/docs/gui/workflow-coverage.md +64 -0
- package/docs/guide/built-in-agents.md +1 -1
- package/docs/guide/commands-and-modes.md +256 -99
- package/docs/guide/configuration-and-targets.md +485 -124
- package/docs/guide/configuration-reference.md +165 -82
- package/docs/guide/doctor.md +127 -0
- package/docs/guide/environment-variables.md +1 -1
- package/docs/guide/exit-codes-and-output.md +3 -1
- package/docs/guide/extensions-and-sharing.md +3 -14
- package/docs/guide/fleet-dispatch.md +231 -45
- package/docs/guide/glossary.md +1 -1
- package/docs/guide/installation-and-lifecycle.md +27 -16
- package/docs/guide/interop.md +2 -2
- package/docs/guide/proactive-memory.md +154 -68
- package/docs/guide/resource-library.md +4 -0
- package/docs/guide/skills-marketplace.md +8 -4
- package/docs/guide/slurm.md +88 -0
- package/docs/guide/tool-usage.md +134 -11
- package/docs/guide/troubleshooting.md +4 -2
- package/docs/process/battletest-2026-09-20-fixes.md +161 -0
- package/docs/process/configure-tree-proposal.md +637 -0
- package/docs/process/documentation-coverage.md +8 -0
- package/docs/process/documentation-guide.md +18 -1
- package/docs/process/eval-runner.md +58 -14
- package/docs/process/performance-methodology.md +11 -3
- package/docs/process/release-cut-checklist.md +29 -3
- package/docs/process/tool-audit-v0.4.9.md +3 -0
- package/examples/extensions/README.md +1 -3
- package/examples/extensions/lab-status/clio-coder-extension.json +1 -1
- package/examples/extensions/measurements/clio-coder-extension.json +1 -1
- package/library/registry.yaml +30 -5
- package/library/skills/git/fix-issue/SKILL.md +2 -1
- package/library/skills/git/fix-issue/plugin.json +1 -1
- package/library/skills/git/ship/SKILL.md +2 -1
- package/library/skills/git/ship/plugin.json +1 -1
- package/library/skills/meta/clio-coder-test/SKILL.md +5 -6
- package/library/skills/meta/clio-coder-test/evals.md +2 -2
- package/library/skills/meta/clio-coder-test/references/test-map.md +2 -2
- package/library/skills/registry.yaml +9 -5
- package/library/skills/research/slurm-jobs/SKILL.md +110 -0
- package/library/skills/research/slurm-jobs/evals.md +39 -0
- package/library/skills/research/slurm-jobs/plugin.json +23 -0
- package/library/skills/skill-marketplace.json +18 -2
- package/package.json +15 -10
- package/src/cli/args.ts +59 -0
- package/src/cli/argv.ts +7 -0
- package/src/cli/clio.ts +9 -1
- package/src/cli/configure-controls.ts +136 -0
- package/src/cli/configure-onboarding.ts +24 -7
- package/src/cli/configure-quick.ts +32 -7
- package/src/cli/configure-target.ts +11 -1
- package/src/cli/configure.ts +253 -256
- package/src/cli/docs-server.ts +290 -0
- package/src/cli/docs.ts +60 -15
- package/src/cli/doctor-deep.ts +126 -0
- package/src/cli/doctor-hpc.ts +122 -0
- package/src/cli/doctor-slurm.ts +130 -0
- package/src/cli/doctor-task-worktrees.ts +88 -0
- package/src/cli/doctor.ts +165 -16
- package/src/cli/fleet-verify.ts +3 -2
- package/src/cli/gui.ts +111 -0
- package/src/cli/index.ts +14 -4
- package/src/cli/library.ts +2 -7
- package/src/cli/modes/json-stream.ts +4 -2
- package/src/cli/modes/print.ts +252 -25
- package/src/cli/run.ts +199 -71
- package/src/cli/skills.ts +25 -7
- package/src/cli/targets.ts +87 -9
- package/src/cli/uninstall.ts +28 -8
- package/src/cli/usage.ts +2 -1
- package/src/cli/workspace-check.ts +71 -0
- package/src/core/bash-exec.ts +8 -2
- package/src/core/bus-events.ts +32 -3
- package/src/core/cache-telemetry.ts +3 -2
- package/src/core/compile-cache.ts +11 -1
- package/src/core/config.ts +59 -6
- package/src/core/defaults.ts +27 -5
- package/src/core/diagnostics.ts +25 -0
- package/src/core/event-bus.ts +2 -1
- package/src/core/gateway-routing.ts +10 -3
- package/src/core/git-commit-attribution.ts +2 -1
- package/src/core/naming-compat.ts +6 -4
- package/src/core/package-root.ts +0 -9
- package/src/core/path-canonical.ts +143 -24
- package/src/core/residency-target-key.ts +2 -6
- package/src/core/run-overrides.ts +1 -1
- package/src/core/settings-awareness.ts +108 -0
- package/src/core/settings-controls.ts +673 -0
- package/src/core/settings-navigation.ts +116 -0
- package/src/core/theme-token-hex.ts +19 -9
- package/src/core/turn-constraints.ts +52 -0
- package/src/domains/agents/builtins/scout.md +7 -17
- package/src/domains/agents/catalog.ts +5 -1
- package/src/domains/agents/extension.ts +2 -1
- package/src/domains/agents/registry.ts +4 -3
- package/src/domains/agents/result-contract.ts +132 -1
- package/src/domains/config/classify.ts +11 -7
- package/src/domains/config/extension.ts +5 -1
- package/src/domains/config/keybindings.ts +2 -2
- package/src/domains/context/codewiki/coordinator.ts +10 -0
- package/src/domains/context/worker/snapshot.ts +6 -3
- package/src/domains/dispatch/active-route-planner.ts +2 -0
- package/src/domains/dispatch/agent-candidates.ts +5 -1
- package/src/domains/dispatch/capability-match.ts +1 -1
- package/src/domains/dispatch/contract.ts +28 -0
- package/src/domains/dispatch/event-pump.ts +37 -3
- package/src/domains/dispatch/extension.ts +391 -48
- package/src/domains/dispatch/failure-classification.ts +37 -2
- package/src/domains/dispatch/receipt-integrity.ts +3 -0
- package/src/domains/dispatch/run-identity.ts +10 -3
- package/src/domains/dispatch/target-breaker.ts +163 -0
- package/src/domains/dispatch/types.ts +29 -2
- package/src/domains/dispatch/worker-model-loads.ts +66 -0
- package/src/domains/dispatch/worker-protocol.ts +20 -1
- package/src/domains/dispatch/worker-spawn.ts +28 -2
- package/src/domains/eval/artifacts/redact.ts +9 -0
- package/src/domains/eval/metrics/noop.ts +61 -0
- package/src/domains/eval/reports/junit.ts +5 -1
- package/src/domains/eval/reports/text.ts +7 -0
- package/src/domains/eval/runners/clio-run.ts +19 -8
- package/src/domains/eval/runners/external-command.ts +29 -4
- package/src/domains/eval/schema/adapter.ts +6 -2
- package/src/domains/eval/schema/suite.ts +2 -0
- package/src/domains/eval/schema/validate.ts +3 -0
- package/src/domains/eval/suites/run.ts +167 -26
- package/src/domains/evidence/detail.ts +3 -2
- package/src/domains/extensions/operator-runtime.ts +11 -4
- package/src/domains/gateway/mcp/client.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +42 -26
- package/src/domains/lifecycle/migrations/2026-09-18-ollama-runtime-id.ts +38 -0
- package/src/domains/lifecycle/migrations/index.ts +2 -0
- package/src/domains/middleware/demo-guidance.ts +36 -0
- package/src/domains/middleware/dispatch-nudge.ts +1 -1
- package/src/domains/middleware/memory-intervention.ts +51 -4
- package/src/domains/middleware/runtime.ts +5 -4
- package/src/domains/middleware/skills-reminder.ts +29 -52
- package/src/domains/middleware/task-nudge.ts +1 -0
- package/src/domains/middleware/watchdog.ts +4 -0
- package/src/domains/observability/extension.ts +2 -1
- package/src/domains/observability/out-of-turn-usage.ts +3 -2
- package/src/domains/observability/projection.ts +3 -2
- package/src/domains/observability/worker-progress.ts +48 -0
- package/src/domains/prompts/compiler.ts +148 -52
- package/src/domains/prompts/contract.ts +3 -3
- package/src/domains/prompts/demo-guidance.ts +8 -0
- package/src/domains/prompts/extension.ts +12 -7
- package/src/domains/prompts/fragments/identity/clio.md +2 -1
- package/src/domains/prompts/fragments/identity/docs-routing.md +2 -0
- package/src/domains/prompts/fragments/identity/self-awareness.md +4 -0
- package/src/domains/prompts/fragments/operating/contract.md +16 -7
- package/src/domains/prompts/fragments/operating/delegation.md +29 -13
- package/src/domains/prompts/fragments/operating/skills.md +18 -10
- package/src/domains/prompts/fragments/operating/worker.md +2 -0
- package/src/domains/providers/cache-deployment.ts +45 -2
- package/src/domains/providers/contract.ts +52 -11
- package/src/domains/providers/extension.ts +230 -53
- package/src/domains/providers/model-discovery.ts +22 -8
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +5 -7
- package/src/domains/providers/plugins.ts +3 -4
- package/src/domains/providers/probe/fingerprint.ts +2 -2
- package/src/domains/providers/probe/reasoning.ts +9 -16
- package/src/domains/providers/probe/tool-call.ts +236 -0
- package/src/domains/providers/registry.ts +51 -8
- package/src/domains/providers/runtime-resolution.ts +60 -12
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -1
- package/src/domains/providers/runtimes/builtins.ts +2 -2
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +57 -41
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -1
- package/src/domains/providers/runtimes/common/ollama-model-ids.ts +11 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +53 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +3 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +7 -13
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +7 -17
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +1 -0
- package/src/domains/providers/runtimes/local-native/ollama.ts +211 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +77 -65
- package/src/domains/providers/support.ts +1 -1
- package/src/domains/providers/types/local-model-quirks.ts +2 -3
- package/src/domains/providers/types/runtime-descriptor.ts +23 -3
- package/src/domains/providers/types/target-descriptor.ts +15 -3
- package/src/domains/resources/collision.ts +7 -2
- package/src/domains/resources/index.ts +1 -0
- package/src/domains/resources/library-actions.ts +4 -2
- package/src/domains/resources/library-inventory.ts +6 -2
- package/src/domains/resources/prompts/loader.ts +20 -7
- package/src/domains/resources/skills/availability.ts +56 -0
- package/src/domains/resources/skills/loader.ts +20 -9
- package/src/domains/safety/action-classifier.ts +282 -31
- package/src/domains/safety/audit.ts +2 -1
- package/src/domains/safety/autonomy.ts +54 -11
- package/src/domains/safety/decision-presentation.ts +17 -4
- package/src/domains/safety/finish-contract-registration.ts +25 -1
- package/src/domains/safety/finish-contract.ts +20 -5
- package/src/domains/safety/path-policy.ts +6 -2
- package/src/domains/safety/policy-engine.ts +168 -48
- package/src/domains/safety/protected-artifacts.ts +527 -16
- package/src/domains/safety/read-scope.ts +120 -0
- package/src/domains/safety/skill-authority.ts +52 -16
- package/src/domains/scheduling/cluster.ts +14 -3
- package/src/domains/scheduling/contract.ts +7 -0
- package/src/domains/scheduling/extension.ts +20 -9
- package/src/domains/scheduling/local-capacity.ts +160 -0
- package/src/domains/session/context-accounting.ts +44 -31
- package/src/domains/session/context-ledger.ts +10 -3
- package/src/domains/session/entries.ts +4 -0
- package/src/domains/session/history.ts +1 -1
- package/src/domains/session/prompt-cache.ts +1 -0
- package/src/domains/session/prompt-manifest.ts +3 -1
- package/src/domains/session/retry.ts +4 -6
- package/src/domains/session/task-board.ts +19 -4
- package/src/domains/session/tree/preview.ts +3 -2
- package/src/engine/acp/commands.ts +653 -0
- package/src/engine/acp/server.ts +639 -20
- package/src/engine/acp/tool-mediator.ts +30 -7
- package/src/engine/acp/types.ts +58 -0
- package/src/engine/agent.ts +55 -10
- package/src/engine/ai.ts +11 -2
- package/src/engine/api-registry.ts +5 -4
- package/src/engine/apis/degraded-inference.ts +243 -0
- package/src/engine/apis/llamacpp-residency.ts +50 -6
- package/src/engine/apis/lmstudio-residency.ts +3 -5
- package/src/engine/apis/lmstudio.ts +137 -31
- package/src/engine/apis/ollama-http.ts +118 -0
- package/src/engine/apis/ollama-native.ts +216 -97
- package/src/engine/apis/openai-completions.ts +191 -189
- package/src/engine/apis/output-budget.ts +3 -1
- package/src/engine/apis/residency-lock.ts +2 -1
- package/src/engine/apis/residency.ts +339 -89
- package/src/engine/apis/sampling-overrides.ts +23 -2
- package/src/engine/apis/types.ts +1 -2
- package/src/engine/claude/tool-safety.ts +30 -5
- package/src/engine/context.ts +13 -0
- package/src/engine/env-api-keys.ts +2 -1
- package/src/engine/gemma-channel-filter.ts +3 -2
- package/src/engine/instrumented-tui.ts +25 -0
- package/src/engine/loop-guard.ts +172 -6
- package/src/engine/pi-mono-names.ts +16 -0
- package/src/engine/prewarm.ts +44 -15
- package/src/engine/provider-payload.ts +52 -14
- package/src/engine/session.ts +4 -2
- package/src/engine/worker-events.ts +9 -1
- package/src/engine/worker-runtime.ts +269 -42
- package/src/engine/worker-tools.ts +8 -3
- package/src/entry/boot-options.ts +23 -0
- package/src/entry/orchestrator.ts +207 -36
- package/src/interactive/assistant-generation-timing.ts +52 -0
- package/src/interactive/chat-loop-messages.ts +4 -1
- package/src/interactive/chat-loop.ts +59 -9
- package/src/interactive/chat-panel.ts +10 -1
- package/src/interactive/clio-editor.ts +51 -79
- package/src/interactive/context-meter.ts +1 -0
- package/src/interactive/context-overlay.ts +21 -8
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/dispatch-board.ts +39 -8
- package/src/interactive/editor-bash.ts +0 -34
- package/src/interactive/editor-rails.ts +43 -0
- package/src/interactive/editor-submit.ts +34 -2
- package/src/interactive/footer/dashboard.ts +67 -38
- package/src/interactive/footer/demo-hints.ts +40 -0
- package/src/interactive/footer/key-hints.ts +21 -0
- package/src/interactive/footer/notifications.ts +1 -1
- package/src/interactive/footer/pages.ts +486 -0
- package/src/interactive/footer/system-metrics.ts +147 -0
- package/src/interactive/footer/widgets.ts +158 -63
- package/src/interactive/footer-panel.ts +29 -7
- package/src/interactive/interactive-application.ts +109 -21
- package/src/interactive/interactive-event-projection.ts +6 -2
- package/src/interactive/interactive-presentation.ts +25 -29
- package/src/interactive/interactive-slash-runtime.ts +32 -18
- package/src/interactive/interactive-subscriptions.ts +25 -5
- package/src/interactive/interactive-tickers.ts +21 -5
- package/src/interactive/keybinding-manager.ts +9 -0
- package/src/interactive/overlay-frame.ts +29 -7
- package/src/interactive/overlay-lifecycle.ts +5 -3
- package/src/interactive/overlay-model-selectors.ts +4 -0
- package/src/interactive/overlay-permission-lifecycle.ts +6 -5
- package/src/interactive/overlays/ask-user.ts +103 -110
- package/src/interactive/overlays/help-reference.ts +1 -0
- package/src/interactive/overlays/message-picker.ts +3 -29
- package/src/interactive/overlays/session-selector.ts +3 -2
- package/src/interactive/overlays/settings-sections.ts +2 -30
- package/src/interactive/overlays/settings.ts +310 -607
- package/src/interactive/permission-hint.ts +3 -3
- package/src/interactive/permission-overlay.ts +45 -27
- package/src/interactive/renderers/doctor-report.ts +43 -0
- package/src/interactive/renderers/tool-execution.ts +87 -62
- package/src/interactive/renderers/worker-entry.ts +76 -3
- package/src/interactive/side-question.ts +3 -1
- package/src/interactive/slash-commands.ts +78 -23
- package/src/interactive/startup-background.ts +131 -0
- package/src/interactive/startup-diagnostics.ts +16 -0
- package/src/interactive/status/state-machine.ts +16 -3
- package/src/interactive/status/types.ts +2 -0
- package/src/interactive/status/verbs.ts +1 -1
- package/src/interactive/terminal-lease.ts +26 -22
- package/src/interactive/theme/components.ts +1 -1
- package/src/interactive/theme/rules.ts +1 -1
- package/src/interactive/theme/tokens.ts +16 -10
- package/src/interactive/transcript-detail.ts +4 -0
- package/src/interactive/turn-context.ts +56 -20
- package/src/interactive/turn-middleware.ts +57 -9
- package/src/interactive/turn-prewarm.ts +121 -18
- package/src/interactive/turn-recovery.ts +10 -8
- package/src/interactive/turn-runtime.ts +74 -29
- package/src/interactive/turn-state.ts +3 -0
- package/src/interactive/welcome-art.ts +36 -0
- package/src/interactive/welcome-dashboard.ts +209 -49
- package/src/interactive/worker-replay.ts +4 -0
- package/src/interactive/worker-stream.ts +17 -2
- package/src/tools/agent-tools.ts +22 -1
- package/src/tools/builtin-tool-catalog.ts +2 -2
- package/src/tools/codewiki/code-nav.ts +1 -1
- package/src/tools/codewiki/shared.ts +39 -1
- package/src/tools/compete-worktrees.ts +8 -91
- package/src/tools/context/docs-engine.ts +44 -12
- package/src/tools/context/index.ts +126 -22
- package/src/tools/context/library.ts +1 -1
- package/src/tools/context/surface.ts +12 -7
- package/src/tools/core-bootstrap.ts +3 -0
- package/src/tools/dispatch-runner.ts +18 -0
- package/src/tools/dispatch-schema.ts +187 -206
- package/src/tools/edit.ts +46 -42
- package/src/tools/file-mutation-queue.ts +25 -26
- package/src/tools/gateway/clio-context-surface.ts +1 -1
- package/src/tools/gateway/index.ts +7 -3
- package/src/tools/gateway/mcp-capabilities.ts +5 -3
- package/src/tools/grep.ts +14 -2
- package/src/tools/ls.ts +1 -4
- package/src/tools/monitor.ts +14 -1
- package/src/tools/observation.ts +1 -3
- package/src/tools/path-utils.ts +51 -18
- package/src/tools/process-lease.ts +99 -0
- package/src/tools/read.ts +1 -1
- package/src/tools/registry.ts +71 -9
- package/src/tools/task-worktree.ts +296 -17
- package/src/tools/tasks.ts +29 -7
- package/src/tools/worker-evidence.ts +60 -1
- package/src/tools/worktree-root.ts +252 -0
- package/src/tools/write.ts +34 -30
- package/src/worker/entry.ts +18 -1
- package/src/worker/protocol.ts +54 -1
- package/src/worker/spec-contract.ts +22 -2
- package/dist/acp-ZWZCPS2A.js +0 -130
- package/dist/agents-LYSOWZUE.js +0 -150
- package/dist/auth-WBQGKWQ5.js +0 -551
- package/dist/background-BUMOBAQN.js +0 -37
- package/dist/builtins-ODRJOEDI.js +0 -22
- package/dist/chunk-2DRRZ57Q.js +0 -571
- package/dist/chunk-2JBZYUPY.js +0 -105
- package/dist/chunk-2VBWFXYE.js +0 -198
- package/dist/chunk-2X2R3UTH.js +0 -1018
- package/dist/chunk-32KJPXAM.js +0 -75
- package/dist/chunk-37LW32LZ.js +0 -32
- package/dist/chunk-3A3CUMKA.js +0 -54
- package/dist/chunk-3AND2EFU.js +0 -215
- package/dist/chunk-3RDHGNU7.js +0 -647
- package/dist/chunk-3SUDBGEI.js +0 -1323
- package/dist/chunk-3TQN67I2.js +0 -396
- package/dist/chunk-3U4BL2EV.js +0 -103
- package/dist/chunk-3UQADNG2.js +0 -302
- package/dist/chunk-434LRQ6Z.js +0 -13441
- package/dist/chunk-4ATBOFRP.js +0 -7802
- package/dist/chunk-4DNL43EZ.js +0 -139
- package/dist/chunk-4HFJKRGZ.js +0 -5250
- package/dist/chunk-555E2WVV.js +0 -322
- package/dist/chunk-5GZICIYO.js +0 -462
- package/dist/chunk-5PHVPU4G.js +0 -160
- package/dist/chunk-5RTEFNBP.js +0 -197
- package/dist/chunk-64XJW7NT.js +0 -380
- package/dist/chunk-6TKOFFGE.js +0 -1058
- package/dist/chunk-6UJ7RDI7.js +0 -1143
- package/dist/chunk-7FBCRWVT.js +0 -1801
- package/dist/chunk-7JSOSVLP.js +0 -283
- package/dist/chunk-7N3OLLSL.js +0 -637
- package/dist/chunk-7QQRPB2E.js +0 -915
- package/dist/chunk-A6DULIMH.js +0 -986
- package/dist/chunk-AB3QXXBC.js +0 -123
- package/dist/chunk-ACCECAH4.js +0 -49
- package/dist/chunk-AM6CEP2K.js +0 -2120
- package/dist/chunk-AUHVBIDW.js +0 -19
- package/dist/chunk-AY4XE6GN.js +0 -665
- package/dist/chunk-BBA2TAWV.js +0 -667
- package/dist/chunk-BFPHMSK7.js +0 -169
- package/dist/chunk-BMNVVKEW.js +0 -604
- package/dist/chunk-CKK25WN3.js +0 -72
- package/dist/chunk-CTGZCEI6.js +0 -33
- package/dist/chunk-DIAJYJYG.js +0 -446
- package/dist/chunk-DVNAPPXU.js +0 -27
- package/dist/chunk-DXVMLM3Z.js +0 -92
- package/dist/chunk-E3LEPLQ2.js +0 -68
- package/dist/chunk-EHZRAB4U.js +0 -63
- package/dist/chunk-EM2DIQAJ.js +0 -179
- package/dist/chunk-EM2WNQS2.js +0 -93
- package/dist/chunk-ETF4ROKH.js +0 -595
- package/dist/chunk-F2YM3JY4.js +0 -22513
- package/dist/chunk-FEBQWHJT.js +0 -1023
- package/dist/chunk-FPS4R2RN.js +0 -1975
- package/dist/chunk-GD55RTIW.js +0 -33
- package/dist/chunk-GJDRMBDI.js +0 -573
- package/dist/chunk-GREYLTZ5.js +0 -658
- package/dist/chunk-H2WSCZZT.js +0 -238
- package/dist/chunk-H6IUCY6Q.js +0 -117
- package/dist/chunk-H72DCH3E.js +0 -563
- package/dist/chunk-H7TXJR23.js +0 -705
- package/dist/chunk-HBJQQTKM.js +0 -40
- package/dist/chunk-HCVKSGNZ.js +0 -990
- package/dist/chunk-HVCAY2FH.js +0 -67
- package/dist/chunk-I47EJPYL.js +0 -1377
- package/dist/chunk-IALGWTLO.js +0 -36
- package/dist/chunk-IALZJE37.js +0 -1710
- package/dist/chunk-IC7JXLOM.js +0 -1577
- package/dist/chunk-IOSVTTCD.js +0 -108
- package/dist/chunk-IPTPMLA6.js +0 -475
- package/dist/chunk-IZZI3SKQ.js +0 -128
- package/dist/chunk-JABWPKFY.js +0 -27
- package/dist/chunk-JIYWMQZ5.js +0 -175
- package/dist/chunk-JKU34ACI.js +0 -693
- package/dist/chunk-JOBN2YQQ.js +0 -176
- package/dist/chunk-JOL2QRLE.js +0 -152
- package/dist/chunk-JTR3VSV3.js +0 -44
- package/dist/chunk-JU6MAMRJ.js +0 -362
- package/dist/chunk-JURMQWVJ.js +0 -15
- package/dist/chunk-K2BLQC5E.js +0 -262
- package/dist/chunk-K3XN4LZ4.js +0 -402
- package/dist/chunk-KIVFXGBM.js +0 -688
- package/dist/chunk-KKRXONXG.js +0 -43
- package/dist/chunk-KOAHT3N2.js +0 -395
- package/dist/chunk-KP5BPXR3.js +0 -73
- package/dist/chunk-KQ6IDQIB.js +0 -39
- package/dist/chunk-KRJQG47M.js +0 -1289
- package/dist/chunk-KW6OJ7IY.js +0 -221
- package/dist/chunk-L3NBWLSN.js +0 -314
- package/dist/chunk-L4RUTLRL.js +0 -59
- package/dist/chunk-LGTVWPRN.js +0 -47
- package/dist/chunk-LSQW6KZO.js +0 -200
- package/dist/chunk-LTR5QCLS.js +0 -446
- package/dist/chunk-LWJYOHT3.js +0 -165
- package/dist/chunk-M6YLF66Z.js +0 -2687
- package/dist/chunk-MJ4QEJVT.js +0 -185
- package/dist/chunk-MO65K5CH.js +0 -1148
- package/dist/chunk-MTOZEQHL.js +0 -637
- package/dist/chunk-MZDPF35R.js +0 -45
- package/dist/chunk-MZKYVIWW.js +0 -188
- package/dist/chunk-NBPA5QM6.js +0 -386
- package/dist/chunk-NMBEW4PP.js +0 -688
- package/dist/chunk-NPLLK3HO.js +0 -3610
- package/dist/chunk-NSYGPIVW.js +0 -39
- package/dist/chunk-NXTV5OI5.js +0 -1020
- package/dist/chunk-NYDG4QP4.js +0 -689
- package/dist/chunk-OA2GDACN.js +0 -146
- package/dist/chunk-PJI57EC6.js +0 -236
- package/dist/chunk-PJJBUGMR.js +0 -4484
- package/dist/chunk-PNJE7JPS.js +0 -50
- package/dist/chunk-PP23PZEV.js +0 -1347
- package/dist/chunk-PPIFDSBK.js +0 -409
- package/dist/chunk-PTFISXQO.js +0 -319
- package/dist/chunk-QB33Z5S7.js +0 -1865
- package/dist/chunk-QGNII5VC.js +0 -110
- package/dist/chunk-QH3ZTUOA.js +0 -113
- package/dist/chunk-QI72X67S.js +0 -481
- package/dist/chunk-QJMRYTCX.js +0 -56
- package/dist/chunk-QKHZZFKH.js +0 -98
- package/dist/chunk-RDKX2PME.js +0 -66
- package/dist/chunk-RL7LJYN4.js +0 -66
- package/dist/chunk-RPMNIFRY.js +0 -65
- package/dist/chunk-RQROVOV3.js +0 -670
- package/dist/chunk-S34A7BSP.js +0 -97
- package/dist/chunk-SJETVJHX.js +0 -119
- package/dist/chunk-SJMNU4ZS.js +0 -634
- package/dist/chunk-SL2RDHKO.js +0 -19
- package/dist/chunk-SLLG2G44.js +0 -85
- package/dist/chunk-SQAZN2V3.js +0 -2744
- package/dist/chunk-SQBT46OF.js +0 -814
- package/dist/chunk-SRCEQKQS.js +0 -165
- package/dist/chunk-TCUOGIL2.js +0 -52
- package/dist/chunk-TIWPKCVO.js +0 -42
- package/dist/chunk-U44YYLVV.js +0 -1529
- package/dist/chunk-UIU7MGZ3.js +0 -486
- package/dist/chunk-USBBEKHW.js +0 -177
- package/dist/chunk-VHKTOLEW.js +0 -1416
- package/dist/chunk-VPWGADBG.js +0 -3151
- package/dist/chunk-VQD7NH7Z.js +0 -356
- package/dist/chunk-VWFCAK34.js +0 -697
- package/dist/chunk-W5RM7YAH.js +0 -78
- package/dist/chunk-W72LLZAV.js +0 -243
- package/dist/chunk-WGRDABW7.js +0 -207
- package/dist/chunk-WWRV5RJI.js +0 -165
- package/dist/chunk-XCUDZQLX.js +0 -195
- package/dist/chunk-XFLSL7BT.js +0 -386
- package/dist/chunk-XJZEDCNT.js +0 -391
- package/dist/chunk-XLLEL3K7.js +0 -709
- package/dist/chunk-XNZWWDC3.js +0 -686
- package/dist/chunk-XRECG65F.js +0 -308
- package/dist/chunk-XTQ7MEJG.js +0 -457
- package/dist/chunk-XW2UZICE.js +0 -372
- package/dist/chunk-Y3M2T5RO.js +0 -891
- package/dist/chunk-YGDMBK7O.js +0 -567
- package/dist/chunk-YJCCMYYT.js +0 -125
- package/dist/chunk-YPQOPFP7.js +0 -797
- package/dist/chunk-YQYINEJI.js +0 -132
- package/dist/chunk-ZF6CV4WZ.js +0 -5614
- package/dist/chunk-ZKJU55MX.js +0 -326
- package/dist/chunk-ZKQ63XZ5.js +0 -1196
- package/dist/chunk-ZKVMDNAN.js +0 -962
- package/dist/chunk-ZST3FRCV.js +0 -132
- package/dist/clio-JUDCLNHC.js +0 -26
- package/dist/clio-context-tools-FT672MNZ.js +0 -136
- package/dist/code-nav-7OVCTP2Z.js +0 -688
- package/dist/compile-cache-WJEPUZEJ.js +0 -16
- package/dist/components-OZXZMDWU.js +0 -674
- package/dist/config-P3ZQVF63.js +0 -275
- package/dist/config-graph-GKAOBAS5.js +0 -160
- package/dist/configure-25LRYZJG.js +0 -86
- package/dist/context-72VQV7JX.js +0 -73
- package/dist/context-COWRWXP3.js +0 -286
- package/dist/context-WB3D474G.js +0 -344
- package/dist/context-clear-Y4LYMWC6.js +0 -192
- package/dist/context-index-W6A4V7OC.js +0 -120
- package/dist/context-map-DKL3QT6D.js +0 -555
- package/dist/context-working-set-TMZYVC7A.js +0 -1560
- package/dist/data-tool-KMBWKKWR.js +0 -2987
- package/dist/detail-4GLROGY5.js +0 -123
- package/dist/dispatch-runner-TR3LBP5P.js +0 -2446
- package/dist/docs-ZK777W2G.js +0 -101
- package/dist/doctor-WC4OV2OB.js +0 -814
- package/dist/eval-FUNWJNUJ.js +0 -5050
- package/dist/eval-inventory-CX24K2JT.js +0 -260
- package/dist/evals-L73EBHSU.js +0 -104
- package/dist/evidence-AVJ2RTHX.js +0 -392
- package/dist/evidence-P4NZOAK7.js +0 -233
- package/dist/evidence-Y55WKYHH.js +0 -246
- package/dist/evolve-MAWKRYWF.js +0 -617
- package/dist/extensions-PYQH3H47.js +0 -308
- package/dist/fleet-M4H2QBWT.js +0 -268
- package/dist/fleet-ULBXXRDR.js +0 -923
- package/dist/fleet-commands-7NNC4JZU.js +0 -76
- package/dist/fleet-decisions-EHEY7KPU.js +0 -52
- package/dist/fleet-graph-LQ2AHZT3.js +0 -136
- package/dist/fleet-inspect-5IGBIIYZ.js +0 -312
- package/dist/fleet-new-RCKGSRDV.js +0 -48
- package/dist/fleet-preflight-UTTNOKMG.js +0 -27
- package/dist/fleet-validate-YGILJKA6.js +0 -91
- package/dist/fleet-verify-AUWTCDKR.js +0 -210
- package/dist/fleet-view-TGUFCY5A.js +0 -127
- package/dist/init-GFN2Z7NF.js +0 -333
- package/dist/install-3RZDDP23.js +0 -13
- package/dist/install-6PIF6F6W.js +0 -19
- package/dist/interop-EF5JUWWK.js +0 -246
- package/dist/inventory-I6VJDDYF.js +0 -127
- package/dist/library-3J5IO2OJ.js +0 -75
- package/dist/library-IJTOFTDS.js +0 -307
- package/dist/library-Z3KZSHPE.js +0 -492
- package/dist/library-import-IMKFLDHX.js +0 -183
- package/dist/library-inventory-CQP5D6GU.js +0 -56
- package/dist/library-validation-33UTX7AI.js +0 -42
- package/dist/mcp-5FWZKUS6.js +0 -26
- package/dist/memory-36CWN67Y.js +0 -520
- package/dist/models-KQ6PQJJQ.js +0 -302
- package/dist/monitor-XX6ZD6KC.js +0 -785
- package/dist/orchestrator-SK6HDAOP.js +0 -42067
- package/dist/panes-L27QRXUH.js +0 -74
- package/dist/panes-LXZIWNOZ.js +0 -103
- package/dist/paths-7DJDU4P4.js +0 -67
- package/dist/preload-K2TDYI4Y.js +0 -124
- package/dist/registry-DESGAXWK.js +0 -11
- package/dist/reset-73VU3XNT.js +0 -345
- package/dist/resources-3BYJYVYL.js +0 -181
- package/dist/run-AR7PY6GW.js +0 -896
- package/dist/run-script-H2KUDIII.js +0 -41
- package/dist/settings-3VMBMWID.js +0 -72
- package/dist/share-HVWH4FPF.js +0 -293
- package/dist/skills-5TYEY75Q.js +0 -100
- package/dist/skills-eval-CK3MD63Z.js +0 -1083
- package/dist/skills-inventory-KSFYG3I6.js +0 -138
- package/dist/slash-commands-DMVHML7P.js +0 -98
- package/dist/steer-XCD6V3EW.js +0 -77
- package/dist/support-JAZL6VBR.js +0 -38
- package/dist/system-3TDQRMZZ.js +0 -116
- package/dist/targets-EZKHAYRN.js +0 -1117
- package/dist/tasks-SNEFHWYW.js +0 -36
- package/dist/terminal-lease-BNLFA4OF.js +0 -419
- package/dist/tools-7IM6BDCE.js +0 -28
- package/dist/trace-C3MBGD4S.js +0 -524
- package/dist/tree-sitter-AQUUOSYM.js +0 -4673
- package/dist/tui-primitives-36BY2774.js +0 -18
- package/dist/uninstall-WWLOSZ42.js +0 -432
- package/dist/upgrade-ETK2JNSJ.js +0 -297
- package/dist/usage-S2HOB7BZ.js +0 -1065
- package/dist/verifiers-QDTEVH7R.js +0 -632
- package/dist/verify-SUKUK6XM.js +0 -31
- package/dist/version-RFPKO6T7.js +0 -21
- package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +0 -1
- package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +0 -1
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +0 -36
- package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +0 -129
- package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +0 -38
- package/dist/web/client/assets/channel-c4EeUUqA.js +0 -1
- package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +0 -62
- package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +0 -2
- package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +0 -125
- package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +0 -1
- package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +0 -72
- package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +0 -1
- package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +0 -231
- package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +0 -1
- package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +0 -10
- package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +0 -1
- package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +0 -1
- package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +0 -1
- package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +0 -168
- package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +0 -88
- package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +0 -206
- package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +0 -1
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +0 -1
- package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +0 -1
- package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +0 -62
- package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +0 -4
- package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +0 -30
- package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +0 -41
- package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +0 -3
- package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +0 -24
- package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +0 -24
- package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +0 -1
- package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +0 -99
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +0 -1
- package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +0 -1
- package/dist/web/client/assets/framework-YGoR34M4.js +0 -9
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +0 -292
- package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +0 -1
- package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +0 -106
- package/dist/web/client/assets/index-CVcy0FAn.js +0 -75
- package/dist/web/client/assets/index-Dsi52apB.css +0 -1
- package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +0 -1
- package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +0 -2
- package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +0 -70
- package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +0 -139
- package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +0 -89
- package/dist/web/client/assets/line-BIDAcEtX.js +0 -1
- package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +0 -7
- package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +0 -44
- package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +0 -96
- package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +0 -1
- package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +0 -1
- package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +0 -1
- package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +0 -39
- package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +0 -7
- package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +0 -1
- package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +0 -1
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +0 -1
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +0 -1
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +0 -1
- package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +0 -1
- package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +0 -84
- package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +0 -40
- package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +0 -162
- package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +0 -1
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +0 -1
- package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +0 -1
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +0 -8
- package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +0 -120
- package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +0 -1
- package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +0 -1
- package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +0 -34
- package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +0 -1
- package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +0 -78
- package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +0 -7
- package/dist/web/client/index.html +0 -6
- package/dist/web/ops-worker.js +0 -37
- package/dist/web/reads-worker.js +0 -1726
- package/dist/web/server.js +0 -8499
- package/dist/web-EMGUGGEI.js +0 -13
- package/dist/web-fetch-6BRRVQON.js +0 -805
- package/dist/wiki-generate-XHSJTDOP.js +0 -627
- package/dist/with-panes-Z6BTEHMZ.js +0 -628
- package/evals/README.md +0 -9
- package/evals/behavioral-corpus-grader.mjs +0 -236
- package/evals/behavioral-machinery-baseline.json +0 -2276
- package/evals/behavioral-machinery-driver.ts +0 -250
- package/evals/behavioral-machinery-support.ts +0 -254
- package/evals/behavioral-machinery.yaml +0 -614
- package/evals/behavioral-model-negative-control.yaml +0 -69
- package/evals/behavioral-model.yaml +0 -482
- package/evals/fixtures/behavioral-facts.txt +0 -3
- package/evals/fixtures/behavioral-main.ts +0 -7
- package/evals/fixtures/decoy/note.txt +0 -2
- package/evals/fixtures/docs-retrieval.json +0 -102
- package/evals/fixtures/private/credentials.txt +0 -1
- package/evals/fixtures/scalar-decision.json +0 -17
- package/evals/fixtures/scout-citation-pipeline.json +0 -55
- package/evals/fixtures/source-explanation.json +0 -74
- package/evals/fixtures/tool-arguments.json +0 -18
- package/evals/fixtures/tool-surface/read.txt +0 -4
- package/evals/fixtures/tool-surface/subdir/keep.txt +0 -1
- package/evals/no-edit-memory-grader.mjs +0 -149
- package/evals/scalar-decision-grader.py +0 -41
- package/evals/scalar-decision-machinery.ts +0 -145
- package/evals/source-explanation-grader.mjs +0 -118
- package/evals/tool-surface-grader.mjs +0 -53
- package/evals/tool-surface-model.yaml +0 -274
- package/evals/tracked-metrics-baseline.yaml +0 -229
- package/evals/tracked-metrics-grader.mjs +0 -129
- package/src/cli/web.ts +0 -79
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +0 -122
- /package/dist/assets/{web-notices → gui-notices}/@hono__node-server-LICENSE +0 -0
- /package/dist/assets/{web-notices → gui-notices}/hono-LICENSE +0 -0
- /package/dist/{web → gui}/client/THIRD_PARTY_LICENSES.md +0 -0
- /package/dist/{web → gui}/client/assets/arc-Pry-7G1_.js +0 -0
- /package/dist/{web → gui}/client/assets/array-BifhSqXX.js +0 -0
- /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-FOHPRMQF-CoA4358r.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-JWPE2WC7-DVXcaiue.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-XXDRQBXY-DqAYeljN.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +0 -0
- /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
- /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +0 -0
- /package/dist/{web → gui}/client/assets/cytoscape.esm-c2aL46s-.js +0 -0
- /package/dist/{web → gui}/client/assets/dagre-C-rnJpZF.js +0 -0
- /package/dist/{web → gui}/client/assets/defaultLocale-BFoDCU3G.js +0 -0
- /package/dist/{web → gui}/client/assets/dist-v5Q1xZ2K.js +0 -0
- /package/dist/{web → gui}/client/assets/graphlib-DS17s2tU.js +0 -0
- /package/dist/{web → gui}/client/assets/init-C-OQMol4.js +0 -0
- /package/dist/{web → gui}/client/assets/katex-ZlcWpGUi.js +0 -0
- /package/dist/{web → gui}/client/assets/linear-SzVmGSw4.js +0 -0
- /package/dist/{web → gui}/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/ordinal-BDEzSJ7C.js +0 -0
- /package/dist/{web → gui}/client/assets/path-fybaL0A-.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-bash-D6zCJ74D.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-c-04YixN25.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-clike-DapgWyxx.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-core-BtsZdCS6.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-cpp-C-lJbC-6.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-css-CPgOzxXp.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-diff-BF8m0_mq.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-docker-DkT6yOFj.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-fortran-Be5x3y1V.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-go-C_8qAH5n.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-ini-BESK3y0r.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-javascript-BnO-swvr.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-json-Dp_-W-Hv.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-jsx-D-D0NWtC.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-julia-DIjOgiAV.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-latex-DNMbqcH_.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-makefile-CRKWLQ8l.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-markdown-C0FPJ1Iz.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-markup-Cp04rIa1.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-matlab-D-nk08al.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-python-CfiSVtM6.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-r-QmNGR8LX.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-rust-Bu9N8X3N.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-shell-session-Be4UuYoM.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-sql-CYhVDMEE.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-toml-DKb54GAT.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-tsx-p6J2Kc_4.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-typescript-BMqONzxf.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-yaml-C0JHu8gr.js +0 -0
- /package/dist/{web → gui}/client/assets/purify.es-ChwZkWde.js +0 -0
- /package/dist/{web → gui}/client/assets/rolldown-runtime-hePW80VL.js +0 -0
- /package/dist/{web → gui}/client/assets/rough.esm-Dy-Kn_BL.js +0 -0
- /package/dist/{web → gui}/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -0
- /package/dist/{web → gui}/client/assets/src-B6xuSHsQ.js +0 -0
- /package/dist/{web → gui}/client/clio-coder-logo.webp +0 -0
- /package/dist/{web → gui}/client/icon-192.png +0 -0
- /package/dist/{web → gui}/client/icon-512.png +0 -0
- /package/dist/{web → gui}/client/manifest.webmanifest +0 -0
- /package/dist/{web → gui}/client/offline.css +0 -0
- /package/dist/{web → gui}/client/offline.html +0 -0
- /package/dist/{web → gui}/client/offline.js +0 -0
- /package/dist/{web → gui}/client/sw.js +0 -0
|
@@ -0,0 +1,1577 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
detectInteropAgents,
|
|
4
|
+
interopStatePath,
|
|
5
|
+
inventoryText,
|
|
6
|
+
readInteropReport,
|
|
7
|
+
writeInteropReport
|
|
8
|
+
} from "./chunk-4A6YRGV4.js";
|
|
9
|
+
import {
|
|
10
|
+
loadPromptTemplates,
|
|
11
|
+
validateLibraryPackage
|
|
12
|
+
} from "./chunk-UX2L5CUD.js";
|
|
13
|
+
import {
|
|
14
|
+
fetchPluginSource,
|
|
15
|
+
loadSkills,
|
|
16
|
+
parseAgentRecipeSchema,
|
|
17
|
+
parsePluginGithubSource,
|
|
18
|
+
pluginLocalPath
|
|
19
|
+
} from "./chunk-LAR7DX5E.js";
|
|
20
|
+
import {
|
|
21
|
+
normalizedSkillHash
|
|
22
|
+
} from "./chunk-DNCE23JJ.js";
|
|
23
|
+
import {
|
|
24
|
+
PLUGIN_EXTENSION_KEY,
|
|
25
|
+
PLUGIN_SCHEMA,
|
|
26
|
+
installLibraryPackage,
|
|
27
|
+
isPluginId,
|
|
28
|
+
listInstalledPlugins,
|
|
29
|
+
pluginBaseDir,
|
|
30
|
+
readPluginInstallRecord,
|
|
31
|
+
readPluginManifest
|
|
32
|
+
} from "./chunk-NVPXXW2H.js";
|
|
33
|
+
import {
|
|
34
|
+
isSemanticVersion
|
|
35
|
+
} from "./chunk-BJH6WFIB.js";
|
|
36
|
+
import {
|
|
37
|
+
INTEROP_AGENT_KINDS,
|
|
38
|
+
interopAgentKind
|
|
39
|
+
} from "./chunk-5EQO5NWP.js";
|
|
40
|
+
import {
|
|
41
|
+
readSettings,
|
|
42
|
+
updateSettings
|
|
43
|
+
} from "./chunk-56XP4FJU.js";
|
|
44
|
+
import {
|
|
45
|
+
require_dist
|
|
46
|
+
} from "./chunk-B5GGDIHT.js";
|
|
47
|
+
import {
|
|
48
|
+
withStateFileLockSync
|
|
49
|
+
} from "./chunk-DVJL77SO.js";
|
|
50
|
+
import {
|
|
51
|
+
clioConfigDir
|
|
52
|
+
} from "./chunk-CTTI7G3T.js";
|
|
53
|
+
import {
|
|
54
|
+
__toESM,
|
|
55
|
+
init_esm_shims
|
|
56
|
+
} from "./chunk-ECBHH7LU.js";
|
|
57
|
+
|
|
58
|
+
// src/domains/interop/consent.ts
|
|
59
|
+
init_esm_shims();
|
|
60
|
+
var import_yaml = __toESM(require_dist(), 1);
|
|
61
|
+
var INHERITED_PROJECT_CONTEXT = "none";
|
|
62
|
+
function delegationEntryForKind(kind, defaults) {
|
|
63
|
+
const recipe = kind.acp;
|
|
64
|
+
if (recipe === void 0) throw new Error(`interop kind ${kind.id} has no ACP recipe`);
|
|
65
|
+
return {
|
|
66
|
+
id: kind.id,
|
|
67
|
+
command: recipe.command,
|
|
68
|
+
args: [...recipe.args],
|
|
69
|
+
connectTimeoutMs: defaults.connectTimeoutMs,
|
|
70
|
+
turnTimeoutMs: defaults.turnTimeoutMs,
|
|
71
|
+
permissionTimeoutMs: defaults.permissionTimeoutMs,
|
|
72
|
+
toolGovernance: "clio-coder-policy"
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function interopProposals(report, settings) {
|
|
76
|
+
const configured = new Set(settings.integrations.externalAgents.entries.map((agent) => agent.id));
|
|
77
|
+
const proposals = [];
|
|
78
|
+
for (const record2 of report.agents) {
|
|
79
|
+
const kind = interopAgentKind(record2.kind);
|
|
80
|
+
if (kind?.acp === void 0) continue;
|
|
81
|
+
if (record2.presence !== "present") continue;
|
|
82
|
+
if (configured.has(kind.id)) continue;
|
|
83
|
+
if (record2.decision !== void 0 && record2.decidedFingerprint === record2.fingerprint) continue;
|
|
84
|
+
proposals.push({
|
|
85
|
+
kind: kind.id,
|
|
86
|
+
label: kind.label,
|
|
87
|
+
fingerprint: record2.fingerprint,
|
|
88
|
+
entry: delegationEntryForKind(kind, settings.integrations.externalAgents.defaults),
|
|
89
|
+
needsNetworkInstall: record2.adapter !== "present"
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
return proposals;
|
|
93
|
+
}
|
|
94
|
+
function renderProposalEntry(proposal) {
|
|
95
|
+
return (0, import_yaml.stringify)([proposal.entry]).trimEnd();
|
|
96
|
+
}
|
|
97
|
+
function withStoredDecision(stored, fresh) {
|
|
98
|
+
if (stored === void 0) return fresh;
|
|
99
|
+
return {
|
|
100
|
+
...fresh,
|
|
101
|
+
...stored.decision !== void 0 ? { decision: stored.decision } : {},
|
|
102
|
+
...stored.decidedAt !== void 0 ? { decidedAt: stored.decidedAt } : {},
|
|
103
|
+
...stored.decidedFingerprint !== void 0 ? { decidedFingerprint: stored.decidedFingerprint } : {},
|
|
104
|
+
...stored.hintedFingerprint !== void 0 ? { hintedFingerprint: stored.hintedFingerprint } : {}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function updateRecords(ids, report, patch) {
|
|
108
|
+
const wanted = new Set(ids);
|
|
109
|
+
const touched = [];
|
|
110
|
+
withStateFileLockSync(interopStatePath(), () => {
|
|
111
|
+
const stored = readInteropReport();
|
|
112
|
+
const storedByKind = new Map(
|
|
113
|
+
(stored?.agents ?? []).map((record2) => [record2.kind, record2])
|
|
114
|
+
);
|
|
115
|
+
const byKind = new Map(storedByKind);
|
|
116
|
+
for (const record2 of report.agents) {
|
|
117
|
+
byKind.set(record2.kind, withStoredDecision(storedByKind.get(record2.kind), record2));
|
|
118
|
+
}
|
|
119
|
+
for (const id of wanted) {
|
|
120
|
+
const record2 = byKind.get(id);
|
|
121
|
+
if (record2 === void 0) continue;
|
|
122
|
+
byKind.set(id, patch(record2));
|
|
123
|
+
touched.push(id);
|
|
124
|
+
}
|
|
125
|
+
writeInteropReport({ version: 1, detectedAt: report.detectedAt, agents: [...byKind.values()] });
|
|
126
|
+
});
|
|
127
|
+
return touched;
|
|
128
|
+
}
|
|
129
|
+
function recordDecisions(ids, report, decision) {
|
|
130
|
+
const decidedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
131
|
+
return updateRecords(ids, report, (record2) => ({
|
|
132
|
+
...record2,
|
|
133
|
+
decision,
|
|
134
|
+
decidedAt,
|
|
135
|
+
decidedFingerprint: record2.fingerprint
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
function interopBootHint(report, settings) {
|
|
139
|
+
const fresh = interopProposals(report, settings).filter(
|
|
140
|
+
(proposal) => report.agents.find((agent) => agent.kind === proposal.kind)?.hintedFingerprint !== proposal.fingerprint
|
|
141
|
+
);
|
|
142
|
+
if (fresh.length === 0) return null;
|
|
143
|
+
updateRecords(
|
|
144
|
+
fresh.map((proposal) => proposal.kind),
|
|
145
|
+
report,
|
|
146
|
+
(record2) => ({ ...record2, hintedFingerprint: record2.fingerprint })
|
|
147
|
+
);
|
|
148
|
+
const names = fresh.map((proposal) => proposal.entry.id).join(", ");
|
|
149
|
+
return `clio-coder: ${names} detected on PATH and not configured. Run /interop to review.`;
|
|
150
|
+
}
|
|
151
|
+
function acceptInteropAgents(ids, report) {
|
|
152
|
+
const proposals = interopProposals(report, readSettings()).filter((proposal) => ids.includes(proposal.kind));
|
|
153
|
+
const diagnostics = [];
|
|
154
|
+
for (const id of ids) {
|
|
155
|
+
if (!proposals.some((proposal) => proposal.kind === id)) diagnostics.push(`${id} is not a pending proposal`);
|
|
156
|
+
}
|
|
157
|
+
if (proposals.length === 0) return { decided: [], wired: [], diagnostics };
|
|
158
|
+
const wired = [];
|
|
159
|
+
updateSettings((settings) => {
|
|
160
|
+
for (const proposal of proposals) {
|
|
161
|
+
if (settings.integrations.externalAgents.entries.some((agent) => agent.id === proposal.entry.id)) continue;
|
|
162
|
+
settings.integrations.externalAgents.entries.push({ ...proposal.entry, args: [...proposal.entry.args] });
|
|
163
|
+
wired.push(proposal.entry.id);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
const decided = recordDecisions(
|
|
167
|
+
proposals.map((proposal) => proposal.kind),
|
|
168
|
+
report,
|
|
169
|
+
"accepted"
|
|
170
|
+
);
|
|
171
|
+
return { decided, wired, diagnostics };
|
|
172
|
+
}
|
|
173
|
+
function declineInteropAgents(ids, report) {
|
|
174
|
+
return { decided: recordDecisions(ids, report, "declined"), wired: [], diagnostics: [] };
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// src/domains/interop/adopt.ts
|
|
178
|
+
init_esm_shims();
|
|
179
|
+
import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
180
|
+
import { tmpdir } from "node:os";
|
|
181
|
+
import path3 from "node:path";
|
|
182
|
+
|
|
183
|
+
// src/domains/interop/foreign.ts
|
|
184
|
+
init_esm_shims();
|
|
185
|
+
import { existsSync, lstatSync as lstatSync2, readdirSync as readdirSync2 } from "node:fs";
|
|
186
|
+
import path2 from "node:path";
|
|
187
|
+
|
|
188
|
+
// src/domains/interop/projection.ts
|
|
189
|
+
init_esm_shims();
|
|
190
|
+
var import_yaml2 = __toESM(require_dist(), 1);
|
|
191
|
+
import { createHash } from "node:crypto";
|
|
192
|
+
import { lstatSync, readdirSync, readFileSync, readlinkSync } from "node:fs";
|
|
193
|
+
import path from "node:path";
|
|
194
|
+
import { parse as parseToml } from "smol-toml";
|
|
195
|
+
var DATA_EXTENSIONS = /* @__PURE__ */ new Set([".md", ".txt", ".rst", ".csv", ".bib"]);
|
|
196
|
+
var FORBIDDEN_PARTS = /* @__PURE__ */ new Set([
|
|
197
|
+
"hooks",
|
|
198
|
+
"output-styles",
|
|
199
|
+
"scripts",
|
|
200
|
+
"tools",
|
|
201
|
+
"node_modules",
|
|
202
|
+
".git",
|
|
203
|
+
".claude-plugin",
|
|
204
|
+
".codex-plugin"
|
|
205
|
+
]);
|
|
206
|
+
var HOST_SKILL_KEYS = [
|
|
207
|
+
"audit",
|
|
208
|
+
"installed-hash",
|
|
209
|
+
"source-url",
|
|
210
|
+
"installed-by",
|
|
211
|
+
"hooks",
|
|
212
|
+
"mcpServers",
|
|
213
|
+
"allowed-tools",
|
|
214
|
+
"tools",
|
|
215
|
+
"context",
|
|
216
|
+
"agent",
|
|
217
|
+
"model",
|
|
218
|
+
"effort",
|
|
219
|
+
"user-invocable",
|
|
220
|
+
"disable-model-invocation",
|
|
221
|
+
"argument-hint",
|
|
222
|
+
"paths",
|
|
223
|
+
"when_to_use"
|
|
224
|
+
];
|
|
225
|
+
var PROMPT_KEYS = /* @__PURE__ */ new Set(["description", "argument-hint", "argumentHint"]);
|
|
226
|
+
function safeName(name) {
|
|
227
|
+
const value = name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "").slice(0, 45).replace(/-$/u, "");
|
|
228
|
+
if (!value) throw new Error("No safe resource identifier.");
|
|
229
|
+
return value;
|
|
230
|
+
}
|
|
231
|
+
function safeData(file) {
|
|
232
|
+
return !file.split("/").some((part) => FORBIDDEN_PARTS.has(part)) && DATA_EXTENSIONS.has(path.extname(file));
|
|
233
|
+
}
|
|
234
|
+
function listFiles(root, dir, out, depth = 0) {
|
|
235
|
+
if (depth > 12 || out.length > 4096) return;
|
|
236
|
+
let names;
|
|
237
|
+
try {
|
|
238
|
+
names = readdirSync(dir).sort();
|
|
239
|
+
} catch {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
for (const name of names) {
|
|
243
|
+
const file = path.join(dir, name);
|
|
244
|
+
const relative = path.relative(root, file).split(path.sep).join("/");
|
|
245
|
+
try {
|
|
246
|
+
const stat = lstatSync(file);
|
|
247
|
+
if (stat.isDirectory()) listFiles(root, file, out, depth + 1);
|
|
248
|
+
else out.push(relative);
|
|
249
|
+
} catch {
|
|
250
|
+
out.push(relative);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
function tree(root, dataOnly = false, omitted = []) {
|
|
255
|
+
const files = {};
|
|
256
|
+
let bytes = 0;
|
|
257
|
+
const visit = (dir, depth) => {
|
|
258
|
+
if (depth > 12) throw new Error("Source tree exceeds depth limit.");
|
|
259
|
+
if (lstatSync(dir).isSymbolicLink()) throw new Error("Symbolic links are not adoptable.");
|
|
260
|
+
for (const name of readdirSync(dir).sort()) {
|
|
261
|
+
const file = path.join(dir, name);
|
|
262
|
+
const relative = path.relative(root, file).split(path.sep).join("/");
|
|
263
|
+
if (dataOnly && relative.split("/").some((part) => FORBIDDEN_PARTS.has(part) || part === "fleets")) {
|
|
264
|
+
let isDirectory = false;
|
|
265
|
+
try {
|
|
266
|
+
isDirectory = lstatSync(file).isDirectory();
|
|
267
|
+
} catch {
|
|
268
|
+
}
|
|
269
|
+
if (isDirectory) listFiles(root, file, omitted);
|
|
270
|
+
else omitted.push(relative);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
const stat = lstatSync(file);
|
|
274
|
+
if (stat.isSymbolicLink() || !stat.isDirectory() && !stat.isFile())
|
|
275
|
+
throw new Error("Symbolic links and special files are not adoptable.");
|
|
276
|
+
if (stat.isDirectory()) visit(file, depth + 1);
|
|
277
|
+
else {
|
|
278
|
+
if (dataOnly && relative !== "plugin.json" && (!safeData(relative) || (stat.mode & 73) !== 0)) {
|
|
279
|
+
omitted.push(relative);
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
if ((stat.mode & 73) !== 0) throw new Error(`Executable file is not adoptable: ${path.relative(root, file)}`);
|
|
283
|
+
const text = inventoryText(file);
|
|
284
|
+
bytes += Buffer.byteLength(text);
|
|
285
|
+
if (bytes > 16 * 1024 * 1024 || Object.keys(files).length >= 2048)
|
|
286
|
+
throw new Error("Source tree exceeds adoption limits.");
|
|
287
|
+
files[relative] = text;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
visit(root, 0);
|
|
292
|
+
return files;
|
|
293
|
+
}
|
|
294
|
+
function reviewFingerprint(root) {
|
|
295
|
+
const hash = createHash("sha256");
|
|
296
|
+
let budget = 64 * 1024 * 1024;
|
|
297
|
+
let count = 0;
|
|
298
|
+
const visit = (dir, depth) => {
|
|
299
|
+
if (depth > 12) throw new Error("Source tree exceeds depth limit.");
|
|
300
|
+
for (const name of readdirSync(dir).sort()) {
|
|
301
|
+
if (++count > 8192) throw new Error("Source tree exceeds review limits.");
|
|
302
|
+
const file = path.join(dir, name);
|
|
303
|
+
const relative = path.relative(root, file).split(path.sep).join("/");
|
|
304
|
+
const stat = lstatSync(file);
|
|
305
|
+
hash.update(relative).update("\0");
|
|
306
|
+
if (stat.isSymbolicLink()) hash.update(`symlink:${readlinkSync(file)}`);
|
|
307
|
+
else if (stat.isDirectory()) {
|
|
308
|
+
hash.update("dir");
|
|
309
|
+
visit(file, depth + 1);
|
|
310
|
+
} else if (stat.isFile()) {
|
|
311
|
+
hash.update(`file:${stat.mode & 511}:${stat.size}:`);
|
|
312
|
+
budget -= stat.size;
|
|
313
|
+
if (budget < 0) throw new Error("Source tree exceeds review limits.");
|
|
314
|
+
hash.update(readFileSync(file));
|
|
315
|
+
} else hash.update("special");
|
|
316
|
+
hash.update("\0");
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
visit(root, 0);
|
|
320
|
+
return hash.digest("hex");
|
|
321
|
+
}
|
|
322
|
+
function digest(files) {
|
|
323
|
+
const hash = createHash("sha256");
|
|
324
|
+
for (const key of Object.keys(files).sort())
|
|
325
|
+
hash.update(key).update("\0").update(files[key] ?? "").update("\0");
|
|
326
|
+
return hash.digest("hex");
|
|
327
|
+
}
|
|
328
|
+
function prose(text) {
|
|
329
|
+
const match = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)([\s\S]*)$/.exec(text);
|
|
330
|
+
if (!match) return { metadata: {}, body: text };
|
|
331
|
+
const metadata = (0, import_yaml2.parse)(match[1] ?? "");
|
|
332
|
+
if (!metadata || typeof metadata !== "object" || Array.isArray(metadata))
|
|
333
|
+
throw new Error("Invalid resource frontmatter.");
|
|
334
|
+
return { metadata, body: match[2] ?? "" };
|
|
335
|
+
}
|
|
336
|
+
function projectSkill(input) {
|
|
337
|
+
const rawOmitted = [];
|
|
338
|
+
const rawSource = input.lenient ? tree(input.skillDir, true, rawOmitted) : tree(input.skillDir);
|
|
339
|
+
const foreign = (file) => input.excludeTopLevel?.has(file.split("/")[0] ?? "") === true;
|
|
340
|
+
const source = Object.fromEntries(Object.entries(rawSource).filter(([file]) => !foreign(file)));
|
|
341
|
+
const omittedFiles = rawOmitted.filter((file) => !foreign(file));
|
|
342
|
+
delete source["plugin.json"];
|
|
343
|
+
if (!input.lenient && Object.keys(source).some((file) => !safeData(file)))
|
|
344
|
+
throw new Error("Not adoptable: skill contains executable or non-text companion files.");
|
|
345
|
+
const raw = source["SKILL.md"];
|
|
346
|
+
if (raw === void 0) throw new Error("Skill directory has no SKILL.md.");
|
|
347
|
+
const skill = prose(raw);
|
|
348
|
+
const name = typeof skill.metadata.name === "string" && skill.metadata.name.trim() ? skill.metadata.name.trim() : "";
|
|
349
|
+
if (!input.lenient && (!name || typeof skill.metadata.description !== "string"))
|
|
350
|
+
throw new Error("Skill requires name and description frontmatter.");
|
|
351
|
+
if (typeof skill.metadata.description !== "string" || !skill.metadata.description.trim())
|
|
352
|
+
throw new Error("Skill requires description frontmatter.");
|
|
353
|
+
const actualName = name || input.fallbackName;
|
|
354
|
+
const omittedFields = [];
|
|
355
|
+
for (const key of ["clio-coder", "clio"]) if (key in skill.metadata) delete skill.metadata[key];
|
|
356
|
+
for (const key of HOST_SKILL_KEYS)
|
|
357
|
+
if (key in skill.metadata) {
|
|
358
|
+
omittedFields.push(key);
|
|
359
|
+
delete skill.metadata[key];
|
|
360
|
+
}
|
|
361
|
+
const id = safeName(actualName);
|
|
362
|
+
const body = skill.body;
|
|
363
|
+
const retained = [
|
|
364
|
+
body,
|
|
365
|
+
...Object.entries(source).filter(([file]) => file !== "SKILL.md").map(([, text]) => text)
|
|
366
|
+
];
|
|
367
|
+
const requiredOmissions = omittedFiles.filter((file) => {
|
|
368
|
+
const base = path.basename(file);
|
|
369
|
+
return retained.some((text) => text.includes(file) || base.includes(".") && text.includes(base));
|
|
370
|
+
});
|
|
371
|
+
source["SKILL.md"] = `---
|
|
372
|
+
${(0, import_yaml2.stringify)({ ...skill.metadata, name: actualName, "clio-coder": { audit: "unknown" } })}---
|
|
373
|
+
${body}`;
|
|
374
|
+
return {
|
|
375
|
+
id,
|
|
376
|
+
name: actualName,
|
|
377
|
+
files: Object.fromEntries(Object.entries(source).map(([file, text]) => [`skills/${id}/${file}`, text])),
|
|
378
|
+
componentPath: `skills/${id}/SKILL.md`,
|
|
379
|
+
omittedFields,
|
|
380
|
+
omittedFiles,
|
|
381
|
+
requiredOmissions,
|
|
382
|
+
bindings: []
|
|
383
|
+
};
|
|
384
|
+
}
|
|
385
|
+
function projectAgent(input) {
|
|
386
|
+
if (input.text === void 0 && (lstatSync(input.file).mode & 73) !== 0)
|
|
387
|
+
throw new Error("Executable files are not adoptable.");
|
|
388
|
+
const raw = input.text ?? inventoryText(input.file);
|
|
389
|
+
const parsed = input.file.endsWith(".toml") ? (() => {
|
|
390
|
+
const data = parseToml(raw);
|
|
391
|
+
if (typeof data.developer_instructions !== "string") throw new Error("Agent developer_instructions is unknown.");
|
|
392
|
+
return { metadata: data, body: data.developer_instructions };
|
|
393
|
+
})() : prose(raw);
|
|
394
|
+
if (!parsed.body.trim()) throw new Error("Empty resource body.");
|
|
395
|
+
const name = typeof parsed.metadata.name === "string" && parsed.metadata.name.trim() ? parsed.metadata.name.trim() : input.name;
|
|
396
|
+
const id = safeName(name);
|
|
397
|
+
const omittedFields = Object.keys(parsed.metadata).filter(
|
|
398
|
+
(key) => !["name", "description", "developer_instructions", ...input.bindSkills ? ["skills"] : []].includes(key)
|
|
399
|
+
);
|
|
400
|
+
const metadata = {
|
|
401
|
+
description: typeof parsed.metadata.description === "string" ? parsed.metadata.description : `Adopted agent ${name}`,
|
|
402
|
+
version: 1,
|
|
403
|
+
name,
|
|
404
|
+
tools: { required: ["read"], optional: ["grep", "find", "ls"] },
|
|
405
|
+
skills: [...input.bindSkills ?? []],
|
|
406
|
+
audience: "custom",
|
|
407
|
+
category: "research",
|
|
408
|
+
capabilityClass: "read-only",
|
|
409
|
+
latencyClass: "balanced",
|
|
410
|
+
projectContextTier: "bounded",
|
|
411
|
+
budget: { toolCalls: 24, readReserve: 4, synthesis: true },
|
|
412
|
+
resultContract: { kind: "artifact-report" },
|
|
413
|
+
tags: ["interop"]
|
|
414
|
+
};
|
|
415
|
+
parseAgentRecipeSchema({
|
|
416
|
+
id,
|
|
417
|
+
source: "plugin",
|
|
418
|
+
filepath: input.file,
|
|
419
|
+
body: parsed.body,
|
|
420
|
+
frontmatter: metadata
|
|
421
|
+
});
|
|
422
|
+
const componentPath = `agents/${id}.md`;
|
|
423
|
+
const declaredSkills = parsed.metadata.skills;
|
|
424
|
+
const bindings = Array.isArray(declaredSkills) ? declaredSkills.filter((skill) => typeof skill === "string") : typeof declaredSkills === "string" ? declaredSkills.split(",").map((skill) => skill.trim()).filter(Boolean) : [];
|
|
425
|
+
return {
|
|
426
|
+
id,
|
|
427
|
+
name,
|
|
428
|
+
files: { [componentPath]: `---
|
|
429
|
+
${(0, import_yaml2.stringify)(metadata)}---
|
|
430
|
+
${parsed.body}` },
|
|
431
|
+
componentPath,
|
|
432
|
+
omittedFields,
|
|
433
|
+
omittedFiles: [],
|
|
434
|
+
requiredOmissions: [],
|
|
435
|
+
bindings
|
|
436
|
+
};
|
|
437
|
+
}
|
|
438
|
+
function projectPrompt(input) {
|
|
439
|
+
if (input.text === void 0 && (lstatSync(input.file).mode & 73) !== 0)
|
|
440
|
+
throw new Error("Executable files are not adoptable.");
|
|
441
|
+
const parsed = prose(input.text ?? inventoryText(input.file));
|
|
442
|
+
if (!parsed.body.trim()) throw new Error("Empty resource body.");
|
|
443
|
+
const name = input.name;
|
|
444
|
+
const id = safeName(name);
|
|
445
|
+
const omittedFields = Object.keys(parsed.metadata).filter((key) => !PROMPT_KEYS.has(key));
|
|
446
|
+
const metadata = {
|
|
447
|
+
description: typeof parsed.metadata.description === "string" ? parsed.metadata.description : `Adopted prompt ${name}`
|
|
448
|
+
};
|
|
449
|
+
const hint = parsed.metadata["argument-hint"] ?? parsed.metadata.argumentHint;
|
|
450
|
+
if (typeof hint === "string") metadata["argument-hint"] = hint;
|
|
451
|
+
const componentPath = `prompts/${id}.md`;
|
|
452
|
+
return {
|
|
453
|
+
id,
|
|
454
|
+
name,
|
|
455
|
+
files: { [componentPath]: `---
|
|
456
|
+
${(0, import_yaml2.stringify)(metadata)}---
|
|
457
|
+
${parsed.body}` },
|
|
458
|
+
componentPath,
|
|
459
|
+
omittedFields,
|
|
460
|
+
omittedFiles: [],
|
|
461
|
+
requiredOmissions: [],
|
|
462
|
+
bindings: []
|
|
463
|
+
};
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// src/domains/interop/foreign.ts
|
|
467
|
+
var FOREIGN_MANIFESTS = [
|
|
468
|
+
{ format: "portable", path: "plugin.json" },
|
|
469
|
+
{ format: "claude-code", path: ".claude-plugin/plugin.json" },
|
|
470
|
+
{ format: "codex", path: ".codex-plugin/plugin.json" }
|
|
471
|
+
];
|
|
472
|
+
function detectForeignPlugin(root, explicit) {
|
|
473
|
+
const present = (relative) => {
|
|
474
|
+
try {
|
|
475
|
+
lstatSync2(path2.join(root, relative));
|
|
476
|
+
return true;
|
|
477
|
+
} catch {
|
|
478
|
+
return false;
|
|
479
|
+
}
|
|
480
|
+
};
|
|
481
|
+
const candidates = FOREIGN_MANIFESTS.filter(({ path: relative }) => present(relative));
|
|
482
|
+
const diagnostics = [];
|
|
483
|
+
const portable = candidates.find((candidate) => candidate.format === "portable");
|
|
484
|
+
if (portable) {
|
|
485
|
+
if (!lstatSync2(path2.join(root, "plugin.json")).isFile())
|
|
486
|
+
diagnostics.push("Root plugin.json exists but is not a regular file; the portable manifest is invalid.");
|
|
487
|
+
if (explicit)
|
|
488
|
+
diagnostics.push(`Root plugin.json is portable; --format ${explicit} is ignored and no foreign fallback runs.`);
|
|
489
|
+
for (const other of candidates.filter((candidate) => candidate.format !== "portable"))
|
|
490
|
+
diagnostics.push(`Ignoring ${other.path}: the portable root plugin.json takes precedence.`);
|
|
491
|
+
return { format: "portable", manifestPath: portable.path, candidates, ambiguous: false, diagnostics };
|
|
492
|
+
}
|
|
493
|
+
const hidden = candidates.filter((candidate) => candidate.format !== "portable");
|
|
494
|
+
if (hidden.length === 0)
|
|
495
|
+
return {
|
|
496
|
+
format: "none",
|
|
497
|
+
candidates,
|
|
498
|
+
ambiguous: false,
|
|
499
|
+
diagnostics: [
|
|
500
|
+
"No plugin manifest found: expected plugin.json, .claude-plugin/plugin.json or .codex-plugin/plugin.json."
|
|
501
|
+
]
|
|
502
|
+
};
|
|
503
|
+
if (explicit) {
|
|
504
|
+
const chosen = hidden.find((candidate) => candidate.format === explicit);
|
|
505
|
+
if (!chosen)
|
|
506
|
+
return {
|
|
507
|
+
format: "none",
|
|
508
|
+
candidates,
|
|
509
|
+
ambiguous: false,
|
|
510
|
+
diagnostics: [`No ${explicit} manifest present; found ${hidden.map((item) => item.path).join(", ")}.`]
|
|
511
|
+
};
|
|
512
|
+
return { format: chosen.format, manifestPath: chosen.path, candidates, ambiguous: false, diagnostics };
|
|
513
|
+
}
|
|
514
|
+
if (hidden.length > 1)
|
|
515
|
+
return {
|
|
516
|
+
format: "none",
|
|
517
|
+
candidates,
|
|
518
|
+
ambiguous: true,
|
|
519
|
+
diagnostics: [
|
|
520
|
+
`Both ${hidden.map((item) => item.path).join(" and ")} are present; choose --format claude or --format codex.`
|
|
521
|
+
]
|
|
522
|
+
};
|
|
523
|
+
const only = hidden[0];
|
|
524
|
+
return { format: only.format, manifestPath: only.path, candidates, ambiguous: false, diagnostics };
|
|
525
|
+
}
|
|
526
|
+
function record(value) {
|
|
527
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
528
|
+
}
|
|
529
|
+
function pathList(value, field, problems) {
|
|
530
|
+
if (value === void 0) return [];
|
|
531
|
+
const items = typeof value === "string" ? [value] : Array.isArray(value) ? value : void 0;
|
|
532
|
+
if (!items || items.some((item) => typeof item !== "string")) {
|
|
533
|
+
problems.push(`Manifest ${field} must be a path or list of paths; ignored.`);
|
|
534
|
+
return [];
|
|
535
|
+
}
|
|
536
|
+
return items;
|
|
537
|
+
}
|
|
538
|
+
function contained(root, relative) {
|
|
539
|
+
if (relative.includes("\\") || relative.includes("\0") || path2.isAbsolute(relative))
|
|
540
|
+
throw new Error(`Manifest path is not relative: ${relative}`);
|
|
541
|
+
const full = path2.resolve(root, relative);
|
|
542
|
+
const rel = path2.relative(root, full);
|
|
543
|
+
if (rel === ".." || rel.startsWith(`..${path2.sep}`)) throw new Error(`Manifest path escapes the package: ${relative}`);
|
|
544
|
+
let cursor = root;
|
|
545
|
+
for (const part of rel.split(path2.sep).filter(Boolean)) {
|
|
546
|
+
cursor = path2.join(cursor, part);
|
|
547
|
+
if (lstatSync2(cursor).isSymbolicLink()) throw new Error(`Manifest path crosses a symbolic link: ${relative}`);
|
|
548
|
+
}
|
|
549
|
+
return full;
|
|
550
|
+
}
|
|
551
|
+
function relativeTo(root, file) {
|
|
552
|
+
return path2.relative(root, file).split(path2.sep).join("/");
|
|
553
|
+
}
|
|
554
|
+
function isDir(file) {
|
|
555
|
+
try {
|
|
556
|
+
return lstatSync2(file).isDirectory();
|
|
557
|
+
} catch {
|
|
558
|
+
return false;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
function isFile(file) {
|
|
562
|
+
try {
|
|
563
|
+
return lstatSync2(file).isFile();
|
|
564
|
+
} catch {
|
|
565
|
+
return false;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
function skillDirectories(root, declared) {
|
|
569
|
+
const base = contained(root, declared);
|
|
570
|
+
if (!isDir(base)) return [];
|
|
571
|
+
if (isFile(path2.join(base, "SKILL.md"))) return [base];
|
|
572
|
+
return readdirSync2(base).sort().map((name) => path2.join(base, name)).filter((dir) => !lstatSync2(dir).isSymbolicLink() && isDir(dir) && isFile(path2.join(dir, "SKILL.md")));
|
|
573
|
+
}
|
|
574
|
+
function markdownFiles(root, declared, extensions) {
|
|
575
|
+
const base = contained(root, declared);
|
|
576
|
+
if (isFile(base)) return extensions.some((ext) => base.endsWith(ext)) ? [base] : [];
|
|
577
|
+
if (!isDir(base)) return [];
|
|
578
|
+
const found = [];
|
|
579
|
+
const walk = (dir, depth) => {
|
|
580
|
+
if (depth > 6) return;
|
|
581
|
+
for (const name of readdirSync2(dir).sort()) {
|
|
582
|
+
const file = path2.join(dir, name);
|
|
583
|
+
const stat = lstatSync2(file);
|
|
584
|
+
if (stat.isSymbolicLink()) continue;
|
|
585
|
+
if (stat.isDirectory()) walk(file, depth + 1);
|
|
586
|
+
else if (extensions.some((ext) => name.endsWith(ext))) found.push(file);
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
walk(base, 0);
|
|
590
|
+
return found;
|
|
591
|
+
}
|
|
592
|
+
var CLAUDE_UNSUPPORTED_FIELDS = [
|
|
593
|
+
"hooks",
|
|
594
|
+
"mcpServers",
|
|
595
|
+
"lspServers",
|
|
596
|
+
"outputStyles",
|
|
597
|
+
"workflows",
|
|
598
|
+
"experimental",
|
|
599
|
+
"userConfig",
|
|
600
|
+
"channels",
|
|
601
|
+
"defaultEnabled"
|
|
602
|
+
];
|
|
603
|
+
var CODEX_UNSUPPORTED_FIELDS = ["apps", "hooks", "mcpServers", "interface"];
|
|
604
|
+
var UNSUPPORTED_FILES = [
|
|
605
|
+
"hooks/hooks.json",
|
|
606
|
+
".mcp.json",
|
|
607
|
+
"mcp.json",
|
|
608
|
+
".lsp.json",
|
|
609
|
+
".app.json",
|
|
610
|
+
"monitors/monitors.json",
|
|
611
|
+
"output-styles",
|
|
612
|
+
"scripts",
|
|
613
|
+
"tools"
|
|
614
|
+
];
|
|
615
|
+
function projectForeignPlugin(input) {
|
|
616
|
+
const root = path2.resolve(input.root);
|
|
617
|
+
const manifestPath = input.manifestPath ?? (input.format === "claude-code" ? ".claude-plugin/plugin.json" : ".codex-plugin/plugin.json");
|
|
618
|
+
const manifestFile = contained(root, manifestPath);
|
|
619
|
+
if (!isFile(manifestFile)) throw new Error(`Missing ${manifestPath}.`);
|
|
620
|
+
const parsed = JSON.parse(inventoryText(manifestFile));
|
|
621
|
+
if (!record(parsed)) throw new Error(`${manifestPath} must be a JSON object.`);
|
|
622
|
+
const notes = [];
|
|
623
|
+
const unsupported = [];
|
|
624
|
+
const outcomes = [];
|
|
625
|
+
const rawName = typeof parsed.name === "string" && parsed.name.trim() ? parsed.name.trim() : "";
|
|
626
|
+
if (!rawName) throw new Error(`${manifestPath} requires a name.`);
|
|
627
|
+
const id = isPluginId(rawName) ? rawName : safeName(rawName);
|
|
628
|
+
if (id !== rawName) notes.push(`Package name "${rawName}" normalized to Clio id "${id}".`);
|
|
629
|
+
let version = "0.0.0";
|
|
630
|
+
if (parsed.version === void 0) notes.push("Vendor manifest declares no version; projected as 0.0.0.");
|
|
631
|
+
else if (isSemanticVersion(parsed.version)) version = parsed.version;
|
|
632
|
+
else throw new Error(`${manifestPath} version ${JSON.stringify(parsed.version)} is not a Semantic Version.`);
|
|
633
|
+
notes.push(
|
|
634
|
+
`Vendor identity: ${manifestPath} name ${JSON.stringify(rawName)}, version ${parsed.version === void 0 ? "absent" : JSON.stringify(parsed.version)}.`
|
|
635
|
+
);
|
|
636
|
+
const description = typeof parsed.description === "string" ? parsed.description : `Imported ${input.format === "claude-code" ? "Claude Code" : "Codex"} plugin ${rawName}`;
|
|
637
|
+
const fieldList = input.format === "claude-code" ? CLAUDE_UNSUPPORTED_FIELDS : CODEX_UNSUPPORTED_FIELDS;
|
|
638
|
+
for (const field of fieldList)
|
|
639
|
+
if (parsed[field] !== void 0) unsupported.push(`${manifestPath}#${field}: never activated by Clio import.`);
|
|
640
|
+
const requirements = [];
|
|
641
|
+
if (parsed.dependencies !== void 0) {
|
|
642
|
+
if (!Array.isArray(parsed.dependencies)) throw new Error(`${manifestPath} dependencies must be an array.`);
|
|
643
|
+
for (const dependency of parsed.dependencies) {
|
|
644
|
+
const name = typeof dependency === "string" ? dependency : record(dependency) ? dependency.name : void 0;
|
|
645
|
+
if (typeof name !== "string" || !name.trim())
|
|
646
|
+
throw new Error(`${manifestPath} declares a dependency without a name; the package cannot be imported.`);
|
|
647
|
+
if (record(dependency) && dependency.version !== void 0)
|
|
648
|
+
throw new Error(
|
|
649
|
+
`${manifestPath} dependency ${name} declares version constraint ${JSON.stringify(dependency.version)}; version-constrained vendor dependencies are not supported. Import ${name} first and remove the constraint in a reviewed copy, or skip this package.`
|
|
650
|
+
);
|
|
651
|
+
if (record(dependency)) {
|
|
652
|
+
const unknown = Object.keys(dependency).filter((key) => !["name", "version"].includes(key));
|
|
653
|
+
if (unknown.length)
|
|
654
|
+
throw new Error(
|
|
655
|
+
`${manifestPath} dependency ${name} declares unsupported fields ${unknown.join(", ")}; source or marketplace constrained dependencies cannot be imported.`
|
|
656
|
+
);
|
|
657
|
+
}
|
|
658
|
+
if (!isPluginId(name))
|
|
659
|
+
throw new Error(
|
|
660
|
+
`${manifestPath} dependency ${JSON.stringify(name)} is not a portable identifier; it cannot be matched to an imported package.`
|
|
661
|
+
);
|
|
662
|
+
requirements.push(`plugin:${name}`);
|
|
663
|
+
notes.push(
|
|
664
|
+
`Vendor dependency ${name} requires plugin:${name} imported from the same ${input.format} format; native packages with that id do not satisfy it.`
|
|
665
|
+
);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
for (const file of UNSUPPORTED_FILES)
|
|
669
|
+
if (existsSync(path2.join(root, file))) unsupported.push(`${file}: host runtime content is not imported.`);
|
|
670
|
+
const omittedTree = [];
|
|
671
|
+
const sourceFiles = tree(root, true, omittedTree);
|
|
672
|
+
const projected = /* @__PURE__ */ new Set();
|
|
673
|
+
const files = {};
|
|
674
|
+
const components = [];
|
|
675
|
+
const resources = {};
|
|
676
|
+
const usedIds = /* @__PURE__ */ new Map();
|
|
677
|
+
const claim = (resource, kind, source) => {
|
|
678
|
+
const key = `${kind}:${resource.id}`;
|
|
679
|
+
const previous = usedIds.get(key);
|
|
680
|
+
if (previous) {
|
|
681
|
+
outcomes.push({
|
|
682
|
+
kind,
|
|
683
|
+
name: resource.name,
|
|
684
|
+
source,
|
|
685
|
+
status: "unsupported",
|
|
686
|
+
reason: `Resource id ${resource.id} already provided by ${previous}.`
|
|
687
|
+
});
|
|
688
|
+
return false;
|
|
689
|
+
}
|
|
690
|
+
usedIds.set(key, source);
|
|
691
|
+
return true;
|
|
692
|
+
};
|
|
693
|
+
const declaredSkills = [];
|
|
694
|
+
const declaredCommands = [];
|
|
695
|
+
const declaredAgents = [];
|
|
696
|
+
const problems = [];
|
|
697
|
+
const skillsField = pathList(parsed.skills, "skills", problems);
|
|
698
|
+
if (input.format === "claude-code") {
|
|
699
|
+
declaredSkills.push("skills", ...skillsField);
|
|
700
|
+
const commands = pathList(parsed.commands, "commands", problems);
|
|
701
|
+
declaredCommands.push(...commands.length ? commands : ["commands"]);
|
|
702
|
+
if (commands.length && isDir(path2.join(root, "commands")) && !commands.some((c) => path2.resolve(root, c) === path2.join(root, "commands")))
|
|
703
|
+
notes.push("Manifest commands replaces the default commands/ directory; the default folder is not scanned.");
|
|
704
|
+
const agents = pathList(parsed.agents, "agents", problems);
|
|
705
|
+
declaredAgents.push(...agents.length ? agents : ["agents"]);
|
|
706
|
+
if (agents.length && isDir(path2.join(root, "agents")) && !agents.some((a) => path2.resolve(root, a) === path2.join(root, "agents")))
|
|
707
|
+
notes.push("Manifest agents replaces the default agents/ directory; the default folder is not scanned.");
|
|
708
|
+
} else {
|
|
709
|
+
declaredSkills.push(...skillsField.length ? skillsField : ["skills"]);
|
|
710
|
+
if (isDir(path2.join(root, "commands")) || isDir(path2.join(root, "agents")))
|
|
711
|
+
notes.push("commands/ and agents/ are not Codex plugin components and were not imported.");
|
|
712
|
+
}
|
|
713
|
+
notes.push(...problems);
|
|
714
|
+
const seenSkillDirs = /* @__PURE__ */ new Set();
|
|
715
|
+
const skillDirs = [];
|
|
716
|
+
for (const declared of declaredSkills) {
|
|
717
|
+
try {
|
|
718
|
+
for (const dir of skillDirectories(root, declared))
|
|
719
|
+
if (!seenSkillDirs.has(dir)) {
|
|
720
|
+
seenSkillDirs.add(dir);
|
|
721
|
+
skillDirs.push(dir);
|
|
722
|
+
}
|
|
723
|
+
} catch (error) {
|
|
724
|
+
unsupported.push(`skills path ${declared}: ${error instanceof Error ? error.message : String(error)}`);
|
|
725
|
+
}
|
|
726
|
+
}
|
|
727
|
+
if (input.format === "claude-code" && skillDirs.length === 0 && !isDir(path2.join(root, "skills")) && skillsField.length === 0 && isFile(path2.join(root, "SKILL.md"))) {
|
|
728
|
+
skillDirs.push(root);
|
|
729
|
+
notes.push("Root SKILL.md loaded as the plugin's single skill (documented Claude Code fallback).");
|
|
730
|
+
}
|
|
731
|
+
const siblingRoots = new Set(
|
|
732
|
+
[
|
|
733
|
+
".claude-plugin",
|
|
734
|
+
".codex-plugin",
|
|
735
|
+
"skills",
|
|
736
|
+
"commands",
|
|
737
|
+
"agents",
|
|
738
|
+
...declaredCommands,
|
|
739
|
+
...declaredAgents,
|
|
740
|
+
...skillsField
|
|
741
|
+
].map((entry) => entry.replace(/^\.\//u, "").split("/")[0] ?? "").filter((entry) => entry && entry !== ".")
|
|
742
|
+
);
|
|
743
|
+
for (const dir of skillDirs) {
|
|
744
|
+
const source = dir === root ? "SKILL.md" : `${relativeTo(root, dir)}/SKILL.md`;
|
|
745
|
+
const fallbackName = dir === root ? rawName : path2.basename(dir);
|
|
746
|
+
const prefix = dir === root ? "" : `${relativeTo(root, dir)}/`;
|
|
747
|
+
try {
|
|
748
|
+
const resource = projectSkill({
|
|
749
|
+
skillDir: dir,
|
|
750
|
+
fallbackName,
|
|
751
|
+
lenient: true,
|
|
752
|
+
...dir === root ? { excludeTopLevel: siblingRoots } : {}
|
|
753
|
+
});
|
|
754
|
+
const omittedFiles = resource.omittedFiles.map((file) => `${prefix}${file}`);
|
|
755
|
+
if (resource.requiredOmissions.length) {
|
|
756
|
+
outcomes.push({
|
|
757
|
+
kind: "skill",
|
|
758
|
+
name: resource.name,
|
|
759
|
+
source,
|
|
760
|
+
status: "unsupported",
|
|
761
|
+
reason: `Instructions reference omitted companions: ${resource.requiredOmissions.join(", ")}.`,
|
|
762
|
+
omittedFields: resource.omittedFields,
|
|
763
|
+
omittedFiles
|
|
764
|
+
});
|
|
765
|
+
continue;
|
|
766
|
+
}
|
|
767
|
+
if (!claim(resource, "skill", source)) continue;
|
|
768
|
+
Object.assign(files, resource.files);
|
|
769
|
+
components.push({ kind: "skill", id: resource.id, path: resource.componentPath });
|
|
770
|
+
resources.skills = "skills";
|
|
771
|
+
for (const file of Object.keys(resource.files))
|
|
772
|
+
projected.add(`${prefix}${file.slice(`skills/${resource.id}/`.length)}`);
|
|
773
|
+
outcomes.push({
|
|
774
|
+
kind: "skill",
|
|
775
|
+
name: resource.name,
|
|
776
|
+
source,
|
|
777
|
+
status: "converted",
|
|
778
|
+
id: resource.id,
|
|
779
|
+
destination: resource.componentPath,
|
|
780
|
+
...resource.omittedFields.length ? { omittedFields: resource.omittedFields } : {},
|
|
781
|
+
...omittedFiles.length ? { omittedFiles } : {}
|
|
782
|
+
});
|
|
783
|
+
} catch (error) {
|
|
784
|
+
outcomes.push({
|
|
785
|
+
kind: "skill",
|
|
786
|
+
name: fallbackName,
|
|
787
|
+
source,
|
|
788
|
+
status: "unsupported",
|
|
789
|
+
reason: error instanceof Error ? error.message : String(error)
|
|
790
|
+
});
|
|
791
|
+
}
|
|
792
|
+
}
|
|
793
|
+
const collect = (declared, kind, extensions, convert) => {
|
|
794
|
+
const seen = /* @__PURE__ */ new Set();
|
|
795
|
+
for (const entry of declared) {
|
|
796
|
+
let found;
|
|
797
|
+
try {
|
|
798
|
+
found = markdownFiles(root, entry, extensions);
|
|
799
|
+
} catch (error) {
|
|
800
|
+
unsupported.push(`${kind} path ${entry}: ${error instanceof Error ? error.message : String(error)}`);
|
|
801
|
+
continue;
|
|
802
|
+
}
|
|
803
|
+
for (const file of found) {
|
|
804
|
+
if (seen.has(file)) continue;
|
|
805
|
+
seen.add(file);
|
|
806
|
+
const source = relativeTo(root, file);
|
|
807
|
+
const name = path2.basename(file, path2.extname(file));
|
|
808
|
+
try {
|
|
809
|
+
const resource = convert(file, name);
|
|
810
|
+
if (!claim(resource, kind, source)) continue;
|
|
811
|
+
Object.assign(files, resource.files);
|
|
812
|
+
components.push({ kind, id: resource.id, path: resource.componentPath });
|
|
813
|
+
resources[`${kind}s`] = `${kind}s`;
|
|
814
|
+
projected.add(source);
|
|
815
|
+
outcomes.push({
|
|
816
|
+
kind,
|
|
817
|
+
name: resource.name,
|
|
818
|
+
source,
|
|
819
|
+
status: "converted",
|
|
820
|
+
id: resource.id,
|
|
821
|
+
destination: resource.componentPath,
|
|
822
|
+
...resource.omittedFields.length ? { omittedFields: resource.omittedFields } : {}
|
|
823
|
+
});
|
|
824
|
+
} catch (error) {
|
|
825
|
+
outcomes.push({
|
|
826
|
+
kind,
|
|
827
|
+
name,
|
|
828
|
+
source,
|
|
829
|
+
status: "unsupported",
|
|
830
|
+
reason: error instanceof Error ? error.message : String(error)
|
|
831
|
+
});
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
};
|
|
836
|
+
if (input.format === "claude-code") {
|
|
837
|
+
collect(declaredCommands, "prompt", [".md"], (file, name) => projectPrompt({ file, name }));
|
|
838
|
+
const convertedSkills = new Set(
|
|
839
|
+
outcomes.filter((o) => o.kind === "skill" && o.status === "converted").map((o) => o.name)
|
|
840
|
+
);
|
|
841
|
+
collect(declaredAgents, "agent", [".md"], (file, name) => {
|
|
842
|
+
const declared = projectAgent({ file, name }).bindings;
|
|
843
|
+
const bound = declared.filter((skill) => !convertedSkills.has(skill));
|
|
844
|
+
if (bound.length)
|
|
845
|
+
throw new Error(`Agent binds skills that were not converted: ${bound.join(", ")}; Clio cannot honor the binding.`);
|
|
846
|
+
return projectAgent({ file, name, bindSkills: declared });
|
|
847
|
+
});
|
|
848
|
+
}
|
|
849
|
+
const omitted = [
|
|
850
|
+
...omittedTree,
|
|
851
|
+
...Object.keys(sourceFiles).filter((file) => !projected.has(file) && file !== manifestPath)
|
|
852
|
+
].sort();
|
|
853
|
+
files["plugin.json"] = `${JSON.stringify(
|
|
854
|
+
{
|
|
855
|
+
$schema: PLUGIN_SCHEMA,
|
|
856
|
+
name: id,
|
|
857
|
+
version,
|
|
858
|
+
description,
|
|
859
|
+
...record(parsed.author) && Object.values(parsed.author).every((v) => typeof v === "string") ? {
|
|
860
|
+
author: Object.fromEntries(
|
|
861
|
+
Object.entries(parsed.author).filter(([key]) => ["name", "email", "url"].includes(key))
|
|
862
|
+
)
|
|
863
|
+
} : {},
|
|
864
|
+
...typeof parsed.homepage === "string" ? { homepage: parsed.homepage } : {},
|
|
865
|
+
...typeof parsed.repository === "string" ? { repository: parsed.repository } : {},
|
|
866
|
+
...typeof parsed.license === "string" ? { license: parsed.license } : {},
|
|
867
|
+
...Array.isArray(parsed.keywords) && parsed.keywords.every((k) => typeof k === "string") ? { keywords: parsed.keywords } : {},
|
|
868
|
+
extensions: {
|
|
869
|
+
[PLUGIN_EXTENSION_KEY]: {
|
|
870
|
+
manifestVersion: 1,
|
|
871
|
+
...requirements.length ? { requires: requirements } : {},
|
|
872
|
+
resources,
|
|
873
|
+
components
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
},
|
|
877
|
+
null,
|
|
878
|
+
2
|
|
879
|
+
)}
|
|
880
|
+
`;
|
|
881
|
+
return {
|
|
882
|
+
format: input.format,
|
|
883
|
+
manifestPath,
|
|
884
|
+
id,
|
|
885
|
+
version,
|
|
886
|
+
description,
|
|
887
|
+
files,
|
|
888
|
+
requirements,
|
|
889
|
+
outcomes,
|
|
890
|
+
unsupported: [...new Set(unsupported)],
|
|
891
|
+
omitted: [...new Set(omitted)],
|
|
892
|
+
notes
|
|
893
|
+
};
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
// src/domains/interop/install.ts
|
|
897
|
+
init_esm_shims();
|
|
898
|
+
function installInteropPackage(input) {
|
|
899
|
+
return installLibraryPackage(input);
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
// src/domains/interop/adopt.ts
|
|
903
|
+
function preparePortablePackage(root) {
|
|
904
|
+
const candidate = readPluginManifest(root);
|
|
905
|
+
if (!candidate.valid || !candidate.manifest)
|
|
906
|
+
throw new Error(
|
|
907
|
+
`Not adoptable: invalid portable root plugin.json (${candidate.diagnostics.map((d) => d.message).join("; ")}).`
|
|
908
|
+
);
|
|
909
|
+
const manifest = candidate.manifest;
|
|
910
|
+
const omitted = [];
|
|
911
|
+
const files = tree(root, true, omitted);
|
|
912
|
+
const raw = JSON.parse(files["plugin.json"] ?? "{}");
|
|
913
|
+
const resources = Object.fromEntries(
|
|
914
|
+
Object.entries(manifest.clio.resources).filter(([key]) => ["skills", "agents", "prompts"].includes(key))
|
|
915
|
+
);
|
|
916
|
+
const components = manifest.clio.components.filter(
|
|
917
|
+
(component) => ["skill", "agent", "prompt", "resource"].includes(component.kind) && files[component.path] !== void 0
|
|
918
|
+
);
|
|
919
|
+
const retained = new Set(components.map((component) => `${component.kind}:${component.id}`));
|
|
920
|
+
if (components.some((component) => component.requires?.some((ref) => !retained.has(ref))))
|
|
921
|
+
throw new Error("Not adoptable: retained resources require omitted executable components.");
|
|
922
|
+
const kind = manifest.clio.kind ?? "plugin";
|
|
923
|
+
if (!["plugin", "skill", "agent", "prompt"].includes(kind))
|
|
924
|
+
throw new Error(
|
|
925
|
+
`Not adoptable: ${kind} packages have no data-only projection; install them through the library instead.`
|
|
926
|
+
);
|
|
927
|
+
if (kind !== "plugin" && !components.some((component) => component.kind === kind))
|
|
928
|
+
throw new Error(`Not adoptable: the ${kind} package's public ${kind} component is not projectable.`);
|
|
929
|
+
const validation = validateLibraryPackage(root);
|
|
930
|
+
if (!validation.valid)
|
|
931
|
+
throw new Error(
|
|
932
|
+
`Not adoptable: invalid recipe content (${validation.validation.diagnostics.filter((item) => item.severity === "error").map((item) => item.message).join("; ")}).`
|
|
933
|
+
);
|
|
934
|
+
const recipes = validation.validation.resources.filter(
|
|
935
|
+
(resource) => ["skill", "agent", "prompt"].includes(resource.kind) && files[resource.path] !== void 0
|
|
936
|
+
);
|
|
937
|
+
if (recipes.length === 0) throw new Error("Not adoptable: the portable package has no supported data-only recipes.");
|
|
938
|
+
const outcomes = [];
|
|
939
|
+
for (const resource of recipes) {
|
|
940
|
+
const component = components.find((item) => item.kind === resource.kind && item.path === resource.path);
|
|
941
|
+
const skillDir = resource.kind === "skill" ? path3.posix.dirname(resource.path) : void 0;
|
|
942
|
+
const dir = skillDir === void 0 ? void 0 : skillDir === "." ? "" : `${skillDir}/`;
|
|
943
|
+
const texts = Object.entries(files).filter(([file]) => file !== "plugin.json" && (dir === void 0 ? file === resource.path : file.startsWith(dir))).map(([, text]) => text);
|
|
944
|
+
const needed = omitted.filter((file) => {
|
|
945
|
+
const own = dir !== void 0 && file.startsWith(dir);
|
|
946
|
+
const base = path3.posix.basename(file);
|
|
947
|
+
return texts.some((text) => text.includes(file) || own && base.includes(".") && text.includes(base));
|
|
948
|
+
});
|
|
949
|
+
if (needed.length)
|
|
950
|
+
throw new Error(
|
|
951
|
+
`Not adoptable: ${resource.kind} ${resource.name} references omitted companions (${needed.join(", ")}); the data-only import cannot claim it works. Use library install for script-bearing packages.`
|
|
952
|
+
);
|
|
953
|
+
outcomes.push({
|
|
954
|
+
kind: resource.kind,
|
|
955
|
+
name: resource.name,
|
|
956
|
+
source: resource.path,
|
|
957
|
+
status: "converted",
|
|
958
|
+
...component ? { id: component.id } : {},
|
|
959
|
+
destination: resource.path
|
|
960
|
+
});
|
|
961
|
+
}
|
|
962
|
+
raw.extensions = {
|
|
963
|
+
[PLUGIN_EXTENSION_KEY]: {
|
|
964
|
+
manifestVersion: 1,
|
|
965
|
+
...kind !== "plugin" ? { kind } : {},
|
|
966
|
+
...manifest.clio.requires ? { requires: manifest.clio.requires } : {},
|
|
967
|
+
resources,
|
|
968
|
+
components,
|
|
969
|
+
...manifest.clio.compatibility ? { compatibility: manifest.clio.compatibility } : {}
|
|
970
|
+
}
|
|
971
|
+
};
|
|
972
|
+
files["plugin.json"] = JSON.stringify(raw, null, 2);
|
|
973
|
+
return {
|
|
974
|
+
id: manifest.name,
|
|
975
|
+
version: manifest.version ?? "0.0.0",
|
|
976
|
+
files,
|
|
977
|
+
note: "Data-only portable projection; hooks, MCP, scripts, tools, fleets and host settings are skipped. References to omitted files are unavailable.",
|
|
978
|
+
omitted,
|
|
979
|
+
requirements: [...manifest.clio.requires ?? []],
|
|
980
|
+
format: "portable",
|
|
981
|
+
outcomes
|
|
982
|
+
};
|
|
983
|
+
}
|
|
984
|
+
function prepareForeignPackage(root, format) {
|
|
985
|
+
const detection = detectForeignPlugin(root, format);
|
|
986
|
+
if (detection.format === "portable") throw new Error("Portable root plugin.json present; use the portable route.");
|
|
987
|
+
if (detection.format === "none") throw new Error(`Not adoptable: ${detection.diagnostics.join(" ")}`);
|
|
988
|
+
const projection = projectForeignPlugin({
|
|
989
|
+
root,
|
|
990
|
+
format: detection.format,
|
|
991
|
+
...detection.manifestPath ? { manifestPath: detection.manifestPath } : {}
|
|
992
|
+
});
|
|
993
|
+
if (!projection.outcomes.some((outcome) => outcome.status === "converted"))
|
|
994
|
+
throw new Error(
|
|
995
|
+
`Not adoptable: no supported recipe converted from ${detection.manifestPath}${projection.outcomes.length ? ` (${projection.outcomes.map((o) => `${o.kind} ${o.name}: ${o.reason ?? "unsupported"}`).join("; ")})` : ""}.`
|
|
996
|
+
);
|
|
997
|
+
return {
|
|
998
|
+
id: projection.id,
|
|
999
|
+
version: projection.version,
|
|
1000
|
+
files: projection.files,
|
|
1001
|
+
note: `${detection.format === "claude-code" ? "Claude Code" : "Codex"} plugin normalized to a portable Clio package; hooks, MCP, LSP, scripts and host settings are never activated.${projection.notes.length ? ` ${projection.notes.join(" ")}` : ""}`,
|
|
1002
|
+
omitted: projection.omitted,
|
|
1003
|
+
requirements: projection.requirements,
|
|
1004
|
+
format: detection.format,
|
|
1005
|
+
outcomes: projection.outcomes,
|
|
1006
|
+
unsupported: projection.unsupported
|
|
1007
|
+
};
|
|
1008
|
+
}
|
|
1009
|
+
function prepared(item, host) {
|
|
1010
|
+
let value;
|
|
1011
|
+
if (item.kind === "plugin") {
|
|
1012
|
+
const detection = detectForeignPlugin(item.path);
|
|
1013
|
+
value = detection.format === "portable" || detection.format === "none" ? preparePortablePackage(item.path) : prepareForeignPackage(item.path, detection.format);
|
|
1014
|
+
} else {
|
|
1015
|
+
const id = safeName(`${host}-${item.kind}-${item.name}`);
|
|
1016
|
+
const plural = `${item.kind}s`;
|
|
1017
|
+
let note = "Text only; foreign execution settings are not imported.";
|
|
1018
|
+
const resource = item.kind === "skill" ? projectSkill({ skillDir: path3.dirname(item.path), fallbackName: item.name }) : item.kind === "agent" ? projectAgent({ file: item.path, name: item.name }) : projectPrompt({ file: item.path, name: item.name });
|
|
1019
|
+
if (item.kind === "agent")
|
|
1020
|
+
note = "Persona copied into a read-only Clio recipe; host tools, permissions, model, hooks and skill bindings are omitted.";
|
|
1021
|
+
const files = { ...resource.files };
|
|
1022
|
+
files["plugin.json"] = JSON.stringify(
|
|
1023
|
+
{
|
|
1024
|
+
$schema: PLUGIN_SCHEMA,
|
|
1025
|
+
name: id,
|
|
1026
|
+
version: "0.0.0",
|
|
1027
|
+
description: `Adopted ${item.kind} from ${host}`,
|
|
1028
|
+
extensions: {
|
|
1029
|
+
[PLUGIN_EXTENSION_KEY]: {
|
|
1030
|
+
manifestVersion: 1,
|
|
1031
|
+
kind: item.kind,
|
|
1032
|
+
resources: { [plural]: plural },
|
|
1033
|
+
components: [{ kind: item.kind, id: resource.id, path: resource.componentPath }]
|
|
1034
|
+
}
|
|
1035
|
+
}
|
|
1036
|
+
},
|
|
1037
|
+
null,
|
|
1038
|
+
2
|
|
1039
|
+
);
|
|
1040
|
+
value = {
|
|
1041
|
+
id,
|
|
1042
|
+
version: "0.0.0",
|
|
1043
|
+
files,
|
|
1044
|
+
note,
|
|
1045
|
+
omitted: [],
|
|
1046
|
+
requirements: [],
|
|
1047
|
+
...resource.omittedFields.length ? {
|
|
1048
|
+
outcomes: [
|
|
1049
|
+
{
|
|
1050
|
+
kind: item.kind,
|
|
1051
|
+
name: resource.name,
|
|
1052
|
+
source: item.path,
|
|
1053
|
+
status: "converted",
|
|
1054
|
+
id: resource.id,
|
|
1055
|
+
destination: resource.componentPath,
|
|
1056
|
+
omittedFields: resource.omittedFields
|
|
1057
|
+
}
|
|
1058
|
+
]
|
|
1059
|
+
} : {}
|
|
1060
|
+
};
|
|
1061
|
+
}
|
|
1062
|
+
const manifest = JSON.parse(value.files["plugin.json"] ?? "{}");
|
|
1063
|
+
manifest.extensions = {
|
|
1064
|
+
...manifest.extensions,
|
|
1065
|
+
"ai.iowarp.clio.interop": {
|
|
1066
|
+
host,
|
|
1067
|
+
source: item.path,
|
|
1068
|
+
sourceScope: item.scope,
|
|
1069
|
+
untrusted: true,
|
|
1070
|
+
...value.format ? { format: value.format } : {}
|
|
1071
|
+
}
|
|
1072
|
+
};
|
|
1073
|
+
value.files["plugin.json"] = `${JSON.stringify(manifest, null, 2)}
|
|
1074
|
+
`;
|
|
1075
|
+
return value;
|
|
1076
|
+
}
|
|
1077
|
+
function vendorOf(format) {
|
|
1078
|
+
return format === "claude-code" || format === "codex" ? format : void 0;
|
|
1079
|
+
}
|
|
1080
|
+
function unmetRequirements(requirements, cwd, scope, vendor) {
|
|
1081
|
+
if (requirements.length === 0) return [];
|
|
1082
|
+
const available = new Map(
|
|
1083
|
+
listInstalledPlugins(cwd, { all: true, ...scope === "user" ? { scope } : {} }).filter((pkg) => pkg.loadable).map((pkg) => [`${pkg.kind ?? "plugin"}:${pkg.id}`, pkg])
|
|
1084
|
+
);
|
|
1085
|
+
const problems = /* @__PURE__ */ new Set();
|
|
1086
|
+
if (vendor)
|
|
1087
|
+
for (const ref of requirements) {
|
|
1088
|
+
const pkg = available.get(ref);
|
|
1089
|
+
if (!pkg) continue;
|
|
1090
|
+
const origin = readPluginInstallRecord(pkg.id, { cwd, scope: pkg.scope })?.origin;
|
|
1091
|
+
const provenance = typeof origin === "object" && (origin.kind === "import" || origin.kind === "interop") ? origin.format : void 0;
|
|
1092
|
+
if (provenance !== vendor)
|
|
1093
|
+
problems.add(
|
|
1094
|
+
`${ref} (installed package is not an imported ${vendor} plugin; a same-named native package does not satisfy a vendor dependency)`
|
|
1095
|
+
);
|
|
1096
|
+
}
|
|
1097
|
+
const visiting = /* @__PURE__ */ new Set();
|
|
1098
|
+
const checked = /* @__PURE__ */ new Set();
|
|
1099
|
+
const visit = (ref) => {
|
|
1100
|
+
if (visiting.has(ref)) {
|
|
1101
|
+
problems.add(`${ref} (dependency cycle)`);
|
|
1102
|
+
return;
|
|
1103
|
+
}
|
|
1104
|
+
if (checked.has(ref)) return;
|
|
1105
|
+
const dependency = available.get(ref);
|
|
1106
|
+
if (!dependency) {
|
|
1107
|
+
problems.add(`${ref} (missing, inactive, or unavailable in ${scope} scope)`);
|
|
1108
|
+
return;
|
|
1109
|
+
}
|
|
1110
|
+
visiting.add(ref);
|
|
1111
|
+
for (const nested of dependency.manifest?.clio.requires ?? []) visit(nested);
|
|
1112
|
+
visiting.delete(ref);
|
|
1113
|
+
checked.add(ref);
|
|
1114
|
+
};
|
|
1115
|
+
for (const ref of requirements) visit(ref);
|
|
1116
|
+
return [...problems];
|
|
1117
|
+
}
|
|
1118
|
+
function planInteropAdoption(input) {
|
|
1119
|
+
const cwd = path3.resolve(input.cwd ?? process.cwd());
|
|
1120
|
+
const scope = input.scope ?? "user";
|
|
1121
|
+
const installed = listInstalledPlugins(cwd, { all: true });
|
|
1122
|
+
const installedSkills = loadSkills({
|
|
1123
|
+
cwd,
|
|
1124
|
+
roots: [
|
|
1125
|
+
{ path: path3.join(clioConfigDir(), "skills"), scope: "user" },
|
|
1126
|
+
{ path: path3.join(cwd, ".clio-coder/skills"), scope: "project" },
|
|
1127
|
+
...installed.flatMap(
|
|
1128
|
+
(pkg) => pkg.resources.skills ? [{ path: path3.join(pkg.rootPath, pkg.resources.skills), rootPath: pkg.rootPath, scope: "package" }] : []
|
|
1129
|
+
)
|
|
1130
|
+
]
|
|
1131
|
+
}).items;
|
|
1132
|
+
const installedPrompts = loadPromptTemplates({
|
|
1133
|
+
cwd,
|
|
1134
|
+
roots: [
|
|
1135
|
+
{ path: path3.join(clioConfigDir(), "prompts"), scope: "user" },
|
|
1136
|
+
{ path: path3.join(cwd, ".clio-coder/prompts"), scope: "project" },
|
|
1137
|
+
...installed.flatMap(
|
|
1138
|
+
(pkg) => pkg.resources.prompts ? [{ path: path3.join(pkg.rootPath, pkg.resources.prompts), rootPath: pkg.rootPath, scope: "package" }] : []
|
|
1139
|
+
)
|
|
1140
|
+
]
|
|
1141
|
+
}).items;
|
|
1142
|
+
const promptBodies = new Set(
|
|
1143
|
+
installedPrompts.flatMap((prompt) => {
|
|
1144
|
+
try {
|
|
1145
|
+
return [prose(inventoryText(prompt.filePath)).body];
|
|
1146
|
+
} catch {
|
|
1147
|
+
return [];
|
|
1148
|
+
}
|
|
1149
|
+
})
|
|
1150
|
+
);
|
|
1151
|
+
const installedContent = new Set(
|
|
1152
|
+
installed.flatMap((pkg) => {
|
|
1153
|
+
try {
|
|
1154
|
+
const files = tree(pkg.rootPath);
|
|
1155
|
+
delete files["plugin.json"];
|
|
1156
|
+
return [digest(files)];
|
|
1157
|
+
} catch {
|
|
1158
|
+
return [];
|
|
1159
|
+
}
|
|
1160
|
+
})
|
|
1161
|
+
);
|
|
1162
|
+
const planned = /* @__PURE__ */ new Set();
|
|
1163
|
+
const plan = { host: input.host, cwd, scope, entries: [] };
|
|
1164
|
+
for (const item of input.inventory.items) {
|
|
1165
|
+
const skip = (reason) => {
|
|
1166
|
+
plan.entries.push({ item, action: "skip", reason });
|
|
1167
|
+
};
|
|
1168
|
+
if (!["skill", "agent", "prompt", "plugin"].includes(item.kind)) {
|
|
1169
|
+
skip(`Not adoptable: ${item.kind} is executable configuration or unsupported presentation data.`);
|
|
1170
|
+
continue;
|
|
1171
|
+
}
|
|
1172
|
+
if (input.kind && item.kind !== input.kind) {
|
|
1173
|
+
skip(`Excluded by --kind ${input.kind}.`);
|
|
1174
|
+
continue;
|
|
1175
|
+
}
|
|
1176
|
+
if (item.plugin && !input.kind && planned.has(item.plugin)) {
|
|
1177
|
+
skip("Provided by an installed or planned portable plugin.");
|
|
1178
|
+
continue;
|
|
1179
|
+
}
|
|
1180
|
+
try {
|
|
1181
|
+
if (item.kind === "skill" && installedSkills.some((skill) => skill.normalizedHash === normalizedSkillHash(inventoryText(item.path)))) {
|
|
1182
|
+
skip("Already installed: same skill content digest.");
|
|
1183
|
+
continue;
|
|
1184
|
+
}
|
|
1185
|
+
if (item.kind === "prompt" && promptBodies.has(prose(inventoryText(item.path)).body)) {
|
|
1186
|
+
skip("Already installed: same prompt content digest.");
|
|
1187
|
+
continue;
|
|
1188
|
+
}
|
|
1189
|
+
const value = prepared(item, input.host);
|
|
1190
|
+
const missing = unmetRequirements(value.requirements, cwd, scope, vendorOf(value.format));
|
|
1191
|
+
if (missing.length) {
|
|
1192
|
+
skip(
|
|
1193
|
+
`Unsatisfied package requirements: ${missing.join(", ")}. Install dependencies through the library and review a new plan; no extra resources are imported.`
|
|
1194
|
+
);
|
|
1195
|
+
continue;
|
|
1196
|
+
}
|
|
1197
|
+
const hash = digest(value.files);
|
|
1198
|
+
if (item.kind === "plugin" && installed.some((pkg) => pkg.id === value.id && pkg.version === value.version)) {
|
|
1199
|
+
planned.add(item.path);
|
|
1200
|
+
skip("Already installed: same package id and version.");
|
|
1201
|
+
continue;
|
|
1202
|
+
}
|
|
1203
|
+
const resourceFiles = { ...value.files };
|
|
1204
|
+
delete resourceFiles["plugin.json"];
|
|
1205
|
+
if (Object.keys(resourceFiles).length > 0 && installedContent.has(digest(resourceFiles))) {
|
|
1206
|
+
skip("Already installed: same content digest.");
|
|
1207
|
+
continue;
|
|
1208
|
+
}
|
|
1209
|
+
if (installed.some((pkg) => pkg.id === value.id && pkg.scope === scope) || planned.has(value.id)) {
|
|
1210
|
+
skip("Package identifier collision; existing content will not be replaced.");
|
|
1211
|
+
continue;
|
|
1212
|
+
}
|
|
1213
|
+
planned.add(value.id);
|
|
1214
|
+
if (item.kind === "plugin") planned.add(item.path);
|
|
1215
|
+
plan.entries.push({
|
|
1216
|
+
item,
|
|
1217
|
+
action: "install",
|
|
1218
|
+
id: value.id,
|
|
1219
|
+
destination: path3.join(pluginBaseDir(scope, cwd), value.id),
|
|
1220
|
+
files: value.files,
|
|
1221
|
+
digest: hash,
|
|
1222
|
+
reason: value.note,
|
|
1223
|
+
omitted: value.omitted,
|
|
1224
|
+
requirements: value.requirements,
|
|
1225
|
+
...value.format ? { format: value.format } : {},
|
|
1226
|
+
...value.outcomes?.length ? { outcomes: value.outcomes } : {},
|
|
1227
|
+
...value.unsupported?.length ? { unsupported: value.unsupported } : {}
|
|
1228
|
+
});
|
|
1229
|
+
} catch (error) {
|
|
1230
|
+
skip(error instanceof Error ? error.message : String(error));
|
|
1231
|
+
}
|
|
1232
|
+
}
|
|
1233
|
+
return plan;
|
|
1234
|
+
}
|
|
1235
|
+
function renderOutcomes(outcomes) {
|
|
1236
|
+
return (outcomes ?? []).map((outcome) => {
|
|
1237
|
+
const detail = [
|
|
1238
|
+
...outcome.omittedFields?.length ? [`omitted frontmatter: ${outcome.omittedFields.join(", ")}`] : [],
|
|
1239
|
+
...outcome.omittedFiles?.length ? [`omitted files: ${outcome.omittedFiles.join(", ")}`] : [],
|
|
1240
|
+
...outcome.reason ? [outcome.reason] : []
|
|
1241
|
+
];
|
|
1242
|
+
return outcome.status === "converted" ? ` CONVERT ${outcome.kind} ${outcome.name} -> ${outcome.destination}${detail.length ? ` (${detail.join("; ")})` : ""}` : ` UNSUPPORTED ${outcome.kind} ${outcome.name} (${outcome.source}): ${detail.join("; ")}`;
|
|
1243
|
+
});
|
|
1244
|
+
}
|
|
1245
|
+
function renderInteropAdoptionPlan(plan) {
|
|
1246
|
+
return [
|
|
1247
|
+
`Adopt resources from ${plan.host} into Clio (${plan.scope})?`,
|
|
1248
|
+
...plan.entries.flatMap((entry) => [
|
|
1249
|
+
`${entry.action.toUpperCase()} ${entry.item.kind} ${entry.item.name} (${entry.item.scope})`,
|
|
1250
|
+
` Source: ${entry.item.path}`,
|
|
1251
|
+
...entry.destination ? [` Destination: ${entry.destination}`, ` SHA-256: ${entry.digest}`] : [],
|
|
1252
|
+
` ${entry.reason}`,
|
|
1253
|
+
...entry.format && entry.format !== "portable" ? [` Format: ${entry.format} (normalized to a portable Clio package)`] : [],
|
|
1254
|
+
...entry.requirements?.length ? [` Requires installed packages: ${entry.requirements.join(", ")}`] : [],
|
|
1255
|
+
...renderOutcomes(entry.outcomes),
|
|
1256
|
+
...(entry.unsupported ?? []).map((feature) => ` UNSUPPORTED ${feature}`),
|
|
1257
|
+
...(entry.omitted ?? []).map((file) => ` SKIP ${file}: executable, host-specific, or non-text data.`)
|
|
1258
|
+
]),
|
|
1259
|
+
"Foreign resources remain untrusted until the project-import trust setting is enabled.",
|
|
1260
|
+
"Host files are never changed. Approval applies only to the displayed content."
|
|
1261
|
+
].join("\n");
|
|
1262
|
+
}
|
|
1263
|
+
function interopOrigin(host, entry) {
|
|
1264
|
+
const marketplace = entry.item.marketplace && entry.item.marketplace !== "unknown" ? entry.item.marketplace : void 0;
|
|
1265
|
+
return {
|
|
1266
|
+
kind: "interop",
|
|
1267
|
+
host,
|
|
1268
|
+
source: path3.resolve(entry.item.path),
|
|
1269
|
+
...entry.format ? { format: entry.format } : {},
|
|
1270
|
+
...marketplace ? { marketplace } : {}
|
|
1271
|
+
};
|
|
1272
|
+
}
|
|
1273
|
+
function applyInteropAdoption(plan, approved) {
|
|
1274
|
+
const result = { installed: [], diagnostics: [] };
|
|
1275
|
+
if (!approved) {
|
|
1276
|
+
result.diagnostics.push("Approval required; nothing installed.");
|
|
1277
|
+
return result;
|
|
1278
|
+
}
|
|
1279
|
+
for (const entry of plan.entries) {
|
|
1280
|
+
if (entry.action !== "install" || !entry.files || !entry.id) continue;
|
|
1281
|
+
let staging;
|
|
1282
|
+
try {
|
|
1283
|
+
const current = prepared(entry.item, plan.host);
|
|
1284
|
+
if (digest(entry.files) !== entry.digest || digest(current.files) !== entry.digest)
|
|
1285
|
+
throw new Error("Source or plan changed after review; inspect a new plan.");
|
|
1286
|
+
const missing = unmetRequirements(current.requirements, plan.cwd, plan.scope, vendorOf(current.format));
|
|
1287
|
+
if (missing.length)
|
|
1288
|
+
throw new Error(
|
|
1289
|
+
`Unsatisfied package requirements after review: ${missing.join(", ")}. No extra resources are imported.`
|
|
1290
|
+
);
|
|
1291
|
+
staging = mkdtempSync(path3.join(tmpdir(), "clio-coder-interop-adopt-"));
|
|
1292
|
+
for (const [file, text] of Object.entries(entry.files)) {
|
|
1293
|
+
const target = path3.join(staging, file);
|
|
1294
|
+
mkdirSync(path3.dirname(target), { recursive: true });
|
|
1295
|
+
writeFileSync(target, text, { mode: 420 });
|
|
1296
|
+
}
|
|
1297
|
+
const candidate = readPluginManifest(staging);
|
|
1298
|
+
if (!candidate.valid || !candidate.contentDigest)
|
|
1299
|
+
throw new Error(candidate.diagnostics.map((d) => d.message).join("; "));
|
|
1300
|
+
const installed = installInteropPackage({
|
|
1301
|
+
sourcePath: staging,
|
|
1302
|
+
kind: entry.item.kind,
|
|
1303
|
+
trust: "foreign",
|
|
1304
|
+
cwd: plan.cwd,
|
|
1305
|
+
scope: plan.scope,
|
|
1306
|
+
expectedId: entry.id,
|
|
1307
|
+
expectedDigest: candidate.contentDigest,
|
|
1308
|
+
origin: interopOrigin(plan.host, entry)
|
|
1309
|
+
});
|
|
1310
|
+
if (installed.plugin) result.installed.push(installed.plugin.id);
|
|
1311
|
+
result.diagnostics.push(...installed.diagnostics.map((d) => d.message));
|
|
1312
|
+
} catch (error) {
|
|
1313
|
+
result.diagnostics.push(`${entry.item.name}: ${error instanceof Error ? error.message : String(error)}`);
|
|
1314
|
+
} finally {
|
|
1315
|
+
if (staging) rmSync(staging, { recursive: true, force: true });
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
return result;
|
|
1319
|
+
}
|
|
1320
|
+
|
|
1321
|
+
// src/domains/interop/import.ts
|
|
1322
|
+
init_esm_shims();
|
|
1323
|
+
import { mkdirSync as mkdirSync2, mkdtempSync as mkdtempSync2, rmSync as rmSync2, writeFileSync as writeFileSync2 } from "node:fs";
|
|
1324
|
+
import { tmpdir as tmpdir2 } from "node:os";
|
|
1325
|
+
import path4 from "node:path";
|
|
1326
|
+
function prepare(root, format) {
|
|
1327
|
+
const detection = detectForeignPlugin(root, format);
|
|
1328
|
+
if (detection.format === "portable") return { detection, value: preparePortablePackage(root) };
|
|
1329
|
+
if (detection.format === "none") throw new Error(detection.diagnostics.join(" "));
|
|
1330
|
+
return { detection, value: prepareForeignPackage(root, detection.format) };
|
|
1331
|
+
}
|
|
1332
|
+
function planLibraryImport(input, options = {}) {
|
|
1333
|
+
const cwd = path4.resolve(options.cwd ?? process.cwd());
|
|
1334
|
+
const scope = options.scope ?? "user";
|
|
1335
|
+
const remote = parsePluginGithubSource(input);
|
|
1336
|
+
const local = pluginLocalPath(input, cwd);
|
|
1337
|
+
const fetched = fetchPluginSource(input, cwd);
|
|
1338
|
+
const source = remote ? { input, transport: "github", root: fetched.root, url: input } : { input, transport: "local", root: fetched.root, path: local };
|
|
1339
|
+
const originSource = remote ? input : path4.resolve(local);
|
|
1340
|
+
try {
|
|
1341
|
+
const raw = reviewFingerprint(fetched.root);
|
|
1342
|
+
let detection;
|
|
1343
|
+
let value;
|
|
1344
|
+
const reasons = [];
|
|
1345
|
+
try {
|
|
1346
|
+
({ detection, value } = prepare(fetched.root, options.format));
|
|
1347
|
+
} catch (error) {
|
|
1348
|
+
detection = detectForeignPlugin(fetched.root, options.format);
|
|
1349
|
+
reasons.push(error instanceof Error ? error.message : String(error));
|
|
1350
|
+
}
|
|
1351
|
+
reasons.push(...detection.diagnostics);
|
|
1352
|
+
const format = value?.format ?? (detection.format === "none" ? void 0 : detection.format);
|
|
1353
|
+
const origin = {
|
|
1354
|
+
kind: "import",
|
|
1355
|
+
source: originSource,
|
|
1356
|
+
transport: remote ? "github" : "local",
|
|
1357
|
+
format: format ?? "portable",
|
|
1358
|
+
...options.host ? { host: options.host } : {},
|
|
1359
|
+
...options.marketplace ? { marketplace: options.marketplace } : {}
|
|
1360
|
+
};
|
|
1361
|
+
const base = {
|
|
1362
|
+
source,
|
|
1363
|
+
detection,
|
|
1364
|
+
...format ? { format } : {},
|
|
1365
|
+
scope,
|
|
1366
|
+
cwd,
|
|
1367
|
+
outcomes: value?.outcomes ?? [],
|
|
1368
|
+
unsupported: value?.unsupported ?? [],
|
|
1369
|
+
omitted: value?.omitted ?? [],
|
|
1370
|
+
requirements: value?.requirements ?? [],
|
|
1371
|
+
origin,
|
|
1372
|
+
reviewFingerprint: raw,
|
|
1373
|
+
cleanup: fetched.cleanup
|
|
1374
|
+
};
|
|
1375
|
+
if (!value) return { ...base, action: "blocked", reasons };
|
|
1376
|
+
const missing = unmetRequirements(value.requirements, cwd, scope, vendorOf(value.format));
|
|
1377
|
+
if (missing.length)
|
|
1378
|
+
reasons.push(
|
|
1379
|
+
`Unsatisfied package requirements: ${missing.join(", ")}. Install or import those packages first; no extra resources are imported.`
|
|
1380
|
+
);
|
|
1381
|
+
const installed = listInstalledPlugins(cwd, { all: true });
|
|
1382
|
+
if (installed.some((pkg) => pkg.id === value.id && pkg.scope === scope))
|
|
1383
|
+
reasons.push(`Package ${value.id} is already installed in ${scope} scope; remove it before importing again.`);
|
|
1384
|
+
const blocked = missing.length > 0 || installed.some((pkg) => pkg.id === value.id && pkg.scope === scope);
|
|
1385
|
+
return {
|
|
1386
|
+
...base,
|
|
1387
|
+
action: blocked ? "blocked" : "install",
|
|
1388
|
+
reasons: [value.note, ...reasons],
|
|
1389
|
+
id: value.id,
|
|
1390
|
+
version: value.version,
|
|
1391
|
+
destination: path4.join(pluginBaseDir(scope, cwd), value.id),
|
|
1392
|
+
digest: digest(value.files),
|
|
1393
|
+
files: value.files
|
|
1394
|
+
};
|
|
1395
|
+
} catch (error) {
|
|
1396
|
+
fetched.cleanup();
|
|
1397
|
+
throw error;
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
function releaseLibraryImport(plan) {
|
|
1401
|
+
plan.cleanup();
|
|
1402
|
+
}
|
|
1403
|
+
function applyLibraryImport(plan, approved, options = {}) {
|
|
1404
|
+
const admission = {
|
|
1405
|
+
trust: "foreign",
|
|
1406
|
+
gate: "integrations.projectResources.trustProjectImports",
|
|
1407
|
+
gateEnabled: options.trustProjectImports === void 0 ? "unknown" : options.trustProjectImports
|
|
1408
|
+
};
|
|
1409
|
+
const result = { published: false, admission, diagnostics: [] };
|
|
1410
|
+
let staging;
|
|
1411
|
+
try {
|
|
1412
|
+
if (!approved) {
|
|
1413
|
+
result.diagnostics.push("Approval required; nothing installed.");
|
|
1414
|
+
return result;
|
|
1415
|
+
}
|
|
1416
|
+
if (plan.action !== "install" || !plan.files || !plan.id || !plan.digest) {
|
|
1417
|
+
result.diagnostics.push(...plan.reasons.length ? plan.reasons : ["Plan is not installable."]);
|
|
1418
|
+
return result;
|
|
1419
|
+
}
|
|
1420
|
+
if (reviewFingerprint(plan.source.root) !== plan.reviewFingerprint)
|
|
1421
|
+
throw new Error("Source changed after review; inspect a new plan.");
|
|
1422
|
+
const current = prepare(plan.source.root, plan.format === "portable" ? void 0 : plan.format).value;
|
|
1423
|
+
if (digest(plan.files) !== plan.digest || digest(current.files) !== plan.digest)
|
|
1424
|
+
throw new Error("Plan changed after review; inspect a new plan.");
|
|
1425
|
+
const missing = unmetRequirements(current.requirements, plan.cwd, plan.scope, vendorOf(current.format));
|
|
1426
|
+
if (missing.length)
|
|
1427
|
+
throw new Error(
|
|
1428
|
+
`Unsatisfied package requirements after review: ${missing.join(", ")}. No extra resources are imported.`
|
|
1429
|
+
);
|
|
1430
|
+
staging = mkdtempSync2(path4.join(tmpdir2(), "clio-coder-library-import-"));
|
|
1431
|
+
for (const [file, text] of Object.entries(plan.files)) {
|
|
1432
|
+
const target = path4.join(staging, file);
|
|
1433
|
+
mkdirSync2(path4.dirname(target), { recursive: true });
|
|
1434
|
+
writeFileSync2(target, text, { mode: 420 });
|
|
1435
|
+
}
|
|
1436
|
+
const candidate = readPluginManifest(staging);
|
|
1437
|
+
if (!candidate.valid || !candidate.contentDigest)
|
|
1438
|
+
throw new Error(candidate.diagnostics.map((d) => d.message).join("; "));
|
|
1439
|
+
const installed = installInteropPackage({
|
|
1440
|
+
sourcePath: staging,
|
|
1441
|
+
kind: candidate.manifest?.clio.kind ?? "plugin",
|
|
1442
|
+
trust: "foreign",
|
|
1443
|
+
cwd: plan.cwd,
|
|
1444
|
+
scope: plan.scope,
|
|
1445
|
+
expectedId: plan.id,
|
|
1446
|
+
expectedDigest: candidate.contentDigest,
|
|
1447
|
+
origin: plan.origin
|
|
1448
|
+
});
|
|
1449
|
+
result.diagnostics.push(...installed.diagnostics.map((d) => d.message));
|
|
1450
|
+
if (installed.plugin) {
|
|
1451
|
+
result.published = true;
|
|
1452
|
+
result.installed = installed.plugin.id;
|
|
1453
|
+
result.destination = installed.plugin.rootPath;
|
|
1454
|
+
result.validation = validateLibraryPackage(installed.plugin.rootPath, { cwd: plan.cwd });
|
|
1455
|
+
}
|
|
1456
|
+
return result;
|
|
1457
|
+
} catch (error) {
|
|
1458
|
+
result.diagnostics.push(error instanceof Error ? error.message : String(error));
|
|
1459
|
+
return result;
|
|
1460
|
+
} finally {
|
|
1461
|
+
if (staging) rmSync2(staging, { recursive: true, force: true });
|
|
1462
|
+
releaseLibraryImport(plan);
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
function libraryImportPlanSummary(plan) {
|
|
1466
|
+
const { files: _files, cleanup: _cleanup, ...summary } = plan;
|
|
1467
|
+
return summary;
|
|
1468
|
+
}
|
|
1469
|
+
function renderLibraryImportPlan(plan) {
|
|
1470
|
+
const lines = [
|
|
1471
|
+
`Import ${plan.source.transport === "github" ? plan.source.url : plan.source.path} into Clio (${plan.scope})?`,
|
|
1472
|
+
` Format: ${plan.format ?? "unknown"}${plan.detection.manifestPath ? ` (${plan.detection.manifestPath})` : ""}`,
|
|
1473
|
+
...plan.action === "install" ? [` Package: ${plan.id} ${plan.version}`, ` Destination: ${plan.destination}`, ` SHA-256: ${plan.digest}`] : [" BLOCKED"],
|
|
1474
|
+
...plan.reasons.map((reason) => ` ${reason}`),
|
|
1475
|
+
...plan.requirements.length ? [` Requires installed packages: ${plan.requirements.join(", ")}`] : [],
|
|
1476
|
+
...plan.outcomes.map((outcome) => {
|
|
1477
|
+
const detail = [
|
|
1478
|
+
...outcome.omittedFields?.length ? [`omitted frontmatter: ${outcome.omittedFields.join(", ")}`] : [],
|
|
1479
|
+
...outcome.omittedFiles?.length ? [`omitted files: ${outcome.omittedFiles.join(", ")}`] : [],
|
|
1480
|
+
...outcome.reason ? [outcome.reason] : []
|
|
1481
|
+
];
|
|
1482
|
+
return outcome.status === "converted" ? ` CONVERT ${outcome.kind} ${outcome.name} -> ${outcome.destination}${detail.length ? ` (${detail.join("; ")})` : ""}` : ` UNSUPPORTED ${outcome.kind} ${outcome.name} (${outcome.source}): ${detail.join("; ")}`;
|
|
1483
|
+
}),
|
|
1484
|
+
...plan.unsupported.map((feature) => ` UNSUPPORTED ${feature}`),
|
|
1485
|
+
...plan.omitted.map((file) => ` SKIP ${file}: executable, host-specific, or non-text data.`),
|
|
1486
|
+
"Imported resources keep foreign trust and stay behind the project-import trust setting.",
|
|
1487
|
+
"Source files are never changed. Approval applies only to the displayed content."
|
|
1488
|
+
];
|
|
1489
|
+
return lines.join("\n");
|
|
1490
|
+
}
|
|
1491
|
+
|
|
1492
|
+
// src/domains/interop/index.ts
|
|
1493
|
+
init_esm_shims();
|
|
1494
|
+
|
|
1495
|
+
// src/domains/interop/extension.ts
|
|
1496
|
+
init_esm_shims();
|
|
1497
|
+
var EMPTY_REPORT = { version: 1, detectedAt: (/* @__PURE__ */ new Date(0)).toISOString(), agents: [] };
|
|
1498
|
+
function createInteropBundle(_context) {
|
|
1499
|
+
let detected = null;
|
|
1500
|
+
const extension = {
|
|
1501
|
+
start() {
|
|
1502
|
+
return void 0;
|
|
1503
|
+
}
|
|
1504
|
+
};
|
|
1505
|
+
const contract = {
|
|
1506
|
+
kinds() {
|
|
1507
|
+
return INTEROP_AGENT_KINDS;
|
|
1508
|
+
},
|
|
1509
|
+
async detect(input = {}) {
|
|
1510
|
+
detected = await detectInteropAgents(input, detected?.agents);
|
|
1511
|
+
return detected;
|
|
1512
|
+
},
|
|
1513
|
+
// A decision is written and read back, so the report an overlay rebuilds
|
|
1514
|
+
// from carries it: a declined row leaves the proposal list on the
|
|
1515
|
+
// keystroke rather than on the next detection.
|
|
1516
|
+
lastReport() {
|
|
1517
|
+
return detected ?? readInteropReport();
|
|
1518
|
+
},
|
|
1519
|
+
proposals(report) {
|
|
1520
|
+
return interopProposals(report, readSettings());
|
|
1521
|
+
},
|
|
1522
|
+
// Read here, not from the hot settings snapshot the TUI holds: that one is
|
|
1523
|
+
// refreshed by the config watcher a tick after the write, and the overlay
|
|
1524
|
+
// rebuilds its rows the moment accept returns. An accepted peer was gone
|
|
1525
|
+
// from the proposals, which read the file, and not yet in the configured
|
|
1526
|
+
// list, which read the snapshot, so it was in neither until a reopen.
|
|
1527
|
+
configured() {
|
|
1528
|
+
return readSettings().integrations.externalAgents.entries;
|
|
1529
|
+
},
|
|
1530
|
+
accept(ids) {
|
|
1531
|
+
const result = acceptInteropAgents(ids, detected ?? readInteropReport() ?? EMPTY_REPORT);
|
|
1532
|
+
detected = readInteropReport() ?? detected;
|
|
1533
|
+
return result;
|
|
1534
|
+
},
|
|
1535
|
+
decline(ids) {
|
|
1536
|
+
const result = declineInteropAgents(ids, detected ?? readInteropReport() ?? EMPTY_REPORT);
|
|
1537
|
+
detected = readInteropReport() ?? detected;
|
|
1538
|
+
return result;
|
|
1539
|
+
},
|
|
1540
|
+
bootHint(report) {
|
|
1541
|
+
return interopBootHint(report, readSettings());
|
|
1542
|
+
}
|
|
1543
|
+
};
|
|
1544
|
+
return { extension, contract };
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
// src/domains/interop/manifest.ts
|
|
1548
|
+
init_esm_shims();
|
|
1549
|
+
var InteropManifest = {
|
|
1550
|
+
name: "interop",
|
|
1551
|
+
dependsOn: ["config"]
|
|
1552
|
+
};
|
|
1553
|
+
|
|
1554
|
+
// src/domains/interop/index.ts
|
|
1555
|
+
var InteropDomainModule = {
|
|
1556
|
+
manifest: InteropManifest,
|
|
1557
|
+
createExtension: createInteropBundle
|
|
1558
|
+
};
|
|
1559
|
+
|
|
1560
|
+
export {
|
|
1561
|
+
INHERITED_PROJECT_CONTEXT,
|
|
1562
|
+
delegationEntryForKind,
|
|
1563
|
+
interopProposals,
|
|
1564
|
+
renderProposalEntry,
|
|
1565
|
+
acceptInteropAgents,
|
|
1566
|
+
declineInteropAgents,
|
|
1567
|
+
planInteropAdoption,
|
|
1568
|
+
renderInteropAdoptionPlan,
|
|
1569
|
+
applyInteropAdoption,
|
|
1570
|
+
planLibraryImport,
|
|
1571
|
+
releaseLibraryImport,
|
|
1572
|
+
applyLibraryImport,
|
|
1573
|
+
libraryImportPlanSummary,
|
|
1574
|
+
renderLibraryImportPlan,
|
|
1575
|
+
InteropDomainModule
|
|
1576
|
+
};
|
|
1577
|
+
//# sourceMappingURL=chunk-T2MDZES3.js.map
|