@farming-labs/docs 0.2.73 → 0.2.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/dist/{agent-o9OTadrf.mjs → agent-BJ0KXN-A.mjs} +7 -0
  2. package/dist/{agent-ClRpctMG.mjs → agent-D0LEY2Vy.mjs} +2 -2
  3. package/dist/{agent-evals-BFHGypqh.mjs → agent-evals-LIScgQVm.mjs} +56 -30
  4. package/dist/{agent-export-B9bah0AV.mjs → agent-export-B92pNe6g.mjs} +5 -5
  5. package/dist/agent-skills-bundle.d.mts +1 -1
  6. package/dist/{agent-skills-server-DCbAx5WU.d.mts → agent-skills-server-BqvIGQb1.d.mts} +2 -2
  7. package/dist/agent-skills-vite.d.mts +3 -3
  8. package/dist/{agents-CR-Uasbc.mjs → agents-C228QGbp.mjs} +4 -4
  9. package/dist/cli/index.mjs +19 -15
  10. package/dist/client/react.d.mts +1 -1
  11. package/dist/{cloud-ask-ai-yR9vZmSG.d.mts → cloud-ask-ai-6X9pVjIY.d.mts} +1 -1
  12. package/dist/docs-cloud-server.d.mts +2 -2
  13. package/dist/{doctor-BeyN3Ljh.mjs → doctor-CgrUZ3tY.mjs} +8 -8
  14. package/dist/{golden-evaluations-CloP0pAe.mjs → golden-evaluations-DTEPZeb0.mjs} +2 -2
  15. package/dist/index.d.mts +4 -4
  16. package/dist/index.mjs +5 -5
  17. package/dist/{mcp-BLLXvEXB.mjs → mcp-YD37HlPY.mjs} +7 -5
  18. package/dist/mcp.d.mts +13 -2
  19. package/dist/mcp.mjs +114 -54
  20. package/dist/{prompt-references-Cz35rlOa.mjs → prompt-references-BIS1eXt4.mjs} +2 -2
  21. package/dist/{search-D1n8Sf25.d.mts → retrieval-digest-9Kp3uSaZ.d.mts} +48 -5
  22. package/dist/{review-DaJLdPLh.mjs → review-Dbzkdl6K.mjs} +4 -4
  23. package/dist/{robots-DI-9MZz1.mjs → robots-DUO0r4UI.mjs} +2 -2
  24. package/dist/{robots-BcuxnZqZ.mjs → robots-RbgmSvPH.mjs} +1 -1
  25. package/dist/{search-RfPcG1if.mjs → search-DIyIl-tE.mjs} +1240 -136
  26. package/dist/{search-DeOJiMAy.mjs → search-hcqaEZVN.mjs} +62 -24
  27. package/dist/server.d.mts +5 -5
  28. package/dist/server.mjs +5 -5
  29. package/dist/{sitemap-BGGbX_KE.mjs → sitemap-jhkS_jYx.mjs} +4 -4
  30. package/dist/{sitemap-server-VefDnzEB.mjs → sitemap-server-BfyBM7_V.mjs} +1 -1
  31. package/dist/{standards-discovery-83lp1lew.d.mts → standards-discovery-CdrOE-05.d.mts} +1 -1
  32. package/dist/{types-_HCPD4wc.d.mts → types-clg5J1R4.d.mts} +60 -1
  33. package/package.json +1 -1
package/dist/mcp.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { a as emitDocsAnalyticsEvent, i as emitDocsAgentTraceEvent, n as createDocsAgentTraceContext, r as createDocsAgentTraceId } from "./analytics-Bx44lg6d.mjs";
2
- import { Kt as normalizeDocsRelated, an as isDocsMcpResourcePath, cn as resolveDocsMcpProtectedResourceMetadataLocation, jt as resolveDocsAudienceMdxContent, ln as resolveDocsMcpResourceLocation, nn as isDocsMcpOAuthScopeToken, on as normalizeDocsMcpAuthorizationServerUrls, qt as renderDocsRelatedMarkdownLines, rn as isDocsMcpProtectedResourceMetadataPath, sn as normalizeDocsMcpEndpointPath } from "./agent-o9OTadrf.mjs";
2
+ import { Kt as normalizeDocsRelated, an as isDocsMcpResourcePath, cn as resolveDocsMcpProtectedResourceMetadataLocation, jt as resolveDocsAudienceMdxContent, ln as resolveDocsMcpResourceLocation, nn as isDocsMcpOAuthScopeToken, on as normalizeDocsMcpAuthorizationServerUrls, qt as renderDocsRelatedMarkdownLines, rn as isDocsMcpProtectedResourceMetadataPath, sn as normalizeDocsMcpEndpointPath } from "./agent-BJ0KXN-A.mjs";
3
3
  import { S as upsertPageAgentContractMarkdown, _ as hasStructuredPageAgentContract, o as findDocsMarkdownSection, s as parseDocsMarkdownSections, v as normalizePageAgentFrontmatter } from "./markdown-sections-7OoA7ylx.mjs";
4
4
  import "./standards-discovery-BwL5ffGx.mjs";
5
- import { A as stripGeneratedAgentProvenance, F as emitDocsTelemetryAgentSurfaceEvent, L as emitDocsTelemetryMcpToolEvent, M as resolvePageSidebarFolderIndexBehavior, R as emitDocsTelemetryProjectEvent, S as normalizeAgentScopeValues, b as normalizeAgentFramework, d as performDocsSearch, f as performDocsSearchWithMetadata, u as normalizeDocsSearchFilters, v as agentVersionConstraintMatches, x as normalizeAgentLocale, y as agentVersionConstraintsOverlap } from "./search-RfPcG1if.mjs";
5
+ import { C as agentVersionConstraintsOverlap, E as normalizeAgentScopeValues, I as stripGeneratedAgentProvenance, R as resolvePageSidebarFolderIndexBehavior, S as agentVersionConstraintMatches, T as normalizeAgentLocale, U as emitDocsTelemetryMcpToolEvent, V as emitDocsTelemetryAgentSurfaceEvent, W as emitDocsTelemetryProjectEvent, f as normalizeDocsSearchFilters, k as isDocsRetrievalCanonicalUrl, m as performDocsSearchWithMetadata, p as performDocsSearch, w as normalizeAgentFramework } from "./search-DIyIl-tE.mjs";
6
6
  import matter from "gray-matter";
7
7
  import fs from "node:fs";
8
8
  import path from "node:path";
