@farming-labs/docs 0.2.120 → 0.2.122

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 (188) hide show
  1. package/README.md +8 -0
  2. package/dist/access.d.mts +13 -0
  3. package/dist/access.mjs +56 -0
  4. package/dist/agent-conformance.d.mts +60 -0
  5. package/dist/agent-conformance.mjs +538 -0
  6. package/dist/agent-contract.d.mts +47 -0
  7. package/dist/agent-contract.mjs +645 -0
  8. package/dist/agent-detection.d.mts +6 -0
  9. package/dist/agent-detection.mjs +83 -0
  10. package/dist/agent-evals.d.mts +224 -0
  11. package/dist/{agent-evals-BLNLvXbG.mjs → agent-evals.mjs} +7 -565
  12. package/dist/agent-feedback-evaluations-node.mjs +38 -0
  13. package/dist/agent-feedback-evaluations.d.mts +91 -0
  14. package/dist/{agent-feedback-evaluations-CcMGlgsO.mjs → agent-feedback-evaluations.mjs} +2 -2
  15. package/dist/agent-feedback-loop.d.mts +45 -0
  16. package/dist/{agent-feedback-loop-CcZL_sb1.mjs → agent-feedback-loop.mjs} +1 -1
  17. package/dist/agent-maintenance.d.mts +71 -0
  18. package/dist/{agent-maintenance-CuZ7iAKq.mjs → agent-maintenance.mjs} +1 -1
  19. package/dist/agent-provenance.d.mts +23 -0
  20. package/dist/agent-provenance.mjs +77 -0
  21. package/dist/agent-scope.mjs +321 -0
  22. package/dist/agent-skills-archive.mjs +86 -0
  23. package/dist/agent-skills-bundle.d.mts +1 -1
  24. package/dist/{agent-skills-progressive-disclosure-PjPtTYL-.mjs → agent-skills-progressive-disclosure.mjs} +2 -2
  25. package/dist/{agent-skills-server-D5IuvwM7.d.mts → agent-skills-server.d.mts} +3 -3
  26. package/dist/{agent-skills-server-BC7md56k.mjs → agent-skills-server.mjs} +2 -2
  27. package/dist/agent-skills-vite.d.mts +3 -3
  28. package/dist/agent-skills-vite.mjs +1 -2
  29. package/dist/agent-surface-drift.mjs +236 -0
  30. package/dist/{golden-evaluations-CLUViycJ.mjs → agent-usefulness.mjs} +5 -290
  31. package/dist/{content-change-hydration-wqXIZHp6.d.mts → agent.d.mts} +10 -411
  32. package/dist/agent.mjs +2729 -0
  33. package/dist/{analytics-w3FDOksr.d.mts → analytics.d.mts} +2 -2
  34. package/dist/{analytics-p8Vhhu2P.mjs → analytics.mjs} +2 -2
  35. package/dist/{sitemap-server-BUdPBcGs.d.mts → api-reference.d.mts} +2 -6
  36. package/dist/api-reference.mjs +1481 -0
  37. package/dist/{audience-exposure-DBrFWULA.d.mts → audience-exposure.d.mts} +1 -1
  38. package/dist/audience-exposure.mjs +8 -0
  39. package/dist/audience.d.mts +44 -0
  40. package/dist/audience.mjs +1654 -0
  41. package/dist/authoring-mcp.d.mts +44 -0
  42. package/dist/{authoring-mcp-CiCUQe3o.mjs → authoring-mcp.mjs} +3 -3
  43. package/dist/browser.d.mts +6 -4
  44. package/dist/browser.mjs +6 -7
  45. package/dist/build.d.mts +8 -0
  46. package/dist/build.mjs +8 -0
  47. package/dist/changelog.d.mts +20 -0
  48. package/dist/changelog.mjs +39 -0
  49. package/dist/{agent-export-CA6IUQ7T.mjs → cli/agent-export.mjs} +19 -45
  50. package/dist/{agent-CYk2DxY7.mjs → cli/agent.mjs} +6 -35
  51. package/dist/{agents-BUiVmj8i.mjs → cli/agents.mjs} +5 -18
  52. package/dist/cli/api-doctor.mjs +206 -0
  53. package/dist/{authoring-C2ymvYWl.mjs → cli/authoring.mjs} +2 -8
  54. package/dist/{cloud-6eKrlmKd.mjs → cli/cloud.mjs} +3 -3
  55. package/dist/{codeblocks-CHpgAwY-.mjs → cli/codeblocks.mjs} +2 -2
  56. package/dist/cli/config.d.mts +11 -0
  57. package/dist/{config-BZnKAj_Y.mjs → cli/config.mjs} +1 -1
  58. package/dist/cli/dev-banner.mjs +58 -0
  59. package/dist/{dev-Bnn-NUNa.mjs → cli/dev.mjs} +3 -57
  60. package/dist/{doctor-Bfkrkzad.mjs → cli/doctor.mjs} +41 -226
  61. package/dist/{downgrade-CHMta85e.mjs → cli/downgrade.mjs} +2 -2
  62. package/dist/cli/errors.d.mts +4 -0
  63. package/dist/{errors-BtnVLhNF.mjs → cli/errors.mjs} +1 -1
  64. package/dist/{feedback-evals-DMilg9pY.mjs → cli/feedback-evals.mjs} +3 -36
  65. package/dist/{feedback-DL4T5oIO.mjs → cli/feedback.mjs} +1 -1
  66. package/dist/cli/git-dates.mjs +35 -0
  67. package/dist/cli/golden-evaluations.mjs +52 -0
  68. package/dist/cli/index.d.mts +2 -3
  69. package/dist/cli/index.mjs +38 -38
  70. package/dist/{init-K0LmXDZ5.mjs → cli/init.mjs} +3 -3
  71. package/dist/{mcp-iLCmnPJI.mjs → cli/mcp.mjs} +7 -19
  72. package/dist/{openapi-diff-HcpUNjA-.mjs → cli/openapi-diff.mjs} +2 -7
  73. package/dist/{openapi-sdk-BQKC6H-_.mjs → cli/openapi-sdk.mjs} +2 -7
  74. package/dist/{openapi-source-DK6ts_Bk.mjs → cli/openapi-source.mjs} +2 -2
  75. package/dist/{package-version-HJhYeq4M.mjs → cli/package-version.mjs} +2 -2
  76. package/dist/{propose-JmUv_BTt.mjs → cli/propose.mjs} +1 -1
  77. package/dist/{review-C6EmbV0l.mjs → cli/review.mjs} +16 -15
  78. package/dist/{robots-DteZB8vl.mjs → cli/robots.mjs} +3 -7
  79. package/dist/{search-Bhuv_YsL.mjs → cli/search.mjs} +7 -20
  80. package/dist/{sitemap-DW5LDKDa.mjs → cli/sitemap.mjs} +7 -42
  81. package/dist/{skills-BAPQLSCm.mjs → cli/skills.mjs} +5 -19
  82. package/dist/{templates-BuQ8YsGv.mjs → cli/templates.mjs} +1 -1
  83. package/dist/{upgrade-DlQMOFV1.mjs → cli/upgrade.mjs} +2 -2
  84. package/dist/{utils-C7KDrPpA.mjs → cli/utils.mjs} +1 -1
  85. package/dist/client/react.d.mts +2 -18
  86. package/dist/client/react.mjs +1 -157
  87. package/dist/{cloud-analytics-D14HplI7.mjs → cloud-analytics.mjs} +1 -1
  88. package/dist/{cloud-ask-ai-BrsTXQf6.d.mts → cloud-ask-ai.d.mts} +2 -2
  89. package/dist/{cloud-ask-ai-BqKhjpS5.mjs → cloud-ask-ai.mjs} +3 -3
  90. package/dist/code-blocks.d.mts +51 -0
  91. package/dist/{code-blocks-GYdvS3BH.mjs → code-blocks.mjs} +2 -2
  92. package/dist/code-group-mdx.d.mts +11 -0
  93. package/dist/code-group-mdx.mjs +57 -0
  94. package/dist/content-change-hydration.d.mts +87 -0
  95. package/dist/{openapi-mcp-BIOTLiA7.mjs → content-change-hydration.mjs} +5 -210
  96. package/dist/content-changes.d.mts +47 -0
  97. package/dist/content-changes.mjs +216 -0
  98. package/dist/create-theme.d.mts +48 -0
  99. package/dist/create-theme.mjs +57 -0
  100. package/dist/date.d.mts +5 -0
  101. package/dist/date.mjs +17 -0
  102. package/dist/define-docs.d.mts +9 -0
  103. package/dist/define-docs.mjs +46 -0
  104. package/dist/docs-cloud-client.d.mts +18 -0
  105. package/dist/docs-cloud-client.mjs +161 -0
  106. package/dist/docs-cloud-server.d.mts +2 -2
  107. package/dist/docs-cloud-server.mjs +2 -3
  108. package/dist/heading-toc.d.mts +10 -0
  109. package/dist/heading-toc.mjs +23 -0
  110. package/dist/http-body.d.mts +14 -0
  111. package/dist/{http-body-DkAPk6D5.mjs → http-body.mjs} +1 -1
  112. package/dist/http-cache.d.mts +25 -0
  113. package/dist/http-cache.mjs +140 -0
  114. package/dist/http-link.mjs +81 -0
  115. package/dist/i18n.d.mts +18 -0
  116. package/dist/{i18n-B1gJ9EW0.mjs → i18n.mjs} +1 -1
  117. package/dist/index.d.mts +42 -674
  118. package/dist/index.mjs +40 -14
  119. package/dist/markdown-rendering.mjs +1 -1
  120. package/dist/markdown-section-cache.mjs +49 -0
  121. package/dist/markdown-sections.d.mts +47 -0
  122. package/dist/{markdown-sections-9Oxr33b-.mjs → markdown-sections.mjs} +29 -703
  123. package/dist/mcp-auth.d.mts +14 -0
  124. package/dist/mcp-auth.mjs +99 -0
  125. package/dist/mcp.d.mts +5 -3
  126. package/dist/mcp.mjs +21 -9
  127. package/dist/mdx.d.mts +6 -0
  128. package/dist/mdx.mjs +7 -0
  129. package/dist/metadata.d.mts +60 -0
  130. package/dist/{metadata-BOHn0Y5K.mjs → metadata.mjs} +2 -2
  131. package/dist/native-api-reference.mjs +968 -0
  132. package/dist/okf.d.mts +42 -0
  133. package/dist/okf.mjs +145 -0
  134. package/dist/openapi-contract.mjs +154 -0
  135. package/dist/{openapi-mcp-node-C4jUpZG6.mjs → openapi-mcp-node.mjs} +1 -1
  136. package/dist/openapi-mcp.d.mts +26 -0
  137. package/dist/openapi-mcp.mjs +132 -0
  138. package/dist/openapi-operations.d.mts +71 -0
  139. package/dist/{openapi-operations-DFpaqOqA.mjs → openapi-operations.mjs} +1 -1
  140. package/dist/openapi-overlays.mjs +221 -0
  141. package/dist/openapi-references.mjs +233 -0
  142. package/dist/pagination.d.mts +7 -0
  143. package/dist/pagination.mjs +100 -0
  144. package/dist/prompt-references.d.mts +12 -0
  145. package/dist/prompt-references.mjs +132 -0
  146. package/dist/prompt-utils.d.mts +36 -0
  147. package/dist/{prompt-utils-B5g-bv7o.mjs → prompt-utils.mjs} +1 -57
  148. package/dist/reading-time.d.mts +23 -0
  149. package/dist/reading-time.mjs +58 -0
  150. package/dist/related.d.mts +7 -0
  151. package/dist/related.mjs +50 -0
  152. package/dist/retrieval-digest.d.mts +16 -0
  153. package/dist/{retrieval-digest-CT-eIEcp.mjs → retrieval-digest.mjs} +1 -1
  154. package/dist/review.d.mts +69 -0
  155. package/dist/review.mjs +562 -0
  156. package/dist/robots.d.mts +54 -0
  157. package/dist/{robots-BYJAVeI6.mjs → robots.mjs} +5 -3
  158. package/dist/runtime.d.mts +3 -3
  159. package/dist/runtime.mjs +3 -9
  160. package/dist/search.d.mts +210 -0
  161. package/dist/search.mjs +3401 -0
  162. package/dist/server.d.mts +22 -198
  163. package/dist/server.mjs +21 -19
  164. package/dist/sidebar.d.mts +15 -0
  165. package/dist/sidebar.mjs +73 -0
  166. package/dist/sitemap-server.d.mts +7 -0
  167. package/dist/{sitemap-server-Lg3YhUx4.mjs → sitemap-server.mjs} +2 -2
  168. package/dist/{sitemap-Cl8vrixd.d.mts → sitemap.d.mts} +3 -3
  169. package/dist/sitemap.mjs +254 -0
  170. package/dist/{standards-discovery-BHPc7YIX.d.mts → standards-discovery.d.mts} +2 -2
  171. package/dist/{standards-discovery-sSEojU80.mjs → standards-discovery.mjs} +3 -139
  172. package/dist/telemetry-runtime.d.mts +42 -0
  173. package/dist/telemetry-runtime.mjs +238 -0
  174. package/dist/telemetry.d.mts +15 -0
  175. package/dist/telemetry.mjs +117 -0
  176. package/dist/{types-BJFeMXWZ.d.mts → types.d.mts} +3 -2
  177. package/dist/urls.d.mts +7 -0
  178. package/dist/urls.mjs +21 -0
  179. package/dist/utils.d.mts +8 -0
  180. package/dist/utils.mjs +22 -0
  181. package/package.json +21 -3
  182. package/dist/agent-DkAidqtV.mjs +0 -9026
  183. package/dist/api-reference-BYee4zMo.mjs +0 -3046
  184. package/dist/prompt-references-DMgbu_dz.mjs +0 -1082
  185. package/dist/retrieval-digest-AOx2-LbC.d.mts +0 -367
  186. package/dist/sidebar-CFHBj29f.mjs +0 -421
  187. package/dist/sidebar-CMPbVfGP.d.mts +0 -63
  188. /package/dist/{openapi-CfCzX_a1.mjs → cli/openapi.mjs} +0 -0
