@farming-labs/docs 0.1.83 → 0.1.85

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.
@@ -1,8 +1,8 @@
1
- import "./reading-time-pKUeloSI.mjs";
1
+ import "./reading-time-CbbHNg9V.mjs";
2
2
  import { _ as parseGeneratedAgentDocument, h as hashGeneratedAgentContent, m as GENERATED_AGENT_PROVENANCE_VERSION, v as serializeGeneratedAgentDocument } from "./search-B5ze-heM.mjs";
3
- import { D as findDocsMarkdownPage, I as renderDocsMarkdownDocument } from "./robots-DCR-ZFLO.mjs";
3
+ import { D as findDocsMarkdownPage, I as renderDocsMarkdownDocument } from "./robots-T0sATQRa.mjs";
4
4
  import "./index.mjs";
5
- import "./sitemap-server-C8Ppk29g.mjs";
5
+ import "./sitemap-server-DwEPfk13.mjs";
6
6
  import { createFilesystemDocsMcpSource } from "./mcp.mjs";
7
7
  import "./server.mjs";
8
8
  import { a as loadProjectEnv, c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, l as readNumberProperty, o as readBooleanProperty, p as resolveDocsContentDir, s as readEnvReferenceProperty, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-BR6CcCfr.mjs";
@@ -83,10 +83,10 @@ async function main() {
83
83
  const { dev } = await import("../dev-D4aVZkZl.mjs");
84
84
  await dev(devOptions);
85
85
  } else if (parsedCommand.command === "mcp") {
86
- const { runMcp } = await import("../mcp-OVgCyHrR.mjs");
86
+ const { runMcp } = await import("../mcp-RBCFEtoX.mjs");
87
87
  await runMcp(mcpOptions);
88
88
  } else if (parsedCommand.command === "agent" && subcommand === "compact") {
89
- const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-D97eZuWH.mjs");
89
+ const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-M9imRSUO.mjs");
90
90
  const agentCompactOptions = parseAgentCompactArgs(args.slice(2));
91
91
  if (agentCompactOptions.help) {
92
92
  printAgentCompactHelp();
@@ -96,11 +96,11 @@ async function main() {
96
96
  } else if (parsedCommand.command === "agent") {
97
97
  console.error(pc.red(`Unknown agent subcommand: ${subcommand ?? "(missing)"}`));
98
98
  console.error();
99
- const { printAgentCompactHelp } = await import("../agent-D97eZuWH.mjs");
99
+ const { printAgentCompactHelp } = await import("../agent-M9imRSUO.mjs");
100
100
  printAgentCompactHelp();
101
101
  process.exit(1);
102
102
  } else if (parsedCommand.command === "doctor") {
103
- const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-DHUZK-iX.mjs");
103
+ const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-CRqpb_Rv.mjs");
104
104
  const doctorOptions = parseDoctorArgs(args.slice(1));
105
105
  if (doctorOptions.help) {
106
106
  printDoctorHelp();
@@ -108,7 +108,7 @@ async function main() {
108
108
  }
109
109
  await runDoctor(doctorOptions);
110
110
  } else if (parsedCommand.command === "search" && subcommand === "sync") {
111
- const { syncSearch } = await import("../search-BIL0Zap1.mjs");
111
+ const { syncSearch } = await import("../search-DrTVZ2XK.mjs");
112
112
  await syncSearch(searchSyncOptions);
113
113
  } else if (parsedCommand.command === "search") {
114
114
  console.error(pc.red(`Unknown search subcommand: ${subcommand ?? "(missing)"}`));
@@ -116,7 +116,7 @@ async function main() {
116
116
  printHelp();
117
117
  process.exit(1);
118
118
  } else if (parsedCommand.command === "sitemap" && subcommand === "generate") {
119
- const { generateSitemap, parseSitemapGenerateArgs, printSitemapGenerateHelp } = await import("../sitemap-C2ocmew_.mjs");
119
+ const { generateSitemap, parseSitemapGenerateArgs, printSitemapGenerateHelp } = await import("../sitemap-CEE2vnGz.mjs");
120
120
  const sitemapOptions = parseSitemapGenerateArgs(args.slice(2));
121
121
  if (sitemapOptions.help) {
122
122
  printSitemapGenerateHelp();
@@ -126,11 +126,11 @@ async function main() {
126
126
  } else if (parsedCommand.command === "sitemap") {
127
127
  console.error(pc.red(`Unknown sitemap subcommand: ${subcommand ?? "(missing)"}`));
128
128
  console.error();
129
- const { printSitemapGenerateHelp } = await import("../sitemap-C2ocmew_.mjs");
129
+ const { printSitemapGenerateHelp } = await import("../sitemap-CEE2vnGz.mjs");
130
130
  printSitemapGenerateHelp();
131
131
  process.exit(1);
132
132
  } else if (parsedCommand.command === "robots" && subcommand === "generate") {
133
- const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-Div3kkxI.mjs");
133
+ const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-BO8yD7N7.mjs");
134
134
  const robotsOptions = parseRobotsGenerateArgs(args.slice(2));
135
135
  if (robotsOptions.help) {
136
136
  printRobotsGenerateHelp();
@@ -140,7 +140,7 @@ async function main() {
140
140
  } else if (parsedCommand.command === "robots") {
141
141
  console.error(pc.red(`Unknown robots subcommand: ${subcommand ?? "(missing)"}`));
142
142
  console.error();
143
- const { printRobotsGenerateHelp } = await import("../robots-Div3kkxI.mjs");
143
+ const { printRobotsGenerateHelp } = await import("../robots-BO8yD7N7.mjs");
144
144
  printRobotsGenerateHelp();
145
145
  process.exit(1);
146
146
  } else if (parsedCommand.command === "upgrade") {
@@ -1,12 +1,12 @@
1
- import "./reading-time-pKUeloSI.mjs";
1
+ import "./reading-time-CbbHNg9V.mjs";
2
2
  import "./search-B5ze-heM.mjs";
3
- import { i as DEFAULT_SITEMAP_XML_ROUTE, n as DEFAULT_SITEMAP_MD_ROUTE, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, u as resolveDocsSitemapConfig } from "./sitemap-Ccfh6GXO.mjs";
4
- import { C as DEFAULT_SKILL_MD_ROUTE, S as DEFAULT_MCP_WELL_KNOWN_ROUTE, a as analyzeDocsRobotsTxt, b as DEFAULT_MCP_PUBLIC_ROUTE, d as DEFAULT_AGENT_FEEDBACK_ROUTE, g as DEFAULT_LLMS_FULL_TXT_ROUTE, l as resolveDocsRobotsConfig, m as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_ROBOTS_TXT_ROUTE, p as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, w as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE } from "./robots-DCR-ZFLO.mjs";
5
- import "./sitemap-server-C8Ppk29g.mjs";
3
+ import { i as DEFAULT_SITEMAP_XML_ROUTE, n as DEFAULT_SITEMAP_MD_ROUTE, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, u as resolveDocsSitemapConfig } from "./sitemap-BIQIYMKe.mjs";
4
+ import { C as DEFAULT_SKILL_MD_ROUTE, S as DEFAULT_MCP_WELL_KNOWN_ROUTE, a as analyzeDocsRobotsTxt, b as DEFAULT_MCP_PUBLIC_ROUTE, d as DEFAULT_AGENT_FEEDBACK_ROUTE, g as DEFAULT_LLMS_FULL_TXT_ROUTE, l as resolveDocsRobotsConfig, m as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_ROBOTS_TXT_ROUTE, p as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, w as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE } from "./robots-T0sATQRa.mjs";
5
+ import "./sitemap-server-DwEPfk13.mjs";
6
6
  import { createFilesystemDocsMcpSource, resolveDocsMcpConfig } from "./mcp.mjs";
7
7
  import "./server.mjs";
8
8
  import { a as loadProjectEnv, c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, p as resolveDocsContentDir, r as extractTopLevelConfigObject, t as extractNestedObjectLiteral } from "./config-BR6CcCfr.mjs";
9
- import { inspectAgentCompactionState, scanDocsPageTargets } from "./agent-D97eZuWH.mjs";
9
+ import { inspectAgentCompactionState, scanDocsPageTargets } from "./agent-M9imRSUO.mjs";
10
10
  import { t as detectFramework } from "./utils-AmYxHDoz.mjs";
11
11
  import { existsSync, lstatSync, readFileSync, readdirSync } from "node:fs";
12
12
  import path from "node:path";
@@ -739,8 +739,7 @@ async function probeTextRoute(baseUrl, route) {
739
739
  };
740
740
  }
741
741
  }
742
- async function probeRobotsRoute(baseUrl) {
743
- const route = DEFAULT_ROBOTS_TXT_ROUTE;
742
+ async function probeRobotsRoute(baseUrl, route = DEFAULT_ROBOTS_TXT_ROUTE) {
744
743
  const url = joinDoctorUrl(baseUrl, route);
745
744
  try {
746
745
  const response = await fetchWithTimeout(url, { headers: { Accept: "text/plain, */*" } });
@@ -915,6 +914,13 @@ function hostedSitemapRoutes(discoveryBody) {
915
914
  routes: Array.from(new Set(routes))
916
915
  };
917
916
  }
917
+ function hostedRobotsRoute(discoveryBody) {
918
+ const robots = asRecord(asRecord(discoveryBody)?.robots);
919
+ return {
920
+ enabled: robots?.enabled === false ? false : true,
921
+ route: readDiscoveryRoute(robots?.route) ?? DEFAULT_ROBOTS_TXT_ROUTE
922
+ };
923
+ }
918
924
  async function buildHostedAgentChecks(url, pages) {
919
925
  let baseUrl;
920
926
  try {
@@ -935,11 +941,14 @@ async function buildHostedAgentChecks(url, pages) {
935
941
  checks.push(makeCheck("hosted-sitemap", "Hosted sitemap", sitemapPassed === sitemap.length ? "pass" : sitemapPassed > 0 ? "warn" : "fail", sitemapPassed === sitemap.length ? 5 : sitemapPassed > 0 ? 3 : 0, 5, sitemap.map((result) => result.detail).join(" "), sitemapPassed === sitemap.length ? void 0 : `Verify deployed sitemap routes return non-empty text: ${sitemapRoutes.routes.join(", ")}.`));
936
942
  } else if (sitemapRoutes.enabled) checks.push(makeCheck("hosted-sitemap", "Hosted sitemap", "warn", 0, 5, "The hosted discovery spec reports sitemap support but did not expose sitemap routes.", "Check sitemap.xml and sitemap.markdown config so at least one sitemap route is enabled."));
937
943
  else checks.push(makeCheck("hosted-sitemap", "Hosted sitemap", "warn", 0, 5, "The hosted discovery spec reports sitemap routes as disabled.", "Enable sitemap in docs.config when agents and crawlers should discover canonical URLs and freshness metadata."));
938
- const robots = await probeRobotsRoute(baseUrl);
939
- const robotsAnalysis = robots.body ? analyzeDocsRobotsTxt(robots.body) : void 0;
940
- const robotsBlocked = robotsAnalysis?.blocksAgentRoutes || robotsAnalysis?.blocksAiAgents;
941
- const robotsComplete = robotsAnalysis?.hasAgentRoutes && robotsAnalysis?.hasAiPolicy;
942
- checks.push(makeCheck("hosted-robots", "Hosted robots.txt", robots.ok && !robotsBlocked && robotsComplete ? "pass" : robots.ok && !robotsBlocked ? "warn" : "fail", robots.ok && !robotsBlocked && robotsComplete ? 5 : robots.ok && !robotsBlocked ? 3 : 0, 5, robots.ok ? robotsBlocked ? `${DEFAULT_ROBOTS_TXT_ROUTE} is reachable but blocks ${robotsAnalysis?.blocksAiAgents ? "common AI crawlers" : "agent-readable docs routes"}.` : robotsComplete ? `${robots.detail} It advertises agent-readable routes and common AI crawler policy.` : `${robots.detail} It is missing ${robotsAnalysis?.missingRoutes.length ? `agent routes (${robotsAnalysis.missingRoutes.join(", ")})` : "common AI crawler policy"}.` : robots.detail, robots.ok && !robotsBlocked && robotsComplete ? void 0 : "Publish an agent-friendly robots.txt with `docs robots generate`, or append the generated block to the existing file."));
944
+ const robotsRoute = hostedRobotsRoute(discovery.body);
945
+ if (robotsRoute.enabled) {
946
+ const robots = await probeRobotsRoute(baseUrl, robotsRoute.route);
947
+ const robotsAnalysis = robots.body ? analyzeDocsRobotsTxt(robots.body) : void 0;
948
+ const robotsBlocked = robotsAnalysis?.blocksAgentRoutes || robotsAnalysis?.blocksAiAgents;
949
+ const robotsComplete = robotsAnalysis?.hasAgentRoutes && robotsAnalysis?.hasAiPolicy;
950
+ checks.push(makeCheck("hosted-robots", "Hosted robots.txt", robots.ok && !robotsBlocked && robotsComplete ? "pass" : robots.ok && !robotsBlocked ? "warn" : "fail", robots.ok && !robotsBlocked && robotsComplete ? 5 : robots.ok && !robotsBlocked ? 3 : 0, 5, robots.ok ? robotsBlocked ? `${robotsRoute.route} is reachable but blocks ${robotsAnalysis?.blocksAiAgents ? "common AI crawlers" : "agent-readable docs routes"}.` : robotsComplete ? `${robots.detail} It advertises agent-readable routes and common AI crawler policy.` : `${robots.detail} It is missing ${robotsAnalysis?.missingRoutes.length ? `agent routes (${robotsAnalysis.missingRoutes.join(", ")})` : "common AI crawler policy"}.` : robots.detail, robots.ok && !robotsBlocked && robotsComplete ? void 0 : "Publish an agent-friendly robots.txt with `docs robots generate`, or append the generated block to the existing file."));
951
+ } else checks.push(makeCheck("hosted-robots", "Hosted robots.txt", "warn", 0, 5, "The hosted discovery spec reports robots.txt as disabled.", "Enable robots and publish an agent-friendly robots.txt with `docs robots generate`."));
943
952
  const skill = await Promise.all([probeTextRoute(baseUrl, DEFAULT_SKILL_MD_ROUTE), probeTextRoute(baseUrl, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE)]);
944
953
  const skillPassed = skill.filter((result) => result.ok).length;
945
954
  checks.push(makeCheck("hosted-skill", "Hosted skill.md", skillPassed === skill.length ? "pass" : skillPassed > 0 ? "warn" : "fail", skillPassed === skill.length ? 5 : skillPassed > 0 ? 3 : 0, 5, skill.map((result) => result.detail).join(" "), skillPassed === skill.length ? void 0 : "Verify deployed /skill.md and /.well-known/skill.md routes return non-empty markdown."));
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { $ as DocsSearchResultType, A as DocsConfig, At as TypesenseDocsSearchConfig, B as DocsObservabilityEventInput, C as DocsAskAIActionData, Ct as SidebarFolderIndexBehavior, D as DocsAskAIFeedbackMessage, Dt as SidebarTree, E as DocsAskAIFeedbackData, Et as SidebarPageNode, F as DocsMcpToolsConfig, G as DocsSearchAdapterContext, H as DocsRobotsConfig, I as DocsMetadata, J as DocsSearchConfig, K as DocsSearchAdapterFactory, L as DocsNav, M as DocsFeedbackValue, Mt as UIConfig, N as DocsI18nConfig, O as DocsAskAIFeedbackValue, Ot as SimpleDocsSearchConfig, P as DocsMcpConfig, Q as DocsSearchResult, R as DocsObservabilityConfig, S as DocsAnalyticsSource, St as SidebarConfig, T as DocsAskAIFeedbackConfig, Tt as SidebarNode, U as DocsRobotsRule, V as DocsRelatedItem, W as DocsSearchAdapter, X as DocsSearchEmbeddingsConfig, Y as DocsSearchDocument, Z as DocsSearchQuery, _ as DocsAnalyticsConfig, _t as PageSidebarFrontmatter, a as ApiReferenceRenderer, at as GithubConfig, b as DocsAnalyticsEventType, bt as ResolvedDocsRelatedLink, c as ChangelogFrontmatter, ct as McpDocsSearchConfig, d as CustomDocsSearchConfig, dt as OpenDocsProvider, et as DocsSearchSourcePage, f as DocsAgentFeedbackContext, ft as OpenGraphImage, g as DocsAgentTraceStatus, gt as PageOpenGraph, h as DocsAgentTraceEventType, ht as PageFrontmatter, i as ApiReferenceConfig, it as FontStyle, j as DocsFeedbackData, jt as TypographyConfig, k as DocsAskAIMcpConfig, kt as ThemeToggleConfig, l as CodeBlockCopyData, lt as OGConfig, m as DocsAgentTraceEventInput, mt as PageActionsConfig, n as AgentFeedbackConfig, nt as DocsTheme, o as BreadcrumbConfig, ot as LastUpdatedConfig, p as DocsAgentFeedbackData, pt as OrderingItem, q as DocsSearchChunkingConfig, r as AlgoliaDocsSearchConfig, rt as FeedbackConfig, s as ChangelogConfig, st as LlmsTxtConfig, t as AIConfig, tt as DocsSitemapConfig, u as CopyMarkdownConfig, ut as OpenDocsConfig, v as DocsAnalyticsEvent, vt as PageTwitter, w as DocsAskAIActionType, wt as SidebarFolderNode, x as DocsAnalyticsInput, xt as SidebarComponentProps, y as DocsAnalyticsEventInput, yt as ReadingTimeConfig, z as DocsObservabilityEvent } from "./types-Ch0kE7uS.mjs";
2
- import { A as DOCS_AGENT_TRACE_EVENT_TYPES, B as resolveDocsObservabilityConfig, C as createDocsSitemapResponse, D as resolveDocsSitemapConfig, E as renderDocsSitemapXml, F as createDocsAgentTraceId, H as createDocsCloudAnalytics, I as emitDocsAgentTraceEvent, L as emitDocsAnalyticsEvent, M as ResolvedDocsAnalyticsConfig, N as ResolvedDocsObservabilityConfig, O as resolveDocsSitemapRequest, P as createDocsAgentTraceContext, R as emitDocsObservabilityEvent, S as buildDocsSitemapManifest, T as renderDocsSitemapMarkdown, V as DocsCloudAnalyticsOptions, _ as DocsSitemapFormat, a as createMcpSearchAdapter, b as DocsSitemapPageInput, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, f as resolveSearchRequestConfig, g as DEFAULT_SITEMAP_XML_ROUTE, h as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, i as createCustomSearchAdapter, j as DocsAgentTraceContext, k as toDocsSitemapMarkdownUrl, l as inferDocsAskAIPackageHints, m as DEFAULT_SITEMAP_MD_ROUTE, n as buildDocsSearchDocuments, o as createSimpleSearchAdapter, p as DEFAULT_SITEMAP_MANIFEST_PATH, r as createAlgoliaSearchAdapter, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, u as performDocsSearch, v as DocsSitemapManifest, w as readDocsSitemapManifestFromContentMap, x as DocsSitemapResolvedConfig, y as DocsSitemapManifestPage, z as resolveDocsAnalyticsConfig } from "./search-BH07-Otd.mjs";
2
+ import { A as toDocsSitemapMarkdownUrl, B as resolveDocsAnalyticsConfig, C as createDocsSitemapResponse, D as resolveDocsSitemapConfig, E as renderDocsSitemapXml, F as createDocsAgentTraceContext, H as DocsCloudAnalyticsOptions, I as createDocsAgentTraceId, L as emitDocsAgentTraceEvent, M as DocsAgentTraceContext, N as ResolvedDocsAnalyticsConfig, O as resolveDocsSitemapPageLastmod, P as ResolvedDocsObservabilityConfig, R as emitDocsAnalyticsEvent, S as buildDocsSitemapManifest, T as renderDocsSitemapMarkdown, U as createDocsCloudAnalytics, V as resolveDocsObservabilityConfig, _ as DocsSitemapFormat, a as createMcpSearchAdapter, b as DocsSitemapPageInput, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, f as resolveSearchRequestConfig, g as DEFAULT_SITEMAP_XML_ROUTE, h as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, i as createCustomSearchAdapter, j as DOCS_AGENT_TRACE_EVENT_TYPES, k as resolveDocsSitemapRequest, l as inferDocsAskAIPackageHints, m as DEFAULT_SITEMAP_MD_ROUTE, n as buildDocsSearchDocuments, o as createSimpleSearchAdapter, p as DEFAULT_SITEMAP_MANIFEST_PATH, r as createAlgoliaSearchAdapter, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, u as performDocsSearch, v as DocsSitemapManifest, w as readDocsSitemapManifestFromContentMap, x as DocsSitemapResolvedConfig, y as DocsSitemapManifestPage, z as emitDocsObservabilityEvent } from "./search-C3TAufnf.mjs";
3
3
  import { DocsMcpPage, DocsMcpResolvedConfig } from "./mcp.mjs";
4
4
 
5
5
  //#region src/define-docs.d.ts
@@ -93,6 +93,19 @@ declare function resolveDocsLocale(searchParams: URLSearchParams, i18n?: Resolve
93
93
  declare function resolveDocsPath(pathname: string, entry: string): DocsPathMatch;
94
94
  //#endregion
95
95
  //#region src/metadata.d.ts
96
+ interface DocsStructuredDataBreadcrumb {
97
+ name: string;
98
+ url: string;
99
+ }
100
+ interface DocsPageStructuredDataInput {
101
+ title: string;
102
+ description?: string;
103
+ url: string;
104
+ baseUrl?: string;
105
+ entry?: string;
106
+ dateModified?: string;
107
+ breadcrumbs?: DocsStructuredDataBreadcrumb[];
108
+ }
96
109
  /**
97
110
  * Resolve page title using metadata titleTemplate.
98
111
  * %s is replaced with page title.
@@ -115,6 +128,24 @@ declare function buildPageOpenGraph(page: Pick<PageFrontmatter, "title" | "descr
115
128
  * Otherwise builds from ogImage or config (dynamic endpoint).
116
129
  */
117
130
  declare function buildPageTwitter(page: Pick<PageFrontmatter, "title" | "description" | "ogImage" | "openGraph" | "twitter">, ogConfig?: OGConfig, baseUrl?: string): PageTwitter | undefined;
131
+ /**
132
+ * Resolve the public docs site URL from existing agent-facing config.
133
+ *
134
+ * The framework intentionally reuses `sitemap.baseUrl`, `llmsTxt.baseUrl`,
135
+ * `robots.baseUrl`, or `ai.docsUrl` instead of requiring another setting.
136
+ */
137
+ declare function resolveDocsMetadataBaseUrl(config: DocsConfig): string | undefined;
138
+ /**
139
+ * Build Schema.org JSON-LD for a docs page.
140
+ *
141
+ * The shape follows Vercel's agent readability guidance: a `TechArticle`
142
+ * with title, description, canonical URL, freshness, and breadcrumbs.
143
+ */
144
+ declare function buildDocsPageStructuredData(input: DocsPageStructuredDataInput): Record<string, unknown>;
145
+ /**
146
+ * Serialize Schema.org JSON-LD for safe insertion into a `<script>` tag.
147
+ */
148
+ declare function renderDocsPageStructuredDataJson(input: DocsPageStructuredDataInput): string;
118
149
  //#endregion
119
150
  //#region src/reading-time.d.ts
120
151
  interface ResolvedReadingTimeOptions {
@@ -204,6 +235,7 @@ interface DocsAgentDiscoverySpecOptions {
204
235
  feedback?: DocsAgentFeedbackDiscoveryConfig;
205
236
  llms?: DocsLlmsDiscoveryConfig;
206
237
  sitemap?: boolean | DocsSitemapConfig;
238
+ robots?: boolean | DocsRobotsConfig;
207
239
  markdown?: {
208
240
  acceptHeader?: boolean;
209
241
  signatureAgentHeader?: boolean;
@@ -217,6 +249,7 @@ interface DocsSkillDocumentOptions {
217
249
  feedback?: DocsAgentFeedbackDiscoveryConfig;
218
250
  llms?: DocsLlmsDiscoveryConfig;
219
251
  sitemap?: boolean | DocsSitemapConfig;
252
+ robots?: boolean | DocsRobotsConfig;
220
253
  markdown?: {
221
254
  acceptHeader?: boolean;
222
255
  signatureAgentHeader?: boolean;
@@ -274,6 +307,7 @@ declare function renderDocsSkillDocument({
274
307
  feedback,
275
308
  llms,
276
309
  sitemap,
310
+ robots,
277
311
  markdown
278
312
  }: DocsSkillDocumentOptions): string;
279
313
  declare function resolveDocsAgentMdxContent(content: string, audience: "human" | "agent"): string;
@@ -286,6 +320,7 @@ declare function buildDocsAgentDiscoverySpec({
286
320
  feedback,
287
321
  llms,
288
322
  sitemap,
323
+ robots,
289
324
  markdown
290
325
  }: DocsAgentDiscoverySpecOptions): {
291
326
  version: string;
@@ -313,6 +348,8 @@ declare function buildDocsAgentDiscoverySpec({
313
348
  mcp: boolean;
314
349
  search: boolean;
315
350
  sitemap: boolean;
351
+ robots: boolean;
352
+ structuredData: boolean;
316
353
  agentFeedback: boolean;
317
354
  locales: boolean;
318
355
  };
@@ -362,6 +399,19 @@ declare function buildDocsAgentDiscoverySpec({
362
399
  defaultWellKnownRoute: string;
363
400
  };
364
401
  };
402
+ robots: {
403
+ enabled: boolean;
404
+ route: string;
405
+ defaultRoute: string;
406
+ };
407
+ structuredData: {
408
+ enabled: boolean;
409
+ format: string;
410
+ schema: string;
411
+ fields: string[];
412
+ canonicalUrlField: string;
413
+ breadcrumbType: string;
414
+ };
365
415
  search: {
366
416
  enabled: boolean;
367
417
  endpoint: string;
@@ -450,4 +500,4 @@ declare function renderDocsRobotsGeneratedBlock(options?: DocsRobotsRenderOption
450
500
  declare function upsertDocsRobotsGeneratedBlock(existing: string, block: string): string;
451
501
  declare function analyzeDocsRobotsTxt(content: string, options?: DocsRobotsRenderOptions): DocsRobotsAnalysis;
452
502
  //#endregion
453
- export { type AIConfig, type AgentFeedbackConfig, type AlgoliaDocsSearchConfig, type ApiReferenceConfig, type ApiReferenceRenderer, type BreadcrumbConfig, type ChangelogConfig, type ChangelogEntrySummary, type ChangelogFrontmatter, type CodeBlockCopyData, type CopyMarkdownConfig, type CustomDocsSearchConfig, DEFAULT_AGENT_FEEDBACK_ROUTE, DEFAULT_AGENT_SPEC_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, DEFAULT_DOCS_AI_ROBOTS_USER_AGENTS, DEFAULT_DOCS_API_ROUTE, DEFAULT_LLMS_FULL_TXT_ROUTE, DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, DEFAULT_LLMS_TXT_ROUTE, DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, DEFAULT_MCP_PUBLIC_ROUTE, DEFAULT_MCP_ROUTE, DEFAULT_MCP_WELL_KNOWN_ROUTE, DEFAULT_ROBOTS_TXT_ROUTE, DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, DEFAULT_SKILL_MD_ROUTE, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, DOCS_AGENT_TRACE_EVENT_TYPES, DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER, DOCS_ROBOTS_GENERATED_BLOCK_END, DOCS_ROBOTS_GENERATED_BLOCK_START, type DocsAgentDiscoverySpecOptions, type DocsAgentFeedbackContext, type DocsAgentFeedbackData, type DocsAgentFeedbackDiscoveryConfig, type DocsAgentTraceContext, type DocsAgentTraceEventInput, type DocsAgentTraceEventType, type DocsAgentTraceStatus, type DocsAnalyticsConfig, type DocsAnalyticsEvent, type DocsAnalyticsEventInput, type DocsAnalyticsEventType, type DocsAnalyticsInput, type DocsAnalyticsSource, type DocsAskAIActionData, type DocsAskAIActionType, type DocsAskAIFeedbackConfig, type DocsAskAIFeedbackData, type DocsAskAIFeedbackMessage, type DocsAskAIFeedbackValue, type DocsAskAIMcpConfig, type DocsCloudAnalyticsOptions, type DocsConfig, type DocsFeedbackData, type DocsFeedbackValue, type DocsI18nConfig, type DocsLlmsDiscoveryConfig, type DocsMarkdownPage, type DocsMcpConfig, type DocsMcpToolsConfig, type DocsMetadata, type DocsNav, type DocsObservabilityConfig, type DocsObservabilityEvent, type DocsObservabilityEventInput, type DocsPathMatch, type DocsRelatedItem, type DocsRobotsConfig, type DocsRobotsRenderOptions, type DocsRobotsResolvedConfig, type DocsRobotsRule, type DocsSearchAdapter, type DocsSearchAdapterContext, type DocsSearchAdapterFactory, type DocsSearchChunkingConfig, type DocsSearchConfig, type DocsSearchDocument, type DocsSearchEmbeddingsConfig, type DocsSearchQuery, type DocsSearchResult, type DocsSearchResultType, type DocsSearchSourcePage, type DocsSitemapConfig, type DocsSitemapFormat, type DocsSitemapManifest, type DocsSitemapManifestPage, type DocsSitemapPageInput, type DocsSitemapResolvedConfig, type DocsSkillDocumentOptions, type DocsTheme, type FeedbackConfig, type FontStyle, GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, type GeneratedAgentProvenance, type GeneratedAgentSourceKind, type GithubConfig, type LastUpdatedConfig, type LlmsTxtConfig, type McpDocsSearchConfig, type OGConfig, type OpenDocsConfig, type OpenDocsProvider, type OpenGraphImage, type OrderingItem, type PageActionsConfig, type PageFrontmatter, type PageOpenGraph, type PageSidebarFrontmatter, type PageTwitter, type ReadingTimeConfig, type ResolvedChangelogConfig, type ResolvedDocsAnalyticsConfig, type ResolvedDocsI18n, type ResolvedDocsObservabilityConfig, type ResolvedDocsRelatedLink, type SidebarComponentProps, type SidebarConfig, type SidebarFolderIndexBehavior, type SidebarFolderNode, type SidebarNode, type SidebarPageNode, type SidebarTree, type SimpleDocsSearchConfig, type ThemeToggleConfig, type TypesenseDocsSearchConfig, type TypographyConfig, type UIConfig, analyzeDocsRobotsTxt, applySidebarFolderIndexBehavior, buildDocsAgentDiscoverySpec, buildDocsAskAIContext, buildDocsSearchDocuments, buildDocsSitemapManifest, buildPageOpenGraph, buildPageTwitter, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsCloudAnalytics, createDocsSitemapResponse, createMcpSearchAdapter, createSimpleSearchAdapter, createTheme, createTypesenseSearchAdapter, deepMerge, defineDocs, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsObservabilityEvent, estimateReadingTimeMinutes, extendTheme, findDocsMarkdownPage, formatDocsAskAIPackageHints, getDocsMarkdownVaryHeader, getDocsRobotsAllowRoutes, hasDocsMarkdownSignatureAgent, hashGeneratedAgentContent, inferDocsAskAIPackageHints, isDocsAgentDiscoveryRequest, isDocsMcpRequest, isDocsPublicGetRequest, isDocsSkillRequest, normalizeDocsPathSegment, normalizeDocsRelated, normalizeDocsUrlPath, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, performDocsSearch, readDocsSitemapManifestFromContentMap, renderDocsMarkdownDocument, renderDocsMarkdownNotFound, renderDocsRelatedMarkdownLines, renderDocsRobotsGeneratedBlock, renderDocsRobotsTxt, renderDocsSitemapMarkdown, renderDocsSitemapXml, renderDocsSkillDocument, resolveAskAISearchRequestConfig, resolveChangelogConfig, resolveDocsAgentMdxContent, resolveDocsAnalyticsConfig, resolveDocsI18n, resolveDocsLlmsTxtFormat, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsObservabilityConfig, resolveDocsPath, resolveDocsRobotsConfig, resolveDocsSitemapConfig, resolveDocsSitemapRequest, resolveDocsSkillFormat, resolveOGImage, resolvePageReadingTime, resolvePageSidebarFolderIndexBehavior, resolveReadingTimeFromContent, resolveReadingTimeFromSource, resolveReadingTimeOptions, resolveSearchRequestConfig, resolveSidebarFolderIndexBehavior, resolveSidebarFolderIndexBehaviorForPath, resolveTitle, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance, toDocsMarkdownUrl, toDocsSitemapMarkdownUrl, upsertDocsRobotsGeneratedBlock };
503
+ export { type AIConfig, type AgentFeedbackConfig, type AlgoliaDocsSearchConfig, type ApiReferenceConfig, type ApiReferenceRenderer, type BreadcrumbConfig, type ChangelogConfig, type ChangelogEntrySummary, type ChangelogFrontmatter, type CodeBlockCopyData, type CopyMarkdownConfig, type CustomDocsSearchConfig, DEFAULT_AGENT_FEEDBACK_ROUTE, DEFAULT_AGENT_SPEC_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, DEFAULT_DOCS_AI_ROBOTS_USER_AGENTS, DEFAULT_DOCS_API_ROUTE, DEFAULT_LLMS_FULL_TXT_ROUTE, DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, DEFAULT_LLMS_TXT_ROUTE, DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, DEFAULT_MCP_PUBLIC_ROUTE, DEFAULT_MCP_ROUTE, DEFAULT_MCP_WELL_KNOWN_ROUTE, DEFAULT_ROBOTS_TXT_ROUTE, DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, DEFAULT_SKILL_MD_ROUTE, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, DOCS_AGENT_TRACE_EVENT_TYPES, DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER, DOCS_ROBOTS_GENERATED_BLOCK_END, DOCS_ROBOTS_GENERATED_BLOCK_START, type DocsAgentDiscoverySpecOptions, type DocsAgentFeedbackContext, type DocsAgentFeedbackData, type DocsAgentFeedbackDiscoveryConfig, type DocsAgentTraceContext, type DocsAgentTraceEventInput, type DocsAgentTraceEventType, type DocsAgentTraceStatus, type DocsAnalyticsConfig, type DocsAnalyticsEvent, type DocsAnalyticsEventInput, type DocsAnalyticsEventType, type DocsAnalyticsInput, type DocsAnalyticsSource, type DocsAskAIActionData, type DocsAskAIActionType, type DocsAskAIFeedbackConfig, type DocsAskAIFeedbackData, type DocsAskAIFeedbackMessage, type DocsAskAIFeedbackValue, type DocsAskAIMcpConfig, type DocsCloudAnalyticsOptions, type DocsConfig, type DocsFeedbackData, type DocsFeedbackValue, type DocsI18nConfig, type DocsLlmsDiscoveryConfig, type DocsMarkdownPage, type DocsMcpConfig, type DocsMcpToolsConfig, type DocsMetadata, type DocsNav, type DocsObservabilityConfig, type DocsObservabilityEvent, type DocsObservabilityEventInput, type DocsPageStructuredDataInput, type DocsPathMatch, type DocsRelatedItem, type DocsRobotsConfig, type DocsRobotsRenderOptions, type DocsRobotsResolvedConfig, type DocsRobotsRule, type DocsSearchAdapter, type DocsSearchAdapterContext, type DocsSearchAdapterFactory, type DocsSearchChunkingConfig, type DocsSearchConfig, type DocsSearchDocument, type DocsSearchEmbeddingsConfig, type DocsSearchQuery, type DocsSearchResult, type DocsSearchResultType, type DocsSearchSourcePage, type DocsSitemapConfig, type DocsSitemapFormat, type DocsSitemapManifest, type DocsSitemapManifestPage, type DocsSitemapPageInput, type DocsSitemapResolvedConfig, type DocsSkillDocumentOptions, type DocsStructuredDataBreadcrumb, type DocsTheme, type FeedbackConfig, type FontStyle, GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, type GeneratedAgentProvenance, type GeneratedAgentSourceKind, type GithubConfig, type LastUpdatedConfig, type LlmsTxtConfig, type McpDocsSearchConfig, type OGConfig, type OpenDocsConfig, type OpenDocsProvider, type OpenGraphImage, type OrderingItem, type PageActionsConfig, type PageFrontmatter, type PageOpenGraph, type PageSidebarFrontmatter, type PageTwitter, type ReadingTimeConfig, type ResolvedChangelogConfig, type ResolvedDocsAnalyticsConfig, type ResolvedDocsI18n, type ResolvedDocsObservabilityConfig, type ResolvedDocsRelatedLink, type SidebarComponentProps, type SidebarConfig, type SidebarFolderIndexBehavior, type SidebarFolderNode, type SidebarNode, type SidebarPageNode, type SidebarTree, type SimpleDocsSearchConfig, type ThemeToggleConfig, type TypesenseDocsSearchConfig, type TypographyConfig, type UIConfig, analyzeDocsRobotsTxt, applySidebarFolderIndexBehavior, buildDocsAgentDiscoverySpec, buildDocsAskAIContext, buildDocsPageStructuredData, buildDocsSearchDocuments, buildDocsSitemapManifest, buildPageOpenGraph, buildPageTwitter, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsCloudAnalytics, createDocsSitemapResponse, createMcpSearchAdapter, createSimpleSearchAdapter, createTheme, createTypesenseSearchAdapter, deepMerge, defineDocs, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsObservabilityEvent, estimateReadingTimeMinutes, extendTheme, findDocsMarkdownPage, formatDocsAskAIPackageHints, getDocsMarkdownVaryHeader, getDocsRobotsAllowRoutes, hasDocsMarkdownSignatureAgent, hashGeneratedAgentContent, inferDocsAskAIPackageHints, isDocsAgentDiscoveryRequest, isDocsMcpRequest, isDocsPublicGetRequest, isDocsSkillRequest, normalizeDocsPathSegment, normalizeDocsRelated, normalizeDocsUrlPath, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, performDocsSearch, readDocsSitemapManifestFromContentMap, renderDocsMarkdownDocument, renderDocsMarkdownNotFound, renderDocsPageStructuredDataJson, renderDocsRelatedMarkdownLines, renderDocsRobotsGeneratedBlock, renderDocsRobotsTxt, renderDocsSitemapMarkdown, renderDocsSitemapXml, renderDocsSkillDocument, resolveAskAISearchRequestConfig, resolveChangelogConfig, resolveDocsAgentMdxContent, resolveDocsAnalyticsConfig, resolveDocsI18n, resolveDocsLlmsTxtFormat, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsMetadataBaseUrl, resolveDocsObservabilityConfig, resolveDocsPath, resolveDocsRobotsConfig, resolveDocsSitemapConfig, resolveDocsSitemapPageLastmod, resolveDocsSitemapRequest, resolveDocsSkillFormat, resolveOGImage, resolvePageReadingTime, resolvePageSidebarFolderIndexBehavior, resolveReadingTimeFromContent, resolveReadingTimeFromSource, resolveReadingTimeOptions, resolveSearchRequestConfig, resolveSidebarFolderIndexBehavior, resolveSidebarFolderIndexBehaviorForPath, resolveTitle, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance, toDocsMarkdownUrl, toDocsSitemapMarkdownUrl, upsertDocsRobotsGeneratedBlock };
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
- import { _ as defineDocs, a as resolveReadingTimeOptions, c as resolveOGImage, d as resolveDocsLocale, f as resolveDocsPath, g as resolveChangelogConfig, h as deepMerge, i as resolveReadingTimeFromSource, l as resolveTitle, m as extendTheme, n as resolvePageReadingTime, o as buildPageOpenGraph, p as createTheme, r as resolveReadingTimeFromContent, s as buildPageTwitter, t as estimateReadingTimeMinutes, u as resolveDocsI18n } from "./reading-time-pKUeloSI.mjs";
1
+ import { _ as extendTheme, a as resolveReadingTimeOptions, b as defineDocs, c as buildPageTwitter, d as resolveOGImage, f as resolveTitle, g as createTheme, h as resolveDocsPath, i as resolveReadingTimeFromSource, l as renderDocsPageStructuredDataJson, m as resolveDocsLocale, n as resolvePageReadingTime, o as buildDocsPageStructuredData, p as resolveDocsI18n, r as resolveReadingTimeFromContent, s as buildPageOpenGraph, t as estimateReadingTimeMinutes, u as resolveDocsMetadataBaseUrl, v as deepMerge, y as resolveChangelogConfig } from "./reading-time-CbbHNg9V.mjs";
2
2
  import { A as resolveDocsAnalyticsConfig, C as resolveSidebarFolderIndexBehaviorForPath, D as emitDocsAgentTraceEvent, E as createDocsAgentTraceId, M as createDocsCloudAnalytics, O as emitDocsAnalyticsEvent, S as resolveSidebarFolderIndexBehavior, T as createDocsAgentTraceContext, _ as parseGeneratedAgentDocument, a as createMcpSearchAdapter, b as applySidebarFolderIndexBehavior, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, f as resolveSearchRequestConfig, g as normalizeGeneratedAgentContent, h as hashGeneratedAgentContent, i as createCustomSearchAdapter, j as resolveDocsObservabilityConfig, k as emitDocsObservabilityEvent, l as inferDocsAskAIPackageHints, m as GENERATED_AGENT_PROVENANCE_VERSION, n as buildDocsSearchDocuments, o as createSimpleSearchAdapter, p as GENERATED_AGENT_PROVENANCE_MARKER, r as createAlgoliaSearchAdapter, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, u as performDocsSearch, v as serializeGeneratedAgentDocument, w as DOCS_AGENT_TRACE_EVENT_TYPES, x as resolvePageSidebarFolderIndexBehavior, y as stripGeneratedAgentProvenance } from "./search-B5ze-heM.mjs";
3
3
  import { n as renderDocsRelatedMarkdownLines, t as normalizeDocsRelated } from "./related-BNj_NdHq.mjs";
4
- import { a as buildDocsSitemapManifest, c as renderDocsSitemapMarkdown, d as resolveDocsSitemapRequest, f as toDocsSitemapMarkdownUrl, i as DEFAULT_SITEMAP_XML_ROUTE, l as renderDocsSitemapXml, n as DEFAULT_SITEMAP_MD_ROUTE, o as createDocsSitemapResponse, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, s as readDocsSitemapManifestFromContentMap, t as DEFAULT_SITEMAP_MANIFEST_PATH, u as resolveDocsSitemapConfig } from "./sitemap-Ccfh6GXO.mjs";
5
- import { A as isDocsAgentDiscoveryRequest, B as resolveDocsLlmsTxtFormat, C as DEFAULT_SKILL_MD_ROUTE, D as findDocsMarkdownPage, E as buildDocsAgentDiscoverySpec, F as normalizeDocsUrlPath, H as resolveDocsSkillFormat, I as renderDocsMarkdownDocument, L as renderDocsMarkdownNotFound, M as isDocsPublicGetRequest, N as isDocsSkillRequest, O as getDocsMarkdownVaryHeader, P as normalizeDocsPathSegment, R as renderDocsSkillDocument, S as DEFAULT_MCP_WELL_KNOWN_ROUTE, T as DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER, U as toDocsMarkdownUrl, V as resolveDocsMarkdownRequest, _ as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, a as analyzeDocsRobotsTxt, b as DEFAULT_MCP_PUBLIC_ROUTE, c as renderDocsRobotsTxt, d as DEFAULT_AGENT_FEEDBACK_ROUTE, f as DEFAULT_AGENT_SPEC_ROUTE, g as DEFAULT_LLMS_FULL_TXT_ROUTE, h as DEFAULT_DOCS_API_ROUTE, i as DOCS_ROBOTS_GENERATED_BLOCK_START, j as isDocsMcpRequest, k as hasDocsMarkdownSignatureAgent, l as resolveDocsRobotsConfig, m as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_ROBOTS_TXT_ROUTE, o as getDocsRobotsAllowRoutes, p as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, r as DOCS_ROBOTS_GENERATED_BLOCK_END, s as renderDocsRobotsGeneratedBlock, t as DEFAULT_DOCS_AI_ROBOTS_USER_AGENTS, u as upsertDocsRobotsGeneratedBlock, v as DEFAULT_LLMS_TXT_ROUTE, w as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, x as DEFAULT_MCP_ROUTE, y as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, z as resolveDocsAgentMdxContent } from "./robots-DCR-ZFLO.mjs";
4
+ import { a as buildDocsSitemapManifest, c as renderDocsSitemapMarkdown, d as resolveDocsSitemapPageLastmod, f as resolveDocsSitemapRequest, i as DEFAULT_SITEMAP_XML_ROUTE, l as renderDocsSitemapXml, n as DEFAULT_SITEMAP_MD_ROUTE, o as createDocsSitemapResponse, p as toDocsSitemapMarkdownUrl, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, s as readDocsSitemapManifestFromContentMap, t as DEFAULT_SITEMAP_MANIFEST_PATH, u as resolveDocsSitemapConfig } from "./sitemap-BIQIYMKe.mjs";
5
+ import { A as isDocsAgentDiscoveryRequest, B as resolveDocsLlmsTxtFormat, C as DEFAULT_SKILL_MD_ROUTE, D as findDocsMarkdownPage, E as buildDocsAgentDiscoverySpec, F as normalizeDocsUrlPath, H as resolveDocsSkillFormat, I as renderDocsMarkdownDocument, L as renderDocsMarkdownNotFound, M as isDocsPublicGetRequest, N as isDocsSkillRequest, O as getDocsMarkdownVaryHeader, P as normalizeDocsPathSegment, R as renderDocsSkillDocument, S as DEFAULT_MCP_WELL_KNOWN_ROUTE, T as DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER, U as toDocsMarkdownUrl, V as resolveDocsMarkdownRequest, _ as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, a as analyzeDocsRobotsTxt, b as DEFAULT_MCP_PUBLIC_ROUTE, c as renderDocsRobotsTxt, d as DEFAULT_AGENT_FEEDBACK_ROUTE, f as DEFAULT_AGENT_SPEC_ROUTE, g as DEFAULT_LLMS_FULL_TXT_ROUTE, h as DEFAULT_DOCS_API_ROUTE, i as DOCS_ROBOTS_GENERATED_BLOCK_START, j as isDocsMcpRequest, k as hasDocsMarkdownSignatureAgent, l as resolveDocsRobotsConfig, m as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_ROBOTS_TXT_ROUTE, o as getDocsRobotsAllowRoutes, p as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, r as DOCS_ROBOTS_GENERATED_BLOCK_END, s as renderDocsRobotsGeneratedBlock, t as DEFAULT_DOCS_AI_ROBOTS_USER_AGENTS, u as upsertDocsRobotsGeneratedBlock, v as DEFAULT_LLMS_TXT_ROUTE, w as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, x as DEFAULT_MCP_ROUTE, y as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, z as resolveDocsAgentMdxContent } from "./robots-T0sATQRa.mjs";
6
6
 
7
- export { DEFAULT_AGENT_FEEDBACK_ROUTE, DEFAULT_AGENT_SPEC_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, DEFAULT_DOCS_AI_ROBOTS_USER_AGENTS, DEFAULT_DOCS_API_ROUTE, DEFAULT_LLMS_FULL_TXT_ROUTE, DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, DEFAULT_LLMS_TXT_ROUTE, DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, DEFAULT_MCP_PUBLIC_ROUTE, DEFAULT_MCP_ROUTE, DEFAULT_MCP_WELL_KNOWN_ROUTE, DEFAULT_ROBOTS_TXT_ROUTE, DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, DEFAULT_SKILL_MD_ROUTE, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, DOCS_AGENT_TRACE_EVENT_TYPES, DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER, DOCS_ROBOTS_GENERATED_BLOCK_END, DOCS_ROBOTS_GENERATED_BLOCK_START, GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, analyzeDocsRobotsTxt, applySidebarFolderIndexBehavior, buildDocsAgentDiscoverySpec, buildDocsAskAIContext, buildDocsSearchDocuments, buildDocsSitemapManifest, buildPageOpenGraph, buildPageTwitter, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsCloudAnalytics, createDocsSitemapResponse, createMcpSearchAdapter, createSimpleSearchAdapter, createTheme, createTypesenseSearchAdapter, deepMerge, defineDocs, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsObservabilityEvent, estimateReadingTimeMinutes, extendTheme, findDocsMarkdownPage, formatDocsAskAIPackageHints, getDocsMarkdownVaryHeader, getDocsRobotsAllowRoutes, hasDocsMarkdownSignatureAgent, hashGeneratedAgentContent, inferDocsAskAIPackageHints, isDocsAgentDiscoveryRequest, isDocsMcpRequest, isDocsPublicGetRequest, isDocsSkillRequest, normalizeDocsPathSegment, normalizeDocsRelated, normalizeDocsUrlPath, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, performDocsSearch, readDocsSitemapManifestFromContentMap, renderDocsMarkdownDocument, renderDocsMarkdownNotFound, renderDocsRelatedMarkdownLines, renderDocsRobotsGeneratedBlock, renderDocsRobotsTxt, renderDocsSitemapMarkdown, renderDocsSitemapXml, renderDocsSkillDocument, resolveAskAISearchRequestConfig, resolveChangelogConfig, resolveDocsAgentMdxContent, resolveDocsAnalyticsConfig, resolveDocsI18n, resolveDocsLlmsTxtFormat, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsObservabilityConfig, resolveDocsPath, resolveDocsRobotsConfig, resolveDocsSitemapConfig, resolveDocsSitemapRequest, resolveDocsSkillFormat, resolveOGImage, resolvePageReadingTime, resolvePageSidebarFolderIndexBehavior, resolveReadingTimeFromContent, resolveReadingTimeFromSource, resolveReadingTimeOptions, resolveSearchRequestConfig, resolveSidebarFolderIndexBehavior, resolveSidebarFolderIndexBehaviorForPath, resolveTitle, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance, toDocsMarkdownUrl, toDocsSitemapMarkdownUrl, upsertDocsRobotsGeneratedBlock };
7
+ export { DEFAULT_AGENT_FEEDBACK_ROUTE, DEFAULT_AGENT_SPEC_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, DEFAULT_DOCS_AI_ROBOTS_USER_AGENTS, DEFAULT_DOCS_API_ROUTE, DEFAULT_LLMS_FULL_TXT_ROUTE, DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, DEFAULT_LLMS_TXT_ROUTE, DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, DEFAULT_MCP_PUBLIC_ROUTE, DEFAULT_MCP_ROUTE, DEFAULT_MCP_WELL_KNOWN_ROUTE, DEFAULT_ROBOTS_TXT_ROUTE, DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, DEFAULT_SKILL_MD_ROUTE, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, DOCS_AGENT_TRACE_EVENT_TYPES, DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER, DOCS_ROBOTS_GENERATED_BLOCK_END, DOCS_ROBOTS_GENERATED_BLOCK_START, GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, analyzeDocsRobotsTxt, applySidebarFolderIndexBehavior, buildDocsAgentDiscoverySpec, buildDocsAskAIContext, buildDocsPageStructuredData, buildDocsSearchDocuments, buildDocsSitemapManifest, buildPageOpenGraph, buildPageTwitter, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsCloudAnalytics, createDocsSitemapResponse, createMcpSearchAdapter, createSimpleSearchAdapter, createTheme, createTypesenseSearchAdapter, deepMerge, defineDocs, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsObservabilityEvent, estimateReadingTimeMinutes, extendTheme, findDocsMarkdownPage, formatDocsAskAIPackageHints, getDocsMarkdownVaryHeader, getDocsRobotsAllowRoutes, hasDocsMarkdownSignatureAgent, hashGeneratedAgentContent, inferDocsAskAIPackageHints, isDocsAgentDiscoveryRequest, isDocsMcpRequest, isDocsPublicGetRequest, isDocsSkillRequest, normalizeDocsPathSegment, normalizeDocsRelated, normalizeDocsUrlPath, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, performDocsSearch, readDocsSitemapManifestFromContentMap, renderDocsMarkdownDocument, renderDocsMarkdownNotFound, renderDocsPageStructuredDataJson, renderDocsRelatedMarkdownLines, renderDocsRobotsGeneratedBlock, renderDocsRobotsTxt, renderDocsSitemapMarkdown, renderDocsSitemapXml, renderDocsSkillDocument, resolveAskAISearchRequestConfig, resolveChangelogConfig, resolveDocsAgentMdxContent, resolveDocsAnalyticsConfig, resolveDocsI18n, resolveDocsLlmsTxtFormat, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsMetadataBaseUrl, resolveDocsObservabilityConfig, resolveDocsPath, resolveDocsRobotsConfig, resolveDocsSitemapConfig, resolveDocsSitemapPageLastmod, resolveDocsSitemapRequest, resolveDocsSkillFormat, resolveOGImage, resolvePageReadingTime, resolvePageSidebarFolderIndexBehavior, resolveReadingTimeFromContent, resolveReadingTimeFromSource, resolveReadingTimeOptions, resolveSearchRequestConfig, resolveSidebarFolderIndexBehavior, resolveSidebarFolderIndexBehaviorForPath, resolveTitle, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance, toDocsMarkdownUrl, toDocsSitemapMarkdownUrl, upsertDocsRobotsGeneratedBlock };
@@ -1,5 +1,5 @@
1
1
  import "./search-B5ze-heM.mjs";
2
- import "./sitemap-server-C8Ppk29g.mjs";
2
+ import "./sitemap-server-DwEPfk13.mjs";
3
3
  import { createFilesystemDocsMcpSource, resolveDocsMcpConfig, runDocsMcpStdio } from "./mcp.mjs";
4
4
  import "./server.mjs";
5
5
  import { c as readNavTitle, f as resolveDocsConfigPath, n as extractObjectLiteral, o as readBooleanProperty, p as resolveDocsContentDir, u as readStringProperty } from "./config-BR6CcCfr.mjs";
@@ -270,6 +270,111 @@ function buildPageTwitter(page, ogConfig, baseUrl) {
270
270
  images: [url]
271
271
  };
272
272
  }
273
+ function normalizeBaseUrl(value) {
274
+ if (!value) return void 0;
275
+ try {
276
+ return new URL(value).toString().replace(/\/+$/, "");
277
+ } catch {
278
+ return;
279
+ }
280
+ }
281
+ function absolutizeUrl(url, baseUrl) {
282
+ const base = normalizeBaseUrl(baseUrl);
283
+ if (!base) return url;
284
+ try {
285
+ return new URL(url, `${base}/`).toString();
286
+ } catch {
287
+ return url;
288
+ }
289
+ }
290
+ function titleFromSegment(segment) {
291
+ return segment.replace(/\.[a-z0-9]+$/i, "").replace(/[-_]+/g, " ").replace(/\b\w/g, (char) => char.toUpperCase());
292
+ }
293
+ function normalizeRoutePath(url) {
294
+ try {
295
+ return new URL(url, "https://farming-labs.local").pathname.replace(/\/+$/, "") || "/";
296
+ } catch {
297
+ return `/${url.replace(/^\/+/, "")}`.replace(/\/+$/, "") || "/";
298
+ }
299
+ }
300
+ function buildDefaultBreadcrumbs(input) {
301
+ const routePath = normalizeRoutePath(input.url);
302
+ const entry = (input.entry ?? "docs").replace(/^\/+|\/+$/g, "") || "docs";
303
+ const segments = routePath.split("/").filter(Boolean);
304
+ const entryParts = entry.split("/").filter(Boolean);
305
+ const contentSegments = segments.slice(0, entryParts.length).join("/") === entryParts.join("/") ? segments.slice(entryParts.length) : segments;
306
+ const breadcrumbs = [{
307
+ name: titleFromSegment(entryParts[entryParts.length - 1] ?? "Docs"),
308
+ url: `/${entry}`
309
+ }];
310
+ let current = `/${entry}`;
311
+ contentSegments.forEach((segment, index) => {
312
+ current = `${current}/${segment}`.replace(/\/+/g, "/");
313
+ breadcrumbs.push({
314
+ name: index === contentSegments.length - 1 ? input.title : titleFromSegment(segment),
315
+ url: current
316
+ });
317
+ });
318
+ return breadcrumbs;
319
+ }
320
+ function normalizeDateModified(value) {
321
+ if (!value) return void 0;
322
+ const date = new Date(value);
323
+ return Number.isNaN(date.getTime()) ? value : date.toISOString();
324
+ }
325
+ /**
326
+ * Resolve the public docs site URL from existing agent-facing config.
327
+ *
328
+ * The framework intentionally reuses `sitemap.baseUrl`, `llmsTxt.baseUrl`,
329
+ * `robots.baseUrl`, or `ai.docsUrl` instead of requiring another setting.
330
+ */
331
+ function resolveDocsMetadataBaseUrl(config) {
332
+ return [
333
+ typeof config.sitemap === "object" ? config.sitemap.baseUrl : void 0,
334
+ typeof config.llmsTxt === "object" ? config.llmsTxt.baseUrl : void 0,
335
+ typeof config.robots === "object" ? config.robots.baseUrl : void 0,
336
+ config.ai?.docsUrl
337
+ ].map((value) => normalizeBaseUrl(value)).find((value) => Boolean(value));
338
+ }
339
+ /**
340
+ * Build Schema.org JSON-LD for a docs page.
341
+ *
342
+ * The shape follows Vercel's agent readability guidance: a `TechArticle`
343
+ * with title, description, canonical URL, freshness, and breadcrumbs.
344
+ */
345
+ function buildDocsPageStructuredData(input) {
346
+ const breadcrumbs = input.breadcrumbs?.length ? input.breadcrumbs : buildDefaultBreadcrumbs(input);
347
+ const result = {
348
+ "@context": "https://schema.org",
349
+ "@type": "TechArticle",
350
+ headline: input.title,
351
+ name: input.title,
352
+ url: absolutizeUrl(input.url, input.baseUrl),
353
+ mainEntityOfPage: {
354
+ "@type": "WebPage",
355
+ "@id": absolutizeUrl(input.url, input.baseUrl)
356
+ },
357
+ breadcrumb: {
358
+ "@type": "BreadcrumbList",
359
+ itemListElement: breadcrumbs.map((item, index) => ({
360
+ "@type": "ListItem",
361
+ position: index + 1,
362
+ name: item.name,
363
+ item: absolutizeUrl(item.url, input.baseUrl)
364
+ }))
365
+ }
366
+ };
367
+ if (input.description) result.description = input.description;
368
+ const dateModified = normalizeDateModified(input.dateModified);
369
+ if (dateModified) result.dateModified = dateModified;
370
+ return result;
371
+ }
372
+ /**
373
+ * Serialize Schema.org JSON-LD for safe insertion into a `<script>` tag.
374
+ */
375
+ function renderDocsPageStructuredDataJson(input) {
376
+ return JSON.stringify(buildDocsPageStructuredData(input)).replace(/</g, "\\u003c");
377
+ }
273
378
 
274
379
  //#endregion
275
380
  //#region src/reading-time.ts
@@ -312,4 +417,4 @@ function resolveReadingTimeFromSource(source, wordsPerMinute) {
312
417
  }
313
418
 
314
419
  //#endregion
315
- export { defineDocs as _, resolveReadingTimeOptions as a, resolveOGImage as c, resolveDocsLocale as d, resolveDocsPath as f, resolveChangelogConfig as g, deepMerge as h, resolveReadingTimeFromSource as i, resolveTitle as l, extendTheme as m, resolvePageReadingTime as n, buildPageOpenGraph as o, createTheme as p, resolveReadingTimeFromContent as r, buildPageTwitter as s, estimateReadingTimeMinutes as t, resolveDocsI18n as u };
420
+ export { extendTheme as _, resolveReadingTimeOptions as a, defineDocs as b, buildPageTwitter as c, resolveOGImage as d, resolveTitle as f, createTheme as g, resolveDocsPath as h, resolveReadingTimeFromSource as i, renderDocsPageStructuredDataJson as l, resolveDocsLocale as m, resolvePageReadingTime as n, buildDocsPageStructuredData as o, resolveDocsI18n as p, resolveReadingTimeFromContent as r, buildPageOpenGraph as s, estimateReadingTimeMinutes as t, resolveDocsMetadataBaseUrl as u, deepMerge as v, resolveChangelogConfig as y };
@@ -1,4 +1,4 @@
1
- import { i as DOCS_ROBOTS_GENERATED_BLOCK_START, l as resolveDocsRobotsConfig, r as DOCS_ROBOTS_GENERATED_BLOCK_END, s as renderDocsRobotsGeneratedBlock, u as upsertDocsRobotsGeneratedBlock } from "./robots-DCR-ZFLO.mjs";
1
+ import { i as DOCS_ROBOTS_GENERATED_BLOCK_START, l as resolveDocsRobotsConfig, r as DOCS_ROBOTS_GENERATED_BLOCK_END, s as renderDocsRobotsGeneratedBlock, u as upsertDocsRobotsGeneratedBlock } from "./robots-T0sATQRa.mjs";
2
2
  import { d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-BR6CcCfr.mjs";
3
3
  import { t as detectFramework } from "./utils-AmYxHDoz.mjs";
4
4
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
@@ -1,5 +1,5 @@
1
1
  import { n as renderDocsRelatedMarkdownLines } from "./related-BNj_NdHq.mjs";
2
- import { d as resolveDocsSitemapRequest, i as DEFAULT_SITEMAP_XML_ROUTE, n as DEFAULT_SITEMAP_MD_ROUTE, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, u as resolveDocsSitemapConfig } from "./sitemap-Ccfh6GXO.mjs";
2
+ import { f as resolveDocsSitemapRequest, i as DEFAULT_SITEMAP_XML_ROUTE, n as DEFAULT_SITEMAP_MD_ROUTE, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, u as resolveDocsSitemapConfig } from "./sitemap-BIQIYMKe.mjs";
3
3
 
4
4
  //#region src/agent.ts
5
5
  const DEFAULT_DOCS_API_ROUTE = "/api/docs";
@@ -15,6 +15,7 @@ const DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE = "/.well-known/llms.txt";
15
15
  const DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE = "/.well-known/llms-full.txt";
16
16
  const DEFAULT_SKILL_MD_ROUTE = "/skill.md";
17
17
  const DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE = "/.well-known/skill.md";
18
+ const DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE = "/robots.txt";
18
19
  const DEFAULT_AGENT_FEEDBACK_ROUTE = "/api/docs/agent/feedback";
19
20
  const DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER = "Signature-Agent";
20
21
  function normalizeDocsPathSegment(value) {
@@ -115,7 +116,7 @@ function renderDocsMarkdownNotFound({ entry = "docs", requestedPath, sitemap })
115
116
  }
116
117
  if (sitemapConfig.xml.enabled) lines.push(`- XML sitemap: \`${sitemapConfig.xml.route}\``);
117
118
  } else lines.push(`- Sitemap discovery, if enabled: \`${DEFAULT_SITEMAP_MD_ROUTE}\`, \`${DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE}\`, or \`${DEFAULT_SITEMAP_XML_ROUTE}\``);
118
- lines.push("", "The agent discovery spec is the safest first step because it lists the active markdown, sitemap, search, MCP, and feedback routes for this deployment.");
119
+ lines.push("", "The agent discovery spec is the safest first step because it lists the active markdown, sitemap, robots, search, MCP, and feedback routes for this deployment.");
119
120
  return lines.join("\n");
120
121
  }
121
122
  function findDocsMarkdownPage(entry, pages, requestedPath) {
@@ -134,7 +135,7 @@ function renderDocsMarkdownDocument(page) {
134
135
  lines.push("", page.agentFallbackRawContent ?? page.rawContent ?? page.content);
135
136
  return lines.join("\n");
136
137
  }
137
- function renderDocsSkillDocument({ origin, entry = "docs", search, mcp, feedback, llms, sitemap, markdown }) {
138
+ function renderDocsSkillDocument({ origin, entry = "docs", search, mcp, feedback, llms, sitemap, robots, markdown }) {
138
139
  const normalizedEntry = normalizeDocsPathSegment(entry) || "docs";
139
140
  const siteTitle = compactSkillText(llms?.siteTitle ?? "Documentation");
140
141
  const siteDescription = llms?.siteDescription ? compactSkillText(llms.siteDescription) : void 0;
@@ -142,9 +143,10 @@ function renderDocsSkillDocument({ origin, entry = "docs", search, mcp, feedback
142
143
  const searchEnabled = isSearchEnabled(search);
143
144
  const feedbackEnabled = feedback?.enabled ?? false;
144
145
  const sitemapConfig = resolveDocsSitemapConfig(sitemap);
146
+ const robotsEnabled = isRobotsDiscoveryEnabled(robots);
145
147
  const feedbackRoute = feedback?.route ?? DEFAULT_AGENT_FEEDBACK_ROUTE;
146
148
  const feedbackSchemaRoute = feedback?.schemaRoute ?? `${feedbackRoute}/schema`;
147
- const description = truncateSkillDescription(`Use ${siteTitle} through markdown routes, llms.txt, agent discovery, search, and MCP when available.`);
149
+ const description = truncateSkillDescription(`Use ${siteTitle} through markdown routes, llms.txt, robots.txt, agent discovery, search, and MCP when available.`);
148
150
  const markdownAcceptHeader = markdown?.acceptHeader === false ? null : "text/markdown";
149
151
  const markdownSignatureAgentHeader = markdown?.signatureAgentHeader === false ? null : DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER;
150
152
  const lines = [
@@ -167,9 +169,11 @@ function renderDocsSkillDocument({ origin, entry = "docs", search, mcp, feedback
167
169
  if (sitemapConfig.xml.enabled) lines.push(`- Use ${sitemapConfig.xml.route} to check canonical page freshness.`);
168
170
  if (sitemapConfig.markdown.enabled) lines.push(`- Use ${sitemapConfig.markdown.route} for a semantic docs map.`);
169
171
  }
172
+ if (robotsEnabled) lines.push(`- Check ${DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE} for crawler and AI-agent access policy.`);
170
173
  if (mcp.enabled) lines.push(`- Use ${DEFAULT_MCP_WELL_KNOWN_ROUTE} or ${DEFAULT_MCP_PUBLIC_ROUTE} for MCP tools when your environment supports MCP.`);
171
174
  if (feedbackEnabled) lines.push(`- Read ${feedbackSchemaRoute} before posting agent feedback to ${feedbackRoute}.`);
172
175
  lines.push("", "## Routes", `- Skill document: ${DEFAULT_SKILL_MD_ROUTE}`, `- Skill well-known alias: ${DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE}`, `- Skill API format: ${DEFAULT_DOCS_API_ROUTE}?format=skill`, `- Agent discovery: ${DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE}`, `- Agent discovery fallback: ${DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE}`, `- Markdown root: /${normalizedEntry}.md`, `- Markdown pages: /${normalizedEntry}/{slug}.md`);
176
+ if (robotsEnabled) lines.push(`- Robots policy: ${DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE}`);
173
177
  if (llmsEnabled) lines.push(`- llms.txt: ${DEFAULT_LLMS_TXT_ROUTE}`, `- llms-full.txt: ${DEFAULT_LLMS_FULL_TXT_ROUTE}`, `- llms well-known aliases: ${DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE}, ${DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE}`);
174
178
  if (sitemapConfig.enabled) {
175
179
  if (sitemapConfig.xml.enabled) lines.push(`- Sitemap XML: ${sitemapConfig.xml.route}`);
@@ -226,7 +230,7 @@ function resolveDocsAgentMdxContent(content, audience) {
226
230
  }
227
231
  return output.join("\n").replace(/\n{3,}/g, "\n\n").trim();
228
232
  }
229
- function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, search, mcp, feedback, llms, sitemap, markdown }) {
233
+ function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, search, mcp, feedback, llms, sitemap, robots, markdown }) {
230
234
  const normalizedEntry = normalizeDocsPathSegment(entry) || "docs";
231
235
  const localesEnabled = i18n !== null;
232
236
  const searchEnabled = isSearchEnabled(search);
@@ -234,6 +238,7 @@ function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, sear
234
238
  const feedbackSchemaRoute = feedback?.schemaRoute ?? `${feedbackRoute}/schema`;
235
239
  const llmsEnabled = llms?.enabled ?? true;
236
240
  const sitemapConfig = resolveDocsSitemapConfig(sitemap, { baseUrl: llms?.baseUrl });
241
+ const robotsEnabled = isRobotsDiscoveryEnabled(robots);
237
242
  return {
238
243
  version: "1",
239
244
  name: "@farming-labs/docs",
@@ -260,6 +265,8 @@ function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, sear
260
265
  mcp: mcp.enabled,
261
266
  search: searchEnabled,
262
267
  sitemap: sitemapConfig.enabled,
268
+ robots: robotsEnabled,
269
+ structuredData: true,
263
270
  agentFeedback: feedback?.enabled ?? false,
264
271
  locales: localesEnabled
265
272
  },
@@ -313,6 +320,25 @@ function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, sear
313
320
  defaultWellKnownRoute: DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE
314
321
  }
315
322
  },
323
+ robots: {
324
+ enabled: robotsEnabled,
325
+ route: DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE,
326
+ defaultRoute: DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE
327
+ },
328
+ structuredData: {
329
+ enabled: true,
330
+ format: "application/ld+json",
331
+ schema: "https://schema.org/TechArticle",
332
+ fields: [
333
+ "headline",
334
+ "description",
335
+ "url",
336
+ "dateModified",
337
+ "breadcrumb"
338
+ ],
339
+ canonicalUrlField: "url",
340
+ breadcrumbType: "BreadcrumbList"
341
+ },
316
342
  search: {
317
343
  enabled: searchEnabled,
318
344
  endpoint: `${DEFAULT_DOCS_API_ROUTE}?query={query}`,
@@ -388,6 +414,11 @@ function isSearchEnabled(search) {
388
414
  if (search && typeof search === "object" && search.enabled === false) return false;
389
415
  return true;
390
416
  }
417
+ function isRobotsDiscoveryEnabled(robots) {
418
+ if (robots === false) return false;
419
+ if (robots && typeof robots === "object" && robots.enabled === false) return false;
420
+ return true;
421
+ }
391
422
  function compactSkillText(value) {
392
423
  return value.replace(/\s+/g, " ").trim();
393
424
  }
@@ -128,6 +128,7 @@ declare function renderDocsSitemapMarkdown(manifest: DocsSitemapManifest, option
128
128
  linkTarget?: "html" | "markdown" | "both";
129
129
  }): string;
130
130
  declare function readDocsSitemapManifestFromContentMap(contentMap?: Record<string, string> | null): DocsSitemapManifest | null;
131
+ declare function resolveDocsSitemapPageLastmod(manifest: DocsSitemapManifest | null | undefined, url: string): string | undefined;
131
132
  declare function createDocsSitemapResponse({
132
133
  request,
133
134
  sitemap,
@@ -193,4 +194,4 @@ declare function buildDocsAskAIContext(options: {
193
194
  }): Promise<DocsAskAIContext>;
194
195
  declare function createCustomSearchAdapter(adapter: DocsSearchAdapter | DocsSearchAdapterFactory): CustomDocsSearchConfig;
195
196
  //#endregion
196
- export { DOCS_AGENT_TRACE_EVENT_TYPES as A, resolveDocsObservabilityConfig as B, createDocsSitemapResponse as C, resolveDocsSitemapConfig as D, renderDocsSitemapXml as E, createDocsAgentTraceId as F, createDocsCloudAnalytics as H, emitDocsAgentTraceEvent as I, emitDocsAnalyticsEvent as L, ResolvedDocsAnalyticsConfig as M, ResolvedDocsObservabilityConfig as N, resolveDocsSitemapRequest as O, createDocsAgentTraceContext as P, emitDocsObservabilityEvent as R, buildDocsSitemapManifest as S, renderDocsSitemapMarkdown as T, DocsCloudAnalyticsOptions as V, DocsSitemapFormat as _, createMcpSearchAdapter as a, DocsSitemapPageInput as b, formatDocsAskAIPackageHints as c, resolveAskAISearchRequestConfig as d, resolveSearchRequestConfig as f, DEFAULT_SITEMAP_XML_ROUTE as g, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE as h, createCustomSearchAdapter as i, DocsAgentTraceContext as j, toDocsSitemapMarkdownUrl as k, inferDocsAskAIPackageHints as l, DEFAULT_SITEMAP_MD_ROUTE as m, buildDocsSearchDocuments as n, createSimpleSearchAdapter as o, DEFAULT_SITEMAP_MANIFEST_PATH as p, createAlgoliaSearchAdapter as r, createTypesenseSearchAdapter as s, buildDocsAskAIContext as t, performDocsSearch as u, DocsSitemapManifest as v, readDocsSitemapManifestFromContentMap as w, DocsSitemapResolvedConfig as x, DocsSitemapManifestPage as y, resolveDocsAnalyticsConfig as z };
197
+ export { toDocsSitemapMarkdownUrl as A, resolveDocsAnalyticsConfig as B, createDocsSitemapResponse as C, resolveDocsSitemapConfig as D, renderDocsSitemapXml as E, createDocsAgentTraceContext as F, DocsCloudAnalyticsOptions as H, createDocsAgentTraceId as I, emitDocsAgentTraceEvent as L, DocsAgentTraceContext as M, ResolvedDocsAnalyticsConfig as N, resolveDocsSitemapPageLastmod as O, ResolvedDocsObservabilityConfig as P, emitDocsAnalyticsEvent as R, buildDocsSitemapManifest as S, renderDocsSitemapMarkdown as T, createDocsCloudAnalytics as U, resolveDocsObservabilityConfig as V, DocsSitemapFormat as _, createMcpSearchAdapter as a, DocsSitemapPageInput as b, formatDocsAskAIPackageHints as c, resolveAskAISearchRequestConfig as d, resolveSearchRequestConfig as f, DEFAULT_SITEMAP_XML_ROUTE as g, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE as h, createCustomSearchAdapter as i, DOCS_AGENT_TRACE_EVENT_TYPES as j, resolveDocsSitemapRequest as k, inferDocsAskAIPackageHints as l, DEFAULT_SITEMAP_MD_ROUTE as m, buildDocsSearchDocuments as n, createSimpleSearchAdapter as o, DEFAULT_SITEMAP_MANIFEST_PATH as p, createAlgoliaSearchAdapter as r, createTypesenseSearchAdapter as s, buildDocsAskAIContext as t, performDocsSearch as u, DocsSitemapManifest as v, readDocsSitemapManifestFromContentMap as w, DocsSitemapResolvedConfig as x, DocsSitemapManifestPage as y, emitDocsObservabilityEvent as z };
@@ -1,5 +1,5 @@
1
1
  import { n as buildDocsSearchDocuments, r as createAlgoliaSearchAdapter, s as createTypesenseSearchAdapter } from "./search-B5ze-heM.mjs";
2
- import "./sitemap-server-C8Ppk29g.mjs";
2
+ import "./sitemap-server-DwEPfk13.mjs";
3
3
  import { createFilesystemDocsMcpSource } from "./mcp.mjs";
4
4
  import "./server.mjs";
5
5
  import { a as loadProjectEnv, d as readTopLevelStringProperty, f as resolveDocsConfigPath, p as resolveDocsContentDir } from "./config-BR6CcCfr.mjs";
package/dist/server.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { A as DocsConfig, B as DocsObservabilityEventInput, D as DocsAskAIFeedbackMessage, E as DocsAskAIFeedbackData, G as DocsSearchAdapterContext, J as DocsSearchConfig, K as DocsSearchAdapterFactory, O as DocsAskAIFeedbackValue, Q as DocsSearchResult, R as DocsObservabilityConfig, T as DocsAskAIFeedbackConfig, W as DocsSearchAdapter, Y as DocsSearchDocument, Z as DocsSearchQuery, _ as DocsAnalyticsConfig, a as ApiReferenceRenderer, ct as McpDocsSearchConfig, dt as OpenDocsProvider, et as DocsSearchSourcePage, g as DocsAgentTraceStatus, h as DocsAgentTraceEventType, k as DocsAskAIMcpConfig, m as DocsAgentTraceEventInput, tt as DocsSitemapConfig, v as DocsAnalyticsEvent, y as DocsAnalyticsEventInput, z as DocsObservabilityEvent } from "./types-Ch0kE7uS.mjs";
2
- import { A as DOCS_AGENT_TRACE_EVENT_TYPES, B as resolveDocsObservabilityConfig, C as createDocsSitemapResponse, D as resolveDocsSitemapConfig, E as renderDocsSitemapXml, F as createDocsAgentTraceId, H as createDocsCloudAnalytics, I as emitDocsAgentTraceEvent, L as emitDocsAnalyticsEvent, M as ResolvedDocsAnalyticsConfig, N as ResolvedDocsObservabilityConfig, O as resolveDocsSitemapRequest, P as createDocsAgentTraceContext, R as emitDocsObservabilityEvent, S as buildDocsSitemapManifest, T as renderDocsSitemapMarkdown, V as DocsCloudAnalyticsOptions, _ as DocsSitemapFormat, a as createMcpSearchAdapter, b as DocsSitemapPageInput, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, f as resolveSearchRequestConfig, g as DEFAULT_SITEMAP_XML_ROUTE, h as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, i as createCustomSearchAdapter, j as DocsAgentTraceContext, k as toDocsSitemapMarkdownUrl, l as inferDocsAskAIPackageHints, m as DEFAULT_SITEMAP_MD_ROUTE, n as buildDocsSearchDocuments, o as createSimpleSearchAdapter, p as DEFAULT_SITEMAP_MANIFEST_PATH, r as createAlgoliaSearchAdapter, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, u as performDocsSearch, v as DocsSitemapManifest, w as readDocsSitemapManifestFromContentMap, x as DocsSitemapResolvedConfig, y as DocsSitemapManifestPage, z as resolveDocsAnalyticsConfig } from "./search-BH07-Otd.mjs";
2
+ import { A as toDocsSitemapMarkdownUrl, B as resolveDocsAnalyticsConfig, C as createDocsSitemapResponse, D as resolveDocsSitemapConfig, E as renderDocsSitemapXml, F as createDocsAgentTraceContext, H as DocsCloudAnalyticsOptions, I as createDocsAgentTraceId, L as emitDocsAgentTraceEvent, M as DocsAgentTraceContext, N as ResolvedDocsAnalyticsConfig, O as resolveDocsSitemapPageLastmod, P as ResolvedDocsObservabilityConfig, R as emitDocsAnalyticsEvent, S as buildDocsSitemapManifest, T as renderDocsSitemapMarkdown, U as createDocsCloudAnalytics, V as resolveDocsObservabilityConfig, _ as DocsSitemapFormat, a as createMcpSearchAdapter, b as DocsSitemapPageInput, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, f as resolveSearchRequestConfig, g as DEFAULT_SITEMAP_XML_ROUTE, h as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, i as createCustomSearchAdapter, j as DOCS_AGENT_TRACE_EVENT_TYPES, k as resolveDocsSitemapRequest, l as inferDocsAskAIPackageHints, m as DEFAULT_SITEMAP_MD_ROUTE, n as buildDocsSearchDocuments, o as createSimpleSearchAdapter, p as DEFAULT_SITEMAP_MANIFEST_PATH, r as createAlgoliaSearchAdapter, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, u as performDocsSearch, v as DocsSitemapManifest, w as readDocsSitemapManifestFromContentMap, x as DocsSitemapResolvedConfig, y as DocsSitemapManifestPage, z as emitDocsObservabilityEvent } from "./search-C3TAufnf.mjs";
3
3
  import { DocsMcpHttpHandlers, DocsMcpNavigationNode, DocsMcpNavigationTree, DocsMcpPage, DocsMcpResolvedConfig, DocsMcpSource, createDocsMcpHttpHandler, createDocsMcpServer, createFilesystemDocsMcpSource, normalizeDocsMcpRoute, resolveDocsMcpConfig, runDocsMcpStdio } from "./mcp.mjs";
4
4
 
5
5
  //#region src/api-reference.d.ts
@@ -66,4 +66,4 @@ declare function sanitizePromptText(text: string): string;
66
66
  //#region src/sitemap-server.d.ts
67
67
  declare function readDocsSitemapManifest(rootDir: string, sitemap?: boolean | DocsSitemapConfig): DocsSitemapManifest | null;
68
68
  //#endregion
69
- export { type ApiReferenceFramework, type ApiReferenceRenderer, type ApiReferenceRoute, DEFAULT_PROMPT_PROVIDER_TEMPLATES, DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, DOCS_AGENT_TRACE_EVENT_TYPES, type DocsAgentTraceContext, type DocsAgentTraceEventInput, type DocsAgentTraceEventType, type DocsAgentTraceStatus, type DocsAnalyticsConfig, type DocsAnalyticsEvent, type DocsAnalyticsEventInput, type DocsAskAIFeedbackConfig, type DocsAskAIFeedbackData, type DocsAskAIFeedbackMessage, type DocsAskAIFeedbackValue, type DocsAskAIMcpConfig, type DocsCloudAnalyticsOptions, type DocsMcpHttpHandlers, type DocsMcpNavigationNode, type DocsMcpNavigationTree, type DocsMcpPage, type DocsMcpResolvedConfig, type DocsMcpSource, type DocsObservabilityConfig, type DocsObservabilityEvent, type DocsObservabilityEventInput, type DocsSearchAdapter, type DocsSearchAdapterContext, type DocsSearchAdapterFactory, type DocsSearchConfig, type DocsSearchDocument, type DocsSearchQuery, type DocsSearchResult, type DocsSearchSourcePage, type DocsSitemapFormat, type DocsSitemapManifest, type DocsSitemapManifestPage, type DocsSitemapPageInput, type DocsSitemapResolvedConfig, type McpDocsSearchConfig, type PromptAction, type PromptProviderChoice, type ResolvedApiReferenceConfig, type ResolvedDocsAnalyticsConfig, type ResolvedDocsObservabilityConfig, type SerializedOpenDocsProvider, buildApiReferenceHtmlDocument, buildApiReferenceHtmlDocumentAsync, buildApiReferenceOpenApiDocument, buildApiReferenceOpenApiDocumentAsync, buildApiReferencePageTitle, buildApiReferenceScalarCss, buildDocsAskAIContext, buildDocsSearchDocuments, buildDocsSitemapManifest, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsCloudAnalytics, createDocsMcpHttpHandler, createDocsMcpServer, createDocsSitemapResponse, createFilesystemDocsMcpSource, createMcpSearchAdapter, createSimpleSearchAdapter, createTypesenseSearchAdapter, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsObservabilityEvent, formatDocsAskAIPackageHints, inferDocsAskAIPackageHints, normalizeDocsMcpRoute, normalizePromptProviderName, parsePromptStringArray, performDocsSearch, readDocsSitemapManifest, readDocsSitemapManifestFromContentMap, renderDocsSitemapMarkdown, renderDocsSitemapXml, resolveApiReferenceConfig, resolveApiReferenceRenderer, resolveAskAISearchRequestConfig, resolveDocsAnalyticsConfig, resolveDocsMcpConfig, resolveDocsObservabilityConfig, resolveDocsSitemapConfig, resolveDocsSitemapRequest, resolvePromptProviderChoices, resolveSearchRequestConfig, runDocsMcpStdio, sanitizePromptText, serializeDocsIcon, serializeDocsIconRegistry, serializeOpenDocsProviders, toDocsSitemapMarkdownUrl };
69
+ export { type ApiReferenceFramework, type ApiReferenceRenderer, type ApiReferenceRoute, DEFAULT_PROMPT_PROVIDER_TEMPLATES, DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, DOCS_AGENT_TRACE_EVENT_TYPES, type DocsAgentTraceContext, type DocsAgentTraceEventInput, type DocsAgentTraceEventType, type DocsAgentTraceStatus, type DocsAnalyticsConfig, type DocsAnalyticsEvent, type DocsAnalyticsEventInput, type DocsAskAIFeedbackConfig, type DocsAskAIFeedbackData, type DocsAskAIFeedbackMessage, type DocsAskAIFeedbackValue, type DocsAskAIMcpConfig, type DocsCloudAnalyticsOptions, type DocsMcpHttpHandlers, type DocsMcpNavigationNode, type DocsMcpNavigationTree, type DocsMcpPage, type DocsMcpResolvedConfig, type DocsMcpSource, type DocsObservabilityConfig, type DocsObservabilityEvent, type DocsObservabilityEventInput, type DocsSearchAdapter, type DocsSearchAdapterContext, type DocsSearchAdapterFactory, type DocsSearchConfig, type DocsSearchDocument, type DocsSearchQuery, type DocsSearchResult, type DocsSearchSourcePage, type DocsSitemapFormat, type DocsSitemapManifest, type DocsSitemapManifestPage, type DocsSitemapPageInput, type DocsSitemapResolvedConfig, type McpDocsSearchConfig, type PromptAction, type PromptProviderChoice, type ResolvedApiReferenceConfig, type ResolvedDocsAnalyticsConfig, type ResolvedDocsObservabilityConfig, type SerializedOpenDocsProvider, buildApiReferenceHtmlDocument, buildApiReferenceHtmlDocumentAsync, buildApiReferenceOpenApiDocument, buildApiReferenceOpenApiDocumentAsync, buildApiReferencePageTitle, buildApiReferenceScalarCss, buildDocsAskAIContext, buildDocsSearchDocuments, buildDocsSitemapManifest, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsCloudAnalytics, createDocsMcpHttpHandler, createDocsMcpServer, createDocsSitemapResponse, createFilesystemDocsMcpSource, createMcpSearchAdapter, createSimpleSearchAdapter, createTypesenseSearchAdapter, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsObservabilityEvent, formatDocsAskAIPackageHints, inferDocsAskAIPackageHints, normalizeDocsMcpRoute, normalizePromptProviderName, parsePromptStringArray, performDocsSearch, readDocsSitemapManifest, readDocsSitemapManifestFromContentMap, renderDocsSitemapMarkdown, renderDocsSitemapXml, resolveApiReferenceConfig, resolveApiReferenceRenderer, resolveAskAISearchRequestConfig, resolveDocsAnalyticsConfig, resolveDocsMcpConfig, resolveDocsObservabilityConfig, resolveDocsSitemapConfig, resolveDocsSitemapPageLastmod, resolveDocsSitemapRequest, resolvePromptProviderChoices, resolveSearchRequestConfig, runDocsMcpStdio, sanitizePromptText, serializeDocsIcon, serializeDocsIconRegistry, serializeOpenDocsProviders, toDocsSitemapMarkdownUrl };
package/dist/server.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { A as resolveDocsAnalyticsConfig, D as emitDocsAgentTraceEvent, E as createDocsAgentTraceId, M as createDocsCloudAnalytics, O as emitDocsAnalyticsEvent, T as createDocsAgentTraceContext, a as createMcpSearchAdapter, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, f as resolveSearchRequestConfig, i as createCustomSearchAdapter, j as resolveDocsObservabilityConfig, k as emitDocsObservabilityEvent, l as inferDocsAskAIPackageHints, n as buildDocsSearchDocuments, o as createSimpleSearchAdapter, r as createAlgoliaSearchAdapter, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, u as performDocsSearch, w as DOCS_AGENT_TRACE_EVENT_TYPES } from "./search-B5ze-heM.mjs";
2
- import { a as buildDocsSitemapManifest, c as renderDocsSitemapMarkdown, d as resolveDocsSitemapRequest, f as toDocsSitemapMarkdownUrl, i as DEFAULT_SITEMAP_XML_ROUTE, l as renderDocsSitemapXml, n as DEFAULT_SITEMAP_MD_ROUTE, o as createDocsSitemapResponse, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, s as readDocsSitemapManifestFromContentMap, t as DEFAULT_SITEMAP_MANIFEST_PATH, u as resolveDocsSitemapConfig } from "./sitemap-Ccfh6GXO.mjs";
3
- import { _ as resolveApiReferenceRenderer, a as resolvePromptProviderChoices, c as serializeDocsIconRegistry, d as buildApiReferenceHtmlDocumentAsync, f as buildApiReferenceOpenApiDocument, g as resolveApiReferenceConfig, h as buildApiReferenceScalarCss, i as parsePromptStringArray, l as serializeOpenDocsProviders, m as buildApiReferencePageTitle, n as DEFAULT_PROMPT_PROVIDER_TEMPLATES, o as sanitizePromptText, p as buildApiReferenceOpenApiDocumentAsync, r as normalizePromptProviderName, s as serializeDocsIcon, t as readDocsSitemapManifest, u as buildApiReferenceHtmlDocument } from "./sitemap-server-C8Ppk29g.mjs";
2
+ import { a as buildDocsSitemapManifest, c as renderDocsSitemapMarkdown, d as resolveDocsSitemapPageLastmod, f as resolveDocsSitemapRequest, i as DEFAULT_SITEMAP_XML_ROUTE, l as renderDocsSitemapXml, n as DEFAULT_SITEMAP_MD_ROUTE, o as createDocsSitemapResponse, p as toDocsSitemapMarkdownUrl, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, s as readDocsSitemapManifestFromContentMap, t as DEFAULT_SITEMAP_MANIFEST_PATH, u as resolveDocsSitemapConfig } from "./sitemap-BIQIYMKe.mjs";
3
+ import { _ as resolveApiReferenceRenderer, a as resolvePromptProviderChoices, c as serializeDocsIconRegistry, d as buildApiReferenceHtmlDocumentAsync, f as buildApiReferenceOpenApiDocument, g as resolveApiReferenceConfig, h as buildApiReferenceScalarCss, i as parsePromptStringArray, l as serializeOpenDocsProviders, m as buildApiReferencePageTitle, n as DEFAULT_PROMPT_PROVIDER_TEMPLATES, o as sanitizePromptText, p as buildApiReferenceOpenApiDocumentAsync, r as normalizePromptProviderName, s as serializeDocsIcon, t as readDocsSitemapManifest, u as buildApiReferenceHtmlDocument } from "./sitemap-server-DwEPfk13.mjs";
4
4
  import { createDocsMcpHttpHandler, createDocsMcpServer, createFilesystemDocsMcpSource, normalizeDocsMcpRoute, resolveDocsMcpConfig, runDocsMcpStdio } from "./mcp.mjs";
5
5
 
6
- export { DEFAULT_PROMPT_PROVIDER_TEMPLATES, DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, DOCS_AGENT_TRACE_EVENT_TYPES, buildApiReferenceHtmlDocument, buildApiReferenceHtmlDocumentAsync, buildApiReferenceOpenApiDocument, buildApiReferenceOpenApiDocumentAsync, buildApiReferencePageTitle, buildApiReferenceScalarCss, buildDocsAskAIContext, buildDocsSearchDocuments, buildDocsSitemapManifest, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsCloudAnalytics, createDocsMcpHttpHandler, createDocsMcpServer, createDocsSitemapResponse, createFilesystemDocsMcpSource, createMcpSearchAdapter, createSimpleSearchAdapter, createTypesenseSearchAdapter, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsObservabilityEvent, formatDocsAskAIPackageHints, inferDocsAskAIPackageHints, normalizeDocsMcpRoute, normalizePromptProviderName, parsePromptStringArray, performDocsSearch, readDocsSitemapManifest, readDocsSitemapManifestFromContentMap, renderDocsSitemapMarkdown, renderDocsSitemapXml, resolveApiReferenceConfig, resolveApiReferenceRenderer, resolveAskAISearchRequestConfig, resolveDocsAnalyticsConfig, resolveDocsMcpConfig, resolveDocsObservabilityConfig, resolveDocsSitemapConfig, resolveDocsSitemapRequest, resolvePromptProviderChoices, resolveSearchRequestConfig, runDocsMcpStdio, sanitizePromptText, serializeDocsIcon, serializeDocsIconRegistry, serializeOpenDocsProviders, toDocsSitemapMarkdownUrl };
6
+ export { DEFAULT_PROMPT_PROVIDER_TEMPLATES, DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, DOCS_AGENT_TRACE_EVENT_TYPES, buildApiReferenceHtmlDocument, buildApiReferenceHtmlDocumentAsync, buildApiReferenceOpenApiDocument, buildApiReferenceOpenApiDocumentAsync, buildApiReferencePageTitle, buildApiReferenceScalarCss, buildDocsAskAIContext, buildDocsSearchDocuments, buildDocsSitemapManifest, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsCloudAnalytics, createDocsMcpHttpHandler, createDocsMcpServer, createDocsSitemapResponse, createFilesystemDocsMcpSource, createMcpSearchAdapter, createSimpleSearchAdapter, createTypesenseSearchAdapter, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsObservabilityEvent, formatDocsAskAIPackageHints, inferDocsAskAIPackageHints, normalizeDocsMcpRoute, normalizePromptProviderName, parsePromptStringArray, performDocsSearch, readDocsSitemapManifest, readDocsSitemapManifestFromContentMap, renderDocsSitemapMarkdown, renderDocsSitemapXml, resolveApiReferenceConfig, resolveApiReferenceRenderer, resolveAskAISearchRequestConfig, resolveDocsAnalyticsConfig, resolveDocsMcpConfig, resolveDocsObservabilityConfig, resolveDocsSitemapConfig, resolveDocsSitemapPageLastmod, resolveDocsSitemapRequest, resolvePromptProviderChoices, resolveSearchRequestConfig, runDocsMcpStdio, sanitizePromptText, serializeDocsIcon, serializeDocsIconRegistry, serializeOpenDocsProviders, toDocsSitemapMarkdownUrl };
@@ -202,6 +202,11 @@ function readDocsSitemapManifestFromContentMap(contentMap) {
202
202
  return null;
203
203
  }
204
204
  }
205
+ function resolveDocsSitemapPageLastmod(manifest, url) {
206
+ if (!manifest) return void 0;
207
+ const normalizedUrl = normalizeUrlPath(url);
208
+ return normalizeDateOnly(manifest.pages.find((entry) => normalizeUrlPath(entry.url) === normalizedUrl)?.lastmod);
209
+ }
205
210
  function createDocsSitemapResponse({ request, sitemap, entry = "docs", siteTitle, baseUrl, pages, manifest }) {
206
211
  const url = new URL(request.url);
207
212
  const format = resolveDocsSitemapRequest(url, sitemap);
@@ -241,4 +246,4 @@ function createDocsSitemapResponse({ request, sitemap, entry = "docs", siteTitle
241
246
  }
242
247
 
243
248
  //#endregion
244
- export { buildDocsSitemapManifest as a, renderDocsSitemapMarkdown as c, resolveDocsSitemapRequest as d, toDocsSitemapMarkdownUrl as f, DEFAULT_SITEMAP_XML_ROUTE as i, renderDocsSitemapXml as l, DEFAULT_SITEMAP_MD_ROUTE as n, createDocsSitemapResponse as o, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE as r, readDocsSitemapManifestFromContentMap as s, DEFAULT_SITEMAP_MANIFEST_PATH as t, resolveDocsSitemapConfig as u };
249
+ export { buildDocsSitemapManifest as a, renderDocsSitemapMarkdown as c, resolveDocsSitemapPageLastmod as d, resolveDocsSitemapRequest as f, DEFAULT_SITEMAP_XML_ROUTE as i, renderDocsSitemapXml as l, DEFAULT_SITEMAP_MD_ROUTE as n, createDocsSitemapResponse as o, toDocsSitemapMarkdownUrl as p, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE as r, readDocsSitemapManifestFromContentMap as s, DEFAULT_SITEMAP_MANIFEST_PATH as t, resolveDocsSitemapConfig as u };
@@ -1,6 +1,6 @@
1
1
  import "./search-B5ze-heM.mjs";
2
- import { a as buildDocsSitemapManifest, c as renderDocsSitemapMarkdown, l as renderDocsSitemapXml, u as resolveDocsSitemapConfig } from "./sitemap-Ccfh6GXO.mjs";
3
- import "./sitemap-server-C8Ppk29g.mjs";
2
+ import { a as buildDocsSitemapManifest, c as renderDocsSitemapMarkdown, l as renderDocsSitemapXml, u as resolveDocsSitemapConfig } from "./sitemap-BIQIYMKe.mjs";
3
+ import "./sitemap-server-DwEPfk13.mjs";
4
4
  import { createFilesystemDocsMcpSource } from "./mcp.mjs";
5
5
  import "./server.mjs";
6
6
  import { c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, p as resolveDocsContentDir, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-BR6CcCfr.mjs";
@@ -1,4 +1,4 @@
1
- import { u as resolveDocsSitemapConfig } from "./sitemap-Ccfh6GXO.mjs";
1
+ import { u as resolveDocsSitemapConfig } from "./sitemap-BIQIYMKe.mjs";
2
2
  import { createRequire } from "node:module";
3
3
  import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
4
4
  import path, { basename, join, relative } from "node:path";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/docs",
3
- "version": "0.1.83",
3
+ "version": "0.1.85",
4
4
  "description": "Modern, flexible MDX-based docs framework — core types, config, and CLI",
5
5
  "keywords": [
6
6
  "docs",