@farm.js/core 0.1.31 → 0.1.35

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 (352) hide show
  1. package/README.md +1 -1
  2. package/dist/agent-runtime.cjs +70 -15
  3. package/dist/agent-runtime.d.mts +4 -5
  4. package/dist/agent-runtime.d.ts +4 -5
  5. package/dist/agent-runtime.mjs +59 -4
  6. package/dist/api/route-manager.cjs +17 -14
  7. package/dist/api/route-manager.d.mts +6 -7
  8. package/dist/api/route-manager.d.ts +6 -7
  9. package/dist/api/route-manager.mjs +16 -13
  10. package/dist/api/runtime.cjs +12 -8
  11. package/dist/api/runtime.d.mts +4 -5
  12. package/dist/api/runtime.d.ts +4 -5
  13. package/dist/api/runtime.mjs +12 -8
  14. package/dist/api.cjs +20 -17
  15. package/dist/api.d.mts +7 -8
  16. package/dist/api.d.ts +7 -8
  17. package/dist/api.mjs +19 -16
  18. package/dist/{app-sUJ3jnTZ.d.ts → app-BXB3JZYc.d.ts} +38 -12
  19. package/dist/{app-DAuUTIZf.d.mts → app-D_j9AAVL.d.mts} +38 -12
  20. package/dist/app-markdown.cjs +8 -6
  21. package/dist/app-markdown.d.mts +6 -7
  22. package/dist/app-markdown.d.ts +6 -7
  23. package/dist/app-markdown.mjs +7 -5
  24. package/dist/cache.cjs +2 -2
  25. package/dist/cache.d.mts +10 -1
  26. package/dist/cache.d.ts +10 -1
  27. package/dist/cache.mjs +1 -1
  28. package/dist/{chunk-BXFWA23T.mjs → chunk-22LTEMGQ.mjs} +3 -3
  29. package/dist/{chunk-YZTASLPQ.cjs → chunk-27ZWSI3W.cjs} +2 -2
  30. package/dist/{chunk-WBIH66JK.mjs → chunk-2ELDTQRN.mjs} +5 -2
  31. package/dist/{chunk-K7CELQLK.cjs → chunk-2F2ER724.cjs} +54 -29
  32. package/dist/{chunk-O3DTUAX2.mjs → chunk-2G2NNLE2.mjs} +6 -77
  33. package/dist/{chunk-NRVGEI5I.mjs → chunk-2NNMOPDN.mjs} +4 -210
  34. package/dist/{chunk-CTV2TTNP.cjs → chunk-3BHT4WMP.cjs} +16 -87
  35. package/dist/chunk-3BU22U3M.cjs +237 -0
  36. package/dist/{chunk-MM5D6VLP.mjs → chunk-3KZS4SUS.mjs} +33 -14
  37. package/dist/{chunk-VA62MHFV.mjs → chunk-3PXS2MHU.mjs} +1 -1
  38. package/dist/chunk-3SDFA7UF.cjs +701 -0
  39. package/dist/{chunk-4IEPYMHF.mjs → chunk-3UEVPCGW.mjs} +1 -1
  40. package/dist/{chunk-MXDTKXO6.cjs → chunk-3UH7MRCP.cjs} +73 -26
  41. package/dist/{chunk-7QOCTYBS.mjs → chunk-4JHOT46A.mjs} +37 -1
  42. package/dist/{chunk-6L6DQR5W.mjs → chunk-4KU5Q7C2.mjs} +917 -305
  43. package/dist/{chunk-3FCFQP5V.cjs → chunk-4MMGO7YW.cjs} +25 -25
  44. package/dist/{chunk-5HGR3W6O.mjs → chunk-5SJWVY6R.mjs} +8 -0
  45. package/dist/{chunk-KZLND3D2.cjs → chunk-62XKI4Z3.cjs} +7 -5
  46. package/dist/{chunk-FJZ3DQLK.mjs → chunk-6DU6UFUE.mjs} +13 -12
  47. package/dist/{chunk-TEN4FIZU.mjs → chunk-6ETPZTJI.mjs} +513 -3
  48. package/dist/{chunk-VUMAE7NC.mjs → chunk-6TJOML4E.mjs} +92 -31
  49. package/dist/{chunk-3ATMYLLJ.mjs → chunk-6WCPV6G2.mjs} +1 -1
  50. package/dist/{chunk-FYRBX5IY.cjs → chunk-73MC7ZL6.cjs} +2 -2
  51. package/dist/chunk-75RZHGLS.cjs +135 -0
  52. package/dist/{chunk-QZRVZSPN.cjs → chunk-77GNHH2Z.cjs} +3 -3
  53. package/dist/{chunk-FXUUWYAX.cjs → chunk-7GLPRTTF.cjs} +12 -2
  54. package/dist/{chunk-A777V5WU.cjs → chunk-7L5V3KQO.cjs} +2 -2
  55. package/dist/{chunk-4ZQQL4IU.mjs → chunk-AHGECQEW.mjs} +1 -1
  56. package/dist/{chunk-RG3ZOTG5.cjs → chunk-AI7QMY7O.cjs} +10 -3
  57. package/dist/{chunk-YMCXWPWK.mjs → chunk-BCMSYSN2.mjs} +4 -1
  58. package/dist/{chunk-I6XDAKWQ.mjs → chunk-BTHHUD7Q.mjs} +14 -0
  59. package/dist/{chunk-LI2LMOLR.mjs → chunk-C35ZBVRD.mjs} +12 -3
  60. package/dist/chunk-C4SPBWFM.cjs +26 -0
  61. package/dist/{chunk-YQVSHTMR.mjs → chunk-CP6X4AEU.mjs} +1 -1
  62. package/dist/{chunk-QZCT2CQ4.mjs → chunk-CXEN47J3.mjs} +64 -2
  63. package/dist/{chunk-WNLBF77X.cjs → chunk-D227TIEN.cjs} +28 -16
  64. package/dist/{chunk-ROUTX2E5.cjs → chunk-DBNKI4NF.cjs} +12 -3
  65. package/dist/{chunk-J3LOGE4T.cjs → chunk-DQQOKWYA.cjs} +5 -5
  66. package/dist/chunk-E5GNDG5F.mjs +701 -0
  67. package/dist/{chunk-X7KZBF63.cjs → chunk-EFCQPQMG.cjs} +40 -4
  68. package/dist/{chunk-K3F2E6GS.cjs → chunk-EJQT6KZN.cjs} +2 -2
  69. package/dist/{chunk-3LUF2PE2.cjs → chunk-EK4QAEFZ.cjs} +67 -5
  70. package/dist/{chunk-VVBO3QH7.mjs → chunk-ENLZ4R3Y.mjs} +10 -1
  71. package/dist/{chunk-KJ2TIHZZ.cjs → chunk-EUV4YR3V.cjs} +3 -2
  72. package/dist/{chunk-E76XC6ZG.mjs → chunk-EZDQRNQ7.mjs} +2 -2
  73. package/dist/{chunk-TOVMYGYW.mjs → chunk-F2SE2VDO.mjs} +1 -1
  74. package/dist/{chunk-MNUGPHLN.mjs → chunk-F6Z3Y5KL.mjs} +5 -3
  75. package/dist/{chunk-DFLLARUK.cjs → chunk-F7JZENPF.cjs} +35 -34
  76. package/dist/{chunk-BSPQVJ4A.mjs → chunk-FDR64H6B.mjs} +13 -0
  77. package/dist/{chunk-5OVTOKGH.cjs → chunk-FFFW3OQ7.cjs} +2 -2
  78. package/dist/{chunk-D4JE5NNV.cjs → chunk-FNO7A7CM.cjs} +5 -5
  79. package/dist/{chunk-Z5HIWVDP.cjs → chunk-FTFYRMQQ.cjs} +80 -91
  80. package/dist/chunk-FZ6YYU2W.mjs +65 -0
  81. package/dist/{chunk-X7WVQMIB.mjs → chunk-G5RT7EXW.mjs} +11 -5
  82. package/dist/{chunk-IXUY2F5U.mjs → chunk-GCXWJJKH.mjs} +4 -7
  83. package/dist/{chunk-ES4B2IXW.cjs → chunk-GFHLGIYC.cjs} +8 -8
  84. package/dist/{chunk-SORB3MAR.cjs → chunk-GQ3Z3IZI.cjs} +17 -17
  85. package/dist/{chunk-75WGQVQA.cjs → chunk-HITLGIAO.cjs} +10 -1
  86. package/dist/{chunk-HBTUGXHS.cjs → chunk-HLJ6MBUZ.cjs} +7 -4
  87. package/dist/{chunk-JLCQGPXE.mjs → chunk-HMIJDL7S.mjs} +51 -62
  88. package/dist/{chunk-F6XEGFHO.mjs → chunk-HUMR6LSU.mjs} +11 -1
  89. package/dist/{chunk-IMB4PIAR.cjs → chunk-ICUQICNC.cjs} +1441 -828
  90. package/dist/{chunk-ZCU4NZ3M.cjs → chunk-IE7XCHH3.cjs} +4 -4
  91. package/dist/{chunk-I26CZYPV.cjs → chunk-IHNIDL6H.cjs} +50 -7
  92. package/dist/{chunk-2FQHH5SC.mjs → chunk-IHNMMXHV.mjs} +49 -24
  93. package/dist/{chunk-YVGAEAA5.cjs → chunk-IPXLADVO.cjs} +522 -12
  94. package/dist/{chunk-VHJGDMCG.cjs → chunk-IWZKTWHZ.cjs} +2 -2
  95. package/dist/chunk-JG6DJF5A.mjs +238 -0
  96. package/dist/{chunk-KROWKCUH.cjs → chunk-JGLC4TO3.cjs} +8 -1
  97. package/dist/{chunk-5TISYEQF.mjs → chunk-JM5XPKWH.mjs} +10 -3
  98. package/dist/{chunk-BJJATPEC.mjs → chunk-KN7K4VQN.mjs} +1 -1
  99. package/dist/{chunk-WPYFSQKK.cjs → chunk-KNBBQHO2.cjs} +15 -1
  100. package/dist/{chunk-XWAWFQFS.cjs → chunk-KXWRO25S.cjs} +7 -4
  101. package/dist/chunk-LSKZMJMP.cjs +65 -0
  102. package/dist/{chunk-2N5PX3LS.mjs → chunk-LYV44OIR.mjs} +7 -1
  103. package/dist/chunk-M7MKQXAF.cjs +87 -0
  104. package/dist/{chunk-IV6CQY7O.mjs → chunk-MSSFIQGM.mjs} +63 -13
  105. package/dist/{chunk-KH7BN726.cjs → chunk-N4UOK6ZI.cjs} +8 -2
  106. package/dist/{chunk-JNGIWIY6.mjs → chunk-NPC7VWJE.mjs} +2 -2
  107. package/dist/chunk-NRDBW4MP.mjs +45 -0
  108. package/dist/{chunk-ILWLPEVO.mjs → chunk-NRSN7G7E.mjs} +2 -2
  109. package/dist/chunk-OFZUJMCU.mjs +601 -0
  110. package/dist/{chunk-L4DVIHOC.mjs → chunk-OKZUAXHF.mjs} +1 -1
  111. package/dist/{chunk-EM6SBQKM.cjs → chunk-OMVAU7NT.cjs} +27 -2
  112. package/dist/{chunk-AHAJGAYD.mjs → chunk-PDOCJ6RY.mjs} +2 -2
  113. package/dist/{chunk-IFI5FXEZ.cjs → chunk-PFQKNERH.cjs} +562 -251
  114. package/dist/{chunk-S5GDHOE4.mjs → chunk-PZNL3WEG.mjs} +48 -5
  115. package/dist/{chunk-GZYH4OER.mjs → chunk-Q3VLETLE.mjs} +2 -2
  116. package/dist/{chunk-WG2KHOMN.mjs → chunk-QAU5JD57.mjs} +571 -260
  117. package/dist/{chunk-FV45CKBC.mjs → chunk-QCFBDFRS.mjs} +1 -1
  118. package/dist/{chunk-75BRBIFP.cjs → chunk-QCVE2OCI.cjs} +5 -8
  119. package/dist/{chunk-6ZCMSZ5U.mjs → chunk-QE6VAKLT.mjs} +1 -1
  120. package/dist/{chunk-QG5HNS7P.mjs → chunk-QORUJDIV.mjs} +2 -2
  121. package/dist/chunk-RHAZ22ZN.mjs +87 -0
  122. package/dist/{chunk-CUMINO7Z.cjs → chunk-RU3M2FIK.cjs} +18 -14
  123. package/dist/{chunk-DGXN3L4D.mjs → chunk-SAZVVAJH.mjs} +5 -5
  124. package/dist/{chunk-MKMBQSNQ.mjs → chunk-SC2WYWPF.mjs} +3 -3
  125. package/dist/{chunk-QCFFHV5H.mjs → chunk-SMHH4VDG.mjs} +1 -1
  126. package/dist/{chunk-UAFSBWNT.mjs → chunk-SOMHP6GF.mjs} +63 -16
  127. package/dist/{chunk-ND224OE2.cjs → chunk-TKSCR644.cjs} +34 -15
  128. package/dist/{chunk-4V7GIE2U.mjs → chunk-UAORZ7QA.mjs} +3 -3
  129. package/dist/{chunk-IQXFRNY2.cjs → chunk-UFDAAQFX.cjs} +2 -2
  130. package/dist/{chunk-6VYZOPOT.mjs → chunk-UJD4PHYB.mjs} +15 -11
  131. package/dist/{chunk-ZHVYQL3H.cjs → chunk-ULAWS2PA.cjs} +97 -36
  132. package/dist/{chunk-5ZSWG4UX.cjs → chunk-UXFQ3UDA.cjs} +14 -1
  133. package/dist/{chunk-MPEYMSCF.cjs → chunk-VFQT3LAO.cjs} +5 -5
  134. package/dist/{chunk-2FXWWUE5.cjs → chunk-VZJR7UTG.cjs} +6 -6
  135. package/dist/{chunk-2AKFKCHA.mjs → chunk-W7LF2J2S.mjs} +1 -1
  136. package/dist/chunk-WWFTAUFG.cjs +45 -0
  137. package/dist/{chunk-JBC2FKRW.mjs → chunk-WWIKMBRN.mjs} +2 -1
  138. package/dist/{chunk-75DYEVXI.cjs → chunk-X6W5FFH6.cjs} +11 -11
  139. package/dist/{chunk-EXLKRR4U.cjs → chunk-XBML5KMG.cjs} +12 -12
  140. package/dist/{chunk-PZNCMPJF.cjs → chunk-XCACDAZZ.cjs} +18 -12
  141. package/dist/{chunk-JATSG2ZO.mjs → chunk-XCMCS4DA.mjs} +15 -3
  142. package/dist/{chunk-UJ2C4ICS.cjs → chunk-XJXBIP67.cjs} +4 -4
  143. package/dist/{chunk-XF7Q24PF.mjs → chunk-Y7RKTKYI.mjs} +25 -0
  144. package/dist/{chunk-VYZSOYR4.cjs → chunk-YC6V7PWE.cjs} +1 -1
  145. package/dist/{chunk-F6OHXPWR.mjs → chunk-YFILVET3.mjs} +8 -1
  146. package/dist/{chunk-JLRDISQL.cjs → chunk-YKX5BK66.cjs} +7 -7
  147. package/dist/{chunk-DYEJQTDN.cjs → chunk-YSCV4SJF.cjs} +4 -4
  148. package/dist/chunk-YSLWRWWP.cjs +601 -0
  149. package/dist/{chunk-5LJCOSKT.mjs → chunk-YULD7ICZ.mjs} +1 -1
  150. package/dist/{chunk-2SDO73HK.cjs → chunk-YWN746US.cjs} +64 -14
  151. package/dist/chunk-Z2HLU4IX.cjs +238 -0
  152. package/dist/chunk-ZLAT2CWY.mjs +135 -0
  153. package/dist/{chunk-T5CERMEH.cjs → chunk-ZXGAFZDO.cjs} +2 -2
  154. package/dist/{client-plugins-BX2ptm4H.d.mts → client-plugins-CvIslxWi.d.mts} +232 -8
  155. package/dist/{client-plugins-BmxM5KW_.d.ts → client-plugins-HIyulDym.d.ts} +232 -8
  156. package/dist/client-plugins.d.mts +4 -5
  157. package/dist/client-plugins.d.ts +4 -5
  158. package/dist/client.cjs +10 -10
  159. package/dist/client.d.mts +8 -9
  160. package/dist/client.d.ts +8 -9
  161. package/dist/client.mjs +9 -9
  162. package/dist/config.d.mts +4 -5
  163. package/dist/config.d.ts +4 -5
  164. package/dist/{devtools-EWRDHCD5.cjs → devtools-EAUY43BS.cjs} +14 -12
  165. package/dist/{devtools-BPBCYOU6.mjs → devtools-EE5RIBTH.mjs} +13 -11
  166. package/dist/docs.cjs +17 -15
  167. package/dist/docs.d.mts +46 -4
  168. package/dist/docs.d.ts +46 -4
  169. package/dist/docs.mjs +16 -14
  170. package/dist/environment/vite.cjs +2 -2
  171. package/dist/environment/vite.mjs +1 -1
  172. package/dist/headers.cjs +4 -4
  173. package/dist/headers.mjs +3 -3
  174. package/dist/i18n/client.cjs +14 -13
  175. package/dist/i18n/client.d.mts +2 -2
  176. package/dist/i18n/client.d.ts +2 -2
  177. package/dist/i18n/client.mjs +5 -4
  178. package/dist/i18n/index.cjs +3 -2
  179. package/dist/i18n/index.d.mts +3 -3
  180. package/dist/i18n/index.d.ts +3 -3
  181. package/dist/i18n/index.mjs +2 -1
  182. package/dist/i18n/server.cjs +6 -5
  183. package/dist/i18n/server.d.mts +5 -5
  184. package/dist/i18n/server.d.ts +5 -5
  185. package/dist/i18n/server.mjs +5 -4
  186. package/dist/image/server.cjs +3 -3
  187. package/dist/image/server.mjs +2 -2
  188. package/dist/image/sharp.cjs +10 -10
  189. package/dist/image/sharp.mjs +2 -2
  190. package/dist/{index-a-8Z5kZU.d.mts → index-BJJfLxJo.d.mts} +2 -2
  191. package/dist/{index-BWVfxIsO.d.ts → index-CwoOP-MW.d.ts} +2 -2
  192. package/dist/index.cjs +75 -60
  193. package/dist/index.d.mts +21 -22
  194. package/dist/index.d.ts +21 -22
  195. package/dist/index.mjs +79 -64
  196. package/dist/integrations.cjs +7 -4
  197. package/dist/integrations.d.mts +4 -5
  198. package/dist/integrations.d.ts +4 -5
  199. package/dist/integrations.mjs +8 -5
  200. package/dist/internal/app-markdown-runtime.cjs +7 -5
  201. package/dist/internal/app-markdown-runtime.d.mts +17 -7
  202. package/dist/internal/app-markdown-runtime.d.ts +17 -7
  203. package/dist/internal/app-markdown-runtime.mjs +6 -4
  204. package/dist/internal/build-runtime.cjs +44 -41
  205. package/dist/internal/build-runtime.d.mts +6 -7
  206. package/dist/internal/build-runtime.d.ts +6 -7
  207. package/dist/internal/build-runtime.mjs +43 -40
  208. package/dist/internal/cli-runtime.cjs +23 -20
  209. package/dist/internal/cli-runtime.mjs +22 -19
  210. package/dist/internal/client-error-overlay.cjs +6 -6
  211. package/dist/internal/client-error-overlay.mjs +2 -2
  212. package/dist/internal/client-runtime.cjs +5 -3
  213. package/dist/internal/client-runtime.d.mts +9 -1
  214. package/dist/internal/client-runtime.d.ts +9 -1
  215. package/dist/internal/client-runtime.mjs +4 -2
  216. package/dist/internal/compression-runtime.d.mts +4 -5
  217. package/dist/internal/compression-runtime.d.ts +4 -5
  218. package/dist/internal/config-runtime.cjs +14 -12
  219. package/dist/internal/config-runtime.d.mts +5 -6
  220. package/dist/internal/config-runtime.d.ts +5 -6
  221. package/dist/internal/config-runtime.mjs +13 -11
  222. package/dist/internal/infra-analytics-runtime.cjs +4 -4
  223. package/dist/internal/infra-analytics-runtime.mjs +2 -2
  224. package/dist/internal/isolated-boundary.cjs +3 -2
  225. package/dist/internal/isolated-boundary.d.mts +1 -0
  226. package/dist/internal/isolated-boundary.d.ts +1 -0
  227. package/dist/internal/isolated-boundary.mjs +2 -1
  228. package/dist/internal/metadata-image-runtime.cjs +3 -3
  229. package/dist/internal/metadata-image-runtime.mjs +2 -2
  230. package/dist/internal/product-telemetry-runtime.cjs +2 -2
  231. package/dist/internal/product-telemetry-runtime.mjs +1 -1
  232. package/dist/internal/production-runtime.cjs +61 -31
  233. package/dist/internal/production-runtime.d.mts +165 -18
  234. package/dist/internal/production-runtime.d.ts +165 -18
  235. package/dist/internal/production-runtime.mjs +57 -27
  236. package/dist/internal/request-cookies.cjs +4 -2
  237. package/dist/internal/request-cookies.d.mts +9 -1
  238. package/dist/internal/request-cookies.d.ts +9 -1
  239. package/dist/internal/request-cookies.mjs +3 -1
  240. package/dist/internal/server-tree.cjs +12 -0
  241. package/dist/internal/server-tree.d.mts +27 -0
  242. package/dist/internal/server-tree.d.ts +27 -0
  243. package/dist/internal/server-tree.mjs +12 -0
  244. package/dist/markdown.cjs +4 -4
  245. package/dist/markdown.d.mts +4 -5
  246. package/dist/markdown.d.ts +4 -5
  247. package/dist/markdown.mjs +3 -3
  248. package/dist/{metadata-DsEaK7mQ.d.mts → metadata-BnLDsUOS.d.ts} +16 -2
  249. package/dist/{metadata-fwZ3gfG6.d.ts → metadata-WGpBYcGn.d.mts} +16 -2
  250. package/dist/middleware.cjs +18 -8
  251. package/dist/middleware.d.mts +27 -9
  252. package/dist/middleware.d.ts +27 -9
  253. package/dist/middleware.mjs +18 -8
  254. package/dist/navigation.cjs +7 -7
  255. package/dist/navigation.d.mts +7 -8
  256. package/dist/navigation.d.ts +7 -8
  257. package/dist/navigation.mjs +6 -6
  258. package/dist/{nitro-NAKCRVHX.mjs → nitro-MXRDCXWZ.mjs} +5 -5
  259. package/dist/{nitro-VYDZGYFY.cjs → nitro-OVPLKPE2.cjs} +7 -7
  260. package/dist/{observability-BupkiN0m.d.mts → observability-CoXunYhS.d.mts} +4 -3
  261. package/dist/{observability-BupkiN0m.d.ts → observability-CoXunYhS.d.ts} +4 -3
  262. package/dist/observability.d.mts +1 -1
  263. package/dist/observability.d.ts +1 -1
  264. package/dist/plugin.cjs +39 -36
  265. package/dist/plugin.d.mts +4 -5
  266. package/dist/plugin.d.ts +4 -5
  267. package/dist/plugin.mjs +38 -35
  268. package/dist/{production-runtime-Baqgwtvc.d.mts → production-runtime-0sRnuYc-.d.mts} +11 -4
  269. package/dist/{production-runtime-DNkpFnmg.d.ts → production-runtime-Crq6CJ-2.d.ts} +11 -4
  270. package/dist/query/client.cjs +8 -8
  271. package/dist/query/client.mjs +4 -4
  272. package/dist/{render-plan-rkIK9wd9.d.ts → render-plan-8ozZh2Qv.d.ts} +1 -1
  273. package/dist/{render-plan-DhwQnmmX.d.mts → render-plan-gs9GGPzw.d.mts} +1 -1
  274. package/dist/renderer/react/server.cjs +10 -4
  275. package/dist/renderer/react/server.d.mts +2 -1
  276. package/dist/renderer/react/server.d.ts +2 -1
  277. package/dist/renderer/react/server.mjs +7 -1
  278. package/dist/renderer-client.cjs +40 -20
  279. package/dist/renderer-client.d.mts +6 -7
  280. package/dist/renderer-client.d.ts +6 -7
  281. package/dist/renderer-client.mjs +29 -9
  282. package/dist/renderer.d.mts +2 -0
  283. package/dist/renderer.d.ts +2 -0
  284. package/dist/{request-BcY4RYPC.d.ts → request-B5G8rLBH.d.ts} +7 -2
  285. package/dist/{request-CFy1BltJ.d.mts → request-fkhiynXe.d.mts} +7 -2
  286. package/dist/request.cjs +2 -2
  287. package/dist/request.d.mts +5 -6
  288. package/dist/request.d.ts +5 -6
  289. package/dist/request.mjs +1 -1
  290. package/dist/{resolver-PPEeiJ6M.d.ts → resolver-DadfRL6F.d.ts} +1 -1
  291. package/dist/{resolver-DhW0CqZN.d.mts → resolver-khasx3fU.d.mts} +1 -1
  292. package/dist/{route-rendering-BkS0TBlB.d.mts → route-rendering-CLnS7AZj.d.mts} +1 -1
  293. package/dist/{route-rendering-D4XpMjam.d.ts → route-rendering-lS5nUMua.d.ts} +1 -1
  294. package/dist/{router-Cq7BcZxg.d.ts → router-4iuiYnOW.d.ts} +1 -1
  295. package/dist/{router-C4zPlC3V.d.mts → router-ifU8Dui1.d.mts} +1 -1
  296. package/dist/routes.cjs +3 -3
  297. package/dist/routes.d.mts +4 -5
  298. package/dist/routes.d.ts +4 -5
  299. package/dist/routes.mjs +2 -2
  300. package/dist/{runtime-BirxPwbZ.d.ts → runtime-BgDQzBiu.d.ts} +2 -2
  301. package/dist/{runtime-AOJge4vQ.d.mts → runtime-CV2UCV-5.d.mts} +2 -2
  302. package/dist/server-action-security.cjs +3 -3
  303. package/dist/server-action-security.mjs +2 -2
  304. package/dist/server-fn.cjs +5 -5
  305. package/dist/server-fn.mjs +4 -4
  306. package/dist/server-plugins.cjs +4 -4
  307. package/dist/server-plugins.d.mts +5 -6
  308. package/dist/server-plugins.d.ts +5 -6
  309. package/dist/server-plugins.mjs +3 -3
  310. package/dist/server-query-client.cjs +3 -3
  311. package/dist/server-query-client.mjs +2 -2
  312. package/dist/server-query.cjs +6 -6
  313. package/dist/server-query.mjs +5 -5
  314. package/dist/server.cjs +66 -63
  315. package/dist/server.d.mts +13 -14
  316. package/dist/server.d.ts +13 -14
  317. package/dist/server.mjs +43 -40
  318. package/dist/{spa-router-DzPZH-AO.d.mts → spa-router-Bq7VCOwx.d.mts} +3 -3
  319. package/dist/{spa-router-B1HI3X9k.d.ts → spa-router-DaJk5Re4.d.ts} +3 -3
  320. package/dist/testing.cjs +22 -20
  321. package/dist/testing.d.mts +4 -5
  322. package/dist/testing.d.ts +4 -5
  323. package/dist/testing.mjs +18 -16
  324. package/dist/theme/server.cjs +4 -3
  325. package/dist/theme/server.mjs +3 -2
  326. package/dist/{types-Z0aotQ8w.d.mts → types-CnH8DOqo.d.mts} +1 -1
  327. package/dist/{types-Z0aotQ8w.d.ts → types-CnH8DOqo.d.ts} +1 -1
  328. package/dist/{utils-DMD1Hzta.d.ts → utils-BXLmFsVR.d.ts} +1 -1
  329. package/dist/{utils-CEBktlBG.d.mts → utils-XJn0c9bj.d.mts} +1 -1
  330. package/dist/version.cjs +2 -2
  331. package/dist/version.mjs +1 -1
  332. package/dist/vite.cjs +39 -36
  333. package/dist/vite.d.mts +4 -5
  334. package/dist/vite.d.ts +4 -5
  335. package/dist/vite.mjs +38 -35
  336. package/dist/{workflows-CR9ex-gz.d.ts → workflows-jZ4BcdoZ.d.mts} +1 -1
  337. package/dist/{workflows-CR9ex-gz.d.mts → workflows-jZ4BcdoZ.d.ts} +1 -1
  338. package/dist/workflows.cjs +3 -3
  339. package/dist/workflows.d.mts +1 -1
  340. package/dist/workflows.d.ts +1 -1
  341. package/dist/workflows.mjs +2 -2
  342. package/package.json +10 -2
  343. package/dist/chunk-22GUSVNJ.cjs +0 -351
  344. package/dist/chunk-5MKEDGLD.cjs +0 -53
  345. package/dist/chunk-O6XNAMBV.mjs +0 -53
  346. package/dist/chunk-SWN467MP.cjs +0 -18
  347. package/dist/chunk-XGC343EY.cjs +0 -443
  348. package/dist/chunk-ZSH2Y4LN.mjs +0 -351
  349. package/dist/types-DFbjpjXX.d.mts +0 -105
  350. package/dist/types-DFbjpjXX.d.ts +0 -105
  351. /package/dist/{chunk-SUIBNSNO.cjs → chunk-SJNMVDDF.cjs} +0 -0
  352. /package/dist/{chunk-LNZ7JZUS.mjs → chunk-UDNPLXW7.mjs} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-XAXTTBUT.mjs";