@@ -0,0 +1,254 @@
1
+ import { resolveDocsDiscoveryApiRoute } from "./standards-discovery.mjs";
2
+
3
+ //#region src/sitemap.ts
4
+ const DEFAULT_SITEMAP_XML_ROUTE = "/sitemap.xml";
5
+ const DEFAULT_SITEMAP_MD_ROUTE = "/sitemap.md";
6
+ const DEFAULT_SITEMAP_MD_DOCS_ROUTE = "/docs/sitemap.md";
7
+ const DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE = "/.well-known/sitemap.md";
8
+ const DEFAULT_SITEMAP_MANIFEST_PATH = ".farming-labs/sitemap-manifest.json";
9
+ function normalizeUrlPath(value) {
10
+ const normalized = value.replace(/\/+/g, "/");
11
+ if (normalized === "/") return normalized;
12
+ return normalized.replace(/\/+$/, "");
13
+ }
14
+ function normalizeRoutePrefix(value) {
15
+ if (!value) return "";
16
+ const normalized = normalizeUrlPath(`/${value.replace(/^\/+|\/+$/g, "")}`);
17
+ return normalized === "/" ? "" : normalized;
18
+ }
19
+ function joinRoute(prefix, route) {
20
+ return normalizeUrlPath(`${prefix}/${route.replace(/^\/+/, "")}`);
21
+ }
22
+ function normalizeDateOnly(value) {
23
+ if (!value) return void 0;
24
+ const trimmed = value.trim();
25
+ if (!trimmed) return void 0;
26
+ const dateOnly = trimmed.match(/^(\d{4}-\d{2}-\d{2})/);
27
+ if (dateOnly) return dateOnly[1];
28
+ const parsed = new Date(trimmed);
29
+ if (Number.isNaN(parsed.getTime())) return void 0;
30
+ return parsed.toISOString().slice(0, 10);
31
+ }
32
+ function normalizeBaseUrl(value) {
33
+ if (!value) return void 0;
34
+ return value.trim().replace(/\/+$/, "") || void 0;
35
+ }
36
+ function isEnabledObject(config) {
37
+ if (config === false) return false;
38
+ if (config === void 0) return true;
39
+ if (config === true) return true;
40
+ return config.enabled !== false;
41
+ }
42
+ function resolveDocsSitemapConfig(sitemap, defaults = {}) {
43
+ const objectConfig = sitemap && typeof sitemap === "object" ? sitemap : {};
44
+ const routePrefix = normalizeRoutePrefix(objectConfig.routePrefix);
45
+ const xmlConfig = objectConfig.xml;
46
+ const markdownConfig = objectConfig.markdown;
47
+ const xmlEnabled = xmlConfig === false ? false : typeof xmlConfig === "object" ? xmlConfig.enabled ?? true : true;
48
+ const markdownEnabled = markdownConfig === false ? false : typeof markdownConfig === "object" ? markdownConfig.enabled ?? true : true;
49
+ return {
50
+ enabled: isEnabledObject(sitemap),
51
+ routePrefix,
52
+ baseUrl: normalizeBaseUrl(objectConfig.baseUrl ?? defaults.baseUrl),
53
+ manifestPath: objectConfig.manifestPath ?? DEFAULT_SITEMAP_MANIFEST_PATH,
54
+ xml: {
55
+ enabled: xmlEnabled,
56
+ includeLastmod: typeof xmlConfig === "object" ? xmlConfig.includeLastmod ?? true : true,
57
+ route: joinRoute(routePrefix, DEFAULT_SITEMAP_XML_ROUTE)
58
+ },
59
+ markdown: {
60
+ enabled: markdownEnabled,
61
+ includeDescriptions: typeof markdownConfig === "object" ? markdownConfig.includeDescriptions ?? true : true,
62
+ includeLastmod: typeof markdownConfig === "object" ? markdownConfig.includeLastmod ?? true : true,
63
+ linkTarget: typeof markdownConfig === "object" ? markdownConfig.linkTarget ?? "both" : "both",
64
+ route: joinRoute(routePrefix, DEFAULT_SITEMAP_MD_ROUTE),
65
+ docsRoute: routePrefix ? void 0 : DEFAULT_SITEMAP_MD_DOCS_ROUTE,
66
+ wellKnownRoute: joinRoute(routePrefix, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE)
67
+ }
68
+ };
69
+ }
70
+ function resolveDocsSitemapRequest(url, sitemap, options = {}) {
71
+ const pathname = normalizeUrlPath(url.pathname);
72
+ const format = url.searchParams.get("format")?.trim();
73
+ if (pathname === resolveDocsDiscoveryApiRoute(options.apiRoute)) {
74
+ if (format === "sitemap-xml") return "xml";
75
+ if (format === "sitemap-md" || format === "sitemap-markdown") return "markdown";
76
+ }
77
+ const resolved = resolveDocsSitemapConfig(sitemap);
78
+ if (!resolved.enabled) return null;
79
+ if (resolved.xml.enabled && pathname === resolved.xml.route) return "xml";
80
+ if (resolved.markdown.enabled && (pathname === resolved.markdown.route || pathname === resolved.markdown.docsRoute || pathname === resolved.markdown.wellKnownRoute)) return "markdown";
81
+ return null;
82
+ }
83
+ function toDocsSitemapMarkdownUrl(url) {
84
+ const normalized = normalizeUrlPath(url);
85
+ return normalized.endsWith(".md") ? normalized : `${normalized}.md`;
86
+ }
87
+ function absolutizeUrl(baseUrl, url) {
88
+ if (/^https?:\/\//i.test(url)) return url;
89
+ const base = normalizeBaseUrl(baseUrl);
90
+ return base ? `${base}${url.startsWith("/") ? url : `/${url}`}` : url;
91
+ }
92
+ function escapeXml(value) {
93
+ return value.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
94
+ }
95
+ function hashString(value) {
96
+ let hash = 14695981039346656037n;
97
+ const bytes = new TextEncoder().encode(value);
98
+ for (const byte of bytes) {
99
+ hash ^= BigInt(byte);
100
+ hash = BigInt.asUintN(64, hash * 1099511628211n);
101
+ }
102
+ return `"fnv1a64-${hash.toString(16).padStart(16, "0")}"`;
103
+ }
104
+ function newestLastmod(pages) {
105
+ let newest;
106
+ for (const page of pages) {
107
+ const date = normalizeDateOnly(page.lastmod);
108
+ if (!date) continue;
109
+ if (!newest || date > newest) newest = date;
110
+ }
111
+ return newest;
112
+ }
113
+ function titleize(value) {
114
+ return value.replace(/-/g, " ").replace(/\b\w/g, (char) => char.toUpperCase());
115
+ }
116
+ function sitemapSectionName(entry, pageUrl) {
117
+ const normalizedEntry = `/${entry.replace(/^\/+|\/+$/g, "") || "docs"}`;
118
+ const normalizedUrl = normalizeUrlPath(pageUrl);
119
+ if (normalizedUrl === normalizedEntry) return "Overview";
120
+ const firstSegment = (normalizedUrl.startsWith(`${normalizedEntry}/`) ? normalizedUrl.slice(normalizedEntry.length + 1) : normalizedUrl.replace(/^\/+/, "")).split("/").filter(Boolean)[0];
121
+ return firstSegment ? titleize(firstSegment) : "Pages";
122
+ }
123
+ function buildDocsSitemapManifest(options) {
124
+ const baseUrl = normalizeBaseUrl(options.baseUrl);
125
+ const seen = /* @__PURE__ */ new Set();
126
+ const pages = [];
127
+ for (const page of options.pages) {
128
+ const url = normalizeUrlPath(page.url);
129
+ if (seen.has(url)) continue;
130
+ seen.add(url);
131
+ const resolvedLastmod = options.resolveLastmod?.(page);
132
+ const fallbackLastmod = normalizeDateOnly(page.lastmod ?? page.lastModified);
133
+ const lastmod = normalizeDateOnly(resolvedLastmod?.lastmod) ?? fallbackLastmod;
134
+ pages.push({
135
+ url,
136
+ absoluteUrl: absolutizeUrl(baseUrl, url),
137
+ markdownUrl: page.markdownUrl ?? toDocsSitemapMarkdownUrl(url),
138
+ title: page.title,
139
+ description: page.description,
140
+ sourcePath: page.sourcePath,
141
+ lastmod,
142
+ lastmodSource: resolvedLastmod?.lastmodSource ?? (lastmod ? "unknown" : void 0),
143
+ related: page.related?.map((link) => link.href)
144
+ });
145
+ }
146
+ pages.sort((left, right) => left.url.localeCompare(right.url));
147
+ return {
148
+ version: 1,
149
+ generatedAt: options.generatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
150
+ baseUrl,
151
+ entry: options.entry ?? "docs",
152
+ siteTitle: options.siteTitle,
153
+ pages
154
+ };
155
+ }
156
+ function renderDocsSitemapXml(manifest, options = {}) {
157
+ const baseUrl = normalizeBaseUrl(options.baseUrl ?? manifest.baseUrl);
158
+ const includeLastmod = options.includeLastmod ?? true;
159
+ const lines = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>", "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">"];
160
+ for (const page of manifest.pages) {
161
+ lines.push(" <url>");
162
+ lines.push(` <loc>${escapeXml(page.absoluteUrl ?? absolutizeUrl(baseUrl, page.url))}</loc>`);
163
+ const lastmod = normalizeDateOnly(page.lastmod);
164
+ if (includeLastmod && lastmod) lines.push(` <lastmod>${lastmod}</lastmod>`);
165
+ lines.push(" </url>");
166
+ }
167
+ lines.push("</urlset>");
168
+ return `${lines.join("\n")}\n`;
169
+ }
170
+ function renderDocsSitemapMarkdown(manifest, options = {}) {
171
+ const siteTitle = manifest.siteTitle ?? "Documentation";
172
+ const includeDescriptions = options.includeDescriptions ?? true;
173
+ const includeLastmod = options.includeLastmod ?? true;
174
+ const linkTarget = options.linkTarget ?? "both";
175
+ const lines = [`# ${siteTitle} Sitemap`, ""];
176
+ const baseUrl = normalizeBaseUrl(options.baseUrl ?? manifest.baseUrl);
177
+ if (baseUrl) lines.push(`Base URL: ${baseUrl}`);
178
+ lines.push(`Docs entry: /${manifest.entry.replace(/^\/+|\/+$/g, "") || "docs"}`);
179
+ lines.push(`Generated: ${normalizeDateOnly(manifest.generatedAt) ?? manifest.generatedAt}`, "");
180
+ const groups = /* @__PURE__ */ new Map();
181
+ for (const page of manifest.pages) {
182
+ const sectionName = sitemapSectionName(manifest.entry, page.url);
183
+ groups.set(sectionName, [...groups.get(sectionName) ?? [], page]);
184
+ }
185
+ for (const [sectionName, pages] of groups) {
186
+ lines.push(`## ${sectionName}`, "");
187
+ for (const page of pages) {
188
+ const primaryHref = linkTarget === "markdown" ? page.markdownUrl : page.url;
189
+ lines.push(`- [${page.title}](${primaryHref})`);
190
+ if (linkTarget === "both" || linkTarget === "markdown") lines.push(` Markdown: ${page.markdownUrl}`);
191
+ if (includeDescriptions && page.description) lines.push(` Description: ${page.description}`);
192
+ const lastmod = normalizeDateOnly(page.lastmod);
193
+ if (includeLastmod && lastmod) lines.push(` Last updated: ${lastmod}`);
194
+ if (page.related && page.related.length > 0) lines.push(` Related: ${page.related.join(", ")}`);
195
+ lines.push("");
196
+ }
197
+ }
198
+ return lines.join("\n").replace(/\n{3,}/g, "\n\n");
199
+ }
200
+ function readDocsSitemapManifestFromContentMap(contentMap) {
201
+ if (!contentMap) return null;
202
+ const raw = contentMap[`/${DEFAULT_SITEMAP_MANIFEST_PATH}`] ?? contentMap[DEFAULT_SITEMAP_MANIFEST_PATH];
203
+ if (!raw) return null;
204
+ try {
205
+ return JSON.parse(raw);
206
+ } catch {
207
+ return null;
208
+ }
209
+ }
210
+ function resolveDocsSitemapPageLastmod(manifest, url) {
211
+ if (!manifest) return void 0;
212
+ const normalizedUrl = normalizeUrlPath(url);
213
+ return normalizeDateOnly(manifest.pages.find((entry) => normalizeUrlPath(entry.url) === normalizedUrl)?.lastmod);
214
+ }
215
+ function createDocsSitemapResponse({ request, apiRoute, sitemap, entry = "docs", siteTitle, baseUrl, pages, manifest }) {
216
+ const url = new URL(request.url);
217
+ const format = resolveDocsSitemapRequest(url, sitemap, { apiRoute });
218
+ if (!format) return null;
219
+ const resolved = resolveDocsSitemapConfig(sitemap, { baseUrl });
220
+ if (!resolved.enabled) return null;
221
+ if (format === "xml" && !resolved.xml.enabled) return null;
222
+ if (format === "markdown" && !resolved.markdown.enabled) return null;
223
+ const nextManifest = manifest ?? buildDocsSitemapManifest({
224
+ pages,
225
+ entry,
226
+ siteTitle,
227
+ baseUrl: resolved.baseUrl ?? url.origin
228
+ });
229
+ const responseBaseUrl = resolved.baseUrl ?? nextManifest.baseUrl ?? url.origin;
230
+ const body = format === "xml" ? renderDocsSitemapXml(nextManifest, {
231
+ baseUrl: responseBaseUrl,
232
+ includeLastmod: resolved.xml.includeLastmod
233
+ }) : renderDocsSitemapMarkdown(nextManifest, {
234
+ baseUrl: responseBaseUrl,
235
+ includeDescriptions: resolved.markdown.includeDescriptions,
236
+ includeLastmod: resolved.markdown.includeLastmod,
237
+ linkTarget: resolved.markdown.linkTarget
238
+ });
239
+ const headers = new Headers({
240
+ "Content-Type": format === "xml" ? "application/xml; charset=utf-8" : "text/markdown; charset=utf-8",
241
+ "Cache-Control": "public, max-age=0, s-maxage=3600, stale-while-revalidate=86400",
242
+ ETag: hashString(body)
243
+ });
244
+ const lastModified = newestLastmod(nextManifest.pages);
245
+ if (lastModified) headers.set("Last-Modified", (/* @__PURE__ */ new Date(`${lastModified}T00:00:00.000Z`)).toUTCString());
246
+ if (request.headers.get("if-none-match") === headers.get("ETag")) return new Response(null, {
247
+ status: 304,
248
+ headers
249
+ });
250
+ return new Response(body, { headers });
251
+ }
252
+
253
+ //#endregion
254
+ export { DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_DOCS_ROUTE, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, buildDocsSitemapManifest, createDocsSitemapResponse, readDocsSitemapManifestFromContentMap, renderDocsSitemapMarkdown, renderDocsSitemapXml, resolveDocsSitemapConfig, resolveDocsSitemapPageLastmod, resolveDocsSitemapRequest, toDocsSitemapMarkdownUrl };
@@ -1,4 +1,4 @@
1
- import { F as DocsAgentA2ASecurityScheme, L as DocsAgentA2ASkill, N as DocsAgentA2AProtocolBinding, P as DocsAgentA2ASecurityRequirement, b as DocsAgentA2AConfig, y as DocsAgentA2ACapabilities } from "./types-BJFeMXWZ.mjs";
1
+ import { DocsAgentA2ACapabilities, DocsAgentA2AConfig, DocsAgentA2AProtocolBinding, DocsAgentA2ASecurityRequirement, DocsAgentA2ASecurityScheme, DocsAgentA2ASkill } from "./types.mjs";
2
2
 
