@sonordev/site-kit 8.0.0 → 8.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/agent-manifest.json +1 -1
  3. package/dist/{AnalyticsProvider-LYFDQRRJ.js → AnalyticsProvider-UWTCE5UO.js} +4 -4
  4. package/dist/{ArticleViewTracker-HG7IIRJY.js → ArticleViewTracker-MYD6SGNH.js} +3 -3
  5. package/dist/{BlocksPopup-GFX3GZIK.js → BlocksPopup-OY5G3EFH.js} +4 -4
  6. package/dist/{ChatWidget-DVS7MLBN.js → ChatWidget-BTR5VERC.js} +5 -5
  7. package/dist/{FileField-DVN7NUBI.js → FileField-DEHVYXAO.js} +3 -3
  8. package/dist/{FormSpotlight-W4SXKKO6.js → FormSpotlight-VGC4CZL4.js} +1 -1
  9. package/dist/{FormStage-JTEE5MZD.js → FormStage-CJUSCSAL.js} +1 -1
  10. package/dist/{ManagedForm-ZAUHIHGP.js → ManagedForm-JCI2KPMO.js} +6 -6
  11. package/dist/{ManagedNewsletterForm-DQIB5Z4Y.js → ManagedNewsletterForm-DTE4KKXV.js} +4 -4
  12. package/dist/{SignalCore-W5PYYMGX.js → SignalCore-LGCBQDEH.js} +3 -3
  13. package/dist/{SiteChat-MY2GATWC.js → SiteChat-6SF7PVUT.js} +1 -1
  14. package/dist/{SiteDesignReporter-ICZWEGCY.js → SiteDesignReporter-VISQZ5NQ.js} +5 -5
  15. package/dist/{SitePopups-TGULLAER.js → SitePopups-T6YPHAVY.js} +4 -4
  16. package/dist/{SitemapSync-AN2OBJE6.js → SitemapSync-VKMVRPZL.js} +4 -4
  17. package/dist/_client/booking-widget.js +5 -5
  18. package/dist/affiliates/index.js +3 -3
  19. package/dist/analytics/index.js +4 -4
  20. package/dist/{article-styles-6CM5FUMV.js → article-styles-GGZOQG5X.js} +2 -0
  21. package/dist/articles/article-photos.d.ts +9 -0
  22. package/dist/articles/index.d.ts +1 -0
  23. package/dist/articles/index.js +1 -1
  24. package/dist/articles/server-core.d.ts +2 -0
  25. package/dist/articles/server-ui.d.ts +2 -0
  26. package/dist/articles/server-ui.js +7 -5
  27. package/dist/articles/server.d.ts +2 -0
  28. package/dist/articles/server.js +2 -1
  29. package/dist/articles/types.d.ts +16 -0
  30. package/dist/chat/index.js +6 -6
  31. package/dist/{chunk-OE3NXEOF.js → chunk-255NCCPB.js} +1 -1
  32. package/dist/{chunk-IJQ767JS.js → chunk-2JEUDTL6.js} +1 -1
  33. package/dist/chunk-2UO4HPGE.js +109 -0
  34. package/dist/{chunk-BQ2CXKTQ.js → chunk-47VB5INH.js} +1 -1
  35. package/dist/{chunk-XPTJRVL2.js → chunk-4Z3DI2EL.js} +3 -2
  36. package/dist/{chunk-OGK7OL3T.js → chunk-55GHBRCN.js} +1 -1
  37. package/dist/{chunk-LKH44GI3.js → chunk-5L467Z5Q.js} +3 -3
  38. package/dist/{chunk-LBIQ5LTC.js → chunk-6VHDCJIZ.js} +1 -1
  39. package/dist/{chunk-PD7K54EQ.js → chunk-A3EU6HB5.js} +1 -1
  40. package/dist/{chunk-TOSZGJEQ.js → chunk-ADI6IYFH.js} +1 -1
  41. package/dist/{chunk-M62U7TJF.js → chunk-AIDIEVPZ.js} +1 -1
  42. package/dist/{chunk-GNSXOTIK.js → chunk-CSTC6HZO.js} +2 -2
  43. package/dist/{chunk-ROAOI6GG.js → chunk-DOMBP3FW.js} +8 -8
  44. package/dist/{chunk-KRBBH64S.js → chunk-DSNCU2E3.js} +2 -2
  45. package/dist/{chunk-6ZXJ3SXR.js → chunk-DZV3KPVF.js} +1 -1
  46. package/dist/{chunk-ZLFGXKLG.js → chunk-F2VYN3QL.js} +1 -1
  47. package/dist/{chunk-ZHNQFNO3.js → chunk-G2HCCWZQ.js} +1 -1
  48. package/dist/{chunk-K22OLAPC.js → chunk-IAYGTQJD.js} +1 -1
  49. package/dist/{chunk-PIX7FAMX.js → chunk-JT52KYHQ.js} +1 -1
  50. package/dist/{chunk-S7SSYGUJ.js → chunk-LLW5HKEE.js} +2 -2
  51. package/dist/{chunk-5S2XDG5O.js → chunk-NWVB75ER.js} +1 -1
  52. package/dist/{chunk-6QFINXLH.js → chunk-O4DETQJI.js} +1 -1
  53. package/dist/{chunk-ICAVVF6D.js → chunk-RSBMQFZW.js} +2 -2
  54. package/dist/{chunk-UUWUAMUC.js → chunk-S6IGQYHW.js} +1 -1
  55. package/dist/{chunk-J65N34YM.js → chunk-TAO6BVA2.js} +1 -1
  56. package/dist/{chunk-7YEEOIWI.js → chunk-V56RZH7J.js} +1 -1
  57. package/dist/{chunk-56VDS2RP.js → chunk-WPOFTCKL.js} +2 -2
  58. package/dist/{chunk-SBPAXWLF.js → chunk-XUCU3LX4.js} +1 -1
  59. package/dist/client/index.js +3 -3
  60. package/dist/contracts/entries.d.ts +1 -1
  61. package/dist/contracts/knowledge.d.ts +84 -0
  62. package/dist/fleet/index.js +4 -4
  63. package/dist/forms/index.js +7 -7
  64. package/dist/forms/server.js +2 -2
  65. package/dist/images/index.js +4 -4
  66. package/dist/index.js +1 -1
  67. package/dist/layout/client.js +7 -7
  68. package/dist/layout/index.js +8 -8
  69. package/dist/llms/index.js +4 -4
  70. package/dist/maps/index.js +3 -3
  71. package/dist/mcp/sonor.js +11 -9
  72. package/dist/revalidate/index.js +2 -2
  73. package/dist/runtime/index.js +3 -3
  74. package/dist/seo/client.js +4 -4
  75. package/dist/seo/index.js +4 -4
  76. package/dist/seo/llms.js +4 -4
  77. package/dist/seo/register-sitemap-cli.js +1 -1
  78. package/dist/seo/sitemap.js +2 -2
  79. package/dist/server/index.js +2 -2
  80. package/dist/shared/import-specifiers.d.ts +57 -9
  81. package/dist/shared/source-graph.d.ts +4 -1
  82. package/dist/shared/version.d.ts +1 -1
  83. package/dist/signal/index.js +2 -2
  84. package/dist/sitemap/index.js +2 -2
  85. package/dist/sync/index.js +5 -5
  86. package/dist/website/images.js +4 -4
  87. package/dist/website/index.js +5 -5
  88. package/dist/website/popups.js +4 -4
  89. package/dist/{writeLLMsTxt-UZGN6IBU.js → writeLLMsTxt-OS2WBSLM.js} +1 -1
  90. package/docs/MIGRATING-TO-8.md +1 -1
  91. package/package.json +5 -3
  92. package/src/articles/README.md +33 -0
  93. /package/dist/{chunk-TZ5RTANX.js → chunk-GC2QWXJ3.js} +0 -0
