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.
Files changed (337) hide show
  1. package/README.md +1 -0
  2. package/dist/{actions-virtual-module-YZRZMHAX.js → actions-virtual-module-DSIVNGK7.js} +14 -8
  3. package/dist/{actions-virtual-module-YZRZMHAX.js.map → actions-virtual-module-DSIVNGK7.js.map} +1 -1
  4. package/dist/{actions-virtual-module-E4PISKMB.js → actions-virtual-module-RXL2RJTW.js} +23 -12
  5. package/dist/actions-virtual-module-RXL2RJTW.js.map +1 -0
  6. package/dist/adapters/agent-mount.d.ts +127 -0
  7. package/dist/adapters/agent-mount.js +25 -0
  8. package/dist/adapters/security-headers.d.ts +132 -0
  9. package/dist/adapters/security-headers.js +64 -0
  10. package/dist/adapters/security-headers.js.map +1 -0
  11. package/dist/adapters/web-shim.d.ts +100 -13
  12. package/dist/adapters/web-shim.js +158 -54
  13. package/dist/adapters/web-shim.js.map +1 -1
  14. package/dist/agent-7IPEVCAY.js +15 -0
  15. package/dist/agent-scan-BZa-pagG.d.ts +16 -0
  16. package/dist/{app-typed-client-I4X2UJWW.js → app-typed-client-UTBMJZOE.js} +15 -9
  17. package/dist/app-typed-client-UTBMJZOE.js.map +1 -0
  18. package/dist/{app-typed-client-HLP26EYM.js → app-typed-client-XGDZKH73.js} +24 -13
  19. package/dist/app-typed-client-XGDZKH73.js.map +1 -0
  20. package/dist/aws-lambda-VKMYUMP2.js +261 -0
  21. package/dist/aws-lambda-VKMYUMP2.js.map +1 -0
  22. package/dist/{body-parser-web-4Z2QTPDU.js → body-parser-web-ON5CUTEL.js} +5 -2
  23. package/dist/body-parser-web-ON5CUTEL.js.map +1 -0
  24. package/dist/{body-parser-web-TIOTXPDW.js → body-parser-web-RV2SSAI3.js} +5 -2
  25. package/dist/body-parser-web-RV2SSAI3.js.map +1 -0
  26. package/dist/{build-F2Q5QTSC.js → build-VZODSYIQ.js} +72 -26
  27. package/dist/build-VZODSYIQ.js.map +1 -0
  28. package/dist/{bun-A5B2MJMO.js → bun-L7PP6ID5.js} +105 -13
  29. package/dist/bun-L7PP6ID5.js.map +1 -0
  30. package/dist/{check-45NKUVSQ.js → check-GIPZBFTX.js} +2 -2
  31. package/dist/{chunk-WYHYOYRH.js → chunk-2COPDKIG.js} +468 -203
  32. package/dist/chunk-2COPDKIG.js.map +1 -0
  33. package/dist/chunk-3PBAN2YE.js +146 -0
  34. package/dist/chunk-3PBAN2YE.js.map +1 -0
  35. package/dist/{chunk-HBU2GIMZ.js → chunk-3QPVEJ7D.js} +15 -9
  36. package/dist/chunk-3QPVEJ7D.js.map +1 -0
  37. package/dist/{chunk-IEES3CHD.js → chunk-47MM2JUK.js} +8 -2
  38. package/dist/chunk-47MM2JUK.js.map +1 -0
  39. package/dist/chunk-4X6H2BXP.js +108 -0
  40. package/dist/chunk-4X6H2BXP.js.map +1 -0
  41. package/dist/{chunk-A7JBF5FO.js → chunk-5K4TDLRG.js} +8 -5
  42. package/dist/chunk-5K4TDLRG.js.map +1 -0
  43. package/dist/chunk-5YPXXSYY.js +181 -0
  44. package/dist/chunk-5YPXXSYY.js.map +1 -0
  45. package/dist/{chunk-YGAXV5HR.js → chunk-6J4JWHDJ.js} +191 -112
  46. package/dist/chunk-6J4JWHDJ.js.map +1 -0
  47. package/dist/{chunk-FTFN4MYN.js → chunk-7AEBH52I.js} +639 -516
  48. package/dist/chunk-7AEBH52I.js.map +1 -0
  49. package/dist/chunk-7UZZHCRN.js +21 -0
  50. package/dist/chunk-7UZZHCRN.js.map +1 -0
  51. package/dist/{chunk-MTEWLGVY.js → chunk-BPYMC7SU.js} +4 -48
  52. package/dist/chunk-BPYMC7SU.js.map +1 -0
  53. package/dist/chunk-BU6RJPPJ.js +421 -0
  54. package/dist/chunk-BU6RJPPJ.js.map +1 -0
  55. package/dist/{chunk-FB2HBNIC.js → chunk-BX6EUYHU.js} +6 -2
  56. package/dist/chunk-BX6EUYHU.js.map +1 -0
  57. package/dist/chunk-CHTAWXC2.js +18 -0
  58. package/dist/chunk-CHTAWXC2.js.map +1 -0
  59. package/dist/chunk-D4VP2QPR.js +16 -0
  60. package/dist/chunk-D4VP2QPR.js.map +1 -0
  61. package/dist/{chunk-YXG2SGQ3.js → chunk-DHAD2O3S.js} +6 -6
  62. package/dist/chunk-DHAD2O3S.js.map +1 -0
  63. package/dist/chunk-DOI4G4X3.js +428 -0
  64. package/dist/chunk-DOI4G4X3.js.map +1 -0
  65. package/dist/chunk-E43VJ3E5.js +188 -0
  66. package/dist/chunk-E43VJ3E5.js.map +1 -0
  67. package/dist/{chunk-47CINLWF.js → chunk-EDWEYQRG.js} +2 -2
  68. package/dist/chunk-EVZKNA2W.js +110 -0
  69. package/dist/chunk-EVZKNA2W.js.map +1 -0
  70. package/dist/chunk-FD4ZDTQ6.js +181 -0
  71. package/dist/chunk-FD4ZDTQ6.js.map +1 -0
  72. package/dist/chunk-FDOOBTXJ.js +17 -0
  73. package/dist/chunk-FDOOBTXJ.js.map +1 -0
  74. package/dist/chunk-FH3SQR6P.js +275 -0
  75. package/dist/chunk-FH3SQR6P.js.map +1 -0
  76. package/dist/{chunk-T5C46IIU.js → chunk-FMTRNQQ7.js} +28 -269
  77. package/dist/chunk-FMTRNQQ7.js.map +1 -0
  78. package/dist/chunk-H53KNS6Q.js +513 -0
  79. package/dist/chunk-H53KNS6Q.js.map +1 -0
  80. package/dist/chunk-HJHGTFEJ.js +23 -0
  81. package/dist/chunk-HJHGTFEJ.js.map +1 -0
  82. package/dist/{chunk-LXAESF4Y.js → chunk-HK4AZBKX.js} +7 -4
  83. package/dist/chunk-HK4AZBKX.js.map +1 -0
  84. package/dist/chunk-IRQGAC4L.js +52 -0
  85. package/dist/chunk-IRQGAC4L.js.map +1 -0
  86. package/dist/{chunk-FNTLKHZ7.js → chunk-JDN5SAAD.js} +7 -4
  87. package/dist/chunk-JDN5SAAD.js.map +1 -0
  88. package/dist/{chunk-XALU5LCU.js → chunk-JKF25N73.js} +555 -147
  89. package/dist/chunk-JKF25N73.js.map +1 -0
  90. package/dist/{chunk-BHOTGS7N.js → chunk-KI4DOTN4.js} +25 -2
  91. package/dist/chunk-KI4DOTN4.js.map +1 -0
  92. package/dist/chunk-KOS567NB.js +790 -0
  93. package/dist/chunk-KOS567NB.js.map +1 -0
  94. package/dist/{chunk-OOBYPCZC.js → chunk-KTS6G26H.js} +304 -195
  95. package/dist/chunk-KTS6G26H.js.map +1 -0
  96. package/dist/{chunk-ZB7D62OA.js → chunk-KUZVRJ7M.js} +3 -3
  97. package/dist/chunk-L4VFNFDL.js +248 -0
  98. package/dist/chunk-L4VFNFDL.js.map +1 -0
  99. package/dist/chunk-M2WC5MF7.js +127 -0
  100. package/dist/chunk-M2WC5MF7.js.map +1 -0
  101. package/dist/chunk-N42ZWWOW.js +273 -0
  102. package/dist/chunk-N42ZWWOW.js.map +1 -0
  103. package/dist/chunk-OGLS76RN.js +43 -0
  104. package/dist/chunk-OGLS76RN.js.map +1 -0
  105. package/dist/{chunk-7LVM22VG.js → chunk-OQCRCXCP.js} +6 -6
  106. package/dist/chunk-OQCRCXCP.js.map +1 -0
  107. package/dist/{chunk-OLGPYOLO.js → chunk-P6OS7652.js} +5 -2
  108. package/dist/chunk-P6OS7652.js.map +1 -0
  109. package/dist/{chunk-O3JIAU3V.js → chunk-PF3YM6NY.js} +157 -103
  110. package/dist/chunk-PF3YM6NY.js.map +1 -0
  111. package/dist/{chunk-NTWNO24W.js → chunk-PLUHPNGA.js} +266 -110
  112. package/dist/chunk-PLUHPNGA.js.map +1 -0
  113. package/dist/chunk-Q5L5EGWZ.js +26 -0
  114. package/dist/chunk-Q5L5EGWZ.js.map +1 -0
  115. package/dist/{chunk-AATSV4UV.js → chunk-QTHVHNJJ.js} +6 -36
  116. package/dist/chunk-QTHVHNJJ.js.map +1 -0
  117. package/dist/{chunk-KD5G3YXI.js → chunk-RARK7JBR.js} +39 -10
  118. package/dist/chunk-RARK7JBR.js.map +1 -0
  119. package/dist/chunk-RJJF457I.js +111 -0
  120. package/dist/chunk-RJJF457I.js.map +1 -0
  121. package/dist/chunk-RPET332G.js +84 -0
  122. package/dist/chunk-RPET332G.js.map +1 -0
  123. package/dist/{chunk-646CA6RV.js → chunk-RQW5YMH7.js} +12 -4
  124. package/dist/chunk-RQW5YMH7.js.map +1 -0
  125. package/dist/chunk-U5PWXS3J.js +39 -0
  126. package/dist/chunk-U5PWXS3J.js.map +1 -0
  127. package/dist/{chunk-RWNSW4FM.js → chunk-UMNXCU3K.js} +12 -6
  128. package/dist/{chunk-RWNSW4FM.js.map → chunk-UMNXCU3K.js.map} +1 -1
  129. package/dist/{chunk-DS5MCU2X.js → chunk-URCXSUI3.js} +9 -9
  130. package/dist/chunk-VI7ZANB3.js +193 -0
  131. package/dist/chunk-VI7ZANB3.js.map +1 -0
  132. package/dist/chunk-VQPHPQ5L.js +14 -0
  133. package/dist/chunk-VQPHPQ5L.js.map +1 -0
  134. package/dist/chunk-WNJTJRM6.js +147 -0
  135. package/dist/chunk-WNJTJRM6.js.map +1 -0
  136. package/dist/{chunk-BMHS4WAN.js → chunk-XS7EX55U.js} +156 -42
  137. package/dist/chunk-XS7EX55U.js.map +1 -0
  138. package/dist/chunk-YN4W7LCX.js +31 -0
  139. package/dist/chunk-YN4W7LCX.js.map +1 -0
  140. package/dist/chunk-YSJOZEI6.js +1 -0
  141. package/dist/{chunk-JA2ZAT5Q.js → chunk-Z4PJMZLM.js} +2 -2
  142. package/dist/chunk-Z4PJMZLM.js.map +1 -0
  143. package/dist/{chunk-WSXNGF7X.js → chunk-ZNZISJDZ.js} +6 -2
  144. package/dist/chunk-ZNZISJDZ.js.map +1 -0
  145. package/dist/chunk-ZWN3AODA.js +11 -0
  146. package/dist/chunk-ZWN3AODA.js.map +1 -0
  147. package/dist/cli/index.js +25 -10
  148. package/dist/cli/index.js.map +1 -1
  149. package/dist/client/core.d.ts +1 -1
  150. package/dist/client/core.js +2 -0
  151. package/dist/client/core.js.map +1 -1
  152. package/dist/client/index.d.ts +44 -10
  153. package/dist/client/index.js +35 -0
  154. package/dist/client/index.js.map +1 -1
  155. package/dist/cloudflare-SIG42OIW.js +335 -0
  156. package/dist/cloudflare-SIG42OIW.js.map +1 -0
  157. package/dist/config-support-WQHQIJTA.js +104 -0
  158. package/dist/config-support-WQHQIJTA.js.map +1 -0
  159. package/dist/{csrf-BBrEZSBW.d.ts → csrf-Dgot9qSM.d.ts} +1 -1
  160. package/dist/deno-deploy-LQAYOOPW.js +196 -0
  161. package/dist/deno-deploy-LQAYOOPW.js.map +1 -0
  162. package/dist/{dev-CDFPXISP.js → dev-3UQVD2W6.js} +29 -18
  163. package/dist/dev-3UQVD2W6.js.map +1 -0
  164. package/dist/{dev-emit-GWD6IXV7.js → dev-emit-BFNMDCPB.js} +5 -5
  165. package/dist/{dev-emit-NBT6JD7R.js → dev-emit-MVAJAFGX.js} +5 -3
  166. package/dist/dev-emit-MVAJAFGX.js.map +1 -0
  167. package/dist/engine-singleton-X4R7AZBJ.js +315 -0
  168. package/dist/engine-singleton-X4R7AZBJ.js.map +1 -0
  169. package/dist/{generate-Y3GWM57K.js → generate-EN6EDITF.js} +43 -4
  170. package/dist/generate-EN6EDITF.js.map +1 -0
  171. package/dist/index-DctfHtv-.d.ts +1058 -0
  172. package/dist/index.d.ts +8 -4
  173. package/dist/index.js +25 -13
  174. package/dist/index.js.map +1 -1
  175. package/dist/{info-QXZW722N.js → info-Y55RWS42.js} +8 -6
  176. package/dist/{info-QXZW722N.js.map → info-Y55RWS42.js.map} +1 -1
  177. package/dist/{internal-api-FBK2YXSI.js → internal-api-4X6NDS2F.js} +23 -12
  178. package/dist/{internal-api-ZCJWJ5EC.js → internal-api-XQHU5JKY.js} +31 -16
  179. package/dist/internal-api-XQHU5JKY.js.map +1 -0
  180. package/dist/load-config-4ATXQUN3.js +16 -0
  181. package/dist/match-DmGgxjIU.d.ts +44 -0
  182. package/dist/{mcp-KTYP4ZON.js → mcp-IQRHFP3Y.js} +7 -7
  183. package/dist/netlify-C2IRCZKI.js +245 -0
  184. package/dist/netlify-C2IRCZKI.js.map +1 -0
  185. package/dist/node-OSVPYQ3D.js +10 -0
  186. package/dist/nonce-BXt7Qu_C.d.ts +31 -0
  187. package/dist/observability-bootstrap-LERYDHKY.js +16 -0
  188. package/dist/{openapi-OUXNB2F2.js → openapi-VFPEZSRI.js} +13 -11
  189. package/dist/{openapi-OUXNB2F2.js.map → openapi-VFPEZSRI.js.map} +1 -1
  190. package/dist/{plugin-runner-DHVr1cC5.d.ts → plugin-runner-BVMOSxvb.d.ts} +1 -1
  191. package/dist/{plugin-types-4VN1GMqV.d.ts → plugin-types-BUVfUQ0V.d.ts} +1 -1
  192. package/dist/preview-BT47VMIB.js +23 -0
  193. package/dist/preview-BT47VMIB.js.map +1 -0
  194. package/dist/provider-resolver-Dx6QuWrw.d.ts +128 -0
  195. package/dist/registry-KBZDCFVQ.js +23 -0
  196. package/dist/route-config-Cm_ZMA1C.d.ts +72 -0
  197. package/dist/route-policy-BxOycCDq.d.ts +65 -0
  198. package/dist/router/element-scroll-restoration.d.ts +28 -0
  199. package/dist/router/element-scroll-restoration.js +96 -0
  200. package/dist/router/element-scroll-restoration.js.map +1 -0
  201. package/dist/{routes-NJR4ISCT.js → routes-BPLU3ISV.js} +11 -9
  202. package/dist/{routes-NJR4ISCT.js.map → routes-BPLU3ISV.js.map} +1 -1
  203. package/dist/{scan-7MJC6PYU.js → scan-YJEE4KQK.js} +2 -2
  204. package/dist/{schema-DNIT7JQX.js → schema-SOAD43RQ.js} +7 -5
  205. package/dist/schemas-4AXHQMV3.js +25 -0
  206. package/dist/schemas-4AXHQMV3.js.map +1 -0
  207. package/dist/security-headers-Ccj7ncNx.d.ts +129 -0
  208. package/dist/server/agent/index.d.ts +2 -105
  209. package/dist/server/agent/index.js +1 -1
  210. package/dist/server/auth/index.d.ts +2 -21
  211. package/dist/server/auth/index.js +3 -2
  212. package/dist/server/cron/index.js +4 -3
  213. package/dist/server/define/index.d.ts +43 -57
  214. package/dist/server/define/index.js +10 -1
  215. package/dist/server/http/index.d.ts +7 -5
  216. package/dist/server/http/index.js +57 -12
  217. package/dist/server/index.d.ts +47 -439
  218. package/dist/server/index.js +120 -201
  219. package/dist/server/index.js.map +1 -1
  220. package/dist/server/jobs/index.js +4 -3
  221. package/dist/server/observability/index.d.ts +109 -35
  222. package/dist/server/observability/index.js +11 -7
  223. package/dist/server/plugins/index.d.ts +3 -3
  224. package/dist/server/scan/index.d.ts +47 -12
  225. package/dist/server/scan/index.js +13 -4
  226. package/dist/server/security/index.d.ts +61 -103
  227. package/dist/server/security/index.js +15 -6
  228. package/dist/server/webhook/index.d.ts +90 -3
  229. package/dist/server/webhook/index.js +12 -2
  230. package/dist/server-boundary-2WFT546S.js +149 -0
  231. package/dist/server-boundary-2WFT546S.js.map +1 -0
  232. package/dist/server-boundary-A67OPRKO.js +134 -0
  233. package/dist/server-boundary-A67OPRKO.js.map +1 -0
  234. package/dist/{services-typed-client-P4JERLBL.js → services-typed-client-XGT5SUUN.js} +2 -2
  235. package/dist/{start-25OV2CAK.js → start-3K3C4Z2X.js} +224 -161
  236. package/dist/start-3K3C4Z2X.js.map +1 -0
  237. package/dist/{static-RTO637XW.js → static-SVDWIOXJ.js} +24 -13
  238. package/dist/static-SVDWIOXJ.js.map +1 -0
  239. package/dist/{theo-cloud-UZ3GINRU.js → theo-cloud-3ET4G5T6.js} +9 -2
  240. package/dist/theo-cloud-3ET4G5T6.js.map +1 -0
  241. package/dist/vercel-BMCQKCWE.js +277 -0
  242. package/dist/vercel-BMCQKCWE.js.map +1 -0
  243. package/dist/vite-plugin/index.js +25 -13
  244. package/dist/vite-plugin-USXUIV3H.js +43 -0
  245. package/dist/vite-plugin-USXUIV3H.js.map +1 -0
  246. package/package.json +19 -6
  247. package/dist/actions-virtual-module-E4PISKMB.js.map +0 -1
  248. package/dist/agent-XAQCUQNB.js +0 -15
  249. package/dist/app-typed-client-HLP26EYM.js.map +0 -1
  250. package/dist/app-typed-client-I4X2UJWW.js.map +0 -1
  251. package/dist/aws-lambda-KES4MFJV.js +0 -172
  252. package/dist/aws-lambda-KES4MFJV.js.map +0 -1
  253. package/dist/body-parser-web-4Z2QTPDU.js.map +0 -1
  254. package/dist/body-parser-web-TIOTXPDW.js.map +0 -1
  255. package/dist/build-F2Q5QTSC.js.map +0 -1
  256. package/dist/bun-A5B2MJMO.js.map +0 -1
  257. package/dist/chunk-646CA6RV.js.map +0 -1
  258. package/dist/chunk-7LVM22VG.js.map +0 -1
  259. package/dist/chunk-A7JBF5FO.js.map +0 -1
  260. package/dist/chunk-AATSV4UV.js.map +0 -1
  261. package/dist/chunk-AM3QABW5.js +0 -161
  262. package/dist/chunk-AM3QABW5.js.map +0 -1
  263. package/dist/chunk-AXKUA57G.js +0 -94
  264. package/dist/chunk-AXKUA57G.js.map +0 -1
  265. package/dist/chunk-BHOTGS7N.js.map +0 -1
  266. package/dist/chunk-BMHS4WAN.js.map +0 -1
  267. package/dist/chunk-CMYSHZFT.js +0 -422
  268. package/dist/chunk-CMYSHZFT.js.map +0 -1
  269. package/dist/chunk-DQIPV7L5.js +0 -118
  270. package/dist/chunk-DQIPV7L5.js.map +0 -1
  271. package/dist/chunk-FB2HBNIC.js.map +0 -1
  272. package/dist/chunk-FNTLKHZ7.js.map +0 -1
  273. package/dist/chunk-FTFN4MYN.js.map +0 -1
  274. package/dist/chunk-HBU2GIMZ.js.map +0 -1
  275. package/dist/chunk-IEES3CHD.js.map +0 -1
  276. package/dist/chunk-JA2ZAT5Q.js.map +0 -1
  277. package/dist/chunk-KD5G3YXI.js.map +0 -1
  278. package/dist/chunk-KTKTHIUF.js +0 -405
  279. package/dist/chunk-KTKTHIUF.js.map +0 -1
  280. package/dist/chunk-LNVMHQ2Z.js +0 -54
  281. package/dist/chunk-LNVMHQ2Z.js.map +0 -1
  282. package/dist/chunk-LXAESF4Y.js.map +0 -1
  283. package/dist/chunk-MTEWLGVY.js.map +0 -1
  284. package/dist/chunk-NTWNO24W.js.map +0 -1
  285. package/dist/chunk-O3JIAU3V.js.map +0 -1
  286. package/dist/chunk-OLGPYOLO.js.map +0 -1
  287. package/dist/chunk-OOBYPCZC.js.map +0 -1
  288. package/dist/chunk-T5C46IIU.js.map +0 -1
  289. package/dist/chunk-U267AOWS.js +0 -28
  290. package/dist/chunk-U267AOWS.js.map +0 -1
  291. package/dist/chunk-UW2TEAGR.js +0 -77
  292. package/dist/chunk-UW2TEAGR.js.map +0 -1
  293. package/dist/chunk-WPJOTQA5.js +0 -1
  294. package/dist/chunk-WSXNGF7X.js.map +0 -1
  295. package/dist/chunk-WYHYOYRH.js.map +0 -1
  296. package/dist/chunk-XALU5LCU.js.map +0 -1
  297. package/dist/chunk-XR74JD4M.js +0 -457
  298. package/dist/chunk-XR74JD4M.js.map +0 -1
  299. package/dist/chunk-YGAXV5HR.js.map +0 -1
  300. package/dist/chunk-YXG2SGQ3.js.map +0 -1
  301. package/dist/cloudflare-IN2WB7FZ.js +0 -122
  302. package/dist/cloudflare-IN2WB7FZ.js.map +0 -1
  303. package/dist/deno-deploy-LYXQEJ6A.js +0 -107
  304. package/dist/deno-deploy-LYXQEJ6A.js.map +0 -1
  305. package/dist/dev-CDFPXISP.js.map +0 -1
  306. package/dist/dev-emit-NBT6JD7R.js.map +0 -1
  307. package/dist/generate-Y3GWM57K.js.map +0 -1
  308. package/dist/index-D_PxPXgQ.d.ts +0 -575
  309. package/dist/load-config-FIWNKOJO.js +0 -14
  310. package/dist/match-CfbEFRG4.d.ts +0 -26
  311. package/dist/netlify-DLEOCFAD.js +0 -150
  312. package/dist/netlify-DLEOCFAD.js.map +0 -1
  313. package/dist/node-QXYSUWQ4.js +0 -10
  314. package/dist/registry-S7OMF3OS.js +0 -23
  315. package/dist/start-25OV2CAK.js.map +0 -1
  316. package/dist/static-RTO637XW.js.map +0 -1
  317. package/dist/theo-cloud-UZ3GINRU.js.map +0 -1
  318. package/dist/vercel-6D6EZUVD.js +0 -133
  319. package/dist/vercel-6D6EZUVD.js.map +0 -1
  320. package/dist/vite-plugin-RJFKLF2U.js +0 -36
  321. /package/dist/{chunk-WPJOTQA5.js.map → adapters/agent-mount.js.map} +0 -0
  322. /package/dist/{agent-XAQCUQNB.js.map → agent-7IPEVCAY.js.map} +0 -0
  323. /package/dist/{check-45NKUVSQ.js.map → check-GIPZBFTX.js.map} +0 -0
  324. /package/dist/{chunk-47CINLWF.js.map → chunk-EDWEYQRG.js.map} +0 -0
  325. /package/dist/{chunk-ZB7D62OA.js.map → chunk-KUZVRJ7M.js.map} +0 -0
  326. /package/dist/{chunk-DS5MCU2X.js.map → chunk-URCXSUI3.js.map} +0 -0
  327. /package/dist/{internal-api-ZCJWJ5EC.js.map → chunk-YSJOZEI6.js.map} +0 -0
  328. /package/dist/{dev-emit-GWD6IXV7.js.map → dev-emit-BFNMDCPB.js.map} +0 -0
  329. /package/dist/{internal-api-FBK2YXSI.js.map → internal-api-4X6NDS2F.js.map} +0 -0
  330. /package/dist/{load-config-FIWNKOJO.js.map → load-config-4ATXQUN3.js.map} +0 -0
  331. /package/dist/{mcp-KTYP4ZON.js.map → mcp-IQRHFP3Y.js.map} +0 -0
  332. /package/dist/{node-QXYSUWQ4.js.map → node-OSVPYQ3D.js.map} +0 -0
  333. /package/dist/{scan-7MJC6PYU.js.map → observability-bootstrap-LERYDHKY.js.map} +0 -0
  334. /package/dist/{registry-S7OMF3OS.js.map → registry-KBZDCFVQ.js.map} +0 -0
  335. /package/dist/{schema-DNIT7JQX.js.map → scan-YJEE4KQK.js.map} +0 -0
  336. /package/dist/{vite-plugin-RJFKLF2U.js.map → schema-SOAD43RQ.js.map} +0 -0
  337. /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-BMHS4WAN.js";
