@farming-labs/docs 0.1.83 → 0.1.84
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/dist/{agent-D97eZuWH.mjs → agent-BqsweF-z.mjs} +1 -1
- package/dist/cli/index.mjs +5 -5
- package/dist/{doctor-DHUZK-iX.mjs → doctor-DG6MQTbq.mjs} +18 -9
- package/dist/index.d.mts +10 -0
- package/dist/index.mjs +1 -1
- package/dist/{robots-Div3kkxI.mjs → robots-8FR5Gbm_.mjs} +1 -1
- package/dist/{robots-DCR-ZFLO.mjs → robots-WLElbTr1.mjs} +20 -4
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./reading-time-pKUeloSI.mjs";
|
|
2
2
|
import { _ as parseGeneratedAgentDocument, h as hashGeneratedAgentContent, m as GENERATED_AGENT_PROVENANCE_VERSION, v as serializeGeneratedAgentDocument } from "./search-B5ze-heM.mjs";
|
|
3
|
-
import { D as findDocsMarkdownPage, I as renderDocsMarkdownDocument } from "./robots-
|
|
3
|
+
import { D as findDocsMarkdownPage, I as renderDocsMarkdownDocument } from "./robots-WLElbTr1.mjs";
|
|
4
4
|
import "./index.mjs";
|
|
5
5
|
import "./sitemap-server-C8Ppk29g.mjs";
|
|
6
6
|
import { createFilesystemDocsMcpSource } from "./mcp.mjs";
|
package/dist/cli/index.mjs
CHANGED
|
@@ -86,7 +86,7 @@ async function main() {
|
|
|
86
86
|
const { runMcp } = await import("../mcp-OVgCyHrR.mjs");
|
|
87
87
|
await runMcp(mcpOptions);
|
|
88
88
|
} else if (parsedCommand.command === "agent" && subcommand === "compact") {
|
|
89
|
-
const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-
|
|
89
|
+
const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-BqsweF-z.mjs");
|
|
90
90
|
const agentCompactOptions = parseAgentCompactArgs(args.slice(2));
|
|
91
91
|
if (agentCompactOptions.help) {
|
|
92
92
|
printAgentCompactHelp();
|
|
@@ -96,11 +96,11 @@ async function main() {
|
|
|
96
96
|
} else if (parsedCommand.command === "agent") {
|
|
97
97
|
console.error(pc.red(`Unknown agent subcommand: ${subcommand ?? "(missing)"}`));
|
|
98
98
|
console.error();
|
|
99
|
-
const { printAgentCompactHelp } = await import("../agent-
|
|
99
|
+
const { printAgentCompactHelp } = await import("../agent-BqsweF-z.mjs");
|
|
100
100
|
printAgentCompactHelp();
|
|
101
101
|
process.exit(1);
|
|
102
102
|
} else if (parsedCommand.command === "doctor") {
|
|
103
|
-
const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-
|
|
103
|
+
const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-DG6MQTbq.mjs");
|
|
104
104
|
const doctorOptions = parseDoctorArgs(args.slice(1));
|
|
105
105
|
if (doctorOptions.help) {
|
|
106
106
|
printDoctorHelp();
|
|
@@ -130,7 +130,7 @@ async function main() {
|
|
|
130
130
|
printSitemapGenerateHelp();
|
|
131
131
|
process.exit(1);
|
|
132
132
|
} else if (parsedCommand.command === "robots" && subcommand === "generate") {
|
|
133
|
-
const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-
|
|
133
|
+
const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-8FR5Gbm_.mjs");
|
|
134
134
|
const robotsOptions = parseRobotsGenerateArgs(args.slice(2));
|
|
135
135
|
if (robotsOptions.help) {
|
|
136
136
|
printRobotsGenerateHelp();
|
|
@@ -140,7 +140,7 @@ async function main() {
|
|
|
140
140
|
} else if (parsedCommand.command === "robots") {
|
|
141
141
|
console.error(pc.red(`Unknown robots subcommand: ${subcommand ?? "(missing)"}`));
|
|
142
142
|
console.error();
|
|
143
|
-
const { printRobotsGenerateHelp } = await import("../robots-
|
|
143
|
+
const { printRobotsGenerateHelp } = await import("../robots-8FR5Gbm_.mjs");
|
|
144
144
|
printRobotsGenerateHelp();
|
|
145
145
|
process.exit(1);
|
|
146
146
|
} else if (parsedCommand.command === "upgrade") {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import "./reading-time-pKUeloSI.mjs";
|
|
2
2
|
import "./search-B5ze-heM.mjs";
|
|
3
3
|
import { i as DEFAULT_SITEMAP_XML_ROUTE, n as DEFAULT_SITEMAP_MD_ROUTE, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, u as resolveDocsSitemapConfig } from "./sitemap-Ccfh6GXO.mjs";
|
|
4
|
-
import { C as DEFAULT_SKILL_MD_ROUTE, S as DEFAULT_MCP_WELL_KNOWN_ROUTE, a as analyzeDocsRobotsTxt, b as DEFAULT_MCP_PUBLIC_ROUTE, d as DEFAULT_AGENT_FEEDBACK_ROUTE, g as DEFAULT_LLMS_FULL_TXT_ROUTE, l as resolveDocsRobotsConfig, m as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_ROBOTS_TXT_ROUTE, p as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, w as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE } from "./robots-
|
|
4
|
+
import { C as DEFAULT_SKILL_MD_ROUTE, S as DEFAULT_MCP_WELL_KNOWN_ROUTE, a as analyzeDocsRobotsTxt, b as DEFAULT_MCP_PUBLIC_ROUTE, d as DEFAULT_AGENT_FEEDBACK_ROUTE, g as DEFAULT_LLMS_FULL_TXT_ROUTE, l as resolveDocsRobotsConfig, m as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_ROBOTS_TXT_ROUTE, p as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, w as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE } from "./robots-WLElbTr1.mjs";
|
|
5
5
|
import "./sitemap-server-C8Ppk29g.mjs";
|
|
6
6
|
import { createFilesystemDocsMcpSource, resolveDocsMcpConfig } from "./mcp.mjs";
|
|
7
7
|
import "./server.mjs";
|
|
8
8
|
import { a as loadProjectEnv, c as readNavTitle, d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, p as resolveDocsContentDir, r as extractTopLevelConfigObject, t as extractNestedObjectLiteral } from "./config-BR6CcCfr.mjs";
|
|
9
|
-
import { inspectAgentCompactionState, scanDocsPageTargets } from "./agent-
|
|
9
|
+
import { inspectAgentCompactionState, scanDocsPageTargets } from "./agent-BqsweF-z.mjs";
|
|
10
10
|
import { t as detectFramework } from "./utils-AmYxHDoz.mjs";
|
|
11
11
|
import { existsSync, lstatSync, readFileSync, readdirSync } from "node:fs";
|
|
12
12
|
import path from "node:path";
|
|
@@ -739,8 +739,7 @@ async function probeTextRoute(baseUrl, route) {
|
|
|
739
739
|
};
|
|
740
740
|
}
|
|
741
741
|
}
|
|
742
|
-
async function probeRobotsRoute(baseUrl) {
|
|
743
|
-
const route = DEFAULT_ROBOTS_TXT_ROUTE;
|
|
742
|
+
async function probeRobotsRoute(baseUrl, route = DEFAULT_ROBOTS_TXT_ROUTE) {
|
|
744
743
|
const url = joinDoctorUrl(baseUrl, route);
|
|
745
744
|
try {
|
|
746
745
|
const response = await fetchWithTimeout(url, { headers: { Accept: "text/plain, */*" } });
|
|
@@ -915,6 +914,13 @@ function hostedSitemapRoutes(discoveryBody) {
|
|
|
915
914
|
routes: Array.from(new Set(routes))
|
|
916
915
|
};
|
|
917
916
|
}
|
|
917
|
+
function hostedRobotsRoute(discoveryBody) {
|
|
918
|
+
const robots = asRecord(asRecord(discoveryBody)?.robots);
|
|
919
|
+
return {
|
|
920
|
+
enabled: robots?.enabled === false ? false : true,
|
|
921
|
+
route: readDiscoveryRoute(robots?.route) ?? DEFAULT_ROBOTS_TXT_ROUTE
|
|
922
|
+
};
|
|
923
|
+
}
|
|
918
924
|
async function buildHostedAgentChecks(url, pages) {
|
|
919
925
|
let baseUrl;
|
|
920
926
|
try {
|
|
@@ -935,11 +941,14 @@ async function buildHostedAgentChecks(url, pages) {
|
|
|
935
941
|
checks.push(makeCheck("hosted-sitemap", "Hosted sitemap", sitemapPassed === sitemap.length ? "pass" : sitemapPassed > 0 ? "warn" : "fail", sitemapPassed === sitemap.length ? 5 : sitemapPassed > 0 ? 3 : 0, 5, sitemap.map((result) => result.detail).join(" "), sitemapPassed === sitemap.length ? void 0 : `Verify deployed sitemap routes return non-empty text: ${sitemapRoutes.routes.join(", ")}.`));
|
|
936
942
|
} else if (sitemapRoutes.enabled) checks.push(makeCheck("hosted-sitemap", "Hosted sitemap", "warn", 0, 5, "The hosted discovery spec reports sitemap support but did not expose sitemap routes.", "Check sitemap.xml and sitemap.markdown config so at least one sitemap route is enabled."));
|
|
937
943
|
else checks.push(makeCheck("hosted-sitemap", "Hosted sitemap", "warn", 0, 5, "The hosted discovery spec reports sitemap routes as disabled.", "Enable sitemap in docs.config when agents and crawlers should discover canonical URLs and freshness metadata."));
|
|
938
|
-
const
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
944
|
+
const robotsRoute = hostedRobotsRoute(discovery.body);
|
|
945
|
+
if (robotsRoute.enabled) {
|
|
946
|
+
const robots = await probeRobotsRoute(baseUrl, robotsRoute.route);
|
|
947
|
+
const robotsAnalysis = robots.body ? analyzeDocsRobotsTxt(robots.body) : void 0;
|
|
948
|
+
const robotsBlocked = robotsAnalysis?.blocksAgentRoutes || robotsAnalysis?.blocksAiAgents;
|
|
949
|
+
const robotsComplete = robotsAnalysis?.hasAgentRoutes && robotsAnalysis?.hasAiPolicy;
|
|
950
|
+
checks.push(makeCheck("hosted-robots", "Hosted robots.txt", robots.ok && !robotsBlocked && robotsComplete ? "pass" : robots.ok && !robotsBlocked ? "warn" : "fail", robots.ok && !robotsBlocked && robotsComplete ? 5 : robots.ok && !robotsBlocked ? 3 : 0, 5, robots.ok ? robotsBlocked ? `${robotsRoute.route} is reachable but blocks ${robotsAnalysis?.blocksAiAgents ? "common AI crawlers" : "agent-readable docs routes"}.` : robotsComplete ? `${robots.detail} It advertises agent-readable routes and common AI crawler policy.` : `${robots.detail} It is missing ${robotsAnalysis?.missingRoutes.length ? `agent routes (${robotsAnalysis.missingRoutes.join(", ")})` : "common AI crawler policy"}.` : robots.detail, robots.ok && !robotsBlocked && robotsComplete ? void 0 : "Publish an agent-friendly robots.txt with `docs robots generate`, or append the generated block to the existing file."));
|
|
951
|
+
} else checks.push(makeCheck("hosted-robots", "Hosted robots.txt", "warn", 0, 5, "The hosted discovery spec reports robots.txt as disabled.", "Enable robots and publish an agent-friendly robots.txt with `docs robots generate`."));
|
|
943
952
|
const skill = await Promise.all([probeTextRoute(baseUrl, DEFAULT_SKILL_MD_ROUTE), probeTextRoute(baseUrl, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE)]);
|
|
944
953
|
const skillPassed = skill.filter((result) => result.ok).length;
|
|
945
954
|
checks.push(makeCheck("hosted-skill", "Hosted skill.md", skillPassed === skill.length ? "pass" : skillPassed > 0 ? "warn" : "fail", skillPassed === skill.length ? 5 : skillPassed > 0 ? 3 : 0, 5, skill.map((result) => result.detail).join(" "), skillPassed === skill.length ? void 0 : "Verify deployed /skill.md and /.well-known/skill.md routes return non-empty markdown."));
|
package/dist/index.d.mts
CHANGED
|
@@ -204,6 +204,7 @@ interface DocsAgentDiscoverySpecOptions {
|
|
|
204
204
|
feedback?: DocsAgentFeedbackDiscoveryConfig;
|
|
205
205
|
llms?: DocsLlmsDiscoveryConfig;
|
|
206
206
|
sitemap?: boolean | DocsSitemapConfig;
|
|
207
|
+
robots?: boolean | DocsRobotsConfig;
|
|
207
208
|
markdown?: {
|
|
208
209
|
acceptHeader?: boolean;
|
|
209
210
|
signatureAgentHeader?: boolean;
|
|
@@ -217,6 +218,7 @@ interface DocsSkillDocumentOptions {
|
|
|
217
218
|
feedback?: DocsAgentFeedbackDiscoveryConfig;
|
|
218
219
|
llms?: DocsLlmsDiscoveryConfig;
|
|
219
220
|
sitemap?: boolean | DocsSitemapConfig;
|
|
221
|
+
robots?: boolean | DocsRobotsConfig;
|
|
220
222
|
markdown?: {
|
|
221
223
|
acceptHeader?: boolean;
|
|
222
224
|
signatureAgentHeader?: boolean;
|
|
@@ -274,6 +276,7 @@ declare function renderDocsSkillDocument({
|
|
|
274
276
|
feedback,
|
|
275
277
|
llms,
|
|
276
278
|
sitemap,
|
|
279
|
+
robots,
|
|
277
280
|
markdown
|
|
278
281
|
}: DocsSkillDocumentOptions): string;
|
|
279
282
|
declare function resolveDocsAgentMdxContent(content: string, audience: "human" | "agent"): string;
|
|
@@ -286,6 +289,7 @@ declare function buildDocsAgentDiscoverySpec({
|
|
|
286
289
|
feedback,
|
|
287
290
|
llms,
|
|
288
291
|
sitemap,
|
|
292
|
+
robots,
|
|
289
293
|
markdown
|
|
290
294
|
}: DocsAgentDiscoverySpecOptions): {
|
|
291
295
|
version: string;
|
|
@@ -313,6 +317,7 @@ declare function buildDocsAgentDiscoverySpec({
|
|
|
313
317
|
mcp: boolean;
|
|
314
318
|
search: boolean;
|
|
315
319
|
sitemap: boolean;
|
|
320
|
+
robots: boolean;
|
|
316
321
|
agentFeedback: boolean;
|
|
317
322
|
locales: boolean;
|
|
318
323
|
};
|
|
@@ -362,6 +367,11 @@ declare function buildDocsAgentDiscoverySpec({
|
|
|
362
367
|
defaultWellKnownRoute: string;
|
|
363
368
|
};
|
|
364
369
|
};
|
|
370
|
+
robots: {
|
|
371
|
+
enabled: boolean;
|
|
372
|
+
route: string;
|
|
373
|
+
defaultRoute: string;
|
|
374
|
+
};
|
|
365
375
|
search: {
|
|
366
376
|
enabled: boolean;
|
|
367
377
|
endpoint: string;
|
package/dist/index.mjs
CHANGED
|
@@ -2,6 +2,6 @@ import { _ as defineDocs, a as resolveReadingTimeOptions, c as resolveOGImage, d
|
|
|
2
2
|
import { A as resolveDocsAnalyticsConfig, C as resolveSidebarFolderIndexBehaviorForPath, D as emitDocsAgentTraceEvent, E as createDocsAgentTraceId, M as createDocsCloudAnalytics, O as emitDocsAnalyticsEvent, S as resolveSidebarFolderIndexBehavior, T as createDocsAgentTraceContext, _ as parseGeneratedAgentDocument, a as createMcpSearchAdapter, b as applySidebarFolderIndexBehavior, c as formatDocsAskAIPackageHints, d as resolveAskAISearchRequestConfig, f as resolveSearchRequestConfig, g as normalizeGeneratedAgentContent, h as hashGeneratedAgentContent, i as createCustomSearchAdapter, j as resolveDocsObservabilityConfig, k as emitDocsObservabilityEvent, l as inferDocsAskAIPackageHints, m as GENERATED_AGENT_PROVENANCE_VERSION, n as buildDocsSearchDocuments, o as createSimpleSearchAdapter, p as GENERATED_AGENT_PROVENANCE_MARKER, r as createAlgoliaSearchAdapter, s as createTypesenseSearchAdapter, t as buildDocsAskAIContext, u as performDocsSearch, v as serializeGeneratedAgentDocument, w as DOCS_AGENT_TRACE_EVENT_TYPES, x as resolvePageSidebarFolderIndexBehavior, y as stripGeneratedAgentProvenance } from "./search-B5ze-heM.mjs";
|
|
3
3
|
import { n as renderDocsRelatedMarkdownLines, t as normalizeDocsRelated } from "./related-BNj_NdHq.mjs";
|
|
4
4
|
import { a as buildDocsSitemapManifest, c as renderDocsSitemapMarkdown, d as resolveDocsSitemapRequest, f as toDocsSitemapMarkdownUrl, i as DEFAULT_SITEMAP_XML_ROUTE, l as renderDocsSitemapXml, n as DEFAULT_SITEMAP_MD_ROUTE, o as createDocsSitemapResponse, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, s as readDocsSitemapManifestFromContentMap, t as DEFAULT_SITEMAP_MANIFEST_PATH, u as resolveDocsSitemapConfig } from "./sitemap-Ccfh6GXO.mjs";
|
|
5
|
-
import { A as isDocsAgentDiscoveryRequest, B as resolveDocsLlmsTxtFormat, C as DEFAULT_SKILL_MD_ROUTE, D as findDocsMarkdownPage, E as buildDocsAgentDiscoverySpec, F as normalizeDocsUrlPath, H as resolveDocsSkillFormat, I as renderDocsMarkdownDocument, L as renderDocsMarkdownNotFound, M as isDocsPublicGetRequest, N as isDocsSkillRequest, O as getDocsMarkdownVaryHeader, P as normalizeDocsPathSegment, R as renderDocsSkillDocument, S as DEFAULT_MCP_WELL_KNOWN_ROUTE, T as DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER, U as toDocsMarkdownUrl, V as resolveDocsMarkdownRequest, _ as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, a as analyzeDocsRobotsTxt, b as DEFAULT_MCP_PUBLIC_ROUTE, c as renderDocsRobotsTxt, d as DEFAULT_AGENT_FEEDBACK_ROUTE, f as DEFAULT_AGENT_SPEC_ROUTE, g as DEFAULT_LLMS_FULL_TXT_ROUTE, h as DEFAULT_DOCS_API_ROUTE, i as DOCS_ROBOTS_GENERATED_BLOCK_START, j as isDocsMcpRequest, k as hasDocsMarkdownSignatureAgent, l as resolveDocsRobotsConfig, m as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_ROBOTS_TXT_ROUTE, o as getDocsRobotsAllowRoutes, p as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, r as DOCS_ROBOTS_GENERATED_BLOCK_END, s as renderDocsRobotsGeneratedBlock, t as DEFAULT_DOCS_AI_ROBOTS_USER_AGENTS, u as upsertDocsRobotsGeneratedBlock, v as DEFAULT_LLMS_TXT_ROUTE, w as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, x as DEFAULT_MCP_ROUTE, y as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, z as resolveDocsAgentMdxContent } from "./robots-
|
|
5
|
+
import { A as isDocsAgentDiscoveryRequest, B as resolveDocsLlmsTxtFormat, C as DEFAULT_SKILL_MD_ROUTE, D as findDocsMarkdownPage, E as buildDocsAgentDiscoverySpec, F as normalizeDocsUrlPath, H as resolveDocsSkillFormat, I as renderDocsMarkdownDocument, L as renderDocsMarkdownNotFound, M as isDocsPublicGetRequest, N as isDocsSkillRequest, O as getDocsMarkdownVaryHeader, P as normalizeDocsPathSegment, R as renderDocsSkillDocument, S as DEFAULT_MCP_WELL_KNOWN_ROUTE, T as DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER, U as toDocsMarkdownUrl, V as resolveDocsMarkdownRequest, _ as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, a as analyzeDocsRobotsTxt, b as DEFAULT_MCP_PUBLIC_ROUTE, c as renderDocsRobotsTxt, d as DEFAULT_AGENT_FEEDBACK_ROUTE, f as DEFAULT_AGENT_SPEC_ROUTE, g as DEFAULT_LLMS_FULL_TXT_ROUTE, h as DEFAULT_DOCS_API_ROUTE, i as DOCS_ROBOTS_GENERATED_BLOCK_START, j as isDocsMcpRequest, k as hasDocsMarkdownSignatureAgent, l as resolveDocsRobotsConfig, m as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, n as DEFAULT_ROBOTS_TXT_ROUTE, o as getDocsRobotsAllowRoutes, p as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, r as DOCS_ROBOTS_GENERATED_BLOCK_END, s as renderDocsRobotsGeneratedBlock, t as DEFAULT_DOCS_AI_ROBOTS_USER_AGENTS, u as upsertDocsRobotsGeneratedBlock, v as DEFAULT_LLMS_TXT_ROUTE, w as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, x as DEFAULT_MCP_ROUTE, y as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, z as resolveDocsAgentMdxContent } from "./robots-WLElbTr1.mjs";
|
|
6
6
|
|
|
7
7
|
export { DEFAULT_AGENT_FEEDBACK_ROUTE, DEFAULT_AGENT_SPEC_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, DEFAULT_DOCS_AI_ROBOTS_USER_AGENTS, DEFAULT_DOCS_API_ROUTE, DEFAULT_LLMS_FULL_TXT_ROUTE, DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, DEFAULT_LLMS_TXT_ROUTE, DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, DEFAULT_MCP_PUBLIC_ROUTE, DEFAULT_MCP_ROUTE, DEFAULT_MCP_WELL_KNOWN_ROUTE, DEFAULT_ROBOTS_TXT_ROUTE, DEFAULT_SITEMAP_MANIFEST_PATH, DEFAULT_SITEMAP_MD_ROUTE, DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, DEFAULT_SITEMAP_XML_ROUTE, DEFAULT_SKILL_MD_ROUTE, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, DOCS_AGENT_TRACE_EVENT_TYPES, DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER, DOCS_ROBOTS_GENERATED_BLOCK_END, DOCS_ROBOTS_GENERATED_BLOCK_START, GENERATED_AGENT_PROVENANCE_MARKER, GENERATED_AGENT_PROVENANCE_VERSION, analyzeDocsRobotsTxt, applySidebarFolderIndexBehavior, buildDocsAgentDiscoverySpec, buildDocsAskAIContext, buildDocsSearchDocuments, buildDocsSitemapManifest, buildPageOpenGraph, buildPageTwitter, createAlgoliaSearchAdapter, createCustomSearchAdapter, createDocsAgentTraceContext, createDocsAgentTraceId, createDocsCloudAnalytics, createDocsSitemapResponse, createMcpSearchAdapter, createSimpleSearchAdapter, createTheme, createTypesenseSearchAdapter, deepMerge, defineDocs, emitDocsAgentTraceEvent, emitDocsAnalyticsEvent, emitDocsObservabilityEvent, estimateReadingTimeMinutes, extendTheme, findDocsMarkdownPage, formatDocsAskAIPackageHints, getDocsMarkdownVaryHeader, getDocsRobotsAllowRoutes, hasDocsMarkdownSignatureAgent, hashGeneratedAgentContent, inferDocsAskAIPackageHints, isDocsAgentDiscoveryRequest, isDocsMcpRequest, isDocsPublicGetRequest, isDocsSkillRequest, normalizeDocsPathSegment, normalizeDocsRelated, normalizeDocsUrlPath, normalizeGeneratedAgentContent, parseGeneratedAgentDocument, performDocsSearch, readDocsSitemapManifestFromContentMap, renderDocsMarkdownDocument, renderDocsMarkdownNotFound, renderDocsRelatedMarkdownLines, renderDocsRobotsGeneratedBlock, renderDocsRobotsTxt, renderDocsSitemapMarkdown, renderDocsSitemapXml, renderDocsSkillDocument, resolveAskAISearchRequestConfig, resolveChangelogConfig, resolveDocsAgentMdxContent, resolveDocsAnalyticsConfig, resolveDocsI18n, resolveDocsLlmsTxtFormat, resolveDocsLocale, resolveDocsMarkdownRequest, resolveDocsObservabilityConfig, resolveDocsPath, resolveDocsRobotsConfig, resolveDocsSitemapConfig, resolveDocsSitemapRequest, resolveDocsSkillFormat, resolveOGImage, resolvePageReadingTime, resolvePageSidebarFolderIndexBehavior, resolveReadingTimeFromContent, resolveReadingTimeFromSource, resolveReadingTimeOptions, resolveSearchRequestConfig, resolveSidebarFolderIndexBehavior, resolveSidebarFolderIndexBehaviorForPath, resolveTitle, serializeGeneratedAgentDocument, stripGeneratedAgentProvenance, toDocsMarkdownUrl, toDocsSitemapMarkdownUrl, upsertDocsRobotsGeneratedBlock };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as DOCS_ROBOTS_GENERATED_BLOCK_START, l as resolveDocsRobotsConfig, r as DOCS_ROBOTS_GENERATED_BLOCK_END, s as renderDocsRobotsGeneratedBlock, u as upsertDocsRobotsGeneratedBlock } from "./robots-
|
|
1
|
+
import { i as DOCS_ROBOTS_GENERATED_BLOCK_START, l as resolveDocsRobotsConfig, r as DOCS_ROBOTS_GENERATED_BLOCK_END, s as renderDocsRobotsGeneratedBlock, u as upsertDocsRobotsGeneratedBlock } from "./robots-WLElbTr1.mjs";
|
|
2
2
|
import { d as readTopLevelStringProperty, f as resolveDocsConfigPath, i as loadDocsConfigModule, o as readBooleanProperty, t as extractNestedObjectLiteral, u as readStringProperty } from "./config-BR6CcCfr.mjs";
|
|
3
3
|
import { t as detectFramework } from "./utils-AmYxHDoz.mjs";
|
|
4
4
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
@@ -15,6 +15,7 @@ const DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE = "/.well-known/llms.txt";
|
|
|
15
15
|
const DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE = "/.well-known/llms-full.txt";
|
|
16
16
|
const DEFAULT_SKILL_MD_ROUTE = "/skill.md";
|
|
17
17
|
const DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE = "/.well-known/skill.md";
|
|
18
|
+
const DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE = "/robots.txt";
|
|
18
19
|
const DEFAULT_AGENT_FEEDBACK_ROUTE = "/api/docs/agent/feedback";
|
|
19
20
|
const DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER = "Signature-Agent";
|
|
20
21
|
function normalizeDocsPathSegment(value) {
|
|
@@ -115,7 +116,7 @@ function renderDocsMarkdownNotFound({ entry = "docs", requestedPath, sitemap })
|
|
|
115
116
|
}
|
|
116
117
|
if (sitemapConfig.xml.enabled) lines.push(`- XML sitemap: \`${sitemapConfig.xml.route}\``);
|
|
117
118
|
} else lines.push(`- Sitemap discovery, if enabled: \`${DEFAULT_SITEMAP_MD_ROUTE}\`, \`${DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE}\`, or \`${DEFAULT_SITEMAP_XML_ROUTE}\``);
|
|
118
|
-
lines.push("", "The agent discovery spec is the safest first step because it lists the active markdown, sitemap, search, MCP, and feedback routes for this deployment.");
|
|
119
|
+
lines.push("", "The agent discovery spec is the safest first step because it lists the active markdown, sitemap, robots, search, MCP, and feedback routes for this deployment.");
|
|
119
120
|
return lines.join("\n");
|
|
120
121
|
}
|
|
121
122
|
function findDocsMarkdownPage(entry, pages, requestedPath) {
|
|
@@ -134,7 +135,7 @@ function renderDocsMarkdownDocument(page) {
|
|
|
134
135
|
lines.push("", page.agentFallbackRawContent ?? page.rawContent ?? page.content);
|
|
135
136
|
return lines.join("\n");
|
|
136
137
|
}
|
|
137
|
-
function renderDocsSkillDocument({ origin, entry = "docs", search, mcp, feedback, llms, sitemap, markdown }) {
|
|
138
|
+
function renderDocsSkillDocument({ origin, entry = "docs", search, mcp, feedback, llms, sitemap, robots, markdown }) {
|
|
138
139
|
const normalizedEntry = normalizeDocsPathSegment(entry) || "docs";
|
|
139
140
|
const siteTitle = compactSkillText(llms?.siteTitle ?? "Documentation");
|
|
140
141
|
const siteDescription = llms?.siteDescription ? compactSkillText(llms.siteDescription) : void 0;
|
|
@@ -142,9 +143,10 @@ function renderDocsSkillDocument({ origin, entry = "docs", search, mcp, feedback
|
|
|
142
143
|
const searchEnabled = isSearchEnabled(search);
|
|
143
144
|
const feedbackEnabled = feedback?.enabled ?? false;
|
|
144
145
|
const sitemapConfig = resolveDocsSitemapConfig(sitemap);
|
|
146
|
+
const robotsEnabled = isRobotsDiscoveryEnabled(robots);
|
|
145
147
|
const feedbackRoute = feedback?.route ?? DEFAULT_AGENT_FEEDBACK_ROUTE;
|
|
146
148
|
const feedbackSchemaRoute = feedback?.schemaRoute ?? `${feedbackRoute}/schema`;
|
|
147
|
-
const description = truncateSkillDescription(`Use ${siteTitle} through markdown routes, llms.txt, agent discovery, search, and MCP when available.`);
|
|
149
|
+
const description = truncateSkillDescription(`Use ${siteTitle} through markdown routes, llms.txt, robots.txt, agent discovery, search, and MCP when available.`);
|
|
148
150
|
const markdownAcceptHeader = markdown?.acceptHeader === false ? null : "text/markdown";
|
|
149
151
|
const markdownSignatureAgentHeader = markdown?.signatureAgentHeader === false ? null : DOCS_MARKDOWN_SIGNATURE_AGENT_HEADER;
|
|
150
152
|
const lines = [
|
|
@@ -167,9 +169,11 @@ function renderDocsSkillDocument({ origin, entry = "docs", search, mcp, feedback
|
|
|
167
169
|
if (sitemapConfig.xml.enabled) lines.push(`- Use ${sitemapConfig.xml.route} to check canonical page freshness.`);
|
|
168
170
|
if (sitemapConfig.markdown.enabled) lines.push(`- Use ${sitemapConfig.markdown.route} for a semantic docs map.`);
|
|
169
171
|
}
|
|
172
|
+
if (robotsEnabled) lines.push(`- Check ${DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE} for crawler and AI-agent access policy.`);
|
|
170
173
|
if (mcp.enabled) lines.push(`- Use ${DEFAULT_MCP_WELL_KNOWN_ROUTE} or ${DEFAULT_MCP_PUBLIC_ROUTE} for MCP tools when your environment supports MCP.`);
|
|
171
174
|
if (feedbackEnabled) lines.push(`- Read ${feedbackSchemaRoute} before posting agent feedback to ${feedbackRoute}.`);
|
|
172
175
|
lines.push("", "## Routes", `- Skill document: ${DEFAULT_SKILL_MD_ROUTE}`, `- Skill well-known alias: ${DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE}`, `- Skill API format: ${DEFAULT_DOCS_API_ROUTE}?format=skill`, `- Agent discovery: ${DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE}`, `- Agent discovery fallback: ${DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE}`, `- Markdown root: /${normalizedEntry}.md`, `- Markdown pages: /${normalizedEntry}/{slug}.md`);
|
|
176
|
+
if (robotsEnabled) lines.push(`- Robots policy: ${DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE}`);
|
|
173
177
|
if (llmsEnabled) lines.push(`- llms.txt: ${DEFAULT_LLMS_TXT_ROUTE}`, `- llms-full.txt: ${DEFAULT_LLMS_FULL_TXT_ROUTE}`, `- llms well-known aliases: ${DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE}, ${DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE}`);
|
|
174
178
|
if (sitemapConfig.enabled) {
|
|
175
179
|
if (sitemapConfig.xml.enabled) lines.push(`- Sitemap XML: ${sitemapConfig.xml.route}`);
|
|
@@ -226,7 +230,7 @@ function resolveDocsAgentMdxContent(content, audience) {
|
|
|
226
230
|
}
|
|
227
231
|
return output.join("\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
228
232
|
}
|
|
229
|
-
function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, search, mcp, feedback, llms, sitemap, markdown }) {
|
|
233
|
+
function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, search, mcp, feedback, llms, sitemap, robots, markdown }) {
|
|
230
234
|
const normalizedEntry = normalizeDocsPathSegment(entry) || "docs";
|
|
231
235
|
const localesEnabled = i18n !== null;
|
|
232
236
|
const searchEnabled = isSearchEnabled(search);
|
|
@@ -234,6 +238,7 @@ function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, sear
|
|
|
234
238
|
const feedbackSchemaRoute = feedback?.schemaRoute ?? `${feedbackRoute}/schema`;
|
|
235
239
|
const llmsEnabled = llms?.enabled ?? true;
|
|
236
240
|
const sitemapConfig = resolveDocsSitemapConfig(sitemap, { baseUrl: llms?.baseUrl });
|
|
241
|
+
const robotsEnabled = isRobotsDiscoveryEnabled(robots);
|
|
237
242
|
return {
|
|
238
243
|
version: "1",
|
|
239
244
|
name: "@farming-labs/docs",
|
|
@@ -260,6 +265,7 @@ function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, sear
|
|
|
260
265
|
mcp: mcp.enabled,
|
|
261
266
|
search: searchEnabled,
|
|
262
267
|
sitemap: sitemapConfig.enabled,
|
|
268
|
+
robots: robotsEnabled,
|
|
263
269
|
agentFeedback: feedback?.enabled ?? false,
|
|
264
270
|
locales: localesEnabled
|
|
265
271
|
},
|
|
@@ -313,6 +319,11 @@ function buildDocsAgentDiscoverySpec({ origin, entry = "docs", i18n = null, sear
|
|
|
313
319
|
defaultWellKnownRoute: DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE
|
|
314
320
|
}
|
|
315
321
|
},
|
|
322
|
+
robots: {
|
|
323
|
+
enabled: robotsEnabled,
|
|
324
|
+
route: DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE,
|
|
325
|
+
defaultRoute: DEFAULT_AGENT_DISCOVERY_ROBOTS_TXT_ROUTE
|
|
326
|
+
},
|
|
316
327
|
search: {
|
|
317
328
|
enabled: searchEnabled,
|
|
318
329
|
endpoint: `${DEFAULT_DOCS_API_ROUTE}?query={query}`,
|
|
@@ -388,6 +399,11 @@ function isSearchEnabled(search) {
|
|
|
388
399
|
if (search && typeof search === "object" && search.enabled === false) return false;
|
|
389
400
|
return true;
|
|
390
401
|
}
|
|
402
|
+
function isRobotsDiscoveryEnabled(robots) {
|
|
403
|
+
if (robots === false) return false;
|
|
404
|
+
if (robots && typeof robots === "object" && robots.enabled === false) return false;
|
|
405
|
+
return true;
|
|
406
|
+
}
|
|
391
407
|
function compactSkillText(value) {
|
|
392
408
|
return value.replace(/\s+/g, " ").trim();
|
|
393
409
|
}
|