3
3
  //#region src/standards-discovery.d.ts
4
4
  declare const DEFAULT_API_CATALOG_ROUTE = "/.well-known/api-catalog";
@@ -248,4 +248,4 @@ declare function createDocsStandardsResponse({
248
248
  lastModified
249
249
  }: CreateDocsStandardsResponseOptions): Promise<Response | null>;
250
250
  //#endregion
251
- export { resolveDocsDiscoveryApiRoute as $, DocsAgentSkillIndexEntry as A, DocsPublishedAgentSkillFile as B, DOCS_AGENT_MANIFEST_FORMAT as C, DocsA2AAgentCard as D, DOCS_AGENT_MANIFEST_VERSION as E, DocsApiCatalogLinkTarget as F, buildDocsA2AAgentCard as G, DocsStandardsDiscoveryRequest as H, DocsApiCatalogOpenApiDefinition as I, buildDocsLegacySkillsIndex as J, buildDocsAgentSkillsIndex as K, DocsApiCatalogOptions as L, DocsApiCatalog as M, DocsApiCatalogApiTarget as N, DocsA2AAgentCardOptions as O, DocsApiCatalogLinkContext as P, isDocsStandardsDiscoveryRequest as Q, DocsDiscoveryApiRouteOptions as R, DEFAULT_LEGACY_SKILLS_ROUTE_PREFIX as S, DOCS_AGENT_MANIFEST_SCHEMA_URI as T, DocsStandardsDiscoveryRouteOptions as U, DocsPublishedAgentSkillOptions as V, appendDocsDiscoveryLinkHeader as W, getDocsAgentManifestLinkHeader as X, createDocsStandardsResponse as Y, getDocsDiscoveryLinkHeader as Z, DEFAULT_AGENT_SKILL_RESOURCE_FORMAT as _, DEFAULT_A2A_AGENT_CARD_FORMAT as a, DEFAULT_LEGACY_SKILLS_INDEX_FORMAT as b, DEFAULT_A2A_PROTOCOL_VERSION as c, DEFAULT_AGENT_SKILLS_INDEX_ROUTE as d, resolveDocsPublishedAgentSkill as et, DEFAULT_AGENT_SKILLS_ROUTE_PATTERN as f, DEFAULT_AGENT_SKILL_FORMAT as g, DEFAULT_AGENT_SKILL_FILE_FORMAT as h, CreateDocsStandardsResponseOptions as i, DocsAgentSkillsIndex as j, DocsA2AAgentInterface as k, DEFAULT_AGENT_SKILLS_ARCHIVE_ROUTE_PATTERN as l, DEFAULT_AGENT_SKILL_ARCHIVE_FORMAT as m, API_CATALOG_MEDIA_TYPE as n, sha256DocsDiscoveryContent as nt, DEFAULT_A2A_AGENT_CARD_ROUTE as o, DEFAULT_AGENT_SKILLS_ROUTE_PREFIX as p, buildDocsApiCatalog as q, API_CATALOG_PROFILE_URI as r, DEFAULT_A2A_PROTOCOL_BINDING as s, AGENT_SKILLS_DISCOVERY_SCHEMA_URI as t, resolveDocsStandardsDiscoveryRequest as tt, DEFAULT_AGENT_SKILLS_INDEX_FORMAT as u, DEFAULT_API_CATALOG_FORMAT as v, DOCS_AGENT_MANIFEST_SCHEMA_MEDIA_TYPE as w, DEFAULT_LEGACY_SKILLS_INDEX_ROUTE as x, DEFAULT_API_CATALOG_ROUTE as y, DocsPublishedAgentSkill as z };
251
+ export { AGENT_SKILLS_DISCOVERY_SCHEMA_URI, API_CATALOG_MEDIA_TYPE, API_CATALOG_PROFILE_URI, CreateDocsStandardsResponseOptions, DEFAULT_A2A_AGENT_CARD_FORMAT, DEFAULT_A2A_AGENT_CARD_ROUTE, DEFAULT_A2A_PROTOCOL_BINDING, DEFAULT_A2A_PROTOCOL_VERSION, DEFAULT_AGENT_SKILLS_ARCHIVE_ROUTE_PATTERN, DEFAULT_AGENT_SKILLS_INDEX_FORMAT, DEFAULT_AGENT_SKILLS_INDEX_ROUTE, DEFAULT_AGENT_SKILLS_ROUTE_PATTERN, DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, DEFAULT_AGENT_SKILL_ARCHIVE_FORMAT, DEFAULT_AGENT_SKILL_FILE_FORMAT, DEFAULT_AGENT_SKILL_FORMAT, DEFAULT_AGENT_SKILL_RESOURCE_FORMAT, DEFAULT_API_CATALOG_FORMAT, DEFAULT_API_CATALOG_ROUTE, DEFAULT_LEGACY_SKILLS_INDEX_FORMAT, DEFAULT_LEGACY_SKILLS_INDEX_ROUTE, DEFAULT_LEGACY_SKILLS_ROUTE_PREFIX, DOCS_AGENT_MANIFEST_FORMAT, DOCS_AGENT_MANIFEST_SCHEMA_MEDIA_TYPE, DOCS_AGENT_MANIFEST_SCHEMA_URI, DOCS_AGENT_MANIFEST_VERSION, DocsA2AAgentCard, DocsA2AAgentCardOptions, DocsA2AAgentInterface, DocsAgentSkillIndexEntry, DocsAgentSkillsIndex, DocsApiCatalog, DocsApiCatalogApiTarget, DocsApiCatalogLinkContext, DocsApiCatalogLinkTarget, DocsApiCatalogOpenApiDefinition, DocsApiCatalogOptions, DocsDiscoveryApiRouteOptions, DocsLegacySkillsIndex, DocsPublishedAgentSkill, DocsPublishedAgentSkillFile, DocsPublishedAgentSkillOptions, DocsStandardsDiscoveryRequest, DocsStandardsDiscoveryRouteOptions, appendDocsDiscoveryLinkHeader, buildDocsA2AAgentCard, buildDocsAgentSkillsIndex, buildDocsApiCatalog, buildDocsLegacySkillsIndex, createDocsStandardsResponse, getDocsAgentManifestLinkHeader, getDocsDiscoveryLinkHeader, isDocsStandardsDiscoveryRequest, resolveDocsDiscoveryApiRoute, resolveDocsPublishedAgentSkill, resolveDocsStandardsDiscoveryRequest, sha256DocsDiscoveryContent };
@@ -1,143 +1,7 @@
1
- import { i as sha256DocsContent } from "./retrieval-digest-CT-eIEcp.mjs";
1
+ import { sha256DocsContent } from "./retrieval-digest.mjs";
2
+ import { createDocsCacheableResponse } from "./http-cache.mjs";
2
3
  import { parseDocsAgentSkillFrontmatter, validateDocsAgentSkillFrontmatter } from "./agent-skills-spec.mjs";