17
- import "./chunk-A7JBF5FO.js";
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-NJR4ISCT.js.map
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":";;;;;;;;;;;;;;;;;;;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
+ {"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":[]}
@@ -2,8 +2,8 @@
2
2
  import "tsx/esm";
3
3
  import {
4
4
  scanRoutes
5
- } from "./chunk-IEES3CHD.js";
5
+ } from "./chunk-47MM2JUK.js";
6
6
  export {
7
7
  scanRoutes
8
8
  };
9
- //# sourceMappingURL=scan-7MJC6PYU.js.map
9
+ //# sourceMappingURL=scan-YJEE4KQK.js.map
@@ -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
- theoConfigSchema
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-DNIT7JQX.js.map
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 ProviderDescriptor, type ResolvedProvider, type Sandbox, type StdioStreams, type VendorAgentClient, type VendorAgentToolConfig, type WorkflowLike, type WorkflowToolConfig, buildResourceDescriptors, createACPTool, createCodeMode, createVendorAgentTool, createWorkflowTool, defineAppResource, extractAppResources, handleChannelWebhook, handleMcpStdioLine, isChannelPath, listProviders, parseChannelPath, readAppResource, registerProvider, resetProviderRegistry, resolveProvider, serveMcpStdio, tryResolveProvider };
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 };
@@ -25,7 +25,7 @@ import {
25
25
  resetProviderRegistry,
26
26
  resolveProvider,
27
27
  tryResolveProvider
28
- } from "../../chunk-AXKUA57G.js";
28
+ } from "../../chunk-3PBAN2YE.js";
29
29
  import "../../chunk-SAFGDIPQ.js";
30
30
  import "../../chunk-XTHN6JBX.js";
31
31
  export {