@farming-labs/docs 0.1.75 → 0.1.77

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.
@@ -77,10 +77,10 @@ async function main() {
77
77
  searchApiKey: typeof flags["search-api-key"] === "string" ? flags["search-api-key"] : void 0
78
78
  };
79
79
  if (!parsedCommand.command || parsedCommand.command === "init") {
80
- const { init } = await import("../init-B0oTzLXb.mjs");
80
+ const { init } = await import("../init-BbqfNzav.mjs");
81
81
  await init(initOptions);
82
82
  } else if (parsedCommand.command === "dev") {
83
- const { dev } = await import("../dev-B_Pd2iNL.mjs");
83
+ const { dev } = await import("../dev-rrof7fAe.mjs");
84
84
  await dev(devOptions);
85
85
  } else if (parsedCommand.command === "mcp") {
86
86
  const { runMcp } = await import("../mcp-BPW62uf-.mjs");
@@ -100,7 +100,7 @@ async function main() {
100
100
  printAgentCompactHelp();
101
101
  process.exit(1);
102
102
  } else if (parsedCommand.command === "doctor") {
103
- const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-DRhAgUqi.mjs");
103
+ const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-DPhaOTQQ.mjs");
104
104
  const doctorOptions = parseDoctorArgs(args.slice(1));
105
105
  if (doctorOptions.help) {
106
106
  printDoctorHelp();
@@ -1,4 +1,4 @@
1
- import { K as rootLayoutTemplate, W as postcssConfigTemplate, g as docsLayoutTemplate, v as globalCssTemplate, yt as tsconfigTemplate } from "./templates-BlouROIq.mjs";
1
+ import { K as rootLayoutTemplate, W as postcssConfigTemplate, g as docsLayoutTemplate, v as globalCssTemplate, yt as tsconfigTemplate } from "./templates-AiM7DOMF.mjs";
2
2
  import { i as detectPackageManagerFromLockfile } from "./utils-l0lcezN8.mjs";
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
@@ -1,5 +1,6 @@
1
1
  import { c as DEFAULT_LLMS_TXT_ROUTE, f as DEFAULT_MCP_WELL_KNOWN_ROUTE, i as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, m as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, o as DEFAULT_LLMS_FULL_TXT_ROUTE, p as DEFAULT_SKILL_MD_ROUTE, r as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, t as DEFAULT_AGENT_FEEDBACK_ROUTE, u as DEFAULT_MCP_PUBLIC_ROUTE } from "./agent-CbX-9Z0z.mjs";
2
2
  import "./search-kP0mAXCp.mjs";
3
+ import { i as DEFAULT_SITEMAP_XML_ROUTE, n as DEFAULT_SITEMAP_MD_ROUTE, r as DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE, u as resolveDocsSitemapConfig } from "./sitemap-Buobvabq.mjs";
3
4
  import "./sitemap-server-B370zkEo.mjs";
4
5
  import { createFilesystemDocsMcpSource, resolveDocsMcpConfig } from "./mcp.mjs";
5
6
  import "./server.mjs";
@@ -178,6 +179,13 @@ function readTopLevelBooleanProperty(content, key) {
178
179
  if (match) return match[1] === "true";
179
180
  }
180
181
  }
182
+ function readObjectBooleanProperty(content, key) {
183
+ const propertyPattern = new RegExp(`^\\s*${escapeRegExp(key)}\\s*:\\s*(true|false)(?:\\s|$)`);
184
+ for (const property of splitTopLevelProperties(content)) {
185
+ const match = property.trim().match(propertyPattern);
186
+ if (match) return match[1] === "true";
187
+ }
188
+ }
181
189
  function resolveFeatureEnabled(config, content, key) {
182
190
  const current = config?.[key];
183
191
  if (typeof current === "boolean") return current;
@@ -188,6 +196,22 @@ function resolveFeatureEnabled(config, content, key) {
188
196
  if (!block) return true;
189
197
  return readBooleanProperty(block, "enabled") ?? true;
190
198
  }
199
+ function readSitemapConfigFromStatic(content) {
200
+ const topLevelBoolean = readTopLevelBooleanProperty(content, "sitemap");
201
+ if (typeof topLevelBoolean === "boolean") return topLevelBoolean;
202
+ const block = extractNestedObjectLiteral(content, ["sitemap"]);
203
+ if (!block) return void 0;
204
+ const config = {};
205
+ const enabled = readObjectBooleanProperty(block, "enabled");
206
+ const routePrefix = block.match(/\broutePrefix\s*:\s*["'`]([^"'`]+)["'`]/)?.[1];
207
+ const baseUrl = block.match(/\bbaseUrl\s*:\s*["'`]([^"'`]+)["'`]/)?.[1];
208
+ const manifestPath = block.match(/\bmanifestPath\s*:\s*["'`]([^"'`]+)["'`]/)?.[1];
209
+ if (typeof enabled === "boolean") config.enabled = enabled;
210
+ if (routePrefix) config.routePrefix = routePrefix;
211
+ if (baseUrl) config.baseUrl = baseUrl;
212
+ if (manifestPath) config.manifestPath = manifestPath;
213
+ return config;
214
+ }
191
215
  function resolveStaticExport(config, content) {
192
216
  if (typeof config?.staticExport === "boolean") return config.staticExport;
193
217
  return readTopLevelBooleanProperty(content, "staticExport") ?? false;
@@ -303,7 +327,7 @@ function detectRouteSurface(rootDir, framework, staticExport, files) {
303
327
  apiMounted: false,
304
328
  apiDetail: "Next static export disables /api/docs and the shared agent endpoints.",
305
329
  publicMounted: false,
306
- publicDetail: "Public .md, llms.txt, skill.md, and agent discovery routes depend on /api/docs."
330
+ publicDetail: "Public .md, llms.txt, sitemap, skill.md, and agent discovery routes depend on /api/docs."
307
331
  };
308
332
  return {
309
333
  apiMounted: apiRoutes.length > 0,
@@ -811,6 +835,30 @@ async function probeMcpRoute(baseUrl, route) {
811
835
  };
812
836
  }
813
837
  }
838
+ function asRecord(value) {
839
+ return value && typeof value === "object" ? value : void 0;
840
+ }
841
+ function readDiscoveryRoute(value) {
842
+ return typeof value === "string" && value.startsWith("/") ? value : void 0;
843
+ }
844
+ function hostedSitemapRoutes(discoveryBody) {
845
+ const sitemap = asRecord(asRecord(discoveryBody)?.sitemap);
846
+ if (sitemap?.enabled === false) return {
847
+ enabled: false,
848
+ routes: []
849
+ };
850
+ const xml = asRecord(sitemap?.xml);
851
+ const markdown = asRecord(sitemap?.markdown);
852
+ const routes = [
853
+ xml?.enabled === false ? void 0 : readDiscoveryRoute(xml?.route) ?? DEFAULT_SITEMAP_XML_ROUTE,
854
+ markdown?.enabled === false ? void 0 : readDiscoveryRoute(markdown?.route) ?? DEFAULT_SITEMAP_MD_ROUTE,
855
+ markdown?.enabled === false ? void 0 : readDiscoveryRoute(markdown?.wellKnownRoute) ?? DEFAULT_SITEMAP_MD_WELL_KNOWN_ROUTE
856
+ ].filter((route) => typeof route === "string");
857
+ return {
858
+ enabled: true,
859
+ routes: Array.from(new Set(routes))
860
+ };
861
+ }
814
862
  async function buildHostedAgentChecks(url, pages) {
815
863
  let baseUrl;
816
864
  try {
@@ -824,6 +872,13 @@ async function buildHostedAgentChecks(url, pages) {
824
872
  const llms = await Promise.all([probeTextRoute(baseUrl, DEFAULT_LLMS_TXT_ROUTE), probeTextRoute(baseUrl, DEFAULT_LLMS_FULL_TXT_ROUTE)]);
825
873
  const llmsPassed = llms.filter((result) => result.ok).length;
826
874
  checks.push(makeCheck("hosted-llms", "Hosted llms.txt", llmsPassed === llms.length ? "pass" : llmsPassed > 0 ? "warn" : "fail", llmsPassed === llms.length ? 5 : llmsPassed > 0 ? 3 : 0, 5, llms.map((result) => result.detail).join(" "), llmsPassed === llms.length ? void 0 : "Verify deployed /llms.txt and /llms-full.txt routes return non-empty text."));
875
+ const sitemapRoutes = hostedSitemapRoutes(discovery.body);
876
+ if (sitemapRoutes.enabled && sitemapRoutes.routes.length > 0) {
877
+ const sitemap = await Promise.all(sitemapRoutes.routes.map((route) => probeTextRoute(baseUrl, route)));
878
+ const sitemapPassed = sitemap.filter((result) => result.ok).length;
879
+ 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(", ")}.`));
880
+ } 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."));
881
+ 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."));
827
882
  const skill = await Promise.all([probeTextRoute(baseUrl, DEFAULT_SKILL_MD_ROUTE), probeTextRoute(baseUrl, DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE)]);
828
883
  const skillPassed = skill.filter((result) => result.ok).length;
829
884
  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."));
@@ -928,16 +983,18 @@ async function inspectAgentReadiness(options = {}) {
928
983
  const compactionResult = compactionFreshnessScore(compactionCoverage, compactConfigured);
929
984
  const routeSurface = detectRouteSurface(rootDir, framework, staticExport, files);
930
985
  const mcpConfig = resolveDocsMcpConfig(config?.mcp ?? void 0, { defaultName: siteTitle });
986
+ const sitemapConfig = resolveDocsSitemapConfig(config?.sitemap ?? readSitemapConfigFromStatic(configContent) ?? false);
931
987
  const feedbackRoute = DEFAULT_AGENT_FEEDBACK_ROUTE;
932
988
  const feedbackSchemaRoute = `${feedbackRoute}/schema`;
933
989
  const checks = [];
934
990
  checks.push(makeCheck("config", "Docs config", "pass", 10, configCheckMax, loadedConfig ? `Resolved ${path.relative(rootDir, loadedConfig.path).replace(/\\/g, "/")} and evaluated the config module.` : `Resolved ${path.relative(rootDir, configPath).replace(/\\/g, "/")} using static parsing fallback.`));
935
991
  const contentDirAbs = path.resolve(rootDir, contentDir);
936
992
  checks.push(coverage.totalPages > 0 ? makeCheck("content", "Docs content", "pass", 10, 10, `Found ${coverage.totalPages} docs page${coverage.totalPages === 1 ? "" : "s"} in ${path.relative(rootDir, contentDirAbs).replace(/\\/g, "/")}.`) : makeCheck("content", "Docs content", "fail", 0, 10, `No folder-based docs pages were found in ${path.relative(rootDir, contentDirAbs).replace(/\\/g, "/")}.`, "Add index/page MDX files under the configured contentDir so the machine-readable surfaces have pages to serve."));
937
- checks.push(makeCheck("api-route", "Docs API route", routeSurface.apiMounted ? "pass" : "fail", routeSurface.apiMounted ? 10 : 0, 10, routeSurface.apiDetail, routeSurface.apiMounted ? void 0 : "Wire the framework docs API route so /api/docs can serve markdown, llms.txt, skill.md, and discovery responses."));
938
- checks.push(makeCheck("public-routes", "Public agent routes", routeSurface.publicMounted ? "pass" : "fail", routeSurface.publicMounted ? 10 : 0, 10, routeSurface.publicDetail, routeSurface.publicMounted ? void 0 : "Add the framework public forwarder so /.well-known/*, /llms.txt, /skill.md, /mcp, and .md routes resolve from the shared docs API."));
993
+ checks.push(makeCheck("api-route", "Docs API route", routeSurface.apiMounted ? "pass" : "fail", routeSurface.apiMounted ? 10 : 0, 10, routeSurface.apiDetail, routeSurface.apiMounted ? void 0 : "Wire the framework docs API route so /api/docs can serve markdown, llms.txt, sitemap, skill.md, and discovery responses."));
994
+ checks.push(makeCheck("public-routes", "Public agent routes", routeSurface.publicMounted ? "pass" : "fail", routeSurface.publicMounted ? 10 : 0, 10, routeSurface.publicDetail, routeSurface.publicMounted ? void 0 : "Add the framework public forwarder so /.well-known/*, /llms.txt, /sitemap.xml, /sitemap.md, /skill.md, /mcp, and .md routes resolve from the shared docs API."));
939
995
  checks.push(makeCheck("agent-discovery", "Agent discovery spec", routeSurface.apiMounted && routeSurface.publicMounted ? "pass" : "fail", routeSurface.apiMounted && routeSurface.publicMounted ? 5 : 0, 5, routeSurface.apiMounted && routeSurface.publicMounted ? `Expected discovery endpoints are available through ${DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE}, ${DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE}, and /api/docs?agent=spec.` : "Could not verify the shared agent discovery spec endpoints because docs API/public route wiring is incomplete.", routeSurface.apiMounted && routeSurface.publicMounted ? void 0 : "Make sure both the docs API handler and the public docs forwarder are mounted so agents can discover the site through the well-known agent spec."));
940
- checks.push(llmsEnabled ? makeCheck("llms", "llms.txt discovery", "pass", 10, 10, `Enabled via ${DEFAULT_LLMS_TXT_ROUTE} and ${DEFAULT_LLMS_FULL_TXT_ROUTE}.`) : makeCheck("llms", "llms.txt discovery", "warn", 0, 10, `${DEFAULT_LLMS_TXT_ROUTE} and ${DEFAULT_LLMS_FULL_TXT_ROUTE} are disabled in docs config.`, "Enable llmsTxt so agents and GEO crawlers can discover the docs index and full context surfaces."));
996
+ checks.push(llmsEnabled ? makeCheck("llms", "llms.txt discovery", "pass", 5, 5, `Enabled via ${DEFAULT_LLMS_TXT_ROUTE} and ${DEFAULT_LLMS_FULL_TXT_ROUTE}.`) : makeCheck("llms", "llms.txt discovery", "warn", 0, 5, `${DEFAULT_LLMS_TXT_ROUTE} and ${DEFAULT_LLMS_FULL_TXT_ROUTE} are disabled in docs config.`, "Enable llmsTxt so agents and GEO crawlers can discover the docs index and full context surfaces."));
997
+ checks.push(sitemapConfig.enabled ? makeCheck("sitemap", "Sitemap discovery", "pass", 5, 5, `Enabled via ${sitemapConfig.xml.route}, ${sitemapConfig.markdown.route}, and ${sitemapConfig.markdown.wellKnownRoute}.`) : makeCheck("sitemap", "Sitemap discovery", "warn", 0, 5, "Generated sitemap routes are disabled in docs config.", "Enable sitemap so crawlers and agents can discover canonical docs URLs, semantic sections, and lastmod freshness metadata."));
941
998
  checks.push(skillFileExists ? makeCheck("skill", "Skill document", "pass", 5, 5, `Found root skill.md for ${DEFAULT_SKILL_MD_ROUTE} and ${DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE}.`) : makeCheck("skill", "Skill document", "warn", 3, 5, `No root skill.md found; the framework will serve the generated fallback at ${DEFAULT_SKILL_MD_ROUTE}.`, "Add a root skill.md if you want a custom site-specific bootstrap document instead of the generated fallback."));
942
999
  checks.push(mcpEnabled ? makeCheck("mcp", "MCP access", "pass", 10, 10, `Enabled with public aliases ${DEFAULT_MCP_PUBLIC_ROUTE} and ${DEFAULT_MCP_WELL_KNOWN_ROUTE} (canonical route ${mcpConfig.route}).`) : makeCheck("mcp", "MCP access", "warn", 0, 10, "MCP is disabled in docs config.", "Enable mcp so agents can use list/search/read tools directly instead of only scraping markdown routes."));
943
1000
  checks.push(searchEnabled ? makeCheck("search", "Search surface", "pass", 5, 5, "Search is enabled for the shared docs API and agent flows.") : makeCheck("search", "Search surface", "warn", 0, 5, "Search is disabled in docs config.", "Enable search so agents can narrow retrieval before reading whole markdown pages."));
@@ -1,4 +1,4 @@
1
- import { $ as svelteDocsPublicHookTemplate, A as nextConfigMergedTemplate, B as nuxtServerApiDocsRouteTemplate, C as injectRootProviderIntoLayout, D as injectTanstackVitePlugins, E as injectTanstackRootProviderIntoRoute, F as nuxtDocsConfigTemplate, G as quickstartPageTemplate, H as nuxtServerDocsPublicMiddlewareTemplate, I as nuxtDocsPageTemplate, J as svelteDocsApiRouteTemplate, K as rootLayoutTemplate, L as nuxtGlobalCssTemplate, M as nextLocaleDocPageTemplate, N as nextLocalizedPageTemplate, O as installationPageTemplate, P as nuxtConfigTemplate, Q as svelteDocsPageTemplate, R as nuxtInstallationPageTemplate, S as injectNuxtCssImport, T as injectSvelteDocsPublicHook, U as nuxtWelcomePageTemplate, V as nuxtServerApiReferenceRouteTemplate, W as postcssConfigTemplate, X as svelteDocsLayoutServerTemplate, Y as svelteDocsConfigTemplate, Z as svelteDocsLayoutTemplate, _ as getAstroAdapterPkg, _t as tanstackViteConfigTemplate, a as astroDocsIndexTemplate, at as svelteWelcomePageTemplate, b as injectAstroDocsMiddleware, bt as welcomePageTemplate, c as astroDocsServerTemplate, ct as tanstackDocsCatchAllRouteTemplate, d as astroQuickstartPageTemplate, dt as tanstackDocsIndexRouteTemplate, et as svelteDocsServerTemplate, f as astroWelcomePageTemplate, ft as tanstackDocsPublicRouteTemplate, g as docsLayoutTemplate, gt as tanstackRootRouteTemplate, h as docsConfigTemplate, ht as tanstackQuickstartPageTemplate, i as astroDocsConfigTemplate, it as svelteRootLayoutTemplate, j as nextConfigTemplate, k as nextApiReferencePageTemplate, l as astroGlobalCssTemplate, lt as tanstackDocsConfigTemplate, m as customThemeTsTemplate, mt as tanstackInstallationPageTemplate, n as astroApiRouteTemplate, nt as svelteInstallationPageTemplate, o as astroDocsMiddlewareTemplate, ot as tanstackApiDocsRouteTemplate, p as customThemeCssTemplate, pt as tanstackDocsServerTemplate, q as svelteApiReferenceRouteTemplate, r as astroConfigTemplate, rt as svelteQuickstartPageTemplate, s as astroDocsPageTemplate, st as tanstackApiReferenceRouteTemplate, t as astroApiReferenceRouteTemplate, tt as svelteGlobalCssTemplate, u as astroInstallationPageTemplate, ut as tanstackDocsFunctionsTemplate, v as globalCssTemplate, vt as tanstackWelcomePageTemplate, w as injectSvelteCssImport, x as injectCssImport, y as injectAstroCssImport, yt as tsconfigTemplate, z as nuxtQuickstartPageTemplate } from "./templates-BlouROIq.mjs";
1
+ import { $ as svelteDocsPublicHookTemplate, A as nextConfigMergedTemplate, B as nuxtServerApiDocsRouteTemplate, C as injectRootProviderIntoLayout, D as injectTanstackVitePlugins, E as injectTanstackRootProviderIntoRoute, F as nuxtDocsConfigTemplate, G as quickstartPageTemplate, H as nuxtServerDocsPublicMiddlewareTemplate, I as nuxtDocsPageTemplate, J as svelteDocsApiRouteTemplate, K as rootLayoutTemplate, L as nuxtGlobalCssTemplate, M as nextLocaleDocPageTemplate, N as nextLocalizedPageTemplate, O as installationPageTemplate, P as nuxtConfigTemplate, Q as svelteDocsPageTemplate, R as nuxtInstallationPageTemplate, S as injectNuxtCssImport, T as injectSvelteDocsPublicHook, U as nuxtWelcomePageTemplate, V as nuxtServerApiReferenceRouteTemplate, W as postcssConfigTemplate, X as svelteDocsLayoutServerTemplate, Y as svelteDocsConfigTemplate, Z as svelteDocsLayoutTemplate, _ as getAstroAdapterPkg, _t as tanstackViteConfigTemplate, a as astroDocsIndexTemplate, at as svelteWelcomePageTemplate, b as injectAstroDocsMiddleware, bt as welcomePageTemplate, c as astroDocsServerTemplate, ct as tanstackDocsCatchAllRouteTemplate, d as astroQuickstartPageTemplate, dt as tanstackDocsIndexRouteTemplate, et as svelteDocsServerTemplate, f as astroWelcomePageTemplate, ft as tanstackDocsPublicRouteTemplate, g as docsLayoutTemplate, gt as tanstackRootRouteTemplate, h as docsConfigTemplate, ht as tanstackQuickstartPageTemplate, i as astroDocsConfigTemplate, it as svelteRootLayoutTemplate, j as nextConfigTemplate, k as nextApiReferencePageTemplate, l as astroGlobalCssTemplate, lt as tanstackDocsConfigTemplate, m as customThemeTsTemplate, mt as tanstackInstallationPageTemplate, n as astroApiRouteTemplate, nt as svelteInstallationPageTemplate, o as astroDocsMiddlewareTemplate, ot as tanstackApiDocsRouteTemplate, p as customThemeCssTemplate, pt as tanstackDocsServerTemplate, q as svelteApiReferenceRouteTemplate, r as astroConfigTemplate, rt as svelteQuickstartPageTemplate, s as astroDocsPageTemplate, st as tanstackApiReferenceRouteTemplate, t as astroApiReferenceRouteTemplate, tt as svelteGlobalCssTemplate, u as astroInstallationPageTemplate, ut as tanstackDocsFunctionsTemplate, v as globalCssTemplate, vt as tanstackWelcomePageTemplate, w as injectSvelteCssImport, x as injectCssImport, y as injectAstroCssImport, yt as tsconfigTemplate, z as nuxtQuickstartPageTemplate } from "./templates-AiM7DOMF.mjs";
2
2
  import { a as devInstallCommand, c as installCommand, d as writeFileSafe, i as detectPackageManagerFromLockfile, l as readFileSafe, n as detectGlobalCssFiles, o as exec, r as detectNextAppDir, s as fileExists, t as detectFramework, u as spawnAndWaitFor } from "./utils-l0lcezN8.mjs";
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
@@ -2266,7 +2266,7 @@ ${cfg.entry}/ # Markdown content
2266
2266
  quickstart/page.md
2267
2267
  server/
2268
2268
  api/docs.ts # Page data, search, and AI chat API
2269
- middleware/docs-public.ts # llms.txt, .well-known, .md, and MCP aliases
2269
+ middleware/docs-public.ts # llms.txt, sitemap, .well-known, .md, and MCP aliases
2270
2270
  pages/
2271
2271
  ${cfg.entry}/[[...slug]].vue # Docs catch-all page
2272
2272
  docs.config.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farming-labs/docs",
3
- "version": "0.1.75",
3
+ "version": "0.1.77",
4
4
  "description": "Modern, flexible MDX-based docs framework — core types, config, and CLI",
5
5
  "keywords": [
6
6
  "docs",