@se-studio/core-ui 1.14.7 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @se-studio/core-ui
2
2
 
3
+ ## 1.15.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Agent readiness (Band A): Content Signals via `formatRobotsTxt` / `createRobotsTxtResponse`, markdown Accept negotiation path helpers, and discovery Link header builders for marketing sites.
8
+
9
+ ## 1.14.9
10
+
11
+ ### Patch Changes
12
+
13
+ - 748ba92: Pin @radix-ui/react-slot to 1.3.0 (1.3.1 breaks Next RSC builds with createContext is not a function).
14
+
15
+ ## 1.14.8
16
+
17
+ ### Patch Changes
18
+
19
+ - Share a singleton Analytics React context across duplicate package instances and fall back to a no-op adapter instead of throwing, so client hydration no longer white-screens when core-ui is bundled more than once.
20
+
3
21
  ## 1.14.7
4
22
 
5
23
  ### Patch Changes
package/README.md CHANGED
@@ -411,6 +411,9 @@ const previewConfig = mergeCmsRendererConfig(
411
411
  #### Utilities
412
412
  - **`createRobotsConfig`** - Builds `MetadataRoute.Robots` for `src/app/robots.ts` with shared production disallow defaults; configurable via `pathPrefix`, `apiPrefixes`, `disallowExtra`, `disallowOmit`, and `blockTrackingQueryParams`
413
413
  - **`buildRobotsDisallow`** - Returns the production disallow path list (for plain-text robots route handlers)
414
+ - **`formatRobotsTxt` / `createRobotsTxtResponse`** - Plain-text robots.txt including optional Content Signals (`src/app/robots.txt/route.ts`)
415
+ - **`resolveMarkdownNegotiationPath` / `prefersMarkdownAccept` / `htmlPathToMarkdownPath`** - Middleware helpers for `Accept: text/markdown` → existing `/{path}.md` rewrites
416
+ - **`appendAgentDiscoveryLinkHeaders` / `buildAgentDiscoveryLinkValues`** - Homepage/document `Link` headers (`describedby` → `/llms.txt`, alternate markdown)
414
417
  - **`buildPageMetadata`** - Generates Next.js metadata object from CMS page model
415
418
  - **`handleCmsError`** - Error handling utility for CMS operations
416
419
  - **`getRelatedArticles`** - Fetches related articles for collections (limited sets): `contents` article refs provide IDs/order only; display data is always resolved from `contentfulAllArticleLinks` (or `getAllArticleLinks` via `createAppHelpers`) so the `article` cache tag revalidates on publish. Auto-fill uses `filterRelatedArticles`. Tag criteria come from collection tag links, or fall back to `pageContext.tag`, then the current article's tags on article detail pages. See also full-list filtering via `getAllArticleLinks` (below).
@@ -1,16 +1,17 @@
1
- import type React from 'react';
1
+ import type { ReactNode } from 'react';
2
2
  import type { AnalyticsAdapter } from './types';
3
3
  interface AnalyticsProviderProps {
4
4
  adapter: AnalyticsAdapter;
5
- children: React.ReactNode;
5
+ children: ReactNode;
6
6
  }
7
7
  /**
8
8
  * Provider component that makes analytics adapter available to child components
9
9
  */
10
- export declare function AnalyticsProvider({ adapter, children }: AnalyticsProviderProps): React.JSX.Element;
10
+ export declare function AnalyticsProvider({ adapter, children }: AnalyticsProviderProps): import("react").JSX.Element;
11
11
  /**
12
- * Hook to access the analytics adapter from context
13
- * @throws Error if used outside of AnalyticsProvider
12
+ * Hook to access the analytics adapter from context.
13
+ * Returns a no-op adapter when no provider is present so client components never crash
14
+ * the React tree (SSR prerender and defensive client fallback).
14
15
  */
15
16
  export declare function useAnalyticsContext(): AnalyticsAdapter;
16
17
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsProvider.d.ts","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAWhD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,sBAAsB,qBAE9E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAYtD"}
1
+ {"version":3,"file":"AnalyticsProvider.d.ts","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAgChD,UAAU,sBAAsB;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,sBAAsB,+BAE9E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,CAYtD"}
@@ -1,9 +1,24 @@
1
1
  'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { createContext, useContext } from 'react';
4
- const AnalyticsContext = createContext(null);
5
- /** Silent adapter for SSR when provider context is not in the same bundle (e.g. static / prerender). */
6
- const SSR_ANALYTICS_FALLBACK = {
4
+ /** Stable global key so duplicate package instances share one React context identity. */
5
+ const GLOBAL_CONTEXT_KEY = '__SE_STUDIO_ANALYTICS_CONTEXT__';
6
+ /**
7
+ * Share one React context identity even when `@se-studio/core-ui` is duplicated in the
8
+ * client bundle (pnpm peer isolation / multi-chunk). Separate module evaluations that each
9
+ * call `createContext()` would otherwise break the provider tree and crash the site with
10
+ * "useAnalyticsContext must be used within an AnalyticsProvider".
11
+ */
12
+ function getAnalyticsContext() {
13
+ const globalStore = globalThis;
14
+ if (!globalStore[GLOBAL_CONTEXT_KEY]) {
15
+ globalStore[GLOBAL_CONTEXT_KEY] = createContext(null);
16
+ }
17
+ return globalStore[GLOBAL_CONTEXT_KEY];
18
+ }
19
+ const AnalyticsContext = getAnalyticsContext();
20
+ /** Silent no-op when provider is missing (SSR prerender, or no layout provider). */
21
+ const NOOP_ANALYTICS_FALLBACK = {
7
22
  trackEvent() { },
8
23
  trackPage() { },
9
24
  trackClick() { },
@@ -15,20 +30,19 @@ export function AnalyticsProvider({ adapter, children }) {
15
30
  return _jsx(AnalyticsContext.Provider, { value: adapter, children: children });
16
31
  }
17
32
  /**
18
- * Hook to access the analytics adapter from context
19
- * @throws Error if used outside of AnalyticsProvider
33
+ * Hook to access the analytics adapter from context.
34
+ * Returns a no-op adapter when no provider is present so client components never crash
35
+ * the React tree (SSR prerender and defensive client fallback).
20
36
  */
21
37
  export function useAnalyticsContext() {
22
38
  const adapter = useContext(AnalyticsContext);
23
39
  if (adapter) {
24
40
  return adapter;
25
41
  }
26
- // App Router can prerender client components (e.g. TrackedLink on /) in a server
27
- // chunk separate from the layout AnalyticsProvider client bundle. Avoid failing the build;
28
- // the hydrated client render uses the real provider.
29
- if (typeof window === 'undefined') {
30
- return SSR_ANALYTICS_FALLBACK;
42
+ // Dev-only signal that tracking is a no-op (missing layout provider or mis-wiring).
43
+ if (process.env.NODE_ENV !== 'production' && typeof window !== 'undefined') {
44
+ console.warn('[analytics] useAnalyticsContext used without AnalyticsProvider; tracking is a no-op.');
31
45
  }
32
- throw new Error('useAnalyticsContext must be used within an AnalyticsProvider');
46
+ return NOOP_ANALYTICS_FALLBACK;
33
47
  }
34
48
  //# sourceMappingURL=AnalyticsProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsProvider.js","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD,MAAM,gBAAgB,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;AAEtE,wGAAwG;AACxG,MAAM,sBAAsB,GAAqB;IAC/C,UAAU,KAAI,CAAC;IACf,SAAS,KAAI,CAAC;IACd,UAAU,KAAI,CAAC;CAChB,CAAC;AAOF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAA0B;IAC7E,OAAO,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA6B,CAAC;AAC3F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,iFAAiF;IACjF,2FAA2F;IAC3F,qDAAqD;IACrD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,sBAAsB,CAAC;IAChC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"AnalyticsProvider.js","sourceRoot":"","sources":["../../src/analytics/AnalyticsProvider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGlD,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;AAM7D;;;;;GAKG;AACH,SAAS,mBAAmB;IAC1B,MAAM,WAAW,GAAG,UAAwC,CAAC;IAC7D,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrC,WAAW,CAAC,kBAAkB,CAAC,GAAG,aAAa,CAA0B,IAAI,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,WAAW,CAAC,kBAAkB,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,gBAAgB,GAAG,mBAAmB,EAAE,CAAC;AAE/C,oFAAoF;AACpF,MAAM,uBAAuB,GAAqB;IAChD,UAAU,KAAI,CAAC;IACf,SAAS,KAAI,CAAC;IACd,UAAU,KAAI,CAAC;CAChB,CAAC;AAOF;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAA0B;IAC7E,OAAO,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,OAAO,YAAG,QAAQ,GAA6B,CAAC;AAC3F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,oFAAoF;IACpF,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3E,OAAO,CAAC,IAAI,CACV,sFAAsF,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,uBAAuB,CAAC;AACjC,CAAC"}
@@ -2,16 +2,14 @@ import type { IAnalyticsContext, ILinkTrackingInfo } from '@se-studio/core-data-
2
2
  /**
3
3
  * Hook for accessing analytics functions.
4
4
  *
5
- * Provides a clean API for tracking events, pages, and clicks. Must be used
6
- * within an AnalyticsProvider context.
5
+ * Provides a clean API for tracking events, pages, and clicks. Prefer using
6
+ * inside an `AnalyticsProvider`; without one, calls are silent no-ops.
7
7
  *
8
8
  * @returns Object with tracking functions:
9
9
  * - `trackEvent` - Track custom events
10
10
  * - `trackPage` - Track page views
11
11
  * - `trackClick` - Track click interactions
12
12
  *
13
- * @throws {Error} If used outside of AnalyticsProvider
14
- *
15
13
  * @example Basic usage
16
14
  * ```tsx
17
15
  * import { useAnalytics } from '@se-studio/core-ui';
@@ -1 +1 @@
1
- {"version":3,"file":"useAnalytics.d.ts","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAKvF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,YAAY;wBAGhB,MAAM,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAO7C,MAAM,YAAY,MAAM,oBAAoB,iBAAiB;gCAalD,MAAM,YACX,MAAM,oBACE,iBAAiB,YACzB;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,iBAAiB,CAAC;KAClC;EAsBN"}
1
+ {"version":3,"file":"useAnalytics.d.ts","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAKvF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,YAAY;wBAGhB,MAAM,cAAc,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;qBAO7C,MAAM,YAAY,MAAM,oBAAoB,iBAAiB;gCAalD,MAAM,YACX,MAAM,oBACE,iBAAiB,YACzB;QACR,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,iBAAiB,CAAC;KAClC;EAsBN"}
@@ -4,16 +4,14 @@ import { useAnalyticsContext } from './AnalyticsProvider';
4
4
  /**
5
5
  * Hook for accessing analytics functions.
6
6
  *
7
- * Provides a clean API for tracking events, pages, and clicks. Must be used
8
- * within an AnalyticsProvider context.
7
+ * Provides a clean API for tracking events, pages, and clicks. Prefer using
8
+ * inside an `AnalyticsProvider`; without one, calls are silent no-ops.
9
9
  *
10
10
  * @returns Object with tracking functions:
11
11
  * - `trackEvent` - Track custom events
12
12
  * - `trackPage` - Track page views
13
13
  * - `trackClick` - Track click interactions
14
14
  *
15
- * @throws {Error} If used outside of AnalyticsProvider
16
- *
17
15
  * @example Basic usage
18
16
  * ```tsx
19
17
  * import { useAnalytics } from '@se-studio/core-ui';
@@ -1 +1 @@
1
- {"version":3,"file":"useAnalytics.js","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,KAAa,EAAE,UAAmC,EAAE,EAAE;QACrD,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,GAAW,EAAE,QAAgB,EAAE,gBAAmC,EAAE,EAAE;QACrE,MAAM,UAAU,GAA2B;YACzC,GAAG;YACH,QAAQ;YACR,GAAG,gBAAgB;SACpB,CAAC;QACF,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAC5B,CACE,aAAqB,EACrB,QAAgB,EAChB,gBAAmC,EACnC,OAIC,EACD,EAAE;QACF,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,UAAU,GAA4B;YAC1C,aAAa;YACb,GAAG;YACH,QAAQ;YACR,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,GAAG,gBAAgB;SACpB,CAAC;QACF,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO;QACL,UAAU;QACV,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useAnalytics.js","sourceRoot":"","sources":["../../src/analytics/useAnalytics.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,WAAW,CAC5B,CAAC,KAAa,EAAE,UAAmC,EAAE,EAAE;QACrD,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IACxC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,SAAS,GAAG,WAAW,CAC3B,CAAC,GAAW,EAAE,QAAgB,EAAE,gBAAmC,EAAE,EAAE;QACrE,MAAM,UAAU,GAA2B;YACzC,GAAG;YACH,QAAQ;YACR,GAAG,gBAAgB;SACpB,CAAC;QACF,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAC5B,CACE,aAAqB,EACrB,QAAgB,EAChB,gBAAmC,EACnC,OAIC,EACD,EAAE;QACF,MAAM,GAAG,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,MAAM,UAAU,GAA4B;YAC1C,aAAa;YACb,GAAG;YACH,QAAQ;YACR,QAAQ,EAAE,OAAO,EAAE,QAAQ;YAC3B,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,GAAG,gBAAgB;SACpB,CAAC;QACF,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAEF,OAAO;QACL,UAAU;QACV,SAAS;QACT,UAAU;KACX,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -88,6 +88,7 @@ export { RTF } from './rtf/rtf';
88
88
  export type { BasicLayoutProps, BreadcrumbOptions, CmsRouteConfig } from './server/route-types';
89
89
  export { toBreadcrumbOptions } from './server/route-types';
90
90
  export * from './showcase';
91
+ export { appendAgentDiscoveryLinkHeaders, buildAgentDiscoveryLinkValues, htmlPathToMarkdownPath, prefersMarkdownAccept, resolveMarkdownNegotiationPath, } from './utils/agent-ready';
91
92
  export { assertValidSiteBaseUrl } from './utils/assertValidSiteBaseUrl';
92
93
  export type { BreadcrumbLookup, BreadcrumbLookupEntry, BreadcrumbSegment, ResolveBreadcrumbSegmentsOptions, } from './utils/breadcrumbUtils';
93
94
  export { normalizeBreadcrumbPath, resolveBreadcrumbSegments, } from './utils/breadcrumbUtils';
@@ -108,8 +109,8 @@ export type { IContent } from './utils/previewUtils';
108
109
  export { coreGetPreviewAssetIdProps, coreGetPreviewFieldIdProps, coreGetPreviewParentProps, coreGetPreviewProps, getPreviewFieldProps, getPreviewResponsiveVisualFieldProps, } from './utils/previewUtils';
109
110
  export { processCollectionLinks } from './utils/processCollectionLinks';
110
111
  export { processTextContent } from './utils/processTextContent';
111
- export type { CreateRobotsConfigOptions } from './utils/robots';
112
- export { buildRobotsDisallow, createRobotsConfig, DEFAULT_ROBOTS_DISALLOW, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
112
+ export type { ContentSignalPreference, ContentSignals, CreateRobotsConfigOptions, FormatRobotsTxtOptions, } from './utils/robots';
113
+ export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
113
114
  export { scopeCss } from './utils/scopeCss';
114
115
  export type { GenerateSitemapOptions, SitemapChangeFrequency, SitemapEntry, SitemapSource, } from './utils/sitemap';
115
116
  export { buildSitemap, deduplicateSitemapEntries, generateNextSitemap, sitemapToXml, sortSitemapEntries, } from './utils/sitemap';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -83,6 +83,7 @@ export { RTF } from './rtf/rtf';
83
83
  export { toBreadcrumbOptions } from './server/route-types';
84
84
  // CMS Showcase
85
85
  export * from './showcase';
86
+ export { appendAgentDiscoveryLinkHeaders, buildAgentDiscoveryLinkValues, htmlPathToMarkdownPath, prefersMarkdownAccept, resolveMarkdownNegotiationPath, } from './utils/agent-ready';
86
87
  export { assertValidSiteBaseUrl } from './utils/assertValidSiteBaseUrl';
87
88
  export { normalizeBreadcrumbPath, resolveBreadcrumbSegments, } from './utils/breadcrumbUtils';
88
89
  export { buildPageMetadata, calculateTitleAndDescription, formatSiteGeneratorContent, getLocalizedPath, resolveMetadataAuthors, } from './utils/buildPageMetadata';
@@ -98,7 +99,7 @@ export { validatePreviewSecret } from './utils/previewPageUtils';
98
99
  export { coreGetPreviewAssetIdProps, coreGetPreviewFieldIdProps, coreGetPreviewParentProps, coreGetPreviewProps, getPreviewFieldProps, getPreviewResponsiveVisualFieldProps, } from './utils/previewUtils';
99
100
  export { processCollectionLinks } from './utils/processCollectionLinks';
100
101
  export { processTextContent } from './utils/processTextContent';
101
- export { buildRobotsDisallow, createRobotsConfig, DEFAULT_ROBOTS_DISALLOW, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
102
+ export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from './utils/robots';
102
103
  export { scopeCss } from './utils/scopeCss';
103
104
  export { buildSitemap, deduplicateSitemapEntries, generateNextSitemap, sitemapToXml, sortSitemapEntries, } from './utils/sitemap';
104
105
  export { buildStructuredDataContext } from './utils/structuredDataUtils';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAMH,YAAY;AACZ,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACvF,qBAAqB;AACrB,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAwBxD,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,0BAA0B,EAC1B,uBAAuB,EACvB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAS9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAQ3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAMzD,OAAO,EAAE,UAAU,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAQrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,8BAA8B,EAAE,MAAM,6CAA6C,CAAC;AAC7F,uBAAuB;AACvB,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,sCAAsC,EACtC,aAAa,GAEd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,oBAAoB;AACpB,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,gCAAgC,GACjC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AACtD,OAAO,EACL,+BAA+B,EAC/B,0BAA0B,GAC3B,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,WAAW;AACX,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAKhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,eAAe;AACf,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAOxE,OAAO,EACL,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,iBAAiB,EACjB,4BAA4B,EAC5B,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,mBAAmB;AACnB,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAIzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EACzB,mBAAmB,EACnB,oBAAoB,EACpB,oCAAoC,GACrC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAOhE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAQ5C,OAAO,EACL,YAAY,EACZ,yBAAyB,EACzB,mBAAmB,EACnB,YAAY,EACZ,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,wBAAwB;AACxB,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,oCAAoC,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC"}
@@ -3,11 +3,12 @@ export type { RelatedArticlesOptions } from '@se-studio/contentful-rest-api';
3
3
  export { filterRelatedArticles } from '@se-studio/contentful-rest-api';
4
4
  export type { AppHelpers, AppHelpersConfig, AppHelpersWithSitemap, } from '../app-helpers';
5
5
  export { createAppHelpers } from '../app-helpers';
6
+ export { appendAgentDiscoveryLinkHeaders, buildAgentDiscoveryLinkValues, htmlPathToMarkdownPath, prefersMarkdownAccept, resolveMarkdownNegotiationPath, } from '../utils/agent-ready';
6
7
  export { getRelatedArticles, getRelatedPeople, getRelatedTags, } from '../utils/componentUtils';
7
8
  export type { BuildListingItemsOptions, ListingFetchHelpers, ListingStructuredDataItem, } from '../utils/listingStructuredData';
8
9
  export { buildListingItems, buildListingStructuredDataContext, } from '../utils/listingStructuredData';
9
- export type { CreateRobotsConfigOptions } from '../utils/robots';
10
- export { buildRobotsDisallow, createRobotsConfig, DEFAULT_ROBOTS_DISALLOW, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
10
+ export type { ContentSignalPreference, ContentSignals, CreateRobotsConfigOptions, FormatRobotsTxtOptions, } from '../utils/robots';
11
+ export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
11
12
  export type { RouteHandlersConfig } from './route-handlers';
12
13
  export { createRouteHandlers } from './route-handlers';
13
14
  export type { CmsPagePreparationResult, PrepareArticlePageInput, PrepareArticleTypePageInput, PrepareArticleTypesIndexPageInput, PrepareArticleTypeTagPageInput, PrepareCustomTypePageInput, PreparePageInput, PreparePersonPageInput, PrepareTagPageInput, PrepareTagsIndexPageInput, PrepareTeamIndexPageInput, RouteHandlersPrepareHooks, } from './route-handlers-types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AACxC,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,iCAAiC,EACjC,8BAA8B,EAC9B,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,YAAY,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,YAAY,EACV,UAAU,EACV,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,wBAAwB,EACxB,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AACxC,YAAY,EACV,uBAAuB,EACvB,cAAc,EACd,yBAAyB,EACzB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,2BAA2B,EAC3B,iCAAiC,EACjC,8BAA8B,EAC9B,0BAA0B,EAC1B,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import 'server-only';
2
2
  export { filterRelatedArticles } from '@se-studio/contentful-rest-api';
3
3
  export { createAppHelpers } from '../app-helpers';
4
+ export { appendAgentDiscoveryLinkHeaders, buildAgentDiscoveryLinkValues, htmlPathToMarkdownPath, prefersMarkdownAccept, resolveMarkdownNegotiationPath, } from '../utils/agent-ready';
4
5
  export { getRelatedArticles, getRelatedPeople, getRelatedTags, } from '../utils/componentUtils';
5
6
  export { buildListingItems, buildListingStructuredDataContext, } from '../utils/listingStructuredData';
6
- export { buildRobotsDisallow, createRobotsConfig, DEFAULT_ROBOTS_DISALLOW, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
7
+ export { buildRobotsDisallow, createRobotsConfig, createRobotsTxtResponse, DEFAULT_ROBOTS_DISALLOW, formatContentSignalLine, formatRobotsTxt, TRACKING_QUERY_ROBOTS_DISALLOW, } from '../utils/robots';
7
8
  export { createRouteHandlers } from './route-handlers';
8
9
  export { toBreadcrumbOptions } from './route-types';
9
10
  export { canRenderArticleTypeTagRoute, canRenderTagIndex } from './tag-index-guards';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAMvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAuBvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAMvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,+BAA+B,EAC/B,6BAA6B,EAC7B,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,iBAAiB,EACjB,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,eAAe,EACf,8BAA8B,GAC/B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAuBvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,4BAA4B,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Agent-readiness helpers for marketing sites (Band A):
3
+ * - Markdown content negotiation path mapping (`Accept: text/markdown`)
4
+ * - Discovery Link header values (RFC 8288)
5
+ *
6
+ * Pure utilities — wire from Next.js middleware with `NextResponse.rewrite` /
7
+ * `headers.append`. Does not import `next/server` so the main barrel stays
8
+ * client-safe.
9
+ *
10
+ * @see https://isitagentready.com/
11
+ * @see https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/
12
+ */
13
+ /**
14
+ * Whether the client prefers `text/markdown` over `text/html`.
15
+ *
16
+ * Returns true when:
17
+ * - `text/markdown` is present and `text/html` is not, or
18
+ * - `text/markdown` has a strictly higher `q` than `text/html`.
19
+ *
20
+ * Returns false for empty Accept, HTML-only browser defaults, and equal-q
21
+ * markdown+html (prefer HTML to avoid surprising dual listings).
22
+ */
23
+ export declare function prefersMarkdownAccept(acceptHeader: string | null | undefined): boolean;
24
+ /**
25
+ * Map a public HTML pathname to the site's markdown export path.
26
+ *
27
+ * Conventions match SE Studio rewrites:
28
+ * - `/` → `/index.md`
29
+ * - `/about/` → `/about.md`
30
+ * - `/blog/slug/` → `/blog/slug.md`
31
+ *
32
+ * Returns `null` when the path is already markdown, a static asset, or an
33
+ * infrastructure prefix that should not negotiate.
34
+ */
35
+ export declare function htmlPathToMarkdownPath(pathname: string): string | null;
36
+ /**
37
+ * If Accept prefers markdown, return the rewrite pathname; otherwise `null`.
38
+ * Middleware should `NextResponse.rewrite` to this path and set `Vary: Accept`.
39
+ */
40
+ export declare function resolveMarkdownNegotiationPath(pathname: string, acceptHeader: string | null | undefined): string | null;
41
+ /**
42
+ * Build Link header values for agent discovery on HTML document responses.
43
+ *
44
+ * Always includes `describedby` → `/llms.txt` (registered relation for
45
+ * isitagentready linkHeaders). Adds `alternate` markdown when mappable.
46
+ *
47
+ * @example
48
+ * for (const value of buildAgentDiscoveryLinkValues('/about/')) {
49
+ * response.headers.append('Link', value);
50
+ * }
51
+ */
52
+ export declare function buildAgentDiscoveryLinkValues(pathname: string): string[];
53
+ /**
54
+ * Append agent discovery Link headers onto a headers bag (e.g. NextResponse.headers).
55
+ */
56
+ export declare function appendAgentDiscoveryLinkHeaders(headers: {
57
+ append: (name: string, value: string) => void;
58
+ }, pathname: string): void;
59
+ //# sourceMappingURL=agent-ready.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-ready.d.ts","sourceRoot":"","sources":["../../src/utils/agent-ready.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsEH;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAiBtF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqCtE;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,MAAM,GAAG,IAAI,CAKf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CASxE;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,EAC1D,QAAQ,EAAE,MAAM,GACf,IAAI,CAIN"}
@@ -0,0 +1,172 @@
1
+ /**
2
+ * Agent-readiness helpers for marketing sites (Band A):
3
+ * - Markdown content negotiation path mapping (`Accept: text/markdown`)
4
+ * - Discovery Link header values (RFC 8288)
5
+ *
6
+ * Pure utilities — wire from Next.js middleware with `NextResponse.rewrite` /
7
+ * `headers.append`. Does not import `next/server` so the main barrel stays
8
+ * client-safe.
9
+ *
10
+ * @see https://isitagentready.com/
11
+ * @see https://developers.cloudflare.com/fundamentals/reference/markdown-for-agents/
12
+ */
13
+ /** Path prefixes that should never negotiate to markdown. */
14
+ const MARKDOWN_NEGOTIATION_SKIP_PREFIXES = [
15
+ '/_next',
16
+ '/api/',
17
+ '/og/',
18
+ '/cms/',
19
+ '/preview/',
20
+ '/page-test/',
21
+ '/_video/',
22
+ ];
23
+ /**
24
+ * Parse an HTTP Accept header into media ranges with quality values.
25
+ * Invalid / missing q defaults to 1.
26
+ */
27
+ function parseAcceptHeader(accept) {
28
+ const ranges = [];
29
+ for (const part of accept.split(',')) {
30
+ const trimmed = part.trim();
31
+ if (!trimmed) {
32
+ continue;
33
+ }
34
+ const segments = trimmed.split(';');
35
+ const type = (segments[0] ?? '').trim().toLowerCase();
36
+ if (!type) {
37
+ continue;
38
+ }
39
+ let q = 1;
40
+ for (let i = 1; i < segments.length; i++) {
41
+ const param = (segments[i] ?? '').trim();
42
+ const eq = param.indexOf('=');
43
+ if (eq === -1) {
44
+ continue;
45
+ }
46
+ const key = param.slice(0, eq).trim().toLowerCase();
47
+ const value = param.slice(eq + 1).trim();
48
+ if (key === 'q') {
49
+ const parsed = Number.parseFloat(value);
50
+ if (!Number.isNaN(parsed)) {
51
+ q = parsed;
52
+ }
53
+ }
54
+ }
55
+ ranges.push({ type, q });
56
+ }
57
+ return ranges;
58
+ }
59
+ function maxQ(ranges, mediaType) {
60
+ let max;
61
+ for (const range of ranges) {
62
+ if (range.type === mediaType) {
63
+ max = max === undefined ? range.q : Math.max(max, range.q);
64
+ }
65
+ }
66
+ return max;
67
+ }
68
+ /**
69
+ * Whether the client prefers `text/markdown` over `text/html`.
70
+ *
71
+ * Returns true when:
72
+ * - `text/markdown` is present and `text/html` is not, or
73
+ * - `text/markdown` has a strictly higher `q` than `text/html`.
74
+ *
75
+ * Returns false for empty Accept, HTML-only browser defaults, and equal-q
76
+ * markdown+html (prefer HTML to avoid surprising dual listings).
77
+ */
78
+ export function prefersMarkdownAccept(acceptHeader) {
79
+ if (!acceptHeader?.trim()) {
80
+ return false;
81
+ }
82
+ const ranges = parseAcceptHeader(acceptHeader);
83
+ const markdownQ = maxQ(ranges, 'text/markdown');
84
+ if (markdownQ === undefined) {
85
+ return false;
86
+ }
87
+ const htmlQ = maxQ(ranges, 'text/html');
88
+ if (htmlQ === undefined) {
89
+ return true;
90
+ }
91
+ return markdownQ > htmlQ;
92
+ }
93
+ /**
94
+ * Map a public HTML pathname to the site's markdown export path.
95
+ *
96
+ * Conventions match SE Studio rewrites:
97
+ * - `/` → `/index.md`
98
+ * - `/about/` → `/about.md`
99
+ * - `/blog/slug/` → `/blog/slug.md`
100
+ *
101
+ * Returns `null` when the path is already markdown, a static asset, or an
102
+ * infrastructure prefix that should not negotiate.
103
+ */
104
+ export function htmlPathToMarkdownPath(pathname) {
105
+ if (!pathname || pathname.includes('..') || pathname.includes('\\')) {
106
+ return null;
107
+ }
108
+ const pathOnly = pathname.split('?')[0]?.split('#')[0] ?? pathname;
109
+ for (const prefix of MARKDOWN_NEGOTIATION_SKIP_PREFIXES) {
110
+ if (pathOnly === prefix.replace(/\/$/, '') || pathOnly.startsWith(prefix)) {
111
+ return null;
112
+ }
113
+ }
114
+ // Root
115
+ if (pathOnly === '/' || pathOnly === '') {
116
+ return '/index.md';
117
+ }
118
+ const lastSegment = pathOnly.split('/').filter(Boolean).pop() ?? '';
119
+ // Already a file-like path with an extension
120
+ if (lastSegment.includes('.')) {
121
+ if (lastSegment.endsWith('.md')) {
122
+ return null;
123
+ }
124
+ // Other static-like extensions
125
+ if (/\.[a-zA-Z0-9]{1,12}$/.test(lastSegment)) {
126
+ return null;
127
+ }
128
+ }
129
+ const withoutTrailingSlash = pathOnly.endsWith('/') ? pathOnly.slice(0, -1) : pathOnly;
130
+ if (!withoutTrailingSlash || withoutTrailingSlash === '/') {
131
+ return '/index.md';
132
+ }
133
+ return `${withoutTrailingSlash}.md`;
134
+ }
135
+ /**
136
+ * If Accept prefers markdown, return the rewrite pathname; otherwise `null`.
137
+ * Middleware should `NextResponse.rewrite` to this path and set `Vary: Accept`.
138
+ */
139
+ export function resolveMarkdownNegotiationPath(pathname, acceptHeader) {
140
+ if (!prefersMarkdownAccept(acceptHeader)) {
141
+ return null;
142
+ }
143
+ return htmlPathToMarkdownPath(pathname);
144
+ }
145
+ /**
146
+ * Build Link header values for agent discovery on HTML document responses.
147
+ *
148
+ * Always includes `describedby` → `/llms.txt` (registered relation for
149
+ * isitagentready linkHeaders). Adds `alternate` markdown when mappable.
150
+ *
151
+ * @example
152
+ * for (const value of buildAgentDiscoveryLinkValues('/about/')) {
153
+ * response.headers.append('Link', value);
154
+ * }
155
+ */
156
+ export function buildAgentDiscoveryLinkValues(pathname) {
157
+ const links = ['</llms.txt>; rel="describedby"'];
158
+ const markdownPath = htmlPathToMarkdownPath(pathname);
159
+ if (markdownPath) {
160
+ links.push(`<${markdownPath}>; rel="alternate"; type="text/markdown"`);
161
+ }
162
+ return links;
163
+ }
164
+ /**
165
+ * Append agent discovery Link headers onto a headers bag (e.g. NextResponse.headers).
166
+ */
167
+ export function appendAgentDiscoveryLinkHeaders(headers, pathname) {
168
+ for (const value of buildAgentDiscoveryLinkValues(pathname)) {
169
+ headers.append('Link', value);
170
+ }
171
+ }
172
+ //# sourceMappingURL=agent-ready.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-ready.js","sourceRoot":"","sources":["../../src/utils/agent-ready.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,20 @@ export declare const DEFAULT_ROBOTS_DISALLOW: readonly ["/*?_rsc=*", "/_next/dat
7
7
  * help other crawlers and audit tooling but are not a complete Google fix.
8
8
  */
9
9
  export declare const TRACKING_QUERY_ROBOTS_DISALLOW: readonly ["/*?_gl=*", "/*?nnerid=*", "/*?ref=*"];
10
+ /** Yes/no preference for Content Signals (contentsignals.org). */
11
+ export type ContentSignalPreference = 'yes' | 'no';
12
+ /**
13
+ * AI usage preferences for robots.txt Content-Signal directives.
14
+ * @see https://contentsignals.org/
15
+ */
16
+ export interface ContentSignals {
17
+ /** Building a search index / classic search results. */
18
+ search: ContentSignalPreference;
19
+ /** Training or fine-tuning AI models. */
20
+ aiTrain: ContentSignalPreference;
21
+ /** Using content as AI input (RAG, grounding, inference). */
22
+ aiInput: ContentSignalPreference;
23
+ }
10
24
  export interface CreateRobotsConfigOptions {
11
25
  isProduction: boolean;
12
26
  baseUrl: string;
@@ -39,6 +53,15 @@ export interface CreateRobotsConfigOptions {
39
53
  allow: string;
40
54
  }>;
41
55
  }
56
+ /** Options for plain-text robots.txt (supports Content-Signal). */
57
+ export interface FormatRobotsTxtOptions extends CreateRobotsConfigOptions {
58
+ /**
59
+ * When set (production only), emit a Content-Signal line under `User-agent: *`.
60
+ * Next.js `MetadataRoute.Robots` cannot express this — use `formatRobotsTxt` /
61
+ * `createRobotsTxtResponse` in `src/app/robots.txt/route.ts` instead of `robots.ts`.
62
+ */
63
+ contentSignals?: ContentSignals;
64
+ }
42
65
  /**
43
66
  * Builds the production disallow path list from options.
44
67
  * Exported for tests and sites that render plain-text robots (e.g. Brightline Content-Signal).
@@ -49,6 +72,37 @@ export declare function buildRobotsDisallow(options: CreateRobotsConfigOptions):
49
72
  *
50
73
  * In production: allows `/` and disallows internal/infrastructure paths.
51
74
  * In non-production: disallows all crawlers (with optional staging bot allowlist).
75
+ *
76
+ * **Content-Signal:** not supported here (Next metadata type). Use
77
+ * {@link formatRobotsTxt} / {@link createRobotsTxtResponse} in a route handler.
52
78
  */
53
79
  export declare function createRobotsConfig(options: CreateRobotsConfigOptions): MetadataRoute.Robots;
80
+ /**
81
+ * Formats a single Content-Signal directive line (no trailing newline).
82
+ *
83
+ * @example
84
+ * formatContentSignalLine({ search: 'yes', aiTrain: 'no', aiInput: 'yes' })
85
+ * // → 'Content-Signal: search=yes, ai-train=no, ai-input=yes'
86
+ */
87
+ export declare function formatContentSignalLine(signals: ContentSignals): string;
88
+ /**
89
+ * Builds a full plain-text robots.txt body, including optional Content-Signal.
90
+ *
91
+ * Prefer this over `createRobotsConfig` when you need Content Signals or other
92
+ * non-standard directives. Serve from `src/app/robots.txt/route.ts`.
93
+ */
94
+ export declare function formatRobotsTxt(options: FormatRobotsTxtOptions): string;
95
+ /**
96
+ * Returns a `text/plain` Response for `src/app/robots.txt/route.ts`.
97
+ *
98
+ * @example
99
+ * export function GET() {
100
+ * return createRobotsTxtResponse({
101
+ * isProduction,
102
+ * baseUrl,
103
+ * contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
104
+ * });
105
+ * }
106
+ */
107
+ export declare function createRobotsTxtResponse(options: FormatRobotsTxtOptions): Response;
54
108
  //# sourceMappingURL=robots.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,8FAQ1B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,kDAAmD,CAAC;AAE/F,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,4CAA4C;IAC5C,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AA2CD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,EAAE,CAwBhF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,aAAa,CAAC,MAAM,CAiC3F"}
1
+ {"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,uEAAuE;AACvE,eAAO,MAAM,uBAAuB,8FAQ1B,CAAC;AAEX;;;;GAIG;AACH,eAAO,MAAM,8BAA8B,kDAAmD,CAAC;AAE/F,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG,KAAK,GAAG,IAAI,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,MAAM,EAAE,uBAAuB,CAAC;IAChC,yCAAyC;IACzC,OAAO,EAAE,uBAAuB,CAAC;IACjC,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,0FAA0F;IAC1F,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,4CAA4C;IAC5C,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,mEAAmE;AACnE,MAAM,WAAW,sBAAuB,SAAQ,yBAAyB;IACvE;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AA2CD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,GAAG,MAAM,EAAE,CAwBhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,yBAAyB,GAAG,aAAa,CAAC,MAAM,CAiC3F;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA8BvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,sBAAsB,GAAG,QAAQ,CAIjF"}
@@ -75,6 +75,9 @@ export function buildRobotsDisallow(options) {
75
75
  *
76
76
  * In production: allows `/` and disallows internal/infrastructure paths.
77
77
  * In non-production: disallows all crawlers (with optional staging bot allowlist).
78
+ *
79
+ * **Content-Signal:** not supported here (Next metadata type). Use
80
+ * {@link formatRobotsTxt} / {@link createRobotsTxtResponse} in a route handler.
78
81
  */
79
82
  export function createRobotsConfig(options) {
80
83
  const sitemap = options.sitemapUrl ?? `${options.baseUrl}/sitemap.xml`;
@@ -106,4 +109,60 @@ export function createRobotsConfig(options) {
106
109
  sitemap,
107
110
  };
108
111
  }
112
+ /**
113
+ * Formats a single Content-Signal directive line (no trailing newline).
114
+ *
115
+ * @example
116
+ * formatContentSignalLine({ search: 'yes', aiTrain: 'no', aiInput: 'yes' })
117
+ * // → 'Content-Signal: search=yes, ai-train=no, ai-input=yes'
118
+ */
119
+ export function formatContentSignalLine(signals) {
120
+ return `Content-Signal: search=${signals.search}, ai-train=${signals.aiTrain}, ai-input=${signals.aiInput}`;
121
+ }
122
+ /**
123
+ * Builds a full plain-text robots.txt body, including optional Content-Signal.
124
+ *
125
+ * Prefer this over `createRobotsConfig` when you need Content Signals or other
126
+ * non-standard directives. Serve from `src/app/robots.txt/route.ts`.
127
+ */
128
+ export function formatRobotsTxt(options) {
129
+ const sitemap = options.sitemapUrl ?? `${options.baseUrl}/sitemap.xml`;
130
+ if (!options.isProduction) {
131
+ const lines = ['User-agent: *', 'Disallow: /'];
132
+ if (options.stagingAllowRules?.length) {
133
+ for (const rule of options.stagingAllowRules) {
134
+ lines.push('', `User-agent: ${rule.userAgent}`, `Allow: ${rule.allow}`);
135
+ }
136
+ }
137
+ lines.push('', `Sitemap: ${sitemap}`, '');
138
+ return lines.join('\n');
139
+ }
140
+ const lines = ['User-agent: *'];
141
+ if (options.contentSignals) {
142
+ lines.push(formatContentSignalLine(options.contentSignals));
143
+ }
144
+ lines.push('Allow: /');
145
+ for (const path of buildRobotsDisallow(options)) {
146
+ lines.push(`Disallow: ${path}`);
147
+ }
148
+ lines.push('', `Sitemap: ${sitemap}`, '');
149
+ return lines.join('\n');
150
+ }
151
+ /**
152
+ * Returns a `text/plain` Response for `src/app/robots.txt/route.ts`.
153
+ *
154
+ * @example
155
+ * export function GET() {
156
+ * return createRobotsTxtResponse({
157
+ * isProduction,
158
+ * baseUrl,
159
+ * contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
160
+ * });
161
+ * }
162
+ */
163
+ export function createRobotsTxtResponse(options) {
164
+ return new Response(formatRobotsTxt(options), {
165
+ headers: { 'Content-Type': 'text/plain; charset=utf-8' },
166
+ });
167
+ }
109
168
  //# sourceMappingURL=robots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"robots.js","sourceRoot":"","sources":["../../src/utils/robots.ts"],"names":[],"mappings":"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"}
package/docs/llms.md CHANGED
@@ -164,7 +164,9 @@ JSON-LD (`buildStructuredDataContext`) remains the primary signal for multi-auth
164
164
 
165
165
  ## robots.txt
166
166
 
167
- Use `createRobotsConfig` in `src/app/robots.ts` instead of copy-pasting disallow rules per site.
167
+ ### Metadata route (no Content-Signal)
168
+
169
+ Use `createRobotsConfig` in `src/app/robots.ts` when you do not need Content Signals:
168
170
 
169
171
  ```ts
170
172
  import { createRobotsConfig } from '@se-studio/core-ui';
@@ -180,21 +182,72 @@ Default production disallows: `/*?_rsc=*`, `/_next/data/`, `/api/`, `/preview/`,
180
182
 
181
183
  **Split-domain sites (Point Me):** pass `pathPrefix` (`SITE_PREFIX`), extra `apiPrefixes` (`/marketing-api/`), `disallowExtra`, `disallowOmit`, and `blockTrackingQueryParams` as needed. Query-string disallows help non-Google crawlers; Google matches path only — pair with strong canonicals.
182
184
 
185
+ ### Content Signals (recommended for agent readiness)
186
+
187
+ Next.js `MetadataRoute.Robots` cannot emit `Content-Signal`. Use a route handler:
188
+
183
189
  ```ts
184
- const prefix = process.env.SITE_PREFIX?.replace(/\/$/, '') || undefined;
185
-
186
- createRobotsConfig({
187
- isProduction,
188
- baseUrl,
189
- pathPrefix: prefix,
190
- apiPrefixes: ['/api/', '/marketing-api/'],
191
- disallowExtra: ['/debug/'],
192
- disallowOmit: ['/page-test/'],
193
- blockTrackingQueryParams: true,
194
- });
190
+ // src/app/robots.txt/route.ts
191
+ import { createRobotsTxtResponse } from '@se-studio/core-ui';
192
+ import { isProduction } from '@/lib/config';
193
+ import { baseUrl } from '@/lib/server-config';
194
+
195
+ export function GET() {
196
+ return createRobotsTxtResponse({
197
+ isProduction,
198
+ baseUrl,
199
+ contentSignals: { search: 'yes', aiTrain: 'no', aiInput: 'yes' },
200
+ // disallowExtra: ['/private/'],
201
+ });
202
+ }
203
+ ```
204
+
205
+ Also: `formatRobotsTxt`, `formatContentSignalLine`, `buildRobotsDisallow`.
206
+
207
+ ## Agent readiness (Band A)
208
+
209
+ Helpers for marketing sites that already expose `/{path}.md` and `/llms.txt`:
210
+
211
+ ```ts
212
+ // middleware.ts — before A/B rewrites
213
+ import {
214
+ appendAgentDiscoveryLinkHeaders,
215
+ resolveMarkdownNegotiationPath,
216
+ } from '@se-studio/core-ui';
217
+ import { type NextRequest, NextResponse } from 'next/server';
218
+
219
+ export function middleware(request: NextRequest) {
220
+ const { pathname } = request.nextUrl;
221
+
222
+ const markdownPath = resolveMarkdownNegotiationPath(
223
+ pathname,
224
+ request.headers.get('accept'),
225
+ );
226
+ if (markdownPath) {
227
+ const url = request.nextUrl.clone();
228
+ url.pathname = markdownPath;
229
+ const response = NextResponse.rewrite(url);
230
+ response.headers.set('Vary', 'Accept');
231
+ return response;
232
+ }
233
+
234
+ const response = NextResponse.next();
235
+ appendAgentDiscoveryLinkHeaders(response.headers, pathname);
236
+ // Ensure caches vary on Accept if you also negotiate elsewhere
237
+ const vary = response.headers.get('Vary');
238
+ if (!vary?.toLowerCase().includes('accept')) {
239
+ response.headers.set('Vary', vary ? `${vary}, Accept` : 'Accept');
240
+ }
241
+ return response;
242
+ }
195
243
  ```
196
244
 
197
- `buildRobotsDisallow()` is exported for plain-text route handlers (e.g. Brightline `Content-Signal`).
245
+ | Helper | Purpose |
246
+ |--------|---------|
247
+ | `prefersMarkdownAccept` | Parse Accept; true when markdown preferred over HTML |
248
+ | `htmlPathToMarkdownPath` | `/` → `/index.md`, `/about/` → `/about.md` |
249
+ | `resolveMarkdownNegotiationPath` | Combine both for middleware rewrite target |
250
+ | `buildAgentDiscoveryLinkValues` / `appendAgentDiscoveryLinkHeaders` | `Link: </llms.txt>; rel="describedby"` + alternate markdown |
198
251
 
199
252
  ### Person profile pages
200
253
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@se-studio/core-ui",
3
- "version": "1.14.7",
3
+ "version": "1.15.0",
4
4
  "description": "Shared React UI component library with Tailwind CSS v4 for SE Studio applications",
5
5
  "repository": {
6
6
  "type": "git",
@@ -64,10 +64,10 @@
64
64
  }
65
65
  },
66
66
  "dependencies": {
67
- "@contentful/live-preview": "^4.10.10",
67
+ "@contentful/live-preview": "^4.10.12",
68
68
  "@contentful/rich-text-react-renderer": "^16.2.1",
69
69
  "@contentful/rich-text-types": "^17.2.7",
70
- "@radix-ui/react-slot": "^1.3.0",
70
+ "@radix-ui/react-slot": "1.3.0",
71
71
  "@types/mustache": "4.2.6",
72
72
  "clsx": "^2.1.1",
73
73
  "hls.js": "^1.6.16",
@@ -79,14 +79,14 @@
79
79
  "@se-studio/core-data-types": "1.6.1"
80
80
  },
81
81
  "devDependencies": {
82
- "@biomejs/biome": "^2.5.2",
83
- "@types/node": "^24.13.2",
82
+ "@biomejs/biome": "^2.5.5",
83
+ "@types/node": "^24.13.3",
84
84
  "@types/react": "^19.2.17",
85
85
  "@types/react-dom": "^19.2.3",
86
86
  "jsdom": "^29.1.1",
87
- "next": "^15.5.20",
87
+ "next": "^15.5.21",
88
88
  "typescript": "^6.0.3",
89
- "vitest": "^4.1.9"
89
+ "vitest": "^4.1.10"
90
90
  },
91
91
  "scripts": {
92
92
  "build": "tsc --project tsconfig.build.json",