@@ -1254,18 +1254,27 @@ const DOCS_CONFIG_SCHEMA_OPTIONS_TEMPLATE = [
1254
1254
  default: true,
1255
1255
  description: "Built-in simple search, Typesense, Algolia, MCP, or a custom adapter.",
1256
1256
  docs: "/docs/customization/search",
1257
- children: [{
1258
- path: "search.provider",
1259
- name: "provider",
1260
- type: "\"simple\" | \"typesense\" | \"algolia\" | \"mcp\" | \"custom\"",
1261
- default: "simple",
1262
- description: "Search backend used by the docs UI and MCP search tool."
1263
- }, {
1264
- path: "search.maxResults",
1265
- name: "maxResults",
1266
- type: "number",
1267
- description: "Maximum result count returned by search requests."
1268
- }]
1257
+ children: [
1258
+ {
1259
+ path: "search.provider",
1260
+ name: "provider",
1261
+ type: "\"simple\" | \"typesense\" | \"algolia\" | \"mcp\" | \"custom\"",
1262
+ default: "simple",
1263
+ description: "Search backend used by the docs UI and MCP search tool."
1264
+ },
1265
+ {
1266
+ path: "search.maxResults",
1267
+ name: "maxResults",
1268
+ type: "number",
1269
+ description: "Maximum result count returned by search requests."
1270
+ },
1271
+ {
1272
+ path: "search.syncNamespace",
1273
+ name: "syncNamespace",
1274
+ type: "string",
1275
+ description: "Stable ownership namespace used to isolate and safely prune this corpus in a shared hosted index."
1276
+ }
1277
+ ]
1269
1278
  },
