@iowarp/clio-coder 0.4.9 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +11 -3
- package/CHANGELOG.md +153 -0
- package/CODE_OF_CONDUCT.md +10 -0
- package/CONTRIBUTING.md +208 -382
- package/NOTICE +8 -2
- package/README.md +199 -418
- package/ROADMAP.md +82 -0
- package/SECURITY.md +14 -11
- package/dist/acp-KS7ARGV6.js +132 -0
- package/dist/agents-YOGJ2YEJ.js +163 -0
- package/dist/assets/codewiki.json +1 -1
- package/dist/auth-CEDCO6O6.js +557 -0
- package/dist/background-YWTBPSQU.js +39 -0
- package/dist/builtins-GDYO4RTR.js +23 -0
- package/dist/chunk-27YTM2CV.js +175 -0
- package/dist/chunk-2AF6YC7Q.js +75 -0
- package/dist/chunk-2DTIWSAW.js +381 -0
- package/dist/chunk-2EMLKSCX.js +262 -0
- package/dist/chunk-2OJ3YZQP.js +665 -0
- package/dist/chunk-2VLYHHFT.js +35 -0
- package/dist/chunk-2WVPJF3Z.js +204 -0
- package/dist/chunk-33OASOS6.js +176 -0
- package/dist/chunk-3BD2LXYJ.js +19 -0
- package/dist/chunk-3JHUFKG7.js +30 -0
- package/dist/chunk-3JLTRPN7.js +711 -0
- package/dist/chunk-3LT34CAM.js +2796 -0
- package/dist/chunk-3O5JWP4L.js +1670 -0
- package/dist/chunk-3UW3KU4A.js +21 -0
- package/dist/chunk-4A6YRGV4.js +569 -0
- package/dist/chunk-4D2BRCZ3.js +67 -0
- package/dist/chunk-4SYHGVDE.js +668 -0
- package/dist/chunk-4VDHLCF5.js +66 -0
- package/dist/chunk-4WOOTKFD.js +637 -0
- package/dist/chunk-4WV4PI66.js +80 -0
- package/dist/chunk-53OXPRI6.js +195 -0
- package/dist/chunk-55RMDDFM.js +1347 -0
- package/dist/chunk-56XP4FJU.js +2025 -0
- package/dist/chunk-5B3RTYAK.js +123 -0
- package/dist/chunk-5CD243WE.js +45 -0
- package/dist/chunk-5JQR5B4D.js +709 -0
- package/dist/chunk-5KQEUIWM.js +597 -0
- package/dist/chunk-5LP5FNNR.js +915 -0
- package/dist/chunk-62UK7AGW.js +9344 -0
- package/dist/chunk-6CTHLZFB.js +563 -0
- package/dist/chunk-6EJYVCTN.js +23 -0
- package/dist/chunk-6OWUM2NC.js +12289 -0
- package/dist/chunk-6RJMYYIE.js +1023 -0
- package/dist/chunk-6W75D37F.js +643 -0
- package/dist/chunk-733ZBT5P.js +1721 -0
- package/dist/chunk-77DCC6JZ.js +3710 -0
- package/dist/chunk-7QXCO3AF.js +156 -0
- package/dist/chunk-7RET77VB.js +481 -0
- package/dist/chunk-A4MVRV4C.js +65 -0
- package/dist/chunk-ALJWT6O6.js +93 -0
- package/dist/chunk-AVSR2HKI.js +232 -0
- package/dist/chunk-B7GY6QER.js +42 -0
- package/dist/chunk-BFOSV5EZ.js +178 -0
- package/dist/chunk-BGOIM7NB.js +103 -0
- package/dist/chunk-BJH6WFIB.js +372 -0
- package/dist/chunk-BOBCCDJ6.js +1533 -0
- package/dist/chunk-BRCOSE7O.js +117 -0
- package/dist/chunk-BYFHHCFV.js +601 -0
- package/dist/chunk-C2CPOIH2.js +83 -0
- package/dist/chunk-C7AQTPCE.js +694 -0
- package/dist/chunk-CBAQPTDU.js +165 -0
- package/dist/chunk-CDQ2UC6W.js +125 -0
- package/dist/chunk-CN6SW5DC.js +177 -0
- package/dist/chunk-CRHPCPZP.js +132 -0
- package/dist/chunk-CTFPFW3H.js +44 -0
- package/dist/chunk-D3KWFOUT.js +103 -0
- package/dist/chunk-D65E25JG.js +185 -0
- package/dist/chunk-DCGHJQ2U.js +236 -0
- package/dist/chunk-DE2LU267.js +106 -0
- package/dist/chunk-DF6PI6GN.js +97 -0
- package/dist/chunk-DGC6X6XR.js +53 -0
- package/dist/chunk-DOUISWEE.js +526 -0
- package/dist/chunk-DR3TAEUA.js +188 -0
- package/dist/chunk-DVTBERFY.js +33 -0
- package/dist/chunk-DXSETN72.js +1051 -0
- package/dist/chunk-DZLR4UEH.js +128 -0
- package/dist/chunk-E6IPKW2E.js +77 -0
- package/dist/chunk-EG4ARXPC.js +139 -0
- package/dist/chunk-EKV4UBCM.js +652 -0
- package/dist/chunk-EOJPDNUP.js +1325 -0
- package/dist/chunk-EX57VVWW.js +4157 -0
- package/dist/chunk-EYTLV3W3.js +5937 -0
- package/dist/chunk-EZD2BXGP.js +475 -0
- package/dist/chunk-EZDCA34W.js +314 -0
- package/dist/chunk-FD2I4KBR.js +33 -0
- package/dist/chunk-FD3IAHQM.js +27 -0
- package/dist/chunk-FFYTC2KQ.js +416 -0
- package/dist/chunk-FGSQHUCK.js +110 -0
- package/dist/chunk-GCQFN7YI.js +32 -0
- package/dist/chunk-GGPF6LLE.js +38 -0
- package/dist/chunk-GGWI3OVM.js +215 -0
- package/dist/chunk-GLIQT7SU.js +172 -0
- package/dist/chunk-GN7QBEEI.js +95 -0
- package/dist/chunk-GRHOXDKB.js +1104 -0
- package/dist/chunk-HMN2C6YL.js +54 -0
- package/dist/chunk-HOEDA42N.js +310 -0
- package/dist/chunk-HOYZUKG7.js +192 -0
- package/dist/chunk-HQVN7G4F.js +1021 -0
- package/dist/chunk-HSQQFDB3.js +519 -0
- package/dist/chunk-I4ELN5BX.js +47 -0
- package/dist/chunk-I4Y4WKZR.js +386 -0
- package/dist/chunk-IFPDAD7R.js +797 -0
- package/dist/chunk-IN7DGBVS.js +582 -0
- package/dist/chunk-ISHUS7HC.js +396 -0
- package/dist/chunk-JPXLJSGR.js +191 -0
- package/dist/chunk-JQCLXSFI.js +69 -0
- package/dist/chunk-KBUTSJSR.js +61 -0
- package/dist/chunk-KW5HXKLJ.js +56 -0
- package/dist/chunk-L4APUGCT.js +139 -0
- package/dist/chunk-L7G7K4I2.js +505 -0
- package/dist/chunk-LAR7DX5E.js +1840 -0
- package/dist/chunk-LAVUQX3B.js +462 -0
- package/dist/chunk-LJRBX7QR.js +116 -0
- package/dist/chunk-LNOXCGN2.js +1864 -0
- package/dist/chunk-LTWH2ACR.js +23002 -0
- package/dist/chunk-LYJJ6546.js +661 -0
- package/dist/chunk-M2IPMWCN.js +457 -0
- package/dist/chunk-MGLRTOCK.js +101 -0
- package/dist/chunk-MZF5IKZT.js +160 -0
- package/dist/chunk-N24R6KWS.js +386 -0
- package/dist/chunk-NASYVWDB.js +604 -0
- package/dist/chunk-NBXFPI7U.js +195 -0
- package/dist/chunk-NDPF2N2L.js +400 -0
- package/dist/chunk-NFSK2VNU.js +446 -0
- package/dist/chunk-NG3QQSXY.js +43 -0
- package/dist/chunk-NOCSM22Y.js +63 -0
- package/dist/chunk-NVPXXW2H.js +1143 -0
- package/dist/chunk-O63U2I6I.js +30 -0
- package/dist/chunk-OJXOA6YU.js +98 -0
- package/dist/chunk-OPD7GL6F.js +1196 -0
- package/dist/chunk-OQ2EOAHA.js +14399 -0
- package/dist/chunk-OV62D6KO.js +688 -0
- package/dist/chunk-OZ76TLGU.js +740 -0
- package/dist/chunk-P4GNZPXO.js +1156 -0
- package/dist/chunk-PS6JAWJZ.js +78 -0
- package/dist/chunk-PXRCXGLK.js +1865 -0
- package/dist/chunk-QDUUOZ3S.js +108 -0
- package/dist/chunk-QG6I2T5E.js +1416 -0
- package/dist/chunk-QHSBROEW.js +308 -0
- package/dist/chunk-QNUQ7K7D.js +46 -0
- package/dist/chunk-QZTTRSJE.js +333 -0
- package/dist/chunk-R2UUNSNQ.js +1605 -0
- package/dist/chunk-R7FGRZNF.js +1794 -0
- package/dist/chunk-RNDCROSG.js +199 -0
- package/dist/chunk-S36CXHO2.js +302 -0
- package/dist/chunk-SJGS3GDI.js +575 -0
- package/dist/chunk-SQZHXUB3.js +510 -0
- package/dist/chunk-SUTLW6ND.js +686 -0
- package/dist/chunk-SYF7FVBL.js +179 -0
- package/dist/chunk-T2MDZES3.js +1577 -0
- package/dist/chunk-T33IYTZM.js +1146 -0
- package/dist/chunk-TDGYTWM6.js +49 -0
- package/dist/chunk-TGL5FZVD.js +132 -0
- package/dist/chunk-TGWZXJ7L.js +1205 -0
- package/dist/chunk-TKDRT2DF.js +114 -0
- package/dist/chunk-TV2EBCSQ.js +152 -0
- package/dist/chunk-U26XXPJS.js +367 -0
- package/dist/chunk-U5QU5ZOD.js +419 -0
- package/dist/chunk-U6YTUVOX.js +1011 -0
- package/dist/chunk-UCINIRHW.js +188 -0
- package/dist/chunk-UJD5MPP6.js +52 -0
- package/dist/chunk-URCXX7WJ.js +146 -0
- package/dist/chunk-UX2L5CUD.js +898 -0
- package/dist/chunk-UZVYEF57.js +114 -0
- package/dist/chunk-V35KZDUZ.js +218 -0
- package/dist/chunk-VESL6DQY.js +1058 -0
- package/dist/chunk-VKHLUZNO.js +986 -0
- package/dist/chunk-VOYUCAQF.js +584 -0
- package/dist/chunk-VYRQHORQ.js +414 -0
- package/dist/chunk-W53XSRQE.js +245 -0
- package/dist/chunk-X4CEFOSG.js +226 -0
- package/dist/chunk-XDHUDE5K.js +380 -0
- package/dist/chunk-XISLDHEL.js +1290 -0
- package/dist/chunk-XM34YQ2Y.js +169 -0
- package/dist/chunk-XMDBTYCH.js +661 -0
- package/dist/chunk-XS2QPZJE.js +449 -0
- package/dist/chunk-YBUECLAF.js +618 -0
- package/dist/chunk-YQ6XEFVK.js +332 -0
- package/dist/chunk-YYLCPDCC.js +990 -0
- package/dist/chunk-Z4GLJ6J4.js +1035 -0
- package/dist/chunk-ZARZ4POR.js +210 -0
- package/dist/chunk-ZJPORZTC.js +119 -0
- package/dist/chunk-ZNUZ3EXD.js +243 -0
- package/dist/chunk-ZPST2KQO.js +49 -0
- package/dist/chunk-ZR5YA6ZF.js +512 -0
- package/dist/chunk-ZU4JPCPR.js +319 -0
- package/dist/chunk-ZUKUCZYZ.js +39 -0
- package/dist/cli/index.js +56 -45
- package/dist/clio-K2PBVCEM.js +27 -0
- package/dist/clio-context-tools-GR4OHFSO.js +145 -0
- package/dist/code-nav-4X3OI6DK.js +715 -0
- package/dist/codewiki/build-worker.js +4 -4
- package/dist/compile-cache-YRB6QRO7.js +18 -0
- package/dist/components-RQOJ6NUR.js +675 -0
- package/dist/config-Q5J7UBAB.js +291 -0
- package/dist/config-XE7XYZLU.js +38 -0
- package/dist/config-graph-P3555574.js +175 -0
- package/dist/configure-KIJ32ZO6.js +104 -0
- package/dist/context-LFBQOSXT.js +344 -0
- package/dist/context-NNLBES2Y.js +82 -0
- package/dist/context-WBH3KSVR.js +302 -0
- package/dist/context-clear-YOHMQ6SQ.js +208 -0
- package/dist/context-index-X2N5UAIF.js +120 -0
- package/dist/context-map-HOSMGUG2.js +555 -0
- package/dist/context-working-set-MRAEVDNV.js +1564 -0
- package/dist/data-tool-JJPBGMQJ.js +2986 -0
- package/dist/detail-RHJOTGN4.js +139 -0
- package/dist/dispatch-runner-NC7PYNIO.js +2477 -0
- package/dist/docs-K4GBWRUX.js +342 -0
- package/dist/doctor-S5KZ2GTN.js +1138 -0
- package/dist/doctor-deep-2EJQSHIZ.js +130 -0
- package/dist/domain-loader-MB34FDPD.js +13 -0
- package/dist/eval-3D6M36N7.js +5220 -0
- package/dist/eval-inventory-SM3HNM47.js +260 -0
- package/dist/evals-FO6JEUCN.js +104 -0
- package/dist/evidence-6IYN52ET.js +262 -0
- package/dist/evidence-JVECPI3F.js +250 -0
- package/dist/evidence-XNVPPLVK.js +410 -0
- package/dist/evolve-TLPUDJDM.js +634 -0
- package/dist/extensions-ROZJ5X3J.js +311 -0
- package/dist/fleet-6RJWIOEO.js +284 -0
- package/dist/fleet-WKVBF5SZ.js +942 -0
- package/dist/fleet-commands-L6WFT7KZ.js +76 -0
- package/dist/fleet-decisions-BTQMWU5A.js +55 -0
- package/dist/fleet-graph-553DZ67Q.js +141 -0
- package/dist/fleet-inspect-236FZPRB.js +329 -0
- package/dist/fleet-new-CKUXP3CO.js +48 -0
- package/dist/fleet-preflight-NZQHABWO.js +95 -0
- package/dist/fleet-validate-7NLAE26R.js +96 -0
- package/dist/fleet-verify-E3RO6A5W.js +226 -0
- package/dist/fleet-view-KMZQY7YJ.js +144 -0
- package/dist/gui/client/assets/abnfDiagram-VCTEODGH-DPBWQwNn.js +1 -0
- package/dist/gui/client/assets/architecture-7GRP2DOG-D1w8FrFW.js +1 -0
- package/dist/gui/client/assets/architectureDiagram-5GKGNRK7-CVPgKd1-.js +36 -0
- package/dist/gui/client/assets/blockDiagram-I7D4REHJ-BLmnqkK5.js +129 -0
- package/dist/gui/client/assets/c4Diagram-7LVT6UL2-4AU9cfM7.js +38 -0
- package/dist/gui/client/assets/channel-DwFZ0m8S.js +1 -0
- package/dist/gui/client/assets/chunk-4HAMMTFA-EOWkKCav.js +62 -0
- package/dist/gui/client/assets/chunk-75Z2AOVW-CygeoIMl.js +2 -0
- package/dist/gui/client/assets/chunk-DU6HZSFF-s27fViLb.js +125 -0
- package/dist/gui/client/assets/chunk-F27PBJKO-BrHvwLsZ.js +1 -0
- package/dist/gui/client/assets/chunk-GMAD6QVW-DzPh-7jt.js +72 -0
- package/dist/gui/client/assets/chunk-GVQU2GXP-pIaQkIzm.js +1 -0
- package/dist/gui/client/assets/chunk-IMKFNOWR-BGJVE_Br.js +231 -0
- package/dist/gui/client/assets/chunk-L3NEJ4N5-B3YLuhww.js +1 -0
- package/dist/gui/client/assets/chunk-OSK3NFVY-BRj61HHU.js +10 -0
- package/dist/gui/client/assets/chunk-P2QGCYS3-Sno90KxP.js +1 -0
- package/dist/gui/client/assets/chunk-POPQ4Y6H-Cw8NTbxr.js +1 -0
- package/dist/gui/client/assets/chunk-PWAF6VOD-BIhHgz37.js +1 -0
- package/dist/gui/client/assets/chunk-SHT3W25Y-Cqv7npBj.js +168 -0
- package/dist/gui/client/assets/chunk-SVP7TREG-Hxzl6Dee.js +88 -0
- package/dist/gui/client/assets/chunk-TICWLB2K-CIFVyVP2.js +206 -0
- package/dist/gui/client/assets/classDiagram-ZZMXUADV-BJbAiI_w.js +1 -0
- package/dist/gui/client/assets/classDiagram-v2-VYDZK3BY-BJbAiI_w.js +1 -0
- package/dist/gui/client/assets/cynefin-OW5HDTMX-DecLWZ-y.js +1 -0
- package/dist/gui/client/assets/cynefinDiagram-5FMLGOSQ-CK-T2N-D.js +62 -0
- package/dist/gui/client/assets/dagre-GXQ25YYZ-C0dfg-OS.js +4 -0
- package/dist/gui/client/assets/diagram-S7CK7UJ4-EaJukVh-.js +30 -0
- package/dist/gui/client/assets/diagram-UQ7AKVKN-xcOucEtP.js +41 -0
- package/dist/gui/client/assets/diagram-VSXAHHWV-3AUJACMf.js +3 -0
- package/dist/gui/client/assets/diagram-VX7I27RA-TPknLqam.js +24 -0
- package/dist/gui/client/assets/diagram-Z3DM3KII-wa1q3YMF.js +24 -0
- package/dist/gui/client/assets/ebnfDiagram-PWID7BFC-JBCF2-s7.js +1 -0
- package/dist/gui/client/assets/erDiagram-RLTQ6QDP-CmXjXPc4.js +99 -0
- package/dist/gui/client/assets/eventmodeling-NTZA5JFV-D_1aJWYl.js +1 -0
- package/dist/gui/client/assets/flowDiagram-HODETNUW-BQtZlael.js +1 -0
- package/dist/gui/client/assets/framework-Bq-znqwW.js +9 -0
- package/dist/gui/client/assets/ganttDiagram-EL5Y4UJY-IPaL_kaa.js +292 -0
- package/dist/gui/client/assets/gitGraph-4MIJSDKK-Oy0Q3hoc.js +1 -0
- package/dist/gui/client/assets/gitGraphDiagram-WWUBYQGX-jtAuBmbc.js +106 -0
- package/dist/gui/client/assets/index-CuFuBEdL.css +1 -0
- package/dist/gui/client/assets/index-hMbEIsX0.js +87 -0
- package/dist/gui/client/assets/info-A6RAGUB7-UtEs1tv7.js +1 -0
- package/dist/gui/client/assets/infoDiagram-27XIBGKW-hlwR1pBW.js +2 -0
- package/dist/gui/client/assets/ishikawaDiagram-5VMMS53U-C6vMtfsd.js +70 -0
- package/dist/gui/client/assets/journeyDiagram-3NMN7TZE-EAwAl_PS.js +139 -0
- package/dist/gui/client/assets/kanban-definition-UXKFOSKX-CQOhRKHW.js +89 -0
- package/dist/gui/client/assets/line-DbcwGZTW.js +1 -0
- package/dist/gui/client/assets/mermaid-parser.core-C2QfVcHd.js +7 -0
- package/dist/gui/client/assets/mermaid.core-N9qUTre1.js +44 -0
- package/dist/gui/client/assets/mindmap-definition-YA3MSWOX-BR_FL9gK.js +96 -0
- package/dist/gui/client/assets/packet-AYTQ26CC-CbBJ2oAa.js +1 -0
- package/dist/gui/client/assets/pegDiagram-XKGWAZYB-BruU0IHM.js +1 -0
- package/dist/gui/client/assets/pie-WAS4IAKB-BWdSng4H.js +1 -0
- package/dist/gui/client/assets/pieDiagram-E7YTZNPT-CR3ljgdU.js +39 -0
- package/dist/gui/client/assets/quadrantDiagram-AXDQQJYC-C-boKslr.js +7 -0
- package/dist/gui/client/assets/radar-RG4KPBEZ-CGlOnAKG.js +1 -0
- package/dist/gui/client/assets/railroad-74A4TZTK-CDvuAlyC.js +1 -0
- package/dist/gui/client/assets/railroad-abnf-HS5TGJTU-CQUA9crC.js +1 -0
- package/dist/gui/client/assets/railroad-ebnf-LZEXJU2U-CD857gxq.js +1 -0
- package/dist/gui/client/assets/railroad-peg-WCYAUIDC-DUV4k35E.js +1 -0
- package/dist/gui/client/assets/railroadDiagram-O6MQD6OU-DMR4LXmA.js +1 -0
- package/dist/gui/client/assets/requirementDiagram-BXWQKSXE-DVltaF6c.js +84 -0
- package/dist/gui/client/assets/sankeyDiagram-P5KCCOFB-CHdNz472.js +40 -0
- package/dist/gui/client/assets/sequenceDiagram-WJ2MYXX4-DaMafIty.js +162 -0
- package/dist/gui/client/assets/stateDiagram-D77RDMKH-CEbBHqn3.js +1 -0
- package/dist/gui/client/assets/stateDiagram-v2-MP3YSRHH-B3JgDdFg.js +1 -0
- package/dist/gui/client/assets/swimlanes-42K2YHIH-BlPHndnJ.js +1 -0
- package/dist/gui/client/assets/swimlanesDiagram-VR7AAH4N-BPabHwsZ.js +8 -0
- package/dist/gui/client/assets/timeline-definition-24CTP7MA-E4Y1lPBI.js +120 -0
- package/dist/gui/client/assets/treeView-Q6P3EWNA-DrY0uhTN.js +1 -0
- package/dist/gui/client/assets/treemap-WGGIJYW6-CVotnLHf.js +1 -0
- package/dist/gui/client/assets/vennDiagram-4TSXK5OY-DJNrLIOF.js +34 -0
- package/dist/gui/client/assets/wardley-WFR3VGLG-ClOpAp5S.js +1 -0
- package/dist/gui/client/assets/wardleyDiagram-VM6X3IG4-qhMoKOXc.js +78 -0
- package/dist/gui/client/assets/xychartDiagram-S5SC5T6Z-CTuXoo9R.js +7 -0
- package/dist/gui/client/index.html +6 -0
- package/dist/gui/ops-worker.js +167 -0
- package/dist/gui/reads-worker.js +473 -0
- package/dist/gui/server.js +9780 -0
- package/dist/gui-QJS7XQMV.js +16 -0
- package/dist/init-DV5B6HQG.js +354 -0
- package/dist/install-6C45YXFP.js +19 -0
- package/dist/install-O7NSRU2W.js +13 -0
- package/dist/interactive-OXGYZYAS.js +22381 -0
- package/dist/interop-J7UOBOSF.js +254 -0
- package/dist/inventory-OEGIL6PY.js +144 -0
- package/dist/library-B3UPGY4V.js +83 -0
- package/dist/library-MXQA5DLT.js +309 -0
- package/dist/library-ROZAMUIL.js +496 -0
- package/dist/library-import-2LTWOVBD.js +190 -0
- package/dist/library-inventory-LJ3XHLWO.js +60 -0
- package/dist/library-validation-DARHHUNW.js +46 -0
- package/dist/mcp-2GSPYQ54.js +28 -0
- package/dist/memory-J3STUUIK.js +537 -0
- package/dist/models-Y3GMFJ2V.js +314 -0
- package/dist/monitor-LHNH577J.js +811 -0
- package/dist/orchestrator-DTAPXULA.js +12117 -0
- package/dist/panes-A743ONZ5.js +103 -0
- package/dist/panes-CTNO57ZY.js +76 -0
- package/dist/paths-3SBYJQDP.js +68 -0
- package/dist/preload-OJBMAIXF.js +140 -0
- package/dist/providers-CMETPZNS.js +232 -0
- package/dist/registry-37T4U6X2.js +15 -0
- package/dist/reset-O7EUCYWO.js +346 -0
- package/dist/resources-FY6XYFN2.js +189 -0
- package/dist/run-H64MEVTA.js +1067 -0
- package/dist/run-script-PQ5NRU3X.js +42 -0
- package/dist/settings-SNIQNXCW.js +73 -0
- package/dist/settings-controls-X6GMCPVG.js +202 -0
- package/dist/share-CAFMMQLM.js +299 -0
- package/dist/skills-ERKQUC7L.js +114 -0
- package/dist/skills-eval-CQ23MYQK.js +1099 -0
- package/dist/skills-inventory-TVUYJDVN.js +142 -0
- package/dist/slash-commands-ROG3KIFJ.js +107 -0
- package/dist/startup-background-KDWCQMWT.js +247 -0
- package/dist/steer-KKYXJSH4.js +77 -0
- package/dist/support-M3RCUUEL.js +40 -0
- package/dist/system-ZDW44ZGX.js +142 -0
- package/dist/target-runtimes-PWA22WVW.js +73 -0
- package/dist/targets-AJWA6E7Z.js +1207 -0
- package/dist/tasks-6L2JJRC5.js +39 -0
- package/dist/terminal-lease-YFUSDPAD.js +432 -0
- package/dist/tools-5XJUABRD.js +30 -0
- package/dist/trace-LA5MVR4Y.js +527 -0
- package/dist/tree-sitter-TQW3Y52T.js +4673 -0
- package/dist/tui-primitives-IUCVWLH5.js +19 -0
- package/dist/uninstall-SAWGGXAB.js +448 -0
- package/dist/upgrade-HSNSVTZG.js +300 -0
- package/dist/usage-XSILDHKF.js +1083 -0
- package/dist/verifiers-ECA5GIHL.js +633 -0
- package/dist/verify-R6QQCCEB.js +31 -0
- package/dist/version-PLZYB5KW.js +22 -0
- package/dist/web-fetch-PVZNMBOB.js +803 -0
- package/dist/wiki-generate-RP22WP5K.js +647 -0
- package/dist/with-panes-W3PAZPRF.js +629 -0
- package/dist/worker/entry.js +324 -284
- package/dist/workspace-check-3764ZKC2.js +83 -0
- package/docs/README.md +26 -10
- package/docs/architecture/acp.md +179 -12
- package/docs/architecture/artifact-placement.md +1 -1
- package/docs/architecture/capacity-and-scheduling.md +7 -8
- package/docs/architecture/context-engine.md +350 -95
- package/docs/architecture/model-catalog.md +18 -11
- package/docs/architecture/observability.md +1 -1
- package/docs/architecture/pi-boundary.md +59 -6
- package/docs/architecture/prompt-envelope-and-tools.md +147 -39
- package/docs/architecture/provider-adapter-cookbook.md +2 -2
- package/docs/architecture/safety-model.md +18 -4
- package/docs/architecture/trace-store.md +2 -2
- package/docs/architecture/tui-design.md +41 -81
- package/docs/architecture/worker-dispatch-mechanics.md +9 -1
- package/docs/gui/README.md +69 -0
- package/docs/gui/boundary-doctrine.md +104 -0
- package/docs/gui/chat-rendering-spec.md +1440 -0
- package/docs/gui/cli-surface-routing.md +148 -0
- package/docs/gui/delivery-order.md +53 -0
- package/docs/gui/event-bus-coverage.md +103 -0
- package/docs/gui/inspector-presentation.md +71 -0
- package/docs/gui/parity/01-cli-surface.md +74 -0
- package/docs/gui/parity/02-slash-and-surfaces.md +110 -0
- package/docs/gui/parity/03-domains-and-plan.md +69 -0
- package/docs/gui/performance-baseline.md +76 -0
- package/docs/gui/settings-write-surface.md +267 -0
- package/docs/gui/workflow-coverage.md +64 -0
- package/docs/guide/built-in-agents.md +1 -1
- package/docs/guide/commands-and-modes.md +256 -99
- package/docs/guide/configuration-and-targets.md +485 -124
- package/docs/guide/configuration-reference.md +165 -82
- package/docs/guide/doctor.md +127 -0
- package/docs/guide/environment-variables.md +1 -1
- package/docs/guide/exit-codes-and-output.md +3 -1
- package/docs/guide/extensions-and-sharing.md +3 -14
- package/docs/guide/fleet-dispatch.md +231 -45
- package/docs/guide/glossary.md +1 -1
- package/docs/guide/installation-and-lifecycle.md +27 -16
- package/docs/guide/interop.md +2 -2
- package/docs/guide/proactive-memory.md +154 -68
- package/docs/guide/resource-library.md +4 -0
- package/docs/guide/skills-marketplace.md +8 -4
- package/docs/guide/slurm.md +88 -0
- package/docs/guide/tool-usage.md +134 -11
- package/docs/guide/troubleshooting.md +4 -2
- package/docs/process/battletest-2026-09-20-fixes.md +161 -0
- package/docs/process/configure-tree-proposal.md +637 -0
- package/docs/process/documentation-coverage.md +8 -0
- package/docs/process/documentation-guide.md +18 -1
- package/docs/process/eval-runner.md +58 -14
- package/docs/process/performance-methodology.md +11 -3
- package/docs/process/release-cut-checklist.md +29 -3
- package/docs/process/tool-audit-v0.4.9.md +3 -0
- package/examples/extensions/README.md +1 -3
- package/examples/extensions/lab-status/clio-coder-extension.json +1 -1
- package/examples/extensions/measurements/clio-coder-extension.json +1 -1
- package/library/registry.yaml +30 -5
- package/library/skills/git/fix-issue/SKILL.md +2 -1
- package/library/skills/git/fix-issue/plugin.json +1 -1
- package/library/skills/git/ship/SKILL.md +2 -1
- package/library/skills/git/ship/plugin.json +1 -1
- package/library/skills/meta/clio-coder-test/SKILL.md +5 -6
- package/library/skills/meta/clio-coder-test/evals.md +2 -2
- package/library/skills/meta/clio-coder-test/references/test-map.md +2 -2
- package/library/skills/registry.yaml +9 -5
- package/library/skills/research/slurm-jobs/SKILL.md +110 -0
- package/library/skills/research/slurm-jobs/evals.md +39 -0
- package/library/skills/research/slurm-jobs/plugin.json +23 -0
- package/library/skills/skill-marketplace.json +18 -2
- package/package.json +15 -10
- package/src/cli/args.ts +59 -0
- package/src/cli/argv.ts +7 -0
- package/src/cli/clio.ts +9 -1
- package/src/cli/configure-controls.ts +136 -0
- package/src/cli/configure-onboarding.ts +24 -7
- package/src/cli/configure-quick.ts +32 -7
- package/src/cli/configure-target.ts +11 -1
- package/src/cli/configure.ts +253 -256
- package/src/cli/docs-server.ts +290 -0
- package/src/cli/docs.ts +60 -15
- package/src/cli/doctor-deep.ts +126 -0
- package/src/cli/doctor-hpc.ts +122 -0
- package/src/cli/doctor-slurm.ts +130 -0
- package/src/cli/doctor-task-worktrees.ts +88 -0
- package/src/cli/doctor.ts +165 -16
- package/src/cli/fleet-verify.ts +3 -2
- package/src/cli/gui.ts +111 -0
- package/src/cli/index.ts +14 -4
- package/src/cli/library.ts +2 -7
- package/src/cli/modes/json-stream.ts +4 -2
- package/src/cli/modes/print.ts +252 -25
- package/src/cli/run.ts +199 -71
- package/src/cli/skills.ts +25 -7
- package/src/cli/targets.ts +87 -9
- package/src/cli/uninstall.ts +28 -8
- package/src/cli/usage.ts +2 -1
- package/src/cli/workspace-check.ts +71 -0
- package/src/core/bash-exec.ts +8 -2
- package/src/core/bus-events.ts +32 -3
- package/src/core/cache-telemetry.ts +3 -2
- package/src/core/compile-cache.ts +11 -1
- package/src/core/config.ts +59 -6
- package/src/core/defaults.ts +27 -5
- package/src/core/diagnostics.ts +25 -0
- package/src/core/event-bus.ts +2 -1
- package/src/core/gateway-routing.ts +10 -3
- package/src/core/git-commit-attribution.ts +2 -1
- package/src/core/naming-compat.ts +6 -4
- package/src/core/package-root.ts +0 -9
- package/src/core/path-canonical.ts +143 -24
- package/src/core/residency-target-key.ts +2 -6
- package/src/core/run-overrides.ts +1 -1
- package/src/core/settings-awareness.ts +108 -0
- package/src/core/settings-controls.ts +673 -0
- package/src/core/settings-navigation.ts +116 -0
- package/src/core/theme-token-hex.ts +19 -9
- package/src/core/turn-constraints.ts +52 -0
- package/src/domains/agents/builtins/scout.md +7 -17
- package/src/domains/agents/catalog.ts +5 -1
- package/src/domains/agents/extension.ts +2 -1
- package/src/domains/agents/registry.ts +4 -3
- package/src/domains/agents/result-contract.ts +132 -1
- package/src/domains/config/classify.ts +11 -7
- package/src/domains/config/extension.ts +5 -1
- package/src/domains/config/keybindings.ts +2 -2
- package/src/domains/context/codewiki/coordinator.ts +10 -0
- package/src/domains/context/worker/snapshot.ts +6 -3
- package/src/domains/dispatch/active-route-planner.ts +2 -0
- package/src/domains/dispatch/agent-candidates.ts +5 -1
- package/src/domains/dispatch/capability-match.ts +1 -1
- package/src/domains/dispatch/contract.ts +28 -0
- package/src/domains/dispatch/event-pump.ts +37 -3
- package/src/domains/dispatch/extension.ts +391 -48
- package/src/domains/dispatch/failure-classification.ts +37 -2
- package/src/domains/dispatch/receipt-integrity.ts +3 -0
- package/src/domains/dispatch/run-identity.ts +10 -3
- package/src/domains/dispatch/target-breaker.ts +163 -0
- package/src/domains/dispatch/types.ts +29 -2
- package/src/domains/dispatch/worker-model-loads.ts +66 -0
- package/src/domains/dispatch/worker-protocol.ts +20 -1
- package/src/domains/dispatch/worker-spawn.ts +28 -2
- package/src/domains/eval/artifacts/redact.ts +9 -0
- package/src/domains/eval/metrics/noop.ts +61 -0
- package/src/domains/eval/reports/junit.ts +5 -1
- package/src/domains/eval/reports/text.ts +7 -0
- package/src/domains/eval/runners/clio-run.ts +19 -8
- package/src/domains/eval/runners/external-command.ts +29 -4
- package/src/domains/eval/schema/adapter.ts +6 -2
- package/src/domains/eval/schema/suite.ts +2 -0
- package/src/domains/eval/schema/validate.ts +3 -0
- package/src/domains/eval/suites/run.ts +167 -26
- package/src/domains/evidence/detail.ts +3 -2
- package/src/domains/extensions/operator-runtime.ts +11 -4
- package/src/domains/gateway/mcp/client.ts +1 -1
- package/src/domains/lifecycle/doctor.ts +42 -26
- package/src/domains/lifecycle/migrations/2026-09-18-ollama-runtime-id.ts +38 -0
- package/src/domains/lifecycle/migrations/index.ts +2 -0
- package/src/domains/middleware/demo-guidance.ts +36 -0
- package/src/domains/middleware/dispatch-nudge.ts +1 -1
- package/src/domains/middleware/memory-intervention.ts +51 -4
- package/src/domains/middleware/runtime.ts +5 -4
- package/src/domains/middleware/skills-reminder.ts +29 -52
- package/src/domains/middleware/task-nudge.ts +1 -0
- package/src/domains/middleware/watchdog.ts +4 -0
- package/src/domains/observability/extension.ts +2 -1
- package/src/domains/observability/out-of-turn-usage.ts +3 -2
- package/src/domains/observability/projection.ts +3 -2
- package/src/domains/observability/worker-progress.ts +48 -0
- package/src/domains/prompts/compiler.ts +148 -52
- package/src/domains/prompts/contract.ts +3 -3
- package/src/domains/prompts/demo-guidance.ts +8 -0
- package/src/domains/prompts/extension.ts +12 -7
- package/src/domains/prompts/fragments/identity/clio.md +2 -1
- package/src/domains/prompts/fragments/identity/docs-routing.md +2 -0
- package/src/domains/prompts/fragments/identity/self-awareness.md +4 -0
- package/src/domains/prompts/fragments/operating/contract.md +16 -7
- package/src/domains/prompts/fragments/operating/delegation.md +29 -13
- package/src/domains/prompts/fragments/operating/skills.md +18 -10
- package/src/domains/prompts/fragments/operating/worker.md +2 -0
- package/src/domains/providers/cache-deployment.ts +45 -2
- package/src/domains/providers/contract.ts +52 -11
- package/src/domains/providers/extension.ts +230 -53
- package/src/domains/providers/model-discovery.ts +22 -8
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +5 -7
- package/src/domains/providers/plugins.ts +3 -4
- package/src/domains/providers/probe/fingerprint.ts +2 -2
- package/src/domains/providers/probe/reasoning.ts +9 -16
- package/src/domains/providers/probe/tool-call.ts +236 -0
- package/src/domains/providers/registry.ts +51 -8
- package/src/domains/providers/runtime-resolution.ts +60 -12
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -1
- package/src/domains/providers/runtimes/builtins.ts +2 -2
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +57 -41
- package/src/domains/providers/runtimes/common/local-synth.ts +3 -1
- package/src/domains/providers/runtimes/common/ollama-model-ids.ts +11 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +53 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +3 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +7 -13
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +7 -17
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +1 -0
- package/src/domains/providers/runtimes/local-native/ollama.ts +211 -0
- package/src/domains/providers/runtimes/protocol/litellm.ts +77 -65
- package/src/domains/providers/support.ts +1 -1
- package/src/domains/providers/types/local-model-quirks.ts +2 -3
- package/src/domains/providers/types/runtime-descriptor.ts +23 -3
- package/src/domains/providers/types/target-descriptor.ts +15 -3
- package/src/domains/resources/collision.ts +7 -2
- package/src/domains/resources/index.ts +1 -0
- package/src/domains/resources/library-actions.ts +4 -2
- package/src/domains/resources/library-inventory.ts +6 -2
- package/src/domains/resources/prompts/loader.ts +20 -7
- package/src/domains/resources/skills/availability.ts +56 -0
- package/src/domains/resources/skills/loader.ts +20 -9
- package/src/domains/safety/action-classifier.ts +282 -31
- package/src/domains/safety/audit.ts +2 -1
- package/src/domains/safety/autonomy.ts +54 -11
- package/src/domains/safety/decision-presentation.ts +17 -4
- package/src/domains/safety/finish-contract-registration.ts +25 -1
- package/src/domains/safety/finish-contract.ts +20 -5
- package/src/domains/safety/path-policy.ts +6 -2
- package/src/domains/safety/policy-engine.ts +168 -48
- package/src/domains/safety/protected-artifacts.ts +527 -16
- package/src/domains/safety/read-scope.ts +120 -0
- package/src/domains/safety/skill-authority.ts +52 -16
- package/src/domains/scheduling/cluster.ts +14 -3
- package/src/domains/scheduling/contract.ts +7 -0
- package/src/domains/scheduling/extension.ts +20 -9
- package/src/domains/scheduling/local-capacity.ts +160 -0
- package/src/domains/session/context-accounting.ts +44 -31
- package/src/domains/session/context-ledger.ts +10 -3
- package/src/domains/session/entries.ts +4 -0
- package/src/domains/session/history.ts +1 -1
- package/src/domains/session/prompt-cache.ts +1 -0
- package/src/domains/session/prompt-manifest.ts +3 -1
- package/src/domains/session/retry.ts +4 -6
- package/src/domains/session/task-board.ts +19 -4
- package/src/domains/session/tree/preview.ts +3 -2
- package/src/engine/acp/commands.ts +653 -0
- package/src/engine/acp/server.ts +639 -20
- package/src/engine/acp/tool-mediator.ts +30 -7
- package/src/engine/acp/types.ts +58 -0
- package/src/engine/agent.ts +55 -10
- package/src/engine/ai.ts +11 -2
- package/src/engine/api-registry.ts +5 -4
- package/src/engine/apis/degraded-inference.ts +243 -0
- package/src/engine/apis/llamacpp-residency.ts +50 -6
- package/src/engine/apis/lmstudio-residency.ts +3 -5
- package/src/engine/apis/lmstudio.ts +137 -31
- package/src/engine/apis/ollama-http.ts +118 -0
- package/src/engine/apis/ollama-native.ts +216 -97
- package/src/engine/apis/openai-completions.ts +191 -189
- package/src/engine/apis/output-budget.ts +3 -1
- package/src/engine/apis/residency-lock.ts +2 -1
- package/src/engine/apis/residency.ts +339 -89
- package/src/engine/apis/sampling-overrides.ts +23 -2
- package/src/engine/apis/types.ts +1 -2
- package/src/engine/claude/tool-safety.ts +30 -5
- package/src/engine/context.ts +13 -0
- package/src/engine/env-api-keys.ts +2 -1
- package/src/engine/gemma-channel-filter.ts +3 -2
- package/src/engine/instrumented-tui.ts +25 -0
- package/src/engine/loop-guard.ts +172 -6
- package/src/engine/pi-mono-names.ts +16 -0
- package/src/engine/prewarm.ts +44 -15
- package/src/engine/provider-payload.ts +52 -14
- package/src/engine/session.ts +4 -2
- package/src/engine/worker-events.ts +9 -1
- package/src/engine/worker-runtime.ts +269 -42
- package/src/engine/worker-tools.ts +8 -3
- package/src/entry/boot-options.ts +23 -0
- package/src/entry/orchestrator.ts +207 -36
- package/src/interactive/assistant-generation-timing.ts +52 -0
- package/src/interactive/chat-loop-messages.ts +4 -1
- package/src/interactive/chat-loop.ts +59 -9
- package/src/interactive/chat-panel.ts +10 -1
- package/src/interactive/clio-editor.ts +51 -79
- package/src/interactive/context-meter.ts +1 -0
- package/src/interactive/context-overlay.ts +21 -8
- package/src/interactive/cost-overlay.ts +1 -1
- package/src/interactive/dispatch-board.ts +39 -8
- package/src/interactive/editor-bash.ts +0 -34
- package/src/interactive/editor-rails.ts +43 -0
- package/src/interactive/editor-submit.ts +34 -2
- package/src/interactive/footer/dashboard.ts +67 -38
- package/src/interactive/footer/demo-hints.ts +40 -0
- package/src/interactive/footer/key-hints.ts +21 -0
- package/src/interactive/footer/notifications.ts +1 -1
- package/src/interactive/footer/pages.ts +486 -0
- package/src/interactive/footer/system-metrics.ts +147 -0
- package/src/interactive/footer/widgets.ts +158 -63
- package/src/interactive/footer-panel.ts +29 -7
- package/src/interactive/interactive-application.ts +109 -21
- package/src/interactive/interactive-event-projection.ts +6 -2
- package/src/interactive/interactive-presentation.ts +25 -29
- package/src/interactive/interactive-slash-runtime.ts +32 -18
- package/src/interactive/interactive-subscriptions.ts +25 -5
- package/src/interactive/interactive-tickers.ts +21 -5
- package/src/interactive/keybinding-manager.ts +9 -0
- package/src/interactive/overlay-frame.ts +29 -7
- package/src/interactive/overlay-lifecycle.ts +5 -3
- package/src/interactive/overlay-model-selectors.ts +4 -0
- package/src/interactive/overlay-permission-lifecycle.ts +6 -5
- package/src/interactive/overlays/ask-user.ts +103 -110
- package/src/interactive/overlays/help-reference.ts +1 -0
- package/src/interactive/overlays/message-picker.ts +3 -29
- package/src/interactive/overlays/session-selector.ts +3 -2
- package/src/interactive/overlays/settings-sections.ts +2 -30
- package/src/interactive/overlays/settings.ts +310 -607
- package/src/interactive/permission-hint.ts +3 -3
- package/src/interactive/permission-overlay.ts +45 -27
- package/src/interactive/renderers/doctor-report.ts +43 -0
- package/src/interactive/renderers/tool-execution.ts +87 -62
- package/src/interactive/renderers/worker-entry.ts +76 -3
- package/src/interactive/side-question.ts +3 -1
- package/src/interactive/slash-commands.ts +78 -23
- package/src/interactive/startup-background.ts +131 -0
- package/src/interactive/startup-diagnostics.ts +16 -0
- package/src/interactive/status/state-machine.ts +16 -3
- package/src/interactive/status/types.ts +2 -0
- package/src/interactive/status/verbs.ts +1 -1
- package/src/interactive/terminal-lease.ts +26 -22
- package/src/interactive/theme/components.ts +1 -1
- package/src/interactive/theme/rules.ts +1 -1
- package/src/interactive/theme/tokens.ts +16 -10
- package/src/interactive/transcript-detail.ts +4 -0
- package/src/interactive/turn-context.ts +56 -20
- package/src/interactive/turn-middleware.ts +57 -9
- package/src/interactive/turn-prewarm.ts +121 -18
- package/src/interactive/turn-recovery.ts +10 -8
- package/src/interactive/turn-runtime.ts +74 -29
- package/src/interactive/turn-state.ts +3 -0
- package/src/interactive/welcome-art.ts +36 -0
- package/src/interactive/welcome-dashboard.ts +209 -49
- package/src/interactive/worker-replay.ts +4 -0
- package/src/interactive/worker-stream.ts +17 -2
- package/src/tools/agent-tools.ts +22 -1
- package/src/tools/builtin-tool-catalog.ts +2 -2
- package/src/tools/codewiki/code-nav.ts +1 -1
- package/src/tools/codewiki/shared.ts +39 -1
- package/src/tools/compete-worktrees.ts +8 -91
- package/src/tools/context/docs-engine.ts +44 -12
- package/src/tools/context/index.ts +126 -22
- package/src/tools/context/library.ts +1 -1
- package/src/tools/context/surface.ts +12 -7
- package/src/tools/core-bootstrap.ts +3 -0
- package/src/tools/dispatch-runner.ts +18 -0
- package/src/tools/dispatch-schema.ts +187 -206
- package/src/tools/edit.ts +46 -42
- package/src/tools/file-mutation-queue.ts +25 -26
- package/src/tools/gateway/clio-context-surface.ts +1 -1
- package/src/tools/gateway/index.ts +7 -3
- package/src/tools/gateway/mcp-capabilities.ts +5 -3
- package/src/tools/grep.ts +14 -2
- package/src/tools/ls.ts +1 -4
- package/src/tools/monitor.ts +14 -1
- package/src/tools/observation.ts +1 -3
- package/src/tools/path-utils.ts +51 -18
- package/src/tools/process-lease.ts +99 -0
- package/src/tools/read.ts +1 -1
- package/src/tools/registry.ts +71 -9
- package/src/tools/task-worktree.ts +296 -17
- package/src/tools/tasks.ts +29 -7
- package/src/tools/worker-evidence.ts +60 -1
- package/src/tools/worktree-root.ts +252 -0
- package/src/tools/write.ts +34 -30
- package/src/worker/entry.ts +18 -1
- package/src/worker/protocol.ts +54 -1
- package/src/worker/spec-contract.ts +22 -2
- package/dist/acp-ZWZCPS2A.js +0 -130
- package/dist/agents-LYSOWZUE.js +0 -150
- package/dist/auth-WBQGKWQ5.js +0 -551
- package/dist/background-BUMOBAQN.js +0 -37
- package/dist/builtins-ODRJOEDI.js +0 -22
- package/dist/chunk-2DRRZ57Q.js +0 -571
- package/dist/chunk-2JBZYUPY.js +0 -105
- package/dist/chunk-2VBWFXYE.js +0 -198
- package/dist/chunk-2X2R3UTH.js +0 -1018
- package/dist/chunk-32KJPXAM.js +0 -75
- package/dist/chunk-37LW32LZ.js +0 -32
- package/dist/chunk-3A3CUMKA.js +0 -54
- package/dist/chunk-3AND2EFU.js +0 -215
- package/dist/chunk-3RDHGNU7.js +0 -647
- package/dist/chunk-3SUDBGEI.js +0 -1323
- package/dist/chunk-3TQN67I2.js +0 -396
- package/dist/chunk-3U4BL2EV.js +0 -103
- package/dist/chunk-3UQADNG2.js +0 -302
- package/dist/chunk-434LRQ6Z.js +0 -13441
- package/dist/chunk-4ATBOFRP.js +0 -7802
- package/dist/chunk-4DNL43EZ.js +0 -139
- package/dist/chunk-4HFJKRGZ.js +0 -5250
- package/dist/chunk-555E2WVV.js +0 -322
- package/dist/chunk-5GZICIYO.js +0 -462
- package/dist/chunk-5PHVPU4G.js +0 -160
- package/dist/chunk-5RTEFNBP.js +0 -197
- package/dist/chunk-64XJW7NT.js +0 -380
- package/dist/chunk-6TKOFFGE.js +0 -1058
- package/dist/chunk-6UJ7RDI7.js +0 -1143
- package/dist/chunk-7FBCRWVT.js +0 -1801
- package/dist/chunk-7JSOSVLP.js +0 -283
- package/dist/chunk-7N3OLLSL.js +0 -637
- package/dist/chunk-7QQRPB2E.js +0 -915
- package/dist/chunk-A6DULIMH.js +0 -986
- package/dist/chunk-AB3QXXBC.js +0 -123
- package/dist/chunk-ACCECAH4.js +0 -49
- package/dist/chunk-AM6CEP2K.js +0 -2120
- package/dist/chunk-AUHVBIDW.js +0 -19
- package/dist/chunk-AY4XE6GN.js +0 -665
- package/dist/chunk-BBA2TAWV.js +0 -667
- package/dist/chunk-BFPHMSK7.js +0 -169
- package/dist/chunk-BMNVVKEW.js +0 -604
- package/dist/chunk-CKK25WN3.js +0 -72
- package/dist/chunk-CTGZCEI6.js +0 -33
- package/dist/chunk-DIAJYJYG.js +0 -446
- package/dist/chunk-DVNAPPXU.js +0 -27
- package/dist/chunk-DXVMLM3Z.js +0 -92
- package/dist/chunk-E3LEPLQ2.js +0 -68
- package/dist/chunk-EHZRAB4U.js +0 -63
- package/dist/chunk-EM2DIQAJ.js +0 -179
- package/dist/chunk-EM2WNQS2.js +0 -93
- package/dist/chunk-ETF4ROKH.js +0 -595
- package/dist/chunk-F2YM3JY4.js +0 -22513
- package/dist/chunk-FEBQWHJT.js +0 -1023
- package/dist/chunk-FPS4R2RN.js +0 -1975
- package/dist/chunk-GD55RTIW.js +0 -33
- package/dist/chunk-GJDRMBDI.js +0 -573
- package/dist/chunk-GREYLTZ5.js +0 -658
- package/dist/chunk-H2WSCZZT.js +0 -238
- package/dist/chunk-H6IUCY6Q.js +0 -117
- package/dist/chunk-H72DCH3E.js +0 -563
- package/dist/chunk-H7TXJR23.js +0 -705
- package/dist/chunk-HBJQQTKM.js +0 -40
- package/dist/chunk-HCVKSGNZ.js +0 -990
- package/dist/chunk-HVCAY2FH.js +0 -67
- package/dist/chunk-I47EJPYL.js +0 -1377
- package/dist/chunk-IALGWTLO.js +0 -36
- package/dist/chunk-IALZJE37.js +0 -1710
- package/dist/chunk-IC7JXLOM.js +0 -1577
- package/dist/chunk-IOSVTTCD.js +0 -108
- package/dist/chunk-IPTPMLA6.js +0 -475
- package/dist/chunk-IZZI3SKQ.js +0 -128
- package/dist/chunk-JABWPKFY.js +0 -27
- package/dist/chunk-JIYWMQZ5.js +0 -175
- package/dist/chunk-JKU34ACI.js +0 -693
- package/dist/chunk-JOBN2YQQ.js +0 -176
- package/dist/chunk-JOL2QRLE.js +0 -152
- package/dist/chunk-JTR3VSV3.js +0 -44
- package/dist/chunk-JU6MAMRJ.js +0 -362
- package/dist/chunk-JURMQWVJ.js +0 -15
- package/dist/chunk-K2BLQC5E.js +0 -262
- package/dist/chunk-K3XN4LZ4.js +0 -402
- package/dist/chunk-KIVFXGBM.js +0 -688
- package/dist/chunk-KKRXONXG.js +0 -43
- package/dist/chunk-KOAHT3N2.js +0 -395
- package/dist/chunk-KP5BPXR3.js +0 -73
- package/dist/chunk-KQ6IDQIB.js +0 -39
- package/dist/chunk-KRJQG47M.js +0 -1289
- package/dist/chunk-KW6OJ7IY.js +0 -221
- package/dist/chunk-L3NBWLSN.js +0 -314
- package/dist/chunk-L4RUTLRL.js +0 -59
- package/dist/chunk-LGTVWPRN.js +0 -47
- package/dist/chunk-LSQW6KZO.js +0 -200
- package/dist/chunk-LTR5QCLS.js +0 -446
- package/dist/chunk-LWJYOHT3.js +0 -165
- package/dist/chunk-M6YLF66Z.js +0 -2687
- package/dist/chunk-MJ4QEJVT.js +0 -185
- package/dist/chunk-MO65K5CH.js +0 -1148
- package/dist/chunk-MTOZEQHL.js +0 -637
- package/dist/chunk-MZDPF35R.js +0 -45
- package/dist/chunk-MZKYVIWW.js +0 -188
- package/dist/chunk-NBPA5QM6.js +0 -386
- package/dist/chunk-NMBEW4PP.js +0 -688
- package/dist/chunk-NPLLK3HO.js +0 -3610
- package/dist/chunk-NSYGPIVW.js +0 -39
- package/dist/chunk-NXTV5OI5.js +0 -1020
- package/dist/chunk-NYDG4QP4.js +0 -689
- package/dist/chunk-OA2GDACN.js +0 -146
- package/dist/chunk-PJI57EC6.js +0 -236
- package/dist/chunk-PJJBUGMR.js +0 -4484
- package/dist/chunk-PNJE7JPS.js +0 -50
- package/dist/chunk-PP23PZEV.js +0 -1347
- package/dist/chunk-PPIFDSBK.js +0 -409
- package/dist/chunk-PTFISXQO.js +0 -319
- package/dist/chunk-QB33Z5S7.js +0 -1865
- package/dist/chunk-QGNII5VC.js +0 -110
- package/dist/chunk-QH3ZTUOA.js +0 -113
- package/dist/chunk-QI72X67S.js +0 -481
- package/dist/chunk-QJMRYTCX.js +0 -56
- package/dist/chunk-QKHZZFKH.js +0 -98
- package/dist/chunk-RDKX2PME.js +0 -66
- package/dist/chunk-RL7LJYN4.js +0 -66
- package/dist/chunk-RPMNIFRY.js +0 -65
- package/dist/chunk-RQROVOV3.js +0 -670
- package/dist/chunk-S34A7BSP.js +0 -97
- package/dist/chunk-SJETVJHX.js +0 -119
- package/dist/chunk-SJMNU4ZS.js +0 -634
- package/dist/chunk-SL2RDHKO.js +0 -19
- package/dist/chunk-SLLG2G44.js +0 -85
- package/dist/chunk-SQAZN2V3.js +0 -2744
- package/dist/chunk-SQBT46OF.js +0 -814
- package/dist/chunk-SRCEQKQS.js +0 -165
- package/dist/chunk-TCUOGIL2.js +0 -52
- package/dist/chunk-TIWPKCVO.js +0 -42
- package/dist/chunk-U44YYLVV.js +0 -1529
- package/dist/chunk-UIU7MGZ3.js +0 -486
- package/dist/chunk-USBBEKHW.js +0 -177
- package/dist/chunk-VHKTOLEW.js +0 -1416
- package/dist/chunk-VPWGADBG.js +0 -3151
- package/dist/chunk-VQD7NH7Z.js +0 -356
- package/dist/chunk-VWFCAK34.js +0 -697
- package/dist/chunk-W5RM7YAH.js +0 -78
- package/dist/chunk-W72LLZAV.js +0 -243
- package/dist/chunk-WGRDABW7.js +0 -207
- package/dist/chunk-WWRV5RJI.js +0 -165
- package/dist/chunk-XCUDZQLX.js +0 -195
- package/dist/chunk-XFLSL7BT.js +0 -386
- package/dist/chunk-XJZEDCNT.js +0 -391
- package/dist/chunk-XLLEL3K7.js +0 -709
- package/dist/chunk-XNZWWDC3.js +0 -686
- package/dist/chunk-XRECG65F.js +0 -308
- package/dist/chunk-XTQ7MEJG.js +0 -457
- package/dist/chunk-XW2UZICE.js +0 -372
- package/dist/chunk-Y3M2T5RO.js +0 -891
- package/dist/chunk-YGDMBK7O.js +0 -567
- package/dist/chunk-YJCCMYYT.js +0 -125
- package/dist/chunk-YPQOPFP7.js +0 -797
- package/dist/chunk-YQYINEJI.js +0 -132
- package/dist/chunk-ZF6CV4WZ.js +0 -5614
- package/dist/chunk-ZKJU55MX.js +0 -326
- package/dist/chunk-ZKQ63XZ5.js +0 -1196
- package/dist/chunk-ZKVMDNAN.js +0 -962
- package/dist/chunk-ZST3FRCV.js +0 -132
- package/dist/clio-JUDCLNHC.js +0 -26
- package/dist/clio-context-tools-FT672MNZ.js +0 -136
- package/dist/code-nav-7OVCTP2Z.js +0 -688
- package/dist/compile-cache-WJEPUZEJ.js +0 -16
- package/dist/components-OZXZMDWU.js +0 -674
- package/dist/config-P3ZQVF63.js +0 -275
- package/dist/config-graph-GKAOBAS5.js +0 -160
- package/dist/configure-25LRYZJG.js +0 -86
- package/dist/context-72VQV7JX.js +0 -73
- package/dist/context-COWRWXP3.js +0 -286
- package/dist/context-WB3D474G.js +0 -344
- package/dist/context-clear-Y4LYMWC6.js +0 -192
- package/dist/context-index-W6A4V7OC.js +0 -120
- package/dist/context-map-DKL3QT6D.js +0 -555
- package/dist/context-working-set-TMZYVC7A.js +0 -1560
- package/dist/data-tool-KMBWKKWR.js +0 -2987
- package/dist/detail-4GLROGY5.js +0 -123
- package/dist/dispatch-runner-TR3LBP5P.js +0 -2446
- package/dist/docs-ZK777W2G.js +0 -101
- package/dist/doctor-WC4OV2OB.js +0 -814
- package/dist/eval-FUNWJNUJ.js +0 -5050
- package/dist/eval-inventory-CX24K2JT.js +0 -260
- package/dist/evals-L73EBHSU.js +0 -104
- package/dist/evidence-AVJ2RTHX.js +0 -392
- package/dist/evidence-P4NZOAK7.js +0 -233
- package/dist/evidence-Y55WKYHH.js +0 -246
- package/dist/evolve-MAWKRYWF.js +0 -617
- package/dist/extensions-PYQH3H47.js +0 -308
- package/dist/fleet-M4H2QBWT.js +0 -268
- package/dist/fleet-ULBXXRDR.js +0 -923
- package/dist/fleet-commands-7NNC4JZU.js +0 -76
- package/dist/fleet-decisions-EHEY7KPU.js +0 -52
- package/dist/fleet-graph-LQ2AHZT3.js +0 -136
- package/dist/fleet-inspect-5IGBIIYZ.js +0 -312
- package/dist/fleet-new-RCKGSRDV.js +0 -48
- package/dist/fleet-preflight-UTTNOKMG.js +0 -27
- package/dist/fleet-validate-YGILJKA6.js +0 -91
- package/dist/fleet-verify-AUWTCDKR.js +0 -210
- package/dist/fleet-view-TGUFCY5A.js +0 -127
- package/dist/init-GFN2Z7NF.js +0 -333
- package/dist/install-3RZDDP23.js +0 -13
- package/dist/install-6PIF6F6W.js +0 -19
- package/dist/interop-EF5JUWWK.js +0 -246
- package/dist/inventory-I6VJDDYF.js +0 -127
- package/dist/library-3J5IO2OJ.js +0 -75
- package/dist/library-IJTOFTDS.js +0 -307
- package/dist/library-Z3KZSHPE.js +0 -492
- package/dist/library-import-IMKFLDHX.js +0 -183
- package/dist/library-inventory-CQP5D6GU.js +0 -56
- package/dist/library-validation-33UTX7AI.js +0 -42
- package/dist/mcp-5FWZKUS6.js +0 -26
- package/dist/memory-36CWN67Y.js +0 -520
- package/dist/models-KQ6PQJJQ.js +0 -302
- package/dist/monitor-XX6ZD6KC.js +0 -785
- package/dist/orchestrator-SK6HDAOP.js +0 -42067
- package/dist/panes-L27QRXUH.js +0 -74
- package/dist/panes-LXZIWNOZ.js +0 -103
- package/dist/paths-7DJDU4P4.js +0 -67
- package/dist/preload-K2TDYI4Y.js +0 -124
- package/dist/registry-DESGAXWK.js +0 -11
- package/dist/reset-73VU3XNT.js +0 -345
- package/dist/resources-3BYJYVYL.js +0 -181
- package/dist/run-AR7PY6GW.js +0 -896
- package/dist/run-script-H2KUDIII.js +0 -41
- package/dist/settings-3VMBMWID.js +0 -72
- package/dist/share-HVWH4FPF.js +0 -293
- package/dist/skills-5TYEY75Q.js +0 -100
- package/dist/skills-eval-CK3MD63Z.js +0 -1083
- package/dist/skills-inventory-KSFYG3I6.js +0 -138
- package/dist/slash-commands-DMVHML7P.js +0 -98
- package/dist/steer-XCD6V3EW.js +0 -77
- package/dist/support-JAZL6VBR.js +0 -38
- package/dist/system-3TDQRMZZ.js +0 -116
- package/dist/targets-EZKHAYRN.js +0 -1117
- package/dist/tasks-SNEFHWYW.js +0 -36
- package/dist/terminal-lease-BNLFA4OF.js +0 -419
- package/dist/tools-7IM6BDCE.js +0 -28
- package/dist/trace-C3MBGD4S.js +0 -524
- package/dist/tree-sitter-AQUUOSYM.js +0 -4673
- package/dist/tui-primitives-36BY2774.js +0 -18
- package/dist/uninstall-WWLOSZ42.js +0 -432
- package/dist/upgrade-ETK2JNSJ.js +0 -297
- package/dist/usage-S2HOB7BZ.js +0 -1065
- package/dist/verifiers-QDTEVH7R.js +0 -632
- package/dist/verify-SUKUK6XM.js +0 -31
- package/dist/version-RFPKO6T7.js +0 -21
- package/dist/web/client/assets/abnfDiagram-VCTEODGH-BznNOe_I.js +0 -1
- package/dist/web/client/assets/architecture-7GRP2DOG-BQO9DL_y.js +0 -1
- package/dist/web/client/assets/architectureDiagram-5GKGNRK7-CKPbdvyx.js +0 -36
- package/dist/web/client/assets/blockDiagram-I7D4REHJ-prINbpbM.js +0 -129
- package/dist/web/client/assets/c4Diagram-7LVT6UL2-DkVRKtyU.js +0 -38
- package/dist/web/client/assets/channel-c4EeUUqA.js +0 -1
- package/dist/web/client/assets/chunk-4HAMMTFA-CV0Z1ApC.js +0 -62
- package/dist/web/client/assets/chunk-75Z2AOVW-D34Nohxq.js +0 -2
- package/dist/web/client/assets/chunk-DU6HZSFF-Das_cS-O.js +0 -125
- package/dist/web/client/assets/chunk-F27PBJKO-CmRojxkG.js +0 -1
- package/dist/web/client/assets/chunk-GMAD6QVW-ClYZmc73.js +0 -72
- package/dist/web/client/assets/chunk-GVQU2GXP-B2BiHFt-.js +0 -1
- package/dist/web/client/assets/chunk-IMKFNOWR-BGApZ8nP.js +0 -231
- package/dist/web/client/assets/chunk-L3NEJ4N5-DIzCgpkY.js +0 -1
- package/dist/web/client/assets/chunk-OSK3NFVY-BPT-yePv.js +0 -10
- package/dist/web/client/assets/chunk-P2QGCYS3-BC1WTc2t.js +0 -1
- package/dist/web/client/assets/chunk-POPQ4Y6H-BSjzBmZU.js +0 -1
- package/dist/web/client/assets/chunk-PWAF6VOD-BIjLs86Z.js +0 -1
- package/dist/web/client/assets/chunk-SHT3W25Y-CduDz2cm.js +0 -168
- package/dist/web/client/assets/chunk-SVP7TREG-XUn4pPAP.js +0 -88
- package/dist/web/client/assets/chunk-TICWLB2K-DcBy2DKy.js +0 -206
- package/dist/web/client/assets/classDiagram-ZZMXUADV-C0HR7YKN.js +0 -1
- package/dist/web/client/assets/classDiagram-v2-VYDZK3BY-C0HR7YKN.js +0 -1
- package/dist/web/client/assets/cynefin-OW5HDTMX-BecPbyM6.js +0 -1
- package/dist/web/client/assets/cynefinDiagram-5FMLGOSQ-BzMzFwyT.js +0 -62
- package/dist/web/client/assets/dagre-GXQ25YYZ-CAWJmRMG.js +0 -4
- package/dist/web/client/assets/diagram-S7CK7UJ4--lp0ALmn.js +0 -30
- package/dist/web/client/assets/diagram-UQ7AKVKN-gKUnsjcj.js +0 -41
- package/dist/web/client/assets/diagram-VSXAHHWV-BoN5D1Gh.js +0 -3
- package/dist/web/client/assets/diagram-VX7I27RA-BMtuswQ6.js +0 -24
- package/dist/web/client/assets/diagram-Z3DM3KII-DtU8LXrA.js +0 -24
- package/dist/web/client/assets/ebnfDiagram-PWID7BFC-DDcnv9BH.js +0 -1
- package/dist/web/client/assets/erDiagram-RLTQ6QDP-DvRb4iDL.js +0 -99
- package/dist/web/client/assets/eventmodeling-NTZA5JFV-01h4SbTc.js +0 -1
- package/dist/web/client/assets/flowDiagram-HODETNUW-Bll_YZ6T.js +0 -1
- package/dist/web/client/assets/framework-YGoR34M4.js +0 -9
- package/dist/web/client/assets/ganttDiagram-EL5Y4UJY-DdFZ9hvH.js +0 -292
- package/dist/web/client/assets/gitGraph-4MIJSDKK-DjD_AAMj.js +0 -1
- package/dist/web/client/assets/gitGraphDiagram-WWUBYQGX-CDyN9n2u.js +0 -106
- package/dist/web/client/assets/index-CVcy0FAn.js +0 -75
- package/dist/web/client/assets/index-Dsi52apB.css +0 -1
- package/dist/web/client/assets/info-A6RAGUB7-C_XK8Hq0.js +0 -1
- package/dist/web/client/assets/infoDiagram-27XIBGKW-DIe4tJ1i.js +0 -2
- package/dist/web/client/assets/ishikawaDiagram-5VMMS53U-CVl5unKI.js +0 -70
- package/dist/web/client/assets/journeyDiagram-3NMN7TZE-CPEB1Vt8.js +0 -139
- package/dist/web/client/assets/kanban-definition-UXKFOSKX-j-9WXjYQ.js +0 -89
- package/dist/web/client/assets/line-BIDAcEtX.js +0 -1
- package/dist/web/client/assets/mermaid-parser.core-Ux4vssh0.js +0 -7
- package/dist/web/client/assets/mermaid.core-CDuwVKeh.js +0 -44
- package/dist/web/client/assets/mindmap-definition-YA3MSWOX-5MlQEeQ6.js +0 -96
- package/dist/web/client/assets/packet-AYTQ26CC-DRO66c9Q.js +0 -1
- package/dist/web/client/assets/pegDiagram-XKGWAZYB-BakZnSjM.js +0 -1
- package/dist/web/client/assets/pie-WAS4IAKB-BEzcmhz8.js +0 -1
- package/dist/web/client/assets/pieDiagram-E7YTZNPT-DpmqgoPt.js +0 -39
- package/dist/web/client/assets/quadrantDiagram-AXDQQJYC-DuMPwwV2.js +0 -7
- package/dist/web/client/assets/radar-RG4KPBEZ-Djm3oXl5.js +0 -1
- package/dist/web/client/assets/railroad-74A4TZTK-Cpvkwsao.js +0 -1
- package/dist/web/client/assets/railroad-abnf-HS5TGJTU-CpRQ3ruG.js +0 -1
- package/dist/web/client/assets/railroad-ebnf-LZEXJU2U-1Rm5a5eJ.js +0 -1
- package/dist/web/client/assets/railroad-peg-WCYAUIDC-C8344cTh.js +0 -1
- package/dist/web/client/assets/railroadDiagram-O6MQD6OU-CgMS4B6R.js +0 -1
- package/dist/web/client/assets/requirementDiagram-BXWQKSXE-CX5eoNdN.js +0 -84
- package/dist/web/client/assets/sankeyDiagram-P5KCCOFB-CODBX2N3.js +0 -40
- package/dist/web/client/assets/sequenceDiagram-WJ2MYXX4-eUhhF8OR.js +0 -162
- package/dist/web/client/assets/stateDiagram-D77RDMKH-vR6l0NC2.js +0 -1
- package/dist/web/client/assets/stateDiagram-v2-MP3YSRHH-BYUm8jLY.js +0 -1
- package/dist/web/client/assets/swimlanes-42K2YHIH-v9Tw_zX7.js +0 -1
- package/dist/web/client/assets/swimlanesDiagram-VR7AAH4N-B2jdCvhD.js +0 -8
- package/dist/web/client/assets/timeline-definition-24CTP7MA-DxianbhU.js +0 -120
- package/dist/web/client/assets/treeView-Q6P3EWNA-DLxnZb9R.js +0 -1
- package/dist/web/client/assets/treemap-WGGIJYW6-I7UnZ6xJ.js +0 -1
- package/dist/web/client/assets/vennDiagram-4TSXK5OY-Ar7M8Mrj.js +0 -34
- package/dist/web/client/assets/wardley-WFR3VGLG-B8ZSHeDu.js +0 -1
- package/dist/web/client/assets/wardleyDiagram-VM6X3IG4-Qks2FmIn.js +0 -78
- package/dist/web/client/assets/xychartDiagram-S5SC5T6Z-BBBjRtiE.js +0 -7
- package/dist/web/client/index.html +0 -6
- package/dist/web/ops-worker.js +0 -37
- package/dist/web/reads-worker.js +0 -1726
- package/dist/web/server.js +0 -8499
- package/dist/web-EMGUGGEI.js +0 -13
- package/dist/web-fetch-6BRRVQON.js +0 -805
- package/dist/wiki-generate-XHSJTDOP.js +0 -627
- package/dist/with-panes-Z6BTEHMZ.js +0 -628
- package/evals/README.md +0 -9
- package/evals/behavioral-corpus-grader.mjs +0 -236
- package/evals/behavioral-machinery-baseline.json +0 -2276
- package/evals/behavioral-machinery-driver.ts +0 -250
- package/evals/behavioral-machinery-support.ts +0 -254
- package/evals/behavioral-machinery.yaml +0 -614
- package/evals/behavioral-model-negative-control.yaml +0 -69
- package/evals/behavioral-model.yaml +0 -482
- package/evals/fixtures/behavioral-facts.txt +0 -3
- package/evals/fixtures/behavioral-main.ts +0 -7
- package/evals/fixtures/decoy/note.txt +0 -2
- package/evals/fixtures/docs-retrieval.json +0 -102
- package/evals/fixtures/private/credentials.txt +0 -1
- package/evals/fixtures/scalar-decision.json +0 -17
- package/evals/fixtures/scout-citation-pipeline.json +0 -55
- package/evals/fixtures/source-explanation.json +0 -74
- package/evals/fixtures/tool-arguments.json +0 -18
- package/evals/fixtures/tool-surface/read.txt +0 -4
- package/evals/fixtures/tool-surface/subdir/keep.txt +0 -1
- package/evals/no-edit-memory-grader.mjs +0 -149
- package/evals/scalar-decision-grader.py +0 -41
- package/evals/scalar-decision-machinery.ts +0 -145
- package/evals/source-explanation-grader.mjs +0 -118
- package/evals/tool-surface-grader.mjs +0 -53
- package/evals/tool-surface-model.yaml +0 -274
- package/evals/tracked-metrics-baseline.yaml +0 -229
- package/evals/tracked-metrics-grader.mjs +0 -129
- package/src/cli/web.ts +0 -79
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +0 -122
- /package/dist/assets/{web-notices → gui-notices}/@hono__node-server-LICENSE +0 -0
- /package/dist/assets/{web-notices → gui-notices}/hono-LICENSE +0 -0
- /package/dist/{web → gui}/client/THIRD_PARTY_LICENSES.md +0 -0
- /package/dist/{web → gui}/client/assets/arc-Pry-7G1_.js +0 -0
- /package/dist/{web → gui}/client/assets/array-BifhSqXX.js +0 -0
- /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-ext-wght-normal-C6vrW8VD.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/atkinson-hyperlegible-next-latin-wght-normal-BcXVPD7q.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/chunk-2Q5K7J3B-C1jixKkw.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-5VM5RSS4-ZNzvKenW.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-FOHPRMQF-CoA4358r.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-JWPE2WC7-DVXcaiue.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-XXDRQBXY-DqAYeljN.js +0 -0
- /package/dist/{web → gui}/client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +0 -0
- /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-s0S3qwFW.woff +0 -0
- /package/dist/{web → gui}/client/assets/commit-mono-latin-400-normal-wzhe4RuD.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/cose-bilkent-JH36ORCC-CVh1icwb.js +0 -0
- /package/dist/{web → gui}/client/assets/cytoscape.esm-c2aL46s-.js +0 -0
- /package/dist/{web → gui}/client/assets/dagre-C-rnJpZF.js +0 -0
- /package/dist/{web → gui}/client/assets/defaultLocale-BFoDCU3G.js +0 -0
- /package/dist/{web → gui}/client/assets/dist-v5Q1xZ2K.js +0 -0
- /package/dist/{web → gui}/client/assets/graphlib-DS17s2tU.js +0 -0
- /package/dist/{web → gui}/client/assets/init-C-OQMol4.js +0 -0
- /package/dist/{web → gui}/client/assets/katex-ZlcWpGUi.js +0 -0
- /package/dist/{web → gui}/client/assets/linear-SzVmGSw4.js +0 -0
- /package/dist/{web → gui}/client/assets/newsreader-latin-ext-wght-normal-C-3rgBeH.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/newsreader-latin-wght-normal-CCVVNp6i.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/newsreader-vietnamese-wght-normal-Czsa-EzN.woff2 +0 -0
- /package/dist/{web → gui}/client/assets/ordinal-BDEzSJ7C.js +0 -0
- /package/dist/{web → gui}/client/assets/path-fybaL0A-.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-bash-D6zCJ74D.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-c-04YixN25.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-clike-DapgWyxx.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-core-BtsZdCS6.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-cpp-C-lJbC-6.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-css-CPgOzxXp.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-diff-BF8m0_mq.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-docker-DkT6yOFj.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-fortran-Be5x3y1V.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-go-C_8qAH5n.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-ini-BESK3y0r.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-javascript-BnO-swvr.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-json-Dp_-W-Hv.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-jsx-D-D0NWtC.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-julia-DIjOgiAV.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-latex-DNMbqcH_.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-makefile-CRKWLQ8l.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-markdown-C0FPJ1Iz.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-markup-Cp04rIa1.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-matlab-D-nk08al.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-python-CfiSVtM6.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-r-QmNGR8LX.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-rust-Bu9N8X3N.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-shell-session-Be4UuYoM.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-sql-CYhVDMEE.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-toml-DKb54GAT.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-tsx-p6J2Kc_4.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-typescript-BMqONzxf.js +0 -0
- /package/dist/{web → gui}/client/assets/prism-yaml-C0JHu8gr.js +0 -0
- /package/dist/{web → gui}/client/assets/purify.es-ChwZkWde.js +0 -0
- /package/dist/{web → gui}/client/assets/rolldown-runtime-hePW80VL.js +0 -0
- /package/dist/{web → gui}/client/assets/rough.esm-Dy-Kn_BL.js +0 -0
- /package/dist/{web → gui}/client/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -0
- /package/dist/{web → gui}/client/assets/src-B6xuSHsQ.js +0 -0
- /package/dist/{web → gui}/client/clio-coder-logo.webp +0 -0
- /package/dist/{web → gui}/client/icon-192.png +0 -0
- /package/dist/{web → gui}/client/icon-512.png +0 -0
- /package/dist/{web → gui}/client/manifest.webmanifest +0 -0
- /package/dist/{web → gui}/client/offline.css +0 -0
- /package/dist/{web → gui}/client/offline.html +0 -0
- /package/dist/{web → gui}/client/offline.js +0 -0
- /package/dist/{web → gui}/client/sw.js +0 -0
|
@@ -0,0 +1,1794 @@
|
|
|
1
|
+
import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
typedValidationSummary
|
|
4
|
+
} from "./chunk-DOUISWEE.js";
|
|
5
|
+
import {
|
|
6
|
+
assertValidResponseSchema,
|
|
7
|
+
runtimeSpeaksResponseSchemaDialect,
|
|
8
|
+
snapshotTurnConstraints
|
|
9
|
+
} from "./chunk-OQ2EOAHA.js";
|
|
10
|
+
import {
|
|
11
|
+
completeHistoryLength,
|
|
12
|
+
contextHash,
|
|
13
|
+
messageToolCalls,
|
|
14
|
+
parseWorkerContextSeed
|
|
15
|
+
} from "./chunk-T33IYTZM.js";
|
|
16
|
+
import {
|
|
17
|
+
describeCallAction
|
|
18
|
+
} from "./chunk-XNIZBOFV.js";
|
|
19
|
+
import {
|
|
20
|
+
assertToolProfileEnforceable
|
|
21
|
+
} from "./chunk-XZWSP67B.js";
|
|
22
|
+
import {
|
|
23
|
+
boundedExternalDiagnostic
|
|
24
|
+
} from "./chunk-77DCC6JZ.js";
|
|
25
|
+
import {
|
|
26
|
+
DEFAULT_AUTONOMY_LEVEL,
|
|
27
|
+
autonomyAskRejection,
|
|
28
|
+
autonomyDenyRejection,
|
|
29
|
+
mapAutonomy
|
|
30
|
+
} from "./chunk-UZVYEF57.js";
|
|
31
|
+
import {
|
|
32
|
+
INTERNAL_HELPER_RESULT_KINDS
|
|
33
|
+
} from "./chunk-LNOXCGN2.js";
|
|
34
|
+
import {
|
|
35
|
+
classify
|
|
36
|
+
} from "./chunk-VYRQHORQ.js";
|
|
37
|
+
import {
|
|
38
|
+
commandArgumentSegments,
|
|
39
|
+
detectValidationCommand,
|
|
40
|
+
extractCommandDeleteTargets,
|
|
41
|
+
extractCommandWriteTargets,
|
|
42
|
+
toolMutationPaths
|
|
43
|
+
} from "./chunk-P4GNZPXO.js";
|
|
44
|
+
import {
|
|
45
|
+
ToolNames
|
|
46
|
+
} from "./chunk-V4XJWDHR.js";
|
|
47
|
+
import {
|
|
48
|
+
THINKING_LEVELS
|
|
49
|
+
} from "./chunk-QZTTRSJE.js";
|
|
50
|
+
import {
|
|
51
|
+
buildSafeToolEnv,
|
|
52
|
+
resolveSafeCwd
|
|
53
|
+
} from "./chunk-M2IPMWCN.js";
|
|
54
|
+
import {
|
|
55
|
+
init_esm_shims
|
|
56
|
+
} from "./chunk-ECBHH7LU.js";
|
|
57
|
+
|
|
58
|
+
// src/worker/spec-contract.ts
|
|
59
|
+
init_esm_shims();
|
|
60
|
+
var WORKER_SPEC_VERSION = 4;
|
|
61
|
+
var WORKER_RUNTIME_DESCRIPTOR_VERSION = 2;
|
|
62
|
+
var WORKER_PROTECTED_ARTIFACT_STATE_VERSION = 1;
|
|
63
|
+
var WORKER_EXIT_PERMISSION_REQUIRED = 3;
|
|
64
|
+
var DEFAULT_ESCALATION_TIMEOUT_MS = 12e4;
|
|
65
|
+
var DEFAULT_ESCALATION_FALLBACK = "deny";
|
|
66
|
+
var RUNTIME_KINDS = ["http", "sdk", "subprocess"];
|
|
67
|
+
var RUNTIME_API_FAMILIES = [
|
|
68
|
+
"openai-completions",
|
|
69
|
+
"openai-responses",
|
|
70
|
+
"openai-codex-responses",
|
|
71
|
+
"azure-openai-responses",
|
|
72
|
+
"anthropic-messages",
|
|
73
|
+
"bedrock-converse-stream",
|
|
74
|
+
"google-generative-ai",
|
|
75
|
+
"google-vertex",
|
|
76
|
+
"mistral-conversations",
|
|
77
|
+
"ollama-native",
|
|
78
|
+
"rerank-http",
|
|
79
|
+
"embeddings-http",
|
|
80
|
+
"claude-agent-sdk",
|
|
81
|
+
"claude-code-subprocess",
|
|
82
|
+
"external-agent-subprocess"
|
|
83
|
+
];
|
|
84
|
+
var RUNTIME_AUTHS = [
|
|
85
|
+
"api-key",
|
|
86
|
+
"oauth",
|
|
87
|
+
"aws-sdk",
|
|
88
|
+
"vertex-adc",
|
|
89
|
+
"claude-cli",
|
|
90
|
+
"none"
|
|
91
|
+
];
|
|
92
|
+
var TOOL_PROFILE_NAMES = [
|
|
93
|
+
"minimal-local",
|
|
94
|
+
"science-local",
|
|
95
|
+
"full-agent",
|
|
96
|
+
"council-read-only"
|
|
97
|
+
];
|
|
98
|
+
var WORKER_PRODUCTS = ["orientation"];
|
|
99
|
+
var TARGET_LIFECYCLES = ["user-managed", "clio-coder-managed"];
|
|
100
|
+
var RESIDENCY_ROLES = ["chat", "memory", "worker", "target-default"];
|
|
101
|
+
var MIDDLEWARE_HOOKS = ["before_tool", "after_tool", "turn_start", "turn_end", "on_compaction"];
|
|
102
|
+
var MIDDLEWARE_EFFECT_KINDS = [
|
|
103
|
+
"inject_reminder",
|
|
104
|
+
"annotate_tool_result",
|
|
105
|
+
"block_tool",
|
|
106
|
+
"protect_path",
|
|
107
|
+
"request_continuation",
|
|
108
|
+
"require_tool",
|
|
109
|
+
"lock_tools"
|
|
110
|
+
];
|
|
111
|
+
var RUNTIME_RESOLUTION_SEVERITIES = ["info", "warning", "error"];
|
|
112
|
+
var SPEC_AUTONOMY_LEVELS = [
|
|
113
|
+
"read-only",
|
|
114
|
+
"suggest",
|
|
115
|
+
"auto-edit",
|
|
116
|
+
"full-auto"
|
|
117
|
+
];
|
|
118
|
+
var THINKING_MECHANISMS = ["effort-levels", "budget-tokens", "on-off", "always-on", "none"];
|
|
119
|
+
var THINKING_BUDGET_ENFORCEMENTS = ["enforced", "informational", "none"];
|
|
120
|
+
var THINKING_NOTICE_KINDS = ["applied", "ignored-on-off", "always-on", "unsupported"];
|
|
121
|
+
function serializeWorkerRuntimeDescriptor(runtime) {
|
|
122
|
+
return {
|
|
123
|
+
version: WORKER_RUNTIME_DESCRIPTOR_VERSION,
|
|
124
|
+
id: runtime.id,
|
|
125
|
+
kind: runtime.kind,
|
|
126
|
+
apiFamily: runtime.apiFamily,
|
|
127
|
+
auth: runtime.auth,
|
|
128
|
+
// Carried so the target check can recognize a configured runtime id that
|
|
129
|
+
// resolves to this runtime through an alias. Without them the contract has
|
|
130
|
+
// no way to tell a legacy spelling from a genuinely wrong runtime.
|
|
131
|
+
...runtime.aliases !== void 0 && runtime.aliases.length > 0 ? { aliases: [...runtime.aliases] } : {}
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
function readRecord(value, source) {
|
|
135
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
136
|
+
throw new Error(`${source} must be an object`);
|
|
137
|
+
}
|
|
138
|
+
return value;
|
|
139
|
+
}
|
|
140
|
+
function readWorkerPromptMessages(value, source) {
|
|
141
|
+
if (value === void 0) return;
|
|
142
|
+
if (!Array.isArray(value)) throw new Error(`${source} must be an array`);
|
|
143
|
+
for (let index = 0; index < value.length; index++) {
|
|
144
|
+
const entry = readRecord(value[index], `${source}[${index}]`);
|
|
145
|
+
readString(entry.id, `${source}[${index}].id`);
|
|
146
|
+
readString(entry.body, `${source}[${index}].body`);
|
|
147
|
+
readString(entry.contentHash, `${source}[${index}].contentHash`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
function readString(value, source, options) {
|
|
151
|
+
if (typeof value !== "string") throw new Error(`${source} must be a string`);
|
|
152
|
+
if (!options?.allowEmpty && value.length === 0) throw new Error(`${source} must be a non-empty string`);
|
|
153
|
+
return value;
|
|
154
|
+
}
|
|
155
|
+
function readOptionalString(record2, key, source) {
|
|
156
|
+
if (record2[key] !== void 0) readString(record2[key], `${source}.${key}`);
|
|
157
|
+
}
|
|
158
|
+
function readOptionalBoolean(record2, key, source) {
|
|
159
|
+
const value = record2[key];
|
|
160
|
+
if (value !== void 0 && typeof value !== "boolean") throw new Error(`${source}.${key} must be a boolean`);
|
|
161
|
+
}
|
|
162
|
+
function readOptionalNumber(record2, key, source) {
|
|
163
|
+
const value = record2[key];
|
|
164
|
+
if (value !== void 0 && (typeof value !== "number" || !Number.isFinite(value))) {
|
|
165
|
+
throw new Error(`${source}.${key} must be a finite number`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function readEnum(value, source, allowed) {
|
|
169
|
+
if (typeof value !== "string" || !allowed.includes(value)) {
|
|
170
|
+
throw new Error(`${source} must be one of: ${allowed.join(", ")}`);
|
|
171
|
+
}
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
function readOptionalEnum(record2, key, source, allowed) {
|
|
175
|
+
if (record2[key] !== void 0) readEnum(record2[key], `${source}.${key}`, allowed);
|
|
176
|
+
}
|
|
177
|
+
function readStringArray(value, source) {
|
|
178
|
+
if (!Array.isArray(value)) throw new Error(`${source} must be an array`);
|
|
179
|
+
return value.map((item, index) => readString(item, `${source}[${index}]`));
|
|
180
|
+
}
|
|
181
|
+
function readOptionalStringArray(record2, key, source) {
|
|
182
|
+
if (record2[key] !== void 0) readStringArray(record2[key], `${source}.${key}`);
|
|
183
|
+
}
|
|
184
|
+
function validateProtectedModels(value) {
|
|
185
|
+
if (value === void 0) return;
|
|
186
|
+
if (!Array.isArray(value)) throw new Error("WorkerSpec.protectedModels must be an array");
|
|
187
|
+
value.forEach((item, index) => {
|
|
188
|
+
const source = `WorkerSpec.protectedModels[${index}]`;
|
|
189
|
+
if (typeof item === "string") {
|
|
190
|
+
readString(item, source);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const ref = readRecord(item, source);
|
|
194
|
+
readString(ref.modelId, `${source}.modelId`);
|
|
195
|
+
readEnum(ref.role, `${source}.role`, RESIDENCY_ROLES);
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
function validateTarget(value, runtimeId, runtimeAliases) {
|
|
199
|
+
const target = readRecord(value, "WorkerSpec.target");
|
|
200
|
+
const targetId = readString(target.id, "WorkerSpec.target.id");
|
|
201
|
+
const targetRuntime = readString(target.runtime, "WorkerSpec.target.runtime");
|
|
202
|
+
if (targetRuntime !== runtimeId && !runtimeAliases.includes(targetRuntime)) {
|
|
203
|
+
throw new Error(
|
|
204
|
+
`WorkerSpec target runtime mismatch: target.runtime=${targetRuntime} runtimeId=${runtimeId}. Set the target's runtime to '${runtimeId}' in settings.yaml, or run 'clio-coder upgrade' to migrate a legacy runtime id.`
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
if (targetId.length === 0) throw new Error("WorkerSpec.target.id must be a non-empty string");
|
|
208
|
+
readOptionalString(target, "url", "WorkerSpec.target");
|
|
209
|
+
readOptionalString(target, "defaultModel", "WorkerSpec.target");
|
|
210
|
+
readOptionalStringArray(target, "wireModels", "WorkerSpec.target");
|
|
211
|
+
readOptionalBoolean(target, "gateway", "WorkerSpec.target");
|
|
212
|
+
readOptionalEnum(target, "lifecycle", "WorkerSpec.target", TARGET_LIFECYCLES);
|
|
213
|
+
if (target.auth !== void 0) validateTargetAuth(target.auth);
|
|
214
|
+
if (target.pricing !== void 0) validateTargetPricing(target.pricing);
|
|
215
|
+
if (target.cache !== void 0) {
|
|
216
|
+
const cache = readRecord(target.cache, "WorkerSpec.target.cache");
|
|
217
|
+
readOptionalEnum(cache, "retention", "WorkerSpec.target.cache", ["none", "short", "long"]);
|
|
218
|
+
if (cache.deployment !== void 0) {
|
|
219
|
+
const binding = readRecord(cache.deployment, "WorkerSpec.target.cache.deployment");
|
|
220
|
+
readString(binding.backend, "WorkerSpec.target.cache.deployment.backend");
|
|
221
|
+
readOptionalEnum(binding, "backend", "WorkerSpec.target.cache.deployment", [
|
|
222
|
+
"llamacpp",
|
|
223
|
+
"vllm",
|
|
224
|
+
"lmstudio"
|
|
225
|
+
]);
|
|
226
|
+
for (const key of ["controlUrl", "model", "build"]) {
|
|
227
|
+
if (key === "build" && binding.backend === "lmstudio" && binding[key] === void 0) continue;
|
|
228
|
+
readString(binding[key], `WorkerSpec.target.cache.deployment.${key}`);
|
|
229
|
+
}
|
|
230
|
+
readOptionalString(binding, "gatewayDeploymentId", "WorkerSpec.target.cache.deployment");
|
|
231
|
+
const url = new URL(readString(binding.controlUrl, "WorkerSpec.target.cache.deployment.controlUrl"));
|
|
232
|
+
if (!["http:", "https:"].includes(url.protocol) || url.username || url.password || url.search || url.hash)
|
|
233
|
+
throw new Error(
|
|
234
|
+
"WorkerSpec.target.cache.deployment.controlUrl must be HTTP(S) without credentials, query, or fragment"
|
|
235
|
+
);
|
|
236
|
+
}
|
|
237
|
+
if (cache.warm !== void 0) {
|
|
238
|
+
const warm = readRecord(cache.warm, "WorkerSpec.target.cache.warm");
|
|
239
|
+
readOptionalBoolean(warm, "startup", "WorkerSpec.target.cache.warm");
|
|
240
|
+
for (const key of ["maxInputTokens", "maxDurationMs", "cooldownMs"]) {
|
|
241
|
+
if (warm[key] !== void 0 && (typeof warm[key] !== "number" || !Number.isSafeInteger(warm[key]) || warm[key] < 1))
|
|
242
|
+
throw new Error(`WorkerSpec.target.cache.warm.${key} must be a positive safe integer`);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (target.capabilities !== void 0) validateCapabilityPatch(target.capabilities, "WorkerSpec.target.capabilities");
|
|
247
|
+
}
|
|
248
|
+
function validateTargetAuth(value) {
|
|
249
|
+
const auth = readRecord(value, "WorkerSpec.target.auth");
|
|
250
|
+
readOptionalString(auth, "apiKeyEnvVar", "WorkerSpec.target.auth");
|
|
251
|
+
readOptionalString(auth, "apiKeyRef", "WorkerSpec.target.auth");
|
|
252
|
+
readOptionalString(auth, "oauthProfile", "WorkerSpec.target.auth");
|
|
253
|
+
if (auth.headers === void 0) return;
|
|
254
|
+
const headers = readRecord(auth.headers, "WorkerSpec.target.auth.headers");
|
|
255
|
+
for (const [key, value2] of Object.entries(headers)) {
|
|
256
|
+
readString(value2, `WorkerSpec.target.auth.headers.${key}`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
function validateTargetPricing(value) {
|
|
260
|
+
const pricing = readRecord(value, "WorkerSpec.target.pricing");
|
|
261
|
+
const input = pricing.input;
|
|
262
|
+
const output = pricing.output;
|
|
263
|
+
if (typeof input !== "number" || !Number.isFinite(input) || input < 0) {
|
|
264
|
+
throw new Error("WorkerSpec.target.pricing.input must be a non-negative finite number");
|
|
265
|
+
}
|
|
266
|
+
if (typeof output !== "number" || !Number.isFinite(output) || output < 0) {
|
|
267
|
+
throw new Error("WorkerSpec.target.pricing.output must be a non-negative finite number");
|
|
268
|
+
}
|
|
269
|
+
readOptionalNumber(pricing, "cacheRead", "WorkerSpec.target.pricing");
|
|
270
|
+
readOptionalNumber(pricing, "cacheWrite", "WorkerSpec.target.pricing");
|
|
271
|
+
}
|
|
272
|
+
function validateCapabilityPatch(value, source) {
|
|
273
|
+
const caps = readRecord(value, source);
|
|
274
|
+
for (const key of ["chat", "tools", "reasoning", "vision", "audio", "embeddings", "rerank", "fim"]) {
|
|
275
|
+
readOptionalBoolean(caps, key, source);
|
|
276
|
+
}
|
|
277
|
+
for (const key of ["contextWindow", "maxTokens"]) {
|
|
278
|
+
readOptionalNumber(caps, key, source);
|
|
279
|
+
}
|
|
280
|
+
if (caps.thinkingControlRuntime !== void 0) {
|
|
281
|
+
readEnum(caps.thinkingControlRuntime, `${source}.thinkingControlRuntime`, ["lmstudio", "llamacpp"]);
|
|
282
|
+
}
|
|
283
|
+
for (const key of ["toolCallFormat", "thinkingFormat", "structuredOutputs"]) {
|
|
284
|
+
readOptionalString(caps, key, source);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
function validateAllowedTools(value) {
|
|
288
|
+
for (const name of readStringArray(value, "WorkerSpec.allowedTools")) {
|
|
289
|
+
if (name.trim().length === 0) throw new Error("WorkerSpec.allowedTools entries must be non-empty strings");
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
function validateWorkerBudget(value) {
|
|
293
|
+
const budget = readRecord(value, "WorkerSpec.budget");
|
|
294
|
+
const expected = ["mode", "hardCap", "readReserve", "revision", "synthesis", "toolCalls"];
|
|
295
|
+
const actual = Object.keys(budget).sort();
|
|
296
|
+
if (actual.some((key) => !expected.includes(key)) || actual.some((key) => key === "revision" && budget.revision === void 0)) {
|
|
297
|
+
throw new Error(`WorkerSpec.budget may contain only: ${expected.join(", ")}`);
|
|
298
|
+
}
|
|
299
|
+
if (budget.mode !== void 0 && budget.mode !== "advisory" && budget.mode !== "enforced")
|
|
300
|
+
throw new Error("WorkerSpec.budget.mode must be advisory or enforced");
|
|
301
|
+
for (const required of ["hardCap", "readReserve", "synthesis", "toolCalls"]) {
|
|
302
|
+
if (!Object.hasOwn(budget, required)) throw new Error(`WorkerSpec.budget.${required} is required`);
|
|
303
|
+
}
|
|
304
|
+
for (const key of ["toolCalls", "readReserve", "hardCap"]) {
|
|
305
|
+
const value2 = budget[key];
|
|
306
|
+
if (typeof value2 !== "number" || !Number.isSafeInteger(value2)) {
|
|
307
|
+
throw new Error(`WorkerSpec.budget.${key} must be a safe integer`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
if (budget.toolCalls <= 0) throw new Error("WorkerSpec.budget.toolCalls must be greater than zero");
|
|
311
|
+
if (budget.hardCap <= 0) throw new Error("WorkerSpec.budget.hardCap must be greater than zero");
|
|
312
|
+
if (budget.mode !== "advisory" && budget.toolCalls > budget.hardCap) {
|
|
313
|
+
throw new Error("WorkerSpec.budget.toolCalls must not exceed WorkerSpec.budget.hardCap");
|
|
314
|
+
}
|
|
315
|
+
if (budget.readReserve < 0 || budget.readReserve >= budget.toolCalls) {
|
|
316
|
+
throw new Error("WorkerSpec.budget.readReserve must be an integer in [0, toolCalls)");
|
|
317
|
+
}
|
|
318
|
+
if (typeof budget.synthesis !== "boolean") throw new Error("WorkerSpec.budget.synthesis must be a boolean");
|
|
319
|
+
if (budget.revision !== void 0) {
|
|
320
|
+
const revision = readRecord(budget.revision, "WorkerSpec.budget.revision");
|
|
321
|
+
const revisionKeys = Object.keys(revision).sort();
|
|
322
|
+
if (revisionKeys.length !== 2 || revisionKeys[0] !== "readReserve" || revisionKeys[1] !== "toolCalls") {
|
|
323
|
+
throw new Error("WorkerSpec.budget.revision must contain exactly: readReserve, toolCalls");
|
|
324
|
+
}
|
|
325
|
+
for (const key of ["toolCalls", "readReserve"]) {
|
|
326
|
+
if (typeof revision[key] !== "number" || !Number.isSafeInteger(revision[key])) {
|
|
327
|
+
throw new Error(`WorkerSpec.budget.revision.${key} must be a safe integer`);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (revision.toolCalls < budget.toolCalls) {
|
|
331
|
+
throw new Error("WorkerSpec.budget.revision.toolCalls must not be smaller than WorkerSpec.budget.toolCalls");
|
|
332
|
+
}
|
|
333
|
+
if (revision.toolCalls === budget.toolCalls && revision.readReserve <= budget.readReserve) {
|
|
334
|
+
throw new Error("WorkerSpec.budget.revision must increase toolCalls or readReserve");
|
|
335
|
+
}
|
|
336
|
+
if (budget.mode !== "advisory" && revision.toolCalls > budget.hardCap) {
|
|
337
|
+
throw new Error("WorkerSpec.budget.revision.toolCalls must not exceed WorkerSpec.budget.hardCap");
|
|
338
|
+
}
|
|
339
|
+
if (revision.readReserve < 0 || revision.readReserve >= revision.toolCalls) {
|
|
340
|
+
throw new Error("WorkerSpec.budget.revision.readReserve must be an integer in [0, toolCalls)");
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
function validateRuntimeCapabilityDecision(value, source) {
|
|
345
|
+
const caps = readRecord(value, source);
|
|
346
|
+
for (const key of ["chat", "tools", "reasoning", "vision", "streaming"]) {
|
|
347
|
+
if (typeof caps[key] !== "boolean") throw new Error(`${source}.${key} must be a boolean`);
|
|
348
|
+
}
|
|
349
|
+
for (const key of ["contextWindow", "maxTokens"]) {
|
|
350
|
+
const n = caps[key];
|
|
351
|
+
if (typeof n !== "number" || !Number.isFinite(n) || n < 0)
|
|
352
|
+
throw new Error(`${source}.${key} must be a non-negative finite number`);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
function validateRuntimeResolution(value) {
|
|
356
|
+
if (value === void 0) return;
|
|
357
|
+
const resolution = readRecord(value, "WorkerSpec.runtimeResolution");
|
|
358
|
+
readString(resolution.targetId, "WorkerSpec.runtimeResolution.targetId");
|
|
359
|
+
readString(resolution.runtimeId, "WorkerSpec.runtimeResolution.runtimeId");
|
|
360
|
+
readEnum(resolution.runtimeKind, "WorkerSpec.runtimeResolution.runtimeKind", RUNTIME_KINDS);
|
|
361
|
+
readEnum(resolution.apiFamily, "WorkerSpec.runtimeResolution.apiFamily", RUNTIME_API_FAMILIES);
|
|
362
|
+
readEnum(resolution.auth, "WorkerSpec.runtimeResolution.auth", RUNTIME_AUTHS);
|
|
363
|
+
if (typeof resolution.authRequired !== "boolean") {
|
|
364
|
+
throw new Error("WorkerSpec.runtimeResolution.authRequired must be a boolean");
|
|
365
|
+
}
|
|
366
|
+
readString(resolution.wireModelId, "WorkerSpec.runtimeResolution.wireModelId");
|
|
367
|
+
readEnum(resolution.requestedThinkingLevel, "WorkerSpec.runtimeResolution.requestedThinkingLevel", THINKING_LEVELS);
|
|
368
|
+
readEnum(resolution.effectiveThinkingLevel, "WorkerSpec.runtimeResolution.effectiveThinkingLevel", THINKING_LEVELS);
|
|
369
|
+
validateRuntimeCapabilityDecision(resolution.capabilities, "WorkerSpec.runtimeResolution.capabilities");
|
|
370
|
+
const thinking = readRecord(resolution.thinking, "WorkerSpec.runtimeResolution.thinking");
|
|
371
|
+
readEnum(thinking.mechanism, "WorkerSpec.runtimeResolution.thinking.mechanism", THINKING_MECHANISMS);
|
|
372
|
+
readString(thinking.display, "WorkerSpec.runtimeResolution.thinking.display", { allowEmpty: true });
|
|
373
|
+
for (const level of readStringArray(
|
|
374
|
+
thinking.supportedLevels,
|
|
375
|
+
"WorkerSpec.runtimeResolution.thinking.supportedLevels"
|
|
376
|
+
)) {
|
|
377
|
+
readEnum(level, "WorkerSpec.runtimeResolution.thinking.supportedLevels[]", THINKING_LEVELS);
|
|
378
|
+
}
|
|
379
|
+
readEnum(
|
|
380
|
+
thinking.budgetEnforcement,
|
|
381
|
+
"WorkerSpec.runtimeResolution.thinking.budgetEnforcement",
|
|
382
|
+
THINKING_BUDGET_ENFORCEMENTS
|
|
383
|
+
);
|
|
384
|
+
readEnum(thinking.noticeKind, "WorkerSpec.runtimeResolution.thinking.noticeKind", THINKING_NOTICE_KINDS);
|
|
385
|
+
readString(thinking.notice, "WorkerSpec.runtimeResolution.thinking.notice", { allowEmpty: true });
|
|
386
|
+
readRecord(resolution.request, "WorkerSpec.runtimeResolution.request");
|
|
387
|
+
readRecord(resolution.response, "WorkerSpec.runtimeResolution.response");
|
|
388
|
+
if (!Array.isArray(resolution.diagnostics)) {
|
|
389
|
+
throw new Error("WorkerSpec.runtimeResolution.diagnostics must be an array");
|
|
390
|
+
}
|
|
391
|
+
for (let index = 0; index < resolution.diagnostics.length; index += 1) {
|
|
392
|
+
const diag = readRecord(resolution.diagnostics[index], `WorkerSpec.runtimeResolution.diagnostics[${index}]`);
|
|
393
|
+
readEnum(diag.severity, `WorkerSpec.runtimeResolution.diagnostics[${index}].severity`, RUNTIME_RESOLUTION_SEVERITIES);
|
|
394
|
+
readString(diag.code, `WorkerSpec.runtimeResolution.diagnostics[${index}].code`);
|
|
395
|
+
readString(diag.message, `WorkerSpec.runtimeResolution.diagnostics[${index}].message`);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
function validateMiddlewareSnapshot(value) {
|
|
399
|
+
const snapshot = readRecord(value, "WorkerSpec.middlewareSnapshot");
|
|
400
|
+
if (snapshot.version !== 1) throw new Error("WorkerSpec.middlewareSnapshot version must be 1");
|
|
401
|
+
if (!Array.isArray(snapshot.rules)) throw new Error("WorkerSpec.middlewareSnapshot.rules must be an array");
|
|
402
|
+
for (let index = 0; index < snapshot.rules.length; index += 1) {
|
|
403
|
+
const source = `WorkerSpec.middlewareSnapshot.rules[${index}]`;
|
|
404
|
+
const rule = readRecord(snapshot.rules[index], source);
|
|
405
|
+
readString(rule.id, `${source}.id`);
|
|
406
|
+
if (rule.source !== "builtin") throw new Error(`${source}.source must be builtin`);
|
|
407
|
+
readString(rule.description, `${source}.description`);
|
|
408
|
+
if (typeof rule.enabled !== "boolean") throw new Error(`${source}.enabled must be a boolean`);
|
|
409
|
+
for (const hook of readStringArray(rule.hooks, `${source}.hooks`)) {
|
|
410
|
+
readEnum(hook, `${source}.hooks[]`, MIDDLEWARE_HOOKS);
|
|
411
|
+
}
|
|
412
|
+
for (const kind of readStringArray(rule.effectKinds, `${source}.effectKinds`)) {
|
|
413
|
+
readEnum(kind, `${source}.effectKinds[]`, MIDDLEWARE_EFFECT_KINDS);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
function validateProtectedArtifactState(value) {
|
|
418
|
+
const state = readRecord(value, "WorkerSpec.protectedArtifactState");
|
|
419
|
+
if (state.version !== WORKER_PROTECTED_ARTIFACT_STATE_VERSION) {
|
|
420
|
+
throw new Error(
|
|
421
|
+
`WorkerSpec.protectedArtifactState version ${String(state.version)} is unsupported; expected ${WORKER_PROTECTED_ARTIFACT_STATE_VERSION}`
|
|
422
|
+
);
|
|
423
|
+
}
|
|
424
|
+
if (!Array.isArray(state.artifacts)) {
|
|
425
|
+
throw new Error("WorkerSpec.protectedArtifactState.artifacts must be an array");
|
|
426
|
+
}
|
|
427
|
+
const sources = ["validation", "middleware", "user", "session"];
|
|
428
|
+
for (let index = 0; index < state.artifacts.length; index += 1) {
|
|
429
|
+
const source = `WorkerSpec.protectedArtifactState.artifacts[${index}]`;
|
|
430
|
+
const artifact = readRecord(state.artifacts[index], source);
|
|
431
|
+
readString(artifact.path, `${source}.path`);
|
|
432
|
+
readString(artifact.protectedAt, `${source}.protectedAt`);
|
|
433
|
+
readString(artifact.reason, `${source}.reason`);
|
|
434
|
+
readEnum(artifact.source, `${source}.source`, sources);
|
|
435
|
+
readOptionalString(artifact, "validationCommand", source);
|
|
436
|
+
readOptionalNumber(artifact, "validationExitCode", source);
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
function parseWorkerSpec(value) {
|
|
440
|
+
const spec = readRecord(value, "WorkerSpec");
|
|
441
|
+
if (spec.specVersion !== WORKER_SPEC_VERSION) {
|
|
442
|
+
throw new Error(
|
|
443
|
+
`WorkerSpec version ${String(spec.specVersion)} is unsupported (expected version ${WORKER_SPEC_VERSION}). Re-dispatch the request to generate a valid attested, budget-bearing worker specification.`
|
|
444
|
+
);
|
|
445
|
+
}
|
|
446
|
+
if (spec.budget === void 0) {
|
|
447
|
+
throw new Error(`WorkerSpec version ${WORKER_SPEC_VERSION} requires budget`);
|
|
448
|
+
}
|
|
449
|
+
if (typeof spec.settingsFingerprint !== "string" || !/^[0-9a-f]{64}$/.test(spec.settingsFingerprint)) {
|
|
450
|
+
throw new Error(`WorkerSpec version ${WORKER_SPEC_VERSION} requires settingsFingerprint as a sha256 hex digest`);
|
|
451
|
+
}
|
|
452
|
+
const runtime = readRecord(spec.runtime, "WorkerSpec.runtime");
|
|
453
|
+
if (runtime.version !== WORKER_RUNTIME_DESCRIPTOR_VERSION) {
|
|
454
|
+
throw new Error(
|
|
455
|
+
`WorkerSpec.runtime version ${String(runtime.version)} is unsupported; expected ${WORKER_RUNTIME_DESCRIPTOR_VERSION}`
|
|
456
|
+
);
|
|
457
|
+
}
|
|
458
|
+
const runtimeId = readString(spec.runtimeId, "WorkerSpec.runtimeId");
|
|
459
|
+
const runtimeRefId = readString(runtime.id, "WorkerSpec.runtime.id");
|
|
460
|
+
if (runtimeId !== runtimeRefId) {
|
|
461
|
+
throw new Error(`WorkerSpec runtime id mismatch: runtimeId=${runtimeId} runtime.id=${runtimeRefId}`);
|
|
462
|
+
}
|
|
463
|
+
const runtimeAliases = runtime.aliases === void 0 ? [] : readStringArray(runtime.aliases, "WorkerSpec.runtime.aliases");
|
|
464
|
+
const runtimeKind = readEnum(runtime.kind, "WorkerSpec.runtime.kind", RUNTIME_KINDS);
|
|
465
|
+
const runtimeApiFamily = readEnum(runtime.apiFamily, "WorkerSpec.runtime.apiFamily", RUNTIME_API_FAMILIES);
|
|
466
|
+
readEnum(runtime.auth, "WorkerSpec.runtime.auth", RUNTIME_AUTHS);
|
|
467
|
+
readString(spec.systemPrompt, "WorkerSpec.systemPrompt", { allowEmpty: true });
|
|
468
|
+
readWorkerPromptMessages(spec.dynamicPromptMessages, "WorkerSpec.dynamicPromptMessages");
|
|
469
|
+
if (spec.contextSeed !== void 0) {
|
|
470
|
+
parseWorkerContextSeed(spec.contextSeed);
|
|
471
|
+
if (runtimeKind !== "http") throw new Error("worker context: native history seeds require an HTTP/Pi runtime");
|
|
472
|
+
}
|
|
473
|
+
readOptionalString(spec, "promptSignature", "WorkerSpec");
|
|
474
|
+
readOptionalString(spec, "toolSignature", "WorkerSpec");
|
|
475
|
+
readOptionalString(spec, "dynamicHash", "WorkerSpec");
|
|
476
|
+
readString(spec.agentId, "WorkerSpec.agentId");
|
|
477
|
+
readString(spec.task, "WorkerSpec.task");
|
|
478
|
+
validateTarget(spec.target, runtimeId, runtimeAliases);
|
|
479
|
+
readString(spec.wireModelId, "WorkerSpec.wireModelId");
|
|
480
|
+
readOptionalString(spec, "sessionId", "WorkerSpec");
|
|
481
|
+
readOptionalString(spec, "apiKey", "WorkerSpec");
|
|
482
|
+
readOptionalEnum(spec, "thinkingLevel", "WorkerSpec", THINKING_LEVELS);
|
|
483
|
+
if (spec.modelCapabilities !== void 0)
|
|
484
|
+
validateCapabilityPatch(spec.modelCapabilities, "WorkerSpec.modelCapabilities");
|
|
485
|
+
if (spec.responseSchema !== void 0) {
|
|
486
|
+
assertValidResponseSchema(spec.responseSchema, "WorkerSpec.responseSchema");
|
|
487
|
+
if (!runtimeSpeaksResponseSchemaDialect({ id: runtimeId, kind: runtimeKind, apiFamily: runtimeApiFamily })) {
|
|
488
|
+
throw new Error("WorkerSpec.responseSchema is supported only by the native llamacpp runtime");
|
|
489
|
+
}
|
|
490
|
+
const structuredOutputs = spec.modelCapabilities === void 0 ? void 0 : readRecord(spec.modelCapabilities, "WorkerSpec.modelCapabilities").structuredOutputs;
|
|
491
|
+
if (structuredOutputs !== "json-schema") {
|
|
492
|
+
throw new Error("WorkerSpec.responseSchema requires resolved JSON-schema model capability");
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
validateAllowedTools(spec.allowedTools);
|
|
496
|
+
if (spec.helperResult !== void 0) {
|
|
497
|
+
if (spec.helperResult !== true) throw new Error("WorkerSpec.helperResult must be true when present");
|
|
498
|
+
const contract = readRecord(spec.resultContract, "WorkerSpec.resultContract");
|
|
499
|
+
if (!INTERNAL_HELPER_RESULT_KINDS.includes(contract.kind)) {
|
|
500
|
+
throw new Error("WorkerSpec.helperResult requires a supported internal JSON result contract");
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
validateWorkerBudget(spec.budget);
|
|
504
|
+
validateProtectedModels(spec.protectedModels);
|
|
505
|
+
validateRuntimeResolution(spec.runtimeResolution);
|
|
506
|
+
if (spec.middlewareSnapshot !== void 0) validateMiddlewareSnapshot(spec.middlewareSnapshot);
|
|
507
|
+
if (spec.protectedArtifactState !== void 0) validateProtectedArtifactState(spec.protectedArtifactState);
|
|
508
|
+
if (spec.noSkills !== void 0 && typeof spec.noSkills !== "boolean") {
|
|
509
|
+
throw new Error("WorkerSpec.noSkills must be a boolean");
|
|
510
|
+
}
|
|
511
|
+
if (spec.turnConstraints !== void 0) snapshotTurnConstraints(spec.turnConstraints);
|
|
512
|
+
if (spec.skillPaths !== void 0) {
|
|
513
|
+
readStringArray(spec.skillPaths, "WorkerSpec.skillPaths");
|
|
514
|
+
}
|
|
515
|
+
if (spec.agentSkills !== void 0) {
|
|
516
|
+
for (const name of readStringArray(spec.agentSkills, "WorkerSpec.agentSkills")) {
|
|
517
|
+
if (name.trim().length === 0) throw new Error("WorkerSpec.agentSkills entries must be non-empty strings");
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
if (spec.trustProjectCompatRoots !== void 0 && typeof spec.trustProjectCompatRoots !== "boolean") {
|
|
521
|
+
throw new Error("WorkerSpec.trustProjectCompatRoots must be a boolean");
|
|
522
|
+
}
|
|
523
|
+
if (spec.gitCommitAttribution !== void 0 && typeof spec.gitCommitAttribution !== "boolean") {
|
|
524
|
+
throw new Error("WorkerSpec.gitCommitAttribution must be a boolean");
|
|
525
|
+
}
|
|
526
|
+
readOptionalEnum(spec, "toolProfile", "WorkerSpec", TOOL_PROFILE_NAMES);
|
|
527
|
+
readOptionalEnum(spec, "product", "WorkerSpec", WORKER_PRODUCTS);
|
|
528
|
+
if (spec.onPermission !== void 0 && spec.onPermission !== "deny" && spec.onPermission !== "fail" && spec.onPermission !== "escalate") {
|
|
529
|
+
throw new Error('WorkerSpec.onPermission must be "deny", "fail", or "escalate"');
|
|
530
|
+
}
|
|
531
|
+
if (spec.escalation !== void 0) {
|
|
532
|
+
const escalation = readRecord(spec.escalation, "WorkerSpec.escalation");
|
|
533
|
+
const timeoutMs = escalation.timeoutMs;
|
|
534
|
+
if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
535
|
+
throw new Error("WorkerSpec.escalation.timeoutMs must be a positive finite number");
|
|
536
|
+
}
|
|
537
|
+
if (escalation.fallback !== "deny" && escalation.fallback !== "fail") {
|
|
538
|
+
throw new Error('WorkerSpec.escalation.fallback must be "deny" or "fail"');
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
if (spec.autonomy !== void 0) {
|
|
542
|
+
readEnum(spec.autonomy, "WorkerSpec.autonomy", SPEC_AUTONOMY_LEVELS);
|
|
543
|
+
}
|
|
544
|
+
if (spec.ledger !== void 0) {
|
|
545
|
+
const ledger = readRecord(spec.ledger, "WorkerSpec.ledger");
|
|
546
|
+
readString(ledger.id, "WorkerSpec.ledger.id");
|
|
547
|
+
if (typeof ledger.sequence !== "number" || !Number.isSafeInteger(ledger.sequence) || ledger.sequence < 0) {
|
|
548
|
+
throw new Error("WorkerSpec.ledger.sequence must be a non-negative safe integer");
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
if (spec.writeRoots !== void 0) {
|
|
552
|
+
const roots = readStringArray(spec.writeRoots, "WorkerSpec.writeRoots");
|
|
553
|
+
if (roots.length === 0) throw new Error("WorkerSpec.writeRoots must be a non-empty array when present");
|
|
554
|
+
for (const root of roots) {
|
|
555
|
+
if (root.trim().length === 0) throw new Error("WorkerSpec.writeRoots entries must be non-empty strings");
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
return spec;
|
|
559
|
+
}
|
|
560
|
+
function validateRehydratedWorkerRuntime(spec, runtime) {
|
|
561
|
+
const expected = spec.runtime;
|
|
562
|
+
if (runtime.id !== expected.id) {
|
|
563
|
+
throw new Error(`WorkerSpec runtime rehydration mismatch for id: expected ${expected.id}, got ${runtime.id}`);
|
|
564
|
+
}
|
|
565
|
+
if (runtime.kind !== expected.kind) {
|
|
566
|
+
throw new Error(`WorkerSpec runtime rehydration mismatch for kind: expected ${expected.kind}, got ${runtime.kind}`);
|
|
567
|
+
}
|
|
568
|
+
if (runtime.apiFamily !== expected.apiFamily) {
|
|
569
|
+
throw new Error(
|
|
570
|
+
`WorkerSpec runtime rehydration mismatch for apiFamily: expected ${expected.apiFamily}, got ${runtime.apiFamily}`
|
|
571
|
+
);
|
|
572
|
+
}
|
|
573
|
+
if (runtime.auth !== expected.auth) {
|
|
574
|
+
throw new Error(`WorkerSpec runtime rehydration mismatch for auth: expected ${expected.auth}, got ${runtime.auth}`);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
// src/domains/context/worker/snapshot.ts
|
|
579
|
+
init_esm_shims();
|
|
580
|
+
function captureWorkerContext(source, messages) {
|
|
581
|
+
const conversation = messages.filter((message) => message.role !== "system");
|
|
582
|
+
const interrupted = (message) => message.role === "assistant" && (message.stopReason === "error" || message.stopReason === "aborted");
|
|
583
|
+
const interruptedIds = new Set(
|
|
584
|
+
conversation.filter(interrupted).flatMap(messageToolCalls).map((call) => call.id)
|
|
585
|
+
);
|
|
586
|
+
const visible = conversation.filter(
|
|
587
|
+
(message) => !interrupted(message) && !(message.role === "toolResult" && interruptedIds.has(message.toolCallId))
|
|
588
|
+
);
|
|
589
|
+
const end = completeHistoryLength(visible, true);
|
|
590
|
+
const snapshot = {
|
|
591
|
+
version: 1,
|
|
592
|
+
source: structuredClone(source),
|
|
593
|
+
messages: structuredClone(visible.slice(0, end)),
|
|
594
|
+
excludedTailMessages: visible.length - end,
|
|
595
|
+
excludedInterruptedMessages: conversation.length - visible.length
|
|
596
|
+
};
|
|
597
|
+
return { ...snapshot, contentHash: contextHash(snapshot) };
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
// src/engine/antigravity/subprocess-runtime.ts
|
|
601
|
+
init_esm_shims();
|
|
602
|
+
import { spawn as spawn2 } from "node:child_process";
|
|
603
|
+
|
|
604
|
+
// src/engine/external-subprocess.ts
|
|
605
|
+
init_esm_shims();
|
|
606
|
+
import { spawn } from "node:child_process";
|
|
607
|
+
async function* readBoundedLines(readable, options) {
|
|
608
|
+
let segments = [];
|
|
609
|
+
let lineBytes = 0;
|
|
610
|
+
let totalBytes = 0;
|
|
611
|
+
let discarding = false;
|
|
612
|
+
const finishLine = () => {
|
|
613
|
+
if (discarding) {
|
|
614
|
+
segments = [];
|
|
615
|
+
lineBytes = 0;
|
|
616
|
+
discarding = false;
|
|
617
|
+
return { kind: "oversized" };
|
|
618
|
+
}
|
|
619
|
+
if (lineBytes === 0) return { kind: "line", line: "" };
|
|
620
|
+
const joined = Buffer.concat(segments, lineBytes);
|
|
621
|
+
segments = [];
|
|
622
|
+
lineBytes = 0;
|
|
623
|
+
const end = joined.at(-1) === 13 ? joined.length - 1 : joined.length;
|
|
624
|
+
return { kind: "line", line: joined.subarray(0, end).toString("utf8") };
|
|
625
|
+
};
|
|
626
|
+
for await (const raw of readable) {
|
|
627
|
+
const chunk = Buffer.isBuffer(raw) ? raw : Buffer.from(String(raw));
|
|
628
|
+
totalBytes += chunk.byteLength;
|
|
629
|
+
if (totalBytes > options.maxTotalBytes) throw new Error("external stdout exceeded the cumulative output limit");
|
|
630
|
+
let offset = 0;
|
|
631
|
+
while (offset < chunk.length) {
|
|
632
|
+
const newline = chunk.indexOf(10, offset);
|
|
633
|
+
const end = newline === -1 ? chunk.length : newline;
|
|
634
|
+
const piece = chunk.subarray(offset, end);
|
|
635
|
+
if (!discarding && piece.length > 0) {
|
|
636
|
+
if (lineBytes + piece.length > options.maxLineBytes) {
|
|
637
|
+
segments = [];
|
|
638
|
+
lineBytes = 0;
|
|
639
|
+
discarding = true;
|
|
640
|
+
} else {
|
|
641
|
+
segments.push(piece);
|
|
642
|
+
lineBytes += piece.length;
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
if (newline === -1) break;
|
|
646
|
+
const line = finishLine();
|
|
647
|
+
if (line) yield line;
|
|
648
|
+
offset = newline + 1;
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
if (discarding || lineBytes > 0) {
|
|
652
|
+
const line = finishLine();
|
|
653
|
+
if (line) yield line;
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
async function readStderr(child) {
|
|
657
|
+
let tail = Buffer.alloc(0);
|
|
658
|
+
for await (const chunk of child.stderr) {
|
|
659
|
+
const bytes = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));
|
|
660
|
+
tail = Buffer.concat([tail, bytes]);
|
|
661
|
+
if (tail.byteLength > 8192) tail = tail.subarray(tail.byteLength - 8192);
|
|
662
|
+
}
|
|
663
|
+
return boundedExternalDiagnostic(tail.toString("utf8"));
|
|
664
|
+
}
|
|
665
|
+
function createProcessTreeTerminator(child, graceMs = 1500, options = {}) {
|
|
666
|
+
const platform = options.platform ?? process.platform;
|
|
667
|
+
const spawnKiller = options.spawn ?? spawn;
|
|
668
|
+
let sent = false;
|
|
669
|
+
let timer = null;
|
|
670
|
+
const signal = (name) => {
|
|
671
|
+
if (child.pid && platform !== "win32") {
|
|
672
|
+
try {
|
|
673
|
+
process.kill(-child.pid, name);
|
|
674
|
+
return;
|
|
675
|
+
} catch {
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
if (platform === "win32" && child.pid !== void 0 && Number.isSafeInteger(child.pid) && child.pid > 0) {
|
|
679
|
+
const args = ["/PID", String(child.pid), "/T", ...name === "SIGKILL" ? ["/F"] : []];
|
|
680
|
+
const killer = spawnKiller("taskkill.exe", args, { stdio: "ignore", windowsHide: true });
|
|
681
|
+
killer.once("error", () => {
|
|
682
|
+
if (child.exitCode === null) child.kill(name);
|
|
683
|
+
});
|
|
684
|
+
return;
|
|
685
|
+
}
|
|
686
|
+
if (child.exitCode !== null) return;
|
|
687
|
+
child.kill(name);
|
|
688
|
+
};
|
|
689
|
+
return {
|
|
690
|
+
terminate() {
|
|
691
|
+
if (sent) return;
|
|
692
|
+
sent = true;
|
|
693
|
+
signal("SIGTERM");
|
|
694
|
+
timer = setTimeout(() => {
|
|
695
|
+
timer = null;
|
|
696
|
+
signal("SIGKILL");
|
|
697
|
+
}, graceMs);
|
|
698
|
+
},
|
|
699
|
+
cleanup() {
|
|
700
|
+
if (timer) {
|
|
701
|
+
clearTimeout(timer);
|
|
702
|
+
timer = null;
|
|
703
|
+
signal("SIGKILL");
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
};
|
|
707
|
+
}
|
|
708
|
+
function waitForClose(child) {
|
|
709
|
+
return new Promise((resolve) => {
|
|
710
|
+
let settled = false;
|
|
711
|
+
const finish = (code) => {
|
|
712
|
+
if (settled) return;
|
|
713
|
+
settled = true;
|
|
714
|
+
resolve(code);
|
|
715
|
+
};
|
|
716
|
+
child.once("error", () => finish(1));
|
|
717
|
+
child.once("close", (code) => finish(code ?? 1));
|
|
718
|
+
});
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
// src/engine/antigravity/subprocess-runtime.ts
|
|
722
|
+
var ANTIGRAVITY_BINARY = "agy";
|
|
723
|
+
var ANTIGRAVITY_MAX_STREAM_LINE_BYTES = 1024 * 1024;
|
|
724
|
+
var ANTIGRAVITY_MAX_STREAM_BYTES = 8 * 1024 * 1024;
|
|
725
|
+
var ANTIGRAVITY_MAX_RESPONSE_BYTES = 4 * 1024 * 1024;
|
|
726
|
+
var ANTIGRAVITY_MAX_PROMPT_BYTES = 4 * 1024 * 1024;
|
|
727
|
+
var MAX_PROTOCOL_DIAGNOSTICS = 32;
|
|
728
|
+
var MAX_CONVERSATION_ID_BYTES = 4096;
|
|
729
|
+
function antigravitySubprocessConfigForAutonomy(level, env = process.env) {
|
|
730
|
+
if (level === "full-auto" && env.CLIO_CODER_ALLOW_EXTERNAL_FULL_ACCESS === "1") {
|
|
731
|
+
return {
|
|
732
|
+
extraArgs: ["--dangerously-skip-permissions"],
|
|
733
|
+
dangerousBypass: true,
|
|
734
|
+
externalMode: "bypassPermissions"
|
|
735
|
+
};
|
|
736
|
+
}
|
|
737
|
+
if (level === "suggest") {
|
|
738
|
+
throw new Error(
|
|
739
|
+
"antigravity-code runtime cannot enforce autonomy 'suggest': it cannot park tool calls for approval. Dispatch to a native or claude-sdk worker, or use read-only or auto-edit."
|
|
740
|
+
);
|
|
741
|
+
}
|
|
742
|
+
if (level === "read-only") {
|
|
743
|
+
return { extraArgs: ["--mode", "plan", "--sandbox"], dangerousBypass: false, externalMode: "plan+sandbox" };
|
|
744
|
+
}
|
|
745
|
+
return { extraArgs: ["--mode", "accept-edits"], dangerousBypass: false, externalMode: "accept-edits" };
|
|
746
|
+
}
|
|
747
|
+
function buildAntigravityPrompt(input) {
|
|
748
|
+
const parts = [];
|
|
749
|
+
const systemPrompt = input.systemPrompt.trim();
|
|
750
|
+
if (systemPrompt.length > 0) parts.push(systemPrompt);
|
|
751
|
+
for (const message of input.dynamicPromptMessages ?? []) {
|
|
752
|
+
const body = message.body.trim();
|
|
753
|
+
if (body.length > 0) parts.push(body);
|
|
754
|
+
}
|
|
755
|
+
parts.push(input.task);
|
|
756
|
+
return parts.join("\n\n");
|
|
757
|
+
}
|
|
758
|
+
function buildAgyStdinLine(input) {
|
|
759
|
+
const content = buildAntigravityPrompt(input);
|
|
760
|
+
if (Buffer.byteLength(content, "utf8") > ANTIGRAVITY_MAX_PROMPT_BYTES) {
|
|
761
|
+
throw new Error(`Antigravity work order exceeded ${ANTIGRAVITY_MAX_PROMPT_BYTES} bytes`);
|
|
762
|
+
}
|
|
763
|
+
return `${JSON.stringify({ event: "user", message: { content } })}
|
|
764
|
+
`;
|
|
765
|
+
}
|
|
766
|
+
function buildAgyArgs(input, gateEnv = process.env) {
|
|
767
|
+
assertToolProfileEnforceable(input.toolProfile, "antigravity-code");
|
|
768
|
+
const permission = antigravitySubprocessConfigForAutonomy(input.autonomy, gateEnv);
|
|
769
|
+
const args = [
|
|
770
|
+
...permission.extraArgs,
|
|
771
|
+
"--input-format",
|
|
772
|
+
"stream-json",
|
|
773
|
+
"--output-format",
|
|
774
|
+
"stream-json",
|
|
775
|
+
"--disable-slash-commands"
|
|
776
|
+
];
|
|
777
|
+
if (input.wireModelId.trim().length > 0) args.push("--model", input.wireModelId.trim());
|
|
778
|
+
if (typeof input.sessionId === "string" && input.sessionId.length > 0) {
|
|
779
|
+
if (Buffer.byteLength(input.sessionId, "utf8") > MAX_CONVERSATION_ID_BYTES) {
|
|
780
|
+
throw new Error(`Antigravity sessionId exceeded ${MAX_CONVERSATION_ID_BYTES} bytes`);
|
|
781
|
+
}
|
|
782
|
+
if (new RegExp("\\p{Cc}", "u").test(input.sessionId)) {
|
|
783
|
+
throw new Error("Antigravity sessionId must not contain control characters");
|
|
784
|
+
}
|
|
785
|
+
args.push("--conversation", input.sessionId);
|
|
786
|
+
}
|
|
787
|
+
return args;
|
|
788
|
+
}
|
|
789
|
+
function record(value) {
|
|
790
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
791
|
+
}
|
|
792
|
+
function parseAntigravityStreamLine(line) {
|
|
793
|
+
let decoded;
|
|
794
|
+
try {
|
|
795
|
+
decoded = JSON.parse(line);
|
|
796
|
+
} catch {
|
|
797
|
+
return null;
|
|
798
|
+
}
|
|
799
|
+
const envelope = record(decoded);
|
|
800
|
+
if (!envelope || typeof envelope.event !== "string") return null;
|
|
801
|
+
if (envelope.event === "init") {
|
|
802
|
+
return {
|
|
803
|
+
event: "init",
|
|
804
|
+
conversationId: typeof envelope.conversation_id === "string" ? envelope.conversation_id : null,
|
|
805
|
+
model: typeof envelope.model === "string" ? envelope.model : null
|
|
806
|
+
};
|
|
807
|
+
}
|
|
808
|
+
if (envelope.event === "step_update") {
|
|
809
|
+
const update = record(envelope.step_update);
|
|
810
|
+
if (!update) return null;
|
|
811
|
+
if (update.step_type !== "agent_response" || typeof update.text_delta !== "string") {
|
|
812
|
+
return { event: "other" };
|
|
813
|
+
}
|
|
814
|
+
return {
|
|
815
|
+
event: "text",
|
|
816
|
+
conversationId: typeof update.conversation_id === "string" ? update.conversation_id : null,
|
|
817
|
+
delta: update.text_delta
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
if (envelope.event === "result") {
|
|
821
|
+
const result = record(envelope.result);
|
|
822
|
+
return result ? { event: "result", result } : null;
|
|
823
|
+
}
|
|
824
|
+
return { event: "other" };
|
|
825
|
+
}
|
|
826
|
+
function finite(value) {
|
|
827
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? Math.min(value, Number.MAX_SAFE_INTEGER) : 0;
|
|
828
|
+
}
|
|
829
|
+
function normalizeUsage(raw) {
|
|
830
|
+
const source = record(raw) ?? {};
|
|
831
|
+
const input = finite(source.input_tokens);
|
|
832
|
+
const output = finite(source.output_tokens);
|
|
833
|
+
const cacheRead = finite(source.cache_read_tokens);
|
|
834
|
+
const reasoningTokens = finite(source.thinking_tokens);
|
|
835
|
+
const usage = {
|
|
836
|
+
input,
|
|
837
|
+
output,
|
|
838
|
+
cacheRead,
|
|
839
|
+
cacheWrite: 0,
|
|
840
|
+
totalTokens: finite(source.total_tokens) || input + output + reasoningTokens,
|
|
841
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 }
|
|
842
|
+
};
|
|
843
|
+
if (reasoningTokens > 0) usage.reasoningTokens = reasoningTokens;
|
|
844
|
+
return usage;
|
|
845
|
+
}
|
|
846
|
+
function appendBoundedText(current, delta) {
|
|
847
|
+
if (Buffer.byteLength(current, "utf8") + Buffer.byteLength(delta, "utf8") > ANTIGRAVITY_MAX_RESPONSE_BYTES) {
|
|
848
|
+
throw new Error(`Antigravity response exceeded ${ANTIGRAVITY_MAX_RESPONSE_BYTES} bytes`);
|
|
849
|
+
}
|
|
850
|
+
return current + delta;
|
|
851
|
+
}
|
|
852
|
+
function boundedProviderField(value, field) {
|
|
853
|
+
if (typeof value !== "string") return "";
|
|
854
|
+
if (Buffer.byteLength(value, "utf8") > ANTIGRAVITY_MAX_RESPONSE_BYTES) {
|
|
855
|
+
throw new Error(`Antigravity terminal ${field} exceeded ${ANTIGRAVITY_MAX_RESPONSE_BYTES} bytes`);
|
|
856
|
+
}
|
|
857
|
+
return value;
|
|
858
|
+
}
|
|
859
|
+
function boundedConversationId(value) {
|
|
860
|
+
if (typeof value !== "string" || value.length === 0) return null;
|
|
861
|
+
return Buffer.byteLength(value, "utf8") <= MAX_CONVERSATION_ID_BYTES ? value : null;
|
|
862
|
+
}
|
|
863
|
+
function protocolFailure(state, detail) {
|
|
864
|
+
if (state.protocolDiagnostics.length < MAX_PROTOCOL_DIAGNOSTICS) state.protocolDiagnostics.push(detail);
|
|
865
|
+
}
|
|
866
|
+
function emitTextDelta(emit, state, delta) {
|
|
867
|
+
if (delta.length === 0) return;
|
|
868
|
+
state.text = appendBoundedText(state.text, delta);
|
|
869
|
+
if (!state.started) {
|
|
870
|
+
state.started = true;
|
|
871
|
+
emit({
|
|
872
|
+
type: "message_start",
|
|
873
|
+
message: buildAssistantMessage({
|
|
874
|
+
model: state.model,
|
|
875
|
+
text: "",
|
|
876
|
+
result: null,
|
|
877
|
+
conversationId: null,
|
|
878
|
+
exitCode: 0,
|
|
879
|
+
aborted: false,
|
|
880
|
+
diagnostic: ""
|
|
881
|
+
})
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
emit({
|
|
885
|
+
type: "message_update",
|
|
886
|
+
assistantMessageEvent: { type: "text_delta", contentIndex: 0, delta }
|
|
887
|
+
});
|
|
888
|
+
}
|
|
889
|
+
async function readStream(child, emit, state, requestedConversationId) {
|
|
890
|
+
for await (const bounded of readBoundedLines(child.stdout, {
|
|
891
|
+
maxLineBytes: ANTIGRAVITY_MAX_STREAM_LINE_BYTES,
|
|
892
|
+
maxTotalBytes: ANTIGRAVITY_MAX_STREAM_BYTES
|
|
893
|
+
})) {
|
|
894
|
+
if (bounded.kind === "oversized") {
|
|
895
|
+
protocolFailure(state, "oversized structured output line");
|
|
896
|
+
continue;
|
|
897
|
+
}
|
|
898
|
+
const line = bounded.line;
|
|
899
|
+
if (!line.trim()) continue;
|
|
900
|
+
const event = parseAntigravityStreamLine(line);
|
|
901
|
+
if (!event) {
|
|
902
|
+
protocolFailure(state, "unreadable structured output line");
|
|
903
|
+
continue;
|
|
904
|
+
}
|
|
905
|
+
if (state.terminalSeen) {
|
|
906
|
+
protocolFailure(state, "event after terminal result");
|
|
907
|
+
continue;
|
|
908
|
+
}
|
|
909
|
+
switch (event.event) {
|
|
910
|
+
case "init":
|
|
911
|
+
if (state.initSeen) {
|
|
912
|
+
protocolFailure(state, "duplicate init event");
|
|
913
|
+
break;
|
|
914
|
+
}
|
|
915
|
+
state.initSeen = true;
|
|
916
|
+
if (requestedConversationId && event.conversationId !== requestedConversationId) {
|
|
917
|
+
protocolFailure(state, "requested conversation was not resumed");
|
|
918
|
+
}
|
|
919
|
+
state.conversationId = boundedConversationId(event.conversationId);
|
|
920
|
+
if (event.model?.trim()) state.model = event.model.trim();
|
|
921
|
+
break;
|
|
922
|
+
case "text":
|
|
923
|
+
if (!state.initSeen) {
|
|
924
|
+
protocolFailure(state, "text event before init");
|
|
925
|
+
break;
|
|
926
|
+
}
|
|
927
|
+
state.conversationId = boundedConversationId(event.conversationId) ?? state.conversationId;
|
|
928
|
+
emitTextDelta(emit, state, event.delta);
|
|
929
|
+
break;
|
|
930
|
+
case "result":
|
|
931
|
+
if (!state.initSeen) {
|
|
932
|
+
protocolFailure(state, "terminal result before init");
|
|
933
|
+
break;
|
|
934
|
+
}
|
|
935
|
+
state.terminalSeen = true;
|
|
936
|
+
state.result = event.result;
|
|
937
|
+
state.conversationId = boundedConversationId(event.result.conversation_id) ?? state.conversationId;
|
|
938
|
+
break;
|
|
939
|
+
case "other":
|
|
940
|
+
if (!state.initSeen) protocolFailure(state, "event before init");
|
|
941
|
+
break;
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
}
|
|
945
|
+
function resultDiagnostic(input) {
|
|
946
|
+
if (input.aborted) return "Antigravity run was cancelled";
|
|
947
|
+
if (input.spawnError) return input.spawnError;
|
|
948
|
+
if (input.streamError) return input.streamError;
|
|
949
|
+
if (input.protocolDiagnostics.length > 0) {
|
|
950
|
+
return `Antigravity structured output violated the protocol: ${input.protocolDiagnostics.join("; ")}`;
|
|
951
|
+
}
|
|
952
|
+
if (input.result === null) {
|
|
953
|
+
return "Antigravity CLI ended without a terminal stream result. Update `agy` and verify stream-json support.";
|
|
954
|
+
}
|
|
955
|
+
if (input.result.status !== "SUCCESS") {
|
|
956
|
+
const providerError = boundedProviderField(input.result.error, "error").trim();
|
|
957
|
+
return providerError || `Antigravity returned terminal status ${String(input.result.status ?? "missing")}`;
|
|
958
|
+
}
|
|
959
|
+
if (input.exitCode !== 0) return `Antigravity returned SUCCESS but exited with status ${input.exitCode}`;
|
|
960
|
+
if (typeof input.result.response !== "string") return "Antigravity SUCCESS result omitted its required response";
|
|
961
|
+
return "";
|
|
962
|
+
}
|
|
963
|
+
function buildAssistantMessage(input) {
|
|
964
|
+
const succeeded = !input.aborted && input.exitCode === 0 && input.result?.status === "SUCCESS" && typeof input.result.response === "string" && input.diagnostic.length === 0;
|
|
965
|
+
const message = {
|
|
966
|
+
role: "assistant",
|
|
967
|
+
content: [{ type: "text", text: input.text }],
|
|
968
|
+
api: "external-agent-subprocess",
|
|
969
|
+
provider: "antigravity",
|
|
970
|
+
model: input.model,
|
|
971
|
+
usage: normalizeUsage(input.result?.usage),
|
|
972
|
+
stopReason: input.aborted ? "aborted" : succeeded ? "stop" : "error",
|
|
973
|
+
timestamp: Date.now()
|
|
974
|
+
};
|
|
975
|
+
if (input.conversationId) message.responseId = input.conversationId;
|
|
976
|
+
if (input.diagnostic) message.errorMessage = boundedExternalDiagnostic(input.diagnostic);
|
|
977
|
+
return message;
|
|
978
|
+
}
|
|
979
|
+
function startAntigravityWorkerRun(input, emit, dependencies = {}) {
|
|
980
|
+
const sourceEnv = dependencies.environment ?? process.env;
|
|
981
|
+
const args = buildAgyArgs(input, sourceEnv);
|
|
982
|
+
const stdinLine = buildAgyStdinLine(input);
|
|
983
|
+
const workspaceRoot = dependencies.workspaceRoot ?? process.cwd();
|
|
984
|
+
const cwd = resolveSafeCwd(input.cwd, workspaceRoot);
|
|
985
|
+
const child = spawn2(dependencies.binary ?? ANTIGRAVITY_BINARY, args, {
|
|
986
|
+
cwd,
|
|
987
|
+
env: buildSafeToolEnv({}, sourceEnv),
|
|
988
|
+
detached: process.platform !== "win32",
|
|
989
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
990
|
+
});
|
|
991
|
+
const streamState = {
|
|
992
|
+
started: false,
|
|
993
|
+
text: "",
|
|
994
|
+
model: input.wireModelId,
|
|
995
|
+
result: null,
|
|
996
|
+
conversationId: null,
|
|
997
|
+
initSeen: false,
|
|
998
|
+
terminalSeen: false,
|
|
999
|
+
protocolDiagnostics: []
|
|
1000
|
+
};
|
|
1001
|
+
let aborted = false;
|
|
1002
|
+
let spawnError = "";
|
|
1003
|
+
let streamError = "";
|
|
1004
|
+
const terminator = createProcessTreeTerminator(child, dependencies.killGraceMs ?? 1500);
|
|
1005
|
+
const abort = () => {
|
|
1006
|
+
if (child.exitCode !== null) return;
|
|
1007
|
+
aborted = true;
|
|
1008
|
+
terminator.terminate();
|
|
1009
|
+
};
|
|
1010
|
+
const onAbort = () => abort();
|
|
1011
|
+
if (input.signal?.aborted) abort();
|
|
1012
|
+
else input.signal?.addEventListener("abort", onAbort, { once: true });
|
|
1013
|
+
child.once("error", (cause) => {
|
|
1014
|
+
spawnError = cause.code === "ENOENT" ? "Antigravity CLI (`agy`) is not installed or not on PATH." : boundedExternalDiagnostic(cause.message);
|
|
1015
|
+
});
|
|
1016
|
+
child.stdin.on("error", (cause) => {
|
|
1017
|
+
if (!aborted) spawnError ||= boundedExternalDiagnostic(`could not send work order to Antigravity: ${cause.message}`);
|
|
1018
|
+
});
|
|
1019
|
+
child.stdin.end(stdinLine);
|
|
1020
|
+
const promise = (async () => {
|
|
1021
|
+
emit({ type: "agent_start" });
|
|
1022
|
+
try {
|
|
1023
|
+
const stderrPromise = readStderr(child);
|
|
1024
|
+
const stdoutPromise = readStream(child, emit, streamState, input.sessionId).catch((cause) => {
|
|
1025
|
+
streamError = boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause));
|
|
1026
|
+
terminator.terminate();
|
|
1027
|
+
});
|
|
1028
|
+
const exitCode = await waitForClose(child);
|
|
1029
|
+
await stdoutPromise;
|
|
1030
|
+
const stderr = await stderrPromise.catch(
|
|
1031
|
+
(cause) => boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause))
|
|
1032
|
+
);
|
|
1033
|
+
let terminalResponse = "";
|
|
1034
|
+
try {
|
|
1035
|
+
terminalResponse = boundedProviderField(streamState.result?.response, "response");
|
|
1036
|
+
} catch (cause) {
|
|
1037
|
+
streamError ||= boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause));
|
|
1038
|
+
}
|
|
1039
|
+
let diagnostic = "";
|
|
1040
|
+
try {
|
|
1041
|
+
diagnostic = resultDiagnostic({
|
|
1042
|
+
result: streamState.result,
|
|
1043
|
+
exitCode,
|
|
1044
|
+
spawnError,
|
|
1045
|
+
stderr,
|
|
1046
|
+
protocolDiagnostics: streamState.protocolDiagnostics,
|
|
1047
|
+
streamError,
|
|
1048
|
+
aborted
|
|
1049
|
+
});
|
|
1050
|
+
} catch (cause) {
|
|
1051
|
+
diagnostic = boundedExternalDiagnostic(cause instanceof Error ? cause.message : String(cause));
|
|
1052
|
+
}
|
|
1053
|
+
const finalText = terminalResponse || streamState.text;
|
|
1054
|
+
const finalMessage = buildAssistantMessage({
|
|
1055
|
+
model: streamState.model,
|
|
1056
|
+
text: finalText,
|
|
1057
|
+
result: streamState.result,
|
|
1058
|
+
conversationId: streamState.conversationId,
|
|
1059
|
+
exitCode,
|
|
1060
|
+
aborted,
|
|
1061
|
+
diagnostic
|
|
1062
|
+
});
|
|
1063
|
+
if (!streamState.started) emit({ type: "message_start", message: finalMessage });
|
|
1064
|
+
emit({ type: "message_end", message: finalMessage });
|
|
1065
|
+
const messages = [finalMessage];
|
|
1066
|
+
emit({ type: "agent_end", messages });
|
|
1067
|
+
if (finalMessage.stopReason === "error" && diagnostic && !aborted) {
|
|
1068
|
+
process.stderr.write(`[worker:antigravity-code] ${boundedExternalDiagnostic(diagnostic)}
|
|
1069
|
+
`);
|
|
1070
|
+
}
|
|
1071
|
+
return { messages, exitCode: finalMessage.stopReason === "stop" ? 0 : 1 };
|
|
1072
|
+
} finally {
|
|
1073
|
+
terminator.cleanup();
|
|
1074
|
+
input.signal?.removeEventListener("abort", onAbort);
|
|
1075
|
+
}
|
|
1076
|
+
})();
|
|
1077
|
+
return { promise, abort };
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
// src/engine/claude/subprocess-runtime.ts
|
|
1081
|
+
init_esm_shims();
|
|
1082
|
+
import { spawn as spawn3 } from "node:child_process";
|
|
1083
|
+
|
|
1084
|
+
// src/engine/claude/session-id.ts
|
|
1085
|
+
init_esm_shims();
|
|
1086
|
+
var CLAUDE_CODE_SESSION_ID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
1087
|
+
function isClaudeCodeSessionId(value) {
|
|
1088
|
+
return typeof value === "string" && CLAUDE_CODE_SESSION_ID_PATTERN.test(value.trim());
|
|
1089
|
+
}
|
|
1090
|
+
|
|
1091
|
+
// src/engine/claude/subprocess-runtime.ts
|
|
1092
|
+
var READ_ONLY_CLAUDE_TOOLS = ["Read", "Grep", "Glob", "LS", "WebFetch", "WebSearch"];
|
|
1093
|
+
var CLAUDE_BINARY = "claude";
|
|
1094
|
+
var CLAUDE_MAX_STREAM_LINE_BYTES = 1024 * 1024;
|
|
1095
|
+
var CLAUDE_MAX_STREAM_BYTES = 8 * 1024 * 1024;
|
|
1096
|
+
function claudeSubprocessPermissionConfigForAutonomy(level, env = process.env) {
|
|
1097
|
+
if (level === "full-auto" && env.CLIO_CODER_ALLOW_EXTERNAL_FULL_ACCESS === "1") {
|
|
1098
|
+
return {
|
|
1099
|
+
permissionMode: "bypassPermissions",
|
|
1100
|
+
extraArgs: ["--allow-dangerously-skip-permissions"],
|
|
1101
|
+
dangerousBypass: true
|
|
1102
|
+
};
|
|
1103
|
+
}
|
|
1104
|
+
if (level === "read-only") {
|
|
1105
|
+
return {
|
|
1106
|
+
permissionMode: "plan",
|
|
1107
|
+
extraArgs: ["--tools", READ_ONLY_CLAUDE_TOOLS.join(",")],
|
|
1108
|
+
dangerousBypass: false
|
|
1109
|
+
};
|
|
1110
|
+
}
|
|
1111
|
+
if (level === "suggest") {
|
|
1112
|
+
throw new Error(
|
|
1113
|
+
"claude-code runtime cannot enforce autonomy 'suggest': it cannot park tool calls for approval. Dispatch to a native or claude-sdk worker, or use read-only or auto-edit."
|
|
1114
|
+
);
|
|
1115
|
+
}
|
|
1116
|
+
if (level === "auto-edit") {
|
|
1117
|
+
return { permissionMode: "acceptEdits", extraArgs: [], dangerousBypass: false };
|
|
1118
|
+
}
|
|
1119
|
+
return { permissionMode: "default", extraArgs: [], dangerousBypass: false };
|
|
1120
|
+
}
|
|
1121
|
+
function buildClaudeCodePrompt(input) {
|
|
1122
|
+
const parts = (input.dynamicPromptMessages ?? []).map((message) => message.body.trim()).filter(Boolean);
|
|
1123
|
+
parts.push(input.task);
|
|
1124
|
+
return parts.join("\n\n");
|
|
1125
|
+
}
|
|
1126
|
+
function buildClaudeCodeArgs(input, gateEnv = process.env) {
|
|
1127
|
+
assertToolProfileEnforceable(input.toolProfile, "claude-code");
|
|
1128
|
+
const permission = claudeSubprocessPermissionConfigForAutonomy(input.autonomy, gateEnv);
|
|
1129
|
+
const args = [
|
|
1130
|
+
"-p",
|
|
1131
|
+
"--output-format",
|
|
1132
|
+
"stream-json",
|
|
1133
|
+
"--include-partial-messages",
|
|
1134
|
+
"--no-session-persistence",
|
|
1135
|
+
"--permission-mode",
|
|
1136
|
+
permission.permissionMode,
|
|
1137
|
+
...permission.extraArgs
|
|
1138
|
+
];
|
|
1139
|
+
if (input.wireModelId.trim().length > 0) args.push("--model", input.wireModelId);
|
|
1140
|
+
const systemPrompt = input.systemPrompt.trim();
|
|
1141
|
+
if (systemPrompt.length > 0) args.push("--append-system-prompt", systemPrompt);
|
|
1142
|
+
if (isClaudeCodeSessionId(input.sessionId)) args.push("--session-id", input.sessionId.trim());
|
|
1143
|
+
return args;
|
|
1144
|
+
}
|
|
1145
|
+
function finite2(value) {
|
|
1146
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
|
|
1147
|
+
}
|
|
1148
|
+
function normalizeUsage2(raw, totalCostUsd = 0) {
|
|
1149
|
+
const record2 = typeof raw === "object" && raw !== null ? raw : {};
|
|
1150
|
+
const input = finite2(record2.input_tokens) + finite2(record2.inputTokens) + finite2(record2.input) + finite2(record2.prompt_tokens) + finite2(record2.promptTokens);
|
|
1151
|
+
const output = finite2(record2.output_tokens) + finite2(record2.outputTokens) + finite2(record2.output) + finite2(record2.completion_tokens) + finite2(record2.completionTokens);
|
|
1152
|
+
const cacheRead = finite2(record2.cache_read_input_tokens) + finite2(record2.cacheReadInputTokens) + finite2(record2.cacheRead) + finite2(record2.cacheReadTokens);
|
|
1153
|
+
const cacheWrite = finite2(record2.cache_creation_input_tokens) + finite2(record2.cacheCreationInputTokens) + finite2(record2.cacheWrite) + finite2(record2.cacheWriteTokens);
|
|
1154
|
+
const totalTokens = input + output + cacheRead + cacheWrite;
|
|
1155
|
+
const total = finite2(totalCostUsd) + finite2(record2.costUSD) + finite2(record2.cost_usd);
|
|
1156
|
+
return {
|
|
1157
|
+
input,
|
|
1158
|
+
output,
|
|
1159
|
+
cacheRead,
|
|
1160
|
+
cacheWrite,
|
|
1161
|
+
totalTokens,
|
|
1162
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total }
|
|
1163
|
+
};
|
|
1164
|
+
}
|
|
1165
|
+
function nestedRecord(record2, key) {
|
|
1166
|
+
const value = record2[key];
|
|
1167
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) ? value : null;
|
|
1168
|
+
}
|
|
1169
|
+
function extractContentText(content) {
|
|
1170
|
+
if (!Array.isArray(content)) return "";
|
|
1171
|
+
let out = "";
|
|
1172
|
+
for (const block of content) {
|
|
1173
|
+
if (typeof block !== "object" || block === null) continue;
|
|
1174
|
+
const record2 = block;
|
|
1175
|
+
if (record2.type === "text" && typeof record2.text === "string") out += record2.text;
|
|
1176
|
+
}
|
|
1177
|
+
return out;
|
|
1178
|
+
}
|
|
1179
|
+
function extractDelta(record2) {
|
|
1180
|
+
const delta = nestedRecord(record2, "delta");
|
|
1181
|
+
if (delta && typeof delta.text === "string") return delta.text;
|
|
1182
|
+
if (delta && typeof delta.thinking === "string") return "";
|
|
1183
|
+
const contentBlock = nestedRecord(record2, "content_block");
|
|
1184
|
+
if (contentBlock && contentBlock.type === "text" && typeof contentBlock.text === "string") return contentBlock.text;
|
|
1185
|
+
if (typeof record2.delta === "string") return record2.delta;
|
|
1186
|
+
return "";
|
|
1187
|
+
}
|
|
1188
|
+
function assistantTextFromEvent(record2) {
|
|
1189
|
+
const message = nestedRecord(record2, "message");
|
|
1190
|
+
if (message) return extractContentText(message.content);
|
|
1191
|
+
return extractContentText(record2.content);
|
|
1192
|
+
}
|
|
1193
|
+
function resultText(record2) {
|
|
1194
|
+
if (!record2) return "";
|
|
1195
|
+
return typeof record2.result === "string" ? record2.result : "";
|
|
1196
|
+
}
|
|
1197
|
+
function resultError(record2, stderr) {
|
|
1198
|
+
if (record2) {
|
|
1199
|
+
if (typeof record2.error === "string") return record2.error;
|
|
1200
|
+
if (Array.isArray(record2.errors)) return record2.errors.map(String).join("; ");
|
|
1201
|
+
if (record2.subtype !== void 0 && record2.subtype !== "success") return String(record2.subtype);
|
|
1202
|
+
}
|
|
1203
|
+
return stderr.trim();
|
|
1204
|
+
}
|
|
1205
|
+
function buildAssistantMessage2(input) {
|
|
1206
|
+
const transportError = input.transportError ?? "";
|
|
1207
|
+
const failed = input.exitCode !== 0 || transportError.length > 0;
|
|
1208
|
+
const errorMessage = !failed ? "" : transportError || resultError(input.result, input.stderr);
|
|
1209
|
+
const message = {
|
|
1210
|
+
role: "assistant",
|
|
1211
|
+
content: [{ type: "text", text: input.text }],
|
|
1212
|
+
api: "claude-code-subprocess",
|
|
1213
|
+
provider: "anthropic",
|
|
1214
|
+
model: input.model,
|
|
1215
|
+
usage: normalizeUsage2(input.result?.usage, finite2(input.result?.total_cost_usd)),
|
|
1216
|
+
stopReason: input.aborted ? "aborted" : failed ? "error" : "stop",
|
|
1217
|
+
timestamp: Date.now()
|
|
1218
|
+
};
|
|
1219
|
+
if (typeof input.result?.request_id === "string") message.responseId = input.result.request_id;
|
|
1220
|
+
if (typeof input.result?.model === "string") message.responseModel = input.result.model;
|
|
1221
|
+
if (errorMessage.length > 0) message.errorMessage = boundedExternalDiagnostic(errorMessage);
|
|
1222
|
+
return message;
|
|
1223
|
+
}
|
|
1224
|
+
function emitTextDelta2(emit, state, delta) {
|
|
1225
|
+
if (delta.length === 0) return;
|
|
1226
|
+
state.text += delta;
|
|
1227
|
+
const message = buildAssistantMessage2({
|
|
1228
|
+
model: state.model,
|
|
1229
|
+
text: state.text,
|
|
1230
|
+
result: null,
|
|
1231
|
+
exitCode: 0,
|
|
1232
|
+
aborted: false,
|
|
1233
|
+
stderr: ""
|
|
1234
|
+
});
|
|
1235
|
+
if (!state.started) {
|
|
1236
|
+
state.started = true;
|
|
1237
|
+
emit({ type: "message_start", message });
|
|
1238
|
+
}
|
|
1239
|
+
emit({
|
|
1240
|
+
type: "message_update",
|
|
1241
|
+
message,
|
|
1242
|
+
assistantMessageEvent: {
|
|
1243
|
+
type: "text_delta",
|
|
1244
|
+
contentIndex: 0,
|
|
1245
|
+
delta,
|
|
1246
|
+
partial: message
|
|
1247
|
+
}
|
|
1248
|
+
});
|
|
1249
|
+
}
|
|
1250
|
+
async function readJsonLines(child, emit, state) {
|
|
1251
|
+
for await (const bounded of readBoundedLines(child.stdout, {
|
|
1252
|
+
maxLineBytes: CLAUDE_MAX_STREAM_LINE_BYTES,
|
|
1253
|
+
maxTotalBytes: CLAUDE_MAX_STREAM_BYTES
|
|
1254
|
+
})) {
|
|
1255
|
+
if (bounded.kind === "oversized") {
|
|
1256
|
+
throw new Error(`claude stream-json line exceeded ${CLAUDE_MAX_STREAM_LINE_BYTES} bytes`);
|
|
1257
|
+
}
|
|
1258
|
+
const trimmed = bounded.line.trim();
|
|
1259
|
+
if (trimmed.length === 0) continue;
|
|
1260
|
+
let parsed;
|
|
1261
|
+
try {
|
|
1262
|
+
parsed = JSON.parse(trimmed);
|
|
1263
|
+
} catch {
|
|
1264
|
+
continue;
|
|
1265
|
+
}
|
|
1266
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) continue;
|
|
1267
|
+
const record2 = parsed;
|
|
1268
|
+
if (record2.type === "system" && typeof record2.model === "string") state.model = record2.model;
|
|
1269
|
+
if (record2.type === "result") {
|
|
1270
|
+
state.result = record2;
|
|
1271
|
+
continue;
|
|
1272
|
+
}
|
|
1273
|
+
if (record2.type === "assistant") {
|
|
1274
|
+
const text = assistantTextFromEvent(record2);
|
|
1275
|
+
if (text.length > 0 && text.length >= state.text.length) state.text = text;
|
|
1276
|
+
continue;
|
|
1277
|
+
}
|
|
1278
|
+
emitTextDelta2(emit, state, extractDelta(record2));
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
function startClaudeCodeWorkerRun(input, emit, dependencies = {}) {
|
|
1282
|
+
const sourceEnv = dependencies.environment ?? process.env;
|
|
1283
|
+
const args = buildClaudeCodeArgs(input, sourceEnv);
|
|
1284
|
+
const prompt = buildClaudeCodePrompt(input);
|
|
1285
|
+
const workspaceRoot = dependencies.workspaceRoot ?? process.cwd();
|
|
1286
|
+
const cwd = resolveSafeCwd(input.cwd, workspaceRoot);
|
|
1287
|
+
const child = spawn3(dependencies.binary ?? CLAUDE_BINARY, args, {
|
|
1288
|
+
cwd,
|
|
1289
|
+
env: buildSafeToolEnv({}, sourceEnv),
|
|
1290
|
+
detached: process.platform !== "win32",
|
|
1291
|
+
stdio: ["pipe", "pipe", "pipe"]
|
|
1292
|
+
});
|
|
1293
|
+
const streamState = {
|
|
1294
|
+
started: false,
|
|
1295
|
+
text: "",
|
|
1296
|
+
model: input.wireModelId,
|
|
1297
|
+
result: null
|
|
1298
|
+
};
|
|
1299
|
+
let aborted = false;
|
|
1300
|
+
let settled = false;
|
|
1301
|
+
let transportError = "";
|
|
1302
|
+
const terminator = createProcessTreeTerminator(child, dependencies.killGraceMs ?? 1500);
|
|
1303
|
+
const abort = () => {
|
|
1304
|
+
if (settled) return;
|
|
1305
|
+
aborted = true;
|
|
1306
|
+
terminator.terminate();
|
|
1307
|
+
};
|
|
1308
|
+
const onAbort = () => abort();
|
|
1309
|
+
if (input.signal?.aborted) abort();
|
|
1310
|
+
else input.signal?.addEventListener("abort", onAbort, { once: true });
|
|
1311
|
+
child.once("error", (cause) => {
|
|
1312
|
+
transportError ||= cause.code === "ENOENT" ? "Claude Code CLI (`claude`) is not installed or not on PATH." : cause.message;
|
|
1313
|
+
});
|
|
1314
|
+
child.stdin.on("error", (cause) => {
|
|
1315
|
+
if (!aborted) transportError ||= `could not send prompt to Claude Code CLI: ${cause.message}`;
|
|
1316
|
+
});
|
|
1317
|
+
child.stdin.end(prompt);
|
|
1318
|
+
const promise = (async () => {
|
|
1319
|
+
emit({ type: "agent_start" });
|
|
1320
|
+
try {
|
|
1321
|
+
const stderrPromise = readStderr(child);
|
|
1322
|
+
const stdoutPromise = readJsonLines(child, emit, streamState).catch((cause) => {
|
|
1323
|
+
transportError ||= cause instanceof Error ? cause.message : String(cause);
|
|
1324
|
+
terminator.terminate();
|
|
1325
|
+
});
|
|
1326
|
+
const exitCode = await waitForClose(child);
|
|
1327
|
+
await stdoutPromise;
|
|
1328
|
+
const stderr = await stderrPromise.catch(() => "");
|
|
1329
|
+
const finalText = streamState.text || resultText(streamState.result) || (exitCode === 0 ? "" : resultError(streamState.result, stderr));
|
|
1330
|
+
const finalMessage = buildAssistantMessage2({
|
|
1331
|
+
model: streamState.model,
|
|
1332
|
+
text: finalText,
|
|
1333
|
+
result: streamState.result,
|
|
1334
|
+
exitCode,
|
|
1335
|
+
aborted,
|
|
1336
|
+
stderr,
|
|
1337
|
+
transportError
|
|
1338
|
+
});
|
|
1339
|
+
if (!streamState.started) emit({ type: "message_start", message: finalMessage });
|
|
1340
|
+
emit({ type: "message_end", message: finalMessage });
|
|
1341
|
+
const messages = [finalMessage];
|
|
1342
|
+
emit({ type: "agent_end", messages });
|
|
1343
|
+
if (finalMessage.stopReason === "error" && finalMessage.errorMessage && !aborted) {
|
|
1344
|
+
process.stderr.write(`[worker:claude-code] ${finalMessage.errorMessage}
|
|
1345
|
+
`);
|
|
1346
|
+
}
|
|
1347
|
+
return { messages, exitCode: finalMessage.stopReason === "stop" ? 0 : 1 };
|
|
1348
|
+
} finally {
|
|
1349
|
+
settled = true;
|
|
1350
|
+
terminator.cleanup();
|
|
1351
|
+
input.signal?.removeEventListener("abort", onAbort);
|
|
1352
|
+
}
|
|
1353
|
+
})();
|
|
1354
|
+
return { promise, abort };
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
// src/domains/agents/result-contract-filesystem.ts
|
|
1358
|
+
init_esm_shims();
|
|
1359
|
+
import { existsSync, readFileSync, statSync } from "node:fs";
|
|
1360
|
+
function nodeResultContractFilesystem() {
|
|
1361
|
+
return {
|
|
1362
|
+
readFile(filePath) {
|
|
1363
|
+
try {
|
|
1364
|
+
return readFileSync(filePath, "utf8");
|
|
1365
|
+
} catch {
|
|
1366
|
+
return null;
|
|
1367
|
+
}
|
|
1368
|
+
},
|
|
1369
|
+
pathExists(filePath) {
|
|
1370
|
+
return existsSync(filePath);
|
|
1371
|
+
},
|
|
1372
|
+
isDirectory(filePath) {
|
|
1373
|
+
return statSync(filePath, { throwIfNoEntry: false })?.isDirectory() === true;
|
|
1374
|
+
}
|
|
1375
|
+
};
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
// src/domains/safety/run-effects.ts
|
|
1379
|
+
init_esm_shims();
|
|
1380
|
+
import path from "node:path";
|
|
1381
|
+
var ENUMERABLE_ACTION_CLASSES = /* @__PURE__ */ new Set(["read", "write"]);
|
|
1382
|
+
function toolWritesOpaquely(toolName) {
|
|
1383
|
+
return !ENUMERABLE_ACTION_CLASSES.has(classify({ tool: toolName }).actionClass);
|
|
1384
|
+
}
|
|
1385
|
+
var GIT_PATH_MUTATIONS = /* @__PURE__ */ new Set(["mv", "rm"]);
|
|
1386
|
+
function gitPathOperands(command) {
|
|
1387
|
+
const targets = [];
|
|
1388
|
+
for (const segment of commandArgumentSegments(command)) {
|
|
1389
|
+
if (segment[0] !== "git") continue;
|
|
1390
|
+
const subcommand = segment[1];
|
|
1391
|
+
if (subcommand === void 0 || !GIT_PATH_MUTATIONS.has(subcommand)) continue;
|
|
1392
|
+
for (const token of segment.slice(2)) {
|
|
1393
|
+
if (token.startsWith("-")) continue;
|
|
1394
|
+
targets.push(token);
|
|
1395
|
+
}
|
|
1396
|
+
}
|
|
1397
|
+
return targets;
|
|
1398
|
+
}
|
|
1399
|
+
function commandOf(args) {
|
|
1400
|
+
const command = args?.command;
|
|
1401
|
+
return typeof command === "string" && command.length > 0 ? command : null;
|
|
1402
|
+
}
|
|
1403
|
+
function mutationTargets(toolName, args) {
|
|
1404
|
+
if (toolName !== ToolNames.Bash) return toolMutationPaths(toolName, args);
|
|
1405
|
+
const command = commandOf(args);
|
|
1406
|
+
if (command === null) return [];
|
|
1407
|
+
return [...extractCommandWriteTargets(command), ...extractCommandDeleteTargets(command), ...gitPathOperands(command)];
|
|
1408
|
+
}
|
|
1409
|
+
function validationCommandOf(toolName, args, scope) {
|
|
1410
|
+
if (toolName === ToolNames.Bash) {
|
|
1411
|
+
const command = commandOf(args);
|
|
1412
|
+
if (command === null) return null;
|
|
1413
|
+
const detected = detectValidationCommand(command, scope);
|
|
1414
|
+
return detected.kind === "validation" ? detected.matched : null;
|
|
1415
|
+
}
|
|
1416
|
+
return typedValidationSummary(toolName, { args: args ?? {} });
|
|
1417
|
+
}
|
|
1418
|
+
function createRunEffectsRecorder(cwd, options = {}) {
|
|
1419
|
+
const pending = /* @__PURE__ */ new Map();
|
|
1420
|
+
const mutatedPaths = /* @__PURE__ */ new Set();
|
|
1421
|
+
const failedMutationPaths = /* @__PURE__ */ new Set();
|
|
1422
|
+
const validationCommands = /* @__PURE__ */ new Set();
|
|
1423
|
+
const verificationCommands = /* @__PURE__ */ new Set();
|
|
1424
|
+
const writeRecordDowngrades = /* @__PURE__ */ new Map();
|
|
1425
|
+
return {
|
|
1426
|
+
start(toolCallId, toolName, args) {
|
|
1427
|
+
const paths = mutationTargets(toolName, args);
|
|
1428
|
+
const validationCommand = validationCommandOf(toolName, args, "finish-contract");
|
|
1429
|
+
const verificationCommand = validationCommandOf(toolName, args, "grounding");
|
|
1430
|
+
const opaque = toolWritesOpaquely(toolName);
|
|
1431
|
+
if (!opaque && paths.length === 0 && validationCommand === null && verificationCommand === null) return;
|
|
1432
|
+
const base = typeof args?.cwd === "string" && args.cwd.length > 0 ? path.resolve(cwd, args.cwd) : cwd;
|
|
1433
|
+
pending.set(toolCallId, {
|
|
1434
|
+
tool: toolName,
|
|
1435
|
+
toolCallId,
|
|
1436
|
+
paths: paths.map((target) => path.resolve(base, target)),
|
|
1437
|
+
validationCommand,
|
|
1438
|
+
verificationCommand,
|
|
1439
|
+
opaque
|
|
1440
|
+
});
|
|
1441
|
+
},
|
|
1442
|
+
finish(toolCallId, failed) {
|
|
1443
|
+
const effects = pending.get(toolCallId);
|
|
1444
|
+
pending.delete(toolCallId);
|
|
1445
|
+
if (effects === void 0) return;
|
|
1446
|
+
if (failed) {
|
|
1447
|
+
for (const target of effects.paths) failedMutationPaths.add(target);
|
|
1448
|
+
return;
|
|
1449
|
+
}
|
|
1450
|
+
if (effects.opaque) {
|
|
1451
|
+
const downgrade = {
|
|
1452
|
+
reason: "opaque_tool_succeeded",
|
|
1453
|
+
tool: effects.tool,
|
|
1454
|
+
toolCallId: effects.toolCallId
|
|
1455
|
+
};
|
|
1456
|
+
const recordWasComplete = writeRecordDowngrades.size === 0;
|
|
1457
|
+
writeRecordDowngrades.set(effects.toolCallId, downgrade);
|
|
1458
|
+
if (recordWasComplete) options.onWriteRecordDowngraded?.({ ...downgrade });
|
|
1459
|
+
}
|
|
1460
|
+
for (const target of effects.paths) mutatedPaths.add(target);
|
|
1461
|
+
if (effects.validationCommand !== null) validationCommands.add(effects.validationCommand);
|
|
1462
|
+
if (effects.verificationCommand !== null) verificationCommands.add(effects.verificationCommand);
|
|
1463
|
+
},
|
|
1464
|
+
snapshot() {
|
|
1465
|
+
return {
|
|
1466
|
+
mutatedPaths: new Set(mutatedPaths),
|
|
1467
|
+
failedMutationPaths: new Set([...failedMutationPaths].filter((target) => !mutatedPaths.has(target))),
|
|
1468
|
+
validationCommands: new Set(validationCommands),
|
|
1469
|
+
verificationCommands: new Set(verificationCommands),
|
|
1470
|
+
writeRecordComplete: writeRecordDowngrades.size === 0,
|
|
1471
|
+
writeRecordDowngrades: [...writeRecordDowngrades.values()].map((entry) => ({ ...entry }))
|
|
1472
|
+
};
|
|
1473
|
+
}
|
|
1474
|
+
};
|
|
1475
|
+
}
|
|
1476
|
+
|
|
1477
|
+
// src/engine/claude/tool-safety.ts
|
|
1478
|
+
init_esm_shims();
|
|
1479
|
+
import nodePath from "node:path";
|
|
1480
|
+
import { performance } from "node:perf_hooks";
|
|
1481
|
+
function isRecord(value) {
|
|
1482
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1483
|
+
}
|
|
1484
|
+
function stringField(record2, ...keys) {
|
|
1485
|
+
for (const key of keys) {
|
|
1486
|
+
const value = record2[key];
|
|
1487
|
+
if (typeof value === "string" && value.trim().length > 0) return value.trim();
|
|
1488
|
+
}
|
|
1489
|
+
return void 0;
|
|
1490
|
+
}
|
|
1491
|
+
function pathArgs(input) {
|
|
1492
|
+
const path2 = stringField(input, "file_path", "filePath", "path", "notebook_path", "source", "target");
|
|
1493
|
+
return path2 ? { ...input, path: path2 } : { ...input };
|
|
1494
|
+
}
|
|
1495
|
+
function searchArgs(input, globKey) {
|
|
1496
|
+
const base = stringField(input, "path", "file_path", "filePath");
|
|
1497
|
+
const glob = globKey === null ? void 0 : stringField(input, globKey);
|
|
1498
|
+
if (glob !== void 0 && (nodePath.isAbsolute(glob) || glob.split("/").includes(".."))) {
|
|
1499
|
+
const literal = glob.split("/");
|
|
1500
|
+
const firstMagic = literal.findIndex((segment) => /[*?[\]{}]/u.test(segment));
|
|
1501
|
+
const prefix = (firstMagic === -1 ? literal.slice(0, -1) : literal.slice(0, firstMagic)).join("/") || "/";
|
|
1502
|
+
return { ...input, path: base === void 0 || nodePath.isAbsolute(prefix) ? prefix : nodePath.join(base, prefix) };
|
|
1503
|
+
}
|
|
1504
|
+
return base === void 0 ? { ...input } : { ...input, path: base };
|
|
1505
|
+
}
|
|
1506
|
+
function commandArgs(input, cwd) {
|
|
1507
|
+
const command = stringField(input, "command", "cmd", "shell", "input", "description") ?? JSON.stringify(input);
|
|
1508
|
+
return { ...input, command, cwd: stringField(input, "cwd") ?? cwd };
|
|
1509
|
+
}
|
|
1510
|
+
function dynamicToolName(name) {
|
|
1511
|
+
return name.trim().length > 0 ? `claude:${name}` : "claude:unknown";
|
|
1512
|
+
}
|
|
1513
|
+
var CLAUDE_TOOL_TO_CLIO = {
|
|
1514
|
+
Bash: ToolNames.Bash,
|
|
1515
|
+
Read: ToolNames.Read,
|
|
1516
|
+
NotebookRead: ToolNames.Read,
|
|
1517
|
+
Edit: ToolNames.Edit,
|
|
1518
|
+
MultiEdit: ToolNames.Edit,
|
|
1519
|
+
Write: ToolNames.Write,
|
|
1520
|
+
Grep: ToolNames.Grep,
|
|
1521
|
+
Glob: ToolNames.Find,
|
|
1522
|
+
LS: ToolNames.Ls,
|
|
1523
|
+
Ls: ToolNames.Ls,
|
|
1524
|
+
WebFetch: ToolNames.WebFetch,
|
|
1525
|
+
WebSearch: ToolNames.WebFetch,
|
|
1526
|
+
Task: ToolNames.Dispatch,
|
|
1527
|
+
// TodoWrite mediates as the tasks tool: both are session-scoped plan
|
|
1528
|
+
// bookkeeping that never mutates the workspace, so it classifies read and
|
|
1529
|
+
// is narrowed away exactly when the profile lacks tasks.
|
|
1530
|
+
TodoWrite: ToolNames.Tasks
|
|
1531
|
+
};
|
|
1532
|
+
var CLAUDE_CANONICAL_TOOLS = new Set(Object.values(CLAUDE_TOOL_TO_CLIO));
|
|
1533
|
+
function isClaudeCanonicalTool(name) {
|
|
1534
|
+
return CLAUDE_CANONICAL_TOOLS.has(name);
|
|
1535
|
+
}
|
|
1536
|
+
function claudeToolsOutsideProfile(allowedTools) {
|
|
1537
|
+
return Object.entries(CLAUDE_TOOL_TO_CLIO).filter(([, clioName]) => !allowedTools.has(clioName)).map(([claudeName]) => claudeName);
|
|
1538
|
+
}
|
|
1539
|
+
function mapClaudeToolCall(toolName, input, cwd) {
|
|
1540
|
+
switch (toolName) {
|
|
1541
|
+
case "Bash":
|
|
1542
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.Bash, args: commandArgs(input, cwd), known: true };
|
|
1543
|
+
case "Read":
|
|
1544
|
+
case "NotebookRead":
|
|
1545
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.Read, args: pathArgs(input), known: true };
|
|
1546
|
+
case "Edit":
|
|
1547
|
+
case "MultiEdit":
|
|
1548
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.Edit, args: pathArgs(input), known: true };
|
|
1549
|
+
case "Write":
|
|
1550
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.Write, args: pathArgs(input), known: true };
|
|
1551
|
+
case "Grep":
|
|
1552
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.Grep, args: searchArgs(input, "glob"), known: true };
|
|
1553
|
+
case "Glob":
|
|
1554
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.Find, args: searchArgs(input, "pattern"), known: true };
|
|
1555
|
+
case "LS":
|
|
1556
|
+
case "Ls":
|
|
1557
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.Ls, args: searchArgs(input, null), known: true };
|
|
1558
|
+
case "WebFetch":
|
|
1559
|
+
case "WebSearch":
|
|
1560
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.WebFetch, args: { ...input }, known: true };
|
|
1561
|
+
case "Task":
|
|
1562
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.Dispatch, args: { ...input }, known: true };
|
|
1563
|
+
case "TodoWrite":
|
|
1564
|
+
return { claudeToolName: toolName, clioToolName: ToolNames.Tasks, args: { ...input }, known: true };
|
|
1565
|
+
default:
|
|
1566
|
+
return { claudeToolName: toolName, clioToolName: dynamicToolName(toolName), args: { ...input }, known: false };
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
1569
|
+
function readsOutsideWorkspace(decision) {
|
|
1570
|
+
return decision.policy?.readScope === "outside-workspace";
|
|
1571
|
+
}
|
|
1572
|
+
function toAutonomyBlock(decision, level, call) {
|
|
1573
|
+
const actionClass = decision.classification.actionClass;
|
|
1574
|
+
return {
|
|
1575
|
+
kind: "block",
|
|
1576
|
+
classification: decision.classification,
|
|
1577
|
+
rejection: autonomyDenyRejection(level, call.tool, actionClass, readsOutsideWorkspace(decision)),
|
|
1578
|
+
...decision.policy !== void 0 ? { policy: decision.policy } : {}
|
|
1579
|
+
};
|
|
1580
|
+
}
|
|
1581
|
+
function toAutonomyAsk(decision, level, call) {
|
|
1582
|
+
const actionClass = decision.classification.actionClass;
|
|
1583
|
+
return {
|
|
1584
|
+
kind: "ask",
|
|
1585
|
+
classification: decision.classification,
|
|
1586
|
+
rejection: autonomyAskRejection(level, call.tool, actionClass, void 0, readsOutsideWorkspace(decision)),
|
|
1587
|
+
...decision.policy !== void 0 ? { policy: decision.policy } : {}
|
|
1588
|
+
};
|
|
1589
|
+
}
|
|
1590
|
+
function rejectionText(decision) {
|
|
1591
|
+
if (decision.kind === "allow") return decision.policy?.reasonCode ?? "allowed";
|
|
1592
|
+
return decision.rejection.short;
|
|
1593
|
+
}
|
|
1594
|
+
function budgetDenial(input, mapped, call, reason) {
|
|
1595
|
+
const classification = input.safety.classify(call);
|
|
1596
|
+
const rejection = { short: reason, detail: reason, hints: [] };
|
|
1597
|
+
const blocked = { kind: "block", classification, rejection };
|
|
1598
|
+
input.safety.audit.recordToolCall?.({
|
|
1599
|
+
tool: mapped.clioToolName,
|
|
1600
|
+
classification,
|
|
1601
|
+
decision: "denied",
|
|
1602
|
+
args: mapped.args,
|
|
1603
|
+
reasons: [reason],
|
|
1604
|
+
reasonCode: "worker-budget"
|
|
1605
|
+
});
|
|
1606
|
+
return {
|
|
1607
|
+
kind: "deny",
|
|
1608
|
+
mapped,
|
|
1609
|
+
decision: blocked,
|
|
1610
|
+
reason,
|
|
1611
|
+
reasonCode: "worker-budget",
|
|
1612
|
+
permissionRequired: false
|
|
1613
|
+
};
|
|
1614
|
+
}
|
|
1615
|
+
function evaluateClaudeToolPermission(input) {
|
|
1616
|
+
const mapped = mapClaudeToolCall(input.toolName, input.input, input.cwd);
|
|
1617
|
+
const call = { tool: mapped.clioToolName, args: mapped.args };
|
|
1618
|
+
const attempt = input.budgetGate?.attempt(mapped.clioToolName);
|
|
1619
|
+
if (attempt?.kind === "deny") return budgetDenial(input, mapped, call, attempt.reason);
|
|
1620
|
+
if (input.allowedTools !== void 0 && mapped.known && !input.allowedTools.has(mapped.clioToolName)) {
|
|
1621
|
+
const classification = input.safety.classify(call);
|
|
1622
|
+
const rejection = {
|
|
1623
|
+
short: `${mapped.clioToolName} is not in this worker's tool profile`,
|
|
1624
|
+
detail: `Tool '${mapped.clioToolName}' is outside the dispatched worker's admitted tool surface, so the request is denied. Use only the tools granted to this run.`,
|
|
1625
|
+
hints: []
|
|
1626
|
+
};
|
|
1627
|
+
const blocked = { kind: "block", classification, rejection };
|
|
1628
|
+
input.safety.audit.recordToolCall?.({
|
|
1629
|
+
tool: mapped.clioToolName,
|
|
1630
|
+
classification,
|
|
1631
|
+
decision: "denied",
|
|
1632
|
+
args: mapped.args,
|
|
1633
|
+
reasons: [rejection.detail],
|
|
1634
|
+
reasonCode: "tool-profile"
|
|
1635
|
+
});
|
|
1636
|
+
return {
|
|
1637
|
+
kind: "deny",
|
|
1638
|
+
mapped,
|
|
1639
|
+
decision: blocked,
|
|
1640
|
+
reason: rejection.short,
|
|
1641
|
+
reasonCode: "tool-profile",
|
|
1642
|
+
permissionRequired: false
|
|
1643
|
+
};
|
|
1644
|
+
}
|
|
1645
|
+
const decision = input.safety.evaluate(call);
|
|
1646
|
+
const level = input.autonomy ?? DEFAULT_AUTONOMY_LEVEL;
|
|
1647
|
+
if (decision.kind === "block") {
|
|
1648
|
+
return { kind: "deny", mapped, decision, reason: rejectionText(decision), permissionRequired: false };
|
|
1649
|
+
}
|
|
1650
|
+
if (decision.kind === "ask") {
|
|
1651
|
+
if (level === "read-only") {
|
|
1652
|
+
const blocked = toAutonomyBlock(decision, level, call);
|
|
1653
|
+
return {
|
|
1654
|
+
kind: "deny",
|
|
1655
|
+
mapped,
|
|
1656
|
+
decision: blocked,
|
|
1657
|
+
reason: rejectionText(blocked),
|
|
1658
|
+
reasonCode: `autonomy:${level}`,
|
|
1659
|
+
permissionRequired: false
|
|
1660
|
+
};
|
|
1661
|
+
}
|
|
1662
|
+
return { kind: "deny", mapped, decision, reason: rejectionText(decision), permissionRequired: true };
|
|
1663
|
+
}
|
|
1664
|
+
const actionClass = decision.classification.actionClass;
|
|
1665
|
+
const disposition = mapAutonomy(level, actionClass, {
|
|
1666
|
+
executeRecognized: decision.policy?.execRecognition !== "unrecognized",
|
|
1667
|
+
...readsOutsideWorkspace(decision) ? { readOutsideWorkspace: true } : {}
|
|
1668
|
+
});
|
|
1669
|
+
if (disposition === "allow") {
|
|
1670
|
+
const admission = input.budgetGate?.admit(mapped.clioToolName);
|
|
1671
|
+
if (admission?.kind === "deny") return budgetDenial(input, mapped, call, admission.reason);
|
|
1672
|
+
return { kind: "allow", mapped, decision, reason: decision.policy?.reasonCode ?? "allowed" };
|
|
1673
|
+
}
|
|
1674
|
+
if (disposition === "deny") {
|
|
1675
|
+
const blocked = toAutonomyBlock(decision, level, call);
|
|
1676
|
+
return {
|
|
1677
|
+
kind: "deny",
|
|
1678
|
+
mapped,
|
|
1679
|
+
decision: blocked,
|
|
1680
|
+
reason: rejectionText(blocked),
|
|
1681
|
+
reasonCode: `autonomy:${level}`,
|
|
1682
|
+
permissionRequired: false
|
|
1683
|
+
};
|
|
1684
|
+
}
|
|
1685
|
+
const ask = toAutonomyAsk(decision, level, call);
|
|
1686
|
+
return {
|
|
1687
|
+
kind: "deny",
|
|
1688
|
+
mapped,
|
|
1689
|
+
decision: ask,
|
|
1690
|
+
reason: rejectionText(ask),
|
|
1691
|
+
reasonCode: `autonomy:${level}`,
|
|
1692
|
+
permissionRequired: true
|
|
1693
|
+
};
|
|
1694
|
+
}
|
|
1695
|
+
function finishDecision(decision) {
|
|
1696
|
+
if (decision.kind === "allow") return "allowed";
|
|
1697
|
+
if (decision.kind === "ask") return "permission_requested";
|
|
1698
|
+
return "blocked";
|
|
1699
|
+
}
|
|
1700
|
+
function emitToolFinish(emit, mapped, startedAtClock, decision, outcome, reason, reasonCode, toolCallId) {
|
|
1701
|
+
const event = {
|
|
1702
|
+
tool: mapped.clioToolName,
|
|
1703
|
+
...toolCallId !== void 0 ? { toolCallId } : {},
|
|
1704
|
+
posture: "operating",
|
|
1705
|
+
durationMs: Math.round(performance.now() - startedAtClock),
|
|
1706
|
+
outcome,
|
|
1707
|
+
actionClass: decision.classification.actionClass,
|
|
1708
|
+
decision: finishDecision(decision)
|
|
1709
|
+
};
|
|
1710
|
+
if (reason.length > 0 && outcome !== "ok") event.reason = reason;
|
|
1711
|
+
if (decision.policy?.ruleId !== void 0) event.ruleId = decision.policy.ruleId;
|
|
1712
|
+
const finalReasonCode = reasonCode ?? decision.policy?.reasonCode;
|
|
1713
|
+
if (finalReasonCode !== void 0) event.reasonCode = finalReasonCode;
|
|
1714
|
+
if (decision.policy?.policySource !== void 0) event.policySource = decision.policy.policySource;
|
|
1715
|
+
emit({ type: "clio_coder_tool_finish", payload: event });
|
|
1716
|
+
}
|
|
1717
|
+
function emitClaudeToolPermissionDecision(input) {
|
|
1718
|
+
const startedAt = Date.now();
|
|
1719
|
+
const startedAtClock = performance.now();
|
|
1720
|
+
const decision = evaluateClaudeToolPermission(input);
|
|
1721
|
+
const toolCallId = input.toolCallId?.trim() ? input.toolCallId : void 0;
|
|
1722
|
+
const action = describeCallAction(decision.mapped.clioToolName, decision.mapped.args);
|
|
1723
|
+
const start = {
|
|
1724
|
+
tool: decision.mapped.clioToolName,
|
|
1725
|
+
...toolCallId !== void 0 ? { toolCallId } : {},
|
|
1726
|
+
posture: "operating",
|
|
1727
|
+
startedAt,
|
|
1728
|
+
...action !== null ? { action } : {}
|
|
1729
|
+
};
|
|
1730
|
+
input.emit({ type: "clio_coder_tool_start", payload: start });
|
|
1731
|
+
if (decision.kind === "allow") {
|
|
1732
|
+
emitToolFinish(
|
|
1733
|
+
input.emit,
|
|
1734
|
+
decision.mapped,
|
|
1735
|
+
startedAtClock,
|
|
1736
|
+
decision.decision,
|
|
1737
|
+
"ok",
|
|
1738
|
+
decision.reason,
|
|
1739
|
+
decision.reasonCode,
|
|
1740
|
+
toolCallId
|
|
1741
|
+
);
|
|
1742
|
+
return decision;
|
|
1743
|
+
}
|
|
1744
|
+
if (decision.permissionRequired) {
|
|
1745
|
+
const mode = input.onPermission ?? "deny";
|
|
1746
|
+
input.emit({
|
|
1747
|
+
type: "clio_coder_permission_resolved",
|
|
1748
|
+
payload: {
|
|
1749
|
+
tool: decision.mapped.clioToolName,
|
|
1750
|
+
actionClass: decision.decision.classification.actionClass,
|
|
1751
|
+
mode,
|
|
1752
|
+
reason: mode === "fail" ? `permission required for ${decision.mapped.clioToolName}; workers.onPermission=fail ends this run` : `permission denied by policy: Claude SDK workers run non-interactively; ${decision.reason}`
|
|
1753
|
+
}
|
|
1754
|
+
});
|
|
1755
|
+
}
|
|
1756
|
+
emitToolFinish(
|
|
1757
|
+
input.emit,
|
|
1758
|
+
decision.mapped,
|
|
1759
|
+
startedAtClock,
|
|
1760
|
+
decision.decision,
|
|
1761
|
+
"blocked",
|
|
1762
|
+
decision.reason,
|
|
1763
|
+
decision.reasonCode,
|
|
1764
|
+
toolCallId
|
|
1765
|
+
);
|
|
1766
|
+
return decision;
|
|
1767
|
+
}
|
|
1768
|
+
function coerceToolInput(value) {
|
|
1769
|
+
return isRecord(value) ? value : {};
|
|
1770
|
+
}
|
|
1771
|
+
|
|
1772
|
+
export {
|
|
1773
|
+
captureWorkerContext,
|
|
1774
|
+
antigravitySubprocessConfigForAutonomy,
|
|
1775
|
+
startAntigravityWorkerRun,
|
|
1776
|
+
isClaudeCodeSessionId,
|
|
1777
|
+
claudeSubprocessPermissionConfigForAutonomy,
|
|
1778
|
+
startClaudeCodeWorkerRun,
|
|
1779
|
+
isClaudeCanonicalTool,
|
|
1780
|
+
claudeToolsOutsideProfile,
|
|
1781
|
+
emitClaudeToolPermissionDecision,
|
|
1782
|
+
coerceToolInput,
|
|
1783
|
+
WORKER_SPEC_VERSION,
|
|
1784
|
+
WORKER_PROTECTED_ARTIFACT_STATE_VERSION,
|
|
1785
|
+
WORKER_EXIT_PERMISSION_REQUIRED,
|
|
1786
|
+
DEFAULT_ESCALATION_TIMEOUT_MS,
|
|
1787
|
+
DEFAULT_ESCALATION_FALLBACK,
|
|
1788
|
+
serializeWorkerRuntimeDescriptor,
|
|
1789
|
+
parseWorkerSpec,
|
|
1790
|
+
validateRehydratedWorkerRuntime,
|
|
1791
|
+
nodeResultContractFilesystem,
|
|
1792
|
+
createRunEffectsRecorder
|
|
1793
|
+
};
|
|
1794
|
+
//# sourceMappingURL=chunk-R7FGRZNF.js.map
|