3
4
 
4
- //#region src/http-cache.ts
5
- const BASE64_ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
6
- const MAX_CACHED_TEXT_REPRESENTATIONS = 64;
7
- const MAX_CACHED_TEXT_CHARACTERS = 8 * 1024 * 1024;
8
- const textValidatorCache = /* @__PURE__ */ new Map();
9
- let cachedTextCharacters = 0;
10
- function encodeBase64(bytes) {
11
- let encoded = "";
12
- for (let offset = 0; offset < bytes.length; offset += 3) {
13
- const first = bytes[offset];
14
- const second = bytes[offset + 1];
15
- const third = bytes[offset + 2];
16
- const value = first << 16 | (second ?? 0) << 8 | (third ?? 0);
17
- encoded += BASE64_ALPHABET[value >>> 18 & 63];
18
- encoded += BASE64_ALPHABET[value >>> 12 & 63];
19
- encoded += second === void 0 ? "=" : BASE64_ALPHABET[value >>> 6 & 63];
20
- encoded += third === void 0 ? "=" : BASE64_ALPHABET[value & 63];
21
- }
22
- return encoded;
23
- }
24
- function sha256HexBytes(sha256) {
25
- if (!/^[a-f\d]{64}$/iu.test(sha256)) throw new Error("A SHA-256 digest must contain exactly 64 hexadecimal characters.");
26
- const bytes = new Uint8Array(32);
27
- for (let index = 0; index < bytes.length; index += 1) bytes[index] = Number.parseInt(sha256.slice(index * 2, index * 2 + 2), 16);
28
- return bytes;
29
- }
30
- /** Format an RFC 9530 Content-Digest field from a SHA-256 hex digest. */
31
- function formatDocsContentDigest(sha256) {
32
- return `sha-256=:${encodeBase64(sha256HexBytes(sha256))}:`;
33
- }
34
- function resolveDocsContentValidators(content, suppliedSha256) {
35
- if (suppliedSha256) return {
36
- sha256: suppliedSha256,
37
- contentDigest: formatDocsContentDigest(suppliedSha256)
38
- };
39
- const cached = typeof content === "string" ? textValidatorCache.get(content) : void 0;
40
- if (cached) {
41
- if (typeof content === "string") {
42
- textValidatorCache.delete(content);
43
- textValidatorCache.set(content, cached);
44
- }
45
- return cached;
46
- }
47
- const sha256 = sha256DocsContent(content);
48
- const validators = {
49
- sha256,
50
- contentDigest: formatDocsContentDigest(sha256)
51
- };
52
- if (typeof content !== "string") return validators;
53
- if (content.length <= MAX_CACHED_TEXT_CHARACTERS) {
54
- textValidatorCache.set(content, validators);
55
- cachedTextCharacters += content.length;
56
- while (textValidatorCache.size > MAX_CACHED_TEXT_REPRESENTATIONS || cachedTextCharacters > MAX_CACHED_TEXT_CHARACTERS) {
57
- const oldest = textValidatorCache.keys().next().value;
58
- if (oldest === void 0) break;
59
- textValidatorCache.delete(oldest);
60
- cachedTextCharacters -= oldest.length;
61
- }
62
- }
63
- return validators;
64
- }
65
- /** Normalize an exact source timestamp for Last-Modified. */
66
- function resolveDocsHttpDate(value) {
67
- if (!value) return void 0;
68
- if (typeof value === "string" && !/(?:T|\s)\d{2}:\d{2}(?::\d{2}(?:\.\d+)?)?/.test(value.trim())) return;
69
- const date = value instanceof Date ? value : new Date(value);
70
- if (Number.isNaN(date.getTime())) return void 0;
71
- return date.toUTCString();
72
- }
73
- function normalizeEtag(value) {
74
- return value.trim().replace(/^W\//iu, "");
75
- }
76
- /** Match strong or weak If-None-Match validators for a GET/HEAD representation. */
77
- function requestMatchesDocsEtag(request, etag) {
78
- const header = request.headers.get("if-none-match");
79
- if (!header) return false;
80
- if (header.trim() === "*") return true;
81
- const expected = normalizeEtag(etag);
82
- return header.split(",").some((candidate) => normalizeEtag(candidate) === expected);
83
- }
84
- /** Apply If-Modified-Since only when the stronger If-None-Match validator is absent. */
85
- function requestHasFreshDocsDate(request, lastModified) {
86
- const method = request.method.toUpperCase();
87
- if (method !== "GET" && method !== "HEAD") return false;
88
- if (!lastModified || request.headers.has("if-none-match")) return false;
89
- const ifModifiedSince = request.headers.get("if-modified-since");
90
- if (!ifModifiedSince) return false;
91
- const resourceTime = Date.parse(lastModified);
92
- const requestTime = Date.parse(ifModifiedSince);
93
- return Number.isFinite(resourceTime) && Number.isFinite(requestTime) && Math.floor(resourceTime / 1e3) <= Math.floor(requestTime / 1e3);
94
- }
95
- function exposeValidatorHeaders(headers) {
96
- if (!headers.has("Access-Control-Allow-Origin")) return;
97
- const exposed = new Set((headers.get("Access-Control-Expose-Headers") ?? "").split(",").map((value) => value.trim()).filter(Boolean));
98
- exposed.add("Content-Digest");
99
- exposed.add("ETag");
100
- if (headers.has("Last-Modified")) exposed.add("Last-Modified");
101
- headers.set("Access-Control-Expose-Headers", [...exposed].join(", "));
102
- }
103
- /**
104
- * Build a byte-stable GET/HEAD response with HTTP validators and RFC 9530 integrity metadata.
105
- */
106
- function createDocsCacheableResponse(options) {
107
- const method = options.request.method.toUpperCase();
108
- const isSafeRetrieval = method === "GET" || method === "HEAD";
109
- const status = options.status ?? 200;
110
- const canApplyConditionalRequest = status === 200;
111
- const { sha256, contentDigest } = resolveDocsContentValidators(options.content, options.sha256);
112
- const etag = `"${sha256}"`;
113
- const lastModified = resolveDocsHttpDate(options.lastModified);
114
- const headers = new Headers(options.headers);
115
- headers.set("Content-Digest", contentDigest);
116
- headers.set("ETag", etag);
117
- if (lastModified) headers.set("Last-Modified", lastModified);
118
- exposeValidatorHeaders(headers);
119
- if (canApplyConditionalRequest && requestMatchesDocsEtag(options.request, etag)) {
120
- headers.delete("Content-Type");
121
- return new Response(null, {
122
- status: isSafeRetrieval ? 304 : 412,
123
- headers
124
- });
125
- }
126
- if (canApplyConditionalRequest && isSafeRetrieval && requestHasFreshDocsDate(options.request, lastModified)) {
127
- headers.delete("Content-Type");
128
- return new Response(null, {
129
- status: 304,
130
- headers
131
- });
132
- }
133
- const body = method === "HEAD" ? null : typeof options.content === "string" ? options.content : options.content;
134
- return new Response(body, {
135
- status,
136
- headers
137
- });
138
- }
139
-
140
- //#endregion
141
5
  //#region src/standards-discovery.ts
142
6
  const DEFAULT_API_CATALOG_ROUTE = "/.well-known/api-catalog";
143
7
  const DEFAULT_API_CATALOG_FORMAT = "api-catalog";
@@ -940,4 +804,4 @@ async function createDocsStandardsResponse({ request, apiCatalog, apiCatalogEnab
940
804
  }
941
805
 
942
806
  //#endregion
943
- export { buildDocsLegacySkillsIndex as A, createDocsCacheableResponse as B, DOCS_AGENT_MANIFEST_SCHEMA_MEDIA_TYPE as C, buildDocsA2AAgentCard as D, appendDocsDiscoveryLinkHeader as E, isDocsStandardsDiscoveryRequest as F, requestHasFreshDocsDate as H, resolveDocsDiscoveryApiRoute as I, resolveDocsPublishedAgentSkill as L, createDocsStandardsResponse as M, getDocsAgentManifestLinkHeader as N, buildDocsAgentSkillsIndex as O, getDocsDiscoveryLinkHeader as P, resolveDocsStandardsDiscoveryRequest as R, DOCS_AGENT_MANIFEST_FORMAT as S, DOCS_AGENT_MANIFEST_VERSION as T, requestMatchesDocsEtag as U, formatDocsContentDigest as V, resolveDocsHttpDate as W, DEFAULT_API_CATALOG_FORMAT as _, DEFAULT_A2A_AGENT_CARD_ROUTE as a, DEFAULT_LEGACY_SKILLS_INDEX_ROUTE as b, DEFAULT_AGENT_SKILLS_ARCHIVE_ROUTE_PATTERN as c, DEFAULT_AGENT_SKILLS_ROUTE_PATTERN as d, DEFAULT_AGENT_SKILLS_ROUTE_PREFIX as f, DEFAULT_AGENT_SKILL_RESOURCE_FORMAT as g, DEFAULT_AGENT_SKILL_FORMAT as h, DEFAULT_A2A_AGENT_CARD_FORMAT as i, buildDocsPublishedAgentSkill as j, buildDocsApiCatalog as k, DEFAULT_AGENT_SKILLS_INDEX_FORMAT as l, DEFAULT_AGENT_SKILL_FILE_FORMAT as m, API_CATALOG_MEDIA_TYPE as n, DEFAULT_A2A_PROTOCOL_BINDING as o, DEFAULT_AGENT_SKILL_ARCHIVE_FORMAT as p, API_CATALOG_PROFILE_URI as r, DEFAULT_A2A_PROTOCOL_VERSION as s, AGENT_SKILLS_DISCOVERY_SCHEMA_URI as t, DEFAULT_AGENT_SKILLS_INDEX_ROUTE as u, DEFAULT_API_CATALOG_ROUTE as v, DOCS_AGENT_MANIFEST_SCHEMA_URI as w, DEFAULT_LEGACY_SKILLS_ROUTE_PREFIX as x, DEFAULT_LEGACY_SKILLS_INDEX_FORMAT as y, sha256DocsDiscoveryContent as z };
807
+ export { AGENT_SKILLS_DISCOVERY_SCHEMA_URI, API_CATALOG_MEDIA_TYPE, API_CATALOG_PROFILE_URI, DEFAULT_A2A_AGENT_CARD_FORMAT, DEFAULT_A2A_AGENT_CARD_ROUTE, DEFAULT_A2A_PROTOCOL_BINDING, DEFAULT_A2A_PROTOCOL_VERSION, DEFAULT_AGENT_SKILLS_ARCHIVE_ROUTE_PATTERN, DEFAULT_AGENT_SKILLS_INDEX_FORMAT, DEFAULT_AGENT_SKILLS_INDEX_ROUTE, DEFAULT_AGENT_SKILLS_ROUTE_PATTERN, DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, DEFAULT_AGENT_SKILL_ARCHIVE_FORMAT, DEFAULT_AGENT_SKILL_FILE_FORMAT, DEFAULT_AGENT_SKILL_FORMAT, DEFAULT_AGENT_SKILL_RESOURCE_FORMAT, DEFAULT_API_CATALOG_FORMAT, DEFAULT_API_CATALOG_ROUTE, DEFAULT_LEGACY_SKILLS_INDEX_FORMAT, DEFAULT_LEGACY_SKILLS_INDEX_ROUTE, DEFAULT_LEGACY_SKILLS_ROUTE_PREFIX, DOCS_AGENT_MANIFEST_FORMAT, DOCS_AGENT_MANIFEST_SCHEMA_MEDIA_TYPE, DOCS_AGENT_MANIFEST_SCHEMA_URI, DOCS_AGENT_MANIFEST_VERSION, appendDocsDiscoveryLinkHeader, buildDocsA2AAgentCard, buildDocsAgentSkillsIndex, buildDocsApiCatalog, buildDocsLegacySkillsIndex, buildDocsPublishedAgentSkill, createDocsStandardsResponse, getDocsAgentManifestLinkHeader, getDocsDiscoveryLinkHeader, isDocsStandardsDiscoveryRequest, resolveDocsDiscoveryApiRoute, resolveDocsPublishedAgentSkill, resolveDocsStandardsDiscoveryRequest, sha256DocsDiscoveryContent };
@@ -0,0 +1,42 @@
1
+ import { DocsConfig, DocsTelemetryAgentSurface, DocsTelemetryConfig, DocsTelemetryEvent, DocsTelemetryFramework } from "./types.mjs";
2
+
3
+ //#region src/telemetry-runtime.d.ts
4
+ interface ResolvedDocsTelemetryConfig {
5
+ enabled: boolean;
6
+ endpoint?: string;
7
+ }
8
+ interface DocsTelemetryContext {
9
+ framework?: DocsTelemetryFramework;
10
+ request?: Request;
11
+ siteOrigin?: string;
12
+ properties?: Record<string, unknown>;
13
+ }
14
+ interface DocsTelemetryAgentSurfaceContext extends DocsTelemetryContext {
15
+ surface: DocsTelemetryAgentSurface;
16
+ }
17
+ interface DocsTelemetryPageViewContext {
18
+ framework?: DocsTelemetryFramework;
19
+ siteOrigin?: string;
20
+ path?: string;
21
+ locale?: string;
22
+ }
23
+ interface DocsTelemetryAgentSurfaceRequestOptions {
24
+ entry: string;
25
+ llmsTxt?: DocsConfig["llmsTxt"];
26
+ feedback?: DocsConfig["feedback"];
27
+ }
28
+ declare function resolveDocsTelemetryConfig(telemetry?: boolean | DocsTelemetryConfig): ResolvedDocsTelemetryConfig;
29
+ /** Normalize an HTTP(S) telemetry site value to its origin. */
30
+ declare function normalizeDocsTelemetryOrigin(candidate: string | undefined): string | undefined;
31
+ /** Return whether a telemetry origin points at a local development server. */
32
+ declare function isLocalDocsTelemetryOrigin(candidate: string | undefined): boolean;
33
+ declare function emitDocsTelemetryEvent(telemetry: boolean | DocsTelemetryConfig | undefined, event: DocsTelemetryEvent): Promise<void>;
34
+ /**
35
+ * Emit a privacy-preserving browser page view for the maintainer telemetry dashboard.
36
+ *
37
+ * Page views include only the public site origin, pathname, locale, framework, and package
38
+ * metadata. They never include a query string, referrer, visitor id, IP address, or user agent.
39
+ */
40
+ declare function emitDocsTelemetryPageViewEvent(telemetry: boolean | DocsTelemetryConfig | undefined, context?: DocsTelemetryPageViewContext): void;
41
+ //#endregion
42
+ export { DocsTelemetryAgentSurfaceContext, DocsTelemetryAgentSurfaceRequestOptions, DocsTelemetryContext, DocsTelemetryPageViewContext, ResolvedDocsTelemetryConfig, emitDocsTelemetryEvent, emitDocsTelemetryPageViewEvent, isLocalDocsTelemetryOrigin, normalizeDocsTelemetryOrigin, resolveDocsTelemetryConfig };