@sonordev/site-kit 5.4.0 → 5.5.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.
- package/AGENTS.md +16 -6
- package/README.md +9 -7
- package/agent-manifest.json +7 -7
- package/dist/AnalyticsProvider-KFXAH4GR.mjs +11 -0
- package/dist/{AnalyticsProvider-2XIOMRCN.mjs.map → AnalyticsProvider-KFXAH4GR.mjs.map} +1 -1
- package/dist/AnalyticsProvider-WDDW3IJW.js +32 -0
- package/dist/{AnalyticsProvider-Y2P2BPOI.js.map → AnalyticsProvider-WDDW3IJW.js.map} +1 -1
- package/dist/{BlogViewTracker-6EGEDPP3.js → BlogViewTracker-D4DIEP4Q.js} +6 -6
- package/dist/{BlogViewTracker-6EGEDPP3.js.map → BlogViewTracker-D4DIEP4Q.js.map} +1 -1
- package/dist/{BlogViewTracker-R4YQ76WP.mjs → BlogViewTracker-ZVEGGH3Y.mjs} +5 -5
- package/dist/{BlogViewTracker-R4YQ76WP.mjs.map → BlogViewTracker-ZVEGGH3Y.mjs.map} +1 -1
- package/dist/ChatWidget-2ZYPYIMQ.js +22 -0
- package/dist/{ChatWidget-2OFWPCWF.js.map → ChatWidget-2ZYPYIMQ.js.map} +1 -1
- package/dist/ChatWidget-FYCCLMQE.mjs +13 -0
- package/dist/{ChatWidget-4AOGHYXQ.mjs.map → ChatWidget-FYCCLMQE.mjs.map} +1 -1
- package/dist/EngageWidget-6HUZYOY7.mjs +11 -0
- package/dist/{EngageWidget-SFO2XRNG.mjs.map → EngageWidget-6HUZYOY7.mjs.map} +1 -1
- package/dist/EngageWidget-MYQTBBW6.js +20 -0
- package/dist/{EngageWidget-T4KAAD3G.js.map → EngageWidget-MYQTBBW6.js.map} +1 -1
- package/dist/{FileField-CE2XNBBG.js → FileField-JK2S24XU.js} +6 -6
- package/dist/{FileField-CE2XNBBG.js.map → FileField-JK2S24XU.js.map} +1 -1
- package/dist/{FileField-7DF2SLPF.mjs → FileField-OZZHWGPA.mjs} +5 -5
- package/dist/{FileField-7DF2SLPF.mjs.map → FileField-OZZHWGPA.mjs.map} +1 -1
- package/dist/{FormSpotlight-ZD3WR5BC.js → FormSpotlight-5AXFQU5M.js} +15 -15
- package/dist/{FormSpotlight-ZD3WR5BC.js.map → FormSpotlight-5AXFQU5M.js.map} +1 -1
- package/dist/{FormSpotlight-IRLKSZGV.mjs → FormSpotlight-XV42L72H.mjs} +3 -3
- package/dist/{FormSpotlight-IRLKSZGV.mjs.map → FormSpotlight-XV42L72H.mjs.map} +1 -1
- package/dist/{FormStage-OSPXOUQE.js → FormStage-HATUHNRV.js} +13 -13
- package/dist/{FormStage-OSPXOUQE.js.map → FormStage-HATUHNRV.js.map} +1 -1
- package/dist/{FormStage-2OSRNQJL.mjs → FormStage-RUK675HV.mjs} +3 -3
- package/dist/{FormStage-2OSRNQJL.mjs.map → FormStage-RUK675HV.mjs.map} +1 -1
- package/dist/ManagedForm-JWEXJEXK.js +23 -0
- package/dist/{ManagedForm-JCHGBBQW.js.map → ManagedForm-JWEXJEXK.js.map} +1 -1
- package/dist/ManagedForm-OA3MNGXT.mjs +14 -0
- package/dist/{ManagedForm-5G37EDJT.mjs.map → ManagedForm-OA3MNGXT.mjs.map} +1 -1
- package/dist/{ManagedNewsletterForm-4LVJZROZ.js → ManagedNewsletterForm-AAHH63KT.js} +8 -8
- package/dist/{ManagedNewsletterForm-4LVJZROZ.js.map → ManagedNewsletterForm-AAHH63KT.js.map} +1 -1
- package/dist/{ManagedNewsletterForm-QJSVH23S.mjs → ManagedNewsletterForm-HZKTNWLW.mjs} +7 -7
- package/dist/{ManagedNewsletterForm-QJSVH23S.mjs.map → ManagedNewsletterForm-HZKTNWLW.mjs.map} +1 -1
- package/dist/{SignalCore-L6Z3YTCF.mjs → SignalCore-X3GDGBZD.mjs} +5 -5
- package/dist/{SignalCore-L6Z3YTCF.mjs.map → SignalCore-X3GDGBZD.mjs.map} +1 -1
- package/dist/{SignalCore-NQ4YEOI7.js → SignalCore-YSNZYBKJ.js} +11 -11
- package/dist/{SignalCore-NQ4YEOI7.js.map → SignalCore-YSNZYBKJ.js.map} +1 -1
- package/dist/SitemapSync-2PTDBH5E.mjs +9 -0
- package/dist/{SitemapSync-MYSTLJOM.mjs.map → SitemapSync-2PTDBH5E.mjs.map} +1 -1
- package/dist/SitemapSync-3SFAI546.js +18 -0
- package/dist/{SitemapSync-3LUZWBTB.js.map → SitemapSync-3SFAI546.js.map} +1 -1
- package/dist/analytics/dispatch.d.ts +4 -4
- package/dist/analytics/index.js +15 -15
- package/dist/analytics/index.mjs +6 -6
- package/dist/{api-NTHZ6PAW.mjs → api-D745LGGU.mjs} +3 -3
- package/dist/api-D745LGGU.mjs.map +1 -0
- package/dist/{api-N5OLQXYN.js → api-XR5APCH3.js} +3 -3
- package/dist/api-XR5APCH3.js.map +1 -0
- package/dist/blog/index.js +20 -20
- package/dist/blog/index.mjs +3 -3
- package/dist/blog/server-ui.js +14 -14
- package/dist/blog/server-ui.mjs +2 -2
- package/dist/{chunk-WSUQ76LN.js → chunk-2CMSWJWC.js} +18 -18
- package/dist/{chunk-WSUQ76LN.js.map → chunk-2CMSWJWC.js.map} +1 -1
- package/dist/{chunk-QWLL3B6U.js → chunk-2OU4KBUN.js} +26 -23
- package/dist/chunk-2OU4KBUN.js.map +1 -0
- package/dist/{chunk-A2VLEORI.mjs → chunk-3B6CXGAK.mjs} +3 -3
- package/dist/{chunk-A2VLEORI.mjs.map → chunk-3B6CXGAK.mjs.map} +1 -1
- package/dist/{chunk-HMFFAUCD.js → chunk-3DWIYCQX.js} +2 -2
- package/dist/chunk-3DWIYCQX.js.map +1 -0
- package/dist/{chunk-3EPMDPWI.js → chunk-3SDMJMN2.js} +5 -5
- package/dist/{chunk-3EPMDPWI.js.map → chunk-3SDMJMN2.js.map} +1 -1
- package/dist/chunk-4U5NCKQY.mjs +39 -0
- package/dist/chunk-4U5NCKQY.mjs.map +1 -0
- package/dist/{chunk-I4PDSDVE.mjs → chunk-4XGACM7D.mjs} +3 -3
- package/dist/{chunk-I4PDSDVE.mjs.map → chunk-4XGACM7D.mjs.map} +1 -1
- package/dist/{chunk-HDDV63XJ.mjs → chunk-5TGAUWNO.mjs} +3 -3
- package/dist/{chunk-HDDV63XJ.mjs.map → chunk-5TGAUWNO.mjs.map} +1 -1
- package/dist/{chunk-RO55G3OA.mjs → chunk-64BOVMXG.mjs} +3 -3
- package/dist/{chunk-RO55G3OA.mjs.map → chunk-64BOVMXG.mjs.map} +1 -1
- package/dist/{chunk-JJ26JKBJ.mjs → chunk-7PPNXORV.mjs} +3 -3
- package/dist/{chunk-JJ26JKBJ.mjs.map → chunk-7PPNXORV.mjs.map} +1 -1
- package/dist/{chunk-LHYVFWHL.js → chunk-A3F5GRNJ.js} +8 -8
- package/dist/{chunk-LHYVFWHL.js.map → chunk-A3F5GRNJ.js.map} +1 -1
- package/dist/{chunk-SZHKNGNR.mjs → chunk-AEARU24Q.mjs} +40 -26
- package/dist/chunk-AEARU24Q.mjs.map +1 -0
- package/dist/{chunk-HBMF3M5F.js → chunk-BNOQXDPJ.js} +4 -4
- package/dist/{chunk-HBMF3M5F.js.map → chunk-BNOQXDPJ.js.map} +1 -1
- package/dist/{chunk-5737U6DI.js → chunk-CT5REGAK.js} +15 -15
- package/dist/{chunk-5737U6DI.js.map → chunk-CT5REGAK.js.map} +1 -1
- package/dist/{chunk-HH5KGXTK.mjs → chunk-DRLHQQBH.mjs} +4 -4
- package/dist/{chunk-HH5KGXTK.mjs.map → chunk-DRLHQQBH.mjs.map} +1 -1
- package/dist/{chunk-UOLY4NXK.mjs → chunk-DYULWKDC.mjs} +4 -4
- package/dist/{chunk-UOLY4NXK.mjs.map → chunk-DYULWKDC.mjs.map} +1 -1
- package/dist/chunk-ESP5RMB7.js +42 -0
- package/dist/chunk-ESP5RMB7.js.map +1 -0
- package/dist/{chunk-LF4L3ZP5.js → chunk-FF5N5D3D.js} +8 -8
- package/dist/{chunk-LF4L3ZP5.js.map → chunk-FF5N5D3D.js.map} +1 -1
- package/dist/{chunk-ITFZZ6YT.js → chunk-FYVLQ3OU.js} +3 -3
- package/dist/{chunk-ITFZZ6YT.js.map → chunk-FYVLQ3OU.js.map} +1 -1
- package/dist/{chunk-N6X76QUF.mjs → chunk-G5HUI4BO.mjs} +3 -3
- package/dist/{chunk-N6X76QUF.mjs.map → chunk-G5HUI4BO.mjs.map} +1 -1
- package/dist/chunk-G6WF4G3E.js +43 -0
- package/dist/chunk-G6WF4G3E.js.map +1 -0
- package/dist/{chunk-DQM5GR2P.mjs → chunk-HBI67P7Y.mjs} +4 -4
- package/dist/{chunk-DQM5GR2P.mjs.map → chunk-HBI67P7Y.mjs.map} +1 -1
- package/dist/{chunk-VA36CJRV.js → chunk-HFJQMIFM.js} +4 -4
- package/dist/{chunk-VA36CJRV.js.map → chunk-HFJQMIFM.js.map} +1 -1
- package/dist/{chunk-VWDT7H6L.js → chunk-HX3BRMOX.js} +3 -3
- package/dist/{chunk-VWDT7H6L.js.map → chunk-HX3BRMOX.js.map} +1 -1
- package/dist/{chunk-3TXX5KIN.js → chunk-JNRHTZL4.js} +2 -2
- package/dist/{chunk-3TXX5KIN.js.map → chunk-JNRHTZL4.js.map} +1 -1
- package/dist/{chunk-U53KN4SA.js → chunk-KAUUGRYB.js} +5 -5
- package/dist/{chunk-U53KN4SA.js.map → chunk-KAUUGRYB.js.map} +1 -1
- package/dist/{chunk-L2LJQIM3.js → chunk-KPKQKFT4.js} +11 -11
- package/dist/chunk-KPKQKFT4.js.map +1 -0
- package/dist/{chunk-ZLPXFV5Y.js → chunk-MCJF2KJ6.js} +5 -5
- package/dist/{chunk-ZLPXFV5Y.js.map → chunk-MCJF2KJ6.js.map} +1 -1
- package/dist/{chunk-URVGBWCP.js → chunk-MNYM2XU4.js} +4 -4
- package/dist/{chunk-URVGBWCP.js.map → chunk-MNYM2XU4.js.map} +1 -1
- package/dist/{chunk-ACTLQ2RH.mjs → chunk-MU7IEPDG.mjs} +4 -4
- package/dist/chunk-MU7IEPDG.mjs.map +1 -0
- package/dist/chunk-NSWO43XW.mjs +39 -0
- package/dist/chunk-NSWO43XW.mjs.map +1 -0
- package/dist/{chunk-KMGGAL2X.js → chunk-NZSFOZJV.js} +40 -26
- package/dist/chunk-NZSFOZJV.js.map +1 -0
- package/dist/{chunk-MIFP6QEQ.mjs → chunk-OFSA7LUH.mjs} +4 -4
- package/dist/{chunk-MIFP6QEQ.mjs.map → chunk-OFSA7LUH.mjs.map} +1 -1
- package/dist/{chunk-2KIGFOPM.js → chunk-PIPLBBDH.js} +8 -8
- package/dist/{chunk-2KIGFOPM.js.map → chunk-PIPLBBDH.js.map} +1 -1
- package/dist/{chunk-7PLH3H3W.js → chunk-Q26VZNM2.js} +3 -3
- package/dist/{chunk-7PLH3H3W.js.map → chunk-Q26VZNM2.js.map} +1 -1
- package/dist/{chunk-GQ6CUOLA.js → chunk-QEGUI2Q2.js} +15 -15
- package/dist/{chunk-GQ6CUOLA.js.map → chunk-QEGUI2Q2.js.map} +1 -1
- package/dist/{chunk-LBS4PRC7.js → chunk-QFNSM77X.js} +3 -3
- package/dist/{chunk-LBS4PRC7.js.map → chunk-QFNSM77X.js.map} +1 -1
- package/dist/{chunk-MTANHZKJ.mjs → chunk-R4MX6EOM.mjs} +7 -7
- package/dist/{chunk-MTANHZKJ.mjs.map → chunk-R4MX6EOM.mjs.map} +1 -1
- package/dist/{chunk-LIYSLNEK.mjs → chunk-RMMHWSPP.mjs} +3 -3
- package/dist/{chunk-LIYSLNEK.mjs.map → chunk-RMMHWSPP.mjs.map} +1 -1
- package/dist/{chunk-B4BFQSSS.mjs → chunk-RU54J2PY.mjs} +4 -4
- package/dist/chunk-RU54J2PY.mjs.map +1 -0
- package/dist/{chunk-SJXGIUHP.mjs → chunk-RZUZMUTN.mjs} +9 -8
- package/dist/chunk-RZUZMUTN.mjs.map +1 -0
- package/dist/{chunk-N6AVWMIB.mjs → chunk-S6FEC6UT.mjs} +9 -5
- package/dist/chunk-S6FEC6UT.mjs.map +1 -0
- package/dist/{chunk-3DPXOZAU.mjs → chunk-SHLWA6JY.mjs} +2 -2
- package/dist/chunk-SHLWA6JY.mjs.map +1 -0
- package/dist/{chunk-7IPSQ5JR.js → chunk-SQVYLIIN.js} +11 -7
- package/dist/chunk-SQVYLIIN.js.map +1 -0
- package/dist/chunk-SUZ3ZLB2.js +8 -0
- package/dist/{chunk-UTOHMK52.js.map → chunk-SUZ3ZLB2.js.map} +1 -1
- package/dist/{chunk-7Y2UPFSY.mjs → chunk-TALEV3IH.mjs} +3 -3
- package/dist/{chunk-7Y2UPFSY.mjs.map → chunk-TALEV3IH.mjs.map} +1 -1
- package/dist/{chunk-UOTXSWKZ.mjs → chunk-TP7H6BSK.mjs} +2 -2
- package/dist/{chunk-UOTXSWKZ.mjs.map → chunk-TP7H6BSK.mjs.map} +1 -1
- package/dist/{chunk-XWF7QPIP.mjs → chunk-TX2QQ7IX.mjs} +3 -3
- package/dist/{chunk-XWF7QPIP.mjs.map → chunk-TX2QQ7IX.mjs.map} +1 -1
- package/dist/{chunk-AWFZIXCT.js → chunk-UNPEMSLK.js} +12 -11
- package/dist/chunk-UNPEMSLK.js.map +1 -0
- package/dist/{chunk-NUH245XK.mjs → chunk-UZL2QU2V.mjs} +16 -13
- package/dist/chunk-UZL2QU2V.mjs.map +1 -0
- package/dist/{chunk-G5I3XEQS.mjs → chunk-V6NOM7PJ.mjs} +3 -3
- package/dist/{chunk-G5I3XEQS.mjs.map → chunk-V6NOM7PJ.mjs.map} +1 -1
- package/dist/{chunk-ZY5AVC4P.js → chunk-VAS3LH5W.js} +10 -10
- package/dist/{chunk-ZY5AVC4P.js.map → chunk-VAS3LH5W.js.map} +1 -1
- package/dist/{chunk-KQ3VAOAF.mjs → chunk-VYHRAICF.mjs} +4 -4
- package/dist/{chunk-KQ3VAOAF.mjs.map → chunk-VYHRAICF.mjs.map} +1 -1
- package/dist/{chunk-LUYUFILE.js → chunk-W5NVW23S.js} +4 -4
- package/dist/{chunk-LUYUFILE.js.map → chunk-W5NVW23S.js.map} +1 -1
- package/dist/chunk-WDBCXRTT.mjs +6 -0
- package/dist/{chunk-7U7C6XRI.mjs.map → chunk-WDBCXRTT.mjs.map} +1 -1
- package/dist/{chunk-6CUBSQMD.mjs → chunk-WIZRCI6J.mjs} +3 -3
- package/dist/{chunk-6CUBSQMD.mjs.map → chunk-WIZRCI6J.mjs.map} +1 -1
- package/dist/{chunk-EBMPXFOP.mjs → chunk-X2XFLYZ3.mjs} +3 -3
- package/dist/{chunk-EBMPXFOP.mjs.map → chunk-X2XFLYZ3.mjs.map} +1 -1
- package/dist/{chunk-B36PTS7B.mjs → chunk-XQYC4KMH.mjs} +3 -3
- package/dist/{chunk-B36PTS7B.mjs.map → chunk-XQYC4KMH.mjs.map} +1 -1
- package/dist/{chunk-DPDV5Z4G.js → chunk-YNC5D3FT.js} +12 -12
- package/dist/{chunk-DPDV5Z4G.js.map → chunk-YNC5D3FT.js.map} +1 -1
- package/dist/{chunk-4WQB2ORG.js → chunk-YYAFHIY7.js} +15 -15
- package/dist/chunk-YYAFHIY7.js.map +1 -0
- package/dist/{chunk-OXZYP32B.js → chunk-Z6S4MWSR.js} +7 -7
- package/dist/{chunk-OXZYP32B.js.map → chunk-Z6S4MWSR.js.map} +1 -1
- package/dist/{chunk-ZDFVYSKK.mjs → chunk-ZRQFG3L6.mjs} +5 -5
- package/dist/{chunk-ZDFVYSKK.mjs.map → chunk-ZRQFG3L6.mjs.map} +1 -1
- package/dist/cli/agent/checks.d.ts.map +1 -1
- package/dist/cli/agent/ssr-bailout.d.ts +27 -0
- package/dist/cli/agent/ssr-bailout.d.ts.map +1 -0
- package/dist/cli/agent/ssr-bailout.test.d.ts +2 -0
- package/dist/cli/agent/ssr-bailout.test.d.ts.map +1 -0
- package/dist/cli/codemod/transforms.d.ts.map +1 -1
- package/dist/cli/index.js +38 -51
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.mjs +36 -49
- package/dist/cli/index.mjs.map +1 -1
- package/dist/cli/migrator/index.d.ts.map +1 -1
- package/dist/client/index.d.ts +1 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +20 -7
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +5 -4
- package/dist/client/index.mjs.map +1 -1
- package/dist/cms/index.js.map +1 -1
- package/dist/cms/index.mjs.map +1 -1
- package/dist/cms/sanity-image.d.ts +1 -1
- package/dist/commerce/index.js +58 -58
- package/dist/commerce/index.mjs +7 -7
- package/dist/engage/ChatWidget.d.ts.map +1 -1
- package/dist/engage/EngageWidget.d.ts +3 -4
- package/dist/engage/EngageWidget.d.ts.map +1 -1
- package/dist/engage/chat-launcher.test.d.ts +2 -0
- package/dist/engage/chat-launcher.test.d.ts.map +1 -0
- package/dist/engage/index.js +12 -10
- package/dist/engage/index.js.map +1 -1
- package/dist/engage/index.mjs +9 -7
- package/dist/engage/index.mjs.map +1 -1
- package/dist/engage/launcher-placement.d.ts +56 -0
- package/dist/engage/launcher-placement.d.ts.map +1 -0
- package/dist/engage/launcher-placement.test.d.ts +2 -0
- package/dist/engage/launcher-placement.test.d.ts.map +1 -0
- package/dist/engage/types.d.ts +41 -7
- package/dist/engage/types.d.ts.map +1 -1
- package/dist/fleet/index.js +8 -8
- package/dist/fleet/index.mjs +4 -4
- package/dist/forms/index.js +16 -16
- package/dist/forms/index.mjs +9 -9
- package/dist/forms/server.js +10 -10
- package/dist/forms/server.mjs +8 -8
- package/dist/forms/static.js +7 -7
- package/dist/forms/static.mjs +6 -6
- package/dist/images/ManagedImage.d.ts.map +1 -1
- package/dist/images/index.js +11 -11
- package/dist/images/index.mjs +4 -4
- package/dist/index.js +65 -65
- package/dist/index.mjs +11 -11
- package/dist/layout/SiteKitClientProviders.d.ts.map +1 -1
- package/dist/layout/client.d.ts.map +1 -1
- package/dist/layout/client.js +8 -8
- package/dist/layout/client.mjs +7 -7
- package/dist/layout/index.js +10 -10
- package/dist/layout/index.mjs +8 -8
- package/dist/layout/types.d.ts +7 -3
- package/dist/layout/types.d.ts.map +1 -1
- package/dist/llms/generateLLMsTxt.d.ts.map +1 -1
- package/dist/llms/index.js +12 -12
- package/dist/llms/index.mjs +2 -2
- package/dist/llms/types.d.ts +7 -1
- package/dist/llms/types.d.ts.map +1 -1
- package/dist/maps/index.js +5 -5
- package/dist/maps/index.mjs +3 -3
- package/dist/mcp/WebMcpTools.d.ts +5 -2
- package/dist/mcp/WebMcpTools.d.ts.map +1 -1
- package/dist/mcp/client.js.map +1 -1
- package/dist/mcp/client.mjs.map +1 -1
- package/dist/search/index.js +4 -4
- package/dist/search/index.mjs +3 -3
- package/dist/seo/LocationPageContent.d.ts +6 -5
- package/dist/seo/LocationPageContent.d.ts.map +1 -1
- package/dist/seo/api.d.ts +4 -5
- package/dist/seo/api.d.ts.map +1 -1
- package/dist/seo/client.js +5 -5
- package/dist/seo/client.mjs +4 -4
- package/dist/seo/index.js +42 -42
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/index.mjs +8 -8
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo/routing.d.ts +9 -23
- package/dist/seo/routing.d.ts.map +1 -1
- package/dist/seo/server-api.d.ts +11 -5
- package/dist/seo/server-api.d.ts.map +1 -1
- package/dist/seo/server.js +18 -18
- package/dist/seo/server.mjs +2 -2
- package/dist/server/index.js +3 -3
- package/dist/server/index.mjs +2 -2
- package/dist/{server-api-HW4PL2L2.mjs → server-api-RG3ZL3DV.mjs} +3 -3
- package/dist/{server-api-HW4PL2L2.mjs.map → server-api-RG3ZL3DV.mjs.map} +1 -1
- package/dist/{server-api-DB2SIUP4.js → server-api-RYJQAUGO.js} +21 -21
- package/dist/{server-api-DB2SIUP4.js.map → server-api-RYJQAUGO.js.map} +1 -1
- package/dist/shared/version.d.ts +1 -1
- package/dist/shared/visual-viewport-gap.d.ts +52 -0
- package/dist/shared/visual-viewport-gap.d.ts.map +1 -0
- package/dist/shared/visual-viewport-gap.test.d.ts +2 -0
- package/dist/shared/visual-viewport-gap.test.d.ts.map +1 -0
- package/dist/signal/index.js +11 -11
- package/dist/signal/index.mjs +2 -2
- package/dist/sitemap/index.js +2 -2
- package/dist/sitemap/index.mjs +1 -1
- package/dist/sync/index.js +17 -17
- package/dist/sync/index.mjs +4 -4
- package/dist/types.d.ts +9 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/site-kit/SKILL.md +8 -3
- package/dist/AnalyticsProvider-2XIOMRCN.mjs +0 -11
- package/dist/AnalyticsProvider-Y2P2BPOI.js +0 -32
- package/dist/ChatWidget-2OFWPCWF.js +0 -20
- package/dist/ChatWidget-4AOGHYXQ.mjs +0 -11
- package/dist/EngageWidget-SFO2XRNG.mjs +0 -9
- package/dist/EngageWidget-T4KAAD3G.js +0 -18
- package/dist/ManagedForm-5G37EDJT.mjs +0 -14
- package/dist/ManagedForm-JCHGBBQW.js +0 -23
- package/dist/SitemapSync-3LUZWBTB.js +0 -18
- package/dist/SitemapSync-MYSTLJOM.mjs +0 -9
- package/dist/api-N5OLQXYN.js.map +0 -1
- package/dist/api-NTHZ6PAW.mjs.map +0 -1
- package/dist/chunk-3DPXOZAU.mjs.map +0 -1
- package/dist/chunk-4WQB2ORG.js.map +0 -1
- package/dist/chunk-7IPSQ5JR.js.map +0 -1
- package/dist/chunk-7U7C6XRI.mjs +0 -6
- package/dist/chunk-ACTLQ2RH.mjs.map +0 -1
- package/dist/chunk-AWFZIXCT.js.map +0 -1
- package/dist/chunk-B4BFQSSS.mjs.map +0 -1
- package/dist/chunk-HMFFAUCD.js.map +0 -1
- package/dist/chunk-KMGGAL2X.js.map +0 -1
- package/dist/chunk-L2LJQIM3.js.map +0 -1
- package/dist/chunk-N6AVWMIB.mjs.map +0 -1
- package/dist/chunk-NUH245XK.mjs.map +0 -1
- package/dist/chunk-QWLL3B6U.js.map +0 -1
- package/dist/chunk-SJXGIUHP.mjs.map +0 -1
- package/dist/chunk-SZHKNGNR.mjs.map +0 -1
- package/dist/chunk-UTOHMK52.js +0 -8
package/dist/llms/types.d.ts
CHANGED
|
@@ -132,7 +132,13 @@ export interface GenerateLLMSTxtOptions {
|
|
|
132
132
|
content: string;
|
|
133
133
|
}>;
|
|
134
134
|
/**
|
|
135
|
-
* Paths (e.g. `/privacy
|
|
135
|
+
* Paths (e.g. `/privacy`) to demote to `## Optional` per llmstxt.org, the
|
|
136
|
+
* section a short-context parser may skip. Matching pages MOVE there: they
|
|
137
|
+
* leave `## Site Pages` (before `maxPages` is applied, so each one frees an
|
|
138
|
+
* index slot) and keep the URL and note they had in the index. Leading and
|
|
139
|
+
* trailing slashes are ignored when matching. A path with no matching page is
|
|
140
|
+
* still listed under Optional. Needs a resolvable base URL; without one the
|
|
141
|
+
* section is skipped and the pages stay in `## Site Pages`.
|
|
136
142
|
*/
|
|
137
143
|
optionalPagePaths?: string[];
|
|
138
144
|
/** When true, append `## Full context` with a link to llms-full.txt */
|
package/dist/llms/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llms/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llms/types.ts"],"names":[],"mappings":"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"}
|
package/dist/maps/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('../chunk-
|
|
6
|
-
require('../chunk-
|
|
4
|
+
var chunkQEGUI2Q2_js = require('../chunk-QEGUI2Q2.js');
|
|
5
|
+
require('../chunk-HFJQMIFM.js');
|
|
6
|
+
require('../chunk-SUZ3ZLB2.js');
|
|
7
7
|
require('../chunk-SNAQBZPT.js');
|
|
8
8
|
var react = require('react');
|
|
9
9
|
var reactGoogleMaps = require('@vis.gl/react-google-maps');
|
|
@@ -141,7 +141,7 @@ async function fetchMapsConfig() {
|
|
|
141
141
|
const { apiUrl, apiKey } = getApiConfig();
|
|
142
142
|
if (apiKey) {
|
|
143
143
|
try {
|
|
144
|
-
const res = await
|
|
144
|
+
const res = await chunkQEGUI2Q2_js.sonorFetch(
|
|
145
145
|
`${apiUrl}/api/public/maps/config`,
|
|
146
146
|
{ headers: { "Content-Type": "application/json" } },
|
|
147
147
|
{ apiKey }
|
|
@@ -181,7 +181,7 @@ async function fetchNearbyPlaces(params) {
|
|
|
181
181
|
});
|
|
182
182
|
if (params.radius) searchParams.set("radius", String(params.radius));
|
|
183
183
|
if (params.limit) searchParams.set("limit", String(params.limit));
|
|
184
|
-
const res = await
|
|
184
|
+
const res = await chunkQEGUI2Q2_js.sonorFetch(
|
|
185
185
|
`${apiUrl}/api/public/maps/nearby-places?${searchParams}`,
|
|
186
186
|
{ headers: { "Content-Type": "application/json" } },
|
|
187
187
|
{ apiKey }
|
package/dist/maps/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { sonorFetch } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
2
|
+
import { sonorFetch } from '../chunk-OFSA7LUH.mjs';
|
|
3
|
+
import '../chunk-4XGACM7D.mjs';
|
|
4
|
+
import '../chunk-WDBCXRTT.mjs';
|
|
5
5
|
import '../chunk-BEXTDHO4.mjs';
|
|
6
6
|
import { useState, useCallback, useEffect } from 'react';
|
|
7
7
|
import { APIProvider, Map as Map$1, AdvancedMarker, Pin, InfoWindow } from '@vis.gl/react-google-maps';
|
|
@@ -52,9 +52,12 @@ export interface WebMcpToolsProps {
|
|
|
52
52
|
* @example
|
|
53
53
|
* ```tsx
|
|
54
54
|
* // app/layout.tsx
|
|
55
|
-
* <SiteKitLayout
|
|
56
|
-
* <WebMcpTools
|
|
55
|
+
* <SiteKitLayout>{children}</SiteKitLayout>
|
|
56
|
+
* <WebMcpTools endpoint="/api/mcp" />
|
|
57
57
|
* ```
|
|
58
|
+
*
|
|
59
|
+
* Prefer `endpoint` (discovery) over a `tools` list from a server component:
|
|
60
|
+
* descriptors passed as props land in every page's RSC payload.
|
|
58
61
|
*/
|
|
59
62
|
export declare function WebMcpTools({ tools, localTools, endpoint, defer, discover, }: WebMcpToolsProps): null;
|
|
60
63
|
//# sourceMappingURL=WebMcpTools.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebMcpTools.d.ts","sourceRoot":"","sources":["../../src/mcp/WebMcpTools.tsx"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,SAAS,CAAA;AA6B9D,4DAA4D;AAC5D,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAMD,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,gBAAgB,CAAA;CAC9B;AAED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,yDAAyD;IACzD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;CACvE;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAA;IAC9B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAMD
|
|
1
|
+
{"version":3,"file":"WebMcpTools.d.ts","sourceRoot":"","sources":["../../src/mcp/WebMcpTools.tsx"],"names":[],"mappings":"AAiCA,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,SAAS,CAAA;AA6B9D,4DAA4D;AAC5D,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAMD,2EAA2E;AAC3E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,gBAAgB,CAAA;CAC9B;AAED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB;IAC3D,yDAAyD;IACzD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAA;CACvE;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;;;;;OASG;IACH,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAA;IAC9B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,eAAe,EAAE,CAAA;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IACf;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAU,EACV,UAAe,EACf,QAAqB,EACrB,KAAY,EACZ,QAAe,GAChB,EAAE,gBAAgB,QAqIlB"}
|
package/dist/mcp/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mcp/WebMcpTools.tsx"],"names":["useDeferredActivation","useEffect"],"mappings":"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","file":"client.js","sourcesContent":["'use client'\n\n/**\n * @sonordev/site-kit/mcp — WebMCP in-page tool registration\n *\n * The browser half of WebMCP (W3C Web Machine Learning CG). When an agent is\n * driving the page — a browser-integrated assistant, an extension, a\n * headless-Chrome operator — it does not fetch our `.well-known` card and open\n * a network connection. It looks for tools registered on the *document*.\n *\n * `document.modelContext.registerTool()` is the current shape in the explainer;\n * earlier drafts and some flagged builds put the same object on `navigator`,\n * and an even earlier one took a whole tool array via `provideContext()`. All\n * three are probed, because the spec is a live draft and a site that only\n * knows one shape silently exposes nothing in the others.\n *\n * ── Why the handlers are proxied ──────────────────────────────────────────\n * Tools are registered here as thin wrappers that POST `tools/call` to this\n * site's own MCP endpoint. That is deliberate:\n *\n * - one implementation. The tool an agent calls in-page and the tool it\n * calls over HTTP run the SAME server-side handler, so they cannot drift.\n * - no secrets in the bundle. Handlers reach Sonor with `SONOR_API_KEY`.\n * Registering real handlers client-side would drag that key into a\n * `'use client'` graph, which is exactly how a raw `sonor_` key once ended\n * up in a public chunk of an upforge build (see build-entries.ts).\n *\n * Tools that genuinely need live DOM state (reading what's on screen, filling\n * a form the user is looking at) are passed as `localTools` and run in-page.\n */\n\nimport { useEffect } from 'react'\nimport { useDeferredActivation } from '../shared/defer'\nimport type { JsonSchemaObject, McpToolResult } from './types'\n\n// ============================================\n// The WebMCP surface, as far as we rely on it\n// ============================================\n\ninterface WebMcpToolDefinition {\n name: string\n description: string\n inputSchema: JsonSchemaObject\n execute: (args: Record<string, unknown>) => Promise<McpToolResult>\n}\n\ninterface ModelContextLike {\n registerTool?: (\n tool: WebMcpToolDefinition,\n options?: { signal?: AbortSignal },\n ) => Promise<unknown> | unknown\n provideContext?: (context: { tools: WebMcpToolDefinition[] }) => Promise<unknown> | unknown\n}\n\nfunction getModelContext(): ModelContextLike | null {\n if (typeof window === 'undefined') return null\n const doc = document as unknown as { modelContext?: ModelContextLike }\n if (doc.modelContext) return doc.modelContext\n const nav = navigator as unknown as { modelContext?: ModelContextLike }\n return nav.modelContext ?? null\n}\n\n/** True when the visiting browser exposes WebMCP at all. */\nexport function isWebMcpAvailable(): boolean {\n return getModelContext() !== null\n}\n\n// ============================================\n// Props\n// ============================================\n\n/** A tool as it crosses the server→client boundary: JSON, no functions. */\nexport interface WebMcpToolDescriptor {\n name: string\n title?: string\n description: string\n inputSchema: JsonSchemaObject\n}\n\nexport interface WebMcpLocalTool extends WebMcpToolDescriptor {\n /** Runs in the browser. Use for DOM-aware tools only. */\n execute: (args: Record<string, unknown>) => Promise<unknown> | unknown\n}\n\nexport interface WebMcpToolsProps {\n /**\n * Proxied tools — executed server-side via the MCP endpoint.\n *\n * Usually omit this. Passing descriptors from a server component sends the\n * whole tool catalog through the RSC payload of EVERY page, costing every\n * human visitor several KB for a capability only an agent uses. Leave it\n * empty and the component fetches `tools/list` instead — but only after\n * confirming the browser actually exposes WebMCP, so the fetch never\n * happens for ordinary visitors. Pass descriptors only to pin a subset.\n */\n tools?: WebMcpToolDescriptor[]\n /** Tools whose handler runs in the browser. */\n localTools?: WebMcpLocalTool[]\n /** MCP endpoint on this origin (default `/api/mcp`). */\n endpoint?: string\n /**\n * Wait for the page to go quiet before registering (default true).\n *\n * Registration is not user-visible and must never compete with hydration.\n * An agent arriving at the page polls or listens for `toolchange`, so a\n * couple of hundred milliseconds costs nothing; a blocked LCP costs a lot.\n */\n defer?: boolean\n /**\n * Fetch the catalog from the endpoint's `tools/list` when no `tools` are\n * passed (default true). The fetch is gated on WebMCP being present.\n */\n discover?: boolean\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Register this site's MCP tools with the visiting browser's agent.\n *\n * Renders nothing. Mount it as a CHILDLESS sibling in the layout — never as a\n * wrapper around `{children}`, which would de-opt the whole route to client\n * rendering (the cardinal rule in the root CLAUDE.md).\n *\n * @example\n * ```tsx\n * // app/layout.tsx\n * <SiteKitLayout analytics={false}>{children}</SiteKitLayout>\n * <WebMcpTools tools={MCP_TOOL_DESCRIPTORS} />\n * ```\n */\nexport function WebMcpTools({\n tools = [],\n localTools = [],\n endpoint = '/api/mcp',\n defer = true,\n discover = true,\n}: WebMcpToolsProps) {\n const ready = useDeferredActivation(defer)\n\n useEffect(() => {\n if (!ready) return\n // Gate EVERYTHING on WebMCP being present. A browser without it does no\n // work and issues no request — which is every human visitor today.\n const modelContext = getModelContext()\n if (!modelContext) return\n\n const controller = new AbortController()\n\n const callRemote = async (\n name: string,\n args: Record<string, unknown>,\n ): Promise<McpToolResult> => {\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n 'Mcp-Method': 'tools/call',\n 'Mcp-Name': name,\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: `webmcp-${name}`,\n method: 'tools/call',\n params: { name, arguments: args },\n }),\n signal: controller.signal,\n })\n const payload = (await response.json()) as {\n result?: McpToolResult\n error?: { message?: string }\n }\n if (payload.error) {\n return {\n content: [{ type: 'text', text: payload.error.message ?? 'Tool call failed.' }],\n isError: true,\n }\n }\n return payload.result ?? { content: [{ type: 'text', text: '(no result)' }] }\n } catch (error) {\n if (controller.signal.aborted) throw error\n const detail = error instanceof Error ? error.message : String(error)\n return { content: [{ type: 'text', text: `Tool call failed: ${detail}` }], isError: true }\n }\n }\n\n const normalize = (value: unknown): McpToolResult => {\n if (value && typeof value === 'object' && Array.isArray((value as McpToolResult).content)) {\n return value as McpToolResult\n }\n return {\n content: [\n { type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) },\n ],\n structuredContent: value,\n }\n }\n\n const proxied = (list: WebMcpToolDescriptor[]): WebMcpToolDefinition[] =>\n list.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n execute: (args: Record<string, unknown>) => callRemote(tool.name, args ?? {}),\n }))\n\n const local = localTools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n execute: async (args: Record<string, unknown>) => normalize(await tool.execute(args ?? {})),\n }))\n\n /** Ask our own endpoint what it serves, so the two can't disagree. */\n const listRemoteTools = async (): Promise<WebMcpToolDescriptor[]> => {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n 'Mcp-Method': 'tools/list',\n },\n body: JSON.stringify({ jsonrpc: '2.0', id: 'webmcp-list', method: 'tools/list' }),\n signal: controller.signal,\n })\n const payload = (await response.json()) as {\n result?: { tools?: WebMcpToolDescriptor[] }\n }\n return payload.result?.tools ?? []\n }\n\n let cancelled = false\n void (async () => {\n try {\n const discovered =\n tools.length === 0 && discover ? await listRemoteTools() : tools\n if (cancelled) return\n\n const definitions = [...proxied(discovered), ...local]\n if (definitions.length === 0) return\n\n if (typeof modelContext.registerTool === 'function') {\n for (const definition of definitions) {\n if (cancelled) return\n await modelContext.registerTool(definition, { signal: controller.signal })\n }\n } else if (typeof modelContext.provideContext === 'function') {\n await modelContext.provideContext({ tools: definitions })\n }\n } catch (error) {\n // A draft API that rejects is not a site error. Stay silent in\n // production so a spec change never shows up as console noise on a\n // marketing page.\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[site-kit/mcp] WebMCP registration failed:', error)\n }\n }\n })()\n\n return () => {\n cancelled = true\n // Aborting the signal is how WebMCP unregisters — important on client\n // navigation, or the previous page's tools linger on the document.\n controller.abort()\n }\n }, [ready, tools, localTools, endpoint, discover])\n\n return null\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/mcp/WebMcpTools.tsx"],"names":["useDeferredActivation","useEffect"],"mappings":";;;;;;AAsDA,SAAS,eAAA,GAA2C;AAClD,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA;AAC1C,EAAA,MAAM,GAAA,GAAM,QAAA;AACZ,EAAA,IAAI,GAAA,CAAI,YAAA,EAAc,OAAO,GAAA,CAAI,YAAA;AACjC,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,OAAO,IAAI,YAAA,IAAgB,IAAA;AAC7B;AAGO,SAAS,iBAAA,GAA6B;AAC3C,EAAA,OAAO,iBAAgB,KAAM,IAAA;AAC/B;AAuEO,SAAS,WAAA,CAAY;AAAA,EAC1B,QAAQ,EAAC;AAAA,EACT,aAAa,EAAC;AAAA,EACd,QAAA,GAAW,UAAA;AAAA,EACX,KAAA,GAAQ,IAAA;AAAA,EACR,QAAA,GAAW;AACb,CAAA,EAAqB;AACnB,EAAA,MAAM,KAAA,GAAQA,uCAAsB,KAAK,CAAA;AAEzC,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,KAAA,EAAO;AAGZ,IAAA,MAAM,eAAe,eAAA,EAAgB;AACrC,IAAA,IAAI,CAAC,YAAA,EAAc;AAEnB,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AAEvC,IAAA,MAAM,UAAA,GAAa,OACjB,IAAA,EACA,IAAA,KAC2B;AAC3B,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAA,EAAU;AAAA,UACrC,MAAA,EAAQ,MAAA;AAAA,UACR,OAAA,EAAS;AAAA,YACP,cAAA,EAAgB,kBAAA;AAAA,YAChB,MAAA,EAAQ,qCAAA;AAAA,YACR,YAAA,EAAc,YAAA;AAAA,YACd,UAAA,EAAY;AAAA,WACd;AAAA,UACA,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,YACnB,OAAA,EAAS,KAAA;AAAA,YACT,EAAA,EAAI,UAAU,IAAI,CAAA,CAAA;AAAA,YAClB,MAAA,EAAQ,YAAA;AAAA,YACR,MAAA,EAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA;AAAK,WACjC,CAAA;AAAA,UACD,QAAQ,UAAA,CAAW;AAAA,SACpB,CAAA;AACD,QAAA,MAAM,OAAA,GAAW,MAAM,QAAA,CAAS,IAAA,EAAK;AAIrC,QAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,UAAA,OAAO;AAAA,YACL,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,OAAA,CAAQ,KAAA,CAAM,OAAA,IAAW,mBAAA,EAAqB,CAAA;AAAA,YAC9E,OAAA,EAAS;AAAA,WACX;AAAA,QACF;AACA,QAAA,OAAO,OAAA,CAAQ,MAAA,IAAU,EAAE,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,aAAA,EAAe,CAAA,EAAE;AAAA,MAC9E,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,UAAA,CAAW,MAAA,CAAO,OAAA,EAAS,MAAM,KAAA;AACrC,QAAA,MAAM,SAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACpE,QAAA,OAAO,EAAE,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,CAAA,kBAAA,EAAqB,MAAM,CAAA,CAAA,EAAI,CAAA,EAAG,SAAS,IAAA,EAAK;AAAA,MAC3F;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkC;AACnD,MAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,MAAM,OAAA,CAAS,KAAA,CAAwB,OAAO,CAAA,EAAG;AACzF,QAAA,OAAO,KAAA;AAAA,MACT;AACA,MAAA,OAAO;AAAA,QACL,OAAA,EAAS;AAAA,UACP,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,IAAA,EAAM,CAAC,CAAA;AAAE,SAC3F;AAAA,QACA,iBAAA,EAAmB;AAAA,OACrB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,UAAU,CAAC,IAAA,KACf,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MAClB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,OAAA,EAAS,CAAC,IAAA,KAAkC,UAAA,CAAW,KAAK,IAAA,EAAM,IAAA,IAAQ,EAAE;AAAA,KAC9E,CAAE,CAAA;AAEJ,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,MACtC,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,OAAA,EAAS,OAAO,IAAA,KAAkC,SAAA,CAAU,MAAM,KAAK,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAC;AAAA,KAC5F,CAAE,CAAA;AAGF,IAAA,MAAM,kBAAkB,YAA6C;AACnE,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,QAAA,EAAU;AAAA,QACrC,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,MAAA,EAAQ,qCAAA;AAAA,UACR,YAAA,EAAc;AAAA,SAChB;AAAA,QACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,OAAO,EAAA,EAAI,aAAA,EAAe,MAAA,EAAQ,YAAA,EAAc,CAAA;AAAA,QAChF,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AACD,MAAA,MAAM,OAAA,GAAW,MAAM,QAAA,CAAS,IAAA,EAAK;AAGrC,MAAA,OAAO,OAAA,CAAQ,MAAA,EAAQ,KAAA,IAAS,EAAC;AAAA,IACnC,CAAA;AAEA,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,KAAA,CAAM,YAAY;AAChB,MAAA,IAAI;AACF,QAAA,MAAM,aACJ,KAAA,CAAM,MAAA,KAAW,KAAK,QAAA,GAAW,MAAM,iBAAgB,GAAI,KAAA;AAC7D,QAAA,IAAI,SAAA,EAAW;AAEf,QAAA,MAAM,cAAc,CAAC,GAAG,QAAQ,UAAU,CAAA,EAAG,GAAG,KAAK,CAAA;AACrD,QAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAE9B,QAAA,IAAI,OAAO,YAAA,CAAa,YAAA,KAAiB,UAAA,EAAY;AACnD,UAAA,KAAA,MAAW,cAAc,WAAA,EAAa;AACpC,YAAA,IAAI,SAAA,EAAW;AACf,YAAA,MAAM,aAAa,YAAA,CAAa,UAAA,EAAY,EAAE,MAAA,EAAQ,UAAA,CAAW,QAAQ,CAAA;AAAA,UAC3E;AAAA,QACF,CAAA,MAAA,IAAW,OAAO,YAAA,CAAa,cAAA,KAAmB,UAAA,EAAY;AAC5D,UAAA,MAAM,YAAA,CAAa,cAAA,CAAe,EAAE,KAAA,EAAO,aAAa,CAAA;AAAA,QAC1D;AAAA,MACF,SAAS,KAAA,EAAO;AAId,QAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,UAAA,OAAA,CAAQ,IAAA,CAAK,8CAA8C,KAAK,CAAA;AAAA,QAClE;AAAA,MACF;AAAA,IACF,CAAA,GAAG;AAEH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAGZ,MAAA,UAAA,CAAW,KAAA,EAAM;AAAA,IACnB,CAAA;AAAA,EACF,GAAG,CAAC,KAAA,EAAO,OAAO,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAC,CAAA;AAEjD,EAAA,OAAO,IAAA;AACT","file":"client.js","sourcesContent":["'use client'\n\n/**\n * @sonordev/site-kit/mcp — WebMCP in-page tool registration\n *\n * The browser half of WebMCP (W3C Web Machine Learning CG). When an agent is\n * driving the page — a browser-integrated assistant, an extension, a\n * headless-Chrome operator — it does not fetch our `.well-known` card and open\n * a network connection. It looks for tools registered on the *document*.\n *\n * `document.modelContext.registerTool()` is the current shape in the explainer;\n * earlier drafts and some flagged builds put the same object on `navigator`,\n * and an even earlier one took a whole tool array via `provideContext()`. All\n * three are probed, because the spec is a live draft and a site that only\n * knows one shape silently exposes nothing in the others.\n *\n * ── Why the handlers are proxied ──────────────────────────────────────────\n * Tools are registered here as thin wrappers that POST `tools/call` to this\n * site's own MCP endpoint. That is deliberate:\n *\n * - one implementation. The tool an agent calls in-page and the tool it\n * calls over HTTP run the SAME server-side handler, so they cannot drift.\n * - no secrets in the bundle. Handlers reach Sonor with `SONOR_API_KEY`.\n * Registering real handlers client-side would drag that key into a\n * `'use client'` graph, which is exactly how a raw `sonor_` key once ended\n * up in a public chunk of an upforge build (see build-entries.ts).\n *\n * Tools that genuinely need live DOM state (reading what's on screen, filling\n * a form the user is looking at) are passed as `localTools` and run in-page.\n */\n\nimport { useEffect } from 'react'\nimport { useDeferredActivation } from '../shared/defer'\nimport type { JsonSchemaObject, McpToolResult } from './types'\n\n// ============================================\n// The WebMCP surface, as far as we rely on it\n// ============================================\n\ninterface WebMcpToolDefinition {\n name: string\n description: string\n inputSchema: JsonSchemaObject\n execute: (args: Record<string, unknown>) => Promise<McpToolResult>\n}\n\ninterface ModelContextLike {\n registerTool?: (\n tool: WebMcpToolDefinition,\n options?: { signal?: AbortSignal },\n ) => Promise<unknown> | unknown\n provideContext?: (context: { tools: WebMcpToolDefinition[] }) => Promise<unknown> | unknown\n}\n\nfunction getModelContext(): ModelContextLike | null {\n if (typeof window === 'undefined') return null\n const doc = document as unknown as { modelContext?: ModelContextLike }\n if (doc.modelContext) return doc.modelContext\n const nav = navigator as unknown as { modelContext?: ModelContextLike }\n return nav.modelContext ?? null\n}\n\n/** True when the visiting browser exposes WebMCP at all. */\nexport function isWebMcpAvailable(): boolean {\n return getModelContext() !== null\n}\n\n// ============================================\n// Props\n// ============================================\n\n/** A tool as it crosses the server→client boundary: JSON, no functions. */\nexport interface WebMcpToolDescriptor {\n name: string\n title?: string\n description: string\n inputSchema: JsonSchemaObject\n}\n\nexport interface WebMcpLocalTool extends WebMcpToolDescriptor {\n /** Runs in the browser. Use for DOM-aware tools only. */\n execute: (args: Record<string, unknown>) => Promise<unknown> | unknown\n}\n\nexport interface WebMcpToolsProps {\n /**\n * Proxied tools — executed server-side via the MCP endpoint.\n *\n * Usually omit this. Passing descriptors from a server component sends the\n * whole tool catalog through the RSC payload of EVERY page, costing every\n * human visitor several KB for a capability only an agent uses. Leave it\n * empty and the component fetches `tools/list` instead — but only after\n * confirming the browser actually exposes WebMCP, so the fetch never\n * happens for ordinary visitors. Pass descriptors only to pin a subset.\n */\n tools?: WebMcpToolDescriptor[]\n /** Tools whose handler runs in the browser. */\n localTools?: WebMcpLocalTool[]\n /** MCP endpoint on this origin (default `/api/mcp`). */\n endpoint?: string\n /**\n * Wait for the page to go quiet before registering (default true).\n *\n * Registration is not user-visible and must never compete with hydration.\n * An agent arriving at the page polls or listens for `toolchange`, so a\n * couple of hundred milliseconds costs nothing; a blocked LCP costs a lot.\n */\n defer?: boolean\n /**\n * Fetch the catalog from the endpoint's `tools/list` when no `tools` are\n * passed (default true). The fetch is gated on WebMCP being present.\n */\n discover?: boolean\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Register this site's MCP tools with the visiting browser's agent.\n *\n * Renders nothing. Mount it as a CHILDLESS sibling in the layout — never as a\n * wrapper around `{children}`, which would de-opt the whole route to client\n * rendering (the cardinal rule in the root CLAUDE.md).\n *\n * @example\n * ```tsx\n * // app/layout.tsx\n * <SiteKitLayout>{children}</SiteKitLayout>\n * <WebMcpTools endpoint=\"/api/mcp\" />\n * ```\n *\n * Prefer `endpoint` (discovery) over a `tools` list from a server component:\n * descriptors passed as props land in every page's RSC payload.\n */\nexport function WebMcpTools({\n tools = [],\n localTools = [],\n endpoint = '/api/mcp',\n defer = true,\n discover = true,\n}: WebMcpToolsProps) {\n const ready = useDeferredActivation(defer)\n\n useEffect(() => {\n if (!ready) return\n // Gate EVERYTHING on WebMCP being present. A browser without it does no\n // work and issues no request — which is every human visitor today.\n const modelContext = getModelContext()\n if (!modelContext) return\n\n const controller = new AbortController()\n\n const callRemote = async (\n name: string,\n args: Record<string, unknown>,\n ): Promise<McpToolResult> => {\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n 'Mcp-Method': 'tools/call',\n 'Mcp-Name': name,\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: `webmcp-${name}`,\n method: 'tools/call',\n params: { name, arguments: args },\n }),\n signal: controller.signal,\n })\n const payload = (await response.json()) as {\n result?: McpToolResult\n error?: { message?: string }\n }\n if (payload.error) {\n return {\n content: [{ type: 'text', text: payload.error.message ?? 'Tool call failed.' }],\n isError: true,\n }\n }\n return payload.result ?? { content: [{ type: 'text', text: '(no result)' }] }\n } catch (error) {\n if (controller.signal.aborted) throw error\n const detail = error instanceof Error ? error.message : String(error)\n return { content: [{ type: 'text', text: `Tool call failed: ${detail}` }], isError: true }\n }\n }\n\n const normalize = (value: unknown): McpToolResult => {\n if (value && typeof value === 'object' && Array.isArray((value as McpToolResult).content)) {\n return value as McpToolResult\n }\n return {\n content: [\n { type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) },\n ],\n structuredContent: value,\n }\n }\n\n const proxied = (list: WebMcpToolDescriptor[]): WebMcpToolDefinition[] =>\n list.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n execute: (args: Record<string, unknown>) => callRemote(tool.name, args ?? {}),\n }))\n\n const local = localTools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n execute: async (args: Record<string, unknown>) => normalize(await tool.execute(args ?? {})),\n }))\n\n /** Ask our own endpoint what it serves, so the two can't disagree. */\n const listRemoteTools = async (): Promise<WebMcpToolDescriptor[]> => {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n 'Mcp-Method': 'tools/list',\n },\n body: JSON.stringify({ jsonrpc: '2.0', id: 'webmcp-list', method: 'tools/list' }),\n signal: controller.signal,\n })\n const payload = (await response.json()) as {\n result?: { tools?: WebMcpToolDescriptor[] }\n }\n return payload.result?.tools ?? []\n }\n\n let cancelled = false\n void (async () => {\n try {\n const discovered =\n tools.length === 0 && discover ? await listRemoteTools() : tools\n if (cancelled) return\n\n const definitions = [...proxied(discovered), ...local]\n if (definitions.length === 0) return\n\n if (typeof modelContext.registerTool === 'function') {\n for (const definition of definitions) {\n if (cancelled) return\n await modelContext.registerTool(definition, { signal: controller.signal })\n }\n } else if (typeof modelContext.provideContext === 'function') {\n await modelContext.provideContext({ tools: definitions })\n }\n } catch (error) {\n // A draft API that rejects is not a site error. Stay silent in\n // production so a spec change never shows up as console noise on a\n // marketing page.\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[site-kit/mcp] WebMCP registration failed:', error)\n }\n }\n })()\n\n return () => {\n cancelled = true\n // Aborting the signal is how WebMCP unregisters — important on client\n // navigation, or the previous page's tools linger on the document.\n controller.abort()\n }\n }, [ready, tools, localTools, endpoint, discover])\n\n return null\n}\n"]}
|
package/dist/mcp/client.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/mcp/WebMcpTools.tsx"],"names":[],"mappings":"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","file":"client.mjs","sourcesContent":["'use client'\n\n/**\n * @sonordev/site-kit/mcp — WebMCP in-page tool registration\n *\n * The browser half of WebMCP (W3C Web Machine Learning CG). When an agent is\n * driving the page — a browser-integrated assistant, an extension, a\n * headless-Chrome operator — it does not fetch our `.well-known` card and open\n * a network connection. It looks for tools registered on the *document*.\n *\n * `document.modelContext.registerTool()` is the current shape in the explainer;\n * earlier drafts and some flagged builds put the same object on `navigator`,\n * and an even earlier one took a whole tool array via `provideContext()`. All\n * three are probed, because the spec is a live draft and a site that only\n * knows one shape silently exposes nothing in the others.\n *\n * ── Why the handlers are proxied ──────────────────────────────────────────\n * Tools are registered here as thin wrappers that POST `tools/call` to this\n * site's own MCP endpoint. That is deliberate:\n *\n * - one implementation. The tool an agent calls in-page and the tool it\n * calls over HTTP run the SAME server-side handler, so they cannot drift.\n * - no secrets in the bundle. Handlers reach Sonor with `SONOR_API_KEY`.\n * Registering real handlers client-side would drag that key into a\n * `'use client'` graph, which is exactly how a raw `sonor_` key once ended\n * up in a public chunk of an upforge build (see build-entries.ts).\n *\n * Tools that genuinely need live DOM state (reading what's on screen, filling\n * a form the user is looking at) are passed as `localTools` and run in-page.\n */\n\nimport { useEffect } from 'react'\nimport { useDeferredActivation } from '../shared/defer'\nimport type { JsonSchemaObject, McpToolResult } from './types'\n\n// ============================================\n// The WebMCP surface, as far as we rely on it\n// ============================================\n\ninterface WebMcpToolDefinition {\n name: string\n description: string\n inputSchema: JsonSchemaObject\n execute: (args: Record<string, unknown>) => Promise<McpToolResult>\n}\n\ninterface ModelContextLike {\n registerTool?: (\n tool: WebMcpToolDefinition,\n options?: { signal?: AbortSignal },\n ) => Promise<unknown> | unknown\n provideContext?: (context: { tools: WebMcpToolDefinition[] }) => Promise<unknown> | unknown\n}\n\nfunction getModelContext(): ModelContextLike | null {\n if (typeof window === 'undefined') return null\n const doc = document as unknown as { modelContext?: ModelContextLike }\n if (doc.modelContext) return doc.modelContext\n const nav = navigator as unknown as { modelContext?: ModelContextLike }\n return nav.modelContext ?? null\n}\n\n/** True when the visiting browser exposes WebMCP at all. */\nexport function isWebMcpAvailable(): boolean {\n return getModelContext() !== null\n}\n\n// ============================================\n// Props\n// ============================================\n\n/** A tool as it crosses the server→client boundary: JSON, no functions. */\nexport interface WebMcpToolDescriptor {\n name: string\n title?: string\n description: string\n inputSchema: JsonSchemaObject\n}\n\nexport interface WebMcpLocalTool extends WebMcpToolDescriptor {\n /** Runs in the browser. Use for DOM-aware tools only. */\n execute: (args: Record<string, unknown>) => Promise<unknown> | unknown\n}\n\nexport interface WebMcpToolsProps {\n /**\n * Proxied tools — executed server-side via the MCP endpoint.\n *\n * Usually omit this. Passing descriptors from a server component sends the\n * whole tool catalog through the RSC payload of EVERY page, costing every\n * human visitor several KB for a capability only an agent uses. Leave it\n * empty and the component fetches `tools/list` instead — but only after\n * confirming the browser actually exposes WebMCP, so the fetch never\n * happens for ordinary visitors. Pass descriptors only to pin a subset.\n */\n tools?: WebMcpToolDescriptor[]\n /** Tools whose handler runs in the browser. */\n localTools?: WebMcpLocalTool[]\n /** MCP endpoint on this origin (default `/api/mcp`). */\n endpoint?: string\n /**\n * Wait for the page to go quiet before registering (default true).\n *\n * Registration is not user-visible and must never compete with hydration.\n * An agent arriving at the page polls or listens for `toolchange`, so a\n * couple of hundred milliseconds costs nothing; a blocked LCP costs a lot.\n */\n defer?: boolean\n /**\n * Fetch the catalog from the endpoint's `tools/list` when no `tools` are\n * passed (default true). The fetch is gated on WebMCP being present.\n */\n discover?: boolean\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Register this site's MCP tools with the visiting browser's agent.\n *\n * Renders nothing. Mount it as a CHILDLESS sibling in the layout — never as a\n * wrapper around `{children}`, which would de-opt the whole route to client\n * rendering (the cardinal rule in the root CLAUDE.md).\n *\n * @example\n * ```tsx\n * // app/layout.tsx\n * <SiteKitLayout analytics={false}>{children}</SiteKitLayout>\n * <WebMcpTools tools={MCP_TOOL_DESCRIPTORS} />\n * ```\n */\nexport function WebMcpTools({\n tools = [],\n localTools = [],\n endpoint = '/api/mcp',\n defer = true,\n discover = true,\n}: WebMcpToolsProps) {\n const ready = useDeferredActivation(defer)\n\n useEffect(() => {\n if (!ready) return\n // Gate EVERYTHING on WebMCP being present. A browser without it does no\n // work and issues no request — which is every human visitor today.\n const modelContext = getModelContext()\n if (!modelContext) return\n\n const controller = new AbortController()\n\n const callRemote = async (\n name: string,\n args: Record<string, unknown>,\n ): Promise<McpToolResult> => {\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n 'Mcp-Method': 'tools/call',\n 'Mcp-Name': name,\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: `webmcp-${name}`,\n method: 'tools/call',\n params: { name, arguments: args },\n }),\n signal: controller.signal,\n })\n const payload = (await response.json()) as {\n result?: McpToolResult\n error?: { message?: string }\n }\n if (payload.error) {\n return {\n content: [{ type: 'text', text: payload.error.message ?? 'Tool call failed.' }],\n isError: true,\n }\n }\n return payload.result ?? { content: [{ type: 'text', text: '(no result)' }] }\n } catch (error) {\n if (controller.signal.aborted) throw error\n const detail = error instanceof Error ? error.message : String(error)\n return { content: [{ type: 'text', text: `Tool call failed: ${detail}` }], isError: true }\n }\n }\n\n const normalize = (value: unknown): McpToolResult => {\n if (value && typeof value === 'object' && Array.isArray((value as McpToolResult).content)) {\n return value as McpToolResult\n }\n return {\n content: [\n { type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) },\n ],\n structuredContent: value,\n }\n }\n\n const proxied = (list: WebMcpToolDescriptor[]): WebMcpToolDefinition[] =>\n list.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n execute: (args: Record<string, unknown>) => callRemote(tool.name, args ?? {}),\n }))\n\n const local = localTools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n execute: async (args: Record<string, unknown>) => normalize(await tool.execute(args ?? {})),\n }))\n\n /** Ask our own endpoint what it serves, so the two can't disagree. */\n const listRemoteTools = async (): Promise<WebMcpToolDescriptor[]> => {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n 'Mcp-Method': 'tools/list',\n },\n body: JSON.stringify({ jsonrpc: '2.0', id: 'webmcp-list', method: 'tools/list' }),\n signal: controller.signal,\n })\n const payload = (await response.json()) as {\n result?: { tools?: WebMcpToolDescriptor[] }\n }\n return payload.result?.tools ?? []\n }\n\n let cancelled = false\n void (async () => {\n try {\n const discovered =\n tools.length === 0 && discover ? await listRemoteTools() : tools\n if (cancelled) return\n\n const definitions = [...proxied(discovered), ...local]\n if (definitions.length === 0) return\n\n if (typeof modelContext.registerTool === 'function') {\n for (const definition of definitions) {\n if (cancelled) return\n await modelContext.registerTool(definition, { signal: controller.signal })\n }\n } else if (typeof modelContext.provideContext === 'function') {\n await modelContext.provideContext({ tools: definitions })\n }\n } catch (error) {\n // A draft API that rejects is not a site error. Stay silent in\n // production so a spec change never shows up as console noise on a\n // marketing page.\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[site-kit/mcp] WebMCP registration failed:', error)\n }\n }\n })()\n\n return () => {\n cancelled = true\n // Aborting the signal is how WebMCP unregisters — important on client\n // navigation, or the previous page's tools linger on the document.\n controller.abort()\n }\n }, [ready, tools, localTools, endpoint, discover])\n\n return null\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/mcp/WebMcpTools.tsx"],"names":[],"mappings":"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","file":"client.mjs","sourcesContent":["'use client'\n\n/**\n * @sonordev/site-kit/mcp — WebMCP in-page tool registration\n *\n * The browser half of WebMCP (W3C Web Machine Learning CG). When an agent is\n * driving the page — a browser-integrated assistant, an extension, a\n * headless-Chrome operator — it does not fetch our `.well-known` card and open\n * a network connection. It looks for tools registered on the *document*.\n *\n * `document.modelContext.registerTool()` is the current shape in the explainer;\n * earlier drafts and some flagged builds put the same object on `navigator`,\n * and an even earlier one took a whole tool array via `provideContext()`. All\n * three are probed, because the spec is a live draft and a site that only\n * knows one shape silently exposes nothing in the others.\n *\n * ── Why the handlers are proxied ──────────────────────────────────────────\n * Tools are registered here as thin wrappers that POST `tools/call` to this\n * site's own MCP endpoint. That is deliberate:\n *\n * - one implementation. The tool an agent calls in-page and the tool it\n * calls over HTTP run the SAME server-side handler, so they cannot drift.\n * - no secrets in the bundle. Handlers reach Sonor with `SONOR_API_KEY`.\n * Registering real handlers client-side would drag that key into a\n * `'use client'` graph, which is exactly how a raw `sonor_` key once ended\n * up in a public chunk of an upforge build (see build-entries.ts).\n *\n * Tools that genuinely need live DOM state (reading what's on screen, filling\n * a form the user is looking at) are passed as `localTools` and run in-page.\n */\n\nimport { useEffect } from 'react'\nimport { useDeferredActivation } from '../shared/defer'\nimport type { JsonSchemaObject, McpToolResult } from './types'\n\n// ============================================\n// The WebMCP surface, as far as we rely on it\n// ============================================\n\ninterface WebMcpToolDefinition {\n name: string\n description: string\n inputSchema: JsonSchemaObject\n execute: (args: Record<string, unknown>) => Promise<McpToolResult>\n}\n\ninterface ModelContextLike {\n registerTool?: (\n tool: WebMcpToolDefinition,\n options?: { signal?: AbortSignal },\n ) => Promise<unknown> | unknown\n provideContext?: (context: { tools: WebMcpToolDefinition[] }) => Promise<unknown> | unknown\n}\n\nfunction getModelContext(): ModelContextLike | null {\n if (typeof window === 'undefined') return null\n const doc = document as unknown as { modelContext?: ModelContextLike }\n if (doc.modelContext) return doc.modelContext\n const nav = navigator as unknown as { modelContext?: ModelContextLike }\n return nav.modelContext ?? null\n}\n\n/** True when the visiting browser exposes WebMCP at all. */\nexport function isWebMcpAvailable(): boolean {\n return getModelContext() !== null\n}\n\n// ============================================\n// Props\n// ============================================\n\n/** A tool as it crosses the server→client boundary: JSON, no functions. */\nexport interface WebMcpToolDescriptor {\n name: string\n title?: string\n description: string\n inputSchema: JsonSchemaObject\n}\n\nexport interface WebMcpLocalTool extends WebMcpToolDescriptor {\n /** Runs in the browser. Use for DOM-aware tools only. */\n execute: (args: Record<string, unknown>) => Promise<unknown> | unknown\n}\n\nexport interface WebMcpToolsProps {\n /**\n * Proxied tools — executed server-side via the MCP endpoint.\n *\n * Usually omit this. Passing descriptors from a server component sends the\n * whole tool catalog through the RSC payload of EVERY page, costing every\n * human visitor several KB for a capability only an agent uses. Leave it\n * empty and the component fetches `tools/list` instead — but only after\n * confirming the browser actually exposes WebMCP, so the fetch never\n * happens for ordinary visitors. Pass descriptors only to pin a subset.\n */\n tools?: WebMcpToolDescriptor[]\n /** Tools whose handler runs in the browser. */\n localTools?: WebMcpLocalTool[]\n /** MCP endpoint on this origin (default `/api/mcp`). */\n endpoint?: string\n /**\n * Wait for the page to go quiet before registering (default true).\n *\n * Registration is not user-visible and must never compete with hydration.\n * An agent arriving at the page polls or listens for `toolchange`, so a\n * couple of hundred milliseconds costs nothing; a blocked LCP costs a lot.\n */\n defer?: boolean\n /**\n * Fetch the catalog from the endpoint's `tools/list` when no `tools` are\n * passed (default true). The fetch is gated on WebMCP being present.\n */\n discover?: boolean\n}\n\n// ============================================\n// Component\n// ============================================\n\n/**\n * Register this site's MCP tools with the visiting browser's agent.\n *\n * Renders nothing. Mount it as a CHILDLESS sibling in the layout — never as a\n * wrapper around `{children}`, which would de-opt the whole route to client\n * rendering (the cardinal rule in the root CLAUDE.md).\n *\n * @example\n * ```tsx\n * // app/layout.tsx\n * <SiteKitLayout>{children}</SiteKitLayout>\n * <WebMcpTools endpoint=\"/api/mcp\" />\n * ```\n *\n * Prefer `endpoint` (discovery) over a `tools` list from a server component:\n * descriptors passed as props land in every page's RSC payload.\n */\nexport function WebMcpTools({\n tools = [],\n localTools = [],\n endpoint = '/api/mcp',\n defer = true,\n discover = true,\n}: WebMcpToolsProps) {\n const ready = useDeferredActivation(defer)\n\n useEffect(() => {\n if (!ready) return\n // Gate EVERYTHING on WebMCP being present. A browser without it does no\n // work and issues no request — which is every human visitor today.\n const modelContext = getModelContext()\n if (!modelContext) return\n\n const controller = new AbortController()\n\n const callRemote = async (\n name: string,\n args: Record<string, unknown>,\n ): Promise<McpToolResult> => {\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n 'Mcp-Method': 'tools/call',\n 'Mcp-Name': name,\n },\n body: JSON.stringify({\n jsonrpc: '2.0',\n id: `webmcp-${name}`,\n method: 'tools/call',\n params: { name, arguments: args },\n }),\n signal: controller.signal,\n })\n const payload = (await response.json()) as {\n result?: McpToolResult\n error?: { message?: string }\n }\n if (payload.error) {\n return {\n content: [{ type: 'text', text: payload.error.message ?? 'Tool call failed.' }],\n isError: true,\n }\n }\n return payload.result ?? { content: [{ type: 'text', text: '(no result)' }] }\n } catch (error) {\n if (controller.signal.aborted) throw error\n const detail = error instanceof Error ? error.message : String(error)\n return { content: [{ type: 'text', text: `Tool call failed: ${detail}` }], isError: true }\n }\n }\n\n const normalize = (value: unknown): McpToolResult => {\n if (value && typeof value === 'object' && Array.isArray((value as McpToolResult).content)) {\n return value as McpToolResult\n }\n return {\n content: [\n { type: 'text', text: typeof value === 'string' ? value : JSON.stringify(value, null, 2) },\n ],\n structuredContent: value,\n }\n }\n\n const proxied = (list: WebMcpToolDescriptor[]): WebMcpToolDefinition[] =>\n list.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n execute: (args: Record<string, unknown>) => callRemote(tool.name, args ?? {}),\n }))\n\n const local = localTools.map((tool) => ({\n name: tool.name,\n description: tool.description,\n inputSchema: tool.inputSchema,\n execute: async (args: Record<string, unknown>) => normalize(await tool.execute(args ?? {})),\n }))\n\n /** Ask our own endpoint what it serves, so the two can't disagree. */\n const listRemoteTools = async (): Promise<WebMcpToolDescriptor[]> => {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n 'Mcp-Method': 'tools/list',\n },\n body: JSON.stringify({ jsonrpc: '2.0', id: 'webmcp-list', method: 'tools/list' }),\n signal: controller.signal,\n })\n const payload = (await response.json()) as {\n result?: { tools?: WebMcpToolDescriptor[] }\n }\n return payload.result?.tools ?? []\n }\n\n let cancelled = false\n void (async () => {\n try {\n const discovered =\n tools.length === 0 && discover ? await listRemoteTools() : tools\n if (cancelled) return\n\n const definitions = [...proxied(discovered), ...local]\n if (definitions.length === 0) return\n\n if (typeof modelContext.registerTool === 'function') {\n for (const definition of definitions) {\n if (cancelled) return\n await modelContext.registerTool(definition, { signal: controller.signal })\n }\n } else if (typeof modelContext.provideContext === 'function') {\n await modelContext.provideContext({ tools: definitions })\n }\n } catch (error) {\n // A draft API that rejects is not a site error. Stay silent in\n // production so a spec change never shows up as console noise on a\n // marketing page.\n if (process.env.NODE_ENV !== 'production') {\n console.warn('[site-kit/mcp] WebMCP registration failed:', error)\n }\n }\n })()\n\n return () => {\n cancelled = true\n // Aborting the signal is how WebMCP unregisters — important on client\n // navigation, or the previous page's tools linger on the document.\n controller.abort()\n }\n }, [ready, tools, localTools, endpoint, discover])\n\n return null\n}\n"]}
|
package/dist/search/index.js
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkG2WC3CXW_js = require('../chunk-G2WC3CXW.js');
|
|
5
|
-
var
|
|
6
|
-
require('../chunk-
|
|
7
|
-
require('../chunk-
|
|
5
|
+
var chunkQEGUI2Q2_js = require('../chunk-QEGUI2Q2.js');
|
|
6
|
+
require('../chunk-HFJQMIFM.js');
|
|
7
|
+
require('../chunk-SUZ3ZLB2.js');
|
|
8
8
|
require('../chunk-SNAQBZPT.js');
|
|
9
9
|
var react = require('react');
|
|
10
10
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -39,7 +39,7 @@ function useSiteSearch(options = {}) {
|
|
|
39
39
|
const apiUrl = typeof window !== "undefined" ? window.__SITE_KIT_API_URL__ || "https://api.sonor.io" : "https://api.sonor.io";
|
|
40
40
|
const apiKey = typeof window !== "undefined" ? window.__SITE_KIT_API_KEY__ : void 0;
|
|
41
41
|
const resolvedSite = site ?? (typeof window !== "undefined" ? window.__SITE_KIT_SITE__ : void 0);
|
|
42
|
-
const res = await
|
|
42
|
+
const res = await chunkQEGUI2Q2_js.sonorFetch(
|
|
43
43
|
`${apiUrl}${chunkG2WC3CXW_js.SEARCH_ENDPOINT}`,
|
|
44
44
|
{
|
|
45
45
|
method: "POST",
|
package/dist/search/index.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
|
|
3
3
|
export { SEARCH_ENDPOINT } from '../chunk-75A4KY4X.mjs';
|
|
4
|
-
import { sonorFetch } from '../chunk-
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
4
|
+
import { sonorFetch } from '../chunk-OFSA7LUH.mjs';
|
|
5
|
+
import '../chunk-4XGACM7D.mjs';
|
|
6
|
+
import '../chunk-WDBCXRTT.mjs';
|
|
7
7
|
import '../chunk-BEXTDHO4.mjs';
|
|
8
8
|
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
9
9
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @deprecated DO NOT USE
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* existing imports keep compiling; it renders the
|
|
2
|
+
* @deprecated DO NOT USE in new code. It POSTs `project_id` to the public
|
|
3
|
+
* `/api/public/seo/location-content` route with no `x-api-key`, violating the
|
|
4
|
+
* key-only auth contract every other site-kit fetch follows (the route itself
|
|
5
|
+
* exists and answers for any project id). No site in the workspace renders it.
|
|
6
|
+
* Kept exported so existing imports keep compiling; it renders the section when
|
|
7
|
+
* the route returns one and `fallback` otherwise.
|
|
7
8
|
*
|
|
8
9
|
* LocationPageContent - Server Component for fetching location page sections
|
|
9
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LocationPageContent.d.ts","sourceRoot":"","sources":["../../src/seo/LocationPageContent.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"LocationPageContent.d.ts","sourceRoot":"","sources":["../../src/seo/LocationPageContent.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAO9B,MAAM,WAAW,wBAAwB;IACvC,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,sEAAsE;IACtE,OAAO,EAAE,MAAM,CAAA;IACf,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2CAA2C;IAC3C,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,KAAK,CAAC,SAAS,CAAA;CACxD;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,GAAG,CAAA;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAA;QACb,WAAW,EAAE,MAAM,CAAA;QACnB,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAC,CAAA;CACH;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAeD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,cAClB,MAAM,QACX,MAAM,WACH,MAAM,KACd,OAAO,CAAC,mBAAmB,GAAG,IAAI,CA0BnC,CAAA;AA4IF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,CAMvF;AAGD,YAAY,EACV,kBAAkB,IAAI,mBAAmB,EACzC,kBAAkB,IAAI,uBAAuB,EAC7C,kBAAkB,IAAI,mBAAmB,GAC1C,CAAA"}
|
package/dist/seo/api.d.ts
CHANGED
|
@@ -6,10 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* This file is kept for backward compatibility but will be removed in a future version.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* -
|
|
12
|
-
* - Use private env var: SONOR_API_KEY
|
|
9
|
+
* Not a package entry (there is no `@sonordev/site-kit/seo/api`); the only
|
|
10
|
+
* importer is the `og` CLI command. Everything else uses server-api.ts via
|
|
11
|
+
* `@sonordev/site-kit/seo` or `@sonordev/site-kit/seo/server`.
|
|
13
12
|
*/
|
|
14
13
|
/**
|
|
15
14
|
* Fetch SEO page data - cached per request
|
|
@@ -73,7 +72,7 @@ export declare const getSitemapEntries: (projectId: string, options?: {
|
|
|
73
72
|
* @example
|
|
74
73
|
* ```ts
|
|
75
74
|
* // scripts/register-sitemap.ts (run at build time)
|
|
76
|
-
* import { registerSitemap } from '@sonordev/seo/server'
|
|
75
|
+
* import { registerSitemap } from '@sonordev/site-kit/seo/server'
|
|
77
76
|
*
|
|
78
77
|
* await registerSitemap([
|
|
79
78
|
* { path: '/', priority: 1.0, changefreq: 'daily' },
|
package/dist/seo/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/seo/api.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/seo/api.ts"],"names":[],"mappings":"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"}
|
package/dist/seo/client.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkKAUUGRYB_js = require('../chunk-KAUUGRYB.js');
|
|
5
5
|
require('../chunk-JEOKDUPQ.js');
|
|
6
6
|
require('../chunk-OL2QBWAU.js');
|
|
7
|
-
require('../chunk-
|
|
8
|
-
require('../chunk-
|
|
9
|
-
require('../chunk-
|
|
7
|
+
require('../chunk-QEGUI2Q2.js');
|
|
8
|
+
require('../chunk-HFJQMIFM.js');
|
|
9
|
+
require('../chunk-SUZ3ZLB2.js');
|
|
10
10
|
require('../chunk-SNAQBZPT.js');
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
Object.defineProperty(exports, "SitemapSync", {
|
|
15
15
|
enumerable: true,
|
|
16
|
-
get: function () { return
|
|
16
|
+
get: function () { return chunkKAUUGRYB_js.SitemapSync; }
|
|
17
17
|
});
|
|
18
18
|
//# sourceMappingURL=client.js.map
|
|
19
19
|
//# sourceMappingURL=client.js.map
|
package/dist/seo/client.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SitemapSync } from '../chunk-
|
|
2
|
+
export { SitemapSync } from '../chunk-7PPNXORV.mjs';
|
|
3
3
|
import '../chunk-QJU6HBSK.mjs';
|
|
4
4
|
import '../chunk-NVSWTDWU.mjs';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-OFSA7LUH.mjs';
|
|
6
|
+
import '../chunk-4XGACM7D.mjs';
|
|
7
|
+
import '../chunk-WDBCXRTT.mjs';
|
|
8
8
|
import '../chunk-BEXTDHO4.mjs';
|
|
9
9
|
//# sourceMappingURL=client.mjs.map
|
|
10
10
|
//# sourceMappingURL=client.mjs.map
|