@farm.js/core 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (549) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +11 -0
  3. package/dist/after.cjs +227 -0
  4. package/dist/after.cjs.map +1 -0
  5. package/dist/after.d.mts +25 -0
  6. package/dist/after.d.ts +25 -0
  7. package/dist/after.mjs +14 -0
  8. package/dist/after.mjs.map +1 -0
  9. package/dist/agent-runtime.cjs +2379 -0
  10. package/dist/agent-runtime.cjs.map +1 -0
  11. package/dist/agent-runtime.d.mts +93 -0
  12. package/dist/agent-runtime.d.ts +93 -0
  13. package/dist/agent-runtime.mjs +479 -0
  14. package/dist/agent-runtime.mjs.map +1 -0
  15. package/dist/api/route-manager.cjs +1196 -0
  16. package/dist/api/route-manager.cjs.map +1 -0
  17. package/dist/api/route-manager.d.mts +64 -0
  18. package/dist/api/route-manager.d.ts +64 -0
  19. package/dist/api/route-manager.mjs +34 -0
  20. package/dist/api/route-manager.mjs.map +1 -0
  21. package/dist/api/runtime.cjs +272 -0
  22. package/dist/api/runtime.cjs.map +1 -0
  23. package/dist/api/runtime.d.mts +16 -0
  24. package/dist/api/runtime.d.ts +16 -0
  25. package/dist/api/runtime.mjs +16 -0
  26. package/dist/api/runtime.mjs.map +1 -0
  27. package/dist/api.cjs +3199 -0
  28. package/dist/api.cjs.map +1 -0
  29. package/dist/api.d.mts +190 -0
  30. package/dist/api.d.ts +190 -0
  31. package/dist/api.mjs +63 -0
  32. package/dist/api.mjs.map +1 -0
  33. package/dist/app-BiX4qb-d.d.mts +265 -0
  34. package/dist/app-CFRNJXP1.d.ts +265 -0
  35. package/dist/app-markdown.cjs +220 -0
  36. package/dist/app-markdown.cjs.map +1 -0
  37. package/dist/app-markdown.d.mts +21 -0
  38. package/dist/app-markdown.d.ts +21 -0
  39. package/dist/app-markdown.mjs +26 -0
  40. package/dist/app-markdown.mjs.map +1 -0
  41. package/dist/cache.cjs +543 -0
  42. package/dist/cache.cjs.map +1 -0
  43. package/dist/cache.d.mts +78 -0
  44. package/dist/cache.d.ts +78 -0
  45. package/dist/cache.mjs +38 -0
  46. package/dist/cache.mjs.map +1 -0
  47. package/dist/chunk-25D7G34K.mjs +142 -0
  48. package/dist/chunk-25D7G34K.mjs.map +1 -0
  49. package/dist/chunk-3QJO55ZF.mjs +3548 -0
  50. package/dist/chunk-3QJO55ZF.mjs.map +1 -0
  51. package/dist/chunk-3XNTL3FQ.mjs +452 -0
  52. package/dist/chunk-3XNTL3FQ.mjs.map +1 -0
  53. package/dist/chunk-44ZCFSKE.mjs +84 -0
  54. package/dist/chunk-44ZCFSKE.mjs.map +1 -0
  55. package/dist/chunk-4PTK6KT4.mjs +364 -0
  56. package/dist/chunk-4PTK6KT4.mjs.map +1 -0
  57. package/dist/chunk-4S3ORGFA.mjs +44 -0
  58. package/dist/chunk-4S3ORGFA.mjs.map +1 -0
  59. package/dist/chunk-5BY76U2M.mjs +1 -0
  60. package/dist/chunk-5BY76U2M.mjs.map +1 -0
  61. package/dist/chunk-5ZGPRGWV.mjs +136 -0
  62. package/dist/chunk-5ZGPRGWV.mjs.map +1 -0
  63. package/dist/chunk-6XDUHOEM.mjs +157 -0
  64. package/dist/chunk-6XDUHOEM.mjs.map +1 -0
  65. package/dist/chunk-74YTBPTY.mjs +450 -0
  66. package/dist/chunk-74YTBPTY.mjs.map +1 -0
  67. package/dist/chunk-7HO6AEOP.mjs +74 -0
  68. package/dist/chunk-7HO6AEOP.mjs.map +1 -0
  69. package/dist/chunk-7MABZJIM.mjs +29 -0
  70. package/dist/chunk-7MABZJIM.mjs.map +1 -0
  71. package/dist/chunk-7ZY5AIJO.mjs +161 -0
  72. package/dist/chunk-7ZY5AIJO.mjs.map +1 -0
  73. package/dist/chunk-AGS7UJ52.mjs +446 -0
  74. package/dist/chunk-AGS7UJ52.mjs.map +1 -0
  75. package/dist/chunk-AZ7YUVNR.mjs +65 -0
  76. package/dist/chunk-AZ7YUVNR.mjs.map +1 -0
  77. package/dist/chunk-B232I2GP.mjs +163 -0
  78. package/dist/chunk-B232I2GP.mjs.map +1 -0
  79. package/dist/chunk-B6N4ZB2H.mjs +718 -0
  80. package/dist/chunk-B6N4ZB2H.mjs.map +1 -0
  81. package/dist/chunk-BHG3LVHH.mjs +176 -0
  82. package/dist/chunk-BHG3LVHH.mjs.map +1 -0
  83. package/dist/chunk-C3DLZMBU.mjs +597 -0
  84. package/dist/chunk-C3DLZMBU.mjs.map +1 -0
  85. package/dist/chunk-CGILA3WO.mjs +14 -0
  86. package/dist/chunk-CGILA3WO.mjs.map +1 -0
  87. package/dist/chunk-CHFHNEMO.mjs +7088 -0
  88. package/dist/chunk-CHFHNEMO.mjs.map +1 -0
  89. package/dist/chunk-E2MPIBRE.mjs +149 -0
  90. package/dist/chunk-E2MPIBRE.mjs.map +1 -0
  91. package/dist/chunk-E6EPN5BT.mjs +203 -0
  92. package/dist/chunk-E6EPN5BT.mjs.map +1 -0
  93. package/dist/chunk-EVGBEZDF.mjs +215 -0
  94. package/dist/chunk-EVGBEZDF.mjs.map +1 -0
  95. package/dist/chunk-FQYDHKKU.mjs +128 -0
  96. package/dist/chunk-FQYDHKKU.mjs.map +1 -0
  97. package/dist/chunk-G3B5BRDY.mjs +5763 -0
  98. package/dist/chunk-G3B5BRDY.mjs.map +1 -0
  99. package/dist/chunk-GN72QAIH.mjs +146 -0
  100. package/dist/chunk-GN72QAIH.mjs.map +1 -0
  101. package/dist/chunk-GS6K5OCM.mjs +407 -0
  102. package/dist/chunk-GS6K5OCM.mjs.map +1 -0
  103. package/dist/chunk-GY2STC2S.mjs +180 -0
  104. package/dist/chunk-GY2STC2S.mjs.map +1 -0
  105. package/dist/chunk-GZP5W4K3.mjs +158 -0
  106. package/dist/chunk-GZP5W4K3.mjs.map +1 -0
  107. package/dist/chunk-H2FA2SBS.mjs +51 -0
  108. package/dist/chunk-H2FA2SBS.mjs.map +1 -0
  109. package/dist/chunk-HXP3ZSPC.mjs +211 -0
  110. package/dist/chunk-HXP3ZSPC.mjs.map +1 -0
  111. package/dist/chunk-ITN462YM.mjs +98 -0
  112. package/dist/chunk-ITN462YM.mjs.map +1 -0
  113. package/dist/chunk-J23HNLFY.mjs +72 -0
  114. package/dist/chunk-J23HNLFY.mjs.map +1 -0
  115. package/dist/chunk-J4FNJ5IU.mjs +179 -0
  116. package/dist/chunk-J4FNJ5IU.mjs.map +1 -0
  117. package/dist/chunk-JK25YEN6.mjs +219 -0
  118. package/dist/chunk-JK25YEN6.mjs.map +1 -0
  119. package/dist/chunk-JLWMCADZ.mjs +204 -0
  120. package/dist/chunk-JLWMCADZ.mjs.map +1 -0
  121. package/dist/chunk-JN3UU635.mjs +622 -0
  122. package/dist/chunk-JN3UU635.mjs.map +1 -0
  123. package/dist/chunk-K4667E2Q.mjs +1916 -0
  124. package/dist/chunk-K4667E2Q.mjs.map +1 -0
  125. package/dist/chunk-LGHEOHBU.mjs +218 -0
  126. package/dist/chunk-LGHEOHBU.mjs.map +1 -0
  127. package/dist/chunk-LLC7BNXW.mjs +275 -0
  128. package/dist/chunk-LLC7BNXW.mjs.map +1 -0
  129. package/dist/chunk-LM2YNO4U.mjs +24 -0
  130. package/dist/chunk-LM2YNO4U.mjs.map +1 -0
  131. package/dist/chunk-NNLCAVB6.mjs +391 -0
  132. package/dist/chunk-NNLCAVB6.mjs.map +1 -0
  133. package/dist/chunk-O3HADRW6.mjs +639 -0
  134. package/dist/chunk-O3HADRW6.mjs.map +1 -0
  135. package/dist/chunk-OYXO65LI.mjs +119 -0
  136. package/dist/chunk-OYXO65LI.mjs.map +1 -0
  137. package/dist/chunk-P7QDS5AT.mjs +191 -0
  138. package/dist/chunk-P7QDS5AT.mjs.map +1 -0
  139. package/dist/chunk-PRNYWD7K.mjs +599 -0
  140. package/dist/chunk-PRNYWD7K.mjs.map +1 -0
  141. package/dist/chunk-QF4PHCMA.mjs +422 -0
  142. package/dist/chunk-QF4PHCMA.mjs.map +1 -0
  143. package/dist/chunk-QFQRHRZS.mjs +1224 -0
  144. package/dist/chunk-QFQRHRZS.mjs.map +1 -0
  145. package/dist/chunk-QGOHVJ6J.mjs +63 -0
  146. package/dist/chunk-QGOHVJ6J.mjs.map +1 -0
  147. package/dist/chunk-QKVUNGAH.mjs +39 -0
  148. package/dist/chunk-QKVUNGAH.mjs.map +1 -0
  149. package/dist/chunk-QM6VV26B.mjs +149 -0
  150. package/dist/chunk-QM6VV26B.mjs.map +1 -0
  151. package/dist/chunk-RHIFZZUI.mjs +69 -0
  152. package/dist/chunk-RHIFZZUI.mjs.map +1 -0
  153. package/dist/chunk-RKI6TN3A.mjs +49 -0
  154. package/dist/chunk-RKI6TN3A.mjs.map +1 -0
  155. package/dist/chunk-RSKVYESE.mjs +187 -0
  156. package/dist/chunk-RSKVYESE.mjs.map +1 -0
  157. package/dist/chunk-S2XHZS7W.mjs +180 -0
  158. package/dist/chunk-S2XHZS7W.mjs.map +1 -0
  159. package/dist/chunk-SCFX4UTD.mjs +28 -0
  160. package/dist/chunk-SCFX4UTD.mjs.map +1 -0
  161. package/dist/chunk-SL6HTIOK.mjs +66 -0
  162. package/dist/chunk-SL6HTIOK.mjs.map +1 -0
  163. package/dist/chunk-SOU3Q3ZA.mjs +173 -0
  164. package/dist/chunk-SOU3Q3ZA.mjs.map +1 -0
  165. package/dist/chunk-SPBBQLXI.mjs +207 -0
  166. package/dist/chunk-SPBBQLXI.mjs.map +1 -0
  167. package/dist/chunk-SXZTEK3V.mjs +396 -0
  168. package/dist/chunk-SXZTEK3V.mjs.map +1 -0
  169. package/dist/chunk-T4QJQK76.mjs +459 -0
  170. package/dist/chunk-T4QJQK76.mjs.map +1 -0
  171. package/dist/chunk-TRORP7E4.mjs +41 -0
  172. package/dist/chunk-TRORP7E4.mjs.map +1 -0
  173. package/dist/chunk-TU4YJICB.mjs +728 -0
  174. package/dist/chunk-TU4YJICB.mjs.map +1 -0
  175. package/dist/chunk-TXCFGOHW.mjs +42 -0
  176. package/dist/chunk-TXCFGOHW.mjs.map +1 -0
  177. package/dist/chunk-UHE2TTLK.mjs +466 -0
  178. package/dist/chunk-UHE2TTLK.mjs.map +1 -0
  179. package/dist/chunk-UREJA4GZ.mjs +364 -0
  180. package/dist/chunk-UREJA4GZ.mjs.map +1 -0
  181. package/dist/chunk-USWZZUEH.mjs +25 -0
  182. package/dist/chunk-USWZZUEH.mjs.map +1 -0
  183. package/dist/chunk-UVCIEUJC.mjs +16 -0
  184. package/dist/chunk-UVCIEUJC.mjs.map +1 -0
  185. package/dist/chunk-V6WE6JSZ.mjs +352 -0
  186. package/dist/chunk-V6WE6JSZ.mjs.map +1 -0
  187. package/dist/chunk-V7RBCSDJ.mjs +170 -0
  188. package/dist/chunk-V7RBCSDJ.mjs.map +1 -0
  189. package/dist/chunk-VCANOYFI.mjs +588 -0
  190. package/dist/chunk-VCANOYFI.mjs.map +1 -0
  191. package/dist/chunk-WZ5QFROO.mjs +23 -0
  192. package/dist/chunk-WZ5QFROO.mjs.map +1 -0
  193. package/dist/chunk-Y2OJJD7R.mjs +543 -0
  194. package/dist/chunk-Y2OJJD7R.mjs.map +1 -0
  195. package/dist/chunk-Y7A27276.mjs +538 -0
  196. package/dist/chunk-Y7A27276.mjs.map +1 -0
  197. package/dist/chunk-YHU7SS6L.mjs +365 -0
  198. package/dist/chunk-YHU7SS6L.mjs.map +1 -0
  199. package/dist/chunk-ZBE6MLHL.mjs +230 -0
  200. package/dist/chunk-ZBE6MLHL.mjs.map +1 -0
  201. package/dist/chunk-ZJQNATYV.mjs +299 -0
  202. package/dist/chunk-ZJQNATYV.mjs.map +1 -0
  203. package/dist/client-D_yUjVhe.d.mts +402 -0
  204. package/dist/client-Dkc03WP8.d.ts +402 -0
  205. package/dist/client-cache-CIlyBlmx.d.ts +6 -0
  206. package/dist/client-cache-D-EZ7XVW.d.mts +6 -0
  207. package/dist/client-plugins-BZnpeTGA.d.ts +1848 -0
  208. package/dist/client-plugins-g4bzuCmo.d.mts +1848 -0
  209. package/dist/client-plugins.cjs +415 -0
  210. package/dist/client-plugins.cjs.map +1 -0
  211. package/dist/client-plugins.d.mts +21 -0
  212. package/dist/client-plugins.d.ts +21 -0
  213. package/dist/client-plugins.mjs +10 -0
  214. package/dist/client-plugins.mjs.map +1 -0
  215. package/dist/client.cjs +4571 -0
  216. package/dist/client.cjs.map +1 -0
  217. package/dist/client.d.mts +329 -0
  218. package/dist/client.d.ts +329 -0
  219. package/dist/client.mjs +103 -0
  220. package/dist/client.mjs.map +1 -0
  221. package/dist/config.cjs +38 -0
  222. package/dist/config.cjs.map +1 -0
  223. package/dist/config.d.mts +28 -0
  224. package/dist/config.d.ts +28 -0
  225. package/dist/config.mjs +10 -0
  226. package/dist/config.mjs.map +1 -0
  227. package/dist/cron.cjs +406 -0
  228. package/dist/cron.cjs.map +1 -0
  229. package/dist/cron.d.mts +78 -0
  230. package/dist/cron.d.ts +78 -0
  231. package/dist/cron.mjs +30 -0
  232. package/dist/cron.mjs.map +1 -0
  233. package/dist/deferred.cjs +438 -0
  234. package/dist/deferred.cjs.map +1 -0
  235. package/dist/deferred.d.mts +42 -0
  236. package/dist/deferred.d.ts +42 -0
  237. package/dist/deferred.mjs +28 -0
  238. package/dist/deferred.mjs.map +1 -0
  239. package/dist/deployment.cjs +199 -0
  240. package/dist/deployment.cjs.map +1 -0
  241. package/dist/deployment.d.mts +34 -0
  242. package/dist/deployment.d.ts +34 -0
  243. package/dist/deployment.mjs +38 -0
  244. package/dist/deployment.mjs.map +1 -0
  245. package/dist/devtools-AE4RVXCM.mjs +370 -0
  246. package/dist/devtools-AE4RVXCM.mjs.map +1 -0
  247. package/dist/devtools-client-6WPY2AQU.mjs +225 -0
  248. package/dist/devtools-client-6WPY2AQU.mjs.map +1 -0
  249. package/dist/devtools-ui-NJKFORTG.mjs +1349 -0
  250. package/dist/devtools-ui-NJKFORTG.mjs.map +1 -0
  251. package/dist/docs.cjs +5541 -0
  252. package/dist/docs.cjs.map +1 -0
  253. package/dist/docs.d.mts +69 -0
  254. package/dist/docs.d.ts +69 -0
  255. package/dist/docs.mjs +46 -0
  256. package/dist/docs.mjs.map +1 -0
  257. package/dist/env-types.cjs +223 -0
  258. package/dist/env-types.cjs.map +1 -0
  259. package/dist/env-types.d.mts +11 -0
  260. package/dist/env-types.d.ts +11 -0
  261. package/dist/env-types.mjs +9 -0
  262. package/dist/env-types.mjs.map +1 -0
  263. package/dist/env.cjs +215 -0
  264. package/dist/env.cjs.map +1 -0
  265. package/dist/env.d.mts +45 -0
  266. package/dist/env.d.ts +45 -0
  267. package/dist/env.mjs +22 -0
  268. package/dist/env.mjs.map +1 -0
  269. package/dist/environment/vite.cjs +374 -0
  270. package/dist/environment/vite.cjs.map +1 -0
  271. package/dist/environment/vite.d.mts +22 -0
  272. package/dist/environment/vite.d.ts +22 -0
  273. package/dist/environment/vite.mjs +10 -0
  274. package/dist/environment/vite.mjs.map +1 -0
  275. package/dist/environment.cjs +96 -0
  276. package/dist/environment.cjs.map +1 -0
  277. package/dist/environment.d.mts +18 -0
  278. package/dist/environment.d.ts +18 -0
  279. package/dist/environment.mjs +14 -0
  280. package/dist/environment.mjs.map +1 -0
  281. package/dist/headers.cjs +126 -0
  282. package/dist/headers.cjs.map +1 -0
  283. package/dist/headers.d.mts +22 -0
  284. package/dist/headers.d.ts +22 -0
  285. package/dist/headers.mjs +12 -0
  286. package/dist/headers.mjs.map +1 -0
  287. package/dist/i18n/client.cjs +283 -0
  288. package/dist/i18n/client.cjs.map +1 -0
  289. package/dist/i18n/client.d.mts +32 -0
  290. package/dist/i18n/client.d.ts +32 -0
  291. package/dist/i18n/client.mjs +121 -0
  292. package/dist/i18n/client.mjs.map +1 -0
  293. package/dist/i18n/index.cjs +130 -0
  294. package/dist/i18n/index.cjs.map +1 -0
  295. package/dist/i18n/index.d.mts +20 -0
  296. package/dist/i18n/index.d.ts +20 -0
  297. package/dist/i18n/index.mjs +22 -0
  298. package/dist/i18n/index.mjs.map +1 -0
  299. package/dist/i18n/server.cjs +637 -0
  300. package/dist/i18n/server.cjs.map +1 -0
  301. package/dist/i18n/server.d.mts +30 -0
  302. package/dist/i18n/server.d.ts +30 -0
  303. package/dist/i18n/server.mjs +32 -0
  304. package/dist/i18n/server.mjs.map +1 -0
  305. package/dist/image/server.cjs +477 -0
  306. package/dist/image/server.cjs.map +1 -0
  307. package/dist/image/server.d.mts +37 -0
  308. package/dist/image/server.d.ts +37 -0
  309. package/dist/image/server.mjs +16 -0
  310. package/dist/image/server.mjs.map +1 -0
  311. package/dist/image/sharp.cjs +135 -0
  312. package/dist/image/sharp.cjs.map +1 -0
  313. package/dist/image/sharp.d.mts +7 -0
  314. package/dist/image/sharp.d.ts +7 -0
  315. package/dist/image/sharp.mjs +75 -0
  316. package/dist/image/sharp.mjs.map +1 -0
  317. package/dist/image-config-Duob7wER.d.mts +50 -0
  318. package/dist/image-config-Duob7wER.d.ts +50 -0
  319. package/dist/image.cjs +209 -0
  320. package/dist/image.cjs.map +1 -0
  321. package/dist/image.d.mts +39 -0
  322. package/dist/image.d.ts +39 -0
  323. package/dist/image.mjs +165 -0
  324. package/dist/image.mjs.map +1 -0
  325. package/dist/index.cjs +39433 -0
  326. package/dist/index.cjs.map +1 -0
  327. package/dist/index.d.mts +451 -0
  328. package/dist/index.d.ts +451 -0
  329. package/dist/index.mjs +930 -0
  330. package/dist/index.mjs.map +1 -0
  331. package/dist/integration-api-CHT2OKAf.d.mts +93 -0
  332. package/dist/integration-api-CHT2OKAf.d.ts +93 -0
  333. package/dist/integration-orm-GQLGU66X.mjs +13 -0
  334. package/dist/integration-orm-GQLGU66X.mjs.map +1 -0
  335. package/dist/integrations.cjs +2820 -0
  336. package/dist/integrations.cjs.map +1 -0
  337. package/dist/integrations.d.mts +21 -0
  338. package/dist/integrations.d.ts +21 -0
  339. package/dist/integrations.mjs +51 -0
  340. package/dist/integrations.mjs.map +1 -0
  341. package/dist/internal/build-runtime.cjs +31340 -0
  342. package/dist/internal/build-runtime.cjs.map +1 -0
  343. package/dist/internal/build-runtime.d.mts +38 -0
  344. package/dist/internal/build-runtime.d.ts +38 -0
  345. package/dist/internal/build-runtime.mjs +73 -0
  346. package/dist/internal/build-runtime.mjs.map +1 -0
  347. package/dist/internal/client-runtime.cjs +579 -0
  348. package/dist/internal/client-runtime.cjs.map +1 -0
  349. package/dist/internal/client-runtime.d.mts +2 -0
  350. package/dist/internal/client-runtime.d.ts +2 -0
  351. package/dist/internal/client-runtime.mjs +12 -0
  352. package/dist/internal/client-runtime.mjs.map +1 -0
  353. package/dist/internal/config-runtime.cjs +4172 -0
  354. package/dist/internal/config-runtime.cjs.map +1 -0
  355. package/dist/internal/config-runtime.d.mts +38 -0
  356. package/dist/internal/config-runtime.d.ts +38 -0
  357. package/dist/internal/config-runtime.mjs +38 -0
  358. package/dist/internal/config-runtime.mjs.map +1 -0
  359. package/dist/internal/production-node-env.cjs +65 -0
  360. package/dist/internal/production-node-env.cjs.map +1 -0
  361. package/dist/internal/production-node-env.d.mts +12 -0
  362. package/dist/internal/production-node-env.d.ts +12 -0
  363. package/dist/internal/production-node-env.mjs +8 -0
  364. package/dist/internal/production-node-env.mjs.map +1 -0
  365. package/dist/internal/production-runtime.cjs +1896 -0
  366. package/dist/internal/production-runtime.cjs.map +1 -0
  367. package/dist/internal/production-runtime.d.mts +39 -0
  368. package/dist/internal/production-runtime.d.ts +39 -0
  369. package/dist/internal/production-runtime.mjs +79 -0
  370. package/dist/internal/production-runtime.mjs.map +1 -0
  371. package/dist/layers-VWVDTPUZ.mjs +16 -0
  372. package/dist/layers-VWVDTPUZ.mjs.map +1 -0
  373. package/dist/manager-THKFTOFE.mjs +10 -0
  374. package/dist/manager-THKFTOFE.mjs.map +1 -0
  375. package/dist/markdown.cjs +299 -0
  376. package/dist/markdown.cjs.map +1 -0
  377. package/dist/markdown.d.mts +43 -0
  378. package/dist/markdown.d.ts +43 -0
  379. package/dist/markdown.mjs +14 -0
  380. package/dist/markdown.mjs.map +1 -0
  381. package/dist/metadata-C9NZxMDW.d.mts +22 -0
  382. package/dist/metadata-DAXRaOHx.d.ts +22 -0
  383. package/dist/middleware.cjs +2148 -0
  384. package/dist/middleware.cjs.map +1 -0
  385. package/dist/middleware.d.mts +163 -0
  386. package/dist/middleware.d.ts +163 -0
  387. package/dist/middleware.mjs +49 -0
  388. package/dist/middleware.mjs.map +1 -0
  389. package/dist/navigation-errors-Dvwpzaer.d.mts +13 -0
  390. package/dist/navigation-errors-Dvwpzaer.d.ts +13 -0
  391. package/dist/navigation.cjs +1304 -0
  392. package/dist/navigation.cjs.map +1 -0
  393. package/dist/navigation.d.mts +14 -0
  394. package/dist/navigation.d.ts +14 -0
  395. package/dist/navigation.mjs +33 -0
  396. package/dist/navigation.mjs.map +1 -0
  397. package/dist/nitro-KME62MWG.mjs +691 -0
  398. package/dist/nitro-KME62MWG.mjs.map +1 -0
  399. package/dist/observability.cjs +186 -0
  400. package/dist/observability.cjs.map +1 -0
  401. package/dist/observability.d.mts +335 -0
  402. package/dist/observability.d.ts +335 -0
  403. package/dist/observability.mjs +16 -0
  404. package/dist/observability.mjs.map +1 -0
  405. package/dist/params-BALtrRim.d.ts +15 -0
  406. package/dist/params-ry-lxqmy.d.mts +15 -0
  407. package/dist/plugin-BJDf43dc.d.mts +165 -0
  408. package/dist/plugin-BJDf43dc.d.ts +165 -0
  409. package/dist/plugin.cjs +22285 -0
  410. package/dist/plugin.cjs.map +1 -0
  411. package/dist/plugin.d.mts +21 -0
  412. package/dist/plugin.d.ts +21 -0
  413. package/dist/plugin.mjs +60 -0
  414. package/dist/plugin.mjs.map +1 -0
  415. package/dist/production-runtime-C_B79w2P.d.mts +28 -0
  416. package/dist/production-runtime-DDEM1D2q.d.ts +28 -0
  417. package/dist/production-runtime-DRkCHUvJ.d.ts +79 -0
  418. package/dist/production-runtime-flrjp_nC.d.mts +79 -0
  419. package/dist/query/client.cjs +560 -0
  420. package/dist/query/client.cjs.map +1 -0
  421. package/dist/query/client.d.mts +61 -0
  422. package/dist/query/client.d.ts +61 -0
  423. package/dist/query/client.mjs +364 -0
  424. package/dist/query/client.mjs.map +1 -0
  425. package/dist/query/index.cjs +226 -0
  426. package/dist/query/index.cjs.map +1 -0
  427. package/dist/query/index.d.mts +90 -0
  428. package/dist/query/index.d.ts +90 -0
  429. package/dist/query/index.mjs +31 -0
  430. package/dist/query/index.mjs.map +1 -0
  431. package/dist/query/parsers.cjs +178 -0
  432. package/dist/query/parsers.cjs.map +1 -0
  433. package/dist/query/parsers.d.mts +25 -0
  434. package/dist/query/parsers.d.ts +25 -0
  435. package/dist/query/parsers.mjs +24 -0
  436. package/dist/query/parsers.mjs.map +1 -0
  437. package/dist/query/server.cjs +301 -0
  438. package/dist/query/server.cjs.map +1 -0
  439. package/dist/query/server.d.mts +55 -0
  440. package/dist/query/server.d.ts +55 -0
  441. package/dist/query/server.mjs +105 -0
  442. package/dist/query/server.mjs.map +1 -0
  443. package/dist/request-BrFBuc8G.d.mts +6 -0
  444. package/dist/request-BslSZIRz.d.ts +6 -0
  445. package/dist/request.cjs +71 -0
  446. package/dist/request.cjs.map +1 -0
  447. package/dist/request.d.mts +2 -0
  448. package/dist/request.d.ts +2 -0
  449. package/dist/request.mjs +9 -0
  450. package/dist/request.mjs.map +1 -0
  451. package/dist/resolver-C6iecsDV.d.ts +14 -0
  452. package/dist/resolver-DlOPpjkB.d.mts +14 -0
  453. package/dist/route-runtime-DoOHzCAD.d.mts +38 -0
  454. package/dist/route-runtime-DoOHzCAD.d.ts +38 -0
  455. package/dist/router.cjs +254 -0
  456. package/dist/router.cjs.map +1 -0
  457. package/dist/router.d.mts +36 -0
  458. package/dist/router.d.ts +36 -0
  459. package/dist/router.mjs +14 -0
  460. package/dist/router.mjs.map +1 -0
  461. package/dist/routes.cjs +1213 -0
  462. package/dist/routes.cjs.map +1 -0
  463. package/dist/routes.d.mts +224 -0
  464. package/dist/routes.d.ts +224 -0
  465. package/dist/routes.mjs +52 -0
  466. package/dist/routes.mjs.map +1 -0
  467. package/dist/runtime-B6GvwDS1.d.ts +27 -0
  468. package/dist/runtime-DeAAZ6gO.d.mts +27 -0
  469. package/dist/search-client-6OXIBNYQ.mjs +14 -0
  470. package/dist/search-client-6OXIBNYQ.mjs.map +1 -0
  471. package/dist/server-action-security.cjs +492 -0
  472. package/dist/server-action-security.cjs.map +1 -0
  473. package/dist/server-action-security.d.mts +42 -0
  474. package/dist/server-action-security.d.ts +42 -0
  475. package/dist/server-action-security.mjs +29 -0
  476. package/dist/server-action-security.mjs.map +1 -0
  477. package/dist/server-fn-client.cjs +180 -0
  478. package/dist/server-fn-client.cjs.map +1 -0
  479. package/dist/server-fn-client.d.mts +31 -0
  480. package/dist/server-fn-client.d.ts +31 -0
  481. package/dist/server-fn-client.mjs +9 -0
  482. package/dist/server-fn-client.mjs.map +1 -0
  483. package/dist/server-fn.cjs +284 -0
  484. package/dist/server-fn.cjs.map +1 -0
  485. package/dist/server-fn.d.mts +84 -0
  486. package/dist/server-fn.d.ts +84 -0
  487. package/dist/server-fn.mjs +17 -0
  488. package/dist/server-fn.mjs.map +1 -0
  489. package/dist/server-plugins.cjs +235 -0
  490. package/dist/server-plugins.cjs.map +1 -0
  491. package/dist/server-plugins.d.mts +54 -0
  492. package/dist/server-plugins.d.ts +54 -0
  493. package/dist/server-plugins.mjs +18 -0
  494. package/dist/server-plugins.mjs.map +1 -0
  495. package/dist/server-query-client.cjs +792 -0
  496. package/dist/server-query-client.cjs.map +1 -0
  497. package/dist/server-query-client.d.mts +50 -0
  498. package/dist/server-query-client.d.ts +50 -0
  499. package/dist/server-query-client.mjs +23 -0
  500. package/dist/server-query-client.mjs.map +1 -0
  501. package/dist/server-query.cjs +804 -0
  502. package/dist/server-query.cjs.map +1 -0
  503. package/dist/server-query.d.mts +36 -0
  504. package/dist/server-query.d.ts +36 -0
  505. package/dist/server-query.mjs +18 -0
  506. package/dist/server-query.mjs.map +1 -0
  507. package/dist/server.cjs +25739 -0
  508. package/dist/server.cjs.map +1 -0
  509. package/dist/server.d.mts +47 -0
  510. package/dist/server.d.ts +47 -0
  511. package/dist/server.mjs +511 -0
  512. package/dist/server.mjs.map +1 -0
  513. package/dist/storage.cjs +515 -0
  514. package/dist/storage.cjs.map +1 -0
  515. package/dist/storage.d.mts +52 -0
  516. package/dist/storage.d.ts +52 -0
  517. package/dist/storage.mjs +58 -0
  518. package/dist/storage.mjs.map +1 -0
  519. package/dist/testing.cjs +1882 -0
  520. package/dist/testing.cjs.map +1 -0
  521. package/dist/testing.d.mts +100 -0
  522. package/dist/testing.d.ts +100 -0
  523. package/dist/testing.mjs +324 -0
  524. package/dist/testing.mjs.map +1 -0
  525. package/dist/types-BH1lhg5G.d.mts +81 -0
  526. package/dist/types-BH1lhg5G.d.ts +81 -0
  527. package/dist/types-C9N-nk5R.d.mts +53 -0
  528. package/dist/types-C9N-nk5R.d.ts +53 -0
  529. package/dist/types-D1A6-XvH.d.mts +73 -0
  530. package/dist/types-D1A6-XvH.d.ts +73 -0
  531. package/dist/utils-DA1yo54_.d.ts +23 -0
  532. package/dist/utils-DOXXivjL.d.mts +23 -0
  533. package/dist/vite.cjs +22684 -0
  534. package/dist/vite.cjs.map +1 -0
  535. package/dist/vite.d.mts +21 -0
  536. package/dist/vite.d.ts +21 -0
  537. package/dist/vite.mjs +59 -0
  538. package/dist/vite.mjs.map +1 -0
  539. package/dist/workflows.cjs +586 -0
  540. package/dist/workflows.cjs.map +1 -0
  541. package/dist/workflows.d.mts +110 -0
  542. package/dist/workflows.d.ts +110 -0
  543. package/dist/workflows.mjs +32 -0
  544. package/dist/workflows.mjs.map +1 -0
  545. package/package.json +523 -0
  546. package/types/api.d.ts +88 -0
  547. package/types/client.d.ts +1171 -0
  548. package/types/index.d.ts +17 -0
  549. package/types/middleware.d.ts +266 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/docs/handler.ts","../src/docs/last-modified.ts","../src/docs/pixel-border-css.ts","../src/docs/api.ts"],"sourcesContent":["import { existsSync, readdirSync, readFileSync, statSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport path from \"node:path\";\nimport {\n buildDocsAgentDiscoverySpec,\n buildDocsSitemapManifest,\n isDocsAgentDiscoveryRequest,\n isDocsAgentsRequest,\n isDocsSkillRequest,\n renderDocsAgentsDocument,\n renderDocsLlmsTxt,\n renderDocsMarkdownDocument,\n renderDocsRobotsTxt,\n renderDocsSitemapMarkdown,\n renderDocsSitemapXml,\n renderDocsSkillDocument,\n resolveDocsLlmsTxtFormat,\n resolveDocsRobotsRequest,\n resolveDocsSitemapRequest,\n type DocsLlmsTxtPageInput,\n type DocsMarkdownPage,\n type DocsSitemapPageInput,\n} from \"@farming-labs/docs\";\nimport { marked, Renderer } from \"marked\";\nimport { highlight } from \"sugar-high\";\nimport { resolveFarmDocsPageLastModified } from \"./last-modified\";\nimport { farmDocsPixelBorderCss } from \"./pixel-border-css\";\nimport { generateFarmDocsSearchBootstrapRuntime, isFarmDocsSearchEnabled } from \"./search-client\";\nimport type { FarmDocsResolvedConfig } from \"./types\";\n\nexport interface FarmDocsHandlerOptions {\n root: string;\n srcDir?: string;\n clientEntry?: string;\n}\n\nexport interface FarmDocsPage {\n slug: string;\n title: string;\n description?: string;\n section?: string;\n href: string;\n sourcePath: string;\n lastModified?: string;\n}\n\nexport interface LoadedFarmDocsPage extends FarmDocsPage {\n body: string;\n frontmatter: Record<string, string>;\n}\n\nconst DOCS_FILE_NAMES = [\"page.mdx\", \"page.md\", \"index.mdx\", \"index.md\"];\nconst DOCS_FILE_EXTENSIONS = [\".mdx\", \".md\"];\nconst FARM_DOCS_FALLBACK_FAVICON =\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' fill='black'/%3E%3Cpath d='M7 8h18v3H10v5h12v3H10v5H7z' fill='white'/%3E%3C/svg%3E\";\nconst FARM_DOCS_FAVICON_FILES = [\"favicon.svg\", \"favicon.ico\", \"favicon.png\"];\n\nconst GEIST_SANS_FONT_URL = \"/assets/Geist-Variable-CrgPqtmy.woff2\";\nconst GEIST_MONO_FONT_URL = \"/assets/GeistMono-Variable-BNLlm6Cd.woff2\";\n\nfunction trimSlashes(value: string): string {\n return value.replace(/^\\/+|\\/+$/g, \"\");\n}\n\nfunction normalizeEntry(entry: string | undefined): string {\n if (!entry || entry === \"/\") return \"/\";\n return `/${trimSlashes(entry)}`;\n}\n\nfunction normalizeSlug(value: string): string {\n return trimSlashes(decodeURIComponent(value)).replace(/\\.(mdx?|markdown)$/i, \"\");\n}\n\nfunction resolveFarmDocsFavicon(\n docs: FarmDocsResolvedConfig | undefined,\n options: FarmDocsHandlerOptions,\n): string {\n const configuredFavicon = docs?.config.favicon;\n if (typeof configuredFavicon === \"string\" && configuredFavicon.trim()) {\n return configuredFavicon.trim();\n }\n\n const publicDir = path.join(path.resolve(options.root), \"public\");\n\n for (const fileName of FARM_DOCS_FAVICON_FILES) {\n const faviconPath = path.join(publicDir, fileName);\n if (existsSync(faviconPath) && statSync(faviconPath).isFile()) {\n return `/${fileName}`;\n }\n }\n\n return FARM_DOCS_FALLBACK_FAVICON;\n}\n\nfunction renderFarmDocsFaviconLink(faviconHref: string): string {\n const normalizedHref = faviconHref.split(/[?#]/, 1)[0]?.toLowerCase() || \"\";\n const type =\n normalizedHref.endsWith(\".svg\") || faviconHref.startsWith(\"data:image/svg+xml\")\n ? \"image/svg+xml\"\n : normalizedHref.endsWith(\".png\")\n ? \"image/png\"\n : normalizedHref.endsWith(\".ico\")\n ? \"image/x-icon\"\n : undefined;\n const metadata =\n type === \"image/svg+xml\" ? ' sizes=\"any\" type=\"image/svg+xml\"' : type ? ` type=\"${type}\"` : \"\";\n\n return `<link rel=\"icon\" href=\"${escapeAttribute(faviconHref)}\"${metadata}>`;\n}\n\nfunction renderFarmDocsBrandMark(): string {\n return `<svg class=\"sidebar-brand-logo\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\">\n <rect x=\"2\" y=\"2\" width=\"5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\"></rect>\n <path d=\"M9.75 2h11.5c.41 0 .75.34.75.75v3.5c0 .41-.34.75-.75.75H9.75A.75.75 0 0 1 9 6.25v-3.5c0-.41.34-.75.75-.75Zm9.75 1.62a.38.38 0 0 0-.38.38v1c0 .21.17.38.38.38h.75c.21 0 .38-.17.38-.38V4a.38.38 0 0 0-.38-.38h-.75Z\" fill=\"currentColor\"></path>\n <rect x=\"2\" y=\"9.5\" width=\"5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.64\"></rect>\n <rect x=\"9\" y=\"9.5\" width=\"13\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.64\"></rect>\n <rect x=\"2\" y=\"17\" width=\"5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.34\"></rect>\n <rect x=\"9\" y=\"17\" width=\"7.5\" height=\"5\" rx=\"0.75\" fill=\"currentColor\" opacity=\"0.34\"></rect>\n </svg>`;\n}\n\nfunction renderFarmDocsBrandTitle(navTitle: string): string {\n const suffix = navTitle.match(/\\.js$/i)?.[0];\n\n if (!suffix) {\n return `<span class=\"sidebar-brand-title\">${escapeHtml(navTitle)}</span>`;\n }\n\n const productName = navTitle.slice(0, -suffix.length);\n return `<span class=\"sidebar-brand-title\">${escapeHtml(productName)}<span class=\"sidebar-brand-suffix\">${escapeHtml(suffix)}</span></span>`;\n}\n\nfunction isSafeSegment(segment: string): boolean {\n return segment !== \"..\" && !segment.includes(\"/\") && !segment.includes(\"\\\\\");\n}\n\nfunction resolveInside(root: string, target: string): string | null {\n const resolvedRoot = path.resolve(root);\n const resolvedTarget = path.resolve(target);\n const relative = path.relative(resolvedRoot, resolvedTarget);\n if (relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative))) {\n return resolvedTarget;\n }\n return null;\n}\n\nexport function isFarmDocsRequest(docs: FarmDocsResolvedConfig | undefined, request: Request) {\n if (!docs?.enabled) return false;\n if (request.method !== \"GET\" && request.method !== \"HEAD\") return false;\n\n const pathname = new URL(request.url).pathname;\n const entry = normalizeEntry(docs.entry);\n if (entry === \"/\") return true;\n\n return pathname === entry || pathname === `${entry}.md` || pathname.startsWith(`${entry}/`);\n}\n\nexport function resolveFarmDocsContentDir(\n docs: FarmDocsResolvedConfig,\n options: FarmDocsHandlerOptions,\n): string {\n const root = path.resolve(options.root);\n const srcDir = options.srcDir || \"src\";\n const configuredContentDir = docs.contentDir || docs.config.contentDir;\n\n if (configuredContentDir) {\n return path.isAbsolute(configuredContentDir)\n ? configuredContentDir\n : path.join(root, configuredContentDir);\n }\n\n const entryDir = docs.config.entry || trimSlashes(docs.entry) || \"docs\";\n const appDocsDir = path.join(root, srcDir, \"app\", entryDir);\n if (existsSync(appDocsDir)) return appDocsDir;\n\n return path.join(root, entryDir);\n}\n\nexport function getFarmDocsRouteTypeEntries(docs: FarmDocsResolvedConfig | undefined): string[] {\n if (!docs?.enabled) return [];\n const entry = normalizeEntry(docs.entry);\n if (entry === \"/\") return [\"/\", \"/[...docs]\"];\n return [entry, `${entry}/[...docs]`];\n}\n\nexport function getFarmDocsDocumentNavigationMatchers(\n docs: FarmDocsResolvedConfig | undefined,\n): string[] {\n if (!docs?.enabled) return [];\n const entry = normalizeEntry(docs.entry);\n return [entry === \"/\" ? \"/(.*)\" : `${entry}(.*)`];\n}\n\nfunction getRequestSlug(docs: FarmDocsResolvedConfig, request: Request): string {\n const pathname = new URL(request.url).pathname;\n const entry = normalizeEntry(docs.entry);\n\n if (entry === \"/\") return normalizeSlug(pathname);\n if (pathname === entry || pathname === `${entry}.md`) return \"\";\n\n return normalizeSlug(pathname.slice(entry.length));\n}\n\nfunction findDocsPageFile(contentDir: string, slug: string): string | null {\n const segments = slug ? slug.split(\"/\").filter(Boolean) : [];\n if (!segments.every(isSafeSegment)) return null;\n\n const slugDir = path.join(contentDir, ...segments);\n const candidates =\n segments.length === 0\n ? DOCS_FILE_NAMES.map((filename) => path.join(contentDir, filename))\n : [\n ...DOCS_FILE_NAMES.map((filename) => path.join(slugDir, filename)),\n ...DOCS_FILE_EXTENSIONS.map((extension) => path.join(contentDir, `${slug}${extension}`)),\n ];\n\n for (const candidate of candidates) {\n const safePath = resolveInside(contentDir, candidate);\n if (safePath && existsSync(safePath) && statSync(safePath).isFile()) {\n return safePath;\n }\n }\n\n return null;\n}\n\nfunction parseFrontmatter(source: string): {\n frontmatter: Record<string, string>;\n body: string;\n} {\n if (!source.startsWith(\"---\")) {\n return { frontmatter: {}, body: source };\n }\n\n const endIndex = source.indexOf(\"\\n---\", 3);\n if (endIndex === -1) return { frontmatter: {}, body: source };\n\n const frontmatterSource = source.slice(3, endIndex).trim();\n const body = source.slice(source.indexOf(\"\\n\", endIndex + 1) + 1);\n const frontmatter: Record<string, string> = {};\n\n for (const line of frontmatterSource.split(/\\r?\\n/)) {\n const separator = line.indexOf(\":\");\n if (separator === -1) continue;\n const key = line.slice(0, separator).trim();\n const value = line\n .slice(separator + 1)\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\");\n if (key && value) frontmatter[key] = value;\n }\n\n return { frontmatter, body };\n}\n\nfunction titleFromSlug(slug: string): string {\n const lastSegment = slug.split(\"/\").filter(Boolean).pop() || \"Docs\";\n return lastSegment\n .split(/[-_]/)\n .filter(Boolean)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n}\n\nfunction titleFromMarkdown(body: string, fallback: string): string {\n const heading = body.match(/^#\\s+(.+)$/m)?.[1]?.trim();\n return heading || fallback;\n}\n\nexport function loadFarmDocsPage(\n contentDir: string,\n docs: FarmDocsResolvedConfig,\n slug: string,\n): LoadedFarmDocsPage | null {\n const sourcePath = findDocsPageFile(contentDir, slug);\n if (!sourcePath) return null;\n\n const source = readFileSync(sourcePath, \"utf8\");\n const { frontmatter, body } = parseFrontmatter(source);\n const title = frontmatter.title || titleFromMarkdown(body, titleFromSlug(slug));\n const href = createDocsHref(docs.entry, slug);\n\n return {\n slug,\n title,\n description: frontmatter.description,\n href,\n sourcePath,\n lastModified: resolveFarmDocsPageLastModified(contentDir, sourcePath, frontmatter),\n frontmatter,\n body,\n };\n}\n\nfunction createDocsHref(entry: string, slug: string): string {\n const normalizedEntry = normalizeEntry(entry);\n const normalizedSlug = trimSlashes(slug);\n if (normalizedEntry === \"/\") return normalizedSlug ? `/${normalizedSlug}` : \"/\";\n return normalizedSlug ? `${normalizedEntry}/${normalizedSlug}` : normalizedEntry;\n}\n\nfunction pathToSlug(contentDir: string, filePath: string): string | null {\n const relative = path.relative(contentDir, filePath).replace(/\\\\/g, \"/\");\n if (relative.startsWith(\"..\")) return null;\n\n const extension = path.extname(relative);\n if (!DOCS_FILE_EXTENSIONS.includes(extension)) return null;\n\n const withoutExtension = relative.slice(0, -extension.length);\n if (withoutExtension === \"page\" || withoutExtension === \"index\") return \"\";\n if (withoutExtension.endsWith(\"/page\") || withoutExtension.endsWith(\"/index\")) {\n return withoutExtension.replace(/\\/(page|index)$/, \"\");\n }\n return withoutExtension;\n}\n\nfunction loadPage(\n contentDir: string,\n docs: FarmDocsResolvedConfig,\n request: Request,\n): LoadedFarmDocsPage | null {\n return loadFarmDocsPage(contentDir, docs, getRequestSlug(docs, request));\n}\n\nexport function discoverFarmDocsPages(\n contentDir: string,\n docs: FarmDocsResolvedConfig,\n): FarmDocsPage[] {\n if (!existsSync(contentDir)) return [];\n\n const pages: FarmDocsPage[] = [];\n const visit = (dir: string) => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n const absolutePath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n visit(absolutePath);\n continue;\n }\n if (!entry.isFile()) continue;\n\n const slug = pathToSlug(contentDir, absolutePath);\n if (slug === null) continue;\n\n const source = readFileSync(absolutePath, \"utf8\");\n const { frontmatter, body } = parseFrontmatter(source);\n pages.push({\n slug,\n title: frontmatter.title || titleFromMarkdown(body, titleFromSlug(slug)),\n description: frontmatter.description,\n section: frontmatter.section,\n href: createDocsHref(docs.entry, slug),\n sourcePath: absolutePath,\n lastModified: resolveFarmDocsPageLastModified(contentDir, absolutePath, frontmatter),\n });\n }\n };\n\n visit(contentDir);\n return pages.sort((a, b) => a.href.localeCompare(b.href));\n}\n\nexport function toFarmDocsMarkdownPage(page: LoadedFarmDocsPage): DocsMarkdownPage {\n const lastModified =\n page.lastModified || page.frontmatter.lastModified || page.frontmatter.lastmod;\n\n return {\n slug: page.slug,\n url: page.href,\n title: page.title,\n description: page.description,\n lastModified,\n lastmod: lastModified,\n content: page.body,\n rawContent: page.body,\n };\n}\n\nfunction getDocsTitle(docs: FarmDocsResolvedConfig): string {\n return typeof docs.config.nav === \"object\" && docs.config.nav && \"title\" in docs.config.nav\n ? String((docs.config.nav as { title?: unknown }).title || \"Documentation\")\n : \"Documentation\";\n}\n\nfunction getDocsDescription(docs: FarmDocsResolvedConfig): string | undefined {\n return docs.config.metadata?.description;\n}\n\nfunction getLoadedDocsPages(\n contentDir: string,\n docs: FarmDocsResolvedConfig,\n): LoadedFarmDocsPage[] {\n return discoverFarmDocsPages(contentDir, docs)\n .map((page) => loadFarmDocsPage(contentDir, docs, page.slug))\n .filter((page): page is LoadedFarmDocsPage => Boolean(page));\n}\n\nfunction toDocsLlmsPage(page: LoadedFarmDocsPage): DocsLlmsTxtPageInput {\n return toFarmDocsMarkdownPage(page);\n}\n\nfunction toDocsSitemapPage(page: LoadedFarmDocsPage): DocsSitemapPageInput {\n return {\n ...toFarmDocsMarkdownPage(page),\n sourcePath: page.sourcePath,\n };\n}\n\ntype CopyMarkdownActionConfig = {\n format: \"markdown\" | \"text\";\n includeTitle: boolean;\n label: string;\n copiedLabel: string;\n};\n\ntype LastUpdatedDisplayConfig = {\n enabled: boolean;\n label: string;\n position: \"footer\" | \"below-title\";\n};\n\ntype ReadingTimeDisplayConfig = {\n wordsPerMinute: number;\n format: \"long\" | \"short\";\n includeCode: boolean;\n};\n\nfunction resolvePageActionsConfig(docs: FarmDocsResolvedConfig): Record<string, unknown> {\n return isObjectRecord(docs.config.pageActions) ? docs.config.pageActions : {};\n}\n\nfunction resolvePageActionsAlignment(docs: FarmDocsResolvedConfig): \"left\" | \"right\" {\n return resolvePageActionsConfig(docs).alignment === \"right\" ? \"right\" : \"left\";\n}\n\nfunction resolveCopyMarkdownActionConfig(\n docs: FarmDocsResolvedConfig,\n): CopyMarkdownActionConfig | null {\n const raw = resolvePageActionsConfig(docs).copyMarkdown;\n if (raw === undefined || raw === false) return null;\n\n const options = isObjectRecord(raw) ? raw : {};\n if (isObjectRecord(raw) && raw.enabled === false) return null;\n\n return {\n format: options.format === \"text\" ? \"text\" : \"markdown\",\n includeTitle: options.includeTitle === true,\n label: readString(options.label) ?? \"Copy page\",\n copiedLabel: readString(options.copiedLabel) ?? \"Copied!\",\n };\n}\n\nfunction resolveLastUpdatedDisplayConfig(docs: FarmDocsResolvedConfig): LastUpdatedDisplayConfig {\n const raw = docs.config.lastUpdated;\n const options = isObjectRecord(raw) ? raw : {};\n\n return {\n enabled: raw !== false && (!isObjectRecord(raw) || raw.enabled !== false),\n label: typeof options.label === \"string\" ? options.label : \"Last updated\",\n position: options.position === \"below-title\" ? \"below-title\" : \"footer\",\n };\n}\n\nfunction formatLastModifiedDate(value: string | undefined): string | undefined {\n if (!value) return undefined;\n\n const date = new Date(value);\n if (Number.isNaN(date.getTime())) return value;\n\n return new Intl.DateTimeFormat(\"en\", {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }).format(date);\n}\n\nfunction renderLastUpdatedText(\n page: LoadedFarmDocsPage,\n docs: FarmDocsResolvedConfig,\n position: \"footer\" | \"below-title\",\n): string {\n const config = resolveLastUpdatedDisplayConfig(docs);\n const formatted = formatLastModifiedDate(page.lastModified);\n if (!config.enabled || config.position !== position || !formatted) return \"\";\n\n const time = `<time datetime=\"${escapeAttribute(page.lastModified || \"\")}\">${escapeHtml(formatted)}</time>`;\n const label = config.label.trim();\n return label ? `${escapeHtml(label)} ${time}` : time;\n}\n\nfunction resolveReadingTimeDisplayConfig(\n docs: FarmDocsResolvedConfig,\n): ReadingTimeDisplayConfig | null {\n const raw = docs.config.readingTime;\n if (raw === undefined || raw === false) return null;\n\n const options = isObjectRecord(raw) ? raw : {};\n if (isObjectRecord(raw) && options.enabled === false) return null;\n\n const wordsPerMinute =\n typeof options.wordsPerMinute === \"number\" && options.wordsPerMinute > 0\n ? options.wordsPerMinute\n : 220;\n\n return {\n wordsPerMinute,\n format: options.format === \"short\" ? \"short\" : \"long\",\n includeCode: options.includeCode === true,\n };\n}\n\nfunction countMarkdownWords(body: string, includeCode: boolean): number {\n const readable = (\n includeCode ? body : body.replace(/```[\\s\\S]*?```/g, \" \").replace(/`[^`]*`/g, \" \")\n )\n .replace(/!\\[[^\\]]*]\\([^)]*\\)/g, \" \")\n .replace(/\\[([^\\]]+)]\\([^)]*\\)/g, \"$1\")\n .replace(/<[^>]+>/g, \" \")\n .replace(/[#>*_~`|:-]/g, \" \");\n\n return readable.match(/[A-Za-z0-9]+(?:[-'][A-Za-z0-9]+)*/g)?.length ?? 0;\n}\n\nfunction renderReadingTimeMeta(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n const config = resolveReadingTimeDisplayConfig(docs);\n if (!config) return \"\";\n\n const words = countMarkdownWords(page.body, config.includeCode);\n const minutes = Math.max(1, Math.ceil(words / config.wordsPerMinute));\n const label = config.format === \"short\" ? `${minutes} min` : `${minutes} min read`;\n\n return `<div class=\"fd-page-meta not-prose\" data-page-reading-time>\n <span class=\"fd-page-meta-dot\" aria-hidden=\"true\">·</span>\n <span class=\"fd-page-meta-item\">${escapeHtml(label)}</span>\n</div>`;\n}\n\nfunction renderPixelPageActions(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n const copyMarkdown = resolveCopyMarkdownActionConfig(docs);\n if (!copyMarkdown) return \"\";\n\n const markdownUrl = `${page.href}.md`;\n const includeTitle = copyMarkdown.includeTitle ? \"true\" : \"false\";\n\n return `<div class=\"fd-page-actions\" data-page-actions data-actions-alignment=\"${resolvePageActionsAlignment(docs)}\">\n <button\n type=\"button\"\n class=\"fd-page-action-btn\"\n data-page-action=\"copy-markdown\"\n data-copied=\"false\"\n data-markdown-url=\"${escapeAttribute(markdownUrl)}\"\n data-copy-markdown-format=\"${copyMarkdown.format}\"\n data-copy-markdown-include-title=\"${includeTitle}\"\n data-copy-label=\"${escapeAttribute(copyMarkdown.label)}\"\n data-copied-label=\"${escapeAttribute(copyMarkdown.copiedLabel)}\"\n aria-label=\"${escapeAttribute(copyMarkdown.label)}\"\n title=\"${escapeAttribute(copyMarkdown.label)}\"\n >\n <svg class=\"fd-page-action-copy-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg>\n <svg class=\"fd-page-action-check-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20 6 9 17l-5-5\"></path></svg>\n <span data-page-action-label>${escapeHtml(copyMarkdown.label)}</span>\n </button>\n</div>`;\n}\n\nfunction renderBelowTitleMeta(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n const lastUpdated = renderLastUpdatedText(page, docs, \"below-title\");\n const actions = renderPixelPageActions(page, docs);\n const readingTime = renderReadingTimeMeta(page, docs);\n if (!lastUpdated && !actions && !readingTime) return \"\";\n\n return `<div class=\"fd-below-title-block not-prose\">\n ${lastUpdated ? `<p class=\"fd-last-updated-inline\">${lastUpdated}</p>` : \"\"}\n ${actions}\n ${readingTime}\n</div>`;\n}\n\nfunction renderMarkdownHtmlWithTitleMeta(\n page: LoadedFarmDocsPage,\n docs: FarmDocsResolvedConfig,\n): string {\n const html = renderMarkdownHtml(page.body);\n const meta = renderBelowTitleMeta(page, docs);\n if (!meta) return html;\n\n const withTitleMeta = html.replace(/(<h1\\b[\\s\\S]*?<\\/h1>)/, `$1\\n${meta}`);\n return withTitleMeta === html ? `${meta}\\n${html}` : withTitleMeta;\n}\n\nfunction renderPixelPageFooter(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n const lastUpdated = renderLastUpdatedText(page, docs, \"footer\");\n if (!lastUpdated) return \"\";\n\n return `<div class=\"not-prose fd-page-footer\">\n <span class=\"fd-last-updated-footer\">${lastUpdated}</span>\n</div>`;\n}\n\nfunction getDocsLlmsOptions(docs: FarmDocsResolvedConfig, request: Request) {\n const configured =\n typeof docs.config.llmsTxt === \"object\" && docs.config.llmsTxt !== null\n ? docs.config.llmsTxt\n : {};\n return {\n enabled: true,\n baseUrl: new URL(request.url).origin,\n siteTitle: getDocsTitle(docs),\n siteDescription: getDocsDescription(docs),\n ...configured,\n };\n}\n\nfunction getDocsDiscoveryOptions(docs: FarmDocsResolvedConfig, request: Request) {\n return {\n origin: new URL(request.url).origin,\n entry: docs.entry,\n i18n: null,\n search: docs.config.search ?? true,\n mcp: {\n enabled: false,\n route: \"/api/docs/mcp\",\n name: `${getDocsTitle(docs)} MCP`,\n version: \"1\",\n tools: {\n listDocs: false,\n listPages: false,\n readPage: false,\n searchDocs: false,\n getNavigation: false,\n getCodeExamples: false,\n getConfigSchema: false,\n },\n },\n feedback: undefined,\n llms: getDocsLlmsOptions(docs, request),\n sitemap: docs.config.sitemap ?? true,\n robots: docs.config.robots ?? true,\n openapi: undefined,\n markdown: {\n acceptHeader: true,\n signatureAgentHeader: true,\n },\n };\n}\n\nfunction createFarmDocsPublicResponse(\n contentDir: string,\n docs: FarmDocsResolvedConfig,\n request: Request,\n): Response | null {\n const url = new URL(request.url);\n const loadedPages = getLoadedDocsPages(contentDir, docs);\n const sitemapManifest = () =>\n buildDocsSitemapManifest({\n pages: loadedPages.map(toDocsSitemapPage),\n entry: docs.entry,\n siteTitle: getDocsTitle(docs),\n baseUrl: url.origin,\n });\n const textHeaders = (contentType: string) => ({\n \"Content-Type\": contentType,\n \"Cache-Control\": \"public, max-age=60\",\n });\n\n const llmsFormat = resolveDocsLlmsTxtFormat(url);\n if (llmsFormat) {\n const generated = renderDocsLlmsTxt(\n loadedPages.map(toDocsLlmsPage),\n getDocsLlmsOptions(docs, request),\n );\n return new Response(llmsFormat === \"llms-full\" ? generated.llmsFullTxt : generated.llmsTxt, {\n status: 200,\n headers: textHeaders(\"text/plain; charset=utf-8\"),\n });\n }\n\n const sitemapFormat = resolveDocsSitemapRequest(url, docs.config.sitemap ?? true);\n if (sitemapFormat === \"xml\") {\n return new Response(\n renderDocsSitemapXml(sitemapManifest(), {\n baseUrl: url.origin,\n includeLastmod: true,\n }),\n {\n status: 200,\n headers: textHeaders(\"application/xml; charset=utf-8\"),\n },\n );\n }\n if (sitemapFormat === \"markdown\") {\n return new Response(\n renderDocsSitemapMarkdown(sitemapManifest(), {\n includeDescriptions: true,\n }),\n {\n status: 200,\n headers: textHeaders(\"text/markdown; charset=utf-8\"),\n },\n );\n }\n\n if (resolveDocsRobotsRequest(url, docs.config.robots ?? true)) {\n return new Response(\n renderDocsRobotsTxt({\n entry: docs.entry,\n sitemap: docs.config.sitemap ?? true,\n robots: docs.config.robots ?? true,\n baseUrl: url.origin,\n }),\n {\n status: 200,\n headers: textHeaders(\"text/plain; charset=utf-8\"),\n },\n );\n }\n\n if (isDocsAgentDiscoveryRequest(url)) {\n const spec = buildDocsAgentDiscoverySpec(getDocsDiscoveryOptions(docs, request));\n const title = getDocsTitle(docs);\n return new Response(\n JSON.stringify({\n ...spec,\n name: title,\n site: {\n ...spec.site,\n title,\n description: getDocsDescription(docs),\n entry: docs.entry,\n },\n }),\n {\n status: 200,\n headers: textHeaders(\"application/json; charset=utf-8\"),\n },\n );\n }\n\n if (isDocsAgentsRequest(url)) {\n return new Response(\n `${renderDocsAgentsDocument(getDocsDiscoveryOptions(docs, request)).trim()}\\n`,\n {\n status: 200,\n headers: textHeaders(\"text/markdown; charset=utf-8\"),\n },\n );\n }\n\n if (isDocsSkillRequest(url)) {\n return new Response(\n `${renderDocsSkillDocument(getDocsDiscoveryOptions(docs, request)).trim()}\\n`,\n {\n status: 200,\n headers: textHeaders(\"text/markdown; charset=utf-8\"),\n },\n );\n }\n\n return null;\n}\n\nfunction escapeHtml(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nfunction shouldReturnMarkdown(request: Request): boolean {\n const url = new URL(request.url);\n return (\n url.pathname.endsWith(\".md\") ||\n request.headers.get(\"accept\")?.includes(\"text/markdown\") === true ||\n request.headers.get(\"accept\")?.includes(\"text/plain\") === true\n );\n}\n\nfunction escapeAttribute(value: string): string {\n return escapeHtml(value).replace(/'/g, \"&#39;\");\n}\n\nfunction slugify(value: string): string {\n return value\n .toLowerCase()\n .replace(/<[^>]+>/g, \"\")\n .replace(/`([^`]+)`/g, \"$1\")\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-|-$/g, \"\");\n}\n\nfunction createSlugger() {\n const seen = new Map<string, number>();\n\n return (value: string) => {\n const base = slugify(value) || \"section\";\n const count = seen.get(base) || 0;\n seen.set(base, count + 1);\n return count === 0 ? base : `${base}-${count + 1}`;\n };\n}\n\nfunction stripHtml(value: string): string {\n return value.replace(/<[^>]+>/g, \"\");\n}\n\nfunction getCodeFence(line: string): { marker: \"`\" | \"~\"; length: number } | null {\n const match = /^(?: {0,3})(`{3,}|~{3,})/.exec(line);\n const value = match?.[1];\n if (!value) return null;\n return { marker: value[0] as \"`\" | \"~\", length: value.length };\n}\n\nfunction isClosingCodeFence(line: string, fence: { marker: \"`\" | \"~\"; length: number }): boolean {\n const trimmed = line.trim();\n return (\n trimmed.length >= fence.length && Array.from(trimmed).every((char) => char === fence.marker)\n );\n}\n\nfunction stripMdxRuntimeSyntax(body: string): string {\n const output: string[] = [];\n let fence: { marker: \"`\" | \"~\"; length: number } | null = null;\n\n for (const line of body.split(\"\\n\")) {\n const nextFence = getCodeFence(line);\n if (fence) {\n output.push(line);\n if (nextFence && nextFence.marker === fence.marker && isClosingCodeFence(line, fence)) {\n fence = null;\n }\n continue;\n }\n\n if (nextFence) {\n fence = nextFence;\n output.push(line);\n continue;\n }\n\n if (/^\\s*import\\s.+$/.test(line) || /^\\s*export\\s+(const|default)\\s.+$/.test(line)) {\n continue;\n }\n\n output.push(line);\n }\n\n return output.join(\"\\n\");\n}\n\nfunction unescapeHtml(value: string): string {\n return value\n .replace(/&quot;/g, '\"')\n .replace(/&#39;/g, \"'\")\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&amp;/g, \"&\");\n}\n\nconst CODE_LANGUAGE_LABELS = new Set([\n \"bash\",\n \"cjs\",\n \"cmd\",\n \"console\",\n \"css\",\n \"html\",\n \"javascript\",\n \"js\",\n \"json\",\n \"jsx\",\n \"md\",\n \"mdx\",\n \"shell\",\n \"sh\",\n \"terminal\",\n \"text\",\n \"ts\",\n \"tsx\",\n \"txt\",\n \"typescript\",\n \"yaml\",\n \"yml\",\n \"zsh\",\n]);\n\nconst EXTENSIONLESS_CODE_FILENAMES = new Set([\n \"dockerfile\",\n \"makefile\",\n \"procfile\",\n \"readme\",\n \"license\",\n]);\n\nfunction isCodePathLabel(label: string): boolean {\n const trimmed = label.trim();\n if (!trimmed || /\\s/.test(trimmed)) return false;\n\n const lower = trimmed.toLowerCase();\n if (CODE_LANGUAGE_LABELS.has(lower)) return false;\n\n const fileName = trimmed.split(/[\\\\/]/).filter(Boolean).pop() || trimmed;\n const lowerFileName = fileName.toLowerCase();\n if (EXTENSIONLESS_CODE_FILENAMES.has(lowerFileName)) return true;\n if (fileName.startsWith(\".\") && fileName.length > 1) return true;\n\n return /\\.[a-z0-9][a-z0-9-]*$/i.test(fileName);\n}\n\nfunction parseCodeInfo(info: string | undefined): {\n language: string;\n label: string;\n hasExplicitLabel: boolean;\n} {\n const source = (info || \"\").trim();\n const language = source.match(/^\\S+/)?.[0] || \"text\";\n const explicitLabel = source\n .match(/\\b(?:title|filename|file|label|name)=[\"']([^\"']+)[\"']/)?.[1]\n ?.trim();\n return { language, label: explicitLabel || language, hasExplicitLabel: Boolean(explicitLabel) };\n}\n\nfunction getStandaloneCodeLabel(line: string): string | null {\n const trimmed = line.trim();\n const match = /^(?:\\*\\*([^*]+)\\*\\*|__([^_]+)__|`([^`]+)`)$/u.exec(trimmed);\n const label = match?.[1] || match?.[2] || match?.[3];\n return label?.trim() || null;\n}\n\nfunction hasCodeFenceTitle(info: string): boolean {\n return /\\b(?:title|filename|file|label|name)=[\"'][^\"']+[\"']/.test(info);\n}\n\nfunction escapeCodeFenceTitle(value: string): string {\n return value.replace(/\"/g, \"&quot;\");\n}\n\nfunction addTitleToCodeFence(line: string, title: string): string {\n const match = /^(\\s{0,3})(`{3,}|~{3,})(.*)$/u.exec(line);\n if (!match) return line;\n const [, indent, marker, infoSource] = match;\n const info = infoSource.trim();\n if (hasCodeFenceTitle(info)) return line;\n const suffix = `title=\"${escapeCodeFenceTitle(title)}\"`;\n return `${indent}${marker}${info ? `${info} ${suffix}` : `text ${suffix}`}`;\n}\n\nfunction attachCodeBlockLabels(body: string): string {\n const lines = body.split(\"\\n\");\n const output: string[] = [];\n let fence: { marker: \"`\" | \"~\"; length: number } | null = null;\n\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index] || \"\";\n const nextFence = getCodeFence(line);\n\n if (fence) {\n output.push(line);\n if (nextFence && nextFence.marker === fence.marker && isClosingCodeFence(line, fence)) {\n fence = null;\n }\n continue;\n }\n\n if (nextFence) {\n fence = nextFence;\n output.push(line);\n continue;\n }\n\n const label = getStandaloneCodeLabel(line);\n if (!label) {\n output.push(line);\n continue;\n }\n\n let fenceIndex = index + 1;\n while (fenceIndex < lines.length && (lines[fenceIndex] || \"\").trim() === \"\") {\n fenceIndex += 1;\n }\n\n const labeledFence = getCodeFence(lines[fenceIndex] || \"\");\n if (!labeledFence) {\n output.push(line);\n continue;\n }\n\n output.push(addTitleToCodeFence(lines[fenceIndex] || \"\", label));\n fence = labeledFence;\n index = fenceIndex;\n }\n\n return output.join(\"\\n\");\n}\n\nfunction highlightCodeBlock(code: string): string {\n return highlight(code.replace(/\\n$/, \"\")).replace(/<\\/span>\\n<span/g, \"</span><span\");\n}\n\nfunction renderCodeCopyButton(className = \"code-copy\"): string {\n return `<button class=\"${className}\" type=\"button\" data-copied=\"false\" aria-label=\"Copy code\" title=\"Copy code\" onclick=\"navigator.clipboard?.writeText(this.closest('figure').querySelector('code').innerText); this.dataset.copied='true'; this.setAttribute('aria-label','Copied'); this.title='Copied'; clearTimeout(this._copyTimer); this._copyTimer=setTimeout(() => { this.dataset.copied='false'; this.setAttribute('aria-label','Copy code'); this.title='Copy code'; }, 4500);\"><svg class=\"code-copy-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\"></rect><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"></path></svg><svg class=\"code-copy-check\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M20 6 9 17l-5-5\"></path></svg></button>`;\n}\n\nfunction renderMarkdownHtml(body: string): string {\n const slug = createSlugger();\n const renderer = new Renderer();\n\n renderer.heading = (text, level, raw) => {\n const id = slug(raw || stripHtml(text));\n return `<h${level} id=\"${escapeAttribute(id)}\"><a class=\"heading-anchor\" href=\"#${escapeAttribute(id)}\">${text}</a></h${level}>\\n`;\n };\n\n renderer.code = (code, infostring, escaped) => {\n const { language, label, hasExplicitLabel } = parseCodeInfo(infostring);\n const rawCode = escaped ? unescapeHtml(code) : code;\n const highlighted = highlightCodeBlock(rawCode);\n const shouldRenderHeader = hasExplicitLabel && isCodePathLabel(label);\n const header = shouldRenderHeader\n ? `<div class=\"code-block-header\">\n <span class=\"code-block-title\">${escapeHtml(label)}</span>\n ${renderCodeCopyButton()}\n </div>`\n : renderCodeCopyButton(\"code-copy code-copy-floating\");\n\n return `<figure class=\"shiki code-block ${shouldRenderHeader ? \"code-block-framed\" : \"code-block-plain\"}\" data-language=\"${escapeAttribute(language)}\">\n ${header}\n <pre><code class=\"sh-code language-${escapeAttribute(language)}\">${highlighted}</code></pre>\n</figure>\\n`;\n };\n\n renderer.table = (header, body) =>\n `<div class=\"fd-table-wrapper table-wrap relative overflow-auto prose-no-margin my-6\"><table><thead>${header}</thead><tbody>${body}</tbody></table></div>\\n`;\n\n renderer.blockquote = (quote) => `<blockquote>${quote}</blockquote>\\n`;\n renderer.codespan = (code) => `<code>${escapeHtml(code)}</code>`;\n\n renderer.link = (href, title, text) => {\n const safeHref = href || \"\";\n const titleAttribute = title ? ` title=\"${escapeAttribute(title)}\"` : \"\";\n return `<a href=\"${escapeAttribute(safeHref)}\"${titleAttribute}>${text}</a>`;\n };\n\n renderer.image = (href, title, text) => {\n const titleAttribute = title ? ` title=\"${escapeAttribute(title)}\"` : \"\";\n return `<img src=\"${escapeAttribute(href)}\" alt=\"${escapeAttribute(text)}\"${titleAttribute}>`;\n };\n\n const html = marked(attachCodeBlockLabels(stripMdxRuntimeSyntax(body)), {\n async: false,\n breaks: false,\n gfm: true,\n renderer,\n }) as string;\n\n return html.trim();\n}\n\ninterface TocItem {\n id: string;\n title: string;\n level: number;\n}\n\nfunction extractTocItems(body: string, depth: number): TocItem[] {\n const slug = createSlugger();\n const maxLevel = Math.max(2, Math.min(depth, 6));\n\n return body\n .split(/\\r?\\n/)\n .map((line) => line.match(/^(#{2,6})\\s+(.+)$/))\n .filter((match): match is RegExpMatchArray => Boolean(match))\n .map((match) => ({\n id: slug(match[2].trim()),\n title: match[2].trim(),\n level: match[1].length,\n }))\n .filter((item) => item.level <= maxLevel);\n}\n\nfunction getThemeUI(docs: FarmDocsResolvedConfig): Record<string, any> {\n const theme = docs.config.theme;\n return theme && typeof theme === \"object\" && \"ui\" in theme && typeof theme.ui === \"object\"\n ? (theme.ui as Record<string, any>)\n : {};\n}\n\nfunction getThemeName(docs: FarmDocsResolvedConfig): string {\n const theme = docs.config.theme;\n return theme && typeof theme === \"object\" && \"name\" in theme\n ? String((theme as { name?: unknown }).name || \"farm-docs\")\n : \"farm-docs\";\n}\n\nfunction getThemeLayoutValue(docs: FarmDocsResolvedConfig, key: string, fallback: number): number {\n const layout = getThemeUI(docs).layout;\n const value =\n layout && typeof layout === \"object\" ? (layout as Record<string, unknown>)[key] : undefined;\n return typeof value === \"number\" ? value : fallback;\n}\n\nfunction getThemeTocDepth(docs: FarmDocsResolvedConfig): number {\n const toc = getThemeUI(docs).layout?.toc;\n return toc && typeof toc === \"object\" && typeof toc.depth === \"number\" ? toc.depth : 3;\n}\n\nconst SIDEBAR_SECTION_ORDER = [\n \"Start\",\n \"Core\",\n \"Data and APIs\",\n \"Integrations\",\n \"Runtime\",\n \"Content\",\n \"Extending\",\n \"Reference\",\n];\n\nconst SIDEBAR_PAGE_ORDER = new Map(\n [\n \"\",\n \"getting-started\",\n \"project-structure\",\n \"configuration\",\n \"routing\",\n \"layouts\",\n \"server-rendering\",\n \"middleware\",\n \"query\",\n \"api-routes\",\n \"api-client\",\n \"storage\",\n \"integrations\",\n \"integrations/stripe\",\n \"integrations/autumn\",\n \"integrations/polar\",\n \"integrations/auth\",\n \"integrations/email\",\n \"integrations/jobs\",\n \"integrations/unkey\",\n \"integrations/ui-registry\",\n \"integrations/orm-storage\",\n \"cache-ppr\",\n \"observability\",\n \"deployment\",\n \"docs-engine\",\n \"markdown\",\n \"openapi\",\n \"plugins\",\n \"plugins/create-plugin\",\n \"cli\",\n \"examples\",\n \"reference\",\n ].map((slug, index) => [slug, index]),\n);\n\ntype SidebarNavigationItem = {\n label?: string;\n icon?: string;\n slug?: string;\n href?: string;\n children: SidebarNavigationItem[];\n};\n\nfunction isSidebarNavigationItem(\n value: SidebarNavigationItem | null,\n): value is SidebarNavigationItem {\n return value !== null;\n}\n\nfunction compareSidebarPages(a: FarmDocsPage, b: FarmDocsPage): number {\n const aOrder = SIDEBAR_PAGE_ORDER.get(a.slug) ?? 1000;\n const bOrder = SIDEBAR_PAGE_ORDER.get(b.slug) ?? 1000;\n return aOrder - bOrder || a.title.localeCompare(b.title);\n}\n\nfunction getSidebarSection(page: FarmDocsPage): string {\n if (page.section) return page.section;\n if (page.slug.startsWith(\"integrations/\")) return \"Integrations\";\n if (page.slug.startsWith(\"plugins/\")) return \"Extending\";\n return \"Reference\";\n}\n\nfunction sidebarIdFor(section: string): string {\n return `sidebar-${slugify(section)}`;\n}\n\nfunction isObjectRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction readOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" ? value.trim() : undefined;\n}\n\nfunction normalizeSidebarSlug(value: string): string {\n if (value === \"/\" || value === \".\") return \"\";\n return trimSlashes(value);\n}\n\nfunction getSidebarNavigation(docs: FarmDocsResolvedConfig): SidebarNavigationItem[] {\n const navigation = docs.config.navigation;\n if (!isObjectRecord(navigation) || !Array.isArray(navigation.sidebar)) return [];\n return navigation.sidebar.map(normalizeSidebarNavigationItem).filter(isSidebarNavigationItem);\n}\n\nfunction normalizeSidebarNavigationItem(value: unknown): SidebarNavigationItem | null {\n if (!isObjectRecord(value)) return null;\n\n const label = readString(value.label) ?? readString(value.title);\n const icon = readString(value.icon);\n const slug = readOptionalString(value.slug) ?? readOptionalString(value.path);\n const href = readString(value.href) ?? readString(value.url);\n const rawChildren = Array.isArray(value.children)\n ? value.children\n : Array.isArray(value.items)\n ? value.items\n : [];\n const children = rawChildren.map(normalizeSidebarNavigationItem).filter(isSidebarNavigationItem);\n\n if (!label && !slug && !href && children.length === 0) return null;\n return {\n ...(label ? { label } : {}),\n ...(icon ? { icon } : {}),\n ...(slug !== undefined ? { slug: normalizeSidebarSlug(slug) } : {}),\n ...(href ? { href } : {}),\n children,\n };\n}\n\nfunction createSidebarPageMaps(pages: FarmDocsPage[]) {\n return {\n bySlug: new Map(pages.map((page) => [page.slug, page])),\n byHref: new Map(pages.map((page) => [page.href, page])),\n };\n}\n\nfunction resolveConfiguredSidebarPage(\n item: SidebarNavigationItem,\n maps: ReturnType<typeof createSidebarPageMaps>,\n): FarmDocsPage | undefined {\n if (item.slug !== undefined) return maps.bySlug.get(item.slug);\n if (item.href) return maps.byHref.get(item.href);\n return undefined;\n}\n\nfunction getSidebarIconRegistry(docs: FarmDocsResolvedConfig): Record<string, unknown> {\n return isObjectRecord(docs.config.icons) ? docs.config.icons : {};\n}\n\nfunction renderConfiguredIconSvg(value: unknown): string {\n if (typeof value !== \"string\") return \"\";\n const icon = value.trim();\n if (!icon) return \"\";\n if (/^<svg[\\s>]/i.test(icon)) return icon;\n if (/^<(path|circle|rect|line|polyline|polygon|ellipse|g)\\b/i.test(icon)) {\n return `<svg viewBox=\"0 0 24 24\" focusable=\"false\">${icon}</svg>`;\n }\n return \"\";\n}\n\nfunction renderSidebarIcon(\n docs: FarmDocsResolvedConfig,\n icon: string | undefined,\n className = \"sidebar-icon\",\n): string {\n if (!icon) return \"\";\n const iconRegistry = getSidebarIconRegistry(docs);\n const configuredIcon = iconRegistry[icon] ?? icon;\n const svg = renderConfiguredIconSvg(configuredIcon);\n if (!svg) return \"\";\n return `<span class=\"${className}\" data-sidebar-icon=\"${escapeAttribute(icon)}\" aria-hidden=\"true\">${svg}</span>`;\n}\n\nfunction renderSidebarLabel(\n docs: FarmDocsResolvedConfig,\n icon: string | undefined,\n label: string,\n className: string,\n): string {\n return `<span class=\"${className}\">${renderSidebarIcon(docs, icon)}<span class=\"sidebar-label-text\">${escapeHtml(label)}</span></span>`;\n}\n\nfunction getSidebarPageLabel(item: FarmDocsPage, configured?: SidebarNavigationItem): string {\n if (configured?.label) return configured.label;\n if (item.slug === \"\") return \"Why?\";\n if (item.slug === \"integrations\") return \"Overview\";\n if (item.slug === \"integrations/ui-registry\") return \"UI Registry\";\n if (item.slug === \"integrations/orm-storage\") return \"ORM Storage\";\n if (item.slug.startsWith(\"integrations/\")) {\n return item.title.replace(/\\s+Integrations?$/i, \"\");\n }\n return item.title;\n}\n\nfunction renderSidebarLink(\n item: FarmDocsPage,\n activeHref: string,\n docs: FarmDocsResolvedConfig,\n configured?: SidebarNavigationItem,\n): string {\n const active = item.href === activeHref;\n return `<a data-active=\"${active ? \"true\" : \"false\"}\" href=\"${escapeAttribute(item.href)}\">${renderSidebarLabel(docs, configured?.icon, getSidebarPageLabel(item, configured), \"sidebar-link-label\")}</a>`;\n}\n\nfunction collectConfiguredSidebarPages(\n items: SidebarNavigationItem[],\n maps: ReturnType<typeof createSidebarPageMaps>,\n seen = new Set<string>(),\n): FarmDocsPage[] {\n const ordered: FarmDocsPage[] = [];\n for (const item of items) {\n const page = resolveConfiguredSidebarPage(item, maps);\n if (page && !seen.has(page.slug)) {\n seen.add(page.slug);\n ordered.push(page);\n }\n ordered.push(...collectConfiguredSidebarPages(item.children, maps, seen));\n }\n return ordered;\n}\n\nfunction getOrderedSidebarPages(\n pages: FarmDocsPage[],\n docs?: FarmDocsResolvedConfig,\n): FarmDocsPage[] {\n if (!docs) return [...pages].sort(compareSidebarPages);\n\n const maps = createSidebarPageMaps(pages);\n const configuredPages = collectConfiguredSidebarPages(getSidebarNavigation(docs), maps);\n if (configuredPages.length === 0) return [...pages].sort(compareSidebarPages);\n\n const configuredSlugs = new Set(configuredPages.map((page) => page.slug));\n const remainingPages = pages\n .filter((page) => !configuredSlugs.has(page.slug))\n .sort(compareSidebarPages);\n return [...configuredPages, ...remainingPages];\n}\n\nfunction renderExternalSidebarLink(\n item: SidebarNavigationItem,\n activeHref: string,\n docs: FarmDocsResolvedConfig,\n): string {\n if (!item.href || !item.label) return \"\";\n const active = item.href === activeHref;\n return `<a data-active=\"${active ? \"true\" : \"false\"}\" href=\"${escapeAttribute(item.href)}\">${renderSidebarLabel(docs, item.icon, item.label, \"sidebar-link-label\")}</a>`;\n}\n\nfunction renderConfiguredSidebarSubgroup(\n item: SidebarNavigationItem,\n childHtml: string,\n docs: FarmDocsResolvedConfig,\n): string {\n const label = item.label;\n if (!label) return childHtml;\n return `<div class=\"sidebar-subgroup\" data-sidebar-subgroup=\"${escapeAttribute(slugify(label))}\">\n <div class=\"sidebar-subgroup-title\">${renderSidebarLabel(docs, item.icon, label, \"sidebar-subgroup-label\")}</div>\n <div class=\"sidebar-subgroup-content\">\n${childHtml}\n </div>\n</div>`;\n}\n\nfunction renderConfiguredSidebarItems(\n items: SidebarNavigationItem[],\n maps: ReturnType<typeof createSidebarPageMaps>,\n activeHref: string,\n docs: FarmDocsResolvedConfig,\n): string {\n const renderedItems: string[] = [];\n for (const item of items) {\n const page = resolveConfiguredSidebarPage(item, maps);\n const childHtml = renderConfiguredSidebarItems(item.children, maps, activeHref, docs);\n\n if (item.children.length > 0) {\n renderedItems.push(renderConfiguredSidebarSubgroup(item, childHtml, docs));\n continue;\n }\n\n const linkHtml = page\n ? renderSidebarLink(page, activeHref, docs, item)\n : renderExternalSidebarLink(item, activeHref, docs);\n if (linkHtml) renderedItems.push(linkHtml);\n }\n return renderedItems.join(\"\\n\");\n}\n\nfunction renderConfiguredSidebarSection(\n section: SidebarNavigationItem,\n maps: ReturnType<typeof createSidebarPageMaps>,\n activeHref: string,\n docs: FarmDocsResolvedConfig,\n): string {\n const label = section.label || \"Docs\";\n const id = sidebarIdFor(label);\n const links = renderConfiguredSidebarItems(section.children, maps, activeHref, docs);\n return `<div class=\"sidebar-folder\" data-state=\"open\">\n <button class=\"text-fd-muted-foreground sidebar-folder-trigger\" type=\"button\" aria-controls=\"${escapeAttribute(id)}\" aria-expanded=\"true\">${renderSidebarLabel(docs, section.icon, label, \"sidebar-folder-label\")}</button>\n <div id=\"${escapeAttribute(id)}\" class=\"overflow-hidden sidebar-folder-content\" data-state=\"open\">\n${links}\n </div>\n</div>`;\n}\n\nfunction renderAutoSidebarSectionItems(\n items: FarmDocsPage[],\n activeHref: string,\n docs: FarmDocsResolvedConfig,\n): string {\n return [...items]\n .sort(compareSidebarPages)\n .map((item) => renderSidebarLink(item, activeHref, docs))\n .join(\"\\n\");\n}\n\nfunction renderPixelNavItems(\n pages: FarmDocsPage[],\n activeHref: string,\n docs: FarmDocsResolvedConfig,\n): string {\n const configuredSidebar = getSidebarNavigation(docs);\n if (configuredSidebar.length > 0) {\n const maps = createSidebarPageMaps(pages);\n const renderedSections = configuredSidebar\n .map((section) => {\n if (section.children.length > 0) {\n return renderConfiguredSidebarSection(section, maps, activeHref, docs);\n }\n const page = resolveConfiguredSidebarPage(section, maps);\n return page\n ? renderSidebarLink(page, activeHref, docs, section)\n : renderExternalSidebarLink(section, activeHref, docs);\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n return `<div class=\"sidebar-scroll overscroll-contain\">\n <div class=\"sidebar-tree\">\n${renderedSections}\n </div>\n</div>`;\n }\n\n const groups = new Map<string, FarmDocsPage[]>();\n for (const item of pages) {\n const group = item.slug === \"\" ? \"Start\" : getSidebarSection(item);\n const entries = groups.get(group) ?? [];\n entries.push(item);\n groups.set(group, entries);\n }\n\n const renderedSections = Array.from(groups.entries())\n .sort(([a], [b]) => {\n const aOrder = SIDEBAR_SECTION_ORDER.indexOf(a);\n const bOrder = SIDEBAR_SECTION_ORDER.indexOf(b);\n return (aOrder === -1 ? 100 : aOrder) - (bOrder === -1 ? 100 : bOrder) || a.localeCompare(b);\n })\n .map(([section, items]) => {\n const id = sidebarIdFor(section);\n const links = renderAutoSidebarSectionItems(items, activeHref, docs);\n return `<div class=\"sidebar-folder\" data-state=\"open\">\n <button class=\"text-fd-muted-foreground sidebar-folder-trigger\" type=\"button\" aria-controls=\"${escapeAttribute(id)}\" aria-expanded=\"true\">${renderSidebarLabel(docs, undefined, section, \"sidebar-folder-label\")}</button>\n <div id=\"${escapeAttribute(id)}\" class=\"overflow-hidden sidebar-folder-content\" data-state=\"open\">\n${links}\n </div>\n</div>`;\n })\n .join(\"\\n\");\n\n return `<div class=\"sidebar-scroll overscroll-contain\">\n <div class=\"sidebar-tree\">\n${renderedSections}\n </div>\n</div>`;\n}\n\nfunction renderPixelPageNav(\n pages: FarmDocsPage[],\n activeHref: string,\n docs: FarmDocsResolvedConfig,\n): string {\n const orderedPages = getOrderedSidebarPages(pages, docs);\n const activeIndex = orderedPages.findIndex((item) => item.href === activeHref);\n if (activeIndex === -1) return \"\";\n\n const previous = orderedPages[activeIndex - 1];\n const next = orderedPages[activeIndex + 1];\n if (!previous && !next) return \"\";\n\n const renderChevron = (direction: \"prev\" | \"next\") =>\n `<svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><polyline points=\"${direction === \"prev\" ? \"15 18 9 12 15 6\" : \"9 18 15 12 9 6\"}\" /></svg>`;\n const renderCard = (item: FarmDocsPage, direction: \"prev\" | \"next\") =>\n `<a class=\"fd-page-nav-card fd-page-nav-${direction}\" href=\"${escapeAttribute(item.href)}\">\n <span class=\"fd-page-nav-title fd-page-nav-title-${direction}\">${direction === \"prev\" ? `${renderChevron(direction)}${escapeHtml(item.title)}` : `${escapeHtml(item.title)}${renderChevron(direction)}`}</span>\n <span class=\"fd-page-nav-description\">${direction === \"prev\" ? \"Previous Page\" : \"Next Page\"}</span>\n</a>`;\n\n return `<nav class=\"not-prose fd-page-nav\" aria-label=\"Page navigation\">\n ${previous ? renderCard(previous, \"prev\") : \"\"}\n ${next ? renderCard(next, \"next\") : \"\"}\n</nav>`;\n}\n\nfunction titleizePathSegment(value: string): string {\n return value.replace(/[-_]+/g, \" \").replace(/\\b\\w/g, (character) => character.toUpperCase());\n}\n\nfunction isBreadcrumbEnabled(docs: FarmDocsResolvedConfig): boolean {\n const breadcrumb = docs.config.breadcrumb;\n if (breadcrumb === false) return false;\n if (breadcrumb && typeof breadcrumb === \"object\" && \"enabled\" in breadcrumb) {\n return (breadcrumb as { enabled?: unknown }).enabled !== false;\n }\n return true;\n}\n\nfunction renderPixelBreadcrumb(page: LoadedFarmDocsPage, docs: FarmDocsResolvedConfig): string {\n if (!isBreadcrumbEnabled(docs)) return \"\";\n\n const segments = trimSlashes(page.slug).split(\"/\").filter(Boolean);\n if (segments.length < 2) return \"\";\n\n const parentSegments = segments.slice(0, -1);\n const parentSegment = parentSegments[parentSegments.length - 1];\n const currentSegment = segments[segments.length - 1];\n const entry = normalizeEntry(docs.entry);\n const parentPath = parentSegments.join(\"/\");\n const parentHref = entry === \"/\" ? `/${parentPath}` : `${entry}/${parentPath}`;\n\n return `<nav class=\"fd-breadcrumb\" aria-label=\"Breadcrumb\">\n <span class=\"fd-breadcrumb-item\">\n <a class=\"fd-breadcrumb-parent fd-breadcrumb-link\" href=\"${escapeAttribute(parentHref)}\">${escapeHtml(titleizePathSegment(parentSegment))}</a>\n </span>\n <span class=\"fd-breadcrumb-item\">\n <span class=\"fd-breadcrumb-sep\">/</span>\n <span class=\"fd-breadcrumb-current\">${escapeHtml(titleizePathSegment(currentSegment))}</span>\n </span>\n</nav>`;\n}\n\nfunction renderDocsSearchTrigger(showIcon = true): string {\n return `<button class=\"fd-docs-search-trigger\" type=\"button\" data-search-full=\"\" aria-label=\"Search documentation\" aria-haspopup=\"dialog\" aria-keyshortcuts=\"Meta+K Control+K\">\n ${showIcon ? '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><circle cx=\"11\" cy=\"11\" r=\"7\"></circle><path d=\"m20 20-4-4\"></path></svg>' : \"\"}\n <kbd><span>⌘</span><span>K</span></kbd>\n</button>`;\n}\n\nfunction renderDocsSearchMount(clientEntry: string): string {\n return `<div id=\"farm-docs-search-root\" data-farm-docs-search-root data-api=\"/api/docs\"></div>\n <script type=\"module\" src=\"${escapeAttribute(clientEntry)}\"></script>`;\n}\n\nfunction renderDocsSearchBootstrapScript(): string {\n return `<script>${generateFarmDocsSearchBootstrapRuntime()}</script>`;\n}\n\nfunction renderPixelToc(items: TocItem[]): string {\n if (items.length === 0) return '<p class=\"toc-empty\">No sections</p>';\n return `<div class=\"toc-track\">\n <div class=\"toc-thumb\" data-toc-thumb style=\"clip-path: polygon(0 0px, 100% 0px, 100% 32px, 0 32px);\"></div>\n <div class=\"toc-links\">\n${items\n .map(\n (item) =>\n `<a class=\"toc-link\" data-active=\"${items[0] === item ? \"true\" : \"false\"}\" data-toc-item data-depth=\"${item.level}\" href=\"#${escapeAttribute(item.id)}\">${escapeHtml(item.title)}</a>`,\n )\n .join(\"\\n\")}\n </div>\n</div>`;\n}\n\nfunction renderDocsRuntimeScript(docs: FarmDocsResolvedConfig): string {\n const docsEntry = JSON.stringify(normalizeEntry(docs.entry));\n return `<script>(()=>{if(window.__farmDocsRuntime)return;window.__farmDocsRuntime=true;document.documentElement.dataset.farmDocsRuntime=\"true\";document.documentElement.dataset.farmDocsRuntimeId=Math.random().toString(36).slice(2);const docsEntry=${docsEntry};let cleanupToc=()=>{};let closeMobileSidebar=()=>{};const normalizePath=(path)=>path.length>1?path.replace(/\\\\/+$/,\"\"):path;const isDocsPath=(path)=>{const next=normalizePath(path);const entry=normalizePath(docsEntry);if(next.endsWith(\".md\"))return false;if(entry===\"/\")return true;return next===entry||next.startsWith(entry+\"/\")};const initToc=()=>{cleanupToc();const toc=document.getElementById(\"nd-toc\");if(!toc){cleanupToc=()=>{};return}const links=Array.from(toc.querySelectorAll(\"[data-toc-item]\"));const thumb=toc.querySelector(\"[data-toc-thumb]\");const pairs=links.map((link)=>{let id=link.hash.slice(1);try{id=decodeURIComponent(id)}catch{}return{link,heading:document.getElementById(id)}}).filter((item)=>item.heading);const setActive=(active)=>{for(const {link} of pairs)link.dataset.active=link===active.link?\"true\":\"false\";if(!thumb)return;const styles=getComputedStyle(active.link);const top=active.link.offsetTop+parseFloat(styles.paddingTop||\"0\");const bottom=active.link.offsetTop+active.link.clientHeight-parseFloat(styles.paddingBottom||\"0\");thumb.style.clipPath=\"polygon(0 \"+top+\"px,100% \"+top+\"px,100% \"+bottom+\"px,0 \"+bottom+\"px)\"};const update=()=>{if(pairs.length===0)return;const offset=Math.min(window.innerHeight*0.3,160);let active=pairs[0];for(const pair of pairs){if(pair.heading.getBoundingClientRect().top<=offset)active=pair;else break}setActive(active)};let frame=0;const schedule=()=>{if(frame)return;frame=requestAnimationFrame(()=>{frame=0;update()})};const onHashChange=()=>setTimeout(schedule,0);window.addEventListener(\"scroll\",schedule,{passive:true});window.addEventListener(\"resize\",schedule);window.addEventListener(\"hashchange\",onHashChange);cleanupToc=()=>{window.removeEventListener(\"scroll\",schedule);window.removeEventListener(\"resize\",schedule);window.removeEventListener(\"hashchange\",onHashChange);if(frame)cancelAnimationFrame(frame);frame=0};update()};const getSidebar=()=>document.getElementById(\"nd-sidebar\");const ensureActiveVisible=()=>{const sidebar=getSidebar();if(!sidebar)return;const active=sidebar.querySelector('a[data-active=\"true\"]');if(!(active instanceof HTMLElement))return;const activeRect=active.getBoundingClientRect();const sidebarRect=sidebar.getBoundingClientRect();if(activeRect.top<sidebarRect.top||activeRect.bottom>sidebarRect.bottom)sidebar.scrollTop+=activeRect.top-sidebarRect.top-(sidebar.clientHeight-activeRect.height)/2};const setSidebarActive=(path)=>{const sidebar=getSidebar();if(!sidebar)return;const current=normalizePath(path);for(const link of Array.from(sidebar.querySelectorAll(\"a[href]\"))){try{link.dataset.active=normalizePath(new URL(link.href,location.href).pathname)===current?\"true\":\"false\"}catch{}}ensureActiveVisible()};const initMobileSidebar=()=>{const layout=document.getElementById(\"nd-docs-layout\");const sidebar=getSidebar();const toggle=document.querySelector(\"[data-sidebar-toggle]\");const backdrop=document.querySelector(\"[data-sidebar-backdrop]\");if(!layout||!sidebar||!(toggle instanceof HTMLButtonElement))return;const setOpen=(open)=>{layout.dataset.sidebarOpen=open?\"true\":\"false\";document.documentElement.dataset.farmDocsSidebar=open?\"open\":\"closed\";toggle.setAttribute(\"aria-expanded\",open?\"true\":\"false\");toggle.setAttribute(\"aria-label\",open?\"Close menu\":\"Open menu\")};const toggleOpen=()=>setOpen(layout.dataset.sidebarOpen!==\"true\");closeMobileSidebar=()=>setOpen(false);toggle.addEventListener(\"click\",(event)=>{event.preventDefault();toggleOpen()});backdrop?.addEventListener(\"click\",()=>closeMobileSidebar());document.addEventListener(\"keydown\",(event)=>{if(event.key===\"Escape\")closeMobileSidebar()});sidebar.addEventListener(\"click\",(event)=>{const target=event.target instanceof Element?event.target.closest(\"a[href]\"):null;if(target)closeMobileSidebar()});closeMobileSidebar()};const initSidebarScroll=()=>{const sidebar=getSidebar();if(!sidebar)return;const key=\"farmdocs:sidebar-scroll:\"+location.origin;const getStorage=()=>{try{return window.sessionStorage}catch{return null}};const readSaved=()=>{try{const raw=getStorage()?.getItem(key);if(!raw)return null;const parsed=JSON.parse(raw);return parsed&&typeof parsed===\"object\"?parsed:null}catch{return null}};const save=(path=location.pathname)=>{try{getStorage()?.setItem(key,JSON.stringify({path,scrollTop:sidebar.scrollTop}))}catch{}};const saved=readSaved();if(saved?.path===location.pathname&&Number.isFinite(Number(saved.scrollTop)))sidebar.scrollTop=Number(saved.scrollTop);ensureActiveVisible();save();sidebar.addEventListener(\"scroll\",()=>save(),{passive:true});sidebar.addEventListener(\"click\",(event)=>{const target=event.target instanceof Element?event.target.closest(\"a[href]\"):null;if(!target)return;try{save(new URL(target.href,location.href).pathname)}catch{save()}});window.addEventListener(\"beforeunload\",()=>save())};let navigateController=null;const getPageKey=(root)=>{const article=root.getElementById(\"nd-page\");if(!article)return\"\";return article.querySelector(\"h1\")?.textContent?.trim()||article.textContent?.replace(/\\\\s+/g,\" \").trim().slice(0,160)||\"\"};const swapDocsPage=(html,url)=>{const nextDoc=new DOMParser().parseFromString(html,\"text/html\");const nextArticle=nextDoc.getElementById(\"nd-page\");const currentArticle=document.getElementById(\"nd-page\");if(!nextArticle||!currentArticle)return false;const nextKey=getPageKey(nextDoc);const importedArticle=document.importNode(nextArticle,true);currentArticle.replaceWith(importedArticle);const renderedArticle=document.getElementById(\"nd-page\");if(!renderedArticle||renderedArticle===currentArticle||(nextKey&&getPageKey(document)!==nextKey))return false;const nextToc=nextDoc.getElementById(\"nd-toc\");const currentToc=document.getElementById(\"nd-toc\");if(nextToc&&currentToc)currentToc.replaceWith(document.importNode(nextToc,true));if(nextDoc.title)document.title=nextDoc.title;const nextDescription=nextDoc.querySelector('meta[name=\"description\"]');const currentDescription=document.querySelector('meta[name=\"description\"]');if(nextDescription&&currentDescription)currentDescription.setAttribute(\"content\",nextDescription.getAttribute(\"content\")||\"\");setSidebarActive(url.pathname);initToc();closeMobileSidebar();return true};const navigateDocs=async(url,{replace=false,scroll=true}={})=>{if(!isDocsPath(url.pathname))return false;if(navigateController)navigateController.abort();const controller=new AbortController();navigateController=controller;document.documentElement.dataset.farmDocsNavigating=\"true\";try{const response=await fetch(url.href,{cache:\"no-store\",headers:{accept:\"text/html\",\"x-farm-docs-navigate\":\"1\"},signal:controller.signal});if(!response.ok||!((response.headers.get(\"content-type\")||\"\").includes(\"text/html\")))return false;const html=await response.text();if(!swapDocsPage(html,url))return false;if(replace)history.replaceState({farmDocs:true},\"\",url.href);else history.pushState({farmDocs:true},\"\",url.href);if(scroll){if(url.hash){let id=url.hash.slice(1);try{id=decodeURIComponent(id)}catch{}document.getElementById(id)?.scrollIntoView({block:\"start\"})}else window.scrollTo({top:0,left:0})}return true}catch(error){if(error?.name===\"AbortError\")return true;return false}finally{if(navigateController===controller){delete document.documentElement.dataset.farmDocsNavigating;navigateController=null}}};const initClientNavigation=()=>{document.addEventListener(\"click\",(event)=>{if(event.defaultPrevented||event.button!==0||event.metaKey||event.ctrlKey||event.shiftKey||event.altKey)return;const target=event.target instanceof Element?event.target.closest(\"a[href]\"):null;if(!target||target.target||target.hasAttribute(\"download\"))return;let url;try{url=new URL(target.href,location.href)}catch{return}if(url.origin!==location.origin||!isDocsPath(url.pathname))return;if(normalizePath(url.pathname)===normalizePath(location.pathname)&&url.hash)return;event.preventDefault();navigateDocs(url).then((handled)=>{if(!handled)location.href=url.href})});window.addEventListener(\"popstate\",()=>{navigateDocs(new URL(location.href),{replace:true,scroll:false}).then((handled)=>{if(!handled)location.reload()})})};const init=()=>{initToc();initMobileSidebar();initSidebarScroll();initClientNavigation()};if(document.readyState===\"loading\")document.addEventListener(\"DOMContentLoaded\",init,{once:true});else init()})();</script>`;\n}\n\nfunction renderDocsPageActionsRuntimeScript(): string {\n return `<script>(()=>{if(window.__farmDocsPageActionsRuntime)return;window.__farmDocsPageActionsRuntime=true;const readArticleText=()=>{const article=document.getElementById(\"nd-page\");if(!article)return\"\";const clone=article.cloneNode(true);if(!(clone instanceof HTMLElement))return article.innerText||\"\";clone.querySelectorAll(\"[data-page-actions],.fd-page-footer,.fd-page-nav\").forEach((node)=>node.remove());return clone.innerText||\"\"};const withTitle=(content,format,includeTitle)=>{if(!includeTitle)return content;const title=document.querySelector(\"#nd-page h1\")?.textContent?.trim()||document.title.trim();if(!title)return content;const trimmed=content.trimStart();if(trimmed.startsWith(title)||trimmed.startsWith(\"# \"+title))return content;return format===\"markdown\"?\"# \"+title+\"\\\\n\\\\n\"+content:title+\"\\\\n\\\\n\"+content};const writeClipboard=async(text)=>{if(navigator.clipboard?.writeText){try{await navigator.clipboard.writeText(text);return}catch{}}const textarea=document.createElement(\"textarea\");textarea.value=text;textarea.setAttribute(\"readonly\",\"\");textarea.style.position=\"fixed\";textarea.style.opacity=\"0\";textarea.style.pointerEvents=\"none\";document.body.appendChild(textarea);textarea.select();document.execCommand(\"copy\");textarea.remove()};const markCopied=(button)=>{const label=button.querySelector(\"[data-page-action-label]\");button.dataset.copied=\"true\";button.setAttribute(\"aria-label\",button.dataset.copiedLabel||\"Copied!\");button.title=button.dataset.copiedLabel||\"Copied!\";if(label)label.textContent=button.dataset.copiedLabel||\"Copied!\";const previous=Number(button.dataset.copyTimeout||0);if(previous)clearTimeout(previous);button.dataset.copyTimeout=String(setTimeout(()=>{button.dataset.copied=\"false\";button.setAttribute(\"aria-label\",button.dataset.copyLabel||\"Copy page\");button.title=button.dataset.copyLabel||\"Copy page\";if(label)label.textContent=button.dataset.copyLabel||\"Copy page\";button.dataset.copyTimeout=\"0\"},4500))};document.addEventListener(\"click\",async(event)=>{const target=event.target instanceof Element?event.target.closest('[data-page-action=\"copy-markdown\"]'):null;if(!(target instanceof HTMLButtonElement))return;event.preventDefault();const format=target.dataset.copyMarkdownFormat===\"text\"?\"text\":\"markdown\";const includeTitle=target.dataset.copyMarkdownIncludeTitle===\"true\";let content=\"\";target.disabled=true;try{if(format===\"markdown\"&&target.dataset.markdownUrl){try{const response=await fetch(target.dataset.markdownUrl,{headers:{Accept:\"text/markdown\"}});if(response.ok)content=await response.text()}catch{}}if(!content)content=readArticleText();content=withTitle(content,format,includeTitle);if(content.trim()){await writeClipboard(content);markCopied(target)}}finally{target.disabled=false}})})();</script>`;\n}\n\nfunction renderDocsHashRuntimeScript(): string {\n return `<script>(()=>{if(window.__farmDocsHashRuntime)return;window.__farmDocsHashRuntime=true;const scrollToHash=()=>{if(!location.hash)return;let id=location.hash.slice(1);try{id=decodeURIComponent(id)}catch{}document.getElementById(id)?.scrollIntoView({block:\"start\"})};const schedule=()=>requestAnimationFrame(()=>requestAnimationFrame(scrollToHash));if(document.readyState===\"loading\")document.addEventListener(\"DOMContentLoaded\",schedule,{once:true});else schedule();window.addEventListener(\"load\",schedule,{once:true});window.addEventListener(\"hashchange\",schedule)})();</script>`;\n}\n\nfunction renderDocsRuntimeScripts(docs: FarmDocsResolvedConfig): string {\n return `${renderDocsRuntimeScript(docs)}\n${renderDocsHashRuntimeScript()}\n${renderDocsPageActionsRuntimeScript()}`;\n}\n\nconst themeCssCache = new Map<string, string>();\n\nfunction readCssWithImports(filePath: string, seen = new Set<string>()): string {\n const resolved = path.resolve(filePath);\n if (seen.has(resolved)) return \"\";\n seen.add(resolved);\n\n const source = readFileSync(resolved, \"utf8\");\n return source.replace(/@import\\s+[\"']([^\"']+)[\"'];?/g, (_match, importPath: string) => {\n try {\n const importedPath = importPath.startsWith(\".\")\n ? path.resolve(path.dirname(resolved), importPath)\n : createRequire(resolved).resolve(importPath);\n return readCssWithImports(importedPath, seen);\n } catch {\n return \"\";\n }\n });\n}\n\nfunction resolvePixelBorderThemeCss(options: FarmDocsHandlerOptions): string {\n const cacheKey = path.resolve(options.root);\n const cached = themeCssCache.get(cacheKey);\n if (cached !== undefined) return cached;\n\n try {\n const requireFromApp = createRequire(path.join(cacheKey, \"package.json\"));\n const themeCssPath = requireFromApp.resolve(\"@farming-labs/theme/pixel-border/css\");\n const requireFromTheme = createRequire(themeCssPath);\n const fumadocsCssPath = requireFromTheme.resolve(\"fumadocs-ui/style.css\");\n const css = `${readCssWithImports(fumadocsCssPath)}\\n${readCssWithImports(themeCssPath)}`;\n themeCssCache.set(cacheKey, css);\n return css;\n } catch {\n themeCssCache.set(cacheKey, \"\");\n return \"\";\n }\n}\n\nfunction renderFarmDocsBridgeCss(docs: FarmDocsResolvedConfig): string {\n const sidebarWidth = getThemeLayoutValue(docs, \"sidebarWidth\", 320);\n const contentWidth = getThemeLayoutValue(docs, \"contentWidth\", 860);\n\n return `\n @font-face { font-family: \"Geist Sans\"; src: local(\"Geist Sans\"), url(\"${GEIST_SANS_FONT_URL}\") format(\"woff2\"), url(\"/node_modules/geist/dist/fonts/geist-sans/Geist-Variable.woff2\") format(\"woff2\"); font-display: block; font-style: normal; font-weight: 100 900; }\n @font-face { font-family: \"Geist Mono\"; src: local(\"Geist Mono\"), url(\"${GEIST_MONO_FONT_URL}\") format(\"woff2\"), url(\"/node_modules/geist/dist/fonts/geist-mono/GeistMono-Variable.woff2\") format(\"woff2\"); font-display: block; font-style: normal; font-weight: 100 900; }\n :root { color-scheme: dark; --font-geist-sans: \"Geist Sans\"; --font-geist-mono: \"Geist Mono\"; --fd-sidebar-width: ${sidebarWidth}px; --fd-content-width: ${contentWidth}px; --fd-toc-width: 240px; --fd-docs-height: 100vh; --fd-docs-row-1: var(--fd-nav-height, 44px); --fd-docs-font-sans: var(--font-geist-sans, \"Geist Sans\", var(--font-sans, system-ui, -apple-system, sans-serif)); --fd-docs-font-mono: var(--font-geist-mono, \"Geist Mono\", var(--font-mono, ui-monospace, monospace)); --fd-font-sans: var(--fd-docs-font-sans); --fd-font-mono: var(--fd-docs-font-mono); --fd-pixel-rail-width: 12px; --fd-sidebar-edge: calc(var(--fd-pixel-rail-width) + 18px); --fd-sidebar-guide-x: calc(var(--fd-sidebar-edge) + 16px); --fd-sidebar-link-x: calc(var(--fd-sidebar-guide-x) + 22px); --fd-sidebar-sub-guide-x: calc(var(--fd-sidebar-link-x) + 7px); --fd-sidebar-sub-link-x: calc(var(--fd-sidebar-sub-guide-x) + 28px); --fd-sidebar-branch-gap: 0px; --fd-sidebar-nested-icon-gap: 0px; --fd-sidebar-line-color: color-mix(in srgb, var(--color-fd-border, hsl(0 0% 15%)) 88%, transparent); }\n * { box-sizing: border-box; }\n html { background: var(--color-fd-background, hsl(0 0% 2%)); scroll-padding-top: calc(var(--fd-nav-height, 44px) + 24px); }\n html[data-farm-docs-sidebar=\"open\"], html[data-farm-docs-sidebar=\"open\"] body { overflow: hidden; }\n body { margin: 0; min-height: 100vh; background: var(--color-fd-background, hsl(0 0% 2%)); color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); font-family: var(--fd-docs-font-sans); text-rendering: optimizeLegibility; }\n ::selection { background: var(--color-fd-foreground, #fff); color: var(--color-fd-background, #000); }\n a { color: inherit; }\n #nd-docs-layout { --fd-sidebar-col: var(--fd-sidebar-width); display: grid; grid-template: \"sidebar header header\" var(--fd-nav-height, 44px) \"sidebar main toc\" 1fr / var(--fd-sidebar-width) minmax(0, 1fr) var(--fd-toc-width) !important; min-height: 100vh; border-top: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: var(--color-fd-background, hsl(0 0% 2%)); }\n #nd-docs-layout.grid { grid-template: \"sidebar header header\" var(--fd-nav-height, 44px) \"sidebar main toc\" 1fr / var(--fd-sidebar-width) minmax(0, 1fr) var(--fd-toc-width) !important; }\n #nd-docs-layout, #nd-docs-layout * { border-radius: 0 !important; }\n .topbar { position: sticky; top: 0; z-index: 20; grid-area: header; height: var(--fd-nav-height, 44px); display: flex; align-items: center; justify-content: flex-end; gap: 16px; border-bottom: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: color-mix(in srgb, var(--color-fd-background, hsl(0 0% 2%)) 92%, transparent); backdrop-filter: blur(12px); padding: 0; font-family: var(--fd-docs-font-mono); font-size: 12px; letter-spacing: 0.03em; text-transform: uppercase; }\n .topbar a { text-decoration: none; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); }\n .topbar a:hover { color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); }\n .topbar-actions, .mobile-topbar-actions { display: flex; height: 100%; min-width: 0; align-items: stretch; margin-left: auto; }\n .topbar-llms-link { display: inline-flex; height: 100%; align-items: center; border-left: 1px solid var(--color-fd-border, hsl(0 0% 15%)); padding: 0 22px; }\n .mobile-topbar { display: none; }\n .sidebar-backdrop { display: none; }\n .fd-mobile-nav-btn { display: inline-flex; width: var(--fd-mobile-nav-height, 56px); height: 100%; flex: 0 0 var(--fd-mobile-nav-height, 56px); align-items: center; justify-content: center; border: 0; border-right: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: transparent; color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); cursor: pointer; padding: 0; appearance: none; }\n .fd-mobile-nav-btn svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }\n .mobile-topbar-link { display: inline-flex; height: 100%; min-width: 0; align-items: center; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); font-family: var(--fd-docs-font-mono); font-size: 12px; letter-spacing: 0.03em; text-decoration: none; text-transform: uppercase; }\n .mobile-topbar-link { border-left: 1px solid var(--color-fd-border, hsl(0 0% 15%)); padding: 0 14px; }\n #nd-docs-layout .fd-toc { position: sticky; top: var(--fd-docs-row-1); grid-area: toc; display: flex; width: var(--fd-toc-width); height: calc(var(--fd-docs-height) - var(--fd-docs-row-1)); max-height: calc(100vh - var(--fd-docs-row-1)); flex-direction: column; align-self: start; overflow: hidden; padding: 48px 16px 8px 0; }\n #nd-docs-layout .fd-toc-inner { display: flex; min-width: 0; min-height: 0; flex: 1 1 auto; flex-direction: column; }\n #nd-docs-layout .fd-toc-title { display: inline-flex; align-items: center; gap: 0.375rem; margin: 0 0 1rem; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); font-family: var(--fd-docs-font-sans); font-size: 0.875rem; font-weight: 500; line-height: 1.4; }\n #nd-docs-layout .fd-toc-title svg { width: 1rem; height: 1rem; flex: 0 0 1rem; color: currentColor; }\n #nd-docs-layout .toc-scroll { min-height: 0; overflow: auto; padding: 0.75rem 0; scrollbar-width: none; }\n #nd-docs-layout .toc-scroll::-webkit-scrollbar { display: none; }\n #nd-docs-layout .toc-track { position: relative; min-width: 0; }\n #nd-docs-layout .toc-thumb { position: absolute; inset-block: 0; inset-inline-start: 0; width: 1px; background: var(--color-fd-primary, oklch(0.985 0.001 106.423)); transition: clip-path 150ms ease; }\n #nd-docs-layout .toc-links { display: flex; min-width: 0; flex-direction: column; border-inline-start: 1px solid color-mix(in srgb, var(--color-fd-foreground, #fff) 10%, transparent); }\n #nd-docs-layout .toc-link { display: block; min-width: 0; padding: 0.375rem 0 0.375rem 0.75rem; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); font-size: 0.875rem; line-height: 1.45; text-decoration: none; overflow-wrap: anywhere; transition: color 150ms ease; }\n #nd-docs-layout .toc-link:first-child { padding-top: 0; }\n #nd-docs-layout .toc-link:last-child { padding-bottom: 0; }\n #nd-docs-layout .toc-link[data-depth=\"3\"] { padding-left: 1.5rem; font-size: 0.8125rem; }\n #nd-docs-layout .toc-link[data-depth=\"4\"], #nd-docs-layout .toc-link[data-depth=\"5\"], #nd-docs-layout .toc-link[data-depth=\"6\"] { padding-left: 2rem; font-size: 0.8125rem; }\n #nd-docs-layout .toc-link[data-active=\"true\"] { color: var(--color-fd-primary, oklch(0.985 0.001 106.423)); }\n #nd-docs-layout .toc-link:hover { color: var(--color-fd-accent-foreground, oklch(0.985 0.001 106.423)); }\n #nd-docs-layout .toc-empty { margin: 0; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); font-size: 0.875rem; line-height: 1.5; }\n aside#nd-sidebar { position: sticky; top: 0; grid-area: sidebar; height: 100vh; overflow: auto; isolation: isolate; border-left: 1px solid var(--color-fd-border, hsl(0 0% 15%)); border-right: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background-color: var(--color-fd-background, hsl(0 0% 2%)); background-image: linear-gradient(var(--color-fd-border, hsl(0 0% 15%)), var(--color-fd-border, hsl(0 0% 15%))), linear-gradient(var(--color-fd-border, hsl(0 0% 15%)), var(--color-fd-border, hsl(0 0% 15%))), repeating-linear-gradient(-45deg, color-mix(in srgb, var(--color-fd-border, hsl(0 0% 15%)) 2%, transparent), color-mix(in srgb, var(--color-fd-foreground, #fff) 7%, transparent) 1px, transparent 1px, transparent 6px), repeating-linear-gradient(-45deg, color-mix(in srgb, var(--color-fd-border, hsl(0 0% 15%)) 2%, transparent), color-mix(in srgb, var(--color-fd-foreground, #fff) 7%, transparent) 1px, transparent 1px, transparent 6px); background-size: 1px 100%, 1px 100%, var(--fd-pixel-rail-width) 100%, var(--fd-pixel-rail-width) 100%; background-position: var(--fd-pixel-rail-width) 0, calc(100% - var(--fd-pixel-rail-width)) 0, left top, right top; background-repeat: repeat-y; padding: 0 var(--fd-sidebar-edge) 18px; }\n aside#nd-sidebar::before, aside#nd-sidebar::after { display: none; }\n aside#nd-sidebar > * { position: relative; z-index: 1; }\n .sidebar-brand { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: var(--fd-nav-height, 44px); margin: 0 calc(-1 * var(--fd-sidebar-edge)) 18px; border-top: 1px solid var(--color-fd-border, hsl(0 0% 15%)); border-bottom: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: transparent; padding: 0 var(--fd-sidebar-edge); font-family: var(--fd-docs-font-mono); font-size: 12px; letter-spacing: 0.03em; text-transform: uppercase; }\n .sidebar-brand a { display: inline-flex; min-width: 0; align-items: center; gap: 8px; overflow: hidden; text-decoration: none; text-overflow: ellipsis; white-space: nowrap; }\n .sidebar-brand-logo { width: 16px; height: 16px; flex: 0 0 16px; color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); }\n .sidebar-brand-title { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .sidebar-brand-suffix { opacity: 0.52; }\n .sidebar-scroll { margin: 0 calc(-1 * var(--fd-sidebar-edge)); overflow: visible; }\n .sidebar-tree { margin-top: 0 !important; }\n .sidebar-tree > a[data-active], .sidebar-folder { border-top: 1px solid var(--color-fd-border, hsl(0 0% 15%)); }\n #nd-docs-layout aside#nd-sidebar .sidebar-tree > .sidebar-folder { margin-left: 0 !important; margin-right: 0 !important; padding: 0 !important; }\n .sidebar-tree > :last-child { border-bottom: 1px solid var(--color-fd-border, hsl(0 0% 15%)); }\n #nd-docs-layout aside#nd-sidebar .sidebar-tree a[data-active] { position: relative; display: flex; width: auto !important; min-width: 0; align-items: center; gap: 8px; margin: 0 !important; padding: 6px var(--fd-sidebar-edge) 6px var(--fd-sidebar-link-x) !important; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); text-decoration: none; font-size: 13.5px !important; line-height: 1.45 !important; background: transparent !important; transition: color 150ms ease; }\n #nd-docs-layout aside#nd-sidebar .sidebar-tree > a[data-active] { padding-left: var(--fd-sidebar-edge) !important; padding-top: 12px !important; padding-bottom: 12px !important; }\n #nd-docs-layout aside#nd-sidebar .sidebar-subgroup-content a[data-active] { padding-left: var(--fd-sidebar-sub-link-x) !important; }\n .sidebar-tree a[data-active=\"true\"], .sidebar-tree a[data-active=\"true\"]:hover { color: var(--color-fd-primary, oklch(0.985 0.001 106.423)) !important; }\n .sidebar-tree a[data-active=\"false\"]:hover { color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)) !important; }\n .sidebar-icon { display: inline-flex; width: 14px; height: 14px; flex: 0 0 14px; color: currentColor; opacity: 0.72; }\n .sidebar-icon svg { width: 100%; height: 100%; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }\n .sidebar-icon[data-sidebar-icon^=\"brand-\"] svg { fill: currentColor; stroke: none; }\n .sidebar-icon[data-sidebar-icon^=\"brand-\"] svg * { stroke: none; }\n .sidebar-link-label, .sidebar-folder-label, .sidebar-subgroup-label { display: inline-flex; min-width: 0; align-items: center; gap: 8px; }\n .sidebar-folder-label .sidebar-icon { width: 13px; height: 13px; flex-basis: 13px; }\n .sidebar-subgroup-label .sidebar-icon { width: 14px; height: 14px; flex-basis: 14px; }\n .sidebar-label-text { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n .sidebar-tree a[data-active=\"true\"] .sidebar-icon, .sidebar-tree a:hover .sidebar-icon { opacity: 1; }\n #nd-docs-layout aside#nd-sidebar .sidebar-folder-trigger { display: flex !important; width: 100% !important; min-width: 0; align-items: center; justify-content: flex-start; border: 0; border-bottom: 1px solid var(--color-fd-border, hsl(0 0% 15%)) !important; background: transparent !important; margin: 0 !important; transform: none !important; padding: 8px var(--fd-sidebar-edge) !important; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)) !important; font-family: var(--fd-docs-font-sans); font-size: 12px !important; font-weight: 600; letter-spacing: 0 !important; text-align: left; text-transform: none; cursor: default; }\n .sidebar-folder-content { position: relative; padding: 8px 0; overflow: hidden; }\n .sidebar-folder-content::before { content: \"\"; position: absolute; left: var(--fd-sidebar-guide-x); top: 0; bottom: 0; width: 1px; background: var(--fd-sidebar-line-color); pointer-events: none; }\n .sidebar-folder-content > a[data-active]::after, .sidebar-subgroup-title::after, .sidebar-subgroup-content a[data-active]::after { content: \"\"; position: absolute; top: 50%; height: 1px; background: var(--fd-sidebar-line-color); transform: translateY(-50%); pointer-events: none; transition: background-color 150ms ease; }\n .sidebar-folder-content > a[data-active]::after { left: calc(var(--fd-sidebar-guide-x) + var(--fd-sidebar-branch-gap)); width: calc(var(--fd-sidebar-link-x) - var(--fd-sidebar-guide-x) - var(--fd-sidebar-branch-gap)); }\n .sidebar-subgroup-title::after { left: calc(var(--fd-sidebar-guide-x) + var(--fd-sidebar-branch-gap)); width: calc(var(--fd-sidebar-sub-guide-x) - var(--fd-sidebar-guide-x) - var(--fd-sidebar-branch-gap)); }\n .sidebar-folder-content > a[data-active=\"true\"]::after, .sidebar-subgroup-content a[data-active=\"true\"]::after { background: var(--color-fd-primary, oklch(0.985 0.001 106.423)); }\n .sidebar-subgroup { position: relative; padding: 2px 0 4px; }\n .sidebar-subgroup::before { content: \"\"; position: absolute; left: var(--fd-sidebar-sub-guide-x); top: 17px; bottom: 19px; width: 1px; background: var(--fd-sidebar-line-color); pointer-events: none; }\n .sidebar-subgroup-title { position: relative; display: flex; min-width: 0; align-items: center; margin: 0 !important; padding: 6px var(--fd-sidebar-edge) 6px var(--fd-sidebar-link-x); color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); font-size: 13.5px; font-weight: 400; line-height: 1.45; }\n .sidebar-subgroup-content { position: relative; padding: 0 0 4px; }\n .sidebar-subgroup-content a[data-active]::after { left: var(--fd-sidebar-sub-guide-x); width: calc(var(--fd-sidebar-sub-link-x) - var(--fd-sidebar-sub-guide-x) - var(--fd-sidebar-nested-icon-gap)); }\n main { grid-area: main; min-width: 0; padding: 46px 40px 80px; }\n article#nd-page { width: min(100%, var(--fd-content-width)); margin: 0 auto; }\n article#nd-page .fd-breadcrumb { display: flex; min-width: 0; align-items: center; gap: 0; margin: 0 0 0.5rem; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); font-family: var(--fd-docs-font-mono); font-size: 0.75rem; line-height: 1.4; letter-spacing: 0.01em; text-transform: uppercase; }\n article#nd-page .fd-breadcrumb-item { display: inline-flex; min-width: 0; align-items: center; }\n article#nd-page .fd-breadcrumb-link { color: inherit; font-family: var(--fd-docs-font-mono); text-decoration: none; }\n article#nd-page .fd-breadcrumb-link:hover { color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); }\n article#nd-page .fd-breadcrumb-parent { opacity: 0.6; font-weight: 400; }\n article#nd-page .fd-breadcrumb-sep { margin: 0 0.375rem; opacity: 0.4; font-size: 0.75rem; }\n article#nd-page .fd-breadcrumb-current { color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); font-family: var(--fd-docs-font-mono); font-weight: 500; }\n .prose h1 { margin: 0 0 16px; font-size: 36px; line-height: 1.14; letter-spacing: -0.02em; }\n .prose h2 { margin: 44px 0 14px; border-top: 1px solid var(--color-fd-border, hsl(0 0% 15%)); padding-top: 26px; font-size: 24px; line-height: 1.24; letter-spacing: -0.01em; }\n .prose h3 { margin: 30px 0 12px; font-size: 20px; line-height: 1.3; letter-spacing: 0; }\n .prose h4, .prose h5, .prose h6 { margin: 24px 0 10px; letter-spacing: 0; }\n .heading-anchor { color: inherit; text-decoration: none; }\n .heading-anchor:hover { text-decoration: underline; text-underline-offset: 4px; }\n .prose p { margin: 14px 0; color: color-mix(in srgb, var(--color-fd-foreground, oklch(0.985 0.001 106.423)) 74%, transparent); font-size: 15.6px; line-height: 1.8; }\n .prose ul, .prose ol { margin: 16px 0; padding-left: 24px; color: color-mix(in srgb, var(--color-fd-foreground, oklch(0.985 0.001 106.423)) 78%, transparent); line-height: 1.75; }\n .prose li { margin: 6px 0; }\n .prose code:not(pre code) { border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: var(--color-fd-card, hsl(0 0% 4%)); padding: 1px 5px; font-family: var(--fd-docs-font-mono); font-size: 0.88em; overflow-wrap: break-word; word-break: break-word; }\n .sh-code { --sh-class: #e5c07b; --sh-identifier: #c8ccd4; --sh-string: #98c379; --sh-keyword: #c678dd; --sh-comment: #5c6370; --sh-property: #e06c75; --sh-sign: #c8ccd4; --sh-space: inherit; }\n .code-block { --fd-code-header-bg: color-mix(in srgb, var(--color-fd-foreground, #fff) 5%, var(--color-fd-background, #000)); --fd-code-body-bg: color-mix(in srgb, var(--color-fd-foreground, #fff) 8%, var(--color-fd-background, #000)); position: relative; width: 100%; min-width: 0; max-width: 100%; margin: 20px 0; overflow: hidden; border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: var(--color-fd-background, hsl(0 0% 2%)); box-shadow: 3px 3px 0 0 var(--color-fd-border, hsl(0 0% 15%)); font-family: var(--fd-docs-font-mono); }\n #nd-docs-layout figure.shiki.code-block { box-shadow: 3px 3px 0 0 var(--color-fd-border, hsl(0 0% 15%)) !important; }\n .code-block-header { display: flex; align-items: center; justify-content: space-between; gap: 10px; min-width: 0; min-height: 30px; border-bottom: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background-color: var(--fd-code-header-bg); background-image: repeating-linear-gradient(-45deg, color-mix(in srgb, var(--color-fd-foreground, #fff) 7%, transparent), color-mix(in srgb, var(--color-fd-foreground, #fff) 7%, transparent) 1px, transparent 1px, transparent 6px); padding: 4px 8px 4px 10px; }\n .code-block-title { overflow: hidden; color: color-mix(in srgb, var(--color-fd-foreground, #fff) 50%, transparent); font-size: 10px; line-height: 1.2; text-overflow: ellipsis; text-transform: lowercase; white-space: nowrap; }\n .code-copy { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; flex: 0 0 auto; border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: color-mix(in srgb, var(--color-fd-background, #000) 80%, transparent); color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); cursor: pointer; padding: 0; }\n .code-copy-floating { position: absolute; top: 8px; right: 8px; z-index: 2; opacity: 0.72; transition: opacity 150ms ease; }\n #nd-docs-layout figure.shiki.code-block > .code-copy-floating { opacity: 0.72; }\n .code-block-plain:hover .code-copy-floating, .code-block-plain:focus-within .code-copy-floating { opacity: 1; }\n .code-copy svg { width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }\n .code-copy .code-copy-check { display: none; }\n .code-copy[data-copied=\"true\"] .code-copy-icon { display: none; }\n .code-copy[data-copied=\"true\"] .code-copy-check { display: block; }\n .code-copy:hover { color: var(--color-fd-foreground, #fff); background: var(--color-fd-muted, hsl(0 0% 10%)); }\n .code-block pre { margin: 0; max-width: 100%; overflow-x: auto; border: 0; background: var(--fd-code-body-bg); padding: 18px 20px; color: var(--color-fd-foreground, #fff); font-family: var(--fd-docs-font-mono); font-size: 13px; line-height: 1.6; }\n #nd-docs-layout figure.shiki.code-block pre { padding: 18px 20px !important; }\n .code-block code { display: block; min-width: max-content; border: 0 !important; background: transparent !important; padding: 0 !important; font-family: inherit; white-space: normal; }\n .sh__line { display: block; min-height: 1.6em; white-space: pre; }\n blockquote { margin: 18px 0; border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); border-left: 3px solid var(--color-fd-foreground, oklch(0.985 0.001 106.423)); background: var(--color-fd-card, hsl(0 0% 4%)); box-shadow: 3px 3px 0 0 var(--color-fd-border, hsl(0 0% 15%)); padding: 14px 16px; color: color-mix(in srgb, var(--color-fd-foreground, oklch(0.985 0.001 106.423)) 78%, transparent); }\n .fd-table-wrapper { margin: 24px 0; overflow-x: auto; }\n .fd-table-wrapper table { width: 100%; border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); border-collapse: collapse; font-size: 14px; }\n .fd-table-wrapper th, .fd-table-wrapper td { border-color: var(--color-fd-border, hsl(0 0% 15%)); border-bottom: 1px solid var(--color-fd-border, hsl(0 0% 15%)); padding: 10px 12px; text-align: left; vertical-align: top; }\n .fd-table-wrapper th { background: var(--color-fd-muted, hsl(0 0% 10%)); color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); font-family: inherit; font-size: 13px; font-weight: 500; text-transform: none; }\n .fd-table-wrapper tr:last-child td { border-bottom: 0; }\n hr { border: 0; border-top: 1px solid var(--color-fd-border, hsl(0 0% 15%)); margin: 28px 0; }\n img { max-width: 100%; height: auto; border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); }\n .fd-page-nav { display: grid; width: 100%; max-width: 100%; grid-template-columns: 1fr; gap: 16px; margin-top: 16px; border-top: 0; padding-top: 0; }\n .fd-page-nav:has(.fd-page-nav-prev):has(.fd-page-nav-next) { grid-template-columns: repeat(2, minmax(0, 1fr)); }\n #nd-docs-layout .fd-page-nav-card { display: flex; min-width: 0; min-height: 98px; flex-direction: column; justify-content: flex-start; gap: 8px; border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); border-radius: 0 !important; background: transparent; padding: 16px; color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); text-decoration: none; transition: background-color 150ms ease, border-color 150ms ease; }\n .fd-page-nav-card:hover { border-color: var(--color-fd-border, hsl(0 0% 15%)); background: color-mix(in srgb, var(--color-fd-muted, hsl(0 0% 10%)) 80%, transparent); }\n .fd-page-nav-next { align-items: flex-end; text-align: right; }\n .fd-page-nav-title { display: inline-flex; max-width: 100%; min-height: 0; align-items: center; gap: 6px; overflow: hidden; color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); font-size: 0.875rem; font-weight: 500; line-height: 1.5; overflow-wrap: anywhere; }\n .fd-page-nav-title svg { width: 1rem; height: 1rem; flex-shrink: 0; }\n .fd-page-nav-description { display: block; max-width: 100%; min-height: 0; overflow: hidden; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); font-size: 15.6px; font-weight: 400; line-height: 1.8; text-overflow: ellipsis; white-space: nowrap; }\n .fd-below-title-block { display: flex; flex-direction: column; align-items: flex-start; gap: 0.625rem; margin: 0 0 1.25rem; }\n .fd-page-actions { display: flex; width: 100%; align-items: center; gap: 0.5rem; }\n .fd-page-actions[data-actions-alignment=\"right\"] { justify-content: flex-end; }\n .fd-below-title-block .fd-page-actions { margin: 0; }\n .fd-page-meta { display: inline-flex; align-items: center; gap: 0.375rem; color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); font-size: 0.8125rem; line-height: 1.5; }\n .fd-page-meta-dot { color: color-mix(in srgb, var(--color-fd-muted-foreground, hsl(0 0% 55%)) 60%, transparent); }\n .fd-last-updated-inline, .fd-last-updated-footer { color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); font-family: var(--fd-docs-font-mono); font-size: 0.75rem; letter-spacing: 0.03em; line-height: 1.5; text-transform: uppercase; }\n #nd-docs-layout .fd-page-action-btn { display: inline-flex; min-height: 2.125rem; align-items: center; justify-content: center; gap: 0.5rem; border: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: color-mix(in srgb, var(--color-fd-foreground, #fff) 5%, var(--color-fd-background, #000)); color: var(--color-fd-muted-foreground, hsl(0 0% 55%)); padding: 0 0.75rem; box-shadow: 2px 2px 0 0 var(--color-fd-border, hsl(0 0% 15%)); cursor: pointer; font-family: var(--fd-docs-font-mono) !important; font-size: 0.75rem; font-weight: 500; letter-spacing: 0.03em; line-height: 1; text-transform: uppercase; transition: background-color 150ms ease, color 150ms ease, border-color 150ms ease; appearance: none; }\n #nd-docs-layout .fd-page-action-btn:hover { border-color: color-mix(in srgb, var(--color-fd-foreground, #fff) 22%, transparent); background: color-mix(in srgb, var(--color-fd-foreground, #fff) 8%, var(--color-fd-background, #000)); color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); }\n #nd-docs-layout .fd-page-action-btn:disabled { cursor: wait; opacity: 0.72; }\n #nd-docs-layout .fd-page-action-btn svg { width: 14px; height: 14px; flex: 0 0 14px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }\n #nd-docs-layout .fd-page-action-btn .fd-page-action-check-icon { display: none; }\n #nd-docs-layout .fd-page-action-btn[data-copied=\"true\"] .fd-page-action-copy-icon { display: none; }\n #nd-docs-layout .fd-page-action-btn[data-copied=\"true\"] .fd-page-action-check-icon { display: block; }\n .fd-page-footer { display: flex; align-items: center; gap: 0.75rem 1rem; margin-top: 2rem; border-top: 1px solid var(--color-fd-border, hsl(0 0% 15%)); padding-top: 1rem; }\n .fd-page-footer .fd-last-updated-footer { margin-left: auto; }\n @media (max-width: 1020px) {\n :root { --fd-mobile-nav-height: 56px; --fd-sidebar-edge: 20px; --fd-sidebar-guide-x: 58px; --fd-sidebar-link-x: 88px; --fd-sidebar-sub-guide-x: calc(var(--fd-sidebar-link-x) + 7px); --fd-sidebar-sub-link-x: calc(var(--fd-sidebar-sub-guide-x) + 28px); }\n html { scroll-padding-top: calc(var(--fd-mobile-nav-height, 56px) + 24px); }\n body { overflow-x: hidden; }\n #nd-docs-layout { display: block !important; min-height: 100dvh; border-top: 0; padding-top: var(--fd-mobile-nav-height, 56px); }\n .mobile-topbar { position: fixed; inset: 0 0 auto 0; z-index: 80; display: flex; height: var(--fd-mobile-nav-height, 56px); align-items: stretch; border-bottom: 1px solid var(--color-fd-border, hsl(0 0% 15%)); background: color-mix(in srgb, var(--color-fd-background, hsl(0 0% 2%)) 94%, transparent); backdrop-filter: blur(12px); }\n .mobile-topbar a:hover, .fd-mobile-nav-btn:hover { color: var(--color-fd-foreground, oklch(0.985 0.001 106.423)); }\n .topbar { display: none !important; }\n .sidebar-backdrop { position: fixed; inset: 0; z-index: 70; display: block; background: color-mix(in srgb, var(--color-fd-background, #000) 72%, transparent); opacity: 0; pointer-events: none; transition: opacity 180ms ease; }\n #nd-docs-layout[data-sidebar-open=\"true\"] .sidebar-backdrop { opacity: 1; pointer-events: auto; }\n aside#nd-sidebar { position: fixed; inset: 0 auto 0 0; z-index: 90; width: min(342px, calc(100vw - 42px)); height: 100dvh; max-height: none; overflow-y: auto; overscroll-behavior: contain; border-right: 1px solid var(--color-fd-border, hsl(0 0% 15%)); border-bottom: 0; transform: translate3d(-100%, 0, 0); transition: transform 180ms ease; will-change: transform; }\n #nd-docs-layout[data-sidebar-open=\"true\"] aside#nd-sidebar { transform: translate3d(0, 0, 0); }\n aside#nd-sidebar::before, aside#nd-sidebar::after { display: none; }\n .sidebar-brand { min-height: var(--fd-nav-height, 44px); margin-top: 0; }\n main { padding: 34px 20px 64px; }\n article#nd-page { width: 100%; margin: 0; }\n #nd-docs-layout .fd-toc { display: none !important; }\n .prose h1 { font-size: 32px; line-height: 1.16; letter-spacing: 0; }\n .prose h2 { margin-top: 34px; padding-top: 22px; font-size: 23px; }\n .code-block { margin: 16px 0; box-shadow: 2px 2px 0 0 var(--color-fd-border, hsl(0 0% 15%)); }\n #nd-docs-layout figure.shiki.code-block { box-shadow: 2px 2px 0 0 var(--color-fd-border, hsl(0 0% 15%)) !important; }\n .code-block-header { min-height: 26px; padding: 2px 6px 2px 8px; }\n .code-copy-floating { top: 6px; right: 6px; }\n #nd-docs-layout figure.shiki.code-block pre, .code-block pre { padding: 12px 11px !important; font-size: 12px; line-height: 1.5; }\n .sh__line { min-height: 1.5em; }\n .fd-page-nav { grid-template-columns: 1fr !important; }\n .fd-page-nav-next { align-items: flex-start; text-align: left; }\n .fd-page-footer { align-items: flex-start; flex-direction: column; }\n .fd-page-footer .fd-last-updated-footer { margin-left: 0; }\n }\n @media (max-width: 640px) {\n .code-block-header { min-height: 22px; padding: 1px 4px 1px 7px; }\n .code-block-title { font-size: 9px; }\n .code-copy { width: 20px; height: 20px; }\n .code-copy svg { width: 12px; height: 12px; }\n .code-copy-floating { top: 5px; right: 5px; }\n #nd-docs-layout figure.shiki.code-block pre, .code-block pre { padding: 10px !important; font-size: 11px; line-height: 1.55; }\n .sh__line { min-height: 1.55em; }\n }\n${farmDocsPixelBorderCss}\n `;\n}\n\nfunction renderPixelDocsHtml(\n page: LoadedFarmDocsPage,\n pages: FarmDocsPage[],\n docs: FarmDocsResolvedConfig,\n themeCss: string,\n clientEntry: string,\n faviconHref: string,\n): string {\n const navTitle =\n typeof docs.config.nav === \"object\" && docs.config.nav && \"title\" in docs.config.nav\n ? String((docs.config.nav as { title?: unknown }).title || \"Docs\")\n : \"Docs\";\n const description = page.description || docs.config.metadata?.description || \"\";\n const tocItems = extractTocItems(page.body, getThemeTocDepth(docs));\n const themeName = getThemeName(docs);\n const searchEnabled = isFarmDocsSearchEnabled(docs);\n\n return `<!DOCTYPE html>\n<html class=\"dark\" lang=\"en\" data-docs-theme=\"${escapeAttribute(themeName)}\">\n<head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"generator\" content=\"@farming-labs/docs via Farm.js\">\n <title>${escapeHtml(page.title)}</title>\n ${renderFarmDocsFaviconLink(faviconHref)}\n <link rel=\"preload\" href=\"${GEIST_SANS_FONT_URL}\" as=\"font\" type=\"font/woff2\" crossorigin>\n <link rel=\"preload\" href=\"${GEIST_MONO_FONT_URL}\" as=\"font\" type=\"font/woff2\" crossorigin>\n ${description ? `<meta name=\"description\" content=\"${escapeHtml(description)}\">` : \"\"}\n <style>${themeCss}\n${renderFarmDocsBridgeCss(docs)}</style>\n ${searchEnabled ? renderDocsSearchBootstrapScript() : \"\"}\n</head>\n<body>\n <div id=\"nd-docs-layout\" class=\"grid\">\n <header class=\"mobile-topbar\" aria-label=\"Mobile docs navigation\">\n <button class=\"fd-mobile-nav-btn\" type=\"button\" data-sidebar-toggle aria-controls=\"nd-sidebar\" aria-expanded=\"false\" aria-label=\"Open menu\">\n <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\"><line x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\"></line><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\"></line><line x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\"></line></svg>\n </button>\n <div class=\"mobile-topbar-actions\">\n ${searchEnabled ? renderDocsSearchTrigger() : \"\"}\n <a class=\"mobile-topbar-link\" href=\"/llms.txt\">llms.txt</a>\n </div>\n </header>\n <div class=\"sidebar-backdrop\" data-sidebar-backdrop></div>\n <aside id=\"nd-sidebar\">\n <div class=\"sidebar-brand\">\n <a href=\"/\">${renderFarmDocsBrandMark()}${renderFarmDocsBrandTitle(navTitle)}</a>\n <span>/ docs</span>\n </div>\n ${renderPixelNavItems(pages, page.href, docs)}\n </aside>\n <header class=\"topbar\">\n <div class=\"topbar-actions\">\n ${searchEnabled ? renderDocsSearchTrigger(false) : \"\"}\n <a class=\"topbar-llms-link\" href=\"/llms.txt\">llms.txt</a>\n </div>\n </header>\n <main>\n <article id=\"nd-page\" class=\"prose\">\n ${renderPixelBreadcrumb(page, docs)}\n${renderMarkdownHtmlWithTitleMeta(page, docs)}\n ${renderPixelPageFooter(page, docs)}\n ${renderPixelPageNav(pages, page.href, docs)}\n </article>\n </main>\n <nav id=\"nd-toc\" class=\"fd-toc sticky top-(--fd-docs-row-1) h-[calc(var(--fd-docs-height)-var(--fd-docs-row-1))] flex flex-col [grid-area:toc] w-(--fd-toc-width) pt-12 pe-4 pb-2 max-xl:hidden\" data-toc aria-labelledby=\"toc-title\">\n <div class=\"fd-toc-inner\">\n <h3 id=\"toc-title\" class=\"fd-toc-title inline-flex items-center gap-1.5 text-sm text-fd-muted-foreground\"><svg class=\"size-4\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" focusable=\"false\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4 7h16\"></path><path d=\"M4 12h16\"></path><path d=\"M4 17h16\"></path></svg>On this page</h3>\n <div class=\"toc-scroll\">\n ${renderPixelToc(tocItems)}\n </div>\n </div>\n </nav>\n </div>\n ${searchEnabled ? renderDocsSearchMount(clientEntry) : \"\"}\n ${renderDocsRuntimeScripts(docs)}\n</body>\n</html>`;\n}\n\nexport function createFarmDocsHandler(\n docs: FarmDocsResolvedConfig | undefined,\n options: FarmDocsHandlerOptions,\n) {\n const faviconHref = resolveFarmDocsFavicon(docs, options);\n\n return async function handleFarmDocsRequest(request: Request): Promise<Response | null> {\n if (!docs?.enabled || (request.method !== \"GET\" && request.method !== \"HEAD\")) return null;\n\n const contentDir = resolveFarmDocsContentDir(docs, options);\n const publicResponse = createFarmDocsPublicResponse(contentDir, docs, request);\n if (publicResponse) return publicResponse;\n\n if (!isFarmDocsRequest(docs, request)) return null;\n\n const page = loadPage(contentDir, docs, request);\n if (!page) return null;\n\n if (shouldReturnMarkdown(request)) {\n const origin = new URL(request.url).origin;\n return new Response(\n renderDocsMarkdownDocument(toFarmDocsMarkdownPage(page), {\n origin,\n llms: docs.config.llmsTxt ?? true,\n sitemap: docs.config.sitemap,\n }),\n {\n status: 200,\n headers: {\n \"Content-Type\": \"text/markdown; charset=utf-8\",\n \"Cache-Control\": \"public, max-age=60\",\n },\n },\n );\n }\n\n return new Response(\n renderPixelDocsHtml(\n page,\n discoverFarmDocsPages(contentDir, docs),\n docs,\n resolvePixelBorderThemeCss(options),\n options.clientEntry || \"/farm-client.js\",\n faviconHref,\n ),\n {\n status: 200,\n headers: {\n \"Content-Type\": \"text/html; charset=utf-8\",\n \"Cache-Control\": \"public, s-maxage=60, stale-while-revalidate=300\",\n },\n },\n );\n };\n}\n","import { execFileSync } from \"node:child_process\";\nimport { existsSync, readFileSync, readdirSync, realpathSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\n\nexport const FARM_DOCS_LAST_MODIFIED_MANIFEST = \".farm-docs-last-modified.json\";\n\nexport interface FarmDocsLastModifiedManifest {\n version: 1;\n pages: Record<string, string>;\n}\n\nexport interface CreateFarmDocsLastModifiedManifestOptions {\n fallback?: \"mtime\" | \"now\";\n now?: Date;\n}\n\nconst COMMIT_MARKER = \"__FARM_DOCS_COMMIT__\";\nconst DOCS_FILE_EXTENSIONS = new Set([\".md\", \".mdx\"]);\nconst manifestCache = new Map<\n string,\n {\n signature: string;\n manifest: FarmDocsLastModifiedManifest;\n }\n>();\n\nfunction normalizeRelativePath(value: string): string {\n return value.replace(/\\\\/g, \"/\").replace(/^\\.\\/+/, \"\");\n}\n\nfunction resolveExistingPath(filePath: string): string {\n try {\n return realpathSync(filePath);\n } catch {\n return path.resolve(filePath);\n }\n}\n\nfunction isDocsSourceFile(filePath: string): boolean {\n return DOCS_FILE_EXTENSIONS.has(path.extname(filePath).toLowerCase());\n}\n\nfunction discoverDocsSourceFiles(contentDir: string): string[] {\n const files: string[] = [];\n\n const visit = (dir: string) => {\n for (const entry of readdirSync(dir, { withFileTypes: true }).sort((a, b) =>\n a.name.localeCompare(b.name),\n )) {\n if (entry.name.startsWith(\".\") || entry.name === \"node_modules\") continue;\n\n const absolutePath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n visit(absolutePath);\n } else if (entry.isFile() && isDocsSourceFile(absolutePath)) {\n files.push(absolutePath);\n }\n }\n };\n\n if (existsSync(contentDir)) visit(contentDir);\n return files;\n}\n\nfunction getGitLastModifiedDates(contentDir: string): Record<string, string> {\n try {\n const gitRoot = execFileSync(\"git\", [\"-C\", contentDir, \"rev-parse\", \"--show-toplevel\"], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim();\n if (!gitRoot) return {};\n\n const contentPathspec = normalizeRelativePath(path.relative(gitRoot, contentDir)) || \".\";\n const contentPrefix = contentPathspec === \".\" ? \"\" : `${contentPathspec}/`;\n const history = execFileSync(\n \"git\",\n [\n \"-C\",\n gitRoot,\n \"-c\",\n \"core.quotePath=false\",\n \"log\",\n `--format=${COMMIT_MARKER}%cI`,\n \"--name-only\",\n \"--\",\n contentPathspec,\n ],\n {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n maxBuffer: 32 * 1024 * 1024,\n },\n );\n\n const pages: Record<string, string> = {};\n let commitDate: string | undefined;\n\n for (const rawLine of history.split(/\\r?\\n/)) {\n const line = normalizeRelativePath(rawLine.trim());\n if (!line) continue;\n\n if (line.startsWith(COMMIT_MARKER)) {\n commitDate = line.slice(COMMIT_MARKER.length);\n continue;\n }\n if (!commitDate || (contentPrefix && !line.startsWith(contentPrefix))) continue;\n\n const relativePath = contentPrefix ? line.slice(contentPrefix.length) : line;\n if (isDocsSourceFile(relativePath) && !pages[relativePath]) {\n pages[relativePath] = commitDate;\n }\n }\n\n return pages;\n } catch {\n return {};\n }\n}\n\nfunction readManifest(contentDir: string): FarmDocsLastModifiedManifest | null {\n const manifestPath = path.join(contentDir, FARM_DOCS_LAST_MODIFIED_MANIFEST);\n if (!existsSync(manifestPath)) return null;\n\n try {\n const parsed = JSON.parse(readFileSync(manifestPath, \"utf8\")) as Partial<\n FarmDocsLastModifiedManifest\n >;\n if (parsed.version !== 1 || !parsed.pages || typeof parsed.pages !== \"object\") return null;\n\n const pages = Object.fromEntries(\n Object.entries(parsed.pages).filter(\n (entry): entry is [string, string] =>\n typeof entry[1] === \"string\" && entry[1].length > 0,\n ),\n );\n return { version: 1, pages };\n } catch {\n return null;\n }\n}\n\nexport function createFarmDocsLastModifiedManifest(\n contentDir: string,\n options: CreateFarmDocsLastModifiedManifestOptions = {},\n): FarmDocsLastModifiedManifest {\n const resolvedContentDir = resolveExistingPath(contentDir);\n const gitDates = getGitLastModifiedDates(resolvedContentDir);\n const fallbackDate = (options.now ?? new Date()).toISOString();\n const pages: Record<string, string> = {};\n\n for (const sourcePath of discoverDocsSourceFiles(resolvedContentDir)) {\n const relativePath = normalizeRelativePath(path.relative(resolvedContentDir, sourcePath));\n pages[relativePath] =\n gitDates[relativePath] ||\n (options.fallback === \"now\" ? fallbackDate : statSync(sourcePath).mtime.toISOString());\n }\n\n return { version: 1, pages };\n}\n\nfunction getLastModifiedManifest(contentDir: string): FarmDocsLastModifiedManifest {\n const resolvedContentDir = resolveExistingPath(contentDir);\n const manifestPath = path.join(resolvedContentDir, FARM_DOCS_LAST_MODIFIED_MANIFEST);\n const manifestStat = existsSync(manifestPath) ? statSync(manifestPath) : null;\n const signature = manifestStat\n ? `file:${manifestStat.mtimeMs}:${manifestStat.size}`\n : \"generated\";\n const cached = manifestCache.get(resolvedContentDir);\n if (cached?.signature === signature) return cached.manifest;\n\n const manifest =\n readManifest(resolvedContentDir) ?? createFarmDocsLastModifiedManifest(resolvedContentDir);\n manifestCache.set(resolvedContentDir, { signature, manifest });\n return manifest;\n}\n\nexport function resolveFarmDocsPageLastModified(\n contentDir: string,\n sourcePath: string,\n frontmatter: Record<string, string>,\n): string {\n const configured =\n frontmatter.lastModified ||\n frontmatter.lastmod ||\n frontmatter.lastUpdated ||\n frontmatter.updatedAt;\n if (configured) return configured;\n\n const resolvedContentDir = resolveExistingPath(contentDir);\n const resolvedSourcePath = resolveExistingPath(sourcePath);\n const relativePath = normalizeRelativePath(path.relative(resolvedContentDir, resolvedSourcePath));\n const isInsideContentDir =\n relativePath !== \"..\" && !relativePath.startsWith(\"../\") && !path.isAbsolute(relativePath);\n\n if (isInsideContentDir) {\n const generated = getLastModifiedManifest(resolvedContentDir).pages[relativePath];\n if (generated) return generated;\n }\n\n return statSync(resolvedSourcePath).mtime.toISOString();\n}\n","export const farmDocsPixelBorderCss = String.raw`\n/* Farm docs pixel-border bridge.\n * This follows the local @farming-labs/docs pixel-border theme while covering\n * the frameworkless HTML emitted by the Farm docs runtime.\n */\n\n:root {\n --color-fd-background: #000;\n --color-fd-foreground: oklch(0.985 0.001 106.423);\n --color-fd-card: hsl(0 0% 4%);\n --color-fd-card-foreground: oklch(0.985 0.001 106.423);\n --color-fd-popover: hsl(0 0% 4%);\n --color-fd-popover-foreground: oklch(0.985 0.001 106.423);\n --color-fd-primary: oklch(0.985 0.001 106.423);\n --color-fd-primary-foreground: oklch(0.216 0.006 56.043);\n --color-fd-secondary: hsl(0 0% 8%);\n --color-fd-secondary-foreground: oklch(0.985 0.001 106.423);\n --color-fd-muted: hsl(0 0% 10%);\n --color-fd-muted-foreground: hsl(0 0% 55%);\n --color-fd-accent: hsl(0 0% 10%);\n --color-fd-accent-foreground: oklch(0.985 0.001 106.423);\n --color-fd-border: hsl(0 0% 15%);\n --color-fd-ring: hsl(0 0% 30%);\n --fd-pixel-modal-border: color-mix(\n in srgb,\n var(--color-fd-foreground) 10%,\n transparent\n );\n --fd-pixel-modal-shadow: color-mix(\n in srgb,\n var(--color-fd-foreground) 8%,\n transparent\n );\n --fd-nav-height: 44px;\n --fd-banner-height: 0px;\n --fd-tocnav-height: 0px;\n --scrollbar-thumb: var(--color-fd-border);\n --scrollbar-thumb-hover: var(--color-fd-ring);\n --scrollbar-track: transparent;\n --radius: 0px;\n --font-geist-sans: \"Geist Sans\";\n --font-geist-mono: \"Geist Mono\";\n}\n\n.dark {\n --color-fd-background: #000 !important;\n}\n\nhtml,\nbody,\n#nd-docs-layout {\n background-color: var(--color-fd-background) !important;\n}\n\n@font-face {\n font-family: \"Geist Sans\";\n font-display: block;\n font-style: normal;\n font-weight: 100 900;\n src:\n local(\"Geist Sans\"),\n url(\"/assets/Geist-Variable-CrgPqtmy.woff2\") format(\"woff2\"),\n url(\"/node_modules/geist/dist/fonts/geist-sans/Geist-Variable.woff2\") format(\"woff2\");\n}\n\n@font-face {\n font-family: \"Geist Mono\";\n font-display: block;\n font-style: normal;\n font-weight: 100 900;\n src:\n local(\"Geist Mono\"),\n url(\"/assets/GeistMono-Variable-BNLlm6Cd.woff2\") format(\"woff2\"),\n url(\"/node_modules/geist/dist/fonts/geist-mono/GeistMono-Variable.woff2\") format(\"woff2\");\n}\n\n* {\n scrollbar-color: var(--scrollbar-thumb) var(--scrollbar-track);\n scrollbar-width: thin;\n}\n\nhtml {\n scroll-padding-top: calc(\n var(--fd-nav-height, 56px) + var(--fd-banner-height, 0px) + var(--fd-tocnav-height, 0px) + 24px\n );\n}\n\nbody {\n overscroll-behavior: none;\n}\n\nhtml[data-farm-docs-sidebar=\"open\"],\nhtml[data-farm-docs-sidebar=\"open\"] body {\n overflow: hidden;\n}\n\ncode:not(pre code) {\n overflow-wrap: break-word;\n word-break: break-word;\n}\n\n#nd-docs-layout,\n#nd-docs-layout * {\n border-radius: 0 !important;\n}\n\n.topbar {\n grid-column: 2 / -1;\n width: 100%;\n}\n\n.topbar-actions,\n.mobile-topbar-actions {\n display: flex;\n height: 100%;\n min-width: 0;\n align-items: stretch;\n margin-left: auto;\n}\n\n.mobile-topbar {\n display: none;\n}\n\n.sidebar-backdrop {\n display: none;\n}\n\n.fd-mobile-nav-btn {\n display: inline-flex;\n width: var(--fd-mobile-nav-height, 56px);\n height: 100%;\n flex: 0 0 var(--fd-mobile-nav-height, 56px);\n align-items: center;\n justify-content: center;\n border: 0;\n border-right: 1px solid var(--color-fd-border);\n background: transparent;\n color: var(--color-fd-foreground);\n cursor: pointer;\n padding: 0;\n}\n\n.fd-mobile-nav-btn svg {\n width: 19px;\n height: 19px;\n fill: none;\n stroke: currentColor;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 2;\n}\n\n.mobile-topbar-link {\n display: inline-flex;\n height: 100%;\n min-width: 0;\n align-items: center;\n color: var(--color-fd-muted-foreground);\n font-family: var(--fd-docs-font-mono);\n font-size: 12px;\n letter-spacing: 0.03em;\n text-decoration: none;\n text-transform: uppercase;\n}\n\n.mobile-topbar-link {\n border-left: 1px solid var(--color-fd-border);\n padding: 0 14px;\n}\n\n.sidebar-brand {\n justify-content: flex-start;\n}\n\n.sidebar-brand > a {\n display: inline-flex;\n min-width: 0;\n align-items: center;\n gap: 8px;\n overflow: hidden;\n flex: 0 0 auto;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.sidebar-brand-logo {\n width: 16px;\n height: 16px;\n flex: 0 0 16px;\n color: var(--color-fd-foreground);\n}\n\n.sidebar-brand-title {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.sidebar-brand-suffix {\n opacity: 0.52;\n}\n\n.sidebar-brand > span {\n flex: 0 0 auto;\n margin-left: auto;\n}\n\n.fd-docs-search-trigger {\n display: inline-flex;\n width: auto;\n min-width: 46px;\n height: 26px;\n flex: 1 1 auto;\n align-items: center;\n justify-content: center;\n gap: 6px;\n overflow: hidden;\n border: 1px solid var(--color-fd-border);\n background: color-mix(in srgb, var(--color-fd-foreground) 4%, transparent);\n color: var(--color-fd-muted-foreground);\n cursor: pointer;\n padding: 0 5px 0 7px;\n font-family: var(--fd-docs-font-mono);\n font-size: 10px;\n letter-spacing: 0;\n line-height: 1;\n text-transform: uppercase;\n transition:\n border-color 150ms ease,\n background-color 150ms ease,\n color 150ms ease;\n appearance: none;\n}\n\n.fd-docs-search-trigger:hover,\n.fd-docs-search-trigger:focus-visible,\n.fd-docs-search-trigger[aria-expanded=\"true\"] {\n border-color: color-mix(in srgb, var(--color-fd-foreground) 28%, transparent);\n background: color-mix(in srgb, var(--color-fd-foreground) 8%, transparent);\n color: var(--color-fd-foreground);\n}\n\n.fd-docs-search-trigger:focus-visible {\n outline: 1px solid var(--color-fd-foreground);\n outline-offset: 2px;\n}\n\n.fd-docs-search-trigger svg {\n width: 13px;\n height: 13px;\n flex: 0 0 13px;\n fill: none;\n stroke: currentColor;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 1.8;\n}\n\n.fd-docs-search-trigger kbd {\n display: inline-flex;\n min-width: 24px;\n min-height: 16px;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n gap: 2px;\n border: 1px solid var(--color-fd-border);\n background: var(--color-fd-background);\n padding: 1px 4px;\n color: currentColor;\n font-family: inherit;\n font-size: 9px;\n font-weight: 500;\n letter-spacing: 0;\n line-height: 1;\n}\n\n.topbar-actions .fd-docs-search-trigger,\n.mobile-topbar-actions .fd-docs-search-trigger {\n width: auto;\n min-width: 54px;\n height: 100%;\n flex: 0 0 auto;\n border: 0;\n border-left: 1px solid var(--color-fd-border);\n background: transparent;\n padding: 0 12px;\n}\n\n.topbar-actions .fd-docs-search-trigger:hover,\n.topbar-actions .fd-docs-search-trigger:focus-visible,\n.mobile-topbar-actions .fd-docs-search-trigger:hover,\n.mobile-topbar-actions .fd-docs-search-trigger:focus-visible {\n background: color-mix(in srgb, var(--color-fd-foreground) 6%, transparent);\n}\n\n.fd-toc {\n position: sticky;\n top: var(--fd-docs-row-1);\n grid-area: toc;\n display: flex;\n flex-direction: column;\n width: var(--fd-toc-width);\n height: calc(var(--fd-docs-height) - var(--fd-docs-row-1));\n padding: 3rem 1rem 0.5rem 0;\n}\n\n.fd-toc-inner {\n min-width: 0;\n}\n\n.fd-toc-title {\n display: inline-flex;\n align-items: center;\n margin: 0 0 1rem;\n color: var(--color-fd-muted-foreground);\n gap: 0.375rem;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: 1.4;\n}\n\n.fd-toc-title svg {\n width: 1rem;\n height: 1rem;\n}\n\n.toc-scroll {\n overflow: auto;\n min-height: 0;\n padding: 0.75rem 0;\n scrollbar-width: none;\n}\n\n.toc-track {\n position: relative;\n}\n\n.toc-thumb {\n position: absolute;\n inset-block: 0;\n inset-inline-start: 0;\n width: 1px;\n background: var(--color-fd-primary);\n transition: clip-path 150ms ease;\n}\n\n.toc-links {\n display: flex;\n flex-direction: column;\n border-inline-start: 1px solid color-mix(in srgb, var(--color-fd-foreground) 10%, transparent);\n}\n\n.toc-link {\n display: block;\n padding: 0.375rem 0 0.375rem 0.75rem;\n color: var(--color-fd-muted-foreground);\n font-size: 0.875rem;\n line-height: 1.45;\n text-decoration: none;\n overflow-wrap: anywhere;\n transition: color 150ms ease;\n}\n\n.toc-link:first-child {\n padding-top: 0;\n}\n\n.toc-link:last-child {\n padding-bottom: 0;\n}\n\n.toc-link[data-depth=\"3\"] {\n padding-left: 1.5rem;\n font-size: 0.8125rem;\n}\n\n.toc-link[data-depth=\"4\"],\n.toc-link[data-depth=\"5\"],\n.toc-link[data-depth=\"6\"] {\n padding-left: 2rem;\n font-size: 0.8125rem;\n}\n\n.toc-link[data-active=\"true\"] {\n color: var(--color-fd-primary);\n}\n\n.toc-link:hover {\n color: var(--color-fd-accent-foreground);\n}\n\n.toc-empty {\n margin: 0;\n color: var(--color-fd-muted-foreground);\n font-size: 0.875rem;\n}\n\n.code-block {\n --fd-code-header-bg: color-mix(\n in srgb,\n var(--color-fd-foreground) 5%,\n var(--color-fd-background)\n );\n --fd-code-body-bg: color-mix(in srgb, var(--color-fd-foreground) 8%, var(--color-fd-background));\n width: 100%;\n min-width: 0;\n max-width: 100%;\n border: 1px solid var(--color-fd-border) !important;\n background: var(--fd-code-body-bg);\n box-shadow: 3px 3px 0 0 var(--color-fd-border) !important;\n}\n\n.code-block-header {\n min-height: 28px;\n padding: 3px 7px 3px 9px;\n}\n\n.code-block-title {\n font-size: 10px;\n line-height: 1.2;\n text-transform: lowercase;\n}\n\n.code-block pre {\n margin: 0;\n max-width: 100%;\n background: var(--fd-code-body-bg);\n}\n\n.code-block code {\n border: 0 !important;\n background: transparent !important;\n padding: 0 !important;\n}\n\n.fd-breadcrumb {\n display: flex;\n min-width: 0;\n align-items: center;\n gap: 0;\n margin: 0 0 0.5rem;\n color: var(--color-fd-muted-foreground);\n font-family: var(--fd-font-mono, var(--font-geist-mono, ui-monospace, monospace));\n font-size: 0.75rem;\n letter-spacing: 0.01em;\n line-height: 1.4;\n text-transform: uppercase;\n}\n\n.fd-breadcrumb-item {\n display: inline-flex;\n min-width: 0;\n align-items: center;\n}\n\n.fd-breadcrumb-link {\n color: inherit;\n font-family: var(--fd-font-mono, var(--font-geist-mono, ui-monospace, monospace));\n text-decoration: none;\n}\n\n.fd-breadcrumb-link:hover {\n color: var(--color-fd-foreground);\n}\n\n.fd-breadcrumb-parent {\n opacity: 0.6;\n font-weight: 400;\n}\n\n.fd-breadcrumb-sep {\n margin: 0 0.375rem;\n opacity: 0.4;\n font-size: 0.75rem;\n}\n\n.fd-breadcrumb-current {\n color: var(--color-fd-foreground);\n font-family: var(--fd-font-mono, var(--font-geist-mono, ui-monospace, monospace));\n font-weight: 500;\n}\n\n.fd-last-updated-inline,\n.fd-last-updated-footer {\n color: var(--color-fd-muted-foreground);\n font-family: var(--fd-docs-font-mono);\n font-size: 0.6875rem;\n line-height: 1.5;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n}\n\n.fd-page-action-btn {\n border-radius: 0 !important;\n box-shadow: 2px 2px 0 0 var(--color-fd-border);\n font-family: var(--fd-docs-font-mono) !important;\n font-size: 0.75rem;\n letter-spacing: 0.03em;\n text-transform: uppercase;\n}\n\n.fd-page-action-btn .fd-page-action-check-icon {\n display: none;\n}\n\n.fd-page-action-btn[data-copied=\"true\"] .fd-page-action-copy-icon {\n display: none;\n}\n\n.fd-page-action-btn[data-copied=\"true\"] .fd-page-action-check-icon {\n display: block;\n}\n\n@media (max-width: 1020px) {\n :root {\n --fd-mobile-nav-height: 56px;\n --fd-sidebar-edge: 20px;\n --fd-sidebar-guide-x: 58px;\n --fd-sidebar-link-x: 88px;\n --fd-sidebar-sub-guide-x: calc(var(--fd-sidebar-link-x) + 7px);\n --fd-sidebar-sub-link-x: calc(var(--fd-sidebar-sub-guide-x) + 28px);\n }\n\n html {\n scroll-padding-top: calc(var(--fd-mobile-nav-height, 56px) + 24px);\n }\n\n body {\n overflow-x: hidden;\n }\n\n #nd-docs-layout {\n display: block !important;\n min-height: 100dvh;\n border-top: 0;\n padding-top: var(--fd-mobile-nav-height, 56px);\n }\n\n .mobile-topbar {\n position: fixed;\n inset: 0 0 auto;\n z-index: 80;\n display: flex;\n height: var(--fd-mobile-nav-height, 56px);\n align-items: stretch;\n border-bottom: 1px solid var(--color-fd-border);\n background: color-mix(in srgb, var(--color-fd-background) 94%, transparent);\n backdrop-filter: blur(12px);\n }\n\n .mobile-topbar a:hover,\n .fd-mobile-nav-btn:hover {\n color: var(--color-fd-foreground);\n }\n\n .topbar {\n display: none !important;\n }\n\n .omni-overlay {\n z-index: 100;\n }\n\n .omni-content {\n z-index: 101;\n }\n\n .sidebar-backdrop {\n position: fixed;\n inset: 0;\n z-index: 70;\n display: block;\n background: color-mix(in srgb, var(--color-fd-background) 72%, transparent);\n opacity: 0;\n pointer-events: none;\n transition: opacity 180ms ease;\n }\n\n #nd-docs-layout[data-sidebar-open=\"true\"] .sidebar-backdrop {\n opacity: 1;\n pointer-events: auto;\n }\n\n aside#nd-sidebar {\n position: fixed;\n inset: 0 auto 0 0;\n z-index: 90;\n width: min(342px, calc(100vw - 42px));\n height: 100dvh;\n max-height: none;\n overflow-y: auto;\n overscroll-behavior: contain;\n border-right: 1px solid var(--color-fd-border);\n border-bottom: 0;\n transform: translate3d(-100%, 0, 0);\n transition: transform 180ms ease;\n will-change: transform;\n }\n\n #nd-docs-layout[data-sidebar-open=\"true\"] aside#nd-sidebar {\n transform: translate3d(0, 0, 0);\n }\n\n main {\n padding: 34px 20px 64px;\n }\n\n article#nd-page {\n width: 100%;\n margin: 0;\n }\n\n #nd-docs-layout .fd-toc {\n display: none !important;\n }\n\n .prose h1 {\n font-size: 32px;\n letter-spacing: 0;\n line-height: 1.16;\n }\n\n .code-block {\n margin: 16px 0;\n box-shadow: 2px 2px 0 0 var(--color-fd-border) !important;\n }\n\n .code-block-header {\n min-height: 26px;\n padding: 2px 6px 2px 8px;\n }\n\n .code-copy-floating {\n top: 6px;\n right: 6px;\n }\n\n #nd-docs-layout figure.shiki.code-block pre,\n .code-block pre {\n padding: 12px 11px !important;\n font-size: 12px;\n line-height: 1.5;\n }\n\n .sh__line {\n min-height: 1.5em;\n }\n\n .fd-page-nav {\n grid-template-columns: 1fr !important;\n }\n\n .fd-page-nav-next {\n align-items: flex-start;\n text-align: left;\n }\n\n .mobile-topbar-actions .fd-docs-search-trigger {\n min-width: 44px;\n padding: 0 14px;\n }\n\n .mobile-topbar-actions .fd-docs-search-trigger kbd {\n display: none;\n }\n}\n\n@media (max-width: 640px) {\n .code-block-header {\n min-height: 22px;\n padding: 1px 4px 1px 7px;\n }\n\n .code-block-title {\n font-size: 9px;\n }\n\n .code-copy {\n width: 20px;\n height: 20px;\n }\n\n .code-copy svg {\n width: 12px;\n height: 12px;\n }\n\n .code-copy-floating {\n top: 5px;\n right: 5px;\n }\n\n #nd-docs-layout figure.shiki.code-block pre,\n .code-block pre {\n padding: 10px !important;\n font-size: 11px;\n line-height: 1.55;\n }\n\n .sh__line {\n min-height: 1.55em;\n }\n}\n\n/* Search styling mirrors @farming-labs/theme's shared Omni palette so Farm\n * matches the Next.js and other framework adapters pixel-for-pixel. The CSS\n * stays bundled because production adapters cannot resolve theme files from\n * node_modules at request time. */\n/* ═══════════════════════════════════════════════════════════════════\n * Omni Command Palette — core styles\n * Uses fumadocs CSS variables so it auto-adapts to every theme.\n * ═══════════════════════════════════════════════════════════════════ */\n\n@keyframes omni-fade-in {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n}\n@keyframes omni-fade-out {\n from {\n opacity: 1;\n }\n to {\n opacity: 0;\n }\n}\n@keyframes omni-scale-in {\n from {\n opacity: 0;\n transform: translateX(-50%) scale(0.98) translateY(-6px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) scale(1) translateY(0);\n }\n}\n@keyframes omni-scale-out {\n from {\n opacity: 1;\n transform: translateX(-50%) scale(1) translateY(0);\n }\n to {\n opacity: 0;\n transform: translateX(-50%) scale(0.98) translateY(-6px);\n }\n}\n\n@keyframes omni-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.omni-spin {\n animation: omni-spin 1s linear infinite;\n}\n\n.omni-overlay {\n position: fixed;\n inset: 0;\n z-index: 50;\n background: rgba(0, 0, 0, 0.2);\n backdrop-filter: blur(2px);\n animation: omni-fade-in 150ms ease-out;\n}\n\n.omni-content {\n --omni-content-top: clamp(5rem, 16vh, 7rem);\n position: fixed;\n z-index: 51;\n top: var(--omni-content-top);\n left: 50%;\n transform: translateX(-50%);\n display: flex;\n flex-direction: column;\n width: min(720px, calc(100% - 1rem));\n border-radius: 0.75rem;\n border: 1px solid color-mix(in srgb, var(--color-fd-border, #d4d4d4) 70%, transparent);\n background: var(--color-fd-popover, #fafafa);\n color: var(--color-fd-popover-foreground, var(--color-fd-foreground, #272727));\n font-family: var(--font-sans, system-ui, -apple-system, BlinkMacSystemFont, \"SF Pro Text\",\n ui-sans-serif, sans-serif);\n box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.5);\n outline: none;\n overscroll-behavior: contain;\n animation: omni-scale-in 200ms cubic-bezier(0.16, 1, 0.3, 1);\n}\n\n@media (max-width: 639px) {\n .omni-content {\n --omni-content-top: 1rem;\n top: var(--omni-content-top);\n width: calc(100% - 1rem);\n max-height: calc(100vh - 2rem);\n }\n}\n\n/* Header */\n.omni-header {\n border-bottom: 1px solid var(--color-fd-border, #262626);\n}\n.omni-search-row {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem;\n}\n.omni-search-icon {\n color: var(--color-fd-muted-foreground, #a3a3a3);\n flex-shrink: 0;\n}\n.omni-search-icon svg {\n width: 1.25rem;\n height: 1.25rem;\n}\n.omni-search-input {\n width: 0;\n flex: 1;\n background: transparent;\n outline: none;\n font-size: 1.125rem;\n line-height: 1.75rem;\n color: var(--color-fd-popover-foreground, var(--color-fd-foreground, #272727));\n border: none;\n}\n.omni-search-input::placeholder {\n color: var(--color-fd-muted-foreground, #a3a3a3);\n}\n.omni-kbd {\n border-radius: 0.375rem;\n border: 1px solid var(--color-fd-border, #d4d4d4);\n background: transparent;\n padding: 0.375rem 0.5rem;\n font-size: 0.75rem;\n color: var(--color-fd-muted-foreground, #a3a3a3);\n font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,\n \"Liberation Mono\", \"Courier New\", monospace);\n line-height: 1rem;\n}\n.omni-close-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 0.25rem;\n min-width: 2.5rem;\n border-radius: 0.375rem;\n border: 1px solid var(--color-fd-border, #d4d4d4);\n padding: 0.375rem 0.5rem;\n color: var(--color-fd-muted-foreground, #a3a3a3);\n font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,\n \"Liberation Mono\", \"Courier New\", monospace);\n font-size: 0.75rem;\n line-height: 1rem;\n font-weight: 500;\n transition:\n background 120ms,\n color 120ms;\n cursor: pointer;\n background: none;\n}\n.omni-close-btn:hover {\n color: var(--color-fd-accent-foreground, var(--color-fd-foreground, #171717));\n background: var(--color-fd-accent, #e5e5e5);\n}\n.omni-close-btn svg {\n display: none;\n}\n\n/* Body / listbox */\n.omni-body {\n flex: 1 1 auto;\n min-height: 0;\n max-height: min(540px, calc(100vh - var(--omni-content-top, 7rem) - 8rem));\n overflow: auto;\n overscroll-behavior: contain;\n padding: 0.5rem;\n}\n.omni-body::-webkit-scrollbar {\n width: 6px;\n}\n.omni-body::-webkit-scrollbar-track {\n background: transparent;\n}\n.omni-body::-webkit-scrollbar-thumb {\n background: var(--color-fd-muted, #262626);\n border-radius: 3px;\n}\n\n/* Loading */\n.omni-loading {\n display: flex;\n align-items: center;\n gap: 0.5rem;\n padding: 0.75rem 0.625rem;\n color: var(--color-fd-muted-foreground, #a3a3a3);\n font-size: 0.875rem;\n}\n\n/* Groups */\n.omni-group {\n padding: 0;\n}\n.omni-group-label {\n display: none;\n}\n.omni-group-items {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n}\n\n/* Items */\n.omni-item {\n position: relative;\n display: block;\n width: 100%;\n flex-shrink: 0;\n border-radius: 0.5rem;\n padding: 0.75rem 0.875rem;\n text-align: left;\n font-size: 0.875rem;\n line-height: 1.25rem;\n cursor: pointer;\n border: none;\n background: transparent;\n color: var(--color-fd-foreground, #fafafa);\n transition: background 80ms;\n}\n.omni-item:hover,\n.omni-item-active {\n background: var(--color-fd-accent, rgba(209, 209, 209, 0.5));\n}\n.omni-item-active {\n color: var(--color-fd-accent-foreground, #171717);\n}\n.omni-item-disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.omni-item-icon {\n display: none;\n}\n.omni-item-active .omni-item-icon {\n color: var(--color-fd-accent-foreground, #fafafa);\n}\n.omni-item-text {\n min-width: 0;\n}\n.omni-item-label {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: var(--color-fd-popover-foreground, var(--color-fd-foreground, #272727));\n font-weight: 500;\n line-height: 1.35;\n}\n.omni-item-subtitle {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 0.75rem;\n line-height: 1rem;\n color: var(--color-fd-muted-foreground, #a3a3a3);\n opacity: 1;\n}\n.omni-item-active .omni-item-subtitle {\n color: var(--color-fd-muted-foreground, #737373);\n opacity: 1;\n}\n.omni-item-description {\n min-width: 0;\n overflow: hidden;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n margin-top: 0.625rem;\n padding-left: 0.75rem;\n border-left: 1px solid color-mix(in srgb, var(--color-fd-border, #d4d4d4) 70%, transparent);\n color: color-mix(in srgb, var(--color-fd-popover-foreground, #272727) 82%, transparent);\n font-size: 0.875rem;\n line-height: 1.5rem;\n font-weight: 400;\n}\n.omni-item-badge {\n display: none;\n}\n.omni-item-ext {\n display: none;\n}\n.omni-item-ext:hover {\n color: var(--color-fd-foreground, #fafafa);\n background: var(--color-fd-muted, #262626);\n}\n.omni-item-shortcuts {\n display: none;\n align-items: center;\n gap: 0.25rem;\n font-size: 10px;\n color: var(--color-fd-muted-foreground, #a3a3a3);\n}\n@media (min-width: 640px) {\n .omni-item-shortcuts {\n display: flex;\n }\n}\n.omni-kbd-sm {\n border-radius: 0.25rem;\n background: var(--color-fd-muted, #262626);\n padding: 0.125rem 0.25rem;\n font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,\n \"Liberation Mono\", \"Courier New\", monospace);\n}\n.omni-item-chevron {\n display: none;\n}\n/* Highlight */\n.omni-highlight {\n border-radius: 0;\n background: transparent;\n padding: 0;\n color: var(--color-fd-primary, #ca8a04);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n/* Empty states */\n.omni-empty-group {\n padding: 0.5rem 0.75rem;\n font-size: 0.75rem;\n color: var(--color-fd-muted-foreground, #a3a3a3);\n}\n.omni-empty {\n padding: 1.5rem 0.75rem;\n text-align: center;\n font-size: 0.875rem;\n color: var(--color-fd-muted-foreground, #a3a3a3);\n}\n.omni-empty-icon {\n width: 2rem;\n height: 2rem;\n margin: 0 auto 0.5rem;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 9999px;\n background: var(--color-fd-muted, #262626);\n}\n\n/* Footer */\n.omni-footer {\n border-top: 1px solid var(--color-fd-border, #262626);\n background: color-mix(in srgb, var(--color-fd-secondary, #f5f5f5) 50%, transparent);\n}\n.omni-footer-inner {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 0.75rem;\n padding: 0.625rem 0.75rem;\n font-size: 0.75rem;\n color: var(--color-fd-muted-foreground, #a3a3a3);\n}\n.omni-footer-hints {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n gap: 0.75rem;\n}\n.omni-footer-hint {\n display: flex;\n align-items: center;\n gap: 0.25rem;\n white-space: nowrap;\n}\n.omni-footer-hint svg {\n box-sizing: border-box;\n width: 1.375rem;\n height: 1.375rem;\n padding: 0.25rem;\n border-radius: 0.375rem;\n border: 1px solid var(--color-fd-border, #d4d4d4);\n background: color-mix(in srgb, var(--color-fd-muted, #e5e5e5) 70%, transparent);\n color: var(--color-fd-muted-foreground, #737373);\n flex-shrink: 0;\n}\n.omni-footer-hint-desktop {\n display: none;\n}\n.omni-footer-filter {\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 0.5rem;\n margin-left: auto;\n white-space: nowrap;\n}\n@media (min-width: 640px) {\n .omni-footer-hint-desktop {\n display: flex;\n }\n}\n.omni-filter-label {\n color: var(--color-fd-muted-foreground, #a3a3a3);\n}\n.omni-filter-value {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n color: var(--color-fd-popover-foreground, var(--color-fd-foreground, #272727));\n}\n.omni-filter-button {\n display: inline-flex;\n align-items: center;\n gap: 0.25rem;\n border: 0;\n background: transparent;\n color: var(--color-fd-popover-foreground, var(--color-fd-foreground, #272727));\n font: inherit;\n cursor: pointer;\n padding: 0;\n}\n.omni-filter-button:hover {\n color: var(--color-fd-accent-foreground, var(--color-fd-foreground, #171717));\n}\n.omni-filter-menu {\n position: absolute;\n right: 0;\n bottom: calc(100% + 0.5rem);\n z-index: 1;\n width: 10rem;\n border: 1px solid var(--color-fd-border, #d4d4d4);\n border-radius: 0.5rem;\n background: var(--color-fd-popover, #fafafa);\n padding: 0.25rem;\n box-shadow: 0 16px 32px -20px rgba(0, 0, 0, 0.45);\n}\n.omni-filter-option {\n display: flex;\n width: 100%;\n align-items: center;\n border: 0;\n border-radius: 0.375rem;\n background: transparent;\n color: var(--color-fd-popover-foreground, var(--color-fd-foreground, #272727));\n cursor: pointer;\n font: inherit;\n padding: 0.5rem 0.625rem;\n text-align: left;\n}\n.omni-filter-option:hover,\n.omni-filter-option-active {\n background: var(--color-fd-accent, rgba(209, 209, 209, 0.5));\n}\n\n/* ─── Omni Command Palette (pixel-border theme) ─────────────────── */\n\n.omni-content {\n border-radius: 0 !important;\n border: 1px solid var(--fd-pixel-modal-border);\n box-shadow:\n 2px 2px 0 0 var(--fd-pixel-modal-shadow),\n 0 0 0 1px color-mix(in srgb, var(--color-fd-foreground) 3%, transparent);\n}\n\n.omni-item {\n border-radius: 0 !important;\n}\n\n.omni-kbd,\n.omni-kbd-sm {\n border-radius: 0 !important;\n border: 1px solid var(--color-fd-border, hsl(0 0% 15%));\n}\n\n.omni-close-btn {\n border-radius: 0 !important;\n}\n\n.omni-empty-icon {\n border-radius: 0 !important;\n}\n\n.omni-search-input {\n font-family: var(--fd-font-sans, system-ui, -apple-system, sans-serif);\n}\n\n.omni-group-label {\n font-family: var(--fd-font-mono, ui-monospace, monospace);\n letter-spacing: 0.08em;\n}\n\n.omni-footer-inner {\n font-family: var(--fd-font-mono, ui-monospace, monospace);\n}\n\n.omni-footer-hint svg {\n border-radius: 0 !important;\n}\n\n.omni-filter-menu,\n.omni-filter-option {\n border-radius: 0 !important;\n}\n\n.omni-highlight {\n background: color-mix(in srgb, var(--color-fd-primary, #6366f1) 25%, transparent);\n border-radius: 0 !important;\n}\n\n/* Farm's frameworkless topbar uses a compact search trigger. */\n.topbar-actions .fd-docs-search-trigger {\n width: 56px;\n min-width: 56px;\n justify-content: center;\n padding: 0 10px;\n}\n\n.topbar-actions .fd-docs-search-trigger kbd {\n min-width: 36px;\n height: 19px;\n min-height: 19px;\n flex: 0 0 auto;\n gap: 4px;\n border-color: color-mix(in srgb, var(--color-fd-foreground) 14%, transparent);\n background: color-mix(in srgb, var(--color-fd-foreground) 5%, transparent);\n padding: 0 5px;\n font-size: 9px;\n}\n\n/* Farm's mobile shell sits above the frameworkless docs canvas. Keep the\n * shared Omni palette above it without changing the cross-framework styling. */\n.omni-overlay {\n z-index: 100;\n}\n\n.omni-content {\n z-index: 101;\n}\n\n@media (max-width: 1023px) {\n .mobile-topbar-actions .fd-docs-search-trigger {\n width: 44px;\n min-width: 44px;\n justify-content: center;\n padding: 0;\n }\n\n .mobile-topbar-actions .fd-docs-search-trigger kbd {\n display: none;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .omni-overlay,\n .omni-content {\n animation: none;\n }\n}\n`;\n","import {\n buildDocsAgentDiscoverySpec,\n buildDocsConfigMap,\n buildDocsDiagnostics as buildFarmingDocsDiagnostics,\n buildDocsSitemapManifest,\n performDocsSearch,\n renderDocsAgentsDocument,\n renderDocsLlmsTxt,\n renderDocsMarkdownDocument,\n renderDocsRobotsTxt,\n renderDocsSitemapMarkdown,\n renderDocsSitemapXml,\n renderDocsSkillDocument,\n type DocsConfig,\n type DocsLlmsTxtPageInput,\n type DocsSearchSourcePage,\n type DocsSitemapPageInput,\n} from \"@farming-labs/docs\";\nimport { resolveDocsConfig } from \"../config\";\nimport type { FarmDocsResolvedConfig, FarmDocsUserConfig } from \"./types\";\nimport {\n discoverFarmDocsPages,\n type LoadedFarmDocsPage,\n loadFarmDocsPage,\n resolveFarmDocsContentDir,\n toFarmDocsMarkdownPage,\n} from \"./handler\";\n\nexport interface FarmDocsAPIOptions {\n rootDir?: string;\n root?: string;\n srcDir?: string;\n docs?: FarmDocsUserConfig | FarmDocsResolvedConfig;\n config?: Partial<DocsConfig>;\n configPath?: string;\n entry?: string;\n docsPath?: string;\n contentDir?: string;\n}\n\nexport interface FarmDocsCloudRouteOptions {\n locale?: string;\n publicBaseUrl?: string;\n}\n\nexport interface FarmDocsCloudServer {\n handleRequest(request: Request, options?: FarmDocsCloudRouteOptions): Promise<Response>;\n}\n\nexport type FarmDocsCloudIntegration =\n | FarmDocsCloudServer\n | (FarmDocsCloudRouteOptions & { docsCloud?: FarmDocsCloudServer });\n\nexport interface FarmDocsAPIRouteHandlers {\n GET(request: Request): Promise<Response>;\n POST(request: Request): Promise<Response>;\n}\n\nexport type FarmDocsAPIHandler = (request: Request) => Promise<Response | null>;\n\ninterface FarmDocsAPIContext {\n root: string;\n srcDir: string;\n docs: FarmDocsResolvedConfig;\n contentDir: string;\n}\n\ntype JsonRecord = Record<string, unknown>;\ntype DocsAPIPathTarget = {\n format?: string;\n slug?: string;\n};\ntype FarmDocsRuntimeConfig = {\n root?: string;\n srcDir?: string;\n docs?: FarmDocsResolvedConfig;\n};\n\ndeclare global {\n // Injected by Farm's generated server entry so route wrappers can stay zero-config.\n // eslint-disable-next-line no-var\n var __FARM_DOCS_RUNTIME_CONFIG__: FarmDocsRuntimeConfig | undefined;\n}\n\nfunction isRecord(value: unknown): value is JsonRecord {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isResolvedDocsConfig(value: unknown): value is FarmDocsResolvedConfig {\n return (\n isRecord(value) &&\n typeof value.enabled === \"boolean\" &&\n typeof value.entry === \"string\" &&\n isRecord(value.config)\n );\n}\n\nexport function isFarmDocsAPIRequest(requestOrPathname: Request | string): boolean {\n const pathname =\n typeof requestOrPathname === \"string\"\n ? requestOrPathname\n : new URL(requestOrPathname.url).pathname;\n\n return pathname === \"/api/docs\" || pathname.startsWith(\"/api/docs/\");\n}\n\nfunction json(data: unknown, init: ResponseInit = {}): Response {\n const headers = new Headers(init.headers);\n if (!headers.has(\"Content-Type\")) {\n headers.set(\"Content-Type\", \"application/json\");\n }\n return new Response(JSON.stringify(data), { ...init, headers });\n}\n\nfunction text(content: string, contentType: string, init: ResponseInit = {}): Response {\n const headers = new Headers(init.headers);\n headers.set(\"Content-Type\", contentType);\n return new Response(content, { ...init, headers });\n}\n\nfunction normalizeAction(value: string | null | undefined): string | undefined {\n return value?.trim().toLowerCase().replace(/_/g, \"-\") || undefined;\n}\n\nfunction getDocsTitle(docs: FarmDocsResolvedConfig): string {\n return typeof docs.config.nav === \"object\" && docs.config.nav && \"title\" in docs.config.nav\n ? String((docs.config.nav as { title?: unknown }).title || \"Documentation\")\n : \"Documentation\";\n}\n\nfunction isDocsCloudServer(value: unknown): value is FarmDocsCloudServer {\n return isRecord(value) && typeof value.handleRequest === \"function\";\n}\n\nfunction resolveDocsCloudIntegration(\n integration?: FarmDocsCloudIntegration,\n): { docsCloud: FarmDocsCloudServer; routeOptions: FarmDocsCloudRouteOptions } | undefined {\n if (!integration) return undefined;\n\n if (isDocsCloudServer(integration)) {\n return { docsCloud: integration, routeOptions: {} };\n }\n\n if (!integration.docsCloud) return undefined;\n\n return {\n docsCloud: integration.docsCloud,\n routeOptions: {\n locale: integration.locale,\n publicBaseUrl: integration.publicBaseUrl,\n },\n };\n}\n\nfunction isDocsCloudGetRequest(request: Request): boolean {\n const url = new URL(request.url);\n const cloud = normalizeAction(url.searchParams.get(\"cloud\"));\n const action = normalizeAction(url.searchParams.get(\"action\"));\n const format = normalizeAction(url.searchParams.get(\"format\"));\n\n return (\n cloud === \"config\" ||\n cloud === \"public-config\" ||\n action === \"cloud-config\" ||\n action === \"docs-cloud-config\" ||\n format === \"cloud-config\" ||\n format === \"docs-cloud-config\"\n );\n}\n\nfunction isDocsCloudAction(action: string | undefined): boolean {\n return Boolean(\n action &&\n [\"analytics\", \"track\", \"track-event\", \"event\", \"ask-ai\", \"ai\", \"chat\", \"docs-cloud\"].includes(\n action,\n ),\n );\n}\n\nasync function readJson(request: Request): Promise<unknown> {\n try {\n return await request.clone().json();\n } catch {\n return undefined;\n }\n}\n\nasync function isDocsCloudPostRequest(request: Request): Promise<boolean> {\n const url = new URL(request.url);\n const cloud = normalizeAction(url.searchParams.get(\"cloud\"));\n const action = normalizeAction(url.searchParams.get(\"action\"));\n\n if (isDocsCloudAction(cloud) || isDocsCloudAction(action)) return true;\n\n const body = await readJson(request);\n if (!isRecord(body)) return false;\n\n const bodyAction = normalizeAction(typeof body.action === \"string\" ? body.action : undefined);\n if (isDocsCloudAction(bodyAction)) return true;\n\n if (typeof body.type === \"string\") return true;\n if (isRecord(body.event) && typeof body.event.type === \"string\") return true;\n if (isRecord(body.payload) && typeof body.payload.type === \"string\") return true;\n\n return false;\n}\n\nfunction normalizeDocsApiSlug(\n value: string | null | undefined,\n docs: FarmDocsResolvedConfig,\n): string {\n const entry = docs.entry.replace(/^\\/+|\\/+$/g, \"\");\n let slug = (value || \"\").trim().replace(/^\\/+|\\/+$/g, \"\");\n\n if (entry && slug === entry) return \"\";\n if (entry && slug.startsWith(`${entry}/`)) {\n slug = slug.slice(entry.length + 1);\n }\n\n return decodeURIComponent(slug).replace(/\\.(mdx?|markdown)$/i, \"\");\n}\n\nfunction getDocsAPIPathTarget(request: Request): DocsAPIPathTarget {\n const pathname = new URL(request.url).pathname.replace(/\\/+$/, \"\") || \"/\";\n const prefix = \"/api/docs\";\n\n if (pathname !== prefix && !pathname.startsWith(`${prefix}/`)) return {};\n\n const rawValue = pathname === prefix ? \"\" : pathname.slice(prefix.length + 1);\n const value = rawValue.replace(/^\\/+|\\/+$/g, \"\");\n const normalizedValue = normalizeAction(value);\n\n if (!value) return {};\n if (\n normalizedValue === \"agent\" ||\n normalizedValue === \"agent.json\" ||\n normalizedValue === \"agent/spec\"\n ) {\n return { format: \"agent-spec\" };\n }\n if (\n normalizedValue === \"agents\" ||\n normalizedValue === \"agents.md\" ||\n normalizedValue === \"agent.md\"\n ) {\n return { format: \"agents\" };\n }\n if (normalizedValue === \"skill\" || normalizedValue === \"skill.md\") return { format: \"skill\" };\n if (normalizedValue === \"llms.txt\") return { format: \"llms\" };\n if (normalizedValue === \"llms-full.txt\") return { format: \"llms-full\" };\n if (normalizedValue === \"sitemap.md\") return { format: \"sitemap-md\" };\n if (normalizedValue === \"sitemap.xml\") return { format: \"sitemap-xml\" };\n if (normalizedValue === \"robots.txt\") return { format: \"robots\" };\n if (/\\.(mdx?|markdown)$/i.test(value)) return { format: \"markdown\", slug: value };\n\n return { slug: value };\n}\n\nfunction getDocsAPIFormat(request: Request): string | undefined {\n const url = new URL(request.url);\n return (\n normalizeAction(url.searchParams.get(\"format\") || url.searchParams.get(\"type\")) ||\n getDocsAPIPathTarget(request).format\n );\n}\n\nfunction getDocsDescription(docs: FarmDocsResolvedConfig): string | undefined {\n return docs.config.metadata?.description;\n}\n\nfunction getLoadedDocsPages(context: FarmDocsAPIContext): LoadedFarmDocsPage[] {\n return discoverFarmDocsPages(context.contentDir, context.docs)\n .map((page) => loadFarmDocsPage(context.contentDir, context.docs, page.slug))\n .filter((page): page is LoadedFarmDocsPage => Boolean(page));\n}\n\nfunction toDocsSourcePage(page: LoadedFarmDocsPage): DocsSearchSourcePage {\n return {\n ...toFarmDocsMarkdownPage(page),\n sourcePath: page.sourcePath,\n };\n}\n\nfunction toDocsSitemapPage(page: LoadedFarmDocsPage): DocsSitemapPageInput {\n return {\n ...toFarmDocsMarkdownPage(page),\n sourcePath: page.sourcePath,\n };\n}\n\nfunction toDocsLlmsPage(page: LoadedFarmDocsPage): DocsLlmsTxtPageInput {\n return toFarmDocsMarkdownPage(page);\n}\n\nfunction getDocsLlmsOptions(context: FarmDocsAPIContext, request: Request) {\n const configured = isRecord(context.docs.config.llmsTxt) ? context.docs.config.llmsTxt : {};\n return {\n enabled: true,\n baseUrl: new URL(request.url).origin,\n siteTitle: getDocsTitle(context.docs),\n siteDescription: getDocsDescription(context.docs),\n ...configured,\n };\n}\n\nfunction getDocsDiscoveryOptions(context: FarmDocsAPIContext, request: Request) {\n const origin = new URL(request.url).origin;\n\n return {\n origin,\n entry: context.docs.entry,\n i18n: null,\n search: context.docs.config.search ?? true,\n mcp: {\n enabled: false,\n route: \"/api/docs/mcp\",\n name: `${getDocsTitle(context.docs)} MCP`,\n version: \"1\",\n tools: {\n listDocs: false,\n listPages: false,\n readPage: false,\n searchDocs: false,\n getNavigation: false,\n getCodeExamples: false,\n getConfigSchema: false,\n },\n },\n feedback: undefined,\n llms: getDocsLlmsOptions(context, request),\n sitemap: context.docs.config.sitemap ?? true,\n robots: context.docs.config.robots ?? true,\n openapi: context.docs.config.apiReference,\n markdown: {\n acceptHeader: true,\n signatureAgentHeader: true,\n },\n };\n}\n\nfunction buildSitemapManifest(context: FarmDocsAPIContext, request: Request) {\n const origin = new URL(request.url).origin;\n return buildDocsSitemapManifest({\n pages: getLoadedDocsPages(context).map(toDocsSitemapPage),\n entry: context.docs.entry,\n siteTitle: getDocsTitle(context.docs),\n baseUrl: origin,\n });\n}\n\nfunction renderLlmsTxt(context: FarmDocsAPIContext, request: Request, full: boolean): string {\n const generated = renderDocsLlmsTxt(\n getLoadedDocsPages(context).map(toDocsLlmsPage),\n getDocsLlmsOptions(context, request),\n );\n\n return full ? generated.llmsFullTxt : generated.llmsTxt;\n}\n\nfunction renderSkillDocument(context: FarmDocsAPIContext, request: Request): string {\n const farmAliases = [\n \"## Farm API Route Aliases\",\n \"\",\n \"- Search JSON: /api/docs?query=<term>\",\n \"- Config JSON: /api/docs?format=config\",\n \"- Markdown by query: /api/docs?format=markdown&path=<slug>\",\n \"- Markdown by path: /api/docs/<slug>.md\",\n \"- LLM summary: /api/docs?format=llms\",\n \"- Full LLM document: /api/docs?format=llms-full\",\n \"- Sitemap XML: /api/docs?format=sitemap-xml\",\n \"- Agent spec JSON: /api/docs/agent/spec\",\n ].join(\"\\n\");\n\n return `${renderDocsSkillDocument(getDocsDiscoveryOptions(context, request)).trim()}\\n\\n${farmAliases}\\n`;\n}\n\nfunction renderAgentsDocument(context: FarmDocsAPIContext, request: Request): string {\n return `${renderDocsAgentsDocument(getDocsDiscoveryOptions(context, request)).trim()}\\n`;\n}\n\nfunction buildAgentSpec(context: FarmDocsAPIContext, request: Request) {\n const url = new URL(request.url);\n const origin = url.origin;\n const pages = discoverFarmDocsPages(context.contentDir, context.docs);\n const spec = buildDocsAgentDiscoverySpec(getDocsDiscoveryOptions(context, request));\n const title = getDocsTitle(context.docs);\n\n return {\n ...spec,\n name: title,\n site: {\n ...spec.site,\n title,\n description: getDocsDescription(context.docs),\n entry: context.docs.entry,\n },\n entry: context.docs.entry,\n routes: {\n docs: `${origin}${context.docs.entry}`,\n config: `${origin}/api/docs?format=config`,\n search: `${origin}/api/docs?query=<term>`,\n markdown: `${origin}/api/docs/<slug>.md`,\n markdownQuery: `${origin}/api/docs?format=markdown&path=<slug>`,\n llms: `${origin}/api/docs?format=llms`,\n llmsFull: `${origin}/api/docs?format=llms-full`,\n sitemapXml: `${origin}/api/docs?format=sitemap-xml`,\n sitemapMarkdown: `${origin}/api/docs?format=sitemap-md`,\n robots: `${origin}/api/docs?format=robots`,\n skill: `${origin}/api/docs?format=skill`,\n agents: `${origin}/api/docs?format=agents`,\n agentSpec: `${origin}/api/docs/agent/spec`,\n },\n capabilities: {\n ...spec.capabilities,\n search: spec.capabilities.search,\n markdown: spec.capabilities.markdownRoutes,\n llms: spec.capabilities.llms,\n sitemap: spec.capabilities.sitemap,\n robots: spec.capabilities.robots,\n post: false,\n },\n pages,\n };\n}\n\nfunction buildDiagnostics(context: FarmDocsAPIContext) {\n const pages = discoverFarmDocsPages(context.contentDir, context.docs);\n const diagnostics = buildFarmingDocsDiagnostics(context.docs.config, {\n entry: context.docs.entry,\n mcp: {\n enabled: false,\n route: \"/api/docs/mcp\",\n name: `${getDocsTitle(context.docs)} MCP`,\n version: \"1\",\n tools: {\n listDocs: false,\n listPages: false,\n readPage: false,\n searchDocs: false,\n getNavigation: false,\n getCodeExamples: false,\n getConfigSchema: false,\n },\n },\n });\n\n return {\n ...diagnostics,\n enabled: context.docs.enabled,\n entry: context.docs.entry,\n root: context.root,\n srcDir: context.srcDir,\n contentDir: context.contentDir,\n configPath: context.docs.configPath || null,\n pageCount: pages.length,\n pages,\n };\n}\n\nasync function searchDocs(context: FarmDocsAPIContext, request: Request, query: string) {\n const loadedPages = getLoadedDocsPages(context);\n const sourcePages = loadedPages.map(toDocsSourcePage);\n const sourcePageByUrl = new Map(sourcePages.map((page) => [page.url, page]));\n const resultLimit =\n isRecord(context.docs.config.search) &&\n typeof context.docs.config.search.maxResults === \"number\"\n ? context.docs.config.search.maxResults\n : undefined;\n\n const results = await performDocsSearch({\n pages: sourcePages,\n query,\n search: context.docs.config.search ?? true,\n pathname: new URL(request.url).pathname,\n siteTitle: getDocsTitle(context.docs),\n limit: resultLimit,\n });\n\n return results.map((result) => {\n const pageUrl = result.url.split(\"#\")[0];\n const page = sourcePageByUrl.get(pageUrl);\n return {\n ...result,\n title: page?.title || result.content,\n href: page?.url || pageUrl,\n description: result.description || page?.description,\n };\n });\n}\n\nasync function resolveAPIContext(options: FarmDocsAPIOptions): Promise<FarmDocsAPIContext> {\n const runtimeConfig = globalThis.__FARM_DOCS_RUNTIME_CONFIG__;\n const root = options.rootDir || options.root || runtimeConfig?.root || process.cwd();\n const srcDir = options.srcDir || runtimeConfig?.srcDir || \"src\";\n const canUseRuntimeDocs =\n options.docs === undefined &&\n options.config === undefined &&\n options.configPath === undefined &&\n options.entry === undefined &&\n options.docsPath === undefined &&\n options.contentDir === undefined &&\n options.root === undefined &&\n options.rootDir === undefined &&\n options.srcDir === undefined;\n const docsInput =\n options.docs ??\n (canUseRuntimeDocs ? runtimeConfig?.docs : undefined) ??\n ({\n enabled: true,\n entry: options.entry,\n docsPath: options.docsPath,\n contentDir: options.contentDir,\n config: options.config,\n configPath: options.configPath,\n } satisfies Exclude<FarmDocsUserConfig, boolean>);\n const docs = isResolvedDocsConfig(docsInput)\n ? docsInput\n : await resolveDocsConfig(docsInput, { root, srcDir });\n\n return {\n root,\n srcDir,\n docs,\n contentDir: resolveFarmDocsContentDir(docs, { root, srcDir }),\n };\n}\n\nasync function handleDocsAPIGet(request: Request, context: FarmDocsAPIContext): Promise<Response> {\n if (!context.docs.enabled) {\n return json({ error: \"Docs are disabled\" }, { status: 404 });\n }\n\n const url = new URL(request.url);\n const format = getDocsAPIFormat(request);\n const pathTarget = getDocsAPIPathTarget(request);\n\n if (format === \"config\" || format === \"docs-config\") {\n return json({\n entry: context.docs.entry,\n contentDir: context.docs.contentDir || context.docs.config.contentDir || null,\n config: context.docs.config,\n map: buildDocsConfigMap(context.docs.config, {\n file: context.docs.configPath || \"farm.config.ts\",\n }),\n });\n }\n\n if (format === \"skill\")\n return text(renderSkillDocument(context, request), \"text/markdown; charset=utf-8\");\n if (format === \"agents\")\n return text(renderAgentsDocument(context, request), \"text/markdown; charset=utf-8\");\n if (format === \"agent\" || format === \"agent-spec\") return json(buildAgentSpec(context, request));\n if (format === \"diagnostics\") return json(buildDiagnostics(context));\n if (format === \"llms\")\n return text(renderLlmsTxt(context, request, false), \"text/plain; charset=utf-8\");\n if (format === \"llms-full\")\n return text(renderLlmsTxt(context, request, true), \"text/plain; charset=utf-8\");\n if (format === \"sitemap-md\") {\n return text(\n renderDocsSitemapMarkdown(buildSitemapManifest(context, request), {\n includeDescriptions: true,\n }),\n \"text/markdown; charset=utf-8\",\n );\n }\n if (format === \"sitemap-xml\" || format === \"sitemap\") {\n const origin = new URL(request.url).origin;\n return text(\n renderDocsSitemapXml(buildSitemapManifest(context, request), {\n baseUrl: origin,\n includeLastmod: true,\n }),\n \"application/xml; charset=utf-8\",\n );\n }\n if (format === \"robots\") {\n return text(\n renderDocsRobotsTxt({\n entry: context.docs.entry,\n sitemap: context.docs.config.sitemap ?? true,\n robots: context.docs.config.robots ?? true,\n baseUrl: new URL(request.url).origin,\n }),\n \"text/plain; charset=utf-8\",\n );\n }\n\n if (format === \"markdown\" || url.pathname.endsWith(\".md\")) {\n const pathParam = url.searchParams.get(\"path\") || url.searchParams.get(\"slug\");\n const slug = normalizeDocsApiSlug(pathParam ?? pathTarget.slug ?? \"\", context.docs);\n const page = loadFarmDocsPage(context.contentDir, context.docs, slug);\n if (!page) return text(\"Docs page not found\\n\", \"text/plain; charset=utf-8\", { status: 404 });\n return text(\n renderDocsMarkdownDocument(toFarmDocsMarkdownPage(page), {\n origin: new URL(request.url).origin,\n llms: getDocsLlmsOptions(context, request),\n sitemap: context.docs.config.sitemap,\n }),\n \"text/markdown; charset=utf-8\",\n );\n }\n\n const query = url.searchParams.get(\"query\") || url.searchParams.get(\"q\") || \"\";\n if (!query.trim()) return json([]);\n return json(await searchDocs(context, request, query));\n}\n\nexport function createDocsAPI(\n options: FarmDocsAPIOptions = {},\n cloudIntegration?: FarmDocsCloudIntegration,\n): FarmDocsAPIRouteHandlers {\n let contextPromise: Promise<FarmDocsAPIContext> | undefined;\n const getContext = () => {\n contextPromise ??= resolveAPIContext(options);\n return contextPromise;\n };\n const integration = resolveDocsCloudIntegration(cloudIntegration);\n\n return {\n async GET(request: Request) {\n if (integration && isDocsCloudGetRequest(request)) {\n return integration.docsCloud.handleRequest(request, integration.routeOptions);\n }\n\n return handleDocsAPIGet(request, await getContext());\n },\n async POST(request: Request) {\n if (integration && (await isDocsCloudPostRequest(request))) {\n return integration.docsCloud.handleRequest(request, integration.routeOptions);\n }\n\n return json(\n {\n error: \"AI is not enabled for this Farm docs API route yet.\",\n },\n { status: 501 },\n );\n },\n };\n}\n\nexport function createFarmDocsAPIHandler(\n options: FarmDocsAPIOptions = {},\n cloudIntegration?: FarmDocsCloudIntegration,\n): FarmDocsAPIHandler {\n const handlers = createDocsAPI(options, cloudIntegration);\n\n return async function handleFarmDocsAPIRequest(request: Request): Promise<Response | null> {\n if (!isFarmDocsAPIRequest(request)) return null;\n\n const method = request.method.toUpperCase();\n if (method === \"GET\" || method === \"HEAD\") {\n return handlers.GET(request);\n }\n if (method === \"POST\") {\n return handlers.POST(request);\n }\n\n return json(\n {\n error: \"Method Not Allowed\",\n },\n {\n status: 405,\n headers: {\n Allow: \"GET, HEAD, POST\",\n },\n },\n );\n };\n}\n"],"mappings":"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AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["existsSync","readdirSync","readFileSync","statSync","path","DOCS_FILE_EXTENSIONS","path","existsSync","statSync","readFileSync","readdirSync","text","body","renderedSections","buildDocsAgentDiscoverySpec","buildDocsSitemapManifest","renderDocsAgentsDocument","renderDocsLlmsTxt","renderDocsMarkdownDocument","renderDocsRobotsTxt","renderDocsSitemapMarkdown","renderDocsSitemapXml","renderDocsSkillDocument","getDocsTitle","getDocsDescription","getLoadedDocsPages","toDocsSitemapPage","toDocsLlmsPage","getDocsLlmsOptions","getDocsDiscoveryOptions","buildDocsSitemapManifest","renderDocsLlmsTxt","renderDocsSkillDocument","renderDocsAgentsDocument","buildDocsAgentDiscoverySpec","renderDocsSitemapMarkdown","renderDocsSitemapXml","renderDocsRobotsTxt","renderDocsMarkdownDocument"]}