@sonordev/site-kit 8.0.0 → 8.0.1

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 (75) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/agent-manifest.json +1 -1
  3. package/dist/{AnalyticsProvider-LYFDQRRJ.js → AnalyticsProvider-EGCZ2MVM.js} +4 -4
  4. package/dist/{ArticleViewTracker-HG7IIRJY.js → ArticleViewTracker-ATNVMT45.js} +3 -3
  5. package/dist/{BlocksPopup-GFX3GZIK.js → BlocksPopup-F636XNO4.js} +4 -4
  6. package/dist/{ChatWidget-DVS7MLBN.js → ChatWidget-EQTLKPJX.js} +5 -5
  7. package/dist/{FileField-DVN7NUBI.js → FileField-BUD2YGN5.js} +3 -3
  8. package/dist/{FormSpotlight-W4SXKKO6.js → FormSpotlight-NGH56TGC.js} +1 -1
  9. package/dist/{FormStage-JTEE5MZD.js → FormStage-XZRC54SY.js} +1 -1
  10. package/dist/{ManagedForm-ZAUHIHGP.js → ManagedForm-CQDQ4CUN.js} +6 -6
  11. package/dist/{ManagedNewsletterForm-DQIB5Z4Y.js → ManagedNewsletterForm-KCN3BTKA.js} +4 -4
  12. package/dist/{SignalCore-W5PYYMGX.js → SignalCore-RDQPM2L2.js} +3 -3
  13. package/dist/{SiteChat-MY2GATWC.js → SiteChat-QBDOQ5ZZ.js} +1 -1
  14. package/dist/{SiteDesignReporter-ICZWEGCY.js → SiteDesignReporter-426TUCUF.js} +5 -5
  15. package/dist/{SitePopups-TGULLAER.js → SitePopups-KLUD6XIE.js} +4 -4
  16. package/dist/{SitemapSync-AN2OBJE6.js → SitemapSync-QOIMV5GO.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/articles/index.js +1 -1
  21. package/dist/articles/server-ui.js +1 -1
  22. package/dist/chat/index.js +6 -6
  23. package/dist/{chunk-UUWUAMUC.js → chunk-3222QBUS.js} +1 -1
  24. package/dist/{chunk-56VDS2RP.js → chunk-55JLUMAC.js} +2 -2
  25. package/dist/{chunk-ICAVVF6D.js → chunk-5GB2HHVJ.js} +2 -2
  26. package/dist/{chunk-TOSZGJEQ.js → chunk-6BXUSAOJ.js} +1 -1
  27. package/dist/{chunk-LBIQ5LTC.js → chunk-6KUCA5HG.js} +1 -1
  28. package/dist/{chunk-LKH44GI3.js → chunk-7BSC6HF3.js} +3 -3
  29. package/dist/{chunk-PD7K54EQ.js → chunk-AGJODJ4V.js} +1 -1
  30. package/dist/{chunk-GNSXOTIK.js → chunk-B7QRRLTU.js} +2 -2
  31. package/dist/{chunk-ZHNQFNO3.js → chunk-CAF53GKN.js} +1 -1
  32. package/dist/{chunk-7YEEOIWI.js → chunk-DWNS6ZJM.js} +1 -1
  33. package/dist/{chunk-ROAOI6GG.js → chunk-EE6IG5GK.js} +8 -8
  34. package/dist/{chunk-K22OLAPC.js → chunk-FIGIJK5F.js} +1 -1
  35. package/dist/{chunk-PIX7FAMX.js → chunk-GMXY2OOY.js} +1 -1
  36. package/dist/{chunk-BQ2CXKTQ.js → chunk-H3SDOSVU.js} +1 -1
  37. package/dist/{chunk-ZLFGXKLG.js → chunk-IY6G67EF.js} +1 -1
  38. package/dist/{chunk-KRBBH64S.js → chunk-J6N5DCGW.js} +2 -2
  39. package/dist/{chunk-SBPAXWLF.js → chunk-JCFQGEG7.js} +1 -1
  40. package/dist/{chunk-S7SSYGUJ.js → chunk-NKFRW2VB.js} +2 -2
  41. package/dist/{chunk-J65N34YM.js → chunk-OCKGB734.js} +1 -1
  42. package/dist/{chunk-5S2XDG5O.js → chunk-S5G3A7OZ.js} +1 -1
  43. package/dist/{chunk-6QFINXLH.js → chunk-VQQV7FOX.js} +1 -1
  44. package/dist/{chunk-IJQ767JS.js → chunk-YGXWG54S.js} +1 -1
  45. package/dist/{chunk-6ZXJ3SXR.js → chunk-Z4MK4VOG.js} +1 -1
  46. package/dist/{chunk-OGK7OL3T.js → chunk-Z6PVFZRI.js} +1 -1
  47. package/dist/client/index.js +3 -3
  48. package/dist/contracts/entries.d.ts +1 -1
  49. package/dist/contracts/knowledge.d.ts +84 -0
  50. package/dist/fleet/index.js +4 -4
  51. package/dist/forms/index.js +7 -7
  52. package/dist/forms/server.js +2 -2
  53. package/dist/images/index.js +4 -4
  54. package/dist/index.js +1 -1
  55. package/dist/layout/client.js +7 -7
  56. package/dist/layout/index.js +8 -8
  57. package/dist/llms/index.js +2 -2
  58. package/dist/maps/index.js +3 -3
  59. package/dist/mcp/sonor.js +6 -6
  60. package/dist/revalidate/index.js +2 -2
  61. package/dist/runtime/index.js +3 -3
  62. package/dist/seo/client.js +4 -4
  63. package/dist/seo/index.js +4 -4
  64. package/dist/seo/llms.js +2 -2
  65. package/dist/server/index.js +2 -2
  66. package/dist/shared/import-specifiers.d.ts +57 -9
  67. package/dist/shared/source-graph.d.ts +4 -1
  68. package/dist/shared/version.d.ts +1 -1
  69. package/dist/signal/index.js +2 -2
  70. package/dist/sync/index.js +5 -5
  71. package/dist/website/images.js +4 -4
  72. package/dist/website/index.js +5 -5
  73. package/dist/website/popups.js +4 -4
  74. package/docs/MIGRATING-TO-8.md +1 -1
  75. package/package.json +5 -3
@@ -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-YGXWG54S.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,5 +1,5 @@
1
1
  'use client';
2
- import { publishSiteCredential } from '../chunk-LBIQ5LTC.js';
2
+ import { publishSiteCredential } from '../chunk-6KUCA5HG.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-IY6G67EF.js';
12
+ import '../chunk-S5G3A7OZ.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-5GB2HHVJ.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-55JLUMAC.js';
9
+ import '../chunk-IY6G67EF.js';
10
+ import '../chunk-S5G3A7OZ.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-7BSC6HF3.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-JCFQGEG7.js';
6
+ export { useForm, useFormTracking } from '../chunk-3222QBUS.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-GMXY2OOY.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-55JLUMAC.js';
22
+ import '../chunk-IY6G67EF.js';
23
+ import '../chunk-S5G3A7OZ.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-VQQV7FOX.js';
2
+ import '../chunk-GMXY2OOY.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-6BXUSAOJ.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-55JLUMAC.js';
4
+ import '../chunk-IY6G67EF.js';
5
+ import '../chunk-S5G3A7OZ.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-S5G3A7OZ.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-EE6IG5GK.js';
3
3
  import '../chunk-6G43IRWR.js';
4
- import '../chunk-LBIQ5LTC.js';
5
- import '../chunk-ICAVVF6D.js';
4
+ import '../chunk-6KUCA5HG.js';
5
+ import '../chunk-5GB2HHVJ.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-55JLUMAC.js';
17
+ import '../chunk-IY6G67EF.js';
18
+ import '../chunk-S5G3A7OZ.js';
19
+ import '../chunk-Z4MK4VOG.js';
20
20
  import '../chunk-PKBMQBKP.js';
@@ -1,11 +1,11 @@
1
- import { SiteKitClientProviders } from '../chunk-ROAOI6GG.js';
1
+ import { SiteKitClientProviders } from '../chunk-EE6IG5GK.js';
2
2
  import '../chunk-6G43IRWR.js';
3
- import '../chunk-LBIQ5LTC.js';
4
- import '../chunk-ICAVVF6D.js';
3
+ import '../chunk-6KUCA5HG.js';
4
+ import '../chunk-5GB2HHVJ.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-H3SDOSVU.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-55JLUMAC.js';
22
+ import '../chunk-IY6G67EF.js';
23
+ import '../chunk-S5G3A7OZ.js';
24
+ import '../chunk-Z4MK4VOG.js';
25
25
  import '../chunk-PKBMQBKP.js';
26
26
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
27
27
 
@@ -1,7 +1,7 @@
1
1
  export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-M62U7TJF.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-DWNS6ZJM.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
7
  export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-TZ5RTANX.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-S5G3A7OZ.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-55JLUMAC.js';
5
+ import '../chunk-IY6G67EF.js';
6
+ import '../chunk-S5G3A7OZ.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';
package/dist/mcp/sonor.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { fetchReviews, fetchReviewStats } from '../chunk-NFRJTOTB.js';
2
2
  import { toolErrorResult } from '../chunk-FYAB6CXS.js';
3
- import { fetchBookingTypes, fetchAvailability } from '../chunk-IJQ767JS.js';
3
+ import { fetchBookingTypes, fetchAvailability } from '../chunk-YGXWG54S.js';
4
4
  import { getLLMsData, getServices, getFAQItems, getPageSummaries } from '../chunk-JIH32RH2.js';
5
- import { getFormConfig } from '../chunk-6QFINXLH.js';
6
- import '../chunk-PIX7FAMX.js';
5
+ import { getFormConfig } from '../chunk-VQQV7FOX.js';
6
+ import '../chunk-GMXY2OOY.js';
7
7
  import '../chunk-C2FZBUSS.js';
8
8
  import '../chunk-YC7ELZS3.js';
9
9
  import '../chunk-LNSF6BJC.js';
@@ -25,9 +25,9 @@ import '../chunk-MH2DSGC6.js';
25
25
  import { resolveSiteHost } from '../chunk-FESKKJAS.js';
26
26
  import '../chunk-A4CC4ZG3.js';
27
27
  import '../chunk-3G7YABRA.js';
28
- import '../chunk-56VDS2RP.js';
29
- import '../chunk-ZLFGXKLG.js';
30
- import { SITE_KIT_VERSION } from '../chunk-5S2XDG5O.js';
28
+ import '../chunk-55JLUMAC.js';
29
+ import '../chunk-IY6G67EF.js';
30
+ import { SITE_KIT_VERSION } from '../chunk-S5G3A7OZ.js';
31
31
  import '../chunk-PKBMQBKP.js';
32
32
  import 'server-only';
33
33
  import { after } from 'next/server.js';
@@ -1,7 +1,7 @@
1
- import { createSeoRevalidationHandler } from '../chunk-7YEEOIWI.js';
1
+ import { createSeoRevalidationHandler } from '../chunk-DWNS6ZJM.js';
2
2
  import '../chunk-XTRZGXB2.js';
3
3
  export { SITE_CACHE_TAGS, SITE_REVALIDATE_PATH, isSiteRevalidatePong } from '../chunk-6KU7STM3.js';
4
- import '../chunk-5S2XDG5O.js';
4
+ import '../chunk-S5G3A7OZ.js';
5
5
  import '../chunk-PKBMQBKP.js';
6
6
 
7
7
  // src/revalidate/index.ts
@@ -1,7 +1,7 @@
1
1
  export { readAnalyticsIdentity } from '../chunk-5ROTTMBL.js';
2
2
  import '../chunk-5TM3WPCI.js';
3
3
  export { DEFAULT_SONOR_API_URL, getClientApiConfig, readPublishedApiConfig } from '../chunk-3G7YABRA.js';
4
- export { sonorFetch } from '../chunk-56VDS2RP.js';
5
- import '../chunk-ZLFGXKLG.js';
6
- import '../chunk-5S2XDG5O.js';
4
+ export { sonorFetch } from '../chunk-55JLUMAC.js';
5
+ import '../chunk-IY6G67EF.js';
6
+ import '../chunk-S5G3A7OZ.js';
7
7
  import '../chunk-PKBMQBKP.js';
@@ -1,10 +1,10 @@
1
1
  'use client';
2
- export { SitemapSync } from '../chunk-K22OLAPC.js';
2
+ export { SitemapSync } from '../chunk-FIGIJK5F.js';
3
3
  import '../chunk-YVKRYQRG.js';
4
4
  import '../chunk-CAH4Y4PY.js';
5
5
  import '../chunk-EKBEOXTH.js';
6
6
  import '../chunk-3G7YABRA.js';
7
- import '../chunk-56VDS2RP.js';
8
- import '../chunk-ZLFGXKLG.js';
9
- import '../chunk-5S2XDG5O.js';
7
+ import '../chunk-55JLUMAC.js';
8
+ import '../chunk-IY6G67EF.js';
9
+ import '../chunk-S5G3A7OZ.js';
10
10
  import '../chunk-PKBMQBKP.js';
package/dist/seo/index.js CHANGED
@@ -2,7 +2,7 @@ export { ManagedNoScripts, ManagedScripts } from '../chunk-MVLMXC44.js';
2
2
  import { pickManagedLlmSchemaForJsonLd } from '../chunk-NZ4RXN3G.js';
3
3
  import { safeJsonLd } from '../chunk-4KZ6W3ZH.js';
4
4
  import { withoutSchemaPlaceholders } from '../chunk-VWWITFWM.js';
5
- export { SitemapSync } from '../chunk-K22OLAPC.js';
5
+ export { SitemapSync } from '../chunk-FIGIJK5F.js';
6
6
  import { getManagedMetadata, mergeAlternates } from '../chunk-URJN75ZG.js';
7
7
  export { generateSitemap, getABVariant, getManagedMetadata, getManagedMetadataWithAB, getRedirect, getRobotsDirective, isIndexable } from '../chunk-URJN75ZG.js';
8
8
  import { getSchemaMarkups, getSEOPageData, getEntityEnhancedSchema, getFAQData, getInternalLinks, pruneSchemaTypes } from '../chunk-Y35BWW2C.js';
@@ -19,9 +19,9 @@ import '../chunk-A4CC4ZG3.js';
19
19
  import '../chunk-CAH4Y4PY.js';
20
20
  import '../chunk-EKBEOXTH.js';
21
21
  import '../chunk-3G7YABRA.js';
22
- import '../chunk-56VDS2RP.js';
23
- import '../chunk-ZLFGXKLG.js';
24
- import '../chunk-5S2XDG5O.js';
22
+ import '../chunk-55JLUMAC.js';
23
+ import '../chunk-IY6G67EF.js';
24
+ import '../chunk-S5G3A7OZ.js';
25
25
  import '../chunk-PKBMQBKP.js';
26
26
  import { Suspense } from 'react';
27
27
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
package/dist/seo/llms.js CHANGED
@@ -1,7 +1,7 @@
1
1
  export { createLLMsFullTxtHandler, createLLMsTxtHandler, formatSourcedFactsSection, llmsResponseHeaders } from '../chunk-M62U7TJF.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-DWNS6ZJM.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
7
  export { AGENT_ACCESS_HEADING, appendAgentAccessSection, describesMcp, detectMcpServer, formatAgentAccessSection, generateLLMsFullTxt, generateLLMsTxt, writeLLMsTxtToPublic } from '../chunk-TZ5RTANX.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-S5G3A7OZ.js';
20
20
  import '../chunk-PKBMQBKP.js';
@@ -1,7 +1,7 @@
1
- export { resolveClientCredential } from '../chunk-BQ2CXKTQ.js';
1
+ export { resolveClientCredential } from '../chunk-H3SDOSVU.js';
2
2
  import '../chunk-UAYAJPEP.js';
3
3
  export { SITE_CACHE_TAGS } from '../chunk-6KU7STM3.js';
4
4
  export { isNextControlFlow, requireServerApiConfig, resolveApiOrigin, resolveServerApiConfig, serverApiFetch } from '../chunk-C7TLGL3R.js';
5
5
  import '../chunk-MH2DSGC6.js';
6
- import '../chunk-5S2XDG5O.js';
6
+ import '../chunk-S5G3A7OZ.js';
7
7
  import '../chunk-PKBMQBKP.js';
@@ -1,20 +1,28 @@
1
1
  /**
2
2
  * The module specifiers a piece of code imports, and what an isomorphic entry
3
- * may not import: the one definition behind both the source-level boundary
4
- * checks (./boundary-graph.ts) and the built-chunk check
5
- * (scripts/kit-post-build.ts), which had each grown their own copy.
3
+ * may not import: the one definition behind the source-level boundary checks
4
+ * (./boundary-graph.ts), the built-chunk check (scripts/kit-post-build.ts),
5
+ * the doctor's import graph (./source-graph.ts) and sonor-setup's codemod,
6
+ * which had each grown their own copy.
6
7
  *
7
- * Test and build infrastructure: nothing ships from here (tsconfig.build.json
8
- * leaves it out of the declarations, and no entry reaches it).
8
+ * No site-kit entry reaches it. sonor-setup bundles it.
9
9
  *
10
- * Callers strip comments (and type-only imports, where erased imports don't
11
- * count) first; a comment that names an import is not an import.
10
+ * `importSpecifiers` reads code. A caller either strips comments first (and
11
+ * type-only imports, where erased imports don't count), or hands it
12
+ * `codeOnly(source, { syntax: codeSyntaxOf(file) })`, which also blanks the
13
+ * text of strings and of JSX elements, so an import written out inside a code
14
+ * sample isn't read as one.
12
15
  */
16
+ export interface ImportSpecifierOptions {
17
+ /** Read `require()` calls too. */
18
+ require?: boolean;
19
+ }
13
20
  /**
14
21
  * Every specifier `code` imports, in the order they appear, without a query or
15
- * hash a bundler would strip (`./server?raw` is `./server`).
22
+ * hash a bundler would strip (`./server?raw` is `./server`). With
23
+ * `{ require: true }`, the modules it requires as well.
16
24
  */
17
- export declare function importSpecifiers(code: string): string[];
25
+ export declare function importSpecifiers(code: string, options?: ImportSpecifierOptions): string[];
18
26
  /**
19
27
  * A specifier an isomorphic entry's graph must not import: React, Next or
20
28
  * `server-only` (hooks, a client reference, or a hard error on the other
@@ -24,3 +32,43 @@ export declare function importSpecifiers(code: string): string[];
24
32
  * counts.
25
33
  */
26
34
  export declare function isNotIsomorphicSpecifier(spec: string): boolean;
35
+ /**
36
+ * What `codeOnly` reads a file as. `js` is TypeScript or JavaScript with no
37
+ * JSX: in a `.ts` file `<T>(x: T) => x` is a generic, not an element. `jsx`
38
+ * also blanks the text of each JSX element, as it does a string's (`.tsx`,
39
+ * `.jsx`, `.js`). `mdx` reads only an MDX file's import and export blocks.
40
+ */
41
+ export type CodeSyntax = 'js' | 'jsx' | 'mdx';
42
+ export interface CodeOnlyOptions {
43
+ /** What the source is written in (`js` when not given). Pick it with `codeSyntaxOf`. */
44
+ syntax?: CodeSyntax;
45
+ }
46
+ /** The syntax `codeOnly` reads a file in, from its name. The one map from an extension to it. */
47
+ export declare function codeSyntaxOf(filePath: string): CodeSyntax;
48
+ /**
49
+ * `source` as a specifier reader should see it: comments blanked, and the text
50
+ * of every string, template and regular expression literal that can't be a
51
+ * module specifier blanked too. A blanked character becomes a space and line
52
+ * breaks stay, so a position in the result is the same position in `source`
53
+ * (a caller can match the result and edit `source` there).
54
+ *
55
+ * A specifier is one token, with no space, quote or backslash in it (and, in a
56
+ * template, no `${}`), so `'@sonordev/x'` in `import a from '@sonordev/x'`
57
+ * stays as written. A string that holds code as text, such as a code sample on
58
+ * a docs page (`` `import { A } from '@sonordev/x'` ``) or a JSX prop, reads
59
+ * as blank, and the import written out inside it isn't one.
60
+ *
61
+ * With `{ syntax: 'jsx' }` the text of a JSX element is blanked too, as a
62
+ * string's is: `<code>import A from '@sonordev/x'</code>` and a sentence that
63
+ * names a path import nothing, while code in the element's braces is read. A
64
+ * `<` is taken for an element only where a comparison can't stand (after
65
+ * `(`, `=`, `return`, `=>`...), and one that turns out not to be (a generic
66
+ * such as `<T,>(x: T) => x`, or a tag that never closes) is read again as
67
+ * code. With `{ syntax: 'mdx' }` only the import and export blocks are read.
68
+ *
69
+ * A lexer, not a parser. It tells a regular expression from a division by the
70
+ * code before the slash, ends a string at the end of its line, and reads a
71
+ * backtick that is never closed as a stray character. A file it can't fully
72
+ * follow (a syntax error) costs it a line, not the rest of the file.
73
+ */
74
+ export declare function codeOnly(source: string, options?: CodeOnlyOptions): string;
@@ -51,7 +51,10 @@ export interface SourceGraphOptions {
51
51
  /** Stop after this many files in total. Default 300. */
52
52
  maxFiles?: number;
53
53
  }
54
- /** Every module specifier a file imports, exports from, or requires. */
54
+ /**
55
+ * Every module specifier a file imports, exports from, or requires, once each.
56
+ * Read with ./import-specifiers, the one specifier reader in this repo.
57
+ */
55
58
  export declare function importSpecifiers(source: string): string[];
56
59
  /**
57
60
  * Read `entries` (absolute paths) and the local modules they import, entries
@@ -7,4 +7,4 @@
7
7
  * it matches package.json at publish time, and version.test.ts asserts it in
8
8
  * dev, so it can't silently drift.
9
9
  */
10
- export declare const SITE_KIT_VERSION = "8.0.0";
10
+ export declare const SITE_KIT_VERSION = "8.0.1";
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- import { useSignalExperiment, useSignalEvent } from '../chunk-6ZXJ3SXR.js';
3
- export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-6ZXJ3SXR.js';
2
+ import { useSignalExperiment, useSignalEvent } from '../chunk-Z4MK4VOG.js';
3
+ export { SignalBridge, useSignal, useSignalConfig, useSignalEvent, useSignalExperiment, useSignalOutcome } from '../chunk-Z4MK4VOG.js';
4
4
  import '../chunk-PKBMQBKP.js';
5
5
  import React, { useEffect } from 'react';
6
6
  import { jsx, Fragment } from 'react/jsx-runtime';
@@ -1,7 +1,7 @@
1
- export { BookingWidget } from '../chunk-OGK7OL3T.js';
2
- export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-IJQ767JS.js';
1
+ export { BookingWidget } from '../chunk-Z6PVFZRI.js';
2
+ export { createBooking, createSlotHold, detectTimezone, fetchAvailability, fetchAvailableDates, fetchBookingTypeDetails, fetchBookingTypes, formatDate, formatDuration, formatTime, prepareMeeting, releaseSlotHold } from '../chunk-YGXWG54S.js';
3
3
  import '../chunk-3G7YABRA.js';
4
- import '../chunk-56VDS2RP.js';
5
- import '../chunk-ZLFGXKLG.js';
6
- import '../chunk-5S2XDG5O.js';
4
+ import '../chunk-55JLUMAC.js';
5
+ import '../chunk-IY6G67EF.js';
6
+ import '../chunk-S5G3A7OZ.js';
7
7
  import '../chunk-PKBMQBKP.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-6BXUSAOJ.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-55JLUMAC.js';
4
+ import '../chunk-IY6G67EF.js';
5
+ import '../chunk-S5G3A7OZ.js';
6
6
  import '../chunk-PKBMQBKP.js';
@@ -1,6 +1,6 @@
1
1
  'use client';
2
- export { SiteDesignReporter } from '../chunk-ZHNQFNO3.js';
3
- export { SITE_DESIGN_PATH, cleanFontStack, colorToHex, getSiteDesignTokens, measureSiteDesign, readDeclaredDesign, sendSiteDesign } from '../chunk-KRBBH64S.js';
2
+ export { SiteDesignReporter } from '../chunk-CAF53GKN.js';
3
+ export { SITE_DESIGN_PATH, cleanFontStack, colorToHex, getSiteDesignTokens, measureSiteDesign, readDeclaredDesign, sendSiteDesign } from '../chunk-J6N5DCGW.js';
4
4
  export { DEFAULT_POPUP_TOKENS, PopupBlocks } from '../chunk-BF7TZYC3.js';
5
5
  import '../chunk-IHG36STL.js';
6
6
  import '../chunk-YC7ELZS3.js';
@@ -8,7 +8,7 @@ import '../chunk-S22FSH7C.js';
8
8
  import '../chunk-CAH4Y4PY.js';
9
9
  import '../chunk-EKBEOXTH.js';
10
10
  import '../chunk-3G7YABRA.js';
11
- import '../chunk-56VDS2RP.js';
12
- import '../chunk-ZLFGXKLG.js';
13
- import '../chunk-5S2XDG5O.js';
11
+ import '../chunk-55JLUMAC.js';
12
+ import '../chunk-IY6G67EF.js';
13
+ import '../chunk-S5G3A7OZ.js';
14
14
  import '../chunk-PKBMQBKP.js';
@@ -1,5 +1,5 @@
1
1
  'use client';
2
- export { SitePopups } from '../chunk-S7SSYGUJ.js';
2
+ export { SitePopups } from '../chunk-NKFRW2VB.js';
3
3
  import '../chunk-27FISYK4.js';
4
4
  export { DEFAULT_POPUP_TOKENS, PopupBlocks } from '../chunk-BF7TZYC3.js';
5
5
  import '../chunk-IHG36STL.js';
@@ -11,7 +11,7 @@ import '../chunk-GJWI74ZZ.js';
11
11
  import '../chunk-CAH4Y4PY.js';
12
12
  import '../chunk-EKBEOXTH.js';
13
13
  import '../chunk-3G7YABRA.js';
14
- import '../chunk-56VDS2RP.js';
15
- import '../chunk-ZLFGXKLG.js';
16
- import '../chunk-5S2XDG5O.js';
14
+ import '../chunk-55JLUMAC.js';
15
+ import '../chunk-IY6G67EF.js';
16
+ import '../chunk-S5G3A7OZ.js';
17
17
  import '../chunk-PKBMQBKP.js';
@@ -52,7 +52,7 @@ It prints what it would change and writes nothing. When the diff looks right, ap
52
52
  npx sonor-setup codemod --only site-kit-8 --write
53
53
  ```
54
54
 
55
- The codemod needs sonor-setup 7.3.0 or later, and `npx` fetches the latest. It reads source files anywhere in the project (`pages/`, `hooks/` and `scripts/` count, not just `app/` and `src/`), but not `node_modules`, build output or `public/`. It rewrites your imports (the table below). When your code imports commerce, it also adds `@sonordev/commerce-kit` to package.json and raises site-kit's range to `^8.0.0`, and if `pnpm-workspace.yaml` lists site-kit under `minimumReleaseAgeExclude` it adds commerce-kit there too. Anything it can't rewrite safely it flags, with the fix, so you can finish those by hand: a `require()` of an old path (commerce-kit is ESM only, so that call needs an `import`), an import of a [removed](#what-was-removed) entry, or a `sonorMcpServer` whose `offerings` has no reader (see [The MCP change](#the-mcp-change)). Run it in the app's folder: in a monorepo, once per app that imports commerce, because it stops at a workspace root.
55
+ The codemod needs sonor-setup 7.3.1 or later, and `npx` fetches the latest. It reads source files anywhere in the project (`pages/`, `hooks/` and `scripts/` count, not just `app/` and `src/`), but not `node_modules`, build output or `public/`. It rewrites your imports (the table below), and goes by imports only: a path that appears in a comment or inside a string, such as a code sample or a redirect table, is left as it is. When your code imports commerce, it also adds `@sonordev/commerce-kit` to package.json and raises site-kit's range to `^8.0.0`, and if `pnpm-workspace.yaml` lists site-kit under `minimumReleaseAgeExclude` it adds commerce-kit there too. Anything it can't rewrite safely it flags, with the fix, so you can finish those by hand: a `require()` of an old path (commerce-kit is ESM only, so that call needs an `import`), an import of a [removed](#what-was-removed) entry, or a `sonorMcpServer` whose `offerings` has no reader (see [The MCP change](#the-mcp-change)). Run it in the app's folder: in a monorepo, once per app that imports commerce, because it stops at a workspace root.
56
56
 
57
57
  `--check` is the gate: it exits 1 while a file needs rewriting and while a manual follow-up remains, so exit 0 means there's nothing left for you to do.
58
58