@farming-labs/docs 0.2.72 → 0.2.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/{agent-pS2nNQS3.mjs → agent-BJ0KXN-A.mjs} +583 -765
  2. package/dist/{agent-DbDfIqhe.mjs → agent-D0LEY2Vy.mjs} +4 -3
  3. package/dist/{agent-evals-CjYzCQMZ.mjs → agent-evals-LIScgQVm.mjs} +86 -43
  4. package/dist/{agent-export-CpQhD8eA.mjs → agent-export-B92pNe6g.mjs} +12 -11
  5. package/dist/agent-skills-bundle.d.mts +1 -1
  6. package/dist/{agent-skills-server-DZnNB4_S.d.mts → agent-skills-server-BqvIGQb1.d.mts} +2 -2
  7. package/dist/{agent-skills-server-BPVv4gMg.mjs → agent-skills-server-noFn1l_p.mjs} +1 -1
  8. package/dist/agent-skills-vite.d.mts +3 -3
  9. package/dist/agent-skills-vite.mjs +2 -2
  10. package/dist/{agents-B-1h9Jlm.mjs → agents-C228QGbp.mjs} +10 -9
  11. package/dist/cli/index.mjs +34 -30
  12. package/dist/client/react.d.mts +1 -1
  13. package/dist/{cloud-ask-ai-D9gIN4Vr.d.mts → cloud-ask-ai-6X9pVjIY.d.mts} +1 -1
  14. package/dist/{cloud-CyysfDny.mjs → cloud-pdNC-tyj.mjs} +3 -3
  15. package/dist/{codeblocks-DAj7EAwt.mjs → codeblocks-CFuurVIH.mjs} +2 -2
  16. package/dist/{dev-qE7MYEh9.mjs → dev-Cc1cFFj-.mjs} +2 -2
  17. package/dist/docs-cloud-server.d.mts +2 -2
  18. package/dist/docs-cloud-server.mjs +1 -1
  19. package/dist/{doctor-CBy8-tPu.mjs → doctor-CgrUZ3tY.mjs} +15 -14
  20. package/dist/{downgrade-DCxezPZI.mjs → downgrade-w7e6Se0L.mjs} +2 -2
  21. package/dist/{golden-evaluations-DGg_eHIY.mjs → golden-evaluations-DTEPZeb0.mjs} +4 -3
  22. package/dist/index.d.mts +72 -6
  23. package/dist/index.mjs +9 -8
  24. package/dist/{init-p1MHf06G.mjs → init-DAkI0Lkf.mjs} +3 -3
  25. package/dist/markdown-rendering.d.mts +75 -0
  26. package/dist/markdown-rendering.mjs +618 -0
  27. package/dist/markdown-sections-7OoA7ylx.mjs +1492 -0
  28. package/dist/{mcp-BNK45dzD.mjs → mcp-YD37HlPY.mjs} +12 -9
  29. package/dist/mcp.d.mts +13 -2
  30. package/dist/mcp.mjs +121 -60
  31. package/dist/{metadata-D6qlWDu-.mjs → metadata-N252j5_a.mjs} +1 -1
  32. package/dist/{package-version-BXHcIm1T.mjs → package-version-n5AFur8a.mjs} +1 -1
  33. package/dist/{reading-time-DvTuW2Iy.mjs → prompt-references-BIS1eXt4.mjs} +158 -4
  34. package/dist/{search-1aftosa5.d.mts → retrieval-digest-9Kp3uSaZ.d.mts} +69 -5
  35. package/dist/{review-Cace7A2c.mjs → review-Dbzkdl6K.mjs} +10 -9
  36. package/dist/{robots-DmE_wXvG.mjs → robots-DUO0r4UI.mjs} +6 -5
  37. package/dist/{robots-C2SindI5.mjs → robots-RbgmSvPH.mjs} +2 -2
  38. package/dist/{search-BbArHODP.mjs → search-DIyIl-tE.mjs} +1288 -149
  39. package/dist/{search-DB3svkNQ.mjs → search-hcqaEZVN.mjs} +66 -27
  40. package/dist/server.d.mts +5 -5
  41. package/dist/server.mjs +10 -9
  42. package/dist/{sitemap-DPTLh_26.mjs → sitemap-jhkS_jYx.mjs} +10 -9
  43. package/dist/{sitemap-server-PUoOhplO.mjs → sitemap-server-BfyBM7_V.mjs} +1 -1
  44. package/dist/{standards-discovery-CYfiQE13.mjs → standards-discovery-BwL5ffGx.mjs} +4 -3
  45. package/dist/{standards-discovery-DRJ10g7B.d.mts → standards-discovery-CdrOE-05.d.mts} +5 -4
  46. package/dist/{types-B9DNNAdT.d.mts → types-clg5J1R4.d.mts} +60 -1
  47. package/dist/{upgrade-DDJQ5l6n.mjs → upgrade-oz-GChgt.mjs} +2 -2
  48. package/package.json +9 -1
  49. /package/dist/{cloud-ask-ai-hnJfj8-X.mjs → cloud-ask-ai-sbpjOR2K.mjs} +0 -0
  50. /package/dist/{code-blocks-qe0T8-xe.mjs → code-blocks-DnNVNK2M.mjs} +0 -0
  51. /package/dist/{config-z7_R0f86.mjs → config-Wcdj-D0a.mjs} +0 -0
  52. /package/dist/{errors-Cc_qplZU.mjs → errors-DbOhkE1h.mjs} +0 -0
  53. /package/dist/{i18n-CCaFUnAN.mjs → i18n-hHVWcflJ.mjs} +0 -0
  54. /package/dist/{templates-BJnf6B8l.mjs → templates-C6avM0U3.mjs} +0 -0
  55. /package/dist/{utils-C4RC8Zq_.mjs → utils-DpiIioYb.mjs} +0 -0
@@ -1,7 +1,8 @@
1
- import { B as findDocsMarkdownPage, an as stripGeneratedPageAgentContractMarkdown, at as renderDocsMarkdownDocument, nn as normalizePageAgentFrontmatter } from "./agent-pS2nNQS3.mjs";
2
- import { E as hashGeneratedAgentContent, O as parseGeneratedAgentDocument, T as GENERATED_AGENT_PROVENANCE_VERSION, k as serializeGeneratedAgentDocument } from "./search-BbArHODP.mjs";
1
+ import { B as findDocsMarkdownPage, at as renderDocsMarkdownDocument } from "./agent-BJ0KXN-A.mjs";
2
+ import { v as normalizePageAgentFrontmatter, x as stripGeneratedPageAgentContractMarkdown } from "./markdown-sections-7OoA7ylx.mjs";
3
+ import { F as serializeGeneratedAgentDocument, M as hashGeneratedAgentContent, P as parseGeneratedAgentDocument, j as GENERATED_AGENT_PROVENANCE_VERSION } from "./search-DIyIl-tE.mjs";
3
4
  import { createFilesystemDocsMcpSource } from "./mcp.mjs";
4
- import { _ as resolveDocsContentDir, a as loadDocsConfigModule, c as loadProjectEnv, d as readNavTitle, f as readNumberProperty, g as resolveDocsConfigPath, h as readTopLevelStringProperty, l as readBooleanProperty, p as readStringProperty, t as extractNestedObjectLiteral, u as readEnvReferenceProperty } from "./config-z7_R0f86.mjs";
5
+ import { _ as resolveDocsContentDir, a as loadDocsConfigModule, c as loadProjectEnv, d as readNavTitle, f as readNumberProperty, g as resolveDocsConfigPath, h as readTopLevelStringProperty, l as readBooleanProperty, p as readStringProperty, t as extractNestedObjectLiteral, u as readEnvReferenceProperty } from "./config-Wcdj-D0a.mjs";
5
6
  import { createRequire } from "node:module";
6
7
  import matter from "gray-matter";