4
4
  import {
5
5
  serializeFarmLlmsTxt
6
- } from "./chunk-6VYZOPOT.mjs";
6
+ } from "./chunk-UJD4PHYB.mjs";
7
7
  import {
8
8
  emitFarmAgentRead
9
9
  } from "./chunk-MVL2RAJW.mjs";
@@ -13,10 +13,20 @@ import {
13
13
  import {
14
14
  omitFarmResponseBody
15
15
  } from "./chunk-5WI2S4CO.mjs";
16
+ import {
17
+ _listFarmMCPCatalogs,
18
+ _listFarmRegisteredMCPServers
19
+ } from "./chunk-ZLAT2CWY.mjs";
20
+ import {
21
+ matchesFarmIfNoneMatch
22
+ } from "./chunk-Y7RKTKYI.mjs";
16
23
  import {
17
24
  resolveFarmAPIServerBasePath,
18
25
  resolveFarmAPIServerRoutePath
19
- } from "./chunk-I6XDAKWQ.mjs";
26
+ } from "./chunk-BTHHUD7Q.mjs";
27
+ import {
28
+ FARM_VERSION
29
+ } from "./chunk-3PXS2MHU.mjs";
20
30
  import {
21
31
  localizeFarmPathname
22
32
  } from "./chunk-L3KT7IXV.mjs";
