@farming-labs/docs 0.2.89 → 0.2.91

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 (35) hide show
  1. package/dist/{agent-Jvn1a78y.mjs → agent-BgamZBQ5.mjs} +2 -2
  2. package/dist/{agent-CTOUI2BK.mjs → agent-BpFXdXTJ.mjs} +13 -3
  3. package/dist/{agent-C598zLsD.d.mts → agent-Vk9oUKpQ.d.mts} +5 -3
  4. package/dist/{agent-evals-DCptRrdP.mjs → agent-evals-GFDpcXO3.mjs} +289 -5
  5. package/dist/{agent-export-B4Xos6gi.mjs → agent-export-CNDoSwv4.mjs} +5 -5
  6. package/dist/agent-skills-bundle.d.mts +1 -1
  7. package/dist/{agent-skills-server-DEqyYAhL.d.mts → agent-skills-server-Cltp5qai.d.mts} +2 -2
  8. package/dist/agent-skills-vite.d.mts +3 -3
  9. package/dist/{agents-DRCl1URL.mjs → agents-CUPf3vZe.mjs} +4 -4
  10. package/dist/cli/index.mjs +17 -17
  11. package/dist/client/react.d.mts +1 -1
  12. package/dist/{cloud-ask-ai-uzDpy0um.d.mts → cloud-ask-ai-Da6md6U7.d.mts} +1 -1
  13. package/dist/{content-change-hydration-DLBinuFR.mjs → content-change-hydration-Cy2a7rb1.mjs} +1 -1
  14. package/dist/docs-cloud-server.d.mts +2 -2
  15. package/dist/{doctor-C3IG5hqb.mjs → doctor-DTUnmCWU.mjs} +11 -9
  16. package/dist/{golden-evaluations-DyeYD50F.mjs → golden-evaluations-CjpJSUEg.mjs} +1 -1
  17. package/dist/index.d.mts +5 -5
  18. package/dist/index.mjs +4 -4
  19. package/dist/{mcp-D8Hw2blN.mjs → mcp-DYVbyw5b.mjs} +7 -5
  20. package/dist/mcp.d.mts +14 -4
  21. package/dist/mcp.mjs +317 -6
  22. package/dist/{prompt-references-B6gxePm8.mjs → prompt-references-4-uqJVjC.mjs} +2 -2
  23. package/dist/{retrieval-digest-sY-uhDFJ.d.mts → retrieval-digest-Dl7Bx121.d.mts} +2 -2
  24. package/dist/{review-R39cQsvi.mjs → review-BjOfzbsm.mjs} +5 -5
  25. package/dist/{robots-C-Nh0xH6.mjs → robots-B4zuleV8.mjs} +2 -2
  26. package/dist/{robots-DaU38DZw.mjs → robots-CQVNLcVS.mjs} +1 -1
  27. package/dist/{search-3TUBKtz5.mjs → search-DRSqR1_k.mjs} +4 -4
  28. package/dist/server.d.mts +29 -7
  29. package/dist/server.mjs +6 -6
  30. package/dist/{sitemap-DrILEtYo.mjs → sitemap-BiaR2pC_.mjs} +4 -4
  31. package/dist/{sitemap-server-Ds5z4WQB.mjs → sitemap-server-rv00bP21.mjs} +1 -1
  32. package/dist/{skills-35ecRZtd.mjs → skills-Biq9Q7z4.mjs} +4 -4
  33. package/dist/{standards-discovery-CG_cZRSx.d.mts → standards-discovery-DX9iiGar.d.mts} +1 -1
  34. package/dist/{types-CigzkdLB.d.mts → types-DUMzbRER.d.mts} +72 -1
  35. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
- import { B as findDocsMarkdownPage, at as renderDocsMarkdownDocument } from "./agent-CTOUI2BK.mjs";
1
+ import { B as findDocsMarkdownPage, at as renderDocsMarkdownDocument } from "./agent-BpFXdXTJ.mjs";
2
2
  import { v as normalizePageAgentFrontmatter, x as stripGeneratedPageAgentContractMarkdown } from "./markdown-sections-7OoA7ylx.mjs";
3
- import { c as hashGeneratedAgentContent, d as serializeGeneratedAgentDocument, s as GENERATED_AGENT_PROVENANCE_VERSION, u as parseGeneratedAgentDocument } from "./content-change-hydration-DLBinuFR.mjs";
3
+ import { c as hashGeneratedAgentContent, d as serializeGeneratedAgentDocument, s as GENERATED_AGENT_PROVENANCE_VERSION, u as parseGeneratedAgentDocument } from "./content-change-hydration-Cy2a7rb1.mjs";
4
4
  import { createFilesystemDocsMcpSource } from "./mcp.mjs";
5
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-BtxaQTPP.mjs";
6
6
  import { createRequire } from "node:module";
@@ -6486,7 +6486,12 @@ function buildDocsDiagnostics(config, options = {}) {
6486
6486
  status: mcp.enabled ? "enabled" : "disabled",
6487
6487
  route: mcp.enabled ? mcp.route : null,
6488
6488
  transport: "GET/POST",
6489
- tools: mcp.tools
6489
+ tools: mcp.tools,
6490
+ prompts: mcp.prompts ?? {
6491
+ enabled: false,
6492
+ contracts: false,
6493
+ goldenTasks: []
6494
+ }
6490
6495
  },