1270
1279
  {
1271
1280
  path: "cloud",
@@ -1691,7 +1700,7 @@ const searchFilterValueSchema = z.union([z.string().trim().min(1).max(128), z.ar
1691
1700
  const searchDocsInputSchema = z.object({
1692
1701
  query: z.string().trim().min(1),
1693
1702
  limit: z.number().int().min(1).max(25).optional(),
1694
- locale: z.string().min(1).optional(),
1703
+ locale: z.string().trim().min(1).max(128).optional(),
1695
1704
  audience: z.enum(["human", "agent"]).optional(),
1696
1705
  framework: searchFilterValueSchema.optional(),
1697
1706
  version: searchFilterValueSchema.optional(),
@@ -1700,7 +1709,7 @@ const searchDocsInputSchema = z.object({
1700
1709
  });
1701
1710
  const readPageInputSchema = z.object({
1702
1711
  path: z.string().min(1),
1703
- locale: z.string().min(1).optional(),
1712
+ locale: z.string().trim().min(1).max(128).optional(),
1704
1713
  section: z.string().trim().min(1).optional(),
1705
1714
  maxChars: z.number().int().min(256).max(1e6).optional()
1706
1715
  });
@@ -1709,7 +1718,7 @@ const listTasksInputSchema = z.object({
1709
1718
  framework: z.string().trim().min(1).optional(),
1710
1719
  version: z.string().trim().min(1).optional(),
1711
1720
  package: z.string().trim().min(1).optional(),
1712
- locale: z.string().min(1).optional()
1721
+ locale: z.string().trim().min(1).max(128).optional()
1713
1722
  });
1714
1723
  const readTaskInputSchema = readPageInputSchema;
1715
1724
  const pageAgentAppliesToOutputSchema = z.object({
@@ -1768,12 +1777,12 @@ const readTaskOutputSchema = z.object({
1768
1777
  }),
1769
1778
  contract: pageAgentContractOutputSchema
1770
1779
  });
1771
- const listPagesInputSchema = z.object({ locale: z.string().min(1).optional() });
1780
+ const listPagesInputSchema = z.object({ locale: z.string().trim().min(1).max(128).optional() });
1772
1781
  const listDocsInputSchema = z.object({
1773
1782
  section: z.string().trim().min(1).optional(),
1774
- locale: z.string().min(1).optional()
1783
+ locale: z.string().trim().min(1).max(128).optional()
1775
1784
  });
1776
- const getNavigationInputSchema = z.object({ locale: z.string().min(1).optional() });
1785
+ const getNavigationInputSchema = z.object({ locale: z.string().trim().min(1).max(128).optional() });
1777
1786
  const getConfigSchemaInputSchema = z.object({
1778
1787
  option: z.string().trim().min(1).optional(),
1779
1788
  query: z.string().trim().min(1).optional()
@@ -1786,7 +1795,7 @@ const getCodeExamplesInputSchema = z.object({
1786
1795
  language: z.string().trim().min(1).optional(),
1787
1796
  runnable: z.boolean().optional(),
1788
1797
  limit: z.number().int().min(1).max(50).optional(),
1789
- locale: z.string().min(1).optional()
1798
+ locale: z.string().trim().min(1).max(128).optional()
1790
1799
  });
1791
1800
  const getContextInputSchema = z.object({
1792
1801
  query: z.string().trim().min(1),
@@ -1794,7 +1803,7 @@ const getContextInputSchema = z.object({
1794
1803
  version: z.string().trim().min(1).optional(),
1795
1804
  package: searchFilterValueSchema.optional(),
1796
1805
  tags: searchFilterValueSchema.optional(),
1797
- locale: z.string().trim().min(1).optional(),
1806
+ locale: z.string().trim().min(1).max(128).optional(),
1798
1807
  tokenBudget: z.number().int().min(MIN_MCP_CONTEXT_TOKEN_BUDGET).max(MAX_MCP_CONTEXT_TOKEN_BUDGET).default(DEFAULT_MCP_CONTEXT_TOKEN_BUDGET)
1799
1808
  });
1800
1809
  const relatedLinkOutputSchema = z.object({ href: z.string() });
@@ -1854,6 +1863,37 @@ const navigationOutputSchema = z.object({
1854
1863
  }),
1855
1864
  markdown: z.string()
1856
1865
  });
1866
+ const retrievalSourceValueOutputSchema = z.string().max(128);
1867
+ const retrievalSourceValuesOutputSchema = z.array(retrievalSourceValueOutputSchema).max(16);
1868
+ const retrievalSourceScopeOutputSchema = z.object({
1869
+ audience: z.enum(["human", "agent"]),
1870
+ locale: retrievalSourceValuesOutputSchema.optional(),
1871
+ framework: retrievalSourceValuesOutputSchema.optional(),
1872
+ version: retrievalSourceValuesOutputSchema.optional(),
1873
+ versionGroups: z.array(retrievalSourceValuesOutputSchema).max(16).optional(),
1874
+ package: retrievalSourceValuesOutputSchema.optional(),
1875
+ tags: retrievalSourceValuesOutputSchema.optional(),
1876
+ truncated: z.array(z.enum([
1877
+ "framework",
1878
+ "version",
1879
+ "package",
1880
+ "tags"
1881
+ ])).max(4).optional(),
1882
+ conflicts: z.array(z.enum([
1883
+ "framework",
1884
+ "version",
1885
+ "package",
1886
+ "tags"
1887
+ ])).max(4).optional()
1888
+ });
1889
+ const retrievalSourceDigestOutputSchema = z.string().regex(/^sha256:[a-f\d]{64}$/iu);
1890
+ const retrievalSourceOutputSchema = z.object({
1891
+ canonicalUrl: z.string().max(4096).refine(isDocsRetrievalCanonicalUrl, "Expected a safe HTTP(S) URL or root-relative path"),
1892
+ scope: retrievalSourceScopeOutputSchema,
1893
+ lastModified: z.string().max(256).refine((value) => Number.isFinite(Date.parse(value)), "Expected a parseable modified time").optional(),
1894
+ digest: retrievalSourceDigestOutputSchema,
1895
+ indexGeneration: retrievalSourceDigestOutputSchema
1896
+ });
1857
1897
  const searchResultOutputSchema = z.object({
1858
1898
  id: z.string(),
1859
1899
  url: z.string(),
@@ -1865,7 +1905,8 @@ const searchResultOutputSchema = z.object({
1865
1905
  "text"
1866
1906
  ]),
1867
1907
  score: z.number().optional(),
1868
- section: z.string().optional()
1908
+ section: z.string().optional(),
1909
+ source: retrievalSourceOutputSchema.optional()
1869
1910
  });
1870
1911
  const searchFiltersOutputSchema = z.object({
1871
1912
  framework: z.array(z.string()).optional(),
@@ -1896,6 +1937,7 @@ const searchDocsOutputSchema = z.object({
1896
1937
  query: z.string(),
1897
1938
  audience: z.enum(["human", "agent"]),
1898
1939
  filters: searchFiltersOutputSchema,
1940
+ indexGeneration: retrievalSourceDigestOutputSchema,
1899
1941
  resultCount: z.number().int().nonnegative(),
1900
1942
  results: z.array(searchResultOutputSchema),
1901
1943
  warnings: z.array(searchWarningOutputSchema)
@@ -1985,6 +2027,7 @@ const contextSourceOutputSchema = z.object({
1985
2027
  version: z.string().optional(),
1986
2028
  package: z.array(z.string()).optional(),
1987
2029
  tags: z.array(z.string()).optional(),
2030
+ source: retrievalSourceOutputSchema.optional(),
1988
2031
  score: z.number().optional(),
1989
2032
  content: z.string(),
1990
2033
  chars: z.number().int().nonnegative(),
@@ -2156,6 +2199,8 @@ function createFilesystemDocsMcpSource(options = {}) {
2156
2199
  return {
2157
2200
  entry,
2158
2201
  siteTitle: options.siteTitle ?? "Documentation",
2202
+ baseUrl: options.baseUrl,
2203
+ resolveLocale: () => void 0,
2159
2204
  getPages,
2160
2205
  getNavigation
2161
2206
  };
@@ -2192,10 +2237,13 @@ async function createDocsMcpServer(options) {
2192
2237
  };
2193
2238
  const telemetryFramework = options.telemetryFramework ?? "mcp";
2194
2239
  function getSourcePages(locale) {
2195
- return options.source.getPages(locale, options.requestContext);
2240
+ return options.source.getPages(resolveSourceLocale(locale), options.requestContext);
2196
2241
  }
2197
2242
  function getSourceNavigation(locale) {
2198
- return options.source.getNavigation(locale, options.requestContext);
2243
+ return options.source.getNavigation(resolveSourceLocale(locale), options.requestContext);
2244
+ }
2245
+ function resolveSourceLocale(locale) {
2246
+ return options.source.resolveLocale ? options.source.resolveLocale(locale, options.requestContext) : locale;
2199
2247
  }
2200
2248
  function getSourceSkills() {
2201
2249
  return options.source.getSkills?.(options.requestContext) ?? [];
@@ -2811,6 +2859,7 @@ async function createDocsMcpServer(options) {
2811
2859
  const startedAt = nowMs();
2812
2860
  const resolvedLimit = limit ?? 10;
2813
2861
  const resolvedAudience = audience ?? "agent";
2862
+ const resolvedLocale = resolveSourceLocale(locale);
2814
2863
  const filters = {
2815
2864
  framework,
2816
2865
  version,
@@ -2839,13 +2888,15 @@ async function createDocsMcpServer(options) {
2839
2888
  });
2840
2889
  try {
2841
2890
  const searchResponse = await performDocsSearchWithMetadata({
2842
- pages: toSearchSourcePages(dedupePages(await getSourcePages(locale))),
2891
+ pages: toSearchSourcePages(dedupePages(await options.source.getPages(resolvedLocale, options.requestContext))),
2843
2892
  query,
2844
2893
  search: toolSearchConfig ?? true,
2845
2894
  audience: resolvedAudience,
2846
2895
  filters,
2847
- locale,
2896
+ locale: resolvedLocale,
2848
2897
  siteTitle: options.source.siteTitle,
2898
+ baseUrl: options.source.baseUrl ?? (options.requestContext?.request ? new URL(options.requestContext.request.url).origin : void 0),
2899
+ syncBaseUrl: options.source.baseUrl ?? null,
2849
2900
  limit: resolvedLimit
2850
2901
  });
2851
2902
  const elapsed = durationMs(startedAt);
@@ -3012,6 +3063,7 @@ async function createDocsMcpServer(options) {
3012
3063
  annotations: { readOnlyHint: true }
3013
3064
  }, async ({ query, framework, version, package: packageName, tags, locale, tokenBudget }) => {
3014
3065
  const startedAt = nowMs();
3066
+ const resolvedLocale = resolveSourceLocale(locale);
3015
3067
  const trace = createDocsAgentTraceContext("mcp.tool.get_context");
3016
3068
  const callSpanId = createDocsAgentTraceId("span");
3017
3069
  await emitDocsAgentTraceEvent(options.observability, {
@@ -3036,16 +3088,17 @@ async function createDocsMcpServer(options) {
3036
3088
  });
3037
3089
  try {
3038
3090
  const result = await buildDocsMcpContext({
3039
- pages: dedupePages(await getSourcePages(locale)),
3091
+ pages: dedupePages(await options.source.getPages(resolvedLocale, options.requestContext)),
3040
3092
  query,
3041
3093
  framework,
3042
3094
  version,
3043
3095
  package: packageName,
3044
3096
  tags,
3045
- locale,
3097
+ locale: resolvedLocale,
3046
3098
  tokenBudget,
3047
3099
  entry: options.source.entry,
3048
- siteTitle: options.source.siteTitle
3100
+ siteTitle: options.source.siteTitle,
3101
+ baseUrl: options.source.baseUrl ?? (options.requestContext?.request ? new URL(options.requestContext.request.url).origin : void 0)
3049
3102
  });
3050
3103
  const elapsed = durationMs(startedAt);
3051
3104
  await emitDocsAnalyticsEvent(options.analytics, {
@@ -3831,6 +3884,10 @@ function hasVisibleDescendantFilesystemDocsPage(dir) {
3831
3884
  }
3832
3885
  return false;
3833
3886
  }
3887
+ function normalizeFrontmatterLastmod(value) {
3888
+ if (typeof value === "string") return value;
3889
+ return value instanceof Date && Number.isFinite(value.getTime()) ? value.toISOString() : void 0;
3890
+ }
3834
3891
  function scanFilesystemDocsPages(contentDirAbs, entry, rootDir) {
3835
3892
  const pages = [];
3836
3893
  function scan(dir, slugParts) {
@@ -3865,6 +3922,7 @@ function scanFilesystemDocsPages(contentDirAbs, entry, rootDir) {
3865
3922
  agent: normalizePageAgentFrontmatter(data.agent),
3866
3923
  icon: data.icon,
3867
3924
  sourcePath: path.relative(rootDir, full).replace(/\\/g, "/"),
3925
+ lastmod: normalizeFrontmatterLastmod(data.lastmod),
3868
3926
  lastModified: stat.mtime.toISOString(),
3869
3927
  locale: typeof data.locale === "string" ? data.locale : void 0,
3870
3928
  framework: typeof data.framework === "string" ? data.framework : void 0,
@@ -3889,7 +3947,8 @@ function readFilesystemAgentDoc(dir) {
3889
3947
  const agentContent = resolveDocsAudienceMdxContent(content, "agent");
3890
3948
  return {
3891
3949
  agentContent: stripMarkdownForMcp(agentContent),
3892
- agentRawContent: agentContent
3950
+ agentRawContent: agentContent,
3951
+ agentLastModified: fs.statSync(agentPath).mtime.toISOString()
3893
3952
  };
3894
3953
  }
3895
3954
  function resolveRelatedForMcpPages(pages) {
@@ -4005,25 +4064,7 @@ function dedupePages(pages) {
4005
4064
  return [...seen.values()];
4006
4065
  }
4007
4066
  function toSearchSourcePages(pages) {
4008
- return pages.map((page) => ({
4009
- title: page.title,
4010
- url: page.url,
4011
- content: page.content,
4012
- rawContent: page.rawContent,
4013
- sourcePath: page.sourcePath,
4014
- lastModified: page.lastModified,
4015
- locale: page.locale,
4016
- framework: page.framework,
4017
- version: page.version,
4018
- tags: page.tags,
4019
- agentContent: page.agentContent,
4020
- agentRawContent: page.agentRawContent,
4021
- agentFallbackContent: page.agentFallbackContent,
4022
- agentFallbackRawContent: page.agentFallbackRawContent,
4023
- description: page.description,
4024
- related: page.related,
4025
- agent: page.agent
4026
- }));
4067
+ return pages;
4027
4068
  }
4028
4069
  function getDocsConfigSchema(filters = {}) {
4029
4070
  const option = filters.option?.trim();
@@ -4637,10 +4678,13 @@ async function buildDocsMcpContext(options) {
4637
4678
  }] : [];
4638
4679
  });
4639
4680
  const scopedPages = scopedPageEntries.map(({ page }) => page);
4681
+ const allSearchPages = toSearchSourcePages([...options.pages]);
4682
+ const searchPageBySource = new Map(options.pages.map((page, index) => [page, allSearchPages[index]]));
4640
4683
  const scopeByPage = new Map(scopedPageEntries.map(({ page, scope }) => [page, scope]));
4641
4684
  const maxResults = typeof options.maxResults === "number" && Number.isFinite(options.maxResults) ? Math.max(1, Math.min(50, Math.floor(options.maxResults))) : 50;
4642
4685
  const orderedResults = [...await performDocsSearch({
4643
- pages: toSearchSourcePages(scopedPages),
4686
+ pages: scopedPages.map((page) => searchPageBySource.get(page)),
4687
+ generationPages: allSearchPages,
4644
4688
  query: options.query,
4645
4689
  search: {
4646
4690
  enabled: true,
@@ -4651,6 +4695,7 @@ async function buildDocsMcpContext(options) {
4651
4695
  audience: "agent",
4652
4696
  locale: options.locale,
4653
4697
  siteTitle: options.siteTitle,
4698
+ baseUrl: options.baseUrl,
4654
4699
  limit: 50
4655
4700
  })].sort((left, right) => {
4656
4701
  const scoreDelta = (right.score ?? 0) - (left.score ?? 0);
@@ -4696,7 +4741,7 @@ async function buildDocsMcpContext(options) {
4696
4741
  let usedUtf8Bytes = 0;
4697
4742
  for (const { result, page, scope, selectedSection, rawContent } of resolvedCandidates) {
4698
4743
  const anchor = selectedSection?.anchor;
4699
- const sourceUrl = anchor ? `${page.url.split("#", 1)[0]}#${encodeURIComponent(anchor)}` : page.url;
4744
+ const sourceUrl = result.source?.canonicalUrl ?? (anchor ? `${page.url.split("#", 1)[0]}#${encodeURIComponent(anchor)}` : page.url);
4700
4745
  const headerLines = [`## ${page.title}`, `Source: ${sourceUrl}`];
4701
4746
  if (selectedSection?.title) headerLines.push(`Section: ${selectedSection.title}`);
4702
4747
  if (scope.framework) headerLines.push(`Framework: ${scope.framework}`);
@@ -4723,12 +4768,13 @@ async function buildDocsMcpContext(options) {
4723
4768
  section: selectedSection?.title,
4724
4769
  anchor,
4725
4770
  sourcePath: page.sourcePath,
4726
- lastModified: page.lastModified,
4771
+ lastModified: result.source?.lastModified ?? page.lastModified,
4727
4772
  locale: scope.locale,
4728
4773
  framework: scope.framework,
4729
4774
  version: scope.version,
4730
4775
  package: scope.package.length > 0 ? [...scope.package] : void 0,
4731
4776
  tags: scope.tags.length > 0 ? [...scope.tags] : void 0,
4777
+ source: result.source,
4732
4778
  score: result.score,
4733
4779
  content: limited.text,
4734
4780
  chars: limited.text.length,
@@ -4771,11 +4817,25 @@ async function buildDocsMcpContext(options) {
4771
4817
  }
4772
4818
  function findDocsPage(pages, requestedPath, entry) {
4773
4819
  const normalizedRequest = normalizeRequestedPath(requestedPath, entry);
4774
- for (const page of pages) if (normalizeUrlPath(page.url) === normalizedRequest) return page;
4820
+ const normalizedRequestWithoutLocale = normalizeRequestedPath(removeDocsLocaleQuery(requestedPath), entry);
4821
+ for (const page of pages) {
4822
+ const normalizedPageUrl = normalizeUrlPath(page.url);
4823
+ if (normalizedPageUrl === normalizedRequest || normalizedPageUrl === normalizedRequestWithoutLocale) return page;
4824
+ }
4775
4825
  const normalizedSlug = normalizePathSegment(requestedPath.replace(/^\//, ""));
4776
4826
  for (const page of pages) if (normalizePathSegment(page.slug) === normalizedSlug) return page;
4777
4827
  return null;
4778
4828
  }
4829
+ function removeDocsLocaleQuery(value) {
4830
+ try {
4831
+ const absolute = /^[a-z][a-z\d+.-]*:/iu.test(value);
4832
+ const url = new URL(value, "https://docs.local");
4833
+ url.searchParams.delete("lang");
4834
+ return absolute ? url.toString() : `${url.pathname}${url.search}${url.hash}`;
4835
+ } catch {
4836
+ return value;
4837
+ }
4838
+ }
4779
4839
  function normalizeRequestedPath(requestedPath, entry) {
4780
4840
  const trimmed = requestedPath.trim();
4781
4841
  if (!trimmed) return "/";
@@ -1,7 +1,7 @@
1
- import { It as DEFAULT_SITEMAP_XML_ROUTE, Pt as DEFAULT_SITEMAP_MD_ROUTE, Zt as DEFAULT_MCP_WELL_KNOWN_ROUTE, c as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, f as DEFAULT_DOCS_CONFIG_ROUTE, h as DEFAULT_LLMS_FULL_TXT_ROUTE, i as DEFAULT_AGENT_FEEDBACK_ROUTE, m as DEFAULT_DOCS_DIAGNOSTICS_ROUTE, t as DEFAULT_AGENTS_MD_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, x as DEFAULT_SKILL_MD_ROUTE } from "./agent-o9OTadrf.mjs";
1
+ import { It as DEFAULT_SITEMAP_XML_ROUTE, Pt as DEFAULT_SITEMAP_MD_ROUTE, Zt as DEFAULT_MCP_WELL_KNOWN_ROUTE, c as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, f as DEFAULT_DOCS_CONFIG_ROUTE, h as DEFAULT_LLMS_FULL_TXT_ROUTE, i as DEFAULT_AGENT_FEEDBACK_ROUTE, m as DEFAULT_DOCS_DIAGNOSTICS_ROUTE, t as DEFAULT_AGENTS_MD_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, x as DEFAULT_SKILL_MD_ROUTE } from "./agent-BJ0KXN-A.mjs";
2
2
  import { isDocsAgentSkillName, validateDocsAgentSkillFrontmatter } from "./agent-skills-spec.mjs";
3
3
  import { C as DOCS_AGENT_MANIFEST_SCHEMA_MEDIA_TYPE, S as DOCS_AGENT_MANIFEST_FORMAT, T as DOCS_AGENT_MANIFEST_VERSION, f as DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, n as API_CATALOG_MEDIA_TYPE, r as API_CATALOG_PROFILE_URI, t as AGENT_SKILLS_DISCOVERY_SCHEMA_URI, u as DEFAULT_AGENT_SKILLS_INDEX_ROUTE, v as DEFAULT_API_CATALOG_ROUTE, w as DOCS_AGENT_MANIFEST_SCHEMA_URI } from "./standards-discovery-BwL5ffGx.mjs";
4
- import { n as DEFAULT_ROBOTS_TXT_ROUTE } from "./robots-BcuxnZqZ.mjs";
4
+ import { n as DEFAULT_ROBOTS_TXT_ROUTE } from "./robots-RbgmSvPH.mjs";
5
5
  import matter from "gray-matter";
6
6
 
7
7
  //#region src/define-docs.ts
@@ -1,5 +1,5 @@
1
- import { Gn as OpenDocsTarget, Hn as OpenDocsProvider, Jt as DocsObservabilityEventInput, Kt as DocsObservabilityConfig, Sn as DocsSitemapConfig, _n as DocsSearchResult, at as DocsAnalyticsEventInput, cn as DocsSearchConfig, et as DocsAgentTraceEventInput, f as CustomDocsSearchConfig, fn as DocsSearchFilterInput, gn as DocsSearchResponse, gr as TypesenseDocsSearchConfig, hn as DocsSearchRequest, ht as DocsAskAIMcpConfig, in as DocsSearchAdapter, it as DocsAnalyticsEvent, ln as DocsSearchDocument, on as DocsSearchAdapterFactory, or as ResolvedDocsRelatedLink, pn as DocsSearchFilters, qt as DocsObservabilityEvent, r as AlgoliaDocsSearchConfig, rt as DocsAnalyticsConfig, sn as DocsSearchChunkingConfig, yn as DocsSearchSourcePage, zn as McpDocsSearchConfig } from "./types-_HCPD4wc.mjs";
2
- import { I as DocsDiscoveryApiRouteOptions } from "./standards-discovery-83lp1lew.mjs";
1
+ import { Jt as DocsObservabilityEventInput, Kt as DocsObservabilityConfig, Vn as McpDocsSearchConfig, Wn as OpenDocsProvider, _n as DocsSearchRequest, at as DocsAnalyticsEventInput, cn as DocsSearchAdapterFactory, cr as ResolvedDocsRelatedLink, dn as DocsSearchDocument, et as DocsAgentTraceEventInput, f as CustomDocsSearchConfig, hn as DocsSearchFilters, ht as DocsAskAIMcpConfig, it as DocsAnalyticsEvent, ln as DocsSearchChunkingConfig, mn as DocsSearchFilterInput, on as DocsSearchAdapter, qn as OpenDocsTarget, qt as DocsObservabilityEvent, r as AlgoliaDocsSearchConfig, rt as DocsAnalyticsConfig, un as DocsSearchConfig, vn as DocsSearchResponse, vr as TypesenseDocsSearchConfig, wn as DocsSitemapConfig, xn as DocsSearchSourcePage, yn as DocsSearchResult } from "./types-clg5J1R4.mjs";
2
+ import { I as DocsDiscoveryApiRouteOptions } from "./standards-discovery-CdrOE-05.mjs";
3
3
 
4
4
  //#region src/analytics.d.ts
5
5
  declare const DOCS_AGENT_TRACE_EVENT_TYPES: readonly ["run.start", "run.end", "run.error", "user.input", "prompt.build", "retrieval.query", "retrieval.result", "retrieval.error", "model.call", "model.response", "model.stream", "model.error", "tool.call", "tool.result", "tool.error", "retry", "timeout", "error", "agent.final"];
@@ -243,6 +243,26 @@ declare function resolveDocsSearchFilters(searchParams: URLSearchParams): DocsSe
243
243
  declare function resolveDocsSearchRequest(searchParams: URLSearchParams): DocsSearchRequest;
244
244
  declare function inferDocsAskAIPackageHints(content: string): DocsAskAIPackageHints;
245
245
  declare function formatDocsAskAIPackageHints(hints: DocsAskAIPackageHints, packageName?: string): string | undefined;
246
+ /**
247
+ * Build the exact normalized-input projection represented by a retrieval source digest.
248
+ * This is public so consumers can independently reproduce `source.digest`.
249
+ */
250
+ declare function buildDocsRetrievalDigestProjection(page: DocsSearchSourcePage, audience?: DocsContentAudience): string;
251
+ declare function resolveDocsRetrievalLastModified(page: DocsSearchSourcePage, audience: DocsContentAudience): string | undefined;
252
+ interface EnrichDocsSearchDocumentsWithProvenanceOptions {
253
+ documents: readonly DocsSearchDocument[];
254
+ pages: readonly DocsSearchSourcePage[];
255
+ audience?: DocsContentAudience;
256
+ chunking?: DocsSearchChunkingConfig;
257
+ locale?: string;
258
+ baseUrl?: string;
259
+ indexGeneration?: string;
260
+ }
261
+ /**
262
+ * Attach the same canonical provenance used by built-in search providers.
263
+ * Custom adapters can call this before persisting their own hosted records.
264
+ */
265
+ declare function enrichDocsSearchDocumentsWithProvenance(options: EnrichDocsSearchDocumentsWithProvenanceOptions): Promise<DocsSearchDocument[]>;
246
266
  declare function buildDocsSearchDocuments(pages: DocsSearchSourcePage[], chunking?: DocsSearchChunkingConfig, audience?: DocsContentAudience): DocsSearchDocument[];
247
267
  declare function createSimpleSearchAdapter(): DocsSearchAdapter;
248
268
  declare function createTypesenseSearchAdapter(config: TypesenseDocsSearchConfig): DocsSearchAdapter;
@@ -264,6 +284,10 @@ declare function createMcpSearchAdapter(config: McpDocsSearchConfig): DocsSearch
264
284
  declare function createAlgoliaSearchAdapter(config: AlgoliaDocsSearchConfig): DocsSearchAdapter;
265
285
  interface PerformDocsSearchOptions {
266
286
  pages: DocsSearchSourcePage[];
287
+ /** @internal Complete corpus used for generation when `pages` is pre-scoped by a caller. */
288
+ generationPages?: DocsSearchSourcePage[];
289
+ /** @internal Precomputed complete-corpus generation for structured callers. */
290
+ indexGeneration?: string;
267
291
  query: string;
268
292
  search?: boolean | DocsSearchConfig;
269
293
  /** Selects which audience projection is searchable. Public site search defaults to human. */
@@ -273,6 +297,12 @@ interface PerformDocsSearchOptions {
273
297
  siteTitle?: string;
274
298
  /** Canonical docs URL used to distinguish same-site absolute hits from foreign MCP results. */
275
299
  baseUrl?: string;
300
+ /**
301
+ * Canonical origin safe to persist in a hosted index. Pass `null` when `baseUrl`
302
+ * came from the current request rather than trusted configuration.
303
+ * @internal
304
+ */
305
+ syncBaseUrl?: string | null;
276
306
  limit?: number;
277
307
  /** Optional framework, version, package, and tag constraints. */
278
308
  filters?: DocsSearchFilterInput;
@@ -287,7 +317,7 @@ interface PerformDocsSearchOptions {
287
317
  * Runtime search defaults to true; provider diagnostics can disable supplementation.
288
318
  */
289
319
  supplementExternalResults?: boolean;
290
- /** Fail closed on absolute provider hits when no canonical docs origin is available. */
320
+ /** Keep absolute provider origins distinct when no canonical docs origin is available. */
291
321
  strictExternalOrigins?: boolean;
292
322
  /** Optional cancellation signal forwarded to adapters and their managed requests. */
293
323
  signal?: AbortSignal;
@@ -301,7 +331,8 @@ declare function buildDocsAskAIContext(options: {
301
331
  locale?: string;
302
332
  pathname?: string;
303
333
  siteTitle?: string;
304
- baseUrl?: string;
334
+ baseUrl?: string; /** See `performDocsSearch.syncBaseUrl`. */
335
+ syncBaseUrl?: string | null;
305
336
  limit?: number;
306
337
  filters?: DocsSearchFilterInput;
307
338
  maxContextChars?: number;
@@ -312,4 +343,16 @@ declare function buildDocsAskAIContext(options: {
312
343
  }): Promise<DocsAskAIContext>;
313
344
  declare function createCustomSearchAdapter(adapter: DocsSearchAdapter | DocsSearchAdapterFactory): CustomDocsSearchConfig;
314
345
  //#endregion
315
- export { serializeOpenDocsProviders as $, createDocsSitemapResponse as A, DEFAULT_OPEN_DOCS_TARGET as B, DEFAULT_SITEMAP_XML_ROUTE as C, DocsSitemapPageInput as D, DocsSitemapManifestPage as E, resolveDocsSitemapPageLastmod as F, SerializedOpenDocsProvider as G, PromptAction as H, resolveDocsSitemapRequest as I, resolvePromptProviderChoices as J, normalizePromptProviderName as K, toDocsSitemapMarkdownUrl as L, renderDocsSitemapMarkdown as M, renderDocsSitemapXml as N, DocsSitemapResolvedConfig as O, resolveDocsSitemapConfig as P, serializeOpenDocsProvider as Q, DEFAULT_OPEN_DOCS_PROMPT as R, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE as S, DocsSitemapManifest as T, PromptProviderChoice as U, DEFAULT_PROMPT_PROVIDER_TEMPLATES as V, SerializeOpenDocsProviderOptions as W, serializeDocsIcon as X, sanitizePromptText as Y, serializeDocsIconRegistry as Z, resolveDocsSearchRequest as _, emitDocsObservabilityEvent as _t, createCustomSearchAdapter as a, findDocsAudienceMdxIssues as at, DEFAULT_SITEMAP_MD_DOCS_ROUTE as b, resolveDocsObservabilityConfig as bt, createTypesenseSearchAdapter as c, resolveDocsAudienceMdxContent as ct, normalizeDocsSearchFilters as d, ResolvedDocsAnalyticsConfig as dt, DocsAudienceMdxIssue as et, performDocsSearch as f, ResolvedDocsObservabilityConfig as ft, resolveDocsSearchFilters as g, emitDocsAnalyticsEvent as gt, resolveDocsSearchAudience as h, emitDocsAgentTraceEvent as ht, createAlgoliaSearchAdapter as i, extractDocsMarkdownPromptBlocks as it, readDocsSitemapManifestFromContentMap as j, buildDocsSitemapManifest as k, formatDocsAskAIPackageHints as l, DOCS_AGENT_TRACE_EVENT_TYPES as lt, resolveAskAISearchRequestConfig as m, createDocsAgentTraceId as mt, buildDocsAskAIContext as n, DocsMarkdownPromptBlock as nt, createMcpSearchAdapter as o, resolveDocsAgentMdxContent as ot, performDocsSearchWithMetadata as p, createDocsAgentTraceContext as pt, parsePromptStringArray as q, buildDocsSearchDocuments as r, ExtractedDocsMarkdownPromptBlocks as rt, createSimpleSearchAdapter as s, resolveDocsAudienceExposure as st, PerformDocsSearchOptions as t, DocsContentAudience as tt, inferDocsAskAIPackageHints as u, DocsAgentTraceContext as ut, resolveSearchRequestConfig as v, getDocsRequestAnalyticsProperties as vt, DocsSitemapFormat as w, DEFAULT_SITEMAP_MD_ROUTE as x, DEFAULT_SITEMAP_MANIFEST_PATH as y, resolveDocsAnalyticsConfig as yt, DEFAULT_OPEN_DOCS_PROVIDER_IDS as z };
346
+ //#region src/retrieval-digest.d.ts
347
+ /** Validate the bounded HTTP(S) URL or root-relative URI reference used by provenance. */
348
+ declare function isDocsRetrievalCanonicalUrl(value: string): boolean;
349
+ /**
350
+ * Hash a retrieval source projection with portable SHA-256.
351
+ *
352
+ * The projection is normalized by removing one leading BOM, converting CRLF/CR
353
+ * line endings to LF, and trimming trailing whitespace. The helper is exported so
354
+ * agents can independently verify provenance in Node, edge, and browser runtimes.
355
+ */
356
+ declare function digestDocsRetrievalContent(value: string): `sha256:${string}`;
357
+ //#endregion
358
+ export { parsePromptStringArray as $, DocsSitemapFormat as A, resolveDocsSitemapConfig as B, resolveDocsSearchRequest as C, emitDocsObservabilityEvent as Ct, DEFAULT_SITEMAP_MD_ROUTE as D, DEFAULT_SITEMAP_MD_DOCS_ROUTE as E, resolveDocsObservabilityConfig as Et, buildDocsSitemapManifest as F, DEFAULT_OPEN_DOCS_PROVIDER_IDS as G, resolveDocsSitemapRequest as H, createDocsSitemapResponse as I, PromptAction as J, DEFAULT_OPEN_DOCS_TARGET as K, readDocsSitemapManifestFromContentMap as L, DocsSitemapManifestPage as M, DocsSitemapPageInput as N, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE as O, DocsSitemapResolvedConfig as P, normalizePromptProviderName as Q, renderDocsSitemapMarkdown as R, resolveDocsSearchFilters as S, emitDocsAnalyticsEvent as St, DEFAULT_SITEMAP_MANIFEST_PATH as T, resolveDocsAnalyticsConfig as Tt, toDocsSitemapMarkdownUrl as U, resolveDocsSitemapPageLastmod as V, DEFAULT_OPEN_DOCS_PROMPT as W, SerializeOpenDocsProviderOptions as X, PromptProviderChoice as Y, SerializedOpenDocsProvider as Z, performDocsSearch as _, ResolvedDocsAnalyticsConfig as _t, buildDocsAskAIContext as a, serializeOpenDocsProviders as at, resolveDocsRetrievalLastModified as b, createDocsAgentTraceId as bt, createAlgoliaSearchAdapter as c, DocsMarkdownPromptBlock as ct, createSimpleSearchAdapter as d, findDocsAudienceMdxIssues as dt, resolvePromptProviderChoices as et, createTypesenseSearchAdapter as f, resolveDocsAgentMdxContent as ft, normalizeDocsSearchFilters as g, DocsAgentTraceContext as gt, inferDocsAskAIPackageHints as h, DOCS_AGENT_TRACE_EVENT_TYPES as ht, PerformDocsSearchOptions as i, serializeOpenDocsProvider as it, DocsSitemapManifest as j, DEFAULT_SITEMAP_XML_ROUTE as k, createCustomSearchAdapter as l, ExtractedDocsMarkdownPromptBlocks as lt, formatDocsAskAIPackageHints as m, resolveDocsAudienceMdxContent as mt, isDocsRetrievalCanonicalUrl as n, serializeDocsIcon as nt, buildDocsRetrievalDigestProjection as o, DocsAudienceMdxIssue as ot, enrichDocsSearchDocumentsWithProvenance as p, resolveDocsAudienceExposure as pt, DEFAULT_PROMPT_PROVIDER_TEMPLATES as q, EnrichDocsSearchDocumentsWithProvenanceOptions as r, serializeDocsIconRegistry as rt, buildDocsSearchDocuments as s, DocsContentAudience as st, digestDocsRetrievalContent as t, sanitizePromptText as tt, createMcpSearchAdapter as u, extractDocsMarkdownPromptBlocks as ut, performDocsSearchWithMetadata as v, ResolvedDocsObservabilityConfig as vt, resolveSearchRequestConfig as w, getDocsRequestAnalyticsProperties as wt, resolveDocsSearchAudience as x, emitDocsAgentTraceEvent as xt, resolveAskAISearchRequestConfig as y, createDocsAgentTraceContext as yt, renderDocsSitemapXml as z };
@@ -1,14 +1,14 @@
1
- import { $t as getDocsMcpProtectedResourceMetadataRoutes, A as buildDocsAgentDiscoverySpec, Dt as findDocsAudienceMdxIssues, M as buildDocsConfigMap, T as DOCS_CONFIG_MAP_TOP_LEVEL_KEYS } from "./agent-o9OTadrf.mjs";
1
+ import { $t as getDocsMcpProtectedResourceMetadataRoutes, A as buildDocsAgentDiscoverySpec, Dt as findDocsAudienceMdxIssues, M as buildDocsConfigMap, T as DOCS_CONFIG_MAP_TOP_LEVEL_KEYS } from "./agent-BJ0KXN-A.mjs";
2
2
  import { _ as hasStructuredPageAgentContract, f as PAGE_AGENT_CONTRACT_FIELDS, g as getPageAgentFrontmatterIssues, v as normalizePageAgentFrontmatter } from "./markdown-sections-7OoA7ylx.mjs";
3
3
  import { I as resolveDocsDiscoveryApiRoute, _ as DEFAULT_API_CATALOG_FORMAT, d as DEFAULT_AGENT_SKILLS_ROUTE_PATTERN, h as DEFAULT_AGENT_SKILL_FORMAT, l as DEFAULT_AGENT_SKILLS_INDEX_FORMAT, u as DEFAULT_AGENT_SKILLS_INDEX_ROUTE, v as DEFAULT_API_CATALOG_ROUTE } from "./standards-discovery-BwL5ffGx.mjs";
4
- import { p as resolveAskAISearchRequestConfig } from "./search-RfPcG1if.mjs";
4
+ import { h as resolveAskAISearchRequestConfig } from "./search-DIyIl-tE.mjs";
5
5
  import { a as resolveDocsMetadataBaseUrl } from "./metadata-N252j5_a.mjs";
6
- import { c as resolveDocsReviewConfig, o as ensureDocsReviewWorkflow, s as readDocsReviewConfigFromSource, t as runDocsGoldenTasks } from "./agent-evals-BFHGypqh.mjs";
6
+ import { c as resolveDocsReviewConfig, o as ensureDocsReviewWorkflow, s as readDocsReviewConfigFromSource, t as runDocsGoldenTasks } from "./agent-evals-LIScgQVm.mjs";
7
7
  import { createFilesystemDocsMcpSource, getDocsConfigSchema, resolveDocsMcpConfig } from "./mcp.mjs";
8
8
  import "./code-blocks-DnNVNK2M.mjs";
9
9
  import { _ as resolveDocsContentDir, g as resolveDocsConfigPath, h as readTopLevelStringProperty, s as loadDocsConfigModuleResultWithProjectEnv } from "./config-Wcdj-D0a.mjs";
10
10
  import { t as detectFramework } from "./utils-DpiIioYb.mjs";
11
- import { a as extractAgentBlocks, i as createAgentUsefulnessPagesFromMcp, n as analyzeAgentSurfaceDrift, r as analyzeAgentUsefulness, t as resolveGoldenEvaluationInput } from "./golden-evaluations-CloP0pAe.mjs";
11
+ import { a as extractAgentBlocks, i as createAgentUsefulnessPagesFromMcp, n as analyzeAgentSurfaceDrift, r as analyzeAgentUsefulness, t as resolveGoldenEvaluationInput } from "./golden-evaluations-DTEPZeb0.mjs";
12
12
  import matter from "gray-matter";
13
13
  import { existsSync, lstatSync, readFileSync, readdirSync } from "node:fs";
14
14
  import path from "node:path";
@@ -1,7 +1,7 @@
1
- import "./agent-o9OTadrf.mjs";
1
+ import "./agent-BJ0KXN-A.mjs";
2
2
  import "./markdown-sections-7OoA7ylx.mjs";
3
3
  import "./standards-discovery-BwL5ffGx.mjs";
4
- import { c as renderDocsRobotsGeneratedBlock, f as upsertDocsRobotsGeneratedBlock, i as DOCS_ROBOTS_GENERATED_BLOCK_START, r as DOCS_ROBOTS_GENERATED_BLOCK_END, u as resolveDocsRobotsConfig } from "./robots-BcuxnZqZ.mjs";
4
+ import { c as renderDocsRobotsGeneratedBlock, f as upsertDocsRobotsGeneratedBlock, i as DOCS_ROBOTS_GENERATED_BLOCK_START, r as DOCS_ROBOTS_GENERATED_BLOCK_END, u as resolveDocsRobotsConfig } from "./robots-RbgmSvPH.mjs";
5
5
  import { a as loadDocsConfigModule, g as resolveDocsConfigPath, h as readTopLevelStringProperty, l as readBooleanProperty, m as readTopLevelBooleanProperty, p as readStringProperty, t as extractNestedObjectLiteral } from "./config-Wcdj-D0a.mjs";
6
6
  import { t as detectFramework } from "./utils-DpiIioYb.mjs";
7
7
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
@@ -1,4 +1,4 @@
1
- import { Ht as resolveDocsSitemapConfig, S as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, Yt as DEFAULT_MCP_PUBLIC_ROUTE, Zt as DEFAULT_MCP_WELL_KNOWN_ROUTE, a as DEFAULT_AGENT_MD_ROUTE, c as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, et as normalizeDocsPathSegment, g as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, h as DEFAULT_LLMS_FULL_TXT_ROUTE, l as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_AGENTS_MD_WELL_KNOWN_ROUTE, o as DEFAULT_AGENT_MD_WELL_KNOWN_ROUTE, t as DEFAULT_AGENTS_MD_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, x as DEFAULT_SKILL_MD_ROUTE, y as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE } from "./agent-o9OTadrf.mjs";
1
+ import { Ht as resolveDocsSitemapConfig, S as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, Yt as DEFAULT_MCP_PUBLIC_ROUTE, Zt as DEFAULT_MCP_WELL_KNOWN_ROUTE, a as DEFAULT_AGENT_MD_ROUTE, c as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, et as normalizeDocsPathSegment, g as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, h as DEFAULT_LLMS_FULL_TXT_ROUTE, l as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_AGENTS_MD_WELL_KNOWN_ROUTE, o as DEFAULT_AGENT_MD_WELL_KNOWN_ROUTE, t as DEFAULT_AGENTS_MD_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, x as DEFAULT_SKILL_MD_ROUTE, y as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE } from "./agent-BJ0KXN-A.mjs";
2
2
  import { a as DEFAULT_A2A_AGENT_CARD_ROUTE, b as DEFAULT_LEGACY_SKILLS_INDEX_ROUTE, f as DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, u as DEFAULT_AGENT_SKILLS_INDEX_ROUTE, v as DEFAULT_API_CATALOG_ROUTE, x as DEFAULT_LEGACY_SKILLS_ROUTE_PREFIX } from "./standards-discovery-BwL5ffGx.mjs";
3
3
 
4
4
  //#region src/robots.ts