7
8
  import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
@@ -1,7 +1,7 @@
1
- import { Gt as findDocsMarkdownSection } from "./agent-pS2nNQS3.mjs";
2
- import { C as normalizeAgentVersion, S as normalizeAgentScopeValues, _ as resolveSearchRequestConfig, b as normalizeAgentFramework, d as performDocsSearch, t as buildDocsAskAIContext, u as normalizeDocsSearchFilters, v as agentVersionConstraintMatches, x as normalizeAgentLocale, y as agentVersionConstraintsOverlap } from "./search-BbArHODP.mjs";
1
+ import { S as upsertPageAgentContractMarkdown, l as stripDocsGeneratedAgentContractMarkers, o as findDocsMarkdownSection } from "./markdown-sections-7OoA7ylx.mjs";
2
+ import { C as agentVersionConstraintsOverlap, D as normalizeAgentVersion, E as normalizeAgentScopeValues, S as agentVersionConstraintMatches, T as normalizeAgentLocale, b as resolveSearchRequestConfig, f as normalizeDocsSearchFilters, p as performDocsSearch, t as buildDocsAskAIContext, w as normalizeAgentFramework, x as agentVersionConstraintGroupsOverlap } from "./search-DIyIl-tE.mjs";
3
3
  import { buildDocsMcpContext } from "./mcp.mjs";
4
- import { i as validateCodeBlockPlans, n as planCodeBlockTargets, r as resolveDocsCodeBlocksValidateConfig, t as extractCodeBlocksFromMarkdown } from "./code-blocks-qe0T8-xe.mjs";
4
+ import { i as validateCodeBlockPlans, n as planCodeBlockTargets, r as resolveDocsCodeBlocksValidateConfig, t as extractCodeBlocksFromMarkdown } from "./code-blocks-DnNVNK2M.mjs";
5
5
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
6
6
  import { dirname, isAbsolute, join, relative } from "node:path";
7
7
  import { createJiti } from "jiti";