@@ -1,3 +1,4 @@
1
+ import { insertArticlePhotos } from './chunk-2UO4HPGE.js';
1
2
  import { generateArticleAuthorNode, resolveArticleArtwork, withArticleAuthorIdentity } from './chunk-QXMIKDOL.js';
2
3
  import { resolveArticleUrl, createPublicationRoutes, resolvePublicationUrl, articleCategorySlug } from './chunk-WMVK77ND.js';
3
4
  import { withoutSchemaPlaceholders } from './chunk-VWWITFWM.js';
@@ -599,7 +600,7 @@ async function generateRssFeed(options) {
599
600
  const postUrl = resolveArticleUrl(post, { ...options, siteUrl });
600
601
  const pubDate = post.published_at ? new Date(post.published_at).toUTCString() : now;
601
602
  const author = typeof post.author === "string" ? post.author : post.author?.name || "Unknown";
602
- const fullContent = post.content_html || post.content || "";
603
+ const fullContent = insertArticlePhotos(post.content_html || post.content || "", post.editorial_photos);
603
604
  const description2 = sanitizeExcerpt(post.excerpt, 300) || stripHtml(fullContent).substring(0, 300) + "...";
604
605
  rss += ` <item>
605
606
  <title>${escapeXml(post.title)}</title>
@@ -662,7 +663,7 @@ async function generateAtomFeed(options) {
662
663
  const updated = post.updated_at || post.published_at || now;
663
664
  const published = post.published_at || now;
664
665
  const author = typeof post.author === "string" ? post.author : post.author?.name || "Unknown";
665
- const fullContent = post.content_html || post.content || "";
666
+ const fullContent = insertArticlePhotos(post.content_html || post.content || "", post.editorial_photos);
666
667
  atom += ` <entry>
667
668
  <title>${escapeXml(post.title)}</title>
668
669
  <link href="${escapeXml(postUrl)}"/>
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { detectTimezone, releaseSlotHold, fetchBookingTypeDetails, fetchBookingTypes, fetchAvailability, createSlotHold, createBooking, formatDuration, formatDate, formatTime, prepareMeeting } from './chunk-IJQ767JS.js';
2
+ import { detectTimezone, releaseSlotHold, fetchBookingTypeDetails, fetchBookingTypes, fetchAvailability, createSlotHold, createBooking, formatDuration, formatDate, formatTime, prepareMeeting } from './chunk-2JEUDTL6.js';
3
3
  import { readPublishedApiConfig, DEFAULT_SONOR_API_URL } from './chunk-3G7YABRA.js';
4
4
  import { useState, useRef, useMemo, useCallback, useEffect, useId } from 'react';
5
5
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { countStageViews, countStageQuestions, useFieldControls } from './chunk-SBPAXWLF.js';
3
- import { useFormLoadedAt, useFormTracking, submitForm, useRecaptchaWarmup, useForm } from './chunk-UUWUAMUC.js';
2
+ import { countStageViews, countStageQuestions, useFieldControls } from './chunk-XUCU3LX4.js';
3
+ import { useFormLoadedAt, useFormTracking, submitForm, useRecaptchaWarmup, useForm } from './chunk-S6IGQYHW.js';
4
4
  import { readAgentSubmit, formToolAttributes } from './chunk-Q6E4OPGG.js';
5
5
  import { isFieldVisible, validateField, isFieldComplete, isDisplayOnly, unseenControlValues } from './chunk-C2FZBUSS.js';
6
6
  import { HoneypotField } from './chunk-DXO6SBMD.js';
@@ -63,7 +63,7 @@ function FormClient({
63
63
  return;
64
64
  }
65
65
  let cancelled = false;
66
- const load = resolvedExperience === "stage" ? import('./FormStage-JTEE5MZD.js').then((m) => m.FormStage) : import('./FormSpotlight-W4SXKKO6.js').then((m) => m.FormSpotlight);
66
+ const load = resolvedExperience === "stage" ? import('./FormStage-CJUSCSAL.js').then((m) => m.FormStage) : import('./FormSpotlight-VGC4CZL4.js').then((m) => m.FormSpotlight);
67
67
  load.then((Component) => {
68
68
  if (!cancelled) setExperience(() => Component);
69
69
  }).catch((err) => {
@@ -1,5 +1,5 @@
1
1
  import { resolveSiteHost } from './chunk-FESKKJAS.js';
2
- import { configureSiteCredential, currentCredential } from './chunk-ZLFGXKLG.js';
2
+ import { configureSiteCredential, currentCredential } from './chunk-F2VYN3QL.js';
3
3
 
4
4
  // src/shared/publishCredential.ts
5
5
  function publishSiteCredential({
@@ -7,7 +7,7 @@ import dynamic from 'next/dynamic';
7
7
  import { jsx } from 'react/jsx-runtime';
8
8
 
9
9
  var LazyChatWidget = dynamic(
10
- () => import('./ChatWidget-DVS7MLBN.js').then((m) => ({ default: m.ChatWidget })),
10
+ () => import('./ChatWidget-BTR5VERC.js').then((m) => ({ default: m.ChatWidget })),
11
11
  { ssr: false }
12
12
  );
13
13
  function SiteChat(props) {
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { sonorFetch } from './chunk-56VDS2RP.js';
2
+ import { sonorFetch } from './chunk-WPOFTCKL.js';
3
3
  import { useState, useCallback, useEffect } from 'react';
4
4
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
5
5
 
@@ -1,4 +1,4 @@
1
- import { generateLLMsTxt, generateLLMsFullTxt, appendAgentAccessSection } from './chunk-TZ5RTANX.js';
1
+ import { generateLLMsTxt, generateLLMsFullTxt, appendAgentAccessSection } from './chunk-GC2QWXJ3.js';
2
2
  import { createHash } from 'crypto';
3
3
  import { existsSync, readFileSync } from 'fs';
4
4
  import { join } from 'path';
@@ -2,10 +2,10 @@
2
2
  import { VISUAL_VIEWPORT_GAP_PROPERTY } from './chunk-6T6CQVNL.js';
3
3
  import { GlassStyles } from './chunk-JE4A5S4F.js';
4
4
  import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
5
- import { useForm } from './chunk-UUWUAMUC.js';
5
+ import { useForm } from './chunk-S6IGQYHW.js';
6
6
  import { parseColor, relativeLuminance, DARK_LUMINANCE, contrastRatio } from './chunk-S22FSH7C.js';
7
7
  import { readPublishedApiConfig } from './chunk-3G7YABRA.js';
8
- import { sonorFetch } from './chunk-56VDS2RP.js';
8
+ import { sonorFetch } from './chunk-WPOFTCKL.js';
9
9
  import { useState, useEffect, useRef, useLayoutEffect, useCallback, Fragment as Fragment$1 } from 'react';
10
10
  import { lexer } from 'marked';
11
11
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,12 +1,12 @@
1
1
  'use client';
2
2
  import { SITE_EDIT_PARAM } from './chunk-6G43IRWR.js';
3
- import { publishSiteCredential } from './chunk-LBIQ5LTC.js';
4
- import { FleetHeartbeat } from './chunk-ICAVVF6D.js';
3
+ import { publishSiteCredential } from './chunk-6VHDCJIZ.js';
4
+ import { FleetHeartbeat } from './chunk-RSBMQFZW.js';
5
5
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
6
6
  import { resolveSiteHost } from './chunk-FESKKJAS.js';
7
7
  import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-ZKADJNR2.js';
8
8
  import { announceFrameReady, isCrossOriginFrame } from './chunk-CAH4Y4PY.js';
9
- import { SignalBridge } from './chunk-6ZXJ3SXR.js';
9
+ import { SignalBridge } from './chunk-DZV3KPVF.js';
10
10
  import React, { useState, useRef, useCallback, useEffect, Suspense } from 'react';
11
11
  import dynamic from 'next/dynamic';
12
12
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -33,23 +33,23 @@ function startEditBridge() {
33
33
  };
34
34
  }
35
35
  var LazyAnalyticsProvider = dynamic(
36
- () => import('./AnalyticsProvider-LYFDQRRJ.js').then((m) => ({ default: m.AnalyticsProvider })),
36
+ () => import('./AnalyticsProvider-UWTCE5UO.js').then((m) => ({ default: m.AnalyticsProvider })),
37
37
  { ssr: false }
38
38
  );
39
39
  var LazySiteChat = dynamic(
40
- () => import('./SiteChat-MY2GATWC.js').then((m) => ({ default: m.SiteChat })),
40
+ () => import('./SiteChat-6SF7PVUT.js').then((m) => ({ default: m.SiteChat })),
41
41
  { ssr: false }
42
42
  );
43
43
  var LazySitePopups = dynamic(
44
- () => import('./SitePopups-TGULLAER.js').then((m) => ({ default: m.SitePopups })),
44
+ () => import('./SitePopups-T6YPHAVY.js').then((m) => ({ default: m.SitePopups })),
45
45
  { ssr: false }
46
46
  );
47
47
  var LazySiteDesignReporter = dynamic(
48
- () => import('./SiteDesignReporter-ICZWEGCY.js').then((m) => ({ default: m.SiteDesignReporter })),
48
+ () => import('./SiteDesignReporter-VISQZ5NQ.js').then((m) => ({ default: m.SiteDesignReporter })),
49
49
  { ssr: false }
50
50
  );
51
51
  var LazySitemapSync = dynamic(
52
- () => import('./SitemapSync-AN2OBJE6.js').then((m) => ({ default: m.SitemapSync })),
52
+ () => import('./SitemapSync-VKMVRPZL.js').then((m) => ({ default: m.SitemapSync })),
53
53
  { ssr: false }
54
54
  );
55
55
  function SiteKitClientProviders({
@@ -1,8 +1,8 @@
1
1
  import { toHexColor, normalizeDesignTokens, designTokensHash } from './chunk-IHG36STL.js';
2
2
  import { contrastRatio, parseColor, relativeLuminance } from './chunk-S22FSH7C.js';
3
3
  import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
4
- import { sonorFetch } from './chunk-56VDS2RP.js';
5
- import { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
4
+ import { sonorFetch } from './chunk-WPOFTCKL.js';
5
+ import { SITE_KIT_VERSION } from './chunk-NWVB75ER.js';
6
6
 
7
7
  // src/website/design.ts
8
8
  var SITE_DESIGN_PATH = "/api/public/site/design";
@@ -54,7 +54,7 @@ function useSignal() {
54
54
  return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
55
55
  }
56
56
  var LazySignalCore = dynamic(
57
- () => import('./SignalCore-W5PYYMGX.js').then((m) => ({ default: m.SignalCore })),
57
+ () => import('./SignalCore-LGCBQDEH.js').then((m) => ({ default: m.SignalCore })),
58
58
  { ssr: false }
59
59
  );
60
60
  function SignalBridge({
@@ -1,4 +1,4 @@
1
- import { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
1
+ import { SITE_KIT_VERSION } from './chunk-NWVB75ER.js';
2
2
 
3
3
  // src/shared/siteToken.ts
4
4
  var SITE_TOKEN_PREFIX = "st1.";
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { getSiteDesignTokens, tokensForReport, shouldReportDesign, sendSiteDesign } from './chunk-KRBBH64S.js';
2
+ import { getSiteDesignTokens, tokensForReport, shouldReportDesign, sendSiteDesign } from './chunk-DSNCU2E3.js';
3
3
  import { designTokensHash } from './chunk-IHG36STL.js';
4
4
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
5
5
  import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
  import { locToPath, isMalformedSitemapPath, inferPageType } from './chunk-YVKRYQRG.js';
3
3
  import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
4
- import { sonorFetch } from './chunk-56VDS2RP.js';
4
+ import { sonorFetch } from './chunk-WPOFTCKL.js';
5
5
  import { useRef, useEffect } from 'react';
6
6
 
7
7
  var SYNC_STAMP_KEY = "_sk_sitemap_synced_at";
@@ -6,7 +6,7 @@ import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
6
6
  import React, { useRef, useEffect, useState, useMemo, useCallback } from 'react';
7
7
  import { jsx, jsxs } from 'react/jsx-runtime';
8
8
 
9
- var loadInteractiveForm = () => import('./ManagedForm-ZAUHIHGP.js').then((m) => m.ManagedForm);
9
+ var loadInteractiveForm = () => import('./ManagedForm-JCI2KPMO.js').then((m) => m.ManagedForm);
10
10
  var REPLAY_WAIT_MS = 8e3;
11
11
  function FormEnhancer({
12
12
  formId,
@@ -3,7 +3,7 @@ import { DEFAULT_WIDGET_Z_INDEX } from './chunk-27FISYK4.js';
3
3
  import { readAnalyticsIdentity } from './chunk-5ROTTMBL.js';
4
4
  import { getOrCreateVisitorId } from './chunk-ZKADJNR2.js';
5
5
  import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
6
- import { sonorFetch } from './chunk-56VDS2RP.js';
6
+ import { sonorFetch } from './chunk-WPOFTCKL.js';
7
7
  import { useState, useEffect, useCallback, useRef } from 'react';
8
8
  import ReactDOM from 'react-dom';
9
9
  import dynamic from 'next/dynamic';
@@ -161,7 +161,7 @@ function activatePopup(active, id, popups) {
161
161
  return [...active, id];
162
162
  }
163
163
  var LazyBlocksPopup = dynamic(
164
- () => import('./BlocksPopup-GFX3GZIK.js').then((m) => ({ default: m.BlocksPopup })),
164
+ () => import('./BlocksPopup-OY5G3EFH.js').then((m) => ({ default: m.BlocksPopup })),
165
165
  { ssr: false }
166
166
  );
167
167
  function SitePopups(props) {
@@ -1,4 +1,4 @@
1
1
  // src/shared/version.ts
2
- var SITE_KIT_VERSION = "8.0.0";
2
+ var SITE_KIT_VERSION = "8.1.0";
3
3
 
4
4
  export { SITE_KIT_VERSION };
@@ -1,4 +1,4 @@
1
- import { FormEnhancer } from './chunk-PIX7FAMX.js';
1
+ import { FormEnhancer } from './chunk-JT52KYHQ.js';
2
2
  import { StaticForm } from './chunk-LNSF6BJC.js';
3
3
  import { serverApiFetch } from './chunk-C7TLGL3R.js';
4
4
  import { jsx } from 'react/jsx-runtime';
@@ -2,8 +2,8 @@
2
2
  import { sanitizeFleetVersion, buildFleetHeartbeatPayload } from './chunk-ZTZQPYP6.js';
3
3
  import { useDeferredActivation } from './chunk-YC7ELZS3.js';
4
4
  import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
5
- import { sonorFetch } from './chunk-56VDS2RP.js';
6
- import { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
5
+ import { sonorFetch } from './chunk-WPOFTCKL.js';
6
+ import { SITE_KIT_VERSION } from './chunk-NWVB75ER.js';
7
7
  import { useRef, useEffect } from 'react';
8
8
 
9
9
  // src/fleet/heartbeat.ts
@@ -7,7 +7,7 @@ import { DEFAULT_HONEYPOT_FIELD } from './chunk-NJCTQH2P.js';
7
7
  import { onPageLeave } from './chunk-L2V5PUFN.js';
8
8
  import { uuid } from './chunk-GJWI74ZZ.js';
9
9
  import { readPublishedApiConfig, getClientApiConfig } from './chunk-3G7YABRA.js';
10
- import { sonorFetch, sonorBeacon } from './chunk-56VDS2RP.js';
10
+ import { sonorFetch, sonorBeacon } from './chunk-WPOFTCKL.js';
11
11
  import { useRef, useCallback, useEffect, useState, useMemo } from 'react';
12
12
 
13
13
  // src/forms/field-interactions.ts
@@ -3,7 +3,7 @@ import { registerAnalyticsDispatcher } from './chunk-LCDVPAMR.js';
3
3
  import { getOrCreateVisitorId, getOrCreateSessionId } from './chunk-ZKADJNR2.js';
4
4
  import { onPageLeave } from './chunk-L2V5PUFN.js';
5
5
  import { resolveAnalyticsTarget } from './chunk-CAH4Y4PY.js';
6
- import { sonorFetch, sonorBeacon } from './chunk-56VDS2RP.js';
6
+ import { sonorFetch, sonorBeacon } from './chunk-WPOFTCKL.js';
7
7
  import { createContext, useRef, useEffect, useState, useMemo, useCallback, useContext } from 'react';
8
8
  import { usePathname } from 'next/navigation';
9
9
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,5 +1,5 @@
1
1
  import { secretsMatch, readCappedBody } from './chunk-XTRZGXB2.js';
2
- import { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
2
+ import { SITE_KIT_VERSION } from './chunk-NWVB75ER.js';
3
3
 
4
4
  // src/llms/revalidate.ts
5
5
  function createLlmsRevalidateHandler(secret, options) {
@@ -1,5 +1,5 @@
1
- import { isTokenMode, getFreshCredential, isSiteToken, refreshSiteToken, currentCredential, credentialBreakerId } from './chunk-ZLFGXKLG.js';
2
- import { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
1
+ import { isTokenMode, getFreshCredential, isSiteToken, refreshSiteToken, currentCredential, credentialBreakerId } from './chunk-F2VYN3QL.js';
2
+ import { SITE_KIT_VERSION } from './chunk-NWVB75ER.js';
3
3
 
4
4
  // src/shared/fetchWithRetry.ts
5
5
  function backoffDelay(attempt, response) {
@@ -26,7 +26,7 @@ function useFieldControls(fields) {
26
26
  }
27
27
  if (needsFile && !requested.current.file) {
28
28
  requested.current.file = true;
29
- import('./FileField-DVN7NUBI.js').then((m) => {
29
+ import('./FileField-DEHVYXAO.js').then((m) => {
30
30
  if (!cancelled) setControls((prev) => ({ ...prev, File: m.FileField }));
31
31
  }).catch(() => {
32
32
  requested.current.file = false;
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- import { publishSiteCredential } from '../chunk-LBIQ5LTC.js';
2
+ import { publishSiteCredential } from '../chunk-6VHDCJIZ.js';
3
3
  export { VISUAL_VIEWPORT_GAP_PROPERTY, VisualViewportGap, useVisualViewportGap } from '../chunk-6T6CQVNL.js';
4
4
  export { useDeferredActivation } from '../chunk-YC7ELZS3.js';
5
5
  import '../chunk-FESKKJAS.js';
@@ -8,8 +8,8 @@ export { trackConversion, trackEvent } from '../chunk-LCDVPAMR.js';
8
8
  export { getOrCreateSessionId, getOrCreateVisitorId, useSiteKitIdentity } from '../chunk-ZKADJNR2.js';
9
9
  import '../chunk-5TM3WPCI.js';
10
10
  import '../chunk-GJWI74ZZ.js';
11
- import '../chunk-ZLFGXKLG.js';
12
- import '../chunk-5S2XDG5O.js';
11
+ import '../chunk-F2VYN3QL.js';
12
+ import '../chunk-NWVB75ER.js';
13
13
  import '../chunk-PKBMQBKP.js';
14
14
 
15
15
  // src/client/SiteKitCredential.tsx
@@ -4,5 +4,5 @@
4
4
  * tsup config, its package.json check and the boundary test, so a new
5
5
  * contract is added in one place.
6
6
  */
7
- export declare const CONTRACT_ENTRIES: readonly ['forms', 'llms', 'slots', 'slot-content', 'site-cache', 'site-edit', 'website', 'color', 'fleet', 'sites', 'seo-pages', 'seo-meta', 'portfolio', 'voice', 'proposal-sitemap', 'error-page', 'schema-placeholders', 'sentences'];
7
+ export declare const CONTRACT_ENTRIES: readonly ['forms', 'llms', 'slots', 'slot-content', 'site-cache', 'site-edit', 'website', 'color', 'fleet', 'sites', 'seo-pages', 'seo-meta', 'portfolio', 'voice', 'proposal-sitemap', 'error-page', 'schema-placeholders', 'sentences', 'knowledge'];
8
8
  export type ContractEntry = (typeof CONTRACT_ENTRIES)[number];
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Knowledge contract: which Sonor records Signal reads into a project's
3
+ * knowledge, the address each record's knowledge is stored under, and the
4
+ * limits of the call that tells Signal a site's pages changed. The Sonor API
5
+ * makes those calls and Signal answers them, so both import this as
6
+ * `@sonordev/contracts/knowledge` instead of keeping lists that drift apart.
7
+ * The dashboard, which shows the owner what Signal read, reads stored
8
+ * addresses by the same rules.
9
+ *
10
+ * A record's knowledge is stored under a URI built from its kind and id:
11
+ * `<kind>://<id>` for its first chunk and `<kind>://<id>#<anchor>` for any
12
+ * more (an article indexed in full, split by heading). The scheme is what
13
+ * tells a record's rows apart from a page's passages, which are stored under
14
+ * the page's https URL. The content type can't: an article's record has the
15
+ * same content type as the page passages beside it, because a live article is
16
+ * a page on the site.
17
+ */
18
+ /**
19
+ * The kinds of Sonor record Signal indexes, in the order the dashboard lists
20
+ * them: case studies, proof records, managed FAQs, reviews, articles and
21
+ * commerce offerings. Each kind is also its URI scheme.
22
+ */
23
+ export declare const KNOWLEDGE_RECORD_KINDS: readonly ["portfolio", "proof", "faq", "review", "article", "offering"];
24
+ export type KnowledgeRecordKind = (typeof KNOWLEDGE_RECORD_KINDS)[number];
25
+ /** True for one of KNOWLEDGE_RECORD_KINDS, spelled exactly (lowercase). */
26
+ export declare function isKnowledgeRecordKind(value: unknown): value is KnowledgeRecordKind;
27
+ /** `<kind>://`, the start every address of that kind shares, for prefix queries. */
28
+ export declare function knowledgeRecordPrefix(kind: KnowledgeRecordKind): string;
29
+ /**
30
+ * Where a record's knowledge is stored: `<kind>://<id>` for its first chunk,
31
+ * `<kind>://<id>#<anchor>` for a further one. `id` is the record's UUID, and
32
+ * checking it is the caller's job: an empty id, or one holding `#`, `?`, `/`
33
+ * or whitespace, builds an address knowledgeRecordRefOf can't read back.
34
+ */
35
+ export declare function knowledgeRecordSourceUrl(kind: KnowledgeRecordKind, id: string, anchor?: string | null): string;
36
+ /**
37
+ * The address an offering had before offerings were records of their own:
38
+ * `commerce://offering/<id>`. Nothing writes it any more. Signal switches the
39
+ * row off the next time that offering syncs, and a reader counts it as the
40
+ * offering until then (knowledgeRecordRefOf).
41
+ */
42
+ export declare function legacyOfferingSourceUrl(id: string): string;
43
+ /**
44
+ * The kind of record a stored address belongs to, by its scheme
45
+ * (`article://<id>#part-2` is 'article'), or null for anything else: a page
46
+ * passage, an older page summary, a note. Case doesn't matter and surrounding
47
+ * whitespace is ignored. This is the test for "is this row a record's": it
48
+ * reads only the scheme, so it doesn't need an id, and an offering's legacy
49
+ * address isn't a record row by it.
50
+ */
51
+ export declare function knowledgeRecordKindOf(sourceUrl: string | null | undefined): KnowledgeRecordKind | null;
52
+ /** The record a stored address names. */
53
+ export interface KnowledgeRecordRef {
54
+ kind: KnowledgeRecordKind;
55
+ id: string;
56
+ }
57
+ /**
58
+ * The record a stored address names (`portfolio://<id>#part-2` is
59
+ * `{ kind: 'portfolio', id }`), or null when it names none. An offering's
60
+ * legacy address (`commerce://offering/<id>`) names that offering. Case
61
+ * doesn't matter in the scheme, surrounding whitespace is ignored, and the id
62
+ * keeps its own case.
63
+ */
64
+ export declare function knowledgeRecordRefOf(sourceUrl: string | null | undefined): KnowledgeRecordRef | null;
65
+ /**
66
+ * One page of a site in a page sync: it changed (Signal reads it live) or
67
+ * left the site (`removed`: Signal switches its passages off). Signal applies
68
+ * every removal in a call, then reads the changed pages in the order given,
69
+ * as many as it reads in one call; the rest wait for its nightly sweep. So a
70
+ * sender puts removals first, then the pages that matter most.
71
+ */
72
+ export interface KnowledgePageChange {
73
+ /** The host as the project's pages store it; null or absent is the project's primary domain. */
74
+ site?: string | null;
75
+ /** The page's path, from "/". */
76
+ path: string;
77
+ removed?: boolean;
78
+ }
79
+ /** The most pages one page sync may name. Signal refuses a longer list outright, so cut the list after ordering it. */
80
+ export declare const KNOWLEDGE_SYNC_MAX_PAGES = 500;
81
+ /** The longest path a page sync may name, in characters. */
82
+ export declare const KNOWLEDGE_SYNC_PATH_MAX_LENGTH = 2048;
83
+ /** The longest host a page sync may name, in characters (a DNS name's limit). */
84
+ export declare const KNOWLEDGE_SYNC_SITE_MAX_LENGTH = 253;
@@ -1,11 +1,11 @@
1
1
  'use client';
2
- export { FLEET_HEARTBEAT_PATH, FleetHeartbeat, detectNextVersion, sendFleetHeartbeat } from '../chunk-ICAVVF6D.js';
2
+ export { FLEET_HEARTBEAT_PATH, FleetHeartbeat, detectNextVersion, sendFleetHeartbeat } from '../chunk-RSBMQFZW.js';
3
3
  export { FLEET_CONTRACT_VERSION, FLEET_MODULES, FLEET_MODULES_MAX, FLEET_SITE_MAX_LENGTH, FLEET_VERSION_MAX_LENGTH, FLEET_VERSION_PATTERN, buildFleetHeartbeatPayload, isFleetModule, normalizeFleetModules, normalizeFleetSite, sanitizeFleetVersion } from '../chunk-ZTZQPYP6.js';
4
4
  import '../chunk-YC7ELZS3.js';
5
5
  import '../chunk-CAH4Y4PY.js';
6
6
  import '../chunk-EKBEOXTH.js';
7
7
  import '../chunk-3G7YABRA.js';
8
- import '../chunk-56VDS2RP.js';
9
- import '../chunk-ZLFGXKLG.js';
10
- import '../chunk-5S2XDG5O.js';
8
+ import '../chunk-WPOFTCKL.js';
9
+ import '../chunk-F2VYN3QL.js';
10
+ import '../chunk-NWVB75ER.js';
11
11
  import '../chunk-PKBMQBKP.js';
@@ -1,12 +1,12 @@
1
1
  'use client';
2
- export { FormClient, ManagedForm } from '../chunk-LKH44GI3.js';
2
+ export { FormClient, ManagedForm } from '../chunk-5L467Z5Q.js';
3
3
  export { DatePicker } from '../chunk-SOD2F6C2.js';
4
4
  export { FormCelebration } from '../chunk-YGGDU6C3.js';
5
- import '../chunk-SBPAXWLF.js';
6
- export { useForm, useFormTracking } from '../chunk-UUWUAMUC.js';
5
+ import '../chunk-XUCU3LX4.js';
6
+ export { useForm, useFormTracking } from '../chunk-S6IGQYHW.js';
7
7
  import '../chunk-Q6E4OPGG.js';
8
8
  import '../chunk-5ROTTMBL.js';
9
- export { FormEnhancer } from '../chunk-PIX7FAMX.js';
9
+ export { FormEnhancer } from '../chunk-JT52KYHQ.js';
10
10
  import '../chunk-C2FZBUSS.js';
11
11
  import '../chunk-YC7ELZS3.js';
12
12
  import '../chunk-DXO6SBMD.js';
@@ -18,9 +18,9 @@ import '../chunk-L2V5PUFN.js';
18
18
  import '../chunk-5TM3WPCI.js';
19
19
  import '../chunk-GJWI74ZZ.js';
20
20
  import { readPublishedApiConfig } from '../chunk-3G7YABRA.js';
21
- import { sonorFetch } from '../chunk-56VDS2RP.js';
22
- import '../chunk-ZLFGXKLG.js';
23
- import '../chunk-5S2XDG5O.js';
21
+ import { sonorFetch } from '../chunk-WPOFTCKL.js';
22
+ import '../chunk-F2VYN3QL.js';
23
+ import '../chunk-NWVB75ER.js';
24
24
  import '../chunk-PKBMQBKP.js';
25
25
 
26
26
  // src/forms/formsApi.ts
@@ -1,5 +1,5 @@
1
- export { ServerForm, getFormConfig } from '../chunk-6QFINXLH.js';
2
- import '../chunk-PIX7FAMX.js';
1
+ export { ServerForm, getFormConfig } from '../chunk-O4DETQJI.js';
2
+ import '../chunk-JT52KYHQ.js';
3
3
  import '../chunk-C2FZBUSS.js';
4
4
  import '../chunk-YC7ELZS3.js';
5
5
  export { StaticForm } from '../chunk-LNSF6BJC.js';
@@ -1,6 +1,6 @@
1
- export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-TOSZGJEQ.js';
1
+ export { ManagedImage, assignImageToSlot, clearImageSlot, fetchManagedImage, fetchManagedImages, listImageFiles, uploadImage } from '../chunk-ADI6IYFH.js';
2
2
  export { ManagedFavicon, getManagedFaviconUrl } from '../chunk-GW7GSBO7.js';
3
- import '../chunk-56VDS2RP.js';
4
- import '../chunk-ZLFGXKLG.js';
5
- import '../chunk-5S2XDG5O.js';
3
+ import '../chunk-WPOFTCKL.js';
4
+ import '../chunk-F2VYN3QL.js';
5
+ import '../chunk-NWVB75ER.js';
6
6
  import '../chunk-PKBMQBKP.js';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export { SITE_KIT_VERSION } from './chunk-5S2XDG5O.js';
1
+ export { SITE_KIT_VERSION } from './chunk-NWVB75ER.js';
2
2
  import './chunk-PKBMQBKP.js';
@@ -1,8 +1,8 @@
1
1
  'use client';
2
- export { SiteKitClientProviders } from '../chunk-ROAOI6GG.js';
2
+ export { SiteKitClientProviders } from '../chunk-DOMBP3FW.js';
3
3
  import '../chunk-6G43IRWR.js';
4
- import '../chunk-LBIQ5LTC.js';
5
- import '../chunk-ICAVVF6D.js';
4
+ import '../chunk-6VHDCJIZ.js';
5
+ import '../chunk-RSBMQFZW.js';
6
6
  import '../chunk-ZTZQPYP6.js';
7
7
  import '../chunk-YC7ELZS3.js';
8
8
  import '../chunk-FESKKJAS.js';
@@ -13,8 +13,8 @@ import '../chunk-GJWI74ZZ.js';
13
13
  import '../chunk-CAH4Y4PY.js';
14
14
  import '../chunk-EKBEOXTH.js';
15
15
  import '../chunk-3G7YABRA.js';
16
- import '../chunk-56VDS2RP.js';
17
- import '../chunk-ZLFGXKLG.js';
18
- import '../chunk-5S2XDG5O.js';
19
- import '../chunk-6ZXJ3SXR.js';
16
+ import '../chunk-WPOFTCKL.js';
17
+ import '../chunk-F2VYN3QL.js';
18
+ import '../chunk-NWVB75ER.js';
19
+ import '../chunk-DZV3KPVF.js';
20
20
  import '../chunk-PKBMQBKP.js';
@@ -1,11 +1,11 @@
1
- import { SiteKitClientProviders } from '../chunk-ROAOI6GG.js';
1
+ import { SiteKitClientProviders } from '../chunk-DOMBP3FW.js';
2
2
  import '../chunk-6G43IRWR.js';
3
- import '../chunk-LBIQ5LTC.js';
4
- import '../chunk-ICAVVF6D.js';
3
+ import '../chunk-6VHDCJIZ.js';
4
+ import '../chunk-RSBMQFZW.js';
5
5
  import '../chunk-ZTZQPYP6.js';
6
6
  import { ManagedFavicon } from '../chunk-GW7GSBO7.js';
7
7
  import '../chunk-YC7ELZS3.js';
8
- import { resolveClientCredential } from '../chunk-BQ2CXKTQ.js';
8
+ import { resolveClientCredential } from '../chunk-47VB5INH.js';
9
9
  import '../chunk-UAYAJPEP.js';
10
10
  import { ManagedScripts } from '../chunk-MVLMXC44.js';
11
11
  import { resolveApiOrigin } from '../chunk-C7TLGL3R.js';
@@ -18,10 +18,10 @@ import '../chunk-GJWI74ZZ.js';
18
18
  import '../chunk-CAH4Y4PY.js';
19
19
  import '../chunk-EKBEOXTH.js';
20
20
  import '../chunk-3G7YABRA.js';
21
- import '../chunk-56VDS2RP.js';
22
- import '../chunk-ZLFGXKLG.js';
23
- import '../chunk-5S2XDG5O.js';
24
- import '../chunk-6ZXJ3SXR.js';
21
+ import '../chunk-WPOFTCKL.js';
22
+ import '../chunk-F2VYN3QL.js';
23
+ import '../chunk-NWVB75ER.js';
24
+ import '../chunk-DZV3KPVF.js';
25
25
  import '../chunk-PKBMQBKP.js';
26
26
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
27
27
 
@@ -1,10 +1,10 @@
1
- export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-M62U7TJF.js';
1
+ export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-AIDIEVPZ.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-7YEEOIWI.js';
4
+ export { LEGACY_PUBLICATION_PATH, SEO_REVALIDATION_MAX_BODY_BYTES, SEO_REVALIDATION_MAX_ITEMS, createLlmsRevalidateHandler, createSeoRevalidationHandler, parseSeoRevalidationPayload } from '../chunk-V56RZH7J.js';
5
5
  export { AEOBlock, AEOCitedContent, AEOClaim, AEOComparison, AEODefinition, AEOEntity, AEOProvenanceList, AEOStep, AEOSteps, AEOSummary, DEFAULT_SPEAKABLE_SELECTORS, SpeakableSchema, createSpeakableSchema, getSpeakableSelectorsForPage } from '../chunk-PSAG45YF.js';
6
6
  import '../chunk-XTRZGXB2.js';
7
- export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-TZ5RTANX.js';
7
+ export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-GC2QWXJ3.js';
8
8
  export { getBusinessInfo, getFAQItems, getLLMsData, getOptimizedLLMsTxt, getPageSummaries, getServices } from '../chunk-JIH32RH2.js';
9
9
  import '../chunk-L5UOHS6E.js';
10
10
  import '../chunk-WMVK77ND.js';
@@ -16,5 +16,5 @@ import '../chunk-YVKRYQRG.js';
16
16
  import '../chunk-FESKKJAS.js';
17
17
  import '../chunk-A4CC4ZG3.js';
18
18
  import '../chunk-3G7YABRA.js';
19
- import '../chunk-5S2XDG5O.js';
19
+ import '../chunk-NWVB75ER.js';
20
20
  import '../chunk-PKBMQBKP.js';
@@ -1,9 +1,9 @@
1
1
  'use client';
2
2
  import { monotonicMs } from '../chunk-MH2DSGC6.js';
3
3
  import { getClientApiConfig } from '../chunk-3G7YABRA.js';
4
- import { sonorFetch } from '../chunk-56VDS2RP.js';
5
- import '../chunk-ZLFGXKLG.js';
6
- import '../chunk-5S2XDG5O.js';
4
+ import { sonorFetch } from '../chunk-WPOFTCKL.js';
5
+ import '../chunk-F2VYN3QL.js';
6
+ import '../chunk-NWVB75ER.js';
7
7
  import '../chunk-PKBMQBKP.js';
8
8
  import { useState, useCallback, useEffect } from 'react';
9
9
  import { APIProvider, Map as Map$1, AdvancedMarker, Pin, InfoWindow } from '@vis.gl/react-google-maps';