@sonordev/site-kit 7.1.1 → 7.1.2
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 +2 -2
- package/CHANGELOG.md +17 -3426
- package/agent-manifest.json +1 -1
- package/dist/{AnalyticsProvider-3MI5RCTL.js → AnalyticsProvider-ZB33W6MC.js} +4 -4
- package/dist/{ArticleViewTracker-CMBSJR3N.js → ArticleViewTracker-GMHYLLLZ.js} +3 -3
- package/dist/{BlocksPopup-X3OAAK2L.js → BlocksPopup-EA6LYL25.js} +4 -4
- package/dist/{ChatWidget-JMFBXJ75.js → ChatWidget-UCDWMWCW.js} +5 -5
- package/dist/{EngageWidget-A3QKZ3SU.js → EngageWidget-7ZYSK4GE.js} +4 -4
- package/dist/{FileField-QRSEGO6D.js → FileField-QKA3JB2Q.js} +3 -3
- package/dist/{FormSpotlight-XKV7VTN4.js → FormSpotlight-AQTIA5TP.js} +2 -2
- package/dist/{FormStage-C3YGYAUZ.js → FormStage-FDTLTP3B.js} +2 -2
- package/dist/ManagedForm-H7BVAH2W.js +14 -0
- package/dist/{ManagedNewsletterForm-LPIKGJF4.js → ManagedNewsletterForm-J6QSAGGP.js} +4 -4
- package/dist/{SignalCore-ICXXZBYI.js → SignalCore-JZNXOLNT.js} +3 -3
- package/dist/{SiteDesignReporter-A7MS2CIP.js → SiteDesignReporter-W4EJUSTE.js} +5 -5
- package/dist/SitemapSync-XBANGKHZ.js +8 -0
- package/dist/SitemapSync.d.ts +1 -1
- package/dist/_client/booking-widget.js +5 -5
- package/dist/_client/testimonial-section.d.ts +1 -1
- package/dist/affiliates/api.d.ts +1 -1
- package/dist/affiliates/index.js +3 -3
- package/dist/analytics/AnalyticsProvider.d.ts +1 -1
- package/dist/analytics/index.js +4 -4
- package/dist/analytics/send-gate.d.ts +12 -25
- package/dist/articles/Article.d.ts +1 -1
- package/dist/articles/ArticleList.d.ts +1 -1
- package/dist/articles/ClusterLandingPage.d.ts +2 -2
- package/dist/articles/PublicationLayout.d.ts +1 -1
- package/dist/articles/PublicationSidebar.d.ts +1 -1
- package/dist/articles/RelatedPosts.d.ts +1 -1
- package/dist/articles/author-schema.d.ts +1 -1
- package/dist/articles/excerpt.d.ts +3 -4
- package/dist/articles/index.d.ts +2 -2
- package/dist/articles/index.js +1 -1
- package/dist/articles/news-sitemap.d.ts +1 -1
- package/dist/articles/processArticleHtml.d.ts +1 -1
- package/dist/articles/server-core.d.ts +4 -4
- package/dist/articles/server-ui.js +1 -1
- package/dist/articles/server.d.ts +4 -4
- package/dist/articles/types.d.ts +1 -1
- package/dist/chat/index.js +5 -5
- package/dist/{chunk-PXZ7LAOY.js → chunk-3SDOQUUF.js} +2 -2
- package/dist/{chunk-R3VKF43H.js → chunk-6WIQCXOO.js} +1 -1
- package/dist/{chunk-6OL23QYD.js → chunk-AH5Q262S.js} +1 -1
- package/dist/{chunk-OPRBF7VE.js → chunk-CIG5UL2S.js} +1 -1
- package/dist/{chunk-EQBZ24VH.js → chunk-CSTQDNGK.js} +4 -4
- package/dist/{chunk-JC7KXNNM.js → chunk-D5EC5KVO.js} +1 -1
- package/dist/{chunk-DUQMSNF2.js → chunk-ERXXITG4.js} +1 -1
- package/dist/{chunk-ILAW3XKD.js → chunk-HF57LG73.js} +7 -7
- package/dist/{chunk-542MIHNP.js → chunk-ILU5I6RW.js} +1 -1
- package/dist/{chunk-HAG4YIZY.js → chunk-JBE46QJZ.js} +6 -6
- package/dist/{chunk-ZAWANWUS.js → chunk-JTU2GOM4.js} +1 -1
- package/dist/{chunk-QPEEKFCA.js → chunk-LUXVWITO.js} +2 -2
- package/dist/{chunk-EFPS56JA.js → chunk-M3YEPKP7.js} +1 -1
- package/dist/{chunk-H42PZKVC.js → chunk-NK4CSJNP.js} +2 -2
- package/dist/{chunk-ODADQM6Z.js → chunk-PGMVL4AB.js} +2 -2
- package/dist/{chunk-Q3S26EQA.js → chunk-PHYMNUJU.js} +1 -1
- package/dist/{chunk-ICFRH2ED.js → chunk-Q4W23JYM.js} +1 -1
- package/dist/{chunk-J4D6ZXRW.js → chunk-QEDHRBAT.js} +1 -1
- package/dist/{chunk-V4HUSHZO.js → chunk-RHNWA34F.js} +2 -2
- package/dist/{chunk-KOPVJQ2P.js → chunk-UXOGCKL6.js} +1 -1
- package/dist/{chunk-RK7GF7PQ.js → chunk-V3PUVBME.js} +2 -2
- package/dist/{chunk-NEKEH4CK.js → chunk-V6FDQLR7.js} +1 -1
- package/dist/{chunk-OUNRFXDC.js → chunk-VDF5DFWT.js} +1 -1
- package/dist/{chunk-JIL5VY2R.js → chunk-VGH4MDTU.js} +1 -1
- package/dist/{chunk-RTMMHTEQ.js → chunk-VLARKWZU.js} +1 -1
- package/dist/{chunk-ZETJTCMV.js → chunk-WWSHFRDL.js} +1 -1
- package/dist/{chunk-B73QPZPH.js → chunk-YCJT4JJG.js} +3 -3
- package/dist/{chunk-7FWA3I6A.js → chunk-YEMPUQVU.js} +2 -2
- package/dist/client/index.js +3 -3
- package/dist/cms/CmsPreview.d.ts +2 -2
- package/dist/cms/index.d.ts +3 -3
- package/dist/cms/server-api.d.ts +1 -1
- package/dist/cms/types.d.ts +1 -1
- package/dist/commerce/EventCheckout.d.ts +1 -1
- package/dist/commerce/EventsAgenda.d.ts +3 -3
- package/dist/commerce/api.d.ts +1 -1
- package/dist/commerce/index.js +4 -4
- package/dist/commerce/server.d.ts +3 -4
- package/dist/contracts/entries.d.ts +1 -1
- package/dist/contracts/fleet.d.ts +9 -9
- package/dist/contracts/forms.d.ts +4 -10
- package/dist/contracts/llms.d.ts +1 -1
- package/dist/contracts/portfolio.d.ts +11 -15
- package/dist/contracts/seo-meta.d.ts +11 -12
- package/dist/contracts/seo-pages.d.ts +12 -18
- package/dist/contracts/site-cache.d.ts +4 -4
- package/dist/contracts/sites-normalize.d.ts +2 -4
- package/dist/contracts/sites.d.ts +3 -5
- package/dist/contracts/slot-content.d.ts +2 -2
- package/dist/contracts/slots.d.ts +6 -6
- package/dist/contracts/voice.d.ts +56 -0
- package/dist/contracts/website.d.ts +2 -2
- package/dist/engage/ChatWidget.d.ts +2 -2
- package/dist/engage/EchoUiActions.d.ts +3 -3
- package/dist/engage/EngageWidget.d.ts +1 -1
- package/dist/engage/brand-color.d.ts +1 -1
- package/dist/engage/element-rules.d.ts +2 -2
- package/dist/engage/index.js +6 -6
- package/dist/engage/types.d.ts +3 -3
- package/dist/fleet/FleetHeartbeat.d.ts +2 -2
- package/dist/fleet/index.js +4 -4
- package/dist/forms/FormSpotlight.d.ts +2 -2
- package/dist/forms/ManagedForm.d.ts +1 -1
- package/dist/forms/StaticForm.d.ts +1 -1
- package/dist/forms/field-interactions.d.ts +2 -2
- package/dist/forms/form-loaded-at.d.ts +2 -2
- package/dist/forms/formsApi.d.ts +2 -2
- package/dist/forms/index.d.ts +1 -1
- package/dist/forms/index.js +8 -8
- package/dist/forms/server.d.ts +1 -1
- package/dist/forms/server.js +4 -4
- package/dist/forms/static.js +2 -2
- package/dist/forms/submitForm.d.ts +1 -1
- package/dist/forms/types.d.ts +3 -3
- package/dist/images/ManagedFavicon.d.ts +1 -1
- package/dist/images/ManagedImage.d.ts +4 -4
- package/dist/images/api.d.ts +1 -1
- package/dist/images/index.d.ts +2 -2
- package/dist/images/index.js +4 -4
- package/dist/index.js +1 -1
- package/dist/landing/contract.d.ts +3 -4
- package/dist/layout/SiteKitClientProviders.d.ts +1 -1
- package/dist/layout/SiteKitLayout.d.ts +7 -7
- package/dist/layout/client.d.ts +1 -1
- package/dist/layout/client.js +7 -7
- package/dist/layout/index.js +8 -8
- package/dist/layout/types.d.ts +2 -2
- package/dist/llms/SpeakableSchema.d.ts +2 -2
- package/dist/llms/agent-access.d.ts +2 -2
- package/dist/llms/aiRobots.d.ts +4 -4
- package/dist/llms/api.d.ts +2 -2
- package/dist/llms/generateLLMsTxt.d.ts +1 -1
- package/dist/llms/index.js +4 -4
- package/dist/llms/links.d.ts +1 -1
- package/dist/llms/revalidate.d.ts +1 -1
- package/dist/llms/seo-revalidate.d.ts +2 -3
- package/dist/llms/types.d.ts +6 -6
- package/dist/llms/writeLLMsTxt.d.ts +10 -10
- package/dist/manifest/index.d.ts +8 -8
- package/dist/maps/index.js +3 -3
- package/dist/mcp/WebMcpTools.d.ts +1 -1
- package/dist/mcp/report.d.ts +2 -2
- package/dist/mcp/serverCard.d.ts +1 -1
- package/dist/mcp/sonor.d.ts +5 -6
- package/dist/mcp/sonor.js +8 -8
- package/dist/mcp/transport.d.ts +1 -2
- package/dist/mcp/types.d.ts +4 -5
- package/dist/motion/engine.d.ts +2 -3
- package/dist/motion/failsafe.d.ts +1 -2
- package/dist/motion/gsap.d.ts +2 -2
- package/dist/motion/three.d.ts +1 -1
- package/dist/og/config.d.ts +4 -4
- package/dist/og/contrast.d.ts +2 -2
- package/dist/og/pages.d.ts +5 -5
- package/dist/og/route-fit.d.ts +2 -2
- package/dist/og/route.d.ts +1 -2
- package/dist/og/template.d.ts +1 -1
- package/dist/proxy/index.d.ts +2 -2
- package/dist/proxy/securityHeaders.d.ts +10 -12
- package/dist/redirects/index.d.ts +7 -7
- package/dist/reputation/TestimonialSection.d.ts +1 -1
- package/dist/reputation/api.d.ts +1 -1
- package/dist/revalidate/index.js +2 -2
- package/dist/robots/index.d.ts +5 -5
- package/dist/robots/indexnow.d.ts +2 -3
- package/dist/seo/ManagedScripts.d.ts +2 -2
- package/dist/seo/client.js +4 -4
- package/dist/seo/getManagedMetadata.d.ts +1 -1
- package/dist/seo/groundingSchema.d.ts +2 -2
- package/dist/seo/index.js +4 -4
- package/dist/seo/llms.js +4 -4
- package/dist/seo/register-sitemap-cli-impl.d.ts +1 -1
- package/dist/seo/register-sitemap-cli.d.ts +1 -1
- package/dist/seo/register-sitemap-cli.js +2 -2
- package/dist/seo/schema-filter.d.ts +5 -6
- package/dist/seo/server-api.d.ts +1 -1
- package/dist/seo/sitemap.js +2 -2
- package/dist/seo/types.d.ts +4 -4
- package/dist/seo/withManagedMetadata.d.ts +4 -4
- package/dist/server/index.js +2 -2
- package/dist/server/mint-site-token.d.ts +1 -2
- package/dist/server/server-fetch.d.ts +5 -5
- package/dist/shared/build-entries.d.ts +4 -4
- package/dist/shared/frame.d.ts +8 -9
- package/dist/shared/fresh-fetch.d.ts +1 -2
- package/dist/shared/next-files.d.ts +1 -1
- package/dist/shared/publishCredential.d.ts +1 -1
- package/dist/shared/uuid.d.ts +1 -2
- package/dist/shared/version.d.ts +1 -1
- package/dist/shared/visual-viewport-gap.d.ts +2 -2
- package/dist/signal/index.js +2 -2
- package/dist/site-config/index.d.ts +2 -2
- package/dist/sitemap/index.d.ts +13 -13
- package/dist/sitemap/index.js +2 -2
- package/dist/sitemap/shared.d.ts +3 -3
- package/dist/sites/site-param.d.ts +2 -2
- package/dist/slots/ManagedRichText.d.ts +1 -1
- package/dist/slots/ManagedSlot.d.ts +1 -1
- package/dist/slots/index.d.ts +1 -3
- package/dist/sync/index.js +5 -5
- package/dist/types.d.ts +1 -1
- package/dist/{web-vitals.attribution-N2PCCF4Q.js → web-vitals.attribution-GD6LGLVF.js} +1 -1
- package/dist/website/PopupBlocks.d.ts +3 -4
- package/dist/website/images.js +4 -4
- package/dist/website/index.js +5 -5
- package/dist/website/popups.js +4 -4
- package/dist/{writeLLMsTxt-QR23OQUE.js → writeLLMsTxt-G3JBNBC5.js} +1 -1
- package/docs/MIGRATING-TO-7.md +9 -13
- package/package.json +1 -1
- package/src/admin-auth/README.md +3 -3
- package/src/analytics/README.md +7 -9
- package/src/articles/README.md +6 -6
- package/src/cta-bar/README.md +11 -11
- package/src/forms/README.md +10 -8
- package/src/llms/README.md +3 -3
- package/src/mcp/README.md +7 -7
- package/src/motion/README.md +1 -1
- package/src/og/README.md +26 -27
- package/src/proxy/README.md +14 -14
- package/src/seo/README.md +1 -1
- package/src/slots/README.md +1 -1
- package/dist/ManagedForm-2GSSDJPP.js +0 -14
- package/dist/SitemapSync-4U654SEA.js +0 -8
package/dist/forms/index.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
export { FormCelebration } from '../chunk-YGGDU6C3.js';
|
|
3
|
-
export { FormClient, ManagedForm } from '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
export { FormClient, ManagedForm } from '../chunk-CSTQDNGK.js';
|
|
4
|
+
import '../chunk-D5EC5KVO.js';
|
|
5
5
|
export { DatePicker } from '../chunk-SOD2F6C2.js';
|
|
6
|
-
export { FormEnhancer } from '../chunk-
|
|
6
|
+
export { FormEnhancer } from '../chunk-VLARKWZU.js';
|
|
7
7
|
import '../chunk-YC7ELZS3.js';
|
|
8
8
|
import '../chunk-DXO6SBMD.js';
|
|
9
|
-
export { FormField as FormFieldComponent } from '../chunk-
|
|
10
|
-
export { useForm, useFormTracking } from '../chunk-
|
|
9
|
+
export { FormField as FormFieldComponent } from '../chunk-LUXVWITO.js';
|
|
10
|
+
export { useForm, useFormTracking } from '../chunk-V6FDQLR7.js';
|
|
11
11
|
import '../chunk-AQSNPZY4.js';
|
|
12
12
|
export { DEFAULT_FORM_SUCCESS_MESSAGE } from '../chunk-5SQK3D53.js';
|
|
13
13
|
import '../chunk-NJCTQH2P.js';
|
|
14
14
|
import '../chunk-L2V5PUFN.js';
|
|
15
15
|
import '../chunk-GJWI74ZZ.js';
|
|
16
|
-
import { sonorFetch } from '../chunk-
|
|
17
|
-
import '../chunk-
|
|
18
|
-
import '../chunk-
|
|
16
|
+
import { sonorFetch } from '../chunk-3SDOQUUF.js';
|
|
17
|
+
import '../chunk-VDF5DFWT.js';
|
|
18
|
+
import '../chunk-AH5Q262S.js';
|
|
19
19
|
import '../chunk-PKBMQBKP.js';
|
|
20
20
|
|
|
21
21
|
// src/forms/formsApi.ts
|
package/dist/forms/server.d.ts
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
export interface GetFormConfigOptions {
|
|
25
25
|
/** Project API key. Default: SONOR_API_KEY from the environment. */
|
|
26
26
|
apiKey?: string;
|
|
27
|
-
/**
|
|
27
|
+
/** Sonor API base URL. Default: SONOR_API_URL or https://api.sonor.io */
|
|
28
28
|
apiUrl?: string;
|
|
29
29
|
/** ISR window for the config fetch, seconds. Default 60. */
|
|
30
30
|
revalidate?: number;
|
package/dist/forms/server.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { ServerForm, getFormConfig } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { ServerForm, getFormConfig } from '../chunk-V3PUVBME.js';
|
|
2
|
+
import '../chunk-VLARKWZU.js';
|
|
3
3
|
import '../chunk-YC7ELZS3.js';
|
|
4
|
-
export { StaticForm } from '../chunk-
|
|
4
|
+
export { StaticForm } from '../chunk-CIG5UL2S.js';
|
|
5
5
|
import '../chunk-DXO6SBMD.js';
|
|
6
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-LUXVWITO.js';
|
|
7
7
|
import '../chunk-X6F6SO4S.js';
|
|
8
8
|
import '../chunk-MH2DSGC6.js';
|
|
9
9
|
import '../chunk-5SQK3D53.js';
|
package/dist/forms/static.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { StaticForm } from '../chunk-
|
|
1
|
+
export { StaticForm } from '../chunk-CIG5UL2S.js';
|
|
2
2
|
import '../chunk-DXO6SBMD.js';
|
|
3
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-LUXVWITO.js';
|
|
4
4
|
import '../chunk-5SQK3D53.js';
|
|
5
5
|
import '../chunk-NJCTQH2P.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|
|
@@ -34,7 +34,7 @@ export declare function submitForm({ config, values, honeypotValue, formLoadedAt
|
|
|
34
34
|
/**
|
|
35
35
|
* The receipt Sonor returns plus the values that were sent. `onSuccess`
|
|
36
36
|
* callers need the values (free-audit reads the website and email back), and
|
|
37
|
-
* the receipt alone never carried them:
|
|
37
|
+
* the receipt alone never carried them: a site's free-audit handler read
|
|
38
38
|
* `submission.data`, always got undefined, and sent its audit request with no
|
|
39
39
|
* email or URL.
|
|
40
40
|
*/
|
package/dist/forms/types.d.ts
CHANGED
|
@@ -88,7 +88,7 @@ export interface FormField {
|
|
|
88
88
|
destination_field?: string;
|
|
89
89
|
/**
|
|
90
90
|
* What the form says back once this field's row is answered, replacing the
|
|
91
|
-
* built-in sentence ("Nice to meet you,
|
|
91
|
+
* built-in sentence ("Nice to meet you, Jordan."). Set per field in Sonor;
|
|
92
92
|
* the first field in a row that defines one wins. Supports tokens:
|
|
93
93
|
* `{value}` (this field's answer), `{label}`, `{first_name}`, and
|
|
94
94
|
* `{slug}` for any other field's answer, e.g.
|
|
@@ -166,7 +166,7 @@ export interface FormAnalytics {
|
|
|
166
166
|
* - 'spotlight' — THE 4.0 DEFAULT. The classic layout, alive: a glowing ring
|
|
167
167
|
* visits the active field, and each completed row collapses
|
|
168
168
|
* into a sentence the form says back ("Nice to meet you,
|
|
169
|
-
*
|
|
169
|
+
* Jordan.") with an edit affordance to reopen it.
|
|
170
170
|
* - 'stage' — accordion: beats expand/collapse on one surface, answered
|
|
171
171
|
* beats settle into filled rows
|
|
172
172
|
* - 'classic' — the plain grid form, no choreography
|
|
@@ -206,7 +206,7 @@ export interface ExperienceRenderProps {
|
|
|
206
206
|
honeypot: React.ReactNode;
|
|
207
207
|
}
|
|
208
208
|
export interface ManagedFormProps {
|
|
209
|
-
/** Form key from
|
|
209
|
+
/** Form key from Sonor */
|
|
210
210
|
formId: string;
|
|
211
211
|
/** @deprecated Project is resolved from API key by the backend. Omit this prop. */
|
|
212
212
|
projectId?: string;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ManagedImage -
|
|
2
|
+
* ManagedImage - Sonor-managed image component
|
|
3
3
|
*
|
|
4
4
|
* Features:
|
|
5
|
-
* - Fetches images from
|
|
5
|
+
* - Fetches images from Sonor API via API key (never direct Supabase)
|
|
6
6
|
* - Dev mode: Click to open image picker modal
|
|
7
7
|
* - Supports responsive variants
|
|
8
8
|
* - Automatic focal point handling
|
|
@@ -43,7 +43,7 @@ export interface ImageFile {
|
|
|
43
43
|
public_url?: string;
|
|
44
44
|
}
|
|
45
45
|
export interface ManagedImageProps {
|
|
46
|
-
/** API key for
|
|
46
|
+
/** API key for Sonor API */
|
|
47
47
|
apiKey?: string;
|
|
48
48
|
/** API URL (defaults to https://api.sonor.io) */
|
|
49
49
|
apiUrl?: string;
|
|
@@ -51,7 +51,7 @@ export interface ManagedImageProps {
|
|
|
51
51
|
slotId: string;
|
|
52
52
|
/** Page path for page-specific slots (defaults to current path) */
|
|
53
53
|
pagePath?: string;
|
|
54
|
-
/** Fallback alt text if not set in
|
|
54
|
+
/** Fallback alt text if not set in Sonor */
|
|
55
55
|
alt?: string;
|
|
56
56
|
/** CSS class names */
|
|
57
57
|
className?: string;
|
package/dist/images/api.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Images API functions
|
|
3
3
|
*
|
|
4
|
-
* All functions use
|
|
4
|
+
* All functions use Sonor API with API key authentication.
|
|
5
5
|
* Never makes direct Supabase calls.
|
|
6
6
|
*/
|
|
7
7
|
import type { ManagedImageData, ImageFile } from './ManagedImage';
|
package/dist/images/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @sonordev/site-kit Images Module
|
|
3
3
|
*
|
|
4
|
-
* Provides managed image components for
|
|
5
|
-
* All API calls go through
|
|
4
|
+
* Provides managed image components for Sonor integration.
|
|
5
|
+
* All API calls go through Sonor API with API key auth.
|
|
6
6
|
*/
|
|
7
7
|
export { ManagedImage } from './ManagedImage';
|
|
8
8
|
export type { ManagedImageProps, ManagedImageData, ImageFile } from './ManagedImage';
|
package/dist/images/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-
|
|
1
|
+
export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-ILU5I6RW.js';
|
|
2
2
|
export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-GW7GSBO7.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-3SDOQUUF.js';
|
|
4
|
+
import '../chunk-VDF5DFWT.js';
|
|
5
|
+
import '../chunk-AH5Q262S.js';
|
|
6
6
|
import '../chunk-PKBMQBKP.js';
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { SITE_KIT_VERSION } from './chunk-
|
|
1
|
+
export { SITE_KIT_VERSION } from './chunk-AH5Q262S.js';
|
|
2
2
|
import './chunk-PKBMQBKP.js';
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Landing-page campaign contract.
|
|
3
3
|
*
|
|
4
|
-
* normalizeCampaignSlug is an inlined MIRROR of
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* vectors (sonor-api's campaign.util.spec.ts and this package's
|
|
4
|
+
* normalizeCampaignSlug is an inlined MIRROR of the Sonor API's campaign
|
|
5
|
+
* normalizer (the CANONICAL copy); keep the function body byte-identical.
|
|
6
|
+
* Both sides assert the same fixed vectors (this package's
|
|
8
7
|
* landing/contract.test.ts), so silent drift fails CI on either side.
|
|
9
8
|
*
|
|
10
9
|
* A slug normalized here always matches the server's canonical form, so the
|
|
@@ -37,7 +37,7 @@ export interface SiteKitClientProvidersProps {
|
|
|
37
37
|
signal?: boolean | SignalConfig;
|
|
38
38
|
/**
|
|
39
39
|
* Runtime SitemapSync from the visitor's browser. Default FALSE — sitemap
|
|
40
|
-
* registration belongs to build time and to
|
|
40
|
+
* registration belongs to build time and to Sonor's nightly reconciler,
|
|
41
41
|
* not to whoever happens to load the page. See SiteKitLayout for the full
|
|
42
42
|
* reasoning; in short, its guards live in session/localStorage, so every new
|
|
43
43
|
* visitor missed them and re-POSTed the whole sitemap.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* site-kit feature your layout needs:
|
|
6
6
|
*
|
|
7
7
|
* Server-side (RSC):
|
|
8
|
-
* - ManagedFavicon (link tags from
|
|
8
|
+
* - ManagedFavicon (link tags from the project logo in Sonor)
|
|
9
9
|
* - ManagedScripts position="head" (tracking pixels, analytics tags)
|
|
10
10
|
* - ManagedScripts position="body-end"
|
|
11
11
|
*
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* - AnalyticsProvider (page views, scroll depth, heatmap, web vitals)
|
|
14
14
|
* - EngageWidget (popups, nudges, chat)
|
|
15
15
|
* - SignalBridge (A/B experiments, behavior tracking)
|
|
16
|
-
* - SitemapSync (keeps
|
|
16
|
+
* - SitemapSync (keeps Sonor seo_pages in sync)
|
|
17
17
|
*
|
|
18
18
|
* @example
|
|
19
19
|
* ```tsx
|
|
@@ -46,9 +46,9 @@ import * as React from 'react';
|
|
|
46
46
|
import type { AnalyticsConfig, ChatLayoutConfig, DesignConfig, EngageConfig, SignalConfig } from './types';
|
|
47
47
|
export interface SiteKitLayoutProps {
|
|
48
48
|
children: React.ReactNode;
|
|
49
|
-
/**
|
|
49
|
+
/** Sonor API key. Defaults to SONOR_API_KEY env var. */
|
|
50
50
|
apiKey?: string;
|
|
51
|
-
/**
|
|
51
|
+
/** Sonor API URL. Defaults to env or https://api.sonor.io */
|
|
52
52
|
apiUrl?: string;
|
|
53
53
|
/** Project ID (for Engage chat room routing). Auto-resolved if not provided. */
|
|
54
54
|
projectId?: string;
|
|
@@ -69,13 +69,13 @@ export interface SiteKitLayoutProps {
|
|
|
69
69
|
* Runtime SitemapSync from the visitor's browser. **Default: false.**
|
|
70
70
|
*
|
|
71
71
|
* Sitemap registration is a build-time and server-side job. Build-time
|
|
72
|
-
* `createSitemap` is canonical, and
|
|
72
|
+
* `createSitemap` is canonical, and Sonor's nightly reconciler fetches
|
|
73
73
|
* each host's /sitemap.xml itself, so nothing here needs a visitor.
|
|
74
74
|
*
|
|
75
75
|
* This defaulted to true, and because its throttle lives in sessionStorage
|
|
76
76
|
* and its content hash in localStorage, every first-time visitor, incognito
|
|
77
|
-
* tab and crawler missed both guards and re-POSTed the entire sitemap
|
|
78
|
-
*
|
|
77
|
+
* tab and crawler missed both guards and re-POSTed the entire sitemap, so
|
|
78
|
+
* a busy site took well over a hundred full syncs a day.
|
|
79
79
|
* That coupled sitemap traffic to VISITOR COUNT rather than to content
|
|
80
80
|
* changes — exactly backwards — and made every reader pay for platform
|
|
81
81
|
* bookkeeping in bandwidth, XML parsing and an API round-trip.
|
package/dist/layout/client.d.ts
CHANGED
|
@@ -37,7 +37,7 @@ export interface SiteKitClientProvidersProps {
|
|
|
37
37
|
signal?: boolean | SignalConfig;
|
|
38
38
|
/**
|
|
39
39
|
* Runtime SitemapSync from the visitor's browser. Default FALSE — sitemap
|
|
40
|
-
* registration belongs to build time and to
|
|
40
|
+
* registration belongs to build time and to Sonor's nightly reconciler,
|
|
41
41
|
* not to whoever happens to load the page. See SiteKitLayout for the full
|
|
42
42
|
* reasoning; in short, its guards live in session/localStorage, so every new
|
|
43
43
|
* visitor missed them and re-POSTed the whole sitemap.
|
package/dist/layout/client.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
export { SiteKitClientProviders } from '../chunk-
|
|
2
|
+
export { SiteKitClientProviders } from '../chunk-HF57LG73.js';
|
|
3
3
|
import '../chunk-6G43IRWR.js';
|
|
4
|
-
import '../chunk-
|
|
5
|
-
import '../chunk-
|
|
4
|
+
import '../chunk-ERXXITG4.js';
|
|
5
|
+
import '../chunk-NK4CSJNP.js';
|
|
6
6
|
import '../chunk-ZTZQPYP6.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-PHYMNUJU.js';
|
|
8
8
|
import '../chunk-YC7ELZS3.js';
|
|
9
9
|
import '../chunk-FESKKJAS.js';
|
|
10
10
|
import '../chunk-A4CC4ZG3.js';
|
|
@@ -12,7 +12,7 @@ import '../chunk-24QZEO3Q.js';
|
|
|
12
12
|
import '../chunk-GJWI74ZZ.js';
|
|
13
13
|
import '../chunk-43OCZ3JA.js';
|
|
14
14
|
import '../chunk-EKBEOXTH.js';
|
|
15
|
-
import '../chunk-
|
|
16
|
-
import '../chunk-
|
|
17
|
-
import '../chunk-
|
|
15
|
+
import '../chunk-3SDOQUUF.js';
|
|
16
|
+
import '../chunk-VDF5DFWT.js';
|
|
17
|
+
import '../chunk-AH5Q262S.js';
|
|
18
18
|
import '../chunk-PKBMQBKP.js';
|
package/dist/layout/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { SiteKitClientProviders } from '../chunk-
|
|
1
|
+
import { SiteKitClientProviders } from '../chunk-HF57LG73.js';
|
|
2
2
|
import '../chunk-6G43IRWR.js';
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
3
|
+
import '../chunk-ERXXITG4.js';
|
|
4
|
+
import '../chunk-NK4CSJNP.js';
|
|
5
5
|
import '../chunk-ZTZQPYP6.js';
|
|
6
6
|
import { ManagedFavicon } from '../chunk-GW7GSBO7.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-PHYMNUJU.js';
|
|
8
8
|
import '../chunk-YC7ELZS3.js';
|
|
9
|
-
import { resolveClientCredential } from '../chunk-
|
|
9
|
+
import { resolveClientCredential } from '../chunk-6WIQCXOO.js';
|
|
10
10
|
import '../chunk-VX5CMNMM.js';
|
|
11
11
|
import { ManagedScripts } from '../chunk-MVLMXC44.js';
|
|
12
12
|
import { resolveApiOrigin } from '../chunk-X6F6SO4S.js';
|
|
@@ -17,9 +17,9 @@ import '../chunk-24QZEO3Q.js';
|
|
|
17
17
|
import '../chunk-GJWI74ZZ.js';
|
|
18
18
|
import '../chunk-43OCZ3JA.js';
|
|
19
19
|
import '../chunk-EKBEOXTH.js';
|
|
20
|
-
import '../chunk-
|
|
21
|
-
import '../chunk-
|
|
22
|
-
import '../chunk-
|
|
20
|
+
import '../chunk-3SDOQUUF.js';
|
|
21
|
+
import '../chunk-VDF5DFWT.js';
|
|
22
|
+
import '../chunk-AH5Q262S.js';
|
|
23
23
|
import '../chunk-PKBMQBKP.js';
|
|
24
24
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
25
25
|
|
package/dist/layout/types.d.ts
CHANGED
|
@@ -20,7 +20,7 @@ export interface AnalyticsConfig {
|
|
|
20
20
|
excludePaths?: string[];
|
|
21
21
|
/**
|
|
22
22
|
* Sub-site identifier — the domain/brand this set of pages belongs to under
|
|
23
|
-
* the Sonor project (e.g. `
|
|
23
|
+
* the Sonor project (e.g. `ohio.example.com`, `example.com`).
|
|
24
24
|
* Every analytics event is tagged with this dimension so a single Sonor
|
|
25
25
|
* project can host many sites and the dashboard can filter / roll up per
|
|
26
26
|
* site. If omitted, SiteKitLayout falls back to the host of
|
|
@@ -33,7 +33,7 @@ export interface AnalyticsConfig {
|
|
|
33
33
|
*
|
|
34
34
|
* A framed page's visitor is on whoever framed it, not on this site, so by
|
|
35
35
|
* default an embed reports nothing — see `analytics/send-gate.ts` for the
|
|
36
|
-
* phantom traffic that prompted this (
|
|
36
|
+
* phantom traffic that prompted this (agency case studies embed live
|
|
37
37
|
* client sites, and every view was writing page views into the client's own
|
|
38
38
|
* project). Same-origin frames are never blocked: a site embedding itself
|
|
39
39
|
* is a real visit to that site.
|
|
@@ -17,8 +17,8 @@ import type { SpeakableSchemaProps, SpeakableConfig } from './types';
|
|
|
17
17
|
* // In a page component
|
|
18
18
|
* <SpeakableSchema
|
|
19
19
|
* type="Article"
|
|
20
|
-
* name="Family Law Services in
|
|
21
|
-
* url="https://
|
|
20
|
+
* name="Family Law Services in Springfield"
|
|
21
|
+
* url="https://example.com/family-law"
|
|
22
22
|
* speakable={{
|
|
23
23
|
* cssSelectors: ['.page-summary', '.key-points', 'h1']
|
|
24
24
|
* }}
|
|
@@ -24,7 +24,7 @@ export declare function formatAgentAccessSection(baseUrl: string, options?: Agen
|
|
|
24
24
|
/**
|
|
25
25
|
* Add the section to finished markdown, once. Left out when the markdown
|
|
26
26
|
* already points agents at a server card: a site describing its own MCP
|
|
27
|
-
* server
|
|
27
|
+
* server in a section of its own keeps its own words.
|
|
28
28
|
*/
|
|
29
29
|
export declare function appendAgentAccessSection(markdown: string, baseUrl: string, options?: AgentAccessOptions): string;
|
|
30
30
|
/** The markdown already tells agents where an MCP server is. */
|
|
@@ -33,7 +33,7 @@ export declare function describesMcp(markdown: string): boolean;
|
|
|
33
33
|
* - `built-in`: site-kit's Sonor tools (`sonorMcpServer` / `sonorMcpTools`),
|
|
34
34
|
* what `npx sonor-setup mcp` writes. site-kit's automatic MCP extras (the
|
|
35
35
|
* llms.txt section) are on for these.
|
|
36
|
-
* - `custom`: the site runs an MCP server of its own
|
|
36
|
+
* - `custom`: the site runs an MCP server of its own. site-kit
|
|
37
37
|
* leaves it alone: nothing automatic, `sonor-setup mcp` won't write over
|
|
38
38
|
* it, and anything it adds is opt-in.
|
|
39
39
|
* - `null`: no MCP server.
|
package/dist/llms/aiRobots.d.ts
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
* - createRobotsTxtHandler(): a plain-text robots.txt route handler.
|
|
12
12
|
*
|
|
13
13
|
* No `Content-Signal` line is ever emitted (6.3.4). Google's robots.txt
|
|
14
|
-
* parser reports it as an "Unknown directive" error in Search Console
|
|
15
|
-
*
|
|
14
|
+
* parser reports it as an "Unknown directive" error in Search Console, and
|
|
15
|
+
* robots.txt is the one file
|
|
16
16
|
* that must parse cleanly for every crawler. Training/retrieval preferences
|
|
17
17
|
* are expressed by the per-crawler Allow/Disallow rules instead, which every
|
|
18
18
|
* crawler understands.
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
* Retrieval/search agents — fetch on demand or index for AI search, cite sources.
|
|
29
29
|
*
|
|
30
30
|
* MistralAI-User (Le Chat fetching a page for a user) and YouBot (You.com's
|
|
31
|
-
* search index) were added 2026-09-15
|
|
32
|
-
*
|
|
31
|
+
* search index) were added 2026-09-15, after a site had to name them in its
|
|
32
|
+
* own robots.txt beside this list.
|
|
33
33
|
*/
|
|
34
34
|
export declare const AI_RETRIEVAL_CRAWLERS: readonly ['OAI-SearchBot', 'ChatGPT-User', 'Claude-SearchBot', 'Claude-User', 'PerplexityBot', 'Perplexity-User', 'GoogleOther', 'Applebot', 'DuckAssistBot', 'MistralAI-User', 'YouBot'];
|
|
35
35
|
/**
|
package/dist/llms/api.d.ts
CHANGED
|
@@ -35,7 +35,7 @@ export declare const getFAQItems: (projectId?: string, limit?: number, site?: st
|
|
|
35
35
|
*/
|
|
36
36
|
export declare const getPageSummaries: (projectId?: string, limit?: number, site?: string) => Promise<LLMPageSummary[]>;
|
|
37
37
|
/**
|
|
38
|
-
* Fetch AI-optimized llms.txt markdown from
|
|
38
|
+
* Fetch AI-optimized llms.txt markdown from Sonor API (build-time)
|
|
39
39
|
* Used by writeLLMsTxtToPublic for static file generation
|
|
40
40
|
*
|
|
41
41
|
* Always fresh (shared/fresh-fetch.ts). With Next's patched fetch and no cache
|
|
@@ -44,7 +44,7 @@ export declare const getPageSummaries: (projectId?: string, limit?: number, site
|
|
|
44
44
|
*/
|
|
45
45
|
export declare function getOptimizedLLMsTxt(options?: {
|
|
46
46
|
full?: boolean;
|
|
47
|
-
/** Matches
|
|
47
|
+
/** Matches Sonor GET /api/public/llms/txt?publicSummaryOnly=true */
|
|
48
48
|
publicSummaryOnly?: boolean;
|
|
49
49
|
/**
|
|
50
50
|
* Sub-site host — scopes the page index to THIS domain on multi-site
|
package/dist/llms/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-
|
|
1
|
+
export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-WWSHFRDL.js';
|
|
2
2
|
export { buildAiDiscoveryHeaders, wantsLlmsDiscoveryLink } from '../chunk-PO2TRJPY.js';
|
|
3
3
|
export { AI_RETRIEVAL_CRAWLERS, AI_TRAINING_CRAWLERS, buildAiCrawlerRules, createRobotsTxtHandler } from '../chunk-QLTDFUJ7.js';
|
|
4
|
-
export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-
|
|
4
|
+
export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-VGH4MDTU.js';
|
|
5
5
|
import '../chunk-XTRZGXB2.js';
|
|
6
6
|
export { AEOBlock, AEOCitedContent, AEOClaim, AEOComparison, AEODefinition, AEOEntity, AEOProvenanceList, AEOStep, AEOSteps, AEOSummary, DEFAULT_SPEAKABLE_SELECTORS, SpeakableSchema, createSpeakableSchema, getSpeakableSelectorsForPage } from '../chunk-PSAG45YF.js';
|
|
7
|
-
export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-
|
|
7
|
+
export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-QEDHRBAT.js';
|
|
8
8
|
export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-GLHQ3LRO.js';
|
|
9
9
|
import '../chunk-L5UOHS6E.js';
|
|
10
10
|
import '../chunk-WMVK77ND.js';
|
|
@@ -15,5 +15,5 @@ import '../chunk-MJP63SSS.js';
|
|
|
15
15
|
import '../chunk-YVKRYQRG.js';
|
|
16
16
|
import '../chunk-FESKKJAS.js';
|
|
17
17
|
import '../chunk-A4CC4ZG3.js';
|
|
18
|
-
import '../chunk-
|
|
18
|
+
import '../chunk-AH5Q262S.js';
|
|
19
19
|
import '../chunk-PKBMQBKP.js';
|
package/dist/llms/links.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Single source of truth for putting llms.txt links into the site's
|
|
5
5
|
* trailing-slash shape. Two writers produce this text and neither knows the
|
|
6
|
-
* site's next.config:
|
|
6
|
+
* site's next.config: Sonor's AI-optimized file (built server-side from
|
|
7
7
|
* `business.website` + the unslashed seo_pages path) and the local generator.
|
|
8
8
|
* Both pass their output through here, so on a `trailingSlash: true` site an
|
|
9
9
|
* AI crawler following a link gets the page instead of a 308. The path rule
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @sonordev/site-kit/llms - On-demand Revalidation
|
|
3
3
|
*
|
|
4
|
-
* Provides a route handler that
|
|
4
|
+
* Provides a route handler that Sonor can call when llms-relevant data changes
|
|
5
5
|
* (page summaries, FAQs, services, etc.) to bust the Next.js ISR cache.
|
|
6
6
|
*
|
|
7
7
|
* @example
|
|
@@ -6,9 +6,8 @@
|
|
|
6
6
|
* the site, authenticated with the project key. This handler regenerates those
|
|
7
7
|
* pages, the sitemap and both llms files without a rebuild.
|
|
8
8
|
*
|
|
9
|
-
* Single source of truth for
|
|
10
|
-
* replaced per-site copies
|
|
11
|
-
* (`lib/seo-revalidation.ts`), and agency-site-kit's portfolio
|
|
9
|
+
* Single source of truth for every site's `/api/seo-revalidate` handler. It
|
|
10
|
+
* replaced per-site copies, and agency-site-kit's portfolio
|
|
12
11
|
* `createRevalidateHandler` is built on it (`extraPaths` + `extendPayload`);
|
|
13
12
|
* don't fork it back into a site or package.
|
|
14
13
|
*
|
package/dist/llms/types.d.ts
CHANGED
|
@@ -63,7 +63,7 @@ export interface LLMPageSummary {
|
|
|
63
63
|
/** Brief description of page content */
|
|
64
64
|
description?: string;
|
|
65
65
|
/**
|
|
66
|
-
* Public-safe summary for llms.txt link notes (
|
|
66
|
+
* Public-safe summary for llms.txt link notes (Sonor/Signal validated).
|
|
67
67
|
* Prefer this over `description` when building spec-aligned page lists.
|
|
68
68
|
*/
|
|
69
69
|
llms_public_summary?: string | null;
|
|
@@ -90,7 +90,7 @@ export interface GenerateLLMSTxtOptions {
|
|
|
90
90
|
/**
|
|
91
91
|
* Canonical site origin used to absolutize links (e.g. `https://example.com`),
|
|
92
92
|
* matching the sitemap helper's `baseUrl` convention. When omitted, falls back
|
|
93
|
-
* to
|
|
93
|
+
* to Sonor/local `business.website`, then `NEXT_PUBLIC_SITE_URL` / `SITE_URL`.
|
|
94
94
|
* Never derived from request headers, so /llms.txt stays statically
|
|
95
95
|
* prerenderable.
|
|
96
96
|
*/
|
|
@@ -111,7 +111,7 @@ export interface GenerateLLMSTxtOptions {
|
|
|
111
111
|
* generating outside a Next build.
|
|
112
112
|
*/
|
|
113
113
|
trailingSlash?: boolean;
|
|
114
|
-
/** When
|
|
114
|
+
/** When Sonor returns empty services/faq/pages, use this to supply local site data */
|
|
115
115
|
getLocalData?: () => Promise<LLMsDataResponse | null>;
|
|
116
116
|
/** Include business info section */
|
|
117
117
|
includeBusinessInfo?: boolean;
|
|
@@ -162,7 +162,7 @@ export interface GenerateLLMSTxtOptions {
|
|
|
162
162
|
fullLlmsTxtPath?: string;
|
|
163
163
|
/**
|
|
164
164
|
* When true, page list link notes use only validated `llms_public_summary` (no `description` fallback).
|
|
165
|
-
* Use for strict GEO alignment when every listed page must have
|
|
165
|
+
* Use for strict GEO alignment when every listed page must have Sonor-generated public summaries.
|
|
166
166
|
*/
|
|
167
167
|
pageListNotesFromPublicSummaryOnly?: boolean;
|
|
168
168
|
/**
|
|
@@ -172,9 +172,9 @@ export interface GenerateLLMSTxtOptions {
|
|
|
172
172
|
* off in route handlers so they keep their revalidate window.
|
|
173
173
|
*/
|
|
174
174
|
fresh?: boolean;
|
|
175
|
-
/** When set, overrides
|
|
175
|
+
/** When set, overrides Sonor `meta.primary_language` for the llms.txt header blockquote. */
|
|
176
176
|
headerPrimaryLanguage?: string;
|
|
177
|
-
/** When set, overrides
|
|
177
|
+
/** When set, overrides Sonor `meta.llms_disclaimer` for the llms.txt header blockquote. */
|
|
178
178
|
headerDisclaimer?: string;
|
|
179
179
|
/** Maximum number of article links to show per topic cluster (default: 5) */
|
|
180
180
|
maxArticlesPerCluster?: number;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @sonordev/site-kit/llms - Build-Time Write
|
|
3
3
|
*
|
|
4
|
-
* Fetches AI-optimized llms.txt from
|
|
4
|
+
* Fetches AI-optimized llms.txt from Sonor API and writes to public/llms.txt
|
|
5
5
|
* at build time. Integrates with sitemap flow when optimizedLLMsTxt is enabled.
|
|
6
6
|
*/
|
|
7
7
|
import type { PublicationRoutingOptions } from '../articles/routes';
|
|
@@ -16,14 +16,14 @@ export interface WriteLLMsTxtOptions {
|
|
|
16
16
|
outputDir?: string;
|
|
17
17
|
/** Write llms-full.txt as well */
|
|
18
18
|
full?: boolean;
|
|
19
|
-
/**
|
|
19
|
+
/** Sonor API URL */
|
|
20
20
|
apiUrl?: string;
|
|
21
|
-
/**
|
|
21
|
+
/** Sonor API key */
|
|
22
22
|
apiKey?: string;
|
|
23
23
|
/** Fallback to non-optimized when API fails */
|
|
24
24
|
fallbackToLocal?: boolean;
|
|
25
25
|
/**
|
|
26
|
-
* Sub-site host this build belongs to (e.g. `
|
|
26
|
+
* Sub-site host this build belongs to (e.g. `charlotte.example.com`). Scopes the
|
|
27
27
|
* page index to THIS domain: one Sonor project can host many domains, and
|
|
28
28
|
* seo_pages then holds one row PER HOST for shared paths like `/` and
|
|
29
29
|
* `/terms`. Without it the API resolves an arbitrary sibling's row, so each
|
|
@@ -38,21 +38,21 @@ export interface WriteLLMsTxtOptions {
|
|
|
38
38
|
publication?: PublicationRoutingOptions;
|
|
39
39
|
/**
|
|
40
40
|
* Match Next's `trailingSlash` in the written files' links to this site.
|
|
41
|
-
*
|
|
41
|
+
* Sonor builds its links from unslashed paths, so on a `trailingSlash: true`
|
|
42
42
|
* site they're rewritten here before the write. createSitemap passes its
|
|
43
43
|
* resolved value. The default reads next.config through Next's bundle,
|
|
44
44
|
* which a plain-Node postbuild script doesn't have, so pass it explicitly
|
|
45
45
|
* there.
|
|
46
46
|
*/
|
|
47
47
|
trailingSlash?: boolean;
|
|
48
|
-
/** When
|
|
48
|
+
/** When Sonor returns empty services/faq/pages, use this to supply local site data */
|
|
49
49
|
getLocalData?: () => Promise<LLMsDataResponse | null>;
|
|
50
50
|
/** Forward to GET /api/public/llms/txt and align local fallback with site-kit strict page notes */
|
|
51
51
|
publicSummaryOnly?: boolean;
|
|
52
52
|
/**
|
|
53
53
|
* Site-authored sections appended to llms-full.txt (never llms.txt — that
|
|
54
54
|
* file stays a compact index). Applied on BOTH content paths: appended to
|
|
55
|
-
*
|
|
55
|
+
* Sonor-optimized markdown, and forwarded to the local generator's
|
|
56
56
|
* customSections on fallback. A function form is resolved at write time so
|
|
57
57
|
* sites can build sections from local data (e.g. a verified citation
|
|
58
58
|
* registry → a "Sourced facts" section via formatSourcedFactsSection).
|
|
@@ -64,17 +64,17 @@ export interface WriteLLMsTxtOptions {
|
|
|
64
64
|
* The "Agent access" section (the site's MCP endpoint and server card), on
|
|
65
65
|
* both files and both content paths. Default: on only for site-kit's
|
|
66
66
|
* built-in MCP server (what `npx sonor-setup mcp` writes). A site that runs
|
|
67
|
-
* its own MCP server
|
|
67
|
+
* its own MCP server gets nothing unless it passes `true`, and
|
|
68
68
|
* the section is never added to markdown that already names a server card.
|
|
69
69
|
* `false` leaves it out everywhere.
|
|
70
70
|
*/
|
|
71
71
|
mcp?: boolean | AgentAccessOptions;
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
|
-
* Fetch optimized llms.txt from
|
|
74
|
+
* Fetch optimized llms.txt from Sonor and write to public/llms.txt
|
|
75
75
|
* Called at build time after sitemap sync (when optimizedLLMsTxt is enabled)
|
|
76
76
|
*
|
|
77
|
-
* Never persists a failure stub: when neither the
|
|
77
|
+
* Never persists a failure stub: when neither the Sonor API nor local data
|
|
78
78
|
* yields real content, the write is skipped entirely so a previously
|
|
79
79
|
* generated (or committed) file keeps serving.
|
|
80
80
|
*/
|