@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* One capacity-aware model-residency reconciler, shared by every local runtime
|
|
3
|
-
* that
|
|
3
|
+
* that manages loaded models. Both the interactive chat loop and the headless
|
|
4
4
|
* worker drive the provider stream path, so calling the reconciler at the top
|
|
5
5
|
* of each manageable runtime's stream gives exactly one place that decides
|
|
6
6
|
* load and evict for both paths.
|
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
* Co-residency is the default. Local servers are multi-model hosts with finite
|
|
9
9
|
* VRAM, not single-model slots: when the runtime advertises capacity (the
|
|
10
10
|
* llama.cpp router's `max_instances`) and a slot is free, Clio loads without
|
|
11
|
-
* evicting anything; when the runtime loads just-in-time
|
|
12
|
-
*
|
|
13
|
-
*
|
|
11
|
+
* evicting anything; when the runtime loads just-in-time (LM Studio), Clio
|
|
12
|
+
* attempts the co-resident load first and considers swapping only after an
|
|
13
|
+
* explicit capacity rejection; when the server schedules fits itself
|
|
14
14
|
* (Ollama), Clio releases only its own unprotected stragglers. Eviction is the
|
|
15
|
-
* exception,
|
|
16
|
-
*
|
|
15
|
+
* exception, using only Clio-attributed loads. It never selects a protected
|
|
16
|
+
* resident while an unprotected owned one is available.
|
|
17
17
|
*
|
|
18
18
|
* Protection is symmetric and role-aware. Residents tagged `pinned:true` or
|
|
19
19
|
* `role:scout` by the server operator are never evicted. Residents referenced
|
|
@@ -24,12 +24,12 @@
|
|
|
24
24
|
* when capacity is exhausted. No Clio profile silently evicts another profile's
|
|
25
25
|
* model, and no chat switch silently unloads the memory plane.
|
|
26
26
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
27
|
+
* Failed metadata reads degrade to observe-only. Explicit mutation failures
|
|
28
|
+
* propagate after rollback, and router adapters must honor a declined plan
|
|
29
|
+
* before allowing an inference request to trigger an automatic load.
|
|
30
|
+
* An explicit target `lifecycle: user-managed` forces observe-only.
|
|
31
|
+
* Collision and stress notices travel over the event bus. One successful
|
|
32
|
+
* reconcile decision holds per (target, model) within a
|
|
33
33
|
* TTL, and mutations for a target are serialized across processes through a
|
|
34
34
|
* state-dir lock file so a worker and the orchestrator cannot interleave
|
|
35
35
|
* unload/load against the same server.
|
|
@@ -37,11 +37,15 @@
|
|
|
37
37
|
|
|
38
38
|
import {
|
|
39
39
|
BusChannels,
|
|
40
|
+
type DeclaredRuntimeNotice,
|
|
40
41
|
type ResidencyMutationPayload,
|
|
41
42
|
type RuntimeNoticeKind,
|
|
42
43
|
type RuntimeNoticePayload,
|
|
43
44
|
} from "../../core/bus-events.js";
|
|
45
|
+
import { canonicalEndpointUrl } from "../../core/endpoint-key.js";
|
|
46
|
+
import type { SafeEventBus } from "../../core/event-bus.js";
|
|
44
47
|
import type { ProtectedModelRef, ResidencyRole } from "../../core/residency-protection.js";
|
|
48
|
+
import { residencyTargetKey } from "../../core/residency-target-key.js";
|
|
45
49
|
import { getSharedBus } from "../../core/shared-bus.js";
|
|
46
50
|
import { withResidencyLock } from "./residency-lock.js";
|
|
47
51
|
import { type ResidentModelInfo, residentMatchesKeep } from "./resident-models.js";
|
|
@@ -54,7 +58,7 @@ export type { RuntimeNoticeKind };
|
|
|
54
58
|
export type ResidencyNoticeSink = (notice: ResidencyNotice) => void;
|
|
55
59
|
|
|
56
60
|
function busNoticeSink(notice: ResidencyNotice): void {
|
|
57
|
-
getSharedBus().emit(BusChannels.RuntimeNotice, notice);
|
|
61
|
+
getSharedBus().emit(BusChannels.RuntimeNotice, notice as DeclaredRuntimeNotice);
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
let noticeSink: ResidencyNoticeSink = busNoticeSink;
|
|
@@ -69,15 +73,64 @@ export function setResidencyNoticeSink(sink: ResidencyNoticeSink | null): void {
|
|
|
69
73
|
noticeSink = sink ?? busNoticeSink;
|
|
70
74
|
}
|
|
71
75
|
|
|
72
|
-
/**
|
|
73
|
-
|
|
76
|
+
/**
|
|
77
|
+
* Deliver one notice through the active sink, or onto `bus` when the producer
|
|
78
|
+
* was handed one explicitly. Never throws into a turn.
|
|
79
|
+
*/
|
|
80
|
+
function deliverNotice(notice: ResidencyNotice, bus?: Pick<SafeEventBus, "emit">): void {
|
|
74
81
|
try {
|
|
75
|
-
|
|
82
|
+
if (bus) bus.emit(BusChannels.RuntimeNotice, notice as DeclaredRuntimeNotice);
|
|
83
|
+
else noticeSink(notice);
|
|
76
84
|
} catch {
|
|
77
85
|
// A notice is informational; a sink failure must never escape into a turn.
|
|
78
86
|
}
|
|
79
87
|
}
|
|
80
88
|
|
|
89
|
+
// --- notice producers ----------------------------------------------------------
|
|
90
|
+
|
|
91
|
+
const noticeProducers = new Map<string, ReadonlySet<RuntimeNoticeKind>>();
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Emitter bound to the kinds its producer declared; any other kind is a type
|
|
95
|
+
* error. A producer that owns an injected bus passes it; otherwise the notice
|
|
96
|
+
* goes to the active sink.
|
|
97
|
+
*/
|
|
98
|
+
export type RuntimeNoticeEmitter<K extends RuntimeNoticeKind> = (
|
|
99
|
+
notice: ResidencyNotice & { kind: K },
|
|
100
|
+
bus?: Pick<SafeEventBus, "emit">,
|
|
101
|
+
) => void;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Declare a module as the producer of some {@link RuntimeNoticeKind} members
|
|
105
|
+
* and get back the only way to emit them. Emission goes exclusively through
|
|
106
|
+
* these emitters, so a registered kind always has code that emits it, and a
|
|
107
|
+
* contract test checks that every member of the union is registered by some
|
|
108
|
+
* producer. Call once at module scope.
|
|
109
|
+
*/
|
|
110
|
+
export function declareRuntimeNoticeProducer<const K extends RuntimeNoticeKind>(
|
|
111
|
+
producer: string,
|
|
112
|
+
kinds: ReadonlyArray<K>,
|
|
113
|
+
): RuntimeNoticeEmitter<K> {
|
|
114
|
+
noticeProducers.set(producer, new Set(kinds));
|
|
115
|
+
return deliverNotice;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** Every declared producer with the kinds it emits. */
|
|
119
|
+
export function runtimeNoticeProducers(): ReadonlyMap<string, ReadonlySet<RuntimeNoticeKind>> {
|
|
120
|
+
return noticeProducers;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
type ReconcilerNoticeKind = "will-not-fit" | "about-to-evict" | "swap" | "co-resident" | "stress";
|
|
124
|
+
type ReconcilerNotice = ResidencyNotice & { kind: ReconcilerNoticeKind };
|
|
125
|
+
|
|
126
|
+
const emitReconcilerNotice = declareRuntimeNoticeProducer<ReconcilerNoticeKind>("residency-reconciler", [
|
|
127
|
+
"will-not-fit",
|
|
128
|
+
"about-to-evict",
|
|
129
|
+
"swap",
|
|
130
|
+
"co-resident",
|
|
131
|
+
"stress",
|
|
132
|
+
]);
|
|
133
|
+
|
|
81
134
|
/** Publish one successful residency mutation to in-process cache telemetry. */
|
|
82
135
|
export function emitResidencyMutation(mutation: Omit<ResidencyMutationPayload, "at">): void {
|
|
83
136
|
getSharedBus().emit(BusChannels.ResidencyMutation, { ...mutation, at: Date.now() });
|
|
@@ -125,12 +178,11 @@ export function residentTagProtected(tags: ReadonlyArray<string> | undefined): b
|
|
|
125
178
|
|
|
126
179
|
// Models Clio itself loaded, keyed by a stable per-server target key. The
|
|
127
180
|
// registry is per-process; a resident model absent from it may still be
|
|
128
|
-
// another Clio process's model
|
|
129
|
-
// protection above rather than on attribution alone.
|
|
181
|
+
// another Clio process's model. Those loads are foreign to this session.
|
|
130
182
|
const clioLoaded = new Map<string, Set<string>>();
|
|
131
183
|
|
|
132
184
|
/** Record that Clio loaded `modelId` on the target identified by `targetKey`. */
|
|
133
|
-
function markClioLoaded(targetKey: string, modelId: string): void {
|
|
185
|
+
export function markClioLoaded(targetKey: string, modelId: string): void {
|
|
134
186
|
let set = clioLoaded.get(targetKey);
|
|
135
187
|
if (!set) {
|
|
136
188
|
set = new Set();
|
|
@@ -143,13 +195,196 @@ function forgetClioLoaded(targetKey: string, modelId: string): void {
|
|
|
143
195
|
clioLoaded.get(targetKey)?.delete(modelId);
|
|
144
196
|
}
|
|
145
197
|
|
|
146
|
-
|
|
198
|
+
/**
|
|
199
|
+
* Drop a model Clio released outside the reconciler, such as the release on
|
|
200
|
+
* process exit, so neither the registry nor the TTL fast path still believes
|
|
201
|
+
* it resident.
|
|
202
|
+
*/
|
|
203
|
+
export function forgetReleasedModel(targetKey: string, modelId: string): void {
|
|
204
|
+
forgetClioLoaded(targetKey, modelId);
|
|
205
|
+
workerLoaded.get(targetKey)?.delete(modelId);
|
|
206
|
+
reconcileCache.delete(targetKey);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export function isClioLoaded(targetKey: string, entry: ResidentModelInfo): boolean {
|
|
147
210
|
const set = clioLoaded.get(targetKey);
|
|
148
211
|
if (!set) return false;
|
|
149
212
|
if (set.has(entry.modelId)) return true;
|
|
150
213
|
return (entry.aliasIds ?? []).some((id) => set.has(id));
|
|
151
214
|
}
|
|
152
215
|
|
|
216
|
+
// --- worker-loaded models --------------------------------------------------
|
|
217
|
+
|
|
218
|
+
// Models a dispatched worker loaded, adopted by the orchestrator so its release
|
|
219
|
+
// on exit covers them (#379). Kept apart from clioLoaded because they carry
|
|
220
|
+
// eviction protection: another dispatch may still be using one.
|
|
221
|
+
const workerLoaded = new Map<string, Set<string>>();
|
|
222
|
+
|
|
223
|
+
function isWorkerLoaded(targetKey: string, entry: ResidentModelInfo): boolean {
|
|
224
|
+
const set = workerLoaded.get(targetKey);
|
|
225
|
+
if (!set) return false;
|
|
226
|
+
return [entry.modelId, ...(entry.aliasIds ?? [])].some((id) => set.has(id));
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/** One model a request loaded and pinned, as a runtime reports it. */
|
|
230
|
+
export interface ClioModelLoad {
|
|
231
|
+
runtimeId: string;
|
|
232
|
+
targetId: string;
|
|
233
|
+
modelId: string;
|
|
234
|
+
aliasIds: string[];
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
let loadReportSink: ((load: ClioModelLoad) => void) | null = null;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Where a runtime's load reports go. The worker entry installs a sink that
|
|
241
|
+
* forwards each report to the orchestrator over the control lane; the
|
|
242
|
+
* orchestrator installs none, because its own loads are already in its
|
|
243
|
+
* registries. Passing null removes the sink.
|
|
244
|
+
*/
|
|
245
|
+
export function setModelLoadReportSink(sink: ((load: ClioModelLoad) => void) | null): void {
|
|
246
|
+
loadReportSink = sink;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Report a model this process loaded and pinned, when both residency
|
|
251
|
+
* registries attribute it to this process: the reconciler saw it absent before
|
|
252
|
+
* Clio's request, and the runtime then recorded ownership. A model that was
|
|
253
|
+
* resident before this process touched it is never reported. Never throws.
|
|
254
|
+
*/
|
|
255
|
+
export function reportClioModelLoad(load: ClioModelLoad, targetKey: string): void {
|
|
256
|
+
if (!loadReportSink || !isClioLoaded(targetKey, { modelId: load.modelId, aliasIds: load.aliasIds })) return;
|
|
257
|
+
try {
|
|
258
|
+
loadReportSink(load);
|
|
259
|
+
} catch {
|
|
260
|
+
// A report is best-effort; losing one leaves the model pinned, never a turn failed.
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/** How to reach the server a worker loaded a model on, from the orchestrator's own settings. */
|
|
265
|
+
export interface WorkerModelLoadEndpoint {
|
|
266
|
+
runtimeId: string;
|
|
267
|
+
baseUrl: string;
|
|
268
|
+
headers: Record<string, string>;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
type WorkerLoadAdopter = (targetKey: string, endpoint: WorkerModelLoadEndpoint, modelIds: string[]) => void;
|
|
272
|
+
|
|
273
|
+
const workerLoadAdopters = new Map<string, WorkerLoadAdopter>();
|
|
274
|
+
|
|
275
|
+
/** Register how a runtime takes ownership of a model a worker loaded. */
|
|
276
|
+
export function registerWorkerLoadAdopter(runtimeId: string, adopter: WorkerLoadAdopter): void {
|
|
277
|
+
workerLoadAdopters.set(runtimeId, adopter);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Adopt a model a dispatched worker loaded, so this process releases it on
|
|
282
|
+
* exit and no stream here evicts it first. Returns false when the runtime has
|
|
283
|
+
* no adopter or the endpoint has no residency key.
|
|
284
|
+
*/
|
|
285
|
+
export function adoptWorkerLoadedModel(
|
|
286
|
+
endpoint: WorkerModelLoadEndpoint,
|
|
287
|
+
load: Pick<ClioModelLoad, "modelId" | "aliasIds">,
|
|
288
|
+
): boolean {
|
|
289
|
+
const adopter = workerLoadAdopters.get(endpoint.runtimeId);
|
|
290
|
+
const targetKey = residencyTargetKey(endpoint.runtimeId, endpoint.baseUrl);
|
|
291
|
+
if (!adopter || targetKey === null) return false;
|
|
292
|
+
const ids = [load.modelId, ...load.aliasIds];
|
|
293
|
+
let set = workerLoaded.get(targetKey);
|
|
294
|
+
if (!set) {
|
|
295
|
+
set = new Set();
|
|
296
|
+
workerLoaded.set(targetKey, set);
|
|
297
|
+
}
|
|
298
|
+
for (const id of ids) {
|
|
299
|
+
set.add(id);
|
|
300
|
+
markClioLoaded(targetKey, id);
|
|
301
|
+
}
|
|
302
|
+
adopter(targetKey, endpoint, ids);
|
|
303
|
+
return true;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
// --- release on exit ------------------------------------------------------
|
|
307
|
+
|
|
308
|
+
/** Total time the release on exit may take before shutdown moves on without it. */
|
|
309
|
+
export const EXIT_RELEASE_MS = 2_000;
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Narrows a release to some models. Called with the target key and every id
|
|
313
|
+
* the resident entry answers to; true releases the model.
|
|
314
|
+
*/
|
|
315
|
+
export type ReleaseScope = (targetKey: string, modelIds: ReadonlyArray<string>) => boolean;
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* A release scope for one probe: the server reached at any of `baseUrls` and
|
|
319
|
+
* a resident entry answering to any of `modelIds`. Urls are compared by the
|
|
320
|
+
* same canonical endpoint the residency registry keys on.
|
|
321
|
+
*/
|
|
322
|
+
export function releaseScopeFor(
|
|
323
|
+
baseUrls: ReadonlyArray<string | null | undefined>,
|
|
324
|
+
modelIds: ReadonlyArray<string | null | undefined>,
|
|
325
|
+
): ReleaseScope {
|
|
326
|
+
const keys = new Set(
|
|
327
|
+
baseUrls
|
|
328
|
+
.filter((url): url is string => typeof url === "string" && url.length > 0)
|
|
329
|
+
.map((url) => canonicalEndpointUrl(url) ?? url),
|
|
330
|
+
);
|
|
331
|
+
const ids = new Set(modelIds.filter((id): id is string => typeof id === "string" && id.length > 0));
|
|
332
|
+
return (targetKey, entryIds) => keys.has(targetKey) && entryIds.some((id) => ids.has(id));
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
const exitReleasers = new Set<(scope?: ReleaseScope) => Promise<void>>();
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Register a runtime's release of the models this process loaded and pinned.
|
|
339
|
+
* A runtime registers when its module loads, so a process that never reached
|
|
340
|
+
* the runtime has nothing to release and pays nothing at exit.
|
|
341
|
+
*/
|
|
342
|
+
export function registerExitRelease(release: (scope?: ReleaseScope) => Promise<void>): void {
|
|
343
|
+
exitReleasers.add(release);
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Run every registered release. Each release bounds itself by
|
|
348
|
+
* {@link EXIT_RELEASE_MS}; a failure is swallowed so the exit code never
|
|
349
|
+
* depends on a server that is gone.
|
|
350
|
+
*/
|
|
351
|
+
export async function releaseClioLoadedModelsOnExit(scope?: ReleaseScope): Promise<void> {
|
|
352
|
+
await Promise.all(
|
|
353
|
+
[...exitReleasers].map((release) =>
|
|
354
|
+
release(scope).catch(() => {
|
|
355
|
+
// Best-effort: the model stays pinned.
|
|
356
|
+
}),
|
|
357
|
+
),
|
|
358
|
+
);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Run `task`, then release every model that became Clio-loaded while it ran,
|
|
363
|
+
* whether it settled or threw. A one-shot inference probe uses this so it never
|
|
364
|
+
* leaves a pinned model behind in a process that has no release on exit (#379).
|
|
365
|
+
* A model Clio had already loaded before the task stays pinned for the turn
|
|
366
|
+
* that loaded it, and a model resident before Clio touched it is never
|
|
367
|
+
* Clio-loaded in the first place (#313). The release is bounded by
|
|
368
|
+
* {@link EXIT_RELEASE_MS}.
|
|
369
|
+
*
|
|
370
|
+
* `scope` narrows the release further. In a process that also runs chat
|
|
371
|
+
* turns, "became Clio-loaded while the task ran" includes a model a concurrent
|
|
372
|
+
* turn loaded, so an in-session probe passes the one target and model it
|
|
373
|
+
* exercised and leaves every other load to the turn that made it.
|
|
374
|
+
*/
|
|
375
|
+
export async function releaseModelsLoadedDuring<T>(task: () => Promise<T>, scope?: ReleaseScope): Promise<T> {
|
|
376
|
+
const before = new Set<string>();
|
|
377
|
+
for (const [targetKey, ids] of clioLoaded) for (const id of ids) before.add(`${targetKey}\n${id}`);
|
|
378
|
+
try {
|
|
379
|
+
return await task();
|
|
380
|
+
} finally {
|
|
381
|
+
await releaseClioLoadedModelsOnExit(
|
|
382
|
+
(targetKey, ids) =>
|
|
383
|
+
!ids.some((id) => before.has(`${targetKey}\n${id}`)) && (scope === undefined || scope(targetKey, ids)),
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
|
|
153
388
|
// --- TTL fast path ---------------------------------------------------------
|
|
154
389
|
|
|
155
390
|
/** Skip the listResident round-trip for this long after a clean reconcile. */
|
|
@@ -163,10 +398,8 @@ const reconcileCache = new Map<string, { modelId: string; decision: "reconcile"
|
|
|
163
398
|
* eviction is even on the table:
|
|
164
399
|
* - "router": Clio must POST an explicit load (llama.cpp router) and the
|
|
165
400
|
* server advertises a slot capacity. A free slot loads without eviction;
|
|
166
|
-
* a full server frees exactly the slots needed; unknown capacity
|
|
167
|
-
*
|
|
168
|
-
* - "jit": the runtime loads on open and fails an oversized load cleanly
|
|
169
|
-
* (LM Studio with gpuStrictVramCap). Nothing is evicted up front; the
|
|
401
|
+
* a full server frees exactly the slots needed; unknown capacity with existing residents declines the load.
|
|
402
|
+
* - "jit": the runtime loads on open. Nothing is evicted up front; the
|
|
170
403
|
* plan carries ranked `fallbackEvict` candidates for a retry after a
|
|
171
404
|
* will-not-fit failure.
|
|
172
405
|
* - "scheduler": the server places and fits models itself (Ollama). Only
|
|
@@ -175,8 +408,13 @@ const reconcileCache = new Map<string, { modelId: string; decision: "reconcile"
|
|
|
175
408
|
*/
|
|
176
409
|
export type ResidencyStrategy = "router" | "jit" | "scheduler";
|
|
177
410
|
|
|
178
|
-
/**
|
|
179
|
-
|
|
411
|
+
/**
|
|
412
|
+
* Why a resident model may not be evicted, when it may not. `worker` marks a
|
|
413
|
+
* model a dispatched worker loaded and the orchestrator adopted: a later
|
|
414
|
+
* dispatch may still use it, so no Clio stream evicts it mid-session and the
|
|
415
|
+
* release on exit reclaims it instead.
|
|
416
|
+
*/
|
|
417
|
+
export type ResidencyProtection = "tag" | "config" | "worker";
|
|
180
418
|
|
|
181
419
|
export interface ResidentClassified extends ResidentModelInfo {
|
|
182
420
|
/** True when this process's Clio-loaded registry attributes the model to Clio. */
|
|
@@ -218,7 +456,7 @@ export interface ResidencyPlan {
|
|
|
218
456
|
fallbackEvict: ResidentModelInfo[];
|
|
219
457
|
/** True when the keep model is already resident on the target. */
|
|
220
458
|
keepResident: boolean;
|
|
221
|
-
notices:
|
|
459
|
+
notices: ReconcilerNotice[];
|
|
222
460
|
}
|
|
223
461
|
|
|
224
462
|
function gib(bytes: number): string {
|
|
@@ -227,12 +465,12 @@ function gib(bytes: number): string {
|
|
|
227
465
|
|
|
228
466
|
function makeNotice(
|
|
229
467
|
facts: ResidencyFacts,
|
|
230
|
-
kind:
|
|
468
|
+
kind: ReconcilerNoticeKind,
|
|
231
469
|
level: ResidencyNotice["level"],
|
|
232
470
|
message: string,
|
|
233
471
|
detail?: ResidencyNotice["detail"],
|
|
234
|
-
):
|
|
235
|
-
const notice:
|
|
472
|
+
): ReconcilerNotice {
|
|
473
|
+
const notice: ReconcilerNotice = {
|
|
236
474
|
kind,
|
|
237
475
|
level,
|
|
238
476
|
targetId: facts.targetId,
|
|
@@ -244,10 +482,6 @@ function makeNotice(
|
|
|
244
482
|
return notice;
|
|
245
483
|
}
|
|
246
484
|
|
|
247
|
-
function clioLoadedFirst(entries: ReadonlyArray<ResidentClassified>): ResidentClassified[] {
|
|
248
|
-
return [...entries.filter((entry) => entry.loadedByClio), ...entries.filter((entry) => !entry.loadedByClio)];
|
|
249
|
-
}
|
|
250
|
-
|
|
251
485
|
/** `the memory model` / `the chat model` for a notice, or the bare id's article. */
|
|
252
486
|
function describeRole(role: ResidencyRole | undefined): string {
|
|
253
487
|
if (role === "chat") return "the chat model";
|
|
@@ -257,7 +491,7 @@ function describeRole(role: ResidencyRole | undefined): string {
|
|
|
257
491
|
return "a configured model";
|
|
258
492
|
}
|
|
259
493
|
|
|
260
|
-
function evictionNotice(facts: ResidencyFacts, entry: ResidentClassified):
|
|
494
|
+
function evictionNotice(facts: ResidencyFacts, entry: ResidentClassified): ReconcilerNotice {
|
|
261
495
|
if (entry.protection === "config") {
|
|
262
496
|
return makeNotice(
|
|
263
497
|
facts,
|
|
@@ -267,24 +501,12 @@ function evictionNotice(facts: ResidencyFacts, entry: ResidentClassified): Resid
|
|
|
267
501
|
{ swappedOut: entry.modelId, configProtected: true, ...(entry.role ? { role: entry.role } : {}) },
|
|
268
502
|
);
|
|
269
503
|
}
|
|
270
|
-
if (entry.loadedByClio) {
|
|
271
|
-
return makeNotice(
|
|
272
|
-
facts,
|
|
273
|
-
"about-to-evict",
|
|
274
|
-
"info",
|
|
275
|
-
`evicting Clio-loaded model '${entry.modelId}' from '${facts.targetId}' to free a slot for '${facts.keepModelId}'.`,
|
|
276
|
-
entry.sizeVramBytes !== undefined ? { freedVramBytes: entry.sizeVramBytes } : undefined,
|
|
277
|
-
);
|
|
278
|
-
}
|
|
279
504
|
return makeNotice(
|
|
280
505
|
facts,
|
|
281
|
-
"
|
|
282
|
-
"
|
|
283
|
-
`
|
|
284
|
-
{
|
|
285
|
-
...(entry.sizeVramBytes !== undefined ? { freedVramBytes: entry.sizeVramBytes } : {}),
|
|
286
|
-
swappedOut: entry.modelId,
|
|
287
|
-
},
|
|
506
|
+
"about-to-evict",
|
|
507
|
+
"info",
|
|
508
|
+
`evicting Clio-loaded model '${entry.modelId}' from '${facts.targetId}' to free a slot for '${facts.keepModelId}'.`,
|
|
509
|
+
entry.sizeVramBytes !== undefined ? { freedVramBytes: entry.sizeVramBytes } : undefined,
|
|
288
510
|
);
|
|
289
511
|
}
|
|
290
512
|
|
|
@@ -296,7 +518,7 @@ function evictionNotice(facts: ResidencyFacts, entry: ResidentClassified): Resid
|
|
|
296
518
|
* server.
|
|
297
519
|
*/
|
|
298
520
|
function decideResidency(facts: ResidencyFacts): ResidencyPlan {
|
|
299
|
-
const notices:
|
|
521
|
+
const notices: ReconcilerNotice[] = [];
|
|
300
522
|
const keepResident = facts.resident.some((entry) => residentMatchesKeep(entry, facts.keepModelId));
|
|
301
523
|
const others = facts.resident.filter((entry) => !residentMatchesKeep(entry, facts.keepModelId));
|
|
302
524
|
|
|
@@ -372,31 +594,38 @@ function decideResidency(facts: ResidencyFacts): ResidencyPlan {
|
|
|
372
594
|
return { decision: "reconcile", evict: [], fallbackEvict: [], keepResident, notices };
|
|
373
595
|
}
|
|
374
596
|
|
|
375
|
-
//
|
|
376
|
-
//
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
// the configured role could not reclaim its slot.
|
|
381
|
-
const tierUnprotected = clioLoadedFirst(others.filter((entry) => entry.protection === undefined));
|
|
382
|
-
const tierConfig = clioLoadedFirst(others.filter((entry) => entry.protection === "config"));
|
|
597
|
+
// Only loads attributed to this Clio session may be eviction candidates.
|
|
598
|
+
// Configured model names describe demand, not ownership of foreign loads.
|
|
599
|
+
const owned = others.filter((entry) => entry.loadedByClio);
|
|
600
|
+
const tierUnprotected = owned.filter((entry) => entry.protection === undefined);
|
|
601
|
+
const tierConfig = owned.filter((entry) => entry.protection === "config");
|
|
383
602
|
const configEvictable = facts.keepTagProtected !== true;
|
|
384
603
|
|
|
385
604
|
let evict: ResidentClassified[] = [];
|
|
386
605
|
let fallbackEvict: ResidentClassified[] = [];
|
|
387
606
|
|
|
388
607
|
if (facts.strategy === "jit") {
|
|
389
|
-
// Attempt
|
|
390
|
-
//
|
|
608
|
+
// Attempt co-residency first; only an explicit capacity failure
|
|
609
|
+
// justifies swapping an owned instance. GPU fit is not guaranteed.
|
|
391
610
|
fallbackEvict = configEvictable ? [...tierUnprotected, ...tierConfig] : tierUnprotected;
|
|
392
611
|
} else if (facts.strategy === "scheduler") {
|
|
393
612
|
// The server fits and places models itself. Release only Clio's own
|
|
394
613
|
// unprotected stragglers; foreign and protected residents stay.
|
|
395
|
-
evict = tierUnprotected.filter((entry) => entry.loadedByClio);
|
|
396
|
-
} else if (facts.capacity === undefined) {
|
|
397
|
-
// Router without readable capacity: no way to prove a free slot, so
|
|
398
|
-
// fall back to swapping the unprotected residents before the load.
|
|
399
614
|
evict = tierUnprotected;
|
|
615
|
+
} else if (facts.capacity === undefined) {
|
|
616
|
+
// Without a capacity bound, a load can silently displace another model.
|
|
617
|
+
// Preserve the current serving set rather than guess how much to evict.
|
|
618
|
+
if (others.length > 0) {
|
|
619
|
+
notices.push(
|
|
620
|
+
makeNotice(
|
|
621
|
+
facts,
|
|
622
|
+
"will-not-fit",
|
|
623
|
+
"error",
|
|
624
|
+
`cannot load '${facts.keepModelId}' on '${facts.targetId}': router capacity is unknown while other models are resident. Restore capacity inspection or load the model on the server.`,
|
|
625
|
+
),
|
|
626
|
+
);
|
|
627
|
+
return { decision: "decline", evict: [], fallbackEvict: [], keepResident, notices };
|
|
628
|
+
}
|
|
400
629
|
} else {
|
|
401
630
|
const slotsNeeded = facts.resident.length + 1 - facts.capacity;
|
|
402
631
|
if (slotsNeeded > 0) {
|
|
@@ -432,7 +661,7 @@ function decideResidency(facts: ResidencyFacts): ResidencyPlan {
|
|
|
432
661
|
facts,
|
|
433
662
|
"will-not-fit",
|
|
434
663
|
"error",
|
|
435
|
-
`cannot load '${facts.keepModelId}' on '${facts.targetId}':
|
|
664
|
+
`cannot load '${facts.keepModelId}' on '${facts.targetId}': its ${facts.capacity} instance slots cannot be freed using Clio-owned, evictable models (${others.map((entry) => entry.modelId).join(", ")}). Unload one manually or raise the server's max instances.`,
|
|
436
665
|
{ residentCount: facts.resident.length, maxInstances: facts.capacity },
|
|
437
666
|
),
|
|
438
667
|
);
|
|
@@ -476,6 +705,7 @@ export interface ResidencyAdapter {
|
|
|
476
705
|
contextLength?: number;
|
|
477
706
|
modelMaxContext?: number;
|
|
478
707
|
listResident(): Promise<ResidentModelInfo[]>;
|
|
708
|
+
signal?: AbortSignal;
|
|
479
709
|
/**
|
|
480
710
|
* Runtime tags of the keep model itself, when the runtime lists them before
|
|
481
711
|
* the load (the llama.cpp router lists tags for unloaded models too). Called
|
|
@@ -546,6 +776,7 @@ async function restoreEvictedModels(
|
|
|
546
776
|
}
|
|
547
777
|
try {
|
|
548
778
|
await adapter.reloadEvicted(entry.modelId);
|
|
779
|
+
markClioLoaded(adapter.targetKey, entry.modelId);
|
|
549
780
|
restored.push(entry.modelId);
|
|
550
781
|
emitResidencyMutation({
|
|
551
782
|
targetKey: adapter.targetKey,
|
|
@@ -559,7 +790,7 @@ async function restoreEvictedModels(
|
|
|
559
790
|
}
|
|
560
791
|
}
|
|
561
792
|
if (restored.length > 0) {
|
|
562
|
-
|
|
793
|
+
emitReconcilerNotice({
|
|
563
794
|
kind: "swap",
|
|
564
795
|
level: "warning",
|
|
565
796
|
targetId: adapter.targetId,
|
|
@@ -570,7 +801,7 @@ async function restoreEvictedModels(
|
|
|
570
801
|
});
|
|
571
802
|
}
|
|
572
803
|
if (failed.length > 0) {
|
|
573
|
-
|
|
804
|
+
emitReconcilerNotice({
|
|
574
805
|
kind: "will-not-fit",
|
|
575
806
|
level: "error",
|
|
576
807
|
targetId: adapter.targetId,
|
|
@@ -608,7 +839,12 @@ export class ResidencyPreconditionError extends Error {
|
|
|
608
839
|
* connection error.
|
|
609
840
|
*/
|
|
610
841
|
export async function reconcileResidency(adapter: ResidencyAdapter): Promise<ReconcileResult> {
|
|
611
|
-
|
|
842
|
+
return reconcileResidencyState(adapter, false);
|
|
843
|
+
}
|
|
844
|
+
|
|
845
|
+
async function reconcileResidencyState(adapter: ResidencyAdapter, lockHeld: boolean): Promise<ReconcileResult> {
|
|
846
|
+
adapter.signal?.throwIfAborted();
|
|
847
|
+
const now = adapter.now ?? (() => performance.now());
|
|
612
848
|
const ttl = adapter.ttlMs ?? RECONCILE_TTL_MS;
|
|
613
849
|
|
|
614
850
|
const cached = reconcileCache.get(adapter.targetKey);
|
|
@@ -621,11 +857,20 @@ export async function reconcileResidency(adapter: ResidencyAdapter): Promise<Rec
|
|
|
621
857
|
notices: [],
|
|
622
858
|
};
|
|
623
859
|
}
|
|
860
|
+
// Router capacity and its eviction plan must describe the server after the
|
|
861
|
+
// previous lock holder finished loading, not a snapshot from before the wait.
|
|
862
|
+
if (adapter.managed && adapter.strategy === "router" && !lockHeld) {
|
|
863
|
+
const reconcile = () => reconcileResidencyState(adapter, true);
|
|
864
|
+
return adapter.withLock
|
|
865
|
+
? adapter.withLock(adapter.targetKey, reconcile)
|
|
866
|
+
: withResidencyLock(adapter.targetKey, reconcile, adapter.signal);
|
|
867
|
+
}
|
|
624
868
|
|
|
625
869
|
let resident: ResidentModelInfo[];
|
|
626
870
|
try {
|
|
627
871
|
resident = await adapter.listResident();
|
|
628
872
|
} catch {
|
|
873
|
+
adapter.signal?.throwIfAborted();
|
|
629
874
|
// Unreachable or slow server: never block the turn, just observe.
|
|
630
875
|
return { decision: "observe", evict: [], fallbackEvict: [], keepResident: false, notices: [] };
|
|
631
876
|
}
|
|
@@ -655,7 +900,9 @@ export async function reconcileResidency(adapter: ResidencyAdapter): Promise<Rec
|
|
|
655
900
|
? "tag"
|
|
656
901
|
: configId !== undefined
|
|
657
902
|
? "config"
|
|
658
|
-
:
|
|
903
|
+
: isWorkerLoaded(adapter.targetKey, entry)
|
|
904
|
+
? "worker"
|
|
905
|
+
: undefined;
|
|
659
906
|
const role = configId === undefined ? undefined : protectedRoles.get(configId);
|
|
660
907
|
return {
|
|
661
908
|
...entry,
|
|
@@ -679,19 +926,19 @@ export async function reconcileResidency(adapter: ResidencyAdapter): Promise<Rec
|
|
|
679
926
|
};
|
|
680
927
|
|
|
681
928
|
const plan = decideResidency(facts);
|
|
929
|
+
adapter.signal?.throwIfAborted();
|
|
682
930
|
|
|
683
931
|
// An eviction is only justified if the load it makes room for can succeed.
|
|
684
932
|
// Unloading first and discovering afterwards that the keep model does not
|
|
685
933
|
// exist leaves the target serving nothing, which took a shared node out of
|
|
686
|
-
// service on the live fleet (#127). Nothing has mutated yet at this point
|
|
687
|
-
//
|
|
688
|
-
// and fails with the server's own error for the unknown model.
|
|
934
|
+
// service on the live fleet (#127). Nothing has mutated yet at this point;
|
|
935
|
+
// the adapter can stop the request with the loadability diagnostic.
|
|
689
936
|
if (plan.decision === "reconcile" && plan.evict.length > 0 && adapter.assertLoadable) {
|
|
690
937
|
try {
|
|
691
938
|
await adapter.assertLoadable();
|
|
692
939
|
} catch (error) {
|
|
693
940
|
if (!(error instanceof ResidencyPreconditionError)) throw error;
|
|
694
|
-
const notice:
|
|
941
|
+
const notice: ReconcilerNotice = {
|
|
695
942
|
kind: "will-not-fit",
|
|
696
943
|
level: "error",
|
|
697
944
|
targetId: adapter.targetId,
|
|
@@ -699,20 +946,21 @@ export async function reconcileResidency(adapter: ResidencyAdapter): Promise<Rec
|
|
|
699
946
|
model: adapter.keepModelId,
|
|
700
947
|
message: error.message,
|
|
701
948
|
};
|
|
702
|
-
|
|
949
|
+
emitReconcilerNotice(notice);
|
|
703
950
|
return { decision: "decline", evict: [], fallbackEvict: [], keepResident: false, notices: [notice] };
|
|
704
951
|
}
|
|
705
952
|
}
|
|
706
953
|
|
|
707
954
|
// Emitted after the loadability gate so the operator never reads an eviction
|
|
708
955
|
// notice for a swap that the gate then refuses.
|
|
709
|
-
for (const notice of plan.notices)
|
|
956
|
+
for (const notice of plan.notices) emitReconcilerNotice(notice);
|
|
710
957
|
|
|
711
958
|
if (plan.decision === "reconcile") {
|
|
712
959
|
const mutate = async (): Promise<void> => {
|
|
960
|
+
adapter.signal?.throwIfAborted();
|
|
713
961
|
const evicted: ResidentModelInfo[] = [];
|
|
714
|
-
|
|
715
|
-
|
|
962
|
+
try {
|
|
963
|
+
for (const entry of plan.evict) {
|
|
716
964
|
await adapter.unload(entry.modelId);
|
|
717
965
|
forgetClioLoaded(adapter.targetKey, entry.modelId);
|
|
718
966
|
evicted.push(entry);
|
|
@@ -723,12 +971,8 @@ export async function reconcileResidency(adapter: ResidencyAdapter): Promise<Rec
|
|
|
723
971
|
model: entry.modelId,
|
|
724
972
|
operation: "evict",
|
|
725
973
|
});
|
|
726
|
-
} catch {
|
|
727
|
-
// Best-effort: a failed unload self-heals on the next reconcile.
|
|
728
974
|
}
|
|
729
|
-
|
|
730
|
-
if (!adapter.load) return;
|
|
731
|
-
try {
|
|
975
|
+
if (!adapter.load) return;
|
|
732
976
|
await adapter.load(adapter.keepModelId);
|
|
733
977
|
if (!plan.keepResident) {
|
|
734
978
|
emitResidencyMutation({
|
|
@@ -755,15 +999,21 @@ export async function reconcileResidency(adapter: ResidencyAdapter): Promise<Rec
|
|
|
755
999
|
// Serialize actual mutations across processes; a keep model that is
|
|
756
1000
|
// already fully resident needs no lock (the load hook is a no-op) and
|
|
757
1001
|
// waiting on a still-loading model is read-only polling.
|
|
758
|
-
if (plan.evict.length > 0 || (adapter.load && !plan.keepResident)) {
|
|
759
|
-
|
|
760
|
-
await
|
|
1002
|
+
if (!lockHeld && (plan.evict.length > 0 || (adapter.load && !plan.keepResident))) {
|
|
1003
|
+
if (adapter.withLock) await adapter.withLock(adapter.targetKey, mutate);
|
|
1004
|
+
else await withResidencyLock(adapter.targetKey, mutate, adapter.signal);
|
|
761
1005
|
} else {
|
|
762
1006
|
await mutate();
|
|
763
1007
|
}
|
|
764
1008
|
// Attribute the keep model to Clio only when Clio is the one loading it.
|
|
765
|
-
if (!plan.keepResident) markClioLoaded(adapter.targetKey, adapter.keepModelId);
|
|
766
|
-
|
|
1009
|
+
if (!plan.keepResident && adapter.load) markClioLoaded(adapter.targetKey, adapter.keepModelId);
|
|
1010
|
+
// A scheduler/JIT plan does not load anything itself. A failed upcoming
|
|
1011
|
+
// chat must not turn that plan into a cached claim that the model is resident.
|
|
1012
|
+
if (plan.keepResident || adapter.load) {
|
|
1013
|
+
reconcileCache.set(adapter.targetKey, { modelId: adapter.keepModelId, decision: "reconcile", at: now() });
|
|
1014
|
+
} else {
|
|
1015
|
+
reconcileCache.delete(adapter.targetKey);
|
|
1016
|
+
}
|
|
767
1017
|
} else if (plan.decision === "observe" && !adapter.managed) {
|
|
768
1018
|
// Cache the opt-out observation so its notices dedupe per TTL; a
|
|
769
1019
|
// degraded observe (listResident failure) is never cached, so the next
|