@@ -813,6 +813,7 @@ function safeDecode(value) {
813
813
  function canonicalizeSource(value, baseUrl) {
814
814
  const rawValue = value.trim();
815
815
  let pathname;
816
+ let search;
816
817
  let hash;
817
818
  let origin = "";
818
819
  try {
@@ -824,27 +825,38 @@ function canonicalizeSource(value, baseUrl) {
824
825
  const base = configuredBase ?? new URL("https://docs.local");
825
826
  const parsed = new URL(rawValue, base);
826
827
  pathname = parsed.pathname;
828
+ search = parsed.search;
827
829
  hash = parsed.hash;
828
830
  const explicitlySchemed = /^[a-z][a-z\d+.-]*:/iu.test(rawValue);
829
831
  if ((explicitlySchemed && (parsed.protocol === "http:" || parsed.protocol === "https:") || /^[\\/]{2}/u.test(rawValue)) && (!configuredBase || parsed.origin !== configuredBase.origin)) origin = parsed.origin;
830
832
  if (explicitlySchemed && parsed.protocol !== "http:" && parsed.protocol !== "https:") origin = `${parsed.protocol}//${parsed.host}`;
831
833
  } catch {
832
- const [pathAndQuery = "/", fragment = ""] = rawValue.split("#", 2);
833
- pathname = pathAndQuery.split("?", 1)[0] || "/";
834
+ const hashIndex = rawValue.indexOf("#");
835
+ const pathAndQuery = hashIndex >= 0 ? rawValue.slice(0, hashIndex) : rawValue || "/";
836
+ const fragment = hashIndex >= 0 ? rawValue.slice(hashIndex + 1) : "";
837
+ const queryIndex = pathAndQuery.indexOf("?");
838
+ pathname = (queryIndex >= 0 ? pathAndQuery.slice(0, queryIndex) : pathAndQuery) || "/";
839
+ search = queryIndex >= 0 ? pathAndQuery.slice(queryIndex) : "";
834
840
  hash = fragment ? `#${fragment}` : "";
835
841
  }
836
842
  pathname = pathname.replace(/\/{2,}/gu, "/").replace(/\.md$/iu, "");
837
843
  if (pathname !== "/") pathname = pathname.replace(/\/+$/gu, "");
838
844
  if (!pathname.startsWith("/")) pathname = `/${pathname}`;
839
- const normalizedHash = hash ? `#${safeDecode(hash.slice(1)).trim().replace(/^#+/u, "").toLowerCase()}` : "";
840
- return `${origin}${pathname || "/"}${normalizedHash === "#" ? "" : normalizedHash}`;
845
+ const decodedHash = hash ? safeDecode(hash.slice(1)).trim() : "";
846
+ const normalizedHash = decodedHash ? `#${encodeURIComponent(decodedHash)}` : "";
847
+ return `${origin}${pathname || "/"}${search}${normalizedHash === "#" ? "" : normalizedHash}`;
841
848
  }
842
849
  function sourcePage(value) {
843
850
  return canonicalizeSource(value).split("#", 1)[0] ?? "/";
844
851
  }
845
852
  function sourceMatches(actual, expected, baseUrl) {
846
- const canonicalActual = canonicalizeSource(actual, baseUrl);
853
+ let canonicalActual = canonicalizeSource(actual, baseUrl);
847
854
  const canonicalExpected = canonicalizeSource(expected, baseUrl);
855
+ if (!(canonicalExpected.split("#", 1)[0] ?? canonicalExpected).includes("?")) {
856
+ const hashIndex = canonicalActual.indexOf("#");
857
+ const hash = hashIndex >= 0 ? canonicalActual.slice(hashIndex) : "";
858
+ canonicalActual = `${(hashIndex >= 0 ? canonicalActual.slice(0, hashIndex) : canonicalActual).split("?", 1)[0]}${hash}`;
859
+ }
848
860
  return canonicalExpected.includes("#") ? canonicalActual === canonicalExpected : sourcePage(canonicalActual) === sourcePage(canonicalExpected);
849
861
  }
850
862
  function uniqueCanonicalSources(values, baseUrl) {
@@ -864,11 +876,14 @@ function getPageScope(page) {
864
876
  return {
865
877
  framework: Array.from(new Set([...topFramework, ...contractFramework])),
866
878
  version: Array.from(new Set([...topVersion, ...contractVersion])),
879
+ versionGroups: [topVersion, contractVersion].filter((group) => group.length > 0),
867
880
  package: packageValues,
868
881
  tags,
869
882
  locale,
870
883
  frameworkAmbiguous: topFramework.length > 0 && contractFramework.length > 0 && !valuesOverlap(topFramework, contractFramework, (left, right) => left === right),
871
- versionAmbiguous: topVersion.length > 0 && contractVersion.length > 0 && !valuesOverlap(topVersion, contractVersion, agentVersionConstraintsOverlap)
884
+ versionAmbiguous: topVersion.length > 0 && contractVersion.length > 0 && !valuesOverlap(topVersion, contractVersion, agentVersionConstraintsOverlap),
885
+ packageAmbiguous: false,
886
+ tagsAmbiguous: false
872
887
  };
873
888
  }
874
889
  function compareCodePoints(left, right) {
@@ -891,7 +906,7 @@ function toGoldenSources(sources, relevantSources, baseUrl) {
891
906
  }
892
907
  function toContextCandidates(sources, pagesByUrl) {
893
908
  return sources.flatMap((source) => {
894
- const page = pagesByUrl.get(sourcePage(source.pageUrl));
909
+ const page = findPageForSource(pagesByUrl, source.pageUrl);
895
910
  if (!page) return [];
896
911
  return [{
897
912
  page,
@@ -934,23 +949,40 @@ function extractRenderedCitations(context, sources) {
934
949
  blockUtf8Bytes
935
950
  };
936
951
  }
952
+ function getPageAgentSectionMarkdown(page) {
953
+ return upsertPageAgentContractMarkdown(page.agentRawContent ?? page.agentFallbackRawContent ?? page.agentContent ?? page.agentFallbackContent ?? page.rawContent ?? page.content, page.agent);
954
+ }
955
+ function cleanPageAgentContractMarkers(markdown, sourceMarkdown, startLine) {
956
+ return sourceMarkdown && startLine ? stripDocsGeneratedAgentContractMarkers(markdown, {
957
+ sourceMarkdown,
958
+ startLine
959
+ }) : stripDocsGeneratedAgentContractMarkers(markdown);
960
+ }
937
961
  function getPageAgentMarkdown(page) {
938
- return page.agentRawContent ?? page.agentFallbackRawContent ?? page.agentContent ?? page.agentFallbackContent ?? page.rawContent ?? page.content;
962
+ return cleanPageAgentContractMarkers(getPageAgentSectionMarkdown(page));
939
963
  }
940
964
  function findPageForSource(pagesByUrl, value) {
941
- return pagesByUrl.get(sourcePage(value));
965
+ const canonicalPage = sourcePage(value);
966
+ return pagesByUrl.get(canonicalPage) ?? pagesByUrl.get(canonicalPage.split("?", 1)[0] ?? "/");
942
967
  }
943
968
  function getResultAnchor(value) {
944
- return canonicalizeSource(value).split("#", 2)[1] || void 0;
945
- }
946
- function hydrateSearchSource(result, index, pagesByUrl, contentMode, baseUrl) {
947
- const normalizedResultUrl = canonicalizeSource(result.url, baseUrl);
948
- const page = findPageForSource(pagesByUrl, normalizedResultUrl);
949
- const anchor = getResultAnchor(result.url);
969
+ const canonical = canonicalizeSource(value);
970
+ const hashIndex = canonical.indexOf("#");
971
+ return (hashIndex >= 0 ? canonical.slice(hashIndex + 1) : "") || void 0;
972
+ }
973
+ /** @internal */
974
+ function hydrateDocsEvaluationSearchSource(result, index, pagesByUrl, contentMode, baseUrl) {
975
+ const normalizedTransportUrl = canonicalizeSource(result.url, baseUrl);
976
+ const normalizedResultUrl = canonicalizeSource(result.source?.canonicalUrl ?? result.url, baseUrl);
977
+ const page = findPageForSource(pagesByUrl, normalizedResultUrl) ?? findPageForSource(pagesByUrl, normalizedTransportUrl);
978
+ const anchor = getResultAnchor(result.source?.canonicalUrl ?? result.url);
950
979
  const section = anchor ?? result.section;
951
- const pageSection = page && section ? findDocsMarkdownSection(getPageAgentMarkdown(page), section) : void 0;
952
- const content = contentMode === "page-section" && page ? (pageSection?.content ?? getPageAgentMarkdown(page)).trim() : [result.content, result.description].filter(Boolean).join("\n\n").trim();
980
+ const sectionMarkdown = page ? getPageAgentSectionMarkdown(page) : void 0;
981
+ const pageSection = sectionMarkdown && section ? findDocsMarkdownSection(sectionMarkdown, section) : void 0;
982
+ if (contentMode === "page-section" && page && section && !pageSection) return void 0;
983
+ const content = contentMode === "page-section" && page ? cleanPageAgentContractMarkers(pageSection?.content ?? getPageAgentMarkdown(page), pageSection ? sectionMarkdown : void 0, pageSection?.startLine).trim() : [result.content, result.description].filter(Boolean).join("\n\n").trim();
953
984
  const scope = page ? getPageScope(page) : void 0;
985
+ const provenanceScope = result.source?.scope;
954
986
  const url = normalizedResultUrl;
955
987
  return {
956
988
  id: result.id || `evaluation-result-${index + 1}`,
@@ -960,12 +992,13 @@ function hydrateSearchSource(result, index, pagesByUrl, contentMode, baseUrl) {
960
992
  section: pageSection?.title ?? result.section,
961
993
  anchor: pageSection?.anchor ?? anchor,
962
994
  sourcePath: page?.sourcePath,
963
- lastModified: page?.lastModified,
964
- locale: scope?.locale[0],
965
- framework: scope?.framework[0],
966
- version: scope?.version[0],
967
- package: scope?.package.length ? [...scope.package] : void 0,
968
- tags: scope?.tags.length ? [...scope.tags] : void 0,
995
+ lastModified: result.source?.lastModified ?? page?.lastModified,
996
+ locale: scope?.locale[0] ?? provenanceScope?.locale?.[0],
997
+ framework: scope?.framework[0] ?? provenanceScope?.framework?.[0],
998
+ version: scope?.version[0] ?? provenanceScope?.version?.[0],
999
+ package: scope?.package.length ? [...scope.package] : provenanceScope?.package?.length ? [...provenanceScope.package] : void 0,
1000
+ tags: scope?.tags.length ? [...scope.tags] : provenanceScope?.tags?.length ? [...provenanceScope.tags] : void 0,
1001
+ source: result.source,
969
1002
  score: result.score,
970
1003
  content,
971
1004
  chars: content.length,
@@ -1155,9 +1188,12 @@ function parseAskAIContextSources(options) {
1155
1188
  integrity = false;
1156
1189
  continue;
1157
1190
  }
1158
- const urlLines = block.slice(0, contentStart).split(/\r?\n/u).map((line) => line.match(/^URL:\s+(.+)$/u)?.[1]?.trim()).filter((value) => Boolean(value));
1191
+ const headerLines = block.slice(0, contentStart).split(/\r?\n/u);
1192
+ const urlLines = headerLines.map((line) => line.match(/^URL:\s+(.+)$/u)?.[1]?.trim()).filter((value) => Boolean(value));
1193
+ const canonicalUrlLines = headerLines.map((line) => line.match(/^Canonical URL:\s+(.+)$/u)?.[1]?.trim()).filter((value) => Boolean(value));
1159
1194
  if (urlLines.length !== 1) integrity = false;
1160
- const url = canonicalizeSource(urlLines[0] ?? "/", options.baseUrl);
1195
+ if (canonicalUrlLines.length > 1) integrity = false;
1196
+ const url = canonicalizeSource(canonicalUrlLines[0] ?? urlLines[0] ?? "/", options.baseUrl);
1161
1197
  const expected = options.results[index];
1162
1198
  if (!expected || !sourceMatches(url, expected.url) || canonicalizeSource(expected.url) !== url) integrity = false;
1163
1199
  const content = block.slice(contentStart + 2);
@@ -1201,7 +1237,8 @@ async function buildGoldenSurface(options) {
1201
1237
  package: options.task.filters?.package,
1202
1238
  tags: options.task.filters?.tags,
1203
1239
  locale: options.task.filters?.locale,
1204
- maxResults: options.topK
1240
+ maxResults: options.topK,
1241
+ baseUrl: options.runOptions.baseUrl
1205
1242
  };
1206
1243
  const [rankedContext, budgetedContext] = await Promise.all([buildDocsMcpContext({
1207
1244
  ...contextOptions,
@@ -1254,7 +1291,7 @@ async function buildGoldenSurface(options) {
1254
1291
  signal
1255
1292
  })
1256
1293
  });
1257
- const rankedSources = results.slice(0, options.topK).map((result, index) => hydrateSearchSource(result, index, pagesByUrl, "result", options.runOptions.baseUrl));
1294
+ const rankedSources = results.slice(0, options.topK).map((result, index) => hydrateDocsEvaluationSearchSource(result, index, pagesByUrl, "result", options.runOptions.baseUrl)).filter((source) => Boolean(source));
1258
1295
  return {
1259
1296
  surface,
1260
1297
  provider,
@@ -1273,7 +1310,7 @@ async function buildGoldenSurface(options) {
1273
1310
  citationEvidence: {
1274
1311
  mode: "results",
1275
1312
  actual: rankedSources.map((source) => canonicalizeSource(source.url)),
1276
- integrity: rankedSources.every((source, index) => source.url === canonicalizeSource(results[index]?.url ?? "", options.runOptions.baseUrl))
1313
+ integrity: rankedSources.every((source, index) => source.url === canonicalizeSource(results[index]?.source?.canonicalUrl ?? results[index]?.url ?? "", options.runOptions.baseUrl))
1277
1314
  }
1278
1315
  };
1279
1316
  }
@@ -1300,8 +1337,8 @@ async function buildGoldenSurface(options) {
1300
1337
  signal
1301
1338
  })
1302
1339
  });
1303
- const rankedSources = askAI.searchResults.slice(0, options.topK).map((result, index) => hydrateSearchSource(result, index, pagesByUrl, "result", options.runOptions.baseUrl));
1304
- const resultSources = askAI.results.map((result, index) => hydrateSearchSource(result, index, pagesByUrl, "page-section", options.runOptions.baseUrl));
1340
+ const rankedSources = askAI.searchResults.slice(0, options.topK).map((result, index) => hydrateDocsEvaluationSearchSource(result, index, pagesByUrl, "result", options.runOptions.baseUrl)).filter((source) => Boolean(source));
1341
+ const resultSources = askAI.results.map((result, index) => hydrateDocsEvaluationSearchSource(result, index, pagesByUrl, "page-section", options.runOptions.baseUrl));
1305
1342
  const parsed = parseAskAIContextSources({
1306
1343
  context: askAI.context,
1307
1344
  blocks: askAI.blocks.map((block) => block.text),
@@ -1947,14 +1984,20 @@ function buildSelectionMetrics(task, sources, pagesByUrl) {
1947
1984
  const locale = expectedLocale ? normalizeAgentLocale(expectedLocale) : void 0;
1948
1985
  const candidates = sources.map((source) => {
1949
1986
  const page = findPageForSource(pagesByUrl, source.pageUrl || source.url);
1987
+ const provenance = source.source?.scope;
1988
+ const conflicts = new Set(provenance?.conflicts ?? []);
1989
+ const truncated = new Set(provenance?.truncated ?? []);
1950
1990
  const scope = page ? getPageScope(page) : {
1951
- framework: normalizeAgentScopeValues(source.framework).map(normalizeAgentFramework),
1952
- version: normalizeAgentScopeValues(source.version).map(normalizeAgentVersion),
1953
- package: normalizeDocsSearchFilters({ package: source.package }).package ?? [],
1954
- tags: normalizeDocsSearchFilters({ tags: source.tags }).tags ?? [],
1955
- locale: normalizeAgentScopeValues(source.locale).map(normalizeAgentLocale),
1956
- frameworkAmbiguous: false,
1957
- versionAmbiguous: false
1991
+ framework: Array.from(new Set([...normalizeAgentScopeValues(source.framework), ...provenance?.framework ?? []].map(normalizeAgentFramework))),
1992
+ version: Array.from(new Set([...normalizeAgentScopeValues(source.version), ...provenance?.version ?? []].map(normalizeAgentVersion))),
1993
+ versionGroups: provenance?.versionGroups?.map((group) => group.map(normalizeAgentVersion)),
1994
+ package: normalizeDocsSearchFilters({ package: provenance?.package?.length ? provenance.package : source.package }).package ?? [],
1995
+ tags: normalizeDocsSearchFilters({ tags: provenance?.tags?.length ? provenance.tags : source.tags }).tags ?? [],
1996
+ locale: Array.from(new Set([...normalizeAgentScopeValues(source.locale), ...provenance?.locale ?? []].map(normalizeAgentLocale))),
1997
+ frameworkAmbiguous: conflicts.has("framework") || truncated.has("framework"),
1998
+ versionAmbiguous: conflicts.has("version") || truncated.has("version"),
1999
+ packageAmbiguous: conflicts.has("package") || truncated.has("package"),
2000
+ tagsAmbiguous: conflicts.has("tags") || truncated.has("tags")
1958
2001
  };
1959
2002
  return {
1960
2003
  source: canonicalizeSource(source.url),
@@ -1962,12 +2005,12 @@ function buildSelectionMetrics(task, sources, pagesByUrl) {
1962
2005
  };
1963
2006
  });
1964
2007
  const firstFrameworkMatchRank = framework ? candidates.findIndex((candidate) => candidate.scope.framework.includes(framework)) + 1 || null : null;
1965
- const firstVersionMatchRank = expectedVersion ? candidates.findIndex((candidate) => candidate.scope.version.some((version) => agentVersionConstraintMatches(expectedVersion, version))) + 1 || null : null;
2008
+ const firstVersionMatchRank = expectedVersion ? candidates.findIndex((candidate) => candidate.scope.versionGroups?.length ? agentVersionConstraintGroupsOverlap([[normalizeAgentVersion(expectedVersion)], ...candidate.scope.versionGroups]) : candidate.scope.version.some((version) => agentVersionConstraintMatches(expectedVersion, version))) + 1 || null : null;
1966
2009
  const firstPackageMatchRank = expectedSearchScope.package ? candidates.findIndex((candidate) => valuesOverlap(expectedSearchScope.package ?? [], candidate.scope.package, (left, right) => left === right)) + 1 || null : null;
1967
2010
  const firstTagsMatchRank = expectedSearchScope.tags ? candidates.findIndex((candidate) => valuesOverlap(expectedSearchScope.tags ?? [], candidate.scope.tags, (left, right) => left === right)) + 1 || null : null;
1968
2011
  const firstLocaleMatchRank = locale ? candidates.findIndex((candidate) => candidate.scope.locale.includes(locale)) + 1 || null : null;
1969
- const conflictingSources = candidates.filter((candidate) => framework && candidate.scope.framework.length > 0 && !candidate.scope.framework.includes(framework) || expectedVersion && candidate.scope.version.length > 0 && !candidate.scope.version.some((version) => agentVersionConstraintMatches(expectedVersion, version)) || expectedSearchScope.package && candidate.scope.package.length > 0 && !valuesOverlap(expectedSearchScope.package, candidate.scope.package, (left, right) => left === right) || expectedSearchScope.tags && candidate.scope.tags.length > 0 && !valuesOverlap(expectedSearchScope.tags, candidate.scope.tags, (left, right) => left === right) || locale && candidate.scope.locale.length > 0 && !candidate.scope.locale.includes(locale)).map((candidate) => candidate.source);
1970
- const ambiguousSources = candidates.filter((candidate) => candidate.scope.frameworkAmbiguous || candidate.scope.versionAmbiguous || Boolean(framework && candidate.scope.framework.length === 0) || Boolean(expectedVersion && candidate.scope.version.length === 0) || Boolean(expectedSearchScope.package && candidate.scope.package.length === 0) || Boolean(expectedSearchScope.tags && candidate.scope.tags.length === 0) || Boolean(locale && candidate.scope.locale.length === 0)).map((candidate) => candidate.source);
2012
+ const conflictingSources = candidates.filter((candidate) => framework && candidate.scope.framework.length > 0 && !candidate.scope.framework.includes(framework) || expectedVersion && candidate.scope.version.length > 0 && !(candidate.scope.versionGroups?.length ? agentVersionConstraintGroupsOverlap([[normalizeAgentVersion(expectedVersion)], ...candidate.scope.versionGroups]) : candidate.scope.version.some((version) => agentVersionConstraintMatches(expectedVersion, version))) || expectedSearchScope.package && candidate.scope.package.length > 0 && !valuesOverlap(expectedSearchScope.package, candidate.scope.package, (left, right) => left === right) || expectedSearchScope.tags && candidate.scope.tags.length > 0 && !valuesOverlap(expectedSearchScope.tags, candidate.scope.tags, (left, right) => left === right) || locale && candidate.scope.locale.length > 0 && !candidate.scope.locale.includes(locale)).map((candidate) => candidate.source);
2013
+ const ambiguousSources = candidates.filter((candidate) => candidate.scope.frameworkAmbiguous || candidate.scope.versionAmbiguous || Boolean(expectedSearchScope.package && candidate.scope.packageAmbiguous) || Boolean(expectedSearchScope.tags && candidate.scope.tagsAmbiguous) || Boolean(framework && candidate.scope.framework.length === 0) || Boolean(expectedVersion && candidate.scope.version.length === 0) || Boolean(expectedSearchScope.package && candidate.scope.package.length === 0) || Boolean(expectedSearchScope.tags && candidate.scope.tags.length === 0) || Boolean(locale && candidate.scope.locale.length === 0)).map((candidate) => candidate.source);
1971
2014
  const frameworkPassed = !framework || firstFrameworkMatchRank !== null;
1972
2015
  const versionPassed = !expectedVersion || firstVersionMatchRank !== null;
1973
2016
  const packagePassed = !expectedSearchScope.package || firstPackageMatchRank !== null;
@@ -1,16 +1,17 @@
1
- import { A as buildDocsAgentDiscoverySpec, Bt as renderDocsSitemapXml, It as buildDocsSitemapManifest, S as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, Vt as resolveDocsSitemapConfig, a as DEFAULT_AGENT_MD_ROUTE, at as renderDocsMarkdownDocument, c as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, g as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, h as DEFAULT_LLMS_FULL_TXT_ROUTE, it as renderDocsLlmsTxt, l as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, lt as resolveDocsAgentFeedbackConfig, n as DEFAULT_AGENTS_MD_WELL_KNOWN_ROUTE, o as DEFAULT_AGENT_MD_WELL_KNOWN_ROUTE, rt as renderDocsAgentsDocument, st as renderDocsSkillDocument, t as DEFAULT_AGENTS_MD_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, wt as toDocsMarkdownUrl, x as DEFAULT_SKILL_MD_ROUTE, y as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE, zt as renderDocsSitemapMarkdown } from "./agent-pS2nNQS3.mjs";
2
- import { D as buildDocsAgentSkillsIndex, E as buildDocsA2AAgentCard, I as resolveDocsPublishedAgentSkill, a as DEFAULT_A2A_AGENT_CARD_ROUTE, b as DEFAULT_LEGACY_SKILLS_INDEX_ROUTE, f as DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, k as buildDocsLegacySkillsIndex, u as DEFAULT_AGENT_SKILLS_INDEX_ROUTE, x as DEFAULT_LEGACY_SKILLS_ROUTE_PREFIX } from "./standards-discovery-CYfiQE13.mjs";
3
- import "./search-BbArHODP.mjs";
4
- import { t as resolveDocsI18n } from "./i18n-CCaFUnAN.mjs";
5
- import { c as renderDocsRobotsGeneratedBlock, f as upsertDocsRobotsGeneratedBlock, i as DOCS_ROBOTS_GENERATED_BLOCK_START, r as DOCS_ROBOTS_GENERATED_BLOCK_END, u as resolveDocsRobotsConfig } from "./robots-C2SindI5.mjs";
6
- import "./sitemap-server-PUoOhplO.mjs";
7
- import "./agent-evals-CjYzCQMZ.mjs";
1
+ import { A as buildDocsAgentDiscoverySpec, Bt as renderDocsSitemapMarkdown, Ht as resolveDocsSitemapConfig, Lt as buildDocsSitemapManifest, S as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, Vt as renderDocsSitemapXml, a as DEFAULT_AGENT_MD_ROUTE, at as renderDocsMarkdownDocument, c as DEFAULT_AGENT_SPEC_WELL_KNOWN_JSON_ROUTE, g as DEFAULT_LLMS_FULL_TXT_WELL_KNOWN_ROUTE, h as DEFAULT_LLMS_FULL_TXT_ROUTE, it as renderDocsLlmsTxt, l as DEFAULT_AGENT_SPEC_WELL_KNOWN_ROUTE, lt as resolveDocsAgentFeedbackConfig, n as DEFAULT_AGENTS_MD_WELL_KNOWN_ROUTE, o as DEFAULT_AGENT_MD_WELL_KNOWN_ROUTE, rt as renderDocsAgentsDocument, st as renderDocsSkillDocument, t as DEFAULT_AGENTS_MD_ROUTE, v as DEFAULT_LLMS_TXT_ROUTE, wt as toDocsMarkdownUrl, x as DEFAULT_SKILL_MD_ROUTE, y as DEFAULT_LLMS_TXT_WELL_KNOWN_ROUTE } from "./agent-BJ0KXN-A.mjs";
2
+ import "./markdown-sections-7OoA7ylx.mjs";
3
+ import { A as buildDocsLegacySkillsIndex, D as buildDocsA2AAgentCard, L as resolveDocsPublishedAgentSkill, O as buildDocsAgentSkillsIndex, a as DEFAULT_A2A_AGENT_CARD_ROUTE, b as DEFAULT_LEGACY_SKILLS_INDEX_ROUTE, f as DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, u as DEFAULT_AGENT_SKILLS_INDEX_ROUTE, x as DEFAULT_LEGACY_SKILLS_ROUTE_PREFIX } from "./standards-discovery-BwL5ffGx.mjs";
4
+ import "./search-DIyIl-tE.mjs";
5
+ import { t as resolveDocsI18n } from "./i18n-hHVWcflJ.mjs";
6
+ import { c as renderDocsRobotsGeneratedBlock, f as upsertDocsRobotsGeneratedBlock, i as DOCS_ROBOTS_GENERATED_BLOCK_START, r as DOCS_ROBOTS_GENERATED_BLOCK_END, u as resolveDocsRobotsConfig } from "./robots-RbgmSvPH.mjs";
7
+ import "./sitemap-server-BfyBM7_V.mjs";
8
+ import "./agent-evals-LIScgQVm.mjs";
8
9
  import { createFilesystemDocsMcpSource, resolveDocsMcpConfig } from "./mcp.mjs";
9
- import "./code-blocks-qe0T8-xe.mjs";
10
- import { t as resolveConfiguredAgentSkills } from "./agent-skills-server-BPVv4gMg.mjs";
10
+ import "./code-blocks-DnNVNK2M.mjs";
11
+ import { t as resolveConfiguredAgentSkills } from "./agent-skills-server-noFn1l_p.mjs";
11
12
  import "./server.mjs";
12
- import { _ as resolveDocsContentDir, a as loadDocsConfigModule, d as readNavTitle, g as resolveDocsConfigPath, h as readTopLevelStringProperty, l as readBooleanProperty, m as readTopLevelBooleanProperty, p as readStringProperty, r as extractTopLevelConfigObject, t as extractNestedObjectLiteral } from "./config-z7_R0f86.mjs";
13
- import { t as detectFramework } from "./utils-C4RC8Zq_.mjs";
13
+ import { _ as resolveDocsContentDir, a as loadDocsConfigModule, d as readNavTitle, g as resolveDocsConfigPath, h as readTopLevelStringProperty, l as readBooleanProperty, m as readTopLevelBooleanProperty, p as readStringProperty, r as extractTopLevelConfigObject, t as extractNestedObjectLiteral } from "./config-Wcdj-D0a.mjs";
14
+ import { t as detectFramework } from "./utils-DpiIioYb.mjs";
14
15
  import { existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync } from "node:fs";
15
16
  import path from "node:path";
16
17
  import { execFileSync } from "node:child_process";
@@ -1,4 +1,4 @@
1
- import { I as DocsPublishedAgentSkill } from "./standards-discovery-DRJ10g7B.mjs";
1
+ import { L as DocsPublishedAgentSkill } from "./standards-discovery-CdrOE-05.mjs";
2
2
 
3
3
  //#region src/agent-skills-bundle.d.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { $ as DocsAgentSkillsInput } from "./types-B9DNNAdT.mjs";
2
- import { I as DocsPublishedAgentSkill } from "./standards-discovery-DRJ10g7B.mjs";
1
+ import { $ as DocsAgentSkillsInput } from "./types-clg5J1R4.mjs";
2
+ import { L as DocsPublishedAgentSkill } from "./standards-discovery-CdrOE-05.mjs";
3
3
 
4
4
  //#region src/agent-skills-server.d.ts
5
5
  interface ResolveConfiguredAgentSkillsOptions {
@@ -1,4 +1,4 @@
1
- import { A as buildDocsPublishedAgentSkill, f as DEFAULT_AGENT_SKILLS_ROUTE_PREFIX } from "./standards-discovery-CYfiQE13.mjs";
1
+ import { f as DEFAULT_AGENT_SKILLS_ROUTE_PREFIX, j as buildDocsPublishedAgentSkill } from "./standards-discovery-BwL5ffGx.mjs";
2
2
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
3
3
  import path from "node:path";
4
4
  import { createHash } from "node:crypto";
@@ -1,6 +1,6 @@
1
- import { $ as DocsAgentSkillsInput } from "./types-B9DNNAdT.mjs";
2
- import { I as DocsPublishedAgentSkill } from "./standards-discovery-DRJ10g7B.mjs";
3
- import { t as ResolveConfiguredAgentSkillsOptions } from "./agent-skills-server-DZnNB4_S.mjs";
1
+ import { $ as DocsAgentSkillsInput } from "./types-clg5J1R4.mjs";
2
+ import { L as DocsPublishedAgentSkill } from "./standards-discovery-CdrOE-05.mjs";
3
+ import { t as ResolveConfiguredAgentSkillsOptions } from "./agent-skills-server-BqvIGQb1.mjs";
4
4
 
5
5
  //#region src/agent-skills-vite.d.ts
6
6
  declare const DOCS_AGENT_SKILLS_BUNDLE_MODULE = "@farming-labs/docs/agent-skills-bundle";
@@ -1,5 +1,5 @@
1
- import "./standards-discovery-CYfiQE13.mjs";
2
- import { t as resolveConfiguredAgentSkills } from "./agent-skills-server-BPVv4gMg.mjs";
1
+ import "./standards-discovery-BwL5ffGx.mjs";
2
+ import { t as resolveConfiguredAgentSkills } from "./agent-skills-server-noFn1l_p.mjs";
3
3
 
4
4
  //#region src/agent-skills-vite.ts
5
5
  const DOCS_AGENT_SKILLS_BUNDLE_MODULE = "@farming-labs/docs/agent-skills-bundle";
@@ -1,14 +1,15 @@
1
- import { a as DEFAULT_AGENT_MD_ROUTE, b as DEFAULT_OPENAPI_SCHEMA_ROUTE, lt as resolveDocsAgentFeedbackConfig, n as DEFAULT_AGENTS_MD_WELL_KNOWN_ROUTE, o as DEFAULT_AGENT_MD_WELL_KNOWN_ROUTE, rt as renderDocsAgentsDocument, t as DEFAULT_AGENTS_MD_ROUTE } from "./agent-pS2nNQS3.mjs";
2
- import "./standards-discovery-CYfiQE13.mjs";
3
- import "./search-BbArHODP.mjs";
4
- import { S as resolveApiReferenceConfig } from "./sitemap-server-PUoOhplO.mjs";
5
- import "./agent-evals-CjYzCQMZ.mjs";
1
+ import { a as DEFAULT_AGENT_MD_ROUTE, b as DEFAULT_OPENAPI_SCHEMA_ROUTE, lt as resolveDocsAgentFeedbackConfig, n as DEFAULT_AGENTS_MD_WELL_KNOWN_ROUTE, o as DEFAULT_AGENT_MD_WELL_KNOWN_ROUTE, rt as renderDocsAgentsDocument, t as DEFAULT_AGENTS_MD_ROUTE } from "./agent-BJ0KXN-A.mjs";
2
+ import "./markdown-sections-7OoA7ylx.mjs";
3
+ import "./standards-discovery-BwL5ffGx.mjs";
4
+ import "./search-DIyIl-tE.mjs";
5
+ import { S as resolveApiReferenceConfig } from "./sitemap-server-BfyBM7_V.mjs";
6
+ import "./agent-evals-LIScgQVm.mjs";
6
7
  import { resolveDocsMcpConfig } from "./mcp.mjs";
7
- import "./code-blocks-qe0T8-xe.mjs";
8
- import "./agent-skills-server-BPVv4gMg.mjs";
8
+ import "./code-blocks-DnNVNK2M.mjs";
9
+ import "./agent-skills-server-noFn1l_p.mjs";
9
10
  import "./server.mjs";
10
- import { a as loadDocsConfigModule, d as readNavTitle, g as resolveDocsConfigPath, h as readTopLevelStringProperty, l as readBooleanProperty, p as readStringProperty, t as extractNestedObjectLiteral } from "./config-z7_R0f86.mjs";
11
- import { t as detectFramework } from "./utils-C4RC8Zq_.mjs";
11
+ import { a as loadDocsConfigModule, d as readNavTitle, g as resolveDocsConfigPath, h as readTopLevelStringProperty, l as readBooleanProperty, p as readStringProperty, t as extractNestedObjectLiteral } from "./config-Wcdj-D0a.mjs";
12
+ import { t as detectFramework } from "./utils-DpiIioYb.mjs";
12
13
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
13
14
  import path from "node:path";
14
15
  import pc from "picocolors";
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { i as wasCliErrorReported, r as shouldPrintStackTrace, t as formatCliError } from "../errors-Cc_qplZU.mjs";
2
+ import { i as wasCliErrorReported, r as shouldPrintStackTrace, t as formatCliError } from "../errors-DbOhkE1h.mjs";
3
3
  import pc from "picocolors";
4
4
 
5
5
  //#region src/cli/index.ts
@@ -82,6 +82,7 @@ async function main() {
82
82
  typesense: typeof flags.typesense === "boolean" ? flags.typesense : void 0,
83
83
  algolia: typeof flags.algolia === "boolean" ? flags.algolia : void 0,
84
84
  baseUrl: typeof flags["base-url"] === "string" ? flags["base-url"] : void 0,
85
+ siteUrl: typeof flags["site-url"] === "string" ? flags["site-url"] : void 0,
85
86
  collection: typeof flags.collection === "string" ? flags.collection : void 0,
86
87
  apiKey: typeof flags["api-key"] === "string" ? flags["api-key"] : void 0,
87
88
  adminApiKey: typeof flags["admin-api-key"] === "string" ? flags["admin-api-key"] : void 0,
@@ -90,7 +91,8 @@ async function main() {
90
91
  ollamaBaseUrl: typeof flags["ollama-base-url"] === "string" ? flags["ollama-base-url"] : void 0,
91
92
  appId: typeof flags["app-id"] === "string" ? flags["app-id"] : void 0,
92
93
  indexName: typeof flags["index-name"] === "string" ? flags["index-name"] : void 0,
93
- searchApiKey: typeof flags["search-api-key"] === "string" ? flags["search-api-key"] : void 0
94
+ searchApiKey: typeof flags["search-api-key"] === "string" ? flags["search-api-key"] : void 0,
95
+ syncNamespace: typeof flags["sync-namespace"] === "string" ? flags["sync-namespace"] : void 0
94
96
  };
95
97
  const cloudOptions = {
96
98
  configPath: typeof flags.config === "string" ? flags.config : void 0,
@@ -106,43 +108,43 @@ async function main() {
106
108
  ]
107
109
  };
108
110
  if (!parsedCommand.command || parsedCommand.command === "init") {
109
- const { init } = await import("../init-p1MHf06G.mjs");
111
+ const { init } = await import("../init-DAkI0Lkf.mjs");
110
112
  await init(initOptions);
111
113
  } else if (parsedCommand.command === "dev") {
112
- const { dev } = await import("../dev-qE7MYEh9.mjs");
114
+ const { dev } = await import("../dev-Cc1cFFj-.mjs");
113
115
  await dev(devOptions);
114
116
  } else if (parsedCommand.command === "deploy") {
115
- const { runCloudDeploy } = await import("../cloud-CyysfDny.mjs");
117
+ const { runCloudDeploy } = await import("../cloud-pdNC-tyj.mjs");
116
118
  await runCloudDeploy(cloudOptions);
117
119
  } else if (parsedCommand.command === "preview") {
118
- const { runCloudPreview } = await import("../cloud-CyysfDny.mjs");
120
+ const { runCloudPreview } = await import("../cloud-pdNC-tyj.mjs");
119
121
  await runCloudPreview(cloudOptions);
120
122
  } else if (parsedCommand.command === "cloud" && subcommand === "deploy") {
121
- const { runCloudDeploy } = await import("../cloud-CyysfDny.mjs");
123
+ const { runCloudDeploy } = await import("../cloud-pdNC-tyj.mjs");
122
124
  await runCloudDeploy(cloudOptions);
123
125
  } else if (parsedCommand.command === "cloud" && subcommand === "preview") {
124
- const { runCloudPreview } = await import("../cloud-CyysfDny.mjs");
126
+ const { runCloudPreview } = await import("../cloud-pdNC-tyj.mjs");
125
127
  await runCloudPreview(cloudOptions);
126
128
  } else if (parsedCommand.command === "cloud" && subcommand === "init") {
127
- const { runCloudInit } = await import("../cloud-CyysfDny.mjs");
129
+ const { runCloudInit } = await import("../cloud-pdNC-tyj.mjs");
128
130
  await runCloudInit(cloudOptions);
129
131
  } else if (parsedCommand.command === "cloud" && subcommand === "sync") {
130
- const { syncCloudConfig } = await import("../cloud-CyysfDny.mjs");
132
+ const { syncCloudConfig } = await import("../cloud-pdNC-tyj.mjs");
131
133
  await syncCloudConfig(cloudOptions);
132
134
  } else if (parsedCommand.command === "cloud" && subcommand === "check") {
133
- const { runCloudCheck } = await import("../cloud-CyysfDny.mjs");
135
+ const { runCloudCheck } = await import("../cloud-pdNC-tyj.mjs");
134
136
  await runCloudCheck(cloudOptions);
135
137
  } else if (parsedCommand.command === "cloud") {
136
138
  console.error(pc.red(`Unknown cloud subcommand: ${subcommand ?? "(missing)"}`));
137
139
  console.error();
138
- const { printCloudHelp } = await import("../cloud-CyysfDny.mjs");
140
+ const { printCloudHelp } = await import("../cloud-pdNC-tyj.mjs");
139
141
  printCloudHelp();
140
142
  process.exit(1);
141
143
  } else if (parsedCommand.command === "mcp") {
142
- const { runMcp } = await import("../mcp-BNK45dzD.mjs");
144
+ const { runMcp } = await import("../mcp-YD37HlPY.mjs");
143
145
  await runMcp(mcpOptions);
144
146
  } else if (parsedCommand.command === "agent" && subcommand === "compact") {
145
- const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-DbDfIqhe.mjs").then((n) => n.t);
147
+ const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-D0LEY2Vy.mjs").then((n) => n.t);
146
148
  const agentCompactOptions = parseAgentCompactArgs(args.slice(2));
147
149
  if (agentCompactOptions.help) {
148
150
  printAgentCompactHelp();
@@ -150,7 +152,7 @@ async function main() {
150
152
  }
151
153
  await compactAgentDocs(agentCompactOptions);
152
154
  } else if (parsedCommand.command === "agent" && subcommand === "export") {
153
- const { exportAgentBundle, parseAgentExportArgs, printAgentExportHelp } = await import("../agent-export-CpQhD8eA.mjs");
155
+ const { exportAgentBundle, parseAgentExportArgs, printAgentExportHelp } = await import("../agent-export-B92pNe6g.mjs");
154
156
  const agentExportOptions = parseAgentExportArgs(args.slice(2));
155
157
  if (agentExportOptions.help) {
156
158
  printAgentExportHelp();
@@ -160,13 +162,13 @@ async function main() {
160
162
  } else if (parsedCommand.command === "agent") {
161
163
  console.error(pc.red(`Unknown agent subcommand: ${subcommand ?? "(missing)"}`));
162
164
  console.error();
163
- const { printAgentCompactHelp } = await import("../agent-DbDfIqhe.mjs").then((n) => n.t);
164
- const { printAgentExportHelp } = await import("../agent-export-CpQhD8eA.mjs");
165
+ const { printAgentCompactHelp } = await import("../agent-D0LEY2Vy.mjs").then((n) => n.t);
166
+ const { printAgentExportHelp } = await import("../agent-export-B92pNe6g.mjs");
165
167
  printAgentCompactHelp();
166
168
  printAgentExportHelp();
167
169
  process.exit(1);
168
170
  } else if (parsedCommand.command === "agents" && subcommand === "generate") {
169
- const { generateAgents, parseAgentsGenerateArgs, printAgentsGenerateHelp } = await import("../agents-B-1h9Jlm.mjs");
171
+ const { generateAgents, parseAgentsGenerateArgs, printAgentsGenerateHelp } = await import("../agents-C228QGbp.mjs");
170
172
  const agentsOptions = parseAgentsGenerateArgs(args.slice(2));
171
173
  if (agentsOptions.help) {
172
174
  printAgentsGenerateHelp();
@@ -176,11 +178,11 @@ async function main() {
176
178
  } else if (parsedCommand.command === "agents") {
177
179
  console.error(pc.red(`Unknown agents subcommand: ${subcommand ?? "(missing)"}`));
178
180
  console.error();
179
- const { printAgentsGenerateHelp } = await import("../agents-B-1h9Jlm.mjs");
181
+ const { printAgentsGenerateHelp } = await import("../agents-C228QGbp.mjs");
180
182
  printAgentsGenerateHelp();
181
183
  process.exit(1);
182
184
  } else if (parsedCommand.command === "doctor") {
183
- const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-CBy8-tPu.mjs");
185
+ const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-CgrUZ3tY.mjs");
184
186
  const doctorOptions = parseDoctorArgs(args.slice(1));
185
187
  if (doctorOptions.help) {
186
188
  printDoctorHelp();
@@ -188,7 +190,7 @@ async function main() {
188
190
  }
189
191
  await runDoctor(doctorOptions);
190
192
  } else if (parsedCommand.command === "review") {
191
- const { parseReviewArgs, printReviewHelp, runReview } = await import("../review-Cace7A2c.mjs");
193
+ const { parseReviewArgs, printReviewHelp, runReview } = await import("../review-Dbzkdl6K.mjs");
192
194
  const reviewOptions = parseReviewArgs(args.slice(1));
193
195
  if (reviewOptions.help) {
194
196
  printReviewHelp();
@@ -196,7 +198,7 @@ async function main() {
196
198
  }
197
199
  await runReview(reviewOptions);
198
200
  } else if ((parsedCommand.command === "codeblocks" || parsedCommand.command === "code-blocks") && subcommand === "validate") {
199
- const { parseCodeBlocksValidateArgs, printCodeBlocksValidateHelp, runCodeBlocksValidate } = await import("../codeblocks-DAj7EAwt.mjs");
201
+ const { parseCodeBlocksValidateArgs, printCodeBlocksValidateHelp, runCodeBlocksValidate } = await import("../codeblocks-CFuurVIH.mjs");
200
202
  const codeBlocksOptions = parseCodeBlocksValidateArgs(args.slice(2));
201
203
  if (codeBlocksOptions.help) {
202
204
  printCodeBlocksValidateHelp();
@@ -206,11 +208,11 @@ async function main() {
206
208
  } else if (parsedCommand.command === "codeblocks" || parsedCommand.command === "code-blocks") {
207
209
  console.error(pc.red(`Unknown codeblocks subcommand: ${subcommand ?? "(missing)"}`));
208
210
  console.error();
209
- const { printCodeBlocksValidateHelp } = await import("../codeblocks-DAj7EAwt.mjs");
211
+ const { printCodeBlocksValidateHelp } = await import("../codeblocks-CFuurVIH.mjs");
210
212
  printCodeBlocksValidateHelp();
211
213
  process.exit(1);
212
214
  } else if (parsedCommand.command === "search" && subcommand === "sync") {
213
- const { syncSearch } = await import("../search-DB3svkNQ.mjs");
215
+ const { syncSearch } = await import("../search-hcqaEZVN.mjs");
214
216
  await syncSearch(searchSyncOptions);
215
217
  } else if (parsedCommand.command === "search") {
216
218
  console.error(pc.red(`Unknown search subcommand: ${subcommand ?? "(missing)"}`));
@@ -218,7 +220,7 @@ async function main() {
218
220
  printHelp();
219
221
  process.exit(1);
220
222
  } else if (parsedCommand.command === "sitemap" && subcommand === "generate") {
221
- const { generateSitemap, parseSitemapGenerateArgs, printSitemapGenerateHelp } = await import("../sitemap-DPTLh_26.mjs");
223
+ const { generateSitemap, parseSitemapGenerateArgs, printSitemapGenerateHelp } = await import("../sitemap-jhkS_jYx.mjs");
222
224
  const sitemapOptions = parseSitemapGenerateArgs(args.slice(2));
223
225
  if (sitemapOptions.help) {
224
226
  printSitemapGenerateHelp();
@@ -228,11 +230,11 @@ async function main() {
228
230
  } else if (parsedCommand.command === "sitemap") {
229
231
  console.error(pc.red(`Unknown sitemap subcommand: ${subcommand ?? "(missing)"}`));
230
232
  console.error();
231
- const { printSitemapGenerateHelp } = await import("../sitemap-DPTLh_26.mjs");
233
+ const { printSitemapGenerateHelp } = await import("../sitemap-jhkS_jYx.mjs");
232
234
  printSitemapGenerateHelp();
233
235
  process.exit(1);
234
236
  } else if (parsedCommand.command === "robots" && subcommand === "generate") {
235
- const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-DmE_wXvG.mjs");
237
+ const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-DUO0r4UI.mjs");
236
238
  const robotsOptions = parseRobotsGenerateArgs(args.slice(2));
237
239
  if (robotsOptions.help) {
238
240
  printRobotsGenerateHelp();
@@ -242,11 +244,11 @@ async function main() {
242
244
  } else if (parsedCommand.command === "robots") {
243
245
  console.error(pc.red(`Unknown robots subcommand: ${subcommand ?? "(missing)"}`));
244
246
  console.error();
245
- const { printRobotsGenerateHelp } = await import("../robots-DmE_wXvG.mjs");
247
+ const { printRobotsGenerateHelp } = await import("../robots-DUO0r4UI.mjs");
246
248
  printRobotsGenerateHelp();
247
249
  process.exit(1);
248
250
  } else if (parsedCommand.command === "downgrade") {
249
- const { downgrade } = await import("../downgrade-DCxezPZI.mjs");
251
+ const { downgrade } = await import("../downgrade-w7e6Se0L.mjs");
250
252
  const framework = (typeof flags.framework === "string" ? flags.framework : void 0) ?? (args[1] && !args[1].startsWith("--") ? args[1] : void 0);
251
253
  const hasVersionFlag = args.includes("--version") || args.some((arg) => arg.startsWith("--version="));
252
254
  await downgrade({
@@ -255,7 +257,7 @@ async function main() {
255
257
  dryRun: flags["dry-run"] === true
256
258
  });
257
259
  } else if (parsedCommand.command === "upgrade") {
258
- const { upgrade } = await import("../upgrade-DDJQ5l6n.mjs");
260
+ const { upgrade } = await import("../upgrade-oz-GChgt.mjs");
259
261
  const framework = (typeof flags.framework === "string" ? flags.framework : void 0) ?? (args[1] && !args[1].startsWith("--") ? args[1] : void 0);
260
262
  const hasVersionFlag = args.includes("--version") || args.some((arg) => arg.startsWith("--version="));
261
263
  const version = typeof flags.version === "string" ? flags.version : hasVersionFlag ? "" : void 0;
@@ -395,6 +397,8 @@ ${pc.dim("Options for search sync:")}
395
397
  ${pc.cyan("--typesense")} Shortcut for ${pc.cyan("--provider typesense")}
396
398
  ${pc.cyan("--algolia")} Shortcut for ${pc.cyan("--provider algolia")}
397
399
  ${pc.cyan("--base-url <url>")} Typesense base URL (or use ${pc.dim("TYPESENSE_URL")})
400
+ ${pc.cyan("--site-url <url>")} Canonical public docs URL for source provenance
401
+ ${pc.cyan("--sync-namespace <name>")} Stable ownership namespace for a shared hosted index
398
402
  ${pc.cyan("--collection <name>")} Typesense collection name (default ${pc.dim("docs")})
399
403
  ${pc.cyan("--api-key <key>")} Typesense search/api key (or use ${pc.dim("TYPESENSE_API_KEY")})
400
404
  ${pc.cyan("--admin-api-key <key>")} Admin-capable sync key for Typesense/Algolia
@@ -1,4 +1,4 @@
1
- import { rt as DocsAnalyticsConfig } from "../types-B9DNNAdT.mjs";
1
+ import { rt as DocsAnalyticsConfig } from "../types-clg5J1R4.mjs";
2
2
  import { ReactNode } from "react";
3
3
 
4
4
  //#region src/docs-cloud-client.d.ts
@@ -1,4 +1,4 @@
1
- import { _t as DocsCloudConfig, rt as DocsAnalyticsConfig, t as AIConfig } from "./types-B9DNNAdT.mjs";
1
+ import { _t as DocsCloudConfig, rt as DocsAnalyticsConfig, t as AIConfig } from "./types-clg5J1R4.mjs";
2
2
 
3
3
  //#region src/cloud-ask-ai.d.ts
4
4
  interface DocsCloudAskAIConfig {
@@ -1,6 +1,6 @@
1
- import { n as markCliErrorReported } from "./errors-Cc_qplZU.mjs";
2
- import { _ as resolveDocsContentDir, a as loadDocsConfigModule, c as loadProjectEnv, d as readNavTitle, g as resolveDocsConfigPath, h as readTopLevelStringProperty, m as readTopLevelBooleanProperty, p as readStringProperty, t as extractNestedObjectLiteral } from "./config-z7_R0f86.mjs";
3
- import { i as detectPackageManagerFromProject, t as detectFramework } from "./utils-C4RC8Zq_.mjs";
1
+ import { n as markCliErrorReported } from "./errors-DbOhkE1h.mjs";
2
+ import { _ as resolveDocsContentDir, a as loadDocsConfigModule, c as loadProjectEnv, d as readNavTitle, g as resolveDocsConfigPath, h as readTopLevelStringProperty, m as readTopLevelBooleanProperty, p as readStringProperty, t as extractNestedObjectLiteral } from "./config-Wcdj-D0a.mjs";
3
+ import { i as detectPackageManagerFromProject, t as detectFramework } from "./utils-DpiIioYb.mjs";
4
4
  import fs from "node:fs";
5
5
  import path from "node:path";
6
6
  import { execFileSync } from "node:child_process";