@sonordev/site-kit 5.6.0 → 5.7.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 (316) hide show
  1. package/agent-manifest.json +11 -3
  2. package/dist/AnalyticsProvider-EWF7JN2X.mjs +11 -0
  3. package/dist/{AnalyticsProvider-FVQIYSLY.mjs.map → AnalyticsProvider-EWF7JN2X.mjs.map} +1 -1
  4. package/dist/AnalyticsProvider-GJFG7YXA.js +32 -0
  5. package/dist/{AnalyticsProvider-6PXC7UDP.js.map → AnalyticsProvider-GJFG7YXA.js.map} +1 -1
  6. package/dist/{BlogViewTracker-S4HSRCW7.js → BlogViewTracker-2D3IJPJK.js} +6 -6
  7. package/dist/{BlogViewTracker-S4HSRCW7.js.map → BlogViewTracker-2D3IJPJK.js.map} +1 -1
  8. package/dist/{BlogViewTracker-ZUGLBOVI.mjs → BlogViewTracker-CKYG6MYU.mjs} +5 -5
  9. package/dist/{BlogViewTracker-ZUGLBOVI.mjs.map → BlogViewTracker-CKYG6MYU.mjs.map} +1 -1
  10. package/dist/ChatWidget-AWP6GBVW.js +22 -0
  11. package/dist/{ChatWidget-2TQWCXWP.js.map → ChatWidget-AWP6GBVW.js.map} +1 -1
  12. package/dist/ChatWidget-Z5QXDZP3.mjs +13 -0
  13. package/dist/{ChatWidget-DG52ZIE6.mjs.map → ChatWidget-Z5QXDZP3.mjs.map} +1 -1
  14. package/dist/EngageWidget-BKEY5TPO.mjs +12 -0
  15. package/dist/{EngageWidget-2VUJADIU.mjs.map → EngageWidget-BKEY5TPO.mjs.map} +1 -1
  16. package/dist/EngageWidget-VT4DYXVO.js +21 -0
  17. package/dist/{EngageWidget-Z7RC2INM.js.map → EngageWidget-VT4DYXVO.js.map} +1 -1
  18. package/dist/{FileField-UOQHL25J.js → FileField-62ZWZMQK.js} +6 -6
  19. package/dist/{FileField-UOQHL25J.js.map → FileField-62ZWZMQK.js.map} +1 -1
  20. package/dist/{FileField-FSQ7W3A5.mjs → FileField-JJN5QKDL.mjs} +5 -5
  21. package/dist/{FileField-FSQ7W3A5.mjs.map → FileField-JJN5QKDL.mjs.map} +1 -1
  22. package/dist/{FormSpotlight-RHL5FWM2.mjs → FormSpotlight-OTFB6QM5.mjs} +3 -3
  23. package/dist/{FormSpotlight-RHL5FWM2.mjs.map → FormSpotlight-OTFB6QM5.mjs.map} +1 -1
  24. package/dist/{FormSpotlight-TED32NHP.js → FormSpotlight-URS4XRS7.js} +15 -15
  25. package/dist/{FormSpotlight-TED32NHP.js.map → FormSpotlight-URS4XRS7.js.map} +1 -1
  26. package/dist/{FormStage-PFEBKHGY.js → FormStage-FVKMIV73.js} +13 -13
  27. package/dist/{FormStage-PFEBKHGY.js.map → FormStage-FVKMIV73.js.map} +1 -1
  28. package/dist/{FormStage-DINIRFOX.mjs → FormStage-VPGOCMAV.mjs} +3 -3
  29. package/dist/{FormStage-DINIRFOX.mjs.map → FormStage-VPGOCMAV.mjs.map} +1 -1
  30. package/dist/ManagedForm-CXVDJMHN.mjs +14 -0
  31. package/dist/{ManagedForm-545YAUFC.mjs.map → ManagedForm-CXVDJMHN.mjs.map} +1 -1
  32. package/dist/ManagedForm-FGNTDGED.js +23 -0
  33. package/dist/{ManagedForm-43WLCUAK.js.map → ManagedForm-FGNTDGED.js.map} +1 -1
  34. package/dist/{ManagedNewsletterForm-I3QN57HB.js → ManagedNewsletterForm-3O5L44AZ.js} +8 -8
  35. package/dist/{ManagedNewsletterForm-I3QN57HB.js.map → ManagedNewsletterForm-3O5L44AZ.js.map} +1 -1
  36. package/dist/{ManagedNewsletterForm-ZPY5RRKX.mjs → ManagedNewsletterForm-SQYB4BZU.mjs} +7 -7
  37. package/dist/{ManagedNewsletterForm-ZPY5RRKX.mjs.map → ManagedNewsletterForm-SQYB4BZU.mjs.map} +1 -1
  38. package/dist/{SignalCore-EEH5IM4U.mjs → SignalCore-M2PKKIGH.mjs} +5 -5
  39. package/dist/{SignalCore-EEH5IM4U.mjs.map → SignalCore-M2PKKIGH.mjs.map} +1 -1
  40. package/dist/{SignalCore-M4AXIMV4.js → SignalCore-RFBOBNLQ.js} +11 -11
  41. package/dist/{SignalCore-M4AXIMV4.js.map → SignalCore-RFBOBNLQ.js.map} +1 -1
  42. package/dist/SitemapSync-4OVMIIGC.mjs +9 -0
  43. package/dist/{SitemapSync-46G7LVZS.mjs.map → SitemapSync-4OVMIIGC.mjs.map} +1 -1
  44. package/dist/SitemapSync-RK3SQ4M2.js +18 -0
  45. package/dist/{SitemapSync-XK4JKCS7.js.map → SitemapSync-RK3SQ4M2.js.map} +1 -1
  46. package/dist/analytics/index.js +9 -9
  47. package/dist/analytics/index.mjs +4 -4
  48. package/dist/blog/index.js +20 -20
  49. package/dist/blog/index.mjs +3 -3
  50. package/dist/blog/metadata-images.test.d.ts +2 -0
  51. package/dist/blog/metadata-images.test.d.ts.map +1 -0
  52. package/dist/blog/server-core.d.ts +31 -6
  53. package/dist/blog/server-core.d.ts.map +1 -1
  54. package/dist/blog/server-ui.js +16 -16
  55. package/dist/blog/server-ui.mjs +3 -3
  56. package/dist/blog/server.d.ts +31 -6
  57. package/dist/blog/server.d.ts.map +1 -1
  58. package/dist/blog/server.js +40 -40
  59. package/dist/blog/server.mjs +1 -1
  60. package/dist/blog/static-params.test.d.ts +2 -0
  61. package/dist/blog/static-params.test.d.ts.map +1 -0
  62. package/dist/{chunk-XR32C47O.js → chunk-2N27LCZH.js} +5 -5
  63. package/dist/{chunk-XR32C47O.js.map → chunk-2N27LCZH.js.map} +1 -1
  64. package/dist/{chunk-GPLCPMVD.mjs → chunk-3CLP35TT.mjs} +7 -7
  65. package/dist/{chunk-GPLCPMVD.mjs.map → chunk-3CLP35TT.mjs.map} +1 -1
  66. package/dist/{chunk-S4RC6VAQ.js → chunk-3S5JN6KL.js} +6 -6
  67. package/dist/{chunk-S4RC6VAQ.js.map → chunk-3S5JN6KL.js.map} +1 -1
  68. package/dist/chunk-3UC6JETG.js +32 -0
  69. package/dist/chunk-3UC6JETG.js.map +1 -0
  70. package/dist/{chunk-B64AZC6P.js → chunk-3YQILJKJ.js} +14 -14
  71. package/dist/{chunk-B64AZC6P.js.map → chunk-3YQILJKJ.js.map} +1 -1
  72. package/dist/{chunk-7C7XO5HX.mjs → chunk-47XQWV4S.mjs} +3 -3
  73. package/dist/{chunk-7C7XO5HX.mjs.map → chunk-47XQWV4S.mjs.map} +1 -1
  74. package/dist/{chunk-CQS5ZYI6.mjs → chunk-4A5V73SR.mjs} +8 -8
  75. package/dist/{chunk-CQS5ZYI6.mjs.map → chunk-4A5V73SR.mjs.map} +1 -1
  76. package/dist/{chunk-53KMRZT7.js → chunk-4UVM7E2W.js} +3 -3
  77. package/dist/{chunk-53KMRZT7.js.map → chunk-4UVM7E2W.js.map} +1 -1
  78. package/dist/{chunk-YYN4YZYZ.js → chunk-4WBTM6YE.js} +4 -4
  79. package/dist/{chunk-YYN4YZYZ.js.map → chunk-4WBTM6YE.js.map} +1 -1
  80. package/dist/{chunk-VHZ4LHQT.mjs → chunk-57AFHENV.mjs} +3 -3
  81. package/dist/{chunk-VHZ4LHQT.mjs.map → chunk-57AFHENV.mjs.map} +1 -1
  82. package/dist/chunk-5TXXTYXL.js +8 -0
  83. package/dist/{chunk-KSL3WA2I.js.map → chunk-5TXXTYXL.js.map} +1 -1
  84. package/dist/{chunk-RU54J2PY.mjs → chunk-6FC5Q4KU.mjs} +3 -3
  85. package/dist/{chunk-RU54J2PY.mjs.map → chunk-6FC5Q4KU.mjs.map} +1 -1
  86. package/dist/{chunk-AHZR4VGY.mjs → chunk-7ZX6TO6C.mjs} +4 -4
  87. package/dist/{chunk-AHZR4VGY.mjs.map → chunk-7ZX6TO6C.mjs.map} +1 -1
  88. package/dist/{chunk-K2V3ZW36.mjs → chunk-ABZGEHTC.mjs} +3 -3
  89. package/dist/{chunk-K2V3ZW36.mjs.map → chunk-ABZGEHTC.mjs.map} +1 -1
  90. package/dist/chunk-AWK57R5S.mjs +29 -0
  91. package/dist/chunk-AWK57R5S.mjs.map +1 -0
  92. package/dist/{chunk-EEQYKMGH.mjs → chunk-BFJOZ3MU.mjs} +23 -17
  93. package/dist/chunk-BFJOZ3MU.mjs.map +1 -0
  94. package/dist/{chunk-KY6M76JW.js → chunk-BFM5PEFV.js} +3 -3
  95. package/dist/{chunk-KY6M76JW.js.map → chunk-BFM5PEFV.js.map} +1 -1
  96. package/dist/{chunk-JNABXCLY.mjs → chunk-BQGEVMIR.mjs} +4 -4
  97. package/dist/{chunk-JNABXCLY.mjs.map → chunk-BQGEVMIR.mjs.map} +1 -1
  98. package/dist/{chunk-5KIEZHVK.mjs → chunk-BUJWXSYZ.mjs} +4 -4
  99. package/dist/{chunk-5KIEZHVK.mjs.map → chunk-BUJWXSYZ.mjs.map} +1 -1
  100. package/dist/{chunk-B6O7D5U4.js → chunk-C4PZ2R3B.js} +10 -10
  101. package/dist/{chunk-B6O7D5U4.js.map → chunk-C4PZ2R3B.js.map} +1 -1
  102. package/dist/{chunk-5UFDHGFE.mjs → chunk-C563AHZZ.mjs} +3 -3
  103. package/dist/{chunk-5UFDHGFE.mjs.map → chunk-C563AHZZ.mjs.map} +1 -1
  104. package/dist/{chunk-746RKQHA.js → chunk-CPY74A4F.js} +23 -17
  105. package/dist/chunk-CPY74A4F.js.map +1 -0
  106. package/dist/{chunk-N2PGTPWN.js → chunk-D553G64G.js} +11 -11
  107. package/dist/{chunk-N2PGTPWN.js.map → chunk-D553G64G.js.map} +1 -1
  108. package/dist/{chunk-KPKQKFT4.js → chunk-DOB37PV4.js} +3 -3
  109. package/dist/{chunk-KPKQKFT4.js.map → chunk-DOB37PV4.js.map} +1 -1
  110. package/dist/{chunk-H3D3ZGOJ.js → chunk-ELQ4SRRR.js} +15 -15
  111. package/dist/{chunk-H3D3ZGOJ.js.map → chunk-ELQ4SRRR.js.map} +1 -1
  112. package/dist/{chunk-X5TCH7VZ.js → chunk-F3AKYZOH.js} +3 -3
  113. package/dist/{chunk-X5TCH7VZ.js.map → chunk-F3AKYZOH.js.map} +1 -1
  114. package/dist/{chunk-LCSYJXIO.mjs → chunk-FBDHKYNF.mjs} +3 -3
  115. package/dist/{chunk-LCSYJXIO.mjs.map → chunk-FBDHKYNF.mjs.map} +1 -1
  116. package/dist/{chunk-JE5DWAE6.js → chunk-FEWWGEQF.js} +4 -4
  117. package/dist/{chunk-JE5DWAE6.js.map → chunk-FEWWGEQF.js.map} +1 -1
  118. package/dist/{chunk-NZSFOZJV.js → chunk-FO4KGPGF.js} +2 -2
  119. package/dist/{chunk-NZSFOZJV.js.map → chunk-FO4KGPGF.js.map} +1 -1
  120. package/dist/{chunk-OC7AO7XS.js → chunk-H65OX263.js} +15 -15
  121. package/dist/{chunk-OC7AO7XS.js.map → chunk-H65OX263.js.map} +1 -1
  122. package/dist/{chunk-46BMNWE6.js → chunk-H6YVT3BL.js} +2 -2
  123. package/dist/{chunk-46BMNWE6.js.map → chunk-H6YVT3BL.js.map} +1 -1
  124. package/dist/{chunk-GJ6NOLGC.mjs → chunk-HBN4A2N4.mjs} +3 -3
  125. package/dist/{chunk-GJ6NOLGC.mjs.map → chunk-HBN4A2N4.mjs.map} +1 -1
  126. package/dist/{chunk-AJQI3WTN.mjs → chunk-ILNCUSXW.mjs} +2 -2
  127. package/dist/{chunk-AJQI3WTN.mjs.map → chunk-ILNCUSXW.mjs.map} +1 -1
  128. package/dist/{chunk-473WDGQZ.mjs → chunk-JNAXDFC4.mjs} +3 -3
  129. package/dist/{chunk-473WDGQZ.mjs.map → chunk-JNAXDFC4.mjs.map} +1 -1
  130. package/dist/{chunk-7AUDKXY5.mjs → chunk-JQ7M6CVL.mjs} +3 -3
  131. package/dist/{chunk-7AUDKXY5.mjs.map → chunk-JQ7M6CVL.mjs.map} +1 -1
  132. package/dist/{chunk-BZLIOT7Q.js → chunk-JTCQJKJE.js} +18 -18
  133. package/dist/{chunk-BZLIOT7Q.js.map → chunk-JTCQJKJE.js.map} +1 -1
  134. package/dist/{chunk-OA7KKOAK.mjs → chunk-JTF4DFUF.mjs} +3 -3
  135. package/dist/{chunk-OA7KKOAK.mjs.map → chunk-JTF4DFUF.mjs.map} +1 -1
  136. package/dist/{chunk-5KIO6FXE.js → chunk-KXGD4E7G.js} +5 -5
  137. package/dist/{chunk-5KIO6FXE.js.map → chunk-KXGD4E7G.js.map} +1 -1
  138. package/dist/chunk-L4V6TKMJ.mjs +94 -0
  139. package/dist/chunk-L4V6TKMJ.mjs.map +1 -0
  140. package/dist/{chunk-DHIWR7CG.js → chunk-L7ACQ6PC.js} +4 -4
  141. package/dist/{chunk-DHIWR7CG.js.map → chunk-L7ACQ6PC.js.map} +1 -1
  142. package/dist/{chunk-RIYAMYLV.mjs → chunk-M5GY2AI3.mjs} +3 -3
  143. package/dist/{chunk-RIYAMYLV.mjs.map → chunk-M5GY2AI3.mjs.map} +1 -1
  144. package/dist/{chunk-YCI36ZUS.mjs → chunk-MW2M6O7A.mjs} +4 -4
  145. package/dist/{chunk-YCI36ZUS.mjs.map → chunk-MW2M6O7A.mjs.map} +1 -1
  146. package/dist/{chunk-BWSMUSDB.js → chunk-NOU3JQJK.js} +8 -8
  147. package/dist/{chunk-BWSMUSDB.js.map → chunk-NOU3JQJK.js.map} +1 -1
  148. package/dist/{chunk-IYCLN3XS.mjs → chunk-O2VJZOR2.mjs} +3 -3
  149. package/dist/{chunk-IYCLN3XS.mjs.map → chunk-O2VJZOR2.mjs.map} +1 -1
  150. package/dist/{chunk-T5VTQUNF.js → chunk-OYOO2OO5.js} +8 -8
  151. package/dist/{chunk-T5VTQUNF.js.map → chunk-OYOO2OO5.js.map} +1 -1
  152. package/dist/chunk-P4TB4ROG.js +110 -0
  153. package/dist/chunk-P4TB4ROG.js.map +1 -0
  154. package/dist/{chunk-6OP5XSMM.mjs → chunk-Q7347KP6.mjs} +3 -3
  155. package/dist/{chunk-6OP5XSMM.mjs.map → chunk-Q7347KP6.mjs.map} +1 -1
  156. package/dist/chunk-QRBPT6Z6.mjs +6 -0
  157. package/dist/{chunk-DQUBETXH.mjs.map → chunk-QRBPT6Z6.mjs.map} +1 -1
  158. package/dist/{chunk-USKIL6V6.mjs → chunk-R2SXXFXZ.mjs} +3 -3
  159. package/dist/{chunk-USKIL6V6.mjs.map → chunk-R2SXXFXZ.mjs.map} +1 -1
  160. package/dist/{chunk-UU47DGHE.js → chunk-RCSTDJUH.js} +5 -5
  161. package/dist/{chunk-UU47DGHE.js.map → chunk-RCSTDJUH.js.map} +1 -1
  162. package/dist/{chunk-SYGGZZMU.js → chunk-RNAGCAIB.js} +7 -7
  163. package/dist/{chunk-SYGGZZMU.js.map → chunk-RNAGCAIB.js.map} +1 -1
  164. package/dist/{chunk-AEARU24Q.mjs → chunk-RVRN5U7W.mjs} +2 -2
  165. package/dist/{chunk-AEARU24Q.mjs.map → chunk-RVRN5U7W.mjs.map} +1 -1
  166. package/dist/{chunk-C2MSD2UM.mjs → chunk-TDJKGN5Q.mjs} +4 -4
  167. package/dist/{chunk-C2MSD2UM.mjs.map → chunk-TDJKGN5Q.mjs.map} +1 -1
  168. package/dist/{chunk-R3KTBKSW.js → chunk-TSZIACRC.js} +4 -4
  169. package/dist/{chunk-R3KTBKSW.js.map → chunk-TSZIACRC.js.map} +1 -1
  170. package/dist/{chunk-H44XZUOV.mjs → chunk-UQ5YULFU.mjs} +4 -4
  171. package/dist/{chunk-H44XZUOV.mjs.map → chunk-UQ5YULFU.mjs.map} +1 -1
  172. package/dist/{chunk-QNPVVWR7.mjs → chunk-V5THCFPG.mjs} +3 -3
  173. package/dist/{chunk-QNPVVWR7.mjs.map → chunk-V5THCFPG.mjs.map} +1 -1
  174. package/dist/{chunk-CQRLKNHQ.js → chunk-VFGEY6FJ.js} +12 -12
  175. package/dist/{chunk-CQRLKNHQ.js.map → chunk-VFGEY6FJ.js.map} +1 -1
  176. package/dist/{chunk-HIHAXEPD.mjs → chunk-XLPU3TEE.mjs} +4 -4
  177. package/dist/{chunk-HIHAXEPD.mjs.map → chunk-XLPU3TEE.mjs.map} +1 -1
  178. package/dist/{chunk-AY7JBGYC.js → chunk-YKUEFRZI.js} +14 -14
  179. package/dist/{chunk-AY7JBGYC.js.map → chunk-YKUEFRZI.js.map} +1 -1
  180. package/dist/{chunk-XK5AIWQG.js → chunk-YYDZ2TYR.js} +3 -3
  181. package/dist/{chunk-XK5AIWQG.js.map → chunk-YYDZ2TYR.js.map} +1 -1
  182. package/dist/cli/agent/checks.d.ts.map +1 -1
  183. package/dist/cli/commands/api-routes.d.ts.map +1 -1
  184. package/dist/cli/commands/geo.d.ts +4 -0
  185. package/dist/cli/commands/geo.d.ts.map +1 -1
  186. package/dist/cli/commands/geo.test.d.ts +2 -0
  187. package/dist/cli/commands/geo.test.d.ts.map +1 -0
  188. package/dist/cli/commands/og.d.ts +10 -1
  189. package/dist/cli/commands/og.d.ts.map +1 -1
  190. package/dist/cli/commands/scaffold.d.ts +1 -2
  191. package/dist/cli/commands/scaffold.d.ts.map +1 -1
  192. package/dist/cli/commands/sync.d.ts.map +1 -1
  193. package/dist/cli/generators/index.d.ts +5 -0
  194. package/dist/cli/generators/index.d.ts.map +1 -1
  195. package/dist/cli/generators/index.test.d.ts +2 -0
  196. package/dist/cli/generators/index.test.d.ts.map +1 -0
  197. package/dist/cli/index.js +360 -266
  198. package/dist/cli/index.js.map +1 -1
  199. package/dist/cli/index.mjs +356 -262
  200. package/dist/cli/index.mjs.map +1 -1
  201. package/dist/client/index.js +4 -4
  202. package/dist/client/index.mjs +3 -3
  203. package/dist/commerce/index.js +56 -56
  204. package/dist/commerce/index.mjs +5 -5
  205. package/dist/discover-FGTKWOL3.mjs +4 -0
  206. package/dist/{discover-BEJRYNFF.mjs.map → discover-FGTKWOL3.mjs.map} +1 -1
  207. package/dist/discover-NJZPWTDL.js +21 -0
  208. package/dist/{discover-WVDYDUJX.js.map → discover-NJZPWTDL.js.map} +1 -1
  209. package/dist/engage/index.js +10 -10
  210. package/dist/engage/index.mjs +7 -7
  211. package/dist/fleet/index.js +8 -8
  212. package/dist/fleet/index.mjs +4 -4
  213. package/dist/forms/index.js +16 -16
  214. package/dist/forms/index.mjs +9 -9
  215. package/dist/forms/server.js +10 -10
  216. package/dist/forms/server.mjs +8 -8
  217. package/dist/forms/static.js +7 -7
  218. package/dist/forms/static.mjs +6 -6
  219. package/dist/images/index.js +11 -11
  220. package/dist/images/index.mjs +4 -4
  221. package/dist/index.js +68 -68
  222. package/dist/index.mjs +10 -10
  223. package/dist/layout/client.js +8 -8
  224. package/dist/layout/client.mjs +7 -7
  225. package/dist/layout/index.js +10 -10
  226. package/dist/layout/index.mjs +8 -8
  227. package/dist/llms/aiRobots.d.ts +4 -1
  228. package/dist/llms/aiRobots.d.ts.map +1 -1
  229. package/dist/llms/handlers.d.ts +20 -2
  230. package/dist/llms/handlers.d.ts.map +1 -1
  231. package/dist/llms/index.js +25 -18
  232. package/dist/llms/index.js.map +1 -1
  233. package/dist/llms/index.mjs +15 -8
  234. package/dist/llms/index.mjs.map +1 -1
  235. package/dist/llms/wiring.d.ts +81 -0
  236. package/dist/llms/wiring.d.ts.map +1 -0
  237. package/dist/llms/wiring.test.d.ts +2 -0
  238. package/dist/llms/wiring.test.d.ts.map +1 -0
  239. package/dist/maps/index.js +5 -5
  240. package/dist/maps/index.mjs +3 -3
  241. package/dist/og/wiring.d.ts +5 -1
  242. package/dist/og/wiring.d.ts.map +1 -1
  243. package/dist/proxy/index.d.ts +16 -11
  244. package/dist/proxy/index.d.ts.map +1 -1
  245. package/dist/proxy/index.js +3 -3
  246. package/dist/proxy/index.js.map +1 -1
  247. package/dist/proxy/index.mjs +1 -1
  248. package/dist/proxy/index.mjs.map +1 -1
  249. package/dist/redirects/index.d.ts +1 -1
  250. package/dist/redirects/index.js +8 -8
  251. package/dist/redirects/index.mjs +1 -1
  252. package/dist/redirects/not-found.d.ts +14 -29
  253. package/dist/redirects/not-found.d.ts.map +1 -1
  254. package/dist/redirects/not-found.js +12 -5
  255. package/dist/redirects/not-found.js.map +1 -1
  256. package/dist/redirects/not-found.mjs +8 -1
  257. package/dist/redirects/not-found.mjs.map +1 -1
  258. package/dist/robots/index.d.ts +5 -1
  259. package/dist/robots/index.d.ts.map +1 -1
  260. package/dist/robots/index.js +7 -1
  261. package/dist/robots/index.js.map +1 -1
  262. package/dist/robots/index.mjs +4 -1
  263. package/dist/robots/index.mjs.map +1 -1
  264. package/dist/robots/index.test.d.ts +2 -0
  265. package/dist/robots/index.test.d.ts.map +1 -0
  266. package/dist/robots/next-internals.d.ts +22 -0
  267. package/dist/robots/next-internals.d.ts.map +1 -0
  268. package/dist/search/index.js +4 -4
  269. package/dist/search/index.mjs +3 -3
  270. package/dist/seo/client.js +5 -5
  271. package/dist/seo/client.mjs +4 -4
  272. package/dist/seo/index.js +14 -14
  273. package/dist/seo/index.mjs +6 -6
  274. package/dist/seo/register-sitemap-cli.js +4 -4
  275. package/dist/seo/register-sitemap-cli.mjs +1 -1
  276. package/dist/seo/server.js +5 -5
  277. package/dist/seo/server.mjs +1 -1
  278. package/dist/server/index.js +3 -3
  279. package/dist/server/index.mjs +2 -2
  280. package/dist/shared/next-files.d.ts +35 -0
  281. package/dist/shared/next-files.d.ts.map +1 -0
  282. package/dist/shared/next-files.test.d.ts +2 -0
  283. package/dist/shared/next-files.test.d.ts.map +1 -0
  284. package/dist/shared/version.d.ts +1 -1
  285. package/dist/signal/index.js +11 -11
  286. package/dist/signal/index.mjs +2 -2
  287. package/dist/sitemap/discover.d.ts.map +1 -1
  288. package/dist/sitemap/index.d.ts +6 -1
  289. package/dist/sitemap/index.d.ts.map +1 -1
  290. package/dist/sitemap/index.js +5 -12
  291. package/dist/sitemap/index.js.map +1 -1
  292. package/dist/sitemap/index.mjs +4 -11
  293. package/dist/sitemap/index.mjs.map +1 -1
  294. package/dist/sync/index.js +17 -17
  295. package/dist/sync/index.mjs +4 -4
  296. package/package.json +19 -21
  297. package/dist/AnalyticsProvider-6PXC7UDP.js +0 -32
  298. package/dist/AnalyticsProvider-FVQIYSLY.mjs +0 -11
  299. package/dist/ChatWidget-2TQWCXWP.js +0 -22
  300. package/dist/ChatWidget-DG52ZIE6.mjs +0 -13
  301. package/dist/EngageWidget-2VUJADIU.mjs +0 -12
  302. package/dist/EngageWidget-Z7RC2INM.js +0 -21
  303. package/dist/ManagedForm-43WLCUAK.js +0 -23
  304. package/dist/ManagedForm-545YAUFC.mjs +0 -14
  305. package/dist/SitemapSync-46G7LVZS.mjs +0 -9
  306. package/dist/SitemapSync-XK4JKCS7.js +0 -18
  307. package/dist/chunk-746RKQHA.js.map +0 -1
  308. package/dist/chunk-DQUBETXH.mjs +0 -6
  309. package/dist/chunk-EEQYKMGH.mjs.map +0 -1
  310. package/dist/chunk-KSL3WA2I.js +0 -8
  311. package/dist/chunk-LOS5D6B3.js +0 -72
  312. package/dist/chunk-LOS5D6B3.js.map +0 -1
  313. package/dist/chunk-XIJ4F6IE.mjs +0 -63
  314. package/dist/chunk-XIJ4F6IE.mjs.map +0 -1
  315. package/dist/discover-BEJRYNFF.mjs +0 -4
  316. package/dist/discover-WVDYDUJX.js +0 -21
