@farming-labs/docs 0.2.119 → 0.2.121
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/access.d.mts +13 -0
- package/dist/access.mjs +56 -0
- package/dist/agent-conformance.d.mts +60 -0
- package/dist/agent-conformance.mjs +538 -0
- package/dist/agent-contract.d.mts +47 -0
- package/dist/agent-contract.mjs +645 -0
- package/dist/agent-detection.d.mts +6 -0
- package/dist/agent-detection.mjs +83 -0
- package/dist/agent-evals.d.mts +224 -0
- package/dist/{agent-evals-BLNLvXbG.mjs → agent-evals.mjs} +7 -565
- package/dist/agent-feedback-evaluations-node.mjs +38 -0
- package/dist/agent-feedback-evaluations.d.mts +91 -0
- package/dist/{agent-feedback-evaluations-CcMGlgsO.mjs → agent-feedback-evaluations.mjs} +2 -2
- package/dist/agent-feedback-loop.d.mts +45 -0
- package/dist/{agent-feedback-loop-CcZL_sb1.mjs → agent-feedback-loop.mjs} +1 -1
- package/dist/agent-maintenance.d.mts +71 -0
- package/dist/{agent-maintenance-CuZ7iAKq.mjs → agent-maintenance.mjs} +1 -1
- package/dist/agent-provenance.d.mts +23 -0
- package/dist/agent-provenance.mjs +77 -0
- package/dist/agent-scope.mjs +321 -0
- package/dist/agent-skills-archive.mjs +86 -0
- package/dist/agent-skills-bundle.d.mts +1 -1
- package/dist/{agent-skills-progressive-disclosure-PjPtTYL-.mjs → agent-skills-progressive-disclosure.mjs} +2 -2
- package/dist/{agent-skills-server-CTNWr23x.d.mts → agent-skills-server.d.mts} +3 -3
- package/dist/{agent-skills-server-BC7md56k.mjs → agent-skills-server.mjs} +2 -2
- package/dist/agent-skills-vite.d.mts +3 -3
- package/dist/agent-skills-vite.mjs +1 -2
- package/dist/agent-surface-drift.mjs +236 -0
- package/dist/{golden-evaluations-CLUViycJ.mjs → agent-usefulness.mjs} +5 -290
- package/dist/{content-change-hydration-CvHJadhE.d.mts → agent.d.mts} +10 -411
- package/dist/agent.mjs +2729 -0
- package/dist/{analytics-B8RZiKUt.d.mts → analytics.d.mts} +2 -2
- package/dist/{analytics-p8Vhhu2P.mjs → analytics.mjs} +2 -2
- package/dist/{sitemap-server-C9r22_06.d.mts → api-reference.d.mts} +3 -6
- package/dist/api-reference.mjs +1481 -0
- package/dist/{audience-exposure-DBrFWULA.d.mts → audience-exposure.d.mts} +1 -1
- package/dist/audience-exposure.mjs +8 -0
- package/dist/audience.d.mts +44 -0
- package/dist/audience.mjs +1654 -0
- package/dist/authoring-mcp.d.mts +44 -0
- package/dist/{authoring-mcp-CiCUQe3o.mjs → authoring-mcp.mjs} +3 -3
- package/dist/browser.d.mts +6 -4
- package/dist/browser.mjs +6 -7
- package/dist/build.d.mts +8 -0
- package/dist/build.mjs +8 -0
- package/dist/changelog.d.mts +20 -0
- package/dist/changelog.mjs +39 -0
- package/dist/{agent-export-Cxljt6RP.mjs → cli/agent-export.mjs} +19 -45
- package/dist/{agent-CYk2DxY7.mjs → cli/agent.mjs} +6 -35
- package/dist/{agents-jtn256sz.mjs → cli/agents.mjs} +5 -18
- package/dist/cli/api-doctor.mjs +206 -0
- package/dist/{authoring-C2ymvYWl.mjs → cli/authoring.mjs} +2 -8
- package/dist/{cloud-6eKrlmKd.mjs → cli/cloud.mjs} +3 -3
- package/dist/{codeblocks-CHpgAwY-.mjs → cli/codeblocks.mjs} +2 -2
- package/dist/cli/config.d.mts +11 -0
- package/dist/{config-BZnKAj_Y.mjs → cli/config.mjs} +1 -1
- package/dist/cli/dev-banner.mjs +58 -0
- package/dist/{dev-Bnn-NUNa.mjs → cli/dev.mjs} +3 -57
- package/dist/{doctor-CUMgbglt.mjs → cli/doctor.mjs} +41 -226
- package/dist/{downgrade-CHMta85e.mjs → cli/downgrade.mjs} +2 -2
- package/dist/cli/errors.d.mts +4 -0
- package/dist/{errors-BtnVLhNF.mjs → cli/errors.mjs} +1 -1
- package/dist/{feedback-evals-DMilg9pY.mjs → cli/feedback-evals.mjs} +3 -36
- package/dist/{feedback-DL4T5oIO.mjs → cli/feedback.mjs} +1 -1
- package/dist/cli/git-dates.mjs +35 -0
- package/dist/cli/golden-evaluations.mjs +52 -0
- package/dist/cli/index.d.mts +2 -3
- package/dist/cli/index.mjs +38 -38
- package/dist/{init-K0LmXDZ5.mjs → cli/init.mjs} +3 -3
- package/dist/{mcp-Bvha6_mG.mjs → cli/mcp.mjs} +7 -19
- package/dist/{openapi-diff-BOESBfnP.mjs → cli/openapi-diff.mjs} +2 -7
- package/dist/{openapi-sdk-DJutz2AC.mjs → cli/openapi-sdk.mjs} +2 -7
- package/dist/{openapi-source-CiX3hwFp.mjs → cli/openapi-source.mjs} +2 -2
- package/dist/{package-version-HJhYeq4M.mjs → cli/package-version.mjs} +2 -2
- package/dist/{propose-JmUv_BTt.mjs → cli/propose.mjs} +1 -1
- package/dist/{review-C6EmbV0l.mjs → cli/review.mjs} +16 -15
- package/dist/{robots-DteZB8vl.mjs → cli/robots.mjs} +3 -7
- package/dist/{search-DKcdZgGx.mjs → cli/search.mjs} +7 -20
- package/dist/{sitemap-CBQoERNz.mjs → cli/sitemap.mjs} +7 -42
- package/dist/{skills-a90P31sJ.mjs → cli/skills.mjs} +5 -19
- package/dist/{templates-BuQ8YsGv.mjs → cli/templates.mjs} +1 -1
- package/dist/{upgrade-DlQMOFV1.mjs → cli/upgrade.mjs} +2 -2
- package/dist/{utils-C7KDrPpA.mjs → cli/utils.mjs} +1 -1
- package/dist/client/react.d.mts +2 -18
- package/dist/client/react.mjs +1 -157
- package/dist/{cloud-analytics-D14HplI7.mjs → cloud-analytics.mjs} +1 -1
- package/dist/{cloud-ask-ai-BOahlsIZ.d.mts → cloud-ask-ai.d.mts} +2 -2
- package/dist/{cloud-ask-ai-BqKhjpS5.mjs → cloud-ask-ai.mjs} +3 -3
- package/dist/code-blocks.d.mts +51 -0
- package/dist/{code-blocks-GYdvS3BH.mjs → code-blocks.mjs} +2 -2
- package/dist/code-group-mdx.d.mts +11 -0
- package/dist/code-group-mdx.mjs +57 -0
- package/dist/content-change-hydration.d.mts +87 -0
- package/dist/{openapi-mcp-BIOTLiA7.mjs → content-change-hydration.mjs} +5 -210
- package/dist/content-changes.d.mts +47 -0
- package/dist/content-changes.mjs +216 -0
- package/dist/create-theme.d.mts +48 -0
- package/dist/create-theme.mjs +57 -0
- package/dist/date.d.mts +5 -0
- package/dist/date.mjs +17 -0
- package/dist/define-docs.d.mts +9 -0
- package/dist/define-docs.mjs +46 -0
- package/dist/docs-cloud-client.d.mts +18 -0
- package/dist/docs-cloud-client.mjs +161 -0
- package/dist/docs-cloud-server.d.mts +2 -2
- package/dist/docs-cloud-server.mjs +2 -3
- package/dist/heading-toc.d.mts +10 -0
- package/dist/heading-toc.mjs +23 -0
- package/dist/http-body.d.mts +14 -0
- package/dist/{http-body-DkAPk6D5.mjs → http-body.mjs} +1 -1
- package/dist/http-cache.d.mts +25 -0
- package/dist/http-cache.mjs +140 -0
- package/dist/http-link.mjs +81 -0
- package/dist/i18n.d.mts +18 -0
- package/dist/{i18n-B1gJ9EW0.mjs → i18n.mjs} +1 -1
- package/dist/index.d.mts +43 -675
- package/dist/index.mjs +40 -14
- package/dist/markdown-rendering.mjs +1 -1
- package/dist/markdown-section-cache.mjs +49 -0
- package/dist/markdown-sections.d.mts +47 -0
- package/dist/{markdown-sections-9Oxr33b-.mjs → markdown-sections.mjs} +29 -703
- package/dist/mcp-auth.d.mts +14 -0
- package/dist/mcp-auth.mjs +99 -0
- package/dist/mcp.d.mts +5 -3
- package/dist/mcp.mjs +39 -9
- package/dist/mdx.d.mts +6 -0
- package/dist/mdx.mjs +7 -0
- package/dist/metadata.d.mts +60 -0
- package/dist/{metadata-BOHn0Y5K.mjs → metadata.mjs} +2 -2
- package/dist/native-api-reference.mjs +968 -0
- package/dist/okf.d.mts +42 -0
- package/dist/okf.mjs +145 -0
- package/dist/openapi-contract.mjs +154 -0
- package/dist/{openapi-mcp-node-C4jUpZG6.mjs → openapi-mcp-node.mjs} +1 -1
- package/dist/openapi-mcp.d.mts +26 -0
- package/dist/openapi-mcp.mjs +132 -0
- package/dist/openapi-operations.d.mts +71 -0
- package/dist/{openapi-operations-DFpaqOqA.mjs → openapi-operations.mjs} +1 -1
- package/dist/openapi-overlays.mjs +221 -0
- package/dist/openapi-references.mjs +233 -0
- package/dist/pagination.d.mts +7 -0
- package/dist/pagination.mjs +100 -0
- package/dist/prompt-references.d.mts +12 -0
- package/dist/prompt-references.mjs +132 -0
- package/dist/prompt-utils.d.mts +36 -0
- package/dist/{prompt-utils-B5g-bv7o.mjs → prompt-utils.mjs} +1 -57
- package/dist/reading-time.d.mts +23 -0
- package/dist/reading-time.mjs +58 -0
- package/dist/related.d.mts +7 -0
- package/dist/related.mjs +50 -0
- package/dist/retrieval-digest.d.mts +16 -0
- package/dist/{retrieval-digest-CT-eIEcp.mjs → retrieval-digest.mjs} +1 -1
- package/dist/review.d.mts +69 -0
- package/dist/review.mjs +562 -0
- package/dist/robots.d.mts +54 -0
- package/dist/{robots-BYJAVeI6.mjs → robots.mjs} +5 -3
- package/dist/runtime.d.mts +3 -3
- package/dist/runtime.mjs +3 -9
- package/dist/search.d.mts +210 -0
- package/dist/search.mjs +3401 -0
- package/dist/server.d.mts +22 -198
- package/dist/server.mjs +21 -19
- package/dist/sidebar.d.mts +15 -0
- package/dist/sidebar.mjs +73 -0
- package/dist/sitemap-server.d.mts +7 -0
- package/dist/{sitemap-server-Lg3YhUx4.mjs → sitemap-server.mjs} +2 -2
- package/dist/{sitemap-DafdOrxK.d.mts → sitemap.d.mts} +3 -3
- package/dist/sitemap.mjs +254 -0
- package/dist/{standards-discovery-1fiUVDAo.d.mts → standards-discovery.d.mts} +2 -2
- package/dist/{standards-discovery-sSEojU80.mjs → standards-discovery.mjs} +3 -139
- package/dist/telemetry-runtime.d.mts +42 -0
- package/dist/telemetry-runtime.mjs +238 -0
- package/dist/telemetry.d.mts +15 -0
- package/dist/telemetry.mjs +117 -0
- package/dist/{types-BncG8J3g.d.mts → types.d.mts} +21 -3
- package/dist/urls.d.mts +7 -0
- package/dist/urls.mjs +21 -0
- package/dist/utils.d.mts +8 -0
- package/dist/utils.mjs +22 -0
- package/package.json +21 -3
- package/dist/agent-DkAidqtV.mjs +0 -9026
- package/dist/api-reference-By_LokQ-.mjs +0 -3033
- package/dist/prompt-references-DMgbu_dz.mjs +0 -1082
- package/dist/retrieval-digest-DLAQsQmx.d.mts +0 -367
- package/dist/sidebar-C2LKcU7n.d.mts +0 -63
- package/dist/sidebar-CFHBj29f.mjs +0 -421
- /package/dist/{openapi-CfCzX_a1.mjs → cli/openapi.mjs} +0 -0
|
@@ -1,421 +0,0 @@
|
|
|
1
|
-
import { $ as isDocsSkillRequest, K as isDocsAgentDiscoveryRequest, St as resolveDocsSkillFormat, Xt as resolveDocsContentChangesConfig, Yt as isDocsContentChangesRequest, dt as resolveDocsAgentFeedbackRequest, ft as resolveDocsAgentsFormat, mt as resolveDocsLlmsTxtRequest, q as isDocsAgentsRequest, ut as resolveDocsAgentFeedbackConfig, vt as resolveDocsMarkdownRequest } from "./agent-DkAidqtV.mjs";
|
|
2
|
-
|
|
3
|
-
//#region src/telemetry.ts
|
|
4
|
-
const DOCS_PACKAGE_NAME = "@farming-labs/docs";
|
|
5
|
-
const DOCS_PACKAGE_VERSION = "0.2.25";
|
|
6
|
-
const DEFAULT_DOCS_TELEMETRY_ENDPOINT = "https://docs.farming-labs.dev/api/telemetry/events";
|
|
7
|
-
const PROJECT_TELEMETRY_CACHE_TTL_MS = 1440 * 60 * 1e3;
|
|
8
|
-
const PROJECT_TELEMETRY_CACHE_MAX_KEYS = 256;
|
|
9
|
-
function getRuntimeEnv() {
|
|
10
|
-
if (typeof process === "undefined" || !process.env) return;
|
|
11
|
-
return process.env;
|
|
12
|
-
}
|
|
13
|
-
function readRuntimeEnv(name) {
|
|
14
|
-
const value = getRuntimeEnv()?.[name]?.trim();
|
|
15
|
-
return value ? value : void 0;
|
|
16
|
-
}
|
|
17
|
-
function isTruthyEnv(value) {
|
|
18
|
-
return /^(1|true|yes|on)$/i.test(value ?? "");
|
|
19
|
-
}
|
|
20
|
-
function isFalsyEnv(value) {
|
|
21
|
-
return /^(0|false|no|off)$/i.test(value ?? "");
|
|
22
|
-
}
|
|
23
|
-
function isBrowserRuntime() {
|
|
24
|
-
return typeof window !== "undefined" && typeof document !== "undefined";
|
|
25
|
-
}
|
|
26
|
-
function isProductionTelemetryRuntime() {
|
|
27
|
-
if (isBrowserRuntime()) return false;
|
|
28
|
-
const env = getRuntimeEnv();
|
|
29
|
-
if (!env) return true;
|
|
30
|
-
if (env.NODE_ENV === "test") return false;
|
|
31
|
-
if (env.VERCEL_ENV === "production") return true;
|
|
32
|
-
if (env.CONTEXT === "production" && isTruthyEnv(env.NETLIFY)) return true;
|
|
33
|
-
if (isTruthyEnv(env.CF_PAGES)) return true;
|
|
34
|
-
if (env.RENDER_SERVICE_ID || env.FLY_APP_NAME || env.RAILWAY_ENVIRONMENT) return true;
|
|
35
|
-
return env.NODE_ENV === "production";
|
|
36
|
-
}
|
|
37
|
-
function resolveDocsTelemetryConfig(telemetry) {
|
|
38
|
-
const envToggle = readRuntimeEnv("DOCS_TELEMETRY");
|
|
39
|
-
const envDisabled = readRuntimeEnv("DOCS_TELEMETRY_DISABLED");
|
|
40
|
-
if (isFalsyEnv(envToggle) || isTruthyEnv(envDisabled) || telemetry === false) return { enabled: false };
|
|
41
|
-
const objectConfig = telemetry && typeof telemetry === "object" ? telemetry : void 0;
|
|
42
|
-
if (objectConfig?.enabled === false) return { enabled: false };
|
|
43
|
-
return {
|
|
44
|
-
enabled: telemetry === true || objectConfig?.enabled === true || isTruthyEnv(envToggle) || isProductionTelemetryRuntime(),
|
|
45
|
-
endpoint: objectConfig?.endpoint?.trim() || readRuntimeEnv("DOCS_TELEMETRY_ENDPOINT") || DEFAULT_DOCS_TELEMETRY_ENDPOINT
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
function readRequestOrigin(request) {
|
|
49
|
-
if (!request?.url) return void 0;
|
|
50
|
-
try {
|
|
51
|
-
return new URL(request.url).origin;
|
|
52
|
-
} catch {
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/** Normalize an HTTP(S) telemetry site value to its origin. */
|
|
57
|
-
function normalizeDocsTelemetryOrigin(candidate) {
|
|
58
|
-
if (typeof candidate !== "string") return void 0;
|
|
59
|
-
const trimmed = candidate.trim();
|
|
60
|
-
if (!trimmed) return void 0;
|
|
61
|
-
try {
|
|
62
|
-
const hasScheme = /^[a-z][a-z\d+.-]*:(?!\d)/i.test(trimmed);
|
|
63
|
-
const url = new URL(hasScheme ? trimmed : `https://${trimmed}`);
|
|
64
|
-
if (url.protocol !== "http:" && url.protocol !== "https:") return void 0;
|
|
65
|
-
return url.origin;
|
|
66
|
-
} catch {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
/** Return whether a telemetry origin points at a local development server. */
|
|
71
|
-
function isLocalDocsTelemetryOrigin(candidate) {
|
|
72
|
-
const origin = normalizeDocsTelemetryOrigin(candidate);
|
|
73
|
-
if (!origin) return false;
|
|
74
|
-
const hostname = new URL(origin).hostname.toLowerCase().replace(/^\[|\]$/g, "").replace(/\.+$/, "");
|
|
75
|
-
if ([
|
|
76
|
-
"localhost",
|
|
77
|
-
"localhost.localdomain",
|
|
78
|
-
"localhost6",
|
|
79
|
-
"localhost6.localdomain6",
|
|
80
|
-
"ip6-localhost",
|
|
81
|
-
"ip6-loopback"
|
|
82
|
-
].includes(hostname) || hostname.endsWith(".localhost")) return true;
|
|
83
|
-
if (hostname === "::" || hostname === "::1") return true;
|
|
84
|
-
const ipv4 = hostname.split(".").map((part) => Number(part));
|
|
85
|
-
if (ipv4.length === 4 && ipv4.every((part) => Number.isInteger(part) && part >= 0 && part <= 255)) return ipv4[0] === 127 || ipv4.every((part) => part === 0);
|
|
86
|
-
return /^::ffff:7f[0-9a-f]{2}:/.test(hostname) || hostname === "::ffff:0:0";
|
|
87
|
-
}
|
|
88
|
-
function isBlockedDocsTelemetryOrigin(candidate) {
|
|
89
|
-
if (candidate === void 0) return false;
|
|
90
|
-
return !normalizeDocsTelemetryOrigin(candidate) || isLocalDocsTelemetryOrigin(candidate);
|
|
91
|
-
}
|
|
92
|
-
function readDeploymentOrigin() {
|
|
93
|
-
const candidates = [
|
|
94
|
-
readRuntimeEnv("DOCS_SITE_URL"),
|
|
95
|
-
readRuntimeEnv("NEXT_PUBLIC_BASE_URL"),
|
|
96
|
-
readRuntimeEnv("NEXT_PUBLIC_SITE_URL"),
|
|
97
|
-
readRuntimeEnv("SITE_URL"),
|
|
98
|
-
readRuntimeEnv("URL"),
|
|
99
|
-
readRuntimeEnv("CF_PAGES_URL"),
|
|
100
|
-
readRuntimeEnv("VERCEL_PROJECT_PRODUCTION_URL"),
|
|
101
|
-
readRuntimeEnv("VERCEL_URL"),
|
|
102
|
-
readRuntimeEnv("DEPLOY_PRIME_URL")
|
|
103
|
-
];
|
|
104
|
-
for (const candidate of candidates) {
|
|
105
|
-
const origin = normalizeDocsTelemetryOrigin(candidate);
|
|
106
|
-
if (origin) return origin;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
function detectDeployment() {
|
|
110
|
-
const env = getRuntimeEnv();
|
|
111
|
-
if (!env) return void 0;
|
|
112
|
-
if (env.VERCEL || env.VERCEL_ENV) return {
|
|
113
|
-
provider: "vercel",
|
|
114
|
-
environment: env.VERCEL_ENV,
|
|
115
|
-
id: env.VERCEL_DEPLOYMENT_ID ?? env.VERCEL_GIT_COMMIT_SHA,
|
|
116
|
-
region: env.VERCEL_REGION
|
|
117
|
-
};
|
|
118
|
-
if (env.NETLIFY) return {
|
|
119
|
-
provider: "netlify",
|
|
120
|
-
environment: env.CONTEXT,
|
|
121
|
-
id: env.DEPLOY_ID ?? env.COMMIT_REF
|
|
122
|
-
};
|
|
123
|
-
if (env.CF_PAGES) return {
|
|
124
|
-
provider: "cloudflare-pages",
|
|
125
|
-
environment: env.CF_PAGES_BRANCH,
|
|
126
|
-
id: env.CF_PAGES_COMMIT_SHA
|
|
127
|
-
};
|
|
128
|
-
if (env.RENDER_SERVICE_ID) return {
|
|
129
|
-
provider: "render",
|
|
130
|
-
environment: env.RENDER_ENV,
|
|
131
|
-
id: env.RENDER_SERVICE_ID
|
|
132
|
-
};
|
|
133
|
-
if (env.FLY_APP_NAME) return {
|
|
134
|
-
provider: "fly",
|
|
135
|
-
environment: env.FLY_APP_NAME,
|
|
136
|
-
id: env.FLY_ALLOC_ID,
|
|
137
|
-
region: env.FLY_REGION
|
|
138
|
-
};
|
|
139
|
-
if (env.RAILWAY_ENVIRONMENT) return {
|
|
140
|
-
provider: "railway",
|
|
141
|
-
environment: env.RAILWAY_ENVIRONMENT,
|
|
142
|
-
id: env.RAILWAY_DEPLOYMENT_ID
|
|
143
|
-
};
|
|
144
|
-
return env.NODE_ENV === "production" ? { environment: "production" } : void 0;
|
|
145
|
-
}
|
|
146
|
-
function detectRuntime() {
|
|
147
|
-
if (typeof process !== "undefined" && process.versions?.node) return {
|
|
148
|
-
name: "node",
|
|
149
|
-
version: process.versions.node
|
|
150
|
-
};
|
|
151
|
-
if (typeof navigator !== "undefined" && navigator.userAgent) return { name: "web-standard" };
|
|
152
|
-
}
|
|
153
|
-
function isObjectConfigEnabled(value, defaultEnabled) {
|
|
154
|
-
if (value === false) return false;
|
|
155
|
-
if (value === true) return true;
|
|
156
|
-
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
157
|
-
const enabled = value.enabled;
|
|
158
|
-
return enabled === false ? false : defaultEnabled || enabled === true;
|
|
159
|
-
}
|
|
160
|
-
return defaultEnabled;
|
|
161
|
-
}
|
|
162
|
-
function hasObjectConfig(value) {
|
|
163
|
-
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
164
|
-
}
|
|
165
|
-
function getDocsTelemetryFeatures(config) {
|
|
166
|
-
const pageActions = config.pageActions;
|
|
167
|
-
const feedback = config.feedback;
|
|
168
|
-
return {
|
|
169
|
-
search: isObjectConfigEnabled(config.search, true),
|
|
170
|
-
contentChanges: resolveDocsContentChangesConfig(config.agent?.contentChanges, { staticExport: config.staticExport === true }).enabled,
|
|
171
|
-
ai: isObjectConfigEnabled(config.ai, false),
|
|
172
|
-
mcp: isObjectConfigEnabled(config.mcp, true),
|
|
173
|
-
llmsTxt: isObjectConfigEnabled(config.llmsTxt, true),
|
|
174
|
-
pageActions: hasObjectConfig(pageActions),
|
|
175
|
-
feedback: feedback === true || hasObjectConfig(feedback) && feedback.enabled !== false,
|
|
176
|
-
agentFeedback: feedback !== false && !(hasObjectConfig(feedback) && feedback.agent === false) && !(hasObjectConfig(feedback) && hasObjectConfig(feedback.agent) && feedback.agent.enabled === false),
|
|
177
|
-
sitemap: isObjectConfigEnabled(config.sitemap, true),
|
|
178
|
-
robots: isObjectConfigEnabled(config.robots, true),
|
|
179
|
-
apiReference: isObjectConfigEnabled(config.apiReference, false),
|
|
180
|
-
staticExport: config.staticExport === true,
|
|
181
|
-
changelog: isObjectConfigEnabled(config.changelog, false),
|
|
182
|
-
cloud: typeof config.cloud !== "undefined" && isObjectConfigEnabled(config.cloud, true),
|
|
183
|
-
review: isObjectConfigEnabled(config.review, true),
|
|
184
|
-
codeBlocksValidate: hasObjectConfig(config.codeBlocks) && Boolean(config.codeBlocks.validate)
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
function createDocsTelemetryEvent(config, input, context = {}) {
|
|
188
|
-
const telemetryConfig = config.telemetry && typeof config.telemetry === "object" ? config.telemetry : void 0;
|
|
189
|
-
const siteOriginCandidates = [
|
|
190
|
-
context.siteOrigin,
|
|
191
|
-
input.site?.origin,
|
|
192
|
-
telemetryConfig?.siteOrigin,
|
|
193
|
-
readRequestOrigin(context.request),
|
|
194
|
-
readDeploymentOrigin()
|
|
195
|
-
];
|
|
196
|
-
if (siteOriginCandidates.some(isBlockedDocsTelemetryOrigin)) return void 0;
|
|
197
|
-
const siteOrigin = siteOriginCandidates.map(normalizeDocsTelemetryOrigin).find((origin) => Boolean(origin));
|
|
198
|
-
const deployment = input.deployment ?? detectDeployment();
|
|
199
|
-
const properties = context.properties || input.properties ? {
|
|
200
|
-
...input.properties,
|
|
201
|
-
...context.properties
|
|
202
|
-
} : void 0;
|
|
203
|
-
return {
|
|
204
|
-
...input,
|
|
205
|
-
timestamp: input.timestamp ?? (/* @__PURE__ */ new Date()).toISOString(),
|
|
206
|
-
package: {
|
|
207
|
-
name: DOCS_PACKAGE_NAME,
|
|
208
|
-
version: DOCS_PACKAGE_VERSION,
|
|
209
|
-
...input.package
|
|
210
|
-
},
|
|
211
|
-
framework: input.framework ?? context.framework,
|
|
212
|
-
runtime: input.runtime ?? detectRuntime(),
|
|
213
|
-
site: siteOrigin ? { origin: siteOrigin } : input.site,
|
|
214
|
-
deployment,
|
|
215
|
-
features: input.features ?? getDocsTelemetryFeatures(config),
|
|
216
|
-
properties
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
function projectEventKey(event) {
|
|
220
|
-
return [
|
|
221
|
-
event.package.name,
|
|
222
|
-
event.package.version,
|
|
223
|
-
event.framework ?? "",
|
|
224
|
-
event.site?.origin ?? "",
|
|
225
|
-
event.deployment?.provider ?? "",
|
|
226
|
-
event.deployment?.environment ?? "",
|
|
227
|
-
event.deployment?.id ?? ""
|
|
228
|
-
].join("|");
|
|
229
|
-
}
|
|
230
|
-
function getSentProjectKeys() {
|
|
231
|
-
const globalValue = globalThis;
|
|
232
|
-
globalValue.__farmingLabsDocsTelemetryProjectKeys__ ??= /* @__PURE__ */ new Map();
|
|
233
|
-
return globalValue.__farmingLabsDocsTelemetryProjectKeys__;
|
|
234
|
-
}
|
|
235
|
-
function pruneSentProjectKeys(sent, now) {
|
|
236
|
-
for (const [key, expiresAt] of sent) if (expiresAt <= now) sent.delete(key);
|
|
237
|
-
while (sent.size >= PROJECT_TELEMETRY_CACHE_MAX_KEYS) {
|
|
238
|
-
const oldestKey = sent.keys().next().value;
|
|
239
|
-
if (!oldestKey) return;
|
|
240
|
-
sent.delete(oldestKey);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
async function emitDocsTelemetryEvent(telemetry, event) {
|
|
244
|
-
const resolved = resolveDocsTelemetryConfig(telemetry);
|
|
245
|
-
const eventSiteOrigin = event.site?.origin;
|
|
246
|
-
const normalizedSiteOrigin = normalizeDocsTelemetryOrigin(eventSiteOrigin);
|
|
247
|
-
if (!resolved.enabled || !resolved.endpoint || typeof fetch !== "function" || eventSiteOrigin !== void 0 && (!normalizedSiteOrigin || isLocalDocsTelemetryOrigin(eventSiteOrigin))) return;
|
|
248
|
-
const eventToSend = normalizedSiteOrigin ? {
|
|
249
|
-
...event,
|
|
250
|
-
site: { origin: normalizedSiteOrigin }
|
|
251
|
-
} : event;
|
|
252
|
-
try {
|
|
253
|
-
const ingestKey = readRuntimeEnv("DOCS_TELEMETRY_INGEST_KEY");
|
|
254
|
-
const browserRequest = isBrowserRuntime() && !ingestKey;
|
|
255
|
-
const headers = { "content-type": browserRequest ? "text/plain;charset=UTF-8" : "application/json" };
|
|
256
|
-
if (ingestKey) headers["x-docs-telemetry-key"] = ingestKey;
|
|
257
|
-
await fetch(resolved.endpoint, {
|
|
258
|
-
method: "POST",
|
|
259
|
-
headers,
|
|
260
|
-
body: JSON.stringify({ event: eventToSend }),
|
|
261
|
-
keepalive: true,
|
|
262
|
-
...browserRequest ? {
|
|
263
|
-
credentials: "omit",
|
|
264
|
-
mode: "no-cors"
|
|
265
|
-
} : {}
|
|
266
|
-
});
|
|
267
|
-
} catch {}
|
|
268
|
-
}
|
|
269
|
-
function emitDocsTelemetryProjectEvent(config, context = {}) {
|
|
270
|
-
const event = createDocsTelemetryEvent(config, { type: "project_detected" }, context);
|
|
271
|
-
if (!event) return;
|
|
272
|
-
const key = projectEventKey(event);
|
|
273
|
-
const sent = getSentProjectKeys();
|
|
274
|
-
const now = Date.now();
|
|
275
|
-
const expiresAt = sent.get(key);
|
|
276
|
-
if (expiresAt && expiresAt > now) return;
|
|
277
|
-
if (typeof expiresAt === "number") sent.delete(key);
|
|
278
|
-
pruneSentProjectKeys(sent, now);
|
|
279
|
-
sent.set(key, now + PROJECT_TELEMETRY_CACHE_TTL_MS);
|
|
280
|
-
emitDocsTelemetryEvent(config.telemetry, event);
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Emit a privacy-preserving browser page view for the maintainer telemetry dashboard.
|
|
284
|
-
*
|
|
285
|
-
* Page views include only the public site origin, pathname, locale, framework, and package
|
|
286
|
-
* metadata. They never include a query string, referrer, visitor id, IP address, or user agent.
|
|
287
|
-
*/
|
|
288
|
-
function emitDocsTelemetryPageViewEvent(telemetry, context = {}) {
|
|
289
|
-
if (telemetry === false || telemetry && typeof telemetry === "object" && telemetry.enabled === false) return;
|
|
290
|
-
const runtimeSiteOrigin = context.siteOrigin ?? (typeof window !== "undefined" ? window.location?.origin : void 0);
|
|
291
|
-
if (isBlockedDocsTelemetryOrigin(runtimeSiteOrigin)) return;
|
|
292
|
-
const siteOrigin = (telemetry && typeof telemetry === "object" ? telemetry.siteOrigin : void 0) ?? runtimeSiteOrigin;
|
|
293
|
-
const event = createDocsTelemetryEvent({ telemetry }, {
|
|
294
|
-
type: "page_view",
|
|
295
|
-
features: {},
|
|
296
|
-
properties: {
|
|
297
|
-
trafficType: "human",
|
|
298
|
-
...context.path ? { path: context.path.slice(0, 2048) } : {},
|
|
299
|
-
...context.locale ? { locale: context.locale.slice(0, 80) } : {}
|
|
300
|
-
}
|
|
301
|
-
}, {
|
|
302
|
-
framework: context.framework,
|
|
303
|
-
siteOrigin
|
|
304
|
-
});
|
|
305
|
-
if (!event) return;
|
|
306
|
-
emitDocsTelemetryEvent(telemetry && typeof telemetry === "object" ? {
|
|
307
|
-
...telemetry,
|
|
308
|
-
enabled: true
|
|
309
|
-
} : true, event);
|
|
310
|
-
}
|
|
311
|
-
function emitDocsTelemetryAgentSurfaceEvent(config, context) {
|
|
312
|
-
const event = createDocsTelemetryEvent(config, {
|
|
313
|
-
type: context.surface === "mcp" ? "mcp_request" : "agent_surface_used",
|
|
314
|
-
properties: { surface: context.surface }
|
|
315
|
-
}, context);
|
|
316
|
-
if (!event) return;
|
|
317
|
-
emitDocsTelemetryEvent(config.telemetry, event);
|
|
318
|
-
}
|
|
319
|
-
function emitDocsTelemetryMcpToolEvent(config, context) {
|
|
320
|
-
const event = createDocsTelemetryEvent(config, {
|
|
321
|
-
type: "mcp_tool_used",
|
|
322
|
-
properties: {
|
|
323
|
-
tool: context.tool,
|
|
324
|
-
locale: context.locale,
|
|
325
|
-
resultCount: context.resultCount
|
|
326
|
-
}
|
|
327
|
-
}, context);
|
|
328
|
-
if (!event) return;
|
|
329
|
-
emitDocsTelemetryEvent(config.telemetry, event);
|
|
330
|
-
}
|
|
331
|
-
function inferDocsTelemetryAgentSurface(request, options) {
|
|
332
|
-
const url = new URL(request.url);
|
|
333
|
-
const method = request.method.toUpperCase();
|
|
334
|
-
const feedbackRequest = resolveDocsAgentFeedbackRequest(url, resolveDocsAgentFeedbackConfig(options.feedback));
|
|
335
|
-
if ((method === "GET" || method === "HEAD") && isDocsAgentDiscoveryRequest(url)) return "agent_spec";
|
|
336
|
-
if ((method === "GET" || method === "HEAD") && feedbackRequest?.kind === "schema") return "agent_feedback_schema";
|
|
337
|
-
if (method === "POST" && feedbackRequest?.kind === "submit") return "agent_feedback_submit";
|
|
338
|
-
if (method === "GET" || method === "HEAD") {
|
|
339
|
-
if (isDocsContentChangesRequest(url)) return "content_changes";
|
|
340
|
-
if (isDocsAgentsRequest(url) || resolveDocsAgentsFormat(url) === "agents") return "agents";
|
|
341
|
-
if (isDocsSkillRequest(url) || resolveDocsSkillFormat(url) === "skill") return "skill";
|
|
342
|
-
if (resolveDocsMarkdownRequest(options.entry, url, request)) return "markdown";
|
|
343
|
-
if (resolveDocsLlmsTxtRequest(url, options.llmsTxt, options.entry)) return "llms";
|
|
344
|
-
}
|
|
345
|
-
if (method === "POST") return "ask_ai";
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
//#endregion
|
|
349
|
-
//#region src/sidebar.ts
|
|
350
|
-
function resolvePageSidebarFolderIndexBehavior(sidebar) {
|
|
351
|
-
if (!sidebar || typeof sidebar !== "object") return void 0;
|
|
352
|
-
const value = sidebar.folderIndexBehavior;
|
|
353
|
-
return value === "link" || value === "toggle" || value === "hidden" ? value : void 0;
|
|
354
|
-
}
|
|
355
|
-
function normalizeSidebarFolderBehaviorPath(path) {
|
|
356
|
-
if (!path) return void 0;
|
|
357
|
-
let value = path.trim();
|
|
358
|
-
if (!value) return void 0;
|
|
359
|
-
if (/^[a-zA-Z][a-zA-Z\d+\-.]*:\/\//.test(value)) try {
|
|
360
|
-
value = new URL(value).pathname;
|
|
361
|
-
} catch {
|
|
362
|
-
return;
|
|
363
|
-
}
|
|
364
|
-
else value = value.split("#", 1)[0]?.split("?", 1)[0] ?? value;
|
|
365
|
-
if (!value.startsWith("/")) value = `/${value}`;
|
|
366
|
-
return value.replace(/\/$/, "") || "/";
|
|
367
|
-
}
|
|
368
|
-
function resolveSidebarFolderIndexBehavior(sidebar, defaultBehavior = "link") {
|
|
369
|
-
if (sidebar === void 0 || sidebar === true || sidebar === false) return defaultBehavior;
|
|
370
|
-
if (sidebar.folderIndexBehavior === "toggle") return "toggle";
|
|
371
|
-
if (sidebar.folderIndexBehavior === "hidden") return "hidden";
|
|
372
|
-
if (sidebar.folderIndexBehavior === "link") return "link";
|
|
373
|
-
return defaultBehavior;
|
|
374
|
-
}
|
|
375
|
-
function resolveSidebarFolderIndexBehaviorForPath(sidebar, folderPath, defaultBehavior = "link") {
|
|
376
|
-
const fallback = resolveSidebarFolderIndexBehavior(sidebar, defaultBehavior);
|
|
377
|
-
if (!sidebar || typeof sidebar !== "object") return fallback;
|
|
378
|
-
const normalizedPath = normalizeSidebarFolderBehaviorPath(folderPath);
|
|
379
|
-
if (!normalizedPath) return fallback;
|
|
380
|
-
for (const [rawPath, override] of Object.entries(sidebar.folderIndexBehaviorOverrides ?? {})) if (normalizeSidebarFolderBehaviorPath(rawPath) === normalizedPath) return override === "link" || override === "toggle" || override === "hidden" ? override : fallback;
|
|
381
|
-
return fallback;
|
|
382
|
-
}
|
|
383
|
-
function applySidebarFolderIndexBehavior(tree, behaviorOrOptions) {
|
|
384
|
-
const resolveBehavior = typeof behaviorOrOptions === "string" ? () => behaviorOrOptions : (folderPath) => resolveSidebarFolderIndexBehaviorForPath(behaviorOrOptions.sidebar, folderPath, behaviorOrOptions.defaultBehavior);
|
|
385
|
-
function mapNode(node) {
|
|
386
|
-
if (!node || typeof node !== "object") return node;
|
|
387
|
-
const candidate = node;
|
|
388
|
-
if (candidate.type !== "folder" || !Array.isArray(candidate.children)) return node;
|
|
389
|
-
const children = candidate.children.map(mapNode);
|
|
390
|
-
const index = candidate.index ? mapNode(candidate.index) : void 0;
|
|
391
|
-
const folderPath = (typeof candidate.url === "string" ? candidate.url : void 0) || (candidate.index && typeof candidate.index === "object" && "url" in candidate.index && typeof candidate.index.url === "string" ? candidate.index.url ?? void 0 : void 0);
|
|
392
|
-
const behavior = (candidate.folderIndexBehavior === "link" || candidate.folderIndexBehavior === "toggle" || candidate.folderIndexBehavior === "hidden" ? candidate.folderIndexBehavior : void 0) ?? resolveBehavior(folderPath);
|
|
393
|
-
if (behavior === "link") return {
|
|
394
|
-
...candidate,
|
|
395
|
-
folderIndexBehavior: void 0,
|
|
396
|
-
index,
|
|
397
|
-
children
|
|
398
|
-
};
|
|
399
|
-
if (behavior === "hidden") return {
|
|
400
|
-
...candidate,
|
|
401
|
-
folderIndexBehavior: void 0,
|
|
402
|
-
index: void 0,
|
|
403
|
-
url: void 0,
|
|
404
|
-
children
|
|
405
|
-
};
|
|
406
|
-
return {
|
|
407
|
-
...candidate,
|
|
408
|
-
folderIndexBehavior: void 0,
|
|
409
|
-
index: void 0,
|
|
410
|
-
url: void 0,
|
|
411
|
-
children: index ? [index, ...children] : children
|
|
412
|
-
};
|
|
413
|
-
}
|
|
414
|
-
return {
|
|
415
|
-
...tree,
|
|
416
|
-
children: tree.children.map(mapNode)
|
|
417
|
-
};
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
//#endregion
|
|
421
|
-
export { emitDocsTelemetryAgentSurfaceEvent as a, emitDocsTelemetryPageViewEvent as c, inferDocsTelemetryAgentSurface as d, isLocalDocsTelemetryOrigin as f, resolveSidebarFolderIndexBehaviorForPath as i, emitDocsTelemetryProjectEvent as l, resolveDocsTelemetryConfig as m, resolvePageSidebarFolderIndexBehavior as n, emitDocsTelemetryEvent as o, normalizeDocsTelemetryOrigin as p, resolveSidebarFolderIndexBehavior as r, emitDocsTelemetryMcpToolEvent as s, applySidebarFolderIndexBehavior as t, getDocsTelemetryFeatures as u };
|
|
File without changes
|