@@ -27,6 +37,184 @@ import {
27
37
  __name
28
38
  } from "./chunk-LPEX4YW6.mjs";
29
39
 
40
+ // src/routing/route-groups.ts
41
+ function isRouteGroupSegment(part) {
42
+ return part.startsWith("(") && part.endsWith(")");
43
+ }
44
+ __name(isRouteGroupSegment, "isRouteGroupSegment");
45
+ function formatRouteSegment(segment) {
46
+ if (!segment.isDynamic) return segment.segment;
47
+ if (segment.isCatchAll) {
48
+ return segment.isOptional ? `[[...${segment.segment}]]` : `[...${segment.segment}]`;
49
+ }
50
+ return `[${segment.segment}]`;
51
+ }
52
+ __name(formatRouteSegment, "formatRouteSegment");
53
+ function createRouteDirectoryPattern(route) {
54
+ const parts = route.filePath.replace(/\\/g, "/").split("/").filter(Boolean);
55
+ parts.pop();
56
+ if (parts.length === 0) return "/";
57
+ let segmentIndex = 0;
58
+ const directory = parts.map((part) => {
59
+ if (isRouteGroupSegment(part)) return part;
60
+ const segment = route.segments[segmentIndex++];
61
+ return segment ? formatRouteSegment(segment) : part;
62
+ });
63
+ return `/${directory.join("/")}`;
64
+ }
65
+ __name(createRouteDirectoryPattern, "createRouteDirectoryPattern");
66
+ function stripRouteGroups(pattern) {
67
+ if (!pattern.includes("(")) return pattern;
68
+ const parts = pattern.split("/").filter((part) => part && !isRouteGroupSegment(part));
69
+ return parts.length === 0 ? "/" : `/${parts.join("/")}`;
70
+ }
71
+ __name(stripRouteGroups, "stripRouteGroups");
72
+ function getRouteGroupScope(pattern) {
73
+ if (!pattern.includes("(")) return null;
74
+ const parts = pattern.split("/");
75
+ for (let index = parts.length - 1; index > 0; index--) {
76
+ if (isRouteGroupSegment(parts[index])) return parts.slice(0, index + 1).join("/");
77
+ }
78
+ return null;
79
+ }
80
+ __name(getRouteGroupScope, "getRouteGroupScope");
81
+ function isInRouteGroupScope(directory, scope) {
82
+ if (scope === null) return true;
83
+ if (typeof directory !== "string") return false;
84
+ return directory === scope || directory.startsWith(`${scope}/`);
85
+ }
86
+ __name(isInRouteGroupScope, "isInRouteGroupScope");
87
+ function getRouteDirectoryDepth(pattern) {
88
+ return pattern.split("/").filter(Boolean).length;
89
+ }
90
+ __name(getRouteDirectoryDepth, "getRouteDirectoryDepth");
91
+ function routeBoundaryCoversDirectory(boundaryPattern, directory) {
92
+ const boundaryUrl = stripRouteGroups(boundaryPattern);
93
+ const routeUrl = stripRouteGroups(directory);
94
+ return (boundaryUrl === "/" || routeUrl === boundaryUrl || routeUrl.startsWith(`${boundaryUrl.replace(/\/$/, "")}/`)) && isInRouteGroupScope(directory, getRouteGroupScope(boundaryPattern));
95
+ }
96
+ __name(routeBoundaryCoversDirectory, "routeBoundaryCoversDirectory");
97
+
98
+ // src/server/full-document.ts
99
+ var CONTENTS_WRAPPER = /^<div\b[^>]*style="display\s*:\s*contents"[^>]*>/i;
100
+ var HOISTED_HEAD_ELEMENT = /^(?:<(?:meta|link|base)\b[^>]*>|<title\b[^>]*>[\s\S]*?<\/title>|<script\b[^>]*\basync\b[^>]*><\/script>|<style\b[^>]*\bdata-precedence\b[^>]*>[\s\S]*?<\/style>)/i;
101
+ function peelDocumentPrefix(markup) {
102
+ let inner = markup.replace(/^\s+/, "");
103
+ let hoisted = "";
104
+ let match;
105
+ while (match = CONTENTS_WRAPPER.exec(inner) ?? HOISTED_HEAD_ELEMENT.exec(inner)) {
106
+ if (!/^<div/i.test(match[0])) hoisted += match[0];
107
+ inner = inner.slice(match[0].length).replace(/^\s+/, "");
108
+ }
109
+ return { inner, hoisted };
110
+ }
111
+ __name(peelDocumentPrefix, "peelDocumentPrefix");
112
+ function restoreHoistedHead(document, hoisted) {
113
+ if (!hoisted) return document;
114
+ if (/<head[\s>]/i.test(document)) {
115
+ return document.replace(/<head\b[^>]*>/i, (open) => open + hoisted);
116
+ }
117
+ return document.replace(/<html\b[^>]*>/i, (open) => `${open}<head>${hoisted}</head>`);
118
+ }
119
+ __name(restoreHoistedHead, "restoreHoistedHead");
120
+ function extractFarmFullDocument(markup) {
121
+ const { inner, hoisted } = peelDocumentPrefix(markup);
122
+ if (!/^<!doctype/i.test(inner) && !/^<html[\s>]/i.test(inner)) return null;
123
+ const start = markup.search(/<!doctype|<html[\s>]/i);
124
+ const lower = markup.toLowerCase();
125
+ let closeIndex = lower.lastIndexOf("</html>");
126
+ if (lower.length !== markup.length) {
127
+ closeIndex = -1;
128
+ const closing = /<\/html>/gi;
129
+ let match;
130
+ while (match = closing.exec(markup)) closeIndex = match.index;
131
+ }
132
+ if (start < 0 || closeIndex < 0) return null;
133
+ const closeEnd = closeIndex + "</html>".length;
134
+ let document = markup.slice(start, closeEnd);
135
+ const streamedTail = markup.slice(closeEnd).replace(/^(?:\s*<\/div>)+/i, "").trim();
136
+ if (streamedTail) {
137
+ document = document.replace(/<\/body>/i, () => `${streamedTail}</body>`);
138
+ }
139
+ return restoreHoistedHead(document, hoisted);
140
+ }
141
+ __name(extractFarmFullDocument, "extractFarmFullDocument");
142
+ function classifyFarmDocumentPrefix(markup) {
143
+ const { inner } = peelDocumentPrefix(markup);
144
+ if (/^<!doctype/i.test(inner) || /^<html[\s>]/i.test(inner)) return "document";
145
+ return inner === "" ? "pending" : "fragment";
146
+ }
147
+ __name(classifyFarmDocumentPrefix, "classifyFarmDocumentPrefix");
148
+ function ensureFarmDocumentHead(markup) {
149
+ if (/<head[\s>]/i.test(markup)) return markup;
150
+ return markup.replace(/<html([^>]*)>/i, (_match, attributes) => {
151
+ return `<html${attributes}><head></head>`;
152
+ });
153
+ }
154
+ __name(ensureFarmDocumentHead, "ensureFarmDocumentHead");
155
+ function ensureFarmDocumentRoot(markup) {
156
+ if (/\sid=["']root["']/i.test(markup)) return markup;
157
+ return markup.replace(
158
+ /<body\b([^>]*)>/i,
159
+ (_match, attributes) => `<body${attributes}><div id="root">`
160
+ ).replace(/<\/body>/i, () => "</div></body>");
161
+ }
162
+ __name(ensureFarmDocumentRoot, "ensureFarmDocumentRoot");
163
+ function hasFarmDocumentIcon(markup) {
164
+ return /<link\b[^>]*\brel=["']?(?:shortcut )?icon\b/i.test(markup);
165
+ }
166
+ __name(hasFarmDocumentIcon, "hasFarmDocumentIcon");
167
+ function removeFarmDocumentTitles(markup) {
168
+ return markup.replace(/<title\b[^>]*>[\s\S]*?<\/title>\s*/gi, "");
169
+ }
170
+ __name(removeFarmDocumentTitles, "removeFarmDocumentTitles");
171
+ function ensureFarmDocumentMeta(markup, viewport = "") {
172
+ const head = /<head\b[^>]*>([\s\S]*?)<\/head>/i.exec(markup)?.[1] ?? "";
173
+ const hasNamedMeta = /* @__PURE__ */ __name((name) => new RegExp(`<meta\\b[^>]*\\bname=["']?${name}(?=["'\\s/>])`, "i").test(head), "hasNamedMeta");
174
+ const tags = [
175
+ /<meta\b[^>]*\bcharset\s*=/i.test(head) ? "" : '<meta charset="utf-8">',
176
+ ...(viewport.match(/<meta\b[^>]*>/gi) ?? []).filter((tag) => {
177
+ const name = /\bname="([\w-]+)"/.exec(tag)?.[1];
178
+ return !name || !hasNamedMeta(name);
179
+ })
180
+ ].filter(Boolean);
181
+ if (tags.length === 0) return markup;
182
+ return markup.replace(/<head\b[^>]*>/i, (open) => `${open}${tags.join("")}`);
183
+ }
184
+ __name(ensureFarmDocumentMeta, "ensureFarmDocumentMeta");
185
+ function composeFarmFullDocument(documentHtml, assets) {
186
+ let html = ensureFarmDocumentMeta(ensureFarmDocumentHead(documentHtml), assets.viewport);
187
+ if (assets.htmlAttributes) {
188
+ html = html.replace(/<html\b([^>]*)>/i, (_match, attrs) => {
189
+ let nextAttributes = attrs;
190
+ for (const name of assets.replaceHtmlAttributes ?? []) {
191
+ const escapedName = name.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
192
+ nextAttributes = nextAttributes.replace(
193
+ new RegExp("\\s+" + escapedName + `=(?:"[^"]*"|'[^']*'|[^\\s>]+)`, "gi"),
194
+ ""
195
+ );
196
+ }
197
+ return `<html${nextAttributes}${assets.htmlAttributes}>`;
198
+ });
199
+ }
200
+ html = ensureFarmDocumentRoot(html);
201
+ const headAssets = [
202
+ assets.fallbackIcon && !hasFarmDocumentIcon(html) ? '<link rel="icon" href="data:,">' : "",
203
+ assets.headAssets
204
+ ].filter(Boolean).join("\n ");
205
+ if (headAssets) {
206
+ html = html.replace(/<\/head>/i, () => ` ${headAssets}
207
+ </head>`);
208
+ }
209
+ if (assets.bodyFooter) {
210
+ html = html.replace(/<\/body>/i, () => ` ${assets.bodyFooter}
211
+ </body>`);
212
+ }
213
+ return /^\s*<!doctype/i.test(html) ? html : `<!DOCTYPE html>
214
+ ${html}`;
215
+ }
216
+ __name(composeFarmFullDocument, "composeFarmFullDocument");
217
+
30
218
  // src/i18n/alternates.ts
31
219
  function renderFarmLocaleAlternateLinks(pathname, config, options = {}) {
32
220
  if (config.routing === "none") return "";
@@ -222,6 +410,171 @@ function createFarmMetadataRouteResponse(kind, value, routeModule = {}, options
222
410
  }
223
411
  __name(createFarmMetadataRouteResponse, "createFarmMetadataRouteResponse");
224
412
 
413
+ // src/ai-catalog.ts
414
+ var FARM_AI_CATALOG_PATH = "/.well-known/ai-catalog.json";
415
+ var FARM_ARD_PATH = "/.well-known/ard.json";
416
+ var FARM_MCP_SERVER_CARD_SUFFIX = "/server-card";
417
+ var SERVER_CARD_SCHEMA = "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json";
418
+ var SERVER_CARD_TYPE = "application/mcp-server-card+json";
419
+ var AI_CATALOG_TYPE = "application/ai-catalog+json";
420
+ var CARD_DESCRIPTION_MAX = 100;
421
+ var REVERSE_DNS_NAME = /^[a-zA-Z0-9.-]+\/[a-zA-Z0-9._-]+$/;
422
+ function listFarmMCPServerSources(input) {
423
+ const sources = /* @__PURE__ */ new Map();
424
+ for (const { server, details } of _listFarmMCPCatalogs()) {
425
+ const endpoint = resolveFarmAPIServerRoutePath(server.path, input.apiServerBasePath);
426
+ if (sources.has(endpoint)) continue;
427
+ sources.set(endpoint, {
428
+ ...server,
429
+ protocolVersions: details?.protocolVersions,
430
+ endpoint,
431
+ local: true
432
+ });
433
+ }
434
+ for (const server of _listFarmRegisteredMCPServers()) {
435
+ const endpoint = server.path ? applyFarmBasePath(server.path, input.basePath) : server.url;
436
+ if (sources.has(endpoint)) continue;
437
+ sources.set(endpoint, { ...server, endpoint, local: Boolean(server.path) });
438
+ }
439
+ return [...sources.values()];
440
+ }
441
+ __name(listFarmMCPServerSources, "listFarmMCPServerSources");
442
+ function serverCardLocation(endpoint) {
443
+ return `${endpoint.replace(/\/$/, "")}${FARM_MCP_SERVER_CARD_SUFFIX}`;
444
+ }
445
+ __name(serverCardLocation, "serverCardLocation");
446
+ function listFarmMCPServerCards(origin, input = {}) {
447
+ const host = new URL(origin).hostname;
448
+ return listFarmMCPServerSources(input).map((server) => {
449
+ const endpointUrl = server.local ? `${origin}${server.endpoint}` : server.endpoint;
450
+ const cardPath = server.local ? serverCardLocation(server.endpoint) : void 0;
451
+ const slug = cardSlug(server.name);
452
+ const description = truncate(server.description?.trim() || `MCP server for ${host}`);
453
+ const card = {
454
+ $schema: SERVER_CARD_SCHEMA,
455
+ // The card's name is reverse-DNS; a plain server name is namespaced by the host.
456
+ name: REVERSE_DNS_NAME.test(server.name) ? server.name : `${cardNamespace(host)}/${slug}`,
457
+ version: server.version,
458
+ description,
459
+ ...server.title ? { title: server.title } : {},
460
+ websiteUrl: `${origin}${applyFarmBasePath("/", input.basePath).replace(/(.)\/$/, "$1")}`,
461
+ remotes: [
462
+ {
463
+ type: "streamable-http",
464
+ url: endpointUrl,
465
+ ...server.protocolVersions?.length ? { supportedProtocolVersions: [...server.protocolVersions] } : {}
466
+ }
467
+ ]
468
+ };
469
+ return {
470
+ ...cardPath ? { cardPath } : {},
471
+ card,
472
+ entry: {
473
+ identifier: `urn:air:${host}:mcp:${slug}`,
474
+ type: SERVER_CARD_TYPE,
475
+ url: cardPath ? `${origin}${cardPath}` : serverCardLocation(endpointUrl),
476
+ displayName: server.title ?? server.name,
477
+ description,
478
+ version: server.version
479
+ }
480
+ };
481
+ });
482
+ }
483
+ __name(listFarmMCPServerCards, "listFarmMCPServerCards");
484
+ function listFarmMCPLlmsTxtLinks(origin, input = {}) {
485
+ const servers = listFarmMCPServerCards(origin, input);
486
+ if (!servers.length) return [];
487
+ return [
488
+ ...servers.map(({ card, entry }) => ({
489
+ title: entry.displayName,
490
+ url: card.remotes[0].url,
491
+ description: `${card.description} (Streamable HTTP MCP endpoint; server card at ${entry.url})`
492
+ })),
493
+ {
494
+ title: "AI catalog",
495
+ url: `${origin}${applyFarmBasePath(FARM_AI_CATALOG_PATH, input.basePath)}`,
496
+ description: "MCP server cards for this site"
497
+ }
498
+ ];
499
+ }
500
+ __name(listFarmMCPLlmsTxtLinks, "listFarmMCPLlmsTxtLinks");
501
+ function createFarmAiCatalogResponse(request, input = {}, requestUrl) {
502
+ let url;
503
+ try {
504
+ url = requestUrl ?? new URL(request.url);
505
+ } catch {
506
+ return null;
507
+ }
508
+ const { pathname } = url;
509
+ if (!pathname.endsWith(FARM_MCP_SERVER_CARD_SUFFIX) && !pathname.includes("/.well-known/")) {
510
+ return null;
511
+ }
512
+ const ard = pathname === applyFarmBasePath(FARM_ARD_PATH, input.basePath);
513
+ const catalogPath = ard || pathname === applyFarmBasePath(FARM_AI_CATALOG_PATH, input.basePath);
514
+ if (!catalogPath && !pathname.endsWith(FARM_MCP_SERVER_CARD_SUFFIX)) return null;
515
+ const servers = listFarmMCPServerCards(url.origin, input);
516
+ const card = catalogPath ? void 0 : servers.find((server) => server.cardPath === pathname);
517
+ if (!servers.length || !catalogPath && !card) return null;
518
+ const method = request.method.toUpperCase();
519
+ if (method === "OPTIONS") return new Response(null, { status: 204, headers: corsHeaders() });
520
+ if (method !== "GET" && method !== "HEAD") {
521
+ return new Response("Method Not Allowed", {
522
+ status: 405,
523
+ headers: { ...corsHeaders(), Allow: "GET, HEAD, OPTIONS", "Content-Type": "text/plain" }
524
+ });
525
+ }
526
+ const body = JSON.stringify(
527
+ card ? card.card : { specVersion: "1.0", entries: servers.map(({ entry }) => entry) }
528
+ );
529
+ const etag = `W/"${fnv1a(body)}"`;
530
+ const headers = {
531
+ ...corsHeaders(),
532
+ "Content-Type": card ? `${SERVER_CARD_TYPE}; charset=utf-8` : ard ? "application/json; charset=utf-8" : `${AI_CATALOG_TYPE}; charset=utf-8`,
533
+ // The body names the request's origin, so caches revalidate rather than reuse it.
534
+ "Cache-Control": "public, max-age=0, must-revalidate",
535
+ ETag: etag,
536
+ "X-Content-Type-Options": "nosniff"
537
+ };
538
+ if (matchesFarmIfNoneMatch(request.headers.get("if-none-match"), etag)) {
539
+ return new Response(null, { status: 304, headers });
540
+ }
541
+ emitFarmAgentRead(request, card ? "mcp-server-card" : "ai-catalog", 200);
542
+ return new Response(method === "HEAD" ? null : body, { status: 200, headers });
543
+ }
544
+ __name(createFarmAiCatalogResponse, "createFarmAiCatalogResponse");
545
+ function corsHeaders() {
546
+ return {
547
+ "Access-Control-Allow-Origin": "*",
548
+ "Access-Control-Allow-Methods": "GET, HEAD, OPTIONS",
549
+ "Access-Control-Allow-Headers": "Content-Type, If-None-Match",
550
+ "Access-Control-Expose-Headers": "ETag"
551
+ };
552
+ }
553
+ __name(corsHeaders, "corsHeaders");
554
+ function cardNamespace(host) {
555
+ if (host.includes(":") || /^\d+(?:\.\d+){3}$/.test(host)) return "local";
556
+ return host.split(".").reverse().join(".");
557
+ }
558
+ __name(cardNamespace, "cardNamespace");
559
+ function cardSlug(name) {
560
+ const last = name.includes("/") ? name.slice(name.lastIndexOf("/") + 1) : name;
561
+ return last.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "mcp";
562
+ }
563
+ __name(cardSlug, "cardSlug");
564
+ function truncate(text) {
565
+ return text.length <= CARD_DESCRIPTION_MAX ? text : `${text.slice(0, CARD_DESCRIPTION_MAX - 1).trimEnd()}\u2026`;
566
+ }
567
+ __name(truncate, "truncate");
568
+ function fnv1a(value) {
569
+ let hash = 2166136261;
570
+ for (let index = 0; index < value.length; index++) {
571
+ hash ^= value.charCodeAt(index);
572
+ hash = Math.imul(hash, 16777619);
573
+ }
574
+ return (hash >>> 0).toString(16).padStart(8, "0");
575
+ }
576
+ __name(fnv1a, "fnv1a");
577
+
225
578
  // src/components/error-page.ts
226
579
  var ERROR_STATUS_TEXT = {
227
580
  400: "Bad Request",
@@ -514,11 +867,165 @@ function createFarmApiCatalogResponse(method, input, request) {
514
867
  }
515
868
  __name(createFarmApiCatalogResponse, "createFarmApiCatalogResponse");
516
869
 
870
+ // src/app-manifest.ts
871
+ var FARM_APP_MANIFEST_PATH = "/.well-known/farmjs";
872
+ var FARM_INFRA_SIGNATURE_HEADER = "farmjs-infra-signature";
873
+ var SIGNED_PURPOSE = "farmjs-manifest-v1";
874
+ var SIGNATURE_WINDOW_SECONDS = 300;
875
+ function resolveFarmAppManifestInput(config, extra) {
876
+ const llms = config.agent?.llmsTxt;
877
+ const plugins = (config.plugins ?? []).map(({ name }) => name);
878
+ const webmcp = plugins.includes("farm:webmcp");
879
+ return {
880
+ renderer: config.renderer?.name ?? "react",
881
+ basePath: config.basePath || "/",
882
+ build: extra.build,
883
+ packages: extra.packages,
884
+ webmcp: { enabled: webmcp, tools: webmcp ? extra.webmcpTools ?? [] : [] },
885
+ integrations: Object.entries(config.integrations ?? {}).flatMap(([key, integration]) => {
886
+ const category = integration?.category ?? integration?.slot;
887
+ return integration && category && integration.type ? [{ key, category, type: integration.type }] : [];
888
+ }),
889
+ agent: {
890
+ apiCatalog: config.agent?.apiCatalog ? "/.well-known/api-catalog" : null,
891
+ llmsTxt: llms === true || typeof llms === "object" && llms !== null && llms.enabled !== false,
892
+ openapi: config.openapi?.enabled && config.openapi.specRoute ? config.openapi.specRoute : null
893
+ },
894
+ plugins,
895
+ analytics: config.analytics !== false
896
+ };
897
+ }
898
+ __name(resolveFarmAppManifestInput, "resolveFarmAppManifestInput");
899
+ var SOURCES = {
900
+ endpoint: "endpoint",
901
+ standalone: "defineTool",
902
+ serverFunction: "serverFunction"
903
+ };
904
+ function createFarmAppManifest(input) {
905
+ return {
906
+ schemaVersion: 1,
907
+ app: {
908
+ farm: FARM_VERSION,
909
+ renderer: input.renderer,
910
+ basePath: input.basePath,
911
+ build: input.build
912
+ },
913
+ packages: input.packages,
914
+ mcp: {
915
+ servers: _listFarmMCPCatalogs().map(({ server, tools, details }) => ({
916
+ name: server.name,
917
+ version: server.version,
918
+ path: server.path,
919
+ resources: [...details?.resources ?? []],
920
+ prompts: [...details?.prompts ?? []],
921
+ tools: tools.map((tool) => {
922
+ const schemas = details?.schemas?.[tool.name];
923
+ const hints = Object.fromEntries(
924
+ ["readOnlyHint", "destructiveHint", "idempotentHint", "openWorldHint"].filter((hint) => typeof tool[hint] === "boolean").map((hint) => [hint, tool[hint]])
925
+ );
926
+ return {
927
+ name: tool.name,
928
+ ...tool.title ? { title: tool.title } : {},
929
+ ...tool.description ? { description: tool.description } : {},
930
+ source: SOURCES[tool.kind],
931
+ ...tool.kind === "endpoint" ? { method: tool.method, path: tool.path } : {},
932
+ ...hints,
933
+ ...schemas ? { inputSchema: schemas.input } : {},
934
+ ...schemas?.output ? { outputSchema: schemas.output } : {}
935
+ };
936
+ })
937
+ }))
938
+ },
939
+ webmcp: input.webmcp,
940
+ integrations: input.integrations,
941
+ agent: input.agent,
942
+ plugins: input.plugins
943
+ };
944
+ }
945
+ __name(createFarmAppManifest, "createFarmAppManifest");
946
+ var encoder = new TextEncoder();
947
+ var hex = /* @__PURE__ */ __name((bytes) => [...new Uint8Array(bytes)].map((byte) => byte.toString(16).padStart(2, "0")).join(""), "hex");
948
+ async function sha256Hex(value) {
949
+ return hex(await crypto.subtle.digest("SHA-256", encoder.encode(value)));
950
+ }
951
+ __name(sha256Hex, "sha256Hex");
952
+ async function hmacHex(secret, message) {
953
+ const key = await crypto.subtle.importKey(
954
+ "raw",
955
+ encoder.encode(secret),
956
+ { name: "HMAC", hash: "SHA-256" },
957
+ false,
958
+ ["sign"]
959
+ );
960
+ return hex(await crypto.subtle.sign("HMAC", key, encoder.encode(message)));
961
+ }
962
+ __name(hmacHex, "hmacHex");
963
+ function sameHex(a, b) {
964
+ if (a.length !== b.length) return false;
965
+ let difference = 0;
966
+ for (let index = 0; index < a.length; index++)
967
+ difference |= a.charCodeAt(index) ^ b.charCodeAt(index);
968
+ return difference === 0;
969
+ }
970
+ __name(sameHex, "sameHex");
971
+ async function verifyFarmInfraManifestSignature(header, key, now = Date.now()) {
972
+ if (!header || header.length > 2048) return false;
973
+ const parts = header.split(",").map((part) => part.trim());
974
+ const timestamp = Number(
975
+ /^t=(\d{1,12})$/.exec(parts.find((part) => part.startsWith("t=")) ?? "")?.[1]
976
+ );
977
+ if (!Number.isSafeInteger(timestamp)) return false;
978
+ if (Math.abs(now / 1e3 - timestamp) > SIGNATURE_WINDOW_SECONDS) return false;
979
+ const signatures = parts.filter((part) => part.startsWith("v1=")).map((part) => part.slice(3)).filter((value) => /^[0-9a-f]{64}$/.test(value));
980
+ if (!signatures.length || signatures.length > 8) return false;
981
+ const expected = await hmacHex(await sha256Hex(key), `${SIGNED_PURPOSE}
982
+ ${timestamp}`);
983
+ return signatures.some((signature) => sameHex(signature, expected));
984
+ }
985
+ __name(verifyFarmInfraManifestSignature, "verifyFarmInfraManifestSignature");
986
+ function processEnv() {
987
+ return globalThis.process?.env ?? {};
988
+ }
989
+ __name(processEnv, "processEnv");
990
+ async function createFarmAppManifestResponse(request, input, options) {
991
+ if (request.method !== "GET" && request.method !== "HEAD") return null;
992
+ if (!options.development) {
993
+ const key = (options.env ?? processEnv()).FARMJS_API_KEY?.trim();
994
+ if (!input.analytics || !key) return null;
995
+ const signed = await verifyFarmInfraManifestSignature(
996
+ request.headers.get(FARM_INFRA_SIGNATURE_HEADER),
997
+ key
998
+ );
999
+ if (!signed)
1000
+ return new Response(null, { status: 404, headers: { "cache-control": "no-store" } });
1001
+ }
1002
+ const body = JSON.stringify(createFarmAppManifest(input));
1003
+ return new Response(request.method === "HEAD" ? null : body, {
1004
+ headers: { "content-type": "application/json", "cache-control": "private, no-store" }
1005
+ });
1006
+ }
1007
+ __name(createFarmAppManifestResponse, "createFarmAppManifestResponse");
1008
+
517
1009
  export {
1010
+ formatRouteSegment,
1011
+ createRouteDirectoryPattern,
1012
+ stripRouteGroups,
1013
+ getRouteGroupScope,
1014
+ isInRouteGroupScope,
1015
+ getRouteDirectoryDepth,
1016
+ routeBoundaryCoversDirectory,
1017
+ HOISTED_HEAD_ELEMENT,
1018
+ extractFarmFullDocument,
1019
+ classifyFarmDocumentPrefix,
1020
+ removeFarmDocumentTitles,
1021
+ ensureFarmDocumentMeta,
1022
+ composeFarmFullDocument,
518
1023
  renderFarmLocaleAlternateLinks,
519
1024
  createLateRedirectRecovery,
520
1025
  createLateNotFoundRecovery,
521
1026
  createFarmMetadataRouteResponse,
1027
+ listFarmMCPLlmsTxtLinks,
1028
+ createFarmAiCatalogResponse,
522
1029
  resolveDefaultErrorStatus,
523
1030
  getDefaultErrorStatusText,
524
1031
  createDefaultErrorMarkup,
@@ -526,5 +1033,8 @@ export {
526
1033
  applyFarmThemeDocument,
527
1034
  FARM_API_CATALOG_PATH,
528
1035
  resolveFarmApiCatalogInput,
529
- createFarmApiCatalogResponse
1036
+ createFarmApiCatalogResponse,
1037
+ FARM_APP_MANIFEST_PATH,
1038
+ resolveFarmAppManifestInput,
1039
+ createFarmAppManifestResponse
530
1040
  };