package/dist/cli/index.js CHANGED
@@ -5,8 +5,8 @@ var chunkJS75ORH7_js = require('../chunk-JS75ORH7.js');
5
5
  var chunkI7AZC5ZQ_js = require('../chunk-I7AZC5ZQ.js');
6
6
  var chunk6CJP7BFM_js = require('../chunk-6CJP7BFM.js');
7
7
  var chunkNN2YE5WT_js = require('../chunk-NN2YE5WT.js');
8
- var chunkLOS5D6B3_js = require('../chunk-LOS5D6B3.js');
9
- var chunkKSL3WA2I_js = require('../chunk-KSL3WA2I.js');
8
+ var chunkP4TB4ROG_js = require('../chunk-P4TB4ROG.js');
9
+ var chunk5TXXTYXL_js = require('../chunk-5TXXTYXL.js');
10
10
  var chunkSNAQBZPT_js = require('../chunk-SNAQBZPT.js');
11
11
  var events = require('events');
12
12
  var childProcess = require('child_process');
@@ -6234,10 +6234,10 @@ var require_lib2 = chunkSNAQBZPT_js.__commonJS({
6234
6234
  exports.analyse = analyse;
6235
6235
  var detectFile = (filepath, opts = {}) => new Promise((resolve, reject) => {
6236
6236
  let fd;
6237
- const fs29 = (0, node_1.default)();
6237
+ const fs30 = (0, node_1.default)();
6238
6238
  const handler = (err, buffer) => {
6239
6239
  if (fd) {
6240
- fs29.closeSync(fd);
6240
+ fs30.closeSync(fd);
6241
6241
  }
6242
6242
  if (err) {
6243
6243
  reject(err);
@@ -6249,9 +6249,9 @@ var require_lib2 = chunkSNAQBZPT_js.__commonJS({
6249
6249
  };
6250
6250
  const sampleSize = (opts === null || opts === void 0 ? void 0 : opts.sampleSize) || 0;
6251
6251
  if (sampleSize > 0) {
6252
- fd = fs29.openSync(filepath, "r");
6252
+ fd = fs30.openSync(filepath, "r");
6253
6253
  let sample = Buffer.allocUnsafe(sampleSize);
6254
- fs29.read(fd, sample, 0, sampleSize, opts.offset, (err, bytesRead) => {
6254
+ fs30.read(fd, sample, 0, sampleSize, opts.offset, (err, bytesRead) => {
6255
6255
  if (err) {
6256
6256
  handler(err, null);
6257
6257
  } else {
@@ -6263,22 +6263,22 @@ var require_lib2 = chunkSNAQBZPT_js.__commonJS({
6263
6263
  });
6264
6264
  return;
6265
6265
  }
6266
- fs29.readFile(filepath, handler);
6266
+ fs30.readFile(filepath, handler);
6267
6267
  });
6268
6268
  exports.detectFile = detectFile;
6269
6269
  var detectFileSync = (filepath, opts = {}) => {
6270
- const fs29 = (0, node_1.default)();
6270
+ const fs30 = (0, node_1.default)();
6271
6271
  if (opts && opts.sampleSize) {
6272
- const fd = fs29.openSync(filepath, "r");
6272
+ const fd = fs30.openSync(filepath, "r");
6273
6273
  let sample = Buffer.allocUnsafe(opts.sampleSize);
6274
- const bytesRead = fs29.readSync(fd, sample, 0, opts.sampleSize, opts.offset);
6274
+ const bytesRead = fs30.readSync(fd, sample, 0, opts.sampleSize, opts.offset);
6275
6275
  if (bytesRead < opts.sampleSize) {
6276
6276
  sample = sample.subarray(0, bytesRead);
6277
6277
  }
6278
- fs29.closeSync(fd);
6278
+ fs30.closeSync(fd);
6279
6279
  return (0, exports.detect)(sample);
6280
6280
  }
6281
- return (0, exports.detect)(fs29.readFileSync(filepath));
6281
+ return (0, exports.detect)(fs30.readFileSync(filepath));
6282
6282
  };
6283
6283
  exports.detectFileSync = detectFileSync;
6284
6284
  exports.default = {
@@ -13268,9 +13268,9 @@ Expecting one of '${allowedValues.join("', '")}'`);
13268
13268
  * @param {string} [path]
13269
13269
  * @return {(string|null|Command)}
13270
13270
  */
13271
- executableDir(path29) {
13272
- if (path29 === void 0) return this._executableDir;
13273
- this._executableDir = path29;
13271
+ executableDir(path30) {
13272
+ if (path30 === void 0) return this._executableDir;
13273
+ this._executableDir = path30;
13274
13274
  return this;
13275
13275
  }
13276
13276
  /**
@@ -13543,7 +13543,7 @@ function buildEnvelope(input, nowMs = Date.now()) {
13543
13543
  ok: exitCode === 0 /* OK */,
13544
13544
  command,
13545
13545
  schemaVersion: 1,
13546
- siteKitVersion: chunkKSL3WA2I_js.SITE_KIT_VERSION,
13546
+ siteKitVersion: chunk5TXXTYXL_js.SITE_KIT_VERSION,
13547
13547
  exitCode,
13548
13548
  status: statusForCode(exitCode),
13549
13549
  summary,
@@ -20377,9 +20377,9 @@ function observableToAsyncIterable(source) {
20377
20377
 
20378
20378
  // node_modules/.pnpm/inquirer@14.0.2_@types+node@26.2.0/node_modules/inquirer/dist/ui/prompt.js
20379
20379
  var _ = {
20380
- set: (obj, path29 = "", value) => {
20380
+ set: (obj, path30 = "", value) => {
20381
20381
  let pointer = obj;
20382
- path29.split(".").forEach((key, index, arr) => {
20382
+ path30.split(".").forEach((key, index, arr) => {
20383
20383
  if (key === "__proto__" || key === "constructor")
20384
20384
  return;
20385
20385
  if (index === arr.length - 1) {
@@ -20390,8 +20390,8 @@ var _ = {
20390
20390
  pointer = pointer[key];
20391
20391
  });
20392
20392
  },
20393
- get: (obj, path29 = "", defaultValue) => {
20394
- const travel = (regexp) => String.prototype.split.call(path29, regexp).filter(Boolean).reduce(
20393
+ get: (obj, path30 = "", defaultValue) => {
20394
+ const travel = (regexp) => String.prototype.split.call(path30, regexp).filter(Boolean).reduce(
20395
20395
  // @ts-expect-error implicit any on res[key]
20396
20396
  (res, key) => res == null ? res : res[key],
20397
20397
  obj
@@ -20748,18 +20748,18 @@ function scanForForms(ast, content, filePath) {
20748
20748
  const forms = [];
20749
20749
  content.split("\n");
20750
20750
  chunkJS75ORH7_js.traverse(ast, {
20751
- JSXElement(path29) {
20752
- const opening = path29.node.openingElement;
20751
+ JSXElement(path30) {
20752
+ const opening = path30.node.openingElement;
20753
20753
  if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && opening.name.name === "form") {
20754
- const fields = extractFieldsFromForm(path29);
20754
+ const fields = extractFieldsFromForm(path30);
20755
20755
  const hasOnSubmit = opening.attributes.some(
20756
20756
  (attr) => chunkJS75ORH7_js.isJSXAttribute(attr) && chunkJS75ORH7_js.isJSXIdentifier(attr.name) && attr.name.name === "onSubmit"
20757
20757
  );
20758
20758
  if (hasOnSubmit && fields.length > 0) {
20759
- const startLine = path29.node.loc?.start.line || 0;
20760
- const endLine = path29.node.loc?.end.line || 0;
20759
+ const startLine = path30.node.loc?.start.line || 0;
20760
+ const endLine = path30.node.loc?.end.line || 0;
20761
20761
  let componentName = "UnknownForm";
20762
- let current = path29.parentPath;
20762
+ let current = path30.parentPath;
20763
20763
  while (current) {
20764
20764
  if (chunkJS75ORH7_js.isFunctionDeclaration(current.node) && current.node.id) {
20765
20765
  componentName = current.node.id.name;
@@ -20792,7 +20792,7 @@ function scanForForms(ast, content, filePath) {
20792
20792
  }
20793
20793
  if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && opening.name.name === "Form") {
20794
20794
  if (content.includes("Formik") || content.includes("formik")) {
20795
- const fields = extractFieldsFromFormik(path29);
20795
+ const fields = extractFieldsFromFormik(path30);
20796
20796
  if (fields.length > 0) {
20797
20797
  forms.push({
20798
20798
  filePath,
@@ -20803,8 +20803,8 @@ function scanForForms(ast, content, filePath) {
20803
20803
  submitsTo: null,
20804
20804
  complexity: "moderate",
20805
20805
  suggestedAction: "assisted",
20806
- startLine: path29.node.loc?.start.line || 0,
20807
- endLine: path29.node.loc?.end.line || 0
20806
+ startLine: path30.node.loc?.start.line || 0,
20807
+ endLine: path30.node.loc?.end.line || 0
20808
20808
  });
20809
20809
  }
20810
20810
  }
@@ -20822,8 +20822,8 @@ function extractFieldsFromForm(formPath) {
20822
20822
  const radioGroups = /* @__PURE__ */ new Map();
20823
20823
  const checkboxGroups = /* @__PURE__ */ new Map();
20824
20824
  formPath.traverse({
20825
- JSXElement(path29) {
20826
- const opening = path29.node.openingElement;
20825
+ JSXElement(path30) {
20826
+ const opening = path30.node.openingElement;
20827
20827
  const tagName = chunkJS75ORH7_js.isJSXIdentifier(opening.name) ? opening.name.name : null;
20828
20828
  if (["input", "textarea", "select"].includes(tagName || "")) {
20829
20829
  const attrs = opening.attributes;
@@ -20870,7 +20870,7 @@ function extractFieldsFromForm(formPath) {
20870
20870
  }
20871
20871
  if (tagName === "select") {
20872
20872
  const selectOptions = [];
20873
- path29.traverse({
20873
+ path30.traverse({
20874
20874
  JSXElement(optionPath) {
20875
20875
  const optOpening = optionPath.node.openingElement;
20876
20876
  const optTagName = chunkJS75ORH7_js.isJSXIdentifier(optOpening.name) ? optOpening.name.name : null;
@@ -20945,8 +20945,8 @@ function extractFieldsFromForm(formPath) {
20945
20945
  function extractFieldsFromFormik(formPath, content) {
20946
20946
  const fields = [];
20947
20947
  formPath.traverse({
20948
- JSXElement(path29) {
20949
- const opening = path29.node.openingElement;
20948
+ JSXElement(path30) {
20949
+ const opening = path30.node.openingElement;
20950
20950
  const tagName = chunkJS75ORH7_js.isJSXIdentifier(opening.name) ? opening.name.name : null;
20951
20951
  if (tagName === "Field" || tagName === "FastField") {
20952
20952
  const attrs = opening.attributes;
@@ -21065,11 +21065,11 @@ function scanForMetadata(ast, content, filePath) {
21065
21065
  }
21066
21066
  let hasHeadComponent = false;
21067
21067
  chunkJS75ORH7_js.traverse(ast, {
21068
- JSXElement(path29) {
21069
- const opening = path29.node.openingElement;
21068
+ JSXElement(path30) {
21069
+ const opening = path30.node.openingElement;
21070
21070
  if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && opening.name.name === "Head") {
21071
21071
  hasHeadComponent = true;
21072
- path29.stop();
21072
+ path30.stop();
21073
21073
  }
21074
21074
  }
21075
21075
  });
@@ -21104,8 +21104,8 @@ function scanForWidgets(ast, content, filePath) {
21104
21104
  for (const { pattern, type } of widgetPatterns) {
21105
21105
  if (pattern.test(content)) {
21106
21106
  chunkJS75ORH7_js.traverse(ast, {
21107
- JSXElement(path29) {
21108
- const opening = path29.node.openingElement;
21107
+ JSXElement(path30) {
21108
+ const opening = path30.node.openingElement;
21109
21109
  if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && (opening.name.name === "script" || opening.name.name === "Script")) {
21110
21110
  const srcAttr = opening.attributes.find(
21111
21111
  (attr) => chunkJS75ORH7_js.isJSXAttribute(attr) && chunkJS75ORH7_js.isJSXIdentifier(attr.name) && attr.name.name === "src"
@@ -21120,8 +21120,8 @@ function scanForWidgets(ast, content, filePath) {
21120
21120
  filePath,
21121
21121
  widgetType: type,
21122
21122
  scriptTag: src,
21123
- startLine: path29.node.loc?.start.line || 0,
21124
- endLine: path29.node.loc?.end.line || 0
21123
+ startLine: path30.node.loc?.start.line || 0,
21124
+ endLine: path30.node.loc?.end.line || 0
21125
21125
  });
21126
21126
  }
21127
21127
  }
@@ -21260,8 +21260,8 @@ function scanForSchemas(ast, content, filePath) {
21260
21260
  return schemas;
21261
21261
  }
21262
21262
  chunkJS75ORH7_js.traverse(ast, {
21263
- JSXElement(path29) {
21264
- const opening = path29.node.openingElement;
21263
+ JSXElement(path30) {
21264
+ const opening = path30.node.openingElement;
21265
21265
  if (chunkJS75ORH7_js.isJSXIdentifier(opening.name) && (opening.name.name === "script" || opening.name.name === "Script")) {
21266
21266
  const typeAttr = opening.attributes.find(
21267
21267
  (attr) => chunkJS75ORH7_js.isJSXAttribute(attr) && chunkJS75ORH7_js.isJSXIdentifier(attr.name) && attr.name.name === "type"
@@ -21288,8 +21288,8 @@ function scanForSchemas(ast, content, filePath) {
21288
21288
  filePath,
21289
21289
  type: detectedType,
21290
21290
  schemaType,
21291
- startLine: path29.node.loc?.start.line || 0,
21292
- endLine: path29.node.loc?.end.line || 0
21291
+ startLine: path30.node.loc?.start.line || 0,
21292
+ endLine: path30.node.loc?.end.line || 0
21293
21293
  });
21294
21294
  }
21295
21295
  }
@@ -21322,8 +21322,8 @@ function scanForFAQs(ast, content, filePath) {
21322
21322
  /questions?\s*(?:and|&)?\s*answers?/i
21323
21323
  ];
21324
21324
  chunkJS75ORH7_js.traverse(ast, {
21325
- JSXElement(path29) {
21326
- const opening = path29.node.openingElement;
21325
+ JSXElement(path30) {
21326
+ const opening = path30.node.openingElement;
21327
21327
  let tagName = "";
21328
21328
  if (chunkJS75ORH7_js.isJSXIdentifier(opening.name)) {
21329
21329
  tagName = opening.name.name;
@@ -21336,8 +21336,8 @@ function scanForFAQs(ast, content, filePath) {
21336
21336
  faqs.push({
21337
21337
  filePath,
21338
21338
  type: "details-summary",
21339
- startLine: path29.node.loc?.start.line || 0,
21340
- endLine: path29.node.loc?.end.line || 0,
21339
+ startLine: path30.node.loc?.start.line || 0,
21340
+ endLine: path30.node.loc?.end.line || 0,
21341
21341
  hasSchema: content.includes("FAQPage") || content.includes("application/ld+json")
21342
21342
  });
21343
21343
  return;
@@ -21345,7 +21345,7 @@ function scanForFAQs(ast, content, filePath) {
21345
21345
  for (const pattern of faqPatterns) {
21346
21346
  if (pattern.test(tagName)) {
21347
21347
  let itemCount = 0;
21348
- path29.traverse({
21348
+ path30.traverse({
21349
21349
  JSXElement(itemPath) {
21350
21350
  const itemOpening = itemPath.node.openingElement;
21351
21351
  if (chunkJS75ORH7_js.isJSXIdentifier(itemOpening.name)) {
@@ -21361,8 +21361,8 @@ function scanForFAQs(ast, content, filePath) {
21361
21361
  type: "accordion",
21362
21362
  componentName: tagName,
21363
21363
  itemCount: itemCount || void 0,
21364
- startLine: path29.node.loc?.start.line || 0,
21365
- endLine: path29.node.loc?.end.line || 0,
21364
+ startLine: path30.node.loc?.start.line || 0,
21365
+ endLine: path30.node.loc?.end.line || 0,
21366
21366
  hasSchema: content.includes("FAQPage") || content.includes("application/ld+json")
21367
21367
  });
21368
21368
  return;
@@ -21485,8 +21485,8 @@ function scanForImages(ast, content, filePath) {
21485
21485
  return images;
21486
21486
  }
21487
21487
  chunkJS75ORH7_js.traverse(ast, {
21488
- JSXElement(path29) {
21489
- const opening = path29.node.openingElement;
21488
+ JSXElement(path30) {
21489
+ const opening = path30.node.openingElement;
21490
21490
  if (!chunkJS75ORH7_js.isJSXIdentifier(opening.name)) return;
21491
21491
  const tagName = opening.name.name;
21492
21492
  if (tagName === "img" || tagName === "Image") {
@@ -21514,8 +21514,8 @@ function scanForImages(ast, content, filePath) {
21514
21514
  src: src || void 0,
21515
21515
  alt: alt || void 0,
21516
21516
  isLocal,
21517
- startLine: path29.node.loc?.start.line || 0,
21518
- endLine: path29.node.loc?.end.line || 0
21517
+ startLine: path30.node.loc?.start.line || 0,
21518
+ endLine: path30.node.loc?.end.line || 0
21519
21519
  });
21520
21520
  }
21521
21521
  }
@@ -22406,18 +22406,18 @@ async function migrateFile(filePath, options) {
22406
22406
  let componentName = "Form";
22407
22407
  const traverse2 = (await import('../lib-BGAWCSUH.js')).default;
22408
22408
  traverse2(ast, {
22409
- ExportNamedDeclaration(path29) {
22410
- const decl = path29.node.declaration;
22409
+ ExportNamedDeclaration(path30) {
22410
+ const decl = path30.node.declaration;
22411
22411
  if (decl && decl.type === "FunctionDeclaration" && decl.id) {
22412
22412
  componentName = decl.id.name;
22413
- path29.stop();
22413
+ path30.stop();
22414
22414
  }
22415
22415
  },
22416
- ExportDefaultDeclaration(path29) {
22417
- const decl = path29.node.declaration;
22416
+ ExportDefaultDeclaration(path30) {
22417
+ const decl = path30.node.declaration;
22418
22418
  if (decl && decl.type === "FunctionDeclaration" && decl.id) {
22419
22419
  componentName = decl.id.name;
22420
- path29.stop();
22420
+ path30.stop();
22421
22421
  }
22422
22422
  }
22423
22423
  });
@@ -22533,7 +22533,7 @@ function addImportSafely2(content, importStatement) {
22533
22533
  async function generateLayout() {
22534
22534
  const layoutPath = await findLayoutFile();
22535
22535
  if (!layoutPath) {
22536
- throw new Error("Could not find layout.tsx file");
22536
+ throw new Error("Could not find a root layout (app/layout.tsx, .jsx, .ts or .js)");
22537
22537
  }
22538
22538
  const content = await fs3__default.default.readFile(layoutPath, "utf-8");
22539
22539
  if (content.includes("SiteKitLayout") || content.includes("SiteKitProvider")) {
@@ -22567,22 +22567,7 @@ async function generateLayout() {
22567
22567
  await fs3__default.default.writeFile(layoutPath, newContent, "utf-8");
22568
22568
  }
22569
22569
  async function findLayoutFile() {
22570
- const possiblePaths = [
22571
- "src/app/layout.tsx",
22572
- "app/layout.tsx",
22573
- "src/app/layout.jsx",
22574
- "app/layout.jsx"
22575
- ];
22576
- for (const relativePath of possiblePaths) {
22577
- const fullPath = path12__default.default.join(process.cwd(), relativePath);
22578
- try {
22579
- await fs3__default.default.access(fullPath);
22580
- return fullPath;
22581
- } catch {
22582
- continue;
22583
- }
22584
- }
22585
- return null;
22570
+ return chunkP4TB4ROG_js.findRootLayout(process.cwd());
22586
22571
  }
22587
22572
  var isDockerCached;
22588
22573
  function hasDockerEnv() {
@@ -22744,15 +22729,15 @@ var wslDefaultBrowser = async () => {
22744
22729
  const { stdout } = await executePowerShell(command, { powerShellPath: psPath });
22745
22730
  return stdout.trim();
22746
22731
  };
22747
- var convertWslPathToWindows = async (path29) => {
22748
- if (/^[a-z]+:\/\//i.test(path29)) {
22749
- return path29;
22732
+ var convertWslPathToWindows = async (path30) => {
22733
+ if (/^[a-z]+:\/\//i.test(path30)) {
22734
+ return path30;
22750
22735
  }
22751
22736
  try {
22752
- const { stdout } = await execFile2("wslpath", ["-aw", path29], { encoding: "utf8" });
22737
+ const { stdout } = await execFile2("wslpath", ["-aw", path30], { encoding: "utf8" });
22753
22738
  return stdout.trim();
22754
22739
  } catch {
22755
- return path29;
22740
+ return path30;
22756
22741
  }
22757
22742
  };
22758
22743
 
@@ -25240,8 +25225,8 @@ async function templateCommand(sourcePath, options) {
25240
25225
  const slots = [];
25241
25226
  const componentNames = [];
25242
25227
  chunkJS75ORH7_js.traverse(ast, {
25243
- JSXElement(path29) {
25244
- const openingElement = path29.node.openingElement;
25228
+ JSXElement(path30) {
25229
+ const openingElement = path30.node.openingElement;
25245
25230
  if (chunkJS75ORH7_js.isJSXIdentifier(openingElement.name)) {
25246
25231
  const componentName = openingElement.name.name;
25247
25232
  if (componentName[0] === componentName[0].toUpperCase()) {
@@ -26365,8 +26350,7 @@ async function uploadSchemas(pages, globalSchema, config2) {
26365
26350
  }
26366
26351
  }
26367
26352
  }
26368
- var APP_DIRS = ["app", path12__default.default.join("src", "app")];
26369
- var CARD_FILE = /^(opengraph-image|twitter-image)\b.*\.(png|jpe?g|gif|webp)$/i;
26353
+ var CARD_FILE = /^(opengraph-image|twitter-image)\b.*\.(png|jpe?g|gif|webp|tsx|ts|jsx|js)$/i;
26370
26354
  function safeExists(p) {
26371
26355
  try {
26372
26356
  return fs__namespace.default.existsSync(p);
@@ -26390,14 +26374,14 @@ function findPageCards(cwd) {
26390
26374
  else if (CARD_FILE.test(entry.name)) found.push(full);
26391
26375
  }
26392
26376
  };
26393
- for (const rel of APP_DIRS) walk(path12__default.default.join(cwd, rel));
26377
+ for (const rel of chunkP4TB4ROG_js.NEXT_APP_DIRS) walk(path12__default.default.join(cwd, rel));
26394
26378
  return found;
26395
26379
  }
26396
26380
  function readOgWiring(cwd) {
26397
26381
  const siteCard = ["public/og.png", "public/og.jpg", "public/opengraph.png"].some(
26398
26382
  (rel) => safeExists(path12__default.default.join(cwd, rel))
26399
26383
  );
26400
- const layoutPath = ["app/layout.tsx", "src/app/layout.tsx"].map((rel) => path12__default.default.join(cwd, rel)).find(safeExists);
26384
+ const layoutPath = chunkP4TB4ROG_js.findRootLayout(cwd);
26401
26385
  let layout = "";
26402
26386
  if (layoutPath) {
26403
26387
  try {
@@ -26417,7 +26401,12 @@ function readOgWiring(cwd) {
26417
26401
  function judgeOgWiring(facts) {
26418
26402
  const problems = [];
26419
26403
  if (!facts.layoutFound) {
26420
- return [{ message: "no app/layout.tsx found to verify metadata", fix: "Run this from the site root." }];
26404
+ return [
26405
+ {
26406
+ message: "no root layout (app/layout.{tsx,ts,jsx,js} or src/app/layout.*) found to verify metadata",
26407
+ fix: "Run this from the site root."
26408
+ }
26409
+ ];
26421
26410
  }
26422
26411
  if (!facts.siteCard && !facts.pageCards.length) {
26423
26412
  return [
@@ -26472,26 +26461,6 @@ async function readFileOrNull(p) {
26472
26461
  return null;
26473
26462
  }
26474
26463
  }
26475
- async function findFirst(cwd, candidates) {
26476
- for (const rel of candidates) {
26477
- const full = path12__default.default.join(cwd, rel);
26478
- if (await readFileOrNull(full)) return full;
26479
- }
26480
- return null;
26481
- }
26482
- var LAYOUT_CANDIDATES = [
26483
- "app/layout.tsx",
26484
- "app/layout.jsx",
26485
- "src/app/layout.tsx",
26486
- "src/app/layout.jsx"
26487
- ];
26488
- var SITEMAP_CANDIDATES = [
26489
- "app/sitemap.ts",
26490
- "app/sitemap.tsx",
26491
- "app/sitemap.js",
26492
- "src/app/sitemap.ts",
26493
- "src/app/sitemap.tsx"
26494
- ];
26495
26464
  function checkApiKeyEnv() {
26496
26465
  const key = process.env.SONOR_API_KEY;
26497
26466
  if (key && key.startsWith("sonor_")) {
@@ -26578,7 +26547,7 @@ async function checkPackageInstalled(cwd) {
26578
26547
  };
26579
26548
  }
26580
26549
  async function checkSiteKitLayout(cwd) {
26581
- const layoutPath = await findFirst(cwd, LAYOUT_CANDIDATES);
26550
+ const layoutPath = chunkP4TB4ROG_js.findRootLayout(cwd);
26582
26551
  if (!layoutPath) {
26583
26552
  return {
26584
26553
  id: "layout.sitekit",
@@ -26622,8 +26591,8 @@ async function checkSiteKitLayout(cwd) {
26622
26591
  };
26623
26592
  }
26624
26593
  async function checkSitemap(cwd) {
26625
- const sitemapPath = await findFirst(cwd, SITEMAP_CANDIDATES);
26626
- if (!sitemapPath) {
26594
+ const sitemapRel = chunkP4TB4ROG_js.findSitemapRoute(cwd);
26595
+ if (!sitemapRel) {
26627
26596
  return {
26628
26597
  id: "sitemap.managed",
26629
26598
  title: "Sitemap",
@@ -26633,7 +26602,7 @@ async function checkSitemap(cwd) {
26633
26602
  fixCommand: "npx sonor-setup scaffold --yes"
26634
26603
  };
26635
26604
  }
26636
- const content = await readFileOrNull(sitemapPath) || "";
26605
+ const content = await readFileOrNull(path12__default.default.join(cwd, sitemapRel)) || "";
26637
26606
  if (content.includes("createSitemap") || content.includes("@sonordev/site-kit")) {
26638
26607
  return { id: "sitemap.managed", title: "Sitemap", level: "ok", message: "Using Site-Kit sitemap" };
26639
26608
  }
@@ -27011,8 +26980,7 @@ async function checkSsrRenderFromBuild(cwd) {
27011
26980
  }
27012
26981
  async function checkNetlifyMiddleware(cwd) {
27013
26982
  const runtimeRe = /runtime\s*[:=]\s*['"](nodejs|edge)['"]/;
27014
- const proxyFiles = ["proxy.ts", "proxy.js", "src/proxy.ts", "src/proxy.js"];
27015
- for (const rel of proxyFiles) {
26983
+ for (const rel of chunkP4TB4ROG_js.NEXT_PROXY_FILES) {
27016
26984
  const content = await readFileOrNull(path12__default.default.join(cwd, rel));
27017
26985
  if (content === null) continue;
27018
26986
  if (runtimeRe.test(content)) {
@@ -27028,8 +26996,7 @@ async function checkNetlifyMiddleware(cwd) {
27028
26996
  }
27029
26997
  return { id: "middleware.netlify", title: "Proxy / middleware", level: "ok", message: `${rel} present` };
27030
26998
  }
27031
- const middlewareFiles = ["middleware.ts", "middleware.js", "src/middleware.ts", "src/middleware.js"];
27032
- for (const rel of middlewareFiles) {
26999
+ for (const rel of chunkP4TB4ROG_js.NEXT_MIDDLEWARE_FILES) {
27033
27000
  const content = await readFileOrNull(path12__default.default.join(cwd, rel));
27034
27001
  if (content === null) continue;
27035
27002
  if (/runtime\s*[:=]\s*['"]nodejs['"]/.test(content)) {
@@ -27224,8 +27191,8 @@ async function statusCommand(options) {
27224
27191
 
27225
27192
  // src/og/pages.ts
27226
27193
  var DYNAMIC = "*";
27227
- function pathSegments(path29) {
27228
- return path29.split("/").filter(Boolean);
27194
+ function pathSegments(path30) {
27195
+ return path30.split("/").filter(Boolean);
27229
27196
  }
27230
27197
  function stripBrandSuffix(title, brand) {
27231
27198
  const cleaned = title.replace(/\s*[|–—-]\s*[^|–—-]+$/, "").trim();
@@ -27233,13 +27200,13 @@ function stripBrandSuffix(title, brand) {
27233
27200
  if (brand && cleaned.toLowerCase() === brand.toLowerCase()) return title.trim();
27234
27201
  return cleaned;
27235
27202
  }
27236
- function titleFromPath(path29) {
27237
- const last = pathSegments(path29).filter((s) => s !== DYNAMIC).pop();
27203
+ function titleFromPath(path30) {
27204
+ const last = pathSegments(path30).filter((s) => s !== DYNAMIC).pop();
27238
27205
  if (!last) return "Home";
27239
27206
  return last.replace(/[-_]+/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()).trim();
27240
27207
  }
27241
- function kickerFromPath(path29, fallback) {
27242
- const parts = pathSegments(path29);
27208
+ function kickerFromPath(path30, fallback) {
27209
+ const parts = pathSegments(path30);
27243
27210
  const section = parts.includes(DYNAMIC) ? parts.filter((s) => s !== DYNAMIC) : parts.slice(0, -1);
27244
27211
  if (!section.length) return fallback;
27245
27212
  return section.join(" / ").replace(/[-_]+/g, " ");
@@ -27263,8 +27230,8 @@ function kickerIsRedundant(kicker, title) {
27263
27230
  const titleWords = new Set(t.split(" "));
27264
27231
  return k2.split(" ").every((w) => titleWords.has(w));
27265
27232
  }
27266
- function slugForPath(path29) {
27267
- const segments = pathSegments(path29);
27233
+ function slugForPath(path30) {
27234
+ const segments = pathSegments(path30);
27268
27235
  if (!segments.length) return "home";
27269
27236
  return segments.map((s) => s === DYNAMIC ? "any" : s).join("-").replace(/[^a-zA-Z0-9]+/g, "-").replace(/^-+|-+$/g, "").toLowerCase();
27270
27237
  }
@@ -27425,6 +27392,9 @@ async function compressCard(pngPath, cwd) {
27425
27392
  return pngPath;
27426
27393
  }
27427
27394
  }
27395
+ function codeOgImageFile(dir) {
27396
+ return chunkP4TB4ROG_js.findConventionFile(dir, "opengraph-image");
27397
+ }
27428
27398
  function discoverDynamicSegments(appDir) {
27429
27399
  const found = [];
27430
27400
  const walk = (dir, urlSegments, pattern) => {
@@ -27438,8 +27408,7 @@ function discoverDynamicSegments(appDir) {
27438
27408
  const nextUrl = isGroup || isDynamic ? urlSegments : [...urlSegments, entry.name];
27439
27409
  const nextPattern = isGroup ? pattern : [...pattern, isDynamic ? DYNAMIC : entry.name];
27440
27410
  if (isDynamic) {
27441
- const hasPage = ["tsx", "jsx", "ts", "js"].some((ext2) => fs.existsSync(path12__default.default.join(full, `page.${ext2}`)));
27442
- if (hasPage) {
27411
+ if (chunkP4TB4ROG_js.hasPageFile(full)) {
27443
27412
  found.push({ dir: full, path: `/${nextPattern.join("/")}`, parent: `/${urlSegments.join("/")}` });
27444
27413
  }
27445
27414
  }
@@ -27544,11 +27513,11 @@ async function runOg(options) {
27544
27513
  };
27545
27514
  }
27546
27515
  if (options.pages !== false) {
27547
- const appDir = chunkLOS5D6B3_js.findAppDirForDiscovery(cwd);
27516
+ const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery(cwd);
27548
27517
  if (!appDir) {
27549
27518
  console.log(source_default.yellow(" ! No app/ directory found \u2014 skipped per-page cards."));
27550
27519
  } else {
27551
- const routes = [...new Set(chunkLOS5D6B3_js.discoverNextJsRoutes(appDir).map((r) => r.path))];
27520
+ const routes = [...new Set(chunkP4TB4ROG_js.discoverNextJsRoutes(appDir).map((r) => r.path))];
27552
27521
  if (!routes.length) {
27553
27522
  console.log(source_default.yellow(" ! No static routes discovered \u2014 skipped per-page cards."));
27554
27523
  } else {
@@ -27592,9 +27561,19 @@ async function runOg(options) {
27592
27561
  });
27593
27562
  cardKeyFix = CARD_KEY_FIX;
27594
27563
  }
27595
- const reports = await pooled(targets, RENDER_CONCURRENCY, async (route, i) => {
27564
+ const placed = targets.map((route) => ({ ...route, dir: route.dir ?? routeOutputDir(appDir, route.path) }));
27565
+ const toRender = placed.filter((route) => !codeOgImageFile(route.dir));
27566
+ for (const route of placed.filter((r) => codeOgImageFile(r.dir))) {
27567
+ for (const ext2 of ["png", "jpg", "jpeg"]) {
27568
+ await fs3__default.default.rm(path12__default.default.join(route.dir, `opengraph-image.${ext2}`), { force: true });
27569
+ }
27570
+ const file = path12__default.default.relative(cwd, codeOgImageFile(route.dir));
27571
+ console.log(source_default.gray(` \u21B7 ${route.path} keeps its own ${file}`));
27572
+ checks.push({ id: "og.code-card", title: route.path, level: "ok", message: `Code-based card kept: ${file}` });
27573
+ }
27574
+ const reports = await pooled(toRender, RENDER_CONCURRENCY, async (route, i) => {
27596
27575
  const pageConfig = pageCardConfig(config2, route, brand);
27597
- const dir = route.dir ?? routeOutputDir(appDir, route.path);
27576
+ const dir = route.dir;
27598
27577
  for (const ext2 of ["png", "jpg", "jpeg"]) {
27599
27578
  await fs3__default.default.rm(path12__default.default.join(dir, `opengraph-image.${ext2}`), { force: true });
27600
27579
  }
@@ -31267,7 +31246,7 @@ async function syncCommand2(options) {
31267
31246
  }
31268
31247
  async function syncPagesToPortal(apiUrl, apiKey, dryRun) {
31269
31248
  const spinner = ora("Discovering pages...").start();
31270
- const appDir = findAppDir();
31249
+ const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery();
31271
31250
  if (!appDir) {
31272
31251
  spinner.fail("Could not find app directory");
31273
31252
  return;
@@ -31328,18 +31307,6 @@ async function syncPagesToPortal(apiUrl, apiKey, dryRun) {
31328
31307
  syncSpinner.fail(`Sync failed: ${error2.message}`);
31329
31308
  }
31330
31309
  }
31331
- function findAppDir() {
31332
- const candidates = [
31333
- path12__default.default.join(process.cwd(), "app"),
31334
- path12__default.default.join(process.cwd(), "src", "app")
31335
- ];
31336
- for (const candidate of candidates) {
31337
- if (fs.existsSync(candidate)) {
31338
- return candidate;
31339
- }
31340
- }
31341
- return null;
31342
- }
31343
31310
  function discoverPages(appDir, currentPath = "", pages = []) {
31344
31311
  const fullPath = path12__default.default.join(appDir, currentPath);
31345
31312
  if (!fs.existsSync(fullPath)) {
@@ -31639,7 +31606,7 @@ async function discoverSchemaUsage(appDir) {
31639
31606
  return usages;
31640
31607
  }
31641
31608
  async function syncSchemasToPortal(apiUrl, apiKey, dryRun) {
31642
- const appDir = findAppDir();
31609
+ const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery();
31643
31610
  if (!appDir) {
31644
31611
  console.log(source_default.gray(" No app directory found"));
31645
31612
  return;
@@ -31682,7 +31649,7 @@ async function apiRoutesCommand(options) {
31682
31649
  console.log("");
31683
31650
  console.log(source_default.bold(" Site-Kit API Routes"));
31684
31651
  console.log("");
31685
- const appDir = findAppDir2();
31652
+ const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery();
31686
31653
  if (!appDir) {
31687
31654
  console.log(source_default.red(" \u2717 Could not find app directory"));
31688
31655
  console.log(source_default.gray(" Make sure you are in a Next.js project with an app directory"));
@@ -31725,18 +31692,6 @@ async function apiRoutesCommand(options) {
31725
31692
  spinner.fail(`Failed to create API routes: ${error2.message}`);
31726
31693
  }
31727
31694
  }
31728
- function findAppDir2() {
31729
- const candidates = [
31730
- path12__default.default.join(process.cwd(), "app"),
31731
- path12__default.default.join(process.cwd(), "src", "app")
31732
- ];
31733
- for (const candidate of candidates) {
31734
- if (fs.existsSync(candidate)) {
31735
- return candidate;
31736
- }
31737
- }
31738
- return null;
31739
- }
31740
31695
  function generateRouteHandler() {
31741
31696
  return `/**
31742
31697
  * Sonor API Proxy
@@ -31951,7 +31906,7 @@ async function scaffoldCommand(options) {
31951
31906
  );
31952
31907
  console.log("");
31953
31908
  const cwd = process.cwd();
31954
- const appDir = await findAppDir3();
31909
+ const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery(cwd);
31955
31910
  if (!appDir) {
31956
31911
  console.log(source_default.red(" \u2717 No app directory found (app/ or src/app/)"));
31957
31912
  process.exit(1);
@@ -31964,8 +31919,8 @@ async function scaffoldCommand(options) {
31964
31919
 
31965
31920
  export default createSitemap({
31966
31921
  // baseUrl auto-resolved from Portal via API key
31967
- includeLlmsTxtInSitemap: true,
31968
- includeLlmsFullTxtInSitemap: true,
31922
+ // llms.txt stays out of the sitemap on purpose: it's a plain-text duplicate
31923
+ // of these pages, and AI crawlers find it at /llms.txt anyway.
31969
31924
  // optimizedLLMsTxt: true, // optional: static build writes optimized llms (CI)
31970
31925
  // llmsPublicSummaryOnly: true, // optional: page list from Portal public summaries only
31971
31926
  // additionalPaths: async () => [...],
@@ -32001,13 +31956,13 @@ export const GET = createLLMsFullTxtHandler({ preferStatic: true })
32001
31956
  files.push(
32002
31957
  {
32003
31958
  path: path12__default.default.join(cwd, "proxy.ts"),
32004
- label: "Proxy (security headers; redirects resolve at the 404 boundary)",
31959
+ label: "Proxy (security headers, managed redirects)",
32005
31960
  content: `import { createProxy } from '@sonordev/site-kit/proxy'
32006
31961
 
32007
- // redirects: false \u2014 managed redirects resolve in app/not-found.tsx via
32008
- // resolveManagedRedirect() instead of on every request. The proxy still
32009
- // stamps x-sk-path so the 404 boundary knows the requested URL.
32010
- export default createProxy({ redirects: false })
31962
+ // Sonor-managed redirects apply here. The rule list is cached in memory for
31963
+ // five minutes, so page loads rarely wait on it. Don't move them into
31964
+ // app/not-found.tsx: reading request headers there makes every page dynamic.
31965
+ export default createProxy({ redirects: true })
32011
31966
 
32012
31967
  // Inlined on purpose: Next statically parses \`config.matcher\` at build time
32013
31968
  // and rejects an imported value (Turbopack build error). Keep in sync with
@@ -32029,18 +31984,11 @@ export const GET = createManifest()
32029
31984
  },
32030
31985
  {
32031
31986
  path: path12__default.default.join(appDir, "not-found.tsx"),
32032
- label: "404 Page (resolves managed redirects)",
32033
- content: `import { redirect, permanentRedirect } from 'next/navigation'
32034
- import { resolveManagedRedirect } from '@sonordev/site-kit/redirects/not-found'
32035
-
32036
- export default async function NotFound() {
32037
- // Sonor-managed redirects resolve here, at the only place they can matter:
32038
- // a URL that would otherwise 404. Successful page loads pay nothing.
32039
- const managed = await resolveManagedRedirect()
32040
- if (managed) {
32041
- ;(managed.permanent ? permanentRedirect : redirect)(managed.destination)
32042
- }
32043
-
31987
+ label: "404 Page",
31988
+ content: `// Keep this component free of request APIs (headers, cookies). Next
31989
+ // renders the root 404 inside every page, so one headers() call here makes
31990
+ // the whole site dynamic. Managed redirects run in proxy.ts instead.
31991
+ export default function NotFound() {
32044
31992
  return (
32045
31993
  <div style={{ textAlign: 'center', padding: '4rem 1rem' }}>
32046
31994
  <h1 style={{ fontSize: '3rem', fontWeight: 700, marginBottom: '0.5rem' }}>404</h1>
@@ -32160,9 +32108,9 @@ SONOR_API_KEY=sonor_your-project-uuid_your-secret-key
32160
32108
  console.log(source_default.yellow(" [DRY RUN] Would create:"));
32161
32109
  for (const f of files) {
32162
32110
  const rel = path12__default.default.relative(cwd, f.path);
32163
- const exists = fs.existsSync(f.path);
32111
+ const exists2 = fs.existsSync(f.path);
32164
32112
  console.log(
32165
- source_default.gray(` ${rel}`) + (exists ? source_default.yellow(" (exists, would skip)") : "")
32113
+ source_default.gray(` ${rel}`) + (exists2 ? source_default.yellow(" (exists, would skip)") : "")
32166
32114
  );
32167
32115
  }
32168
32116
  console.log("");
@@ -32226,17 +32174,209 @@ SONOR_API_KEY=sonor_your-project-uuid_your-secret-key
32226
32174
  console.log("");
32227
32175
  }
32228
32176
  }
32229
- async function findAppDir3() {
32230
- const cwd = process.cwd();
32231
- const candidates = [
32232
- path12__default.default.join(cwd, "app"),
32233
- path12__default.default.join(cwd, "src", "app")
32234
- ];
32235
- for (const dir of candidates) {
32236
- if (fs.existsSync(dir)) return dir;
32177
+ var LLMS_FILES = [
32178
+ { path: "/llms.txt", handler: "createLLMsTxtHandler" },
32179
+ { path: "/llms-full.txt", handler: "createLLMsFullTxtHandler" }
32180
+ ];
32181
+ var NEXT_CONFIGS = ["next.config.ts", "next.config.mts", "next.config.mjs", "next.config.js", "next.config.cjs"];
32182
+ function read(cwd, rel) {
32183
+ try {
32184
+ return fs__namespace.default.readFileSync(path12__default.default.join(cwd, rel), "utf-8");
32185
+ } catch {
32186
+ return "";
32187
+ }
32188
+ }
32189
+ function exists(cwd, rel) {
32190
+ try {
32191
+ return fs__namespace.default.existsSync(path12__default.default.join(cwd, rel));
32192
+ } catch {
32193
+ return false;
32237
32194
  }
32195
+ }
32196
+ function patternMatches(pattern, urlPath) {
32197
+ const re2 = pattern.trim().split(/\(\.\*\)|:\w+\*|\*/).map((part) => part.replace(/[.+?^${}()|[\]\\]/g, "\\$&")).join(".*");
32198
+ return new RegExp(`^${re2}$`).test(urlPath);
32199
+ }
32200
+ var NOINDEX = /noindex/i;
32201
+ function netlifyTomlNoindex(toml, urlPath) {
32202
+ const blocks = [];
32203
+ for (const line of toml.split("\n")) {
32204
+ const header = line.match(/^\s*\[\[?\s*([^\]]+?)\s*\]\]?\s*$/);
32205
+ if (header && header[1] !== "headers.values") blocks.push(line);
32206
+ else if (blocks.length) blocks[blocks.length - 1] += `
32207
+ ${line}`;
32208
+ }
32209
+ return blocks.some((block) => {
32210
+ if (!/^\s*\[\[\s*headers\s*\]\]/.test(block)) return false;
32211
+ const pattern = block.match(/^\s*for\s*=\s*["']([^"']+)["']/m)?.[1];
32212
+ const value = block.match(/^\s*["']?X-Robots-Tag["']?\s*=\s*["']([^"']*)["']/im)?.[1];
32213
+ return !!pattern && !!value && NOINDEX.test(value) && patternMatches(pattern, urlPath);
32214
+ });
32215
+ }
32216
+ function headersFileNoindex(text, urlPath) {
32217
+ let current = null;
32218
+ for (const line of text.split("\n")) {
32219
+ if (!line.trim() || line.trim().startsWith("#")) continue;
32220
+ if (!/^\s/.test(line)) {
32221
+ current = line.trim();
32222
+ continue;
32223
+ }
32224
+ const m = line.match(/^\s+X-Robots-Tag\s*:\s*(.+)$/i);
32225
+ if (current && m && NOINDEX.test(m[1]) && patternMatches(current, urlPath)) return true;
32226
+ }
32227
+ return false;
32228
+ }
32229
+ function vercelJsonNoindex(text, urlPath) {
32230
+ try {
32231
+ const json = JSON.parse(text);
32232
+ return (json.headers ?? []).some(
32233
+ (rule) => !!rule.source && patternMatches(rule.source, urlPath) && (rule.headers ?? []).some((h) => /^x-robots-tag$/i.test(h.key ?? "") && NOINDEX.test(h.value ?? ""))
32234
+ );
32235
+ } catch {
32236
+ return false;
32237
+ }
32238
+ }
32239
+ function findHostNoindex(cwd, urlPath) {
32240
+ const toml = read(cwd, "netlify.toml");
32241
+ if (toml && netlifyTomlNoindex(toml, urlPath)) return "netlify.toml";
32242
+ const headers = read(cwd, "public/_headers");
32243
+ if (headers && headersFileNoindex(headers, urlPath)) return "public/_headers";
32244
+ const vercel = read(cwd, "vercel.json");
32245
+ if (vercel && vercelJsonNoindex(vercel, urlPath)) return "vercel.json";
32238
32246
  return null;
32239
32247
  }
32248
+ var LINK_DISCOVERY_LINE = /^.*\bLink\b.*(llms[^\n]*describedby|describedby[^\n]*llms).*$/im;
32249
+ function findDiscoverySource(cwd) {
32250
+ for (const rel of chunkP4TB4ROG_js.findProxyFiles(cwd)) {
32251
+ const src = read(cwd, rel);
32252
+ const viaFactory = /\bcreate(Proxy|Middleware)\s*\(/.test(src) && /\bllmsDiscovery\b(?!\s*:\s*false\b)/.test(src);
32253
+ if (viaFactory) return `${rel} (createProxy llmsDiscovery)`;
32254
+ if (src.includes("buildAiDiscoveryHeaders")) return `${rel} (buildAiDiscoveryHeaders)`;
32255
+ }
32256
+ for (const rel of NEXT_CONFIGS) {
32257
+ const src = read(cwd, rel);
32258
+ if (!src) continue;
32259
+ if (/\bllmsTxtDiscoveryLink\s*:(?!\s*false\b)/.test(src)) return `${rel} (llmsTxtDiscoveryLink)`;
32260
+ if (src.includes("buildAiDiscoveryHeaders")) return `${rel} (buildAiDiscoveryHeaders)`;
32261
+ break;
32262
+ }
32263
+ const layout = chunkP4TB4ROG_js.findRootLayout(cwd);
32264
+ if (layout) {
32265
+ const src = read(cwd, path12__default.default.relative(cwd, layout));
32266
+ if (src.includes("buildAiDiscoveryHeaders") || src.includes("llmsTxtDiscoveryLink")) {
32267
+ return path12__default.default.relative(cwd, layout);
32268
+ }
32269
+ }
32270
+ for (const rel of ["netlify.toml", "public/_headers"]) {
32271
+ if (LINK_DISCOVERY_LINE.test(read(cwd, rel))) return rel;
32272
+ }
32273
+ return null;
32274
+ }
32275
+ function readGeoWiring(cwd) {
32276
+ const appDir = chunkP4TB4ROG_js.NEXT_APP_DIRS.find((rel) => exists(cwd, rel)) ?? null;
32277
+ const sitemap = chunkP4TB4ROG_js.findSitemapRoute(cwd);
32278
+ const sitemapSrc = sitemap ? read(cwd, sitemap) : "";
32279
+ const sitemapListsLlms = /\bincludeLlms(Full)?TxtInSitemap\s*:\s*true\b/.test(sitemapSrc) || /['"`/]llms(-full)?\.txt['"`]/.test(sitemapSrc);
32280
+ const sitemapWritesStatic = /\bcreateSitemap\s*\(/.test(sitemapSrc);
32281
+ const writesLlms = sitemapWritesStatic && !/\boptimizedLLMsTxt\s*:\s*false\b/.test(sitemapSrc);
32282
+ const writesLlmsFull = writesLlms && /\boptimizedLLMsFullTxt\s*:\s*true\b/.test(sitemapSrc);
32283
+ const llms = LLMS_FILES.map(({ path: urlPath, handler }) => {
32284
+ const file = urlPath.slice(1);
32285
+ const routeAbs = appDir ? chunkP4TB4ROG_js.findConventionFile(path12__default.default.join(cwd, appDir, file), "route") : null;
32286
+ const route = routeAbs ? path12__default.default.relative(cwd, routeAbs) : null;
32287
+ const routeSrc = route ? read(cwd, route) : "";
32288
+ const publicFile = exists(cwd, path12__default.default.join("public", file));
32289
+ const built = urlPath === "/llms.txt" ? writesLlms : writesLlmsFull;
32290
+ return {
32291
+ path: urlPath,
32292
+ route,
32293
+ routeUsesKitHandler: routeSrc.includes(handler),
32294
+ routeOptsOutOfNoindex: /\bnoindex\s*:\s*false\b/.test(routeSrc),
32295
+ routeSetsNoindex: /X-Robots-Tag/i.test(routeSrc) && NOINDEX.test(routeSrc),
32296
+ servedStatic: publicFile || built,
32297
+ staticReason: publicFile ? `public/${file}` : built ? `public/${file} (written by createSitemap at build)` : null,
32298
+ hostNoindex: findHostNoindex(cwd, urlPath)
32299
+ };
32300
+ });
32301
+ return { appDir, llms, sitemap, sitemapListsLlms, discovery: findDiscoverySource(cwd) };
32302
+ }
32303
+ var DISCOVERY_FIX = "Add llmsDiscovery to the proxy: createProxy({ llmsDiscovery: { siteUrl } }) in proxy.ts. Or withSiteKitConfig({ llmsTxtDiscoveryLink: true }) in next.config.";
32304
+ var SITEMAP_FIX = "Drop includeLlmsTxtInSitemap / includeLlmsFullTxtInSitemap (and any hand-added /llms*.txt entry) from the sitemap. A sitemap lists indexable HTML pages; AI crawlers find llms.txt at /llms.txt.";
32305
+ function hostNoindexFix(urlPath) {
32306
+ return `The CDN serves it before any route handler runs, so set the header in host config. netlify.toml: [[headers]] for = "${urlPath}" [headers.values] X-Robots-Tag = "noindex"`;
32307
+ }
32308
+ function judgeGeoWiring(facts) {
32309
+ const rows = [];
32310
+ for (const f of facts.llms) {
32311
+ const name = f.path.slice(1);
32312
+ const id = f.path === "/llms.txt" ? "llms" : "llms-full";
32313
+ const served = !!f.route || f.servedStatic;
32314
+ rows.push(
32315
+ served ? { id: `${id}.served`, label: `${name} served`, level: "ok", detail: f.route ?? f.staticReason ?? void 0 } : {
32316
+ id: `${id}.served`,
32317
+ label: `${name} served`,
32318
+ level: "fail",
32319
+ detail: `no ${facts.appDir ?? "app"}/${name}/route.* and no public/${name}`,
32320
+ fix: "Run: sonor-setup geo --ensure-routes"
32321
+ }
32322
+ );
32323
+ }
32324
+ if (!facts.sitemap) {
32325
+ rows.push({ id: "geo.sitemap", label: "sitemap leaves llms files out", level: "info", detail: "no sitemap route to check" });
32326
+ } else if (facts.sitemapListsLlms) {
32327
+ rows.push({
32328
+ id: "geo.sitemap",
32329
+ label: "sitemap leaves llms files out",
32330
+ level: "warn",
32331
+ detail: `${facts.sitemap} lists /llms.txt, inviting search engines to index a thin plain-text duplicate`,
32332
+ fix: SITEMAP_FIX
32333
+ });
32334
+ } else {
32335
+ rows.push({ id: "geo.sitemap", label: "sitemap leaves llms files out", level: "ok", detail: facts.sitemap });
32336
+ }
32337
+ rows.push(
32338
+ facts.discovery ? { id: "geo.discovery", label: 'discovery header (Link rel="describedby")', level: "ok", detail: facts.discovery } : {
32339
+ id: "geo.discovery",
32340
+ label: 'discovery header (Link rel="describedby")',
32341
+ level: "fail",
32342
+ detail: "not wired in proxy, next.config, root layout, or host config",
32343
+ fix: DISCOVERY_FIX
32344
+ }
32345
+ );
32346
+ for (const f of facts.llms) {
32347
+ if (!f.route && !f.servedStatic) continue;
32348
+ const name = f.path.slice(1);
32349
+ const id = `${f.path === "/llms.txt" ? "llms" : "llms-full"}.noindex`;
32350
+ const label = `${name} sends X-Robots-Tag: noindex`;
32351
+ if (f.servedStatic) {
32352
+ rows.push(
32353
+ f.hostNoindex ? { id, label, level: "ok", detail: f.hostNoindex } : { id, label, level: "warn", detail: `${f.staticReason} is served without it`, fix: hostNoindexFix(f.path) }
32354
+ );
32355
+ continue;
32356
+ }
32357
+ if (f.hostNoindex) {
32358
+ rows.push({ id, label, level: "ok", detail: f.hostNoindex });
32359
+ } else if (f.routeUsesKitHandler && !f.routeOptsOutOfNoindex) {
32360
+ rows.push({ id, label, level: "ok", detail: `${f.route} (site-kit handler default)` });
32361
+ } else if (f.routeSetsNoindex) {
32362
+ rows.push({ id, label, level: "ok", detail: f.route });
32363
+ } else {
32364
+ rows.push({
32365
+ id,
32366
+ label,
32367
+ level: "warn",
32368
+ detail: f.routeOptsOutOfNoindex ? `${f.route} passes noindex: false` : `${f.route} doesn't set it`,
32369
+ fix: f.routeOptsOutOfNoindex ? "Drop noindex: false unless you want llms.txt in search results." : "Serve it with createLLMsTxtHandler (sends the header by default), or add X-Robots-Tag: noindex to the response."
32370
+ });
32371
+ }
32372
+ }
32373
+ return rows;
32374
+ }
32375
+ function checkGeoWiring(cwd) {
32376
+ return judgeGeoWiring(readGeoWiring(cwd));
32377
+ }
32378
+
32379
+ // src/cli/commands/geo.ts
32240
32380
  var LLMS_ROUTE = `import { createLLMsTxtHandler } from '@sonordev/site-kit/llms'
32241
32381
 
32242
32382
  export const GET = createLLMsTxtHandler({ preferStatic: true })
@@ -32245,40 +32385,36 @@ var LLMS_FULL_ROUTE = `import { createLLMsFullTxtHandler } from '@sonordev/site-
32245
32385
 
32246
32386
  export const GET = createLLMsFullTxtHandler({ preferStatic: true })
32247
32387
  `;
32248
- async function readIfExists(p) {
32249
- if (!fs.existsSync(p)) return "";
32250
- try {
32251
- return await fs3__default.default.readFile(p, "utf-8");
32252
- } catch {
32253
- return "";
32254
- }
32255
- }
32388
+ var ICON = {
32389
+ ok: source_default.green(" \u2713 "),
32390
+ info: source_default.gray(" \xB7 "),
32391
+ warn: source_default.yellow(" ! "),
32392
+ fail: source_default.red(" \u2717 ")
32393
+ };
32256
32394
  async function ensureLlmsRouteFiles(appDir, dryRun) {
32257
- const llms = path12__default.default.join(appDir, "llms.txt", "route.ts");
32258
- const llmsFull = path12__default.default.join(appDir, "llms-full.txt", "route.ts");
32259
32395
  let n5 = 0;
32260
32396
  if (dryRun) return 0;
32261
- if (!fs.existsSync(llms)) {
32262
- await fs3__default.default.mkdir(path12__default.default.dirname(llms), { recursive: true });
32263
- await fs3__default.default.writeFile(llms, LLMS_ROUTE, "utf-8");
32264
- n5++;
32265
- }
32266
- if (!fs.existsSync(llmsFull)) {
32267
- await fs3__default.default.mkdir(path12__default.default.dirname(llmsFull), { recursive: true });
32268
- await fs3__default.default.writeFile(llmsFull, LLMS_FULL_ROUTE, "utf-8");
32397
+ for (const [dir, source] of [
32398
+ ["llms.txt", LLMS_ROUTE],
32399
+ ["llms-full.txt", LLMS_FULL_ROUTE]
32400
+ ]) {
32401
+ if (chunkP4TB4ROG_js.findConventionFile(path12__default.default.join(appDir, dir), "route")) continue;
32402
+ const file = path12__default.default.join(appDir, dir, "route.ts");
32403
+ await fs3__default.default.mkdir(path12__default.default.dirname(file), { recursive: true });
32404
+ await fs3__default.default.writeFile(file, source, "utf-8");
32269
32405
  n5++;
32270
32406
  }
32271
32407
  return n5;
32272
32408
  }
32273
32409
  async function geoCommand(options) {
32274
32410
  if (options.forInstall) {
32275
- const appDir2 = await findAppDir3();
32411
+ const appDir2 = chunkP4TB4ROG_js.findAppDirForDiscovery();
32276
32412
  if (!appDir2) return;
32277
32413
  const created = await ensureLlmsRouteFiles(appDir2, options.dryRun);
32278
32414
  if (created > 0) {
32279
32415
  console.log(
32280
32416
  source_default.cyan(
32281
- `[@sonordev/site-kit] Created ${created} llms route file(s). Set NEXT_PUBLIC_SITE_URL, use createSitemap({ includeLlmsTxtInSitemap: true }), and withSiteKitConfig({ llmsTxtDiscoveryLink: true }) when ready.`
32417
+ `[@sonordev/site-kit] Created ${created} llms route file(s). Set NEXT_PUBLIC_SITE_URL and add createProxy({ llmsDiscovery: { siteUrl } }) to proxy.ts when ready.`
32282
32418
  )
32283
32419
  );
32284
32420
  }
@@ -32293,59 +32429,20 @@ async function geoCommand(options) {
32293
32429
  )
32294
32430
  );
32295
32431
  console.log("");
32296
- const appDir = await findAppDir3();
32432
+ const appDir = chunkP4TB4ROG_js.findAppDirForDiscovery();
32297
32433
  if (!appDir) {
32298
32434
  console.log(source_default.red(" \u2717 No app directory (app/ or src/app/)"));
32299
32435
  process.exit(1);
32300
32436
  }
32301
- const llms = path12__default.default.join(appDir, "llms.txt", "route.ts");
32302
- const llmsFull = path12__default.default.join(appDir, "llms-full.txt", "route.ts");
32303
- const sitemap = path12__default.default.join(appDir, "sitemap.ts");
32304
32437
  let allOk = true;
32305
- const row = (label, pass) => {
32306
- if (!pass) allOk = false;
32307
- console.log(
32308
- (pass ? source_default.green(" \u2713 ") : source_default.red(" \u2717 ")) + label
32309
- );
32310
- };
32311
- row("llms.txt route", fs.existsSync(llms));
32312
- row("llms-full.txt route", fs.existsSync(llmsFull));
32313
- let sitemapHasLlms = false;
32314
- if (fs.existsSync(sitemap)) {
32315
- const txt = await readIfExists(sitemap);
32316
- sitemapHasLlms = txt.includes("includeLlmsTxtInSitemap") || txt.includes("includeLlmsFullTxtInSitemap");
32317
- row("sitemap.ts lists llms URLs", sitemapHasLlms);
32318
- } else {
32319
- row("sitemap.ts lists llms URLs", false);
32320
- }
32321
- const nextConfigs = [
32322
- path12__default.default.join(cwd, "next.config.ts"),
32323
- path12__default.default.join(cwd, "next.config.mjs"),
32324
- path12__default.default.join(cwd, "next.config.js")
32325
- ];
32326
- let nextCfg = "";
32327
- for (const p of nextConfigs) {
32328
- if (fs.existsSync(p)) {
32329
- nextCfg = await readIfExists(p);
32330
- break;
32438
+ for (const row of checkGeoWiring(cwd)) {
32439
+ if (row.level === "fail") allOk = false;
32440
+ const detail = row.detail ? source_default.gray(` ${row.detail}`) : "";
32441
+ console.log(`${ICON[row.level]}${row.label}${detail}`);
32442
+ if (row.fix && (row.level === "fail" || row.level === "warn")) {
32443
+ console.log(source_default.gray(` ${row.fix}`));
32331
32444
  }
32332
32445
  }
32333
- const layoutCandidates = [
32334
- path12__default.default.join(appDir, "layout.tsx"),
32335
- path12__default.default.join(appDir, "layout.jsx"),
32336
- path12__default.default.join(appDir, "layout.js")
32337
- ];
32338
- let layoutTxt = "";
32339
- for (const p of layoutCandidates) {
32340
- layoutTxt = await readIfExists(p);
32341
- if (layoutTxt) break;
32342
- }
32343
- const hasLayoutDiscovery = layoutTxt.includes("buildAiDiscoveryHeaders") || layoutTxt.includes("llmsTxtDiscoveryLink");
32344
- const hasConfigDiscovery = nextCfg.includes("llmsTxtDiscoveryLink");
32345
- row(
32346
- "discovery header (next.config or root layout)",
32347
- hasConfigDiscovery || hasLayoutDiscovery
32348
- );
32349
32446
  const siteUrl = process.env.NEXT_PUBLIC_SITE_URL?.trim() || process.env.SITE_BASE_URL?.trim() || (process.env.VERCEL_URL?.trim() ? `https://${process.env.VERCEL_URL.replace(/\/$/, "")}` : "");
32350
32447
  if (siteUrl) {
32351
32448
  console.log(source_default.gray(` Public origin (env): ${siteUrl}`));
@@ -32371,19 +32468,16 @@ async function geoCommand(options) {
32371
32468
  console.log(source_default.bold(" Automation"));
32372
32469
  console.log("");
32373
32470
  console.log(
32374
- source_default.gray(
32375
- " \u2022 next.config: withSiteKitConfig({ llmsTxtDiscoveryLink: true })"
32376
- )
32471
+ source_default.gray(' \u2022 proxy.ts: createProxy({ llmsDiscovery: { siteUrl } }) (Link rel="describedby")')
32377
32472
  );
32378
32473
  console.log(
32379
- source_default.gray(
32380
- " (If you define your own headers() on nextConfig, merge Link manually.)"
32381
- )
32474
+ source_default.gray(" or next.config: withSiteKitConfig({ llmsTxtDiscoveryLink: true })")
32382
32475
  );
32383
32476
  console.log(
32384
- source_default.gray(
32385
- " \u2022 createSitemap({ includeLlmsTxtInSitemap: true, includeLlmsFullTxtInSitemap: true })"
32386
- )
32477
+ source_default.gray(" \u2022 createLLMsTxtHandler sends X-Robots-Tag: noindex; a static public/llms.txt needs it in netlify.toml")
32478
+ );
32479
+ console.log(
32480
+ source_default.gray(" \u2022 Keep llms.txt out of the sitemap: AI crawlers find it at /llms.txt")
32387
32481
  );
32388
32482
  console.log(
32389
32483
  source_default.gray(" \u2022 npx sonor-setup scaffold --minimal (routes + sitemap template)")
@@ -32396,7 +32490,7 @@ async function geoCommand(options) {
32396
32490
  (0, import_dotenv2.config)({ path: ".env.local", quiet: true });
32397
32491
  (0, import_dotenv2.config)({ path: ".env", quiet: true });
32398
32492
  var program2 = new Command();
32399
- program2.name("sonor-setup").description("Setup + verification toolchain for @sonordev/site-kit").version(chunkKSL3WA2I_js.SITE_KIT_VERSION);
32493
+ program2.name("sonor-setup").description("Setup + verification toolchain for @sonordev/site-kit").version(chunk5TXXTYXL_js.SITE_KIT_VERSION);
32400
32494
  withAgentFlags(
32401
32495
  program2.command("verify").description("Verify the integration actually works (health + key + SSR) \u2014 exit 0 = done").option("--url <url>", "Verify a running/deployed URL server-renders (recommended for agents)").option("--offline", "Skip the network key-validity ping").option("--strict", "Treat warnings as failures")
32402
32496
  ).action(verifyCommand);