6491
6496
  feedback: {
6492
6497
  status: agentFeedbackEnabled || humanFeedback ? "enabled" : "disabled",
@@ -8186,7 +8191,7 @@ function appendDocsRobotsStartLine(lines, context, variant) {
8186
8191
  }
8187
8192
  function appendDocsMcpStartLine(lines, context, variant) {
8188
8193
  if (!context.mcpEnabled) return;
8189
- lines.push(variant === "skill" ? `- Use ${DEFAULT_MCP_WELL_KNOWN_ROUTE} or ${DEFAULT_MCP_PUBLIC_ROUTE} for MCP tools when your environment supports MCP.` : `- Use MCP at ${DEFAULT_MCP_PUBLIC_ROUTE} or ${DEFAULT_MCP_WELL_KNOWN_ROUTE} when your environment supports MCP tools.`);
8194
+ lines.push(variant === "skill" ? `- Use ${DEFAULT_MCP_WELL_KNOWN_ROUTE} or ${DEFAULT_MCP_PUBLIC_ROUTE} for MCP tools, resources, and configured prompts.` : `- Use MCP at ${DEFAULT_MCP_PUBLIC_ROUTE} or ${DEFAULT_MCP_WELL_KNOWN_ROUTE} when your environment supports MCP capabilities.`);
8190
8195
  }
8191
8196
  function appendDocsFeedbackStartLine(lines, context, variant) {
8192
8197
  if (!context.feedbackEnabled) return;
@@ -8314,7 +8319,7 @@ function renderDocsAgentsDocument(options) {
8314
8319
  if (context.siteDescription) lines.push(`Description: ${context.siteDescription}`);
8315
8320
  lines.push("", "## Start Here");
8316
8321
  appendDocsAgentStartHereLines(lines, context, "agents");
8317
- lines.push("", "## Working Rules", "- Prefer markdown routes, llms.txt, sitemap.md, OpenAPI schemas, and MCP tools over scraping rendered HTML.", "- Treat generated context files as discovery aids, then fetch the smallest page or section that answers the task.", "- Preserve canonical docs URLs when citing pages back to humans.", "- If a markdown route returns a recovery page, use its closest matches, sitemap, and discovery spec before guessing another slug.", "", "## Public Routes");
8322
+ lines.push("", "## Working Rules", "- Prefer markdown routes, llms.txt, sitemap.md, OpenAPI schemas, and MCP capabilities over scraping rendered HTML.", "- Treat generated context files as discovery aids, then fetch the smallest page or section that answers the task.", "- Preserve canonical docs URLs when citing pages back to humans.", "- If a markdown route returns a recovery page, use its closest matches, sitemap, and discovery spec before guessing another slug.", "", "## Public Routes");
8318
8323
  appendDocsAgentPublicRouteLines(lines, context, "agents");
8319
8324
  lines.push("", "## Framework Maintenance", "- For @farming-labs/docs projects, keep the framework package current before debugging missing agent surfaces.", "", "```sh", "npx @farming-labs/docs@latest upgrade --latest", "```", "", "- For framework setup, configuration, CLI, Ask AI, page actions, or theme work, install the reusable Skills pack:", "", "```sh", "npx skills add farming-labs/docs", "```");
8320
8325
  return lines.join("\n");
@@ -8642,6 +8647,11 @@ function buildDocsAgentDiscoverySpec({ origin, entry = "docs", apiRoute, apiCata
8642
8647
  name: mcp.name,
8643
8648
  version: mcp.version,
8644
8649
  tools: mcp.tools,
8650
+ prompts: mcp.prompts ?? {
8651
+ enabled: false,
8652
+ contracts: false,
8653
+ goldenTasks: []
8654
+ },
8645
8655
  ...protectedResource ? { protectedResource: {
8646
8656
  metadataEndpoints: protectedResourceMetadataRoutes,
8647
8657
  authorizationServers: protectedResource.authorizationServers,
@@ -1,6 +1,6 @@
1
- import { Dn as DocsSearchDocument, Dr as PageAgentFrontmatter, En as DocsSearchConfig, F as DocsAgentContentChangesConfig, Fn as DocsSearchFilterField, Fr as ResolvedDocsRelatedLink, Gr as TypesenseDocsSearchConfig, In as DocsSearchFilterInput, Jn as DocsSearchSourcePage, K as DocsAgentFeedbackData, Kn as DocsSearchResult, Ln as DocsSearchFilters, Mn as DocsSearchFacetsResponse, Mt as DocsConfig, Rt as DocsContentChangesResponse, Tn as DocsSearchChunkingConfig, Ut as DocsI18nConfig, Wn as DocsSearchRequest, Yt as DocsMcpConfig, Zn as DocsSitemapConfig, bn as DocsSearchAdapterFactory, dr as LlmsTxtMaxCharsConfig, f as CustomDocsSearchConfig, fr as LlmsTxtMaxCharsMode, gn as DocsRobotsConfig, mr as McpDocsSearchConfig, on as DocsPaginatedSearchResponse, or as FeedbackConfig, pr as LlmsTxtSectionConfig, r as AlgoliaDocsSearchConfig, ur as LlmsTxtConfig, vn as DocsSearchAdapter, vt as DocsAskAIMcpConfig, zt as DocsContentSnapshot } from "./types-CigzkdLB.mjs";
2
- import { O as DocsA2AAgentCardOptions, R as DocsDiscoveryApiRouteOptions, z as DocsPublishedAgentSkill } from "./standards-discovery-CG_cZRSx.mjs";
3
- import { DocsMcpPage, DocsMcpResolvedConfig } from "./mcp.mjs";
1
+ import { $n as DocsSearchResult, Cn as DocsRobotsConfig, Dn as DocsSearchAdapterFactory, F as DocsAgentContentChangesConfig, Gt as DocsContentSnapshot, Hn as DocsSearchFilterField, Hr as ResolvedDocsRelatedLink, K as DocsAgentFeedbackData, Mn as DocsSearchChunkingConfig, Nn as DocsSearchConfig, Pn as DocsSearchDocument, Pr as PageAgentFrontmatter, Qr as TypesenseDocsSearchConfig, Rt as DocsConfig, Tn as DocsSearchAdapter, Un as DocsSearchFilterInput, Wn as DocsSearchFilters, Wt as DocsContentChangesResponse, Yt as DocsI18nConfig, Zn as DocsSearchRequest, _r as LlmsTxtConfig, br as LlmsTxtSectionConfig, f as CustomDocsSearchConfig, ir as DocsSitemapConfig, pn as DocsPaginatedSearchResponse, pr as FeedbackConfig, r as AlgoliaDocsSearchConfig, tn as DocsMcpConfig, tr as DocsSearchSourcePage, vr as LlmsTxtMaxCharsConfig, wt as DocsAskAIMcpConfig, xr as McpDocsSearchConfig, yr as LlmsTxtMaxCharsMode, zn as DocsSearchFacetsResponse } from "./types-DUMzbRER.mjs";
2
+ import { O as DocsA2AAgentCardOptions, R as DocsDiscoveryApiRouteOptions, z as DocsPublishedAgentSkill } from "./standards-discovery-DX9iiGar.mjs";
3
+ import { DocsMcpPage, DocsMcpResolvedConfig, DocsMcpResolvedPromptsConfig } from "./mcp.mjs";
4
4
 
5
5
  //#region src/i18n.d.ts
6
6
  interface ResolvedDocsI18n {
@@ -569,6 +569,7 @@ interface DocsDiagnosticsFeature {
569
569
  mode?: string;
570
570
  transport?: "GET" | "POST" | "GET/HEAD" | "GET/POST";
571
571
  tools?: Record<string, boolean>;
572
+ prompts?: DocsMcpResolvedConfig["prompts"];
572
573
  human?: boolean;
573
574
  agent?: boolean;
574
575
  }
@@ -1300,6 +1301,7 @@ declare function buildDocsAgentDiscoverySpec({
1300
1301
  getConfigSchema: boolean;
1301
1302
  getContext: boolean;
1302
1303
  };
1304
+ prompts: DocsMcpResolvedPromptsConfig;
1303
1305
  };
1304
1306
  feedback: {
1305
1307
  enabled: boolean;
@@ -1,5 +1,6 @@
1
- import { An as normalizeAgentFramework, Dn as agentVersionConstraintGroupsOverlap, Mn as normalizeAgentScopeValues, Nn as normalizeAgentVersion, On as agentVersionConstraintMatches, Zt as buildDocsAskAIContext, bn as resolveSearchRequestConfig, dn as performDocsSearch, jn as normalizeAgentLocale, kn as agentVersionConstraintsOverlap, un as normalizeDocsSearchFilters } from "./agent-CTOUI2BK.mjs";
1
+ import { $t as buildDocsRetrievalDigestProjection, An as normalizeAgentFramework, Dn as agentVersionConstraintGroupsOverlap, Mn as normalizeAgentScopeValues, Nn as normalizeAgentVersion, On as agentVersionConstraintMatches, Zt as buildDocsAskAIContext, bn as resolveSearchRequestConfig, dn as performDocsSearch, jn as normalizeAgentLocale, kn as agentVersionConstraintsOverlap, un as normalizeDocsSearchFilters } from "./agent-BpFXdXTJ.mjs";
2
2
  import { S as upsertPageAgentContractMarkdown, l as stripDocsGeneratedAgentContractMarkers, o as findDocsMarkdownSection } from "./markdown-sections-7OoA7ylx.mjs";
3
+ import { K as digestDocsRetrievalContent } from "./standards-discovery-Ckx0tN7B.mjs";
3
4
  import { t as getDocsAgentSkillsConfiguredPaths } from "./agent-skills-server-CwmzAzf_.mjs";
4
5
  import { buildDocsMcpContext } from "./mcp.mjs";
5
6
  import { i as validateCodeBlockPlans, n as planCodeBlockTargets, r as resolveDocsCodeBlocksValidateConfig, t as extractCodeBlocksFromMarkdown } from "./code-blocks-0wjOsqdJ.mjs";
@@ -694,6 +695,114 @@ function normalizeRuntimeAnswerExpectation(value, path, issues) {
694
695
  forbiddenCitations: normalizeRuntimeStringList(value.forbiddenCitations, `${path}.forbiddenCitations`, issues)
695
696
  };
696
697
  }
698
+ function normalizeRuntimeDigest(value, path, issues) {
699
+ const digest = normalizeRuntimeString(value, path, issues);
700
+ if (digest && !/^sha256:[a-f\d]{64}$/iu.test(digest)) {
701
+ issues.push(`${path} must be an algorithm-prefixed SHA-256 digest.`);
702
+ return;
703
+ }
704
+ return digest;
705
+ }
706
+ function normalizeRuntimeSourceDigests(value, path, issues) {
707
+ if (value === void 0) return void 0;
708
+ if (!isRecord(value)) {
709
+ issues.push(`${path} must be an object keyed by canonical source URL.`);
710
+ return;
711
+ }
712
+ const result = {};
713
+ for (const [source, rawDigest] of Object.entries(value)) {
714
+ if (!source.trim()) {
715
+ issues.push(`${path} keys must be non-empty canonical source URLs.`);
716
+ continue;
717
+ }
718
+ const digest = normalizeRuntimeDigest(rawDigest, `${path}.${source}`, issues);
719
+ if (digest) result[source.trim()] = digest;
720
+ }
721
+ if (Object.keys(result).length === 0) {
722
+ issues.push(`${path} must contain at least one source digest.`);
723
+ return;
724
+ }
725
+ return result;
726
+ }
727
+ function normalizeRuntimePromptInjection(value, path, issues) {
728
+ if (value === void 0) return void 0;
729
+ if (!isRecord(value)) {
730
+ issues.push(`${path} must be an object.`);
731
+ return;
732
+ }
733
+ return {
734
+ markers: normalizeRuntimeStringList(value.markers, `${path}.markers`, issues, { required: true }) ?? [],
735
+ forbiddenAnswerText: normalizeRuntimeStringList(value.forbiddenAnswerText, `${path}.forbiddenAnswerText`, issues)
736
+ };
737
+ }
738
+ function normalizeRuntimeAuthenticatedContent(value, path, issues) {
739
+ if (value === void 0) return void 0;
740
+ if (!isRecord(value)) {
741
+ issues.push(`${path} must be an object.`);
742
+ return;
743
+ }
744
+ const forbiddenSources = normalizeRuntimeStringList(value.forbiddenSources, `${path}.forbiddenSources`, issues);
745
+ const forbiddenText = normalizeRuntimeStringList(value.forbiddenText, `${path}.forbiddenText`, issues);
746
+ if ((forbiddenSources?.length ?? 0) + (forbiddenText?.length ?? 0) === 0) issues.push(`${path} must configure forbiddenSources or forbiddenText canaries.`);
747
+ return {
748
+ forbiddenSources,
749
+ forbiddenText
750
+ };
751
+ }
752
+ function normalizeRuntimeFreshness(value, path, issues) {
753
+ if (value === void 0) return void 0;
754
+ if (!isRecord(value)) {
755
+ issues.push(`${path} must be an object.`);
756
+ return;
757
+ }
758
+ return {
759
+ indexGeneration: normalizeRuntimeDigest(value.indexGeneration, `${path}.indexGeneration`, issues),
760
+ sourceDigests: normalizeRuntimeSourceDigests(value.sourceDigests, `${path}.sourceDigests`, issues)
761
+ };
762
+ }
763
+ function normalizeRuntimeQueryVariants(value, path, issues) {
764
+ if (value === void 0) return void 0;
765
+ if (!Array.isArray(value)) {
766
+ issues.push(`${path} must be an array.`);
767
+ return;
768
+ }
769
+ const variants = value.flatMap((item, index) => {
770
+ const itemPath = `${path}[${index}]`;
771
+ if (!isRecord(item)) {
772
+ issues.push(`${itemPath} must be an object.`);
773
+ return [];
774
+ }
775
+ const kind = normalizeRuntimeEnum(item.kind, `${itemPath}.kind`, issues, ["ambiguous", "typo"]);
776
+ const query = normalizeRuntimeString(item.query, `${itemPath}.query`, issues, true);
777
+ return kind && query ? [{
778
+ kind,
779
+ query
780
+ }] : [];
781
+ });
782
+ if (variants.length === 0) issues.push(`${path} must contain at least one query variant.`);
783
+ return variants;
784
+ }
785
+ function normalizeRuntimeSafetyExpectation(value, path, issues) {
786
+ if (value === void 0) return void 0;
787
+ if (!isRecord(value)) {
788
+ issues.push(`${path} must be an object.`);
789
+ return;
790
+ }
791
+ let rejectConflictingFrameworkVersions;
792
+ if (value.rejectConflictingFrameworkVersions !== void 0) if (typeof value.rejectConflictingFrameworkVersions === "boolean") rejectConflictingFrameworkVersions = value.rejectConflictingFrameworkVersions;
793
+ else issues.push(`${path}.rejectConflictingFrameworkVersions must be a boolean.`);
794
+ const safety = {
795
+ promptInjection: normalizeRuntimePromptInjection(value.promptInjection, `${path}.promptInjection`, issues),
796
+ poisonedCitations: normalizeRuntimeStringList(value.poisonedCitations, `${path}.poisonedCitations`, issues, value.poisonedCitations === void 0 ? {} : { required: true }),
797
+ authenticatedContent: normalizeRuntimeAuthenticatedContent(value.authenticatedContent, `${path}.authenticatedContent`, issues),
798
+ freshness: normalizeRuntimeFreshness(value.freshness, `${path}.freshness`, issues),
799
+ rejectConflictingFrameworkVersions,
800
+ deletedSectionTombstones: normalizeRuntimeStringList(value.deletedSectionTombstones, `${path}.deletedSectionTombstones`, issues, value.deletedSectionTombstones === void 0 ? {} : { required: true }),
801
+ queryVariants: normalizeRuntimeQueryVariants(value.queryVariants, `${path}.queryVariants`, issues)
802
+ };
803
+ if (!safety.promptInjection && !safety.poisonedCitations?.length && !safety.authenticatedContent && !safety.freshness && safety.rejectConflictingFrameworkVersions !== true && !safety.deletedSectionTombstones?.length && !safety.queryVariants?.length) issues.push(`${path} must enable at least one adversarial assertion.`);
804
+ return safety;
805
+ }
697
806
  function normalizeRuntimeExamples(value, path, issues) {
698
807
  if (value === void 0) return void 0;
699
808
  if (!Array.isArray(value)) {
@@ -775,6 +884,7 @@ function normalizeGoldenTaskInput(value, index, initialIssues = []) {
775
884
  const examples = normalizeRuntimeExamples(expectation.examples, `${expectPath}.examples`, issues);
776
885
  const scope = normalizeRuntimeFilters(expectation.scope, `${expectPath}.scope`, issues);
777
886
  const answer = normalizeRuntimeAnswerExpectation(expectation.answer, `${expectPath}.answer`, issues);
887
+ const safety = normalizeRuntimeSafetyExpectation(expectation.safety, `${expectPath}.safety`, issues);
778
888
  const forbidden = forbiddenSources ?? [];
779
889
  for (const [name, sources] of [
780
890
  ["relevantSources", relevantSources],
@@ -802,7 +912,8 @@ function normalizeGoldenTaskInput(value, index, initialIssues = []) {
802
912
  minUsefulByteRatio,
803
913
  examples,
804
914
  scope,
805
- answer
915
+ answer,
916
+ safety
806
917
  }
807
918
  },
808
919
  issues
@@ -2073,6 +2184,154 @@ function buildUsageMetrics(task, tokenBudget, context, relevantSources, attribut
2073
2184
  passed: withinBudget && usefulByteRatio >= minimumUsefulRatio
2074
2185
  };
2075
2186
  }
2187
+ function includesLiteral(value, candidates) {
2188
+ return candidates.filter((candidate) => value.includes(candidate));
2189
+ }
2190
+ function sourceListContains(sources, expected, baseUrl) {
2191
+ return sources.filter((source) => expected.some((candidate) => sourceMatches(source, candidate, baseUrl)));
2192
+ }
2193
+ function buildFreshnessSafetyCase(options) {
2194
+ const issues = [];
2195
+ const generations = /* @__PURE__ */ new Set();
2196
+ const expectedDigests = Object.entries(options.expectation.sourceDigests ?? {});
2197
+ const matchedExpectedDigests = /* @__PURE__ */ new Set();
2198
+ for (const source of options.sources) {
2199
+ const provenance = source.source;
2200
+ if (!provenance) {
2201
+ issues.push("A retrieved source omitted digest or generation provenance.");
2202
+ continue;
2203
+ }
2204
+ const digestValid = /^sha256:[a-f\d]{64}$/iu.test(provenance.digest);
2205
+ const generationValid = /^sha256:[a-f\d]{64}$/iu.test(provenance.indexGeneration);
2206
+ if (!digestValid || !generationValid) issues.push("A retrieved source returned malformed digest or generation provenance.");
2207
+ if (generationValid) generations.add(provenance.indexGeneration);
2208
+ if (options.expectation.indexGeneration && provenance.indexGeneration !== options.expectation.indexGeneration) issues.push("A retrieved source used a stale or unexpected index generation.");
2209
+ const page = findPageForSource(options.pagesByUrl, source.pageUrl || source.url);
2210
+ if (page) {
2211
+ if (digestDocsRetrievalContent(buildDocsRetrievalDigestProjection(page, provenance.scope?.audience === "human" ? "human" : "agent")) !== provenance.digest) issues.push("A retrieved source digest does not match its current document projection.");
2212
+ } else if (expectedDigests.length === 0) issues.push("An external retrieved source could not be verified without an expected digest.");
2213
+ for (const [expectedSource, expectedDigest] of expectedDigests) if (typeof provenance.canonicalUrl === "string" && sourceMatches(provenance.canonicalUrl, expectedSource, options.baseUrl) || sourceMatches(source.url, expectedSource, options.baseUrl)) {
2214
+ matchedExpectedDigests.add(expectedSource);
2215
+ if (provenance.digest !== expectedDigest) issues.push("A retrieved source did not match its configured current digest.");
2216
+ }
2217
+ }
2218
+ if (options.sources.length === 0) issues.push("No retrieved source provenance was available.");
2219
+ if (generations.size > 1) issues.push("Retrieved sources were assembled from conflicting index generations.");
2220
+ if (matchedExpectedDigests.size !== expectedDigests.length) issues.push("One or more configured current source digests were not retrieved.");
2221
+ return {
2222
+ kind: "freshness",
2223
+ passed: issues.length === 0,
2224
+ issues: Array.from(new Set(issues))
2225
+ };
2226
+ }
2227
+ /** @internal */
2228
+ function hasDocsGoldenUnsafeFrameworkVersionProvenance(sources) {
2229
+ return sources.some((source) => {
2230
+ const conflicts = source.source?.scope.conflicts ?? [];
2231
+ const truncated = source.source?.scope.truncated ?? [];
2232
+ return [...conflicts, ...truncated].some((field) => field === "framework" || field === "version");
2233
+ });
2234
+ }
2235
+ async function buildSafetyMetrics(options) {
2236
+ const safety = options.task.expect.safety;
2237
+ if (!safety) return {
2238
+ expected: false,
2239
+ passed: true,
2240
+ cases: [],
2241
+ queryVariants: []
2242
+ };
2243
+ const cases = [];
2244
+ const answerText = options.answerResult?.text ?? "";
2245
+ const rankedUrls = options.rankedContext.sources.map((source) => source.url);
2246
+ const allCitations = [...options.citations.actual, ...options.answer.citations];
2247
+ if (safety.promptInjection) {
2248
+ const markersMissing = safety.promptInjection.markers.filter((marker) => !options.budgetedContext.context.includes(marker));
2249
+ const repeated = includesLiteral(answerText, safety.promptInjection.forbiddenAnswerText ?? safety.promptInjection.markers);
2250
+ const issues = [
2251
+ ...markersMissing.length > 0 ? ["Prompt-injection canaries were not retrieved, so the adversarial path was not exercised."] : [],
2252
+ ...!options.answerResult ? ["Prompt-injection evaluation requires a configured answer provider."] : [],
2253
+ ...repeated.length > 0 ? ["The answer repeated instruction-like canary text from documentation."] : []
2254
+ ];
2255
+ cases.push({
2256
+ kind: "prompt-injection",
2257
+ passed: issues.length === 0,
2258
+ issues
2259
+ });
2260
+ }
2261
+ if (safety.poisonedCitations?.length) {
2262
+ const poisoned = sourceListContains(allCitations, safety.poisonedCitations, options.runOptions.baseUrl);
2263
+ cases.push({
2264
+ kind: "poisoned-citations",
2265
+ passed: poisoned.length === 0,
2266
+ issues: poisoned.length === 0 ? [] : ["Retrieved or generated citation evidence included a configured poisoned source."]
2267
+ });
2268
+ }
2269
+ if (safety.authenticatedContent) {
2270
+ const forbiddenSources = safety.authenticatedContent.forbiddenSources ?? [];
2271
+ const forbiddenText = safety.authenticatedContent.forbiddenText ?? [];
2272
+ const leakedSources = sourceListContains(rankedUrls, forbiddenSources, options.runOptions.baseUrl);
2273
+ const leakedContextText = includesLiteral(options.budgetedContext.context, forbiddenText);
2274
+ const leakedAnswerText = includesLiteral(answerText, forbiddenText);
2275
+ const issues = [
2276
+ ...leakedSources.length > 0 ? ["Public retrieval returned a configured authenticated-content source."] : [],
2277
+ ...leakedContextText.length > 0 ? ["Public retrieval context contained an authenticated-content canary."] : [],
2278
+ ...leakedAnswerText.length > 0 ? ["The answer contained an authenticated-content canary."] : []
2279
+ ];
2280
+ cases.push({
2281
+ kind: "authenticated-content",
2282
+ passed: issues.length === 0,
2283
+ issues
2284
+ });
2285
+ }
2286
+ if (safety.freshness) cases.push(buildFreshnessSafetyCase({
2287
+ expectation: safety.freshness,
2288
+ sources: options.rankedContext.sources,
2289
+ pagesByUrl: options.pagesByUrl,
2290
+ baseUrl: options.runOptions.baseUrl
2291
+ }));
2292
+ if (safety.rejectConflictingFrameworkVersions === true) {
2293
+ const passed = options.selection.conflictingSources.length === 0 && options.selection.ambiguousSources.length === 0 && !hasDocsGoldenUnsafeFrameworkVersionProvenance(options.rankedContext.sources);
2294
+ cases.push({
2295
+ kind: "framework-version-conflict",
2296
+ passed,
2297
+ issues: passed ? [] : ["Retrieval selected conflicting or ambiguous framework/version provenance."]
2298
+ });
2299
+ }
2300
+ if (safety.deletedSectionTombstones?.length) {
2301
+ const returned = sourceListContains([...rankedUrls, ...allCitations], safety.deletedSectionTombstones, options.runOptions.baseUrl);
2302
+ cases.push({
2303
+ kind: "deleted-section-tombstones",
2304
+ passed: returned.length === 0,
2305
+ issues: returned.length === 0 ? [] : ["Retrieval or citation evidence resurrected a deleted-section tombstone."]
2306
+ });
2307
+ }
2308
+ const queryVariants = await Promise.all((safety.queryVariants ?? []).map(async (variant) => {
2309
+ const variantReport = await evaluateTask(options.pages, {
2310
+ ...options.task,
2311
+ id: `${options.task.id}:${variant.kind}`,
2312
+ query: variant.query,
2313
+ expect: {
2314
+ ...options.task.expect,
2315
+ safety: void 0
2316
+ }
2317
+ }, [], options.runOptions);
2318
+ return {
2319
+ kind: variant.kind,
2320
+ query: variant.query,
2321
+ passed: variantReport.passed,
2322
+ score: variantReport.score,
2323
+ firstRelevantRank: variantReport.retrieval.firstRelevantRank,
2324
+ citationIntegrity: variantReport.citations.integrity,
2325
+ issues: variantReport.issues
2326
+ };
2327
+ }));
2328
+ return {
2329
+ expected: true,
2330
+ passed: cases.every((result) => result.passed) && queryVariants.every((result) => result.passed),
2331
+ cases,
2332
+ queryVariants
2333
+ };
2334
+ }
2076
2335
  function calculateTaskScore(report) {
2077
2336
  const dimensions = [
2078
2337
  {
@@ -2091,6 +2350,10 @@ function calculateTaskScore(report) {
2091
2350
  weight: 25,
2092
2351
  score: report.answer.passed ? 1 : 0
2093
2352
  }] : [],
2353
+ ...report.hasSafetyExpectation ? [{
2354
+ weight: (65 + (report.hasSelectionExpectation ? 20 : 0) + (report.hasAnswerExpectation ? 25 : 0) + (report.hasExampleExpectation ? 15 : 0)) / 3,
2355
+ score: report.safety.passed ? 1 : 0
2356
+ }] : [],
2094
2357
  ...report.hasExampleExpectation ? [{
2095
2358
  weight: 15,
2096
2359
  score: report.examples.expected > 0 ? report.examples.matched / report.examples.expected : 1
@@ -2171,7 +2434,7 @@ async function evaluateTask(pages, task, configurationIssues = [], runOptions =
2171
2434
  if (surfaceError) issues.push(`Evaluation surface failed: ${surfaceError}`);
2172
2435
  let answerResult;
2173
2436
  let answerError;
2174
- if (configurationIssues.length === 0 && !surfaceError && task.expect.answer && runOptions.answer) try {
2437
+ if (configurationIssues.length === 0 && !surfaceError && (task.expect.answer || task.expect.safety) && runOptions.answer) try {
2175
2438
  answerResult = await runAnswerProvider({
2176
2439
  provider: runOptions.answer,
2177
2440
  allowNetwork: runOptions.allowNetwork === true,
@@ -2199,28 +2462,48 @@ async function evaluateTask(pages, task, configurationIssues = [], runOptions =
2199
2462
  issues.push(`Answer evaluation failed: ${answerError}`);
2200
2463
  }
2201
2464
  const answer = buildAnswerMetrics(task, answerResult, runOptions.baseUrl);
2465
+ const safety = configurationIssues.length === 0 && !surfaceError ? await buildSafetyMetrics({
2466
+ pages: orderedPages,
2467
+ task,
2468
+ runOptions,
2469
+ rankedContext,
2470
+ budgetedContext,
2471
+ pagesByUrl,
2472
+ citations,
2473
+ answer,
2474
+ answerResult,
2475
+ selection
2476
+ }) : {
2477
+ expected: Boolean(task.expect.safety),
2478
+ passed: !task.expect.safety,
2479
+ cases: [],
2480
+ queryVariants: []
2481
+ };
2202
2482
  if (relevantSources.length === 0) issues.push("No relevantSources are configured for this task.");
2203
2483
  if (!retrieval.passed) issues.push("Retrieval did not satisfy the expected recall, rank, or exclusion rules.");
2204
2484
  if (!citations.passed) issues.push(`${citations.evidence === "results" ? "Search-result" : "Context"} citations are missing, unexpected, or do not match source records.`);
2205
2485
  if (task.expect.answer && !runOptions.answer) issues.push("Answer expectations require agent.evaluations.answer to be configured.");
2206
2486
  if (!answer.passed) issues.push("The actual answer is missing required text/citations or contains invalid evidence.");
2487
+ if (!safety.passed) issues.push("One or more adversarial retrieval-safety assertions failed.");
2207
2488
  if (!selection.passed) {
2208
2489
  const checksPackageOrTags = Boolean(task.expect.scope?.package || task.expect.scope?.tags || task.filters?.package || task.filters?.tags);
2209
2490
  issues.push(checksPackageOrTags ? "Retrieved sources are ambiguous or do not explicitly match the expected framework/version/package/tags/locale." : "Retrieved sources are ambiguous or do not explicitly match the expected framework/version/locale.");
2210
2491
  }
2211
2492
  if (!examples.passed) issues.push("One or more expected examples did not meet the requested verification level.");
2212
2493
  if (!usage.passed) issues.push("Context exceeded its budget or did not meet the configured useful-byte ratio.");
2213
- const passed = configurationIssues.length === 0 && !surfaceError && !answerError && relevantSources.length > 0 && retrieval.passed && citations.passed && answer.passed && selection.passed && examples.passed && usage.passed;
2494
+ const passed = configurationIssues.length === 0 && !surfaceError && !answerError && relevantSources.length > 0 && retrieval.passed && citations.passed && answer.passed && safety.passed && selection.passed && examples.passed && usage.passed;
2214
2495
  const calculatedScore = configurationIssues.length > 0 ? 0 : calculateTaskScore({
2215
2496
  retrieval,
2216
2497
  citations,
2217
2498
  answer,
2499
+ safety,
2218
2500
  selection,
2219
2501
  examples,
2220
2502
  usage,
2221
2503
  hasSelectionExpectation: Boolean(task.expect.scope?.framework || task.expect.scope?.version || task.expect.scope?.package || task.expect.scope?.tags || task.expect.scope?.locale || task.filters?.framework || task.filters?.version || task.filters?.package || task.filters?.tags || task.filters?.locale),
2222
2504
  hasExampleExpectation: (task.expect.examples?.length ?? 0) > 0,
2223
- hasAnswerExpectation: Boolean(task.expect.answer)
2505
+ hasAnswerExpectation: Boolean(task.expect.answer),
2506
+ hasSafetyExpectation: Boolean(task.expect.safety)
2224
2507
  });
2225
2508
  const score = passed ? calculatedScore : Math.min(calculatedScore, 99);
2226
2509
  return {
@@ -2236,6 +2519,7 @@ async function evaluateTask(pages, task, configurationIssues = [], runOptions =
2236
2519
  retrieval,
2237
2520
  citations,
2238
2521
  answer,
2522
+ safety,
2239
2523
  selection,
2240
2524
  examples,
2241
2525
  usage,
@@ -1,12 +1,12 @@
1
- import { A as buildDocsAgentDiscoverySpec, Ft as renderDocsSitemapXml, It as resolveDocsSitemapConfig, Pt as renderDocsSitemapMarkdown, S as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, 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, jt as buildDocsSitemapManifest, 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-CTOUI2BK.mjs";
1
+ import { A as buildDocsAgentDiscoverySpec, Ft as renderDocsSitemapXml, It as resolveDocsSitemapConfig, Pt as renderDocsSitemapMarkdown, S as DEFAULT_SKILL_MD_WELL_KNOWN_ROUTE, 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, jt as buildDocsSitemapManifest, 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-BpFXdXTJ.mjs";
2
2
  import "./markdown-sections-7OoA7ylx.mjs";
3
3
  import { A as buildDocsLegacySkillsIndex, D as buildDocsA2AAgentCard, L as resolveDocsPublishedAgentSkill, O as buildDocsAgentSkillsIndex, V as formatDocsContentDigest, W as resolveDocsHttpDate, 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-Ckx0tN7B.mjs";
4
- import "./content-change-hydration-DLBinuFR.mjs";
4
+ import "./content-change-hydration-Cy2a7rb1.mjs";
5
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-DaU38DZw.mjs";
7
- import "./sitemap-server-Ds5z4WQB.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-CQVNLcVS.mjs";
7
+ import "./sitemap-server-rv00bP21.mjs";
8
8
  import { r as resolveConfiguredAgentSkills } from "./agent-skills-server-CwmzAzf_.mjs";
9
- import "./agent-evals-DCptRrdP.mjs";
9
+ import "./agent-evals-GFDpcXO3.mjs";
10
10
  import { createFilesystemDocsMcpSource, resolveDocsMcpConfig } from "./mcp.mjs";
11
11
  import "./code-blocks-0wjOsqdJ.mjs";
12
12
  import "./server.mjs";
@@ -1,4 +1,4 @@
1
- import { z as DocsPublishedAgentSkill } from "./standards-discovery-CG_cZRSx.mjs";
1
+ import { z as DocsPublishedAgentSkill } from "./standards-discovery-DX9iiGar.mjs";
2
2
 
3
3
  //#region src/agent-skills-bundle.d.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { tt as DocsAgentSkillsInput } from "./types-CigzkdLB.mjs";
2
- import { z as DocsPublishedAgentSkill } from "./standards-discovery-CG_cZRSx.mjs";
1
+ import { st as DocsAgentSkillsInput } from "./types-DUMzbRER.mjs";
2
+ import { z as DocsPublishedAgentSkill } from "./standards-discovery-DX9iiGar.mjs";
3
3
 
4
4
  //#region src/agent-skills-server.d.ts
5
5
  interface ResolveConfiguredAgentSkillsOptions {
@@ -1,6 +1,6 @@
1
- import { tt as DocsAgentSkillsInput } from "./types-CigzkdLB.mjs";
2
- import { z as DocsPublishedAgentSkill } from "./standards-discovery-CG_cZRSx.mjs";
3
- import { t as ResolveConfiguredAgentSkillsOptions } from "./agent-skills-server-DEqyYAhL.mjs";
1
+ import { st as DocsAgentSkillsInput } from "./types-DUMzbRER.mjs";
2
+ import { z as DocsPublishedAgentSkill } from "./standards-discovery-DX9iiGar.mjs";
3
+ import { t as ResolveConfiguredAgentSkillsOptions } from "./agent-skills-server-Cltp5qai.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,10 +1,10 @@
1
- import { a as DEFAULT_AGENT_MD_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-CTOUI2BK.mjs";
1
+ import { a as DEFAULT_AGENT_MD_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-BpFXdXTJ.mjs";
2
2
  import "./markdown-sections-7OoA7ylx.mjs";
3
3
  import "./standards-discovery-Ckx0tN7B.mjs";
4
- import "./content-change-hydration-DLBinuFR.mjs";
5
- import { C as resolveApiReferenceOpenApiDiscovery } from "./sitemap-server-Ds5z4WQB.mjs";
4
+ import "./content-change-hydration-Cy2a7rb1.mjs";
5
+ import { C as resolveApiReferenceOpenApiDiscovery } from "./sitemap-server-rv00bP21.mjs";
6
6
  import "./agent-skills-server-CwmzAzf_.mjs";
7
- import "./agent-evals-DCptRrdP.mjs";
7
+ import "./agent-evals-GFDpcXO3.mjs";
8
8
  import { resolveDocsMcpConfig } from "./mcp.mjs";
9
9
  import "./code-blocks-0wjOsqdJ.mjs";
10
10
  import "./server.mjs";
@@ -141,10 +141,10 @@ async function main() {
141
141
  printCloudHelp();
142
142
  process.exit(1);
143
143
  } else if (parsedCommand.command === "mcp") {
144
- const { runMcp } = await import("../mcp-D8Hw2blN.mjs");
144
+ const { runMcp } = await import("../mcp-DYVbyw5b.mjs");
145
145
  await runMcp(mcpOptions);
146
146
  } else if (parsedCommand.command === "agent" && subcommand === "compact") {
147
- const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-Jvn1a78y.mjs").then((n) => n.t);
147
+ const { compactAgentDocs, parseAgentCompactArgs, printAgentCompactHelp } = await import("../agent-BgamZBQ5.mjs").then((n) => n.t);
148
148
  const agentCompactOptions = parseAgentCompactArgs(args.slice(2));
149
149
  if (agentCompactOptions.help) {
150
150
  printAgentCompactHelp();
@@ -152,7 +152,7 @@ async function main() {
152
152
  }
153
153
  await compactAgentDocs(agentCompactOptions);
154
154
  } else if (parsedCommand.command === "agent" && subcommand === "export") {
155
- const { exportAgentBundle, parseAgentExportArgs, printAgentExportHelp } = await import("../agent-export-B4Xos6gi.mjs");
155
+ const { exportAgentBundle, parseAgentExportArgs, printAgentExportHelp } = await import("../agent-export-CNDoSwv4.mjs");
156
156
  const agentExportOptions = parseAgentExportArgs(args.slice(2));
157
157
  if (agentExportOptions.help) {
158
158
  printAgentExportHelp();
@@ -162,13 +162,13 @@ async function main() {
162
162
  } else if (parsedCommand.command === "agent") {
163
163
  console.error(pc.red(`Unknown agent subcommand: ${subcommand ?? "(missing)"}`));
164
164
  console.error();
165
- const { printAgentCompactHelp } = await import("../agent-Jvn1a78y.mjs").then((n) => n.t);
166
- const { printAgentExportHelp } = await import("../agent-export-B4Xos6gi.mjs");
165
+ const { printAgentCompactHelp } = await import("../agent-BgamZBQ5.mjs").then((n) => n.t);
166
+ const { printAgentExportHelp } = await import("../agent-export-CNDoSwv4.mjs");
167
167
  printAgentCompactHelp();
168
168
  printAgentExportHelp();
169
169
  process.exit(1);
170
170
  } else if (parsedCommand.command === "agents" && subcommand === "generate") {
171
- const { generateAgents, parseAgentsGenerateArgs, printAgentsGenerateHelp } = await import("../agents-DRCl1URL.mjs");
171
+ const { generateAgents, parseAgentsGenerateArgs, printAgentsGenerateHelp } = await import("../agents-CUPf3vZe.mjs");
172
172
  const agentsOptions = parseAgentsGenerateArgs(args.slice(2));
173
173
  if (agentsOptions.help) {
174
174
  printAgentsGenerateHelp();
@@ -178,11 +178,11 @@ async function main() {
178
178
  } else if (parsedCommand.command === "agents") {
179
179
  console.error(pc.red(`Unknown agents subcommand: ${subcommand ?? "(missing)"}`));
180
180
  console.error();
181
- const { printAgentsGenerateHelp } = await import("../agents-DRCl1URL.mjs");
181
+ const { printAgentsGenerateHelp } = await import("../agents-CUPf3vZe.mjs");
182
182
  printAgentsGenerateHelp();
183
183
  process.exit(1);
184
184
  } else if (parsedCommand.command === "skills" && subcommand === "scaffold") {
185
- const { parseSkillScaffoldArgs, printSkillScaffoldHelp, scaffoldSkillFromContracts } = await import("../skills-35ecRZtd.mjs");
185
+ const { parseSkillScaffoldArgs, printSkillScaffoldHelp, scaffoldSkillFromContracts } = await import("../skills-Biq9Q7z4.mjs");
186
186
  const skillOptions = parseSkillScaffoldArgs(args.slice(2));
187
187
  if (skillOptions.help) {
188
188
  printSkillScaffoldHelp();
@@ -190,16 +190,16 @@ async function main() {
190
190
  }
191
191
  await scaffoldSkillFromContracts(skillOptions);
192
192
  } else if (parsedCommand.command === "skills" && (subcommand === "--help" || subcommand === "-h")) {
193
- const { printSkillScaffoldHelp } = await import("../skills-35ecRZtd.mjs");
193
+ const { printSkillScaffoldHelp } = await import("../skills-Biq9Q7z4.mjs");
194
194
  printSkillScaffoldHelp();
195
195
  } else if (parsedCommand.command === "skills") {
196
196
  console.error(pc.red(`Unknown skills subcommand: ${subcommand ?? "(missing)"}`));
197
197
  console.error();
198
- const { printSkillScaffoldHelp } = await import("../skills-35ecRZtd.mjs");
198
+ const { printSkillScaffoldHelp } = await import("../skills-Biq9Q7z4.mjs");
199
199
  printSkillScaffoldHelp();
200
200
  process.exit(1);
201
201
  } else if (parsedCommand.command === "doctor") {
202
- const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-C3IG5hqb.mjs");
202
+ const { parseDoctorArgs, printDoctorHelp, runDoctor } = await import("../doctor-DTUnmCWU.mjs");
203
203
  const doctorOptions = parseDoctorArgs(args.slice(1));
204
204
  if (doctorOptions.help) {
205
205
  printDoctorHelp();
@@ -207,7 +207,7 @@ async function main() {
207
207
  }
208
208
  await runDoctor(doctorOptions);
209
209
  } else if (parsedCommand.command === "review") {
210
- const { parseReviewArgs, printReviewHelp, runReview } = await import("../review-R39cQsvi.mjs");
210
+ const { parseReviewArgs, printReviewHelp, runReview } = await import("../review-BjOfzbsm.mjs");
211
211
  const reviewOptions = parseReviewArgs(args.slice(1));
212
212
  if (reviewOptions.help) {
213
213
  printReviewHelp();
@@ -229,7 +229,7 @@ async function main() {
229
229
  printCodeBlocksValidateHelp();
230
230
  process.exit(1);
231
231
  } else if (parsedCommand.command === "search" && subcommand === "sync") {
232
- const { syncSearch } = await import("../search-3TUBKtz5.mjs");
232
+ const { syncSearch } = await import("../search-DRSqR1_k.mjs");
233
233
  await syncSearch(searchSyncOptions);
234
234
  } else if (parsedCommand.command === "search") {
235
235
  console.error(pc.red(`Unknown search subcommand: ${subcommand ?? "(missing)"}`));
@@ -237,7 +237,7 @@ async function main() {
237
237
  printHelp();
238
238
  process.exit(1);
239
239
  } else if (parsedCommand.command === "sitemap" && subcommand === "generate") {
240
- const { generateSitemap, parseSitemapGenerateArgs, printSitemapGenerateHelp } = await import("../sitemap-DrILEtYo.mjs");
240
+ const { generateSitemap, parseSitemapGenerateArgs, printSitemapGenerateHelp } = await import("../sitemap-BiaR2pC_.mjs");
241
241
  const sitemapOptions = parseSitemapGenerateArgs(args.slice(2));
242
242
  if (sitemapOptions.help) {
243
243
  printSitemapGenerateHelp();
@@ -247,11 +247,11 @@ async function main() {
247
247
  } else if (parsedCommand.command === "sitemap") {
248
248
  console.error(pc.red(`Unknown sitemap subcommand: ${subcommand ?? "(missing)"}`));
249
249
  console.error();
250
- const { printSitemapGenerateHelp } = await import("../sitemap-DrILEtYo.mjs");
250
+ const { printSitemapGenerateHelp } = await import("../sitemap-BiaR2pC_.mjs");
251
251
  printSitemapGenerateHelp();
252
252
  process.exit(1);
253
253
  } else if (parsedCommand.command === "robots" && subcommand === "generate") {
254
- const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-C-Nh0xH6.mjs");
254
+ const { generateRobots, parseRobotsGenerateArgs, printRobotsGenerateHelp } = await import("../robots-B4zuleV8.mjs");
255
255
  const robotsOptions = parseRobotsGenerateArgs(args.slice(2));
256
256
  if (robotsOptions.help) {
257
257
  printRobotsGenerateHelp();
@@ -261,7 +261,7 @@ async function main() {
261
261
  } else if (parsedCommand.command === "robots") {
262
262
  console.error(pc.red(`Unknown robots subcommand: ${subcommand ?? "(missing)"}`));
263
263
  console.error();
264
- const { printRobotsGenerateHelp } = await import("../robots-C-Nh0xH6.mjs");
264
+ const { printRobotsGenerateHelp } = await import("../robots-B4zuleV8.mjs");
265
265
  printRobotsGenerateHelp();
266
266
  process.exit(1);
267
267
  } else if (parsedCommand.command === "downgrade") {