theokit 0.48.14 → 0.50.1
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/README.md +1 -0
- package/dist/{actions-virtual-module-YZRZMHAX.js → actions-virtual-module-DSIVNGK7.js} +14 -8
- package/dist/{actions-virtual-module-YZRZMHAX.js.map → actions-virtual-module-DSIVNGK7.js.map} +1 -1
- package/dist/{actions-virtual-module-E4PISKMB.js → actions-virtual-module-RXL2RJTW.js} +23 -12
- package/dist/actions-virtual-module-RXL2RJTW.js.map +1 -0
- package/dist/adapters/agent-mount.d.ts +127 -0
- package/dist/adapters/agent-mount.js +25 -0
- package/dist/adapters/security-headers.d.ts +132 -0
- package/dist/adapters/security-headers.js +64 -0
- package/dist/adapters/security-headers.js.map +1 -0
- package/dist/adapters/web-shim.d.ts +100 -13
- package/dist/adapters/web-shim.js +158 -54
- package/dist/adapters/web-shim.js.map +1 -1
- package/dist/agent-7IPEVCAY.js +15 -0
- package/dist/agent-scan-BZa-pagG.d.ts +16 -0
- package/dist/{app-typed-client-I4X2UJWW.js → app-typed-client-UTBMJZOE.js} +15 -9
- package/dist/app-typed-client-UTBMJZOE.js.map +1 -0
- package/dist/{app-typed-client-HLP26EYM.js → app-typed-client-XGDZKH73.js} +24 -13
- package/dist/app-typed-client-XGDZKH73.js.map +1 -0
- package/dist/aws-lambda-VKMYUMP2.js +261 -0
- package/dist/aws-lambda-VKMYUMP2.js.map +1 -0
- package/dist/{body-parser-web-4Z2QTPDU.js → body-parser-web-ON5CUTEL.js} +5 -2
- package/dist/body-parser-web-ON5CUTEL.js.map +1 -0
- package/dist/{body-parser-web-TIOTXPDW.js → body-parser-web-RV2SSAI3.js} +5 -2
- package/dist/body-parser-web-RV2SSAI3.js.map +1 -0
- package/dist/{build-F2Q5QTSC.js → build-VZODSYIQ.js} +72 -26
- package/dist/build-VZODSYIQ.js.map +1 -0
- package/dist/{bun-A5B2MJMO.js → bun-L7PP6ID5.js} +105 -13
- package/dist/bun-L7PP6ID5.js.map +1 -0
- package/dist/{check-45NKUVSQ.js → check-GIPZBFTX.js} +2 -2
- package/dist/{chunk-WYHYOYRH.js → chunk-2COPDKIG.js} +468 -203
- package/dist/chunk-2COPDKIG.js.map +1 -0
- package/dist/chunk-3PBAN2YE.js +146 -0
- package/dist/chunk-3PBAN2YE.js.map +1 -0
- package/dist/{chunk-HBU2GIMZ.js → chunk-3QPVEJ7D.js} +15 -9
- package/dist/chunk-3QPVEJ7D.js.map +1 -0
- package/dist/{chunk-IEES3CHD.js → chunk-47MM2JUK.js} +8 -2
- package/dist/chunk-47MM2JUK.js.map +1 -0
- package/dist/chunk-4X6H2BXP.js +108 -0
- package/dist/chunk-4X6H2BXP.js.map +1 -0
- package/dist/{chunk-A7JBF5FO.js → chunk-5K4TDLRG.js} +8 -5
- package/dist/chunk-5K4TDLRG.js.map +1 -0
- package/dist/chunk-5YPXXSYY.js +181 -0
- package/dist/chunk-5YPXXSYY.js.map +1 -0
- package/dist/{chunk-YGAXV5HR.js → chunk-6J4JWHDJ.js} +191 -112
- package/dist/chunk-6J4JWHDJ.js.map +1 -0
- package/dist/{chunk-FTFN4MYN.js → chunk-7AEBH52I.js} +639 -516
- package/dist/chunk-7AEBH52I.js.map +1 -0
- package/dist/chunk-7UZZHCRN.js +21 -0
- package/dist/chunk-7UZZHCRN.js.map +1 -0
- package/dist/{chunk-MTEWLGVY.js → chunk-BPYMC7SU.js} +4 -48
- package/dist/chunk-BPYMC7SU.js.map +1 -0
- package/dist/chunk-BU6RJPPJ.js +421 -0
- package/dist/chunk-BU6RJPPJ.js.map +1 -0
- package/dist/{chunk-FB2HBNIC.js → chunk-BX6EUYHU.js} +6 -2
- package/dist/chunk-BX6EUYHU.js.map +1 -0
- package/dist/chunk-CHTAWXC2.js +18 -0
- package/dist/chunk-CHTAWXC2.js.map +1 -0
- package/dist/chunk-D4VP2QPR.js +16 -0
- package/dist/chunk-D4VP2QPR.js.map +1 -0
- package/dist/{chunk-YXG2SGQ3.js → chunk-DHAD2O3S.js} +6 -6
- package/dist/chunk-DHAD2O3S.js.map +1 -0
- package/dist/chunk-DOI4G4X3.js +428 -0
- package/dist/chunk-DOI4G4X3.js.map +1 -0
- package/dist/chunk-E43VJ3E5.js +188 -0
- package/dist/chunk-E43VJ3E5.js.map +1 -0
- package/dist/{chunk-47CINLWF.js → chunk-EDWEYQRG.js} +2 -2
- package/dist/chunk-EVZKNA2W.js +110 -0
- package/dist/chunk-EVZKNA2W.js.map +1 -0
- package/dist/chunk-FD4ZDTQ6.js +181 -0
- package/dist/chunk-FD4ZDTQ6.js.map +1 -0
- package/dist/chunk-FDOOBTXJ.js +17 -0
- package/dist/chunk-FDOOBTXJ.js.map +1 -0
- package/dist/chunk-FH3SQR6P.js +275 -0
- package/dist/chunk-FH3SQR6P.js.map +1 -0
- package/dist/{chunk-T5C46IIU.js → chunk-FMTRNQQ7.js} +28 -269
- package/dist/chunk-FMTRNQQ7.js.map +1 -0
- package/dist/chunk-H53KNS6Q.js +513 -0
- package/dist/chunk-H53KNS6Q.js.map +1 -0
- package/dist/chunk-HJHGTFEJ.js +23 -0
- package/dist/chunk-HJHGTFEJ.js.map +1 -0
- package/dist/{chunk-LXAESF4Y.js → chunk-HK4AZBKX.js} +7 -4
- package/dist/chunk-HK4AZBKX.js.map +1 -0
- package/dist/chunk-IRQGAC4L.js +52 -0
- package/dist/chunk-IRQGAC4L.js.map +1 -0
- package/dist/{chunk-FNTLKHZ7.js → chunk-JDN5SAAD.js} +7 -4
- package/dist/chunk-JDN5SAAD.js.map +1 -0
- package/dist/{chunk-XALU5LCU.js → chunk-JKF25N73.js} +555 -147
- package/dist/chunk-JKF25N73.js.map +1 -0
- package/dist/{chunk-BHOTGS7N.js → chunk-KI4DOTN4.js} +25 -2
- package/dist/chunk-KI4DOTN4.js.map +1 -0
- package/dist/chunk-KOS567NB.js +790 -0
- package/dist/chunk-KOS567NB.js.map +1 -0
- package/dist/{chunk-OOBYPCZC.js → chunk-KTS6G26H.js} +304 -195
- package/dist/chunk-KTS6G26H.js.map +1 -0
- package/dist/{chunk-ZB7D62OA.js → chunk-KUZVRJ7M.js} +3 -3
- package/dist/chunk-L4VFNFDL.js +248 -0
- package/dist/chunk-L4VFNFDL.js.map +1 -0
- package/dist/chunk-M2WC5MF7.js +127 -0
- package/dist/chunk-M2WC5MF7.js.map +1 -0
- package/dist/chunk-N42ZWWOW.js +273 -0
- package/dist/chunk-N42ZWWOW.js.map +1 -0
- package/dist/chunk-OGLS76RN.js +43 -0
- package/dist/chunk-OGLS76RN.js.map +1 -0
- package/dist/{chunk-7LVM22VG.js → chunk-OQCRCXCP.js} +6 -6
- package/dist/chunk-OQCRCXCP.js.map +1 -0
- package/dist/{chunk-OLGPYOLO.js → chunk-P6OS7652.js} +5 -2
- package/dist/chunk-P6OS7652.js.map +1 -0
- package/dist/{chunk-O3JIAU3V.js → chunk-PF3YM6NY.js} +157 -103
- package/dist/chunk-PF3YM6NY.js.map +1 -0
- package/dist/{chunk-NTWNO24W.js → chunk-PLUHPNGA.js} +266 -110
- package/dist/chunk-PLUHPNGA.js.map +1 -0
- package/dist/chunk-Q5L5EGWZ.js +26 -0
- package/dist/chunk-Q5L5EGWZ.js.map +1 -0
- package/dist/{chunk-AATSV4UV.js → chunk-QTHVHNJJ.js} +6 -36
- package/dist/chunk-QTHVHNJJ.js.map +1 -0
- package/dist/{chunk-KD5G3YXI.js → chunk-RARK7JBR.js} +39 -10
- package/dist/chunk-RARK7JBR.js.map +1 -0
- package/dist/chunk-RJJF457I.js +111 -0
- package/dist/chunk-RJJF457I.js.map +1 -0
- package/dist/chunk-RPET332G.js +84 -0
- package/dist/chunk-RPET332G.js.map +1 -0
- package/dist/{chunk-646CA6RV.js → chunk-RQW5YMH7.js} +12 -4
- package/dist/chunk-RQW5YMH7.js.map +1 -0
- package/dist/chunk-U5PWXS3J.js +39 -0
- package/dist/chunk-U5PWXS3J.js.map +1 -0
- package/dist/{chunk-RWNSW4FM.js → chunk-UMNXCU3K.js} +12 -6
- package/dist/{chunk-RWNSW4FM.js.map → chunk-UMNXCU3K.js.map} +1 -1
- package/dist/{chunk-DS5MCU2X.js → chunk-URCXSUI3.js} +9 -9
- package/dist/chunk-VI7ZANB3.js +193 -0
- package/dist/chunk-VI7ZANB3.js.map +1 -0
- package/dist/chunk-VQPHPQ5L.js +14 -0
- package/dist/chunk-VQPHPQ5L.js.map +1 -0
- package/dist/chunk-WNJTJRM6.js +147 -0
- package/dist/chunk-WNJTJRM6.js.map +1 -0
- package/dist/{chunk-BMHS4WAN.js → chunk-XS7EX55U.js} +156 -42
- package/dist/chunk-XS7EX55U.js.map +1 -0
- package/dist/chunk-YN4W7LCX.js +31 -0
- package/dist/chunk-YN4W7LCX.js.map +1 -0
- package/dist/chunk-YSJOZEI6.js +1 -0
- package/dist/{chunk-JA2ZAT5Q.js → chunk-Z4PJMZLM.js} +2 -2
- package/dist/chunk-Z4PJMZLM.js.map +1 -0
- package/dist/{chunk-WSXNGF7X.js → chunk-ZNZISJDZ.js} +6 -2
- package/dist/chunk-ZNZISJDZ.js.map +1 -0
- package/dist/chunk-ZWN3AODA.js +11 -0
- package/dist/chunk-ZWN3AODA.js.map +1 -0
- package/dist/cli/index.js +25 -10
- package/dist/cli/index.js.map +1 -1
- package/dist/client/core.d.ts +1 -1
- package/dist/client/core.js +2 -0
- package/dist/client/core.js.map +1 -1
- package/dist/client/index.d.ts +44 -10
- package/dist/client/index.js +35 -0
- package/dist/client/index.js.map +1 -1
- package/dist/cloudflare-SIG42OIW.js +335 -0
- package/dist/cloudflare-SIG42OIW.js.map +1 -0
- package/dist/config-support-WQHQIJTA.js +104 -0
- package/dist/config-support-WQHQIJTA.js.map +1 -0
- package/dist/{csrf-BBrEZSBW.d.ts → csrf-Dgot9qSM.d.ts} +1 -1
- package/dist/deno-deploy-LQAYOOPW.js +196 -0
- package/dist/deno-deploy-LQAYOOPW.js.map +1 -0
- package/dist/{dev-CDFPXISP.js → dev-3UQVD2W6.js} +29 -18
- package/dist/dev-3UQVD2W6.js.map +1 -0
- package/dist/{dev-emit-GWD6IXV7.js → dev-emit-BFNMDCPB.js} +5 -5
- package/dist/{dev-emit-NBT6JD7R.js → dev-emit-MVAJAFGX.js} +5 -3
- package/dist/dev-emit-MVAJAFGX.js.map +1 -0
- package/dist/engine-singleton-X4R7AZBJ.js +315 -0
- package/dist/engine-singleton-X4R7AZBJ.js.map +1 -0
- package/dist/{generate-Y3GWM57K.js → generate-EN6EDITF.js} +43 -4
- package/dist/generate-EN6EDITF.js.map +1 -0
- package/dist/index-DctfHtv-.d.ts +1058 -0
- package/dist/index.d.ts +8 -4
- package/dist/index.js +25 -13
- package/dist/index.js.map +1 -1
- package/dist/{info-QXZW722N.js → info-Y55RWS42.js} +8 -6
- package/dist/{info-QXZW722N.js.map → info-Y55RWS42.js.map} +1 -1
- package/dist/{internal-api-FBK2YXSI.js → internal-api-4X6NDS2F.js} +23 -12
- package/dist/{internal-api-ZCJWJ5EC.js → internal-api-XQHU5JKY.js} +31 -16
- package/dist/internal-api-XQHU5JKY.js.map +1 -0
- package/dist/load-config-4ATXQUN3.js +16 -0
- package/dist/match-DmGgxjIU.d.ts +44 -0
- package/dist/{mcp-KTYP4ZON.js → mcp-IQRHFP3Y.js} +7 -7
- package/dist/netlify-C2IRCZKI.js +245 -0
- package/dist/netlify-C2IRCZKI.js.map +1 -0
- package/dist/node-OSVPYQ3D.js +10 -0
- package/dist/nonce-BXt7Qu_C.d.ts +31 -0
- package/dist/observability-bootstrap-LERYDHKY.js +16 -0
- package/dist/{openapi-OUXNB2F2.js → openapi-VFPEZSRI.js} +13 -11
- package/dist/{openapi-OUXNB2F2.js.map → openapi-VFPEZSRI.js.map} +1 -1
- package/dist/{plugin-runner-DHVr1cC5.d.ts → plugin-runner-BVMOSxvb.d.ts} +1 -1
- package/dist/{plugin-types-4VN1GMqV.d.ts → plugin-types-BUVfUQ0V.d.ts} +1 -1
- package/dist/preview-BT47VMIB.js +23 -0
- package/dist/preview-BT47VMIB.js.map +1 -0
- package/dist/provider-resolver-Dx6QuWrw.d.ts +128 -0
- package/dist/registry-KBZDCFVQ.js +23 -0
- package/dist/route-config-Cm_ZMA1C.d.ts +72 -0
- package/dist/route-policy-BxOycCDq.d.ts +65 -0
- package/dist/router/element-scroll-restoration.d.ts +28 -0
- package/dist/router/element-scroll-restoration.js +96 -0
- package/dist/router/element-scroll-restoration.js.map +1 -0
- package/dist/{routes-NJR4ISCT.js → routes-BPLU3ISV.js} +11 -9
- package/dist/{routes-NJR4ISCT.js.map → routes-BPLU3ISV.js.map} +1 -1
- package/dist/{scan-7MJC6PYU.js → scan-YJEE4KQK.js} +2 -2
- package/dist/{schema-DNIT7JQX.js → schema-SOAD43RQ.js} +7 -5
- package/dist/schemas-4AXHQMV3.js +25 -0
- package/dist/schemas-4AXHQMV3.js.map +1 -0
- package/dist/security-headers-Ccj7ncNx.d.ts +129 -0
- package/dist/server/agent/index.d.ts +2 -105
- package/dist/server/agent/index.js +1 -1
- package/dist/server/auth/index.d.ts +2 -21
- package/dist/server/auth/index.js +3 -2
- package/dist/server/cron/index.js +4 -3
- package/dist/server/define/index.d.ts +43 -57
- package/dist/server/define/index.js +10 -1
- package/dist/server/http/index.d.ts +7 -5
- package/dist/server/http/index.js +57 -12
- package/dist/server/index.d.ts +47 -439
- package/dist/server/index.js +120 -201
- package/dist/server/index.js.map +1 -1
- package/dist/server/jobs/index.js +4 -3
- package/dist/server/observability/index.d.ts +109 -35
- package/dist/server/observability/index.js +11 -7
- package/dist/server/plugins/index.d.ts +3 -3
- package/dist/server/scan/index.d.ts +47 -12
- package/dist/server/scan/index.js +13 -4
- package/dist/server/security/index.d.ts +61 -103
- package/dist/server/security/index.js +15 -6
- package/dist/server/webhook/index.d.ts +90 -3
- package/dist/server/webhook/index.js +12 -2
- package/dist/server-boundary-2WFT546S.js +149 -0
- package/dist/server-boundary-2WFT546S.js.map +1 -0
- package/dist/server-boundary-A67OPRKO.js +134 -0
- package/dist/server-boundary-A67OPRKO.js.map +1 -0
- package/dist/{services-typed-client-P4JERLBL.js → services-typed-client-XGT5SUUN.js} +2 -2
- package/dist/{start-25OV2CAK.js → start-3K3C4Z2X.js} +224 -161
- package/dist/start-3K3C4Z2X.js.map +1 -0
- package/dist/{static-RTO637XW.js → static-SVDWIOXJ.js} +24 -13
- package/dist/static-SVDWIOXJ.js.map +1 -0
- package/dist/{theo-cloud-UZ3GINRU.js → theo-cloud-3ET4G5T6.js} +9 -2
- package/dist/theo-cloud-3ET4G5T6.js.map +1 -0
- package/dist/vercel-BMCQKCWE.js +277 -0
- package/dist/vercel-BMCQKCWE.js.map +1 -0
- package/dist/vite-plugin/index.js +25 -13
- package/dist/vite-plugin-USXUIV3H.js +43 -0
- package/dist/vite-plugin-USXUIV3H.js.map +1 -0
- package/package.json +19 -6
- package/dist/actions-virtual-module-E4PISKMB.js.map +0 -1
- package/dist/agent-XAQCUQNB.js +0 -15
- package/dist/app-typed-client-HLP26EYM.js.map +0 -1
- package/dist/app-typed-client-I4X2UJWW.js.map +0 -1
- package/dist/aws-lambda-KES4MFJV.js +0 -172
- package/dist/aws-lambda-KES4MFJV.js.map +0 -1
- package/dist/body-parser-web-4Z2QTPDU.js.map +0 -1
- package/dist/body-parser-web-TIOTXPDW.js.map +0 -1
- package/dist/build-F2Q5QTSC.js.map +0 -1
- package/dist/bun-A5B2MJMO.js.map +0 -1
- package/dist/chunk-646CA6RV.js.map +0 -1
- package/dist/chunk-7LVM22VG.js.map +0 -1
- package/dist/chunk-A7JBF5FO.js.map +0 -1
- package/dist/chunk-AATSV4UV.js.map +0 -1
- package/dist/chunk-AM3QABW5.js +0 -161
- package/dist/chunk-AM3QABW5.js.map +0 -1
- package/dist/chunk-AXKUA57G.js +0 -94
- package/dist/chunk-AXKUA57G.js.map +0 -1
- package/dist/chunk-BHOTGS7N.js.map +0 -1
- package/dist/chunk-BMHS4WAN.js.map +0 -1
- package/dist/chunk-CMYSHZFT.js +0 -422
- package/dist/chunk-CMYSHZFT.js.map +0 -1
- package/dist/chunk-DQIPV7L5.js +0 -118
- package/dist/chunk-DQIPV7L5.js.map +0 -1
- package/dist/chunk-FB2HBNIC.js.map +0 -1
- package/dist/chunk-FNTLKHZ7.js.map +0 -1
- package/dist/chunk-FTFN4MYN.js.map +0 -1
- package/dist/chunk-HBU2GIMZ.js.map +0 -1
- package/dist/chunk-IEES3CHD.js.map +0 -1
- package/dist/chunk-JA2ZAT5Q.js.map +0 -1
- package/dist/chunk-KD5G3YXI.js.map +0 -1
- package/dist/chunk-KTKTHIUF.js +0 -405
- package/dist/chunk-KTKTHIUF.js.map +0 -1
- package/dist/chunk-LNVMHQ2Z.js +0 -54
- package/dist/chunk-LNVMHQ2Z.js.map +0 -1
- package/dist/chunk-LXAESF4Y.js.map +0 -1
- package/dist/chunk-MTEWLGVY.js.map +0 -1
- package/dist/chunk-NTWNO24W.js.map +0 -1
- package/dist/chunk-O3JIAU3V.js.map +0 -1
- package/dist/chunk-OLGPYOLO.js.map +0 -1
- package/dist/chunk-OOBYPCZC.js.map +0 -1
- package/dist/chunk-T5C46IIU.js.map +0 -1
- package/dist/chunk-U267AOWS.js +0 -28
- package/dist/chunk-U267AOWS.js.map +0 -1
- package/dist/chunk-UW2TEAGR.js +0 -77
- package/dist/chunk-UW2TEAGR.js.map +0 -1
- package/dist/chunk-WPJOTQA5.js +0 -1
- package/dist/chunk-WSXNGF7X.js.map +0 -1
- package/dist/chunk-WYHYOYRH.js.map +0 -1
- package/dist/chunk-XALU5LCU.js.map +0 -1
- package/dist/chunk-XR74JD4M.js +0 -457
- package/dist/chunk-XR74JD4M.js.map +0 -1
- package/dist/chunk-YGAXV5HR.js.map +0 -1
- package/dist/chunk-YXG2SGQ3.js.map +0 -1
- package/dist/cloudflare-IN2WB7FZ.js +0 -122
- package/dist/cloudflare-IN2WB7FZ.js.map +0 -1
- package/dist/deno-deploy-LYXQEJ6A.js +0 -107
- package/dist/deno-deploy-LYXQEJ6A.js.map +0 -1
- package/dist/dev-CDFPXISP.js.map +0 -1
- package/dist/dev-emit-NBT6JD7R.js.map +0 -1
- package/dist/generate-Y3GWM57K.js.map +0 -1
- package/dist/index-D_PxPXgQ.d.ts +0 -575
- package/dist/load-config-FIWNKOJO.js +0 -14
- package/dist/match-CfbEFRG4.d.ts +0 -26
- package/dist/netlify-DLEOCFAD.js +0 -150
- package/dist/netlify-DLEOCFAD.js.map +0 -1
- package/dist/node-QXYSUWQ4.js +0 -10
- package/dist/registry-S7OMF3OS.js +0 -23
- package/dist/start-25OV2CAK.js.map +0 -1
- package/dist/static-RTO637XW.js.map +0 -1
- package/dist/theo-cloud-UZ3GINRU.js.map +0 -1
- package/dist/vercel-6D6EZUVD.js +0 -133
- package/dist/vercel-6D6EZUVD.js.map +0 -1
- package/dist/vite-plugin-RJFKLF2U.js +0 -36
- /package/dist/{chunk-WPJOTQA5.js.map → adapters/agent-mount.js.map} +0 -0
- /package/dist/{agent-XAQCUQNB.js.map → agent-7IPEVCAY.js.map} +0 -0
- /package/dist/{check-45NKUVSQ.js.map → check-GIPZBFTX.js.map} +0 -0
- /package/dist/{chunk-47CINLWF.js.map → chunk-EDWEYQRG.js.map} +0 -0
- /package/dist/{chunk-ZB7D62OA.js.map → chunk-KUZVRJ7M.js.map} +0 -0
- /package/dist/{chunk-DS5MCU2X.js.map → chunk-URCXSUI3.js.map} +0 -0
- /package/dist/{internal-api-ZCJWJ5EC.js.map → chunk-YSJOZEI6.js.map} +0 -0
- /package/dist/{dev-emit-GWD6IXV7.js.map → dev-emit-BFNMDCPB.js.map} +0 -0
- /package/dist/{internal-api-FBK2YXSI.js.map → internal-api-4X6NDS2F.js.map} +0 -0
- /package/dist/{load-config-FIWNKOJO.js.map → load-config-4ATXQUN3.js.map} +0 -0
- /package/dist/{mcp-KTYP4ZON.js.map → mcp-IQRHFP3Y.js.map} +0 -0
- /package/dist/{node-QXYSUWQ4.js.map → node-OSVPYQ3D.js.map} +0 -0
- /package/dist/{scan-7MJC6PYU.js.map → observability-bootstrap-LERYDHKY.js.map} +0 -0
- /package/dist/{registry-S7OMF3OS.js.map → registry-KBZDCFVQ.js.map} +0 -0
- /package/dist/{schema-DNIT7JQX.js.map → scan-YJEE4KQK.js.map} +0 -0
- /package/dist/{vite-plugin-RJFKLF2U.js.map → schema-SOAD43RQ.js.map} +0 -0
- /package/dist/{services-typed-client-P4JERLBL.js.map → services-typed-client-XGT5SUUN.js.map} +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { R as RoutePolicy } from './route-policy-BxOycCDq.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* core/contracts/route-config.ts
|
|
6
|
+
*
|
|
7
|
+
* Canonical home for `RouteConfig<TQuery, TBody, TParams, TCtx, TResponse>` —
|
|
8
|
+
* the contract shape consumed by `defineRoute()` (server) and
|
|
9
|
+
* `defineCachedRoute()` (cache).
|
|
10
|
+
*
|
|
11
|
+
* Moved here in T2.2 of architecture-cleanup so `cache → core/contracts`
|
|
12
|
+
* is the legal edge (replacing the prior `cache → server` violation).
|
|
13
|
+
*
|
|
14
|
+
* GAP-4 (plan v1.1): the 5-arity generic shape `<TQuery, TBody, TParams, TCtx, TResponse>`
|
|
15
|
+
* MUST be preserved byte-by-byte. Type tests assert this in
|
|
16
|
+
* `tests/unit/route-config-generic-arity.test.ts`.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
interface RouteConfig<TQuery extends z.ZodType = z.ZodUndefined, TBody extends z.ZodType = z.ZodUndefined, TParams extends z.ZodType = z.ZodUndefined, TCtx = unknown, TResponse = unknown> {
|
|
20
|
+
query?: TQuery;
|
|
21
|
+
body?: TBody;
|
|
22
|
+
params?: TParams;
|
|
23
|
+
status?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Optional Zod schema for the handler's plain-object return value. When
|
|
26
|
+
* present, BOTH runtimes (Node `executeRoute` + Web `executeWebRequest`)
|
|
27
|
+
* validate the handler's plain-object return against it BEFORE serializing.
|
|
28
|
+
*
|
|
29
|
+
* A mismatch is a SERVER fault (the handler violated its own declared
|
|
30
|
+
* contract) → 500 `INTERNAL_SERVER_ERROR`, distinct from the 400 used for
|
|
31
|
+
* input (`query`/`body`/`params`) validation failures.
|
|
32
|
+
*
|
|
33
|
+
* `Response`-instance returns (and `undefined`/`null` → 204) are NOT
|
|
34
|
+
* validated. This is a plain optional field — runtime validation only; the
|
|
35
|
+
* handler return type is NOT statically inferred from `response` (YAGNI).
|
|
36
|
+
*/
|
|
37
|
+
response?: z.ZodType;
|
|
38
|
+
/**
|
|
39
|
+
* Opt out of CSRF enforcement for this route. Use for endpoints that
|
|
40
|
+
* legitimately receive third-party POSTs (Stripe webhooks, GitHub
|
|
41
|
+
* webhooks, OAuth callbacks). Defaults to enforced per `config.security.csrf`.
|
|
42
|
+
*
|
|
43
|
+
* Setting `csrf: false` only disables the per-route check — it does NOT
|
|
44
|
+
* disable the global mode setting for other routes.
|
|
45
|
+
*/
|
|
46
|
+
csrf?: false;
|
|
47
|
+
/**
|
|
48
|
+
* Who may perform this operation (ADR 0001).
|
|
49
|
+
*
|
|
50
|
+
* Evaluated by the Node executor, the Web executor AND `callProcedure`, from
|
|
51
|
+
* one implementation — which is what makes "the same route gives the same
|
|
52
|
+
* access decision on every transport" a property of the code. Before this
|
|
53
|
+
* existed, a route's access rules applied over HTTP and applied nowhere
|
|
54
|
+
* in-process, and in-process is the path the desktop and terminal targets are
|
|
55
|
+
* built on.
|
|
56
|
+
*
|
|
57
|
+
* `'public'` is a declaration and not a default. Absence currently means "not
|
|
58
|
+
* declared" and is NOT reinterpreted as denial at runtime: flipping that would
|
|
59
|
+
* break every existing route in every consumer at once. The ADR routes it
|
|
60
|
+
* through a build-time gate and a migration instead.
|
|
61
|
+
*/
|
|
62
|
+
policy?: RoutePolicy<z.infer<TQuery>, z.infer<TBody>, z.infer<TParams>>;
|
|
63
|
+
handler: (ctx: {
|
|
64
|
+
query: z.infer<TQuery>;
|
|
65
|
+
body: z.infer<TBody>;
|
|
66
|
+
params: z.infer<TParams>;
|
|
67
|
+
request: Request;
|
|
68
|
+
ctx: TCtx;
|
|
69
|
+
}) => TResponse | Promise<TResponse>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export type { RouteConfig as R };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who is asking. Supplied by the caller through the run-context, never read from
|
|
3
|
+
* a transport.
|
|
4
|
+
*
|
|
5
|
+
* A cookie is one way to establish this and a terminal has no cookies, so the
|
|
6
|
+
* contract takes the resolved subject rather than the mechanism that resolved it
|
|
7
|
+
* (ADR 0001 section Decision, point 4).
|
|
8
|
+
*/
|
|
9
|
+
interface RouteSubject {
|
|
10
|
+
id: string;
|
|
11
|
+
[claim: string]: unknown;
|
|
12
|
+
}
|
|
13
|
+
/** The answer a policy gives. A denial carries its reason so the caller can say it. */
|
|
14
|
+
type AccessDecision = {
|
|
15
|
+
allowed: true;
|
|
16
|
+
} | {
|
|
17
|
+
allowed: false;
|
|
18
|
+
reason: string;
|
|
19
|
+
};
|
|
20
|
+
/** What a policy is handed. Deliberately transport-free: no headers, no cookies, no response. */
|
|
21
|
+
interface RoutePolicyInput<TQuery = unknown, TBody = unknown, TParams = unknown> {
|
|
22
|
+
subject: RouteSubject | null;
|
|
23
|
+
query: TQuery;
|
|
24
|
+
body: TBody;
|
|
25
|
+
params: TParams;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A route's access policy.
|
|
29
|
+
*
|
|
30
|
+
* `'public'` is a declaration, not a default. The point of writing it is that
|
|
31
|
+
* openness becomes greppable — today a route that enforces nothing looks exactly
|
|
32
|
+
* like a route nobody thought about (ADR 0001 section Consequences, Risks).
|
|
33
|
+
*/
|
|
34
|
+
type RoutePolicy<TQuery = unknown, TBody = unknown, TParams = unknown> = 'public' | ((input: RoutePolicyInput<TQuery, TBody, TParams>) => boolean | AccessDecision | Promise<boolean | AccessDecision>);
|
|
35
|
+
/** Narrow a run-context to the subject it carries, if it carries one. */
|
|
36
|
+
declare function subjectFromContext(context: unknown): RouteSubject | null;
|
|
37
|
+
/**
|
|
38
|
+
* Evaluate a route policy. THE single implementation - the HTTP executors and
|
|
39
|
+
* the in-process caller all reach this function, which is what makes "the same
|
|
40
|
+
* route gives the same access decision on every transport" a property of the code
|
|
41
|
+
* rather than a claim in a document.
|
|
42
|
+
*
|
|
43
|
+
* The shape mirrors `validateRouteInput`, which is already described in-source as
|
|
44
|
+
* "the SINGLE shared pipeline ... One pipeline, no drift". Access control had no
|
|
45
|
+
* such pipeline; that absence is what ADR 0001 exists to close.
|
|
46
|
+
*
|
|
47
|
+
* An undeclared policy returns `allowed` and is NOT the same thing as `'public'`.
|
|
48
|
+
* Absence is refused where an application DECLARES its routes — the file-system
|
|
49
|
+
* scanner fails the build naming the file (`MissingRoutePolicyError`) — and not
|
|
50
|
+
* here, where the argument may be a `RouteConfig` a caller built in memory and
|
|
51
|
+
* never scanned. Reinterpreting absence as denial at this point would break
|
|
52
|
+
* every direct caller of the executors at once, which the ADR routes through the
|
|
53
|
+
* build gate and a migration instead.
|
|
54
|
+
*/
|
|
55
|
+
declare function evaluateRoutePolicy(policy: RoutePolicy | undefined, input: RoutePolicyInput): Promise<AccessDecision>;
|
|
56
|
+
/**
|
|
57
|
+
* The authorization primitive the framework did not have.
|
|
58
|
+
*
|
|
59
|
+
* `requireAuth` answers "is anyone there". Every action then answered "may THIS
|
|
60
|
+
* subject touch THIS record" on its own, which is one implementation per action
|
|
61
|
+
* and one place per action to get it wrong. This is that answer, once.
|
|
62
|
+
*/
|
|
63
|
+
declare function requireOwner(subject: RouteSubject | null, ownerId: string | null | undefined): AccessDecision;
|
|
64
|
+
|
|
65
|
+
export { type AccessDecision as A, type RoutePolicy as R, type RouteSubject as a, type RoutePolicyInput as b, evaluateRoutePolicy as e, requireOwner as r, subjectFromContext as s };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Restore the scroll offset of elements the application marked as scrollers (#421).
|
|
3
|
+
*
|
|
4
|
+
* Mounted beside react-router's `<ScrollRestoration>`, not instead of it: that one owns the
|
|
5
|
+
* DOCUMENT, correctly and with its own timing, and this one owns the elements it cannot see. An app
|
|
6
|
+
* whose document scrolls keeps exactly the behaviour it had.
|
|
7
|
+
*
|
|
8
|
+
* ## What an application does
|
|
9
|
+
*
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <main data-theo-scroll="main" className="overflow-y-auto">…</main>
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* The attribute's VALUE is the id, so two scrollers on one page stay distinguishable.
|
|
15
|
+
*
|
|
16
|
+
* ## Why every decision is elsewhere
|
|
17
|
+
*
|
|
18
|
+
* This component queries, sequences, and nothing else — `scroll-restoration.ts` decides which key
|
|
19
|
+
* an offset lands under, when it is read back, and what happens to an element that is gone on
|
|
20
|
+
* return. That split is because this repository sets up no DOM test environment, so the part that
|
|
21
|
+
* cannot be covered by a test is deliberately the part with no branches in it.
|
|
22
|
+
*
|
|
23
|
+
* `useLayoutEffect` and not `useEffect`: the offset must be applied before the browser paints, or
|
|
24
|
+
* the user sees the top of the list and then a jump.
|
|
25
|
+
*/
|
|
26
|
+
declare function ElementScrollRestoration(): null;
|
|
27
|
+
|
|
28
|
+
export { ElementScrollRestoration };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import "../chunk-XTHN6JBX.js";
|
|
2
|
+
|
|
3
|
+
// src/router/element-scroll-restoration.tsx
|
|
4
|
+
import { useLayoutEffect, useRef } from "react";
|
|
5
|
+
import { useLocation } from "react-router";
|
|
6
|
+
|
|
7
|
+
// src/router/scroll-restoration.ts
|
|
8
|
+
var SCROLL_CONTAINER_ATTRIBUTE = "data-theo-scroll";
|
|
9
|
+
function storageKey(locationKey) {
|
|
10
|
+
return `theokit:scroll:${locationKey}`;
|
|
11
|
+
}
|
|
12
|
+
function createScrollRestorer(store) {
|
|
13
|
+
return {
|
|
14
|
+
save(locationKey, targets) {
|
|
15
|
+
const offsets = {};
|
|
16
|
+
for (const target of targets) offsets[target.id] = target.scrollTop;
|
|
17
|
+
try {
|
|
18
|
+
store.set(storageKey(locationKey), JSON.stringify(offsets));
|
|
19
|
+
} catch {
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
restore(locationKey, targets) {
|
|
23
|
+
const offsets = readOffsets(store, locationKey);
|
|
24
|
+
if (offsets === void 0) return;
|
|
25
|
+
for (const target of targets) {
|
|
26
|
+
const offset = offsets[target.id];
|
|
27
|
+
if (typeof offset === "number") target.scrollTop = offset;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function readOffsets(store, locationKey) {
|
|
33
|
+
const raw = store.get(storageKey(locationKey));
|
|
34
|
+
if (raw === null) return void 0;
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(raw);
|
|
37
|
+
return parsed !== null && typeof parsed === "object" ? parsed : void 0;
|
|
38
|
+
} catch {
|
|
39
|
+
return void 0;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// src/router/element-scroll-restoration.tsx
|
|
44
|
+
function ElementScrollRestoration() {
|
|
45
|
+
const location = useLocation();
|
|
46
|
+
const previousKey = useRef(void 0);
|
|
47
|
+
useLayoutEffect(() => {
|
|
48
|
+
const restorer = createScrollRestorer(sessionScrollStore());
|
|
49
|
+
const leaving = previousKey.current;
|
|
50
|
+
if (leaving !== void 0) restorer.save(leaving, scrollTargets());
|
|
51
|
+
previousKey.current = location.key;
|
|
52
|
+
restorer.restore(location.key, scrollTargets());
|
|
53
|
+
const onHide = () => {
|
|
54
|
+
createScrollRestorer(sessionScrollStore()).save(location.key, scrollTargets());
|
|
55
|
+
};
|
|
56
|
+
window.addEventListener("pagehide", onHide);
|
|
57
|
+
return () => {
|
|
58
|
+
window.removeEventListener("pagehide", onHide);
|
|
59
|
+
};
|
|
60
|
+
}, [location.key]);
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
function scrollTargets() {
|
|
64
|
+
return [...document.querySelectorAll(`[${SCROLL_CONTAINER_ATTRIBUTE}]`)].flatMap((element) => {
|
|
65
|
+
const id = element.getAttribute(SCROLL_CONTAINER_ATTRIBUTE);
|
|
66
|
+
if (id === null || id === "") return [];
|
|
67
|
+
return [
|
|
68
|
+
{
|
|
69
|
+
id,
|
|
70
|
+
get scrollTop() {
|
|
71
|
+
return element.scrollTop;
|
|
72
|
+
},
|
|
73
|
+
set scrollTop(value) {
|
|
74
|
+
element.scrollTop = value;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
];
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
function sessionScrollStore() {
|
|
81
|
+
try {
|
|
82
|
+
const storage = window.sessionStorage;
|
|
83
|
+
return {
|
|
84
|
+
get: (key) => storage.getItem(key),
|
|
85
|
+
set: (key, value) => {
|
|
86
|
+
storage.setItem(key, value);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
} catch {
|
|
90
|
+
return { get: () => null, set: () => void 0 };
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export {
|
|
94
|
+
ElementScrollRestoration
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=element-scroll-restoration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/router/element-scroll-restoration.tsx","../../src/router/scroll-restoration.ts"],"mappings":";;;AAAA,SAAS,iBAAiB,cAAc;AACxC,SAAS,mBAAmB;;;ACiDrB,IAAM,6BAA6B;AAG1C,SAAS,WAAW,aAA6B;AAC/C,SAAO,kBAAkB,WAAW;AACtC;AASO,SAAS,qBAAqB,OAAoC;AACvE,SAAO;AAAA,IACL,KAAK,aAAa,SAAS;AACzB,YAAM,UAAkC,CAAC;AACzC,iBAAW,UAAU,QAAS,SAAQ,OAAO,EAAE,IAAI,OAAO;AAC1D,UAAI;AACF,cAAM,IAAI,WAAW,WAAW,GAAG,KAAK,UAAU,OAAO,CAAC;AAAA,MAC5D,QAAQ;AAAA,MAGR;AAAA,IACF;AAAA,IAEA,QAAQ,aAAa,SAAS;AAC5B,YAAM,UAAU,YAAY,OAAO,WAAW;AAC9C,UAAI,YAAY,OAAW;AAC3B,iBAAW,UAAU,SAAS;AAC5B,cAAM,SAAS,QAAQ,OAAO,EAAE;AAGhC,YAAI,OAAO,WAAW,SAAU,QAAO,YAAY;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,YAAY,OAAoB,aAA0D;AACjG,QAAM,MAAM,MAAM,IAAI,WAAW,WAAW,CAAC;AAC7C,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI;AACF,UAAM,SAAkB,KAAK,MAAM,GAAG;AAGtC,WAAO,WAAW,QAAQ,OAAO,WAAW,WACvC,SACD;AAAA,EACN,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ADpEO,SAAS,2BAAiC;AAC/C,QAAM,WAAW,YAAY;AAC7B,QAAM,cAAc,OAA2B,MAAS;AAExD,kBAAgB,MAAM;AACpB,UAAM,WAAW,qBAAqB,mBAAmB,CAAC;AAC1D,UAAM,UAAU,YAAY;AAC5B,QAAI,YAAY,OAAW,UAAS,KAAK,SAAS,cAAc,CAAC;AACjE,gBAAY,UAAU,SAAS;AAC/B,aAAS,QAAQ,SAAS,KAAK,cAAc,CAAC;AAI9C,UAAM,SAAS,MAAY;AACzB,2BAAqB,mBAAmB,CAAC,EAAE,KAAK,SAAS,KAAK,cAAc,CAAC;AAAA,IAC/E;AACA,WAAO,iBAAiB,YAAY,MAAM;AAC1C,WAAO,MAAM;AACX,aAAO,oBAAoB,YAAY,MAAM;AAAA,IAC/C;AAAA,EACF,GAAG,CAAC,SAAS,GAAG,CAAC;AAEjB,SAAO;AACT;AAWA,SAAS,gBAAgC;AACvC,SAAO,CAAC,GAAG,SAAS,iBAAiB,IAAI,0BAA0B,GAAG,CAAC,EAAE,QAAQ,CAAC,YAAY;AAC5F,UAAM,KAAK,QAAQ,aAAa,0BAA0B;AAC1D,QAAI,OAAO,QAAQ,OAAO,GAAI,QAAO,CAAC;AACtC,WAAO;AAAA,MACL;AAAA,QACE;AAAA,QACA,IAAI,YAAoB;AACtB,iBAAO,QAAQ;AAAA,QACjB;AAAA,QACA,IAAI,UAAU,OAAe;AAC3B,kBAAQ,YAAY;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAQA,SAAS,qBAAkC;AACzC,MAAI;AACF,UAAM,UAAU,OAAO;AACvB,WAAO;AAAA,MACL,KAAK,CAAC,QAAQ,QAAQ,QAAQ,GAAG;AAAA,MACjC,KAAK,CAAC,KAAK,UAAU;AACnB,gBAAQ,QAAQ,KAAK,KAAK;AAAA,MAC5B;AAAA,IACF;AAAA,EACF,QAAQ;AACN,WAAO,EAAE,KAAK,MAAM,MAAM,KAAK,MAAM,OAAU;AAAA,EACjD;AACF;","names":[]}
|
|
@@ -3,18 +3,20 @@ import "tsx/esm";
|
|
|
3
3
|
import {
|
|
4
4
|
validateProjectStructure
|
|
5
5
|
} from "./chunk-GEQJAFSV.js";
|
|
6
|
-
import {
|
|
7
|
-
loadConfig
|
|
8
|
-
} from "./chunk-AATSV4UV.js";
|
|
9
|
-
import "./chunk-HBU2GIMZ.js";
|
|
10
|
-
import "./chunk-CMYSHZFT.js";
|
|
11
|
-
import "./chunk-WSXNGF7X.js";
|
|
12
6
|
import {
|
|
13
7
|
scanServerActions,
|
|
14
8
|
scanServerRoutes,
|
|
15
9
|
scanWebSocketRoutes
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
10
|
+
} from "./chunk-XS7EX55U.js";
|
|
11
|
+
import "./chunk-FD4ZDTQ6.js";
|
|
12
|
+
import {
|
|
13
|
+
loadConfig
|
|
14
|
+
} from "./chunk-QTHVHNJJ.js";
|
|
15
|
+
import "./chunk-3QPVEJ7D.js";
|
|
16
|
+
import "./chunk-U5PWXS3J.js";
|
|
17
|
+
import "./chunk-FH3SQR6P.js";
|
|
18
|
+
import "./chunk-ZNZISJDZ.js";
|
|
19
|
+
import "./chunk-VI7ZANB3.js";
|
|
18
20
|
|
|
19
21
|
// src/cli/commands/routes.ts
|
|
20
22
|
import { resolve, relative } from "path";
|
|
@@ -62,4 +64,4 @@ async function routesCommand() {
|
|
|
62
64
|
export {
|
|
63
65
|
routesCommand
|
|
64
66
|
};
|
|
65
|
-
//# sourceMappingURL=routes-
|
|
67
|
+
//# sourceMappingURL=routes-BPLU3ISV.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/commands/routes.ts"],"sourcesContent":["import { resolve, relative } from 'node:path'\n\nimport { loadConfig } from '../../config/load-config.js'\nimport { validateProjectStructure } from '../../config/validate-structure.js'\nimport { scanServerActions } from '../../server/scan/action-scan.js'\nimport { scanServerRoutes } from '../../server/scan/scan.js'\nimport { scanWebSocketRoutes } from '../../server/scan/ws-scan.js'\n\nexport async function routesCommand(): Promise<void> {\n const cwd = process.cwd()\n const config = await loadConfig(cwd)\n // #95 — honor config.appDir so a custom frontend dir (e.g. apps/web) passes the structure gate.\n validateProjectStructure(cwd, config.appDir)\n\n const serverDir = resolve(cwd, config.serverDir)\n\n const apiRoutes = scanServerRoutes(serverDir)\n const actions = scanServerActions(serverDir)\n const wsRoutes = scanWebSocketRoutes(serverDir)\n\n const totalCount = apiRoutes.length + actions.length + wsRoutes.length\n\n if (totalCount === 0) {\n console.log('\\n No routes found.\\n')\n return\n }\n\n // API Routes\n if (apiRoutes.length > 0) {\n console.log('\\n API Routes')\n console.log(' ' + '─'.repeat(60))\n for (const route of apiRoutes) {\n const rel = relative(cwd, route.filePath)\n console.log(` GET/POST ${route.routePath.padEnd(30)} ${rel}`)\n }\n }\n\n // Actions\n if (actions.length > 0) {\n console.log('\\n Actions')\n console.log(' ' + '─'.repeat(60))\n for (const action of actions) {\n const rel = relative(cwd, action.filePath)\n console.log(` POST /api/__actions/${action.actionPath.padEnd(18)} ${rel}`)\n }\n }\n\n // WebSocket\n if (wsRoutes.length > 0) {\n console.log('\\n WebSocket')\n console.log(' ' + '─'.repeat(60))\n for (const route of wsRoutes) {\n const rel = relative(cwd, route.filePath)\n console.log(` WS ${route.wsPath.padEnd(30)} ${rel}`)\n }\n }\n\n console.log(`\\n Total: ${totalCount} endpoints\\n`)\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/cli/commands/routes.ts"],"sourcesContent":["import { resolve, relative } from 'node:path'\n\nimport { loadConfig } from '../../config/load-config.js'\nimport { validateProjectStructure } from '../../config/validate-structure.js'\nimport { scanServerActions } from '../../server/scan/action-scan.js'\nimport { scanServerRoutes } from '../../server/scan/scan.js'\nimport { scanWebSocketRoutes } from '../../server/scan/ws-scan.js'\n\nexport async function routesCommand(): Promise<void> {\n const cwd = process.cwd()\n const config = await loadConfig(cwd)\n // #95 — honor config.appDir so a custom frontend dir (e.g. apps/web) passes the structure gate.\n validateProjectStructure(cwd, config.appDir)\n\n const serverDir = resolve(cwd, config.serverDir)\n\n const apiRoutes = scanServerRoutes(serverDir)\n const actions = scanServerActions(serverDir)\n const wsRoutes = scanWebSocketRoutes(serverDir)\n\n const totalCount = apiRoutes.length + actions.length + wsRoutes.length\n\n if (totalCount === 0) {\n console.log('\\n No routes found.\\n')\n return\n }\n\n // API Routes\n if (apiRoutes.length > 0) {\n console.log('\\n API Routes')\n console.log(' ' + '─'.repeat(60))\n for (const route of apiRoutes) {\n const rel = relative(cwd, route.filePath)\n console.log(` GET/POST ${route.routePath.padEnd(30)} ${rel}`)\n }\n }\n\n // Actions\n if (actions.length > 0) {\n console.log('\\n Actions')\n console.log(' ' + '─'.repeat(60))\n for (const action of actions) {\n const rel = relative(cwd, action.filePath)\n console.log(` POST /api/__actions/${action.actionPath.padEnd(18)} ${rel}`)\n }\n }\n\n // WebSocket\n if (wsRoutes.length > 0) {\n console.log('\\n WebSocket')\n console.log(' ' + '─'.repeat(60))\n for (const route of wsRoutes) {\n const rel = relative(cwd, route.filePath)\n console.log(` WS ${route.wsPath.padEnd(30)} ${rel}`)\n }\n }\n\n console.log(`\\n Total: ${totalCount} endpoints\\n`)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,SAAS,gBAAgB;AAQlC,eAAsB,gBAA+B;AACnD,QAAM,MAAM,QAAQ,IAAI;AACxB,QAAM,SAAS,MAAM,WAAW,GAAG;AAEnC,2BAAyB,KAAK,OAAO,MAAM;AAE3C,QAAM,YAAY,QAAQ,KAAK,OAAO,SAAS;AAE/C,QAAM,YAAY,iBAAiB,SAAS;AAC5C,QAAM,UAAU,kBAAkB,SAAS;AAC3C,QAAM,WAAW,oBAAoB,SAAS;AAE9C,QAAM,aAAa,UAAU,SAAS,QAAQ,SAAS,SAAS;AAEhE,MAAI,eAAe,GAAG;AACpB,YAAQ,IAAI,wBAAwB;AACpC;AAAA,EACF;AAGA,MAAI,UAAU,SAAS,GAAG;AACxB,YAAQ,IAAI,gBAAgB;AAC5B,YAAQ,IAAI,OAAO,SAAI,OAAO,EAAE,CAAC;AACjC,eAAW,SAAS,WAAW;AAC7B,YAAM,MAAM,SAAS,KAAK,MAAM,QAAQ;AACxC,cAAQ,IAAI,eAAe,MAAM,UAAU,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE;AAAA,IAChE;AAAA,EACF;AAGA,MAAI,QAAQ,SAAS,GAAG;AACtB,YAAQ,IAAI,aAAa;AACzB,YAAQ,IAAI,OAAO,SAAI,OAAO,EAAE,CAAC;AACjC,eAAW,UAAU,SAAS;AAC5B,YAAM,MAAM,SAAS,KAAK,OAAO,QAAQ;AACzC,cAAQ,IAAI,8BAA8B,OAAO,WAAW,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE;AAAA,IACjF;AAAA,EACF;AAGA,MAAI,SAAS,SAAS,GAAG;AACvB,YAAQ,IAAI,eAAe;AAC3B,YAAQ,IAAI,OAAO,SAAI,OAAO,EAAE,CAAC;AACjC,eAAW,SAAS,UAAU;AAC5B,YAAM,MAAM,SAAS,KAAK,MAAM,QAAQ;AACxC,cAAQ,IAAI,eAAe,MAAM,OAAO,OAAO,EAAE,CAAC,IAAI,GAAG,EAAE;AAAA,IAC7D;AAAA,EACF;AAEA,UAAQ,IAAI;AAAA,WAAc,UAAU;AAAA,CAAc;AACpD;","names":[]}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import "tsx/esm";
|
|
3
|
+
import {
|
|
4
|
+
theoConfigSchema
|
|
5
|
+
} from "./chunk-FH3SQR6P.js";
|
|
6
|
+
import "./chunk-ZNZISJDZ.js";
|
|
3
7
|
import {
|
|
4
8
|
cacheSchema,
|
|
5
9
|
corsSchema,
|
|
6
10
|
securityHeadersSchema,
|
|
7
|
-
storageSchema
|
|
8
|
-
|
|
9
|
-
} from "./chunk-CMYSHZFT.js";
|
|
10
|
-
import "./chunk-WSXNGF7X.js";
|
|
11
|
+
storageSchema
|
|
12
|
+
} from "./chunk-VI7ZANB3.js";
|
|
11
13
|
export {
|
|
12
14
|
cacheSchema,
|
|
13
15
|
corsSchema,
|
|
@@ -15,4 +17,4 @@ export {
|
|
|
15
17
|
storageSchema,
|
|
16
18
|
theoConfigSchema
|
|
17
19
|
};
|
|
18
|
-
//# sourceMappingURL=schema-
|
|
20
|
+
//# sourceMappingURL=schema-SOAD43RQ.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "tsx/esm";
|
|
3
|
+
import {
|
|
4
|
+
cacheSchema,
|
|
5
|
+
corsSchema,
|
|
6
|
+
loggingSchema,
|
|
7
|
+
observabilitySchema,
|
|
8
|
+
rateLimitSchema,
|
|
9
|
+
securityHeadersSchema,
|
|
10
|
+
securitySchema,
|
|
11
|
+
storageSchema,
|
|
12
|
+
uploadSchema
|
|
13
|
+
} from "./chunk-VI7ZANB3.js";
|
|
14
|
+
export {
|
|
15
|
+
cacheSchema,
|
|
16
|
+
corsSchema,
|
|
17
|
+
loggingSchema,
|
|
18
|
+
observabilitySchema,
|
|
19
|
+
rateLimitSchema,
|
|
20
|
+
securityHeadersSchema,
|
|
21
|
+
securitySchema,
|
|
22
|
+
storageSchema,
|
|
23
|
+
uploadSchema
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=schemas-4AXHQMV3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The security-header baseline, as a pure function of configuration.
|
|
3
|
+
*
|
|
4
|
+
* It lives in `core/contracts/` because **every** target needs it and none of it
|
|
5
|
+
* is transport-specific: `buildSecurityHeaders` takes a config object and
|
|
6
|
+
* returns `Record<string, string>`. `theokit start` writes that map onto a Node
|
|
7
|
+
* `ServerResponse` (`server/security/security-headers.ts`); the six Web deploy
|
|
8
|
+
* adapters write it onto a `Response` (`adapters/security-headers.ts`). Putting
|
|
9
|
+
* it under `server/` made the second group import across a boundary the
|
|
10
|
+
* dependency graph forbids — `adapters → server` is not a declared edge in
|
|
11
|
+
* ADR-0001 v3 — and the fix is not to widen the rule but to notice that this
|
|
12
|
+
* code was never server code.
|
|
13
|
+
*
|
|
14
|
+
* `core/contracts/<file>.ts` is the declared exception to the deep-import rule,
|
|
15
|
+
* so both callers reach it directly and there is still exactly ONE definition of
|
|
16
|
+
* what a configured header set means.
|
|
17
|
+
*
|
|
18
|
+
* Phase 6 — Default Security Headers (D4 / EC-2).
|
|
19
|
+
*
|
|
20
|
+
* Per-response security baseline. The framework applies these BEFORE the
|
|
21
|
+
* route handler runs so a handler can still override via `res.setHeader`.
|
|
22
|
+
*
|
|
23
|
+
* EC-2 backward-compatibility: CSP ships in `report-only` mode by default
|
|
24
|
+
* for 0.2.0. Existing apps with inline scripts or third-party CDN scripts
|
|
25
|
+
* keep working but consumers see violation reports via their CSP report
|
|
26
|
+
* collector (or browser DevTools). 0.3.0 will flip the default to
|
|
27
|
+
* `enforce` after a release of visibility.
|
|
28
|
+
*/
|
|
29
|
+
/**
|
|
30
|
+
* Default Content-Security-Policy. Conservative-but-not-paralyzing:
|
|
31
|
+
*
|
|
32
|
+
* - default-src 'self' — every fetch falls back to same-origin
|
|
33
|
+
* - script-src 'self' — T6.1 (0.3.0): `'unsafe-inline'`
|
|
34
|
+
* dropped. The SSR pipeline issues a
|
|
35
|
+
* per-request nonce that REPLACES
|
|
36
|
+
* this directive at runtime
|
|
37
|
+
* (`'nonce-<token>'`). For static /
|
|
38
|
+
* non-SSR contexts where no nonce is
|
|
39
|
+
* available, the policy is strict-
|
|
40
|
+
* no-inline — user inline scripts
|
|
41
|
+
* must be migrated to external
|
|
42
|
+
* `<script src="...">` or threaded
|
|
43
|
+
* through `ctx.nonce`.
|
|
44
|
+
* - style-src 'self' 'unsafe-inline' — Tailwind + TheoUI use style attrs
|
|
45
|
+
* in animation directives
|
|
46
|
+
* - img-src 'self' data: blob: — supports inline data URIs, blobs
|
|
47
|
+
* from canvas exports
|
|
48
|
+
* - font-src 'self' data: — Geist fonts inline-base64
|
|
49
|
+
* - connect-src 'self' ws: wss: — WebSocket dev HMR + agent streams
|
|
50
|
+
* - frame-ancestors 'none' — clickjacking defense
|
|
51
|
+
*/
|
|
52
|
+
/**
|
|
53
|
+
* T5.1 — default CSP includes the built-in report endpoint so violations
|
|
54
|
+
* are visible without extra config. Apps that ship a custom `csp` string
|
|
55
|
+
* override the report-uri.
|
|
56
|
+
*/
|
|
57
|
+
declare const DEFAULT_CSP: string;
|
|
58
|
+
/**
|
|
59
|
+
* T1.1 — Default Permissions-Policy header (default-deny stance).
|
|
60
|
+
*
|
|
61
|
+
* Disables sensitive Web APIs that the vast majority of apps don't use.
|
|
62
|
+
* Apps that DO need any of these opt in by overriding `permissionsPolicy`
|
|
63
|
+
* in `config.security.headers`.
|
|
64
|
+
*
|
|
65
|
+
* The seven features listed are the most-abused for: tracking
|
|
66
|
+
* (geolocation, accelerometer, gyroscope), spyware (camera, microphone),
|
|
67
|
+
* fraud (payment), and hardware exfiltration (usb).
|
|
68
|
+
*
|
|
69
|
+
* Aligns with Mozilla baseline + OWASP Secure Headers + Lighthouse PWA.
|
|
70
|
+
*/
|
|
71
|
+
declare const DEFAULT_PERMISSIONS_POLICY = "geolocation=(), camera=(), microphone=(), payment=(), usb=(), accelerometer=(), gyroscope=()";
|
|
72
|
+
type CspMode = 'enforce' | 'report-only' | 'off';
|
|
73
|
+
interface SecurityHeadersConfig {
|
|
74
|
+
/**
|
|
75
|
+
* Custom CSP policy string. When set, replaces the default verbatim.
|
|
76
|
+
* Pass `false` to disable CSP entirely (alias for `cspMode: 'off'`).
|
|
77
|
+
*/
|
|
78
|
+
csp?: string | false;
|
|
79
|
+
/**
|
|
80
|
+
* Enforcement mode for CSP. Default `report-only` for 0.2.0 (EC-2).
|
|
81
|
+
* 0.3.0 will default to `enforce`.
|
|
82
|
+
*/
|
|
83
|
+
cspMode?: CspMode;
|
|
84
|
+
/**
|
|
85
|
+
* Strict-Transport-Security value. Defaults to
|
|
86
|
+
* `max-age=31536000; includeSubDomains` in production. Pass `false` to
|
|
87
|
+
* suppress (e.g. internal LANs without TLS).
|
|
88
|
+
*/
|
|
89
|
+
hsts?: string | false;
|
|
90
|
+
/** X-Frame-Options. Default DENY. */
|
|
91
|
+
frameOptions?: 'DENY' | 'SAMEORIGIN';
|
|
92
|
+
/** X-Content-Type-Options. Default `nosniff`. */
|
|
93
|
+
contentTypeOptions?: 'nosniff';
|
|
94
|
+
/** Referrer-Policy. Default `strict-origin-when-cross-origin`. */
|
|
95
|
+
referrerPolicy?: string;
|
|
96
|
+
/**
|
|
97
|
+
* T1.1 — Permissions-Policy directive string. When set, replaces the
|
|
98
|
+
* default verbatim (no merge — see ADR-EC-12). Pass `false` to disable
|
|
99
|
+
* the header entirely. Schema-level refinement rejects any string
|
|
100
|
+
* containing CR/LF (EC-3 — CWE-113 HTTP Response Splitting mitigation).
|
|
101
|
+
*/
|
|
102
|
+
permissionsPolicy?: string | false;
|
|
103
|
+
}
|
|
104
|
+
interface SecurityEnv {
|
|
105
|
+
production: boolean;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* T4.1 — Per-request options passed by the SSR pipeline.
|
|
109
|
+
*
|
|
110
|
+
* - `nonce`: when set, the framework substitutes the `'unsafe-inline'`
|
|
111
|
+
* token in `script-src` with `'nonce-<nonce>'`. EC-3 forces
|
|
112
|
+
* `Cache-Control: private, no-store` so a CDN cannot cache the HTML
|
|
113
|
+
* (carrying one nonce) and re-serve it with a freshly-generated CSP
|
|
114
|
+
* header (carrying a different nonce).
|
|
115
|
+
* - `prerender`: when true, the nonce is IGNORED. Prerendered HTML is
|
|
116
|
+
* generated at build time with no nonce in the script tags; mixing a
|
|
117
|
+
* runtime nonce in the header would block every script. EC-4.
|
|
118
|
+
*/
|
|
119
|
+
interface SecurityHeadersOptions {
|
|
120
|
+
nonce?: string;
|
|
121
|
+
prerender?: boolean;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Build the security headers map for a given config + env. Pure function —
|
|
125
|
+
* returned object can be inspected, logged, or applied to a response.
|
|
126
|
+
*/
|
|
127
|
+
declare function buildSecurityHeaders(config: SecurityHeadersConfig, env: SecurityEnv, options?: SecurityHeadersOptions): Record<string, string>;
|
|
128
|
+
|
|
129
|
+
export { type CspMode as C, DEFAULT_CSP as D, type SecurityHeadersConfig as S, DEFAULT_PERMISSIONS_POLICY as a, buildSecurityHeaders as b, type SecurityEnv as c, type SecurityHeadersOptions as d };
|
|
@@ -4,110 +4,7 @@ import { AcpTransport } from '@theokit/agents';
|
|
|
4
4
|
export { InProcessApprovalRequest, InProcessApprovalRequiredError, InProcessAwaitApproval, StreamAgentTurnDeps, StreamAgentTurnInProcessInput, streamAgentTurnInProcess } from '@theokit/agents';
|
|
5
5
|
import { CustomTool as CustomTool$1 } from '@theokit/sdk';
|
|
6
6
|
import { V as VerifyFn } from '../../webhook-types-DGIjjcaI.js';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Provider Resolver — Strategy + Registry pattern (FAANG-grade).
|
|
10
|
-
*
|
|
11
|
-
* Inspiration: Dapr Conversation Registry (`dapr/pkg/components/conversation/registry.go`)
|
|
12
|
-
* + Encore Manager provider array (`encore/runtimes/go/pubsub/manager_internal.go`).
|
|
13
|
-
*
|
|
14
|
-
* Principle: provider routing is the FRAMEWORK's responsibility, not the consumer's — but the
|
|
15
|
-
* consumer still gets to SAY which provider it wants, and it says so in the model id.
|
|
16
|
-
*
|
|
17
|
-
* `provider/model` is the convention every agent in this ecosystem already writes
|
|
18
|
-
* (`anthropic/claude-sonnet-4-6`, `openrouter/anthropic/claude-haiku-4.5`), and it is the one the
|
|
19
|
-
* SDK routes on. Until theokit#326 this resolver ignored it entirely and picked by env-var
|
|
20
|
-
* priority, so an agent that declared `anthropic/...` was handed an OpenRouter key whenever one
|
|
21
|
-
* happened to be present — and every turn failed with `auth_failed (HTTP 401)` against a provider
|
|
22
|
-
* nobody asked for. The declared provider now wins; priority is the fallback for a bare model id.
|
|
23
|
-
*
|
|
24
|
-
* Wire protocol: OpenAI Chat Completions (universal — implemented by every
|
|
25
|
-
* os providers: OpenRouter, Groq, Mistral, Together, Anthropic via proxy, etc).
|
|
26
|
-
*
|
|
27
|
-
* Resolution by priority (FIRST match wins):
|
|
28
|
-
* 1. OPENROUTER_API_KEY → baseUrl=openrouter.ai (multi-model gateway)
|
|
29
|
-
* 2. OPENAI_API_KEY → baseUrl=api.openai.com
|
|
30
|
-
* 3. ANTHROPIC_API_KEY → direct Anthropic (Messages API, not OpenAI-compat)
|
|
31
|
-
*
|
|
32
|
-
* Escape hatch: an explicit `options.apiKey` OVERRIDES auto-resolution
|
|
33
|
-
* (the consumer can force a specific provider if it wants to).
|
|
34
|
-
*/
|
|
35
|
-
/**
|
|
36
|
-
* Provider configuration descriptor — Registry entry shape.
|
|
37
|
-
*
|
|
38
|
-
* @public
|
|
39
|
-
*/
|
|
40
|
-
interface ProviderDescriptor {
|
|
41
|
-
/** Stable name used internally — not exposed on the wire. */
|
|
42
|
-
name: string;
|
|
43
|
-
/** Environment variable that holds the API key for this provider. */
|
|
44
|
-
envKey: string;
|
|
45
|
-
/** Base URL for the provider's OpenAI-compatible (or native) API. */
|
|
46
|
-
baseUrl: string;
|
|
47
|
-
/** Resolution priority (lower = higher priority). FIRST match wins. */
|
|
48
|
-
priority: number;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Resolved provider configuration — output of `resolveProvider()`.
|
|
52
|
-
*
|
|
53
|
-
* @public
|
|
54
|
-
*/
|
|
55
|
-
interface ResolvedProvider {
|
|
56
|
-
name: string;
|
|
57
|
-
apiKey: string;
|
|
58
|
-
baseUrl: string;
|
|
59
|
-
}
|
|
60
|
-
/** Where the announcement goes, and what it may contain. @public */
|
|
61
|
-
interface ResolveOptions {
|
|
62
|
-
/** Receives one line per provider, at most once. NEVER receives the key. */
|
|
63
|
-
announce?: (line: string) => void;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Register a new provider (Registry pattern — runtime extension point).
|
|
67
|
-
* Useful for self-hosted endpoints or custom providers without touching theokit src.
|
|
68
|
-
*
|
|
69
|
-
* @example
|
|
70
|
-
* registerProvider({
|
|
71
|
-
* name: 'self-hosted',
|
|
72
|
-
* envKey: 'SELF_HOSTED_API_KEY',
|
|
73
|
-
* baseUrl: 'https://llm.internal.acme.com/v1',
|
|
74
|
-
* priority: 0, // highest priority
|
|
75
|
-
* })
|
|
76
|
-
*
|
|
77
|
-
* @public
|
|
78
|
-
*/
|
|
79
|
-
declare function registerProvider(descriptor: ProviderDescriptor): void;
|
|
80
|
-
/**
|
|
81
|
-
* Reset registry to DEFAULT_REGISTRY (test-only / dev escape hatch).
|
|
82
|
-
*
|
|
83
|
-
* @public
|
|
84
|
-
*/
|
|
85
|
-
declare function resetProviderRegistry(): void;
|
|
86
|
-
/**
|
|
87
|
-
* Get current registry snapshot (read-only — inspection).
|
|
88
|
-
*
|
|
89
|
-
* @public
|
|
90
|
-
*/
|
|
91
|
-
declare function listProviders(): readonly ProviderDescriptor[];
|
|
92
|
-
/**
|
|
93
|
-
* Resolve the provider for a model.
|
|
94
|
-
*
|
|
95
|
-
* When `modelId` declares a registered provider (`anthropic/…`), THAT provider's key is
|
|
96
|
-
* required — no substitution. Otherwise the registry is walked by priority, first match wins.
|
|
97
|
-
*
|
|
98
|
-
* @returns ResolvedProvider with apiKey + baseUrl + name
|
|
99
|
-
* @throws Error if NO provider env var is set (actionable message)
|
|
100
|
-
*
|
|
101
|
-
* @public
|
|
102
|
-
*/
|
|
103
|
-
declare function resolveProvider(modelId?: string, options?: ResolveOptions): ResolvedProvider;
|
|
104
|
-
/**
|
|
105
|
-
* Try to resolve — does NOT throw. Returns null if no provider available.
|
|
106
|
-
* Useful for graceful degradation (e.g., mock mode).
|
|
107
|
-
*
|
|
108
|
-
* @public
|
|
109
|
-
*/
|
|
110
|
-
declare function tryResolveProvider(modelId?: string): ResolvedProvider | null;
|
|
7
|
+
export { P as ProviderDescriptor, R as ResolvedProvider, l as listProviders, a as registerProvider, b as resetProviderRegistry, r as resolveProvider, t as tryResolveProvider } from '../../provider-resolver-Dx6QuWrw.js';
|
|
111
8
|
|
|
112
9
|
/**
|
|
113
10
|
* M26 (ADR-0041) — `createWorkflowTool`: wrap an SDK `Workflow` as a `CustomTool`.
|
|
@@ -424,4 +321,4 @@ interface StdioStreams {
|
|
|
424
321
|
*/
|
|
425
322
|
declare function serveMcpStdio(mod: unknown, name: string, appResources: readonly AppResource[], streams: StdioStreams): Promise<void>;
|
|
426
323
|
|
|
427
|
-
export { type AcpToolConfig, type AppResource, type AppResourceInput, type ChannelMessage, type ChannelWebhookConfig, type CodeModeApi, type CodeModeConfig, type CodeModePermission, CodeModePermissionDeniedError, type McpResourceContents, type McpResourceDescriptor, NodeAcpTransport, type
|
|
324
|
+
export { type AcpToolConfig, type AppResource, type AppResourceInput, type ChannelMessage, type ChannelWebhookConfig, type CodeModeApi, type CodeModeConfig, type CodeModePermission, CodeModePermissionDeniedError, type McpResourceContents, type McpResourceDescriptor, NodeAcpTransport, type Sandbox, type StdioStreams, type VendorAgentClient, type VendorAgentToolConfig, type WorkflowLike, type WorkflowToolConfig, buildResourceDescriptors, createACPTool, createCodeMode, createVendorAgentTool, createWorkflowTool, defineAppResource, extractAppResources, handleChannelWebhook, handleMcpStdioLine, isChannelPath, parseChannelPath, readAppResource, serveMcpStdio };
|